@sjcrh/proteinpaint-client 2.201.0 → 2.202.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 (923) hide show
  1. package/dist/2dmaf-Y2MBOXHL.js +1373 -0
  2. package/dist/AIProjectAdmin-2W4WNV65.js +958 -0
  3. package/dist/AggregateMatrix-7L7OKUXI.js +671 -0
  4. package/dist/AppHeader-6WM66GKP.js +835 -0
  5. package/dist/BoxPlot-AF72DMSS.js +1218 -0
  6. package/dist/CorrelationVolcano-H6DHMTYZ.js +620 -0
  7. package/dist/CorrelationVolcano-H6DHMTYZ.js.map +7 -0
  8. package/dist/DE-AABMOSEE.js +95 -0
  9. package/dist/DEinput-3HVHJE2I.js +409 -0
  10. package/dist/DEinput-3HVHJE2I.js.map +7 -0
  11. package/dist/DifferentialAnalysis-NBC222Q6.js +243 -0
  12. package/dist/Disco-B6E3ALAV.js +3392 -0
  13. package/dist/Disco.UI-KGFIQHXC.js +248 -0
  14. package/dist/DmrPlot-R3S4PCAE.js +642 -0
  15. package/dist/DziViewer-QYLZ4EMQ.js +16332 -0
  16. package/dist/GB-PV4RI5DG.js +1396 -0
  17. package/dist/GSEA-DHUOROST.js +846 -0
  18. package/dist/GeneExpInput-RESMBEM3.js +367 -0
  19. package/dist/Geomap-2WACSP77.js +89 -0
  20. package/dist/HicApp-3FJEZXAI.js +2250 -0
  21. package/dist/IDCViewer-MIRQEK4N.js +10817 -0
  22. package/dist/NumBinaryEditor-EP277U4I.js +284 -0
  23. package/dist/NumBinaryEditor.unit.spec-ZB627VLG.js +317 -0
  24. package/dist/NumContEditor-F7DOQSIW.js +110 -0
  25. package/dist/NumContEditor.unit.spec-PROGQHTU.js +169 -0
  26. package/dist/NumCustomBinEditor-QS3IPKIQ.js +38 -0
  27. package/dist/NumCustomBinEditor.unit.spec-BRDEFIX6.js +402 -0
  28. package/dist/NumDiscreteEditor-SE4I3BDA.js +175 -0
  29. package/dist/NumDiscreteEditor.unit.spec-6GBWQ3NQ.js +238 -0
  30. package/dist/NumRegularBinEditor-RJKB3G3V.js +38 -0
  31. package/dist/NumRegularBinEditor.unit.spec-HRU2Y76X.js +283 -0
  32. package/dist/NumSplineEditor-2DCORF5E.js +215 -0
  33. package/dist/NumSplineEditor.unit.spec-TTNB5IXX.js +229 -0
  34. package/dist/NumericDensity-3A7KTA7Y.js +38 -0
  35. package/dist/NumericDensity.unit.spec-ISPDAUVX.js +423 -0
  36. package/dist/NumericHandler-RG5XZMBU.js +39 -0
  37. package/dist/NumericHandler.unit.spec-RTD7AZNE.js +219 -0
  38. package/dist/ProteomeInput-6A7UB4CI.js +394 -0
  39. package/dist/RunChart2-YEAOBR2L.js +758 -0
  40. package/dist/SC-C3MJQBI5.js +1112 -0
  41. package/dist/Volcano-N6MXAQDZ.js +1417 -0
  42. package/dist/Volcano-N6MXAQDZ.js.map +7 -0
  43. package/dist/WSIViewer-OVJ2QS7P.js +26200 -0
  44. package/dist/WSIViewer-OVJ2QS7P.js.map +7 -0
  45. package/dist/Wsi-CMLKCEG3.js +239 -0
  46. package/dist/Wsi-CMLKCEG3.js.map +7 -0
  47. package/dist/WsiSamplesPlot-ET7LGNJW.js +165 -0
  48. package/dist/adSandbox-6LGHUXPX.js +38 -0
  49. package/dist/animatedBubbleChart-VJ6EQDQP.js +553 -0
  50. package/dist/app-PRLLUIAA.js +49 -0
  51. package/dist/app-WR6PQ2YK.js +37 -0
  52. package/dist/app.js +13 -13
  53. package/dist/bam-EXBXKUSE.js +859 -0
  54. package/dist/barchart-FSIB3IZZ.js +47 -0
  55. package/dist/barchart.events-F4HSVH6M.js +47 -0
  56. package/dist/barchart.integration.spec-AXE7BRKX.js +2243 -0
  57. package/dist/barchart2-DRNQQJE2.js +314 -0
  58. package/dist/block-J3A3RIGS.js +6255 -0
  59. package/dist/block.init-MQKMDKKW.js +38 -0
  60. package/dist/block.mds.expressionrank-ZQEPPDEL.js +359 -0
  61. package/dist/block.mds.geneboxplot-VJTIMZ6H.js +828 -0
  62. package/dist/block.mds.junction-VTAMQ2CW.js +1545 -0
  63. package/dist/block.mds.svcnv-WG7WY3CS.js +6801 -0
  64. package/dist/block.svg-YTWYGSGO.js +164 -0
  65. package/dist/block.tk.aicheck-L4M55U63.js +283 -0
  66. package/dist/block.tk.ase-3OBVSGWM.js +365 -0
  67. package/dist/block.tk.bam-QUCP3HST.js +1906 -0
  68. package/dist/block.tk.bedgraphdot-BGAH5YPF.js +384 -0
  69. package/dist/block.tk.bigwig.ui-2MG6VMOE.js +211 -0
  70. package/dist/block.tk.hicstraw-MDQHFWBB.js +823 -0
  71. package/dist/block.tk.junction-PBCJTAFX.js +2364 -0
  72. package/dist/block.tk.junction.textmatrixui-FJR76QBO.js +199 -0
  73. package/dist/block.tk.ld-ISL7K3DH.js +99 -0
  74. package/dist/block.tk.menu-VQW3FUAF.js +1029 -0
  75. package/dist/block.tk.pgv-RMXDF3XD.js +944 -0
  76. package/dist/brainImaging-F4GZRF53.js +423 -0
  77. package/dist/brainRegions-ONUXPD7P.js +221 -0
  78. package/dist/bubbleHeatmap-ZOS2ME3T.js +383 -0
  79. package/dist/cellTypeBubbleHeatmap-BEVDWLHJ.js +283 -0
  80. package/dist/chunk-2JQWA4EO.js +6364 -0
  81. package/dist/chunk-2TWVFQD2.js +494 -0
  82. package/dist/chunk-2TWVFQD2.js.map +7 -0
  83. package/dist/chunk-2TZITKMT.js +498 -0
  84. package/dist/chunk-4BDOPNYW.js +129 -0
  85. package/dist/chunk-4G6ZGXZF.js +1338 -0
  86. package/dist/chunk-4G6ZGXZF.js.map +7 -0
  87. package/dist/chunk-4QW2O66J.js +22695 -0
  88. package/dist/chunk-4QW2O66J.js.map +7 -0
  89. package/dist/chunk-4RWLKZMS.js +480 -0
  90. package/dist/chunk-57GCW5SF.js +2899 -0
  91. package/dist/chunk-5RUVBYLK.js +117 -0
  92. package/dist/chunk-5YOZ4E5H.js +55 -0
  93. package/dist/chunk-6N5DNN7P.js +302 -0
  94. package/dist/chunk-73PFJ2VF.js +21517 -0
  95. package/dist/chunk-73PFJ2VF.js.map +7 -0
  96. package/dist/chunk-AOVDTRFY.js +272 -0
  97. package/dist/chunk-BIDQ4OZH.js +465 -0
  98. package/dist/chunk-C34UTN5M.js +292 -0
  99. package/dist/chunk-DFHSLHXZ.js +134 -0
  100. package/dist/chunk-DMOTISFN.js +835 -0
  101. package/dist/chunk-DMOTISFN.js.map +7 -0
  102. package/dist/chunk-E2JRANYL.js +299 -0
  103. package/dist/chunk-E6EA7IU7.js +1172 -0
  104. package/dist/chunk-E6EA7IU7.js.map +7 -0
  105. package/dist/chunk-E732F6XI.js +141 -0
  106. package/dist/chunk-E732F6XI.js.map +7 -0
  107. package/dist/chunk-FESRWKYY.js +203 -0
  108. package/dist/chunk-GMJSMF7P.js +5070 -0
  109. package/dist/chunk-H6INPPUC.js +784 -0
  110. package/dist/chunk-H6INPPUC.js.map +7 -0
  111. package/dist/chunk-HDPL53U4.js +14 -0
  112. package/dist/chunk-HOCICSX4.js +276 -0
  113. package/dist/chunk-HR7XPTAV.js +340 -0
  114. package/dist/chunk-HR7XPTAV.js.map +7 -0
  115. package/dist/chunk-HV3GD2F3.js +54 -0
  116. package/dist/chunk-IGVKT4CE.js +56 -0
  117. package/dist/chunk-IMKIDF2H.js +123 -0
  118. package/dist/chunk-ITKMNOLR.js +37 -0
  119. package/dist/chunk-JABW3SRG.js +217 -0
  120. package/dist/chunk-JTYQX3EE.js +4306 -0
  121. package/dist/chunk-JTYQX3EE.js.map +7 -0
  122. package/dist/chunk-KDNYUHAH.js +70 -0
  123. package/dist/chunk-KSA3ND7Z.js +2327 -0
  124. package/dist/chunk-LCRPBPKX.js +34 -0
  125. package/dist/chunk-NIZTWHGT.js +514 -0
  126. package/dist/chunk-OBRVYT5O.js +187 -0
  127. package/dist/chunk-OBRVYT5O.js.map +7 -0
  128. package/dist/chunk-OCC5HEPR.js +411 -0
  129. package/dist/chunk-OMIUJ7JT.js +448 -0
  130. package/dist/chunk-ONCG5AKF.js +160 -0
  131. package/dist/chunk-OW5LD7S2.js +102 -0
  132. package/dist/chunk-PY4QOYPK.js +102 -0
  133. package/dist/chunk-Q3QY7QGU.js +50 -0
  134. package/dist/chunk-RL3IRMOA.js +236 -0
  135. package/dist/chunk-SCOFWMSE.js +240 -0
  136. package/dist/chunk-SMOHPEMJ.js +2681 -0
  137. package/dist/chunk-SNL7MSZD.js +243 -0
  138. package/dist/chunk-SP7HDNXC.js +368 -0
  139. package/dist/chunk-UILBQKQ6.js +143 -0
  140. package/dist/chunk-USH6NWXA.js +1943 -0
  141. package/dist/chunk-USH6NWXA.js.map +7 -0
  142. package/dist/chunk-UTNJA7JC.js +381 -0
  143. package/dist/chunk-VJCJCDFI.js +142 -0
  144. package/dist/chunk-VSSZJHOR.js +473 -0
  145. package/dist/chunk-W2WOZNEN.js +158 -0
  146. package/dist/chunk-WGRJEQT7.js +1250 -0
  147. package/dist/chunk-WGRJEQT7.js.map +7 -0
  148. package/dist/chunk-WJTRQ3ZC.js +1710 -0
  149. package/dist/chunk-X4QQRHFB.js +1812 -0
  150. package/dist/chunk-Y2UCJ33M.js +263 -0
  151. package/dist/chunk-Y45RZL4F.js +98 -0
  152. package/dist/chunk-YAISXQJ5.js +626 -0
  153. package/dist/chunk-YAISXQJ5.js.map +7 -0
  154. package/dist/chunk-Z2TA7NML.js +352 -0
  155. package/dist/chunk-Z7U74YGW.js +222 -0
  156. package/dist/chunk-ZKMBNB5E.js +176 -0
  157. package/dist/chunk-ZPBG6CT3.js +100 -0
  158. package/dist/chunk-ZUDSOVYT.js +2784 -0
  159. package/dist/chunk-ZZMIDYRE.js +197 -0
  160. package/dist/chunk-ZZMIDYRE.js.map +7 -0
  161. package/dist/cohort-R743ZSCR.js +75 -0
  162. package/dist/condition-MPZIRRGP.js +332 -0
  163. package/dist/controls-WD5TZITZ.js +39 -0
  164. package/dist/controls.btns-KCLXBXSL.js +9 -0
  165. package/dist/controls.config-577UCREO.js +39 -0
  166. package/dist/correlation-OCFBDDOX.js +102 -0
  167. package/dist/cuminc-YJGCKHFM.js +1153 -0
  168. package/dist/cuminc-YJGCKHFM.js.map +7 -0
  169. package/dist/cuminc.integration.spec-V46K57GV.js +678 -0
  170. package/dist/customdata.inputui-2MS5ZRKC.js +289 -0
  171. package/dist/dataDownload-HBFKARTR.js +332 -0
  172. package/dist/dataDownload-HBFKARTR.js.map +7 -0
  173. package/dist/dataDownload.integration.spec-TEOJOMYK.js +193 -0
  174. package/dist/databrowser.ui-PDPFHOH7.js +432 -0
  175. package/dist/dictionary-MWUQYW6W.js +118 -0
  176. package/dist/dnaMethylation-SNVVE2MD.js +38 -0
  177. package/dist/dnaMethylation.integration.spec-OSYZ3YDP.js +203 -0
  178. package/dist/dofetch-7R7PL4BX.js +51 -0
  179. package/dist/e2pca-7FYIWR5O.js +350 -0
  180. package/dist/ep-PTAJZLKI.js +1256 -0
  181. package/dist/expclust.gdc.spec-2R7T7JPY.js +307 -0
  182. package/dist/facet-BY6DQRCA.js +521 -0
  183. package/dist/facet-BY6DQRCA.js.map +7 -0
  184. package/dist/gb-5UFIDQWY.js +88 -0
  185. package/dist/geneExpClustering-QLBETGVB.js +249 -0
  186. package/dist/geneExpression-SAMLSOHQ.js +38 -0
  187. package/dist/geneExpression-SECTPIDT.js +313 -0
  188. package/dist/geneExpression.unit.spec-UNRGPJIG.js +102 -0
  189. package/dist/geneORA-CCQGE7QL.js +278 -0
  190. package/dist/geneRanking-NVR7ZZIP.js +553 -0
  191. package/dist/geneVariant-5KL2J3NA.js +39 -0
  192. package/dist/geneVariant-72E5YEPJ.js +41 -0
  193. package/dist/geneVariant.integration.spec-7JLVYF7Q.js +198 -0
  194. package/dist/genefusion.ui-M3IG6NUU.js +308 -0
  195. package/dist/geneset-V2535XGY.js +208 -0
  196. package/dist/genomeBrowser.spec-TRREAQCH.js +281 -0
  197. package/dist/grin2-6X5GCPBQ.js +75 -0
  198. package/dist/grin2-GOO7H3RC.js +1143 -0
  199. package/dist/hierCluster-5YZOCCTV.js +63 -0
  200. package/dist/hierCluster-ZPQCUSVO.js +59 -0
  201. package/dist/hierCluster.config-T3Y2LS6V.js +40 -0
  202. package/dist/hierCluster.integration.spec-PTXVQH77.js +488 -0
  203. package/dist/hierCluster.interactivity-JNBO3MJB.js +54 -0
  204. package/dist/imagePlot-AH2JIGVN.js +163 -0
  205. package/dist/imagePlot-AH2JIGVN.js.map +7 -0
  206. package/dist/importPlot-CWMBFQDD.js +8 -0
  207. package/dist/isoformExpression-ABPY2N3A.js +40 -0
  208. package/dist/isoformExpression.unit.spec-KRAZBQVF.js +242 -0
  209. package/dist/junction-XGCBNVHV.js +41 -0
  210. package/dist/junction.unit.spec-XZFUJRI3.js +187 -0
  211. package/dist/launch.adhoc-7FJD3XSI.js +42 -0
  212. package/dist/leftlabel.sample-VPOZWRVY.js +263 -0
  213. package/dist/lollipop-WBOAFWWO.js +171 -0
  214. package/dist/maf-MMN6WYHA.js +460 -0
  215. package/dist/maf-MMN6WYHA.js.map +7 -0
  216. package/dist/maftimeline-UK4MQP2D.js +593 -0
  217. package/dist/matrix-AT2FFTWO.js +58 -0
  218. package/dist/matrix-AU6NPNID.js +63 -0
  219. package/dist/matrix.config-VTQ6HL5L.js +41 -0
  220. package/dist/matrix.data-DBYXSWIN.js +25 -0
  221. package/dist/matrix.dom-DDPSUNY2.js +11 -0
  222. package/dist/matrix.integration.spec-NJ2AXQAS.js +3072 -0
  223. package/dist/matrix.interactivity-HE2Q6SAO.js +42 -0
  224. package/dist/matrix.layout-FD5BPRCX.js +44 -0
  225. package/dist/matrix.renderers-DVM4NB2R.js +38 -0
  226. package/dist/matrix.sort.unit.spec-VQ3TR4S2.js +472 -0
  227. package/dist/matrix.sorterUi-4KYRGJT5.js +18 -0
  228. package/dist/matrix.sorterUi.unit.spec-IEHG3OKN.js +342 -0
  229. package/dist/mavb-RPRKXPTZ.js +732 -0
  230. package/dist/mds.fimo-PZCVBD44.js +518 -0
  231. package/dist/mds.samplescatterplot-236GTHM4.js +1550 -0
  232. package/dist/mds.survivalplot-IJHOWSZL.js +483 -0
  233. package/dist/oncomatrix-R4OKDXSV.js +295 -0
  234. package/dist/oncomatrix.spec-4Z4HKS44.js +448 -0
  235. package/dist/plot.2dvaf-ZK7DAKRQ.js +377 -0
  236. package/dist/plot.app-J66BA2LD.js +41 -0
  237. package/dist/plot.barplot-UVRVPOKA.js +102 -0
  238. package/dist/plot.boxplot-DQGBDNLU.js +152 -0
  239. package/dist/plot.brainImaging-WRMDYYHC.js +51 -0
  240. package/dist/plot.disco-SSGPSM7W.js +102 -0
  241. package/dist/plot.dzi-F77KKPIJ.js +33 -0
  242. package/dist/plot.ssgq-FVFJOYVO.js +139 -0
  243. package/dist/plot.vaf2cov-CJSYBSPQ.js +259 -0
  244. package/dist/plot.wsi-OSZU2PQ5.js +36 -0
  245. package/dist/polar2-R4ZKXKEV.js +237 -0
  246. package/dist/profileForms-F7LXHITE.js +940 -0
  247. package/dist/profileForms-F7LXHITE.js.map +7 -0
  248. package/dist/profilePlot-JU7SFYYY.js +54 -0
  249. package/dist/proteinView-VU4SVO5I.js +1568 -0
  250. package/dist/proteomeCohortCompare-2U537GOK.js +799 -0
  251. package/dist/pseudbulk.unit.spec-2FDKAEVI.js +91 -0
  252. package/dist/pseudobulk-5GBUBBOY.js +40 -0
  253. package/dist/qualitative-3FTEQ7JW.js +43 -0
  254. package/dist/radar2-EBOTTAMC.js +332 -0
  255. package/dist/radarFacility2-PAGNJR6D.js +340 -0
  256. package/dist/regression-XOVSVC7S.js +58 -0
  257. package/dist/regression.inputs-LGA67ESO.js +48 -0
  258. package/dist/regression.inputs.term-UCQKXC5D.js +50 -0
  259. package/dist/regression.inputs.values.table-2RRE7SMS.js +45 -0
  260. package/dist/regression.integration.spec-BKM5UI7H.js +838 -0
  261. package/dist/regression.results-T3HB6CBH.js +40 -0
  262. package/dist/regression.spec-W7IVCYVZ.js +708 -0
  263. package/dist/render-2C6LWNG2.js +38 -0
  264. package/dist/report-HRGU3XKL.js +222 -0
  265. package/dist/sampleView-P5JZHEKY.js +48 -0
  266. package/dist/samplelst-OYQ6BASU.js +111 -0
  267. package/dist/samplematrix-JC3SGO5V.js +2198 -0
  268. package/dist/sc-FTHUNDGY.js +86 -0
  269. package/dist/scatter-WYP2NPNB.js +890 -0
  270. package/dist/selectGenomeWithTklst-CIETKILP.js +134 -0
  271. package/dist/singleCellCellType-3O3TTLM6.js +38 -0
  272. package/dist/singleCellCellType.unit.spec-GHBS36DB.js +159 -0
  273. package/dist/singleCellGeneExpression-2F7F4EKK.js +38 -0
  274. package/dist/singleCellGeneExpression.unit.spec-2VGIH2NZ.js +153 -0
  275. package/dist/singleCellPlot-MGSS4O3L.js +54 -0
  276. package/dist/singlecell-CKC2VVJ3.js +86 -0
  277. package/dist/singlecell-QOXATRF4.js +1572 -0
  278. package/dist/snp-OSYJO2R7.js +38 -0
  279. package/dist/snp.unit.spec-L5ANPFO2.js +176 -0
  280. package/dist/snplocus-64MJJID2.js +208 -0
  281. package/dist/spliceevent.a53ss.diagram-LHRT5UPB.js +151 -0
  282. package/dist/spliceevent.exonskip.diagram-BGSEPGR5.js +283 -0
  283. package/dist/spliceevent.noeventdiagram-QGZZSKW7.js +460 -0
  284. package/dist/ssGSEA-VVAZDFDT.js +38 -0
  285. package/dist/ssGSEA.unit.spec-LP76RHTV.js +88 -0
  286. package/dist/stattable-55YGV5B4.js +122 -0
  287. package/dist/stattable-55YGV5B4.js.map +7 -0
  288. package/dist/studyCatalog-AXWH7IOH.js +358 -0
  289. package/dist/summarizeCnvGeneexp-DRBIXOAP.js +163 -0
  290. package/dist/summarizeGeneexpSurvival-4PATAUSN.js +110 -0
  291. package/dist/summarizeMutationCnv-UGSIGZDJ.js +164 -0
  292. package/dist/summarizeMutationDiagnosis-UATVI5BK.js +40 -0
  293. package/dist/summarizeMutationSurvival-CZXGM3AA.js +99 -0
  294. package/dist/summary-IGTXNQ5I.js +49 -0
  295. package/dist/summary.integration.spec-VFCYU2V6.js +414 -0
  296. package/dist/summaryInput-AFZSASTM.js +231 -0
  297. package/dist/sunburst-G7DBI637.js +284 -0
  298. package/dist/survival-GIRR5ML4.js +1247 -0
  299. package/dist/survival-GIRR5ML4.js.map +7 -0
  300. package/dist/survival-YOJBLMR2.js +58 -0
  301. package/dist/survival.integration.spec-FXPCZJSS.js +958 -0
  302. package/dist/svgraph-ZSSOWI7R.js +1387 -0
  303. package/dist/svmr-FPYSMXSC.js +3842 -0
  304. package/dist/table-NHS2WLWT.js +202 -0
  305. package/dist/table-NHS2WLWT.js.map +7 -0
  306. package/dist/termCollection-IY5V64IY.js +38 -0
  307. package/dist/termCollection-SR4SP6RZ.js +257 -0
  308. package/dist/termCollection.unit.spec-NL72AQ2P.js +304 -0
  309. package/dist/termCollectionFractionSelection-2LPBE224.js +47 -0
  310. package/dist/termCollectionFractionSelection.unit.spec-PUMGBUDN.js +193 -0
  311. package/dist/termInfo-2DR7DHXM.js +9 -0
  312. package/dist/tk-COBDWIZJ.js +1127 -0
  313. package/dist/tk-N2YBXDQK.js +46 -0
  314. package/dist/tp.ui-BMK2MMIJ.js +1459 -0
  315. package/dist/tvs.dt-KL4VCW5Y.js +39 -0
  316. package/dist/tvs.dtcnv.categorical-VGXOASJE.js +40 -0
  317. package/dist/tvs.dtcnv.continuous-IANT7BPS.js +72 -0
  318. package/dist/tvs.dtfusion-M5HJWCJI.js +40 -0
  319. package/dist/tvs.dtitd-KB72EDPN.js +40 -0
  320. package/dist/tvs.dtsnvindel-VGYTLO6E.js +40 -0
  321. package/dist/tvs.dtsv-KWUXW2F5.js +40 -0
  322. package/dist/tvs.samplelst-3UA7XMHJ.js +104 -0
  323. package/dist/tvs.termCollection-LK6CVGYZ.js +129 -0
  324. package/dist/violin-D4EX3ZFV.js +46 -0
  325. package/dist/violin.integration.spec-GBW3VBHW.js +1425 -0
  326. package/dist/violin.interactivity-N3JVI2AQ.js +38 -0
  327. package/dist/violin.renderer-2NYRUXUY.js +40 -0
  328. package/dist/vocabulary-277KD4RO.js +41 -0
  329. package/dist/wsi.direct-RI3XGLUC.js +81 -0
  330. package/dist/wsi.direct-RI3XGLUC.js.map +7 -0
  331. package/package.json +2 -2
  332. package/dist/2dmaf-6MNHNHWX.js +0 -1373
  333. package/dist/AIProjectAdmin-W36NGUX2.js +0 -958
  334. package/dist/AggregateMatrix-YH2SN6VN.js +0 -671
  335. package/dist/AppHeader-I5CFECIL.js +0 -835
  336. package/dist/BoxPlot-4SXDAOBP.js +0 -1218
  337. package/dist/CorrelationVolcano-NAWMGG4Q.js +0 -619
  338. package/dist/CorrelationVolcano-NAWMGG4Q.js.map +0 -7
  339. package/dist/DE-VZMT7KEM.js +0 -95
  340. package/dist/DEinput-TKERM2YD.js +0 -409
  341. package/dist/DEinput-TKERM2YD.js.map +0 -7
  342. package/dist/DifferentialAnalysis-Y4SU4BVP.js +0 -243
  343. package/dist/Disco-DLK3BYPV.js +0 -3392
  344. package/dist/Disco.UI-IKGMFG36.js +0 -248
  345. package/dist/DmrPlot-JWBZJFS6.js +0 -642
  346. package/dist/DziViewer-6737GC22.js +0 -16332
  347. package/dist/GB-3UZSSIBW.js +0 -1396
  348. package/dist/GSEA-YLHBZY55.js +0 -846
  349. package/dist/GeneExpInput-KX5I63YV.js +0 -367
  350. package/dist/Geomap-QTUHM4VH.js +0 -89
  351. package/dist/HicApp-M2OCHGRT.js +0 -2250
  352. package/dist/IDCViewer-SWFBLBZH.js +0 -10817
  353. package/dist/NumBinaryEditor-ILFP6DR7.js +0 -284
  354. package/dist/NumBinaryEditor.unit.spec-TNIH7GQB.js +0 -317
  355. package/dist/NumContEditor-7UR3QMO6.js +0 -110
  356. package/dist/NumContEditor.unit.spec-P67AFEHM.js +0 -169
  357. package/dist/NumCustomBinEditor-H22J4K47.js +0 -38
  358. package/dist/NumCustomBinEditor.unit.spec-CO76BQPZ.js +0 -402
  359. package/dist/NumDiscreteEditor-TSUHVX77.js +0 -175
  360. package/dist/NumDiscreteEditor.unit.spec-RGC3GT22.js +0 -238
  361. package/dist/NumRegularBinEditor-IRD27CE2.js +0 -38
  362. package/dist/NumRegularBinEditor.unit.spec-MUHVOK5P.js +0 -283
  363. package/dist/NumSplineEditor-3V7RWHE2.js +0 -215
  364. package/dist/NumSplineEditor.unit.spec-BUI7NPN4.js +0 -229
  365. package/dist/NumericDensity-53KMCTDL.js +0 -38
  366. package/dist/NumericDensity.unit.spec-OKAQPQHR.js +0 -423
  367. package/dist/NumericHandler-5QFNXVBA.js +0 -39
  368. package/dist/NumericHandler.unit.spec-OBITSUU3.js +0 -219
  369. package/dist/ProteomeInput-MM373EL3.js +0 -394
  370. package/dist/RunChart2-2L6T3ITZ.js +0 -758
  371. package/dist/SC-JKD3Z2X5.js +0 -1112
  372. package/dist/Volcano-STGBS7IJ.js +0 -1404
  373. package/dist/Volcano-STGBS7IJ.js.map +0 -7
  374. package/dist/WSIViewer-LOBVUTOD.js +0 -48562
  375. package/dist/WSIViewer-LOBVUTOD.js.map +0 -7
  376. package/dist/WsiSamplesPlot-D3L3AILR.js +0 -165
  377. package/dist/adSandbox-XO5HDSFW.js +0 -38
  378. package/dist/animatedBubbleChart-XKW6TCZP.js +0 -553
  379. package/dist/app-H7ABTG6X.js +0 -49
  380. package/dist/app-HJSPIKRQ.js +0 -37
  381. package/dist/bam-R5QVHWGY.js +0 -859
  382. package/dist/barchart-OGCLBPQ2.js +0 -47
  383. package/dist/barchart.events-GZTY4IC3.js +0 -47
  384. package/dist/barchart.integration.spec-Z6ECNFSM.js +0 -2243
  385. package/dist/barchart2-DT42I747.js +0 -314
  386. package/dist/block-UYYJXSCM.js +0 -6255
  387. package/dist/block.init-43M53IMA.js +0 -38
  388. package/dist/block.mds.expressionrank-YH3IWMKM.js +0 -359
  389. package/dist/block.mds.geneboxplot-QS2IK37X.js +0 -828
  390. package/dist/block.mds.junction-7FF5BFEX.js +0 -1545
  391. package/dist/block.mds.svcnv-MMJYLL2W.js +0 -6801
  392. package/dist/block.svg-SA6DSUM2.js +0 -164
  393. package/dist/block.tk.aicheck-ZX5LZ2QO.js +0 -283
  394. package/dist/block.tk.ase-YXT4BOXK.js +0 -365
  395. package/dist/block.tk.bam-IMLRIOOV.js +0 -1906
  396. package/dist/block.tk.bedgraphdot-UYQLL7HM.js +0 -384
  397. package/dist/block.tk.bigwig.ui-WUVLVRSM.js +0 -211
  398. package/dist/block.tk.hicstraw-N4SJGF7H.js +0 -823
  399. package/dist/block.tk.junction-LZWHFKWJ.js +0 -2364
  400. package/dist/block.tk.junction.textmatrixui-B626NYPA.js +0 -199
  401. package/dist/block.tk.ld-6VWUMAP6.js +0 -99
  402. package/dist/block.tk.menu-RRN2UPQX.js +0 -1029
  403. package/dist/block.tk.pgv-GYG3EI6P.js +0 -944
  404. package/dist/brainImaging-VIMLETC5.js +0 -423
  405. package/dist/brainRegions-DRYZT5K5.js +0 -221
  406. package/dist/bubbleHeatmap-Y4SGMVJY.js +0 -383
  407. package/dist/cellTypeBubbleHeatmap-QW37ZT5W.js +0 -283
  408. package/dist/chunk-2Y5C7GJS.js +0 -299
  409. package/dist/chunk-2ZTCRUOL.js +0 -2899
  410. package/dist/chunk-3O6XFPUB.js +0 -243
  411. package/dist/chunk-3P74DH6P.js +0 -236
  412. package/dist/chunk-3PPCZPLN.js +0 -98
  413. package/dist/chunk-4H4WJJ2G.js +0 -54
  414. package/dist/chunk-4KY4XKJV.js +0 -143
  415. package/dist/chunk-4L2OSDQ6.js +0 -626
  416. package/dist/chunk-4L2OSDQ6.js.map +0 -7
  417. package/dist/chunk-4USLEUNR.js +0 -1812
  418. package/dist/chunk-5ITKSTJX.js +0 -34
  419. package/dist/chunk-5VMYXVZG.js +0 -272
  420. package/dist/chunk-7ZVFLC2V.js +0 -134
  421. package/dist/chunk-C2JHLAKV.js +0 -222
  422. package/dist/chunk-C5IAIOCA.js +0 -102
  423. package/dist/chunk-CIRCVMWE.js +0 -102
  424. package/dist/chunk-CRH37PEV.js +0 -203
  425. package/dist/chunk-DCNDZOI3.js +0 -6364
  426. package/dist/chunk-DHPLHIVP.js +0 -498
  427. package/dist/chunk-DKAHHMKN.js +0 -5070
  428. package/dist/chunk-ECIBJXFT.js +0 -352
  429. package/dist/chunk-EQCVSUAF.js +0 -37
  430. package/dist/chunk-FVL37XFU.js +0 -834
  431. package/dist/chunk-FVL37XFU.js.map +0 -7
  432. package/dist/chunk-FXS4I3Z3.js +0 -176
  433. package/dist/chunk-FYAY6D3O.js +0 -123
  434. package/dist/chunk-GL44X7JY.js +0 -302
  435. package/dist/chunk-HQAJVJCQ.js +0 -195
  436. package/dist/chunk-HQAJVJCQ.js.map +0 -7
  437. package/dist/chunk-IIT367QZ.js +0 -473
  438. package/dist/chunk-IYT5PNYJ.js +0 -148
  439. package/dist/chunk-IYT5PNYJ.js.map +0 -7
  440. package/dist/chunk-J6EP7JPJ.js +0 -1245
  441. package/dist/chunk-J6EP7JPJ.js.map +0 -7
  442. package/dist/chunk-JKMN7XOP.js +0 -1114
  443. package/dist/chunk-JKMN7XOP.js.map +0 -7
  444. package/dist/chunk-JLGCQ2F4.js +0 -480
  445. package/dist/chunk-JQT67SWE.js +0 -263
  446. package/dist/chunk-JQYPRW42.js +0 -217
  447. package/dist/chunk-K4IGOJPT.js +0 -160
  448. package/dist/chunk-K6OVOHIZ.js +0 -21483
  449. package/dist/chunk-K6OVOHIZ.js.map +0 -7
  450. package/dist/chunk-KPTPDZX2.js +0 -56
  451. package/dist/chunk-KTB7KXC2.js +0 -187
  452. package/dist/chunk-KTB7KXC2.js.map +0 -7
  453. package/dist/chunk-KW7MKBGF.js +0 -2681
  454. package/dist/chunk-KZFVYDVK.js +0 -448
  455. package/dist/chunk-M3J4MINX.js +0 -783
  456. package/dist/chunk-M3J4MINX.js.map +0 -7
  457. package/dist/chunk-M77DCLJX.js +0 -100
  458. package/dist/chunk-MFEYO6FB.js +0 -4306
  459. package/dist/chunk-MFEYO6FB.js.map +0 -7
  460. package/dist/chunk-MUJMZ6W6.js +0 -129
  461. package/dist/chunk-NRP55BOF.js +0 -50
  462. package/dist/chunk-O5KFJBU3.js +0 -1942
  463. package/dist/chunk-O5KFJBU3.js.map +0 -7
  464. package/dist/chunk-Q4AP5L7R.js +0 -1311
  465. package/dist/chunk-Q4AP5L7R.js.map +0 -7
  466. package/dist/chunk-QHPN3JJZ.js +0 -55
  467. package/dist/chunk-QSGXZEUU.js +0 -465
  468. package/dist/chunk-RIQT2LSR.js +0 -479
  469. package/dist/chunk-RIQT2LSR.js.map +0 -7
  470. package/dist/chunk-RZGEKL77.js +0 -117
  471. package/dist/chunk-SOCGXVIL.js +0 -2327
  472. package/dist/chunk-SZHFBRRT.js +0 -514
  473. package/dist/chunk-TOYMIFHN.js +0 -381
  474. package/dist/chunk-TPVHGI7Q.js +0 -368
  475. package/dist/chunk-UJN2RH5R.js +0 -411
  476. package/dist/chunk-V2DU2OXH.js +0 -1710
  477. package/dist/chunk-X7KRSZQT.js +0 -2784
  478. package/dist/chunk-XIBY5I6F.js +0 -240
  479. package/dist/chunk-XJBSBIZ4.js +0 -70
  480. package/dist/chunk-XRQWZJJ3.js +0 -347
  481. package/dist/chunk-XRQWZJJ3.js.map +0 -7
  482. package/dist/chunk-XZ4M3QAV.js +0 -158
  483. package/dist/chunk-YMP4YKBN.js +0 -142
  484. package/dist/chunk-Z7VK2AMA.js +0 -292
  485. package/dist/chunk-ZH7JPYQE.js +0 -14
  486. package/dist/chunk-ZVDOSFWU.js +0 -276
  487. package/dist/cohort-CEYVJJ7E.js +0 -75
  488. package/dist/condition-QSOFP4MY.js +0 -332
  489. package/dist/controls-QYHARIEY.js +0 -39
  490. package/dist/controls.btns-AP67YWKW.js +0 -9
  491. package/dist/controls.config-3OO3JK6E.js +0 -39
  492. package/dist/correlation-TOI3TMYL.js +0 -102
  493. package/dist/cuminc-L7OJTYXC.js +0 -1148
  494. package/dist/cuminc-L7OJTYXC.js.map +0 -7
  495. package/dist/cuminc.integration.spec-LSWV3KOF.js +0 -678
  496. package/dist/customdata.inputui-VMB3HSSC.js +0 -289
  497. package/dist/dataDownload-NPSWNOAG.js +0 -330
  498. package/dist/dataDownload-NPSWNOAG.js.map +0 -7
  499. package/dist/dataDownload.integration.spec-J6FRFLBK.js +0 -193
  500. package/dist/databrowser.ui-GVYWG6YI.js +0 -432
  501. package/dist/dictionary-GD67R72W.js +0 -118
  502. package/dist/dnaMethylation-S7OSGLAF.js +0 -38
  503. package/dist/dnaMethylation.integration.spec-ETMMJNDE.js +0 -203
  504. package/dist/dofetch-7GURQS65.js +0 -51
  505. package/dist/e2pca-ZIIPBJFN.js +0 -350
  506. package/dist/ep-A2HAL5WA.js +0 -1256
  507. package/dist/expclust.gdc.spec-ZSILLYNI.js +0 -307
  508. package/dist/facet-74LKIPTA.js +0 -521
  509. package/dist/facet-74LKIPTA.js.map +0 -7
  510. package/dist/gb-C3MPQXKN.js +0 -88
  511. package/dist/geneExpClustering-HYCFUUTU.js +0 -249
  512. package/dist/geneExpression-GATKMJJ5.js +0 -313
  513. package/dist/geneExpression-JXSAP2H7.js +0 -38
  514. package/dist/geneExpression.unit.spec-CODZYFHZ.js +0 -102
  515. package/dist/geneORA-LJRIR4VV.js +0 -278
  516. package/dist/geneRanking-TWLBKQZG.js +0 -553
  517. package/dist/geneVariant-35RQHTCK.js +0 -41
  518. package/dist/geneVariant-TMJJIMUF.js +0 -39
  519. package/dist/geneVariant.integration.spec-FIQ7IBSD.js +0 -198
  520. package/dist/genefusion.ui-SOBESSNO.js +0 -308
  521. package/dist/geneset-JXEJFEK2.js +0 -208
  522. package/dist/genomeBrowser.spec-25ZO5S2X.js +0 -281
  523. package/dist/grin2-CW4RPVPI.js +0 -75
  524. package/dist/grin2-EI5BVP4E.js +0 -1143
  525. package/dist/hierCluster-OBBPQH24.js +0 -59
  526. package/dist/hierCluster-SDH3TJQY.js +0 -63
  527. package/dist/hierCluster.config-DO67TCXI.js +0 -40
  528. package/dist/hierCluster.integration.spec-EB24C4VZ.js +0 -488
  529. package/dist/hierCluster.interactivity-LGEAFT5T.js +0 -54
  530. package/dist/imagePlot-LGLFG2QZ.js +0 -163
  531. package/dist/imagePlot-LGLFG2QZ.js.map +0 -7
  532. package/dist/importPlot-R2WRZGZU.js +0 -8
  533. package/dist/isoformExpression-KI3WY5M3.js +0 -40
  534. package/dist/isoformExpression.unit.spec-OQRG2DDU.js +0 -242
  535. package/dist/junction-6SWFPNM5.js +0 -41
  536. package/dist/junction.unit.spec-5TZFITSU.js +0 -187
  537. package/dist/launch.adhoc-HCX2RQLB.js +0 -42
  538. package/dist/leftlabel.sample-OI6XCXTQ.js +0 -263
  539. package/dist/lollipop-SOSOYHYL.js +0 -171
  540. package/dist/maf-73RLOEVN.js +0 -459
  541. package/dist/maf-73RLOEVN.js.map +0 -7
  542. package/dist/maftimeline-UOMLYUNI.js +0 -593
  543. package/dist/matrix-5QWDN6SI.js +0 -63
  544. package/dist/matrix-SKPVVDVR.js +0 -58
  545. package/dist/matrix.config-HE64MAL4.js +0 -41
  546. package/dist/matrix.data-HTUZXQAM.js +0 -25
  547. package/dist/matrix.dom-F7AN3QGE.js +0 -11
  548. package/dist/matrix.integration.spec-YKJ4LZFY.js +0 -3072
  549. package/dist/matrix.interactivity-YB5G5W5T.js +0 -42
  550. package/dist/matrix.layout-MFG65V7K.js +0 -44
  551. package/dist/matrix.renderers-PCZFHDDZ.js +0 -38
  552. package/dist/matrix.sort.unit.spec-GEAM5DSU.js +0 -472
  553. package/dist/matrix.sorterUi-YSKIX6B6.js +0 -18
  554. package/dist/matrix.sorterUi.unit.spec-2MW64QS5.js +0 -342
  555. package/dist/mavb-YMHJXCGA.js +0 -732
  556. package/dist/mds.fimo-PTEDRMLQ.js +0 -518
  557. package/dist/mds.samplescatterplot-7R7PLVQJ.js +0 -1550
  558. package/dist/mds.survivalplot-F3EENMFQ.js +0 -483
  559. package/dist/oncomatrix-27VVSMZB.js +0 -295
  560. package/dist/oncomatrix.spec-F43Y7CWN.js +0 -448
  561. package/dist/plot.2dvaf-MYFQSWIA.js +0 -377
  562. package/dist/plot.app-36QWCKXR.js +0 -41
  563. package/dist/plot.barplot-535EP7XT.js +0 -102
  564. package/dist/plot.boxplot-6IBP7VEB.js +0 -152
  565. package/dist/plot.brainImaging-M4HPNXZH.js +0 -51
  566. package/dist/plot.disco-HIT6GR44.js +0 -102
  567. package/dist/plot.dzi-W66SBKTH.js +0 -33
  568. package/dist/plot.ssgq-MI2OMCUY.js +0 -139
  569. package/dist/plot.vaf2cov-F4CBMLRA.js +0 -259
  570. package/dist/plot.wsi-7M5KTNFC.js +0 -36
  571. package/dist/polar2-7VSWGT4U.js +0 -237
  572. package/dist/profileForms-DFPCNJW2.js +0 -940
  573. package/dist/profileForms-DFPCNJW2.js.map +0 -7
  574. package/dist/profilePlot-ECTPPVB2.js +0 -54
  575. package/dist/proteinView-6ELOLOIU.js +0 -1568
  576. package/dist/proteomeCohortCompare-V2FMWI62.js +0 -799
  577. package/dist/pseudbulk.unit.spec-KV6URTXC.js +0 -91
  578. package/dist/pseudobulk-6ZRFCE65.js +0 -40
  579. package/dist/qualitative-3B62RUOB.js +0 -43
  580. package/dist/radar2-4QQER64E.js +0 -332
  581. package/dist/radarFacility2-MZKORRDY.js +0 -340
  582. package/dist/regression-GZ2YNX6Y.js +0 -56
  583. package/dist/regression.inputs-ZEFDNSVT.js +0 -48
  584. package/dist/regression.inputs.term-O2FQBX7L.js +0 -48
  585. package/dist/regression.inputs.values.table-63BQKSZP.js +0 -45
  586. package/dist/regression.integration.spec-KDHC3KDU.js +0 -838
  587. package/dist/regression.results-5J3QM4RX.js +0 -40
  588. package/dist/regression.spec-WZAZTDDA.js +0 -708
  589. package/dist/render-MZTEXVU5.js +0 -38
  590. package/dist/report-M5TYHH2W.js +0 -222
  591. package/dist/sampleView-QYTLYJEW.js +0 -48
  592. package/dist/samplelst-FN3Q7M7A.js +0 -111
  593. package/dist/samplematrix-Z5FVODO7.js +0 -2198
  594. package/dist/sc-4CHP5SYP.js +0 -86
  595. package/dist/scatter-UOPJYXL3.js +0 -890
  596. package/dist/selectGenomeWithTklst-WMAHGT4F.js +0 -134
  597. package/dist/singleCellCellType-XPWENB6V.js +0 -38
  598. package/dist/singleCellCellType.unit.spec-QK56PHKW.js +0 -159
  599. package/dist/singleCellGeneExpression-4CEVDVYF.js +0 -38
  600. package/dist/singleCellGeneExpression.unit.spec-ZYRLBVF5.js +0 -153
  601. package/dist/singleCellPlot-JS74VUGC.js +0 -54
  602. package/dist/singlecell-5XYOHMWJ.js +0 -1572
  603. package/dist/singlecell-OO77XBDD.js +0 -86
  604. package/dist/snp-X5ZILM5J.js +0 -38
  605. package/dist/snp.unit.spec-V23G3JLJ.js +0 -176
  606. package/dist/snplocus-U5UIIUWR.js +0 -208
  607. package/dist/spliceevent.a53ss.diagram-YDFVSDMT.js +0 -151
  608. package/dist/spliceevent.exonskip.diagram-VDKN5JBE.js +0 -283
  609. package/dist/spliceevent.noeventdiagram-EFPFRUFI.js +0 -460
  610. package/dist/ssGSEA-LKJW5OQK.js +0 -38
  611. package/dist/ssGSEA.unit.spec-7WCZVEP2.js +0 -88
  612. package/dist/stattable-MDABSW3F.js +0 -90
  613. package/dist/stattable-MDABSW3F.js.map +0 -7
  614. package/dist/studyCatalog-EU33KE5H.js +0 -358
  615. package/dist/summarizeCnvGeneexp-QL25OQNB.js +0 -163
  616. package/dist/summarizeGeneexpSurvival-B7HTCH7L.js +0 -110
  617. package/dist/summarizeMutationCnv-DFAPX2JE.js +0 -164
  618. package/dist/summarizeMutationDiagnosis-HCSDSVII.js +0 -40
  619. package/dist/summarizeMutationSurvival-6WEASSA2.js +0 -99
  620. package/dist/summary-BWYXE77G.js +0 -49
  621. package/dist/summary.integration.spec-AVGSW5MF.js +0 -414
  622. package/dist/summaryInput-MOQ6HUCX.js +0 -231
  623. package/dist/sunburst-EZDHVJCL.js +0 -284
  624. package/dist/survival-5TFMM7NP.js +0 -1239
  625. package/dist/survival-5TFMM7NP.js.map +0 -7
  626. package/dist/survival-IEVELTC4.js +0 -58
  627. package/dist/survival.integration.spec-HHWP3R4H.js +0 -958
  628. package/dist/svgraph-55XRIYJW.js +0 -1387
  629. package/dist/svmr-CMEBFSRO.js +0 -3842
  630. package/dist/table-LTWQ3TLQ.js +0 -200
  631. package/dist/table-LTWQ3TLQ.js.map +0 -7
  632. package/dist/termCollection-CPQXYBFA.js +0 -38
  633. package/dist/termCollection-ZWOH273K.js +0 -257
  634. package/dist/termCollection.unit.spec-RK7VATLU.js +0 -304
  635. package/dist/termCollectionFractionSelection-Z4ZRW63R.js +0 -47
  636. package/dist/termCollectionFractionSelection.unit.spec-3CS7DPNU.js +0 -193
  637. package/dist/termInfo-6MJDJSDW.js +0 -9
  638. package/dist/tk-4NNTWWLK.js +0 -46
  639. package/dist/tk-RHWJJXH2.js +0 -1127
  640. package/dist/tp.ui-DPN5UN6U.js +0 -1459
  641. package/dist/tvs.dt-ARPDFRVM.js +0 -39
  642. package/dist/tvs.dtcnv.categorical-POS6WQK6.js +0 -40
  643. package/dist/tvs.dtcnv.continuous-5OETJ7JU.js +0 -72
  644. package/dist/tvs.dtfusion-ERYVI3DW.js +0 -40
  645. package/dist/tvs.dtitd-KTZZYEWU.js +0 -40
  646. package/dist/tvs.dtsnvindel-TGUAX3RN.js +0 -40
  647. package/dist/tvs.dtsv-AM63OIL6.js +0 -40
  648. package/dist/tvs.samplelst-VW2NOQ2C.js +0 -104
  649. package/dist/tvs.termCollection-O4ZSWJFA.js +0 -129
  650. package/dist/violin-ZQ3DEYGR.js +0 -46
  651. package/dist/violin.integration.spec-PVEF77HB.js +0 -1425
  652. package/dist/violin.interactivity-FYU4TCFO.js +0 -38
  653. package/dist/violin.renderer-XAERGBMV.js +0 -40
  654. package/dist/vocabulary-ECJX27W2.js +0 -41
  655. /package/dist/{2dmaf-6MNHNHWX.js.map → 2dmaf-Y2MBOXHL.js.map} +0 -0
  656. /package/dist/{AIProjectAdmin-W36NGUX2.js.map → AIProjectAdmin-2W4WNV65.js.map} +0 -0
  657. /package/dist/{AggregateMatrix-YH2SN6VN.js.map → AggregateMatrix-7L7OKUXI.js.map} +0 -0
  658. /package/dist/{AppHeader-I5CFECIL.js.map → AppHeader-6WM66GKP.js.map} +0 -0
  659. /package/dist/{BoxPlot-4SXDAOBP.js.map → BoxPlot-AF72DMSS.js.map} +0 -0
  660. /package/dist/{DE-VZMT7KEM.js.map → DE-AABMOSEE.js.map} +0 -0
  661. /package/dist/{DifferentialAnalysis-Y4SU4BVP.js.map → DifferentialAnalysis-NBC222Q6.js.map} +0 -0
  662. /package/dist/{Disco-DLK3BYPV.js.map → Disco-B6E3ALAV.js.map} +0 -0
  663. /package/dist/{Disco.UI-IKGMFG36.js.map → Disco.UI-KGFIQHXC.js.map} +0 -0
  664. /package/dist/{DmrPlot-JWBZJFS6.js.map → DmrPlot-R3S4PCAE.js.map} +0 -0
  665. /package/dist/{DziViewer-6737GC22.js.map → DziViewer-QYLZ4EMQ.js.map} +0 -0
  666. /package/dist/{GB-3UZSSIBW.js.map → GB-PV4RI5DG.js.map} +0 -0
  667. /package/dist/{GSEA-YLHBZY55.js.map → GSEA-DHUOROST.js.map} +0 -0
  668. /package/dist/{GeneExpInput-KX5I63YV.js.map → GeneExpInput-RESMBEM3.js.map} +0 -0
  669. /package/dist/{Geomap-QTUHM4VH.js.map → Geomap-2WACSP77.js.map} +0 -0
  670. /package/dist/{HicApp-M2OCHGRT.js.map → HicApp-3FJEZXAI.js.map} +0 -0
  671. /package/dist/{IDCViewer-SWFBLBZH.js.map → IDCViewer-MIRQEK4N.js.map} +0 -0
  672. /package/dist/{NumBinaryEditor-ILFP6DR7.js.map → NumBinaryEditor-EP277U4I.js.map} +0 -0
  673. /package/dist/{NumBinaryEditor.unit.spec-TNIH7GQB.js.map → NumBinaryEditor.unit.spec-ZB627VLG.js.map} +0 -0
  674. /package/dist/{NumContEditor-7UR3QMO6.js.map → NumContEditor-F7DOQSIW.js.map} +0 -0
  675. /package/dist/{NumContEditor.unit.spec-P67AFEHM.js.map → NumContEditor.unit.spec-PROGQHTU.js.map} +0 -0
  676. /package/dist/{NumCustomBinEditor-H22J4K47.js.map → NumCustomBinEditor-QS3IPKIQ.js.map} +0 -0
  677. /package/dist/{NumCustomBinEditor.unit.spec-CO76BQPZ.js.map → NumCustomBinEditor.unit.spec-BRDEFIX6.js.map} +0 -0
  678. /package/dist/{NumDiscreteEditor-TSUHVX77.js.map → NumDiscreteEditor-SE4I3BDA.js.map} +0 -0
  679. /package/dist/{NumDiscreteEditor.unit.spec-RGC3GT22.js.map → NumDiscreteEditor.unit.spec-6GBWQ3NQ.js.map} +0 -0
  680. /package/dist/{NumRegularBinEditor-IRD27CE2.js.map → NumRegularBinEditor-RJKB3G3V.js.map} +0 -0
  681. /package/dist/{NumRegularBinEditor.unit.spec-MUHVOK5P.js.map → NumRegularBinEditor.unit.spec-HRU2Y76X.js.map} +0 -0
  682. /package/dist/{NumSplineEditor-3V7RWHE2.js.map → NumSplineEditor-2DCORF5E.js.map} +0 -0
  683. /package/dist/{NumSplineEditor.unit.spec-BUI7NPN4.js.map → NumSplineEditor.unit.spec-TTNB5IXX.js.map} +0 -0
  684. /package/dist/{NumericDensity-53KMCTDL.js.map → NumericDensity-3A7KTA7Y.js.map} +0 -0
  685. /package/dist/{NumericDensity.unit.spec-OKAQPQHR.js.map → NumericDensity.unit.spec-ISPDAUVX.js.map} +0 -0
  686. /package/dist/{NumericHandler-5QFNXVBA.js.map → NumericHandler-RG5XZMBU.js.map} +0 -0
  687. /package/dist/{NumericHandler.unit.spec-OBITSUU3.js.map → NumericHandler.unit.spec-RTD7AZNE.js.map} +0 -0
  688. /package/dist/{ProteomeInput-MM373EL3.js.map → ProteomeInput-6A7UB4CI.js.map} +0 -0
  689. /package/dist/{RunChart2-2L6T3ITZ.js.map → RunChart2-YEAOBR2L.js.map} +0 -0
  690. /package/dist/{SC-JKD3Z2X5.js.map → SC-C3MJQBI5.js.map} +0 -0
  691. /package/dist/{WsiSamplesPlot-D3L3AILR.js.map → WsiSamplesPlot-ET7LGNJW.js.map} +0 -0
  692. /package/dist/{adSandbox-XO5HDSFW.js.map → adSandbox-6LGHUXPX.js.map} +0 -0
  693. /package/dist/{animatedBubbleChart-XKW6TCZP.js.map → animatedBubbleChart-VJ6EQDQP.js.map} +0 -0
  694. /package/dist/{app-H7ABTG6X.js.map → app-PRLLUIAA.js.map} +0 -0
  695. /package/dist/{app-HJSPIKRQ.js.map → app-WR6PQ2YK.js.map} +0 -0
  696. /package/dist/{bam-R5QVHWGY.js.map → bam-EXBXKUSE.js.map} +0 -0
  697. /package/dist/{barchart-OGCLBPQ2.js.map → barchart-FSIB3IZZ.js.map} +0 -0
  698. /package/dist/{barchart.events-GZTY4IC3.js.map → barchart.events-F4HSVH6M.js.map} +0 -0
  699. /package/dist/{barchart.integration.spec-Z6ECNFSM.js.map → barchart.integration.spec-AXE7BRKX.js.map} +0 -0
  700. /package/dist/{barchart2-DT42I747.js.map → barchart2-DRNQQJE2.js.map} +0 -0
  701. /package/dist/{block-UYYJXSCM.js.map → block-J3A3RIGS.js.map} +0 -0
  702. /package/dist/{block.init-43M53IMA.js.map → block.init-MQKMDKKW.js.map} +0 -0
  703. /package/dist/{block.mds.expressionrank-YH3IWMKM.js.map → block.mds.expressionrank-ZQEPPDEL.js.map} +0 -0
  704. /package/dist/{block.mds.geneboxplot-QS2IK37X.js.map → block.mds.geneboxplot-VJTIMZ6H.js.map} +0 -0
  705. /package/dist/{block.mds.junction-7FF5BFEX.js.map → block.mds.junction-VTAMQ2CW.js.map} +0 -0
  706. /package/dist/{block.mds.svcnv-MMJYLL2W.js.map → block.mds.svcnv-WG7WY3CS.js.map} +0 -0
  707. /package/dist/{block.svg-SA6DSUM2.js.map → block.svg-YTWYGSGO.js.map} +0 -0
  708. /package/dist/{block.tk.aicheck-ZX5LZ2QO.js.map → block.tk.aicheck-L4M55U63.js.map} +0 -0
  709. /package/dist/{block.tk.ase-YXT4BOXK.js.map → block.tk.ase-3OBVSGWM.js.map} +0 -0
  710. /package/dist/{block.tk.bam-IMLRIOOV.js.map → block.tk.bam-QUCP3HST.js.map} +0 -0
  711. /package/dist/{block.tk.bedgraphdot-UYQLL7HM.js.map → block.tk.bedgraphdot-BGAH5YPF.js.map} +0 -0
  712. /package/dist/{block.tk.bigwig.ui-WUVLVRSM.js.map → block.tk.bigwig.ui-2MG6VMOE.js.map} +0 -0
  713. /package/dist/{block.tk.hicstraw-N4SJGF7H.js.map → block.tk.hicstraw-MDQHFWBB.js.map} +0 -0
  714. /package/dist/{block.tk.junction-LZWHFKWJ.js.map → block.tk.junction-PBCJTAFX.js.map} +0 -0
  715. /package/dist/{block.tk.junction.textmatrixui-B626NYPA.js.map → block.tk.junction.textmatrixui-FJR76QBO.js.map} +0 -0
  716. /package/dist/{block.tk.ld-6VWUMAP6.js.map → block.tk.ld-ISL7K3DH.js.map} +0 -0
  717. /package/dist/{block.tk.menu-RRN2UPQX.js.map → block.tk.menu-VQW3FUAF.js.map} +0 -0
  718. /package/dist/{block.tk.pgv-GYG3EI6P.js.map → block.tk.pgv-RMXDF3XD.js.map} +0 -0
  719. /package/dist/{brainImaging-VIMLETC5.js.map → brainImaging-F4GZRF53.js.map} +0 -0
  720. /package/dist/{brainRegions-DRYZT5K5.js.map → brainRegions-ONUXPD7P.js.map} +0 -0
  721. /package/dist/{bubbleHeatmap-Y4SGMVJY.js.map → bubbleHeatmap-ZOS2ME3T.js.map} +0 -0
  722. /package/dist/{cellTypeBubbleHeatmap-QW37ZT5W.js.map → cellTypeBubbleHeatmap-BEVDWLHJ.js.map} +0 -0
  723. /package/dist/{chunk-DCNDZOI3.js.map → chunk-2JQWA4EO.js.map} +0 -0
  724. /package/dist/{chunk-DHPLHIVP.js.map → chunk-2TZITKMT.js.map} +0 -0
  725. /package/dist/{chunk-MUJMZ6W6.js.map → chunk-4BDOPNYW.js.map} +0 -0
  726. /package/dist/{chunk-JLGCQ2F4.js.map → chunk-4RWLKZMS.js.map} +0 -0
  727. /package/dist/{chunk-2ZTCRUOL.js.map → chunk-57GCW5SF.js.map} +0 -0
  728. /package/dist/{chunk-RZGEKL77.js.map → chunk-5RUVBYLK.js.map} +0 -0
  729. /package/dist/{chunk-QHPN3JJZ.js.map → chunk-5YOZ4E5H.js.map} +0 -0
  730. /package/dist/{chunk-GL44X7JY.js.map → chunk-6N5DNN7P.js.map} +0 -0
  731. /package/dist/{chunk-5VMYXVZG.js.map → chunk-AOVDTRFY.js.map} +0 -0
  732. /package/dist/{chunk-QSGXZEUU.js.map → chunk-BIDQ4OZH.js.map} +0 -0
  733. /package/dist/{chunk-Z7VK2AMA.js.map → chunk-C34UTN5M.js.map} +0 -0
  734. /package/dist/{chunk-7ZVFLC2V.js.map → chunk-DFHSLHXZ.js.map} +0 -0
  735. /package/dist/{chunk-2Y5C7GJS.js.map → chunk-E2JRANYL.js.map} +0 -0
  736. /package/dist/{chunk-CRH37PEV.js.map → chunk-FESRWKYY.js.map} +0 -0
  737. /package/dist/{chunk-DKAHHMKN.js.map → chunk-GMJSMF7P.js.map} +0 -0
  738. /package/dist/{chunk-ZH7JPYQE.js.map → chunk-HDPL53U4.js.map} +0 -0
  739. /package/dist/{chunk-ZVDOSFWU.js.map → chunk-HOCICSX4.js.map} +0 -0
  740. /package/dist/{chunk-4H4WJJ2G.js.map → chunk-HV3GD2F3.js.map} +0 -0
  741. /package/dist/{chunk-KPTPDZX2.js.map → chunk-IGVKT4CE.js.map} +0 -0
  742. /package/dist/{chunk-FYAY6D3O.js.map → chunk-IMKIDF2H.js.map} +0 -0
  743. /package/dist/{chunk-EQCVSUAF.js.map → chunk-ITKMNOLR.js.map} +0 -0
  744. /package/dist/{chunk-JQYPRW42.js.map → chunk-JABW3SRG.js.map} +0 -0
  745. /package/dist/{chunk-XJBSBIZ4.js.map → chunk-KDNYUHAH.js.map} +0 -0
  746. /package/dist/{chunk-SOCGXVIL.js.map → chunk-KSA3ND7Z.js.map} +0 -0
  747. /package/dist/{chunk-5ITKSTJX.js.map → chunk-LCRPBPKX.js.map} +0 -0
  748. /package/dist/{chunk-SZHFBRRT.js.map → chunk-NIZTWHGT.js.map} +0 -0
  749. /package/dist/{chunk-UJN2RH5R.js.map → chunk-OCC5HEPR.js.map} +0 -0
  750. /package/dist/{chunk-KZFVYDVK.js.map → chunk-OMIUJ7JT.js.map} +0 -0
  751. /package/dist/{chunk-K4IGOJPT.js.map → chunk-ONCG5AKF.js.map} +0 -0
  752. /package/dist/{chunk-C5IAIOCA.js.map → chunk-OW5LD7S2.js.map} +0 -0
  753. /package/dist/{chunk-CIRCVMWE.js.map → chunk-PY4QOYPK.js.map} +0 -0
  754. /package/dist/{chunk-NRP55BOF.js.map → chunk-Q3QY7QGU.js.map} +0 -0
  755. /package/dist/{chunk-3P74DH6P.js.map → chunk-RL3IRMOA.js.map} +0 -0
  756. /package/dist/{chunk-XIBY5I6F.js.map → chunk-SCOFWMSE.js.map} +0 -0
  757. /package/dist/{chunk-KW7MKBGF.js.map → chunk-SMOHPEMJ.js.map} +0 -0
  758. /package/dist/{chunk-3O6XFPUB.js.map → chunk-SNL7MSZD.js.map} +0 -0
  759. /package/dist/{chunk-TPVHGI7Q.js.map → chunk-SP7HDNXC.js.map} +0 -0
  760. /package/dist/{chunk-4KY4XKJV.js.map → chunk-UILBQKQ6.js.map} +0 -0
  761. /package/dist/{chunk-TOYMIFHN.js.map → chunk-UTNJA7JC.js.map} +0 -0
  762. /package/dist/{chunk-YMP4YKBN.js.map → chunk-VJCJCDFI.js.map} +0 -0
  763. /package/dist/{chunk-IIT367QZ.js.map → chunk-VSSZJHOR.js.map} +0 -0
  764. /package/dist/{chunk-XZ4M3QAV.js.map → chunk-W2WOZNEN.js.map} +0 -0
  765. /package/dist/{chunk-V2DU2OXH.js.map → chunk-WJTRQ3ZC.js.map} +0 -0
  766. /package/dist/{chunk-4USLEUNR.js.map → chunk-X4QQRHFB.js.map} +0 -0
  767. /package/dist/{chunk-JQT67SWE.js.map → chunk-Y2UCJ33M.js.map} +0 -0
  768. /package/dist/{chunk-3PPCZPLN.js.map → chunk-Y45RZL4F.js.map} +0 -0
  769. /package/dist/{chunk-ECIBJXFT.js.map → chunk-Z2TA7NML.js.map} +0 -0
  770. /package/dist/{chunk-C2JHLAKV.js.map → chunk-Z7U74YGW.js.map} +0 -0
  771. /package/dist/{chunk-FXS4I3Z3.js.map → chunk-ZKMBNB5E.js.map} +0 -0
  772. /package/dist/{chunk-M77DCLJX.js.map → chunk-ZPBG6CT3.js.map} +0 -0
  773. /package/dist/{chunk-X7KRSZQT.js.map → chunk-ZUDSOVYT.js.map} +0 -0
  774. /package/dist/{cohort-CEYVJJ7E.js.map → cohort-R743ZSCR.js.map} +0 -0
  775. /package/dist/{condition-QSOFP4MY.js.map → condition-MPZIRRGP.js.map} +0 -0
  776. /package/dist/{controls-QYHARIEY.js.map → controls-WD5TZITZ.js.map} +0 -0
  777. /package/dist/{controls.btns-AP67YWKW.js.map → controls.btns-KCLXBXSL.js.map} +0 -0
  778. /package/dist/{controls.config-3OO3JK6E.js.map → controls.config-577UCREO.js.map} +0 -0
  779. /package/dist/{correlation-TOI3TMYL.js.map → correlation-OCFBDDOX.js.map} +0 -0
  780. /package/dist/{cuminc.integration.spec-LSWV3KOF.js.map → cuminc.integration.spec-V46K57GV.js.map} +0 -0
  781. /package/dist/{customdata.inputui-VMB3HSSC.js.map → customdata.inputui-2MS5ZRKC.js.map} +0 -0
  782. /package/dist/{dataDownload.integration.spec-J6FRFLBK.js.map → dataDownload.integration.spec-TEOJOMYK.js.map} +0 -0
  783. /package/dist/{databrowser.ui-GVYWG6YI.js.map → databrowser.ui-PDPFHOH7.js.map} +0 -0
  784. /package/dist/{dictionary-GD67R72W.js.map → dictionary-MWUQYW6W.js.map} +0 -0
  785. /package/dist/{dnaMethylation-S7OSGLAF.js.map → dnaMethylation-SNVVE2MD.js.map} +0 -0
  786. /package/dist/{dnaMethylation.integration.spec-ETMMJNDE.js.map → dnaMethylation.integration.spec-OSYZ3YDP.js.map} +0 -0
  787. /package/dist/{dofetch-7GURQS65.js.map → dofetch-7R7PL4BX.js.map} +0 -0
  788. /package/dist/{e2pca-ZIIPBJFN.js.map → e2pca-7FYIWR5O.js.map} +0 -0
  789. /package/dist/{ep-A2HAL5WA.js.map → ep-PTAJZLKI.js.map} +0 -0
  790. /package/dist/{expclust.gdc.spec-ZSILLYNI.js.map → expclust.gdc.spec-2R7T7JPY.js.map} +0 -0
  791. /package/dist/{gb-C3MPQXKN.js.map → gb-5UFIDQWY.js.map} +0 -0
  792. /package/dist/{geneExpClustering-HYCFUUTU.js.map → geneExpClustering-QLBETGVB.js.map} +0 -0
  793. /package/dist/{geneExpression-JXSAP2H7.js.map → geneExpression-SAMLSOHQ.js.map} +0 -0
  794. /package/dist/{geneExpression-GATKMJJ5.js.map → geneExpression-SECTPIDT.js.map} +0 -0
  795. /package/dist/{geneExpression.unit.spec-CODZYFHZ.js.map → geneExpression.unit.spec-UNRGPJIG.js.map} +0 -0
  796. /package/dist/{geneORA-LJRIR4VV.js.map → geneORA-CCQGE7QL.js.map} +0 -0
  797. /package/dist/{geneRanking-TWLBKQZG.js.map → geneRanking-NVR7ZZIP.js.map} +0 -0
  798. /package/dist/{geneVariant-35RQHTCK.js.map → geneVariant-5KL2J3NA.js.map} +0 -0
  799. /package/dist/{geneVariant-TMJJIMUF.js.map → geneVariant-72E5YEPJ.js.map} +0 -0
  800. /package/dist/{geneVariant.integration.spec-FIQ7IBSD.js.map → geneVariant.integration.spec-7JLVYF7Q.js.map} +0 -0
  801. /package/dist/{genefusion.ui-SOBESSNO.js.map → genefusion.ui-M3IG6NUU.js.map} +0 -0
  802. /package/dist/{geneset-JXEJFEK2.js.map → geneset-V2535XGY.js.map} +0 -0
  803. /package/dist/{genomeBrowser.spec-25ZO5S2X.js.map → genomeBrowser.spec-TRREAQCH.js.map} +0 -0
  804. /package/dist/{grin2-CW4RPVPI.js.map → grin2-6X5GCPBQ.js.map} +0 -0
  805. /package/dist/{grin2-EI5BVP4E.js.map → grin2-GOO7H3RC.js.map} +0 -0
  806. /package/dist/{hierCluster-OBBPQH24.js.map → hierCluster-5YZOCCTV.js.map} +0 -0
  807. /package/dist/{hierCluster-SDH3TJQY.js.map → hierCluster-ZPQCUSVO.js.map} +0 -0
  808. /package/dist/{hierCluster.config-DO67TCXI.js.map → hierCluster.config-T3Y2LS6V.js.map} +0 -0
  809. /package/dist/{hierCluster.integration.spec-EB24C4VZ.js.map → hierCluster.integration.spec-PTXVQH77.js.map} +0 -0
  810. /package/dist/{hierCluster.interactivity-LGEAFT5T.js.map → hierCluster.interactivity-JNBO3MJB.js.map} +0 -0
  811. /package/dist/{importPlot-R2WRZGZU.js.map → importPlot-CWMBFQDD.js.map} +0 -0
  812. /package/dist/{isoformExpression-KI3WY5M3.js.map → isoformExpression-ABPY2N3A.js.map} +0 -0
  813. /package/dist/{isoformExpression.unit.spec-OQRG2DDU.js.map → isoformExpression.unit.spec-KRAZBQVF.js.map} +0 -0
  814. /package/dist/{junction-6SWFPNM5.js.map → junction-XGCBNVHV.js.map} +0 -0
  815. /package/dist/{junction.unit.spec-5TZFITSU.js.map → junction.unit.spec-XZFUJRI3.js.map} +0 -0
  816. /package/dist/{launch.adhoc-HCX2RQLB.js.map → launch.adhoc-7FJD3XSI.js.map} +0 -0
  817. /package/dist/{leftlabel.sample-OI6XCXTQ.js.map → leftlabel.sample-VPOZWRVY.js.map} +0 -0
  818. /package/dist/{lollipop-SOSOYHYL.js.map → lollipop-WBOAFWWO.js.map} +0 -0
  819. /package/dist/{maftimeline-UOMLYUNI.js.map → maftimeline-UK4MQP2D.js.map} +0 -0
  820. /package/dist/{matrix-5QWDN6SI.js.map → matrix-AT2FFTWO.js.map} +0 -0
  821. /package/dist/{matrix-SKPVVDVR.js.map → matrix-AU6NPNID.js.map} +0 -0
  822. /package/dist/{matrix.config-HE64MAL4.js.map → matrix.config-VTQ6HL5L.js.map} +0 -0
  823. /package/dist/{matrix.data-HTUZXQAM.js.map → matrix.data-DBYXSWIN.js.map} +0 -0
  824. /package/dist/{matrix.dom-F7AN3QGE.js.map → matrix.dom-DDPSUNY2.js.map} +0 -0
  825. /package/dist/{matrix.integration.spec-YKJ4LZFY.js.map → matrix.integration.spec-NJ2AXQAS.js.map} +0 -0
  826. /package/dist/{matrix.interactivity-YB5G5W5T.js.map → matrix.interactivity-HE2Q6SAO.js.map} +0 -0
  827. /package/dist/{matrix.layout-MFG65V7K.js.map → matrix.layout-FD5BPRCX.js.map} +0 -0
  828. /package/dist/{matrix.renderers-PCZFHDDZ.js.map → matrix.renderers-DVM4NB2R.js.map} +0 -0
  829. /package/dist/{matrix.sort.unit.spec-GEAM5DSU.js.map → matrix.sort.unit.spec-VQ3TR4S2.js.map} +0 -0
  830. /package/dist/{matrix.sorterUi-YSKIX6B6.js.map → matrix.sorterUi-4KYRGJT5.js.map} +0 -0
  831. /package/dist/{matrix.sorterUi.unit.spec-2MW64QS5.js.map → matrix.sorterUi.unit.spec-IEHG3OKN.js.map} +0 -0
  832. /package/dist/{mavb-YMHJXCGA.js.map → mavb-RPRKXPTZ.js.map} +0 -0
  833. /package/dist/{mds.fimo-PTEDRMLQ.js.map → mds.fimo-PZCVBD44.js.map} +0 -0
  834. /package/dist/{mds.samplescatterplot-7R7PLVQJ.js.map → mds.samplescatterplot-236GTHM4.js.map} +0 -0
  835. /package/dist/{mds.survivalplot-F3EENMFQ.js.map → mds.survivalplot-IJHOWSZL.js.map} +0 -0
  836. /package/dist/{oncomatrix-27VVSMZB.js.map → oncomatrix-R4OKDXSV.js.map} +0 -0
  837. /package/dist/{oncomatrix.spec-F43Y7CWN.js.map → oncomatrix.spec-4Z4HKS44.js.map} +0 -0
  838. /package/dist/{plot.2dvaf-MYFQSWIA.js.map → plot.2dvaf-ZK7DAKRQ.js.map} +0 -0
  839. /package/dist/{plot.app-36QWCKXR.js.map → plot.app-J66BA2LD.js.map} +0 -0
  840. /package/dist/{plot.barplot-535EP7XT.js.map → plot.barplot-UVRVPOKA.js.map} +0 -0
  841. /package/dist/{plot.boxplot-6IBP7VEB.js.map → plot.boxplot-DQGBDNLU.js.map} +0 -0
  842. /package/dist/{plot.brainImaging-M4HPNXZH.js.map → plot.brainImaging-WRMDYYHC.js.map} +0 -0
  843. /package/dist/{plot.disco-HIT6GR44.js.map → plot.disco-SSGPSM7W.js.map} +0 -0
  844. /package/dist/{plot.dzi-W66SBKTH.js.map → plot.dzi-F77KKPIJ.js.map} +0 -0
  845. /package/dist/{plot.ssgq-MI2OMCUY.js.map → plot.ssgq-FVFJOYVO.js.map} +0 -0
  846. /package/dist/{plot.vaf2cov-F4CBMLRA.js.map → plot.vaf2cov-CJSYBSPQ.js.map} +0 -0
  847. /package/dist/{plot.wsi-7M5KTNFC.js.map → plot.wsi-OSZU2PQ5.js.map} +0 -0
  848. /package/dist/{polar2-7VSWGT4U.js.map → polar2-R4ZKXKEV.js.map} +0 -0
  849. /package/dist/{profilePlot-ECTPPVB2.js.map → profilePlot-JU7SFYYY.js.map} +0 -0
  850. /package/dist/{proteinView-6ELOLOIU.js.map → proteinView-VU4SVO5I.js.map} +0 -0
  851. /package/dist/{proteomeCohortCompare-V2FMWI62.js.map → proteomeCohortCompare-2U537GOK.js.map} +0 -0
  852. /package/dist/{pseudbulk.unit.spec-KV6URTXC.js.map → pseudbulk.unit.spec-2FDKAEVI.js.map} +0 -0
  853. /package/dist/{pseudobulk-6ZRFCE65.js.map → pseudobulk-5GBUBBOY.js.map} +0 -0
  854. /package/dist/{qualitative-3B62RUOB.js.map → qualitative-3FTEQ7JW.js.map} +0 -0
  855. /package/dist/{radar2-4QQER64E.js.map → radar2-EBOTTAMC.js.map} +0 -0
  856. /package/dist/{radarFacility2-MZKORRDY.js.map → radarFacility2-PAGNJR6D.js.map} +0 -0
  857. /package/dist/{regression-GZ2YNX6Y.js.map → regression-XOVSVC7S.js.map} +0 -0
  858. /package/dist/{regression.inputs-ZEFDNSVT.js.map → regression.inputs-LGA67ESO.js.map} +0 -0
  859. /package/dist/{regression.inputs.term-O2FQBX7L.js.map → regression.inputs.term-UCQKXC5D.js.map} +0 -0
  860. /package/dist/{regression.inputs.values.table-63BQKSZP.js.map → regression.inputs.values.table-2RRE7SMS.js.map} +0 -0
  861. /package/dist/{regression.integration.spec-KDHC3KDU.js.map → regression.integration.spec-BKM5UI7H.js.map} +0 -0
  862. /package/dist/{regression.results-5J3QM4RX.js.map → regression.results-T3HB6CBH.js.map} +0 -0
  863. /package/dist/{regression.spec-WZAZTDDA.js.map → regression.spec-W7IVCYVZ.js.map} +0 -0
  864. /package/dist/{render-MZTEXVU5.js.map → render-2C6LWNG2.js.map} +0 -0
  865. /package/dist/{report-M5TYHH2W.js.map → report-HRGU3XKL.js.map} +0 -0
  866. /package/dist/{sampleView-QYTLYJEW.js.map → sampleView-P5JZHEKY.js.map} +0 -0
  867. /package/dist/{samplelst-FN3Q7M7A.js.map → samplelst-OYQ6BASU.js.map} +0 -0
  868. /package/dist/{samplematrix-Z5FVODO7.js.map → samplematrix-JC3SGO5V.js.map} +0 -0
  869. /package/dist/{sc-4CHP5SYP.js.map → sc-FTHUNDGY.js.map} +0 -0
  870. /package/dist/{scatter-UOPJYXL3.js.map → scatter-WYP2NPNB.js.map} +0 -0
  871. /package/dist/{selectGenomeWithTklst-WMAHGT4F.js.map → selectGenomeWithTklst-CIETKILP.js.map} +0 -0
  872. /package/dist/{singleCellCellType-XPWENB6V.js.map → singleCellCellType-3O3TTLM6.js.map} +0 -0
  873. /package/dist/{singleCellCellType.unit.spec-QK56PHKW.js.map → singleCellCellType.unit.spec-GHBS36DB.js.map} +0 -0
  874. /package/dist/{singleCellGeneExpression-4CEVDVYF.js.map → singleCellGeneExpression-2F7F4EKK.js.map} +0 -0
  875. /package/dist/{singleCellGeneExpression.unit.spec-ZYRLBVF5.js.map → singleCellGeneExpression.unit.spec-2VGIH2NZ.js.map} +0 -0
  876. /package/dist/{singleCellPlot-JS74VUGC.js.map → singleCellPlot-MGSS4O3L.js.map} +0 -0
  877. /package/dist/{singlecell-OO77XBDD.js.map → singlecell-CKC2VVJ3.js.map} +0 -0
  878. /package/dist/{singlecell-5XYOHMWJ.js.map → singlecell-QOXATRF4.js.map} +0 -0
  879. /package/dist/{snp-X5ZILM5J.js.map → snp-OSYJO2R7.js.map} +0 -0
  880. /package/dist/{snp.unit.spec-V23G3JLJ.js.map → snp.unit.spec-L5ANPFO2.js.map} +0 -0
  881. /package/dist/{snplocus-U5UIIUWR.js.map → snplocus-64MJJID2.js.map} +0 -0
  882. /package/dist/{spliceevent.a53ss.diagram-YDFVSDMT.js.map → spliceevent.a53ss.diagram-LHRT5UPB.js.map} +0 -0
  883. /package/dist/{spliceevent.exonskip.diagram-VDKN5JBE.js.map → spliceevent.exonskip.diagram-BGSEPGR5.js.map} +0 -0
  884. /package/dist/{spliceevent.noeventdiagram-EFPFRUFI.js.map → spliceevent.noeventdiagram-QGZZSKW7.js.map} +0 -0
  885. /package/dist/{ssGSEA-LKJW5OQK.js.map → ssGSEA-VVAZDFDT.js.map} +0 -0
  886. /package/dist/{ssGSEA.unit.spec-7WCZVEP2.js.map → ssGSEA.unit.spec-LP76RHTV.js.map} +0 -0
  887. /package/dist/{studyCatalog-EU33KE5H.js.map → studyCatalog-AXWH7IOH.js.map} +0 -0
  888. /package/dist/{summarizeCnvGeneexp-QL25OQNB.js.map → summarizeCnvGeneexp-DRBIXOAP.js.map} +0 -0
  889. /package/dist/{summarizeGeneexpSurvival-B7HTCH7L.js.map → summarizeGeneexpSurvival-4PATAUSN.js.map} +0 -0
  890. /package/dist/{summarizeMutationCnv-DFAPX2JE.js.map → summarizeMutationCnv-UGSIGZDJ.js.map} +0 -0
  891. /package/dist/{summarizeMutationDiagnosis-HCSDSVII.js.map → summarizeMutationDiagnosis-UATVI5BK.js.map} +0 -0
  892. /package/dist/{summarizeMutationSurvival-6WEASSA2.js.map → summarizeMutationSurvival-CZXGM3AA.js.map} +0 -0
  893. /package/dist/{summary-BWYXE77G.js.map → summary-IGTXNQ5I.js.map} +0 -0
  894. /package/dist/{summary.integration.spec-AVGSW5MF.js.map → summary.integration.spec-VFCYU2V6.js.map} +0 -0
  895. /package/dist/{summaryInput-MOQ6HUCX.js.map → summaryInput-AFZSASTM.js.map} +0 -0
  896. /package/dist/{sunburst-EZDHVJCL.js.map → sunburst-G7DBI637.js.map} +0 -0
  897. /package/dist/{survival-IEVELTC4.js.map → survival-YOJBLMR2.js.map} +0 -0
  898. /package/dist/{survival.integration.spec-HHWP3R4H.js.map → survival.integration.spec-FXPCZJSS.js.map} +0 -0
  899. /package/dist/{svgraph-55XRIYJW.js.map → svgraph-ZSSOWI7R.js.map} +0 -0
  900. /package/dist/{svmr-CMEBFSRO.js.map → svmr-FPYSMXSC.js.map} +0 -0
  901. /package/dist/{termCollection-CPQXYBFA.js.map → termCollection-IY5V64IY.js.map} +0 -0
  902. /package/dist/{termCollection-ZWOH273K.js.map → termCollection-SR4SP6RZ.js.map} +0 -0
  903. /package/dist/{termCollection.unit.spec-RK7VATLU.js.map → termCollection.unit.spec-NL72AQ2P.js.map} +0 -0
  904. /package/dist/{termCollectionFractionSelection-Z4ZRW63R.js.map → termCollectionFractionSelection-2LPBE224.js.map} +0 -0
  905. /package/dist/{termCollectionFractionSelection.unit.spec-3CS7DPNU.js.map → termCollectionFractionSelection.unit.spec-PUMGBUDN.js.map} +0 -0
  906. /package/dist/{termInfo-6MJDJSDW.js.map → termInfo-2DR7DHXM.js.map} +0 -0
  907. /package/dist/{tk-RHWJJXH2.js.map → tk-COBDWIZJ.js.map} +0 -0
  908. /package/dist/{tk-4NNTWWLK.js.map → tk-N2YBXDQK.js.map} +0 -0
  909. /package/dist/{tp.ui-DPN5UN6U.js.map → tp.ui-BMK2MMIJ.js.map} +0 -0
  910. /package/dist/{tvs.dt-ARPDFRVM.js.map → tvs.dt-KL4VCW5Y.js.map} +0 -0
  911. /package/dist/{tvs.dtcnv.categorical-POS6WQK6.js.map → tvs.dtcnv.categorical-VGXOASJE.js.map} +0 -0
  912. /package/dist/{tvs.dtcnv.continuous-5OETJ7JU.js.map → tvs.dtcnv.continuous-IANT7BPS.js.map} +0 -0
  913. /package/dist/{tvs.dtfusion-ERYVI3DW.js.map → tvs.dtfusion-M5HJWCJI.js.map} +0 -0
  914. /package/dist/{tvs.dtitd-KTZZYEWU.js.map → tvs.dtitd-KB72EDPN.js.map} +0 -0
  915. /package/dist/{tvs.dtsnvindel-TGUAX3RN.js.map → tvs.dtsnvindel-VGYTLO6E.js.map} +0 -0
  916. /package/dist/{tvs.dtsv-AM63OIL6.js.map → tvs.dtsv-KWUXW2F5.js.map} +0 -0
  917. /package/dist/{tvs.samplelst-VW2NOQ2C.js.map → tvs.samplelst-3UA7XMHJ.js.map} +0 -0
  918. /package/dist/{tvs.termCollection-O4ZSWJFA.js.map → tvs.termCollection-LK6CVGYZ.js.map} +0 -0
  919. /package/dist/{violin-ZQ3DEYGR.js.map → violin-D4EX3ZFV.js.map} +0 -0
  920. /package/dist/{violin.integration.spec-PVEF77HB.js.map → violin.integration.spec-GBW3VBHW.js.map} +0 -0
  921. /package/dist/{violin.interactivity-FYU4TCFO.js.map → violin.interactivity-N3JVI2AQ.js.map} +0 -0
  922. /package/dist/{violin.renderer-XAERGBMV.js.map → violin.renderer-2NYRUXUY.js.map} +0 -0
  923. /package/dist/{vocabulary-ECJX27W2.js.map → vocabulary-277KD4RO.js.map} +0 -0
