@sjcrh/proteinpaint-client 2.181.0 → 2.182.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 (950) hide show
  1. package/dist/2dmaf-SLBAWGPG.js +1371 -0
  2. package/dist/AIProjectAdmin-6SH5X3AF.js +830 -0
  3. package/dist/AppHeader-MVYNRMC7.js +833 -0
  4. package/dist/BoxPlot-HLGWW3IK.js +1295 -0
  5. package/dist/CorrelationVolcano-TZCYC3NI.js +617 -0
  6. package/dist/DE-2J2SK5UT.js +93 -0
  7. package/dist/DE-2J2SK5UT.js.map +7 -0
  8. package/dist/DEinput-QM3GOQHM.js +297 -0
  9. package/dist/DEinput-QM3GOQHM.js.map +7 -0
  10. package/dist/DifferentialAnalysis-DS7CQOT6.js +238 -0
  11. package/dist/Disco-U5I6NJUT.js +3199 -0
  12. package/dist/Disco.UI-J2B7GGEZ.js +242 -0
  13. package/dist/DmrPlot-D5W76QPY.js +640 -0
  14. package/dist/GB-LM5SGUG4.js +1125 -0
  15. package/dist/HicApp-YNBGAGKM.js +2248 -0
  16. package/dist/NumBinaryEditor-4QA5DQJT.js +268 -0
  17. package/dist/NumBinaryEditor-4QA5DQJT.js.map +7 -0
  18. package/dist/NumBinaryEditor.unit.spec-YWSIFTOJ.js +284 -0
  19. package/dist/NumContEditor-ZPLVZFLH.js +105 -0
  20. package/dist/NumContEditor.unit.spec-NBCFOCOX.js +167 -0
  21. package/dist/NumCustomBinEditor-TXEYRVPL.js +36 -0
  22. package/dist/NumCustomBinEditor.unit.spec-SQM63H4B.js +282 -0
  23. package/dist/NumDiscreteEditor-6C4OWX62.js +177 -0
  24. package/dist/NumDiscreteEditor-6C4OWX62.js.map +7 -0
  25. package/dist/NumDiscreteEditor.unit.spec-4HC4AGAM.js +200 -0
  26. package/dist/NumRegularBinEditor-VQAS3OXK.js +36 -0
  27. package/dist/NumRegularBinEditor.unit.spec-RGVEPB3Z.js +225 -0
  28. package/dist/NumSplineEditor-SXOJICHU.js +190 -0
  29. package/dist/NumSplineEditor-SXOJICHU.js.map +7 -0
  30. package/dist/NumSplineEditor.unit.spec-HF5E6ANH.js +197 -0
  31. package/dist/NumericDensity-LMLPMOSE.js +36 -0
  32. package/dist/NumericDensity.unit.spec-3ZI5EVON.js +219 -0
  33. package/dist/NumericHandler-Q6F6ANOS.js +37 -0
  34. package/dist/NumericHandler.unit.spec-E6Z5HUNZ.js +217 -0
  35. package/dist/RunChart2-XSNWNAIL.js +756 -0
  36. package/dist/SC-RA46YM57.js +733 -0
  37. package/dist/Volcano-75UDYPVB.js +1187 -0
  38. package/dist/WSIViewer-GYUUXCSJ.js +47933 -0
  39. package/dist/WsiSamplesPlot-KMI5S2EL.js +163 -0
  40. package/dist/adSandbox-JTK5XEQL.js +36 -0
  41. package/dist/alphaGenome-JRAV6WIY.js +173 -0
  42. package/dist/app-JKDZL23V.js +35 -0
  43. package/dist/app-OEARXM6E.js +47 -0
  44. package/dist/app.js +20 -20
  45. package/dist/bam-CYEPLBK4.js +857 -0
  46. package/dist/bam-CYEPLBK4.js.map +7 -0
  47. package/dist/barchart-GG5UFDG4.js +45 -0
  48. package/dist/barchart.data-KXA66FAL.js +22 -0
  49. package/dist/barchart.events-P2USOIR7.js +45 -0
  50. package/dist/barchart.integration.spec-5QSPQQLJ.js +1675 -0
  51. package/dist/block-6DVPQBSH.js +6200 -0
  52. package/dist/block-6DVPQBSH.js.map +7 -0
  53. package/dist/block.init-ZHX6DFWF.js +36 -0
  54. package/dist/block.mds.expressionrank-YMGYXXYT.js +357 -0
  55. package/dist/block.mds.geneboxplot-IAILQYX4.js +826 -0
  56. package/dist/block.mds.junction-BRNFNQMU.js +1543 -0
  57. package/dist/block.mds.svcnv-OHKC7YPO.js +6799 -0
  58. package/dist/block.svg-PNGK45HW.js +162 -0
  59. package/dist/block.tk.aicheck-SCIOJ4WN.js +281 -0
  60. package/dist/block.tk.ase-BABJ73GG.js +363 -0
  61. package/dist/block.tk.bam-LZWJ5BCQ.js +1904 -0
  62. package/dist/block.tk.bedgraphdot-7NQLC3XJ.js +382 -0
  63. package/dist/block.tk.bigwig.ui-VNY4SFD5.js +209 -0
  64. package/dist/block.tk.hicstraw-36A7VDRM.js +821 -0
  65. package/dist/block.tk.junction-D373YEMK.js +2362 -0
  66. package/dist/block.tk.junction.textmatrixui-FFII7J3X.js +197 -0
  67. package/dist/block.tk.ld-XGB6KMDO.js +97 -0
  68. package/dist/block.tk.menu-PEZANZBZ.js +1027 -0
  69. package/dist/block.tk.pgv-MU5BPTT2.js +942 -0
  70. package/dist/brainImaging-LVJON47N.js +421 -0
  71. package/dist/chat-5FDIAQJ4.js +148 -0
  72. package/dist/chunk-22NJUYET.js +281 -0
  73. package/dist/chunk-22NJUYET.js.map +7 -0
  74. package/dist/chunk-2J3566TA.js +215 -0
  75. package/dist/chunk-2J3566TA.js.map +7 -0
  76. package/dist/chunk-2OSEZCWZ.js +205 -0
  77. package/dist/chunk-5OHXYXLD.js +46 -0
  78. package/dist/chunk-5OHXYXLD.js.map +7 -0
  79. package/dist/chunk-6MSCYO7K.js +119 -0
  80. package/dist/chunk-7A7NMCQ3.js +534 -0
  81. package/dist/chunk-7FEHI46K.js +20456 -0
  82. package/dist/chunk-7FEHI46K.js.map +7 -0
  83. package/dist/chunk-AETE4F7R.js +252 -0
  84. package/dist/chunk-AZYDW5T7.js +441 -0
  85. package/dist/chunk-B6HCIAM3.js +34 -0
  86. package/dist/chunk-BEWDIM6H.js +42 -0
  87. package/dist/chunk-BEWDIM6H.js.map +7 -0
  88. package/dist/chunk-CCIZJAXB.js +2815 -0
  89. package/dist/chunk-DHZL3FBC.js +107 -0
  90. package/dist/chunk-DONWY7TP.js +39 -0
  91. package/dist/chunk-DVDDXOWT.js +815 -0
  92. package/dist/chunk-E6DRQJJT.js +480 -0
  93. package/dist/chunk-ESKU6LNC.js +36 -0
  94. package/dist/chunk-F6V4AYWP.js +177 -0
  95. package/dist/chunk-FBAJTPBU.js +302 -0
  96. package/dist/chunk-FGMPKWT5.js +371 -0
  97. package/dist/chunk-FK4MYVW2.js +261 -0
  98. package/dist/chunk-FMBJ4SKC.js +98 -0
  99. package/dist/chunk-FOEZG4VX.js +505 -0
  100. package/dist/chunk-FOEZG4VX.js.map +7 -0
  101. package/dist/chunk-FQRLSKJC.js +226 -0
  102. package/dist/chunk-G6ELKVBG.js +629 -0
  103. package/dist/chunk-GKK3CZ6H.js +4207 -0
  104. package/dist/chunk-GKK3CZ6H.js.map +7 -0
  105. package/dist/chunk-GO5SIPFE.js +194 -0
  106. package/dist/chunk-GPOECA3V.js +386 -0
  107. package/dist/chunk-GTOY3JJO.js +288 -0
  108. package/dist/chunk-GTOY3JJO.js.map +7 -0
  109. package/dist/chunk-GW7DHJYH.js +439 -0
  110. package/dist/chunk-H2D7EVUA.js +158 -0
  111. package/dist/chunk-H2D7EVUA.js.map +7 -0
  112. package/dist/chunk-H2K5KZP7.js +95 -0
  113. package/dist/chunk-H5XFH3FV.js +153 -0
  114. package/dist/chunk-HAMDFQIX.js +228 -0
  115. package/dist/chunk-HH4QLSTK.js +4952 -0
  116. package/dist/chunk-IBTPGSYI.js +526 -0
  117. package/dist/chunk-IGEQI6MR.js +1561 -0
  118. package/dist/chunk-IGEQI6MR.js.map +7 -0
  119. package/dist/chunk-IIRU6VK2.js +2672 -0
  120. package/dist/chunk-ILF2GKBY.js +1205 -0
  121. package/dist/chunk-ILF2GKBY.js.map +7 -0
  122. package/dist/chunk-IP4T477W.js +92 -0
  123. package/dist/chunk-IQIXGTQV.js +84 -0
  124. package/dist/chunk-IQIXGTQV.js.map +7 -0
  125. package/dist/chunk-IXT4U5CE.js +91 -0
  126. package/dist/chunk-IXT4U5CE.js.map +7 -0
  127. package/dist/chunk-JHOGX5VE.js +272 -0
  128. package/dist/chunk-JOXUBWN3.js +381 -0
  129. package/dist/chunk-K57RR3FD.js +142 -0
  130. package/dist/chunk-K6JLCMVL.js +129 -0
  131. package/dist/chunk-KSFSM46X.js +100 -0
  132. package/dist/chunk-KVG7FTTK.js +470 -0
  133. package/dist/chunk-LEDPPLQK.js +158 -0
  134. package/dist/chunk-LUTT3MBZ.js +1150 -0
  135. package/dist/chunk-MDL2HG3N.js +257 -0
  136. package/dist/chunk-MDL2HG3N.js.map +7 -0
  137. package/dist/chunk-MNRYCG2S.js +1271 -0
  138. package/dist/chunk-MNRYCG2S.js.map +7 -0
  139. package/dist/chunk-MPJHDHBA.js +2784 -0
  140. package/dist/chunk-MXI3NXRB.js +407 -0
  141. package/dist/chunk-MXI3NXRB.js.map +7 -0
  142. package/dist/chunk-O4PXELXF.js +615 -0
  143. package/dist/chunk-ORPCSG6T.js +14 -0
  144. package/dist/chunk-OUKDZKSZ.js +334 -0
  145. package/dist/chunk-P5HLYAHP.js +1087 -0
  146. package/dist/chunk-PIACSJPH.js +148 -0
  147. package/dist/chunk-PQABAAEZ.js +31 -0
  148. package/dist/chunk-PSMDCZET.js +46 -0
  149. package/dist/chunk-RFIVPTMS.js +217 -0
  150. package/dist/chunk-RSU37SVQ.js +54 -0
  151. package/dist/chunk-RTC4U4PH.js +2327 -0
  152. package/dist/chunk-RTC4U4PH.js.map +7 -0
  153. package/dist/chunk-RZ5JP44H.js +276 -0
  154. package/dist/chunk-RZ5JP44H.js.map +7 -0
  155. package/dist/chunk-SPAIFVM2.js +1155 -0
  156. package/dist/chunk-T2HYA2KL.js +55 -0
  157. package/dist/chunk-TCPU43TU.js +1741 -0
  158. package/dist/chunk-TCPU43TU.js.map +7 -0
  159. package/dist/chunk-TE3DK3A6.js +147 -0
  160. package/dist/chunk-TIQPSXFJ.js +237 -0
  161. package/dist/chunk-TN5GSG34.js +26 -0
  162. package/dist/chunk-UBGTQMOO.js +52 -0
  163. package/dist/chunk-UE5ZYM63.js +48 -0
  164. package/dist/chunk-UQACPOCM.js +102 -0
  165. package/dist/chunk-UR3C4SCH.js +446 -0
  166. package/dist/chunk-UWX7W22M.js +121 -0
  167. package/dist/chunk-VJ37HKM6.js +368 -0
  168. package/dist/chunk-VJ37HKM6.js.map +7 -0
  169. package/dist/chunk-VLTDUJRM.js +293 -0
  170. package/dist/chunk-W6UUEAEP.js +6364 -0
  171. package/dist/chunk-X6UPDFDX.js +229 -0
  172. package/dist/chunk-X6UPDFDX.js.map +7 -0
  173. package/dist/chunk-XD6BFNMR.js +172 -0
  174. package/dist/chunk-XD6BFNMR.js.map +7 -0
  175. package/dist/chunk-XOBD3EAM.js +1425 -0
  176. package/dist/chunk-XOBD3EAM.js.map +7 -0
  177. package/dist/chunk-Y3TDC7NU.js +170 -0
  178. package/dist/chunk-YOTWMCT5.js +824 -0
  179. package/dist/chunk-YUMPQ3CJ.js +203 -0
  180. package/dist/chunk-ZIBWLDQI.js +230 -0
  181. package/dist/chunk-ZIBWLDQI.js.map +7 -0
  182. package/dist/condition-VHP2L4GM.js +330 -0
  183. package/dist/controls-N5Q7U7JR.js +39 -0
  184. package/dist/controls.config-NJMW4SLR.js +37 -0
  185. package/dist/correlation-3LDASF5I.js +96 -0
  186. package/dist/cuminc-UWJ23W6C.js +1147 -0
  187. package/dist/cuminc.integration.spec-OZYYET3W.js +676 -0
  188. package/dist/customdata.inputui-2FVCVSE4.js +285 -0
  189. package/dist/dataDownload-4S4PE5HX.js +328 -0
  190. package/dist/dataDownload.integration.spec-B57LEKFZ.js +191 -0
  191. package/dist/databrowser.ui-N6GHEQ2P.js +419 -0
  192. package/dist/dictionary-UP46QRYZ.js +98 -0
  193. package/dist/dnaMethylation-BOGAUAWA.js +36 -0
  194. package/dist/dnaMethylation.integration.spec-UAHBJSSJ.js +179 -0
  195. package/dist/e2pca-L5EBQJNP.js +348 -0
  196. package/dist/ep-Z67ORKUX.js +1254 -0
  197. package/dist/expclust.gdc.spec-SP7VOL64.js +305 -0
  198. package/dist/facet-HDB4VDGU.js +519 -0
  199. package/dist/geneExpClustering-6ZPOLTDJ.js +246 -0
  200. package/dist/geneExpression-T6YIG4XQ.js +312 -0
  201. package/dist/geneExpression-T7QUHV5S.js +36 -0
  202. package/dist/geneExpression.unit.spec-DO52L5IB.js +100 -0
  203. package/dist/geneORA-KOUDUWUO.js +276 -0
  204. package/dist/geneVariant-FVR76F6I.js +39 -0
  205. package/dist/geneVariant-I5QUITKG.js +37 -0
  206. package/dist/geneVariant.integration.spec-D4IRM7B5.js +196 -0
  207. package/dist/genefusion.ui-35IYSZD7.js +249 -0
  208. package/dist/geneset-7ZHJ5KWK.js +194 -0
  209. package/dist/genomeBrowser.spec-VXASVLNH.js +279 -0
  210. package/dist/grin2-7NM56COO.js +1554 -0
  211. package/dist/grin2-IY26UUQI.js +1031 -0
  212. package/dist/gsea-TORO46C6.js +45 -0
  213. package/dist/hierCluster-3BKEGW6P.js +58 -0
  214. package/dist/hierCluster-HM3LOM6V.js +62 -0
  215. package/dist/hierCluster.config-LDO5IGQ5.js +38 -0
  216. package/dist/hierCluster.integration.spec-XO5R6CQT.js +374 -0
  217. package/dist/hierCluster.interactivity-NVQ6262K.js +52 -0
  218. package/dist/hierCluster.renderers-SWPPNBLU.js +21 -0
  219. package/dist/imagePlot-V4WLAPV6.js +139 -0
  220. package/dist/importPlot-NZKQEOX4.js +8 -0
  221. package/dist/isoformExpression-TIZBIGNL.js +38 -0
  222. package/dist/isoformExpression.unit.spec-WHH5LPFG.js +124 -0
  223. package/dist/isoformExpression.unit.spec-WHH5LPFG.js.map +7 -0
  224. package/dist/launch.adhoc-JYEN42NM.js +40 -0
  225. package/dist/leftlabel.sample-43DL3J3H.js +257 -0
  226. package/dist/legacyDataset-QRSNRVUA.js +119 -0
  227. package/dist/lollipop-NMWZ4FVF.js +166 -0
  228. package/dist/maf-DS3EOVGV.js +450 -0
  229. package/dist/maf-DS3EOVGV.js.map +7 -0
  230. package/dist/maftimeline-ZB2753S7.js +591 -0
  231. package/dist/matrix-RCGQWQ3C.js +57 -0
  232. package/dist/matrix-WTTEK4FT.js +62 -0
  233. package/dist/matrix.cells-UO5ASQ35.js +28 -0
  234. package/dist/matrix.config-3UQAT3QR.js +39 -0
  235. package/dist/matrix.controls-PRZ77K5L.js +37 -0
  236. package/dist/matrix.data-4W73RQ3H.js +25 -0
  237. package/dist/matrix.groups-5VMPI7SA.js +26 -0
  238. package/dist/matrix.integration.spec-2F5LDLC2.js +3070 -0
  239. package/dist/matrix.interactivity-MIPZ6ELV.js +40 -0
  240. package/dist/matrix.layout-EO5LVYRO.js +42 -0
  241. package/dist/matrix.legend-QBFBFEUG.js +22 -0
  242. package/dist/matrix.renderers-ERJXVCQL.js +36 -0
  243. package/dist/matrix.serieses-E23EPXHA.js +21 -0
  244. package/dist/matrix.sort-I4UGMEXR.js +27 -0
  245. package/dist/matrix.sort.unit.spec-CRGF6CSE.js +470 -0
  246. package/dist/matrix.sorterUi-YLSYTYLE.js +18 -0
  247. package/dist/matrix.sorterUi.unit.spec-ENG3ICOO.js +340 -0
  248. package/dist/mavb-5WR7OJHI.js +730 -0
  249. package/dist/mds.fimo-3ZRH7BBJ.js +516 -0
  250. package/dist/mds.samplescatterplot-RPXR2FVK.js +1548 -0
  251. package/dist/mds.survivalplot-WSSMYUZD.js +481 -0
  252. package/dist/oncomatrix-JKYPUJQR.js +293 -0
  253. package/dist/oncomatrix-JKYPUJQR.js.map +7 -0
  254. package/dist/oncomatrix.spec-OEGU4DYK.js +446 -0
  255. package/dist/plot.2dvaf-ZGARLQNK.js +375 -0
  256. package/dist/plot.app-TKUJH3LK.js +39 -0
  257. package/dist/plot.barplot-FEIPGDZ2.js +100 -0
  258. package/dist/plot.boxplot-6RASUMZB.js +150 -0
  259. package/dist/plot.brainImaging-ZJPFWX2W.js +51 -0
  260. package/dist/plot.disco-2KTKB3XX.js +101 -0
  261. package/dist/plot.dzi-PC34YI6Y.js +33 -0
  262. package/dist/plot.ssgq-Z4UNJKWO.js +137 -0
  263. package/dist/plot.vaf2cov-NZ4WULKT.js +257 -0
  264. package/dist/plot.wsi-YYXFAZWY.js +36 -0
  265. package/dist/polar-X2GPIBLB.js +184 -0
  266. package/dist/polar2-TZ553QQH.js +226 -0
  267. package/dist/profile.spec-VB6VMFLY.js +78 -0
  268. package/dist/profileBarchart-SKJSTC7B.js +265 -0
  269. package/dist/profileForms-RLOGSMAQ.js +438 -0
  270. package/dist/profilePlot-267ZS3RG.js +52 -0
  271. package/dist/profileRadar-KGOBHCSF.js +261 -0
  272. package/dist/profileRadarFacility-MCJKSHUM.js +261 -0
  273. package/dist/proteomeAbundance-JUYAYO5I.js +63 -0
  274. package/dist/proteomeAbundance-PGHZSVAF.js +19 -0
  275. package/dist/qualitative-3IECKKJM.js +41 -0
  276. package/dist/regression-J6FFRPXN.js +54 -0
  277. package/dist/regression.inputs-T7LWBSYZ.js +46 -0
  278. package/dist/regression.inputs.term-TT7PNX6G.js +46 -0
  279. package/dist/regression.inputs.values.table-SHFUNKCS.js +43 -0
  280. package/dist/regression.integration.spec-QKHMJTHA.js +784 -0
  281. package/dist/regression.results-D4WX6VIV.js +38 -0
  282. package/dist/regression.spec-7SW55L7X.js +706 -0
  283. package/dist/report-QYOZ4BRF.js +220 -0
  284. package/dist/sampleScatter.spec-JCHFMGNF.js +200 -0
  285. package/dist/sampleView-7RPKNAZC.js +46 -0
  286. package/dist/samplelst-4WNPHZVG.js +109 -0
  287. package/dist/samplematrix-CG52DSXJ.js +2196 -0
  288. package/dist/sc-OJSWILSA.js +84 -0
  289. package/dist/scatter-LG2RMMEC.js +800 -0
  290. package/dist/scatter.integration.spec-QPANYTKW.js +1194 -0
  291. package/dist/selectGenomeWithTklst-QXRVE6N4.js +132 -0
  292. package/dist/singleCellCellType-XBSRL33U.js +36 -0
  293. package/dist/singleCellCellType.unit.spec-YZX4CSXA.js +177 -0
  294. package/dist/singleCellGeneExpression-64ECP62X.js +36 -0
  295. package/dist/singleCellGeneExpression.unit.spec-CFHFXMA6.js +163 -0
  296. package/dist/singleCellPlot-E5F62JY6.js +51 -0
  297. package/dist/singlecell-FCY5EOUV.js +84 -0
  298. package/dist/singlecell-S7B5V7NK.js +1570 -0
  299. package/dist/snp-ACKX4GRX.js +36 -0
  300. package/dist/snp.unit.spec-QBGHKKUD.js +174 -0
  301. package/dist/snplocus-7EUOW7J7.js +206 -0
  302. package/dist/spliceevent.a53ss.diagram-ALQZA35Z.js +149 -0
  303. package/dist/spliceevent.exonskip.diagram-UF7WJA5R.js +275 -0
  304. package/dist/spliceevent.noeventdiagram-4HPGRNRR.js +458 -0
  305. package/dist/ssGSEA-FDRBBBLJ.js +36 -0
  306. package/dist/ssGSEA.unit.spec-EZEOWJVV.js +86 -0
  307. package/dist/summarizeCnvGeneexp-FTL2MGAJ.js +158 -0
  308. package/dist/summarizeGeneexpSurvival-DDIF4UW6.js +105 -0
  309. package/dist/summarizeMutationCnv-L3GL5YDY.js +159 -0
  310. package/dist/summarizeMutationDiagnosis-LALOJTHV.js +38 -0
  311. package/dist/summarizeMutationSurvival-TSNTSOBZ.js +97 -0
  312. package/dist/summary-YRHVS64T.js +47 -0
  313. package/dist/summary.integration.spec-766YQLQA.js +412 -0
  314. package/dist/summaryInput-VQ2X6GSX.js +218 -0
  315. package/dist/sunburst-XFOONS6K.js +282 -0
  316. package/dist/survival-FQXZH2MM.js +44 -0
  317. package/dist/survival-TVA3ZWVP.js +56 -0
  318. package/dist/survival.integration.spec-WFIOPD6A.js +787 -0
  319. package/dist/svgraph-4BFBO7EL.js +1385 -0
  320. package/dist/svmr-ML7GAIIA.js +3840 -0
  321. package/dist/table-SMLMUWPP.js +198 -0
  322. package/dist/termCollection-22CPTISZ.js +36 -0
  323. package/dist/termCollection-EE6AOIVA.js +177 -0
  324. package/dist/termCollection.unit.spec-4DIW3CJ3.js +206 -0
  325. package/dist/tk-ITZCKOQ5.js +44 -0
  326. package/dist/tp.ui-R6HVKCBC.js +1457 -0
  327. package/dist/tvs.density-AQ5GD437.js +18 -0
  328. package/dist/tvs.dt-2263TBEJ.js +37 -0
  329. package/dist/tvs.dtcnv.categorical-TRRHL33N.js +38 -0
  330. package/dist/tvs.dtcnv.continuous-GREYNF52.js +70 -0
  331. package/dist/tvs.dtfusion-XOX46L3M.js +38 -0
  332. package/dist/tvs.dtsnvindel-IDMXT53F.js +38 -0
  333. package/dist/tvs.dtsv-ZDWFYH2C.js +38 -0
  334. package/dist/tvs.numeric-ZN2R7BH3.js +21 -0
  335. package/dist/tvs.samplelst-GAP76HRH.js +102 -0
  336. package/dist/tvs.termCollection-GQ65UKSI.js +151 -0
  337. package/dist/violin-JGDL62YA.js +44 -0
  338. package/dist/violin.integration.spec-W4NN7LBY.js +1417 -0
  339. package/dist/violin.interactivity-H4RP4K5U.js +36 -0
  340. package/dist/violin.renderer-QPHLACDC.js +38 -0
  341. package/dist/vocabulary-7JACY4J2.js +39 -0
  342. package/package.json +2 -2
  343. package/dist/2dmaf-PFPBHIUI.js +0 -1371
  344. package/dist/AIProjectAdmin-H2GB5ZOX.js +0 -830
  345. package/dist/AppHeader-FCWML6WH.js +0 -833
  346. package/dist/BoxPlot-QKXGF76K.js +0 -1295
  347. package/dist/CorrelationVolcano-ZJ7Q6JBC.js +0 -617
  348. package/dist/DifferentialAnalysis-PWCFCWFY.js +0 -238
  349. package/dist/Disco-IE5JKIF2.js +0 -3199
  350. package/dist/Disco.UI-SR7LSJE3.js +0 -242
  351. package/dist/DmrPlot-UDY7GOSY.js +0 -640
  352. package/dist/GB-GNTOP5C6.js +0 -1125
  353. package/dist/HicApp-FZTJL3OA.js +0 -2248
  354. package/dist/NumBinaryEditor-R5QVG3C4.js +0 -266
  355. package/dist/NumBinaryEditor-R5QVG3C4.js.map +0 -7
  356. package/dist/NumBinaryEditor.unit.spec-BMVRI24W.js +0 -284
  357. package/dist/NumContEditor-6JT5D6IW.js +0 -105
  358. package/dist/NumContEditor.unit.spec-XBQF2SW6.js +0 -167
  359. package/dist/NumCustomBinEditor-MEKEFOQI.js +0 -36
  360. package/dist/NumCustomBinEditor.unit.spec-LEMQJHDT.js +0 -282
  361. package/dist/NumDiscreteEditor-U3N37XRQ.js +0 -170
  362. package/dist/NumDiscreteEditor-U3N37XRQ.js.map +0 -7
  363. package/dist/NumDiscreteEditor.unit.spec-WQM4DLKO.js +0 -200
  364. package/dist/NumRegularBinEditor-HQR5Y6P7.js +0 -36
  365. package/dist/NumRegularBinEditor.unit.spec-FL4IFT7L.js +0 -225
  366. package/dist/NumSplineEditor-OESWMWP5.js +0 -188
  367. package/dist/NumSplineEditor-OESWMWP5.js.map +0 -7
  368. package/dist/NumSplineEditor.unit.spec-HYOXO45B.js +0 -197
  369. package/dist/NumericDensity-GJZ4BBJS.js +0 -36
  370. package/dist/NumericDensity.unit.spec-6LXWAXW7.js +0 -219
  371. package/dist/NumericHandler-LZIMPOHS.js +0 -37
  372. package/dist/NumericHandler.unit.spec-ZSU35AMD.js +0 -217
  373. package/dist/RunChart2-7XV6TIFO.js +0 -756
  374. package/dist/SC-E4EYAG26.js +0 -733
  375. package/dist/Volcano-Z7TJK6PW.js +0 -1187
  376. package/dist/WSIViewer-ZH2XABLC.js +0 -47933
  377. package/dist/WsiSamplesPlot-BL47MDHQ.js +0 -163
  378. package/dist/adSandbox-V3NTKVBC.js +0 -36
  379. package/dist/alphaGenome-IQVFCSWQ.js +0 -173
  380. package/dist/app-GJLZ2G2U.js +0 -47
  381. package/dist/app-YSD2U64Q.js +0 -35
  382. package/dist/bam-TRIF3AIQ.js +0 -849
  383. package/dist/bam-TRIF3AIQ.js.map +0 -7
  384. package/dist/barchart-GLLUYTAJ.js +0 -45
  385. package/dist/barchart.data-FRYRGKH3.js +0 -22
  386. package/dist/barchart.events-WODVSHRN.js +0 -45
  387. package/dist/barchart.integration.spec-6POS3V3T.js +0 -1675
  388. package/dist/block-2QM37YSE.js +0 -6300
  389. package/dist/block-2QM37YSE.js.map +0 -7
  390. package/dist/block.init-7HDLKQVX.js +0 -36
  391. package/dist/block.mds.expressionrank-UIB25S6E.js +0 -357
  392. package/dist/block.mds.geneboxplot-4PQYO3MR.js +0 -826
  393. package/dist/block.mds.junction-DWFYZEC2.js +0 -1543
  394. package/dist/block.mds.svcnv-N3KJJ4GQ.js +0 -6799
  395. package/dist/block.svg-2HBDI7BT.js +0 -162
  396. package/dist/block.tk.aicheck-2M4522IQ.js +0 -281
  397. package/dist/block.tk.ase-URIKF6JD.js +0 -363
  398. package/dist/block.tk.bam-HTDMASHX.js +0 -1904
  399. package/dist/block.tk.bedgraphdot-RVKMSFCQ.js +0 -382
  400. package/dist/block.tk.bigwig.ui-7JPEOIKM.js +0 -209
  401. package/dist/block.tk.hicstraw-72J7UJ2J.js +0 -821
  402. package/dist/block.tk.junction-GGFMBCV5.js +0 -2362
  403. package/dist/block.tk.junction.textmatrixui-44SAYYWE.js +0 -197
  404. package/dist/block.tk.ld-XDKJFEOL.js +0 -97
  405. package/dist/block.tk.menu-46FOTM7H.js +0 -1027
  406. package/dist/block.tk.pgv-ZVONRT4B.js +0 -942
  407. package/dist/brainImaging-CSLO7ODJ.js +0 -421
  408. package/dist/chat-GMD22F3K.js +0 -148
  409. package/dist/chunk-22KWZOCN.js +0 -153
  410. package/dist/chunk-2K5DSRBJ.js +0 -84
  411. package/dist/chunk-2K5DSRBJ.js.map +0 -7
  412. package/dist/chunk-2NQ4TM74.js +0 -48
  413. package/dist/chunk-2TIYJ3PH.js +0 -815
  414. package/dist/chunk-2UWHV2SB.js +0 -261
  415. package/dist/chunk-2UWHV2SB.js.map +0 -7
  416. package/dist/chunk-3656ZY4T.js +0 -237
  417. package/dist/chunk-3TU6TRLQ.js +0 -98
  418. package/dist/chunk-4FJ5GS6P.js +0 -4202
  419. package/dist/chunk-4FJ5GS6P.js.map +0 -7
  420. package/dist/chunk-4FO7KZY2.js +0 -534
  421. package/dist/chunk-4OEOQX4L.js +0 -334
  422. package/dist/chunk-5HCB4HNL.js +0 -147
  423. package/dist/chunk-5ZICCKEH.js +0 -4952
  424. package/dist/chunk-6UU7VPDO.js +0 -272
  425. package/dist/chunk-6YLQN7FF.js +0 -441
  426. package/dist/chunk-74QJDBIP.js +0 -480
  427. package/dist/chunk-7FXPMQRW.js +0 -34
  428. package/dist/chunk-A2Y3GEUH.js +0 -228
  429. package/dist/chunk-AAEXTQT3.js +0 -330
  430. package/dist/chunk-AAEXTQT3.js.map +0 -7
  431. package/dist/chunk-AG6HVFQY.js +0 -504
  432. package/dist/chunk-AG6HVFQY.js.map +0 -7
  433. package/dist/chunk-AHLUW2BN.js +0 -129
  434. package/dist/chunk-AQ4OP4GR.js +0 -39
  435. package/dist/chunk-AYDXOUFX.js +0 -1275
  436. package/dist/chunk-AYDXOUFX.js.map +0 -7
  437. package/dist/chunk-BBIPZ2UF.js +0 -52
  438. package/dist/chunk-BBVOZ5BY.js +0 -230
  439. package/dist/chunk-BBVOZ5BY.js.map +0 -7
  440. package/dist/chunk-BHVDOW3W.js +0 -470
  441. package/dist/chunk-BNN32RI2.js +0 -36
  442. package/dist/chunk-BQLC6QOH.js +0 -368
  443. package/dist/chunk-BQLC6QOH.js.map +0 -7
  444. package/dist/chunk-C5QOWZK6.js +0 -629
  445. package/dist/chunk-CJJ6LDZM.js +0 -170
  446. package/dist/chunk-CJJ6LDZM.js.map +0 -7
  447. package/dist/chunk-D4U5X2QQ.js +0 -261
  448. package/dist/chunk-DV444SFD.js +0 -26
  449. package/dist/chunk-DWWAB4YQ.js +0 -102
  450. package/dist/chunk-FP5VKE3Z.js +0 -170
  451. package/dist/chunk-FVWCYGJL.js +0 -121
  452. package/dist/chunk-G2MAZI6I.js +0 -205
  453. package/dist/chunk-HLRNIO5K.js +0 -158
  454. package/dist/chunk-HTHH2B6D.js +0 -46
  455. package/dist/chunk-I7X6K4OL.js +0 -217
  456. package/dist/chunk-ITYEOGLB.js +0 -302
  457. package/dist/chunk-J6XKDYNZ.js +0 -276
  458. package/dist/chunk-J6XKDYNZ.js.map +0 -7
  459. package/dist/chunk-JDX4E7ZO.js +0 -381
  460. package/dist/chunk-JWX7GYHP.js +0 -95
  461. package/dist/chunk-KLFROH3F.js +0 -203
  462. package/dist/chunk-KQSN7PUK.js +0 -215
  463. package/dist/chunk-KQSN7PUK.js.map +0 -7
  464. package/dist/chunk-L2ED35QZ.js +0 -2815
  465. package/dist/chunk-L4QG7XZE.js +0 -46
  466. package/dist/chunk-L4QG7XZE.js.map +0 -7
  467. package/dist/chunk-LI7FE335.js +0 -371
  468. package/dist/chunk-LLPFFNLV.js +0 -526
  469. package/dist/chunk-LRV4VWRF.js +0 -94
  470. package/dist/chunk-LRV4VWRF.js.map +0 -7
  471. package/dist/chunk-M464GTNI.js +0 -615
  472. package/dist/chunk-MDN3K2BG.js +0 -229
  473. package/dist/chunk-MDN3K2BG.js.map +0 -7
  474. package/dist/chunk-N46WTUX7.js +0 -286
  475. package/dist/chunk-N46WTUX7.js.map +0 -7
  476. package/dist/chunk-NBMJ2UMA.js +0 -194
  477. package/dist/chunk-NI7VSKJI.js +0 -293
  478. package/dist/chunk-NTVM4ZPG.js +0 -2784
  479. package/dist/chunk-O64UTRAC.js +0 -252
  480. package/dist/chunk-OM326NV3.js +0 -100
  481. package/dist/chunk-P4ENJUBN.js +0 -386
  482. package/dist/chunk-PEKVBCIH.js +0 -824
  483. package/dist/chunk-PF6MKI4X.js +0 -92
  484. package/dist/chunk-PJTQP6RL.js +0 -54
  485. package/dist/chunk-PVSRVJBE.js +0 -1201
  486. package/dist/chunk-PVSRVJBE.js.map +0 -7
  487. package/dist/chunk-PZ3L3KM6.js +0 -55
  488. package/dist/chunk-QEHUEG4X.js +0 -1788
  489. package/dist/chunk-QEHUEG4X.js.map +0 -7
  490. package/dist/chunk-QXCVG66S.js +0 -2672
  491. package/dist/chunk-RIGZHHCP.js +0 -119
  492. package/dist/chunk-SEIANPCX.js +0 -142
  493. package/dist/chunk-SEQLC4AD.js +0 -177
  494. package/dist/chunk-SK7YVOQN.js +0 -148
  495. package/dist/chunk-SPPZB5ZQ.js +0 -158
  496. package/dist/chunk-SPPZB5ZQ.js.map +0 -7
  497. package/dist/chunk-T5KFRIP4.js +0 -1087
  498. package/dist/chunk-TTSNECVD.js +0 -1413
  499. package/dist/chunk-TTSNECVD.js.map +0 -7
  500. package/dist/chunk-TV74I3Y5.js +0 -43
  501. package/dist/chunk-TV74I3Y5.js.map +0 -7
  502. package/dist/chunk-TVXESYIR.js +0 -439
  503. package/dist/chunk-U3UR3U3F.js +0 -446
  504. package/dist/chunk-UFYU7AKL.js +0 -107
  505. package/dist/chunk-VIYGTRUZ.js +0 -6364
  506. package/dist/chunk-WCTH7CB3.js +0 -31
  507. package/dist/chunk-WGSWVYHY.js +0 -1155
  508. package/dist/chunk-WYZ4COTF.js +0 -226
  509. package/dist/chunk-WZRXJ5LL.js +0 -2370
  510. package/dist/chunk-WZRXJ5LL.js.map +0 -7
  511. package/dist/chunk-XZZLEHWC.js +0 -20328
  512. package/dist/chunk-XZZLEHWC.js.map +0 -7
  513. package/dist/chunk-Y7JAPSMG.js +0 -406
  514. package/dist/chunk-Y7JAPSMG.js.map +0 -7
  515. package/dist/chunk-YJ2HC4CP.js +0 -1150
  516. package/dist/chunk-ZLH4PJKX.js +0 -1658
  517. package/dist/chunk-ZLH4PJKX.js.map +0 -7
  518. package/dist/chunk-ZZSDYKD5.js +0 -14
  519. package/dist/condition-S52W57ZO.js +0 -330
  520. package/dist/controls-B4MTTPWO.js +0 -39
  521. package/dist/controls.config-6KBCTIPN.js +0 -37
  522. package/dist/correlation-VSBCBFFP.js +0 -96
  523. package/dist/cuminc-T5ZPAGVB.js +0 -1147
  524. package/dist/cuminc.integration.spec-2QT3IPHU.js +0 -676
  525. package/dist/customdata.inputui-5MHQQHJL.js +0 -285
  526. package/dist/dataDownload-S4EBNHMW.js +0 -328
  527. package/dist/dataDownload.integration.spec-OVSIWI34.js +0 -191
  528. package/dist/databrowser.ui-EAJS3NXV.js +0 -419
  529. package/dist/dictionary-CQHSMVYF.js +0 -98
  530. package/dist/dnaMethylation-G3F2INDH.js +0 -36
  531. package/dist/dnaMethylation.integration.spec-FWF4353K.js +0 -179
  532. package/dist/e2pca-SLXGPVHP.js +0 -348
  533. package/dist/ep-4HGUSDGJ.js +0 -1254
  534. package/dist/expclust.gdc.spec-JJ42ESKE.js +0 -305
  535. package/dist/facet-6WVTVKDV.js +0 -519
  536. package/dist/geneExpClustering-5LOZPD5X.js +0 -246
  537. package/dist/geneExpression-BJ46UGXW.js +0 -312
  538. package/dist/geneExpression-PTSZWKCM.js +0 -36
  539. package/dist/geneExpression.unit.spec-NW5HTO7F.js +0 -100
  540. package/dist/geneORA-H65EZ7QO.js +0 -276
  541. package/dist/geneVariant-T6GWOVZD.js +0 -39
  542. package/dist/geneVariant-WTDFZTXG.js +0 -37
  543. package/dist/geneVariant.integration.spec-OPSBRUM3.js +0 -196
  544. package/dist/genefusion.ui-RSBCC37C.js +0 -249
  545. package/dist/geneset-B67PAZVL.js +0 -194
  546. package/dist/genomeBrowser.spec-AUTULF4C.js +0 -279
  547. package/dist/grin2-CMBP7XVH.js +0 -1031
  548. package/dist/grin2-JVCNH3KW.js +0 -1554
  549. package/dist/gsea-H774WVPQ.js +0 -45
  550. package/dist/hierCluster-IQTXQUMI.js +0 -58
  551. package/dist/hierCluster-ZQJDXYBD.js +0 -62
  552. package/dist/hierCluster.config-ZHJTZK5L.js +0 -38
  553. package/dist/hierCluster.integration.spec-MSJ5GHHK.js +0 -374
  554. package/dist/hierCluster.interactivity-H2GNO6AA.js +0 -52
  555. package/dist/hierCluster.renderers-2TE6HMK2.js +0 -21
  556. package/dist/imagePlot-FMNMB7JZ.js +0 -139
  557. package/dist/importPlot-N66G43XX.js +0 -8
  558. package/dist/isoformExpression-B64WLO3H.js +0 -38
  559. package/dist/isoformExpression.unit.spec-D2R6CRKO.js +0 -126
  560. package/dist/isoformExpression.unit.spec-D2R6CRKO.js.map +0 -7
  561. package/dist/launch.adhoc-MPRAJ3GN.js +0 -40
  562. package/dist/leftlabel.sample-4JCKYXED.js +0 -257
  563. package/dist/legacyDataset-PBCPC5I7.js +0 -119
  564. package/dist/lollipop-25ADHT7O.js +0 -166
  565. package/dist/maf-POYTGXT4.js +0 -442
  566. package/dist/maf-POYTGXT4.js.map +0 -7
  567. package/dist/maftimeline-FOQF6O3X.js +0 -591
  568. package/dist/matrix-LHLAYDTQ.js +0 -57
  569. package/dist/matrix-ZKF7NRAD.js +0 -62
  570. package/dist/matrix.cells-H4TS74FJ.js +0 -28
  571. package/dist/matrix.config-HE7QUDER.js +0 -39
  572. package/dist/matrix.controls-VILCLNSC.js +0 -37
  573. package/dist/matrix.data-2OUWYD35.js +0 -25
  574. package/dist/matrix.groups-5BGJIOOJ.js +0 -26
  575. package/dist/matrix.integration.spec-DSXZHAEY.js +0 -3070
  576. package/dist/matrix.interactivity-VK3NWX5M.js +0 -40
  577. package/dist/matrix.layout-PUNMMNCC.js +0 -42
  578. package/dist/matrix.legend-QMERGVYU.js +0 -22
  579. package/dist/matrix.renderers-2KQ2NXSQ.js +0 -36
  580. package/dist/matrix.serieses-24G3XPJD.js +0 -21
  581. package/dist/matrix.sort-HTVT4K7C.js +0 -27
  582. package/dist/matrix.sort.unit.spec-EUVL76NB.js +0 -470
  583. package/dist/matrix.sorterUi-PJPFXWOJ.js +0 -18
  584. package/dist/matrix.sorterUi.unit.spec-QWL5Y4DQ.js +0 -340
  585. package/dist/mavb-UGM5SHEF.js +0 -730
  586. package/dist/mds.fimo-64US7RTE.js +0 -516
  587. package/dist/mds.samplescatterplot-JMXLXVIE.js +0 -1548
  588. package/dist/mds.survivalplot-RJ5UD3IU.js +0 -481
  589. package/dist/oncomatrix-ZFT3DRAP.js +0 -293
  590. package/dist/oncomatrix-ZFT3DRAP.js.map +0 -7
  591. package/dist/oncomatrix.spec-4YLKDGFE.js +0 -446
  592. package/dist/plot.2dvaf-DYSU6BBN.js +0 -375
  593. package/dist/plot.app-NFBVLAXZ.js +0 -39
  594. package/dist/plot.barplot-DBGTDK7J.js +0 -100
  595. package/dist/plot.boxplot-MCKZUROP.js +0 -150
  596. package/dist/plot.brainImaging-BBAVUEB4.js +0 -51
  597. package/dist/plot.disco-VGOEQYRL.js +0 -101
  598. package/dist/plot.dzi-YQIFOTZQ.js +0 -33
  599. package/dist/plot.ssgq-MU3BRTMC.js +0 -137
  600. package/dist/plot.vaf2cov-KDHZ7JXJ.js +0 -257
  601. package/dist/plot.wsi-G2TUGQF7.js +0 -36
  602. package/dist/polar-RCCZXZIU.js +0 -184
  603. package/dist/polar2-COQ3WIGW.js +0 -226
  604. package/dist/profile.spec-A4ZASR2T.js +0 -78
  605. package/dist/profileBarchart-GB4RK5DF.js +0 -265
  606. package/dist/profileForms-O5KBHRF6.js +0 -438
  607. package/dist/profilePlot-COCLCP5B.js +0 -52
  608. package/dist/profileRadar-4EE3YDOH.js +0 -261
  609. package/dist/profileRadarFacility-JYTSGA5H.js +0 -261
  610. package/dist/proteomeAbundance-JBVXUSD6.js +0 -19
  611. package/dist/proteomeAbundance-NQVU4DOW.js +0 -63
  612. package/dist/qualitative-QROOPDSI.js +0 -41
  613. package/dist/regression-7FQZ22OO.js +0 -54
  614. package/dist/regression.inputs-F62CES3A.js +0 -46
  615. package/dist/regression.inputs.term-BCGP7PX4.js +0 -46
  616. package/dist/regression.inputs.values.table-D3ZXZSH7.js +0 -43
  617. package/dist/regression.integration.spec-P2BBTT2O.js +0 -784
  618. package/dist/regression.results-JX6RJQQP.js +0 -38
  619. package/dist/regression.spec-ROME7T33.js +0 -706
  620. package/dist/report-B6MM4T6B.js +0 -220
  621. package/dist/sampleScatter.spec-EPCMC3SR.js +0 -200
  622. package/dist/sampleView-77EAJ75T.js +0 -46
  623. package/dist/samplelst-CX4NQWA7.js +0 -109
  624. package/dist/samplematrix-PYQFAH64.js +0 -2196
  625. package/dist/sc-X6SI5VVI.js +0 -84
  626. package/dist/scatter-ZFFHAI4F.js +0 -800
  627. package/dist/scatter.integration.spec-NN43OXRN.js +0 -1194
  628. package/dist/selectGenomeWithTklst-CZMVTBMD.js +0 -132
  629. package/dist/singleCellCellType-GOBX7JKV.js +0 -36
  630. package/dist/singleCellCellType.unit.spec-F344QMTQ.js +0 -177
  631. package/dist/singleCellGeneExpression-BLMNMEAI.js +0 -36
  632. package/dist/singleCellGeneExpression.unit.spec-6ZEPUFWC.js +0 -163
  633. package/dist/singleCellPlot-HLD7PLQH.js +0 -51
  634. package/dist/singlecell-HL4GLGIA.js +0 -1570
  635. package/dist/singlecell-JQFPINRS.js +0 -84
  636. package/dist/snp-EAUNFDAV.js +0 -36
  637. package/dist/snp.unit.spec-AVLPMAWI.js +0 -174
  638. package/dist/snplocus-2J7OA6OL.js +0 -206
  639. package/dist/spliceevent.a53ss.diagram-4DU2U7NW.js +0 -149
  640. package/dist/spliceevent.exonskip.diagram-GG5FGXOK.js +0 -275
  641. package/dist/spliceevent.noeventdiagram-T6RNIMCM.js +0 -458
  642. package/dist/ssGSEA-XJWLRVFQ.js +0 -36
  643. package/dist/ssGSEA.unit.spec-MQ23ODYO.js +0 -86
  644. package/dist/summarizeCnvGeneexp-CJPC76RM.js +0 -158
  645. package/dist/summarizeGeneexpSurvival-FGCFZTVG.js +0 -105
  646. package/dist/summarizeMutationCnv-4E7R2NHQ.js +0 -159
  647. package/dist/summarizeMutationDiagnosis-ZVX7AZK7.js +0 -38
  648. package/dist/summarizeMutationSurvival-EWXD7TCT.js +0 -97
  649. package/dist/summary-VUYBKQOC.js +0 -47
  650. package/dist/summary.integration.spec-EPBV5XCT.js +0 -412
  651. package/dist/summaryInput-YX5IRGWM.js +0 -218
  652. package/dist/sunburst-HPDML45I.js +0 -282
  653. package/dist/survival-E6SRRXBB.js +0 -44
  654. package/dist/survival-XOXDPXZR.js +0 -56
  655. package/dist/survival.integration.spec-SJBPJZGJ.js +0 -787
  656. package/dist/svgraph-D23WG3UE.js +0 -1385
  657. package/dist/svmr-UFC4TKWV.js +0 -3840
  658. package/dist/table-US2K6IYZ.js +0 -198
  659. package/dist/termCollection-E7S57CIN.js +0 -177
  660. package/dist/termCollection-ZMP3VE2G.js +0 -36
  661. package/dist/termCollection.unit.spec-MDWK6XH3.js +0 -206
  662. package/dist/tk-TLQJK6R4.js +0 -44
  663. package/dist/tp.ui-NQEAKWUH.js +0 -1457
  664. package/dist/tvs.density-HSVPDDGA.js +0 -18
  665. package/dist/tvs.dt-U2MINIBH.js +0 -37
  666. package/dist/tvs.dtcnv.categorical-2OOAZJKC.js +0 -38
  667. package/dist/tvs.dtcnv.continuous-5ETKBJ52.js +0 -70
  668. package/dist/tvs.dtfusion-EB4PPR3Y.js +0 -38
  669. package/dist/tvs.dtsnvindel-IRQPTKQF.js +0 -38
  670. package/dist/tvs.dtsv-TOVXZJCR.js +0 -38
  671. package/dist/tvs.numeric-ICUGA4WY.js +0 -21
  672. package/dist/tvs.samplelst-4SCH543Y.js +0 -102
  673. package/dist/tvs.termCollection-GGN5F6HC.js +0 -151
  674. package/dist/violin-7D7DN74I.js +0 -44
  675. package/dist/violin.integration.spec-KE76AL54.js +0 -1417
  676. package/dist/violin.interactivity-YPJ2H6SQ.js +0 -36
  677. package/dist/violin.renderer-UK7WSA2Z.js +0 -38
  678. package/dist/vocabulary-KLWZ6LRP.js +0 -39
  679. /package/dist/{2dmaf-PFPBHIUI.js.map → 2dmaf-SLBAWGPG.js.map} +0 -0
  680. /package/dist/{AIProjectAdmin-H2GB5ZOX.js.map → AIProjectAdmin-6SH5X3AF.js.map} +0 -0
  681. /package/dist/{AppHeader-FCWML6WH.js.map → AppHeader-MVYNRMC7.js.map} +0 -0
  682. /package/dist/{BoxPlot-QKXGF76K.js.map → BoxPlot-HLGWW3IK.js.map} +0 -0
  683. /package/dist/{CorrelationVolcano-ZJ7Q6JBC.js.map → CorrelationVolcano-TZCYC3NI.js.map} +0 -0
  684. /package/dist/{DifferentialAnalysis-PWCFCWFY.js.map → DifferentialAnalysis-DS7CQOT6.js.map} +0 -0
  685. /package/dist/{Disco-IE5JKIF2.js.map → Disco-U5I6NJUT.js.map} +0 -0
  686. /package/dist/{Disco.UI-SR7LSJE3.js.map → Disco.UI-J2B7GGEZ.js.map} +0 -0
  687. /package/dist/{DmrPlot-UDY7GOSY.js.map → DmrPlot-D5W76QPY.js.map} +0 -0
  688. /package/dist/{GB-GNTOP5C6.js.map → GB-LM5SGUG4.js.map} +0 -0
  689. /package/dist/{HicApp-FZTJL3OA.js.map → HicApp-YNBGAGKM.js.map} +0 -0
  690. /package/dist/{NumBinaryEditor.unit.spec-BMVRI24W.js.map → NumBinaryEditor.unit.spec-YWSIFTOJ.js.map} +0 -0
  691. /package/dist/{NumContEditor-6JT5D6IW.js.map → NumContEditor-ZPLVZFLH.js.map} +0 -0
  692. /package/dist/{NumContEditor.unit.spec-XBQF2SW6.js.map → NumContEditor.unit.spec-NBCFOCOX.js.map} +0 -0
  693. /package/dist/{NumCustomBinEditor-MEKEFOQI.js.map → NumCustomBinEditor-TXEYRVPL.js.map} +0 -0
  694. /package/dist/{NumCustomBinEditor.unit.spec-LEMQJHDT.js.map → NumCustomBinEditor.unit.spec-SQM63H4B.js.map} +0 -0
  695. /package/dist/{NumDiscreteEditor.unit.spec-WQM4DLKO.js.map → NumDiscreteEditor.unit.spec-4HC4AGAM.js.map} +0 -0
  696. /package/dist/{NumRegularBinEditor-HQR5Y6P7.js.map → NumRegularBinEditor-VQAS3OXK.js.map} +0 -0
  697. /package/dist/{NumRegularBinEditor.unit.spec-FL4IFT7L.js.map → NumRegularBinEditor.unit.spec-RGVEPB3Z.js.map} +0 -0
  698. /package/dist/{NumSplineEditor.unit.spec-HYOXO45B.js.map → NumSplineEditor.unit.spec-HF5E6ANH.js.map} +0 -0
  699. /package/dist/{NumericDensity-GJZ4BBJS.js.map → NumericDensity-LMLPMOSE.js.map} +0 -0
  700. /package/dist/{NumericDensity.unit.spec-6LXWAXW7.js.map → NumericDensity.unit.spec-3ZI5EVON.js.map} +0 -0
  701. /package/dist/{NumericHandler-LZIMPOHS.js.map → NumericHandler-Q6F6ANOS.js.map} +0 -0
  702. /package/dist/{NumericHandler.unit.spec-ZSU35AMD.js.map → NumericHandler.unit.spec-E6Z5HUNZ.js.map} +0 -0
  703. /package/dist/{RunChart2-7XV6TIFO.js.map → RunChart2-XSNWNAIL.js.map} +0 -0
  704. /package/dist/{SC-E4EYAG26.js.map → SC-RA46YM57.js.map} +0 -0
  705. /package/dist/{Volcano-Z7TJK6PW.js.map → Volcano-75UDYPVB.js.map} +0 -0
  706. /package/dist/{WSIViewer-ZH2XABLC.js.map → WSIViewer-GYUUXCSJ.js.map} +0 -0
  707. /package/dist/{WsiSamplesPlot-BL47MDHQ.js.map → WsiSamplesPlot-KMI5S2EL.js.map} +0 -0
  708. /package/dist/{adSandbox-V3NTKVBC.js.map → adSandbox-JTK5XEQL.js.map} +0 -0
  709. /package/dist/{alphaGenome-IQVFCSWQ.js.map → alphaGenome-JRAV6WIY.js.map} +0 -0
  710. /package/dist/{app-GJLZ2G2U.js.map → app-JKDZL23V.js.map} +0 -0
  711. /package/dist/{app-YSD2U64Q.js.map → app-OEARXM6E.js.map} +0 -0
  712. /package/dist/{barchart-GLLUYTAJ.js.map → barchart-GG5UFDG4.js.map} +0 -0
  713. /package/dist/{barchart.data-FRYRGKH3.js.map → barchart.data-KXA66FAL.js.map} +0 -0
  714. /package/dist/{barchart.events-WODVSHRN.js.map → barchart.events-P2USOIR7.js.map} +0 -0
  715. /package/dist/{barchart.integration.spec-6POS3V3T.js.map → barchart.integration.spec-5QSPQQLJ.js.map} +0 -0
  716. /package/dist/{block.init-7HDLKQVX.js.map → block.init-ZHX6DFWF.js.map} +0 -0
  717. /package/dist/{block.mds.expressionrank-UIB25S6E.js.map → block.mds.expressionrank-YMGYXXYT.js.map} +0 -0
  718. /package/dist/{block.mds.geneboxplot-4PQYO3MR.js.map → block.mds.geneboxplot-IAILQYX4.js.map} +0 -0
  719. /package/dist/{block.mds.junction-DWFYZEC2.js.map → block.mds.junction-BRNFNQMU.js.map} +0 -0
  720. /package/dist/{block.mds.svcnv-N3KJJ4GQ.js.map → block.mds.svcnv-OHKC7YPO.js.map} +0 -0
  721. /package/dist/{block.svg-2HBDI7BT.js.map → block.svg-PNGK45HW.js.map} +0 -0
  722. /package/dist/{block.tk.aicheck-2M4522IQ.js.map → block.tk.aicheck-SCIOJ4WN.js.map} +0 -0
  723. /package/dist/{block.tk.ase-URIKF6JD.js.map → block.tk.ase-BABJ73GG.js.map} +0 -0
  724. /package/dist/{block.tk.bam-HTDMASHX.js.map → block.tk.bam-LZWJ5BCQ.js.map} +0 -0
  725. /package/dist/{block.tk.bedgraphdot-RVKMSFCQ.js.map → block.tk.bedgraphdot-7NQLC3XJ.js.map} +0 -0
  726. /package/dist/{block.tk.bigwig.ui-7JPEOIKM.js.map → block.tk.bigwig.ui-VNY4SFD5.js.map} +0 -0
  727. /package/dist/{block.tk.hicstraw-72J7UJ2J.js.map → block.tk.hicstraw-36A7VDRM.js.map} +0 -0
  728. /package/dist/{block.tk.junction-GGFMBCV5.js.map → block.tk.junction-D373YEMK.js.map} +0 -0
  729. /package/dist/{block.tk.junction.textmatrixui-44SAYYWE.js.map → block.tk.junction.textmatrixui-FFII7J3X.js.map} +0 -0
  730. /package/dist/{block.tk.ld-XDKJFEOL.js.map → block.tk.ld-XGB6KMDO.js.map} +0 -0
  731. /package/dist/{block.tk.menu-46FOTM7H.js.map → block.tk.menu-PEZANZBZ.js.map} +0 -0
  732. /package/dist/{block.tk.pgv-ZVONRT4B.js.map → block.tk.pgv-MU5BPTT2.js.map} +0 -0
  733. /package/dist/{brainImaging-CSLO7ODJ.js.map → brainImaging-LVJON47N.js.map} +0 -0
  734. /package/dist/{chat-GMD22F3K.js.map → chat-5FDIAQJ4.js.map} +0 -0
  735. /package/dist/{chunk-G2MAZI6I.js.map → chunk-2OSEZCWZ.js.map} +0 -0
  736. /package/dist/{chunk-RIGZHHCP.js.map → chunk-6MSCYO7K.js.map} +0 -0
  737. /package/dist/{chunk-4FO7KZY2.js.map → chunk-7A7NMCQ3.js.map} +0 -0
  738. /package/dist/{chunk-O64UTRAC.js.map → chunk-AETE4F7R.js.map} +0 -0
  739. /package/dist/{chunk-6YLQN7FF.js.map → chunk-AZYDW5T7.js.map} +0 -0
  740. /package/dist/{chunk-7FXPMQRW.js.map → chunk-B6HCIAM3.js.map} +0 -0
  741. /package/dist/{chunk-L2ED35QZ.js.map → chunk-CCIZJAXB.js.map} +0 -0
  742. /package/dist/{chunk-UFYU7AKL.js.map → chunk-DHZL3FBC.js.map} +0 -0
  743. /package/dist/{chunk-AQ4OP4GR.js.map → chunk-DONWY7TP.js.map} +0 -0
  744. /package/dist/{chunk-2TIYJ3PH.js.map → chunk-DVDDXOWT.js.map} +0 -0
  745. /package/dist/{chunk-74QJDBIP.js.map → chunk-E6DRQJJT.js.map} +0 -0
  746. /package/dist/{chunk-BNN32RI2.js.map → chunk-ESKU6LNC.js.map} +0 -0
  747. /package/dist/{chunk-SEQLC4AD.js.map → chunk-F6V4AYWP.js.map} +0 -0
  748. /package/dist/{chunk-ITYEOGLB.js.map → chunk-FBAJTPBU.js.map} +0 -0
  749. /package/dist/{chunk-LI7FE335.js.map → chunk-FGMPKWT5.js.map} +0 -0
  750. /package/dist/{chunk-D4U5X2QQ.js.map → chunk-FK4MYVW2.js.map} +0 -0
  751. /package/dist/{chunk-3TU6TRLQ.js.map → chunk-FMBJ4SKC.js.map} +0 -0
  752. /package/dist/{chunk-WYZ4COTF.js.map → chunk-FQRLSKJC.js.map} +0 -0
  753. /package/dist/{chunk-C5QOWZK6.js.map → chunk-G6ELKVBG.js.map} +0 -0
  754. /package/dist/{chunk-NBMJ2UMA.js.map → chunk-GO5SIPFE.js.map} +0 -0
  755. /package/dist/{chunk-P4ENJUBN.js.map → chunk-GPOECA3V.js.map} +0 -0
  756. /package/dist/{chunk-TVXESYIR.js.map → chunk-GW7DHJYH.js.map} +0 -0
  757. /package/dist/{chunk-JWX7GYHP.js.map → chunk-H2K5KZP7.js.map} +0 -0
  758. /package/dist/{chunk-22KWZOCN.js.map → chunk-H5XFH3FV.js.map} +0 -0
  759. /package/dist/{chunk-A2Y3GEUH.js.map → chunk-HAMDFQIX.js.map} +0 -0
  760. /package/dist/{chunk-5ZICCKEH.js.map → chunk-HH4QLSTK.js.map} +0 -0
  761. /package/dist/{chunk-LLPFFNLV.js.map → chunk-IBTPGSYI.js.map} +0 -0
  762. /package/dist/{chunk-QXCVG66S.js.map → chunk-IIRU6VK2.js.map} +0 -0
  763. /package/dist/{chunk-PF6MKI4X.js.map → chunk-IP4T477W.js.map} +0 -0
  764. /package/dist/{chunk-6UU7VPDO.js.map → chunk-JHOGX5VE.js.map} +0 -0
  765. /package/dist/{chunk-JDX4E7ZO.js.map → chunk-JOXUBWN3.js.map} +0 -0
  766. /package/dist/{chunk-SEIANPCX.js.map → chunk-K57RR3FD.js.map} +0 -0
  767. /package/dist/{chunk-AHLUW2BN.js.map → chunk-K6JLCMVL.js.map} +0 -0
  768. /package/dist/{chunk-OM326NV3.js.map → chunk-KSFSM46X.js.map} +0 -0
  769. /package/dist/{chunk-BHVDOW3W.js.map → chunk-KVG7FTTK.js.map} +0 -0
  770. /package/dist/{chunk-HLRNIO5K.js.map → chunk-LEDPPLQK.js.map} +0 -0
  771. /package/dist/{chunk-YJ2HC4CP.js.map → chunk-LUTT3MBZ.js.map} +0 -0
  772. /package/dist/{chunk-NTVM4ZPG.js.map → chunk-MPJHDHBA.js.map} +0 -0
  773. /package/dist/{chunk-M464GTNI.js.map → chunk-O4PXELXF.js.map} +0 -0
  774. /package/dist/{chunk-ZZSDYKD5.js.map → chunk-ORPCSG6T.js.map} +0 -0
  775. /package/dist/{chunk-4OEOQX4L.js.map → chunk-OUKDZKSZ.js.map} +0 -0
  776. /package/dist/{chunk-T5KFRIP4.js.map → chunk-P5HLYAHP.js.map} +0 -0
  777. /package/dist/{chunk-SK7YVOQN.js.map → chunk-PIACSJPH.js.map} +0 -0
  778. /package/dist/{chunk-WCTH7CB3.js.map → chunk-PQABAAEZ.js.map} +0 -0
  779. /package/dist/{chunk-HTHH2B6D.js.map → chunk-PSMDCZET.js.map} +0 -0
  780. /package/dist/{chunk-I7X6K4OL.js.map → chunk-RFIVPTMS.js.map} +0 -0
  781. /package/dist/{chunk-PJTQP6RL.js.map → chunk-RSU37SVQ.js.map} +0 -0
  782. /package/dist/{chunk-WGSWVYHY.js.map → chunk-SPAIFVM2.js.map} +0 -0
  783. /package/dist/{chunk-PZ3L3KM6.js.map → chunk-T2HYA2KL.js.map} +0 -0
  784. /package/dist/{chunk-5HCB4HNL.js.map → chunk-TE3DK3A6.js.map} +0 -0
  785. /package/dist/{chunk-3656ZY4T.js.map → chunk-TIQPSXFJ.js.map} +0 -0
  786. /package/dist/{chunk-DV444SFD.js.map → chunk-TN5GSG34.js.map} +0 -0
  787. /package/dist/{chunk-BBIPZ2UF.js.map → chunk-UBGTQMOO.js.map} +0 -0
  788. /package/dist/{chunk-2NQ4TM74.js.map → chunk-UE5ZYM63.js.map} +0 -0
  789. /package/dist/{chunk-DWWAB4YQ.js.map → chunk-UQACPOCM.js.map} +0 -0
  790. /package/dist/{chunk-U3UR3U3F.js.map → chunk-UR3C4SCH.js.map} +0 -0
  791. /package/dist/{chunk-FVWCYGJL.js.map → chunk-UWX7W22M.js.map} +0 -0
  792. /package/dist/{chunk-NI7VSKJI.js.map → chunk-VLTDUJRM.js.map} +0 -0
  793. /package/dist/{chunk-VIYGTRUZ.js.map → chunk-W6UUEAEP.js.map} +0 -0
  794. /package/dist/{chunk-FP5VKE3Z.js.map → chunk-Y3TDC7NU.js.map} +0 -0
  795. /package/dist/{chunk-PEKVBCIH.js.map → chunk-YOTWMCT5.js.map} +0 -0
  796. /package/dist/{chunk-KLFROH3F.js.map → chunk-YUMPQ3CJ.js.map} +0 -0
  797. /package/dist/{condition-S52W57ZO.js.map → condition-VHP2L4GM.js.map} +0 -0
  798. /package/dist/{controls-B4MTTPWO.js.map → controls-N5Q7U7JR.js.map} +0 -0
  799. /package/dist/{controls.config-6KBCTIPN.js.map → controls.config-NJMW4SLR.js.map} +0 -0
  800. /package/dist/{correlation-VSBCBFFP.js.map → correlation-3LDASF5I.js.map} +0 -0
  801. /package/dist/{cuminc-T5ZPAGVB.js.map → cuminc-UWJ23W6C.js.map} +0 -0
  802. /package/dist/{cuminc.integration.spec-2QT3IPHU.js.map → cuminc.integration.spec-OZYYET3W.js.map} +0 -0
  803. /package/dist/{customdata.inputui-5MHQQHJL.js.map → customdata.inputui-2FVCVSE4.js.map} +0 -0
  804. /package/dist/{dataDownload-S4EBNHMW.js.map → dataDownload-4S4PE5HX.js.map} +0 -0
  805. /package/dist/{dataDownload.integration.spec-OVSIWI34.js.map → dataDownload.integration.spec-B57LEKFZ.js.map} +0 -0
  806. /package/dist/{databrowser.ui-EAJS3NXV.js.map → databrowser.ui-N6GHEQ2P.js.map} +0 -0
  807. /package/dist/{dictionary-CQHSMVYF.js.map → dictionary-UP46QRYZ.js.map} +0 -0
  808. /package/dist/{dnaMethylation-G3F2INDH.js.map → dnaMethylation-BOGAUAWA.js.map} +0 -0
  809. /package/dist/{dnaMethylation.integration.spec-FWF4353K.js.map → dnaMethylation.integration.spec-UAHBJSSJ.js.map} +0 -0
  810. /package/dist/{e2pca-SLXGPVHP.js.map → e2pca-L5EBQJNP.js.map} +0 -0
  811. /package/dist/{ep-4HGUSDGJ.js.map → ep-Z67ORKUX.js.map} +0 -0
  812. /package/dist/{expclust.gdc.spec-JJ42ESKE.js.map → expclust.gdc.spec-SP7VOL64.js.map} +0 -0
  813. /package/dist/{facet-6WVTVKDV.js.map → facet-HDB4VDGU.js.map} +0 -0
  814. /package/dist/{geneExpClustering-5LOZPD5X.js.map → geneExpClustering-6ZPOLTDJ.js.map} +0 -0
  815. /package/dist/{geneExpression-BJ46UGXW.js.map → geneExpression-T6YIG4XQ.js.map} +0 -0
  816. /package/dist/{geneExpression-PTSZWKCM.js.map → geneExpression-T7QUHV5S.js.map} +0 -0
  817. /package/dist/{geneExpression.unit.spec-NW5HTO7F.js.map → geneExpression.unit.spec-DO52L5IB.js.map} +0 -0
  818. /package/dist/{geneORA-H65EZ7QO.js.map → geneORA-KOUDUWUO.js.map} +0 -0
  819. /package/dist/{geneVariant-T6GWOVZD.js.map → geneVariant-FVR76F6I.js.map} +0 -0
  820. /package/dist/{geneVariant-WTDFZTXG.js.map → geneVariant-I5QUITKG.js.map} +0 -0
  821. /package/dist/{geneVariant.integration.spec-OPSBRUM3.js.map → geneVariant.integration.spec-D4IRM7B5.js.map} +0 -0
  822. /package/dist/{genefusion.ui-RSBCC37C.js.map → genefusion.ui-35IYSZD7.js.map} +0 -0
  823. /package/dist/{geneset-B67PAZVL.js.map → geneset-7ZHJ5KWK.js.map} +0 -0
  824. /package/dist/{genomeBrowser.spec-AUTULF4C.js.map → genomeBrowser.spec-VXASVLNH.js.map} +0 -0
  825. /package/dist/{grin2-JVCNH3KW.js.map → grin2-7NM56COO.js.map} +0 -0
  826. /package/dist/{grin2-CMBP7XVH.js.map → grin2-IY26UUQI.js.map} +0 -0
  827. /package/dist/{gsea-H774WVPQ.js.map → gsea-TORO46C6.js.map} +0 -0
  828. /package/dist/{hierCluster-IQTXQUMI.js.map → hierCluster-3BKEGW6P.js.map} +0 -0
  829. /package/dist/{hierCluster-ZQJDXYBD.js.map → hierCluster-HM3LOM6V.js.map} +0 -0
  830. /package/dist/{hierCluster.config-ZHJTZK5L.js.map → hierCluster.config-LDO5IGQ5.js.map} +0 -0
  831. /package/dist/{hierCluster.integration.spec-MSJ5GHHK.js.map → hierCluster.integration.spec-XO5R6CQT.js.map} +0 -0
  832. /package/dist/{hierCluster.interactivity-H2GNO6AA.js.map → hierCluster.interactivity-NVQ6262K.js.map} +0 -0
  833. /package/dist/{hierCluster.renderers-2TE6HMK2.js.map → hierCluster.renderers-SWPPNBLU.js.map} +0 -0
  834. /package/dist/{imagePlot-FMNMB7JZ.js.map → imagePlot-V4WLAPV6.js.map} +0 -0
  835. /package/dist/{importPlot-N66G43XX.js.map → importPlot-NZKQEOX4.js.map} +0 -0
  836. /package/dist/{isoformExpression-B64WLO3H.js.map → isoformExpression-TIZBIGNL.js.map} +0 -0
  837. /package/dist/{launch.adhoc-MPRAJ3GN.js.map → launch.adhoc-JYEN42NM.js.map} +0 -0
  838. /package/dist/{leftlabel.sample-4JCKYXED.js.map → leftlabel.sample-43DL3J3H.js.map} +0 -0
  839. /package/dist/{legacyDataset-PBCPC5I7.js.map → legacyDataset-QRSNRVUA.js.map} +0 -0
  840. /package/dist/{lollipop-25ADHT7O.js.map → lollipop-NMWZ4FVF.js.map} +0 -0
  841. /package/dist/{maftimeline-FOQF6O3X.js.map → maftimeline-ZB2753S7.js.map} +0 -0
  842. /package/dist/{matrix-LHLAYDTQ.js.map → matrix-RCGQWQ3C.js.map} +0 -0
  843. /package/dist/{matrix-ZKF7NRAD.js.map → matrix-WTTEK4FT.js.map} +0 -0
  844. /package/dist/{matrix.cells-H4TS74FJ.js.map → matrix.cells-UO5ASQ35.js.map} +0 -0
  845. /package/dist/{matrix.config-HE7QUDER.js.map → matrix.config-3UQAT3QR.js.map} +0 -0
  846. /package/dist/{matrix.controls-VILCLNSC.js.map → matrix.controls-PRZ77K5L.js.map} +0 -0
  847. /package/dist/{matrix.data-2OUWYD35.js.map → matrix.data-4W73RQ3H.js.map} +0 -0
  848. /package/dist/{matrix.groups-5BGJIOOJ.js.map → matrix.groups-5VMPI7SA.js.map} +0 -0
  849. /package/dist/{matrix.integration.spec-DSXZHAEY.js.map → matrix.integration.spec-2F5LDLC2.js.map} +0 -0
  850. /package/dist/{matrix.interactivity-VK3NWX5M.js.map → matrix.interactivity-MIPZ6ELV.js.map} +0 -0
  851. /package/dist/{matrix.layout-PUNMMNCC.js.map → matrix.layout-EO5LVYRO.js.map} +0 -0
  852. /package/dist/{matrix.legend-QMERGVYU.js.map → matrix.legend-QBFBFEUG.js.map} +0 -0
  853. /package/dist/{matrix.renderers-2KQ2NXSQ.js.map → matrix.renderers-ERJXVCQL.js.map} +0 -0
  854. /package/dist/{matrix.serieses-24G3XPJD.js.map → matrix.serieses-E23EPXHA.js.map} +0 -0
  855. /package/dist/{matrix.sort-HTVT4K7C.js.map → matrix.sort-I4UGMEXR.js.map} +0 -0
  856. /package/dist/{matrix.sort.unit.spec-EUVL76NB.js.map → matrix.sort.unit.spec-CRGF6CSE.js.map} +0 -0
  857. /package/dist/{matrix.sorterUi-PJPFXWOJ.js.map → matrix.sorterUi-YLSYTYLE.js.map} +0 -0
  858. /package/dist/{matrix.sorterUi.unit.spec-QWL5Y4DQ.js.map → matrix.sorterUi.unit.spec-ENG3ICOO.js.map} +0 -0
  859. /package/dist/{mavb-UGM5SHEF.js.map → mavb-5WR7OJHI.js.map} +0 -0
  860. /package/dist/{mds.fimo-64US7RTE.js.map → mds.fimo-3ZRH7BBJ.js.map} +0 -0
  861. /package/dist/{mds.samplescatterplot-JMXLXVIE.js.map → mds.samplescatterplot-RPXR2FVK.js.map} +0 -0
  862. /package/dist/{mds.survivalplot-RJ5UD3IU.js.map → mds.survivalplot-WSSMYUZD.js.map} +0 -0
  863. /package/dist/{oncomatrix.spec-4YLKDGFE.js.map → oncomatrix.spec-OEGU4DYK.js.map} +0 -0
  864. /package/dist/{plot.2dvaf-DYSU6BBN.js.map → plot.2dvaf-ZGARLQNK.js.map} +0 -0
  865. /package/dist/{plot.app-NFBVLAXZ.js.map → plot.app-TKUJH3LK.js.map} +0 -0
  866. /package/dist/{plot.barplot-DBGTDK7J.js.map → plot.barplot-FEIPGDZ2.js.map} +0 -0
  867. /package/dist/{plot.boxplot-MCKZUROP.js.map → plot.boxplot-6RASUMZB.js.map} +0 -0
  868. /package/dist/{plot.brainImaging-BBAVUEB4.js.map → plot.brainImaging-ZJPFWX2W.js.map} +0 -0
  869. /package/dist/{plot.disco-VGOEQYRL.js.map → plot.disco-2KTKB3XX.js.map} +0 -0
  870. /package/dist/{plot.dzi-YQIFOTZQ.js.map → plot.dzi-PC34YI6Y.js.map} +0 -0
  871. /package/dist/{plot.ssgq-MU3BRTMC.js.map → plot.ssgq-Z4UNJKWO.js.map} +0 -0
  872. /package/dist/{plot.vaf2cov-KDHZ7JXJ.js.map → plot.vaf2cov-NZ4WULKT.js.map} +0 -0
  873. /package/dist/{plot.wsi-G2TUGQF7.js.map → plot.wsi-YYXFAZWY.js.map} +0 -0
  874. /package/dist/{polar-RCCZXZIU.js.map → polar-X2GPIBLB.js.map} +0 -0
  875. /package/dist/{polar2-COQ3WIGW.js.map → polar2-TZ553QQH.js.map} +0 -0
  876. /package/dist/{profile.spec-A4ZASR2T.js.map → profile.spec-VB6VMFLY.js.map} +0 -0
  877. /package/dist/{profileBarchart-GB4RK5DF.js.map → profileBarchart-SKJSTC7B.js.map} +0 -0
  878. /package/dist/{profileForms-O5KBHRF6.js.map → profileForms-RLOGSMAQ.js.map} +0 -0
  879. /package/dist/{profilePlot-COCLCP5B.js.map → profilePlot-267ZS3RG.js.map} +0 -0
  880. /package/dist/{profileRadar-4EE3YDOH.js.map → profileRadar-KGOBHCSF.js.map} +0 -0
  881. /package/dist/{profileRadarFacility-JYTSGA5H.js.map → profileRadarFacility-MCJKSHUM.js.map} +0 -0
  882. /package/dist/{proteomeAbundance-NQVU4DOW.js.map → proteomeAbundance-JUYAYO5I.js.map} +0 -0
  883. /package/dist/{proteomeAbundance-JBVXUSD6.js.map → proteomeAbundance-PGHZSVAF.js.map} +0 -0
  884. /package/dist/{qualitative-QROOPDSI.js.map → qualitative-3IECKKJM.js.map} +0 -0
  885. /package/dist/{regression-7FQZ22OO.js.map → regression-J6FFRPXN.js.map} +0 -0
  886. /package/dist/{regression.inputs-F62CES3A.js.map → regression.inputs-T7LWBSYZ.js.map} +0 -0
  887. /package/dist/{regression.inputs.term-BCGP7PX4.js.map → regression.inputs.term-TT7PNX6G.js.map} +0 -0
  888. /package/dist/{regression.inputs.values.table-D3ZXZSH7.js.map → regression.inputs.values.table-SHFUNKCS.js.map} +0 -0
  889. /package/dist/{regression.integration.spec-P2BBTT2O.js.map → regression.integration.spec-QKHMJTHA.js.map} +0 -0
  890. /package/dist/{regression.results-JX6RJQQP.js.map → regression.results-D4WX6VIV.js.map} +0 -0
  891. /package/dist/{regression.spec-ROME7T33.js.map → regression.spec-7SW55L7X.js.map} +0 -0
  892. /package/dist/{report-B6MM4T6B.js.map → report-QYOZ4BRF.js.map} +0 -0
  893. /package/dist/{sampleScatter.spec-EPCMC3SR.js.map → sampleScatter.spec-JCHFMGNF.js.map} +0 -0
  894. /package/dist/{sampleView-77EAJ75T.js.map → sampleView-7RPKNAZC.js.map} +0 -0
  895. /package/dist/{samplelst-CX4NQWA7.js.map → samplelst-4WNPHZVG.js.map} +0 -0
  896. /package/dist/{samplematrix-PYQFAH64.js.map → samplematrix-CG52DSXJ.js.map} +0 -0
  897. /package/dist/{sc-X6SI5VVI.js.map → sc-OJSWILSA.js.map} +0 -0
  898. /package/dist/{scatter-ZFFHAI4F.js.map → scatter-LG2RMMEC.js.map} +0 -0
  899. /package/dist/{scatter.integration.spec-NN43OXRN.js.map → scatter.integration.spec-QPANYTKW.js.map} +0 -0
  900. /package/dist/{selectGenomeWithTklst-CZMVTBMD.js.map → selectGenomeWithTklst-QXRVE6N4.js.map} +0 -0
  901. /package/dist/{singleCellCellType-GOBX7JKV.js.map → singleCellCellType-XBSRL33U.js.map} +0 -0
  902. /package/dist/{singleCellCellType.unit.spec-F344QMTQ.js.map → singleCellCellType.unit.spec-YZX4CSXA.js.map} +0 -0
  903. /package/dist/{singleCellGeneExpression-BLMNMEAI.js.map → singleCellGeneExpression-64ECP62X.js.map} +0 -0
  904. /package/dist/{singleCellGeneExpression.unit.spec-6ZEPUFWC.js.map → singleCellGeneExpression.unit.spec-CFHFXMA6.js.map} +0 -0
  905. /package/dist/{singleCellPlot-HLD7PLQH.js.map → singleCellPlot-E5F62JY6.js.map} +0 -0
  906. /package/dist/{singlecell-JQFPINRS.js.map → singlecell-FCY5EOUV.js.map} +0 -0
  907. /package/dist/{singlecell-HL4GLGIA.js.map → singlecell-S7B5V7NK.js.map} +0 -0
  908. /package/dist/{snp-EAUNFDAV.js.map → snp-ACKX4GRX.js.map} +0 -0
  909. /package/dist/{snp.unit.spec-AVLPMAWI.js.map → snp.unit.spec-QBGHKKUD.js.map} +0 -0
  910. /package/dist/{snplocus-2J7OA6OL.js.map → snplocus-7EUOW7J7.js.map} +0 -0
  911. /package/dist/{spliceevent.a53ss.diagram-4DU2U7NW.js.map → spliceevent.a53ss.diagram-ALQZA35Z.js.map} +0 -0
  912. /package/dist/{spliceevent.exonskip.diagram-GG5FGXOK.js.map → spliceevent.exonskip.diagram-UF7WJA5R.js.map} +0 -0
  913. /package/dist/{spliceevent.noeventdiagram-T6RNIMCM.js.map → spliceevent.noeventdiagram-4HPGRNRR.js.map} +0 -0
  914. /package/dist/{ssGSEA-XJWLRVFQ.js.map → ssGSEA-FDRBBBLJ.js.map} +0 -0
  915. /package/dist/{ssGSEA.unit.spec-MQ23ODYO.js.map → ssGSEA.unit.spec-EZEOWJVV.js.map} +0 -0
  916. /package/dist/{summarizeCnvGeneexp-CJPC76RM.js.map → summarizeCnvGeneexp-FTL2MGAJ.js.map} +0 -0
  917. /package/dist/{summarizeGeneexpSurvival-FGCFZTVG.js.map → summarizeGeneexpSurvival-DDIF4UW6.js.map} +0 -0
  918. /package/dist/{summarizeMutationCnv-4E7R2NHQ.js.map → summarizeMutationCnv-L3GL5YDY.js.map} +0 -0
  919. /package/dist/{summarizeMutationDiagnosis-ZVX7AZK7.js.map → summarizeMutationDiagnosis-LALOJTHV.js.map} +0 -0
  920. /package/dist/{summarizeMutationSurvival-EWXD7TCT.js.map → summarizeMutationSurvival-TSNTSOBZ.js.map} +0 -0
  921. /package/dist/{summary-VUYBKQOC.js.map → summary-YRHVS64T.js.map} +0 -0
  922. /package/dist/{summary.integration.spec-EPBV5XCT.js.map → summary.integration.spec-766YQLQA.js.map} +0 -0
  923. /package/dist/{summaryInput-YX5IRGWM.js.map → summaryInput-VQ2X6GSX.js.map} +0 -0
  924. /package/dist/{sunburst-HPDML45I.js.map → sunburst-XFOONS6K.js.map} +0 -0
  925. /package/dist/{survival-E6SRRXBB.js.map → survival-FQXZH2MM.js.map} +0 -0
  926. /package/dist/{survival-XOXDPXZR.js.map → survival-TVA3ZWVP.js.map} +0 -0
  927. /package/dist/{survival.integration.spec-SJBPJZGJ.js.map → survival.integration.spec-WFIOPD6A.js.map} +0 -0
  928. /package/dist/{svgraph-D23WG3UE.js.map → svgraph-4BFBO7EL.js.map} +0 -0
  929. /package/dist/{svmr-UFC4TKWV.js.map → svmr-ML7GAIIA.js.map} +0 -0
  930. /package/dist/{table-US2K6IYZ.js.map → table-SMLMUWPP.js.map} +0 -0
  931. /package/dist/{termCollection-ZMP3VE2G.js.map → termCollection-22CPTISZ.js.map} +0 -0
  932. /package/dist/{termCollection-E7S57CIN.js.map → termCollection-EE6AOIVA.js.map} +0 -0
  933. /package/dist/{termCollection.unit.spec-MDWK6XH3.js.map → termCollection.unit.spec-4DIW3CJ3.js.map} +0 -0
  934. /package/dist/{tk-TLQJK6R4.js.map → tk-ITZCKOQ5.js.map} +0 -0
  935. /package/dist/{tp.ui-NQEAKWUH.js.map → tp.ui-R6HVKCBC.js.map} +0 -0
  936. /package/dist/{tvs.density-HSVPDDGA.js.map → tvs.density-AQ5GD437.js.map} +0 -0
  937. /package/dist/{tvs.dt-U2MINIBH.js.map → tvs.dt-2263TBEJ.js.map} +0 -0
  938. /package/dist/{tvs.dtcnv.categorical-2OOAZJKC.js.map → tvs.dtcnv.categorical-TRRHL33N.js.map} +0 -0
  939. /package/dist/{tvs.dtcnv.continuous-5ETKBJ52.js.map → tvs.dtcnv.continuous-GREYNF52.js.map} +0 -0
  940. /package/dist/{tvs.dtfusion-EB4PPR3Y.js.map → tvs.dtfusion-XOX46L3M.js.map} +0 -0
  941. /package/dist/{tvs.dtsnvindel-IRQPTKQF.js.map → tvs.dtsnvindel-IDMXT53F.js.map} +0 -0
  942. /package/dist/{tvs.dtsv-TOVXZJCR.js.map → tvs.dtsv-ZDWFYH2C.js.map} +0 -0
  943. /package/dist/{tvs.numeric-ICUGA4WY.js.map → tvs.numeric-ZN2R7BH3.js.map} +0 -0
  944. /package/dist/{tvs.samplelst-4SCH543Y.js.map → tvs.samplelst-GAP76HRH.js.map} +0 -0
  945. /package/dist/{tvs.termCollection-GGN5F6HC.js.map → tvs.termCollection-GQ65UKSI.js.map} +0 -0
  946. /package/dist/{violin-7D7DN74I.js.map → violin-JGDL62YA.js.map} +0 -0
  947. /package/dist/{violin.integration.spec-KE76AL54.js.map → violin.integration.spec-W4NN7LBY.js.map} +0 -0
  948. /package/dist/{violin.interactivity-YPJ2H6SQ.js.map → violin.interactivity-H4RP4K5U.js.map} +0 -0
  949. /package/dist/{violin.renderer-UK7WSA2Z.js.map → violin.renderer-QPHLACDC.js.map} +0 -0
  950. /package/dist/{vocabulary-KLWZ6LRP.js.map → vocabulary-7JACY4J2.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../plots/regression.results.js"],
4
+ "sourcesContent": ["import { scaleLinear, scaleLog } from 'd3-scale'\nimport { axisBottom } from 'd3-axis'\nimport { first_genetrack_tolist } from '../common/1stGenetk'\nimport { interpolateRgb } from 'd3-interpolate'\nimport { sayerror, axisstyle, drawBoxplot, makeSsmLink, ColorScale, Menu } from '#dom'\nimport { roundValue } from '#shared/roundValue.js'\n\n/*************\ncan dynamically add following attributes\n\n- this.snplocusBlock:\n\tfor snplocus term\n\tdisplay in this.dom.snplocusBlockDiv\n- this.hasUnsubmittedEdits_nullify_singleuse:\n\tto negate hasUnsubmittedEdits and keep running analysis\n\n**************** R result object\nresult.data: {}\n\twarnings\n\tsampleSize: int\n\theaderRow: { k:str, v:str }\n\tresiduals: { header[], rows[], label:str }\n\tcoefficients: { header[], intercept[], terms{}, interactions[], label }\n\ttype3: {header[], intercept[], terms{}, interactions[], label }\n\ttotalSnpEffect: {header[], intercept[], snp, interactions[], lst, label }\n\tother: {header[], rows[], label}\n\n\n*************** function cascade\nmain\n\tdisplayResult\n\t\tcreateGenomebrowser\n\t\t\tgetMtooltipValues\n\t\t\tmayCheckLD\n\t\t\t\tshowLDlegend\n\t\tupdateMds3Tk\n\t\t\tmake_mds3_variants\n\t\tshow_genomebrowser_snplocus\n\t\tdisplayResult_oneset\n\t\t\tmayshow_warn\n\t\t\tmayshow_splinePlots\n\t\t\tmayshow_residuals\n\t\t\tmayshow_coefficients\n\t\t\tmayshow_totalSnpEffect\n\t\t\tmayshow_type3\n\t\t\tmayshow_other\n\t\t\tmayshow_fisher\n\t\t\tmayshow_wilcoxon\n\t\t\tmayshow_cuminc\n*/\n\nconst refGrp_NA = 'NA' // refGrp value is not applicable, hardcoded for R\nconst forestcolor = '#126e08' // forest plot color\nconst boxplotcolor = forestcolor\n\nexport class RegressionResults {\n\tconstructor(opts) {\n\t\tthis.opts = opts\n\t\tthis.app = opts.app\n\t\t// reference to the parent component's mutable instance (not its API)\n\t\tthis.parent = opts.parent\n\t\tthis.type = 'regression'\n\t\tsetInteractivity(this)\n\t\tsetRenderers(this)\n\n\t\tconst holder = this.opts.holder\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.style('margin-top', '10px')\n\t\t\t.style('padding-top', '20px')\n\t\t\t.style('font-size', '1.2em')\n\t\t\t.style('opacity', 0.3)\n\t\t\t.html('Results')\n\n\t\tthis.dom = {\n\t\t\tholder,\n\t\t\terr_div: holder.append('div'),\n\t\t\tsnplocusBlockDiv: holder.append('div'),\n\t\t\t// is where newDiv() and displayResult_oneset() writes to\n\t\t\toneSetResultDiv: holder.append('div').style('margin', '10px'),\n\t\t\ttip: new Menu({ padding: '9px' })\n\t\t}\n\t}\n\n\tasync main() {\n\t\ttry {\n\t\t\tthis.parent.inputs.dom.submitBtn.text('Running...')\n\t\t\t// share the writable config copy\n\t\t\tthis.config = this.parent.config\n\t\t\tthis.state = this.parent.state\n\t\t\tif (\n\t\t\t\t!this.state.formIsComplete ||\n\t\t\t\tthis.parent.inputs.hasError ||\n\t\t\t\t(this.config.hasUnsubmittedEdits && !this.hasUnsubmittedEdits_nullify_singleuse)\n\t\t\t) {\n\t\t\t\t// no result to show\n\t\t\t\t// remove block instance when input variables are edited\n\t\t\t\tdelete this.snplocusBlock\n\t\t\t\tthis.dom.snplocusBlockDiv.selectAll('*').remove()\n\t\t\t\tthis.dom.holder.style('display', 'none')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tdelete this.hasUnsubmittedEdits_nullify_singleuse // single-use, delete\n\n\t\t\tif (this.snplocusBlock) {\n\t\t\t\t// if a block instance is already made, cloak it\n\t\t\t\tthis.snplocusBlock.cloakOn()\n\t\t\t}\n\n\t\t\t// submit server request to run analysis\n\t\t\tconst data = await this.app.vocabApi.getRegressionData(this.getDataRequestOpts())\n\t\t\tif (data.error) throw data.error\n\t\t\tthis.dom.err_div.style('display', 'none')\n\t\t\tthis.dom.oneSetResultDiv.selectAll('*').remove()\n\t\t\tthis.dom.holder.style('display', 'block')\n\t\t\tawait this.displayResult(data)\n\n\t\t\t// scroll to results\n\t\t\tconst results_y = this.dom.holder.node().getBoundingClientRect().top + window.scrollY\n\t\t\tconst nav_height = document.querySelector('.sjpp-nav').getBoundingClientRect().height\n\t\t\twindow.scroll({ behavior: 'smooth', top: results_y - nav_height })\n\t\t} catch (e) {\n\t\t\tthis.hasError = true\n\t\t\tthis.dom.holder.style('display', 'block')\n\t\t\tthis.dom.err_div.style('display', 'block')\n\t\t\tsayerror(this.dom.err_div, 'Error: ' + (e.error || e))\n\t\t\tthis.parent.inputs.dom.submitBtn.property('disabled', true)\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// creates an opts object for the vocabApi.getRegressionData()\n\tgetDataRequestOpts() {\n\t\tconst c = this.config\n\t\tconst opts = {\n\t\t\tregressionType: c.regressionType,\n\t\t\toutcome: c.outcome,\n\t\t\tindependent: c.independent,\n\t\t\tincludeUnivariate: c.includeUnivariate\n\t\t}\n\t\topts.filter = this.parent.filter\n\t\treturn opts\n\t}\n\n\tgetIndependentInput(tid) {\n\t\t/* arg is independent tw $id or snpid\n\t\treturn input instance\n\t\tfor accessing input.orderedLabels and input.term{refGrp, term{}, q{}} which is term-wrapper\n\n\t\tin order to reliably access refGrp,\n\t\tmust use termwrapper from Input instance but not this.state.config\n\t\tdue to a specific condition when refGrp is set in self.config, but is missing from state\n\t\tthis happens when launching from a parameterized url that's missing refgrp for the term\n\t\tand the refGrp is dynamically filled by input.updateTerm() but not propagated to state\n\t\t*/\n\t\tfor (const i of this.parent.inputs.independent.inputLst) {\n\t\t\tif (!i.term) continue\n\t\t\tif (i.term.term && i.term.term.snps) {\n\t\t\t\t// is a snplst or snplocus term with .snps[]\n\t\t\t\tfor (const snp of i.term.term.snps) {\n\t\t\t\t\tif (snp.snpid == tid) {\n\t\t\t\t\t\t// tid matches with a snpid\n\t\t\t\t\t\t// make up an object looking like an Input instance for this snp/variant\n\t\t\t\t\t\tconst tw = {\n\t\t\t\t\t\t\tid: tid,\n\t\t\t\t\t\t\tq: {\n\t\t\t\t\t\t\t\tgeneticModel: i.term.q.geneticModel\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tterm: {\n\t\t\t\t\t\t\t\tid: tid,\n\t\t\t\t\t\t\t\tname: tid\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tinteractions: i.term.interactions,\n\t\t\t\t\t\t\teffectAllele: i.term.q.snp2effAle[tid],\n\t\t\t\t\t\t\tgt2count: snp.gt2count\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (i.term.q.snp2refGrp) {\n\t\t\t\t\t\t\ttw.refGrp = i.term.q.snp2refGrp[tid]\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (snp.mlst) {\n\t\t\t\t\t\t\t// try to update tw.term.name\n\t\t\t\t\t\t\tconst m = snp.mlst.find(j => j.alt == i.term.q.snp2effAle[tid])\n\t\t\t\t\t\t\tif (m) {\n\t\t\t\t\t\t\t\ttw.term.name = m.mname\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttw.term.name = snp.mlst[0].mname\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { term: tw }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (i.term.$id == tid) return i\n\t\t}\n\t\t// given tid does not match with an Input\n\t\t// can be an ancestry PC which is automatically added by serverside and not recorded on client\n\t\t// quick fix: return dummy tw so it won't break\n\t\treturn {\n\t\t\tterm: {\n\t\t\t\tid: tid,\n\t\t\t\tq: { mode: 'continuous' },\n\t\t\t\tterm: { name: tid }\n\t\t\t}\n\t\t}\n\t\t//throw 'cannot find Input for a tid: ' + tid\n\t}\n}\n\nfunction setInteractivity(self) {}\n\nfunction setRenderers(self) {\n\tself.displayResult = async result => {\n\t\t/*\n\t\tresult {\n\t\t\tresultLst [\n\t\t\t\t{ data: { err, splinePlots, residuals, ... }, id:'snp1' },\n\t\t\t\t{ data: { err, splinePlots, residuals, ... }, id:'snp2' },\n\t\t\t\t...\n\t\t\t]\n\t\t}\n\t\t*/\n\n\t\t// if there is a snplocus Input\n\t\tconst snplocusInput = self.parent.inputs.independent.inputLst.find(i => i.term && i.term.term.type == 'snplocus')\n\t\tif (snplocusInput) {\n\t\t\t/* has a snploucs term\n\t\t\tin result[], there's one set of result for each variant, identified by id\n\t\t\tshow a genome browser and a mds3 tk to show dots for the variants from snplocus term\n\t\t\tclicking on a dot in browser tk will call displayResult_oneset() to display its results\n\t\t\t*/\n\t\t\tif (!self.snplocusBlock) {\n\t\t\t\tself.dom.snplocusBlockDiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('margin-top', '30px')\n\t\t\t\t\t.style('opacity', 0.3)\n\t\t\t\t\t.text('Click on a variant within the browser to view its regression results')\n\t\t\t\tself.snplocusBlock = await createGenomebrowser(self, snplocusInput, result.resultLst)\n\t\t\t} else {\n\t\t\t\tawait updateMds3Tk(self, snplocusInput, result.resultLst)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\t// no snplocus, clear things if had it before\n\t\tdelete self.snplocusBlock\n\t\tself.dom.snplocusBlockDiv.selectAll('*').remove()\n\t\t// resultLst[] has only one set of result, from analyzing one model\n\t\tif (!result.resultLst[0] || !result.resultLst[0].data) throw 'result is not [ {data:{}} ]'\n\n\t\tself.displayResult_oneset(result.resultLst[0].data)\n\t}\n\n\tself.displayResult_oneset = result => {\n\t\tself.dom.oneSetResultDiv.selectAll('*').remove()\n\n\t\t// may be used when clicking snplocus dot\n\t\tself.dom.LDresultDiv = self.dom.oneSetResultDiv.append('div')\n\n\t\tself.mayshow_warn(result)\n\t\tif (result.sampleSize) self.newDiv('Sample size:', result.sampleSize)\n\t\tif (result.eventCnt) self.newDiv('Number of events:', result.eventCnt)\n\t\tself.mayshow_headerRow(result)\n\t\tself.mayshow_splinePlots(result)\n\t\tself.mayshow_residuals(result)\n\t\tself.mayshow_coefficients(result)\n\t\tself.mayshow_coxDisclaimer()\n\t\tself.mayshow_totalSnpEffect(result)\n\t\tself.mayshow_type3(result)\n\t\tself.mayshow_tests(result)\n\t\tself.mayshow_other(result)\n\t\tself.mayshow_fisher(result)\n\t\tself.mayshow_wilcoxon(result)\n\t\tself.mayshow_cuminc(result)\n\t}\n\n\tself.newDiv = (label, label2, getrow) => {\n\t\t// create div to show a section of the result\n\t\t// label is required, label2 is optional\n\t\t// specify getrow=true to return row instead of div\n\t\tconst div = self.dom.oneSetResultDiv.append('div').style('margin', '20px 0px 10px 0px').attr('name', label) //For integration testing\n\t\tconst row = div.append('div')\n\t\trow.append('span').style('text-decoration', 'underline').text(label)\n\t\tif (label2) {\n\t\t\trow.append('span').html(label2).style('margin-left', '5px')\n\t\t}\n\t\treturn getrow ? row : div.append('div').style('margin-left', '20px')\n\t}\n\n\tself.mayshow_warn = result => {\n\t\tif (!result.warnings) return\n\t\tconst div = self.newDiv('Warnings')\n\t\tconst warnings = new Set(result.warnings)\n\t\tfor (const line of warnings) {\n\t\t\tdiv.append('p').style('margin', '5px').text(line)\n\t\t}\n\t}\n\n\tself.mayshow_headerRow = result => {\n\t\tif (!result.headerRow) return\n\t\tconst k = result.headerRow.k\n\t\tconst v = result.headerRow.v\n\t\tconst snplocusInput = self.parent.inputs.independent.inputLst.find(i => i.term && i.term.term.type == 'snplocus')\n\t\tif (snplocusInput) {\n\t\t\t// header row is for snplocus results\n\t\t\t// variant label\n\t\t\tconst snp = snplocusInput.term.term.snps.find(snp => snp.snpid == v.snpid)\n\t\t\tconst m = snp.mlst[0]\n\t\t\tm.chr = snp.chr\n\t\t\tconst row = self.newDiv(k, null, true)\n\t\t\tconst snpLabelDom = row\n\t\t\t\t.append('span')\n\t\t\t\t.text(`${m.chr}:${m.pos + 1} ${m.ref && m.alt ? m.ref + '>' + m.alt : ''}`)\n\t\t\t\t.style('margin-left', '5px')\n\t\t\tconst urlConfig =\n\t\t\t\tself.app.vocabApi.termdbConfig.urlTemplates?.ssm || self.app.vocabApi.termdbConfig.queries?.snvindel?.ssmUrl\n\t\t\tif (urlConfig) {\n\t\t\t\t// add urls to snp label\n\t\t\t\tconst separateUrls = makeSsmLink(urlConfig, m, snpLabelDom, self.parent.genomeObj.name)\n\t\t\t\tif (separateUrls?.length) {\n\t\t\t\t\trow.append('span').style('margin-left', '10px').html(separateUrls.join(' '))\n\t\t\t\t}\n\t\t\t}\n\t\t\t// gt label\n\t\t\tlet labels\n\t\t\tconst gt_label = `Genotypes: ${v.gtcounts.join(', ')}`\n\t\t\tif (v.monomorphic) {\n\t\t\t\tlabels = [gt_label]\n\t\t\t} else {\n\t\t\t\t// effect allele label\n\t\t\t\tconst effale_label = `Effect allele: ${v.effAle}`\n\t\t\t\t// allel frequency label\n\t\t\t\tconst af_label = `Allele frequency: ${v.af}`\n\t\t\t\tlabels = [effale_label, af_label, gt_label]\n\t\t\t}\n\t\t\trow.append('span').html(`&nbsp;&#65372;&nbsp;${labels.join('&nbsp;&#65372;&nbsp;')}`)\n\t\t} else {\n\t\t\t// header row is not for snplocus results\n\t\t\tself.newDiv(k, v)\n\t\t}\n\t}\n\n\tself.mayshow_splinePlots = result => {\n\t\tif (!result.splinePlots) return\n\t\tconst div = self.newDiv('Cubic spline plots')\n\t\tdiv.style('display', 'flex').style('align-items', 'center')\n\t\tresult.splinePlots.sort((a, b) => {\n\t\t\t// univariate plots should appear before multivariate plots\n\t\t\tif (a.type == 'univariate' && b.type == 'multivariate') return -1\n\t\t\tif (a.type == 'multivariate' && b.type == 'univariate') return 1\n\t\t\treturn 0\n\t\t})\n\t\tfor (const plot of result.splinePlots) {\n\t\t\tconst plotDiv = div.append('div').style('margin', '0px 50px 5px 0px')\n\t\t\tplotDiv.append('img').attr('src', plot.src).attr('width', 670) // quick fix to hardcode width as half of what's used in R/src/regression.utils.R, for crisp img on high-res screen\n\t\t}\n\t}\n\n\tself.mayshow_residuals = result => {\n\t\tif (!result.residuals) return\n\t\tconst div = self.newDiv(result.residuals.label)\n\t\tconst table = div.append('table').style('border-spacing', '8px').attr('name', 'sjpp-residuals-table') //For integration tests\n\t\tconst tr1 = table.append('tr').style('opacity', 0.4)\n\t\tconst tr2 = table.append('tr')\n\t\tfor (let i = 0; i < result.residuals.header.length; i++) {\n\t\t\ttr1.append('td').text(result.residuals.header[i])\n\t\t\ttr2.append('td').text(result.residuals.rows[i])\n\t\t}\n\t}\n\n\tself.mayshow_cuminc = async result => {\n\t\tif (!result.cuminc) return\n\t\tconst holder = self.newDiv('Cumulative incidence test:' /*, 'p-value = ' + result.cuminc.pvalue*/)\n\t\tconst _ = await import('./cuminc')\n\t\tconst plotter = new _.Cuminc({\n\t\t\tholder,\n\t\t\tconfig: {\n\t\t\t\tterm: self.config.outcome,\n\t\t\t\tterm2: {\n\t\t\t\t\tterm: {\n\t\t\t\t\t\tname: 'Variant',\n\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t1: { key: 1, label: 'Has minor allele' },\n\t\t\t\t\t\t\t2: { key: 2, label: 'No minor allele' }\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})\n\n\t\tif (result.cuminc.ci_data) {\n\t\t\tplotter.main(result.cuminc.ci_data)\n\t\t} else {\n\t\t\tholder.append('div').style('margin', '20px').text(result.cuminc.msg)\n\t\t}\n\t}\n\n\tself.mayshow_wilcoxon = result => {\n\t\tif (!result.wilcoxon) return\n\t\tconst div = self.newDiv('Wilcoxon rank sum test:', 'p-value = ' + result.wilcoxon.pvalue)\n\t\tif (result.wilcoxon.boxplots) {\n\t\t\tconst bs = result.wilcoxon.boxplots\n\t\t\t// {hasEff{}, noEff{}, minv, maxv}\n\n\t\t\tconst boxplotHeight = 20,\n\t\t\t\tboxplotWidth = 400,\n\t\t\t\tleftLabelWidth = 160, // hardcoded number, must fit the boxplot labels\n\t\t\t\taxisheight = 40,\n\t\t\t\tlabpad = 20,\n\t\t\t\tvpad = 10\n\n\t\t\tconst scale = scaleLinear().domain([bs.minv, bs.maxv]).range([0, boxplotWidth])\n\n\t\t\tconst svg = div\n\t\t\t\t.append('svg')\n\t\t\t\t.style('margin-top', '10px')\n\t\t\t\t.attr('width', leftLabelWidth + labpad + boxplotWidth + 10)\n\t\t\t\t.attr('height', vpad * 3 + boxplotHeight * 2 + axisheight)\n\t\t\t// anchor\n\t\t\tconst g = svg.append('g').attr('transform', `translate(${leftLabelWidth + labpad},${vpad})`)\n\t\t\tdrawBoxplot({\n\t\t\t\tg: g.append('g'),\n\t\t\t\tbp: bs.hasEff,\n\t\t\t\tscale,\n\t\t\t\trowheight: boxplotHeight,\n\t\t\t\tcolor: boxplotcolor,\n\t\t\t\tlabpad\n\t\t\t})\n\t\t\tdrawBoxplot({\n\t\t\t\tg: g.append('g').attr('transform', `translate(0,${boxplotHeight + vpad})`),\n\t\t\t\tbp: bs.noEff,\n\t\t\t\tscale,\n\t\t\t\trowheight: boxplotHeight,\n\t\t\t\tcolor: boxplotcolor,\n\t\t\t\tlabpad\n\t\t\t})\n\t\t\t// axis\n\t\t\t{\n\t\t\t\tconst axisg = g.append('g').attr('transform', `translate(0,${boxplotHeight * 2 + vpad * 2})`)\n\t\t\t\tconst axis = axisBottom().scale(scale)\n\t\t\t\taxisstyle({\n\t\t\t\t\taxis: axisg.call(axis),\n\t\t\t\t\tcolor: boxplotcolor,\n\t\t\t\t\tshowline: true\n\t\t\t\t})\n\t\t\t\taxisg\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.text(self.config.outcome.term.name)\n\t\t\t\t\t.attr('font-size', 15)\n\t\t\t\t\t.attr('x', boxplotWidth / 2)\n\t\t\t\t\t.attr('y', axisheight - 5)\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('fill', boxplotcolor)\n\t\t\t}\n\t\t}\n\t}\n\n\tself.mayshow_fisher = result => {\n\t\tif (!result.fisher) return\n\t\tconst div = self.newDiv(\n\t\t\tresult.fisher.isChi ? 'Chi-square test:' : \"Fisher's exact test:\",\n\t\t\t'p-value = ' + result.fisher.pvalue\n\t\t)\n\t\tconst table = div\n\t\t\t.append('table')\n\t\t\t.style('margin', '20px')\n\t\t\t.style('border-spacing', '5px')\n\t\t\t.style('border-collapse', 'separate')\n\t\tfor (const r of result.fisher.rows) {\n\t\t\tconst tr = table.append('tr')\n\t\t\tfor (const c of r) {\n\t\t\t\ttr.append('td').text(c)\n\t\t\t}\n\t\t}\n\t}\n\n\tself.mayshow_coefficients = result => {\n\t\tif (!result.coefficients) {\n\t\t\tif (result.coefficients_uni && result.coefficients_multi) {\n\t\t\t\t// coefficients from univariate and multivariate analyses\n\t\t\t\tself.mayshow_coefficients_uniMulti(result)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tconst div = self.newDiv(result.coefficients.label)\n\t\tconst table = div\n\t\t\t.append('table')\n\t\t\t.style('border-spacing', '0px')\n\t\t\t.attr('data-testid', 'sjpp_regression_resultCoefficientTable')\n\n\t\t// padding is set on every <td>. need a better solution\n\n\t\t// header row\n\t\tlet header\n\t\t{\n\t\t\tconst tr = table.append('tr').style('opacity', 0.4)\n\t\t\theader = result.coefficients.header\n\t\t\t// header for variable column\n\t\t\ttr.append('td').text(header.shift()).style('padding', '8px')\n\t\t\t// header for category column\n\t\t\ttr.append('td').text(header.shift()).style('padding', '8px')\n\t\t\t// skip headers for sample and event count columns\n\t\t\tif (self.config.regressionType == 'cox') {\n\t\t\t\theader.shift()\n\t\t\t\theader.shift()\n\t\t\t}\n\t\t\t// combine headers for 95% CI columns\n\t\t\theader.splice(1, 2, '95% CI')\n\t\t\t// display remaining headers\n\t\t\tself.fillDataHeaders(header, tr)\n\t\t}\n\n\t\t// get tws of all independent variables\n\t\t// will be used for tooltip message of estimate value\n\t\tself.independentTws = Object.keys(result.coefficients.terms).map(tid => self.getIndependentInput(tid).term)\n\n\t\tlet varcount = 0\n\t\t// intercept row\n\t\tconst intercept = result.coefficients.intercept\n\t\tif (intercept) {\n\t\t\tconst tr = table.append('tr').style('background', ++varcount % 2 ? '#eee' : 'none')\n\t\t\t// variable column\n\t\t\ttr.append('td').text(intercept.shift()).style('padding', '8px')\n\t\t\t// category column\n\t\t\ttr.append('td').text(intercept.shift()).style('padding', '8px')\n\t\t\t// forest plot column\n\t\t\ttr.append('td')\n\t\t\t// data columns\n\t\t\tself.fillCoefDataCols({ tr, cols: intercept, isIntercept: true })\n\t\t}\n\n\t\t/* term rows:\n\t\tfor each independent terms, show 1 or multiple rows\n\t\tthese rows do not cover interactions, which are rendered afterwards\n\n\t\t* forest plot *\n\t\tshown for both interacting and non-interacting rows\n\t\ta plot is added to 3rd column of each row\n\t\tplotter can be a blank function if there's no valid value for plotting\n\t\t*/\n\t\tconst forestPlotter = self.getForestPlotter(result.coefficients.terms, result.coefficients.interactions)\n\t\tlet rowcolor\n\t\tfor (const tid in result.coefficients.terms) {\n\t\t\tconst termdata = result.coefficients.terms[tid]\n\t\t\tconst tw = self.getIndependentInput(tid).term\n\t\t\trowcolor = ++varcount % 2 ? '#eee' : 'none' // all rows of a variable will have same color\n\t\t\tlet tr = table.append('tr').style('background', rowcolor)\n\n\t\t\t// col 1: term name\n\t\t\tconst termNameTd = tr.append('td').style('padding', '8px')\n\t\t\tfillCoefficientTermname(tw, termNameTd)\n\n\t\t\tif (termdata.fields) {\n\t\t\t\t// create only 1 row for this term in coefficients table, as it doesn't have categories\n\n\t\t\t\tconst cols = termdata.fields\n\n\t\t\t\t// col 2: category column\n\t\t\t\t{\n\t\t\t\t\tconst td = tr.append('td').style('padding', '8px')\n\t\t\t\t\tfillColumn2coefficientsTable(td, tw)\n\t\t\t\t}\n\n\t\t\t\tif (self.config.regressionType == 'cox') {\n\t\t\t\t\t// sample size and event count columns are present\n\t\t\t\t\t// but do not need to report for continuous variable\n\t\t\t\t\tcols.shift()\n\t\t\t\t\tcols.shift()\n\t\t\t\t}\n\n\t\t\t\t// display forest plot\n\t\t\t\tforestPlotter(tr.append('td'), cols)\n\n\t\t\t\t// display data columns\n\t\t\t\tself.fillCoefDataCols({ tr, cols, tw })\n\t\t\t} else if (termdata.categories) {\n\t\t\t\t// term has categories, create one sub-row for each category in coefficient tables\n\n\t\t\t\tconst orderedCategories = []\n\t\t\t\tconst input = self.getIndependentInput(tid)\n\t\t\t\tif (input.orderedLabels) {\n\t\t\t\t\t// reorder rows by predefined order\n\t\t\t\t\tfor (const k of input.orderedLabels) {\n\t\t\t\t\t\tif (termdata.categories[k]) orderedCategories.push(k)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const k in termdata.categories) {\n\t\t\t\t\tif (!orderedCategories.includes(k)) orderedCategories.push(k)\n\t\t\t\t}\n\n\t\t\t\t// multiple categories\n\t\t\t\t// show first category as full row, with first cell spanning rest of categories\n\t\t\t\ttermNameTd.attr('rowspan', orderedCategories.length).style('vertical-align', 'top')\n\n\t\t\t\tlet isfirst = true\n\t\t\t\tfor (const k of orderedCategories) {\n\t\t\t\t\tif (!isfirst) {\n\t\t\t\t\t\t// create new row starting from 2nd category\n\t\t\t\t\t\ttr = table.append('tr').style('background', rowcolor)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cols = termdata.categories[k]\n\n\t\t\t\t\t// col 2: category column\n\t\t\t\t\tconst td = tr.append('td').style('padding', '8px')\n\t\t\t\t\tfillColumn2coefficientsTable(td, tw, k)\n\n\t\t\t\t\tif (self.config.regressionType == 'cox') {\n\t\t\t\t\t\t// sample size and event count columns present\n\t\t\t\t\t\tif (tw.q.mode == 'spline') {\n\t\t\t\t\t\t\t// skip columns for cubic spline variable\n\t\t\t\t\t\t\tcols.shift()\n\t\t\t\t\t\t\tcols.shift()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// report sample sizes and event counts of coefficients\n\t\t\t\t\t\t\t// for both ref and non-ref categories\n\t\t\t\t\t\t\tconst [samplesize_ref, samplesize_c] = cols.shift().split('/')\n\t\t\t\t\t\t\tconst [eventcnt_ref, eventcnt_c] = cols.shift().split('/')\n\t\t\t\t\t\t\tif (isfirst) {\n\t\t\t\t\t\t\t\tconst variableBottomDiv = termNameTd.select('.sjpcb-coef-variable-bottom')\n\t\t\t\t\t\t\t\tvariableBottomDiv.style('align-items', 'baseline')\n\t\t\t\t\t\t\t\tconst refGrpDiv = variableBottomDiv.selectAll('div').filter((d, i) => i === 1)\n\t\t\t\t\t\t\t\trefGrpDiv.append('div').html(`n=${samplesize_ref}<br>events=${eventcnt_ref}`)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttd.append('div').style('font-size', '.8em').html(`n=${samplesize_c}<br>events=${eventcnt_c}`)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// display forest plot\n\t\t\t\t\tforestPlotter(tr.append('td'), cols)\n\n\t\t\t\t\t// display data columns\n\t\t\t\t\tself.fillCoefDataCols({ tr, cols, tw, categoryKey: k })\n\n\t\t\t\t\tisfirst = false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttr.append('td').text('ERROR: no .fields[] or .categories{}')\n\t\t\t}\n\t\t}\n\n\t\t// interactions\n\t\tfor (const i of result.coefficients.interactions) {\n\t\t\trowcolor = ++varcount % 2 ? '#eee' : 'none' // all rows of an interaction will have same color\n\t\t\tlet tr = table.append('tr').style('background', rowcolor)\n\n\t\t\tconst term1 = self.getIndependentInput(i.term1).term\n\t\t\tconst term2 = self.getIndependentInput(i.term2).term\n\n\t\t\t// col 1: variable\n\t\t\t{\n\t\t\t\tconst td = tr.append('td').style('padding', '8px')\n\t\t\t\tfillTdName(td.append('div'), term1 ? term1.term.name + ' : ' : row.term1 + ' : ')\n\t\t\t\tfillTdName(td.append('div'), term2 ? term2.term.name : row.term2)\n\t\t\t\ttd.attr('rowspan', i.categories.length).style('vertical-align', 'top')\n\t\t\t}\n\n\t\t\tlet isfirst = true\n\t\t\tfor (const c of i.categories) {\n\t\t\t\t// new subrow for every category\n\t\t\t\tif (!isfirst) tr = table.append('tr').style('background', rowcolor)\n\n\t\t\t\t// col 2: category\n\t\t\t\tconst td = tr.append('td').style('padding', '8px')\n\t\t\t\tfillColumn2coefficientsTable(td.append('div'), term1, c.category1)\n\t\t\t\tfillColumn2coefficientsTable(td.append('div'), term2, c.category2)\n\n\t\t\t\tconst cols = c.lst\n\n\t\t\t\tif (self.config.regressionType == 'cox') {\n\t\t\t\t\t// sample size and event count columns are present\n\t\t\t\t\t// skip for now for interactions\n\t\t\t\t\t// TODO: how to handle sample size/event counts for interactions?\n\t\t\t\t\tcols.shift()\n\t\t\t\t\tcols.shift()\n\t\t\t\t}\n\n\t\t\t\t// display forest plot\n\t\t\t\tforestPlotter(tr.append('td'), cols)\n\n\t\t\t\t// display data columns\n\t\t\t\tself.fillCoefDataCols({ tr, cols, tw: term1, tw2: term2, categoryKey: c.category1, categoryKey2: c.category2 })\n\n\t\t\t\tisfirst = false\n\t\t\t}\n\t\t}\n\n\t\t// last row to show forest plot axis (call function without data)\n\t\tconst tr = table.append('tr')\n\t\ttr.append('td') // col 1\n\t\ttr.append('td') // col 2\n\t\tforestPlotter(tr.append('td')) // forest plot axis\n\t\tfor (const v of header) tr.append('td')\n\t}\n\n\tself.mayshow_coefficients_uniMulti = result => {\n\t\t// generate coefficients table for\n\t\t// univariate and multivariate analyses\n\t\tif (!result.coefficients_uni || !result.coefficients_multi) return\n\n\t\tconst div = self.newDiv(result.coefficients_uni.label)\n\t\tdiv.style('margin-bottom', '200px') // to provide space for rendering result tooltips\n\t\tconst table = div\n\t\t\t.append('table')\n\t\t\t.style('border-spacing', '0px')\n\t\t\t.attr('data-testid', 'sjpp_regression_resultCoefficientTable')\n\n\t\t// padding is set on every <td>. need a better solution\n\n\t\t// header row\n\t\tlet header_uni, header_multi\n\t\t{\n\t\t\tconst tr_label = table.append('tr').style('opacity', 0.4) // labels displayed above header row\n\t\t\tconst tr = table.append('tr').style('opacity', 0.4) // header row\n\n\t\t\theader_uni = result.coefficients_uni.header\n\t\t\theader_multi = result.coefficients_multi.header\n\n\t\t\t// header for variable column\n\t\t\ttr.append('td').text(header_uni.shift()).style('padding', '8px')\n\t\t\ttr_label.append('td').style('padding', '8px')\n\t\t\theader_multi.shift() // same value as in header_uni\n\n\t\t\t// header for category column\n\t\t\ttr.append('td').text(header_uni.shift()).style('padding', '8px')\n\t\t\ttr_label.append('td').style('padding', '8px')\n\t\t\theader_multi.shift() // same value as in header_uni\n\n\t\t\t// skip headers for sample and event count columns\n\t\t\tif (self.config.regressionType == 'cox') {\n\t\t\t\theader_uni.shift()\n\t\t\t\theader_uni.shift()\n\t\t\t\theader_multi.shift()\n\t\t\t\theader_multi.shift()\n\t\t\t}\n\n\t\t\t// combine headers for 95% CI columns\n\t\t\theader_uni.splice(1, 2, '95% CI')\n\t\t\theader_multi.splice(1, 2, '95% CI')\n\n\t\t\t// fill headers for data columns\n\t\t\tself.fillDataHeaders(header_uni, tr, tr_label, 'Univariate')\n\t\t\ttr.append('td').style('width', '2px') //separation between univariate/multivariate\n\t\t\ttr_label.append('td').style('width', '2px')\n\t\t\tself.fillDataHeaders(header_multi, tr, tr_label, 'Multivariable-adjusted')\n\t\t}\n\n\t\t/* term rows:\n\t\tfor each independent terms, show 1 or multiple rows\n\n\t\t* forest plot *\n\t\ta plot for univariate data and a plot for multivariate data\n\t\tare shown as separate columns in each row\n\t\t*/\n\n\t\tconst forestPlotter_uni = self.getForestPlotter(result.coefficients_uni.terms, result.coefficients_uni.interactions)\n\t\tconst forestPlotter_multi = self.getForestPlotter(\n\t\t\tresult.coefficients_multi.terms,\n\t\t\tresult.coefficients_multi.interactions\n\t\t)\n\n\t\t// get tws of all independent variables\n\t\t// will be used for tooltip message of estimate value\n\t\tself.independentTws = Object.keys(result.coefficients_uni.terms).map(tid => self.getIndependentInput(tid).term)\n\n\t\tlet varcount = 0,\n\t\t\trowcolor\n\t\tfor (const tid in result.coefficients_uni.terms) {\n\t\t\t// termdata is data from univariate analysis\n\t\t\t// will be used to fill in variable, category, and\n\t\t\t// univariate data columns\n\t\t\tconst termdata = result.coefficients_uni.terms[tid]\n\t\t\t// termdata_multi is data from multivariate analysis\n\t\t\t// will be used to fill in multivariate data columns\n\t\t\tconst termdata_multi = result.coefficients_multi.terms[tid]\n\n\t\t\tconst tw = self.getIndependentInput(tid).term\n\t\t\trowcolor = ++varcount % 2 ? '#eee' : 'none' // all rows of a variable will have same color\n\t\t\tlet tr = table.append('tr').style('background', rowcolor)\n\n\t\t\t// col 1: term name\n\t\t\tconst termNameTd = tr.append('td').style('padding', '8px')\n\t\t\tfillCoefficientTermname(tw, termNameTd)\n\n\t\t\tif (termdata.fields) {\n\t\t\t\t// create only 1 row for this term in coefficients table, as it doesn't have categories\n\n\t\t\t\tconst cols = termdata.fields\n\t\t\t\tconst cols_multi = termdata_multi.fields\n\n\t\t\t\t// col 2: category column\n\t\t\t\t{\n\t\t\t\t\tconst td = tr.append('td').style('padding', '8px')\n\t\t\t\t\tfillColumn2coefficientsTable(td, tw)\n\t\t\t\t}\n\n\t\t\t\tif (self.config.regressionType == 'cox') {\n\t\t\t\t\t// cox regression\n\t\t\t\t\t// sample size and event count columns are present\n\t\t\t\t\t// but do not need to report for continuous variable\n\t\t\t\t\tcols.shift()\n\t\t\t\t\tcols.shift()\n\t\t\t\t\tcols_multi.shift()\n\t\t\t\t\tcols_multi.shift()\n\t\t\t\t}\n\n\t\t\t\t// display univariate forest plot\n\t\t\t\tforestPlotter_uni(tr.append('td'), cols)\n\n\t\t\t\t// display univariate data columns\n\t\t\t\tself.fillCoefDataCols({ tr, cols, tw, isUnivariate: true })\n\n\t\t\t\ttr.append('td').style('width', '2px') // separation between univariate/multivariate\n\n\t\t\t\t// display multivariate forest plot\n\t\t\t\tforestPlotter_multi(tr.append('td'), cols_multi)\n\n\t\t\t\t// display multivariate data columns\n\t\t\t\tself.fillCoefDataCols({ tr, cols: cols_multi, tw })\n\t\t\t} else if (termdata.categories) {\n\t\t\t\t// term has categories, create one sub-row for each category in coefficient tables\n\n\t\t\t\tconst orderedCategories = []\n\t\t\t\tconst input = self.getIndependentInput(tid)\n\t\t\t\tif (input.orderedLabels) {\n\t\t\t\t\t// reorder rows by predefined order\n\t\t\t\t\tfor (const k of input.orderedLabels) {\n\t\t\t\t\t\tif (termdata.categories[k]) orderedCategories.push(k)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const k in termdata.categories) {\n\t\t\t\t\tif (!orderedCategories.includes(k)) orderedCategories.push(k)\n\t\t\t\t}\n\n\t\t\t\t// multiple categories\n\t\t\t\t// show first category as full row, with first cell spanning rest of categories\n\t\t\t\ttermNameTd.attr('rowspan', orderedCategories.length).style('vertical-align', 'top')\n\n\t\t\t\tlet isfirst = true\n\t\t\t\tfor (const k of orderedCategories) {\n\t\t\t\t\tif (!isfirst) {\n\t\t\t\t\t\t// create new row starting from 2nd category\n\t\t\t\t\t\ttr = table.append('tr').style('background', rowcolor)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cols = termdata.categories[k]\n\t\t\t\t\tconst cols_multi = termdata_multi.categories[k]\n\n\t\t\t\t\t// col 2: category column\n\t\t\t\t\tconst td = tr.append('td').style('padding', '8px')\n\t\t\t\t\tfillColumn2coefficientsTable(td, tw, k)\n\n\t\t\t\t\tif (self.config.regressionType == 'cox') {\n\t\t\t\t\t\t// cox regression\n\t\t\t\t\t\t// sample size and event count columns are present\n\t\t\t\t\t\tif (tw.q.mode == 'spline') {\n\t\t\t\t\t\t\t// skip columns for cubic spline variable\n\t\t\t\t\t\t\tcols.shift()\n\t\t\t\t\t\t\tcols.shift()\n\t\t\t\t\t\t\tcols_multi.shift()\n\t\t\t\t\t\t\tcols_multi.shift()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// report sample sizes and event counts of coefficients\n\t\t\t\t\t\t\t// for both ref and non-ref categories\n\t\t\t\t\t\t\tconst [samplesize_ref, samplesize_c] = cols.shift().split('/')\n\t\t\t\t\t\t\tconst [eventcnt_ref, eventcnt_c] = cols.shift().split('/')\n\t\t\t\t\t\t\tif (isfirst) {\n\t\t\t\t\t\t\t\tconst variableBottomDiv = termNameTd.select('.sjpcb-coef-variable-bottom')\n\t\t\t\t\t\t\t\tvariableBottomDiv.style('align-items', 'baseline')\n\t\t\t\t\t\t\t\tconst refGrpDiv = variableBottomDiv.selectAll('div').filter((d, i) => i === 1)\n\t\t\t\t\t\t\t\trefGrpDiv.append('div').html(`n=${samplesize_ref}<br>events=${eventcnt_ref}`)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttd.append('div').style('font-size', '.8em').html(`n=${samplesize_c}<br>events=${eventcnt_c}`)\n\t\t\t\t\t\t\tcols_multi.shift()\n\t\t\t\t\t\t\tcols_multi.shift()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// display univariate forest plot\n\t\t\t\t\tforestPlotter_uni(tr.append('td'), cols)\n\n\t\t\t\t\t// display univariate data columns\n\t\t\t\t\tself.fillCoefDataCols({ tr, cols, tw, categoryKey: k, isUnivariate: true })\n\n\t\t\t\t\ttr.append('td').style('width', '2px') // separation between univariate/multivariate\n\n\t\t\t\t\t// display multivariate forest plot\n\t\t\t\t\tforestPlotter_multi(tr.append('td'), cols_multi)\n\n\t\t\t\t\t// display multivariate data columns\n\t\t\t\t\tself.fillCoefDataCols({ tr, cols: cols_multi, tw, categoryKey: k })\n\n\t\t\t\t\tisfirst = false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttr.append('td').text('ERROR: no .fields[] or .categories{}')\n\t\t\t}\n\t\t}\n\n\t\t// last row to show forest plot axis (call function without data)\n\t\tconst tr = table.append('tr')\n\t\ttr.append('td') // col 1\n\t\ttr.append('td') // col 2\n\t\tforestPlotter_uni(tr.append('td')) // forest plot axis\n\t\tfor (const v of header_uni) tr.append('td')\n\t\ttr.append('td').style('width', '2px') // separation between univariate/multivariate\n\t\tforestPlotter_multi(tr.append('td')) // forest plot axis\n\t\tfor (const v of header_multi) tr.append('td')\n\t}\n\n\t// fill headers of data columns of coefficients table\n\tself.fillDataHeaders = (header, tr, tr_label, label) => {\n\t\tconst startColN = tr.selectAll('td').size()\n\t\t// header for forest plot column\n\t\ttr.append('td')\n\t\t// headers for data columns\n\t\theader.forEach((h, i, arr) => {\n\t\t\tif (i === 0) {\n\t\t\t\t// header for estimate column\n\t\t\t\tconst est = h\n\t\t\t\tconst estTd = tr.append('td').style('padding', '8px').text(est)\n\t\t\t\tconst estInfo = estTd.append('sup').style('cursor', 'default').html('&nbsp;&#9432;')\n\t\t\t\testInfo.on('mouseover', event => {\n\t\t\t\t\tconst tip = self.dom.tip.clear()\n\t\t\t\t\ttip.d.append('div').text('Hover over each value to view explanation of the result')\n\t\t\t\t\ttip.showunder(event.target)\n\t\t\t\t})\n\t\t\t\testInfo.on('mouseout', () => self.dom.tip.hide())\n\t\t\t} else {\n\t\t\t\t// headers for all other data columns\n\t\t\t\tconst td = tr.append('td').text(h).style('padding', '8px')\n\t\t\t\tif (i === arr.length - 1) td.style('font-style', 'italic')\n\t\t\t}\n\t\t})\n\t\t// fill label row, if defined\n\t\tif (tr_label) {\n\t\t\tconst endColN = tr.selectAll('td').size()\n\t\t\ttr_label\n\t\t\t\t.append('td')\n\t\t\t\t.attr('colspan', endColN - startColN)\n\t\t\t\t.style('padding', '0px 8px')\n\t\t\t\t.style('text-align', 'center')\n\t\t\t\t.append('div')\n\t\t\t\t.text(label)\n\t\t\t\t.style('border-bottom', '1px solid')\n\t\t\t\t.style('padding', '5px')\n\t\t}\n\t}\n\n\t// fill data columns of row of coefficients table\n\tself.fillCoefDataCols = arg => {\n\t\tconst { tr, cols, tw } = arg\n\t\t// estimate (Beta/OR/HR) column\n\t\tconst est = cols.shift()\n\t\tconst estSpan = tr.append('td').style('padding', '8px').style('cursor', 'default').append('span').text(est)\n\t\t// on mouseover, display explanation of estimate value\n\t\testSpan.on('mouseover', event => {\n\t\t\tif (tw && tw.q.mode == 'spline') return\n\t\t\tconst tip = self.dom.tip.clear()\n\t\t\tlet estimateMsg = self.getEstimateMsg(Object.assign({ est: Number(est) }, arg))\n\t\t\tif (tw) {\n\t\t\t\tconst pvalue = Number(cols[cols.length - 1])\n\t\t\t\testimateMsg += `<br><br><span style=\"font-style: italic\">This association is ${\n\t\t\t\t\tpvalue < 0.05 ? 'statistically significant (P < 0.05)' : 'not statistically significant (P \u2265 0.05)</span>'\n\t\t\t\t}.`\n\t\t\t}\n\t\t\ttip.d.append('div').style('max-width', '500px').html(estimateMsg)\n\t\t\ttip.showunder(event.target)\n\t\t})\n\t\testSpan.on('mouseout', () => self.dom.tip.hide())\n\t\t// 95% CI column\n\t\ttr.append('td').html(`${cols.shift()} &ndash; ${cols.shift()}`).style('padding', '8px')\n\t\t// rest of columns\n\t\tfor (const v of cols) tr.append('td').text(v).style('padding', '8px')\n\t}\n\n\t// get tooltip message explaining the estimate value\n\tself.getEstimateMsg = arg => {\n\t\tconst { est, tw, tw2, categoryKey, categoryKey2, isIntercept, isUnivariate } = arg\n\t\tconst independentTws = self.independentTws\n\t\tconst outcomeTw = self.config.outcome\n\t\tconst regtype = self.config.regressionType\n\t\tconst category = tw?.term?.values && tw.term.values[categoryKey] ? tw.term.values[categoryKey].label : categoryKey\n\t\tconst category2 =\n\t\t\ttw2?.term?.values && tw2.term.values[categoryKey2] ? tw2.term.values[categoryKey2].label : categoryKey2\n\t\tconst refGrp = tw?.term?.values && tw.term.values[tw.refGrp] ? tw.term.values[tw.refGrp].label : tw?.refGrp\n\t\tconst refGrp2 = tw2?.term?.values && tw2.term.values[tw2.refGrp] ? tw2.term.values[tw2.refGrp].label : tw2?.refGrp\n\n\t\t/** part 1: outcome variable **/\n\t\tlet msg\n\t\tif (regtype == 'linear') {\n\t\t\tmsg = tw2 ? getInteractionMsg() : `Mean ${styleVariable(outcomeTw)} is`\n\t\t\tmsg += ` ${Math.abs(est)} units`\n\t\t\tif (isIntercept) {\n\t\t\t\tconst baselines = getBaselines(independentTws)\n\t\t\t\treturn `${msg} when ${joinVariables(baselines)}.`\n\t\t\t}\n\t\t\tmsg += ` ${est < 0 ? 'lower' : 'higher'} `\n\t\t} else if (regtype == 'logistic') {\n\t\t\tmsg = tw2 ? getInteractionMsg() : `Odds of ${styleVariable(outcomeTw, outcomeTw.nonRefGrp)} is`\n\t\t\tif (isIntercept) {\n\t\t\t\tconst baselines = getBaselines(independentTws)\n\t\t\t\treturn `${msg} ${est} when ${joinVariables(baselines)}.`\n\t\t\t}\n\t\t\tmsg += est > 1 ? ` ${est} times higher ` : ` ${roundValue(1 / est, 3)} times lower `\n\t\t} else if (regtype == 'cox') {\n\t\t\tmsg = tw2\n\t\t\t\t? getInteractionMsg()\n\t\t\t\t: `Hazard (instantaneous rate) of ${styleVariable(outcomeTw, outcomeTw.eventLabel)} is`\n\t\t\tmsg += est > 1 ? ` ${est} times higher ` : ` ${roundValue(1 / est, 3)} times lower `\n\t\t} else {\n\t\t\tthrow 'regression type not recognized'\n\t\t}\n\n\t\t/** part 2: independent variable **/\n\t\tconst interactions = []\n\t\tconst interactionsBaselines = []\n\t\tif (tw.interactions?.length && !tw2) {\n\t\t\t// variable is part of an interaction, but the current row\n\t\t\t// is not an interaction row\n\t\t\tfor (const tid of tw.interactions) {\n\t\t\t\tconst t = self.getIndependentInput(tid).term\n\t\t\t\tif (t.term.snps) {\n\t\t\t\t\t// snplst or snplocus term\n\t\t\t\t\t// need to get term ids of individuals snps\n\t\t\t\t\tfor (const snp of t.term.snps) interactions.push(snp.snpid)\n\t\t\t\t} else {\n\t\t\t\t\tinteractions.push(tid)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!interactions.length) throw 'interactions[] is empty'\n\t\t\tconst interactingTws = independentTws.filter(t => interactions.includes(t.$id || t.id))\n\t\t\tinteractionsBaselines.push(...getBaselines(interactingTws))\n\t\t}\n\t\tif (category) {\n\t\t\t// categorical variable\n\t\t\tmsg += `in ${joinVariables([styleVariable(tw, category), ...interactionsBaselines])} compared to ${joinVariables([\n\t\t\t\tstyleVariable(tw, refGrp),\n\t\t\t\t...interactionsBaselines\n\t\t\t])}`\n\t\t} else if (tw.q.mode == 'continuous') {\n\t\t\t// continuous variable\n\t\t\tmsg += `for every one unit increase of ${styleVariable(tw)}`\n\t\t\tif (interactionsBaselines.length) msg += ` when ${joinVariables(interactionsBaselines)}`\n\t\t} else if (tw.q.geneticModel === 0) {\n\t\t\t// genetic variable, additive model\n\t\t\tmsg += `for every additional ${tw.effectAllele} allele of ${styleVariable(tw)}`\n\t\t\tif (interactionsBaselines.length) msg += ` when ${joinVariables(interactionsBaselines)}`\n\t\t} else if (tw.q.geneticModel == 1 || tw.q.geneticModel == 2) {\n\t\t\t// genetic variable, dominant or recessive model\n\t\t\tconst gts = Object.keys(tw.gt2count)\n\t\t\tconst testGts = gts.filter(gt => {\n\t\t\t\tif (tw.q.geneticModel == 1) {\n\t\t\t\t\t// dominant model\n\t\t\t\t\treturn gt.includes(tw.effectAllele)\n\t\t\t\t} else {\n\t\t\t\t\t// recessive model\n\t\t\t\t\treturn gt\n\t\t\t\t\t\t.replace(/[^a-zA-Z]/g, '')\n\t\t\t\t\t\t.split('')\n\t\t\t\t\t\t.every(c => c == tw.effectAllele)\n\t\t\t\t}\n\t\t\t})\n\t\t\tconst refGts = gts.filter(gt => !testGts.includes(gt))\n\t\t\tmsg += `in ${joinVariables([\n\t\t\t\tstyleVariable(tw, testGts.join(', ')),\n\t\t\t\t...interactionsBaselines\n\t\t\t])} compared to ${joinVariables([styleVariable(tw, refGts.join(', ')), ...interactionsBaselines])}`\n\t\t}\n\n\t\t/** part 3: adjusting for covariates **/\n\t\t// get term ids of current variable and any interacting variables\n\t\tconst tids = [tw.$id || tw.id]\n\t\tif (tw.interactions?.length) {\n\t\t\tif (tw2) tids.push(tw2.$id || tw2.id)\n\t\t\telse tids.push(...interactions)\n\t\t}\n\t\t// get covariates (i.e., all other variables)\n\t\tconst covariates = independentTws.filter(t => !tids.includes(t.$id || t.id)).map(t => styleVariable(t))\n\t\tif (regtype == 'cox') {\n\t\t\tcovariates.push(outcomeTw.q.timeScale == 'time' ? '\"Years of follow-up\"' : '\"Attained age during follow-up\"') // TODO: how to handle styling for this?\n\t\t}\n\t\t// build message for covariates\n\t\tif (!covariates.length || isUnivariate) return msg + '.'\n\t\treturn msg + `, adjusting for ${joinVariables(covariates)}.`\n\n\t\t/** helper functions **/\n\t\t// function to style a variable (and its category)\n\t\tfunction styleVariable(tw, category) {\n\t\t\tconst spans = [\n\t\t\t\t`<span class=\"term_name_btn sja_filter_tag_btn\" style=\"padding: 3px 6px; margin: 2.5px 0px; border-radius: ${\n\t\t\t\t\tcategory ? '6px 0px 0px 6px' : '6px'\n\t\t\t\t};\">${tw.term.name.length < 40 ? tw.term.name : tw.term.name.substring(0, 35) + ' ...'}</span>`\n\t\t\t]\n\t\t\tif (category) {\n\t\t\t\tspans.push(\n\t\t\t\t\t`<span class=\"ts_summary_btn sja_filter_tag_btn\" style=\"padding: 3px 6px; margin: 2.5px 0px; border-radius: 0px 6px 6px 0px; font-style: italic;\">${category}</span>`\n\t\t\t\t)\n\t\t\t}\n\t\t\treturn `<div style=\"display: inline; white-space: nowrap; font-size: 0.9em\">${spans.join('')}</div>`\n\t\t}\n\n\t\t// function to get message for interaction term\n\t\tfunction getInteractionMsg() {\n\t\t\tlet msg =\n\t\t\t\tregtype == 'linear'\n\t\t\t\t\t? `The difference in mean ${styleVariable(outcomeTw)}`\n\t\t\t\t\t: regtype == 'logistic'\n\t\t\t\t\t? `The difference in odds of ${styleVariable(outcomeTw, outcomeTw.nonRefGrp)}`\n\t\t\t\t\t: `The difference in hazard (instantaneous rate) of ${styleVariable(outcomeTw, outcomeTw.eventLabel)}`\n\n\t\t\tif (category2) {\n\t\t\t\t// categorical variable\n\t\t\t\tmsg += ` between ${styleVariable(tw2, category2)} and ${styleVariable(tw2, refGrp2)} is`\n\t\t\t} else if (tw2.q.mode == 'continuous') {\n\t\t\t\t// continuous variable\n\t\t\t\tmsg += ` for every one unit increase of ${styleVariable(tw2)} is`\n\t\t\t} else if (tw2.q.geneticModel === 0) {\n\t\t\t\t// genetic variable, additive model\n\t\t\t\tmsg += ` for every additional ${tw2.effectAllele} allele of ${styleVariable(tw2)} is`\n\t\t\t} else if (tw2.q.geneticModel == 1 || tw2.q.geneticModel == 2) {\n\t\t\t\t// genetic variable, dominant or recessive model\n\t\t\t\tconst gts = Object.keys(tw2.gt2count)\n\t\t\t\tconst testGts = gts.filter(gt => {\n\t\t\t\t\tif (tw2.q.geneticModel == 1) {\n\t\t\t\t\t\t// dominant model\n\t\t\t\t\t\treturn gt.includes(tw2.effectAllele)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// recessive model\n\t\t\t\t\t\treturn gt\n\t\t\t\t\t\t\t.replace(/[^a-zA-Z]/g, '')\n\t\t\t\t\t\t\t.split('')\n\t\t\t\t\t\t\t.every(c => c == tw2.effectAllele)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tconst refGts = gts.filter(gt => !testGts.includes(gt))\n\t\t\t\tmsg += ` between ${styleVariable(tw2, testGts.join(', '))} and ${styleVariable(tw2, refGts.join(', '))} is`\n\t\t\t}\n\n\t\t\treturn msg\n\t\t}\n\n\t\t/* function to get the baseline level of each variable\n\t\t\t- categorical variable: refGrp\n\t\t\t- continuous variable: 0\n\t\t\t- genetic variable:\n\t\t\t\t- additive model: 0 effect alleles\n\t\t\t\t- dominant model: homozygous for non-effect allele\n\t\t\t\t- recessive model: homozygous for non-effect allele or heterozygous\n\t\t\t\t- by genotype: same as categorical variable\n\t\t*/\n\t\tfunction getBaselines(tws) {\n\t\t\tconst baselines = tws.map(tw => {\n\t\t\t\tif (tw.q.mode != 'spline' && 'refGrp' in tw && tw.refGrp != refGrp_NA) {\n\t\t\t\t\t// has refGrp, must be categorical variable\n\t\t\t\t\tconst refGrp = tw?.term?.values && tw.term.values[tw.refGrp] ? tw.term.values[tw.refGrp].label : tw?.refGrp\n\t\t\t\t\treturn styleVariable(tw, refGrp)\n\t\t\t\t} else if (tw.q.mode == 'continuous') {\n\t\t\t\t\t// continuous variable\n\t\t\t\t\treturn styleVariable(tw, '0')\n\t\t\t\t} else if (tw.q.geneticModel === 0) {\n\t\t\t\t\t// genetic variable, additive model\n\t\t\t\t\treturn styleVariable(tw, `No ${tw.effectAllele} alleles`)\n\t\t\t\t} else if (tw.q.geneticModel == 1 || tw.q.geneticModel == 2) {\n\t\t\t\t\t// genetic variable, dominant or recessive model\n\t\t\t\t\tconst gts = Object.keys(tw.gt2count)\n\t\t\t\t\tconst refGts = gts.filter(gt => {\n\t\t\t\t\t\tif (tw.q.geneticModel == 1) {\n\t\t\t\t\t\t\t// dominant model\n\t\t\t\t\t\t\treturn !gt.includes(tw.effectAllele)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// recessive model\n\t\t\t\t\t\t\treturn !gt\n\t\t\t\t\t\t\t\t.replace(/[^a-zA-Z]/g, '')\n\t\t\t\t\t\t\t\t.split('')\n\t\t\t\t\t\t\t\t.every(c => c == tw.effectAllele)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\treturn styleVariable(tw, refGts.join(', '))\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn baselines\n\t\t}\n\n\t\tfunction joinVariables(variables) {\n\t\t\tif (!variables.length) return ''\n\t\t\telse if (variables.length == 1) return variables[0]\n\t\t\telse if (variables.length == 2) return variables.join(' and ')\n\t\t\telse return `${variables.slice(0, -1).join(', ')}, and ${variables.slice(-1)}`\n\t\t}\n\t}\n\n\t// show disclaimer message under the coefficient tables when\n\t// regressionType == 'cox\n\tself.mayshow_coxDisclaimer = () => {\n\t\tconst disclaimer = self.app.vocabApi.termdbConfig.regression?.settings?.coxDisclaimer\n\t\tif (disclaimer && self.config.regressionType == 'cox') {\n\t\t\tself.dom.oneSetResultDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('white-space', 'wrap') // somewhere in the parent dom there must be a nowrap setting that causes overly long text to look bad. must apply this so it will auto wrap\n\t\t\t\t.attr('data-testid', 'sjpp-regression-result-coxDisclaimer')\n\t\t\t\t.style('margin', '20px 0px 20px 10px')\n\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t.style('text-align', 'left')\n\t\t\t\t.text(disclaimer)\n\t\t}\n\t}\n\n\tself.mayshow_totalSnpEffect = result => {\n\t\tif (!result.totalSnpEffect) return\n\t\tconst div = self.newDiv(result.totalSnpEffect.label)\n\t\tconst table = div.append('table').style('border-spacing', '0px')\n\n\t\t// header row\n\t\t{\n\t\t\tconst tr = table.append('tr').style('opacity', 0.4)\n\t\t\tfor (const v of result.totalSnpEffect.header) {\n\t\t\t\ttr.append('td').text(v).style('padding', '8px')\n\t\t\t}\n\t\t}\n\n\t\t// total snp effect row\n\t\tconst tr = table.append('tr').style('background', '#eee')\n\t\tfor (const v of result.totalSnpEffect.lst) {\n\t\t\ttr.append('td').text(v).style('padding', '8px')\n\t\t}\n\t\tconst snp = self.getIndependentInput(result.totalSnpEffect.snp).term\n\t\tconst interactions = result.totalSnpEffect.interactions.map(interaction => {\n\t\t\treturn {\n\t\t\t\tt1: self.getIndependentInput(interaction.term1).term,\n\t\t\t\tt2: self.getIndependentInput(interaction.term2).term\n\t\t\t}\n\t\t})\n\t\tconst bottomInfo = `Total: total effect of removing the snp (${snp.term.name}) and its interactions (${interactions\n\t\t\t.map(interaction => interaction.t1.term.name + ' : ' + interaction.t2.term.name)\n\t\t\t.join(' ; ')}) from the model`\n\t\tdiv\n\t\t\t.append('div')\n\t\t\t.style('margin', '20px 0px 20px 10px')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.style('text-align', 'left')\n\t\t\t.style('color', '#999')\n\t\t\t.text(bottomInfo)\n\t}\n\n\tself.mayshow_type3 = result => {\n\t\tif (!result.type3 || self.app.vocabApi.termdbConfig.regression?.settings?.hideType3) return\n\t\tconst div = self.newDiv(result.type3.label)\n\t\tconst table = div.append('table').style('border-spacing', '0px')\n\n\t\t// header row\n\t\t{\n\t\t\tconst tr = table.append('tr').style('opacity', 0.4)\n\t\t\tfor (const v of result.type3.header) {\n\t\t\t\ttr.append('td').text(v).style('padding', '8px')\n\t\t\t}\n\t\t}\n\n\t\t// intercept row\n\t\tif (self.config.regressionType != 'cox') {\n\t\t\tconst tr = table.append('tr').style('background', '#eee')\n\t\t\tfor (const v of result.type3.intercept) {\n\t\t\t\ttr.append('td').text(v).style('padding', '8px')\n\t\t\t}\n\t\t}\n\n\t\t// term rows\n\t\t// independent terms (no interaction)\n\t\tlet rowcount = self.config.regressionType == 'cox' ? 1 : 0\n\t\tfor (const tid in result.type3.terms) {\n\t\t\t// get term data\n\t\t\tconst termdata = result.type3.terms[tid]\n\t\t\tconst tw = self.getIndependentInput(tid).term\n\t\t\tlet tr = table.append('tr').style('background', rowcount++ % 2 ? '#eee' : 'none')\n\t\t\t// col 1: variable\n\t\t\tconst termNameTd = tr.append('td').style('padding', '8px')\n\t\t\tfillTdName(termNameTd, tw.term.name)\n\t\t\t// rest of columns\n\t\t\tfor (const v of termdata) {\n\t\t\t\ttr.append('td').text(v).style('padding', '8px')\n\t\t\t}\n\t\t}\n\t\t// interactions\n\t\tfor (const row of result.type3.interactions) {\n\t\t\tconst tr = table.append('tr').style('background', rowcount++ % 2 ? '#eee' : 'none')\n\t\t\tconst t1 = self.getIndependentInput(row.term1).term\n\t\t\tconst t2 = self.getIndependentInput(row.term2).term\n\t\t\t// col 1: variable\n\t\t\tconst td = tr.append('td').style('padding', '8px')\n\t\t\tfillTdName(td.append('div'), t1.term.name + ' : ')\n\t\t\tfillTdName(td.append('div'), t2.term.name)\n\t\t\t// rest of columns\n\t\t\tfor (const v of row.lst) {\n\t\t\t\ttr.append('td').text(v).style('padding', '8px')\n\t\t\t}\n\t\t}\n\t}\n\n\tself.mayshow_tests = result => {\n\t\tif (!result.tests || self.app.vocabApi.termdbConfig.regression?.settings?.hideTests) return\n\t\tconst div = self.newDiv(result.tests.label)\n\t\tconst table = div.append('table').style('border-spacing', '0px')\n\t\tconst header = table.append('tr').style('opacity', 0.4)\n\t\tfor (const cell of result.tests.header) {\n\t\t\theader.append('td').text(cell).style('padding', '8px')\n\t\t}\n\t\tlet rowcount = 0\n\t\tfor (const row of result.tests.rows) {\n\t\t\tconst tr = table.append('tr').style('background', rowcount++ % 2 ? 'none' : '#eee')\n\t\t\tfor (const cell of row) {\n\t\t\t\ttr.append('td').text(cell).style('padding', '8px')\n\t\t\t}\n\t\t}\n\t}\n\n\tself.mayshow_other = result => {\n\t\tif (!result.other) return\n\t\tconst div = self.newDiv(result.other.label)\n\t\tconst table = div.append('table').style('border-spacing', '8px')\n\t\tfor (let i = 0; i < result.other.header.length; i++) {\n\t\t\tconst tr = table.append('tr')\n\t\t\ttr.append('td').style('opacity', 0.4).text(result.other.header[i])\n\t\t\ttr.append('td').text(result.other.rows[i])\n\t\t}\n\t}\n\n\t/*\n\tthe function takes all data rows (except intercept) from coefficients table, and return a callback\n\tthe callback closures the axis range of all data\n\trun callback on each coefficient table row to plot the forest plot\n\n\tcollect all numeric data points from terms/interactons\n\tto derive forest plot axis range\n\tsort numbers in an array\n\tin logistic, if array[i]=0 then cannot use log(0) as axis min,\n\tin that case should use array[i+1] or next to find the smallest real number as axis min\n\tan arbitary cap is used to guard against extreme estimate values\n\t*/\n\tself.getForestPlotter = (terms, interactions) => {\n\t\t// array indices are the same for both non-interacting and interacting rows\n\t\tlet midIdx, // array index of the beta/odds ratio\n\t\t\tCIlow, // array(column) index of low end of confidence interval of midIdx\n\t\t\tCIhigh, // array index of high end of confidence interval\n\t\t\taxislab, // data type to show as axis label\n\t\t\tbaselineValue, // baseline value to show a vertical line\n\t\t\t// min/max value capping the axis, to guard against extreme estimates\n\t\t\t// only used for logistic odds ratio\n\t\t\t// for linear, will use actual range from estimates and confidence interval\n\t\t\tcapMin,\n\t\t\tcapMax\n\t\tif (self.config.regressionType == 'linear') {\n\t\t\tmidIdx = 0\n\t\t\tCIlow = 1\n\t\t\tCIhigh = 2\n\t\t\taxislab = 'Beta value'\n\t\t\tbaselineValue = 0\n\t\t\tcapMin = null\n\t\t\tcapMax = null\n\t\t} else if (self.config.regressionType == 'logistic') {\n\t\t\tmidIdx = 0\n\t\t\tCIlow = 1\n\t\t\tCIhigh = 2\n\t\t\taxislab = 'Odds ratio'\n\t\t\tbaselineValue = 1\n\t\t\tcapMin = 0.1\n\t\t\tcapMax = 10\n\t\t} else if (self.config.regressionType == 'cox') {\n\t\t\tmidIdx = 0\n\t\t\tCIlow = 1\n\t\t\tCIhigh = 2\n\t\t\taxislab = 'Hazard ratio'\n\t\t\tbaselineValue = 1\n\t\t\tcapMin = 0.1\n\t\t\tcapMax = 10\n\t\t} else {\n\t\t\tthrow 'unknown regressionType'\n\t\t}\n\n\t\t// collect mid/CIlow/CIhigh numeric values into a flat array\n\t\tconst values = []\n\t\tfor (const tid in terms) {\n\t\t\tconst d = terms[tid]\n\t\t\tif (d.fields) {\n\t\t\t\tnumbers2array(d.fields)\n\t\t\t} else {\n\t\t\t\tfor (const k in d.categories) {\n\t\t\t\t\tnumbers2array(d.categories[k])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const i of interactions) {\n\t\t\tfor (const k of i.categories) {\n\t\t\t\tnumbers2array(k.lst)\n\t\t\t}\n\t\t}\n\n\t\tif (values.length == 0) {\n\t\t\t// no valid estimates\n\t\t\t// return blank function for inability to make plot\n\t\t\treturn () => {}\n\t\t}\n\n\t\t// all valid numbers are collected into values[]\n\t\tvalues.sort((a, b) => a - b) // ascending\n\n\t\tif (capMin == null) {\n\t\t\t// use actual range as cap; all values are valid numbers\n\t\t\tcapMin = values[0]\n\t\t\tcapMax = values[values.length - 1]\n\t\t}\n\n\t\t// graph dimension\n\t\tconst width = 180 // plottable dimension\n\t\tconst height = 20\n\t\tconst xleftpad = 10,\n\t\t\txrightpad = 10 // leave space for axis\n\n\t\tconst scale = get_scale(values)\n\n\t\t// todo: logistic, add center line; linear: 0 value\n\t\treturn (td, lst) => {\n\t\t\tif (!scale) {\n\t\t\t\t// scale is not built, do not plot\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// lst is data from a row from either terms or interactions\n\n\t\t\tconst svg = td\n\t\t\t\t.append('svg')\n\t\t\t\t.attr('width', width + xleftpad + xrightpad)\n\t\t\t\t.attr('height', height)\n\t\t\tconst g = svg.append('g').attr('transform', 'translate(' + xleftpad + ',0)')\n\n\t\t\tif (!lst) {\n\t\t\t\t//////////////////////////////\n\t\t\t\t// no data; render axis instead\n\n\t\t\t\t// do not apply this format for linear regression,\n\t\t\t\t// had encountered a bug that '.1r' will print \"20\" at the tick of \"15\"\n\t\t\t\tconst tickFormat = self.config.regressionType == 'logistic' ? '.1r' : undefined\n\n\t\t\t\tconst axis = axisBottom().ticks(4, tickFormat).scale(scale)\n\t\t\t\taxisstyle({\n\t\t\t\t\taxis: g.call(axis),\n\t\t\t\t\tcolor: forestcolor,\n\t\t\t\t\tshowline: true\n\t\t\t\t})\n\t\t\t\tconst fontsize = 12\n\t\t\t\tg.append('text')\n\t\t\t\t\t.attr('fill', forestcolor)\n\t\t\t\t\t.text(axislab)\n\t\t\t\t\t.attr('x', width / 2)\n\t\t\t\t\t.attr('y', height + fontsize)\n\t\t\t\tsvg.attr('height', height + fontsize)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t{\n\t\t\t\t// vertical baseline\n\t\t\t\tconst x = scale(baselineValue)\n\t\t\t\tg.append('line').attr('x1', x).attr('y1', 0).attr('x2', x).attr('y2', height).attr('stroke', '#ccc')\n\t\t\t}\n\n\t\t\tconst mid = Number(lst[midIdx]),\n\t\t\t\tcilow = Number(lst[CIlow]),\n\t\t\t\tcihigh = Number(lst[CIhigh])\n\t\t\tif (Number.isNaN(mid)) {\n\t\t\t\t// not plottable\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tg.append('circle')\n\t\t\t\t.attr('cx', scale(Math.min(Math.max(mid, capMin), capMax)))\n\t\t\t\t.attr('cy', height / 2)\n\t\t\t\t.attr('r', 3)\n\t\t\t\t.attr('fill', forestcolor)\n\n\t\t\tif (Number.isNaN(cilow) || Number.isNaN(cihigh)) {\n\t\t\t\t// cannot plot confidence interval\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// confidence interval\n\t\t\tg.append('line')\n\t\t\t\t.attr('x1', scale(Math.min(Math.max(cilow, capMin), capMax)))\n\t\t\t\t.attr('y1', height / 2)\n\t\t\t\t.attr('x2', scale(Math.min(Math.max(cihigh, capMin), capMax)))\n\t\t\t\t.attr('y2', height / 2)\n\t\t\t\t.attr('stroke', forestcolor)\n\t\t}\n\t\t///////// helpers\n\t\tfunction numbers2array(_lst) {\n\t\t\tconst lst = self.config.regressionType == 'cox' ? _lst.slice(2) : _lst // exclude sample and event count columns\n\t\t\tconst m = Number(lst[midIdx])\n\t\t\tif (!Number.isNaN(m)) values.push(m)\n\t\t\tconst l = Number(lst[CIlow]),\n\t\t\t\th = Number(lst[CIhigh])\n\t\t\tif (!Number.isNaN(l) && !Number.isNaN(h)) {\n\t\t\t\t// if either low/high is NA, do not use\n\t\t\t\t// this prevent the case of low=NA, high=3e+41 (somehow high is extremely large value)\n\t\t\t\tvalues.push(l)\n\t\t\t\tvalues.push(h)\n\t\t\t}\n\t\t}\n\t\tfunction get_scale(values) {\n\t\t\tif (self.config.regressionType == 'logistic') {\n\t\t\t\t// apply log to odds ratio\n\t\t\t\t// iterate to find a non-0 value\n\t\t\t\tlet i = 0\n\t\t\t\twhile (values[i] <= 0) {\n\t\t\t\t\ti++\n\t\t\t\t}\n\t\t\t\tif (i >= values.length || values[i] <= 0) {\n\t\t\t\t\t// no valid value, won't build scale\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst min = values[i]\n\t\t\t\tconst max = values[values.length - 1]\n\t\t\t\treturn scaleLog()\n\t\t\t\t\t.domain([Math.max(min, capMin), Math.min(max, capMax)])\n\t\t\t\t\t.range([0, width])\n\t\t\t\t\t.nice()\n\t\t\t}\n\t\t\tif (self.config.regressionType == 'linear' || self.config.regressionType == 'cox') {\n\t\t\t\treturn scaleLinear()\n\t\t\t\t\t.domain([Math.max(values[0], capMin), Math.min(values[values.length - 1], capMax)])\n\t\t\t\t\t.range([0, width])\n\t\t\t}\n\t\t\tthrow 'unknown type'\n\t\t}\n\t}\n}\n\nfunction fillTdName(td, name) {\n\tif (name.length < 40) {\n\t\ttd.text(name)\n\t} else {\n\t\ttd.text(name.substring(0, 35) + ' ...').attr('aria-label', name)\n\t}\n}\nfunction fillCoefficientTermname(tw, td) {\n\t// fill column 1 <td> using term name\n\tfillTdName(td, tw.term.name || tid)\n\t// fill refGrp or effect allele, if applicable\n\tconst hasRefGrp = 'refGrp' in tw && tw.refGrp != refGrp_NA && tw.q.mode != 'spline'\n\tif (hasRefGrp || tw.effectAllele) {\n\t\t// has refGrp or effect allele\n\t\t// display beneath term name\n\t\tconst bottomDiv = td\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sjpcb-coef-variable-bottom')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('margin-top', '2px')\n\t\t\t.style('font-size', '.8em')\n\n\t\tlet label\n\t\tif (hasRefGrp) {\n\t\t\tlabel = tw.term.values && tw.term.values[tw.refGrp] ? tw.term.values[tw.refGrp].label : tw.refGrp\n\t\t} else {\n\t\t\tlabel = tw.effectAllele\n\t\t}\n\n\t\tbottomDiv\n\t\t\t.append('div')\n\t\t\t.style('padding', '1px 5px')\n\t\t\t.style('border', '1px solid #aaa')\n\t\t\t.style('border-radius', '10px')\n\t\t\t.style('font-size', '.7em')\n\t\t\t.text(hasRefGrp ? 'REF' : 'EFFECT ALLELE')\n\n\t\tbottomDiv.append('div').style('padding', '1px 3px').text(label)\n\t}\n}\n\nfunction make_mds3_variants(tw, resultLst, regressionType) {\n\t/* return a list of variants as mds3 client-side custom data\n\ttw:\n\t\tterm:\n\t\t\tsnps[ {} ]\n\t\t\t\tsnpid\n\t\t\t\tmlst[]\n\t\t\t\t\telement: {alt/class/dt/mname}\n\t\tq{}\n\t\t\tsnp2effAle:{}\n\n\tresultLst: [{data,id},{data,id},...]\n\t*/\n\tconst mlst = []\n\tfor (const snp of tw.term.snps) {\n\t\tconst m = {\n\t\t\tchr: snp.chr,\n\t\t\tpos: snp.pos,\n\t\t\tssm_id: snp.snpid // needed for highlighting dot\n\t\t}\n\t\tmlst.push(m)\n\t\t// decide class/mname for this based on effect allele\n\t\tconst effAle = tw.q.snp2effAle[snp.snpid]\n\t\tconst m2 = snp.mlst.find(i => i.alt == effAle)\n\t\tif (m2) {\n\t\t\t// eff ale is an alt allele, transfer its class to m\n\t\t\tObject.assign(m, m2)\n\t\t} else {\n\t\t\t// eff allele is not an alterative allele!\n\t\t\t// just use the class of the first alt allele\n\t\t\tObject.assign(m, snp.mlst[0])\n\t\t}\n\n\t\t// set default values as missing, to be able to show all variants in track\n\t\t// overwrite with real values if found in result\n\t\tm.regressionPvalue = 'NA'\n\t\tm.mlpv = 0 // display the dot at the bottom\n\n\t\tconst thisresult = resultLst.find(i => i.id == snp.snpid)\n\t\tif (!thisresult) {\n\t\t\t// missing result for this variant, caused by variable-skipping in R\n\t\t\tm.regressionResult = {\n\t\t\t\tdata: {\n\t\t\t\t\terr: ['No result for this variant at ' + snp.snpid]\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\t// reg result is found for this snp; can call displayResult_oneset\n\t\tm.regressionResult = thisresult // for displaying via click_snvindel()\n\n\t\tconst d = thisresult.data\n\t\tif (!d) throw '.data{} missing'\n\n\t\tif (d.type3) {\n\t\t\t/* result has type3 section, this variant has AF>cutoff and used for model-fitting\n\t\t\tshow this variant as a dot, do not set .shape = 'filledTriangle'\n\t\t\tfind p-value in regression results\n\t\t\t*/\n\t\t\tconst v = getSnpPvalueFromRegressionResults(d, snp.snpid)\n\t\t\tif (v == undefined) {\n\t\t\t\t// no valid pvalue from regression results\n\t\t\t} else {\n\t\t\t\t// has valid pvalue from regression results\n\t\t\t\tm.regressionPvalue = v\n\t\t\t\tm.mlpv = -Math.log10(v)\n\t\t\t}\n\n\t\t\t// assign estimate, for tooltip display\n\t\t\tif (!d.coefficients || !d.coefficients.terms) throw '.data.coefficients.terms{} missing'\n\t\t\tconst r = d.coefficients.terms[snp.snpid]\n\t\t\tif (!r) throw 'snp missing from data.coefficients.terms{}'\n\t\t\tif (Array.isArray(r.fields)) {\n\t\t\t\t// has fields[], snp is used as additive/dominant/recessive\n\t\t\t\tm.regressionEstimate = regressionType == 'cox' ? r.fields[2] : r.fields[0]\n\t\t\t} else if (r.categories) {\n\t\t\t\t// has categories{}: {C/T: Array(6), T/T: Array(6)}\n\t\t\t\t// snp is used by genotype\n\t\t\t\tconst lst = []\n\t\t\t\tfor (const gt in r.categories) {\n\t\t\t\t\tlst.push(gt + ':' + regressionType == 'cox' ? r.categories[gt][2] : r.categories[gt][0])\n\t\t\t\t}\n\t\t\t\tm.regressionEstimate = ' ' + lst.join(' ')\n\t\t\t} else {\n\t\t\t\tthrow 'unknown way to get snp estimates from coefficients table'\n\t\t\t}\n\t\t} else if (d.fisher) {\n\t\t\t/* { pvalue:float, table:[] }\n\t\t\tthis variant is tested by fisher, show as triangle\n\t\t\t*/\n\t\t\tm.regressionPvalue = d.fisher.pvalue\n\t\t\tm.mlpv = -Math.log10(d.fisher.pvalue)\n\t\t\tm.shape = 'filledTriangle'\n\t\t} else if (d.wilcoxon) {\n\t\t\t/* { pvalue:float }\n\t\t\tthis variant is tested by wilcoxon, show as triangle\n\t\t\t*/\n\t\t\tm.regressionPvalue = d.wilcoxon.pvalue\n\t\t\tm.mlpv = -Math.log10(d.wilcoxon.pvalue)\n\t\t\tm.shape = 'filledTriangle'\n\t\t} else if (d.cuminc) {\n\t\t\t/* { pvalue:float }\n\t\t\tthis variant is tested by cuminc, show as triangle\n\t\t\t*/\n\t\t\tm.regressionPvalue = d.cuminc.pvalue\n\t\t\tm.mlpv = -Math.log10(d.cuminc.pvalue)\n\t\t\tm.shape = 'filledTriangle'\n\t\t} else {\n\t\t\t// none of above. is monomorphic, show as hollow circle\n\t\t\tm.shape = 'emptyCircle'\n\t\t}\n\t}\n\treturn mlst\n}\n\nasync function createGenomebrowser(self, input, resultLst) {\n\t// create block instance that harbors the mds3 track for showing variants from the snplocus term\n\t// input is the snplocus Input instance\n\tconst arg = {\n\t\tholder: self.dom.snplocusBlockDiv,\n\t\tgenome: self.parent.genomeObj,\n\t\tchr: input.term.q.chr,\n\t\tstart: input.term.q.start,\n\t\tstop: input.term.q.stop,\n\t\tnobox: true,\n\t\ttklst: [],\n\t\tonCoordinateChange: async rglst => {\n\t\t\t// at the mds3 track, clear highlights added before\n\t\t\t// so that nothing is highlighted by default in updated data\n\t\t\tfor (const t of self.snplocusBlock.tklst) {\n\t\t\t\tif (t.type == 'mds3') delete t.skewer.hlssmid\n\t\t\t}\n\n\t\t\tconst { chr, start, stop } = rglst[0]\n\t\t\t// temporary tw as override for pill.runCallback()\n\t\t\tconst overrideTw = {\n\t\t\t\tterm: {\n\t\t\t\t\tid: input.term.term.id,\n\t\t\t\t\ttype: 'snplocus'\n\t\t\t\t},\n\t\t\t\tq: JSON.parse(JSON.stringify(input.term.q))\n\t\t\t}\n\t\t\toverrideTw.q.chr = chr\n\t\t\toverrideTw.q.start = start\n\t\t\toverrideTw.q.stop = stop\n\t\t\t// call fillTW of snplocus.js to recompute tw.term.snps[] and cache file\n\t\t\tconst _ = await import('../termsetting/handlers/snplocus')\n\t\t\tawait _.fillTW(overrideTw, self.app.vocabApi)\n\t\t\t/*\n\t\t\tupdated term info (term.snps[] and q.cacheid etc) are now in overrideTw\n\t\t\tcall pill.runCallback() with this override\n\t\t\twhich in turn calls editConfig() and\n\t\t\tdispatch action and write the updated tw into state;\n\t\t\tstate change will trigger pill.main()\n\t\t\tto propagate updated data to termsetting instance\n\n\t\t\t* Note *\n\t\t\tit is incorrect to call pill.main() or inputs.editConfig() here\n\n\t\t\taction dispatch will contain hasUnsubmittedEdits=true,\n\t\t\teffect of which is to hide result UI and require user to click submit button to rerun analysis\n\t\t\tset a single-use flag to nullify it so results.js can automatically run analysis\n\t\t\tso user can continuously look at genome browser\n\t\t\twithout break/interruption to user experience\n\t\t\t*/\n\t\t\tself.hasUnsubmittedEdits_nullify_singleuse = true\n\t\t\tinput.pill.runCallback(overrideTw)\n\t\t}\n\t}\n\n\t// add mds3 tk\n\targ.tklst.push({\n\t\ttype: 'mds3', // tkt.mds3\n\t\tname: 'Variants',\n\t\tskewerModes: [\n\t\t\t{\n\t\t\t\ttype: 'numeric',\n\t\t\t\tbyAttribute: 'mlpv', // corresponds to the \"mlpv\" attribute in m{}, can be anything\n\t\t\t\tlabel: '-log10 p-value',\n\t\t\t\tinuse: true,\n\t\t\t\ttooltipPrintValue: m => getMtooltipValues(m, self.config.regressionType)\n\t\t\t}\n\t\t],\n\t\tcustom_variants: make_mds3_variants(input.term, resultLst, self.config.regressionType),\n\t\tlegend: {\n\t\t\tcustomShapeLabels: {\n\t\t\t\tfilledCircle: 'common variants analyzed by model-fitting',\n\t\t\t\tfilledTriangle:\n\t\t\t\t\t'rare variants analyzed by ' +\n\t\t\t\t\t(self.config.regressionType == 'linear'\n\t\t\t\t\t\t? 'Wilcoxon rank sum test'\n\t\t\t\t\t\t: self.config.regressionType == 'logistic'\n\t\t\t\t\t\t? \"Fisher's exact test\"\n\t\t\t\t\t\t: 'Cumulative incidence test'),\n\t\t\t\temptyCircle: 'monomorphic variants skipped'\n\t\t\t}\n\t\t},\n\t\tclick_snvindel: async m => {\n\t\t\t// displayResult_oneset() will modify m.regressionResult.data\n\t\t\t// during rendering, so need to input clone of data\n\t\t\tself.displayResult_oneset(structuredClone(m.regressionResult.data))\n\t\t\tawait mayCheckLD(m, input, self)\n\t\t\tconst result_y = self.dom.oneSetResultDiv.node().getBoundingClientRect().top + window.scrollY\n\t\t\tconst nav_height = document.querySelector('.sjpp-nav').getBoundingClientRect().height\n\t\t\twindow.scroll({ behavior: 'smooth', top: result_y - nav_height })\n\t\t}\n\t})\n\n\tfirst_genetrack_tolist(self.parent.genomeObj, arg.tklst)\n\tconst _ = await import('../src/block')\n\treturn new _.Block(arg)\n}\n\nasync function updateMds3Tk(self, input, resultLst) {\n\t// browser is already created\n\t// find the mds3 track\n\tconst tk = self.snplocusBlock.tklst.find(i => i.type == 'mds3')\n\t// apply new sets of variants and results to track and render\n\ttk.custom_variants = make_mds3_variants(input.term, resultLst, self.config.regressionType)\n\t// if user changes position using termsetting ui,\n\t// input.term.q{} will hold different chr/start/stop than block\n\t// and block will need to update coord\n\tconst r = self.snplocusBlock.rglst[0]\n\tif (r.chr == input.term.q.chr && r.start == input.term.q.start && r.stop == input.term.q.stop) {\n\t\t// coord is the same between input and block\n\t\t// only need to rerender tk\n\t\ttk.load()\n\t} else {\n\t\tawait self.snplocusBlock.jump_1basedcoordinate(input.term.q)\n\t}\n\tself.snplocusBlock.cloakOff()\n}\n\nconst LDcolor0 = '#2E6594',\n\tLDcolor1 = '#ff0000',\n\tLDcolorScale = interpolateRgb(LDcolor0, LDcolor1)\n\nasync function mayCheckLD(m, input, self) {\n\t/*\n\tm: the mutation data object for the clicked dot in mds3 tk\n\t\t{chr, pos, ref, alt}\n\tinput: the snplocus Input instance\n\tself: result instance\n\t*/\n\tif (!input.term.q.restrictAncestry) {\n\t\t// requires restrictAncestry\n\t\t// may also support ld overlay without specifying an ancestry\n\t\treturn\n\t}\n\tconst tk = self.snplocusBlock.tklst.find(i => i.type == 'mds3')\n\tif (!tk || !tk.skewer || !tk.skewer.nmg) return\n\n\t// clear old result\n\tfor (const m of tk.custom_variants) delete m.regressionR2\n\n\tconst wait = self.dom.LDresultDiv.append('span').text('Loading LD data...')\n\n\ttry {\n\t\tconst data = await self.app.vocabApi.getLDdata(input.term.q.restrictAncestry.name, m)\n\t\tif (data.error) throw data.error\n\n\t\tif (data.nodata || !data.lst || data.lst.length == 0) {\n\t\t\t// either dataset does not have ld tracks, or no ld track found by name\n\t\t\t// or no ld data retrieved using given variant\n\t\t\t// restore color in case dots have been colored by ld in a prior click\n\t\t\twait.text('No LD data')\n\t\t\ttk.skewer.nmg.selectAll('.sja_aa_disk_fill').attr('fill', m => (m.shapeCircle ? 'none' : tk.color4disc(m)))\n\t\t\treturn\n\t\t}\n\t\ttk.skewer.nmg.selectAll('.sja_aa_disk_fill').attr('fill', m2 => {\n\t\t\tif (m2.pos == m.pos && m2.ref == m.ref && m2.alt == m.alt) {\n\t\t\t\t// same as m\n\t\t\t\treturn LDcolor1\n\t\t\t}\n\t\t\tfor (const i of data.lst) {\n\t\t\t\tif (i.pos == m2.pos && i.alleles == m2.ref + '.' + m2.alt) {\n\t\t\t\t\t// matched, record new result for displaying in hover tooltip\n\t\t\t\t\tm2.regressionR2 = i.r2\n\t\t\t\t\treturn LDcolorScale(i.r2)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn LDcolorScale(0)\n\t\t})\n\n\t\twait.html(input.term.q.restrictAncestry.name + ' LD r<sup>2</sup>')\n\t\tshowLDlegend(self.dom.LDresultDiv, LDcolorScale)\n\t} catch (e) {\n\t\twait.text('Error: ' + (e.message || e))\n\t}\n}\n\nexport function showLDlegend(div, colorScale) {\n\tconst colorbardiv = div.append('span').style('margin-left', '10px')\n\tconst colorlst = []\n\tfor (let i = 0; i <= 1; i += 0.1) {\n\t\tcolorlst.push(colorScale(i))\n\t}\n\n\tconst axisheight = 20\n\tconst barheight = 15\n\tconst xpad = 10\n\tconst axiswidth = 150\n\n\t/** ColorScale component requires the color and data array to be the same\n\t * length. This data array is purely to fulfill that requirement.*/\n\tconst domain = colorlst.map((d, i) => i / (colorlst.length - 1))\n\n\tnew ColorScale({\n\t\tholder: colorbardiv,\n\t\tdomain,\n\t\ttopTicks: true,\n\t\twidth: xpad * 2 + axiswidth,\n\t\theight: axisheight + barheight,\n\t\tbarheight,\n\t\tbarwidth: axiswidth,\n\t\tfontSize: 12,\n\t\tcolors: colorlst,\n\t\tposition: `${xpad},${axisheight}`,\n\t\ttickSize: 6\n\t})\n}\n\nfunction getMtooltipValues(m, regressionType) {\n\tconst lst = [{ k: 'p-value', v: m.regressionPvalue }]\n\tif (m.regressionResult.AFstr) {\n\t\tlst.push({ k: 'AF', v: m.regressionResult.AFstr })\n\t}\n\tif (m.regressionEstimate) {\n\t\tif (regressionType == 'linear') lst.push({ k: 'beta', v: m.regressionEstimate })\n\t\telse if (regressionType == 'logistic') lst.push({ k: 'odds ratio', v: m.regressionEstimate })\n\t\telse if (regressionType == 'cox') lst.push({ k: 'hazard ratio', v: m.regressionEstimate })\n\t\telse throw 'unknown regression type'\n\t}\n\tif (m.regressionR2) {\n\t\tlst.push({ k: 'LD r2', v: m.regressionR2 })\n\t}\n\treturn lst\n}\n\nfunction getSnpPvalueFromRegressionResults(d, snpid) {\n\tlet str\n\tif (d.totalSnpEffect) {\n\t\t// snp has interactions\n\t\t// use p-value from total snp effect table\n\t\tstr = d.totalSnpEffect.lst[d.totalSnpEffect.lst.length - 1]\n\t} else {\n\t\t// snp has no interactions\n\t\t// use p-value from type3 stats table\n\t\tif (!d.type3.terms) throw '.data{type3:{terms}} missing'\n\t\tif (!d.type3.terms[snpid]) throw snpid + ' missing in type3.terms{}'\n\t\tif (!Array.isArray(d.type3.terms[snpid])) throw `type3.terms[${snp.snpid}] not array`\n\t\tstr = d.type3.terms[snpid][d.type3.terms[snpid].length - 1]\n\t}\n\tconst v = Number(str) // p-value string can be 'NA'\n\tif (Number.isFinite(v)) {\n\t\treturn v\n\t}\n\treturn undefined\n}\n\nfunction fillColumn2coefficientsTable(div, tw, categoryKey) {\n\tif (categoryKey) {\n\t\tdiv.text(tw && tw.term.values && tw.term.values[categoryKey] ? tw.term.values[categoryKey].label : categoryKey)\n\t\treturn\n\t}\n\t// the term doesn't have category, so indicate helpful status\n\tdiv.style('opacity', 0.3) // also gray out text to differentiate it from a category\n\tif ('geneticModel' in tw.q) {\n\t\tconst v = tw.q.geneticModel\n\t\tdiv.text(v == 0 ? '(additive)' : v == 1 ? '(dominant)' : '(recessive)')\n\t\treturn\n\t}\n\tif (tw.q.mode) {\n\t\tdiv.text('(' + tw.q.mode + ')')\n\t\treturn\n\t}\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["tid", "snp", "row", "tr", "tw", "category", "msg", "refGrp", "values", "_", "m"]
7
+ }