@sjcrh/proteinpaint-client 2.193.0 → 2.194.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 (540) hide show
  1. package/dist/{2dmaf-US2ZAJJJ.js → 2dmaf-HS37GJYM.js} +3 -3
  2. package/dist/{AIProjectAdmin-QQO2PNAJ.js → AIProjectAdmin-V5NVBBOA.js} +4 -4
  3. package/dist/{AppHeader-UKB344GC.js → AppHeader-VIQ2VZPI.js} +10 -10
  4. package/dist/{BoxPlot-JEBLRKBY.js → BoxPlot-J7DPHT2N.js} +3 -3
  5. package/dist/{CorrelationVolcano-J3IFVSZB.js → CorrelationVolcano-ZHP7IPFD.js} +3 -3
  6. package/dist/{DE-PAPJP6AH.js → DE-VW4MQHYP.js} +10 -10
  7. package/dist/{DEinput-YON466QQ.js → DEinput-2EKXGUP3.js} +3 -3
  8. package/dist/{DifferentialAnalysis-DEUODXGG.js → DifferentialAnalysis-H7LZWEIL.js} +4 -4
  9. package/dist/{Disco-OZM4S7HF.js → Disco-5AA67AO5.js} +5 -5
  10. package/dist/{Disco.UI-VIHYJGYU.js → Disco.UI-K4RBVRJP.js} +6 -6
  11. package/dist/{DmrPlot-DSELMC4E.js → DmrPlot-RVJUKBOB.js} +4 -4
  12. package/dist/{GB-MUPI6RL5.js → GB-TA5LQGX6.js} +253 -51
  13. package/dist/GB-TA5LQGX6.js.map +7 -0
  14. package/dist/{GeneExpInput-3AQEPTFZ.js → GeneExpInput-HHOIK6X7.js} +4 -4
  15. package/dist/{HicApp-BP7PSXY2.js → HicApp-YTQNK5DC.js} +4 -4
  16. package/dist/IDCViewer-T74AFWY3.js +10455 -0
  17. package/dist/IDCViewer-T74AFWY3.js.map +7 -0
  18. package/dist/{NumBinaryEditor-CHWQT445.js → NumBinaryEditor-ICZCNBRL.js} +3 -3
  19. package/dist/{NumBinaryEditor.unit.spec-MXRNK7XH.js → NumBinaryEditor.unit.spec-WDJPDAVT.js} +4 -4
  20. package/dist/{NumContEditor-XS3RA7GY.js → NumContEditor-5KEM54CE.js} +3 -3
  21. package/dist/{NumContEditor.unit.spec-662MHSP4.js → NumContEditor.unit.spec-WG5QKOD3.js} +4 -4
  22. package/dist/{NumCustomBinEditor-LUVIAXMZ.js → NumCustomBinEditor-MGHR7VQT.js} +4 -4
  23. package/dist/{NumCustomBinEditor.unit.spec-3D3GY3F4.js → NumCustomBinEditor.unit.spec-JWSHEIJJ.js} +4 -4
  24. package/dist/{NumDiscreteEditor-24W2A5IN.js → NumDiscreteEditor-XT2GSGUR.js} +5 -5
  25. package/dist/{NumDiscreteEditor.unit.spec-B5T42Z5S.js → NumDiscreteEditor.unit.spec-DSCWGYBS.js} +4 -4
  26. package/dist/{NumRegularBinEditor-AING4HZ5.js → NumRegularBinEditor-JMDBM5PU.js} +4 -4
  27. package/dist/{NumRegularBinEditor.unit.spec-UKSVZH2S.js → NumRegularBinEditor.unit.spec-BWRP6OO2.js} +4 -4
  28. package/dist/{NumSplineEditor-54KNKHJX.js → NumSplineEditor-QJNRSORC.js} +3 -3
  29. package/dist/{NumSplineEditor.unit.spec-5FTST3Y5.js → NumSplineEditor.unit.spec-CXBTVND4.js} +4 -4
  30. package/dist/{NumericDensity-C7DQZ5Q5.js → NumericDensity-XQWCBSGT.js} +3 -3
  31. package/dist/{NumericDensity.unit.spec-HV6SD3ZS.js → NumericDensity.unit.spec-7JS5R3AZ.js} +3 -3
  32. package/dist/{NumericHandler-FV3L23EC.js → NumericHandler-QXXBEJC3.js} +4 -4
  33. package/dist/{NumericHandler.unit.spec-E72DXVBB.js → NumericHandler.unit.spec-SRQJQVPP.js} +4 -4
  34. package/dist/{ProteomeInput-3XTK74SN.js → ProteomeInput-E4MJLAKF.js} +6 -6
  35. package/dist/{RunChart2-X5FBZVRX.js → RunChart2-N6S7HBXV.js} +3 -3
  36. package/dist/{SC-WE5DG2CQ.js → SC-RQ32A4YB.js} +3 -3
  37. package/dist/{Volcano-2USCTLKO.js → Volcano-OHJPYZQE.js} +3 -3
  38. package/dist/{WSIViewer-U6VSJUFF.js → WSIViewer-SAKVU52Z.js} +3 -3
  39. package/dist/{WsiSamplesPlot-VIKSG63U.js → WsiSamplesPlot-QV5GFFCR.js} +4 -4
  40. package/dist/{adSandbox-VXUJGPD3.js → adSandbox-IE7TOJUE.js} +4 -4
  41. package/dist/{animatedBubbleChart-4P7XLKSB.js → animatedBubbleChart-ZNEDQND3.js} +3 -3
  42. package/dist/{app-KHZT2BVF.js → app-7MRKEE2J.js} +10 -10
  43. package/dist/{app-XLYH3YPL.js → app-QIBNB4AA.js} +3 -3
  44. package/dist/app.js +8 -8
  45. package/dist/{bam-C23ZARYE.js → bam-OBS5ULFF.js} +5 -5
  46. package/dist/{barchart-KGXLYEIP.js → barchart-2RVEEMPK.js} +3 -3
  47. package/dist/{barchart.events-3KDNIFBG.js → barchart.events-AASSQL3J.js} +3 -3
  48. package/dist/{barchart.integration.spec-OQYY54AQ.js → barchart.integration.spec-UU2ARJS5.js} +11 -11
  49. package/dist/{barchart2-AT5FXOUY.js → barchart2-TUBYGLMC.js} +4 -4
  50. package/dist/{block-TCWYUB4R.js → block-BYXWS7H7.js} +23 -23
  51. package/dist/{block.init-7FHXQJNE.js → block.init-QOAPDKCC.js} +4 -4
  52. package/dist/{block.mds.expressionrank-UGZQK7Z3.js → block.mds.expressionrank-Q46AAYOA.js} +5 -5
  53. package/dist/{block.mds.geneboxplot-2CQLB4YN.js → block.mds.geneboxplot-IC26RT7L.js} +4 -4
  54. package/dist/{block.mds.junction-JHPHWVOS.js → block.mds.junction-RIUZIBFB.js} +9 -9
  55. package/dist/{block.mds.svcnv-E7P2SVKK.js → block.mds.svcnv-GUB2TTXQ.js} +16 -16
  56. package/dist/{block.svg-MVRR3C6V.js → block.svg-I4NHMOEJ.js} +3 -3
  57. package/dist/{block.tk.aicheck-KX46G4TR.js → block.tk.aicheck-X57EGAOB.js} +3 -3
  58. package/dist/{block.tk.ase-WMXI47BF.js → block.tk.ase-JMBKBZAH.js} +5 -5
  59. package/dist/{block.tk.bam-KFEGVEQQ.js → block.tk.bam-6UAEWVVD.js} +3 -3
  60. package/dist/{block.tk.bedgraphdot-P4DBCWFK.js → block.tk.bedgraphdot-7QSRLAJ7.js} +3 -3
  61. package/dist/{block.tk.bigwig.ui-WJPH2Z7F.js → block.tk.bigwig.ui-SBD6S5SA.js} +3 -3
  62. package/dist/{block.tk.hicstraw-RSD6I2NX.js → block.tk.hicstraw-LIGPTMX7.js} +3 -3
  63. package/dist/{block.tk.junction-VZS2DEDO.js → block.tk.junction-X6HFXKW7.js} +6 -6
  64. package/dist/{block.tk.junction.textmatrixui-UCWGHZDI.js → block.tk.junction.textmatrixui-XJIUGHAX.js} +4 -4
  65. package/dist/{block.tk.ld-ERSIIBM2.js → block.tk.ld-OZVW7LSL.js} +5 -5
  66. package/dist/{block.tk.menu-2ZNXE7CE.js → block.tk.menu-B2CEZAYR.js} +3 -3
  67. package/dist/{block.tk.pgv-EJLACCFR.js → block.tk.pgv-XAAQBQQE.js} +5 -5
  68. package/dist/{brainImaging-BMZJY6OT.js → brainImaging-KFKM3XWD.js} +3 -3
  69. package/dist/{brainRegions-RZEBXPAS.js → brainRegions-ZHKXILK7.js} +3 -3
  70. package/dist/{bubbleHeatmap-ERJFMLPK.js → bubbleHeatmap-75N23URG.js} +3 -3
  71. package/dist/{chunk-JEZUPG4J.js → chunk-2IITC4V5.js} +3 -3
  72. package/dist/{chunk-PXCFA4ZQ.js → chunk-2P3U6XTF.js} +6 -6
  73. package/dist/{chunk-KNOFEVOJ.js → chunk-35UCHCOQ.js} +2 -2
  74. package/dist/{chunk-OR43PGBV.js → chunk-4E6HJ4ZW.js} +2 -2
  75. package/dist/{chunk-QSEGY3U5.js → chunk-57LW6RUM.js} +2 -2
  76. package/dist/{chunk-CLN7ANNL.js → chunk-5DHRDF2Y.js} +2 -2
  77. package/dist/{chunk-4JWN7E7Q.js → chunk-5POMWXDZ.js} +2 -2
  78. package/dist/{chunk-LLX3NKB4.js → chunk-67QZRGIJ.js} +4 -4
  79. package/dist/{chunk-N25ENPO3.js → chunk-6RKL2FLA.js} +2 -2
  80. package/dist/{chunk-FXGE233W.js → chunk-6YJCBK4J.js} +7 -7
  81. package/dist/{chunk-UXDVUCXU.js → chunk-7K6LTROG.js} +101 -101
  82. package/dist/{chunk-N3JT3KCV.js → chunk-ADAKSWID.js} +2 -2
  83. package/dist/{chunk-GVCQGWN7.js → chunk-ANKGIHCM.js} +2 -2
  84. package/dist/{chunk-GBXX3AHJ.js → chunk-AUP7W7MK.js} +6 -6
  85. package/dist/{chunk-B6U3EDAF.js → chunk-AXKUVSXP.js} +4 -4
  86. package/dist/{chunk-455XZIIA.js → chunk-B4QM73WG.js} +3 -3
  87. package/dist/{chunk-E6XLLQCG.js → chunk-BKPV67UA.js} +4 -4
  88. package/dist/{chunk-4AP3O3JW.js → chunk-BMOB36XM.js} +1 -1
  89. package/dist/chunk-BMOB36XM.js.map +7 -0
  90. package/dist/{chunk-XVXAQ3FI.js → chunk-CD3VY5WW.js} +7 -7
  91. package/dist/{chunk-6SCBPP4C.js → chunk-F47X3VUC.js} +3 -3
  92. package/dist/{chunk-HXZSSHEB.js → chunk-G2DLWJCB.js} +2 -2
  93. package/dist/{chunk-CLNSNNQU.js → chunk-I4G4FXLO.js} +2 -2
  94. package/dist/{chunk-K3OJJZCQ.js → chunk-INU357UG.js} +2 -2
  95. package/dist/{chunk-NU2W6B7I.js → chunk-IZ3BPOTQ.js} +8 -8
  96. package/dist/{chunk-VRLC7DAU.js → chunk-J5GTIQTL.js} +37 -37
  97. package/dist/{chunk-74XVBQF7.js → chunk-JBI6P3UX.js} +2 -2
  98. package/dist/{chunk-HXNUQOGN.js → chunk-JRDHTECQ.js} +2 -2
  99. package/dist/{chunk-NJDW6ZQP.js → chunk-JRZZ6GN3.js} +2 -2
  100. package/dist/{chunk-55MOHL3P.js → chunk-KXRTPE65.js} +5 -5
  101. package/dist/{chunk-SDMOLIEU.js → chunk-L5C3B7PS.js} +17 -2
  102. package/dist/chunk-L5C3B7PS.js.map +7 -0
  103. package/dist/{chunk-73R5BVCY.js → chunk-LHNKTWFL.js} +11 -11
  104. package/dist/{chunk-Y45JIQ5Y.js → chunk-MCYVUHEZ.js} +44 -33
  105. package/dist/chunk-MCYVUHEZ.js.map +7 -0
  106. package/dist/{chunk-DBFKUPM6.js → chunk-O4VKIC66.js} +5 -5
  107. package/dist/{chunk-474DTKP7.js → chunk-OWPBE2LB.js} +4 -4
  108. package/dist/{chunk-FABY3ISP.js → chunk-QFSSC5VW.js} +3 -3
  109. package/dist/{chunk-L7VDSIM7.js → chunk-RHGAE6PY.js} +90 -83
  110. package/dist/{chunk-L7VDSIM7.js.map → chunk-RHGAE6PY.js.map} +2 -2
  111. package/dist/{chunk-FOPHIWFD.js → chunk-T4CFXTIG.js} +2 -2
  112. package/dist/{chunk-YQMENK5H.js → chunk-T5UGVJCK.js} +3 -3
  113. package/dist/{chunk-EY253UB7.js → chunk-TJCRAFKM.js} +4 -4
  114. package/dist/{chunk-JWHFMFF2.js → chunk-TNF2LHJR.js} +2 -2
  115. package/dist/{chunk-SC6IPDJR.js → chunk-U4IYNHVD.js} +9 -9
  116. package/dist/{chunk-BOO4W7WD.js → chunk-UAOPKEMR.js} +2 -2
  117. package/dist/{chunk-IKDWQJZE.js → chunk-UFGV7554.js} +2 -2
  118. package/dist/{chunk-5TJQ6633.js → chunk-UV66X5JN.js} +2 -2
  119. package/dist/{chunk-27FPMFP2.js → chunk-VC642GDC.js} +2 -2
  120. package/dist/{chunk-ATUYZWHV.js → chunk-VNF7DC36.js} +3 -3
  121. package/dist/{chunk-BO47H3VP.js → chunk-VOGPIAQL.js} +3 -3
  122. package/dist/{chunk-7I3LST7R.js → chunk-VZOTKHPM.js} +2 -2
  123. package/dist/{chunk-6YVEYTNH.js → chunk-YAU2Z6EN.js} +5 -5
  124. package/dist/{chunk-EDXQKDVQ.js → chunk-YNAPHPMG.js} +2 -2
  125. package/dist/{chunk-ZUC4XNWU.js → chunk-YP2LHXFC.js} +2 -2
  126. package/dist/{chunk-UDL2DEBB.js → chunk-YWF7GHUW.js} +2 -2
  127. package/dist/{chunk-MQJVDIQK.js → chunk-YYZQMJLW.js} +2 -2
  128. package/dist/{chunk-FVX76DZS.js → chunk-ZBEJVZMY.js} +2 -2
  129. package/dist/{chunk-XQSQQSGB.js → chunk-ZZLBK6P6.js} +4 -4
  130. package/dist/{condition-ZPFBPMEZ.js → condition-MP65K762.js} +3 -3
  131. package/dist/{controls-LIVMV2GV.js → controls-HKHMEWC7.js} +3 -3
  132. package/dist/{controls.config-2EOMBN5E.js → controls.config-LUPIT34L.js} +3 -3
  133. package/dist/{correlation-D6GAPOP5.js → correlation-5UTW6EEI.js} +10 -10
  134. package/dist/{cuminc-GPFDRNUP.js → cuminc-LLUR2FLL.js} +3 -3
  135. package/dist/{cuminc.integration.spec-V4JYKLA6.js → cuminc.integration.spec-CH5UZTIM.js} +10 -10
  136. package/dist/{customdata.inputui-DSEUS3CT.js → customdata.inputui-6IGE5HCZ.js} +3 -3
  137. package/dist/{dataDownload-KT6K3M7Q.js → dataDownload-MCE2OJGZ.js} +3 -3
  138. package/dist/{dataDownload.integration.spec-VEX2RTSA.js → dataDownload.integration.spec-VETU75VQ.js} +10 -10
  139. package/dist/{databrowser.ui-VJKNMIXA.js → databrowser.ui-3BRSJHIW.js} +10 -10
  140. package/dist/{dictionary-B27BMR5H.js → dictionary-UV43XQAU.js} +3 -3
  141. package/dist/{geneExpression-QGPVFAN4.js → dnaMethylation-QDE3S4TV.js} +4 -4
  142. package/dist/{dnaMethylation.integration.spec-YMGT2HYZ.js → dnaMethylation.integration.spec-JBHJE47S.js} +4 -4
  143. package/dist/{e2pca-KSY4DP53.js → e2pca-JMH74VN4.js} +3 -3
  144. package/dist/{ep-4PAYGMWK.js → ep-NDT7C2IT.js} +3 -3
  145. package/dist/{expclust.gdc.spec-XXFP2HHE.js → expclust.gdc.spec-GZ3XLPHA.js} +10 -10
  146. package/dist/{facet-VCJQ7QPE.js → facet-ABIWCCVT.js} +3 -3
  147. package/dist/{forms2-IUD2SNOQ.js → forms2-DRRRLG4I.js} +5 -5
  148. package/dist/{gb-JDH242LG.js → gb-EFZ62HCR.js} +10 -10
  149. package/dist/{geneExpClustering-L23JB7XA.js → geneExpClustering-CKH6M6KK.js} +5 -5
  150. package/dist/{dnaMethylation-BWQGUXVR.js → geneExpression-CNKX7XVX.js} +4 -4
  151. package/dist/{geneExpression.unit.spec-6BQBM6VL.js → geneExpression.unit.spec-7UJB43L3.js} +4 -4
  152. package/dist/{geneORA-XIMJP665.js → geneORA-TZOSNGRJ.js} +3 -3
  153. package/dist/{geneRanking-AJH5G22J.js → geneRanking-26GDRALC.js} +3 -3
  154. package/dist/{geneVariant-H6BGRRON.js → geneVariant-2DHMJUJL.js} +3 -3
  155. package/dist/{geneVariant-AUUZ7S2B.js → geneVariant-FOKRLND3.js} +3 -3
  156. package/dist/{geneVariant.integration.spec-FRCH6VI4.js → geneVariant.integration.spec-XXNSWUOR.js} +3 -3
  157. package/dist/{genefusion.ui-AAJ37VFA.js → genefusion.ui-ZJBKC2RH.js} +3 -3
  158. package/dist/{geneset-5ARBBUYH.js → geneset-6FN5BFP3.js} +3 -3
  159. package/dist/{genomeBrowser.spec-RV7YBSMZ.js → genomeBrowser.spec-QLHJYDRZ.js} +10 -10
  160. package/dist/{grin2-RBK4NI6W.js → grin2-DR7XJIAS.js} +5 -4
  161. package/dist/grin2-DR7XJIAS.js.map +7 -0
  162. package/dist/{grin2-4MYLICII.js → grin2-QOOJBELM.js} +5 -5
  163. package/dist/{gsea-XUMCVLFK.js → gsea-6YBRMGOC.js} +4 -4
  164. package/dist/{hierCluster-PEDY7OTZ.js → hierCluster-B3TULT27.js} +10 -10
  165. package/dist/{hierCluster-HXOTNMC5.js → hierCluster-NF75B7MZ.js} +11 -11
  166. package/dist/{hierCluster.config-RKYCGNWW.js → hierCluster.config-TEFI7M4K.js} +5 -5
  167. package/dist/{hierCluster.integration.spec-YKMAT7UU.js → hierCluster.integration.spec-IUK6Q5SQ.js} +12 -12
  168. package/dist/{hierCluster.interactivity-LPTHVWHR.js → hierCluster.interactivity-MPD4AV4D.js} +4 -4
  169. package/dist/{imagePlot-3DF7ZH3U.js → imagePlot-HNJDBPO4.js} +4 -4
  170. package/dist/importPlot-OBS55TCA.js +8 -0
  171. package/dist/{isoformExpression-FU7Y4OGU.js → isoformExpression-K4QIYBZR.js} +4 -4
  172. package/dist/{isoformExpression.unit.spec-BLQDKV37.js → isoformExpression.unit.spec-INB6655U.js} +4 -4
  173. package/dist/{launch.adhoc-Y35FZV6H.js → launch.adhoc-VDXES33R.js} +6 -6
  174. package/dist/{leftlabel.sample-ERJGAYTF.js → leftlabel.sample-R6IXXFZT.js} +6 -6
  175. package/dist/{lollipop-DU37Q5E2.js → lollipop-O3XJC7BR.js} +5 -5
  176. package/dist/{maf-NRLSNDOT.js → maf-GLZ7KCDP.js} +3 -3
  177. package/dist/{maftimeline-GRXGOOSJ.js → maftimeline-Q4YPFSZP.js} +3 -3
  178. package/dist/{matrix-TCTX26A4.js → matrix-KVTQNDRZ.js} +8 -8
  179. package/dist/{matrix-G3BULZ7Y.js → matrix-QDHUX4QD.js} +8 -8
  180. package/dist/{matrix.config-QHO2YNOT.js → matrix.config-B65UXJNA.js} +4 -4
  181. package/dist/{matrix.integration.spec-Y4FCZ2Q2.js → matrix.integration.spec-2ITZRE4N.js} +10 -10
  182. package/dist/{matrix.interactivity-3DW5WAM3.js → matrix.interactivity-3RF4YOAP.js} +4 -4
  183. package/dist/{matrix.layout-W57D765I.js → matrix.layout-ERVRJAK2.js} +4 -4
  184. package/dist/{matrix.renderers-NFRKXO7Y.js → matrix.renderers-HNEUKUGS.js} +4 -4
  185. package/dist/{matrix.sort.unit.spec-5CMWEXPE.js → matrix.sort.unit.spec-QGEVGY7M.js} +4 -4
  186. package/dist/{matrix.sorterUi.unit.spec-Y2HXWHJN.js → matrix.sorterUi.unit.spec-YNS7IVUF.js} +4 -4
  187. package/dist/{mavb-BI4XKI5P.js → mavb-27VSL5LG.js} +4 -4
  188. package/dist/{mds.fimo-UJYESPNC.js → mds.fimo-E5EXGT75.js} +3 -3
  189. package/dist/{mds.samplescatterplot-JKU5B4QR.js → mds.samplescatterplot-YDMRZFS7.js} +5 -5
  190. package/dist/{mds.survivalplot-OP7Y4D3L.js → mds.survivalplot-INJA2NDC.js} +3 -3
  191. package/dist/{oncomatrix-A3IE47HV.js → oncomatrix-334LCTXB.js} +5 -5
  192. package/dist/{oncomatrix.spec-TDWB2ROF.js → oncomatrix.spec-VHCJWO7S.js} +10 -10
  193. package/dist/{plot.2dvaf-XY34TDSM.js → plot.2dvaf-F7GJEUMD.js} +3 -3
  194. package/dist/{plot.app-WRCBLYGO.js → plot.app-AKA7UVUC.js} +5 -5
  195. package/dist/{plot.barplot-RXGOUNHM.js → plot.barplot-HZAG43A5.js} +3 -3
  196. package/dist/{plot.boxplot-GBZGSS3D.js → plot.boxplot-U52BJ4EP.js} +3 -3
  197. package/dist/{plot.brainImaging-DYPKMNHL.js → plot.brainImaging-3CB4WYQ4.js} +2 -2
  198. package/dist/{plot.disco-5K2SCKJ4.js → plot.disco-I2VLOSAU.js} +2 -2
  199. package/dist/{plot.dzi-THJIFHIS.js → plot.dzi-K6KI52L7.js} +2 -2
  200. package/dist/{plot.ssgq-FSIUIV3A.js → plot.ssgq-L67X4FUG.js} +4 -4
  201. package/dist/{plot.vaf2cov-HP6KEBVJ.js → plot.vaf2cov-PH4ZSY2K.js} +3 -3
  202. package/dist/{plot.wsi-MR6JMOXW.js → plot.wsi-Y6FZWHXT.js} +2 -2
  203. package/dist/{polar2-IT3OF5DX.js → polar2-XT5QZ4VH.js} +4 -4
  204. package/dist/{profileForms-XXGJVF2T.js → profileForms-4LLSYMF6.js} +4 -4
  205. package/dist/{profilePlot-J2C35OEY.js → profilePlot-C52DDMZ4.js} +4 -4
  206. package/dist/{proteinView-7FDCILPH.js → proteinView-CCL4MPXS.js} +4 -4
  207. package/dist/{qualitative-N7S2JHZM.js → qualitative-DZ6JYYRS.js} +3 -3
  208. package/dist/{radar2-CDDOQGQX.js → radar2-GEEOQF2A.js} +4 -4
  209. package/dist/{radarFacility2-ZQTHO2ON.js → radarFacility2-OWXSKHBW.js} +4 -4
  210. package/dist/{regression-PBGAMZAV.js → regression-ZK75B4OR.js} +11 -11
  211. package/dist/{regression.inputs-54E5YKI4.js → regression.inputs-UR7Q7HIK.js} +11 -11
  212. package/dist/{regression.inputs.term-52MBTMVM.js → regression.inputs.term-PJZ7T3AI.js} +11 -11
  213. package/dist/{regression.inputs.values.table-F3FOAYFV.js → regression.inputs.values.table-CRGBKWMM.js} +9 -9
  214. package/dist/{regression.integration.spec-M4RPJUE4.js → regression.integration.spec-OCUFEVQS.js} +10 -10
  215. package/dist/{regression.results-JOK6I2ZD.js → regression.results-7EHMKQ5F.js} +4 -4
  216. package/dist/{regression.spec-O4HZB2HQ.js → regression.spec-E4W3WOLI.js} +10 -10
  217. package/dist/{report-BDDTM7SV.js → report-WWILHPI6.js} +3 -3
  218. package/dist/{sampleScatter.spec-272GLYEK.js → sampleScatter.spec-VCKCJKII.js} +10 -10
  219. package/dist/{sampleView-E6OHEEP4.js → sampleView-STGP7UUP.js} +4 -4
  220. package/dist/{samplelst-3LNF3DBG.js → samplelst-U4BL6GYP.js} +3 -3
  221. package/dist/{samplematrix-HL445X7I.js → samplematrix-FU3EZF6M.js} +5 -5
  222. package/dist/{sc-4LELHVIS.js → sc-JRLELKHN.js} +5 -5
  223. package/dist/{scatter-IZIZURQD.js → scatter-GT2VKNFG.js} +9 -9
  224. package/dist/{scatter.integration.spec-BBEWMA7M.js → scatter.integration.spec-VDMKRPVM.js} +11 -11
  225. package/dist/{selectGenomeWithTklst-5LQGT4Z7.js → selectGenomeWithTklst-F5372VC5.js} +4 -4
  226. package/dist/{singleCellCellType-T3ZT64EK.js → singleCellCellType-D77PUUCZ.js} +4 -4
  227. package/dist/{singleCellCellType.unit.spec-AE4IAHOF.js → singleCellCellType.unit.spec-J4EEZAWB.js} +4 -4
  228. package/dist/{singleCellGeneExpression-SRJXSDEB.js → singleCellGeneExpression-WCWCSHIY.js} +4 -4
  229. package/dist/{singleCellGeneExpression.unit.spec-EPL73UUO.js → singleCellGeneExpression.unit.spec-CELJIAJ5.js} +4 -4
  230. package/dist/{singleCellPlot-P2BHFTYZ.js → singleCellPlot-2OPOJZ5U.js} +5 -5
  231. package/dist/{singlecell-32SSD7VN.js → singlecell-K2SHYDHA.js} +5 -5
  232. package/dist/{singlecell-7KRD5DP7.js → singlecell-K7Z6ES7B.js} +5 -5
  233. package/dist/{snp-LE5R377N.js → snp-ICWKGR7H.js} +4 -4
  234. package/dist/{snp.unit.spec-UY6KQ5NJ.js → snp.unit.spec-PV2UZCYO.js} +4 -4
  235. package/dist/{snplocus-CP34ABUJ.js → snplocus-W5D4A7QJ.js} +3 -3
  236. package/dist/{spliceevent.a53ss.diagram-JWLWQDNJ.js → spliceevent.a53ss.diagram-DEQJ2C2H.js} +3 -3
  237. package/dist/{spliceevent.exonskip.diagram-C5526P7P.js → spliceevent.exonskip.diagram-MKA32GTK.js} +4 -4
  238. package/dist/{spliceevent.noeventdiagram-352M63YB.js → spliceevent.noeventdiagram-NFYPM4EZ.js} +3 -3
  239. package/dist/{ssGSEA-BFTCECV3.js → ssGSEA-FAZK5FSC.js} +4 -4
  240. package/dist/{ssGSEA.unit.spec-4OUCKRDQ.js → ssGSEA.unit.spec-S5D6JMOD.js} +4 -4
  241. package/dist/{summarizeCnvGeneexp-Y3AWFIZA.js → summarizeCnvGeneexp-WDGJ5YOM.js} +4 -4
  242. package/dist/{summarizeGeneexpSurvival-U5JSPG22.js → summarizeGeneexpSurvival-J7UYKBN2.js} +5 -5
  243. package/dist/{summarizeMutationCnv-KCOVQEBC.js → summarizeMutationCnv-6ZXA32XN.js} +4 -4
  244. package/dist/{summarizeMutationDiagnosis-EQXEQABW.js → summarizeMutationDiagnosis-BK7QPF6A.js} +4 -4
  245. package/dist/{summarizeMutationSurvival-4VGLG4SC.js → summarizeMutationSurvival-UODP6R6S.js} +4 -4
  246. package/dist/{summary-DXYCBNI4.js → summary-P6XVOWSB.js} +7 -7
  247. package/dist/{summary.integration.spec-MZTJISLP.js → summary.integration.spec-XKMQ77CF.js} +10 -10
  248. package/dist/{summaryInput-5Z3XVIL6.js → summaryInput-U7XNGLGC.js} +4 -4
  249. package/dist/{sunburst-WVSQJYP2.js → sunburst-WHZ77REP.js} +3 -3
  250. package/dist/{survival-3R3J2JBE.js → survival-HQ5JC76V.js} +4 -4
  251. package/dist/{survival-XQWFVGCJ.js → survival-QFWZNB4W.js} +3 -3
  252. package/dist/{survival.integration.spec-EBDPIBYM.js → survival.integration.spec-7STGYBGG.js} +107 -13
  253. package/dist/survival.integration.spec-7STGYBGG.js.map +7 -0
  254. package/dist/{svgraph-SY2HVMYL.js → svgraph-TYIBQ3RD.js} +3 -3
  255. package/dist/{svmr-TIIMFKG7.js → svmr-ZZIRWUVA.js} +6 -6
  256. package/dist/{table-5RFTXIQL.js → table-MPM3ET2V.js} +3 -3
  257. package/dist/termCollection-5DF5MFBK.js +38 -0
  258. package/dist/{termCollection-7KXABWVW.js → termCollection-CQESAD6G.js} +3 -3
  259. package/dist/{termCollection.unit.spec-4AN2Z4PQ.js → termCollection.unit.spec-ASYBZQLO.js} +4 -4
  260. package/dist/{tk-WW6PJGPQ.js → tk-NCEB2L7K.js} +6 -6
  261. package/dist/{tp.ui-S5PO3MPH.js → tp.ui-AHTGSLBN.js} +11 -11
  262. package/dist/{tvs.dt-O7LUM5TK.js → tvs.dt-TXG4FL3B.js} +3 -3
  263. package/dist/{tvs.dtcnv.categorical-2OUFOD3W.js → tvs.dtcnv.categorical-7SA4PCKE.js} +3 -3
  264. package/dist/{tvs.dtcnv.continuous-NOOUY5SZ.js → tvs.dtcnv.continuous-E3VQWM5N.js} +3 -3
  265. package/dist/{tvs.dtfusion-KXQMP3UF.js → tvs.dtfusion-F72VEUPO.js} +3 -3
  266. package/dist/{tvs.dtsnvindel-PWHFTWZU.js → tvs.dtsnvindel-RAVTRO5M.js} +3 -3
  267. package/dist/{tvs.dtsv-25FLS572.js → tvs.dtsv-ZZDBZYAJ.js} +3 -3
  268. package/dist/{tvs.samplelst-FLXNJFIV.js → tvs.samplelst-POTNAX4E.js} +3 -3
  269. package/dist/{tvs.termCollection-PSVOMJE4.js → tvs.termCollection-AHNHKJPJ.js} +3 -3
  270. package/dist/{violin-SWMEFWRA.js → violin-YR35XLAS.js} +6 -6
  271. package/dist/{violin.integration.spec-6EQ6GC2N.js → violin.integration.spec-2VSILDUW.js} +11 -11
  272. package/dist/{violin.interactivity-WBIWPLSM.js → violin.interactivity-S7QY6HVJ.js} +4 -4
  273. package/dist/{violin.renderer-3WARZUOH.js → violin.renderer-OUWK7EL4.js} +4 -4
  274. package/dist/{vocabulary-WLHYHDX7.js → vocabulary-6IZJ6F7N.js} +3 -3
  275. package/package.json +8 -2
  276. package/dist/GB-MUPI6RL5.js.map +0 -7
  277. package/dist/chunk-4AP3O3JW.js.map +0 -7
  278. package/dist/chunk-SDMOLIEU.js.map +0 -7
  279. package/dist/chunk-Y45JIQ5Y.js.map +0 -7
  280. package/dist/grin2-RBK4NI6W.js.map +0 -7
  281. package/dist/importPlot-N74SV3TL.js +0 -8
  282. package/dist/survival.integration.spec-EBDPIBYM.js.map +0 -7
  283. package/dist/termCollection-23QXTZDN.js +0 -38
  284. /package/dist/{2dmaf-US2ZAJJJ.js.map → 2dmaf-HS37GJYM.js.map} +0 -0
  285. /package/dist/{AIProjectAdmin-QQO2PNAJ.js.map → AIProjectAdmin-V5NVBBOA.js.map} +0 -0
  286. /package/dist/{AppHeader-UKB344GC.js.map → AppHeader-VIQ2VZPI.js.map} +0 -0
  287. /package/dist/{BoxPlot-JEBLRKBY.js.map → BoxPlot-J7DPHT2N.js.map} +0 -0
  288. /package/dist/{CorrelationVolcano-J3IFVSZB.js.map → CorrelationVolcano-ZHP7IPFD.js.map} +0 -0
  289. /package/dist/{DE-PAPJP6AH.js.map → DE-VW4MQHYP.js.map} +0 -0
  290. /package/dist/{DEinput-YON466QQ.js.map → DEinput-2EKXGUP3.js.map} +0 -0
  291. /package/dist/{DifferentialAnalysis-DEUODXGG.js.map → DifferentialAnalysis-H7LZWEIL.js.map} +0 -0
  292. /package/dist/{Disco-OZM4S7HF.js.map → Disco-5AA67AO5.js.map} +0 -0
  293. /package/dist/{Disco.UI-VIHYJGYU.js.map → Disco.UI-K4RBVRJP.js.map} +0 -0
  294. /package/dist/{DmrPlot-DSELMC4E.js.map → DmrPlot-RVJUKBOB.js.map} +0 -0
  295. /package/dist/{GeneExpInput-3AQEPTFZ.js.map → GeneExpInput-HHOIK6X7.js.map} +0 -0
  296. /package/dist/{HicApp-BP7PSXY2.js.map → HicApp-YTQNK5DC.js.map} +0 -0
  297. /package/dist/{NumBinaryEditor-CHWQT445.js.map → NumBinaryEditor-ICZCNBRL.js.map} +0 -0
  298. /package/dist/{NumBinaryEditor.unit.spec-MXRNK7XH.js.map → NumBinaryEditor.unit.spec-WDJPDAVT.js.map} +0 -0
  299. /package/dist/{NumContEditor-XS3RA7GY.js.map → NumContEditor-5KEM54CE.js.map} +0 -0
  300. /package/dist/{NumContEditor.unit.spec-662MHSP4.js.map → NumContEditor.unit.spec-WG5QKOD3.js.map} +0 -0
  301. /package/dist/{NumCustomBinEditor-LUVIAXMZ.js.map → NumCustomBinEditor-MGHR7VQT.js.map} +0 -0
  302. /package/dist/{NumCustomBinEditor.unit.spec-3D3GY3F4.js.map → NumCustomBinEditor.unit.spec-JWSHEIJJ.js.map} +0 -0
  303. /package/dist/{NumDiscreteEditor-24W2A5IN.js.map → NumDiscreteEditor-XT2GSGUR.js.map} +0 -0
  304. /package/dist/{NumDiscreteEditor.unit.spec-B5T42Z5S.js.map → NumDiscreteEditor.unit.spec-DSCWGYBS.js.map} +0 -0
  305. /package/dist/{NumRegularBinEditor-AING4HZ5.js.map → NumRegularBinEditor-JMDBM5PU.js.map} +0 -0
  306. /package/dist/{NumRegularBinEditor.unit.spec-UKSVZH2S.js.map → NumRegularBinEditor.unit.spec-BWRP6OO2.js.map} +0 -0
  307. /package/dist/{NumSplineEditor-54KNKHJX.js.map → NumSplineEditor-QJNRSORC.js.map} +0 -0
  308. /package/dist/{NumSplineEditor.unit.spec-5FTST3Y5.js.map → NumSplineEditor.unit.spec-CXBTVND4.js.map} +0 -0
  309. /package/dist/{NumericDensity-C7DQZ5Q5.js.map → NumericDensity-XQWCBSGT.js.map} +0 -0
  310. /package/dist/{NumericDensity.unit.spec-HV6SD3ZS.js.map → NumericDensity.unit.spec-7JS5R3AZ.js.map} +0 -0
  311. /package/dist/{NumericHandler-FV3L23EC.js.map → NumericHandler-QXXBEJC3.js.map} +0 -0
  312. /package/dist/{NumericHandler.unit.spec-E72DXVBB.js.map → NumericHandler.unit.spec-SRQJQVPP.js.map} +0 -0
  313. /package/dist/{ProteomeInput-3XTK74SN.js.map → ProteomeInput-E4MJLAKF.js.map} +0 -0
  314. /package/dist/{RunChart2-X5FBZVRX.js.map → RunChart2-N6S7HBXV.js.map} +0 -0
  315. /package/dist/{SC-WE5DG2CQ.js.map → SC-RQ32A4YB.js.map} +0 -0
  316. /package/dist/{Volcano-2USCTLKO.js.map → Volcano-OHJPYZQE.js.map} +0 -0
  317. /package/dist/{WSIViewer-U6VSJUFF.js.map → WSIViewer-SAKVU52Z.js.map} +0 -0
  318. /package/dist/{WsiSamplesPlot-VIKSG63U.js.map → WsiSamplesPlot-QV5GFFCR.js.map} +0 -0
  319. /package/dist/{adSandbox-VXUJGPD3.js.map → adSandbox-IE7TOJUE.js.map} +0 -0
  320. /package/dist/{animatedBubbleChart-4P7XLKSB.js.map → animatedBubbleChart-ZNEDQND3.js.map} +0 -0
  321. /package/dist/{app-KHZT2BVF.js.map → app-7MRKEE2J.js.map} +0 -0
  322. /package/dist/{app-XLYH3YPL.js.map → app-QIBNB4AA.js.map} +0 -0
  323. /package/dist/{bam-C23ZARYE.js.map → bam-OBS5ULFF.js.map} +0 -0
  324. /package/dist/{barchart-KGXLYEIP.js.map → barchart-2RVEEMPK.js.map} +0 -0
  325. /package/dist/{barchart.events-3KDNIFBG.js.map → barchart.events-AASSQL3J.js.map} +0 -0
  326. /package/dist/{barchart.integration.spec-OQYY54AQ.js.map → barchart.integration.spec-UU2ARJS5.js.map} +0 -0
  327. /package/dist/{barchart2-AT5FXOUY.js.map → barchart2-TUBYGLMC.js.map} +0 -0
  328. /package/dist/{block-TCWYUB4R.js.map → block-BYXWS7H7.js.map} +0 -0
  329. /package/dist/{block.init-7FHXQJNE.js.map → block.init-QOAPDKCC.js.map} +0 -0
  330. /package/dist/{block.mds.expressionrank-UGZQK7Z3.js.map → block.mds.expressionrank-Q46AAYOA.js.map} +0 -0
  331. /package/dist/{block.mds.geneboxplot-2CQLB4YN.js.map → block.mds.geneboxplot-IC26RT7L.js.map} +0 -0
  332. /package/dist/{block.mds.junction-JHPHWVOS.js.map → block.mds.junction-RIUZIBFB.js.map} +0 -0
  333. /package/dist/{block.mds.svcnv-E7P2SVKK.js.map → block.mds.svcnv-GUB2TTXQ.js.map} +0 -0
  334. /package/dist/{block.svg-MVRR3C6V.js.map → block.svg-I4NHMOEJ.js.map} +0 -0
  335. /package/dist/{block.tk.aicheck-KX46G4TR.js.map → block.tk.aicheck-X57EGAOB.js.map} +0 -0
  336. /package/dist/{block.tk.ase-WMXI47BF.js.map → block.tk.ase-JMBKBZAH.js.map} +0 -0
  337. /package/dist/{block.tk.bam-KFEGVEQQ.js.map → block.tk.bam-6UAEWVVD.js.map} +0 -0
  338. /package/dist/{block.tk.bedgraphdot-P4DBCWFK.js.map → block.tk.bedgraphdot-7QSRLAJ7.js.map} +0 -0
  339. /package/dist/{block.tk.bigwig.ui-WJPH2Z7F.js.map → block.tk.bigwig.ui-SBD6S5SA.js.map} +0 -0
  340. /package/dist/{block.tk.hicstraw-RSD6I2NX.js.map → block.tk.hicstraw-LIGPTMX7.js.map} +0 -0
  341. /package/dist/{block.tk.junction-VZS2DEDO.js.map → block.tk.junction-X6HFXKW7.js.map} +0 -0
  342. /package/dist/{block.tk.junction.textmatrixui-UCWGHZDI.js.map → block.tk.junction.textmatrixui-XJIUGHAX.js.map} +0 -0
  343. /package/dist/{block.tk.ld-ERSIIBM2.js.map → block.tk.ld-OZVW7LSL.js.map} +0 -0
  344. /package/dist/{block.tk.menu-2ZNXE7CE.js.map → block.tk.menu-B2CEZAYR.js.map} +0 -0
  345. /package/dist/{block.tk.pgv-EJLACCFR.js.map → block.tk.pgv-XAAQBQQE.js.map} +0 -0
  346. /package/dist/{brainImaging-BMZJY6OT.js.map → brainImaging-KFKM3XWD.js.map} +0 -0
  347. /package/dist/{brainRegions-RZEBXPAS.js.map → brainRegions-ZHKXILK7.js.map} +0 -0
  348. /package/dist/{bubbleHeatmap-ERJFMLPK.js.map → bubbleHeatmap-75N23URG.js.map} +0 -0
  349. /package/dist/{chunk-JEZUPG4J.js.map → chunk-2IITC4V5.js.map} +0 -0
  350. /package/dist/{chunk-PXCFA4ZQ.js.map → chunk-2P3U6XTF.js.map} +0 -0
  351. /package/dist/{chunk-KNOFEVOJ.js.map → chunk-35UCHCOQ.js.map} +0 -0
  352. /package/dist/{chunk-OR43PGBV.js.map → chunk-4E6HJ4ZW.js.map} +0 -0
  353. /package/dist/{chunk-QSEGY3U5.js.map → chunk-57LW6RUM.js.map} +0 -0
  354. /package/dist/{chunk-CLN7ANNL.js.map → chunk-5DHRDF2Y.js.map} +0 -0
  355. /package/dist/{chunk-4JWN7E7Q.js.map → chunk-5POMWXDZ.js.map} +0 -0
  356. /package/dist/{chunk-LLX3NKB4.js.map → chunk-67QZRGIJ.js.map} +0 -0
  357. /package/dist/{chunk-N25ENPO3.js.map → chunk-6RKL2FLA.js.map} +0 -0
  358. /package/dist/{chunk-FXGE233W.js.map → chunk-6YJCBK4J.js.map} +0 -0
  359. /package/dist/{chunk-UXDVUCXU.js.map → chunk-7K6LTROG.js.map} +0 -0
  360. /package/dist/{chunk-N3JT3KCV.js.map → chunk-ADAKSWID.js.map} +0 -0
  361. /package/dist/{chunk-GVCQGWN7.js.map → chunk-ANKGIHCM.js.map} +0 -0
  362. /package/dist/{chunk-GBXX3AHJ.js.map → chunk-AUP7W7MK.js.map} +0 -0
  363. /package/dist/{chunk-B6U3EDAF.js.map → chunk-AXKUVSXP.js.map} +0 -0
  364. /package/dist/{chunk-455XZIIA.js.map → chunk-B4QM73WG.js.map} +0 -0
  365. /package/dist/{chunk-E6XLLQCG.js.map → chunk-BKPV67UA.js.map} +0 -0
  366. /package/dist/{chunk-XVXAQ3FI.js.map → chunk-CD3VY5WW.js.map} +0 -0
  367. /package/dist/{chunk-6SCBPP4C.js.map → chunk-F47X3VUC.js.map} +0 -0
  368. /package/dist/{chunk-HXZSSHEB.js.map → chunk-G2DLWJCB.js.map} +0 -0
  369. /package/dist/{chunk-CLNSNNQU.js.map → chunk-I4G4FXLO.js.map} +0 -0
  370. /package/dist/{chunk-K3OJJZCQ.js.map → chunk-INU357UG.js.map} +0 -0
  371. /package/dist/{chunk-NU2W6B7I.js.map → chunk-IZ3BPOTQ.js.map} +0 -0
  372. /package/dist/{chunk-VRLC7DAU.js.map → chunk-J5GTIQTL.js.map} +0 -0
  373. /package/dist/{chunk-74XVBQF7.js.map → chunk-JBI6P3UX.js.map} +0 -0
  374. /package/dist/{chunk-HXNUQOGN.js.map → chunk-JRDHTECQ.js.map} +0 -0
  375. /package/dist/{chunk-NJDW6ZQP.js.map → chunk-JRZZ6GN3.js.map} +0 -0
  376. /package/dist/{chunk-55MOHL3P.js.map → chunk-KXRTPE65.js.map} +0 -0
  377. /package/dist/{chunk-73R5BVCY.js.map → chunk-LHNKTWFL.js.map} +0 -0
  378. /package/dist/{chunk-DBFKUPM6.js.map → chunk-O4VKIC66.js.map} +0 -0
  379. /package/dist/{chunk-474DTKP7.js.map → chunk-OWPBE2LB.js.map} +0 -0
  380. /package/dist/{chunk-FABY3ISP.js.map → chunk-QFSSC5VW.js.map} +0 -0
  381. /package/dist/{chunk-FOPHIWFD.js.map → chunk-T4CFXTIG.js.map} +0 -0
  382. /package/dist/{chunk-YQMENK5H.js.map → chunk-T5UGVJCK.js.map} +0 -0
  383. /package/dist/{chunk-EY253UB7.js.map → chunk-TJCRAFKM.js.map} +0 -0
  384. /package/dist/{chunk-JWHFMFF2.js.map → chunk-TNF2LHJR.js.map} +0 -0
  385. /package/dist/{chunk-SC6IPDJR.js.map → chunk-U4IYNHVD.js.map} +0 -0
  386. /package/dist/{chunk-BOO4W7WD.js.map → chunk-UAOPKEMR.js.map} +0 -0
  387. /package/dist/{chunk-IKDWQJZE.js.map → chunk-UFGV7554.js.map} +0 -0
  388. /package/dist/{chunk-5TJQ6633.js.map → chunk-UV66X5JN.js.map} +0 -0
  389. /package/dist/{chunk-27FPMFP2.js.map → chunk-VC642GDC.js.map} +0 -0
  390. /package/dist/{chunk-ATUYZWHV.js.map → chunk-VNF7DC36.js.map} +0 -0
  391. /package/dist/{chunk-BO47H3VP.js.map → chunk-VOGPIAQL.js.map} +0 -0
  392. /package/dist/{chunk-7I3LST7R.js.map → chunk-VZOTKHPM.js.map} +0 -0
  393. /package/dist/{chunk-6YVEYTNH.js.map → chunk-YAU2Z6EN.js.map} +0 -0
  394. /package/dist/{chunk-EDXQKDVQ.js.map → chunk-YNAPHPMG.js.map} +0 -0
  395. /package/dist/{chunk-ZUC4XNWU.js.map → chunk-YP2LHXFC.js.map} +0 -0
  396. /package/dist/{chunk-UDL2DEBB.js.map → chunk-YWF7GHUW.js.map} +0 -0
  397. /package/dist/{chunk-MQJVDIQK.js.map → chunk-YYZQMJLW.js.map} +0 -0
  398. /package/dist/{chunk-FVX76DZS.js.map → chunk-ZBEJVZMY.js.map} +0 -0
  399. /package/dist/{chunk-XQSQQSGB.js.map → chunk-ZZLBK6P6.js.map} +0 -0
  400. /package/dist/{condition-ZPFBPMEZ.js.map → condition-MP65K762.js.map} +0 -0
  401. /package/dist/{controls-LIVMV2GV.js.map → controls-HKHMEWC7.js.map} +0 -0
  402. /package/dist/{controls.config-2EOMBN5E.js.map → controls.config-LUPIT34L.js.map} +0 -0
  403. /package/dist/{correlation-D6GAPOP5.js.map → correlation-5UTW6EEI.js.map} +0 -0
  404. /package/dist/{cuminc-GPFDRNUP.js.map → cuminc-LLUR2FLL.js.map} +0 -0
  405. /package/dist/{cuminc.integration.spec-V4JYKLA6.js.map → cuminc.integration.spec-CH5UZTIM.js.map} +0 -0
  406. /package/dist/{customdata.inputui-DSEUS3CT.js.map → customdata.inputui-6IGE5HCZ.js.map} +0 -0
  407. /package/dist/{dataDownload-KT6K3M7Q.js.map → dataDownload-MCE2OJGZ.js.map} +0 -0
  408. /package/dist/{dataDownload.integration.spec-VEX2RTSA.js.map → dataDownload.integration.spec-VETU75VQ.js.map} +0 -0
  409. /package/dist/{databrowser.ui-VJKNMIXA.js.map → databrowser.ui-3BRSJHIW.js.map} +0 -0
  410. /package/dist/{dictionary-B27BMR5H.js.map → dictionary-UV43XQAU.js.map} +0 -0
  411. /package/dist/{dnaMethylation-BWQGUXVR.js.map → dnaMethylation-QDE3S4TV.js.map} +0 -0
  412. /package/dist/{dnaMethylation.integration.spec-YMGT2HYZ.js.map → dnaMethylation.integration.spec-JBHJE47S.js.map} +0 -0
  413. /package/dist/{e2pca-KSY4DP53.js.map → e2pca-JMH74VN4.js.map} +0 -0
  414. /package/dist/{ep-4PAYGMWK.js.map → ep-NDT7C2IT.js.map} +0 -0
  415. /package/dist/{expclust.gdc.spec-XXFP2HHE.js.map → expclust.gdc.spec-GZ3XLPHA.js.map} +0 -0
  416. /package/dist/{facet-VCJQ7QPE.js.map → facet-ABIWCCVT.js.map} +0 -0
  417. /package/dist/{forms2-IUD2SNOQ.js.map → forms2-DRRRLG4I.js.map} +0 -0
  418. /package/dist/{gb-JDH242LG.js.map → gb-EFZ62HCR.js.map} +0 -0
  419. /package/dist/{geneExpClustering-L23JB7XA.js.map → geneExpClustering-CKH6M6KK.js.map} +0 -0
  420. /package/dist/{geneExpression-QGPVFAN4.js.map → geneExpression-CNKX7XVX.js.map} +0 -0
  421. /package/dist/{geneExpression.unit.spec-6BQBM6VL.js.map → geneExpression.unit.spec-7UJB43L3.js.map} +0 -0
  422. /package/dist/{geneORA-XIMJP665.js.map → geneORA-TZOSNGRJ.js.map} +0 -0
  423. /package/dist/{geneRanking-AJH5G22J.js.map → geneRanking-26GDRALC.js.map} +0 -0
  424. /package/dist/{geneVariant-AUUZ7S2B.js.map → geneVariant-2DHMJUJL.js.map} +0 -0
  425. /package/dist/{geneVariant-H6BGRRON.js.map → geneVariant-FOKRLND3.js.map} +0 -0
  426. /package/dist/{geneVariant.integration.spec-FRCH6VI4.js.map → geneVariant.integration.spec-XXNSWUOR.js.map} +0 -0
  427. /package/dist/{genefusion.ui-AAJ37VFA.js.map → genefusion.ui-ZJBKC2RH.js.map} +0 -0
  428. /package/dist/{geneset-5ARBBUYH.js.map → geneset-6FN5BFP3.js.map} +0 -0
  429. /package/dist/{genomeBrowser.spec-RV7YBSMZ.js.map → genomeBrowser.spec-QLHJYDRZ.js.map} +0 -0
  430. /package/dist/{grin2-4MYLICII.js.map → grin2-QOOJBELM.js.map} +0 -0
  431. /package/dist/{gsea-XUMCVLFK.js.map → gsea-6YBRMGOC.js.map} +0 -0
  432. /package/dist/{hierCluster-HXOTNMC5.js.map → hierCluster-B3TULT27.js.map} +0 -0
  433. /package/dist/{hierCluster-PEDY7OTZ.js.map → hierCluster-NF75B7MZ.js.map} +0 -0
  434. /package/dist/{hierCluster.config-RKYCGNWW.js.map → hierCluster.config-TEFI7M4K.js.map} +0 -0
  435. /package/dist/{hierCluster.integration.spec-YKMAT7UU.js.map → hierCluster.integration.spec-IUK6Q5SQ.js.map} +0 -0
  436. /package/dist/{hierCluster.interactivity-LPTHVWHR.js.map → hierCluster.interactivity-MPD4AV4D.js.map} +0 -0
  437. /package/dist/{imagePlot-3DF7ZH3U.js.map → imagePlot-HNJDBPO4.js.map} +0 -0
  438. /package/dist/{importPlot-N74SV3TL.js.map → importPlot-OBS55TCA.js.map} +0 -0
  439. /package/dist/{isoformExpression-FU7Y4OGU.js.map → isoformExpression-K4QIYBZR.js.map} +0 -0
  440. /package/dist/{isoformExpression.unit.spec-BLQDKV37.js.map → isoformExpression.unit.spec-INB6655U.js.map} +0 -0
  441. /package/dist/{launch.adhoc-Y35FZV6H.js.map → launch.adhoc-VDXES33R.js.map} +0 -0
  442. /package/dist/{leftlabel.sample-ERJGAYTF.js.map → leftlabel.sample-R6IXXFZT.js.map} +0 -0
  443. /package/dist/{lollipop-DU37Q5E2.js.map → lollipop-O3XJC7BR.js.map} +0 -0
  444. /package/dist/{maf-NRLSNDOT.js.map → maf-GLZ7KCDP.js.map} +0 -0
  445. /package/dist/{maftimeline-GRXGOOSJ.js.map → maftimeline-Q4YPFSZP.js.map} +0 -0
  446. /package/dist/{matrix-G3BULZ7Y.js.map → matrix-KVTQNDRZ.js.map} +0 -0
  447. /package/dist/{matrix-TCTX26A4.js.map → matrix-QDHUX4QD.js.map} +0 -0
  448. /package/dist/{matrix.config-QHO2YNOT.js.map → matrix.config-B65UXJNA.js.map} +0 -0
  449. /package/dist/{matrix.integration.spec-Y4FCZ2Q2.js.map → matrix.integration.spec-2ITZRE4N.js.map} +0 -0
  450. /package/dist/{matrix.interactivity-3DW5WAM3.js.map → matrix.interactivity-3RF4YOAP.js.map} +0 -0
  451. /package/dist/{matrix.layout-W57D765I.js.map → matrix.layout-ERVRJAK2.js.map} +0 -0
  452. /package/dist/{matrix.renderers-NFRKXO7Y.js.map → matrix.renderers-HNEUKUGS.js.map} +0 -0
  453. /package/dist/{matrix.sort.unit.spec-5CMWEXPE.js.map → matrix.sort.unit.spec-QGEVGY7M.js.map} +0 -0
  454. /package/dist/{matrix.sorterUi.unit.spec-Y2HXWHJN.js.map → matrix.sorterUi.unit.spec-YNS7IVUF.js.map} +0 -0
  455. /package/dist/{mavb-BI4XKI5P.js.map → mavb-27VSL5LG.js.map} +0 -0
  456. /package/dist/{mds.fimo-UJYESPNC.js.map → mds.fimo-E5EXGT75.js.map} +0 -0
  457. /package/dist/{mds.samplescatterplot-JKU5B4QR.js.map → mds.samplescatterplot-YDMRZFS7.js.map} +0 -0
  458. /package/dist/{mds.survivalplot-OP7Y4D3L.js.map → mds.survivalplot-INJA2NDC.js.map} +0 -0
  459. /package/dist/{oncomatrix-A3IE47HV.js.map → oncomatrix-334LCTXB.js.map} +0 -0
  460. /package/dist/{oncomatrix.spec-TDWB2ROF.js.map → oncomatrix.spec-VHCJWO7S.js.map} +0 -0
  461. /package/dist/{plot.2dvaf-XY34TDSM.js.map → plot.2dvaf-F7GJEUMD.js.map} +0 -0
  462. /package/dist/{plot.app-WRCBLYGO.js.map → plot.app-AKA7UVUC.js.map} +0 -0
  463. /package/dist/{plot.barplot-RXGOUNHM.js.map → plot.barplot-HZAG43A5.js.map} +0 -0
  464. /package/dist/{plot.boxplot-GBZGSS3D.js.map → plot.boxplot-U52BJ4EP.js.map} +0 -0
  465. /package/dist/{plot.brainImaging-DYPKMNHL.js.map → plot.brainImaging-3CB4WYQ4.js.map} +0 -0
  466. /package/dist/{plot.disco-5K2SCKJ4.js.map → plot.disco-I2VLOSAU.js.map} +0 -0
  467. /package/dist/{plot.dzi-THJIFHIS.js.map → plot.dzi-K6KI52L7.js.map} +0 -0
  468. /package/dist/{plot.ssgq-FSIUIV3A.js.map → plot.ssgq-L67X4FUG.js.map} +0 -0
  469. /package/dist/{plot.vaf2cov-HP6KEBVJ.js.map → plot.vaf2cov-PH4ZSY2K.js.map} +0 -0
  470. /package/dist/{plot.wsi-MR6JMOXW.js.map → plot.wsi-Y6FZWHXT.js.map} +0 -0
  471. /package/dist/{polar2-IT3OF5DX.js.map → polar2-XT5QZ4VH.js.map} +0 -0
  472. /package/dist/{profileForms-XXGJVF2T.js.map → profileForms-4LLSYMF6.js.map} +0 -0
  473. /package/dist/{profilePlot-J2C35OEY.js.map → profilePlot-C52DDMZ4.js.map} +0 -0
  474. /package/dist/{proteinView-7FDCILPH.js.map → proteinView-CCL4MPXS.js.map} +0 -0
  475. /package/dist/{qualitative-N7S2JHZM.js.map → qualitative-DZ6JYYRS.js.map} +0 -0
  476. /package/dist/{radar2-CDDOQGQX.js.map → radar2-GEEOQF2A.js.map} +0 -0
  477. /package/dist/{radarFacility2-ZQTHO2ON.js.map → radarFacility2-OWXSKHBW.js.map} +0 -0
  478. /package/dist/{regression-PBGAMZAV.js.map → regression-ZK75B4OR.js.map} +0 -0
  479. /package/dist/{regression.inputs-54E5YKI4.js.map → regression.inputs-UR7Q7HIK.js.map} +0 -0
  480. /package/dist/{regression.inputs.term-52MBTMVM.js.map → regression.inputs.term-PJZ7T3AI.js.map} +0 -0
  481. /package/dist/{regression.inputs.values.table-F3FOAYFV.js.map → regression.inputs.values.table-CRGBKWMM.js.map} +0 -0
  482. /package/dist/{regression.integration.spec-M4RPJUE4.js.map → regression.integration.spec-OCUFEVQS.js.map} +0 -0
  483. /package/dist/{regression.results-JOK6I2ZD.js.map → regression.results-7EHMKQ5F.js.map} +0 -0
  484. /package/dist/{regression.spec-O4HZB2HQ.js.map → regression.spec-E4W3WOLI.js.map} +0 -0
  485. /package/dist/{report-BDDTM7SV.js.map → report-WWILHPI6.js.map} +0 -0
  486. /package/dist/{sampleScatter.spec-272GLYEK.js.map → sampleScatter.spec-VCKCJKII.js.map} +0 -0
  487. /package/dist/{sampleView-E6OHEEP4.js.map → sampleView-STGP7UUP.js.map} +0 -0
  488. /package/dist/{samplelst-3LNF3DBG.js.map → samplelst-U4BL6GYP.js.map} +0 -0
  489. /package/dist/{samplematrix-HL445X7I.js.map → samplematrix-FU3EZF6M.js.map} +0 -0
  490. /package/dist/{sc-4LELHVIS.js.map → sc-JRLELKHN.js.map} +0 -0
  491. /package/dist/{scatter-IZIZURQD.js.map → scatter-GT2VKNFG.js.map} +0 -0
  492. /package/dist/{scatter.integration.spec-BBEWMA7M.js.map → scatter.integration.spec-VDMKRPVM.js.map} +0 -0
  493. /package/dist/{selectGenomeWithTklst-5LQGT4Z7.js.map → selectGenomeWithTklst-F5372VC5.js.map} +0 -0
  494. /package/dist/{singleCellCellType-T3ZT64EK.js.map → singleCellCellType-D77PUUCZ.js.map} +0 -0
  495. /package/dist/{singleCellCellType.unit.spec-AE4IAHOF.js.map → singleCellCellType.unit.spec-J4EEZAWB.js.map} +0 -0
  496. /package/dist/{singleCellGeneExpression-SRJXSDEB.js.map → singleCellGeneExpression-WCWCSHIY.js.map} +0 -0
  497. /package/dist/{singleCellGeneExpression.unit.spec-EPL73UUO.js.map → singleCellGeneExpression.unit.spec-CELJIAJ5.js.map} +0 -0
  498. /package/dist/{singleCellPlot-P2BHFTYZ.js.map → singleCellPlot-2OPOJZ5U.js.map} +0 -0
  499. /package/dist/{singlecell-32SSD7VN.js.map → singlecell-K2SHYDHA.js.map} +0 -0
  500. /package/dist/{singlecell-7KRD5DP7.js.map → singlecell-K7Z6ES7B.js.map} +0 -0
  501. /package/dist/{snp-LE5R377N.js.map → snp-ICWKGR7H.js.map} +0 -0
  502. /package/dist/{snp.unit.spec-UY6KQ5NJ.js.map → snp.unit.spec-PV2UZCYO.js.map} +0 -0
  503. /package/dist/{snplocus-CP34ABUJ.js.map → snplocus-W5D4A7QJ.js.map} +0 -0
  504. /package/dist/{spliceevent.a53ss.diagram-JWLWQDNJ.js.map → spliceevent.a53ss.diagram-DEQJ2C2H.js.map} +0 -0
  505. /package/dist/{spliceevent.exonskip.diagram-C5526P7P.js.map → spliceevent.exonskip.diagram-MKA32GTK.js.map} +0 -0
  506. /package/dist/{spliceevent.noeventdiagram-352M63YB.js.map → spliceevent.noeventdiagram-NFYPM4EZ.js.map} +0 -0
  507. /package/dist/{ssGSEA-BFTCECV3.js.map → ssGSEA-FAZK5FSC.js.map} +0 -0
  508. /package/dist/{ssGSEA.unit.spec-4OUCKRDQ.js.map → ssGSEA.unit.spec-S5D6JMOD.js.map} +0 -0
  509. /package/dist/{summarizeCnvGeneexp-Y3AWFIZA.js.map → summarizeCnvGeneexp-WDGJ5YOM.js.map} +0 -0
  510. /package/dist/{summarizeGeneexpSurvival-U5JSPG22.js.map → summarizeGeneexpSurvival-J7UYKBN2.js.map} +0 -0
  511. /package/dist/{summarizeMutationCnv-KCOVQEBC.js.map → summarizeMutationCnv-6ZXA32XN.js.map} +0 -0
  512. /package/dist/{summarizeMutationDiagnosis-EQXEQABW.js.map → summarizeMutationDiagnosis-BK7QPF6A.js.map} +0 -0
  513. /package/dist/{summarizeMutationSurvival-4VGLG4SC.js.map → summarizeMutationSurvival-UODP6R6S.js.map} +0 -0
  514. /package/dist/{summary-DXYCBNI4.js.map → summary-P6XVOWSB.js.map} +0 -0
  515. /package/dist/{summary.integration.spec-MZTJISLP.js.map → summary.integration.spec-XKMQ77CF.js.map} +0 -0
  516. /package/dist/{summaryInput-5Z3XVIL6.js.map → summaryInput-U7XNGLGC.js.map} +0 -0
  517. /package/dist/{sunburst-WVSQJYP2.js.map → sunburst-WHZ77REP.js.map} +0 -0
  518. /package/dist/{survival-3R3J2JBE.js.map → survival-HQ5JC76V.js.map} +0 -0
  519. /package/dist/{survival-XQWFVGCJ.js.map → survival-QFWZNB4W.js.map} +0 -0
  520. /package/dist/{svgraph-SY2HVMYL.js.map → svgraph-TYIBQ3RD.js.map} +0 -0
  521. /package/dist/{svmr-TIIMFKG7.js.map → svmr-ZZIRWUVA.js.map} +0 -0
  522. /package/dist/{table-5RFTXIQL.js.map → table-MPM3ET2V.js.map} +0 -0
  523. /package/dist/{termCollection-23QXTZDN.js.map → termCollection-5DF5MFBK.js.map} +0 -0
  524. /package/dist/{termCollection-7KXABWVW.js.map → termCollection-CQESAD6G.js.map} +0 -0
  525. /package/dist/{termCollection.unit.spec-4AN2Z4PQ.js.map → termCollection.unit.spec-ASYBZQLO.js.map} +0 -0
  526. /package/dist/{tk-WW6PJGPQ.js.map → tk-NCEB2L7K.js.map} +0 -0
  527. /package/dist/{tp.ui-S5PO3MPH.js.map → tp.ui-AHTGSLBN.js.map} +0 -0
  528. /package/dist/{tvs.dt-O7LUM5TK.js.map → tvs.dt-TXG4FL3B.js.map} +0 -0
  529. /package/dist/{tvs.dtcnv.categorical-2OUFOD3W.js.map → tvs.dtcnv.categorical-7SA4PCKE.js.map} +0 -0
  530. /package/dist/{tvs.dtcnv.continuous-NOOUY5SZ.js.map → tvs.dtcnv.continuous-E3VQWM5N.js.map} +0 -0
  531. /package/dist/{tvs.dtfusion-KXQMP3UF.js.map → tvs.dtfusion-F72VEUPO.js.map} +0 -0
  532. /package/dist/{tvs.dtsnvindel-PWHFTWZU.js.map → tvs.dtsnvindel-RAVTRO5M.js.map} +0 -0
  533. /package/dist/{tvs.dtsv-25FLS572.js.map → tvs.dtsv-ZZDBZYAJ.js.map} +0 -0
  534. /package/dist/{tvs.samplelst-FLXNJFIV.js.map → tvs.samplelst-POTNAX4E.js.map} +0 -0
  535. /package/dist/{tvs.termCollection-PSVOMJE4.js.map → tvs.termCollection-AHNHKJPJ.js.map} +0 -0
  536. /package/dist/{violin-SWMEFWRA.js.map → violin-YR35XLAS.js.map} +0 -0
  537. /package/dist/{violin.integration.spec-6EQ6GC2N.js.map → violin.integration.spec-2VSILDUW.js.map} +0 -0
  538. /package/dist/{violin.interactivity-WBIWPLSM.js.map → violin.interactivity-S7QY6HVJ.js.map} +0 -0
  539. /package/dist/{violin.renderer-3WARZUOH.js.map → violin.renderer-OUWK7EL4.js.map} +0 -0
  540. /package/dist/{vocabulary-WLHYHDX7.js.map → vocabulary-6IZJ6F7N.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../plots/survival/survival.ts"],
4
- "sourcesContent": ["import { getCompInit, copyMerge, type RxComponent, type ComponentApi } from '#rx'\nimport { PlotBase, defaultUiLabels } from '#plots/PlotBase.ts'\nimport { controlsInit, term0_term2_defaultQ } from '#plots/controls.js'\nimport { select } from 'd3-selection'\nimport { scaleLinear, scaleOrdinal } from 'd3-scale'\nimport { schemeCategory10 } from 'd3-scale-chromatic'\nimport { schemeCategory20 } from '#common/legacy-d3-polyfill'\nimport { axisLeft, axisBottom } from 'd3-axis'\nimport { line, area, curveStepAfter } from 'd3-shape'\nimport { rgb } from 'd3-color'\nimport htmlLegend from '#dom/html.legend'\nimport Partjson from 'partjson'\nimport { rgb2hex } from '#src/client'\nimport { fillTermWrapper } from '#termsetting'\nimport { Menu } from '#dom/menu'\nimport { getSeriesTip } from '#dom/svgSeriesTips'\nimport { renderAtRiskG } from '#dom/renderAtRisk'\nimport { renderPvalues } from '#dom/renderPvalueTable'\nimport { downloadChart } from '#common/svg.download'\nimport { getCombinedTermFilter } from '#filter'\nimport { DownloadMenu } from '#dom/downloadMenu'\nimport { isNumericTerm } from '#shared/terms.js'\n\nexport const t0_t2_defaultQ = structuredClone(term0_term2_defaultQ)\nObject.assign(t0_t2_defaultQ, {\n\tnumeric: {\n\t\tmode: 'discrete',\n\t\ttype: 'custom-bin',\n\t\tpreferredBins: 'median'\n\t},\n\tgeneExpression: {\n\t\tmode: 'discrete',\n\t\ttype: 'custom-bin',\n\t\tpreferredBins: 'median'\n\t}\n})\n\nclass TdbSurvival extends PlotBase implements RxComponent {\n\tstatic type = 'survival'\n\n\t// expected RxComponent props, some are already declared/set in PlotBase\n\ttype: string\n\tparentId?: string\n\tdom!: {\n\t\t[index: string]: any\n\t}\n\tcomponents: { [name: string]: ComponentApi } = {}\n\n\t// expected class-specific props\n\tconfigTermKeys = ['term', 'term0', 'term2']\n\tsettings: any\n\tlineFxn: any\n\tpj: any\n\tactiveMenu = false\n\tlegendRenderer: any\n\thiddenRenderer: any\n\tlegendClick = (_, __, ___) => {}\n\tdownload: () => void = () => {}\n\tgetChartImages = () => this.getChartImages()\n\tloadingWait = 0\n\n\tcolorScale: any\n\n\trefs: any\n\tmsg?: string\n\tsymbol: any\n\tserverData?: any\n\tcurrData?: any\n\tlegendData?: any\n\tlegendOrder: any[] = []\n\thiddenData?: any\n\ttests?: { [name: string]: any }\n\tterm2toColor: { [name: string]: { orig: string; rgb: any; adjusted: string; hex: string } } = {}\n\n\tuniqueSeriesIds: Set<any> = new Set()\n\n\t// TODO: migrate to this.view method\n\trender = () => {}\n\tgetSymbol = (_: number) => {\n\t\treturn ''\n\t}\n\n\tconstructor(opts, api) {\n\t\tsuper(opts, api)\n\t\tthis.type = TdbSurvival.type\n\t\tthis.settings = Object.assign({}, opts.settings)\n\t\tthis.dom = this.getDom()\n\t\tthis.pj = getPj(this)\n\n\t\tthis.lineFxn = line()\n\t\t\t.curve(curveStepAfter)\n\t\t\t.x(c => (c as any).scaledX)\n\t\t\t.y(c => (c as any).scaledY)\n\n\t\tthis.legendRenderer = htmlLegend(this.dom.legendDiv, {\n\t\t\tsettings: {\n\t\t\t\tlegendOrientation: 'vertical'\n\t\t\t},\n\t\t\thandlers: {\n\t\t\t\tlegend: {\n\t\t\t\t\tclick: e => this.legendClick(e.target.__data__, e.clientX, e.clientY)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tthis.hiddenRenderer = htmlLegend(this.dom.hiddenDiv, {\n\t\t\tsettings: {\n\t\t\t\tlegendOrientation: 'vertical'\n\t\t\t},\n\t\t\thandlers: {\n\t\t\t\tlegend: {\n\t\t\t\t\tclick: e => this.legendClick(e.target.__data__, e.clientX, e.clientY)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tgetDom() {\n\t\tconst opts = this.opts\n\t\tconst holder = opts.controls ? opts.holder : opts.holder.append('div')\n\t\tconst { controls, errdiv, loadingDiv, renderedData, charts, legendDiv } = this.getStandardDomLayout(holder, opts)\n\t\tconst dom = {\n\t\t\tloadingDiv,\n\t\t\theader: opts.header?.html('Survival Plot'),\n\t\t\tcontrols,\n\t\t\tholder,\n\t\t\terrdiv,\n\t\t\trenderedData,\n\t\t\tchartsDiv: charts\n\t\t\t\t.style('margin', '10px')\n\t\t\t\t.style('display', 'flex')\n\t\t\t\t.style('flex-direction', 'row')\n\t\t\t\t.style('flex-wrap', 'wrap')\n\t\t\t\t.style('max-width', '100vw'),\n\t\t\tlegendDiv: legendDiv.style('margin', '5px 5px 15px 5px'),\n\t\t\thiddenDiv: renderedData.append('div').style('margin', '5px 5px 15px 5px'),\n\t\t\ttip: new Menu({ padding: '5px' }),\n\t\t\tlegendTip: new Menu({ padding: '5px' })\n\t\t}\n\n\t\tdom.tip.onHide = () => {\n\t\t\tthis.activeMenu = false\n\t\t}\n\n\t\treturn dom\n\t}\n\n\tasync init() {\n\t\tsetInteractivity(this)\n\t\tsetRenderers(this)\n\t\tawait this.setControls()\n\t}\n\n\tasync setControls() {\n\t\tconst state = this.getState(this.app.getState())\n\t\tconst controlLabels = state.config.controlLabels\n\t\tif (!controlLabels) throw 'controls labels not found'\n\t\t// public/unauthenticated views disable stratification to limit inference from aggregated data; admin/user are unaffected\n\t\tconst stratDisabledMsg = this.app.vocabApi.termdbConfig?.survival?.stratificationDisabledMessage\n\t\tif (this.opts.controls) {\n\t\t\tthis.opts.controls.on('downloadClick.survival', this.download)\n\t\t} else {\n\t\t\tthis.dom.holder.attr('class', 'pp-termdb-plot-viz').style('display', 'inline-block').style('min-width', '300px')\n\n\t\t\tthis.components = {\n\t\t\t\tcontrols: await controlsInit({\n\t\t\t\t\tapp: this.app,\n\t\t\t\t\tid: this.id,\n\t\t\t\t\tholder: this.dom.controls.style('display', 'inline-block'),\n\t\t\t\t\tinputs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'term',\n\t\t\t\t\t\t\tconfigKey: 'term2',\n\t\t\t\t\t\t\tchartType: 'survival',\n\t\t\t\t\t\t\tusecase: { target: 'survival', detail: 'term2' },\n\t\t\t\t\t\t\ttitle: controlLabels.term2.title || controlLabels.term2.label,\n\t\t\t\t\t\t\tlabel: controlLabels.term2.label,\n\t\t\t\t\t\t\tvocabApi: this.app.vocabApi,\n\t\t\t\t\t\t\tnumericEditMenuVersion: ['discrete'],\n\t\t\t\t\t\t\tdefaultQ4fillTW: t0_t2_defaultQ,\n\t\t\t\t\t\t\tdisabledMessage: stratDisabledMsg\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'term',\n\t\t\t\t\t\t\tconfigKey: 'term0',\n\t\t\t\t\t\t\tchartType: 'survival',\n\t\t\t\t\t\t\tusecase: { target: 'survival', detail: 'term0' },\n\t\t\t\t\t\t\ttitle: controlLabels.term0.title || controlLabels.term0.label,\n\t\t\t\t\t\t\tlabel: controlLabels.term0.label,\n\t\t\t\t\t\t\tvocabApi: this.app.vocabApi,\n\t\t\t\t\t\t\tnumericEditMenuVersion: ['discrete'],\n\t\t\t\t\t\t\tdefaultQ4fillTW: t0_t2_defaultQ,\n\t\t\t\t\t\t\tdisabledMessage: stratDisabledMsg\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Chart width',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\tchartType: 'survival',\n\t\t\t\t\t\t\tsettingsKey: 'svgw',\n\t\t\t\t\t\t\ttitle: 'The internal width of the chart plot'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Chart height',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\tchartType: 'survival',\n\t\t\t\t\t\t\tsettingsKey: 'svgh',\n\t\t\t\t\t\t\ttitle: 'The internal height of the chart plot'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: '95% Confidence Interval',\n\t\t\t\t\t\t\tboxLabel: 'Visible',\n\t\t\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\t\t\tchartType: 'survival',\n\t\t\t\t\t\t\tsettingsKey: 'ciVisible',\n\t\t\t\t\t\t\ttitle: 'Display the 95% confidence interval'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Median Survival',\n\t\t\t\t\t\t\tboxLabel: 'Visible',\n\t\t\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\t\t\tchartType: 'survival',\n\t\t\t\t\t\t\tsettingsKey: 'medianSurvivalVisible',\n\t\t\t\t\t\t\ttitle: 'Display dashed lines indicating the median survival time (50% probability)'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Censored Symbol',\n\t\t\t\t\t\t\ttype: 'radio',\n\t\t\t\t\t\t\tchartType: 'survival',\n\t\t\t\t\t\t\tsettingsKey: 'symbol',\n\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t{ label: 'Tick', value: 'vtick' },\n\t\t\t\t\t\t\t\t{ label: 'X', value: 'x' }\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\ttitle: 'Symbol for displaying censored samples'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Survival Time Visualized',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\tchartType: 'survival',\n\t\t\t\t\t\t\tsettingsKey: 'maxTimeToEvent',\n\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\t'The maximum time-to-event to be displayed in the survival plot, affects only the visual representation and does not impact other analyses. All available data is still used to compute p-values. If this value is left empty or set to 0, no cutoff will be applied.'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Time Unit',\n\t\t\t\t\t\t\ttype: 'radio',\n\t\t\t\t\t\t\tchartType: 'survival',\n\t\t\t\t\t\t\tsettingsKey: 'timeUnit',\n\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t{ label: 'years', value: 'years' },\n\t\t\t\t\t\t\t\t{ label: 'months', value: 'months' },\n\t\t\t\t\t\t\t\t{ label: 'weeks', value: 'weeks' },\n\t\t\t\t\t\t\t\t{ label: 'days', value: 'days' }\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\ttitle: `The unit to display in the x-axis title, like 'years'`\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'X-axis ticks',\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\tchartType: 'survival',\n\t\t\t\t\t\t\tsettingsKey: 'xTickValues',\n\t\t\t\t\t\t\ttitle: `Option to customize the x-axis tick values, enter as comma-separated values. Will be ignored if empty`,\n\t\t\t\t\t\t\tprocessInput: value => (value ? value.split(',').map(Number) : [])\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'At-risk counts',\n\t\t\t\t\t\t\tboxLabel: 'Visible',\n\t\t\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\t\t\tchartType: 'survival',\n\t\t\t\t\t\t\tsettingsKey: 'atRiskVisible',\n\t\t\t\t\t\t\ttitle: 'Display the at-risk counts'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t//{label: 'At-risk label offset', type: 'numeric', chartType: 'survival', settingsKey: 'atRiskLabelOffset'},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Default color',\n\t\t\t\t\t\t\ttype: 'color',\n\t\t\t\t\t\t\tchartType: 'survival',\n\t\t\t\t\t\t\tsettingsKey: 'defaultColor',\n\t\t\t\t\t\t\ttitle: 'Default plot color'\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\tthis.components.controls.on('downloadClick.survival', this.download)\n\t\t}\n\t}\n\n\tgetState(appState) {\n\t\tconst config = appState.plots.find(p => p.id === this.id)\n\t\tif (!config) {\n\t\t\tthrow `No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`\n\t\t}\n\t\tconst parentConfig = appState.plots.find(p => p.id === this.parentId)\n\t\tconst termfilter = getCombinedTermFilter(appState, config.filter || parentConfig?.filter)\n\n\t\treturn {\n\t\t\tisVisible: config.term.term.type == 'survival' || config.term2?.term.type == 'survival',\n\t\t\tgenome: this.app.vocabApi.vocab.genome,\n\t\t\tdslabel: this.app.vocabApi.vocab.dslabel,\n\t\t\tactiveCohort: appState.activeCohort,\n\t\t\ttermfilter,\n\n\t\t\tconfig: {\n\t\t\t\t// NOTE: will create mutable copies of tw terms in async main() below\n\t\t\t\tterm: config.term,\n\t\t\t\tterm0: config.term0 || null,\n\t\t\t\tterm2: config.term2 || null,\n\t\t\t\tcontrolLabels: config.controlLabels,\n\t\t\t\tsettings: config.settings.survival\n\t\t\t},\n\t\t\ttermdbConfig: appState.termdbConfig\n\t\t}\n\t}\n\n\tasync main() {\n\t\tif (!this.state.isVisible) {\n\t\t\tthis.dom.holder.style('display', 'none')\n\t\t\treturn\n\t\t}\n\n\t\tlet data\n\t\ttry {\n\t\t\tthis.state.config = await this.getMutableConfig()\n\t\t\tthis.maySetSandboxHeader()\n\t\t\tthis.toggleLoadingDiv()\n\n\t\t\tObject.assign(this.settings, this.state.config.settings)\n\t\t\tthis.settings.defaultHidden = this.getDefaultHidden()\n\t\t\tthis.settings.hidden = this.settings.customHidden || this.settings.defaultHidden\n\t\t\tthis.settings.xTitleLabel = this.getXtitleLabel()\n\t\t\tconst reqOpts = this.getDataRequestOpts()\n\t\t\t// do not directly set this.serverData to response, since it could be an error\n\t\t\tdata = await this.app.vocabApi.getNestedChartSeriesData(reqOpts, this.api?.getAbortSignal())\n\t\t} catch (e) {\n\t\t\tif (this.app.isAbortError(e)) return\n\t\t\tthis.toggleLoadingDiv('none', 'none')\n\t\t\tthrow e\n\t\t}\n\t\tthis.serverData = data\n\t\tthis.toggleLoadingDiv('none')\n\t\tthis.app.vocabApi.syncTermData(this.state.config, data)\n\t\tthis.currData = this.processData(data)\n\t\tthis.refs = data.refs\n\t\tthis.pj.refresh({ data: this.currData })\n\t\tthis.setTerm2Color(this.pj.tree.charts)\n\t\tthis.symbol = this.getSymbol(7) // hardcode the symbol size for now\n\t\tthis.render()\n\t}\n\n\tmaySetSandboxHeader() {\n\t\tif (!this.dom.header) return\n\t\tconst { term, term2 } = this.state.config\n\t\tconst mainTerm = term.term.name\n\t\tif (term2?.type) {\n\t\t\tthis.dom.header.html(`${term2.getTitleText?.() || term2.term.name} vs ${mainTerm}`)\n\t\t} else {\n\t\t\tthis.dom.header.html(`${mainTerm} plot`)\n\t\t}\n\t}\n\n\t// creates an opts object for the vocabApi.getNestedChartsData()\n\tgetDataRequestOpts() {\n\t\tconst c = this.state.config\n\t\tconst opts: any = {\n\t\t\tchartType: 'survival',\n\t\t\tterm: c.term,\n\t\t\tfilter: this.state.termfilter.filter,\n\t\t\tfilter0: this.state.termfilter.filter0\n\t\t}\n\t\tif (c.term2) {\n\t\t\topts.term2 = c.term2\n\t\t}\n\t\tif (c.term0) opts.term0 = c.term0\n\t\treturn opts\n\t}\n\n\tgetDefaultHidden() {\n\t\tconst hidden: any[] = []\n\t\tconst term2 = this.state.config.term2\n\t\tif (!term2) return hidden\n\t\tconst hiddenValues = term2.q.hiddenValues\n\t\tif (hiddenValues && Object.keys(hiddenValues).length) {\n\t\t\t// term2 has default hidden values\n\t\t\tfor (const k in hiddenValues) {\n\t\t\t\thidden.push(term2.term.values[k].label)\n\t\t\t}\n\t\t}\n\t\treturn hidden\n\t}\n\n\tgetXtitleLabel() {\n\t\tconst termNum = this.state.config.term.term.type == 'survival' ? 'term' : 'term2'\n\t\tconst xUnit = this.settings.timeUnit ? this.settings.timeUnit : this.state.config[termNum].term.unit\n\t\tconst xTitleLabel = `Time to Event (${xUnit})`\n\t\treturn xTitleLabel\n\t}\n\n\tprocessData(data) {\n\t\tthis.uniqueSeriesIds = new Set()\n\t\tthis.msg = ''\n\n\t\tconst rows: any[] = []\n\t\tconst estKeys = ['survival', 'lower', 'upper']\n\t\tfor (const d of data.case) {\n\t\t\tconst obj: { [name: string]: any } = {}\n\t\t\tdata.keys.forEach((k, i) => {\n\t\t\t\tobj[k] = estKeys.includes(k) ? Number(d[i]) : d[i]\n\t\t\t})\n\t\t\tobj.time = obj.time * this.getTimeFactor()\n\t\t\trows.push(obj)\n\t\t\tthis.uniqueSeriesIds.add(obj.seriesId)\n\t\t}\n\n\t\t// process statistical tests\n\t\tthis.tests = {}\n\t\tif (data.tests) {\n\t\t\tfor (const chartId in data.tests) {\n\t\t\t\tconst chartTests = data.tests[chartId]\n\t\t\t\tthis.tests[chartId] = []\n\t\t\t\tfor (const test of chartTests) {\n\t\t\t\t\tif (this.settings.hidden.includes(test.series1) || this.settings.hidden.includes(test.series2)) continue // hide tests that contain hidden series\n\t\t\t\t\tthis.tests[chartId].push({\n\t\t\t\t\t\tpvalue: { id: 'pvalue', text: test.pvalue },\n\t\t\t\t\t\tseries1: { id: test.series1 },\n\t\t\t\t\t\tseries2: { id: test.series2 }\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (!this.tests[chartId].length) delete this.tests[chartId]\n\t\t\t}\n\t\t}\n\n\t\t// process refs\n\t\tif (data.refs.byTermId) {\n\t\t\tconst byTermId = data.refs.byTermId\n\t\t\tconst msg = byTermId[this.state.config.term.term.id]?.survMsg\n\t\t\tif (msg) {\n\t\t\t\t// message to be displayed in survival plot\n\t\t\t\t// will be rendered in .pp-survival-chartLegends of each chart\n\t\t\t\tthis.msg = msg\n\t\t\t}\n\t\t}\n\n\t\treturn rows\n\t}\n\n\t// time factor that converts survival data from default time unit to the current time unit.\n\tgetTimeFactor() {\n\t\tconst numUnitInOneYear = this.settings.numUnitInOneYear || 1\n\t\tconst timeUnit = this.settings.timeUnit || 'years'\n\t\tswitch (timeUnit) {\n\t\t\tcase 'years':\n\t\t\t\treturn (1 / numUnitInOneYear) * 1\n\t\t\tcase 'months':\n\t\t\t\treturn (1 / numUnitInOneYear) * 12\n\t\t\tcase 'weeks':\n\t\t\t\treturn (1 / numUnitInOneYear) * 52\n\t\t\tcase 'days':\n\t\t\t\treturn (1 / numUnitInOneYear) * 365.25\n\t\t\tdefault:\n\t\t\t\tthrow 'unknown time Unit for survival data'\n\t\t}\n\t}\n\n\tsetTerm2Color(charts) {\n\t\tif (!charts) return\n\t\tconst config = this.state.config\n\t\t// color override via legend clicks is saved in term2.values, not by directly editing term2.term.values\n\t\tconst t2values = copyMerge({}, config.term2?.term?.values || {}, config.term2?.values || {})\n\t\tconst values = (this.refs.bins[2] && [this.refs.bins[2]]) || Object.values(t2values)\n\t\tlet t2groups\n\t\tif (config.term2?.q.type == 'predefined-groupset' || config.term2?.q.type == 'custom-groupset') {\n\t\t\tconst groupset =\n\t\t\t\tconfig.term2.q.type == 'predefined-groupset'\n\t\t\t\t\t? config.term2.term.groupsetting.lst[config.term2.q.predefined_groupset_idx]\n\t\t\t\t\t: config.term2.q.customset\n\t\t\tif (!groupset) throw 'groupset is missing'\n\t\t\tt2groups = groupset.groups\n\t\t}\n\t\tthis.term2toColor = {}\n\t\tthis.colorScale = this.uniqueSeriesIds.size < 11 ? scaleOrdinal(schemeCategory10) : scaleOrdinal(schemeCategory20)\n\t\tconst legendItems: any[] = []\n\t\tfor (const chart of charts) {\n\t\t\tfor (const series of chart.serieses) {\n\t\t\t\tlet color\n\t\t\t\t// color override via legend clicks is saved in t2values, does not edit term.values or group.color directly\n\t\t\t\tconst v = values.find(\n\t\t\t\t\tv =>\n\t\t\t\t\t\tv.seriesId === series.seriesId ||\n\t\t\t\t\t\tv.key === series.seriesId ||\n\t\t\t\t\t\tv.name === series.seriesId ||\n\t\t\t\t\t\tv.label === series.seriesId\n\t\t\t\t)\n\t\t\t\tcolor = v?.color\n\t\t\t\tif (!color && t2groups?.length) {\n\t\t\t\t\tconst group = t2groups.find(g => g.name == series.seriesId)\n\t\t\t\t\tcolor = group?.color\n\t\t\t\t\t// quick fix to make WT gray darker to pass Section 508 contrast requirement;\n\t\t\t\t\t// doing this in common.js makes this gray in all tools darker and conflicts\n\t\t\t\t\t// with other mclass colors like in-frame insertion, also visually overwhelming\n\t\t\t\t\t// in GDC oncomatrix\n\t\t\t\t\tif (color === '#D3D3D3' && group?.filter?.lst?.find(f => f?.type === 'tvs' && f.tvs.genotype == 'wt'))\n\t\t\t\t\t\tcolor = 'rgb(105,105,105)'\n\t\t\t\t}\n\t\t\t\tconst orig = color || (series.seriesId == '' ? this.settings.defaultColor : this.colorScale(series.seriesId))\n\t\t\t\tconst _rgb = rgb(orig)\n\t\t\t\tconst adjusted = _rgb.toString()\n\t\t\t\tconst c = { orig, rgb: _rgb, adjusted, hex: rgb2hex(adjusted) }\n\t\t\t\tthis.term2toColor[series.seriesId] = c\n\n\t\t\t\tif (!legendItems.find(d => d.seriesId == series.seriesId)) {\n\t\t\t\t\tlegendItems.push({\n\t\t\t\t\t\tkey: series.seriesId,\n\t\t\t\t\t\tseriesId: series.seriesId,\n\t\t\t\t\t\ttext: series.seriesLabel,\n\t\t\t\t\t\tcolor: this.term2toColor[series.seriesId].adjusted,\n\t\t\t\t\t\tisHidden: this.settings.hidden.includes(series.seriesId)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (this.refs.orderedKeys) {\n\t\t\tconst s = this.refs.orderedKeys.series\n\t\t\tlegendItems.sort((a, b) => s.indexOf(a.seriesId) - s.indexOf(b.seriesId))\n\t\t}\n\n\t\tif (!this.legendOrder.length) {\n\t\t\tthis.legendOrder = legendItems.map(item => item.seriesId)\n\t\t} else {\n\t\t\tlegendItems.sort((a, b) => this.legendOrder.indexOf(a.seriesId) - this.legendOrder.indexOf(b.seriesId))\n\t\t}\n\n\t\tif ((config.term.term.type == 'survival' || config.term2) && legendItems.length) {\n\t\t\tconst termNum = config.term.term.type == 'survival' && config.term2 ? 'term2' : 'term'\n\t\t\tthis.legendData = [\n\t\t\t\t{\n\t\t\t\t\tname: config[termNum].term.name,\n\t\t\t\t\titems: legendItems.filter(s => !s.isHidden)\n\t\t\t\t}\n\t\t\t]\n\n\t\t\tthis.hiddenData = [\n\t\t\t\t{\n\t\t\t\t\tname: `<span style='color:#aaa; font-weight:400'><span>Hidden categories</span><span style='font-size:0.8rem'> CLICK TO SHOW</span></span>`,\n\t\t\t\t\titems: legendItems.filter(s => s.isHidden).map(item => Object.assign({}, item, { isHidden: false }))\n\t\t\t\t}\n\t\t\t]\n\t\t} else {\n\t\t\tthis.legendData = []\n\t\t}\n\t\tfor (const chartId in this.tests) {\n\t\t\tconst chartTests = this.tests[chartId]\n\t\t\tfor (const test of chartTests) {\n\t\t\t\tfor (const key in test) {\n\t\t\t\t\tif (key == 'pvalue') {\n\t\t\t\t\t\t// p-value of test\n\t\t\t\t\t\ttest[key].color = '#000'\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// series of test\n\t\t\t\t\t\tconst item = legendItems.find(item => item.seriesId == test[key].id)\n\t\t\t\t\t\ttest[key].color = item.color\n\t\t\t\t\t\ttest[key].text = item.text\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const survivalInit = getCompInit(TdbSurvival)\n// this alias will allow abstracted dynamic imports\nexport const componentInit = survivalInit\n\nfunction setRenderers(self) {\n\tself.render = function () {\n\t\tconst data = self.pj.tree.charts || [{ chartId: 'No survival data' }]\n\t\tconst chartDivs = self.dom.chartsDiv.selectAll('.pp-survival-chart').data(data, d => d.chartId)\n\t\tchartDivs.exit().remove()\n\t\tchartDivs.each(self.updateCharts)\n\t\tchartDivs.enter().each(self.addCharts)\n\n\t\tself.dom.holder.style('display', 'inline-block')\n\t\tself.dom.chartsDiv.on('mouseover', self.mouseover).on('mouseout', self.mouseout)\n\n\t\tself.legendRenderer(self.settings.atRiskVisible ? [] : self.legendData)\n\t\tif (!self.hiddenData?.[0]?.items.length) self.dom.hiddenDiv.style('display', 'none')\n\t\telse {\n\t\t\tself.dom.hiddenDiv.style('display', '')\n\t\t\tself.hiddenRenderer(self.hiddenData)\n\t\t}\n\t}\n\n\tconst updateHiddenPvalues = hiddenPvalues => {\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.id,\n\t\t\tconfig: {\n\t\t\t\tsettings: {\n\t\t\t\t\tsurvival: {\n\t\t\t\t\t\thiddenPvalues\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tconst setActiveMenu = bool => (self.activeMenu = bool)\n\n\tself.addCharts = function (chart) {\n\t\tconst s = self.settings\n\t\tsetVisibleSerieses(chart, s)\n\n\t\tconst div = select(this)\n\t\t\t.append('div')\n\t\t\t.attr('class', 'pp-survival-chart')\n\t\t\t.style('opacity', chart.serieses ? 0 : 1) // if the data can be plotted, slowly reveal plot\n\t\t\t.style('width', 'fit-content')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('margin', s.chartMargin + 'px')\n\t\t\t.style('padding', '10px')\n\t\t\t.style('top', 0)\n\t\t\t.style('left', 0)\n\t\t\t.style('text-align', 'left')\n\t\t\t.style('vertical-align', 'top')\n\n\t\tdiv\n\t\t\t.append('div')\n\t\t\t.style('width', s.svgw + 50 + 'px')\n\t\t\t.style('height', s.chartTitleDivHt + 'px')\n\t\t\t.style('text-align', 'center')\n\t\t\t.style('font-weight', '600')\n\t\t\t.style('margin', '5px')\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sjpp-survival-title')\n\t\t\t.attr('data-testid', 'sjpp-survival-plotTitle')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('width', 'fit-content')\n\t\t\t.datum(chart)\n\t\t\t.html(chart => chart.chartId)\n\n\t\tif (chart.serieses) {\n\t\t\tconst svg = div.append('svg').attr('class', 'pp-survival-svg')\n\t\t\trenderSVG(svg, chart, s, 0)\n\n\t\t\tdiv.transition().duration(s.duration).style('opacity', 1)\n\n\t\t\t// div for chart-specific legends\n\t\t\tdiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'pp-survival-chartLegends')\n\t\t\t\t.style('vertical-align', 'top')\n\t\t\t\t.style('margin', '10px 10px 10px 10px')\n\t\t\t\t.style('display', 'none')\n\n\t\t\t// p-values legend\n\t\t\tif (self.tests && chart.rawChartId in self.tests) {\n\t\t\t\tconst holder = div\n\t\t\t\t\t.select('.pp-survival-chartLegends')\n\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('margin-bottom', '30px')\n\t\t\t\trenderPvalues({\n\t\t\t\t\ttitle: 'Group comparisons (log-rank test)',\n\t\t\t\t\tholder,\n\t\t\t\t\tplot: 'survival',\n\t\t\t\t\ttests: self.tests[chart.rawChartId],\n\t\t\t\t\ts,\n\t\t\t\t\tbins: self.refs.bins,\n\t\t\t\t\ttip: self.app.tip,\n\t\t\t\t\tsetActiveMenu,\n\t\t\t\t\tupdateHiddenPvalues\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// message\n\t\t\tif (self.msg) {\n\t\t\t\tconst fontSize = s.axisTitleFontSize ? s.axisTitleFontSize - 2 : 15\n\t\t\t\tconst holder = div.select('.pp-survival-chartLegends').style('display', 'inline-block').append('div')\n\t\t\t\tholder\n\t\t\t\t\t.style('font-size', fontSize + 'px')\n\t\t\t\t\t.style('font-style', 'italic')\n\t\t\t\t\t.text(self.msg)\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction setVisibleSerieses(chart, s) {\n\t\tchart.visibleSerieses = chart.serieses?.filter(series => !s.hidden.includes(series.seriesId)) || []\n\t\tconst maxSeriesLabelLen = chart.visibleSerieses.reduce(\n\t\t\t(maxlen, a) => (a.seriesLabel && a.seriesLabel.length > maxlen ? a.seriesLabel.length : maxlen),\n\t\t\t0\n\t\t)\n\t\t// When there's no overlay term (maxSeriesLabelLen is 0), add extra padding to prevent\n\t\t// \"Number at risk\" text from overlapping with the config menu\n\t\tconst extraPaddingForNoOverlay = maxSeriesLabelLen === 0 ? s.atRiskNoOverlayExtraPadding : 0\n\t\tchart.atRiskLabelWidth = s.atRiskVisible\n\t\t\t? maxSeriesLabelLen * (s.axisTitleFontSize - 2) * 0.4 + s.atRiskLabelOffset + extraPaddingForNoOverlay\n\t\t\t: 0\n\t}\n\n\tself.updateCharts = function (chart) {\n\t\tif (!chart.serieses) return\n\t\tconst s = self.settings\n\t\tsetVisibleSerieses(chart, s)\n\n\t\tconst div = select(this)\n\t\tdiv.transition().duration(s.duration).style('width', 'fit-content')\n\n\t\tdiv\n\t\t\t.select('.sjpp-survival-title')\n\t\t\t.style('width', s.svgw + 50)\n\t\t\t.style('height', s.chartTitleDivHt + 'px')\n\t\t\t.datum(chart.chartId)\n\t\t\t.html(chart.chartId)\n\n\t\tdiv.selectAll('.sjpp-lock-icon').style('display', s.scale == 'byChart' ? 'block' : 'none')\n\n\t\tdiv.selectAll('.sjpp-unlock-icon').style('display', s.scale == 'byChart' ? 'none' : 'block')\n\n\t\trenderSVG(div.select('svg'), chart, s, s.duration)\n\n\t\t// div for chart-specific legends\n\t\tdiv.select('.pp-survival-chartLegends').style('display', 'none').selectAll('*').remove()\n\n\t\t// p-values legend\n\t\tif (self.tests && chart.rawChartId in self.tests) {\n\t\t\tconst holder = div\n\t\t\t\t.select('.pp-survival-chartLegends')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.append('div')\n\t\t\t\t.style('margin-bottom', '30px')\n\t\t\trenderPvalues({\n\t\t\t\ttitle: 'Group comparisons (log-rank test)',\n\t\t\t\tholder,\n\t\t\t\tplot: 'survival',\n\t\t\t\ttests: self.tests[chart.rawChartId],\n\t\t\t\ts,\n\t\t\t\tbins: self.refs.bins,\n\t\t\t\ttip: self.app.tip,\n\t\t\t\tsetActiveMenu,\n\t\t\t\tupdateHiddenPvalues\n\t\t\t})\n\t\t}\n\n\t\t// message\n\t\tif (self.msg) {\n\t\t\tconst fontSize = s.axisTitleFontSize ? s.axisTitleFontSize - 2 : 15\n\t\t\tconst holder = div.select('.pp-survival-chartLegends').style('display', 'inline-block').append('div')\n\t\t\tholder\n\t\t\t\t.style('font-size', fontSize + 'px')\n\t\t\t\t.style('font-style', 'italic')\n\t\t\t\t.text(self.msg)\n\t\t}\n\t}\n\n\tfunction renderSVG(svg, chart, s, duration) {\n\t\tchart.svg = svg\n\t\tconst extraHeight = s.atRiskVisible\n\t\t\t? s.axisTitleFontSize + 4 + chart.visibleSerieses.length * 2 * (s.axisTitleFontSize + 4)\n\t\t\t: 0\n\n\t\tsvg\n\t\t\t.transition()\n\t\t\t.duration(duration)\n\t\t\t.attr('width', s.svgw + chart.atRiskLabelWidth)\n\t\t\t.attr('height', s.svgh + extraHeight)\n\t\t\t.style('overflow', 'visible')\n\t\t\t.style('padding-left', '5px')\n\n\t\t/* eslint-disable */\n\t\tconst [mainG, seriesesG, axisG, xAxis, yAxis, xTitle, yTitle, atRiskG, plotRect, medianSurvivalG] =\n\t\t\tgetSvgSubElems(svg)\n\t\t/* eslint-enable */\n\t\tconst xOffset = chart.atRiskLabelWidth + s.svgPadding.left + 10 //adding 10 avoids clipping of the svg when downloading\n\t\tmainG.attr('transform', 'translate(' + xOffset + ',' + s.svgPadding.top + ')')\n\n\t\tconst serieses = seriesesG\n\t\t\t.selectAll('.sjpp-survival-series')\n\t\t\t.data(chart.visibleSerieses, d => (d && d[0] ? d[0].seriesId : ''))\n\n\t\tserieses.exit().remove()\n\t\tserieses.each(function (this: HTMLElement, series, i) {\n\t\t\trenderSeries(select(this), chart, series, i, s)\n\t\t})\n\t\tserieses\n\t\t\t.enter()\n\t\t\t.append('g')\n\t\t\t.attr('class', 'sjpp-survival-series')\n\t\t\t.each(function (this: HTMLElement, series, i) {\n\t\t\t\trenderSeries(select(this), chart, series, i, s)\n\t\t\t})\n\n\t\trenderAxes(xAxis, xTitle, yAxis, yTitle, s, chart)\n\t\trenderMedianSurvival(medianSurvivalG, chart, s)\n\t\trenderAtRiskG({\n\t\t\tg: atRiskG,\n\t\t\ts,\n\t\t\tchart,\n\t\t\torder: self.legendOrder,\n\t\t\tterm2toColor: self.term2toColor,\n\t\t\tonSerieClick: self.legendClick\n\t\t})\n\n\t\tplotRect\n\t\t\t.attr('x', 0) //s.svgPadding.left) //s.svgh - s.svgPadding.top - s.svgPadding.bottom + 5)\n\t\t\t.attr('width', s.svgw - s.svgPadding.left - s.svgPadding.right)\n\t\t\t.attr('y', 0) //s.svgPadding.top) // - s.svgPadding.bottom + 5)\n\t\t\t.attr('height', s.svgh - s.svgPadding.top - s.svgPadding.bottom + s.xAxisOffset)\n\n\t\tsvg.seriesTip.update({\n\t\t\txScale: chart.xScale,\n\t\t\txTitleLabel: s.xTitleLabel,\n\t\t\tdecimals: s.seriesTipDecimals,\n\t\t\tserieses: chart.visibleSerieses.map(s => {\n\t\t\t\tconst seriesLabel = `${s.seriesLabel || 'Probability'}:`\n\t\t\t\tconst color = self.term2toColor[s.seriesId].adjusted || '#000'\n\t\t\t\treturn {\n\t\t\t\t\tdata: s.data.map(d => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tx: d.x,\n\t\t\t\t\t\t\thtml:\n\t\t\t\t\t\t\t\t`<span style='color: ${color}'>` +\n\t\t\t\t\t\t\t\t`${seriesLabel} ${(100 * d.y).toFixed(2)}% (${(100 * d.lower).toFixed(2)} - ${(100 * d.upper).toFixed(\n\t\t\t\t\t\t\t\t\t2\n\t\t\t\t\t\t\t\t)})` +\n\t\t\t\t\t\t\t\t`</span>`\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\t}\n\n\tfunction getSvgSubElems(svg) {\n\t\tlet mainG, seriesesG, axisG, xAxis, yAxis, xTitle, yTitle, atRiskG, plotRect, line, medianSurvivalG\n\t\tif (!svg.select('.sjpp-survival-mainG').size()) {\n\t\t\tmainG = svg.append('g').attr('class', 'sjpp-survival-mainG')\n\t\t\tseriesesG = mainG.append('g').attr('class', 'sjpcb-survival-seriesesG')\n\t\t\tmedianSurvivalG = mainG.append('g').attr('class', 'sjpp-survival-median')\n\t\t\taxisG = mainG.append('g').attr('class', 'sjpp-survival-axis')\n\t\t\txAxis = axisG.append('g').attr('class', 'sjpp-survival-x-axis')\n\t\t\tyAxis = axisG.append('g').attr('class', 'sjpp-survival-y-axis')\n\t\t\txTitle = axisG.append('g').attr('class', 'sjpp-survival-x-title')\n\t\t\tyTitle = axisG.append('g').attr('class', 'sjpp-survival-y-title')\n\t\t\tatRiskG = mainG.append('g').attr('class', 'sjpp-survival-atrisk')\n\t\t\tline = mainG\n\t\t\t\t.append('line')\n\t\t\t\t.attr('class', 'sjpcb-plot-tip-line')\n\t\t\t\t.attr('stroke', '#000')\n\t\t\t\t.attr('stroke-width', '1px')\n\t\t\tplotRect = mainG.append('rect').attr('class', 'sjpcb-plot-tip-rect').style('fill', 'transparent')\n\t\t} else {\n\t\t\tmainG = svg.select('.sjpp-survival-mainG')\n\t\t\tseriesesG = mainG.select('.sjpcb-survival-seriesesG')\n\t\t\tmedianSurvivalG = mainG.select('.sjpp-survival-median')\n\t\t\taxisG = mainG.select('.sjpp-survival-axis')\n\t\t\txAxis = axisG.select('.sjpp-survival-x-axis')\n\t\t\tyAxis = axisG.select('.sjpp-survival-y-axis')\n\t\t\txTitle = axisG.select('.sjpp-survival-x-title')\n\t\t\tyTitle = axisG.select('.sjpp-survival-y-title')\n\t\t\tatRiskG = mainG.select('.sjpp-survival-atrisk')\n\t\t\tplotRect = mainG.select('.sjpcb-plot-tip-rect')\n\t\t\tline = mainG.select('.sjpcb-plot-tip-line')\n\t\t}\n\n\t\tif (!svg.seriesTip) {\n\t\t\tsvg.seriesTip = getSeriesTip(line, plotRect, self.dom.tip)\n\t\t}\n\n\t\treturn [mainG, seriesesG, axisG, xAxis, yAxis, xTitle, yTitle, atRiskG, plotRect, medianSurvivalG]\n\t}\n\n\tfunction renderSeries(g, chart, series, i, s) {\n\t\t// do not show samples with time to event larger than maxTimeToEvent\n\t\tlet processedData = series.data\n\t\tif (s.maxTimeToEvent) {\n\t\t\tprocessedData = series.data.filter(d => d.x <= s.maxTimeToEvent)\n\t\t}\n\t\t// todo: allow update of exiting path instead of replacing\n\t\tg.selectAll('path').remove()\n\t\tg.append('path')\n\t\t\t.attr(\n\t\t\t\t'd',\n\t\t\t\tarea()\n\t\t\t\t\t.curve(curveStepAfter)\n\t\t\t\t\t.x(c => (c as any).scaledX)\n\t\t\t\t\t.y0(c => (c as any).scaledY[1])\n\t\t\t\t\t.y1(c => (c as any).scaledY[2])(processedData)\n\t\t\t)\n\t\t\t.style('display', s.ciVisible ? '' : 'none')\n\t\t\t.style('fill', self.term2toColor[series.seriesId].adjusted)\n\t\t\t.style('opacity', '0.15')\n\t\t\t.style('stroke', 'none')\n\n\t\trenderSubseries(\n\t\t\ts,\n\t\t\tg,\n\t\t\tprocessedData.map(d => {\n\t\t\t\treturn {\n\t\t\t\t\tseriesId: d.seriesId,\n\t\t\t\t\tx: d.x,\n\t\t\t\t\ty: d.y,\n\t\t\t\t\tscaledX: d.scaledX,\n\t\t\t\t\tscaledY: d.scaledY[0],\n\t\t\t\t\tseriesName: 'survival',\n\t\t\t\t\tseriesLabel: series.seriesLabel,\n\t\t\t\t\tnevent: d.nevent,\n\t\t\t\t\tncensor: d.ncensor,\n\t\t\t\t\tnrisk: d.nrisk\n\t\t\t\t}\n\t\t\t})\n\t\t)\n\n\t\trenderSubseries(\n\t\t\ts,\n\t\t\tg.append('g'),\n\t\t\tprocessedData.map(d => {\n\t\t\t\treturn {\n\t\t\t\t\tseriesId: d.seriesId,\n\t\t\t\t\tx: d.x,\n\t\t\t\t\ty: d.lower,\n\t\t\t\t\tscaledX: d.scaledX,\n\t\t\t\t\tscaledY: d.scaledY[1],\n\t\t\t\t\tseriesName: 'lower',\n\t\t\t\t\tseriesLabel: series.seriesLabel,\n\t\t\t\t\tnevent: d.nevent,\n\t\t\t\t\tncensor: 0, // no censor marks for lower CI\n\t\t\t\t\tnrisk: d.nrisk\n\t\t\t\t}\n\t\t\t})\n\t\t)\n\n\t\trenderSubseries(\n\t\t\ts,\n\t\t\tg.append('g'),\n\t\t\tprocessedData.map(d => {\n\t\t\t\treturn {\n\t\t\t\t\tseriesId: d.seriesId,\n\t\t\t\t\tx: d.x,\n\t\t\t\t\ty: d.upper,\n\t\t\t\t\tscaledX: d.scaledX,\n\t\t\t\t\tscaledY: d.scaledY[2],\n\t\t\t\t\tseriesName: 'upper', // no censor marks for upper CI\n\t\t\t\t\tseriesLabel: series.seriesLabel,\n\t\t\t\t\tnevent: d.nevent,\n\t\t\t\t\tncensor: 0,\n\t\t\t\t\tnrisk: d.nrisk\n\t\t\t\t}\n\t\t\t})\n\t\t)\n\t}\n\n\tfunction renderSubseries(s, g, data) {\n\t\t// todo: allow update of exiting g's instead of replacing\n\t\tg.selectAll('g').remove()\n\n\t\tconst lineData = data.filter((d, i) => i === 0 || d.nevent || i === data.length - 1)\n\t\tconst censoredData = data.filter(d => d.ncensor)\n\n\t\tconst seriesName = data[0].seriesName\n\t\tconst color = self.term2toColor[data[0].seriesId].adjusted\n\t\tif (seriesName == 'survival') {\n\t\t\tg.append('path')\n\t\t\t\t.attr('d', self.lineFxn(lineData))\n\t\t\t\t.style('fill', 'none')\n\t\t\t\t.style('stroke', color)\n\t\t\t\t.style('opacity', 1)\n\t\t\t\t.style('stroke-opacity', 1)\n\t\t}\n\n\t\tconst subg1 = g.append('g').attr('class', 'sjpp-survival-censored')\n\t\tconst censored = subg1.selectAll('.sjpp-survival-censored-x').data(censoredData, d => d.x)\n\n\t\tcensored.exit().remove()\n\n\t\tcensored\n\t\t\t.attr('transform', c => `translate(${c.scaledX},${c.scaledY})`)\n\t\t\t.style('stroke', color)\n\t\t\t.style('display', '')\n\n\t\tcensored\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('class', 'sjpp-survival-censored-x')\n\t\t\t.attr('transform', c => `translate(${c.scaledX},${c.scaledY})`)\n\t\t\t.attr('d', self.symbol)\n\t\t\t.style('fill', 'transparent')\n\t\t\t.style('fill-opacity', s.fillOpacity)\n\t\t\t.style('stroke', color)\n\t\t\t.style('display', '')\n\t}\n\n\tfunction renderAxes(xAxis, xTitle, yAxis, yTitle, s, chart) {\n\t\tlet xTicks\n\t\tif (s.xTickValues?.length) {\n\t\t\t// xTicksValues should not be larger than maxTimeToEvent\n\t\t\tchart.xTickValues = s.xTickValues.filter(\n\t\t\t\tv => v === 0 || (v >= chart.xMin && v <= Math.min(s.maxTimeToEvent || chart.xMax, chart.xMax))\n\t\t\t)\n\t\t\txTicks = axisBottom(chart.xScale).tickValues(chart.xTickValues)\n\t\t} else {\n\t\t\tchart.xTickValues = []\n\t\t\txTicks = axisBottom(chart.xScale)\n\t\t\t\t.ticks(4)\n\t\t\t\t.tickFormat((xval: any) => {\n\t\t\t\t\tchart.xTickValues.push(xval)\n\t\t\t\t\treturn xval\n\t\t\t\t})\n\t\t}\n\n\t\t// without this pixel offset, the axes and data are slightly misaligned\n\t\t// this could be because the axes have a 0.5 offset in their path,\n\t\t// for example: <path class=\"domain\" stroke=\"#000\" d=\"M0.5,6V0.5H325.5V6\"></path>\n\t\tconst pixelOffset = -0.5\n\n\t\txAxis\n\t\t\t.attr(\n\t\t\t\t'transform',\n\t\t\t\t`translate(${pixelOffset}, ${s.svgh - s.svgPadding.top - s.svgPadding.bottom + s.xAxisOffset + pixelOffset})`\n\t\t\t)\n\t\t\t.call(xTicks)\n\n\t\tyAxis\n\t\t\t.attr('transform', `translate(${s.yAxisOffset + pixelOffset}, ${pixelOffset})`)\n\t\t\t.call(axisLeft(scaleLinear().domain(chart.yScale.domain()).range(chart.yScale.range())).ticks(5))\n\n\t\txTitle.select('text, title').remove()\n\t\txTitle\n\t\t\t.attr(\n\t\t\t\t'transform',\n\t\t\t\t'translate(' +\n\t\t\t\t\t(s.svgw - s.svgPadding.left - s.svgPadding.right) / 2 +\n\t\t\t\t\t',' +\n\t\t\t\t\t(s.svgh - s.axisTitleFontSize - 4) +\n\t\t\t\t\t')'\n\t\t\t)\n\t\t\t.append('text')\n\t\t\t.style('text-anchor', 'middle')\n\t\t\t.style('font-size', s.axisTitleFontSize + 'px')\n\t\t\t.text(s.xTitleLabel)\n\n\t\tconst yTitleLabel = 'Probability of Survival'\n\t\tyTitle.select('text, title').remove()\n\t\tyTitle\n\t\t\t.attr(\n\t\t\t\t'transform',\n\t\t\t\t'translate(' +\n\t\t\t\t\t(-s.svgPadding.left / 2 - s.axisTitleFontSize) +\n\t\t\t\t\t',' +\n\t\t\t\t\t(s.svgh - s.svgPadding.top - s.svgPadding.bottom) / 2 +\n\t\t\t\t\t')rotate(-90)'\n\t\t\t)\n\t\t\t.append('text')\n\t\t\t.style('text-anchor', 'middle')\n\t\t\t.style('font-size', s.axisTitleFontSize + 'px')\n\t\t\t.text(yTitleLabel)\n\t}\n\n\tfunction renderMedianSurvival(g, chart, s) {\n\t\tg.selectAll('*').remove()\n\t\tif (!s.medianSurvivalVisible) return\n\n\t\tconst yMid = chart.yScale(0.5)\n\t\tconst yBottom = chart.yScale(0)\n\n\t\t// Find the first data point where survival <= 0.5 (median) for a series\n\t\tconst getMedianPoint = (series: any) => {\n\t\t\tconst data = s.maxTimeToEvent ? series.data.filter((d: any) => d.x <= s.maxTimeToEvent) : series.data\n\t\t\treturn (data as any[]).find((d: any) => d.y <= 0.5)\n\t\t}\n\n\t\t// Collect scaled x positions for all visible series that have a median\n\t\tconst medianScaledXs: number[] = []\n\t\tfor (const series of chart.visibleSerieses) {\n\t\t\tconst medianPoint = getMedianPoint(series)\n\t\t\tif (medianPoint) medianScaledXs.push(chart.xScale(medianPoint.x))\n\t\t}\n\n\t\tif (!medianScaledXs.length) return\n\n\t\t// Horizontal dashed line at 50% survival from y-axis to the rightmost median time\n\t\tg.append('line')\n\t\t\t.attr('x1', 0)\n\t\t\t.attr('y1', yMid)\n\t\t\t.attr('x2', Math.max(...medianScaledXs))\n\t\t\t.attr('y2', yMid)\n\t\t\t.attr('stroke', '#000')\n\t\t\t.attr('stroke-width', 1)\n\t\t\t.attr('stroke-dasharray', '4,4')\n\n\t\t// Vertical dashed line from 50% down to x-axis for each series with a median\n\t\tfor (const scaledX of medianScaledXs) {\n\t\t\tg.append('line')\n\t\t\t\t.attr('x1', scaledX)\n\t\t\t\t.attr('y1', yMid)\n\t\t\t\t.attr('x2', scaledX)\n\t\t\t\t.attr('y2', yBottom)\n\t\t\t\t.attr('stroke', '#000')\n\t\t\t\t.attr('stroke-width', 1)\n\t\t\t\t.attr('stroke-dasharray', '4,4')\n\t\t}\n\t}\n\n\tself.getSymbol = function (size) {\n\t\tconst s = size,\n\t\t\th = s / 2\n\n\t\tswitch (self.settings.symbol) {\n\t\t\tcase 'x':\n\t\t\t\treturn `M -${h},-${h} l ${s},${s} M ${h},-${h} l -${s},${s}`\n\n\t\t\tcase 'vtick':\n\t\t\t\treturn `M 0,-${h} L 0,${h}`\n\n\t\t\tdefault:\n\t\t\t\tthrow `Unrecognized survival plot symbol='${self.settings.symbol}'`\n\t\t}\n\t}\n}\n\nfunction setInteractivity(self) {\n\tself.download = function (event) {\n\t\tconst charts = self.getChartImages()\n\t\tconst menu = new DownloadMenu(charts, self.state.config.term.term.name)\n\t\tmenu.show(event.clientX, event.clientY, event.target)\n\t}\n\n\tself.getChartImages = function () {\n\t\tconst charts: any[] = []\n\t\tif (!self.pj.tree.charts) return charts // no charts to download\n\t\tfor (const chart of self.pj.tree.charts) {\n\t\t\tcharts.push({ name: chart.chartId, svg: chart.svg })\n\t\t}\n\t\treturn charts\n\t}\n\n\t// The logic is replaced by the downloadMenu SVG option\n\t// self.download = function () {\n\t// \tif (!self.state) return\n\t// \tdownloadChart(\n\t// \t\tself.dom.chartsDiv.selectAll('.sjpp-survival-mainG'),\n\t// \t\t'Survival_Plot',\n\t// \t\tself.dom.chartsDiv.select('.pp-survival-chart').node()\n\t// \t)\n\t// }\n\n\tself.mouseover = function () {}\n\n\tself.mouseout = function () {\n\t\tif (self.activeMenu) return\n\t\tself.app.tip.hide()\n\t}\n\n\tself.legendClick = function (d, x, y) {\n\t\tif (d === undefined) return\n\t\tconst hidden = self.settings.hidden.slice()\n\t\tconst i = hidden.indexOf(d.seriesId)\n\t\tif (i == -1) {\n\t\t\thidden.push(d.seriesId) // this setting data will be dispatched after clicking on the Hide menu option\n\t\t\tself.showLegendItemMenu(d, hidden, x, y)\n\t\t} else {\n\t\t\thidden.splice(i, 1)\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: self.id,\n\t\t\t\tconfig: {\n\t\t\t\t\tsettings: {\n\t\t\t\t\t\tsurvival: {\n\t\t\t\t\t\t\tcustomHidden: hidden\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\t}\n\n\tself.showLegendItemMenu = function (d, hidden, x, y) {\n\t\tconst term2 = self.state.config.term2?.term || null\n\t\tconst seriesLabel = term2?.values?.[d.seriesId]?.label || d.seriesId\n\n\t\tconst header = `<div style='padding-bottom:8px'><b>${seriesLabel}</b></div>`\n\t\tconst data = d.seriesId || d.seriesId === 0 ? d : { seriesId: d.id, dataId: d.dataId }\n\t\tif (!data.seriesId && !data.dataId) {\n\t\t\tif (!term2) {\n\t\t\t\tconst label = self.dom.legendTip.clear().d.append('div').html('Edit color: ')\n\t\t\t\tconst input = label\n\t\t\t\t\t.append('input')\n\t\t\t\t\t.attr('type', 'color')\n\t\t\t\t\t.attr('value', self.settings.defaultColor)\n\t\t\t\t\t.on('change', () => self.adjustColor(input.property('value'), d))\n\t\t\t\tself.dom.legendTip.show(x, y)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tconst options: any[] = []\n\t\toptions.push({\n\t\t\tlabel: 'Hide',\n\t\t\tcallback: () => {\n\t\t\t\tmenu.hide()\n\t\t\t\tself.app.dispatch({\n\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\tid: self.id,\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tsettings: {\n\t\t\t\t\t\t\tsurvival: {\n\t\t\t\t\t\t\t\tcustomHidden: hidden\n\t\t\t\t\t\t\t}\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 (self.legendData[0]?.items.length > 1) {\n\t\t\toptions.push({\n\t\t\t\tlabel: 'Move&nbsp;',\n\t\t\t\tsetInput: holder => {\n\t\t\t\t\tconst legendIndex = self.legendOrder.indexOf(d.seriesId)\n\t\t\t\t\tif (legendIndex != 0)\n\t\t\t\t\t\tholder\n\t\t\t\t\t\t\t.append('button')\n\t\t\t\t\t\t\t.html('up')\n\t\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t\t\t\tself.adjustLegendOrder(d, -1)\n\t\t\t\t\t\t\t})\n\t\t\t\t\tif (legendIndex < self.legendData[0]?.items.length - 1)\n\t\t\t\t\t\tholder\n\t\t\t\t\t\t\t.append('button')\n\t\t\t\t\t\t\t.html('down')\n\t\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t\t\t\tself.adjustLegendOrder(d, 1)\n\t\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\toptions.push({\n\t\t\t//label: 'Color',\n\t\t\t//callback: d => {}\n\t\t\tsetInput: holder => {\n\t\t\t\tconst label = holder.append('div')\n\t\t\t\tlabel.html('Edit color: ')\n\t\t\t\tconst input = label\n\t\t\t\t\t.append('input')\n\t\t\t\t\t.attr('type', 'color')\n\t\t\t\t\t.attr('value', self.term2toColor[d.seriesId].hex)\n\t\t\t\t\t.on('change', () => self.adjustColor(input.property('value'), d))\n\t\t\t}\n\t\t})\n\n\t\tif (!options.length) return\n\t\tconst menu = self.dom.legendTip.clear()\n\t\tmenu.d.append('div').html(header)\n\t\tmenu.d\n\t\t\t.append('div')\n\t\t\t.selectAll('div')\n\t\t\t.data(options)\n\t\t\t.enter()\n\t\t\t.append('div')\n\t\t\t.attr('class', d => (d.label == 'Hide' ? 'sja_menuoption' : 'sja_menuoption_not_interactive'))\n\t\t\t.on('click', (event, c) => {\n\t\t\t\tif (c.setInput) return\n\t\t\t\tself.app.tip.hide()\n\t\t\t\tc.callback(d)\n\t\t\t})\n\n\t\t\t.each(function (this: HTMLElement, d) {\n\t\t\t\tconst div = select(this)\n\t\t\t\tif (d.label) div.append('div').style('display', 'inline-block').html(d.label)\n\t\t\t\tif (d.setInput)\n\t\t\t\t\td.setInput(\n\t\t\t\t\t\tdiv.append('div').style('display', 'inline-block')\n\t\t\t\t\t\t//.style('margin-left', '10px')\n\t\t\t\t\t)\n\t\t\t})\n\n\t\tmenu.show(x, y)\n\t}\n\n\tself.adjustLegendOrder = (d, increment) => {\n\t\tconst oldIndex = self.legendOrder.indexOf(d.seriesId)\n\t\tif (oldIndex == -1) return\n\t\tlet newIndex = oldIndex + increment\n\t\t// clamp to array bounds\n\t\tnewIndex = Math.max(0, Math.min(self.legendOrder.length - 1, newIndex))\n\t\t// remove item\n\t\tself.legendOrder.splice(oldIndex, 1)\n\t\t// insert at new index\n\t\tself.legendOrder.splice(newIndex, 0, d.seriesId)\n\t\tself.app.dispatch({\n\t\t\ttype: 'app_refresh'\n\t\t})\n\t\tself.app.tip.hide()\n\t}\n\n\tself.adjustColor = (value, d) => {\n\t\tconst color = rgb(value).formatHex()\n\t\tconst t2 = self.state.config.term2\n\t\tif (!t2) {\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: self.id,\n\t\t\t\tconfig: { settings: { survival: { defaultColor: color } } }\n\t\t\t})\n\t\t} else {\n\t\t\t// this is the overlay termwrapper\n\t\t\tconst term2 = structuredClone(t2)\n\t\t\t// do not replace term2.term.values directly, will set term2.values to use as overrides\n\t\t\tif (!term2.values) term2.values = {}\n\t\t\tconst values = term2.values\n\t\t\tif (!values[d.seriesId]) values[d.seriesId] = {}\n\t\t\tif (!('key' in values[d.seriesId])) values[d.seriesId].key = d.seriesId\n\t\t\tvalues[d.seriesId].color = color\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: self.id,\n\t\t\t\tconfig: {\n\t\t\t\t\tterm2\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tself.app.tip.hide()\n\t}\n\n\t// disabled as a click handler for now, need to review\n\t// before completely removing this code\n\tself.showMenuForSelectedChart = function () {\n\t\tself.dom.tip.clear()\n\t\tself.activeMenu = true\n\t\tself.dom.tip\n\t\t\t.showunder(this)\n\t\t\t.d.append('button')\n\t\t\t.html('Download SVG')\n\t\t\t.on('click', () => {\n\t\t\t\tif (!self.state) return\n\t\t\t\tconst chartDiv = select(this.closest('.pp-survival-chart'))\n\t\t\t\tdownloadChart(\n\t\t\t\t\tchartDiv.select('.sjpp-survival-mainG'),\n\t\t\t\t\t'Survival_Plot',\n\t\t\t\t\tchartDiv.node() // use to get computed styles\n\t\t\t\t)\n\t\t\t})\n\t}\n}\n\nexport async function getPlotConfig(opts, app) {\n\tif (!opts.term) throw 'survival getPlotConfig: opts.term{} missing'\n\ttry {\n\t\tawait fillTermWrapper(opts.term, app.vocabApi)\n\t\t// supply t0_t2_defaultQ if opts.term0/2.bins/q is undefined\n\t\t// so that t0_t2_defaultQ does not override bins or q from user\n\t\tif (opts.term2)\n\t\t\tawait fillTermWrapper(opts.term2, app.vocabApi, opts.term2.bins || opts.term2.q ? undefined : t0_t2_defaultQ)\n\t\tif (opts.term0)\n\t\t\tawait fillTermWrapper(opts.term0, app.vocabApi, opts.term0.bins || opts.term0.q ? undefined : t0_t2_defaultQ)\n\t} catch (e) {\n\t\tthrow `${e} [survival getPlotConfig()]`\n\t}\n\n\tconst config = {\n\t\tcontrolLabels: Object.assign({}, defaultUiLabels, app.vocabApi.termdbConfig.uiLabels || {}),\n\t\tsettings: {\n\t\t\tcontrols: {\n\t\t\t\tterm2: null, // the previous overlay value may be displayed as a convenience for toggling\n\t\t\t\tterm0: null\n\t\t\t},\n\t\t\tsurvival: {\n\t\t\t\tradius: 5,\n\t\t\t\tciVisible: true,\n\t\t\t\tmedianSurvivalVisible: false,\n\t\t\t\tfill: '#fff',\n\t\t\t\tstroke: '#000',\n\t\t\t\tsymbol: 'vtick', // 'x', 'vtick'\n\t\t\t\tfillOpacity: 0,\n\t\t\t\tchartMargin: 10,\n\t\t\t\tsvgw: 400,\n\t\t\t\tsvgh: 300,\n\t\t\t\tnumUnitInOneYear: 1,\n\t\t\t\ttimeUnit: 'years',\n\t\t\t\tatRiskVisible: true,\n\t\t\t\tatRiskLabelOffset: -20,\n\t\t\t\tatRiskNoOverlayExtraPadding: 30, // Extra padding when there's no overlay term to prevent \"Number at risk\" text overlap\n\t\t\t\txTickValues: [], // if undefined or empty, will be ignored\n\t\t\t\tseriesTipDecimals: 1,\n\t\t\t\tsvgPadding: {\n\t\t\t\t\ttop: 20,\n\t\t\t\t\tleft: 55,\n\t\t\t\t\tright: 20,\n\t\t\t\t\tbottom: 50\n\t\t\t\t},\n\t\t\t\taxisTitleFontSize: 16,\n\t\t\t\txAxisOffset: 5,\n\t\t\t\tyAxisOffset: -5,\n\t\t\t\thiddenPvalues: [],\n\t\t\t\tdefaultColor: '#2077b4'\n\t\t\t}\n\t\t}\n\t}\n\n\t// default survival settings will be overwritten by the survival settings defined in dataset\n\tconst overrides = app.vocabApi.termdbConfig.survival || {}\n\tcopyMerge(config.settings.survival, overrides.settings)\n\n\t// may apply term-specific changes to the default object\n\treturn copyMerge(config, opts)\n}\n\nfunction getPj(self) {\n\tconst pj = new Partjson({\n\t\ttemplate: {\n\t\t\tyMin: '>=yMin()',\n\t\t\tyMax: '<=yMax()',\n\t\t\tcharts: [\n\t\t\t\t{\n\t\t\t\t\tchartId: '@key',\n\t\t\t\t\trawChartId: '$chartId',\n\t\t\t\t\txMin: '>$time',\n\t\t\t\t\txMax: '<$time',\n\t\t\t\t\t'__:xScale': '=xScale()',\n\t\t\t\t\t'__:yScale': '=yScale()',\n\t\t\t\t\tyMin: '>=yMin()',\n\t\t\t\t\tyMax: '<=yMax()',\n\t\t\t\t\tserieses: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tchartId: '@parent.@parent.@key',\n\t\t\t\t\t\t\tseriesId: '@key',\n\t\t\t\t\t\t\t'__:seriesLabel': '=seriesLabel()',\n\t\t\t\t\t\t\tdata: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t'__:seriesId': '@parent.@parent.seriesId',\n\t\t\t\t\t\t\t\t\t//color: \"$color\",\n\t\t\t\t\t\t\t\t\tx: '$time',\n\t\t\t\t\t\t\t\t\ty: '$survival',\n\t\t\t\t\t\t\t\t\tlower: '$lower',\n\t\t\t\t\t\t\t\t\tupper: '$upper',\n\t\t\t\t\t\t\t\t\t'_1:scaledX': '=scaledX()',\n\t\t\t\t\t\t\t\t\t'_1:scaledY': '=scaledY()',\n\t\t\t\t\t\t\t\t\tnevent: '$nevent',\n\t\t\t\t\t\t\t\t\tncensor: '$ncensor',\n\t\t\t\t\t\t\t\t\tnrisk: '$nrisk'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t'=timeCensored()'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'$seriesId'\n\t\t\t\t\t],\n\t\t\t\t\t'@done()': '=sortSerieses()'\n\t\t\t\t},\n\t\t\t\t'=chartTitle()'\n\t\t\t],\n\t\t\t'@done()': '=sortCharts()'\n\t\t},\n\t\t'=': {\n\t\t\tchartTitle(row) {\n\t\t\t\tif (!row.chartId || row.chartId == '-') {\n\t\t\t\t\tconst termNum = self.state.config.term.term.type == 'survival' ? 'term' : 'term2'\n\t\t\t\t\treturn self.state.config[termNum].term.name\n\t\t\t\t}\n\t\t\t\tconst t0 = self.state.config.term0\n\t\t\t\tif (!t0 || !t0.term.values) return row.chartId\n\t\t\t\tif (t0.q?.type == 'predefined-groupset' || t0.q?.type == 'custom-groupset') return row.chartId\n\t\t\t\tconst value = self.state.config.term0.term.values[row.chartId]\n\t\t\t\treturn value && value.label ? value.label : row.chartId\n\t\t\t},\n\t\t\tseriesLabel(row, context) {\n\t\t\t\tconst t2 = self.state.config.term2\n\t\t\t\tif (!t2) return\n\t\t\t\tconst seriesId = context.self.seriesId\n\t\t\t\tif (t2?.q?.type == 'predefined-groupset' || t2?.q?.type == 'custom-groupset') return seriesId\n\t\t\t\tif (t2 && t2.term.values && seriesId in t2.term.values) return t2.term.values[seriesId].label\n\t\t\t\tif (isNumericTerm(t2.term)) {\n\t\t\t\t\t// numeric term\n\t\t\t\t\t// seriesId on its own (e.g. \"<5\") will be vague,\n\t\t\t\t\t// so include term name in series label\n\t\t\t\t\treturn t2.term.name + ' ' + seriesId\n\t\t\t\t}\n\t\t\t\treturn seriesId\n\t\t\t},\n\t\t\ttimeCensored(row) {\n\t\t\t\treturn row.time + '-' + row.ncensor\n\t\t\t},\n\t\t\ty(row, context) {\n\t\t\t\tconst seriesId = context.context.parent.seriesId\n\t\t\t\treturn seriesId == 'CI' ? [row.lower, row.upper] : row[seriesId]\n\t\t\t},\n\t\t\tyMin(row) {\n\t\t\t\treturn row.lower\n\t\t\t},\n\t\t\tyMax(row) {\n\t\t\t\treturn row.upper\n\t\t\t},\n\t\t\txScale(_, context) {\n\t\t\t\tconst s = self.settings\n\t\t\t\treturn (\n\t\t\t\t\tscaleLinear()\n\t\t\t\t\t\t// force x to start at 0 because first data point will always\n\t\t\t\t\t\t// be at x=0 (see survival.R)\n\t\t\t\t\t\t.domain([0, Math.min(s.maxTimeToEvent || context.self.xMax, context.self.xMax)])\n\t\t\t\t\t\t.range([0, s.svgw - s.svgPadding.left - s.svgPadding.right])\n\t\t\t\t)\n\t\t\t},\n\t\t\tscaledX(_, context) {\n\t\t\t\treturn context.context.context.context.parent.xScale(context.self.x)\n\t\t\t},\n\t\t\tscaledY(_, context) {\n\t\t\t\tconst yScale = context.context.context.context.parent.yScale\n\t\t\t\tconst s = context.self\n\t\t\t\treturn [yScale(s.y), yScale(s.lower), yScale(s.upper)]\n\t\t\t},\n\t\t\tyScale() {\n\t\t\t\tconst s = self.settings\n\t\t\t\tconst domain = [1.05, 0]\n\t\t\t\treturn scaleLinear()\n\t\t\t\t\t.domain(domain)\n\t\t\t\t\t.range([0, s.svgh - s.svgPadding.top - s.svgPadding.bottom])\n\t\t\t},\n\t\t\tsortSerieses(result) {\n\t\t\t\tfor (const series of result.serieses) {\n\t\t\t\t\tseries.data.sort((a, b) => (a.x < b.x ? -1 : 1))\n\t\t\t\t}\n\t\t\t\tif (self.refs.orderedKeys) {\n\t\t\t\t\tconst s = self.refs.orderedKeys.series\n\t\t\t\t\tresult.serieses.sort((a, b) => s.indexOf(a.seriesId) - s.indexOf(b.seriesId))\n\t\t\t\t}\n\t\t\t\tif (self.refs.bins) {\n\t\t\t\t\tconst labelOrder = self.refs.bins.map(b => b.label)\n\t\t\t\t\tresult.serieses.sort((a, b) => labelOrder.indexOf(a.seriesId) - labelOrder.indexOf(b.seriesId))\n\t\t\t\t}\n\t\t\t},\n\t\t\tsortCharts(result) {\n\t\t\t\tif (!self.refs.orderedKeys) return\n\t\t\t\tconst c = self.refs.orderedKeys.chart\n\t\t\t\tresult.charts.sort(\n\t\t\t\t\t(a, b) =>\n\t\t\t\t\t\t(c.indexOf(a.chartId) == -1 ? c.indexOf(a.rawChartId) : c.indexOf(a.chartId)) -\n\t\t\t\t\t\t(c.indexOf(b.chartId) == -1 ? c.indexOf(b.rawChartId) : c.indexOf(b.chartId))\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t})\n\n\treturn pj\n}\n"],
5
- "mappings": "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",
6
- "names": ["v", "item", "chart", "s", "d", "Partjson"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/app.mdsjson.js", "../gdc/launch.ts", "../src/app.parseurl.js"],
4
- "sourcesContent": ["import * as client from './client'\n\n/*\n********************** EXPORTED\ninit_mdsjson\nvalidate_mdsjson\nget_json_tk\nget_scatterplot_data\n*/\n\nexport async function init_mdsjson(file_str, url_str) {\n\tlet json_files = [],\n\t\tjson_urls = []\n\n\tif (file_str && file_str.includes(',')) json_files = file_str.split(',')\n\telse if (file_str) json_files.push(file_str)\n\telse if (url_str && url_str.includes(',')) json_urls = url_str.split(',')\n\telse if (url_str) json_urls.push(url_str)\n\n\tconst tklst = []\n\tif (json_files.length) {\n\t\tconst json_url = undefined\n\t\tfor (const json_file of json_files) {\n\t\t\ttklst.push(await tklst_pipeline(json_file, json_url))\n\t\t}\n\t} else if (json_urls.length) {\n\t\tconst json_file = undefined\n\t\tfor (const json_url of json_urls) {\n\t\t\ttklst.push(await tklst_pipeline(json_file, json_url))\n\t\t}\n\t}\n\n\treturn tklst\n}\n\nasync function tklst_pipeline(json_file, json_url) {\n\tconst obj = await mdsjson_parse(json_file, json_url)\n\tvalidate_mdsjson(obj)\n\tconst tk = get_json_tk(obj)\n\treturn tk\n}\n\nasync function mdsjson_parse(json_file, json_url) {\n\tif (json_file !== undefined && json_file == '') throw '.jsonfile missing'\n\tif (json_url !== undefined && json_url == '') throw '.jsonurl missing'\n\n\tlet tmp\n\tif (json_file !== undefined) tmp = await client.dofetch('textfile', { file: json_file })\n\telse if (json_url !== undefined) tmp = await client.dofetch('urltextfile', { url: json_url })\n\tif (tmp.error) {\n\t\tthrow tmp.error\n\t}\n\treturn JSON.parse(tmp.text)\n}\n\nexport function validate_mdsjson(obj) {\n\tif (!obj) throw 'file is missing'\n\tif (!obj.type) throw 'dataset type is missing'\n\tconst svcnvfile = obj.svcnvfile || obj.svcnvurl\n\tconst vcffile = obj.vcffile || obj.vcfurl\n\tif (!svcnvfile && !vcffile) throw 'vcf or cnv file/url is required'\n\tif (Object.keys(obj).filter(x => x.includes('expression')).length) {\n\t\tif (!obj.expressionfile && !obj.expressionurl) throw 'expression file/url is missing'\n\t}\n\tif (Object.keys(obj).filter(x => x.includes('rnabam')).length) {\n\t\tif (!obj.rnabamfile && !obj.rnabamurl) throw 'rnabam file/url is missing'\n\t}\n\tif (obj.sampleset) {\n\t\tfor (const sample of obj.sampleset) {\n\t\t\tif (obj.sampleset.length != 1 && !sample.name) throw 'sampleset name is missing'\n\t\t\tif (!sample.samples) throw 'sampleset samples[] is missing'\n\t\t}\n\t}\n\tif (obj.sample2assaytrack) {\n\t\tfor (const [sample, assaylst] of Object.entries(obj.sample2assaytrack)) {\n\t\t\tif (!assaylst.length) throw 'assay[] missing for ' + sample\n\t\t\tfor (const assay of assaylst) {\n\t\t\t\tif (!assay.name) throw 'assay name is missing for ' + sample\n\t\t\t\tif (!assay.type) throw 'assay type is missing for ' + sample\n\t\t\t}\n\t\t}\n\t}\n\n\tif (obj.groupsamplebyattr) {\n\t\tif (!obj.groupsamplebyattr.attrlst) return '.attrlst[] missing from groupsamplebyattr'\n\t\tif (obj.groupsamplebyattr.attrlst.length == 0) return 'groupsamplebyattr.attrlst[] empty array'\n\n\t\tfor (const attr of obj.groupsamplebyattr.attrlst) {\n\t\t\tif (!attr.k) return 'k missing from one of groupsamplebyattr.attrlst[]'\n\t\t}\n\n\t\tif (obj.groupsamplebyattr.sortgroupby) {\n\t\t\tif (!obj.groupsamplebyattr.sortgroupby.key) return '.key missing from .sortgroupby'\n\t\t\tif (!obj.groupsamplebyattr.sortgroupby.order) return '.order[] missing from .sortgroupby'\n\t\t\tif (!Array.isArray(obj.groupsamplebyattr.sortgroupby.order)) return '.order must be an array'\n\t\t\t// values of order[] is not validated\n\t\t}\n\t\tif (!obj.groupsamplebyattr.attrnamespacer) obj.groupsamplebyattr.attrnamespacer = ', '\n\t}\n\n\tif (obj.fixedgeneexpression) {\n\t\tfor (const gene of obj.fixedgeneexpression) {\n\t\t\tif (!gene.gene) throw 'gene missing in fixedgeneexpression array'\n\t\t}\n\t}\n\n\t// hidden classes for vcf file\n\tif (obj.vcf) {\n\t\tif (!obj.vcf.hiddenclass) throw 'hiddenclasses[] missing from .vcf'\n\t}\n}\n\nexport function get_json_tk(tkobj) {\n\tconst track = {\n\t\ttype: tkobj.type,\n\t\tname: tkobj.name\n\t}\n\n\t// dense or full\n\tif (tkobj.isdense == 'true' || tkobj.isdense == true || tkobj.isfull === false) track.isdense = true\n\telse if (tkobj.isfull) track.isfull = true\n\n\t// svcnv file\n\tif (tkobj.svcnvfile) track.file = tkobj.svcnvfile\n\telse if (tkobj.svcnvurl) track.url = tkobj.svcnvurl\n\n\t// expressionrank\n\tif (Object.keys(tkobj).filter(x => x.includes('expression')).length) {\n\t\ttrack.checkexpressionrank = {\n\t\t\tfile: tkobj.expressionfile,\n\t\t\turl: tkobj.expressionurl\n\t\t}\n\t}\n\n\t// vcf\n\tif (Object.keys(tkobj).filter(x => x.includes('vcf')).length) {\n\t\ttrack.checkvcf = {\n\t\t\tfile: tkobj.vcffile,\n\t\t\turl: tkobj.vcfurl\n\t\t}\n\t}\n\n\t// hidden mutation classes\n\tif (tkobj.vcf) {\n\t\tif (tkobj.vcf.hiddenclass) {\n\t\t\ttrack.vcf = []\n\t\t\ttrack.vcf.hiddenclass = tkobj.vcf.hiddenclass\n\t\t}\n\t}\n\n\t// rna bam\n\tif (Object.keys(tkobj).filter(x => x.includes('rnabam')).length) {\n\t\ttrack.checkrnabam = {\n\t\t\tfile: tkobj.rnabamfile,\n\t\t\turl: tkobj.rnabamurl\n\t\t}\n\t}\n\n\t// sampleset\n\tif (tkobj.sampleset) {\n\t\ttrack.sampleset = tkobj.sampleset\n\t}\n\n\t// SampleAssayTrack\n\tif (tkobj.sample2assaytrack) {\n\t\ttrack.sample2assaytrack = tkobj.sample2assaytrack\n\t}\n\n\tif (tkobj.groupsamplebyattr) {\n\t\ttrack.groupsamplebyattr = tkobj.groupsamplebyattr\n\t}\n\n\t// fixed panel of gene expression\n\ttrack.fixedgeneexpression = tkobj.fixedgeneexpression\n\t// show all samples\n\ttrack.getallsamples = tkobj.getallsamples\n\n\t// cnv cutoff settings\n\ttrack.valueCutoff = tkobj.cnvValueCutoff !== undefined ? tkobj.cnvValueCutoff : undefined\n\ttrack.bplengthUpperLimit = tkobj.cnvLengthUpperLimit !== undefined ? tkobj.cnvLengthUpperLimit : undefined\n\n\t// loh cutoff settings\n\ttrack.segmeanValueCutoff = tkobj.segmeanValueCutoff !== undefined ? tkobj.segmeanValueCutoff : undefined\n\ttrack.lohLengthUpperLimit = tkobj.lohLengthUpperLimit !== undefined ? tkobj.lohLengthUpperLimit : undefined\n\n\t// multihide labels\n\ttrack.multihidelabel_vcf = tkobj.multihidelabel_vcf !== undefined ? tkobj.multihidelabel_vcf : undefined\n\ttrack.multihidelabel_fusion = tkobj.multihidelabel_fusion !== undefined ? tkobj.multihidelabel_fusion : undefined\n\ttrack.multihidelabel_sv = tkobj.multihidelabel_sv !== undefined ? tkobj.multihidelabel_sv : undefined\n\n\ttrack.legend_vorigin = tkobj.legend_vorigin\n\n\treturn track\n}\n\nexport async function get_scatterplot_data(json_file, json_url) {\n\tlet data = {}\n\tconst obj = await mdsjson_parse(json_file, json_url)\n\tdata.mdssamplescatterplot = obj\n\treturn data\n}\n", "/* launch from runpp() call. GDC react wrappers in the GFF repo use this method, to launch apps in gdc portal\non matching with a flag, imports corresponding plot script, and returns api object to runpp()\nwhen no flags are matched, returns undefined\n*/\nexport async function mayLaunchGdcPlotFromRunpp(arg, app) {\n\tif (arg.geneSearch4GDCmds3) {\n\t\tconst _ = await import('./lollipop.js')\n\t\treturn await _.init(arg, app.holder0, app.genomes)\n\t}\n\tif (arg.launchGdcGb) {\n\t\tconst _ = await import('./gb.ts')\n\t\treturn await _.init(arg, app.holder0, app.genomes)\n\t}\n\tif (arg.launchGdcMatrix) {\n\t\tconst _ = await import('./oncomatrix.js')\n\t\treturn await _.init(arg, app.holder0, app.genomes)\n\t}\n\tif (arg.launchGdcHierCluster) {\n\t\tconst _ = await import('./geneExpClustering.js')\n\t\treturn await _.init(arg, app.holder0, app.genomes)\n\t}\n\tif (arg.launchGdcMaf) {\n\t\tconst _ = await import('./maf.js')\n\t\treturn await _.gdcMAFui(arg, app.holder0)\n\t}\n\tif (arg.launchGdcGrin2) {\n\t\tconst _ = await import('./grin2.ts')\n\t\treturn await _.gdcGRIN2ui(arg, app.holder0, app.genomes)\n\t}\n\tif (arg.launchGdcScRNAseq) {\n\t\tconst _ = await import('./singlecell.ts')\n\t\treturn await _.init(arg, app.holder0, app.genomes)\n\t}\n\tif (arg.launchGdcScApp) {\n\t\tconst _ = await import('./sc.ts')\n\t\treturn await _.init(arg, app.holder0, app.genomes)\n\t}\n\tif (arg.launchGdcCorrelation) {\n\t\tconst _ = await import('./correlation.ts')\n\t\treturn await _.init(arg, app.holder0, app.genomes)\n\t}\n\tif (arg.launchGdcDE) {\n\t\tconst _ = await import('./DE.ts')\n\t\treturn await _.init(arg, app.holder0, app.genomes)\n\t}\n\tif (arg.gdcbamslice) {\n\t\tconst _ = await import('./bam.js')\n\t\targ.gdcbamslice.filter0 = arg.filter0\n\t\treturn await _.bamsliceui(arg.gdcbamslice, app.holder0, app.genomes)\n\t}\n}\n\n/* launch from url param; this is for local testing and not used in gdc portal\nreturns true for a match\n*/\nexport async function mayLaunchGdcPlotFromUrlparam(urlp, arg) {\n\tif (urlp.has('gdcbamslice')) {\n\t\t// for local testing, not used in gdc portal\n\t\tconst _ = await import('./bam.js')\n\t\t_.bamsliceui(\n\t\t\t{\n\t\t\t\tdebugmode: arg.debugmode,\n\t\t\t\tstream2download: urlp.has('stream2download') // for testing only, launch the app in \"download mode\", will not visualize\n\t\t\t} as any,\n\t\t\targ.holder,\n\t\t\targ.genomes\n\t\t)\n\t\treturn true\n\t}\n\tif (urlp.has('gdcmaf')) {\n\t\t// for local testing, not used in gdc portal\n\t\tconst _ = await import('./maf.js')\n\t\tconst p: any = {\n\t\t\tdebugmode: arg.debugmode\n\t\t}\n\t\tif (urlp.has('filter0')) p.filter0 = urlp.get('filter0')\n\t\t_.gdcMAFui(p, arg.holder)\n\t\treturn true\n\t}\n\tif (urlp.has('gdcgrin2')) {\n\t\t// for local testing, not used in gdc portal\n\t\tconst _ = await import('./grin2.ts')\n\t\tconst p: any = {\n\t\t\tdebugmode: arg.debugmode\n\t\t}\n\t\tif (urlp.has('filter0')) p.filter0 = urlp.get('filter0')\n\t\t_.gdcGRIN2ui(p, arg.holder, arg.genomes)\n\t\treturn true\n\t}\n\tif (urlp.has('gdccorrelation')) {\n\t\t// for local testing, not used in gdc portal\n\t\tconst _ = await import('./correlation.ts')\n\t\tconst p: any = {\n\t\t\tdebugmode: arg.debugmode\n\t\t}\n\t\tif (urlp.has('filter0')) p.filter0 = urlp.get('filter0')\n\t\t_.init(p, arg.holder, arg.genomes)\n\t\treturn true\n\t}\n}\n", "import blockinit from './block.init'\nimport * as client from './client'\nimport { loadstudycohort } from './tp.init'\nimport { string2pos } from './coord'\nimport * as mdsjson from './app.mdsjson'\nimport { getSavedToken } from '#common/dofetch'\nimport urlmap from '#common/urlmap'\nimport { first_genetrack_tolist } from '#common/1stGenetk'\nimport { parentCorsMessage, childCorsMessage } from '#common/embedder-helpers'\nimport { sayerror } from '#dom'\nimport { copyMerge } from '#rx'\nimport { mayLaunchGdcPlotFromUrlparam } from '../gdc/launch.ts'\n/*\n********************** EXPORTED\nparse()\nget_tklst()\n*/\n\nexport async function parse(arg) {\n\t/*\narg\n\t.jwt\n\t.genomes{}\n\t.hostURL\n\t.variantPageCall_snv\n\t.samplecart\n\t.holder\n\t.debugmode\n\nupon error, throw err message as a string\n*/\n\tconst urlp = urlmap()\n\tconst features = JSON.parse(sessionStorage.getItem('optionalFeatures'))\n\n\tif (urlp.has('appcard')) {\n\t\tconst ad = await import('../appdrawer/adSandbox')\n\t\tconst cardJsonFile = urlp.get('appcard')\n\t\tconst example = urlp.get('example')\n\t\tconst re = await client.dofetch2('/cards/index.json')\n\t\targ.app.drawer.opts.genomes = arg.genomes\n\t\targ.app.drawer.opts.fromApp = true\n\t\t//Quick fix to launch the sandbox within the current openSandbox code\n\t\targ.app.drawer.opts.app = {\n\t\t\tcardsPath: 'cards'\n\t\t}\n\t\tconst element = re.elements.findIndex(\n\t\t\tt =>\n\t\t\t\tt.sandboxJson == cardJsonFile ||\n\t\t\t\tt.sandboxHtml == cardJsonFile ||\n\t\t\t\tt.name.toUpperCase().includes(cardJsonFile.toUpperCase())\n\t\t)\n\n\t\t//Check if track/app can be shown on this server\n\t\t//If not show error message\n\t\tif (re.elements[element]?.configFeature) {\n\t\t\tif (!features[re.elements[element].configFeature]) {\n\t\t\t\tsayerror(arg.holder, `This track or app is not enabled on this site.`)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tif (example) {\n\t\t\targ.app.drawer.opts.example = example\n\t\t}\n\n\t\tif (element <= 0) {\n\t\t\tconst nestedCards = [...re.elements.filter(e => e.type == 'nestedCard')]\n\t\t\tlet element, c\n\t\t\tnestedCards.findIndex(t => {\n\t\t\t\tfor (const [i, child] of t.children.entries()) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tchild.sandboxJson == cardJsonFile ||\n\t\t\t\t\t\tchild.sandboxHtml == cardJsonFile ||\n\t\t\t\t\t\tchild.name.toUpperCase().includes(cardJsonFile.toUpperCase())\n\t\t\t\t\t) {\n\t\t\t\t\t\telement = t\n\t\t\t\t\t\tc = i\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\tif (!element) {\n\t\t\t\tsayerror(arg.holder, `Invalid app card.`)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tad.openSandbox(element.children[c], arg.app.drawer.opts)\n\t\t} else {\n\t\t\tad.openSandbox(re.elements[element], arg.app.drawer.opts)\n\t\t}\n\t\treturn\n\t}\n\n\tif (await mayLaunchGdcPlotFromUrlparam(urlp, arg)) return // gdc plot launched\n\n\tif (urlp.has('termdb')) {\n\t\tconst value = urlp.get('termdb')\n\t\tconst state = typeof value === 'string' ? JSON.parse(value) : value\n\t\tconst opts = {\n\t\t\tholder: arg.holder,\n\t\t\tstate: copyMerge(state, arg.state || {})\n\t\t}\n\t\tconst _ = await import('../termdb/app')\n\t\tconst subapp = _.appInit(opts)\n\t\treturn subapp\n\t}\n\n\tif (urlp.has('massnative')) {\n\t\t/* ?massnative=hg38-test,TermdbTest\n\t\talternative url for mass={\"genome\":\"hg38-test\",\"dslabel\":\"TermdbTest\"}\n\t\ttidier to include in manuscript\n\t\tno customization supported, though later additional fields may be appended to customize something\n\t\tit is intended that the dataset should carry essential customizations so the link opens mass ui with expected customizations\n\t\t*/\n\t\tconst value = urlp.get('massnative')\n\t\tconst [genomename, dslabel] = value.split(',')\n\t\tif (!genomename || !dslabel) throw 'value is not \"genome,dslabel\"'\n\t\tconst opts = {\n\t\t\tholder: arg.holder,\n\t\t\tgenome: arg.genomes[genomename],\n\t\t\tstate: copyMerge(\n\t\t\t\t{\n\t\t\t\t\tgenome: genomename,\n\t\t\t\t\tdslabel\n\t\t\t\t},\n\t\t\t\targ.state || {}\n\t\t\t),\n\t\t\tpkgver: arg.app.pkgver,\n\t\t\tlaunchDate: arg.app.launchDate\n\t\t}\n\t\tif (!opts.genome) throw 'invalid genome'\n\t\tchildCorsMessage(opts)\n\n\t\tconst _ = await import('../mass/app')\n\t\tconst subapp = await _.appInit(opts)\n\t\treturn subapp\n\t}\n\n\tif (urlp.has('mass')) {\n\t\tconst value = urlp.get('mass')\n\t\tconst state = typeof value === 'string' ? JSON.parse(value) : value\n\t\tconst opts = {\n\t\t\tdebug: arg.app.debugmode,\n\t\t\tholder: arg.holder,\n\t\t\tstate: copyMerge(state, arg.state || {}),\n\t\t\tpkgver: arg.app.pkgver,\n\t\t\tlaunchDate: arg.app.launchDate\n\t\t}\n\t\tif (state.genome) {\n\t\t\topts.genome = arg.genomes[state.genome]\n\t\t} else if (state?.vocab?.genome) {\n\t\t\topts.genome = arg.genomes[state.vocab.genome]\n\t\t}\n\t\tchildCorsMessage(opts)\n\n\t\tconst _ = await import('../mass/app')\n\t\tconst subapp = await _.appInit(opts)\n\t\treturn subapp\n\t}\n\n\tif (urlp.has('mass-session-file') || urlp.has('mass-session-url')) {\n\t\tlet opts\n\t\tif (urlp.has('mass-session-file')) {\n\t\t\tconst file = urlp.get('mass-session-file')\n\t\t\tconst d = await client.dofetch3(`/textfile`, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\tbody: JSON.stringify({ file })\n\t\t\t})\n\t\t\tif (typeof d != 'object') throw 'data not object'\n\t\t\tif (d.error) throw d.error\n\t\t\tif (!d.text) throw 'data.text missing'\n\t\t\tconst state = JSON.parse(d.text)\n\n\t\t\tif (features.overrideEmbedderHostInMassSession) {\n\t\t\t\t// on local dev, set this to override \"embedder{}\" setting in session file\n\t\t\t\t// to prevent redirecting to portal site and test the session with local pp\n\t\t\t\tstate.embedder.host = features.overrideEmbedderHostInMassSession\n\t\t\t\tstate.embedder.origin = 'http://' + features.overrideEmbedderHostInMassSession\n\t\t\t\tstate.embedder.href = `http://${features.overrideEmbedderHostInMassSession}/`\n\t\t\t}\n\n\t\t\tif (state.embedder?.origin && state.embedder.origin != window.location.origin) {\n\t\t\t\tparentCorsMessage({ state })\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\topts = {\n\t\t\t\tdebug: arg.app.debugmode,\n\t\t\t\tholder: arg.holder,\n\t\t\t\tstate,\n\t\t\t\tgenome: arg.genomes[state.vocab.genome],\n\t\t\t\tpkgver: arg.app.pkgver,\n\t\t\t\tlaunchDate: arg.app.launchDate\n\t\t\t}\n\t\t} else if (urlp.has('mass-session-url')) {\n\t\t\tconst url = urlp.get('mass-session-url')\n\t\t\tconst d = await client.dofetch3('/urltextfile', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\tbody: JSON.stringify({ url })\n\t\t\t})\n\t\t\tif (typeof d != 'object') throw 'data not object'\n\t\t\tif (d.error) throw d.error\n\t\t\tif (!d.text) throw 'data.text missing'\n\t\t\tconst state = JSON.parse(d.text)\n\n\t\t\tif (state.embedder?.origin && state.embedder.origin != window.location.origin) {\n\t\t\t\tparentCorsMessage({ state })\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\topts = {\n\t\t\t\tdebug: arg.app.debugmode,\n\t\t\t\tholder: arg.holder,\n\t\t\t\tstate: copyMerge(state, arg.state || {}),\n\t\t\t\tgenome: arg.genomes[state.vocab.genome],\n\t\t\t\tpkgver: arg.app.pkgver,\n\t\t\t\tlaunchDate: arg.app.launchDate\n\t\t\t}\n\t\t}\n\t\tconst _ = await import('../mass/app')\n\t\tconst subapp = _.appInit(opts)\n\t\treturn subapp\n\t}\n\n\tif (urlp.has('mass-session-id')) {\n\t\tconst id = urlp.get('mass-session-id')\n\t\tconst src = urlp.get('src')\n\t\tlet res\n\t\tif (src == 'browser') {\n\t\t\tconst json = localStorage.getItem('savedMassSessions')\n\t\t\tconst savedSessions = JSON.parse(json)\n\t\t\tres = { state: savedSessions[id] }\n\t\t} else {\n\t\t\tconst fetchOpts = { headers: {}, body: { id } }\n\t\t\tif (src == 'cred') {\n\t\t\t\tconst dslabel = urlp.get('dslabel')\n\t\t\t\tconst route = urlp.get('route')\n\t\t\t\tfetchOpts.body.dslabel = dslabel\n\t\t\t\tfetchOpts.body.route = route\n\t\t\t\tfetchOpts.body.route = route\n\t\t\t\tconst jwt = getSavedToken(dslabel, route)\n\t\t\t\tif (jwt) fetchOpts.headers.authorization = `Bearer ${btoa(jwt)}`\n\t\t\t}\n\t\t\tres = await client.dofetch3(`/massSession`, fetchOpts)\n\t\t\tif (res.error) throw res.error\n\t\t}\n\t\tconst embedder = res.state?.embedder\n\t\tif (embedder?.origin && embedder.origin != window.location.origin) {\n\t\t\tparentCorsMessage(res)\n\t\t\treturn\n\t\t}\n\t\tconst opts = {\n\t\t\tdebug: arg.app.debugmode,\n\t\t\tholder: arg.holder,\n\t\t\tstate: copyMerge(res.state, arg.state || {}),\n\t\t\tgenome: arg.genomes[res.state.vocab.genome],\n\t\t\tsessionDaysLeft: res.sessionDaysLeft,\n\t\t\tsessionId: id,\n\t\t\tpkgver: arg.app.pkgver,\n\t\t\tlaunchDate: arg.app.launchDate\n\t\t}\n\t\tconst _ = await import('../mass/app')\n\t\tconst subapp = _.appInit(opts)\n\t\treturn subapp\n\t}\n\n\tif (urlp.has('genome') && arg.selectgenome) {\n\t\tconst n = urlp.get('genome')\n\t\tconst genome_options = [...arg.selectgenome.node().childNodes]\n\t\tconst selectedIndex = genome_options.findIndex(d => d.value == n)\n\t\tif (selectedIndex == -1) {\n\t\t\tsayerror(\n\t\t\t\targ.holder,\n\t\t\t\t`Invalid genome: ${n}. Please provide an available genome from this list: ${genome_options\n\t\t\t\t\t.map(d => d.value)\n\t\t\t\t\t.join(', ')\n\t\t\t\t\t.replace(/,(?=[^,]*$)/, ', or')}`\n\t\t\t)\n\t\t\treturn\n\t\t}\n\t\targ.selectgenome.node().selectedIndex = selectedIndex\n\t\targ.selectgenome.node().dispatchEvent(new Event('change'))\n\t}\n\n\tif (urlp.has('hicfile') || urlp.has('hicurl')) {\n\t\t// whole-genome view\n\t\tlet file, url, name\n\t\tif (urlp.has('hicfile')) {\n\t\t\tfile = urlp.get('hicfile')\n\t\t\tname = file.split('/').pop()\n\t\t} else {\n\t\t\turl = urlp.get('hicurl')\n\t\t\tname = url.split('/').pop()\n\t\t}\n\t\tconst gn = urlp.get('genome')\n\t\tif (!gn) throw 'genome is required for hic'\n\t\tconst genome = arg.genomes[gn]\n\t\tif (!genome) throw 'invalid genome'\n\t\tconst hic = {\n\t\t\tgenome,\n\t\t\tfile,\n\t\t\turl,\n\t\t\tname, //.basename(file || url),\n\t\t\thostURL: arg.hostURL,\n\t\t\tenzyme: urlp.get('enzyme'),\n\t\t\tholder: arg.holder\n\t\t}\n\t\tconst _ = await import('../tracks/hic/HicApp')\n\t\tawait _.hicInit(hic)\n\t\treturn\n\t}\n\n\t//////////// legacy, may be replaced by sampleScatter, kept for existing views on vizcom\n\tif (urlp.has('singlecell')) {\n\t\tif (!urlp.has('genome')) throw '\"genome\" is required for \"singlecell\"'\n\t\tconst genomename = urlp.get('genome')\n\t\tconst genomeobj = arg.genomes[genomename]\n\t\tif (!genomeobj) throw 'invalid genome: ' + genomename\n\n\t\tconst _ = await import('./singlecell')\n\t\t_.init(\n\t\t\t{\n\t\t\t\tgenome: genomeobj,\n\t\t\t\tjsonfile: urlp.get('singlecell')\n\t\t\t},\n\t\t\targ.holder\n\t\t)\n\t\treturn\n\t}\n\n\tif (urlp.has('mavbfile')) {\n\t\tif (!urlp.has('genome')) throw '\"genome\" is required for \"mavb\"'\n\t\tconst genomename = urlp.get('genome')\n\t\tconst genome = arg.genomes[genomename]\n\t\tif (!genome) throw 'invalid genome: ' + genomename\n\t\tconst _ = await import('./mavb')\n\t\t_.mavbparseinput(\n\t\t\t{\n\t\t\t\tgenome,\n\t\t\t\thostURL: arg.hostURL,\n\t\t\t\tfile: urlp.get('mavbfile')\n\t\t\t},\n\t\t\t() => {},\n\t\t\targ.holder,\n\t\t\targ.jwt\n\t\t)\n\t\treturn\n\t}\n\n\tif (urlp.has('mavburl')) {\n\t\tif (!urlp.has('genome')) throw '\"genome\" is required for \"mavb\"'\n\t\tconst genomename = urlp.get('genome')\n\t\tconst genome = arg.genomes[genomename]\n\t\tif (!genome) throw 'invalid genome: ' + genomename\n\t\tconst _ = await import('./mavb')\n\t\t_.mavbparseinput(\n\t\t\t{\n\t\t\t\tgenome,\n\t\t\t\thostURL: arg.hostURL,\n\t\t\t\turl: urlp.get('mavburl')\n\t\t\t},\n\t\t\t() => {},\n\t\t\targ.holder,\n\t\t\targ.jwt\n\t\t)\n\t\treturn\n\t}\n\n\t//////////// legacy, replaced by sampleScatter (just need to support adhoc data), kept for existing views on vizcom\n\tif (urlp.has('scatterplot')) {\n\t\tif (!urlp.has('genome')) throw '\"genome\" is required for \"scatterplot\"'\n\t\tconst genomename = urlp.get('genome')\n\t\tconst genome = arg.genomes[genomename]\n\t\tif (!genome) throw 'invalid genome: ' + genomename\n\n\t\tlet plot_data\n\t\tif (urlp.has('mdsjson') || urlp.has('mdsjsonurl')) {\n\t\t\tconst url_str = urlp.get('mdsjsonurl')\n\t\t\tconst file_str = urlp.get('mdsjson')\n\t\t\tplot_data = await mdsjson.get_scatterplot_data(file_str, url_str)\n\t\t}\n\t\tif (urlp.has('tsnejson')) {\n\t\t\tconst file_str = urlp.get('tsnejson')\n\t\t\tconst data = await client.dofetch('textfile', { file: file_str })\n\t\t\tif (data.error) throw data.error\n\t\t\telse if (data.text) {\n\t\t\t\tplot_data = {\n\t\t\t\t\tmdssamplescatterplot: {\n\t\t\t\t\t\tanalysisdata: JSON.parse(data.text)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if genome is defined in url, pass it to samplescatterplot\n\t\tplot_data.mdssamplescatterplot.genome = genome\n\t\tconst _ = await import('./mds.samplescatterplot')\n\t\t_.init(plot_data.mdssamplescatterplot, arg.holder, false)\n\t\treturn\n\t}\n\n\tif (urlp.has('block')) {\n\t\tif (!urlp.has('genome')) throw 'missing genome for block'\n\t\tconst genomename = urlp.get('genome')\n\t\tconst genomeobj = arg.genomes[genomename]\n\t\tif (!genomeobj) throw 'invalid genome: ' + genomename\n\n\t\tconst par = {\n\t\t\tnobox: 1,\n\t\t\thostURL: arg.hostURL,\n\t\t\tjwt: arg.jwt,\n\t\t\tholder: arg.holder,\n\t\t\tgenome: genomeobj,\n\t\t\tdogtag: genomename,\n\t\t\tdebugmode: arg.debugmode\n\t\t}\n\n\t\tlet position = null\n\t\tlet rglst = null\n\n\t\tif (urlp.has('position')) {\n\t\t\t// can be multiple regions joined by ;\n\t\t\t// first region is main panel, rest of regions are subpanels\n\n\t\t\tconst lst = urlp.get('position').split(';')\n\t\t\tif (lst[0]) {\n\t\t\t\t// if first region is blank, do not parse; it will be assigned with defaultcoord\n\t\t\t\tconst tmp = lst[0].split(/[:-]/)\n\t\t\t\tconst chr = tmp[0]\n\t\t\t\tconst start = Number.parseInt(tmp[1])\n\t\t\t\tconst stop = Number.parseInt(tmp[2])\n\t\t\t\tif (!chr) throw 'chr missing'\n\t\t\t\tif (Number.isNaN(start) || Number.isNaN(stop)) throw 'Invalid start/stop value in position'\n\t\t\t\t// valid position\n\t\t\t\tposition = { chr, start, stop }\n\t\t\t}\n\n\t\t\tconst subpanels = [] // collect rest of regions into this array\n\t\t\tfor (let i = 1; i < lst.length; i++) {\n\t\t\t\tif (!lst[i]) continue // skip blank string\n\t\t\t\tconst tmp = lst[i].split(/[:-]/)\n\t\t\t\tconst chr = tmp[0]\n\t\t\t\tconst start = Number.parseInt(tmp[1])\n\t\t\t\tconst stop = Number.parseInt(tmp[2])\n\t\t\t\tif (!chr) throw 'subpanel chr missing'\n\t\t\t\tif (Number.isNaN(start) || Number.isNaN(stop)) throw 'Invalid start/stop value in subpanel position'\n\t\t\t\t// valid pos\n\t\t\t\tsubpanels.push({\n\t\t\t\t\tchr,\n\t\t\t\t\tstart,\n\t\t\t\t\tstop,\n\t\t\t\t\twidth: 600,\n\t\t\t\t\tleftborder: 'rgba(200,0,0,.1)',\n\t\t\t\t\tleftpad: 5\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (subpanels.length) {\n\t\t\t\t// has valid subpanels\n\t\t\t\tpar.subpanels = subpanels\n\t\t\t}\n\t\t}\n\n\t\tif (urlp.has('regions')) {\n\t\t\t// for a different purpose than \"position=\"\n\t\t\t// all regions here are shown in one view and scroll together, as in gmmode. it does not introduce subpanels\n\t\t\trglst = []\n\t\t\tfor (const s of urlp.get('regions').split(',')) {\n\t\t\t\tconst l = s.split(/[:-]/)\n\t\t\t\tconst chr = l[0]\n\t\t\t\tconst start = Number.parseInt(l[1])\n\t\t\t\tconst stop = Number.parseInt(l[2])\n\t\t\t\tif (Number.isNaN(start) || Number.isNaN(stop)) throw 'Invalid start/stop value in regions'\n\t\t\t\trglst.push({ chr: l[0], start: start, stop: stop })\n\t\t\t}\n\t\t}\n\n\t\tif (!position && !rglst) {\n\t\t\t// no position given, use default\n\t\t\tif (genomeobj.defaultcoord) {\n\t\t\t\tposition = {\n\t\t\t\t\tchr: genomeobj.defaultcoord.chr,\n\t\t\t\t\tstart: genomeobj.defaultcoord.start,\n\t\t\t\t\tstop: genomeobj.defaultcoord.stop\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (position) {\n\t\t\tpar.chr = position.chr\n\t\t\tpar.start = position.start\n\t\t\tpar.stop = position.stop\n\t\t} else if (rglst) {\n\t\t\tpar.rglst = rglst\n\t\t}\n\n\t\tif (urlp.has('hlregion')) {\n\t\t\tconst lst = []\n\t\t\tfor (const t of urlp.get('hlregion').split(',')) {\n\t\t\t\tconst pos = string2pos(t, genomeobj, true)\n\t\t\t\tif (pos) lst.push(pos)\n\t\t\t}\n\t\t\tif (lst.length) par.hlregions = lst\n\t\t}\n\n\t\tpar.datasetqueries = may_get_officialmds(urlp)\n\n\t\tpar.tklst = await get_tklst(urlp, genomeobj)\n\n\t\tfirst_genetrack_tolist(arg.genomes[genomename], par.tklst)\n\n\t\tmayAddBedjfilterbyname(urlp, par.tklst)\n\t\tconst b = await import('./block')\n\t\tnew b.Block(par)\n\t\treturn\n\t}\n\n\tif (urlp.has('gene')) {\n\t\tconst str = urlp.get('gene')\n\t\tif (str.length == 0) throw 'zero length query string'\n\t\tconst par = {\n\t\t\thostURL: arg.hostURL,\n\t\t\tquery: str,\n\t\t\tholder: arg.holder,\n\t\t\tvariantPageCall_snv: arg.variantPageCall_snv,\n\t\t\tsamplecart: arg.samplecart,\n\t\t\tdebugmode: arg.debugmode\n\t\t}\n\t\t{\n\t\t\tlet genomename\n\t\t\tfor (let n in arg.genomes) {\n\t\t\t\tif (arg.genomes[n].isdefault) {\n\t\t\t\t\tgenomename = n\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (urlp.has('genome')) {\n\t\t\t\tgenomename = urlp.get('genome')\n\t\t\t}\n\t\t\tif (!genomename) throw 'No genome, and none set as default'\n\t\t\tpar.genome = arg.genomes[genomename]\n\t\t\tif (!par.genome) throw 'invalid genome: ' + genomename\n\t\t}\n\t\tlet ds = null\n\t\tif (urlp.has('dataset')) {\n\t\t\tpar.dataset = urlp.get('dataset').split(',')\n\t\t}\n\t\tif (urlp.has('hlaachange')) {\n\t\t\tpar.hlaachange = new Map()\n\t\t\tfor (const s of urlp.get('hlaachange').split(',')) {\n\t\t\t\tpar.hlaachange.set(s, false)\n\t\t\t}\n\t\t}\n\t\tif (urlp.has('hlregion')) {\n\t\t\tconst lst = []\n\t\t\tfor (const t of urlp.get('hlregion').split(',')) {\n\t\t\t\tconst pos = string2pos(t, par.genome, true)\n\t\t\t\tif (pos) lst.push(pos)\n\t\t\t}\n\t\t\tif (lst.length) par.hlregions = lst\n\t\t}\n\t\tif (urlp.has('aarange')) {\n\t\t\tconst [a, b] = urlp.get('aarange').split(',').map(Number)\n\t\t\tif (Number.isInteger(a) && Number.isInteger(b) && a > 0 && b > a) {\n\t\t\t\tpar.aarange = [a, b]\n\t\t\t} else {\n\t\t\t\tthrow 'invalid aarange'\n\t\t\t}\n\t\t}\n\n\t\tpar.tklst = await get_tklst(urlp, par.genome)\n\n\t\tmayAddBedjfilterbyname(urlp, par.tklst)\n\n\t\tpar.datasetqueries = may_get_officialmds(urlp)\n\t\tawait blockinit(par)\n\t\treturn\n\t}\n\n\tif (urlp.has('disco')) {\n\t\t// a direct link to make manual testing easy\n\t\tconst genomeName = urlp.get('genome')\n\t\tconst genome = arg.genomes[genomeName]\n\t\tif (!genome) throw 'genome missing'\n\t\tconst dslabel = urlp.get('dslabel')\n\t\tif (!dslabel) throw 'dslabel missing'\n\t\tconst sample_id = urlp.get('sample')\n\t\tif (!sample_id) throw 'sample_id missing'\n\t\tconst vocabApi = (await import('#termdb/vocabulary')).vocabInit({ state: { genome: genomeName, dslabel } })\n\t\tconst termdbConfig = await vocabApi.getTermdbConfig()\n\t\tawait (await import('#plots/plot.disco.js')).default(termdbConfig, dslabel, { sample_id }, arg.holder, genome)\n\t\treturn\n\t}\n\n\t///////////// legacy, totally replaced by mass. kept for some views on vizcom\n\tif (urlp.has('study')) {\n\t\tconst v = urlp.get('study')\n\t\tif (v != '') {\n\t\t\tloadstudycohort(\n\t\t\t\targ.genomes,\n\t\t\t\tv,\n\t\t\t\targ.holder,\n\t\t\t\targ.hostURL,\n\t\t\t\tundefined, // jwt\n\t\t\t\tfalse, // no show\n\t\t\t\targ.app || {\n\t\t\t\t\tdebugmode: arg.debugmode,\n\t\t\t\t\tinstanceTracker: arg.instanceTracker || {},\n\t\t\t\t\tcallbacks: arg.callbacks || {}\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\t}\n}\n\nfunction may_get_officialmds(urlp) {\n\tif (!urlp.has('mds')) return\n\tconst tmp = urlp.get('mds').split(',')\n\tif (tmp[0] && tmp[1]) {\n\t\tconst dataset = { dataset: tmp[0], querykey: tmp[1] }\n\t\tif (urlp.has('sample')) {\n\t\t\tdataset.singlesample = { name: urlp.get('sample') }\n\t\t\t// quick fix!!\n\t\t\t// tell mds_load_query_bykey to load assay tracks in this context, but will not do so if launching sample view from main tk\n\t\t\tdataset.getsampletrackquickfix = true\n\t\t}\n\t\treturn [dataset]\n\t}\n\treturn\n}\n\nexport async function get_tklst(urlp, genomeobj) {\n\tconst tklst = []\n\n\tfor (const [key, value] of urlp) {\n\t\tconst tks = await mayGetTkobj(key, value, urlp, genomeobj)\n\t\tif (!tks) continue // no tkobj derived, parameter doesn't match with anything\n\t\tif (Array.isArray(tks)) tklst.push(...tks)\n\t\telse tklst.push(tks)\n\t}\n\n\tfor (const t of tklst) {\n\t\t// uncertain reason why all tk are labeled as custom\n\t\t// the mds3 tk has \"dslabel\" and should be official, do not label as custom, so in block.tk.menu won't show the delete button\n\t\tif (t.type == 'mds3' && t.dslabel) continue\n\t\tt.iscustom = true\n\t}\n\n\t// quick fix to modify behaviors of mds tracks collected through parameters\n\t// if isdense=1, turn to dense\n\t// if sample=..., change to a single sample track\n\tif (urlp.has('isdense')) {\n\t\ttklst\n\t\t\t.filter(t => t.type == client.tkt.mdssvcnv)\n\t\t\t.forEach(t => {\n\t\t\t\tt.isdense = true\n\t\t\t\tt.isfull = false\n\t\t\t})\n\t}\n\tif (urlp.has('sample')) {\n\t\ttklst\n\t\t\t.filter(t => t.type == client.tkt.mdssvcnv)\n\t\t\t.forEach(t => {\n\t\t\t\tt.singlesample = { name: urlp.get('sample') }\n\t\t\t\tt.getsampletrackquickfix = true\n\t\t\t\t// XXX this doesn't work to load assay tracks for a custom mds, can only load for official mds\n\t\t\t\t// for both custom and official, the expression rank track is not loaded.\n\t\t\t})\n\t}\n\treturn tklst\n}\n\n/*\nreturns:\n- object for one successfully parsed track\n- array for multiple track objects, could be empty!\n- null for no tracks\n*/\nexport async function mayGetTkobj(key, value, urlp, genomeobj) {\n\tif (key == 'mds3') {\n\t\t// official mds3 dataset; value is comma-joined dslabels\n\t\tconst lst = value.split(',')\n\t\tconst tks = []\n\t\tfor (const n of lst) {\n\t\t\tconst tk = {\n\t\t\t\ttype: client.tkt.mds3,\n\t\t\t\tdslabel: n\n\t\t\t}\n\t\t\tif (urlp.has('token')) tk.token = urlp.get('token') // temporary\n\t\t\tif (urlp.has('filterobj')) tk.filterObj = urlp.get('filterobj')\n\t\t\tif (urlp.has('filter0')) tk.filter0 = urlp.get('filter0')\n\t\t\tif (urlp.has('cnvonly')) tk.hardcodeCnvOnly = true // for testing cnv-only mode via url param; in actual use this flag should be set in runpp()\n\t\t\tif (urlp.has('snvindelonly')) tk.snvIndelOnly = true // for testing snvindel-only mode\n\t\t\ttks.push(tk)\n\t\t}\n\t\treturn tks\n\t}\n\n\tif (key == 'mds3bcffile') {\n\t\t// \"name,path\" pairs to server-side vcf files\n\t\tconst [tkname, bcffile] = value.split(',')\n\t\tlet tk\n\t\tif (tkname && bcffile) {\n\t\t\ttk = {\n\t\t\t\ttype: client.tkt.mds3,\n\t\t\t\tname: tkname,\n\t\t\t\tbcf: { file: bcffile }\n\t\t\t}\n\t\t}\n\t\treturn tk\n\t}\n\tif (key == 'mds3bcfurl') {\n\t\t// \"name,url,indexURL\" to remote file. indexURL is optional when the index file is not co-locating with the bcf file\n\t\tconst [tkname, url, indexURL] = value.split(',')\n\t\tlet tk\n\t\tif (tkname && url) {\n\t\t\ttk = {\n\t\t\t\ttype: client.tkt.mds3,\n\t\t\t\tname: tkname,\n\t\t\t\tbcf: { url, indexURL }\n\t\t\t}\n\t\t}\n\t\treturn tk\n\t}\n\n\tif (key == 'arcfile') {\n\t\tconst lst = value.split(',')\n\t\tconst tks = []\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\ttks.push({\n\t\t\t\t\ttype: client.tkt.hicstraw,\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\tbedfile: lst[i + 1],\n\t\t\t\t\tmode_hm: false,\n\t\t\t\t\tmode_arc: true\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn tks\n\t}\n\n\tif (key == 'mdsjson' || key == 'mdsjsonurl') {\n\t\tlet url_str, file_str\n\t\tif (key == 'mdsjson') file_str = value\n\t\telse url_str = value\n\t\treturn await mdsjson.init_mdsjson(file_str, url_str)\n\t}\n\n\tif (key == 'tkjsonfile') {\n\t\tconst re = await client.dofetch('textfile', { file: value })\n\t\tif (re.error) throw re.error\n\t\tif (!re.text) throw '.text missing'\n\t\tconst lst = JSON.parse(re.text)\n\t\tconst tks = []\n\t\tfor (const i of lst) {\n\t\t\tif (i.isfacet) {\n\t\t\t\tif (!genomeobj.tkset) genomeobj.tkset = []\n\t\t\t\tif (!i.tracks) throw '.tracks[] missing from a facet table'\n\t\t\t\tif (!Array.isArray(i.tracks)) throw '.tracks[] not an array from a facet table'\n\t\t\t\ti.tklst = i.tracks\n\t\t\t\tdelete i.tracks\n\t\t\t\tfor (const t of i.tklst) {\n\t\t\t\t\tif (!t.assay) throw '.assay missing from a facet track'\n\t\t\t\t\tif (!t.sample) throw '.sample missing from a facet track'\n\t\t\t\t\t// must assign tkid otherwise the tk buttons from facet table won't work\n\t\t\t\t\tt.tkid = Math.random().toString()\n\t\t\t\t}\n\t\t\t\tgenomeobj.tkset.push(i)\n\t\t\t} else {\n\t\t\t\t// must be a track\n\t\t\t\ttks.push(i)\n\t\t\t}\n\t\t}\n\t\treturn tks\n\t}\n\n\tif (key == 'bamfile') {\n\t\tconst lst = value.split(',')\n\t\tconst tks = []\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\ttks.push({\n\t\t\t\t\ttype: client.tkt.bam,\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\tfile: lst[i + 1]\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn tks\n\t}\n\tif (key == 'bamurl') {\n\t\tconst lst = value.split(',')\n\t\tconst tks = []\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\ttks.push({\n\t\t\t\t\ttype: client.tkt.bam,\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\turl: lst[i + 1]\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn tks\n\t}\n\tif (key == 'bedjfile') {\n\t\tconst lst = value.split(',')\n\t\tconst tks = []\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\ttks.push({\n\t\t\t\t\ttype: client.tkt.bedj,\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\tfile: lst[i + 1]\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn tks\n\t}\n\tif (key == 'bedjurl') {\n\t\tconst lst = value.split(',')\n\t\tconst tks = []\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\ttks.push({\n\t\t\t\t\ttype: client.tkt.bedj,\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\turl: lst[i + 1]\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn tks\n\t}\n\tif (key == 'hictkfile' || key == 'hictkurl') {\n\t\t// name,enzyme,file/url\n\t\tconst isfile = key == 'hictkfile'\n\t\tconst lst = value.split(',')\n\t\tconst norm = urlp.has('hictknorm') ? urlp.get('hictknorm').split(',') : null\n\t\tconst tks = []\n\t\tfor (let i = 0; i < lst.length; i += 3) {\n\t\t\tif (lst[i] && lst[i + 1] && lst[i + 2]) {\n\t\t\t\tconst t = {\n\t\t\t\t\ttype: client.tkt.hicstraw,\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\tenzyme: lst[i + 1],\n\t\t\t\t\tnormalizationmethod: norm ? norm[i / 3] : null\n\t\t\t\t}\n\t\t\t\tif (isfile) {\n\t\t\t\t\tt.file = lst[i + 2]\n\t\t\t\t} else {\n\t\t\t\t\tt.url = lst[i + 2]\n\t\t\t\t}\n\t\t\t\ttks.push(t)\n\t\t\t}\n\t\t}\n\t\treturn tks\n\t}\n\tif (key == 'ldfile') {\n\t\tconst lst = value.split(',')\n\t\tconst tks = []\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\ttks.push({\n\t\t\t\t\ttype: client.tkt.ld,\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\tfile: lst[i + 1]\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn tks\n\t}\n\tif (key == 'bigwigfile') {\n\t\tconst lst = value.split(',')\n\t\tconst tks = []\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\ttks.push({\n\t\t\t\t\ttype: client.tkt.bigwig,\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\tfile: lst[i + 1],\n\t\t\t\t\tscale: { auto: 1 }\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn tks\n\t}\n\tif (key == 'bigwigurl') {\n\t\tconst lst = value.split(',')\n\t\tconst tks = []\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\ttks.push({\n\t\t\t\t\ttype: client.tkt.bigwig,\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\turl: lst[i + 1],\n\t\t\t\t\tscale: { auto: 1 }\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn tks\n\t}\n\tif (key == 'junctionfile') {\n\t\t// legacy\n\t\tconst lst = value.split(',')\n\t\tconst tks = []\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\ttks.push({\n\t\t\t\t\ttype: client.tkt.junction,\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\ttracks: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfile: lst[i + 1]\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\t\treturn tks\n\t}\n\tif (key == 'junctionurl') {\n\t\tconst lst = value.split(',')\n\t\tconst tks = []\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\ttks.push({\n\t\t\t\t\ttype: client.tkt.junction,\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\ttracks: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\turl: lst[i + 1]\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\t\treturn tks\n\t}\n\t/*\n\tif (urlp.has('vcffile')) {\n\t\tconst lst = urlp.get('vcffile').split(',')\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\ttklst.push({\n\t\t\t\t\ttype: 'vcf',\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\tfile: lst[i + 1]\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\tif (urlp.has('vcfurl')) {\n\t\tconst lst = urlp.get('vcfurl').split(',')\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\ttklst.push({\n\t\t\t\t\ttype: 'vcf',\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\turl: lst[i + 1]\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\t*/\n\tif (key == 'aicheckfile') {\n\t\tconst lst = value.split(',')\n\t\tconst tks = []\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\ttks.push({\n\t\t\t\t\ttype: 'aicheck',\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\tfile: lst[i + 1]\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn tks\n\t}\n\tif (key == 'bampilefile') {\n\t\tconst lst = value.split(',')\n\t\tlet links = null\n\t\tif (urlp.has('bampilelink')) {\n\t\t\tlinks = urlp.get('bampilelink').split(',').map(decodeURIComponent)\n\t\t}\n\t\tconst tks = []\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\tconst tk = {\n\t\t\t\t\ttype: client.tkt.bampile,\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\tfile: lst[i + 1]\n\t\t\t\t}\n\t\t\t\tif (links && links[i / 2]) {\n\t\t\t\t\ttk.link = links[i / 2]\n\t\t\t\t}\n\t\t\t\ttks.push(tk)\n\t\t\t}\n\t\t}\n\t\treturn tks\n\t}\n\tif (key == 'svcnvfpkmurl') {\n\t\tconst lst = value.split(',')\n\t\t// defines a single track, all members using url\n\t\tconst name = lst[0]\n\t\tconst type2url = {}\n\t\tfor (let i = 1; i < lst.length; i += 2) {\n\t\t\ttype2url[lst[i]] = lst[i + 1]\n\t\t}\n\t\tlet tk\n\t\tif (type2url.svcnv || type2url.vcf) {\n\t\t\ttk = {\n\t\t\t\ttype: client.tkt.mdssvcnv,\n\t\t\t\tname: name\n\t\t\t}\n\t\t\tif (type2url.svcnv) {\n\t\t\t\ttk.url = type2url.svcnv\n\t\t\t}\n\t\t\tif (type2url.vcf) {\n\t\t\t\ttk.checkvcf = {\n\t\t\t\t\turl: type2url.vcf,\n\t\t\t\t\tindexURL: type2url.vcfindex\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type2url.fpkm) {\n\t\t\t\ttk.checkexpressionrank = {\n\t\t\t\t\tdatatype: 'FPKM',\n\t\t\t\t\turl: type2url.fpkm,\n\t\t\t\t\tindexURL: type2url.fpkmindex\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn tk\n\t}\n\tif (key == 'svcnvfpkmfile') {\n\t\tconst lst = value.split(',')\n\t\t// defines a single track, all members using file\n\t\tconst name = lst[0]\n\t\tconst type2file = {}\n\t\tfor (let i = 1; i < lst.length; i += 2) {\n\t\t\ttype2file[lst[i]] = lst[i + 1]\n\t\t}\n\t\tlet tk\n\t\tif (type2file.svcnv || type2file.vcf) {\n\t\t\ttk = {\n\t\t\t\ttype: client.tkt.mdssvcnv,\n\t\t\t\tname: name\n\t\t\t}\n\t\t\tif (type2file.svcnv) {\n\t\t\t\ttk.file = type2file.svcnv\n\t\t\t}\n\t\t\tif (type2file.vcf) {\n\t\t\t\ttk.checkvcf = {\n\t\t\t\t\tfile: type2file.vcf\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type2file.fpkm) {\n\t\t\t\ttk.checkexpressionrank = {\n\t\t\t\t\tdatatype: 'FPKM',\n\t\t\t\t\tfile: type2file.fpkm\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn tk\n\t}\n\tif (key == 'mdsjunctionfile') {\n\t\tconst lst = value.split(',')\n\t\tconst tks = []\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\ttks.push({\n\t\t\t\t\ttype: 'mdsjunction',\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\tfile: lst[i + 1]\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn tks\n\t}\n\tif (key == 'junctionmatrix') {\n\t\tconst lst = value.split(',')\n\t\tconst tks = []\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\ttks.push({\n\t\t\t\t\ttype: 'mdsjunction',\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\tfile2: lst[i + 1] // quick fix to support new file type\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn tks\n\t}\n\n\tif (key == 'junctionrnapeg') {\n\t\tconst lst = value.split(',')\n\t\tconst tks = []\n\t\tfor (let i = 0; i < lst.length; i += 2) {\n\t\t\tif (lst[i] && lst[i + 1]) {\n\t\t\t\ttks.push({\n\t\t\t\t\ttype: client.tkt.junction,\n\t\t\t\t\tname: lst[i],\n\t\t\t\t\ttracks: [{ rnapegfile: lst[i + 1] }]\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn tks\n\t}\n}\n\nfunction mayAddBedjfilterbyname(urlp, tklst) {\n\t/* !! a quick fix !!\n\tthe filter string will be applied to all bedj tracks,\n\trather than specific for a track\n\tmay mess up with other bedj tracks shown at the same time\n\t*/\n\tif (urlp.has('bedjfilterbyname')) {\n\t\tfor (const t of tklst) {\n\t\t\tif (t.type == 'bedj') t.filterByName = urlp.get('bedjfilterbyname')\n\t\t}\n\t}\n}\n"],
5
- "mappings": "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",
6
- "names": ["element"]
7
- }