@@ -1,7 +0,0 @@
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\tnonlinearity: {header[], terms{}, label } // only when spline variables are in the model\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_nonlinearity\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\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\tthis.parent.inputs.dom.submitBtn.text('Running...')\n\t\t\tthis.parent.dom.inputs.style('opacity', 0.5).style('pointer-events', 'none') // disables all interactivities on input ui; if ref category is switched while loading, it will abort current request\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} finally {\n\t\t\tthis.parent.dom.inputs.style('opacity', 1).style('pointer-events', 'auto')\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\topts.filter0 = this.state.termfilter.filter0\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_nonlinearity(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)} ${unitsOf(outcomeTw)}`\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 ${oneUnitOf(tw)} 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/* a numeric term with valueConversion{} is analyzed by its converted unit\n\t\t(see makeRinput() in server/src/routes/termdb.regression.ts), so the estimate is per that\n\t\tunit, e.g. per year rather than per day. the two below name the unit of such a variable,\n\t\tand fall back to the generic \"unit\" wording for terms without a declared unit */\n\t\tfunction oneUnitOf(tw) {\n\t\t\tconst u = tw?.term?.valueConversion?.toUnit\n\t\t\treturn u ? `1 ${u}` : 'one unit'\n\t\t}\n\t\tfunction unitsOf(tw) {\n\t\t\tconst u = tw?.term?.valueConversion?.toUnit\n\t\t\treturn u ? `${u}s` : 'units'\n\t\t}\n\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 ${oneUnitOf(tw2)} 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_nonlinearity = result => {\n\t\t// only present when the model has cubic spline variables\n\t\tif (!result.nonlinearity) return\n\t\tconst div = self.newDiv(result.nonlinearity.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.nonlinearity.header) {\n\t\t\t\ttr.append('td').text(v).style('padding', '8px')\n\t\t\t}\n\t\t}\n\n\t\t// one row per spline variable\n\t\tlet rowcount = 0\n\t\tfor (const tid in result.nonlinearity.terms) {\n\t\t\tconst tw = self.getIndependentInput(tid).term\n\t\t\tconst tr = table.append('tr').style('background', rowcount++ % 2 ? 'none' : '#eee')\n\t\t\t// col 1: variable\n\t\t\tfillTdName(tr.append('td').style('padding', '8px'), tw.term.name)\n\t\t\t// rest of columns\n\t\t\tfor (const v of result.nonlinearity.terms[tid]) {\n\t\t\t\ttr.append('td').text(v).style('padding', '8px')\n\t\t\t}\n\t\t}\n\n\t\tdiv\n\t\t\t.append('div')\n\t\t\t.style('margin', '10px 0px 0px 0px')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.style('color', '#999')\n\t\t\t.text(\n\t\t\t\t'Comparison of the cubic spline fit against a linear fit of the same variable. A small p-value indicates the effect of the variable departs from linearity.'\n\t\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\t/* a numeric variable of a term with valueConversion{} is analyzed by the converted unit\n\t(see makeRinput() in server/src/routes/termdb.regression.ts). name that unit under the variable,\n\tso the estimate is not misread as being per the unit the term's values are stored in */\n\tconst toUnit = tw.term.valueConversion?.toUnit\n\tif (toUnit && (tw.q.mode == 'continuous' || tw.q.mode == 'spline')) {\n\t\ttd.append('div').style('margin-top', '2px').style('font-size', '.7em').style('opacity', 0.6).text(`per ${toUnit}`)\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
- }
@@ -1,55 +0,0 @@
1
- import {
2
- colorinframe
3
- } from "./chunk-K6OVOHIZ.js";
4
- import {
5
- IN_frame,
6
- OUT_frame
7
- } from "./chunk-GEQUQ3GG.js";
8
-
9
- // src/spliceevent.phrase.js
10
- function spliceevent_phrase_default(evt) {
11
- const htmls = [];
12
- if (evt.isaltexon || evt.isskipexon) {
13
- const exonstart = Math.min(...evt.skippedexon);
14
- const exonstop = Math.max(...evt.skippedexon);
15
- htmls.push(
16
- '<div style="display:inline-block">' + (exonstart == exonstop ? "exon " + (exonstart + 1) : "exons " + (exonstart + 1) + "-" + (exonstop + 1)) + " " + (evt.isaltexon ? "alternative usage" : "skipping") + "</div>"
17
- );
18
- if (evt.isaltexon) {
19
- htmls.push(
20
- "<div class=sja_tinylogo_body>" + evt.gmB.isoform + ", " + evt.gmA.isoform + "</div><div class=sja_tinylogo_head>ISOFORMS</div>"
21
- );
22
- } else {
23
- htmls.push("<div class=sja_tinylogo_body>" + evt.gm.isoform + "</div><div class=sja_tinylogo_head>ISOFORM</div>");
24
- }
25
- if (evt.junctionB.data) {
26
- htmls.push(
27
- "<div class=sja_tinylogo_body>" + evt.junctionB.data.length + "</div><div class=sja_tinylogo_head>SAMPLE" + (evt.junctionB.data.length > 1 ? "S" : "") + "</div>"
28
- );
29
- }
30
- htmls.push("<div class=sja_tinylogo_body>" + evt.percentage + " %</div><div class=sja_tinylogo_head>PERCENT</div>");
31
- if (evt.framenocheck) {
32
- if (evt.utr3) {
33
- htmls.push(`<div class=sja_tinylogo_body style="background-color:#ededed">3' UTR</div>`);
34
- } else if (evt.utr5) {
35
- htmls.push(`<div class=sja_tinylogo_body style="background-color:#ededed">5' UTR</div>`);
36
- }
37
- } else if (evt.frame == IN_frame) {
38
- htmls.push(
39
- '<div class=sja_tinylogo_body style="background-color:' + colorinframe + ';color:white">IN</div><div class=sja_tinylogo_head>FRAME</div>'
40
- );
41
- } else if (evt.frame == OUT_frame) {
42
- htmls.push("<div class=sja_tinylogo_body>OUT</div><div class=sja_tinylogo_head>FRAME</div>");
43
- } else {
44
- htmls.push("<div class=sja_tinylogo_body>?</div><div class=sja_tinylogo_head>FRAME</div>");
45
- }
46
- } else {
47
- return "unknown event type!!";
48
- }
49
- return htmls.join(" ");
50
- }
51
-
52
- export {
53
- spliceevent_phrase_default
54
- };
55
- //# sourceMappingURL=chunk-QHPN3JJZ.js.map