@sjcrh/proteinpaint-client 2.81.2-3 → 2.81.5

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 (344) hide show
  1. package/dist/{AppHeader-6IGQURSX.js → AppHeader-PBT75IXA.js} +9 -9
  2. package/dist/{AppHeader-6IGQURSX.js.map → AppHeader-PBT75IXA.js.map} +2 -2
  3. package/dist/{DEanalysis-G4CCMC7Q.js → DEanalysis-N4XXOEXM.js} +11 -9
  4. package/dist/DEanalysis-N4XXOEXM.js.map +7 -0
  5. package/dist/{Disco-ZLOF2OSY.js → Disco-HFIKRNBB.js} +7 -7
  6. package/dist/{Disco.UI-J6TVL57R.js → Disco.UI-BHBIT5RU.js} +12 -12
  7. package/dist/{HicApp-QMJRHNCI.js → HicApp-ZH632KRI.js} +5 -5
  8. package/dist/{HicApp-QMJRHNCI.js.map → HicApp-ZH632KRI.js.map} +2 -2
  9. package/dist/{app-XTZNDE3W.js → app-DL4WWXDS.js} +6 -6
  10. package/dist/{app-UPZ2FSM5.js → app-PLWC2SSI.js} +23 -22
  11. package/dist/app.js +4 -4
  12. package/dist/{bam-V34X5V4Y.js → bam-7EXICES7.js} +3 -3
  13. package/dist/{barchart-UH67IJ2T.js → barchart-UBHSOEWU.js} +10 -10
  14. package/dist/{barchart.events-F7RMH3MM.js → barchart.events-24VYN2EA.js} +6 -6
  15. package/dist/{block-YM7DNWQJ.js → block-5CVR6BZF.js} +10 -10
  16. package/dist/{block.init-MFZ6BKQR.js → block.init-7PZ4PJTK.js} +2 -2
  17. package/dist/{block.mds.svcnv-JLISTMK4.js → block.mds.svcnv-QSUREZKG.js} +4 -4
  18. package/dist/{block.mds2-I5Y4SSOH.js → block.mds2-Z35YJUX2.js} +7 -7
  19. package/dist/{block.tk.aicheck-ZHNANC3W.js → block.tk.aicheck-KYUAOHTF.js} +3 -4
  20. package/dist/{block.tk.aicheck-ZHNANC3W.js.map → block.tk.aicheck-KYUAOHTF.js.map} +2 -2
  21. package/dist/{block.tk.bam-63AG2O3T.js → block.tk.bam-7EX5VZRI.js} +4 -4
  22. package/dist/{block.tk.bam-63AG2O3T.js.map → block.tk.bam-7EX5VZRI.js.map} +2 -2
  23. package/dist/{block.tk.hicstraw-IICDR6K6.js → block.tk.hicstraw-GCOGEY6O.js} +4 -4
  24. package/dist/{block.tk.junction.textmatrixui-J6S4APU7.js → block.tk.junction.textmatrixui-S6BWX2SE.js} +2 -2
  25. package/dist/{block.tk.ld-HSWI5UUT.js → block.tk.ld-TR2UTZOK.js} +4 -4
  26. package/dist/boxplot-2REI6SO4.js +47 -0
  27. package/dist/{brainImaging-TK2K5UM3.js → brainImaging-MRPPWERG.js} +5 -5
  28. package/dist/{categorical-FNHJZRSN.js → categorical-4PAMEQYE.js} +5 -5
  29. package/dist/{chunk-22KNFYBP.js → chunk-24U25WMU.js} +4 -4
  30. package/dist/{chunk-VKNAO2EV.js → chunk-26JUSR4D.js} +3 -3
  31. package/dist/{chunk-ZDSPKSEA.js → chunk-34HJJGDU.js} +2 -2
  32. package/dist/{chunk-WA6VYIW4.js → chunk-47W2ODRY.js} +19 -19
  33. package/dist/{chunk-UIM2YO7Q.js → chunk-4FIL5ZOE.js} +2 -2
  34. package/dist/{chunk-EVXOUHXP.js → chunk-5SEULZSC.js} +15 -14
  35. package/dist/{chunk-EVXOUHXP.js.map → chunk-5SEULZSC.js.map} +2 -2
  36. package/dist/{chunk-UO547CEU.js → chunk-65OXFCN6.js} +5 -5
  37. package/dist/{chunk-6LJRAZSP.js → chunk-6KYB27K2.js} +2 -2
  38. package/dist/{chunk-LMR2MDUI.js → chunk-7MB3NTYS.js} +269 -244
  39. package/dist/chunk-7MB3NTYS.js.map +7 -0
  40. package/dist/{chunk-WQDAUHVM.js → chunk-7ZTSBQOJ.js} +4 -4
  41. package/dist/{chunk-LIWYYVLU.js → chunk-A5XIFWFJ.js} +7 -7
  42. package/dist/{chunk-CGRLJLI3.js → chunk-ATH2WF3D.js} +2 -2
  43. package/dist/{chunk-B3D7VRE7.js → chunk-BNA27TDC.js} +32 -31
  44. package/dist/chunk-BNA27TDC.js.map +7 -0
  45. package/dist/{chunk-ZUEYLXKH.js → chunk-BQ5P757B.js} +67 -67
  46. package/dist/{chunk-USJNBO33.js → chunk-DVSB4QYT.js} +4 -4
  47. package/dist/{chunk-PKQFGUNR.js → chunk-EVLD5Q5P.js} +8 -7
  48. package/dist/chunk-EVLD5Q5P.js.map +7 -0
  49. package/dist/{chunk-BLLHQUKP.js → chunk-FNGDMGM3.js} +5 -7
  50. package/dist/{chunk-BLLHQUKP.js.map → chunk-FNGDMGM3.js.map} +2 -2
  51. package/dist/{chunk-SP2QSO3U.js → chunk-FYCYSMXE.js} +6 -5
  52. package/dist/{chunk-SP2QSO3U.js.map → chunk-FYCYSMXE.js.map} +2 -2
  53. package/dist/{chunk-U522CVYL.js → chunk-HG7OHC2R.js} +6 -27
  54. package/dist/chunk-HG7OHC2R.js.map +7 -0
  55. package/dist/{chunk-PU7EMWOK.js → chunk-HR3FNUVU.js} +43 -10
  56. package/dist/chunk-HR3FNUVU.js.map +7 -0
  57. package/dist/{chunk-CLX5YITI.js → chunk-I2KESQ3H.js} +3 -3
  58. package/dist/{chunk-FBNPIZZ6.js → chunk-ILO67TVG.js} +2 -2
  59. package/dist/{chunk-M3BD6IID.js → chunk-IVFOJUT3.js} +7 -7
  60. package/dist/{chunk-DYFLMM7F.js → chunk-KBDEVO6J.js} +76 -76
  61. package/dist/chunk-KBDEVO6J.js.map +7 -0
  62. package/dist/{chunk-LOV6H3RZ.js → chunk-KYGN5FG7.js} +2 -2
  63. package/dist/chunk-LF4BFY6D.js +262 -0
  64. package/dist/chunk-LF4BFY6D.js.map +7 -0
  65. package/dist/{chunk-TU4H4R2T.js → chunk-LGC254YE.js} +1 -1
  66. package/dist/chunk-LGC254YE.js.map +7 -0
  67. package/dist/{chunk-RZDEJR2H.js → chunk-LMW45MSZ.js} +66 -35
  68. package/dist/chunk-LMW45MSZ.js.map +7 -0
  69. package/dist/{chunk-7QUUDS2X.js → chunk-LQPA6WZE.js} +9 -9
  70. package/dist/{chunk-QU5I6QUG.js → chunk-MB56W3DF.js} +32 -23
  71. package/dist/chunk-MB56W3DF.js.map +7 -0
  72. package/dist/{chunk-7CQ3C4AZ.js → chunk-MCY36ZZL.js} +4 -1
  73. package/dist/{chunk-7CQ3C4AZ.js.map → chunk-MCY36ZZL.js.map} +2 -2
  74. package/dist/{chunk-FPQKVUJW.js → chunk-NWHIPXEK.js} +20 -9
  75. package/dist/chunk-NWHIPXEK.js.map +7 -0
  76. package/dist/{chunk-UDLABQDU.js → chunk-OG25W5XS.js} +3 -3
  77. package/dist/{chunk-OU3ABPQM.js → chunk-P327IDNN.js} +8 -8
  78. package/dist/{chunk-6ZPY2IJH.js → chunk-PPLGCJKR.js} +3 -3
  79. package/dist/{chunk-RK5RC3IV.js → chunk-Q6U3WHTR.js} +2 -2
  80. package/dist/{chunk-G2RSZHHG.js → chunk-QGRZZ5ET.js} +67 -67
  81. package/dist/{chunk-HXD4MHQO.js → chunk-QO2BIJHF.js} +4 -4
  82. package/dist/{chunk-YMJEVHPD.js → chunk-RXLO3FWJ.js} +2 -2
  83. package/dist/{chunk-FRHZDCFE.js → chunk-S3XCLQPV.js} +3 -3
  84. package/dist/chunk-S3XCLQPV.js.map +7 -0
  85. package/dist/{chunk-TRNNPGP4.js → chunk-SZM3GYZL.js} +3 -3
  86. package/dist/{chunk-OYX4WB4C.js → chunk-UP33AZOS.js} +69 -69
  87. package/dist/{chunk-L5YZZHMR.js → chunk-WHNSPT6X.js} +3 -3
  88. package/dist/{chunk-2XF2FHYT.js → chunk-YBOO45LU.js} +50 -22
  89. package/dist/chunk-YBOO45LU.js.map +7 -0
  90. package/dist/{chunk-X5ZQI22O.js → chunk-Z3TD3CHR.js} +6 -4
  91. package/dist/{chunk-X5ZQI22O.js.map → chunk-Z3TD3CHR.js.map} +2 -2
  92. package/dist/{chunk-TTY6IC7P.js → chunk-ZWMHTYXK.js} +3 -3
  93. package/dist/{chunk-NB3LAVWW.js → chunk-ZZ6NV4PJ.js} +23 -7
  94. package/dist/{chunk-NB3LAVWW.js.map → chunk-ZZ6NV4PJ.js.map} +2 -2
  95. package/dist/{condition-HPTEZNAZ.js → condition-LHRJGMKH.js} +4 -4
  96. package/dist/{controls-KLNROF35.js → controls-DUGVQ423.js} +6 -6
  97. package/dist/{controls.config-D6P6WQIJ.js → controls.config-G3ZBWQHW.js} +5 -5
  98. package/dist/{cuminc-ZM77GZXQ.js → cuminc-4ADTI5Y6.js} +7 -7
  99. package/dist/{dataDownload-S2VDBWZZ.js → dataDownload-U6NEVXQK.js} +4 -4
  100. package/dist/{databrowser.ui-36WH4KHC.js → databrowser.ui-LYZAJU67.js} +26 -22
  101. package/dist/databrowser.ui-LYZAJU67.js.map +7 -0
  102. package/dist/{dictionary-YW3SLVAG.js → dictionary-FKCXDBYW.js} +6 -6
  103. package/dist/{expclust.gdc.spec-WX542YIH.js → expclust.gdc.spec-D5V36CT5.js} +6 -6
  104. package/dist/{facet-OMRCCZ6C.js → facet-RX62HCGL.js} +10 -10
  105. package/dist/{geneExpClustering-PISV2SHO.js → geneExpClustering-PF3FFFAL.js} +11 -11
  106. package/dist/{geneExpression-GHCLHWIQ.js → geneExpression-LCL22G3M.js} +6 -6
  107. package/dist/{geneExpression-SXIB22D2.js → geneExpression-MTTTPIU3.js} +3 -3
  108. package/dist/{geneORA-MFGP5AQS.js → geneORA-67HGOYZC.js} +24 -12
  109. package/dist/geneORA-67HGOYZC.js.map +7 -0
  110. package/dist/{geneVariant-BMDKI7QQ.js → geneVariant-OFKTQV4J.js} +4 -4
  111. package/dist/{geneset-OKCKU2QW.js → geneset-SWVN4DSI.js} +4 -4
  112. package/dist/{genomeBrowser-CT5KGDFB.js → genomeBrowser-ONQF4ZWK.js} +9 -9
  113. package/dist/{genomeBrowser.controls-V6ERZ2QL.js → genomeBrowser.controls-KLWZ473K.js} +7 -7
  114. package/dist/{genomeBrowser.spec-A3UH6FJA.js → genomeBrowser.spec-NEI37PU7.js} +6 -6
  115. package/dist/{gsea-D5LYIBKT.js → gsea-7CQY4FZA.js} +6 -6
  116. package/dist/{hierCluster-3J3TPIEN.js → hierCluster-CGRYG6YW.js} +15 -15
  117. package/dist/{hierCluster-676VN4PA.js → hierCluster-JEWZDW4J.js} +14 -14
  118. package/dist/{hierCluster.config-O72AU4PX.js → hierCluster.config-GJHPGXOW.js} +6 -6
  119. package/dist/{hierCluster.integration.spec-IQI2UERY.js → hierCluster.integration.spec-BZVWLG3O.js} +16 -16
  120. package/dist/{hierCluster.interactivity-77UM6HHV.js → hierCluster.interactivity-LUBDGEUL.js} +4 -4
  121. package/dist/{imagePlot-47RXNQH6.js → imagePlot-NZYNZEEP.js} +7 -7
  122. package/dist/{launch.adhoc-HYFG6MZH.js → launch.adhoc-NPYF7L64.js} +12 -12
  123. package/dist/{leftlabel.sample-IIPRHKS7.js → leftlabel.sample-V7IT3RNZ.js} +9 -7
  124. package/dist/{leftlabel.sample-IIPRHKS7.js.map → leftlabel.sample-V7IT3RNZ.js.map} +2 -2
  125. package/dist/{lollipop-QL2ZVVMX.js → lollipop-GUDH7AIY.js} +2 -2
  126. package/dist/{maf-Q5AOJVVF.js → maf-NXSUHW7C.js} +3 -3
  127. package/dist/{matrix-NILXJAJR.js → matrix-2JL42CF3.js} +11 -11
  128. package/dist/{matrix-ED4XZ57Y.js → matrix-O4EGOQ34.js} +11 -11
  129. package/dist/{matrix.config-6T75OJN3.js → matrix.config-ASPVCDNS.js} +5 -5
  130. package/dist/{matrix.controls-KPHYCMYJ.js → matrix.controls-AHQHK5Y2.js} +6 -6
  131. package/dist/{matrix.interactivity-CYC4BWO5.js → matrix.interactivity-GVIB4X2V.js} +5 -5
  132. package/dist/{matrix.renderers-2OA2TRS5.js → matrix.renderers-KWTNAKMH.js} +5 -5
  133. package/dist/{matrix.sort.unit.spec-C3RC5UAH.js → matrix.sort.unit.spec-OHMT64ZK.js} +5 -5
  134. package/dist/{matrix.sorterUi.unit.spec-XVGG6IGC.js → matrix.sorterUi.unit.spec-CDPOYJEX.js} +6 -6
  135. package/dist/{mavb-WR63BMER.js → mavb-UBQKFGZG.js} +2 -2
  136. package/dist/{mds.samplescatterplot-Z3G4N5YZ.js → mds.samplescatterplot-IPCOGDU5.js} +7 -7
  137. package/dist/{metaboliteIntensity-AN2OZXWJ.js → metaboliteIntensity-VSJDLGVV.js} +6 -6
  138. package/dist/{numeric-XG4U5U6A.js → numeric-5G5ETRPE.js} +6 -6
  139. package/dist/{numeric.binary-ANCX7NYG.js → numeric.binary-HWIOWHOZ.js} +5 -5
  140. package/dist/{numeric.continuous-4UAAA464.js → numeric.continuous-4DPAD7G7.js} +4 -4
  141. package/dist/{numeric.discrete-AAAQOP6E.js → numeric.discrete-4RP5EMGX.js} +5 -5
  142. package/dist/{numeric.spline-LVT4MCXE.js → numeric.spline-XKHZ5KPK.js} +4 -4
  143. package/dist/{numeric.toggle-IWILDG7B.js → numeric.toggle-67M3P67G.js} +5 -5
  144. package/dist/{oncomatrix-W4UCWIWT.js → oncomatrix-HMIISIBT.js} +11 -11
  145. package/dist/{oncomatrix.spec-DUWZQFAC.js → oncomatrix.spec-SE2RRPR7.js} +6 -6
  146. package/dist/{plot.app-63BWVZZJ.js → plot.app-SIVGMSXM.js} +11 -11
  147. package/dist/{plot.brainImaging-QEFCI5OQ.js → plot.brainImaging-QT6ANOE5.js} +2 -2
  148. package/dist/{plot.disco-YTBQ632J.js → plot.disco-5NG42ZFJ.js} +2 -2
  149. package/dist/{plot.dzi-DIIZLCO3.js → plot.dzi-LNQZARTW.js} +2 -2
  150. package/dist/{plot.ssgq-5W4HPOKP.js → plot.ssgq-4ZVZ2SON.js} +2 -2
  151. package/dist/{plot.wsi-JATOFYIX.js → plot.wsi-2FWWFWSA.js} +2 -2
  152. package/dist/{profile.spec-J3YU7F3M.js → profile.spec-MEYRTKS3.js} +6 -6
  153. package/dist/{profileBarchart-IGNP4VAL.js → profileBarchart-WA2H6ULU.js} +9 -9
  154. package/dist/{profilePlot-NNTY2NON.js → profilePlot-PO4XAGP4.js} +9 -9
  155. package/dist/{profilePolar-WMLEA7K2.js → profilePolar-67CT6DVU.js} +10 -10
  156. package/dist/{profilePolar-WMLEA7K2.js.map → profilePolar-67CT6DVU.js.map} +1 -1
  157. package/dist/{profileRadar-QJ7I2HBW.js → profileRadar-WX7HEMCG.js} +10 -10
  158. package/dist/{profileRadar-QJ7I2HBW.js.map → profileRadar-WX7HEMCG.js.map} +1 -1
  159. package/dist/{profileRadarFacility-RYZNKFW4.js → profileRadarFacility-AG6VEJRG.js} +10 -10
  160. package/dist/{profileRadarFacility-RYZNKFW4.js.map → profileRadarFacility-AG6VEJRG.js.map} +1 -1
  161. package/dist/{profileSummary-3L2Z7Z4Y.js → profileSummary-L2LF26RO.js} +11 -11
  162. package/dist/{profileSummary-3L2Z7Z4Y.js.map → profileSummary-L2LF26RO.js.map} +2 -2
  163. package/dist/{regression-4QBF2OFH.js → regression-HMYHNS75.js} +17 -17
  164. package/dist/{regression.inputs-MRBCIYTA.js → regression.inputs-Q6QOFQOE.js} +17 -17
  165. package/dist/{regression.inputs.term-JVMMVM3U.js → regression.inputs.term-ZQUQLGGY.js} +17 -17
  166. package/dist/{regression.inputs.values.table-KITXSXPV.js → regression.inputs.values.table-GOMV6FXZ.js} +15 -15
  167. package/dist/{regression.results-VZOGPJUO.js → regression.results-ASSTC4JY.js} +4 -4
  168. package/dist/{sampleScatter-DCWWT3YY.js → sampleScatter-OKQ45Q5Q.js} +13 -13
  169. package/dist/{sampleScatter.interactivity-B76AXD47.js → sampleScatter.interactivity-MBT6U3U7.js} +11 -11
  170. package/dist/{sampleScatter.renderer-Q2LUR7P4.js → sampleScatter.renderer-J4TS3QSA.js} +13 -13
  171. package/dist/{sampleView-646DDGVV.js → sampleView-RT5UBW6Z.js} +8 -8
  172. package/dist/{samplelst-CP6YUUP6.js → samplelst-6MQ4DHND.js} +4 -4
  173. package/dist/{samplematrix-SAKKM6AB.js → samplematrix-VLEHSQYS.js} +2 -2
  174. package/dist/{scatter-E4URXNPV.js → scatter-RRLXN4XC.js} +6 -6
  175. package/dist/{selectGenomeWithTklst-M2KQHCHZ.js → selectGenomeWithTklst-O3W4HMP5.js} +2 -2
  176. package/dist/{singleCellCellType-2ECS6TWD.js → singleCellCellType-WAW6SK5L.js} +5 -5
  177. package/dist/{singleCellGeneExpression-WX7SECW3.js → singleCellGeneExpression-SP2A326M.js} +6 -6
  178. package/dist/{singleCellPlot-M6Z6SUXN.js → singleCellPlot-D7RKARD2.js} +494 -404
  179. package/dist/singleCellPlot-D7RKARD2.js.map +7 -0
  180. package/dist/{singlecell-7XYI45X4.js → singlecell-HUYRQK3N.js} +11 -11
  181. package/dist/{snp-AFP2F72P.js → snp-CSACFIU6.js} +5 -5
  182. package/dist/{snplocus-OLCYDFZQ.js → snplocus-TEEWVBKP.js} +5 -5
  183. package/dist/{summary-25V3QMVE.js → summary-RZCJPQZ3.js} +21 -20
  184. package/dist/{survival-ADMKKHX5.js → survival-7VFD7DXX.js} +20 -15
  185. package/dist/survival-7VFD7DXX.js.map +7 -0
  186. package/dist/{survival-27CUOFLJ.js → survival-SAKBMLLX.js} +5 -5
  187. package/dist/{svmr-JVV3LYEB.js → svmr-Q6N7267J.js} +2 -2
  188. package/dist/{table-MZDZAXF4.js → table-74LM3JEI.js} +6 -6
  189. package/dist/{tk-KRZEV2VH.js → tk-IUNAPCQ4.js} +6 -6
  190. package/dist/{tp.ui-BONQ4HLP.js → tp.ui-JDIG7VO4.js} +4 -4
  191. package/dist/{tvs.samplelst-4R4HAULM.js → tvs.samplelst-6QAIPA2J.js} +2 -2
  192. package/dist/{violin-YDYGRPFN.js → violin-SK6CASDU.js} +10 -10
  193. package/dist/{violin.interactivity-5AYHMPPN.js → violin.interactivity-ZKJFW56M.js} +6 -6
  194. package/dist/{violin.renderer-VNJXCKNM.js → violin.renderer-UYLFS54H.js} +3 -3
  195. package/dist/{vocabulary-IN52DNA5.js → vocabulary-N4K6QZMH.js} +5 -5
  196. package/dist/vocabulary-N4K6QZMH.js.map +7 -0
  197. package/package.json +2 -2
  198. package/src/databrowser/dictionary.parse.js +9 -5
  199. package/dist/DEanalysis-G4CCMC7Q.js.map +0 -7
  200. package/dist/boxplot-6AG5JKWD.js +0 -287
  201. package/dist/boxplot-6AG5JKWD.js.map +0 -7
  202. package/dist/chunk-2XF2FHYT.js.map +0 -7
  203. package/dist/chunk-B3D7VRE7.js.map +0 -7
  204. package/dist/chunk-DYFLMM7F.js.map +0 -7
  205. package/dist/chunk-FPQKVUJW.js.map +0 -7
  206. package/dist/chunk-FRHZDCFE.js.map +0 -7
  207. package/dist/chunk-LMR2MDUI.js.map +0 -7
  208. package/dist/chunk-PKQFGUNR.js.map +0 -7
  209. package/dist/chunk-PU7EMWOK.js.map +0 -7
  210. package/dist/chunk-QU5I6QUG.js.map +0 -7
  211. package/dist/chunk-RZDEJR2H.js.map +0 -7
  212. package/dist/chunk-TU4H4R2T.js.map +0 -7
  213. package/dist/chunk-U522CVYL.js.map +0 -7
  214. package/dist/databrowser.ui-36WH4KHC.js.map +0 -7
  215. package/dist/geneORA-MFGP5AQS.js.map +0 -7
  216. package/dist/singleCellPlot-M6Z6SUXN.js.map +0 -7
  217. package/dist/survival-ADMKKHX5.js.map +0 -7
  218. /package/dist/{Disco-ZLOF2OSY.js.map → Disco-HFIKRNBB.js.map} +0 -0
  219. /package/dist/{Disco.UI-J6TVL57R.js.map → Disco.UI-BHBIT5RU.js.map} +0 -0
  220. /package/dist/{app-UPZ2FSM5.js.map → app-DL4WWXDS.js.map} +0 -0
  221. /package/dist/{app-XTZNDE3W.js.map → app-PLWC2SSI.js.map} +0 -0
  222. /package/dist/{bam-V34X5V4Y.js.map → bam-7EXICES7.js.map} +0 -0
  223. /package/dist/{barchart-UH67IJ2T.js.map → barchart-UBHSOEWU.js.map} +0 -0
  224. /package/dist/{barchart.events-F7RMH3MM.js.map → barchart.events-24VYN2EA.js.map} +0 -0
  225. /package/dist/{block-YM7DNWQJ.js.map → block-5CVR6BZF.js.map} +0 -0
  226. /package/dist/{block.init-MFZ6BKQR.js.map → block.init-7PZ4PJTK.js.map} +0 -0
  227. /package/dist/{block.mds.svcnv-JLISTMK4.js.map → block.mds.svcnv-QSUREZKG.js.map} +0 -0
  228. /package/dist/{block.mds2-I5Y4SSOH.js.map → block.mds2-Z35YJUX2.js.map} +0 -0
  229. /package/dist/{block.tk.hicstraw-IICDR6K6.js.map → block.tk.hicstraw-GCOGEY6O.js.map} +0 -0
  230. /package/dist/{block.tk.junction.textmatrixui-J6S4APU7.js.map → block.tk.junction.textmatrixui-S6BWX2SE.js.map} +0 -0
  231. /package/dist/{block.tk.ld-HSWI5UUT.js.map → block.tk.ld-TR2UTZOK.js.map} +0 -0
  232. /package/dist/{categorical-FNHJZRSN.js.map → boxplot-2REI6SO4.js.map} +0 -0
  233. /package/dist/{brainImaging-TK2K5UM3.js.map → brainImaging-MRPPWERG.js.map} +0 -0
  234. /package/dist/{controls-KLNROF35.js.map → categorical-4PAMEQYE.js.map} +0 -0
  235. /package/dist/{chunk-22KNFYBP.js.map → chunk-24U25WMU.js.map} +0 -0
  236. /package/dist/{chunk-VKNAO2EV.js.map → chunk-26JUSR4D.js.map} +0 -0
  237. /package/dist/{chunk-ZDSPKSEA.js.map → chunk-34HJJGDU.js.map} +0 -0
  238. /package/dist/{chunk-WA6VYIW4.js.map → chunk-47W2ODRY.js.map} +0 -0
  239. /package/dist/{chunk-UIM2YO7Q.js.map → chunk-4FIL5ZOE.js.map} +0 -0
  240. /package/dist/{chunk-UO547CEU.js.map → chunk-65OXFCN6.js.map} +0 -0
  241. /package/dist/{chunk-6LJRAZSP.js.map → chunk-6KYB27K2.js.map} +0 -0
  242. /package/dist/{chunk-WQDAUHVM.js.map → chunk-7ZTSBQOJ.js.map} +0 -0
  243. /package/dist/{chunk-LIWYYVLU.js.map → chunk-A5XIFWFJ.js.map} +0 -0
  244. /package/dist/{chunk-CGRLJLI3.js.map → chunk-ATH2WF3D.js.map} +0 -0
  245. /package/dist/{chunk-ZUEYLXKH.js.map → chunk-BQ5P757B.js.map} +0 -0
  246. /package/dist/{chunk-USJNBO33.js.map → chunk-DVSB4QYT.js.map} +0 -0
  247. /package/dist/{chunk-CLX5YITI.js.map → chunk-I2KESQ3H.js.map} +0 -0
  248. /package/dist/{chunk-FBNPIZZ6.js.map → chunk-ILO67TVG.js.map} +0 -0
  249. /package/dist/{chunk-M3BD6IID.js.map → chunk-IVFOJUT3.js.map} +0 -0
  250. /package/dist/{chunk-LOV6H3RZ.js.map → chunk-KYGN5FG7.js.map} +0 -0
  251. /package/dist/{chunk-7QUUDS2X.js.map → chunk-LQPA6WZE.js.map} +0 -0
  252. /package/dist/{chunk-UDLABQDU.js.map → chunk-OG25W5XS.js.map} +0 -0
  253. /package/dist/{chunk-OU3ABPQM.js.map → chunk-P327IDNN.js.map} +0 -0
  254. /package/dist/{chunk-6ZPY2IJH.js.map → chunk-PPLGCJKR.js.map} +0 -0
  255. /package/dist/{chunk-RK5RC3IV.js.map → chunk-Q6U3WHTR.js.map} +0 -0
  256. /package/dist/{chunk-G2RSZHHG.js.map → chunk-QGRZZ5ET.js.map} +0 -0
  257. /package/dist/{chunk-HXD4MHQO.js.map → chunk-QO2BIJHF.js.map} +0 -0
  258. /package/dist/{chunk-YMJEVHPD.js.map → chunk-RXLO3FWJ.js.map} +0 -0
  259. /package/dist/{chunk-TRNNPGP4.js.map → chunk-SZM3GYZL.js.map} +0 -0
  260. /package/dist/{chunk-OYX4WB4C.js.map → chunk-UP33AZOS.js.map} +0 -0
  261. /package/dist/{chunk-L5YZZHMR.js.map → chunk-WHNSPT6X.js.map} +0 -0
  262. /package/dist/{chunk-TTY6IC7P.js.map → chunk-ZWMHTYXK.js.map} +0 -0
  263. /package/dist/{condition-HPTEZNAZ.js.map → condition-LHRJGMKH.js.map} +0 -0
  264. /package/dist/{controls.config-D6P6WQIJ.js.map → controls-DUGVQ423.js.map} +0 -0
  265. /package/dist/{genomeBrowser.controls-V6ERZ2QL.js.map → controls.config-G3ZBWQHW.js.map} +0 -0
  266. /package/dist/{cuminc-ZM77GZXQ.js.map → cuminc-4ADTI5Y6.js.map} +0 -0
  267. /package/dist/{dataDownload-S2VDBWZZ.js.map → dataDownload-U6NEVXQK.js.map} +0 -0
  268. /package/dist/{dictionary-YW3SLVAG.js.map → dictionary-FKCXDBYW.js.map} +0 -0
  269. /package/dist/{expclust.gdc.spec-WX542YIH.js.map → expclust.gdc.spec-D5V36CT5.js.map} +0 -0
  270. /package/dist/{facet-OMRCCZ6C.js.map → facet-RX62HCGL.js.map} +0 -0
  271. /package/dist/{geneExpClustering-PISV2SHO.js.map → geneExpClustering-PF3FFFAL.js.map} +0 -0
  272. /package/dist/{geneExpression-GHCLHWIQ.js.map → geneExpression-LCL22G3M.js.map} +0 -0
  273. /package/dist/{geneExpression-SXIB22D2.js.map → geneExpression-MTTTPIU3.js.map} +0 -0
  274. /package/dist/{geneVariant-BMDKI7QQ.js.map → geneVariant-OFKTQV4J.js.map} +0 -0
  275. /package/dist/{geneset-OKCKU2QW.js.map → geneset-SWVN4DSI.js.map} +0 -0
  276. /package/dist/{genomeBrowser-CT5KGDFB.js.map → genomeBrowser-ONQF4ZWK.js.map} +0 -0
  277. /package/dist/{hierCluster-3J3TPIEN.js.map → genomeBrowser.controls-KLWZ473K.js.map} +0 -0
  278. /package/dist/{genomeBrowser.spec-A3UH6FJA.js.map → genomeBrowser.spec-NEI37PU7.js.map} +0 -0
  279. /package/dist/{gsea-D5LYIBKT.js.map → gsea-7CQY4FZA.js.map} +0 -0
  280. /package/dist/{hierCluster-676VN4PA.js.map → hierCluster-CGRYG6YW.js.map} +0 -0
  281. /package/dist/{hierCluster.config-O72AU4PX.js.map → hierCluster-JEWZDW4J.js.map} +0 -0
  282. /package/dist/{hierCluster.interactivity-77UM6HHV.js.map → hierCluster.config-GJHPGXOW.js.map} +0 -0
  283. /package/dist/{hierCluster.integration.spec-IQI2UERY.js.map → hierCluster.integration.spec-BZVWLG3O.js.map} +0 -0
  284. /package/dist/{launch.adhoc-HYFG6MZH.js.map → hierCluster.interactivity-LUBDGEUL.js.map} +0 -0
  285. /package/dist/{imagePlot-47RXNQH6.js.map → imagePlot-NZYNZEEP.js.map} +0 -0
  286. /package/dist/{matrix-ED4XZ57Y.js.map → launch.adhoc-NPYF7L64.js.map} +0 -0
  287. /package/dist/{lollipop-QL2ZVVMX.js.map → lollipop-GUDH7AIY.js.map} +0 -0
  288. /package/dist/{maf-Q5AOJVVF.js.map → maf-NXSUHW7C.js.map} +0 -0
  289. /package/dist/{matrix-NILXJAJR.js.map → matrix-2JL42CF3.js.map} +0 -0
  290. /package/dist/{matrix.config-6T75OJN3.js.map → matrix-O4EGOQ34.js.map} +0 -0
  291. /package/dist/{matrix.controls-KPHYCMYJ.js.map → matrix.config-ASPVCDNS.js.map} +0 -0
  292. /package/dist/{matrix.interactivity-CYC4BWO5.js.map → matrix.controls-AHQHK5Y2.js.map} +0 -0
  293. /package/dist/{matrix.renderers-2OA2TRS5.js.map → matrix.interactivity-GVIB4X2V.js.map} +0 -0
  294. /package/dist/{numeric.discrete-AAAQOP6E.js.map → matrix.renderers-KWTNAKMH.js.map} +0 -0
  295. /package/dist/{matrix.sort.unit.spec-C3RC5UAH.js.map → matrix.sort.unit.spec-OHMT64ZK.js.map} +0 -0
  296. /package/dist/{matrix.sorterUi.unit.spec-XVGG6IGC.js.map → matrix.sorterUi.unit.spec-CDPOYJEX.js.map} +0 -0
  297. /package/dist/{mavb-WR63BMER.js.map → mavb-UBQKFGZG.js.map} +0 -0
  298. /package/dist/{mds.samplescatterplot-Z3G4N5YZ.js.map → mds.samplescatterplot-IPCOGDU5.js.map} +0 -0
  299. /package/dist/{metaboliteIntensity-AN2OZXWJ.js.map → metaboliteIntensity-VSJDLGVV.js.map} +0 -0
  300. /package/dist/{numeric-XG4U5U6A.js.map → numeric-5G5ETRPE.js.map} +0 -0
  301. /package/dist/{numeric.binary-ANCX7NYG.js.map → numeric.binary-HWIOWHOZ.js.map} +0 -0
  302. /package/dist/{numeric.continuous-4UAAA464.js.map → numeric.continuous-4DPAD7G7.js.map} +0 -0
  303. /package/dist/{numeric.toggle-IWILDG7B.js.map → numeric.discrete-4RP5EMGX.js.map} +0 -0
  304. /package/dist/{numeric.spline-LVT4MCXE.js.map → numeric.spline-XKHZ5KPK.js.map} +0 -0
  305. /package/dist/{plot.app-63BWVZZJ.js.map → numeric.toggle-67M3P67G.js.map} +0 -0
  306. /package/dist/{oncomatrix-W4UCWIWT.js.map → oncomatrix-HMIISIBT.js.map} +0 -0
  307. /package/dist/{oncomatrix.spec-DUWZQFAC.js.map → oncomatrix.spec-SE2RRPR7.js.map} +0 -0
  308. /package/dist/{profilePlot-NNTY2NON.js.map → plot.app-SIVGMSXM.js.map} +0 -0
  309. /package/dist/{plot.brainImaging-QEFCI5OQ.js.map → plot.brainImaging-QT6ANOE5.js.map} +0 -0
  310. /package/dist/{plot.disco-YTBQ632J.js.map → plot.disco-5NG42ZFJ.js.map} +0 -0
  311. /package/dist/{plot.dzi-DIIZLCO3.js.map → plot.dzi-LNQZARTW.js.map} +0 -0
  312. /package/dist/{plot.ssgq-5W4HPOKP.js.map → plot.ssgq-4ZVZ2SON.js.map} +0 -0
  313. /package/dist/{plot.wsi-JATOFYIX.js.map → plot.wsi-2FWWFWSA.js.map} +0 -0
  314. /package/dist/{profile.spec-J3YU7F3M.js.map → profile.spec-MEYRTKS3.js.map} +0 -0
  315. /package/dist/{profileBarchart-IGNP4VAL.js.map → profileBarchart-WA2H6ULU.js.map} +0 -0
  316. /package/dist/{regression-4QBF2OFH.js.map → profilePlot-PO4XAGP4.js.map} +0 -0
  317. /package/dist/{regression.inputs-MRBCIYTA.js.map → regression-HMYHNS75.js.map} +0 -0
  318. /package/dist/{regression.inputs.term-JVMMVM3U.js.map → regression.inputs-Q6QOFQOE.js.map} +0 -0
  319. /package/dist/{regression.inputs.values.table-KITXSXPV.js.map → regression.inputs.term-ZQUQLGGY.js.map} +0 -0
  320. /package/dist/{regression.results-VZOGPJUO.js.map → regression.inputs.values.table-GOMV6FXZ.js.map} +0 -0
  321. /package/dist/{sampleScatter-DCWWT3YY.js.map → regression.results-ASSTC4JY.js.map} +0 -0
  322. /package/dist/{sampleScatter.interactivity-B76AXD47.js.map → sampleScatter-OKQ45Q5Q.js.map} +0 -0
  323. /package/dist/{sampleScatter.renderer-Q2LUR7P4.js.map → sampleScatter.interactivity-MBT6U3U7.js.map} +0 -0
  324. /package/dist/{sampleView-646DDGVV.js.map → sampleScatter.renderer-J4TS3QSA.js.map} +0 -0
  325. /package/dist/{summary-25V3QMVE.js.map → sampleView-RT5UBW6Z.js.map} +0 -0
  326. /package/dist/{samplelst-CP6YUUP6.js.map → samplelst-6MQ4DHND.js.map} +0 -0
  327. /package/dist/{samplematrix-SAKKM6AB.js.map → samplematrix-VLEHSQYS.js.map} +0 -0
  328. /package/dist/{scatter-E4URXNPV.js.map → scatter-RRLXN4XC.js.map} +0 -0
  329. /package/dist/{selectGenomeWithTklst-M2KQHCHZ.js.map → selectGenomeWithTklst-O3W4HMP5.js.map} +0 -0
  330. /package/dist/{singleCellCellType-2ECS6TWD.js.map → singleCellCellType-WAW6SK5L.js.map} +0 -0
  331. /package/dist/{singleCellGeneExpression-WX7SECW3.js.map → singleCellGeneExpression-SP2A326M.js.map} +0 -0
  332. /package/dist/{singlecell-7XYI45X4.js.map → singlecell-HUYRQK3N.js.map} +0 -0
  333. /package/dist/{snp-AFP2F72P.js.map → snp-CSACFIU6.js.map} +0 -0
  334. /package/dist/{snplocus-OLCYDFZQ.js.map → snplocus-TEEWVBKP.js.map} +0 -0
  335. /package/dist/{tk-KRZEV2VH.js.map → summary-RZCJPQZ3.js.map} +0 -0
  336. /package/dist/{survival-27CUOFLJ.js.map → survival-SAKBMLLX.js.map} +0 -0
  337. /package/dist/{svmr-JVV3LYEB.js.map → svmr-Q6N7267J.js.map} +0 -0
  338. /package/dist/{table-MZDZAXF4.js.map → table-74LM3JEI.js.map} +0 -0
  339. /package/dist/{violin-YDYGRPFN.js.map → tk-IUNAPCQ4.js.map} +0 -0
  340. /package/dist/{tp.ui-BONQ4HLP.js.map → tp.ui-JDIG7VO4.js.map} +0 -0
  341. /package/dist/{tvs.samplelst-4R4HAULM.js.map → tvs.samplelst-6QAIPA2J.js.map} +0 -0
  342. /package/dist/{violin.interactivity-5AYHMPPN.js.map → violin-SK6CASDU.js.map} +0 -0
  343. /package/dist/{violin.renderer-VNJXCKNM.js.map → violin.interactivity-ZKJFW56M.js.map} +0 -0
  344. /package/dist/{vocabulary-IN52DNA5.js.map → violin.renderer-UYLFS54H.js.map} +0 -0
@@ -4,18 +4,18 @@ import {
4
4
  } from "./chunk-FIY7FBE5.js";
5
5
  import {
6
6
  InputSearch
7
- } from "./chunk-PU7EMWOK.js";
7
+ } from "./chunk-HR3FNUVU.js";
8
8
  import "./chunk-7KFEDC2T.js";
9
9
  import "./chunk-FCPSU6WB.js";
10
10
  import "./chunk-WX2C2ZIZ.js";
11
11
  import "./chunk-CVWXP35F.js";
12
12
  import "./chunk-OTWQWP6Z.js";
13
13
  import "./chunk-6BHKLDWV.js";
14
- import "./chunk-TU4H4R2T.js";
14
+ import "./chunk-LGC254YE.js";
15
15
  import {
16
16
  get_tklst
17
- } from "./chunk-QU5I6QUG.js";
18
- import "./chunk-22KNFYBP.js";
17
+ } from "./chunk-MB56W3DF.js";
18
+ import "./chunk-24U25WMU.js";
19
19
  import "./chunk-JOCEI72L.js";
20
20
  import "./chunk-6MSAGRRE.js";
21
21
  import "./chunk-MKAF2BHB.js";
@@ -31,7 +31,7 @@ import "./chunk-ALPXXDQD.js";
31
31
  import "./chunk-CTQFEFIV.js";
32
32
  import {
33
33
  block_init_default
34
- } from "./chunk-L5YZZHMR.js";
34
+ } from "./chunk-WHNSPT6X.js";
35
35
  import {
36
36
  throwMsgWithFilePathAndFnName
37
37
  } from "./chunk-RKJGIOIF.js";
@@ -227,7 +227,7 @@ async function findgene2paint(str, app, genomename, jwt) {
227
227
  debugmode: app.debugmode
228
228
  };
229
229
  first_genetrack_tolist(g, par2.tklst);
230
- import("./block-YM7DNWQJ.js").then((b) => new b.Block(par2)).catch((err) => {
230
+ import("./block-5CVR6BZF.js").then((b) => new b.Block(par2)).catch((err) => {
231
231
  app.error0(err);
232
232
  });
233
233
  return;
@@ -715,7 +715,7 @@ var AppHeader = class _AppHeader {
715
715
  {
716
716
  const row2 = headinfo.append("div").style("padding-left", "15px");
717
717
  const link = `https://github.com/stjude/proteinpaint/pkgs/container/ppfull`;
718
- const version = this.data.pkgver ? `Version: <a href="${link}" target="${this.data.pkgver}">${this.data.pkgver}</a>` : `Code date: ${this.data.codedate}`;
718
+ const version = this.data.pkgver ? `Release version: <a href="${link}" target="${this.data.pkgver}">${this.data.pkgver}</a>` : `Code date: ${this.data.codedate}`;
719
719
  row2.attr("id", "sjpp-serverstat").append("span").html(`${version}, server launched: ${this.data.launchdate || "??"}.`);
720
720
  if (this.data.hasblat) {
721
721
  row2.append("a").style("margin-left", "10px").text("Running BLAT").on("click", async (event) => {
@@ -833,7 +833,7 @@ var AppHeader = class _AppHeader {
833
833
  debugmode: app.debugmode
834
834
  };
835
835
  first_genetrack_tolist(g, par.tklst);
836
- import("./block-YM7DNWQJ.js").then((b) => new b.Block(par));
836
+ import("./block-5CVR6BZF.js").then((b) => new b.Block(par));
837
837
  app.drawer.dispatch({ type: "is_apps_btn_active", value: false });
838
838
  });
839
839
  return g_browser_btn;
@@ -846,4 +846,4 @@ var AppHeader = class _AppHeader {
846
846
  export {
847
847
  AppHeader
848
848
  };
849
- //# sourceMappingURL=AppHeader-6IGQURSX.js.map
849
+ //# sourceMappingURL=AppHeader-PBT75IXA.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/header/omniSearch.js", "../appdrawer/card.js", "../appdrawer/dsButton.js", "../appdrawer/layout.js", "../appdrawer/mainBtn.js", "../appdrawer/store.js", "../appdrawer/app.js", "../src/header/AppHeader.ts"],
4
- "sourcesContent": ["import { dofetch3 } from '#common/dofetch'\nimport { openSandbox } from '../../appdrawer/adSandbox'\nimport { throwMsgWithFilePathAndFnName } from '../../dom/sayerror.ts'\nimport { string2pos } from '../coord'\nimport { newSandboxDiv } from '../../dom/sandbox.ts'\nimport * as parseurl from '../app.parseurl'\nimport urlmap from '#common/urlmap'\nimport { first_genetrack_tolist } from '#common/1stGenetk'\nimport blockinit from '../block.init'\nimport { select as d3select } from 'd3-selection'\n\n/*\n----EXPORTED----\nsearchItems()\nfindgenelst()\nfindgene2paint()\n\n----Internal----\nfindAppDrawerElements()\ngetExampleNames()\ngetFilteredElements()\n*/\n\nexport async function searchItems(app, tip, help, publications, jwt) {\n\tconst userInput = d3select('input').property('value').trim()\n\tconst data = [\n\t\t{\n\t\t\ttitle: 'Genes',\n\t\t\tdefault: true,\n\t\t\titems: await findgenelst(userInput, app.selectgenome.property('value'), jwt),\n\t\t\tcolor: '#F2F2F2',\n\t\t\tcallback: d => {\n\t\t\t\tapp.drawer.dispatch({ type: 'is_apps_btn_active', value: false })\n\t\t\t\ttip.hide()\n\t\t\t\tfindgene2paint(d, app, app.selectgenome.property('value'), jwt)\n\t\t\t}\n\t\t}\n\t]\n\tawait findAppDrawerElements(app, userInput, data, tip)\n\t//Keep 'Help' section second last\n\tdata.push({\n\t\ttitle: 'Help',\n\t\tdefault: false,\n\t\titems: help.filter(d => d.label.toLowerCase().includes(userInput.toLowerCase())),\n\t\tcolor: '#faebd9',\n\t\tcallback: d => {\n\t\t\twindow.open(d.link, d.label)\n\t\t}\n\t})\n\tdata.push({\n\t\ttitle: 'Publications',\n\t\tdefault: false,\n\t\titems: publications.filter(\n\t\t\td =>\n\t\t\t\td.title.toLowerCase().includes(userInput.toLowerCase()) ||\n\t\t\t\td.appHeaderTitle.toLowerCase().includes(userInput.toLowerCase())\n\t\t),\n\t\tcolor: '#E6E6FA',\n\t\tcallback: d => {\n\t\t\twindow.open(d.doi, d.title)\n\t\t}\n\t})\n\treturn data\n}\n\nasync function findAppDrawerElements(app, input, data, tip) {\n\tconst re = await dofetch3(app.cardsPath + '/index.json')\n\tif (re.error) throwMsgWithFilePathAndFnName(`Problem retrieving ../cards/index.json`)\n\tconst userInput = input.toLowerCase().trim()\n\tconst elements = [...re.elements]\n\tlet filteredElements\n\tif (userInput.length > 2) {\n\t\t/** Adding the examples to the search terms is expensive\n\t\t * Limit when all card files are loaded based on user input\n\t\t * Maybe timeout instead? or combination of the two?\n\t\t */\n\t\tawait getExampleNames(elements, app)\n\t\tfilteredElements = getFilteredElements(elements, userInput)\n\t} else {\n\t\tfilteredElements = getFilteredElements(elements, userInput)\n\t}\n\n\tconst opts = {\n\t\tapp: app.drawer.opts,\n\t\tsandboxDiv: app.drawer.opts.sandboxDiv,\n\t\tgenomes: app.genomes,\n\t\tfromApp: true\n\t}\n\n\tdata.push(\n\t\t{\n\t\t\ttitle: 'Tracks and Apps',\n\t\t\titems: filteredElements.filter(c => c.type == 'card'),\n\t\t\tcolor: '#e1edf7',\n\t\t\tcallback: element => {\n\t\t\t\tapp.drawer.dispatch({ type: 'is_apps_btn_active', value: false })\n\t\t\t\ttip.hide()\n\t\t\t\topenSandbox(element, opts)\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\ttitle: 'Datasets',\n\t\t\titems: filteredElements.filter(c => c.type == 'dsButton'),\n\t\t\tcolor: '#e5f5e4',\n\t\t\tcallback: element => {\n\t\t\t\tapp.drawer.dispatch({ type: 'is_apps_btn_active', value: false })\n\t\t\t\ttip.hide()\n\t\t\t\topenSandbox(element, opts)\n\t\t\t}\n\t\t}\n\t)\n\treturn data\n}\n\nasync function getExampleNames(elements, app) {\n\tconst promises = elements.map(async elem => {\n\t\tif (elem.hidden || elem.type != 'card' || !elem.sandboxJson) return elem\n\t\tconst exs = await dofetch3(app.cardsPath + `/${elem.sandboxJson}.json`)\n\t\tif (exs?.ppcalls.length > 0) {\n\t\t\tfor (const c of exs.ppcalls) {\n\t\t\t\tif (c.isUI) return\n\t\t\t\tif (c?.label) elem.searchterms.push(c.label)\n\t\t\t}\n\t\t}\n\t})\n\n\tawait Promise.all(promises)\n}\n\nfunction getFilteredElements(elements, userInput) {\n\treturn elements\n\t\t.filter(elem => {\n\t\t\tif (elem.hidden) return false\n\t\t\tlet searchTermFound = (elem.searchterms || []).reduce((searchTermFound, searchTerm) => {\n\t\t\t\tif (searchTermFound) return true\n\t\t\t\treturn searchTerm.toLowerCase().includes(userInput)\n\t\t\t}, false)\n\t\t\treturn searchTermFound || elem.name.toLowerCase().includes(userInput)\n\t\t})\n\t\t.sort((a, b) => a.name.localeCompare(b.name))\n}\n\nexport async function findgenelst(str, genome, jwt) {\n\t//TODO - including something here about if user input includes a special character to return rather than comment out catch\n\tif (str.length == 0) return\n\ttry {\n\t\tconst data = await dofetch3('/genelookup', {\n\t\t\tbody: {\n\t\t\t\tinput: str,\n\t\t\t\tgenome,\n\t\t\t\tjwt\n\t\t\t}\n\t\t})\n\n\t\tif (data.error) throw data.error\n\t\tif (!data.hits) throw '.hits[] missing'\n\t\treturn data.hits\n\t} catch (err) {\n\t\t// err is likely \"invalid character in gene name\". ignore and continue\n\t\t// if (err.stack) console.log(err.stack)\n\t\t// throw err\n\t}\n}\n\nexport async function findgene2paint(str, app, genomename, jwt) {\n\tconst g = app.genomes[genomename]\n\tif (!g) {\n\t\tconsole.error('unknown genome ' + genomename)\n\t\treturn\n\t}\n\tconst sandbox_div = newSandboxDiv(app.drawer.opts.sandboxDiv)\n\tsandbox_div.header.html(\n\t\t'<div style=\"display:inline-block;\">' +\n\t\t\tstr +\n\t\t\t'</div><div class=\"sjpp-output-sandbox-title\">' +\n\t\t\tgenomename +\n\t\t\t'</div>'\n\t)\n\t// may yield tklst from url parameters\n\tconst urlp = urlmap()\n\tconst tklst = await parseurl.get_tklst(urlp, g)\n\n\tconst pos = string2pos(str, g)\n\tif (pos) {\n\t\t// input is coordinate, launch block\n\t\tconst par = {\n\t\t\thostURL: app.hostURL,\n\t\t\tjwt,\n\t\t\tholder: sandbox_div.body,\n\t\t\tgenome: g,\n\t\t\tnobox: true,\n\t\t\tchr: pos.chr,\n\t\t\tstart: pos.start,\n\t\t\tstop: pos.stop,\n\t\t\tdogtag: genomename,\n\t\t\ttklst,\n\t\t\tdebugmode: app.debugmode\n\t\t}\n\t\tfirst_genetrack_tolist(g, par.tklst)\n\n\t\timport('../block.js')\n\t\t\t.then(b => new b.Block(par))\n\t\t\t.catch(err => {\n\t\t\t\tapp.error0(err)\n\t\t\t})\n\t\treturn\n\t}\n\n\t// input string is not coordinate, find gene match\n\tconst par = {\n\t\thostURL: app.hostURL,\n\t\tjwt,\n\t\tquery: str,\n\t\tgenome: g,\n\t\tholder: sandbox_div.body,\n\t\tvariantPageCall_snv: app.variantPageCall_snv,\n\t\tsamplecart: app.samplecart,\n\t\ttklst,\n\t\tdebugmode: app.debugmode\n\t}\n\n\t// add svcnv tk from url param\n\tconst tmp = sessionStorage.getItem('urlp_mds')\n\tif (tmp) {\n\t\tconst l = tmp.split(',')\n\t\tif (l.length == 2) {\n\t\t\tpar.datasetqueries = [{ dataset: l[0], querykey: l[1] }]\n\t\t}\n\t}\n\n\tawait blockinit(par)\n}\n", "import { getCompInit } from '#rx'\nimport { rgb } from 'd3-color'\nimport { openSandbox } from './adSandbox'\nimport { slideDrawer } from './mainBtn'\n\n/*\n.opts{\n\t.app{\n\t\t.holder\n\t\t.element{}\n\t\t.sandboxDiv\n\t}\n}\n\nTODOs: \n\n- responsiveness of image on window resize \n\t- expand image size on resize\n\t- non square, take better use of space\n- Need fn in utils to decide black or white text based on background color contrast\n- Unify card and nestedCard layout. Only call one layout function for both\n\t- optional non image card layout\n\t- Make ribbons appear on nested cards\n- element.section only required if columnsLayout provided\n\n*/\n\nclass AppDrawerCard {\n\t// handles types 'card' and 'nestedCard'\n\tconstructor(opts) {\n\t\tthis.type = 'card'\n\t\tthis.opts = this.validateOpts(opts)\n\t\tthis.holder = opts.holder\n\t\tthis.dom = opts.dom\n\t\tthis.sandboxDiv = opts.sandboxDiv\n\t\tsetRenderers(this)\n\t}\n\n\tvalidateOpts(opts) {\n\t\tif (!opts.element.name) throw `Card .name is missing`\n\t\tif (opts.element.type == 'card') {\n\t\t\tif (!opts.element.sandboxJson && !opts.element.sandboxHtml)\n\t\t\t\tthrow `Either .sandboxJson or .sandboxHtml is missing for card=${opts.element.name}`\n\t\t}\n\t\tif (opts.element.type == 'nestedCard') {\n\t\t\tif (!opts.element.children || opts.element.children.length == 0)\n\t\t\t\tthrow `Missing .children for nested card = ${opts.element.name}`\n\t\t}\n\t\tif (opts.element.ribbon) {\n\t\t\tif (!opts.element.ribbon.text) throw `Missing ribbon .text for ${opts.element.type} = ${opts.element.name}`\n\n\t\t\t//ProteinPaint app drawer specific validation\n\t\t\tif (\n\t\t\t\t(opts.element.ribbon.text.toUpperCase() == 'NEW' || opts.element.ribbon.text.toUpperCase() == 'UPDATED') &&\n\t\t\t\t!opts.element.ribbon.expireDate\n\t\t\t)\n\t\t\t\tthrow `${opts.element.type} = ${\n\t\t\t\t\topts.element.name\n\t\t\t\t} ribbon is ${opts.element.ribbon.text.toUpperCase()} but .expireDate is missing. Please provide`\n\n\t\t\tif (opts.element.ribbon.expireDate) {\n\t\t\t\tif (opts.element.ribbon.expireDate >= 0) {\n\t\t\t\t\tthrow `Flag for ${opts.element.type} = ${opts.element.name} is not a valid date`\n\t\t\t\t} //TODO add validation for format?\n\t\t\t}\n\t\t}\n\t\treturn opts\n\t}\n\n\tmain() {}\n}\n\nexport const cardInit = getCompInit(AppDrawerCard)\n\nfunction setRenderers(self) {\n\tconst card = self.holder.append('li')\n\tif (self.opts.element.type == 'card') {\n\t\tcard.classed('sjpp-track', true).html(\n\t\t\t`<div class=\"sjpp-track-h\"><span style=\"font-size:14.5px;font-weight:500;\">${self.opts.element.name}</span></div>\n\t\t\t\t${\n\t\t\t\t\tself.opts.element.description\n\t\t\t\t\t\t? `<span class=\"sjpp-track-blurb\" style=\"cursor:default\">${self.opts.element.description}</span></div>`\n\t\t\t\t\t\t: ' '\n\t\t\t\t}\n\t\t\t\t<span class=\"sjpp-track-image\"><img src=\"${self.opts.element.image}\" alt=\"${\n\t\t\t\tself.opts.element.description\n\t\t\t}\"></img></span>\n\t\t\t\t</div>`\n\t\t)\n\t} else if (self.opts.element.type == 'nestedCard') {\n\t\tcard.classed('sjpp-app-drawer-card', true).html(\n\t\t\t`<p style=\"margin-left: 12px; font-size:14.5px;font-weight:500; display: block;\">${self.opts.element.name}</p>\n\t\t\t<p style=\"display: block; font-size: 13px; font-weight: 300; margin-left: 20px; justify-content: center; font-style:oblique; color: #403f3f;\">${self.opts.element.description}</p>`\n\t\t)\n\t}\n\n\tself.makeRibbon = function(ribbon) {\n\t\t//only relevant for 'card', not 'nestedCard'\n\t\tconst ribbonDiv = card\n\t\t\t.append('div')\n\t\t\t.classed('sjpp-app-drawer-card-ribbon', true)\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('justify-content', 'center')\n\n\t\t//*********TODO: move from diagonal to straight on right side */\n\t\tconst text = ribbon.text.toUpperCase()\n\t\t//Enforce color palette for proteinpaint homepage ribbons\n\t\tconst color =\n\t\t\ttext == 'BETA'\n\t\t\t\t? '#418cb5'\n\t\t\t\t: text == 'NEW'\n\t\t\t\t? '#1ba176'\n\t\t\t\t: text == 'UPDATED'\n\t\t\t\t? 'orange'\n\t\t\t\t: ribbon.color\n\t\t\t\t? ribbon.color\n\t\t\t\t: 'red'\n\n\t\tribbonDiv\n\t\t\t.append('span')\n\t\t\t.text(text)\n\t\t\t.style('color', 'white')\n\t\t\t.style('background-color', rgb(color).darker())\n\t\t\t.style('height', 'auto')\n\t\t\t.style('width', '100%')\n\t\t\t.style('top', '15%')\n\t\t\t.style('left', '-30%')\n\t\t\t.style('font-size', '11.5px')\n\t\t\t.style('text-transform', 'uppercase')\n\t\t\t.style('text-align', 'center')\n\t}\n\n\tif (self.opts.element.ribbon) {\n\t\tconst today = new Date()\n\t\tconst ribbonExpireDate = new Date(self.opts.element.ribbon.expireDate)\n\t\t//Allows ribbons to expire or appear indefinitely\n\t\tif (ribbonExpireDate > today || ribbonExpireDate == 'Invalid Date') self.makeRibbon(self.opts.element.ribbon)\n\t}\n\n\tcard.on('click', async event => {\n\t\tevent.stopPropagation()\n\t\tawait self.app.dispatch({\n\t\t\ttype: 'is_apps_btn_active',\n\t\t\tvalue: false\n\t\t})\n\t\tslideDrawer(self)\n\t\tawait openSandbox(self.opts.element, self.opts)\n\t})\n}\n", "import { getInitFxn } from '#rx'\nimport * as utils from './utils'\nimport { openSandbox } from './adSandbox'\nimport { slideDrawer } from './mainBtn'\n\n/*\n.opts{\n\t.app\n\t.holder\n\t.element{}\n\t.dom{}\n\t.state{}\n\t.sandboxDiv\n}\n*/\n\nclass AppDrawerButton {\n\tconstructor(opts) {\n\t\tthis.type = 'button' // works for 'dsButton'. May expand to other button types\n\t\tthis.opts = this.validateOpts(opts)\n\t\tthis.holder = opts.holder\n\t\tthis.dom = opts.dom\n\t\tthis.sandboxDiv = opts.sandboxDiv\n\t\tsetRenderers(this)\n\t}\n\n\tvalidateOpts(opts) {\n\t\tif (!opts.element.name) throw `Button name is missing`\n\t\tif (!opts.element.sandboxJson && !opts.element.sandboxHtml)\n\t\t\tthrow `Either .sandboxJson or .sandboxHtml is missing for button=${opts.element.name}`\n\t\treturn opts\n\t}\n\n\tmain() {}\n}\n\nexport const buttonInit = getInitFxn(AppDrawerButton)\n\nfunction setRenderers(self) {\n\tconst btn = utils.makeButton({ div: self.holder, text: self.opts.element.name, margin: '20px 20px 0px' })\n\tbtn.attr('class', 'sjpp-appdrawer-dataset-btn').on('click', async event => {\n\t\tevent.stopPropagation()\n\t\tawait self.app.dispatch({\n\t\t\ttype: 'is_apps_btn_active',\n\t\t\tvalue: false\n\t\t})\n\t\tslideDrawer(self)\n\t\tawait openSandbox(self.opts.element, self.opts)\n\t})\n}\n", "import { getCompInit } from '#rx'\nimport { rgb } from 'd3-color'\nimport { defaultcolor } from '#shared/common.js'\nimport { cardInit } from './card'\nimport { buttonInit } from './dsButton'\nimport { select } from 'd3-selection'\nimport { dofetch3, sayerror } from '#src/client'\n\n/*\n.opts{}\n .app{}\n\t.dom{}\n\t.state{}\n\nQuestions: \n\t- Organize in window based on section size to make best use of space?\n - For the column layout: \n 1. Cap number of columns?\n 2. Allow y overflow for >2 columns (like Trello)?\n*/\n\nclass AppDrawerLayoutComp {\n\tconstructor(opts) {\n\t\tthis.type = 'layout'\n\t\tthis.dom = {\n\t\t\tholder: opts.dom.drawerDiv,\n\t\t\twrapper: opts.dom.wrapper,\n\t\t\tsandboxDiv: opts.dom.sandboxDiv\n\t\t}\n\t\tthis.state = opts.state\n\t\tthis.hasStatePreMain = true\n\t}\n\n\tasync validateIndexJson() {\n\t\tconst index = await this.getIndexJson()\n\t\tif (!index.elements) throw `Missing elements array`\n\t\tif (!index.elements.length) throw `No element objects provided`\n\t\tif (index.columnsLayout) {\n\t\t\tif (index.columnsLayout.length == 0) throw `Missing column objects`\n\t\t\tconst allGridAreaValues = index.columnsLayout.map(s => s.gridarea)\n\t\t\tif (allGridAreaValues.length != new Set(allGridAreaValues).size) throw `Duplicate values for .gridarea found`\n\t\t\tconst allSectionIdValues = []\n\t\t\tfor (const col of index.columnsLayout) {\n\t\t\t\tif (!col.gridarea) throw `Missing column .gridarea for column = ${col.name}`\n\t\t\t\tif (!col.sections || col.sections.length == 0) throw `Missing section objects for column = ${col.name}`\n\t\t\t\tfor (const section of col.sections) {\n\t\t\t\t\tif (!section.id)\n\t\t\t\t\t\tthrow `Missing section .id in ${section.name ? `section = ${section.name}` : `column = ${col.name} array`}`\n\t\t\t\t\tallSectionIdValues.push(section.id)\n\t\t\t\t}\n\t\t\t\tif (col.sections.length != new Set(col.sections).size) {\n\t\t\t\t\tthrow `Non-unique levels in line ${lineNum}: ${JSON.stringify(levelNames)}`\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (allSectionIdValues.length != new Set(allSectionIdValues).size) throw `Duplicate values for section.id found`\n\n\t\t\t// Required element attributes when columnsLayout specified\n\t\t\tfor (const element of index.elements) {\n\t\t\t\tif (!element.section) throw `.section is missing for ${element.type} = ${element.name}`\n\t\t\t\tif (!allSectionIdValues.some(d => d == element.section))\n\t\t\t\t\tthrow `section = ${element.section} for ${element.type} = ${element.name} is not a column section`\n\t\t\t}\n\t\t}\n\t\treturn index\n\t}\n\n\tasync getIndexJson() {\n\t\t// Proteinpaint specific index.\n\t\t// TODO: Later modifiy to accept user index.\n\t\tconst re = await dofetch3(this.app.cardsPath + '/index.json')\n\t\tif (re.error) {\n\t\t\tsayerror(this.dom.holder.append('div'), re.error)\n\t\t\treturn\n\t\t}\n\t\treturn re\n\t}\n\n\tvalidateElements() {\n\t\tconst features = JSON.parse(sessionStorage.getItem('optionalFeatures')) || {}\n\t\tthis.elements = this.index.elements.filter(e => !e.hidden && (!e.configFeature || features[e.configFeature]))\n\t}\n\n\tasync init() {\n\t\tthis.index = await this.validateIndexJson()\n\t\tthis.elementsRendered = false\n\t\tsetRenderers(this)\n\t\tthis.validateElements()\n\t\tthis.layout = this.index.columnsLayout ? this.index.columnsLayout : null\n\t\tthis.components = {\n\t\t\telements: []\n\t\t}\n\t}\n\n\tasync main() {\n\t\t// prevent elements from reloading each time\n\t\tif (this.elementsRendered == true) return\n\t\tthis.elementsRendered = true\n\t\tfor (const element of this.elements) {\n\t\t\tconst holder = select(this.layout ? `#${element.section} > .sjpp-element-list` : `.sjpp-element-list`)\n\t\t\tif (element.type == 'card' || element.type == 'nestedCard') {\n\t\t\t\tthis.components.elements.push(\n\t\t\t\t\tawait cardInit({\n\t\t\t\t\t\tapp: this.app,\n\t\t\t\t\t\tholder: holder\n\t\t\t\t\t\t\t.style('display', 'grid')\n\t\t\t\t\t\t\t.style('grid-template-columns', 'repeat(auto-fit, minmax(320px, 1fr))')\n\t\t\t\t\t\t\t.style('gap', '10px')\n\t\t\t\t\t\t\t.style('list-style', 'none')\n\t\t\t\t\t\t\t.style('margin', '15px 0px'),\n\t\t\t\t\t\telement,\n\t\t\t\t\t\tdom: this.opts.dom,\n\t\t\t\t\t\tstate: this.state,\n\t\t\t\t\t\tsandboxDiv: this.dom.sandboxDiv\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t} else if (element.type == 'dsButton') {\n\t\t\t\tthis.components.elements.push(\n\t\t\t\t\tawait buttonInit({\n\t\t\t\t\t\tapp: this.app,\n\t\t\t\t\t\tholder,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\tdom: this.opts.dom,\n\t\t\t\t\t\tstate: this.state,\n\t\t\t\t\t\tsandboxDiv: this.dom.sandboxDiv\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const layoutInit = getCompInit(AppDrawerLayoutComp)\n\nfunction setRenderers(self) {\n\tif (!self.index.columnsLayout) noDefinedLayout(self)\n\tif (self.index.columnsLayout) columnsLayout(self)\n}\n\nfunction noDefinedLayout(self) {\n\tconst flexLayout = self.dom.wrapper\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('padding', '10px')\n\t\t.classed('sjpp-element-list', true)\n\treturn flexLayout\n}\n\nfunction columnsLayout(self) {\n\t// Allow user to create multiple columns in parent grid\n\tconst parentGrid = self.dom.wrapper\n\t\t.append('div')\n\t\t.style('display', 'grid')\n\t\t.style('grid-template-columns', 'repeat(auto-fit, minmax(425px, 1fr))')\n\t\t.style('gap', '10px')\n\t\t.style('padding', '10px')\n\t\t.style('text-align', 'left')\n\n\t//Allow user to create multiple parent columns in columnsLayout\n\tconst gridareas = []\n\tfor (const column of self.index.columnsLayout) gridareas.push(column.gridarea)\n\tparentGrid.style('grid-template-areas', `\"${gridareas.toString().replace(',', ' ')}\"`)\n\tfor (const col of self.index.columnsLayout) {\n\t\tconst newCol = parentGrid.append('div').style('grid-area', col.gridarea).classed('.sjpp-track-cols', true)\n\t\tfor (const section of col.sections) addSection(section, newCol)\n\t}\n\n\tfunction addSection(section, newCol) {\n\t\tconst newSection = newCol.append('div').attr('id', section.id)\n\t\tif (section.name)\n\t\t\tnewSection\n\t\t\t\t.append('h5')\n\t\t\t\t.classed('sjpp-appdrawer-cols', true)\n\t\t\t\t.style('color', rgb(defaultcolor).darker())\n\t\t\t\t.text(section.name)\n\t\tnewSection.append('div').classed('sjpp-element-list', true).style('padding', '10px')\n\n\t\treturn newSection\n\t}\n}\n", "import { getCompInit } from '#rx'\nimport { layoutInit } from './layout'\n\n/*\n.opts{}\n .app{}\n\t.dom{}\n\t.state{}\n\nTODOs: \n- Replace drawerFullHeight with a different approach\n\t- Causes the drawer to only partially appear when the window zooms in\n*/\n\nclass MainHeadboxBtn {\n\tconstructor(opts) {\n\t\tthis.type = 'mainBtn'\n\t\tthis.opts = this.validateOpts(opts)\n\t\tthis.dom = opts.dom\n\t\tthis.state = opts.state\n\t\tthis.hasStatePreMain = true\n\t\tsetRenderers(this)\n\t}\n\n\tvalidateOpts(opts) {\n\t\treturn opts.app.opts\n\t}\n\n\tgetState(appState) {\n\t\treturn {\n\t\t\tappBtnActive: appState.appBtnActive\n\t\t}\n\t}\n\n\tasync init() {\n\t\tthis.btnRendered = false\n\t\tthis.drawerFullHeight = ''\n\t\ttry {\n\t\t\t//detect whether to show examples right away, which is when the url is barebone without any route paths or search parameters\n\t\t\tif (window.location.pathname == '/' && !window.location.search.length)\n\t\t\t\tawait this.app.dispatch({ type: 'is_apps_btn_active', value: true })\n\t\t\tthis.components = {\n\t\t\t\tlayout: []\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tthrow e\n\t\t}\n\t}\n\n\tasync main(appState) {\n\t\tif (this.app.getState(appState).appBtnActive == true && this.btnRendered == false) {\n\t\t\tthis.dom.drawerDiv.style('background-color', '#f5f5f5') //Quick fix for drawerDiv initially appearing before layout init\n\t\t\t//Init layout only once when 'Apps' button is active for the first time\n\t\t\tthis.components.layout.push(\n\t\t\t\tawait layoutInit({\n\t\t\t\t\tapp: this.app,\n\t\t\t\t\tdom: this.dom,\n\t\t\t\t\tstate: this.state\n\t\t\t\t})\n\t\t\t)\n\t\t\t//Give the drawerDiv time to render before calculating height\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.drawerFullHeight = this.dom.drawerDiv.node().getBoundingClientRect().height + 5\n\t\t\t}, this.state.duration + 5)\n\t\t\tslideDrawer(this)\n\t\t\tthis.btnRendered = true\n\t\t}\n\t\tif (this.state.appBtnActive == false && this.btnRendered == true) slideDrawer(this)\n\t}\n}\n\nexport const mainBtnInit = getCompInit(MainHeadboxBtn)\n\nfunction setRenderers(self) {\n\tself.dom.btnWrapper\n\t\t.style('background-color', self.state.appBtnActive ? '#b2b2b2' : '#f2f2f2')\n\t\t.style('color', self.state.appBtnActive ? '#fff' : '#000')\n\t\t.on('click', async event => {\n\t\t\tevent.stopPropagation()\n\t\t\tawait self.app.dispatch({ type: 'is_apps_btn_active' })\n\t\t\tslideDrawer(self)\n\t\t\tif (self.state.appBtnActive) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tself.drawerFullHeight = self.dom.drawerDiv.node().getBoundingClientRect().height + 5\n\t\t\t\t}, self.state.duration + 5)\n\t\t\t}\n\t\t})\n\n\tself.dom.btn\n\t\t.attr('class', 'sja_menuoption')\n\t\t.style('display', 'inline-block')\n\t\t.style('background-color', 'transparent')\n\t\t.style('color', self.state.appBtnActive ? '#fff' : '#000')\n\t\t.style('padding', self.opts.padw_sm)\n\t\t.style('margin', '0px 5px')\n\t\t.style('cursor', 'pointer')\n\t\t.text('Apps')\n\n\t// an empty spacer div, needed since the arrows are absolutely positioned\n\tself.dom.drawerHint\n\t\t.style('position', 'relative')\n\t\t.style('display', 'inline-block')\n\t\t.style('height', self.state.arrowSize.closed + 'px')\n\t\t.style('width', self.state.appBtnActive ? self.state.hintWidth.open : self.state.hintWidth.closed)\n\t\t.style('background-color', 'transparent')\n\t\t.style('text-align', 'center')\n\t\t.style('cursor', 'pointer')\n\n\tself.dom.drawerArrow\n\t\t.style('position', 'absolute')\n\t\t.style('font-size', self.state.arrowSize.closed + 'px')\n\t\t.style('right', self.state.hintPos.closed.rt + 'px')\n\t\t.style('bottom', self.state.hintPos.closed.btm + 'px')\n\t\t.style('background-color', 'transparent')\n\t\t.style('color', self.state.arrowColor.closed)\n\t\t.style('opacity', self.state.appBtnActive ? 0 : 1)\n\t\t.style('cursor', 'pointer')\n\t\t.html('&#9660;')\n\n\tself.dom.drawerArrowOpen\n\t\t.style('position', 'absolute')\n\t\t.style('font-size', self.state.arrowSize.open + 'px')\n\t\t.style('left', self.state.hintPos.open.left + 'px')\n\t\t.style('bottom', self.state.hintPos.open.btm + 'px')\n\t\t.style('transform', 'rotate(180deg)')\n\t\t.style('background-color', 'transparent')\n\t\t.style('color', self.state.arrowColor.open)\n\t\t.style('opacity', self.state.appBtnActive ? 1 : 0)\n\t\t.style('cursor', 'pointer')\n\t\t.style('pointer-events', self.state.appBtnActive ? 'auto' : 'none')\n\t\t.html('&#9660;')\n\n\tself.drawerFullHeight = self.dom.drawerRow.node().getBoundingClientRect().height + 5\n}\n\nexport async function slideDrawer(self) {\n\tself.dom.btnWrapper\n\t\t.transition()\n\t\t.duration(self.opts.state.duration)\n\t\t.style('background-color', self.state.appBtnActive ? '#b2b2b2' : '#f2f2f2')\n\t\t.style('color', self.state.appBtnActive ? '#fff' : '#000')\n\n\tself.dom.btn\n\t\t.transition()\n\t\t.duration(self.opts.state.duration)\n\t\t.style('color', self.state.appBtnActive ? '#fff' : '#000')\n\n\tself.dom.drawerDiv\n\t\t.style('display', 'inline-block')\n\t\t.transition()\n\t\t.duration(self.opts.state.duration)\n\t\t.style('top', self.state.appBtnActive ? '0px' : '-' + self.drawerFullHeight + 'px')\n\n\tself.dom.drawerRow\n\t\t.transition()\n\t\t.duration(self.opts.state.duration)\n\t\t.style('height', self.state.appBtnActive ? self.drawerFullHeight + 'px' : '0px')\n\n\tself.dom.drawerHint\n\t\t.transition()\n\t\t.duration(self.opts.state.duration)\n\t\t.style('width', self.state.appBtnActive ? self.opts.state.hintWidth.open : self.opts.state.hintWidth.closed)\n\n\tself.dom.drawerArrow\n\t\t.transition()\n\t\t.duration(self.opts.state.duration)\n\t\t.style('opacity', self.state.appBtnActive ? 0 : 1)\n\n\tself.dom.drawerArrowOpen\n\t\t.style('pointer-events', self.state.appBtnActive ? 'auto' : 'none')\n\t\t.transition()\n\t\t.duration(self.opts.state.duration)\n\t\t.style('opacity', self.state.appBtnActive ? 1 : 0)\n}\n", "import { getStoreInit } from '#rx'\n\n/*\n.opts{}\n\n*/\n\nclass AppDrawerStore {\n\tconstructor(opts) {\n\t\tthis.type = 'store'\n\t\tthis.defaultState = {\n\t\t\t// for apps drawer animation\n\t\t\tduration: 500,\n\t\t\thintPos: {\n\t\t\t\topen: { btm: -42, left: 13 },\n\t\t\t\tclosed: { btm: 3, rt: 5 }\n\t\t\t},\n\t\t\thintWidth: { open: '0px', closed: '18px' },\n\t\t\tarrowSize: { open: 42, closed: 20 },\n\t\t\tarrowColor: { open: 'rgb(242,242,242)', closed: 'rgb(85,85,85)' },\n\t\t\tappBtnActive: false\n\t\t}\n\t}\n\n\tasync init() {}\n}\n\nexport const appDrawerStoreInit = getStoreInit(AppDrawerStore)\n\nAppDrawerStore.prototype.actions = {\n\tis_apps_btn_active(action) {\n\t\tthis.state.appBtnActive = 'value' in action ? action.value : !this.state.appBtnActive\n\t}\n}\n", "import { getAppInit } from '#rx'\nimport { mainBtnInit } from './mainBtn'\nimport { appDrawerStoreInit } from './store'\n\n/*\n.opts{}\n .holder\n .genomes{}\n - client-side genome object\n\t.drawerRow\n\t.sandboxDiv\n\t.genome_browser_btn\n\t.debugmode\n\t.headbox\n\t.padw_sm\n\nTODOs: \n\nQuestions: \n*/\n\nclass AppDrawerApp {\n\tconstructor(opts) {\n\t\tthis.type = 'app'\n\n\t\tconst drawerDiv = opts.drawerRow\n\t\t\t.append('div')\n\t\t\t.style('position', 'relative')\n\t\t\t.style('margin', '0 20px')\n\t\t\t.style('padding', `0 ${opts.padw_sm}`)\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('overflow', 'hidden')\n\t\t\t.style('border-radius', '0px 0px 5px 5px')\n\t\t\t.style('width', '93vw')\n\t\t\t.classed('sjpp-drawer-div', true)\n\n\t\tconst btnWrapper = opts.headbox\n\t\t\t.append('div')\n\t\t\t.style('position', 'relative')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('margin-left', '5px')\n\t\t\t.style('margin-right', '5px')\n\t\t\t.style('border-radius', '5px')\n\t\t\t.classed('sjpp-apps-btn-wrapper', true)\n\n\t\tthis.dom = {\n\t\t\tdrawerRow: opts.drawerRow,\n\t\t\tdrawerDiv,\n\t\t\tsandboxDiv: opts.sandboxDiv,\n\t\t\tbtnWrapper,\n\t\t\tbtn: btnWrapper.append('div'),\n\t\t\tdrawerHint: btnWrapper.append('div'),\n\t\t\tdrawerArrow: btnWrapper.append('div'),\n\t\t\tdrawerArrowOpen: btnWrapper.append('div'),\n\t\t\twrapper: drawerDiv.append('div')\n\t\t}\n\t}\n\n\tpreApiFreeze(api) {\n\t\tapi.cardsPath = this.opts.cardsPath\n\t}\n\n\tasync init() {\n\t\ttry {\n\t\t\tthis.store = await appDrawerStoreInit({ app: this.api, state: this.opts.state })\n\t\t\tthis.state = await this.store.copyState()\n\t\t\tthis.components = {\n\t\t\t\tmainBtn: await mainBtnInit({\n\t\t\t\t\tapp: this.api,\n\t\t\t\t\tdom: this.dom,\n\t\t\t\t\tstate: this.state,\n\t\t\t\t\tindexJson: this.indexJson\n\t\t\t\t})\n\t\t\t}\n\t\t\tawait this.api.dispatch()\n\t\t} catch (e) {\n\t\t\tthrow e\n\t\t}\n\t}\n\n\tmain() {}\n}\n\nexport const appDrawerInit = getAppInit(AppDrawerApp)\n", "import { first_genetrack_tolist } from '#common/1stGenetk'\nimport { InputSearch, Menu, newSandboxDiv } from '#dom'\nimport { searchItems } from './omniSearch.js'\nimport { appDrawerInit } from '../../appdrawer/app.js'\nimport { rgb as d3rgb } from 'd3-color'\nimport { defaultcolor } from '#shared/common.js'\nimport { dofetch3 } from '#common/dofetch'\nimport { ClientCopyGenome } from 'types/global.ts'\n\ntype Citation = {\n\tid: number\n\ttitle: string\n\tappHeaderTitle: string\n\tyear: number\n\tjournal: string\n\tpmid: number\n\tpmidURL: string\n\tdoi: string\n}\n\ntype AppHeaderOpts = {\n\t/** menu created in app.js */\n\theadtip: Menu\n\t/** runpp app */\n\tapp: any\n\t/** server returned data */\n\tdata: any\n\t/** token */\n\tjwt: any\n}\n\nexport class AppHeader {\n\theadtip: Menu\n\tapp: any\n\tdata: any\n\tjwt: any\n\t/** List of publications defined in the app drawer\n\t * Appears in button in the header and in search results\n\t */\n\tpublications: Citation[]\n\t/** Used in both the Help button and omni search\n\t * .onlySearch is used to filter out items that should not appear in the Help button\n\t */\n\tstatic help = [\n\t\t{\n\t\t\tlabel: 'Embed in your website',\n\t\t\tlink: 'https://github.com/stjude/proteinpaint/wiki/Embedding'\n\t\t},\n\t\t{\n\t\t\tlabel: 'URL parameters',\n\t\t\tlink: 'https://github.com/stjude/proteinpaint/wiki/URL-parameters'\n\t\t},\n\t\t{\n\t\t\tlabel: 'All tutorials',\n\t\t\tlink: 'https://github.com/stjude/proteinpaint/wiki/'\n\t\t},\n\t\t{\n\t\t\tlabel: 'User community',\n\t\t\tlink: 'https://groups.google.com/g/proteinpaint'\n\t\t},\n\t\t{\n\t\t\tlabel: 'License ProteinPaint',\n\t\t\tlink: 'https://www.stjude.org/research/why-st-jude/shared-resources/technology-licensing/technologies/proteinpaint-web-application-for-visualizing-genomic-data-sj-15-0021.html',\n\t\t\tonlySearch: true\n\t\t},\n\t\t{\n\t\t\tlabel: 'Our Team',\n\t\t\tlink: 'https://proteinpaint.stjude.org/team/',\n\t\t\tonlySearch: true\n\t\t}\n\t]\n\n\tconstructor(opts: AppHeaderOpts) {\n\t\tthis.headtip = opts.headtip\n\t\tthis.app = opts.app\n\t\tthis.data = opts.data\n\t\tthis.jwt = opts.jwt\n\t\tthis.publications = []\n\t}\n\n\tasync createPublicationsList() {\n\t\tconst re = await dofetch3(this.app.cardsPath + '/citations.json')\n\t\tif (re.error) console.error(`Problem retrieving ../cards/citations.json`)\n\t\t//Sort in reverse chronological order for the publications button\n\t\tthis.publications = re?.publications?.length\n\t\t\t? re.publications.filter((d: Citation) => d.appHeaderTitle).sort((a: Citation, b: Citation) => b.year - a.year)\n\t\t\t: []\n\t}\n\n\tasync makeheader() {\n\t\tawait this.createPublicationsList()\n\n\t\tconst color = d3rgb(defaultcolor)\n\t\tconst padw_lg = '13px'\n\t\tconst padw_input = '5px 10px'\n\t\tconst padw_sm = '7px 10px'\n\t\tconst doc_width = document.documentElement.clientWidth\n\t\t// head\n\t\tconst row = this.app.holder\n\t\t\t.append('div')\n\t\t\t.style('white-space', 'nowrap')\n\t\t\t.style(\n\t\t\t\t'border-bottom',\n\t\t\t\tdoc_width > 1600 ? 'solid 1px rgba(' + color.r + ',' + color.g + ',' + color.b + ',.3)' : ''\n\t\t\t)\n\n\t\tconst headbox = row\n\t\t\t.append('div')\n\t\t\t.style('margin', '10px')\n\t\t\t.style('padding', '8px')\n\t\t\t.style('padding-bottom', '12px')\n\t\t\t.style('display', doc_width < 1600 ? 'block' : 'inline-block')\n\t\t\t.style(\n\t\t\t\t'border-bottom',\n\t\t\t\tdoc_width < 1600 ? 'solid 1px rgba(' + color.r + ',' + color.g + ',' + color.b + ',.3)' : ''\n\t\t\t)\n\n\t\t// .style('border-radius', '5px')\n\t\t// .style('background-color', 'rgba(' + color.r + ',' + color.g + ',' + color.b + ',.1)')\n\t\tconst headinfo = row\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('padding', padw_sm)\n\t\t\t.style('padding-left', '25px')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.style('color', d3rgb(defaultcolor).darker())\n\n\t\t{\n\t\t\t// a row for server stats\n\t\t\tconst row = headinfo.append('div').style('padding-left', '15px')\n\t\t\t// link to the published ppfull container version, instead of github release tarball which we do not advertise;\n\t\t\t// github's pkgs/container link has a timestamp before the tag, which cannot be computed here (but may be able to query later?)\n\t\t\tconst link = `https://github.com/stjude/proteinpaint/pkgs/container/ppfull` // url to list of published container versions\n\t\t\tconst version = this.data.pkgver\n\t\t\t\t? `Version: <a href=\"${link}\" target=\"${this.data.pkgver}\">${this.data.pkgver}</a>`\n\t\t\t\t: `Code date: ${this.data.codedate}` // default to using code date as before if pkgver is not available\n\t\t\trow\n\t\t\t\t.attr('id', 'sjpp-serverstat')\n\t\t\t\t.append('span')\n\t\t\t\t.html(`${version}, server launched: ${this.data.launchdate || '??'}.`)\n\t\t\tif (this.data.hasblat) {\n\t\t\t\trow\n\t\t\t\t\t.append('a')\n\t\t\t\t\t.style('margin-left', '10px')\n\t\t\t\t\t.text('Running BLAT')\n\t\t\t\t\t.on('click', async event => {\n\t\t\t\t\t\tthis.headtip.clear().showunder(event.target)\n\t\t\t\t\t\tconst div = this.headtip.d.append('div').style('margin', '10px')\n\t\t\t\t\t\tconst wait = div.append('div').text('Loading...')\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst data = await dofetch3('blat?serverstat=1')\n\t\t\t\t\t\t\tif (data.error) throw data.error\n\t\t\t\t\t\t\tif (!data.lst) throw 'invalid response'\n\t\t\t\t\t\t\twait.remove()\n\t\t\t\t\t\t\tfor (const i of data.lst) {\n\t\t\t\t\t\t\t\tdiv.append('div').text(i)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (e: any) {\n\t\t\t\t\t\t\twait.text(e.message || e)\n\t\t\t\t\t\t\tif (e.stack) console.error(e.stack)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif (this.data.headermessage) {\n\t\t\theadinfo.append('div').html(this.data.headermessage)\n\t\t}\n\n\t\t// 1\n\t\theadbox\n\t\t\t.append('div')\n\t\t\t.text('ProteinPaint')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('padding', padw_lg)\n\t\t\t.style('color', defaultcolor)\n\t\t\t.style('font-size', '1.3em')\n\t\t\t.style('font-weight', 'bold')\n\n\t\t// 2, search box\n\t\tconst omniSearch = new InputSearch({\n\t\t\tholder: headbox,\n\t\t\ttip: this.headtip,\n\t\t\tstyle: {\n\t\t\t\tpadding: padw_sm,\n\t\t\t\tborder: `'solid 1px ${defaultcolor}`\n\t\t\t},\n\t\t\tsize: 32,\n\t\t\tplaceholder: 'Gene, position, SNP, app, or dataset',\n\t\t\ttitle: 'Search by gene, SNP, position, app, or dataset',\n\t\t\tsearchItems: async () => {\n\t\t\t\treturn await searchItems(this.app, this.headtip, AppHeader.help, this.publications, this.jwt)\n\t\t\t}\n\t\t})\n\n\t\tomniSearch.initUI()\n\n\t\tconst genome_select_div = headbox.append('div').attr('class', 'sjpp-genome-select-div').style('padding', padw_sm)\n\n\t\tconst get_placeholder = () => {\n\t\t\tconst currG = this.app.genomes[this.app.selectgenome.property('value')]\n\t\t\t/** Defaults */\n\t\t\tconst opts2Show = ['Gene', 'position', 'app']\n\t\t\t/** Show all the genomic options together */\n\t\t\tif (currG.hasSNP) opts2Show.splice(2, 0, 'SNP')\n\t\t\tif (Object.keys(currG.datasets).length) opts2Show.push('dataset')\n\t\t\tconst str = opts2Show.join(', ').replace(/,(?=[^,]*$)/, ', or')\n\t\t\treturn str\n\t\t}\n\n\t\tthis.app.selectgenome = genome_select_div\n\t\t\t.append('select')\n\t\t\t.attr('aria-label', 'Select a genome')\n\t\t\t.attr('class', 'sjpp-genome-select')\n\t\t\t.style('padding', padw_input)\n\t\t\t.style('border', 'solid 1px ' + defaultcolor)\n\t\t\t.on('change', () => {\n\t\t\t\tthis.update_genome_browser_btn(this.app)\n\t\t\t\tomniSearch.updatePlaceholder(get_placeholder())\n\t\t\t})\n\n\t\tconst filterGenomes = Object.values(this.app.genomes).filter((g: any) => !g.hideOnClient) as ClientCopyGenome[]\n\t\tfor (const n of filterGenomes) {\n\t\t\tthis.app.selectgenome.append('option').attr('n', n.name).text(`${n.species} ${n.name}`).property('value', n.name)\n\t\t}\n\t\tthis.app.genome_browser_btn = this.make_genome_browser_btn(this.app, headbox, this.jwt)\n\n\t\tthis.app.drawer = await appDrawerInit({\n\t\t\tholder: this.app.holder,\n\t\t\tgenomes: this.app.genomes,\n\t\t\tdrawerRow: this.app.holder\n\t\t\t\t.append('div')\n\t\t\t\t.style('position', 'relative')\n\t\t\t\t.style('overflow-x', 'visible')\n\t\t\t\t.style('overflow-y', 'hidden')\n\t\t\t\t.classed('sjpp-drawer-row', true),\n\t\t\tsandboxDiv: this.app.holder.append('div').style('margin-top', '15px').classed('sjpp-drawer-sandbox', true),\n\t\t\tgenome_browser_btn: this.app.genome_browser_btn,\n\t\t\tdebugmode: this.app.debugmode,\n\t\t\theadbox,\n\t\t\tpadw_sm,\n\t\t\tcardsPath: this.app.cardsPath\n\t\t})\n\n\t\t//Help button\n\t\theadbox\n\t\t\t.append('span')\n\t\t\t.classed('sja_menuoption', true)\n\t\t\t.attr('id', 'sjpp-header-help-btn')\n\t\t\t.style('padding', padw_sm)\n\t\t\t.text('Help')\n\t\t\t.on('click', async event => {\n\t\t\t\tconst p = event.target.getBoundingClientRect()\n\t\t\t\tconst div = this.headtip.clear().show(p.left - 0, p.top + p.height + 5)\n\n\t\t\t\tawait div.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('padding', '5px 20px')\n\t\t\t\t\t.selectAll('p')\n\t\t\t\t\t.data(AppHeader.help.filter(d => !d.onlySearch))\n\t\t\t\t\t.enter()\n\t\t\t\t\t.append('p')\n\t\t\t\t\t.html(d => `<a href=${d.link} target=_blank>${d.label}</a>`)\n\t\t\t})\n\n\t\t//Publications button\n\t\t//Citations not available on CI server\n\t\tif (this.publications.length > 0) {\n\t\t\theadbox\n\t\t\t\t.append('span')\n\t\t\t\t.classed('sja_menuoption', true)\n\t\t\t\t.attr('id', 'sjpp-header-publications-btn')\n\t\t\t\t.style('padding', padw_sm)\n\t\t\t\t.style('margin', '0px 5px')\n\t\t\t\t.text('Publications')\n\t\t\t\t.on('click', async event => {\n\t\t\t\t\tconst p = event.target.getBoundingClientRect()\n\t\t\t\t\tconst div = this.headtip.clear().show(p.left - 150, p.top + p.height + 5)\n\n\t\t\t\t\tawait div.d\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('padding', '5px 20px')\n\t\t\t\t\t\t.selectAll('p')\n\t\t\t\t\t\t.data(this.publications)\n\t\t\t\t\t\t.enter()\n\t\t\t\t\t\t.append('p')\n\t\t\t\t\t\t.html((d: any) => `<a href=${d.doi} target=_blank>${d.appHeaderTitle}, ${d.journal}, ${d.year}</a>`)\n\t\t\t\t})\n\t\t}\n\t}\n\n\tmake_genome_browser_btn(app, headbox, jwt) {\n\t\tif (app.selectgenome.node().options.length === 0) {\n\t\t\tconsole.error(`No selected selectgenome options.`)\n\t\t\treturn\n\t\t}\n\n\t\tconst padw = '8px'\n\t\tconst genome_btn_div = headbox.append('span')\n\t\tconst genomename = app.selectgenome.node().options[app.selectgenome.property('selectedIndex')].value\n\n\t\tconst g_browser_btn = genome_btn_div\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.attr('id', 'genome_btn')\n\t\t\t.style('padding', padw)\n\t\t\t.datum(genomename)\n\t\t\t.text(genomename + ' genome browser')\n\t\t\t.on('click', () => {\n\t\t\t\t//Grab the current genome selected\n\t\t\t\tconst genomeSelected = app.selectgenome.node().value\n\t\t\t\tconst g = app.genomes[genomeSelected]\n\t\t\t\tif (!g) {\n\t\t\t\t\talert('Invalid genome name: ' + genomeSelected)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst sandbox_div = newSandboxDiv(app.drawer.opts.sandboxDiv)\n\t\t\t\tsandbox_div.header.text(genomeSelected + ' genome browser')\n\n\t\t\t\tconst par = {\n\t\t\t\t\thostURL: app.hostURL,\n\t\t\t\t\tjwt,\n\t\t\t\t\tholder: sandbox_div.body,\n\t\t\t\t\tgenome: g,\n\t\t\t\t\tchr: g.defaultcoord.chr,\n\t\t\t\t\tstart: g.defaultcoord.start,\n\t\t\t\t\tstop: g.defaultcoord.stop,\n\t\t\t\t\tnobox: true,\n\t\t\t\t\ttklst: [],\n\t\t\t\t\tdebugmode: app.debugmode\n\t\t\t\t}\n\t\t\t\tfirst_genetrack_tolist(g, par.tklst)\n\n\t\t\t\timport('../block.js').then(b => new b.Block(par))\n\t\t\t\tapp.drawer.dispatch({ type: 'is_apps_btn_active', value: false })\n\t\t\t})\n\t\treturn g_browser_btn\n\t}\n\n\tupdate_genome_browser_btn(app) {\n\t\tapp.genome_browser_btn.text(app.selectgenome.node().value + ' genome browser')\n\t\tapp.genome_browser_btn.datum(app.selectgenome.node().value)\n\t}\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { dofetch3 } from '#common/dofetch'\nimport { openSandbox } from '../../appdrawer/adSandbox'\nimport { throwMsgWithFilePathAndFnName } from '../../dom/sayerror.ts'\nimport { string2pos } from '../coord'\nimport { newSandboxDiv } from '../../dom/sandbox.ts'\nimport * as parseurl from '../app.parseurl'\nimport urlmap from '#common/urlmap'\nimport { first_genetrack_tolist } from '#common/1stGenetk'\nimport blockinit from '../block.init'\nimport { select as d3select } from 'd3-selection'\n\n/*\n----EXPORTED----\nsearchItems()\nfindgenelst()\nfindgene2paint()\n\n----Internal----\nfindAppDrawerElements()\ngetExampleNames()\ngetFilteredElements()\n*/\n\nexport async function searchItems(app, tip, help, publications, jwt) {\n\tconst userInput = d3select('input').property('value').trim()\n\tconst data = [\n\t\t{\n\t\t\ttitle: 'Genes',\n\t\t\tdefault: true,\n\t\t\titems: await findgenelst(userInput, app.selectgenome.property('value'), jwt),\n\t\t\tcolor: '#F2F2F2',\n\t\t\tcallback: d => {\n\t\t\t\tapp.drawer.dispatch({ type: 'is_apps_btn_active', value: false })\n\t\t\t\ttip.hide()\n\t\t\t\tfindgene2paint(d, app, app.selectgenome.property('value'), jwt)\n\t\t\t}\n\t\t}\n\t]\n\tawait findAppDrawerElements(app, userInput, data, tip)\n\t//Keep 'Help' section second last\n\tdata.push({\n\t\ttitle: 'Help',\n\t\tdefault: false,\n\t\titems: help.filter(d => d.label.toLowerCase().includes(userInput.toLowerCase())),\n\t\tcolor: '#faebd9',\n\t\tcallback: d => {\n\t\t\twindow.open(d.link, d.label)\n\t\t}\n\t})\n\tdata.push({\n\t\ttitle: 'Publications',\n\t\tdefault: false,\n\t\titems: publications.filter(\n\t\t\td =>\n\t\t\t\td.title.toLowerCase().includes(userInput.toLowerCase()) ||\n\t\t\t\td.appHeaderTitle.toLowerCase().includes(userInput.toLowerCase())\n\t\t),\n\t\tcolor: '#E6E6FA',\n\t\tcallback: d => {\n\t\t\twindow.open(d.doi, d.title)\n\t\t}\n\t})\n\treturn data\n}\n\nasync function findAppDrawerElements(app, input, data, tip) {\n\tconst re = await dofetch3(app.cardsPath + '/index.json')\n\tif (re.error) throwMsgWithFilePathAndFnName(`Problem retrieving ../cards/index.json`)\n\tconst userInput = input.toLowerCase().trim()\n\tconst elements = [...re.elements]\n\tlet filteredElements\n\tif (userInput.length > 2) {\n\t\t/** Adding the examples to the search terms is expensive\n\t\t * Limit when all card files are loaded based on user input\n\t\t * Maybe timeout instead? or combination of the two?\n\t\t */\n\t\tawait getExampleNames(elements, app)\n\t\tfilteredElements = getFilteredElements(elements, userInput)\n\t} else {\n\t\tfilteredElements = getFilteredElements(elements, userInput)\n\t}\n\n\tconst opts = {\n\t\tapp: app.drawer.opts,\n\t\tsandboxDiv: app.drawer.opts.sandboxDiv,\n\t\tgenomes: app.genomes,\n\t\tfromApp: true\n\t}\n\n\tdata.push(\n\t\t{\n\t\t\ttitle: 'Tracks and Apps',\n\t\t\titems: filteredElements.filter(c => c.type == 'card'),\n\t\t\tcolor: '#e1edf7',\n\t\t\tcallback: element => {\n\t\t\t\tapp.drawer.dispatch({ type: 'is_apps_btn_active', value: false })\n\t\t\t\ttip.hide()\n\t\t\t\topenSandbox(element, opts)\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\ttitle: 'Datasets',\n\t\t\titems: filteredElements.filter(c => c.type == 'dsButton'),\n\t\t\tcolor: '#e5f5e4',\n\t\t\tcallback: element => {\n\t\t\t\tapp.drawer.dispatch({ type: 'is_apps_btn_active', value: false })\n\t\t\t\ttip.hide()\n\t\t\t\topenSandbox(element, opts)\n\t\t\t}\n\t\t}\n\t)\n\treturn data\n}\n\nasync function getExampleNames(elements, app) {\n\tconst promises = elements.map(async elem => {\n\t\tif (elem.hidden || elem.type != 'card' || !elem.sandboxJson) return elem\n\t\tconst exs = await dofetch3(app.cardsPath + `/${elem.sandboxJson}.json`)\n\t\tif (exs?.ppcalls.length > 0) {\n\t\t\tfor (const c of exs.ppcalls) {\n\t\t\t\tif (c.isUI) return\n\t\t\t\tif (c?.label) elem.searchterms.push(c.label)\n\t\t\t}\n\t\t}\n\t})\n\n\tawait Promise.all(promises)\n}\n\nfunction getFilteredElements(elements, userInput) {\n\treturn elements\n\t\t.filter(elem => {\n\t\t\tif (elem.hidden) return false\n\t\t\tlet searchTermFound = (elem.searchterms || []).reduce((searchTermFound, searchTerm) => {\n\t\t\t\tif (searchTermFound) return true\n\t\t\t\treturn searchTerm.toLowerCase().includes(userInput)\n\t\t\t}, false)\n\t\t\treturn searchTermFound || elem.name.toLowerCase().includes(userInput)\n\t\t})\n\t\t.sort((a, b) => a.name.localeCompare(b.name))\n}\n\nexport async function findgenelst(str, genome, jwt) {\n\t//TODO - including something here about if user input includes a special character to return rather than comment out catch\n\tif (str.length == 0) return\n\ttry {\n\t\tconst data = await dofetch3('/genelookup', {\n\t\t\tbody: {\n\t\t\t\tinput: str,\n\t\t\t\tgenome,\n\t\t\t\tjwt\n\t\t\t}\n\t\t})\n\n\t\tif (data.error) throw data.error\n\t\tif (!data.hits) throw '.hits[] missing'\n\t\treturn data.hits\n\t} catch (err) {\n\t\t// err is likely \"invalid character in gene name\". ignore and continue\n\t\t// if (err.stack) console.log(err.stack)\n\t\t// throw err\n\t}\n}\n\nexport async function findgene2paint(str, app, genomename, jwt) {\n\tconst g = app.genomes[genomename]\n\tif (!g) {\n\t\tconsole.error('unknown genome ' + genomename)\n\t\treturn\n\t}\n\tconst sandbox_div = newSandboxDiv(app.drawer.opts.sandboxDiv)\n\tsandbox_div.header.html(\n\t\t'<div style=\"display:inline-block;\">' +\n\t\t\tstr +\n\t\t\t'</div><div class=\"sjpp-output-sandbox-title\">' +\n\t\t\tgenomename +\n\t\t\t'</div>'\n\t)\n\t// may yield tklst from url parameters\n\tconst urlp = urlmap()\n\tconst tklst = await parseurl.get_tklst(urlp, g)\n\n\tconst pos = string2pos(str, g)\n\tif (pos) {\n\t\t// input is coordinate, launch block\n\t\tconst par = {\n\t\t\thostURL: app.hostURL,\n\t\t\tjwt,\n\t\t\tholder: sandbox_div.body,\n\t\t\tgenome: g,\n\t\t\tnobox: true,\n\t\t\tchr: pos.chr,\n\t\t\tstart: pos.start,\n\t\t\tstop: pos.stop,\n\t\t\tdogtag: genomename,\n\t\t\ttklst,\n\t\t\tdebugmode: app.debugmode\n\t\t}\n\t\tfirst_genetrack_tolist(g, par.tklst)\n\n\t\timport('../block.js')\n\t\t\t.then(b => new b.Block(par))\n\t\t\t.catch(err => {\n\t\t\t\tapp.error0(err)\n\t\t\t})\n\t\treturn\n\t}\n\n\t// input string is not coordinate, find gene match\n\tconst par = {\n\t\thostURL: app.hostURL,\n\t\tjwt,\n\t\tquery: str,\n\t\tgenome: g,\n\t\tholder: sandbox_div.body,\n\t\tvariantPageCall_snv: app.variantPageCall_snv,\n\t\tsamplecart: app.samplecart,\n\t\ttklst,\n\t\tdebugmode: app.debugmode\n\t}\n\n\t// add svcnv tk from url param\n\tconst tmp = sessionStorage.getItem('urlp_mds')\n\tif (tmp) {\n\t\tconst l = tmp.split(',')\n\t\tif (l.length == 2) {\n\t\t\tpar.datasetqueries = [{ dataset: l[0], querykey: l[1] }]\n\t\t}\n\t}\n\n\tawait blockinit(par)\n}\n", "import { getCompInit } from '#rx'\nimport { rgb } from 'd3-color'\nimport { openSandbox } from './adSandbox'\nimport { slideDrawer } from './mainBtn'\n\n/*\n.opts{\n\t.app{\n\t\t.holder\n\t\t.element{}\n\t\t.sandboxDiv\n\t}\n}\n\nTODOs: \n\n- responsiveness of image on window resize \n\t- expand image size on resize\n\t- non square, take better use of space\n- Need fn in utils to decide black or white text based on background color contrast\n- Unify card and nestedCard layout. Only call one layout function for both\n\t- optional non image card layout\n\t- Make ribbons appear on nested cards\n- element.section only required if columnsLayout provided\n\n*/\n\nclass AppDrawerCard {\n\t// handles types 'card' and 'nestedCard'\n\tconstructor(opts) {\n\t\tthis.type = 'card'\n\t\tthis.opts = this.validateOpts(opts)\n\t\tthis.holder = opts.holder\n\t\tthis.dom = opts.dom\n\t\tthis.sandboxDiv = opts.sandboxDiv\n\t\tsetRenderers(this)\n\t}\n\n\tvalidateOpts(opts) {\n\t\tif (!opts.element.name) throw `Card .name is missing`\n\t\tif (opts.element.type == 'card') {\n\t\t\tif (!opts.element.sandboxJson && !opts.element.sandboxHtml)\n\t\t\t\tthrow `Either .sandboxJson or .sandboxHtml is missing for card=${opts.element.name}`\n\t\t}\n\t\tif (opts.element.type == 'nestedCard') {\n\t\t\tif (!opts.element.children || opts.element.children.length == 0)\n\t\t\t\tthrow `Missing .children for nested card = ${opts.element.name}`\n\t\t}\n\t\tif (opts.element.ribbon) {\n\t\t\tif (!opts.element.ribbon.text) throw `Missing ribbon .text for ${opts.element.type} = ${opts.element.name}`\n\n\t\t\t//ProteinPaint app drawer specific validation\n\t\t\tif (\n\t\t\t\t(opts.element.ribbon.text.toUpperCase() == 'NEW' || opts.element.ribbon.text.toUpperCase() == 'UPDATED') &&\n\t\t\t\t!opts.element.ribbon.expireDate\n\t\t\t)\n\t\t\t\tthrow `${opts.element.type} = ${\n\t\t\t\t\topts.element.name\n\t\t\t\t} ribbon is ${opts.element.ribbon.text.toUpperCase()} but .expireDate is missing. Please provide`\n\n\t\t\tif (opts.element.ribbon.expireDate) {\n\t\t\t\tif (opts.element.ribbon.expireDate >= 0) {\n\t\t\t\t\tthrow `Flag for ${opts.element.type} = ${opts.element.name} is not a valid date`\n\t\t\t\t} //TODO add validation for format?\n\t\t\t}\n\t\t}\n\t\treturn opts\n\t}\n\n\tmain() {}\n}\n\nexport const cardInit = getCompInit(AppDrawerCard)\n\nfunction setRenderers(self) {\n\tconst card = self.holder.append('li')\n\tif (self.opts.element.type == 'card') {\n\t\tcard.classed('sjpp-track', true).html(\n\t\t\t`<div class=\"sjpp-track-h\"><span style=\"font-size:14.5px;font-weight:500;\">${self.opts.element.name}</span></div>\n\t\t\t\t${\n\t\t\t\t\tself.opts.element.description\n\t\t\t\t\t\t? `<span class=\"sjpp-track-blurb\" style=\"cursor:default\">${self.opts.element.description}</span></div>`\n\t\t\t\t\t\t: ' '\n\t\t\t\t}\n\t\t\t\t<span class=\"sjpp-track-image\"><img src=\"${self.opts.element.image}\" alt=\"${\n\t\t\t\tself.opts.element.description\n\t\t\t}\"></img></span>\n\t\t\t\t</div>`\n\t\t)\n\t} else if (self.opts.element.type == 'nestedCard') {\n\t\tcard.classed('sjpp-app-drawer-card', true).html(\n\t\t\t`<p style=\"margin-left: 12px; font-size:14.5px;font-weight:500; display: block;\">${self.opts.element.name}</p>\n\t\t\t<p style=\"display: block; font-size: 13px; font-weight: 300; margin-left: 20px; justify-content: center; font-style:oblique; color: #403f3f;\">${self.opts.element.description}</p>`\n\t\t)\n\t}\n\n\tself.makeRibbon = function(ribbon) {\n\t\t//only relevant for 'card', not 'nestedCard'\n\t\tconst ribbonDiv = card\n\t\t\t.append('div')\n\t\t\t.classed('sjpp-app-drawer-card-ribbon', true)\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('justify-content', 'center')\n\n\t\t//*********TODO: move from diagonal to straight on right side */\n\t\tconst text = ribbon.text.toUpperCase()\n\t\t//Enforce color palette for proteinpaint homepage ribbons\n\t\tconst color =\n\t\t\ttext == 'BETA'\n\t\t\t\t? '#418cb5'\n\t\t\t\t: text == 'NEW'\n\t\t\t\t? '#1ba176'\n\t\t\t\t: text == 'UPDATED'\n\t\t\t\t? 'orange'\n\t\t\t\t: ribbon.color\n\t\t\t\t? ribbon.color\n\t\t\t\t: 'red'\n\n\t\tribbonDiv\n\t\t\t.append('span')\n\t\t\t.text(text)\n\t\t\t.style('color', 'white')\n\t\t\t.style('background-color', rgb(color).darker())\n\t\t\t.style('height', 'auto')\n\t\t\t.style('width', '100%')\n\t\t\t.style('top', '15%')\n\t\t\t.style('left', '-30%')\n\t\t\t.style('font-size', '11.5px')\n\t\t\t.style('text-transform', 'uppercase')\n\t\t\t.style('text-align', 'center')\n\t}\n\n\tif (self.opts.element.ribbon) {\n\t\tconst today = new Date()\n\t\tconst ribbonExpireDate = new Date(self.opts.element.ribbon.expireDate)\n\t\t//Allows ribbons to expire or appear indefinitely\n\t\tif (ribbonExpireDate > today || ribbonExpireDate == 'Invalid Date') self.makeRibbon(self.opts.element.ribbon)\n\t}\n\n\tcard.on('click', async event => {\n\t\tevent.stopPropagation()\n\t\tawait self.app.dispatch({\n\t\t\ttype: 'is_apps_btn_active',\n\t\t\tvalue: false\n\t\t})\n\t\tslideDrawer(self)\n\t\tawait openSandbox(self.opts.element, self.opts)\n\t})\n}\n", "import { getInitFxn } from '#rx'\nimport * as utils from './utils'\nimport { openSandbox } from './adSandbox'\nimport { slideDrawer } from './mainBtn'\n\n/*\n.opts{\n\t.app\n\t.holder\n\t.element{}\n\t.dom{}\n\t.state{}\n\t.sandboxDiv\n}\n*/\n\nclass AppDrawerButton {\n\tconstructor(opts) {\n\t\tthis.type = 'button' // works for 'dsButton'. May expand to other button types\n\t\tthis.opts = this.validateOpts(opts)\n\t\tthis.holder = opts.holder\n\t\tthis.dom = opts.dom\n\t\tthis.sandboxDiv = opts.sandboxDiv\n\t\tsetRenderers(this)\n\t}\n\n\tvalidateOpts(opts) {\n\t\tif (!opts.element.name) throw `Button name is missing`\n\t\tif (!opts.element.sandboxJson && !opts.element.sandboxHtml)\n\t\t\tthrow `Either .sandboxJson or .sandboxHtml is missing for button=${opts.element.name}`\n\t\treturn opts\n\t}\n\n\tmain() {}\n}\n\nexport const buttonInit = getInitFxn(AppDrawerButton)\n\nfunction setRenderers(self) {\n\tconst btn = utils.makeButton({ div: self.holder, text: self.opts.element.name, margin: '20px 20px 0px' })\n\tbtn.attr('class', 'sjpp-appdrawer-dataset-btn').on('click', async event => {\n\t\tevent.stopPropagation()\n\t\tawait self.app.dispatch({\n\t\t\ttype: 'is_apps_btn_active',\n\t\t\tvalue: false\n\t\t})\n\t\tslideDrawer(self)\n\t\tawait openSandbox(self.opts.element, self.opts)\n\t})\n}\n", "import { getCompInit } from '#rx'\nimport { rgb } from 'd3-color'\nimport { defaultcolor } from '#shared/common.js'\nimport { cardInit } from './card'\nimport { buttonInit } from './dsButton'\nimport { select } from 'd3-selection'\nimport { dofetch3, sayerror } from '#src/client'\n\n/*\n.opts{}\n .app{}\n\t.dom{}\n\t.state{}\n\nQuestions: \n\t- Organize in window based on section size to make best use of space?\n - For the column layout: \n 1. Cap number of columns?\n 2. Allow y overflow for >2 columns (like Trello)?\n*/\n\nclass AppDrawerLayoutComp {\n\tconstructor(opts) {\n\t\tthis.type = 'layout'\n\t\tthis.dom = {\n\t\t\tholder: opts.dom.drawerDiv,\n\t\t\twrapper: opts.dom.wrapper,\n\t\t\tsandboxDiv: opts.dom.sandboxDiv\n\t\t}\n\t\tthis.state = opts.state\n\t\tthis.hasStatePreMain = true\n\t}\n\n\tasync validateIndexJson() {\n\t\tconst index = await this.getIndexJson()\n\t\tif (!index.elements) throw `Missing elements array`\n\t\tif (!index.elements.length) throw `No element objects provided`\n\t\tif (index.columnsLayout) {\n\t\t\tif (index.columnsLayout.length == 0) throw `Missing column objects`\n\t\t\tconst allGridAreaValues = index.columnsLayout.map(s => s.gridarea)\n\t\t\tif (allGridAreaValues.length != new Set(allGridAreaValues).size) throw `Duplicate values for .gridarea found`\n\t\t\tconst allSectionIdValues = []\n\t\t\tfor (const col of index.columnsLayout) {\n\t\t\t\tif (!col.gridarea) throw `Missing column .gridarea for column = ${col.name}`\n\t\t\t\tif (!col.sections || col.sections.length == 0) throw `Missing section objects for column = ${col.name}`\n\t\t\t\tfor (const section of col.sections) {\n\t\t\t\t\tif (!section.id)\n\t\t\t\t\t\tthrow `Missing section .id in ${section.name ? `section = ${section.name}` : `column = ${col.name} array`}`\n\t\t\t\t\tallSectionIdValues.push(section.id)\n\t\t\t\t}\n\t\t\t\tif (col.sections.length != new Set(col.sections).size) {\n\t\t\t\t\tthrow `Non-unique levels in line ${lineNum}: ${JSON.stringify(levelNames)}`\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (allSectionIdValues.length != new Set(allSectionIdValues).size) throw `Duplicate values for section.id found`\n\n\t\t\t// Required element attributes when columnsLayout specified\n\t\t\tfor (const element of index.elements) {\n\t\t\t\tif (!element.section) throw `.section is missing for ${element.type} = ${element.name}`\n\t\t\t\tif (!allSectionIdValues.some(d => d == element.section))\n\t\t\t\t\tthrow `section = ${element.section} for ${element.type} = ${element.name} is not a column section`\n\t\t\t}\n\t\t}\n\t\treturn index\n\t}\n\n\tasync getIndexJson() {\n\t\t// Proteinpaint specific index.\n\t\t// TODO: Later modifiy to accept user index.\n\t\tconst re = await dofetch3(this.app.cardsPath + '/index.json')\n\t\tif (re.error) {\n\t\t\tsayerror(this.dom.holder.append('div'), re.error)\n\t\t\treturn\n\t\t}\n\t\treturn re\n\t}\n\n\tvalidateElements() {\n\t\tconst features = JSON.parse(sessionStorage.getItem('optionalFeatures')) || {}\n\t\tthis.elements = this.index.elements.filter(e => !e.hidden && (!e.configFeature || features[e.configFeature]))\n\t}\n\n\tasync init() {\n\t\tthis.index = await this.validateIndexJson()\n\t\tthis.elementsRendered = false\n\t\tsetRenderers(this)\n\t\tthis.validateElements()\n\t\tthis.layout = this.index.columnsLayout ? this.index.columnsLayout : null\n\t\tthis.components = {\n\t\t\telements: []\n\t\t}\n\t}\n\n\tasync main() {\n\t\t// prevent elements from reloading each time\n\t\tif (this.elementsRendered == true) return\n\t\tthis.elementsRendered = true\n\t\tfor (const element of this.elements) {\n\t\t\tconst holder = select(this.layout ? `#${element.section} > .sjpp-element-list` : `.sjpp-element-list`)\n\t\t\tif (element.type == 'card' || element.type == 'nestedCard') {\n\t\t\t\tthis.components.elements.push(\n\t\t\t\t\tawait cardInit({\n\t\t\t\t\t\tapp: this.app,\n\t\t\t\t\t\tholder: holder\n\t\t\t\t\t\t\t.style('display', 'grid')\n\t\t\t\t\t\t\t.style('grid-template-columns', 'repeat(auto-fit, minmax(320px, 1fr))')\n\t\t\t\t\t\t\t.style('gap', '10px')\n\t\t\t\t\t\t\t.style('list-style', 'none')\n\t\t\t\t\t\t\t.style('margin', '15px 0px'),\n\t\t\t\t\t\telement,\n\t\t\t\t\t\tdom: this.opts.dom,\n\t\t\t\t\t\tstate: this.state,\n\t\t\t\t\t\tsandboxDiv: this.dom.sandboxDiv\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t} else if (element.type == 'dsButton') {\n\t\t\t\tthis.components.elements.push(\n\t\t\t\t\tawait buttonInit({\n\t\t\t\t\t\tapp: this.app,\n\t\t\t\t\t\tholder,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\tdom: this.opts.dom,\n\t\t\t\t\t\tstate: this.state,\n\t\t\t\t\t\tsandboxDiv: this.dom.sandboxDiv\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const layoutInit = getCompInit(AppDrawerLayoutComp)\n\nfunction setRenderers(self) {\n\tif (!self.index.columnsLayout) noDefinedLayout(self)\n\tif (self.index.columnsLayout) columnsLayout(self)\n}\n\nfunction noDefinedLayout(self) {\n\tconst flexLayout = self.dom.wrapper\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('padding', '10px')\n\t\t.classed('sjpp-element-list', true)\n\treturn flexLayout\n}\n\nfunction columnsLayout(self) {\n\t// Allow user to create multiple columns in parent grid\n\tconst parentGrid = self.dom.wrapper\n\t\t.append('div')\n\t\t.style('display', 'grid')\n\t\t.style('grid-template-columns', 'repeat(auto-fit, minmax(425px, 1fr))')\n\t\t.style('gap', '10px')\n\t\t.style('padding', '10px')\n\t\t.style('text-align', 'left')\n\n\t//Allow user to create multiple parent columns in columnsLayout\n\tconst gridareas = []\n\tfor (const column of self.index.columnsLayout) gridareas.push(column.gridarea)\n\tparentGrid.style('grid-template-areas', `\"${gridareas.toString().replace(',', ' ')}\"`)\n\tfor (const col of self.index.columnsLayout) {\n\t\tconst newCol = parentGrid.append('div').style('grid-area', col.gridarea).classed('.sjpp-track-cols', true)\n\t\tfor (const section of col.sections) addSection(section, newCol)\n\t}\n\n\tfunction addSection(section, newCol) {\n\t\tconst newSection = newCol.append('div').attr('id', section.id)\n\t\tif (section.name)\n\t\t\tnewSection\n\t\t\t\t.append('h5')\n\t\t\t\t.classed('sjpp-appdrawer-cols', true)\n\t\t\t\t.style('color', rgb(defaultcolor).darker())\n\t\t\t\t.text(section.name)\n\t\tnewSection.append('div').classed('sjpp-element-list', true).style('padding', '10px')\n\n\t\treturn newSection\n\t}\n}\n", "import { getCompInit } from '#rx'\nimport { layoutInit } from './layout'\n\n/*\n.opts{}\n .app{}\n\t.dom{}\n\t.state{}\n\nTODOs: \n- Replace drawerFullHeight with a different approach\n\t- Causes the drawer to only partially appear when the window zooms in\n*/\n\nclass MainHeadboxBtn {\n\tconstructor(opts) {\n\t\tthis.type = 'mainBtn'\n\t\tthis.opts = this.validateOpts(opts)\n\t\tthis.dom = opts.dom\n\t\tthis.state = opts.state\n\t\tthis.hasStatePreMain = true\n\t\tsetRenderers(this)\n\t}\n\n\tvalidateOpts(opts) {\n\t\treturn opts.app.opts\n\t}\n\n\tgetState(appState) {\n\t\treturn {\n\t\t\tappBtnActive: appState.appBtnActive\n\t\t}\n\t}\n\n\tasync init() {\n\t\tthis.btnRendered = false\n\t\tthis.drawerFullHeight = ''\n\t\ttry {\n\t\t\t//detect whether to show examples right away, which is when the url is barebone without any route paths or search parameters\n\t\t\tif (window.location.pathname == '/' && !window.location.search.length)\n\t\t\t\tawait this.app.dispatch({ type: 'is_apps_btn_active', value: true })\n\t\t\tthis.components = {\n\t\t\t\tlayout: []\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tthrow e\n\t\t}\n\t}\n\n\tasync main(appState) {\n\t\tif (this.app.getState(appState).appBtnActive == true && this.btnRendered == false) {\n\t\t\tthis.dom.drawerDiv.style('background-color', '#f5f5f5') //Quick fix for drawerDiv initially appearing before layout init\n\t\t\t//Init layout only once when 'Apps' button is active for the first time\n\t\t\tthis.components.layout.push(\n\t\t\t\tawait layoutInit({\n\t\t\t\t\tapp: this.app,\n\t\t\t\t\tdom: this.dom,\n\t\t\t\t\tstate: this.state\n\t\t\t\t})\n\t\t\t)\n\t\t\t//Give the drawerDiv time to render before calculating height\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.drawerFullHeight = this.dom.drawerDiv.node().getBoundingClientRect().height + 5\n\t\t\t}, this.state.duration + 5)\n\t\t\tslideDrawer(this)\n\t\t\tthis.btnRendered = true\n\t\t}\n\t\tif (this.state.appBtnActive == false && this.btnRendered == true) slideDrawer(this)\n\t}\n}\n\nexport const mainBtnInit = getCompInit(MainHeadboxBtn)\n\nfunction setRenderers(self) {\n\tself.dom.btnWrapper\n\t\t.style('background-color', self.state.appBtnActive ? '#b2b2b2' : '#f2f2f2')\n\t\t.style('color', self.state.appBtnActive ? '#fff' : '#000')\n\t\t.on('click', async event => {\n\t\t\tevent.stopPropagation()\n\t\t\tawait self.app.dispatch({ type: 'is_apps_btn_active' })\n\t\t\tslideDrawer(self)\n\t\t\tif (self.state.appBtnActive) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tself.drawerFullHeight = self.dom.drawerDiv.node().getBoundingClientRect().height + 5\n\t\t\t\t}, self.state.duration + 5)\n\t\t\t}\n\t\t})\n\n\tself.dom.btn\n\t\t.attr('class', 'sja_menuoption')\n\t\t.style('display', 'inline-block')\n\t\t.style('background-color', 'transparent')\n\t\t.style('color', self.state.appBtnActive ? '#fff' : '#000')\n\t\t.style('padding', self.opts.padw_sm)\n\t\t.style('margin', '0px 5px')\n\t\t.style('cursor', 'pointer')\n\t\t.text('Apps')\n\n\t// an empty spacer div, needed since the arrows are absolutely positioned\n\tself.dom.drawerHint\n\t\t.style('position', 'relative')\n\t\t.style('display', 'inline-block')\n\t\t.style('height', self.state.arrowSize.closed + 'px')\n\t\t.style('width', self.state.appBtnActive ? self.state.hintWidth.open : self.state.hintWidth.closed)\n\t\t.style('background-color', 'transparent')\n\t\t.style('text-align', 'center')\n\t\t.style('cursor', 'pointer')\n\n\tself.dom.drawerArrow\n\t\t.style('position', 'absolute')\n\t\t.style('font-size', self.state.arrowSize.closed + 'px')\n\t\t.style('right', self.state.hintPos.closed.rt + 'px')\n\t\t.style('bottom', self.state.hintPos.closed.btm + 'px')\n\t\t.style('background-color', 'transparent')\n\t\t.style('color', self.state.arrowColor.closed)\n\t\t.style('opacity', self.state.appBtnActive ? 0 : 1)\n\t\t.style('cursor', 'pointer')\n\t\t.html('&#9660;')\n\n\tself.dom.drawerArrowOpen\n\t\t.style('position', 'absolute')\n\t\t.style('font-size', self.state.arrowSize.open + 'px')\n\t\t.style('left', self.state.hintPos.open.left + 'px')\n\t\t.style('bottom', self.state.hintPos.open.btm + 'px')\n\t\t.style('transform', 'rotate(180deg)')\n\t\t.style('background-color', 'transparent')\n\t\t.style('color', self.state.arrowColor.open)\n\t\t.style('opacity', self.state.appBtnActive ? 1 : 0)\n\t\t.style('cursor', 'pointer')\n\t\t.style('pointer-events', self.state.appBtnActive ? 'auto' : 'none')\n\t\t.html('&#9660;')\n\n\tself.drawerFullHeight = self.dom.drawerRow.node().getBoundingClientRect().height + 5\n}\n\nexport async function slideDrawer(self) {\n\tself.dom.btnWrapper\n\t\t.transition()\n\t\t.duration(self.opts.state.duration)\n\t\t.style('background-color', self.state.appBtnActive ? '#b2b2b2' : '#f2f2f2')\n\t\t.style('color', self.state.appBtnActive ? '#fff' : '#000')\n\n\tself.dom.btn\n\t\t.transition()\n\t\t.duration(self.opts.state.duration)\n\t\t.style('color', self.state.appBtnActive ? '#fff' : '#000')\n\n\tself.dom.drawerDiv\n\t\t.style('display', 'inline-block')\n\t\t.transition()\n\t\t.duration(self.opts.state.duration)\n\t\t.style('top', self.state.appBtnActive ? '0px' : '-' + self.drawerFullHeight + 'px')\n\n\tself.dom.drawerRow\n\t\t.transition()\n\t\t.duration(self.opts.state.duration)\n\t\t.style('height', self.state.appBtnActive ? self.drawerFullHeight + 'px' : '0px')\n\n\tself.dom.drawerHint\n\t\t.transition()\n\t\t.duration(self.opts.state.duration)\n\t\t.style('width', self.state.appBtnActive ? self.opts.state.hintWidth.open : self.opts.state.hintWidth.closed)\n\n\tself.dom.drawerArrow\n\t\t.transition()\n\t\t.duration(self.opts.state.duration)\n\t\t.style('opacity', self.state.appBtnActive ? 0 : 1)\n\n\tself.dom.drawerArrowOpen\n\t\t.style('pointer-events', self.state.appBtnActive ? 'auto' : 'none')\n\t\t.transition()\n\t\t.duration(self.opts.state.duration)\n\t\t.style('opacity', self.state.appBtnActive ? 1 : 0)\n}\n", "import { getStoreInit } from '#rx'\n\n/*\n.opts{}\n\n*/\n\nclass AppDrawerStore {\n\tconstructor(opts) {\n\t\tthis.type = 'store'\n\t\tthis.defaultState = {\n\t\t\t// for apps drawer animation\n\t\t\tduration: 500,\n\t\t\thintPos: {\n\t\t\t\topen: { btm: -42, left: 13 },\n\t\t\t\tclosed: { btm: 3, rt: 5 }\n\t\t\t},\n\t\t\thintWidth: { open: '0px', closed: '18px' },\n\t\t\tarrowSize: { open: 42, closed: 20 },\n\t\t\tarrowColor: { open: 'rgb(242,242,242)', closed: 'rgb(85,85,85)' },\n\t\t\tappBtnActive: false\n\t\t}\n\t}\n\n\tasync init() {}\n}\n\nexport const appDrawerStoreInit = getStoreInit(AppDrawerStore)\n\nAppDrawerStore.prototype.actions = {\n\tis_apps_btn_active(action) {\n\t\tthis.state.appBtnActive = 'value' in action ? action.value : !this.state.appBtnActive\n\t}\n}\n", "import { getAppInit } from '#rx'\nimport { mainBtnInit } from './mainBtn'\nimport { appDrawerStoreInit } from './store'\n\n/*\n.opts{}\n .holder\n .genomes{}\n - client-side genome object\n\t.drawerRow\n\t.sandboxDiv\n\t.genome_browser_btn\n\t.debugmode\n\t.headbox\n\t.padw_sm\n\nTODOs: \n\nQuestions: \n*/\n\nclass AppDrawerApp {\n\tconstructor(opts) {\n\t\tthis.type = 'app'\n\n\t\tconst drawerDiv = opts.drawerRow\n\t\t\t.append('div')\n\t\t\t.style('position', 'relative')\n\t\t\t.style('margin', '0 20px')\n\t\t\t.style('padding', `0 ${opts.padw_sm}`)\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('overflow', 'hidden')\n\t\t\t.style('border-radius', '0px 0px 5px 5px')\n\t\t\t.style('width', '93vw')\n\t\t\t.classed('sjpp-drawer-div', true)\n\n\t\tconst btnWrapper = opts.headbox\n\t\t\t.append('div')\n\t\t\t.style('position', 'relative')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('margin-left', '5px')\n\t\t\t.style('margin-right', '5px')\n\t\t\t.style('border-radius', '5px')\n\t\t\t.classed('sjpp-apps-btn-wrapper', true)\n\n\t\tthis.dom = {\n\t\t\tdrawerRow: opts.drawerRow,\n\t\t\tdrawerDiv,\n\t\t\tsandboxDiv: opts.sandboxDiv,\n\t\t\tbtnWrapper,\n\t\t\tbtn: btnWrapper.append('div'),\n\t\t\tdrawerHint: btnWrapper.append('div'),\n\t\t\tdrawerArrow: btnWrapper.append('div'),\n\t\t\tdrawerArrowOpen: btnWrapper.append('div'),\n\t\t\twrapper: drawerDiv.append('div')\n\t\t}\n\t}\n\n\tpreApiFreeze(api) {\n\t\tapi.cardsPath = this.opts.cardsPath\n\t}\n\n\tasync init() {\n\t\ttry {\n\t\t\tthis.store = await appDrawerStoreInit({ app: this.api, state: this.opts.state })\n\t\t\tthis.state = await this.store.copyState()\n\t\t\tthis.components = {\n\t\t\t\tmainBtn: await mainBtnInit({\n\t\t\t\t\tapp: this.api,\n\t\t\t\t\tdom: this.dom,\n\t\t\t\t\tstate: this.state,\n\t\t\t\t\tindexJson: this.indexJson\n\t\t\t\t})\n\t\t\t}\n\t\t\tawait this.api.dispatch()\n\t\t} catch (e) {\n\t\t\tthrow e\n\t\t}\n\t}\n\n\tmain() {}\n}\n\nexport const appDrawerInit = getAppInit(AppDrawerApp)\n", "import { first_genetrack_tolist } from '#common/1stGenetk'\nimport { InputSearch, Menu, newSandboxDiv } from '#dom'\nimport { searchItems } from './omniSearch.js'\nimport { appDrawerInit } from '../../appdrawer/app.js'\nimport { rgb as d3rgb } from 'd3-color'\nimport { defaultcolor } from '#shared/common.js'\nimport { dofetch3 } from '#common/dofetch'\nimport { ClientCopyGenome } from 'types/global.ts'\n\ntype Citation = {\n\tid: number\n\ttitle: string\n\tappHeaderTitle: string\n\tyear: number\n\tjournal: string\n\tpmid: number\n\tpmidURL: string\n\tdoi: string\n}\n\ntype AppHeaderOpts = {\n\t/** menu created in app.js */\n\theadtip: Menu\n\t/** runpp app */\n\tapp: any\n\t/** server returned data */\n\tdata: any\n\t/** token */\n\tjwt: any\n}\n\nexport class AppHeader {\n\theadtip: Menu\n\tapp: any\n\tdata: any\n\tjwt: any\n\t/** List of publications defined in the app drawer\n\t * Appears in button in the header and in search results\n\t */\n\tpublications: Citation[]\n\t/** Used in both the Help button and omni search\n\t * .onlySearch is used to filter out items that should not appear in the Help button\n\t */\n\tstatic help = [\n\t\t{\n\t\t\tlabel: 'Embed in your website',\n\t\t\tlink: 'https://github.com/stjude/proteinpaint/wiki/Embedding'\n\t\t},\n\t\t{\n\t\t\tlabel: 'URL parameters',\n\t\t\tlink: 'https://github.com/stjude/proteinpaint/wiki/URL-parameters'\n\t\t},\n\t\t{\n\t\t\tlabel: 'All tutorials',\n\t\t\tlink: 'https://github.com/stjude/proteinpaint/wiki/'\n\t\t},\n\t\t{\n\t\t\tlabel: 'User community',\n\t\t\tlink: 'https://groups.google.com/g/proteinpaint'\n\t\t},\n\t\t{\n\t\t\tlabel: 'License ProteinPaint',\n\t\t\tlink: 'https://www.stjude.org/research/why-st-jude/shared-resources/technology-licensing/technologies/proteinpaint-web-application-for-visualizing-genomic-data-sj-15-0021.html',\n\t\t\tonlySearch: true\n\t\t},\n\t\t{\n\t\t\tlabel: 'Our Team',\n\t\t\tlink: 'https://proteinpaint.stjude.org/team/',\n\t\t\tonlySearch: true\n\t\t}\n\t]\n\n\tconstructor(opts: AppHeaderOpts) {\n\t\tthis.headtip = opts.headtip\n\t\tthis.app = opts.app\n\t\tthis.data = opts.data\n\t\tthis.jwt = opts.jwt\n\t\tthis.publications = []\n\t}\n\n\tasync createPublicationsList() {\n\t\tconst re = await dofetch3(this.app.cardsPath + '/citations.json')\n\t\tif (re.error) console.error(`Problem retrieving ../cards/citations.json`)\n\t\t//Sort in reverse chronological order for the publications button\n\t\tthis.publications = re?.publications?.length\n\t\t\t? re.publications.filter((d: Citation) => d.appHeaderTitle).sort((a: Citation, b: Citation) => b.year - a.year)\n\t\t\t: []\n\t}\n\n\tasync makeheader() {\n\t\tawait this.createPublicationsList()\n\n\t\tconst color = d3rgb(defaultcolor)\n\t\tconst padw_lg = '13px'\n\t\tconst padw_input = '5px 10px'\n\t\tconst padw_sm = '7px 10px'\n\t\tconst doc_width = document.documentElement.clientWidth\n\t\t// head\n\t\tconst row = this.app.holder\n\t\t\t.append('div')\n\t\t\t.style('white-space', 'nowrap')\n\t\t\t.style(\n\t\t\t\t'border-bottom',\n\t\t\t\tdoc_width > 1600 ? 'solid 1px rgba(' + color.r + ',' + color.g + ',' + color.b + ',.3)' : ''\n\t\t\t)\n\n\t\tconst headbox = row\n\t\t\t.append('div')\n\t\t\t.style('margin', '10px')\n\t\t\t.style('padding', '8px')\n\t\t\t.style('padding-bottom', '12px')\n\t\t\t.style('display', doc_width < 1600 ? 'block' : 'inline-block')\n\t\t\t.style(\n\t\t\t\t'border-bottom',\n\t\t\t\tdoc_width < 1600 ? 'solid 1px rgba(' + color.r + ',' + color.g + ',' + color.b + ',.3)' : ''\n\t\t\t)\n\n\t\t// .style('border-radius', '5px')\n\t\t// .style('background-color', 'rgba(' + color.r + ',' + color.g + ',' + color.b + ',.1)')\n\t\tconst headinfo = row\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('padding', padw_sm)\n\t\t\t.style('padding-left', '25px')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.style('color', d3rgb(defaultcolor).darker())\n\n\t\t{\n\t\t\t// a row for server stats\n\t\t\tconst row = headinfo.append('div').style('padding-left', '15px')\n\t\t\t// link to the published ppfull container version, instead of github release tarball which we do not advertise;\n\t\t\t// github's pkgs/container link has a timestamp before the tag, which cannot be computed here (but may be able to query later?)\n\t\t\tconst link = `https://github.com/stjude/proteinpaint/pkgs/container/ppfull` // url to list of published container versions\n\t\t\tconst version = this.data.pkgver\n\t\t\t\t? `Release version: <a href=\"${link}\" target=\"${this.data.pkgver}\">${this.data.pkgver}</a>`\n\t\t\t\t: `Code date: ${this.data.codedate}` // default to using code date as before if pkgver is not available\n\t\t\trow\n\t\t\t\t.attr('id', 'sjpp-serverstat')\n\t\t\t\t.append('span')\n\t\t\t\t.html(`${version}, server launched: ${this.data.launchdate || '??'}.`)\n\t\t\tif (this.data.hasblat) {\n\t\t\t\trow\n\t\t\t\t\t.append('a')\n\t\t\t\t\t.style('margin-left', '10px')\n\t\t\t\t\t.text('Running BLAT')\n\t\t\t\t\t.on('click', async event => {\n\t\t\t\t\t\tthis.headtip.clear().showunder(event.target)\n\t\t\t\t\t\tconst div = this.headtip.d.append('div').style('margin', '10px')\n\t\t\t\t\t\tconst wait = div.append('div').text('Loading...')\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst data = await dofetch3('blat?serverstat=1')\n\t\t\t\t\t\t\tif (data.error) throw data.error\n\t\t\t\t\t\t\tif (!data.lst) throw 'invalid response'\n\t\t\t\t\t\t\twait.remove()\n\t\t\t\t\t\t\tfor (const i of data.lst) {\n\t\t\t\t\t\t\t\tdiv.append('div').text(i)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (e: any) {\n\t\t\t\t\t\t\twait.text(e.message || e)\n\t\t\t\t\t\t\tif (e.stack) console.error(e.stack)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif (this.data.headermessage) {\n\t\t\theadinfo.append('div').html(this.data.headermessage)\n\t\t}\n\n\t\t// 1\n\t\theadbox\n\t\t\t.append('div')\n\t\t\t.text('ProteinPaint')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('padding', padw_lg)\n\t\t\t.style('color', defaultcolor)\n\t\t\t.style('font-size', '1.3em')\n\t\t\t.style('font-weight', 'bold')\n\n\t\t// 2, search box\n\t\tconst omniSearch = new InputSearch({\n\t\t\tholder: headbox,\n\t\t\ttip: this.headtip,\n\t\t\tstyle: {\n\t\t\t\tpadding: padw_sm,\n\t\t\t\tborder: `'solid 1px ${defaultcolor}`\n\t\t\t},\n\t\t\tsize: 32,\n\t\t\tplaceholder: 'Gene, position, SNP, app, or dataset',\n\t\t\ttitle: 'Search by gene, SNP, position, app, or dataset',\n\t\t\tsearchItems: async () => {\n\t\t\t\treturn await searchItems(this.app, this.headtip, AppHeader.help, this.publications, this.jwt)\n\t\t\t}\n\t\t})\n\n\t\tomniSearch.initUI()\n\n\t\tconst genome_select_div = headbox.append('div').attr('class', 'sjpp-genome-select-div').style('padding', padw_sm)\n\n\t\tconst get_placeholder = () => {\n\t\t\tconst currG = this.app.genomes[this.app.selectgenome.property('value')]\n\t\t\t/** Defaults */\n\t\t\tconst opts2Show = ['Gene', 'position', 'app']\n\t\t\t/** Show all the genomic options together */\n\t\t\tif (currG.hasSNP) opts2Show.splice(2, 0, 'SNP')\n\t\t\tif (Object.keys(currG.datasets).length) opts2Show.push('dataset')\n\t\t\tconst str = opts2Show.join(', ').replace(/,(?=[^,]*$)/, ', or')\n\t\t\treturn str\n\t\t}\n\n\t\tthis.app.selectgenome = genome_select_div\n\t\t\t.append('select')\n\t\t\t.attr('aria-label', 'Select a genome')\n\t\t\t.attr('class', 'sjpp-genome-select')\n\t\t\t.style('padding', padw_input)\n\t\t\t.style('border', 'solid 1px ' + defaultcolor)\n\t\t\t.on('change', () => {\n\t\t\t\tthis.update_genome_browser_btn(this.app)\n\t\t\t\tomniSearch.updatePlaceholder(get_placeholder())\n\t\t\t})\n\n\t\tconst filterGenomes = Object.values(this.app.genomes).filter((g: any) => !g.hideOnClient) as ClientCopyGenome[]\n\t\tfor (const n of filterGenomes) {\n\t\t\tthis.app.selectgenome.append('option').attr('n', n.name).text(`${n.species} ${n.name}`).property('value', n.name)\n\t\t}\n\t\tthis.app.genome_browser_btn = this.make_genome_browser_btn(this.app, headbox, this.jwt)\n\n\t\tthis.app.drawer = await appDrawerInit({\n\t\t\tholder: this.app.holder,\n\t\t\tgenomes: this.app.genomes,\n\t\t\tdrawerRow: this.app.holder\n\t\t\t\t.append('div')\n\t\t\t\t.style('position', 'relative')\n\t\t\t\t.style('overflow-x', 'visible')\n\t\t\t\t.style('overflow-y', 'hidden')\n\t\t\t\t.classed('sjpp-drawer-row', true),\n\t\t\tsandboxDiv: this.app.holder.append('div').style('margin-top', '15px').classed('sjpp-drawer-sandbox', true),\n\t\t\tgenome_browser_btn: this.app.genome_browser_btn,\n\t\t\tdebugmode: this.app.debugmode,\n\t\t\theadbox,\n\t\t\tpadw_sm,\n\t\t\tcardsPath: this.app.cardsPath\n\t\t})\n\n\t\t//Help button\n\t\theadbox\n\t\t\t.append('span')\n\t\t\t.classed('sja_menuoption', true)\n\t\t\t.attr('id', 'sjpp-header-help-btn')\n\t\t\t.style('padding', padw_sm)\n\t\t\t.text('Help')\n\t\t\t.on('click', async event => {\n\t\t\t\tconst p = event.target.getBoundingClientRect()\n\t\t\t\tconst div = this.headtip.clear().show(p.left - 0, p.top + p.height + 5)\n\n\t\t\t\tawait div.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('padding', '5px 20px')\n\t\t\t\t\t.selectAll('p')\n\t\t\t\t\t.data(AppHeader.help.filter(d => !d.onlySearch))\n\t\t\t\t\t.enter()\n\t\t\t\t\t.append('p')\n\t\t\t\t\t.html(d => `<a href=${d.link} target=_blank>${d.label}</a>`)\n\t\t\t})\n\n\t\t//Publications button\n\t\t//Citations not available on CI server\n\t\tif (this.publications.length > 0) {\n\t\t\theadbox\n\t\t\t\t.append('span')\n\t\t\t\t.classed('sja_menuoption', true)\n\t\t\t\t.attr('id', 'sjpp-header-publications-btn')\n\t\t\t\t.style('padding', padw_sm)\n\t\t\t\t.style('margin', '0px 5px')\n\t\t\t\t.text('Publications')\n\t\t\t\t.on('click', async event => {\n\t\t\t\t\tconst p = event.target.getBoundingClientRect()\n\t\t\t\t\tconst div = this.headtip.clear().show(p.left - 150, p.top + p.height + 5)\n\n\t\t\t\t\tawait div.d\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('padding', '5px 20px')\n\t\t\t\t\t\t.selectAll('p')\n\t\t\t\t\t\t.data(this.publications)\n\t\t\t\t\t\t.enter()\n\t\t\t\t\t\t.append('p')\n\t\t\t\t\t\t.html((d: any) => `<a href=${d.doi} target=_blank>${d.appHeaderTitle}, ${d.journal}, ${d.year}</a>`)\n\t\t\t\t})\n\t\t}\n\t}\n\n\tmake_genome_browser_btn(app, headbox, jwt) {\n\t\tif (app.selectgenome.node().options.length === 0) {\n\t\t\tconsole.error(`No selected selectgenome options.`)\n\t\t\treturn\n\t\t}\n\n\t\tconst padw = '8px'\n\t\tconst genome_btn_div = headbox.append('span')\n\t\tconst genomename = app.selectgenome.node().options[app.selectgenome.property('selectedIndex')].value\n\n\t\tconst g_browser_btn = genome_btn_div\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.attr('id', 'genome_btn')\n\t\t\t.style('padding', padw)\n\t\t\t.datum(genomename)\n\t\t\t.text(genomename + ' genome browser')\n\t\t\t.on('click', () => {\n\t\t\t\t//Grab the current genome selected\n\t\t\t\tconst genomeSelected = app.selectgenome.node().value\n\t\t\t\tconst g = app.genomes[genomeSelected]\n\t\t\t\tif (!g) {\n\t\t\t\t\talert('Invalid genome name: ' + genomeSelected)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst sandbox_div = newSandboxDiv(app.drawer.opts.sandboxDiv)\n\t\t\t\tsandbox_div.header.text(genomeSelected + ' genome browser')\n\n\t\t\t\tconst par = {\n\t\t\t\t\thostURL: app.hostURL,\n\t\t\t\t\tjwt,\n\t\t\t\t\tholder: sandbox_div.body,\n\t\t\t\t\tgenome: g,\n\t\t\t\t\tchr: g.defaultcoord.chr,\n\t\t\t\t\tstart: g.defaultcoord.start,\n\t\t\t\t\tstop: g.defaultcoord.stop,\n\t\t\t\t\tnobox: true,\n\t\t\t\t\ttklst: [],\n\t\t\t\t\tdebugmode: app.debugmode\n\t\t\t\t}\n\t\t\t\tfirst_genetrack_tolist(g, par.tklst)\n\n\t\t\t\timport('../block.js').then(b => new b.Block(par))\n\t\t\t\tapp.drawer.dispatch({ type: 'is_apps_btn_active', value: false })\n\t\t\t})\n\t\treturn g_browser_btn\n\t}\n\n\tupdate_genome_browser_btn(app) {\n\t\tapp.genome_browser_btn.text(app.selectgenome.node().value + ' genome browser')\n\t\tapp.genome_browser_btn.datum(app.selectgenome.node().value)\n\t}\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,eAAsB,YAAY,KAAK,KAAK,MAAM,cAAc,KAAK;AACpE,QAAM,YAAY,eAAS,OAAO,EAAE,SAAS,OAAO,EAAE,KAAK;AAC3D,QAAM,OAAO;AAAA,IACZ;AAAA,MACC,OAAO;AAAA,MACP,SAAS;AAAA,MACT,OAAO,MAAM,YAAY,WAAW,IAAI,aAAa,SAAS,OAAO,GAAG,GAAG;AAAA,MAC3E,OAAO;AAAA,MACP,UAAU,OAAK;AACd,YAAI,OAAO,SAAS,EAAE,MAAM,sBAAsB,OAAO,MAAM,CAAC;AAChE,YAAI,KAAK;AACT,uBAAe,GAAG,KAAK,IAAI,aAAa,SAAS,OAAO,GAAG,GAAG;AAAA,MAC/D;AAAA,IACD;AAAA,EACD;AACA,QAAM,sBAAsB,KAAK,WAAW,MAAM,GAAG;AAErD,OAAK,KAAK;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,IACT,OAAO,KAAK,OAAO,OAAK,EAAE,MAAM,YAAY,EAAE,SAAS,UAAU,YAAY,CAAC,CAAC;AAAA,IAC/E,OAAO;AAAA,IACP,UAAU,OAAK;AACd,aAAO,KAAK,EAAE,MAAM,EAAE,KAAK;AAAA,IAC5B;AAAA,EACD,CAAC;AACD,OAAK,KAAK;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,IACT,OAAO,aAAa;AAAA,MACnB,OACC,EAAE,MAAM,YAAY,EAAE,SAAS,UAAU,YAAY,CAAC,KACtD,EAAE,eAAe,YAAY,EAAE,SAAS,UAAU,YAAY,CAAC;AAAA,IACjE;AAAA,IACA,OAAO;AAAA,IACP,UAAU,OAAK;AACd,aAAO,KAAK,EAAE,KAAK,EAAE,KAAK;AAAA,IAC3B;AAAA,EACD,CAAC;AACD,SAAO;AACR;AAEA,eAAe,sBAAsB,KAAK,OAAO,MAAM,KAAK;AAC3D,QAAM,KAAK,MAAM,SAAS,IAAI,YAAY,aAAa;AACvD,MAAI,GAAG;AAAO,kCAA8B,wCAAwC;AACpF,QAAM,YAAY,MAAM,YAAY,EAAE,KAAK;AAC3C,QAAM,WAAW,CAAC,GAAG,GAAG,QAAQ;AAChC,MAAI;AACJ,MAAI,UAAU,SAAS,GAAG;AAKzB,UAAM,gBAAgB,UAAU,GAAG;AACnC,uBAAmB,oBAAoB,UAAU,SAAS;AAAA,EAC3D,OAAO;AACN,uBAAmB,oBAAoB,UAAU,SAAS;AAAA,EAC3D;AAEA,QAAM,OAAO;AAAA,IACZ,KAAK,IAAI,OAAO;AAAA,IAChB,YAAY,IAAI,OAAO,KAAK;AAAA,IAC5B,SAAS,IAAI;AAAA,IACb,SAAS;AAAA,EACV;AAEA,OAAK;AAAA,IACJ;AAAA,MACC,OAAO;AAAA,MACP,OAAO,iBAAiB,OAAO,OAAK,EAAE,QAAQ,MAAM;AAAA,MACpD,OAAO;AAAA,MACP,UAAU,aAAW;AACpB,YAAI,OAAO,SAAS,EAAE,MAAM,sBAAsB,OAAO,MAAM,CAAC;AAChE,YAAI,KAAK;AACT,oBAAY,SAAS,IAAI;AAAA,MAC1B;AAAA,IACD;AAAA,IACA;AAAA,MACC,OAAO;AAAA,MACP,OAAO,iBAAiB,OAAO,OAAK,EAAE,QAAQ,UAAU;AAAA,MACxD,OAAO;AAAA,MACP,UAAU,aAAW;AACpB,YAAI,OAAO,SAAS,EAAE,MAAM,sBAAsB,OAAO,MAAM,CAAC;AAChE,YAAI,KAAK;AACT,oBAAY,SAAS,IAAI;AAAA,MAC1B;AAAA,IACD;AAAA,EACD;AACA,SAAO;AACR;AAEA,eAAe,gBAAgB,UAAU,KAAK;AAC7C,QAAM,WAAW,SAAS,IAAI,OAAM,SAAQ;AAC3C,QAAI,KAAK,UAAU,KAAK,QAAQ,UAAU,CAAC,KAAK;AAAa,aAAO;AACpE,UAAM,MAAM,MAAM,SAAS,IAAI,YAAY,IAAI,KAAK,WAAW,OAAO;AACtE,QAAI,KAAK,QAAQ,SAAS,GAAG;AAC5B,iBAAW,KAAK,IAAI,SAAS;AAC5B,YAAI,EAAE;AAAM;AACZ,YAAI,GAAG;AAAO,eAAK,YAAY,KAAK,EAAE,KAAK;AAAA,MAC5C;AAAA,IACD;AAAA,EACD,CAAC;AAED,QAAM,QAAQ,IAAI,QAAQ;AAC3B;AAEA,SAAS,oBAAoB,UAAU,WAAW;AACjD,SAAO,SACL,OAAO,UAAQ;AACf,QAAI,KAAK;AAAQ,aAAO;AACxB,QAAI,mBAAmB,KAAK,eAAe,CAAC,GAAG,OAAO,CAACA,kBAAiB,eAAe;AACtF,UAAIA;AAAiB,eAAO;AAC5B,aAAO,WAAW,YAAY,EAAE,SAAS,SAAS;AAAA,IACnD,GAAG,KAAK;AACR,WAAO,mBAAmB,KAAK,KAAK,YAAY,EAAE,SAAS,SAAS;AAAA,EACrE,CAAC,EACA,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAC9C;AAEA,eAAsB,YAAY,KAAK,QAAQ,KAAK;AAEnD,MAAI,IAAI,UAAU;AAAG;AACrB,MAAI;AACH,UAAM,OAAO,MAAM,SAAS,eAAe;AAAA,MAC1C,MAAM;AAAA,QACL,OAAO;AAAA,QACP;AAAA,QACA;AAAA,MACD;AAAA,IACD,CAAC;AAED,QAAI,KAAK;AAAO,YAAM,KAAK;AAC3B,QAAI,CAAC,KAAK;AAAM,YAAM;AACtB,WAAO,KAAK;AAAA,EACb,SAAS,KAAK;AAAA,EAId;AACD;AAEA,eAAsB,eAAe,KAAK,KAAK,YAAY,KAAK;AAC/D,QAAM,IAAI,IAAI,QAAQ,UAAU;AAChC,MAAI,CAAC,GAAG;AACP,YAAQ,MAAM,oBAAoB,UAAU;AAC5C;AAAA,EACD;AACA,QAAM,cAAc,cAAc,IAAI,OAAO,KAAK,UAAU;AAC5D,cAAY,OAAO;AAAA,IAClB,wCACC,MACA,kDACA,aACA;AAAA,EACF;AAEA,QAAM,OAAO,eAAO;AACpB,QAAM,QAAQ,MAAe,UAAU,MAAM,CAAC;AAE9C,QAAM,MAAM,WAAW,KAAK,CAAC;AAC7B,MAAI,KAAK;AAER,UAAMC,OAAM;AAAA,MACX,SAAS,IAAI;AAAA,MACb;AAAA,MACA,QAAQ,YAAY;AAAA,MACpB,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,KAAK,IAAI;AAAA,MACT,OAAO,IAAI;AAAA,MACX,MAAM,IAAI;AAAA,MACV,QAAQ;AAAA,MACR;AAAA,MACA,WAAW,IAAI;AAAA,IAChB;AACA,2BAAuB,GAAGA,KAAI,KAAK;AAEnC,WAAO,qBAAa,EAClB,KAAK,OAAK,IAAI,EAAE,MAAMA,IAAG,CAAC,EAC1B,MAAM,SAAO;AACb,UAAI,OAAO,GAAG;AAAA,IACf,CAAC;AACF;AAAA,EACD;AAGA,QAAM,MAAM;AAAA,IACX,SAAS,IAAI;AAAA,IACb;AAAA,IACA,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,YAAY;AAAA,IACpB,qBAAqB,IAAI;AAAA,IACzB,YAAY,IAAI;AAAA,IAChB;AAAA,IACA,WAAW,IAAI;AAAA,EAChB;AAGA,QAAM,MAAM,eAAe,QAAQ,UAAU;AAC7C,MAAI,KAAK;AACR,UAAM,IAAI,IAAI,MAAM,GAAG;AACvB,QAAI,EAAE,UAAU,GAAG;AAClB,UAAI,iBAAiB,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,CAAC;AAAA,IACxD;AAAA,EACD;AAEA,QAAM,mBAAU,GAAG;AACpB;;;AC5MA,IAAM,gBAAN,MAAoB;AAAA;AAAA,EAEnB,YAAY,MAAM;AACjB,SAAK,OAAO;AACZ,SAAK,OAAO,KAAK,aAAa,IAAI;AAClC,SAAK,SAAS,KAAK;AACnB,SAAK,MAAM,KAAK;AAChB,SAAK,aAAa,KAAK;AACvB,iBAAa,IAAI;AAAA,EAClB;AAAA,EAEA,aAAa,MAAM;AAClB,QAAI,CAAC,KAAK,QAAQ;AAAM,YAAM;AAC9B,QAAI,KAAK,QAAQ,QAAQ,QAAQ;AAChC,UAAI,CAAC,KAAK,QAAQ,eAAe,CAAC,KAAK,QAAQ;AAC9C,cAAM,2DAA2D,KAAK,QAAQ,IAAI;AAAA,IACpF;AACA,QAAI,KAAK,QAAQ,QAAQ,cAAc;AACtC,UAAI,CAAC,KAAK,QAAQ,YAAY,KAAK,QAAQ,SAAS,UAAU;AAC7D,cAAM,uCAAuC,KAAK,QAAQ,IAAI;AAAA,IAChE;AACA,QAAI,KAAK,QAAQ,QAAQ;AACxB,UAAI,CAAC,KAAK,QAAQ,OAAO;AAAM,cAAM,4BAA4B,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,IAAI;AAGzG,WACE,KAAK,QAAQ,OAAO,KAAK,YAAY,KAAK,SAAS,KAAK,QAAQ,OAAO,KAAK,YAAY,KAAK,cAC9F,CAAC,KAAK,QAAQ,OAAO;AAErB,cAAM,GAAG,KAAK,QAAQ,IAAI,MACzB,KAAK,QAAQ,IACd,cAAc,KAAK,QAAQ,OAAO,KAAK,YAAY,CAAC;AAErD,UAAI,KAAK,QAAQ,OAAO,YAAY;AACnC,YAAI,KAAK,QAAQ,OAAO,cAAc,GAAG;AACxC,gBAAM,YAAY,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,IAAI;AAAA,QAC3D;AAAA,MACD;AAAA,IACD;AACA,WAAO;AAAA,EACR;AAAA,EAEA,OAAO;AAAA,EAAC;AACT;AAEO,IAAM,WAAW,YAAY,aAAa;AAEjD,SAAS,aAAa,MAAM;AAC3B,QAAM,OAAO,KAAK,OAAO,OAAO,IAAI;AACpC,MAAI,KAAK,KAAK,QAAQ,QAAQ,QAAQ;AACrC,SAAK,QAAQ,cAAc,IAAI,EAAE;AAAA,MAChC,6EAA6E,KAAK,KAAK,QAAQ,IAAI;AAAA,MAEjG,KAAK,KAAK,QAAQ,cACf,yDAAyD,KAAK,KAAK,QAAQ,WAAW,kBACtF,GACJ;AAAA,+CAC2C,KAAK,KAAK,QAAQ,KAAK,UAClE,KAAK,KAAK,QAAQ,WACnB;AAAA;AAAA,IAED;AAAA,EACD,WAAW,KAAK,KAAK,QAAQ,QAAQ,cAAc;AAClD,SAAK,QAAQ,wBAAwB,IAAI,EAAE;AAAA,MAC1C,mFAAmF,KAAK,KAAK,QAAQ,IAAI;AAAA,mJACuC,KAAK,KAAK,QAAQ,WAAW;AAAA,IAC9K;AAAA,EACD;AAEA,OAAK,aAAa,SAAS,QAAQ;AAElC,UAAM,YAAY,KAChB,OAAO,KAAK,EACZ,QAAQ,+BAA+B,IAAI,EAC3C,MAAM,eAAe,QAAQ,EAC7B,MAAM,mBAAmB,QAAQ;AAGnC,UAAM,OAAO,OAAO,KAAK,YAAY;AAErC,UAAM,QACL,QAAQ,SACL,YACA,QAAQ,QACR,YACA,QAAQ,YACR,WACA,OAAO,QACP,OAAO,QACP;AAEJ,cACE,OAAO,MAAM,EACb,KAAK,IAAI,EACT,MAAM,SAAS,OAAO,EACtB,MAAM,oBAAoB,IAAI,KAAK,EAAE,OAAO,CAAC,EAC7C,MAAM,UAAU,MAAM,EACtB,MAAM,SAAS,MAAM,EACrB,MAAM,OAAO,KAAK,EAClB,MAAM,QAAQ,MAAM,EACpB,MAAM,aAAa,QAAQ,EAC3B,MAAM,kBAAkB,WAAW,EACnC,MAAM,cAAc,QAAQ;AAAA,EAC/B;AAEA,MAAI,KAAK,KAAK,QAAQ,QAAQ;AAC7B,UAAM,QAAQ,oBAAI,KAAK;AACvB,UAAM,mBAAmB,IAAI,KAAK,KAAK,KAAK,QAAQ,OAAO,UAAU;AAErE,QAAI,mBAAmB,SAAS,oBAAoB;AAAgB,WAAK,WAAW,KAAK,KAAK,QAAQ,MAAM;AAAA,EAC7G;AAEA,OAAK,GAAG,SAAS,OAAM,UAAS;AAC/B,UAAM,gBAAgB;AACtB,UAAM,KAAK,IAAI,SAAS;AAAA,MACvB,MAAM;AAAA,MACN,OAAO;AAAA,IACR,CAAC;AACD,gBAAY,IAAI;AAChB,UAAM,YAAY,KAAK,KAAK,SAAS,KAAK,IAAI;AAAA,EAC/C,CAAC;AACF;;;ACpIA,IAAM,kBAAN,MAAsB;AAAA,EACrB,YAAY,MAAM;AACjB,SAAK,OAAO;AACZ,SAAK,OAAO,KAAK,aAAa,IAAI;AAClC,SAAK,SAAS,KAAK;AACnB,SAAK,MAAM,KAAK;AAChB,SAAK,aAAa,KAAK;AACvB,IAAAC,cAAa,IAAI;AAAA,EAClB;AAAA,EAEA,aAAa,MAAM;AAClB,QAAI,CAAC,KAAK,QAAQ;AAAM,YAAM;AAC9B,QAAI,CAAC,KAAK,QAAQ,eAAe,CAAC,KAAK,QAAQ;AAC9C,YAAM,6DAA6D,KAAK,QAAQ,IAAI;AACrF,WAAO;AAAA,EACR;AAAA,EAEA,OAAO;AAAA,EAAC;AACT;AAEO,IAAM,aAAa,WAAW,eAAe;AAEpD,SAASA,cAAa,MAAM;AAC3B,QAAM,MAAY,WAAW,EAAE,KAAK,KAAK,QAAQ,MAAM,KAAK,KAAK,QAAQ,MAAM,QAAQ,gBAAgB,CAAC;AACxG,MAAI,KAAK,SAAS,4BAA4B,EAAE,GAAG,SAAS,OAAM,UAAS;AAC1E,UAAM,gBAAgB;AACtB,UAAM,KAAK,IAAI,SAAS;AAAA,MACvB,MAAM;AAAA,MACN,OAAO;AAAA,IACR,CAAC;AACD,gBAAY,IAAI;AAChB,UAAM,YAAY,KAAK,KAAK,SAAS,KAAK,IAAI;AAAA,EAC/C,CAAC;AACF;;;AC5BA,IAAM,sBAAN,MAA0B;AAAA,EACzB,YAAY,MAAM;AACjB,SAAK,OAAO;AACZ,SAAK,MAAM;AAAA,MACV,QAAQ,KAAK,IAAI;AAAA,MACjB,SAAS,KAAK,IAAI;AAAA,MAClB,YAAY,KAAK,IAAI;AAAA,IACtB;AACA,SAAK,QAAQ,KAAK;AAClB,SAAK,kBAAkB;AAAA,EACxB;AAAA,EAEA,MAAM,oBAAoB;AACzB,UAAM,QAAQ,MAAM,KAAK,aAAa;AACtC,QAAI,CAAC,MAAM;AAAU,YAAM;AAC3B,QAAI,CAAC,MAAM,SAAS;AAAQ,YAAM;AAClC,QAAI,MAAM,eAAe;AACxB,UAAI,MAAM,cAAc,UAAU;AAAG,cAAM;AAC3C,YAAM,oBAAoB,MAAM,cAAc,IAAI,OAAK,EAAE,QAAQ;AACjE,UAAI,kBAAkB,UAAU,IAAI,IAAI,iBAAiB,EAAE;AAAM,cAAM;AACvE,YAAM,qBAAqB,CAAC;AAC5B,iBAAW,OAAO,MAAM,eAAe;AACtC,YAAI,CAAC,IAAI;AAAU,gBAAM,yCAAyC,IAAI,IAAI;AAC1E,YAAI,CAAC,IAAI,YAAY,IAAI,SAAS,UAAU;AAAG,gBAAM,wCAAwC,IAAI,IAAI;AACrG,mBAAW,WAAW,IAAI,UAAU;AACnC,cAAI,CAAC,QAAQ;AACZ,kBAAM,0BAA0B,QAAQ,OAAO,aAAa,QAAQ,IAAI,KAAK,YAAY,IAAI,IAAI,QAAQ;AAC1G,6BAAmB,KAAK,QAAQ,EAAE;AAAA,QACnC;AACA,YAAI,IAAI,SAAS,UAAU,IAAI,IAAI,IAAI,QAAQ,EAAE,MAAM;AACtD,gBAAM,6BAA6B,OAAO,KAAK,KAAK,UAAU,UAAU,CAAC;AAAA,QAC1E;AAAA,MACD;AACA,UAAI,mBAAmB,UAAU,IAAI,IAAI,kBAAkB,EAAE;AAAM,cAAM;AAGzE,iBAAW,WAAW,MAAM,UAAU;AACrC,YAAI,CAAC,QAAQ;AAAS,gBAAM,2BAA2B,QAAQ,IAAI,MAAM,QAAQ,IAAI;AACrF,YAAI,CAAC,mBAAmB,KAAK,OAAK,KAAK,QAAQ,OAAO;AACrD,gBAAM,aAAa,QAAQ,OAAO,QAAQ,QAAQ,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC1E;AAAA,IACD;AACA,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,eAAe;AAGpB,UAAM,KAAK,MAAM,SAAS,KAAK,IAAI,YAAY,aAAa;AAC5D,QAAI,GAAG,OAAO;AACb,eAAS,KAAK,IAAI,OAAO,OAAO,KAAK,GAAG,GAAG,KAAK;AAChD;AAAA,IACD;AACA,WAAO;AAAA,EACR;AAAA,EAEA,mBAAmB;AAClB,UAAM,WAAW,KAAK,MAAM,eAAe,QAAQ,kBAAkB,CAAC,KAAK,CAAC;AAC5E,SAAK,WAAW,KAAK,MAAM,SAAS,OAAO,OAAK,CAAC,EAAE,WAAW,CAAC,EAAE,iBAAiB,SAAS,EAAE,aAAa,EAAE;AAAA,EAC7G;AAAA,EAEA,MAAM,OAAO;AACZ,SAAK,QAAQ,MAAM,KAAK,kBAAkB;AAC1C,SAAK,mBAAmB;AACxB,IAAAC,cAAa,IAAI;AACjB,SAAK,iBAAiB;AACtB,SAAK,SAAS,KAAK,MAAM,gBAAgB,KAAK,MAAM,gBAAgB;AACpE,SAAK,aAAa;AAAA,MACjB,UAAU,CAAC;AAAA,IACZ;AAAA,EACD;AAAA,EAEA,MAAM,OAAO;AAEZ,QAAI,KAAK,oBAAoB;AAAM;AACnC,SAAK,mBAAmB;AACxB,eAAW,WAAW,KAAK,UAAU;AACpC,YAAM,SAAS,eAAO,KAAK,SAAS,IAAI,QAAQ,OAAO,0BAA0B,oBAAoB;AACrG,UAAI,QAAQ,QAAQ,UAAU,QAAQ,QAAQ,cAAc;AAC3D,aAAK,WAAW,SAAS;AAAA,UACxB,MAAM,SAAS;AAAA,YACd,KAAK,KAAK;AAAA,YACV,QAAQ,OACN,MAAM,WAAW,MAAM,EACvB,MAAM,yBAAyB,sCAAsC,EACrE,MAAM,OAAO,MAAM,EACnB,MAAM,cAAc,MAAM,EAC1B,MAAM,UAAU,UAAU;AAAA,YAC5B;AAAA,YACA,KAAK,KAAK,KAAK;AAAA,YACf,OAAO,KAAK;AAAA,YACZ,YAAY,KAAK,IAAI;AAAA,UACtB,CAAC;AAAA,QACF;AAAA,MACD,WAAW,QAAQ,QAAQ,YAAY;AACtC,aAAK,WAAW,SAAS;AAAA,UACxB,MAAM,WAAW;AAAA,YAChB,KAAK,KAAK;AAAA,YACV;AAAA,YACA;AAAA,YACA,KAAK,KAAK,KAAK;AAAA,YACf,OAAO,KAAK;AAAA,YACZ,YAAY,KAAK,IAAI;AAAA,UACtB,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;AAEO,IAAM,aAAa,YAAY,mBAAmB;AAEzD,SAASA,cAAa,MAAM;AAC3B,MAAI,CAAC,KAAK,MAAM;AAAe,oBAAgB,IAAI;AACnD,MAAI,KAAK,MAAM;AAAe,kBAAc,IAAI;AACjD;AAEA,SAAS,gBAAgB,MAAM;AAC9B,QAAM,aAAa,KAAK,IAAI,QAC1B,OAAO,KAAK,EACZ,MAAM,WAAW,MAAM,EACvB,MAAM,WAAW,MAAM,EACvB,QAAQ,qBAAqB,IAAI;AACnC,SAAO;AACR;AAEA,SAAS,cAAc,MAAM;AAE5B,QAAM,aAAa,KAAK,IAAI,QAC1B,OAAO,KAAK,EACZ,MAAM,WAAW,MAAM,EACvB,MAAM,yBAAyB,sCAAsC,EACrE,MAAM,OAAO,MAAM,EACnB,MAAM,WAAW,MAAM,EACvB,MAAM,cAAc,MAAM;AAG5B,QAAM,YAAY,CAAC;AACnB,aAAW,UAAU,KAAK,MAAM;AAAe,cAAU,KAAK,OAAO,QAAQ;AAC7E,aAAW,MAAM,uBAAuB,IAAI,UAAU,SAAS,EAAE,QAAQ,KAAK,GAAG,CAAC,GAAG;AACrF,aAAW,OAAO,KAAK,MAAM,eAAe;AAC3C,UAAM,SAAS,WAAW,OAAO,KAAK,EAAE,MAAM,aAAa,IAAI,QAAQ,EAAE,QAAQ,oBAAoB,IAAI;AACzG,eAAW,WAAW,IAAI;AAAU,iBAAW,SAAS,MAAM;AAAA,EAC/D;AAEA,WAAS,WAAW,SAAS,QAAQ;AACpC,UAAM,aAAa,OAAO,OAAO,KAAK,EAAE,KAAK,MAAM,QAAQ,EAAE;AAC7D,QAAI,QAAQ;AACX,iBACE,OAAO,IAAI,EACX,QAAQ,uBAAuB,IAAI,EACnC,MAAM,SAAS,IAAI,YAAY,EAAE,OAAO,CAAC,EACzC,KAAK,QAAQ,IAAI;AACpB,eAAW,OAAO,KAAK,EAAE,QAAQ,qBAAqB,IAAI,EAAE,MAAM,WAAW,MAAM;AAEnF,WAAO;AAAA,EACR;AACD;;;ACpKA,IAAM,iBAAN,MAAqB;AAAA,EACpB,YAAY,MAAM;AACjB,SAAK,OAAO;AACZ,SAAK,OAAO,KAAK,aAAa,IAAI;AAClC,SAAK,MAAM,KAAK;AAChB,SAAK,QAAQ,KAAK;AAClB,SAAK,kBAAkB;AACvB,IAAAC,cAAa,IAAI;AAAA,EAClB;AAAA,EAEA,aAAa,MAAM;AAClB,WAAO,KAAK,IAAI;AAAA,EACjB;AAAA,EAEA,SAAS,UAAU;AAClB,WAAO;AAAA,MACN,cAAc,SAAS;AAAA,IACxB;AAAA,EACD;AAAA,EAEA,MAAM,OAAO;AACZ,SAAK,cAAc;AACnB,SAAK,mBAAmB;AACxB,QAAI;AAEH,UAAI,OAAO,SAAS,YAAY,OAAO,CAAC,OAAO,SAAS,OAAO;AAC9D,cAAM,KAAK,IAAI,SAAS,EAAE,MAAM,sBAAsB,OAAO,KAAK,CAAC;AACpE,WAAK,aAAa;AAAA,QACjB,QAAQ,CAAC;AAAA,MACV;AAAA,IACD,SAAS,GAAG;AACX,YAAM;AAAA,IACP;AAAA,EACD;AAAA,EAEA,MAAM,KAAK,UAAU;AACpB,QAAI,KAAK,IAAI,SAAS,QAAQ,EAAE,gBAAgB,QAAQ,KAAK,eAAe,OAAO;AAClF,WAAK,IAAI,UAAU,MAAM,oBAAoB,SAAS;AAEtD,WAAK,WAAW,OAAO;AAAA,QACtB,MAAM,WAAW;AAAA,UAChB,KAAK,KAAK;AAAA,UACV,KAAK,KAAK;AAAA,UACV,OAAO,KAAK;AAAA,QACb,CAAC;AAAA,MACF;AAEA,iBAAW,MAAM;AAChB,aAAK,mBAAmB,KAAK,IAAI,UAAU,KAAK,EAAE,sBAAsB,EAAE,SAAS;AAAA,MACpF,GAAG,KAAK,MAAM,WAAW,CAAC;AAC1B,kBAAY,IAAI;AAChB,WAAK,cAAc;AAAA,IACpB;AACA,QAAI,KAAK,MAAM,gBAAgB,SAAS,KAAK,eAAe;AAAM,kBAAY,IAAI;AAAA,EACnF;AACD;AAEO,IAAM,cAAc,YAAY,cAAc;AAErD,SAASA,cAAa,MAAM;AAC3B,OAAK,IAAI,WACP,MAAM,oBAAoB,KAAK,MAAM,eAAe,YAAY,SAAS,EACzE,MAAM,SAAS,KAAK,MAAM,eAAe,SAAS,MAAM,EACxD,GAAG,SAAS,OAAM,UAAS;AAC3B,UAAM,gBAAgB;AACtB,UAAM,KAAK,IAAI,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACtD,gBAAY,IAAI;AAChB,QAAI,KAAK,MAAM,cAAc;AAC5B,iBAAW,MAAM;AAChB,aAAK,mBAAmB,KAAK,IAAI,UAAU,KAAK,EAAE,sBAAsB,EAAE,SAAS;AAAA,MACpF,GAAG,KAAK,MAAM,WAAW,CAAC;AAAA,IAC3B;AAAA,EACD,CAAC;AAEF,OAAK,IAAI,IACP,KAAK,SAAS,gBAAgB,EAC9B,MAAM,WAAW,cAAc,EAC/B,MAAM,oBAAoB,aAAa,EACvC,MAAM,SAAS,KAAK,MAAM,eAAe,SAAS,MAAM,EACxD,MAAM,WAAW,KAAK,KAAK,OAAO,EAClC,MAAM,UAAU,SAAS,EACzB,MAAM,UAAU,SAAS,EACzB,KAAK,MAAM;AAGb,OAAK,IAAI,WACP,MAAM,YAAY,UAAU,EAC5B,MAAM,WAAW,cAAc,EAC/B,MAAM,UAAU,KAAK,MAAM,UAAU,SAAS,IAAI,EAClD,MAAM,SAAS,KAAK,MAAM,eAAe,KAAK,MAAM,UAAU,OAAO,KAAK,MAAM,UAAU,MAAM,EAChG,MAAM,oBAAoB,aAAa,EACvC,MAAM,cAAc,QAAQ,EAC5B,MAAM,UAAU,SAAS;AAE3B,OAAK,IAAI,YACP,MAAM,YAAY,UAAU,EAC5B,MAAM,aAAa,KAAK,MAAM,UAAU,SAAS,IAAI,EACrD,MAAM,SAAS,KAAK,MAAM,QAAQ,OAAO,KAAK,IAAI,EAClD,MAAM,UAAU,KAAK,MAAM,QAAQ,OAAO,MAAM,IAAI,EACpD,MAAM,oBAAoB,aAAa,EACvC,MAAM,SAAS,KAAK,MAAM,WAAW,MAAM,EAC3C,MAAM,WAAW,KAAK,MAAM,eAAe,IAAI,CAAC,EAChD,MAAM,UAAU,SAAS,EACzB,KAAK,SAAS;AAEhB,OAAK,IAAI,gBACP,MAAM,YAAY,UAAU,EAC5B,MAAM,aAAa,KAAK,MAAM,UAAU,OAAO,IAAI,EACnD,MAAM,QAAQ,KAAK,MAAM,QAAQ,KAAK,OAAO,IAAI,EACjD,MAAM,UAAU,KAAK,MAAM,QAAQ,KAAK,MAAM,IAAI,EAClD,MAAM,aAAa,gBAAgB,EACnC,MAAM,oBAAoB,aAAa,EACvC,MAAM,SAAS,KAAK,MAAM,WAAW,IAAI,EACzC,MAAM,WAAW,KAAK,MAAM,eAAe,IAAI,CAAC,EAChD,MAAM,UAAU,SAAS,EACzB,MAAM,kBAAkB,KAAK,MAAM,eAAe,SAAS,MAAM,EACjE,KAAK,SAAS;AAEhB,OAAK,mBAAmB,KAAK,IAAI,UAAU,KAAK,EAAE,sBAAsB,EAAE,SAAS;AACpF;AAEA,eAAsB,YAAY,MAAM;AACvC,OAAK,IAAI,WACP,WAAW,EACX,SAAS,KAAK,KAAK,MAAM,QAAQ,EACjC,MAAM,oBAAoB,KAAK,MAAM,eAAe,YAAY,SAAS,EACzE,MAAM,SAAS,KAAK,MAAM,eAAe,SAAS,MAAM;AAE1D,OAAK,IAAI,IACP,WAAW,EACX,SAAS,KAAK,KAAK,MAAM,QAAQ,EACjC,MAAM,SAAS,KAAK,MAAM,eAAe,SAAS,MAAM;AAE1D,OAAK,IAAI,UACP,MAAM,WAAW,cAAc,EAC/B,WAAW,EACX,SAAS,KAAK,KAAK,MAAM,QAAQ,EACjC,MAAM,OAAO,KAAK,MAAM,eAAe,QAAQ,MAAM,KAAK,mBAAmB,IAAI;AAEnF,OAAK,IAAI,UACP,WAAW,EACX,SAAS,KAAK,KAAK,MAAM,QAAQ,EACjC,MAAM,UAAU,KAAK,MAAM,eAAe,KAAK,mBAAmB,OAAO,KAAK;AAEhF,OAAK,IAAI,WACP,WAAW,EACX,SAAS,KAAK,KAAK,MAAM,QAAQ,EACjC,MAAM,SAAS,KAAK,MAAM,eAAe,KAAK,KAAK,MAAM,UAAU,OAAO,KAAK,KAAK,MAAM,UAAU,MAAM;AAE5G,OAAK,IAAI,YACP,WAAW,EACX,SAAS,KAAK,KAAK,MAAM,QAAQ,EACjC,MAAM,WAAW,KAAK,MAAM,eAAe,IAAI,CAAC;AAElD,OAAK,IAAI,gBACP,MAAM,kBAAkB,KAAK,MAAM,eAAe,SAAS,MAAM,EACjE,WAAW,EACX,SAAS,KAAK,KAAK,MAAM,QAAQ,EACjC,MAAM,WAAW,KAAK,MAAM,eAAe,IAAI,CAAC;AACnD;;;ACtKA,IAAM,iBAAN,MAAqB;AAAA,EACpB,YAAY,MAAM;AACjB,SAAK,OAAO;AACZ,SAAK,eAAe;AAAA;AAAA,MAEnB,UAAU;AAAA,MACV,SAAS;AAAA,QACR,MAAM,EAAE,KAAK,KAAK,MAAM,GAAG;AAAA,QAC3B,QAAQ,EAAE,KAAK,GAAG,IAAI,EAAE;AAAA,MACzB;AAAA,MACA,WAAW,EAAE,MAAM,OAAO,QAAQ,OAAO;AAAA,MACzC,WAAW,EAAE,MAAM,IAAI,QAAQ,GAAG;AAAA,MAClC,YAAY,EAAE,MAAM,oBAAoB,QAAQ,gBAAgB;AAAA,MAChE,cAAc;AAAA,IACf;AAAA,EACD;AAAA,EAEA,MAAM,OAAO;AAAA,EAAC;AACf;AAEO,IAAM,qBAAqB,aAAa,cAAc;AAE7D,eAAe,UAAU,UAAU;AAAA,EAClC,mBAAmB,QAAQ;AAC1B,SAAK,MAAM,eAAe,WAAW,SAAS,OAAO,QAAQ,CAAC,KAAK,MAAM;AAAA,EAC1E;AACD;;;ACZA,IAAM,eAAN,MAAmB;AAAA,EAClB,YAAY,MAAM;AACjB,SAAK,OAAO;AAEZ,UAAM,YAAY,KAAK,UACrB,OAAO,KAAK,EACZ,MAAM,YAAY,UAAU,EAC5B,MAAM,UAAU,QAAQ,EACxB,MAAM,WAAW,KAAK,KAAK,OAAO,EAAE,EACpC,MAAM,WAAW,cAAc,EAC/B,MAAM,YAAY,QAAQ,EAC1B,MAAM,iBAAiB,iBAAiB,EACxC,MAAM,SAAS,MAAM,EACrB,QAAQ,mBAAmB,IAAI;AAEjC,UAAM,aAAa,KAAK,QACtB,OAAO,KAAK,EACZ,MAAM,YAAY,UAAU,EAC5B,MAAM,WAAW,cAAc,EAC/B,MAAM,eAAe,KAAK,EAC1B,MAAM,gBAAgB,KAAK,EAC3B,MAAM,iBAAiB,KAAK,EAC5B,QAAQ,yBAAyB,IAAI;AAEvC,SAAK,MAAM;AAAA,MACV,WAAW,KAAK;AAAA,MAChB;AAAA,MACA,YAAY,KAAK;AAAA,MACjB;AAAA,MACA,KAAK,WAAW,OAAO,KAAK;AAAA,MAC5B,YAAY,WAAW,OAAO,KAAK;AAAA,MACnC,aAAa,WAAW,OAAO,KAAK;AAAA,MACpC,iBAAiB,WAAW,OAAO,KAAK;AAAA,MACxC,SAAS,UAAU,OAAO,KAAK;AAAA,IAChC;AAAA,EACD;AAAA,EAEA,aAAa,KAAK;AACjB,QAAI,YAAY,KAAK,KAAK;AAAA,EAC3B;AAAA,EAEA,MAAM,OAAO;AACZ,QAAI;AACH,WAAK,QAAQ,MAAM,mBAAmB,EAAE,KAAK,KAAK,KAAK,OAAO,KAAK,KAAK,MAAM,CAAC;AAC/E,WAAK,QAAQ,MAAM,KAAK,MAAM,UAAU;AACxC,WAAK,aAAa;AAAA,QACjB,SAAS,MAAM,YAAY;AAAA,UAC1B,KAAK,KAAK;AAAA,UACV,KAAK,KAAK;AAAA,UACV,OAAO,KAAK;AAAA,UACZ,WAAW,KAAK;AAAA,QACjB,CAAC;AAAA,MACF;AACA,YAAM,KAAK,IAAI,SAAS;AAAA,IACzB,SAAS,GAAG;AACX,YAAM;AAAA,IACP;AAAA,EACD;AAAA,EAEA,OAAO;AAAA,EAAC;AACT;AAEO,IAAM,gBAAgB,WAAW,YAAY;;;ACpD7C,IAAM,YAAN,MAAM,WAAU;AAAA,EAYtB;AAAA;AAAA;AAAA;AAAA,SAAO,OAAO;AAAA,MACb;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,MACP;AAAA,MACA;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,MACP;AAAA,MACA;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,MACP;AAAA,MACA;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,MACP;AAAA,MACA;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,QACN,YAAY;AAAA,MACb;AAAA,MACA;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,QACN,YAAY;AAAA,MACb;AAAA,IACD;AAAA;AAAA,EAEA,YAAY,MAAqB;AAChC,SAAK,UAAU,KAAK;AACpB,SAAK,MAAM,KAAK;AAChB,SAAK,OAAO,KAAK;AACjB,SAAK,MAAM,KAAK;AAChB,SAAK,eAAe,CAAC;AAAA,EACtB;AAAA,EAEA,MAAM,yBAAyB;AAC9B,UAAM,KAAK,MAAM,SAAS,KAAK,IAAI,YAAY,iBAAiB;AAChE,QAAI,GAAG;AAAO,cAAQ,MAAM,4CAA4C;AAExE,SAAK,eAAe,IAAI,cAAc,SACnC,GAAG,aAAa,OAAO,CAAC,MAAgB,EAAE,cAAc,EAAE,KAAK,CAAC,GAAa,MAAgB,EAAE,OAAO,EAAE,IAAI,IAC5G,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,aAAa;AAClB,UAAM,KAAK,uBAAuB;AAElC,UAAM,QAAQ,IAAM,YAAY;AAChC,UAAM,UAAU;AAChB,UAAM,aAAa;AACnB,UAAM,UAAU;AAChB,UAAM,YAAY,SAAS,gBAAgB;AAE3C,UAAM,MAAM,KAAK,IAAI,OACnB,OAAO,KAAK,EACZ,MAAM,eAAe,QAAQ,EAC7B;AAAA,MACA;AAAA,MACA,YAAY,OAAO,oBAAoB,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,MAAM,IAAI,SAAS;AAAA,IAC3F;AAED,UAAM,UAAU,IACd,OAAO,KAAK,EACZ,MAAM,UAAU,MAAM,EACtB,MAAM,WAAW,KAAK,EACtB,MAAM,kBAAkB,MAAM,EAC9B,MAAM,WAAW,YAAY,OAAO,UAAU,cAAc,EAC5D;AAAA,MACA;AAAA,MACA,YAAY,OAAO,oBAAoB,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,MAAM,IAAI,SAAS;AAAA,IAC3F;AAID,UAAM,WAAW,IACf,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,MAAM,WAAW,OAAO,EACxB,MAAM,gBAAgB,MAAM,EAC5B,MAAM,aAAa,MAAM,EACzB,MAAM,SAAS,IAAM,YAAY,EAAE,OAAO,CAAC;AAE7C;AAEC,YAAMC,OAAM,SAAS,OAAO,KAAK,EAAE,MAAM,gBAAgB,MAAM;AAG/D,YAAM,OAAO;AACb,YAAM,UAAU,KAAK,KAAK,SACvB,6BAA6B,IAAI,aAAa,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,SACnF,cAAc,KAAK,KAAK,QAAQ;AACnC,MAAAA,KACE,KAAK,MAAM,iBAAiB,EAC5B,OAAO,MAAM,EACb,KAAK,GAAG,OAAO,sBAAsB,KAAK,KAAK,cAAc,IAAI,GAAG;AACtE,UAAI,KAAK,KAAK,SAAS;AACtB,QAAAA,KACE,OAAO,GAAG,EACV,MAAM,eAAe,MAAM,EAC3B,KAAK,cAAc,EACnB,GAAG,SAAS,OAAM,UAAS;AAC3B,eAAK,QAAQ,MAAM,EAAE,UAAU,MAAM,MAAM;AAC3C,gBAAM,MAAM,KAAK,QAAQ,EAAE,OAAO,KAAK,EAAE,MAAM,UAAU,MAAM;AAC/D,gBAAM,OAAO,IAAI,OAAO,KAAK,EAAE,KAAK,YAAY;AAChD,cAAI;AACH,kBAAM,OAAO,MAAM,SAAS,mBAAmB;AAC/C,gBAAI,KAAK;AAAO,oBAAM,KAAK;AAC3B,gBAAI,CAAC,KAAK;AAAK,oBAAM;AACrB,iBAAK,OAAO;AACZ,uBAAW,KAAK,KAAK,KAAK;AACzB,kBAAI,OAAO,KAAK,EAAE,KAAK,CAAC;AAAA,YACzB;AAAA,UACD,SAAS,GAAQ;AAChB,iBAAK,KAAK,EAAE,WAAW,CAAC;AACxB,gBAAI,EAAE;AAAO,sBAAQ,MAAM,EAAE,KAAK;AAAA,UACnC;AAAA,QACD,CAAC;AAAA,MACH;AAAA,IACD;AACA,QAAI,KAAK,KAAK,eAAe;AAC5B,eAAS,OAAO,KAAK,EAAE,KAAK,KAAK,KAAK,aAAa;AAAA,IACpD;AAGA,YACE,OAAO,KAAK,EACZ,KAAK,cAAc,EACnB,MAAM,WAAW,cAAc,EAC/B,MAAM,WAAW,OAAO,EACxB,MAAM,SAAS,YAAY,EAC3B,MAAM,aAAa,OAAO,EAC1B,MAAM,eAAe,MAAM;AAG7B,UAAM,aAAa,IAAI,YAAY;AAAA,MAClC,QAAQ;AAAA,MACR,KAAK,KAAK;AAAA,MACV,OAAO;AAAA,QACN,SAAS;AAAA,QACT,QAAQ,cAAc,YAAY;AAAA,MACnC;AAAA,MACA,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,MACP,aAAa,YAAY;AACxB,eAAO,MAAM,YAAY,KAAK,KAAK,KAAK,SAAS,WAAU,MAAM,KAAK,cAAc,KAAK,GAAG;AAAA,MAC7F;AAAA,IACD,CAAC;AAED,eAAW,OAAO;AAElB,UAAM,oBAAoB,QAAQ,OAAO,KAAK,EAAE,KAAK,SAAS,wBAAwB,EAAE,MAAM,WAAW,OAAO;AAEhH,UAAM,kBAAkB,MAAM;AAC7B,YAAM,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,aAAa,SAAS,OAAO,CAAC;AAEtE,YAAM,YAAY,CAAC,QAAQ,YAAY,KAAK;AAE5C,UAAI,MAAM;AAAQ,kBAAU,OAAO,GAAG,GAAG,KAAK;AAC9C,UAAI,OAAO,KAAK,MAAM,QAAQ,EAAE;AAAQ,kBAAU,KAAK,SAAS;AAChE,YAAM,MAAM,UAAU,KAAK,IAAI,EAAE,QAAQ,eAAe,MAAM;AAC9D,aAAO;AAAA,IACR;AAEA,SAAK,IAAI,eAAe,kBACtB,OAAO,QAAQ,EACf,KAAK,cAAc,iBAAiB,EACpC,KAAK,SAAS,oBAAoB,EAClC,MAAM,WAAW,UAAU,EAC3B,MAAM,UAAU,eAAe,YAAY,EAC3C,GAAG,UAAU,MAAM;AACnB,WAAK,0BAA0B,KAAK,GAAG;AACvC,iBAAW,kBAAkB,gBAAgB,CAAC;AAAA,IAC/C,CAAC;AAEF,UAAM,gBAAgB,OAAO,OAAO,KAAK,IAAI,OAAO,EAAE,OAAO,CAAC,MAAW,CAAC,EAAE,YAAY;AACxF,eAAW,KAAK,eAAe;AAC9B,WAAK,IAAI,aAAa,OAAO,QAAQ,EAAE,KAAK,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,OAAO,IAAI,EAAE,IAAI,EAAE,EAAE,SAAS,SAAS,EAAE,IAAI;AAAA,IACjH;AACA,SAAK,IAAI,qBAAqB,KAAK,wBAAwB,KAAK,KAAK,SAAS,KAAK,GAAG;AAEtF,SAAK,IAAI,SAAS,MAAM,cAAc;AAAA,MACrC,QAAQ,KAAK,IAAI;AAAA,MACjB,SAAS,KAAK,IAAI;AAAA,MAClB,WAAW,KAAK,IAAI,OAClB,OAAO,KAAK,EACZ,MAAM,YAAY,UAAU,EAC5B,MAAM,cAAc,SAAS,EAC7B,MAAM,cAAc,QAAQ,EAC5B,QAAQ,mBAAmB,IAAI;AAAA,MACjC,YAAY,KAAK,IAAI,OAAO,OAAO,KAAK,EAAE,MAAM,cAAc,MAAM,EAAE,QAAQ,uBAAuB,IAAI;AAAA,MACzG,oBAAoB,KAAK,IAAI;AAAA,MAC7B,WAAW,KAAK,IAAI;AAAA,MACpB;AAAA,MACA;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,IACrB,CAAC;AAGD,YACE,OAAO,MAAM,EACb,QAAQ,kBAAkB,IAAI,EAC9B,KAAK,MAAM,sBAAsB,EACjC,MAAM,WAAW,OAAO,EACxB,KAAK,MAAM,EACX,GAAG,SAAS,OAAM,UAAS;AAC3B,YAAM,IAAI,MAAM,OAAO,sBAAsB;AAC7C,YAAM,MAAM,KAAK,QAAQ,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC;AAEtE,YAAM,IAAI,EACR,OAAO,KAAK,EACZ,MAAM,WAAW,UAAU,EAC3B,UAAU,GAAG,EACb,KAAK,WAAU,KAAK,OAAO,OAAK,CAAC,EAAE,UAAU,CAAC,EAC9C,MAAM,EACN,OAAO,GAAG,EACV,KAAK,OAAK,WAAW,EAAE,IAAI,kBAAkB,EAAE,KAAK,MAAM;AAAA,IAC7D,CAAC;AAIF,QAAI,KAAK,aAAa,SAAS,GAAG;AACjC,cACE,OAAO,MAAM,EACb,QAAQ,kBAAkB,IAAI,EAC9B,KAAK,MAAM,8BAA8B,EACzC,MAAM,WAAW,OAAO,EACxB,MAAM,UAAU,SAAS,EACzB,KAAK,cAAc,EACnB,GAAG,SAAS,OAAM,UAAS;AAC3B,cAAM,IAAI,MAAM,OAAO,sBAAsB;AAC7C,cAAM,MAAM,KAAK,QAAQ,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC;AAExE,cAAM,IAAI,EACR,OAAO,KAAK,EACZ,MAAM,WAAW,UAAU,EAC3B,UAAU,GAAG,EACb,KAAK,KAAK,YAAY,EACtB,MAAM,EACN,OAAO,GAAG,EACV,KAAK,CAAC,MAAW,WAAW,EAAE,GAAG,kBAAkB,EAAE,cAAc,KAAK,EAAE,OAAO,KAAK,EAAE,IAAI,MAAM;AAAA,MACrG,CAAC;AAAA,IACH;AAAA,EACD;AAAA,EAEA,wBAAwB,KAAK,SAAS,KAAK;AAC1C,QAAI,IAAI,aAAa,KAAK,EAAE,QAAQ,WAAW,GAAG;AACjD,cAAQ,MAAM,mCAAmC;AACjD;AAAA,IACD;AAEA,UAAM,OAAO;AACb,UAAM,iBAAiB,QAAQ,OAAO,MAAM;AAC5C,UAAM,aAAa,IAAI,aAAa,KAAK,EAAE,QAAQ,IAAI,aAAa,SAAS,eAAe,CAAC,EAAE;AAE/F,UAAM,gBAAgB,eACpB,KAAK,SAAS,gBAAgB,EAC9B,KAAK,MAAM,YAAY,EACvB,MAAM,WAAW,IAAI,EACrB,MAAM,UAAU,EAChB,KAAK,aAAa,iBAAiB,EACnC,GAAG,SAAS,MAAM;AAElB,YAAM,iBAAiB,IAAI,aAAa,KAAK,EAAE;AAC/C,YAAM,IAAI,IAAI,QAAQ,cAAc;AACpC,UAAI,CAAC,GAAG;AACP,cAAM,0BAA0B,cAAc;AAC9C;AAAA,MACD;AACA,YAAM,cAAc,cAAc,IAAI,OAAO,KAAK,UAAU;AAC5D,kBAAY,OAAO,KAAK,iBAAiB,iBAAiB;AAE1D,YAAM,MAAM;AAAA,QACX,SAAS,IAAI;AAAA,QACb;AAAA,QACA,QAAQ,YAAY;AAAA,QACpB,QAAQ;AAAA,QACR,KAAK,EAAE,aAAa;AAAA,QACpB,OAAO,EAAE,aAAa;AAAA,QACtB,MAAM,EAAE,aAAa;AAAA,QACrB,OAAO;AAAA,QACP,OAAO,CAAC;AAAA,QACR,WAAW,IAAI;AAAA,MAChB;AACA,6BAAuB,GAAG,IAAI,KAAK;AAEnC,aAAO,qBAAa,EAAE,KAAK,OAAK,IAAI,EAAE,MAAM,GAAG,CAAC;AAChD,UAAI,OAAO,SAAS,EAAE,MAAM,sBAAsB,OAAO,MAAM,CAAC;AAAA,IACjE,CAAC;AACF,WAAO;AAAA,EACR;AAAA,EAEA,0BAA0B,KAAK;AAC9B,QAAI,mBAAmB,KAAK,IAAI,aAAa,KAAK,EAAE,QAAQ,iBAAiB;AAC7E,QAAI,mBAAmB,MAAM,IAAI,aAAa,KAAK,EAAE,KAAK;AAAA,EAC3D;AACD;",
6
6
  "names": ["searchTermFound", "par", "setRenderers", "setRenderers", "setRenderers", "row"]
7
7
  }
@@ -1,14 +1,14 @@
1
1
  import "./chunk-Q7EFDAC2.js";
2
2
  import {
3
3
  controlsInit
4
- } from "./chunk-LOV6H3RZ.js";
5
- import "./chunk-X5ZQI22O.js";
4
+ } from "./chunk-KYGN5FG7.js";
5
+ import "./chunk-Z3TD3CHR.js";
6
6
  import "./chunk-U6ZCLI5S.js";
7
- import "./chunk-WA6VYIW4.js";
7
+ import "./chunk-47W2ODRY.js";
8
8
  import "./chunk-CLHA5AEH.js";
9
9
  import {
10
10
  axisstyle
11
- } from "./chunk-PU7EMWOK.js";
11
+ } from "./chunk-HR3FNUVU.js";
12
12
  import "./chunk-7KFEDC2T.js";
13
13
  import "./chunk-FCPSU6WB.js";
14
14
  import "./chunk-WX2C2ZIZ.js";
@@ -21,7 +21,7 @@ import {
21
21
  import {
22
22
  downloadTable,
23
23
  renderTable
24
- } from "./chunk-TU4H4R2T.js";
24
+ } from "./chunk-LGC254YE.js";
25
25
  import "./chunk-ZYRXVRSD.js";
26
26
  import "./chunk-SJ4KZVLF.js";
27
27
  import "./chunk-ALPXXDQD.js";
@@ -229,7 +229,9 @@ var DEanalysis = class {
229
229
  output.mid_sample_size_cutoff = 8;
230
230
  output.high_sample_size_cutoff = 30;
231
231
  await this.setControls(output);
232
- this.dom.header.style("opacity", 0.6).style("padding-left", "10px").style("font-size", "0.75em").text("DIFFERENTIAL GENE EXPRESSION");
232
+ this.dom.header.html(
233
+ this.config.state.groups[0].name + " vs " + this.config.state.groups[1].name + ' <span style="font-size:.8em;opacity:.7">DIFFERENTIAL GENE EXPRESSION</span>'
234
+ );
233
235
  render_volcano(this, output);
234
236
  }
235
237
  };
@@ -404,11 +406,11 @@ async function render_volcano(self, output) {
404
406
  value: num_significant_genes + num_non_significant_genes
405
407
  },
406
408
  {
407
- label: "Group1 sample size",
409
+ label: self.config.state.groups[0].name + " sample size",
408
410
  value: sample_size1
409
411
  },
410
412
  {
411
- label: "Group2 sample size",
413
+ label: self.config.state.groups[1].name + " sample size",
412
414
  value: sample_size2
413
415
  }
414
416
  ];
@@ -605,4 +607,4 @@ export {
605
607
  makeChartBtnMenu,
606
608
  openHiercluster
607
609
  };
608
- //# sourceMappingURL=DEanalysis-G4CCMC7Q.js.map
610
+ //# sourceMappingURL=DEanalysis-N4XXOEXM.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../plots/DEanalysis.js"],
4
+ "sourcesContent": ["import { axisstyle } from '#dom/axisstyle'\nimport { table2col } from '#dom/table2col'\nimport { Menu } from '../dom/menu'\nimport { renderTable } from '../dom/table'\nimport * as d3axis from 'd3-axis'\nimport { controlsInit } from './controls'\nimport { select as d3select } from 'd3-selection'\nimport { getCompInit, copyMerge } from '#rx'\nimport { dofetch3 } from '#common/dofetch'\nimport { scaleLog, scaleLinear } from 'd3-scale'\nimport { d3lasso } from '../common/lasso'\nimport { downloadTable } from '../dom/table'\nimport { roundValueAuto } from '#shared/roundValue.js'\n\n/*\n\nopts{}\n\tsamplelst{}\n\t\tgroups[]\n\nthis{}\n\tapp{}\n\t\tvocabApi\n*/\n\nconst hlcolor = '#ffa200'\nconst tip = new Menu()\nclass DEanalysis {\n\tconstructor() {\n\t\tthis.type = 'DEanalysis'\n\t}\n\tasync init(opts) {\n\t\tconst config = opts.plots.find(p => p.id === this.id)\n\t\tconst controlsDiv = this.opts.holder.append('div').style('display', 'inline-block')\n\t\tconst mainDiv = this.opts.holder.append('div').style('display', 'inline-block').style('margin-left', '50px')\n\t\tconst holder = mainDiv.append('div').style('display', 'inline-block')\n\t\tconst detailsDiv = mainDiv\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('vertical-align', 'top')\n\t\t\t.style('margin-top', '50px')\n\n\t\tconst tableDiv = this.opts.holder.append('div').style('margin-left', '50px')\n\n\t\tthis.dom = {\n\t\t\tholder,\n\t\t\theader: this.opts.header,\n\t\t\tcontrolsDiv,\n\t\t\tdetailsDiv,\n\t\t\ttableDiv\n\t\t}\n\t}\n\n\tasync setControls(output) {\n\t\tthis.dom.controlsDiv.selectAll('*').remove()\n\t\tconst inputs = [\n\t\t\t{\n\t\t\t\tlabel: 'Minimum read count',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'DEanalysis',\n\t\t\t\tsettingsKey: 'min_count',\n\t\t\t\ttitle: 'Relative cpm cutoff for filtering a gene compared to all samples and genes in dataset',\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 10000\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Minimum total read count',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'DEanalysis',\n\t\t\t\tsettingsKey: 'min_total_count',\n\t\t\t\ttitle: 'Minimum total read count required for each sample',\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 10000\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'P-value significance (linear scale)',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'DEanalysis',\n\t\t\t\tsettingsKey: 'pvalue',\n\t\t\t\ttitle: 'P-value significance',\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Fold change (log scale)',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'DEanalysis',\n\t\t\t\tsettingsKey: 'foldchange',\n\t\t\t\ttitle: 'Fold change',\n\t\t\t\tmin: -10,\n\t\t\t\tmax: 10\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'P-value table',\n\t\t\t\ttype: 'checkbox',\n\t\t\t\tchartType: 'DEanalysis',\n\t\t\t\tsettingsKey: 'pvaluetable',\n\t\t\t\ttitle: 'Display table showing original and adjusted pvalues for all significant genes',\n\t\t\t\tboxLabel: ''\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'P-value',\n\t\t\t\ttype: 'radio',\n\t\t\t\tchartType: 'DEanalysis',\n\t\t\t\tsettingsKey: 'adjusted_original_pvalue',\n\t\t\t\ttitle: 'Toggle between original and adjusted pvalues for volcano plot',\n\t\t\t\toptions: [\n\t\t\t\t\t{ label: 'adjusted', value: 'adjusted' },\n\t\t\t\t\t{ label: 'original', value: 'original' }\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\n\t\tif (\n\t\t\t(output.mid_sample_size_cutoff >= output.sample_size1 &&\n\t\t\t\toutput.mid_sample_size_cutoff < output.sample_size2 &&\n\t\t\t\toutput.sample_size2 < output.high_sample_size_cutoff) ||\n\t\t\t(output.mid_sample_size_cutoff >= output.sample_size2 &&\n\t\t\t\toutput.mid_sample_size_cutoff < output.sample_size1 &&\n\t\t\t\toutput.sample_size1 < output.high_sample_size_cutoff)\n\t\t) {\n\t\t\t// Invoked only when one sample size is low than the mid_sample_size_cutoff and the other one is higher but the higher sample size is lower than the high cutoff so that the DE computation does not take a lot of time on the server\n\t\t\tinputs.push({\n\t\t\t\tlabel: 'Method',\n\t\t\t\ttype: 'radio',\n\t\t\t\tchartType: 'DEanalysis',\n\t\t\t\tsettingsKey: 'method',\n\t\t\t\ttitle: 'Toggle between edgeR and wilcoxon test',\n\t\t\t\toptions: [\n\t\t\t\t\t{ label: 'edgeR', value: 'edgeR' },\n\t\t\t\t\t{ label: 'wilcoxon', value: 'wilcoxon' }\n\t\t\t\t]\n\t\t\t})\n\t\t\tthis.settings.method = output.method\n\t\t\tthis.state.config = output.method\n\t\t}\n\n\t\tif (this.app.opts.genome.termdbs) {\n\t\t\t// Check if genome build contains termdbs, only then enable gene ora\n\t\t\tinputs.push({\n\t\t\t\tlabel: 'Gene set overrepresentation analysis',\n\t\t\t\ttype: 'radio',\n\t\t\t\tchartType: 'DEanalysis',\n\t\t\t\tsettingsKey: 'gene_ora',\n\t\t\t\ttitle: 'Toggle between analyzing upregulated, downregulated or both genes',\n\t\t\t\toptions: [\n\t\t\t\t\t{ label: 'upregulated', value: 'upregulated' },\n\t\t\t\t\t{ label: 'downregulated', value: 'downregulated' },\n\t\t\t\t\t{ label: 'both', value: 'both' }\n\t\t\t\t]\n\t\t\t})\n\t\t}\n\n\t\tif (this.app.opts.genome.termdbs && !this.settings.gsea) {\n\t\t\t// Check if genome build contains termdbs, only then enable gene ora\n\t\t\tinputs.push({\n\t\t\t\tlabel: 'Gene set enrichment analysis',\n\t\t\t\ttype: 'radio',\n\t\t\t\tchartType: 'DEanalysis',\n\t\t\t\tsettingsKey: 'gsea',\n\t\t\t\ttitle: 'Gene set enrichment analysis',\n\t\t\t\toptions: [{ label: 'Submit', value: 'Submit' }]\n\t\t\t})\n\t\t}\n\n\t\tif (this.settings.pvaluetable == true) {\n\t\t\t// This currently does not work as hierarchial clustering code needs to be changed\n\t\t\tinputs.push({\n\t\t\t\tlabel: 'Hierarchial Clustering',\n\t\t\t\ttype: 'radio',\n\t\t\t\tchartType: 'DEanalysis',\n\t\t\t\tsettingsKey: 'hierCluster',\n\t\t\t\ttitle: 'Toggle between various methods for selecting genes for hierarchial clustering',\n\t\t\t\toptions: [\n\t\t\t\t\t{ label: 'Top 100 genes', value: 'top100' },\n\t\t\t\t\t{ label: 'Top 100 upregulated', value: 'top100up' },\n\t\t\t\t\t{ label: 'Top 100 downregulated', value: 'top100down' }\n\t\t\t\t]\n\t\t\t})\n\t\t\tthis.settings.hierCluster = 'top100'\n\t\t}\n\n\t\tthis.components = {\n\t\t\tcontrols: await controlsInit({\n\t\t\t\tapp: this.app,\n\t\t\t\tid: this.id,\n\t\t\t\tholder: this.dom.controlsDiv,\n\t\t\t\tinputs: inputs\n\t\t\t})\n\t\t}\n\t\tthis.components.controls.on('downloadClick.DEanalysis', () => {\n\t\t\tdownloadTable(this.table_rows, this.table_cols)\n\t\t})\n\t}\n\tgetState(appState) {\n\t\tconst config = appState.plots.find(p => p.id === this.id)\n\t\tif (!config) throw `No plot with id='${this.id}' found`\n\t\treturn {\n\t\t\tconfig\n\t\t}\n\t}\n\n\tasync main() {\n\t\tthis.config = JSON.parse(JSON.stringify(this.state.config))\n\t\tthis.settings = this.config.settings.DEanalysis\n\t\tif (this.dom.detailsDiv) {\n\t\t\tthis.dom.detailsDiv.selectAll('*').remove()\n\t\t}\n\t\tif (this.dom.holder) {\n\t\t\tthis.dom.holder.selectAll('*').remove()\n\t\t}\n\t\tconst wait = this.dom.detailsDiv.append('div').text('Loading...')\n\t\tconst output = await runDEanalysis(this) // \"this.config\" was changed from \"this.state.config\". Hope this does not create any problems.\n\t\twait.remove()\n\t\toutput.mid_sample_size_cutoff = 8 // mid sample size cutoff for method toggle to appear\n\t\toutput.high_sample_size_cutoff = 30 // high sample size cutoff for method toggle to not appear, so that very high sample-size groups are not analyzed by edgeR. The exact cutoff value will need to be determined with more examples.\n\t\tawait this.setControls(output)\n\t\tthis.dom.header.html(\n\t\t\tthis.config.state.groups[0].name +\n\t\t\t\t' vs ' +\n\t\t\t\tthis.config.state.groups[1].name +\n\t\t\t\t' <span style=\"font-size:.8em;opacity:.7\">DIFFERENTIAL GENE EXPRESSION</span>'\n\t\t)\n\t\trender_volcano(this, output)\n\t}\n}\n\nasync function render_volcano(self, output) {\n\t/*\nm {}\n- gene\n- logfoldchange\n- averagevalue\n- pvalue\n\nadd:\n- vo_circle\n\t*/\n\n\t// Delete previous holder, if present\n\tconst sample_size1 = output.sample_size1\n\tconst sample_size2 = output.sample_size2\n\tconst mavb = output.data\n\tconst holder = self.dom.holder\n\tholder.selectAll('*').remove()\n\tself.dom.detailsDiv.selectAll('*').remove()\n\tself.dom.tableDiv.selectAll('*').remove()\n\tlet minlogfc = 0,\n\t\tmaxlogfc = 0,\n\t\tminlogpv = 0,\n\t\tmaxlogpv = 0\n\tfor (const d of mavb) {\n\t\tminlogfc = Math.min(minlogfc, d.fold_change)\n\t\tmaxlogfc = Math.max(maxlogfc, d.fold_change)\n\t\tif (d.adjusted_p_value == 0) {\n\t\t\tcontinue\n\t\t} else {\n\t\t\tminlogpv = Math.min(minlogpv, d.adjusted_p_value)\n\t\t\tmaxlogpv = Math.max(maxlogpv, d.adjusted_p_value)\n\t\t}\n\t}\n\n\tlet yaxisw,\n\t\txaxish,\n\t\twidth,\n\t\theight,\n\t\txpad,\n\t\typad,\n\t\ttoppad = 50,\n\t\trightpad = 50,\n\t\tradius\n\n\tconst svg = holder.append('svg')\n\tconst yaxisg = svg.append('g')\n\tconst xaxisg = svg.append('g')\n\tconst xlab = svg.append('text').text('log2(fold change)').attr('fill', 'black').attr('text-anchor', 'middle')\n\tconst ylab = svg.append('text').text('-log10(adjusted P value)').attr('fill', 'black').attr('text-anchor', 'middle')\n\n\tmavb.vo_dotarea = svg.append('g')\n\n\tconst box = mavb.vo_dotarea\n\t\t.append('rect')\n\t\t.attr('stroke', '#ededed')\n\t\t.attr('fill', 'none')\n\t\t.attr('shape-rendering', 'crispEdges')\n\tconst xscale = scaleLinear().domain([minlogfc, maxlogfc])\n\tconst yscale = scaleLinear().domain([minlogpv, maxlogpv])\n\tlet radiusscale\n\tconst dotg = mavb.vo_dotarea\n\t\t.selectAll()\n\t\t.data(mavb)\n\t\t.enter()\n\t\t.append('g')\n\t\t.each(function (d) {\n\t\t\td.vo_g = this\n\t\t})\n\tconst fold_change_cutoff = self.settings.foldchange\n\t//console.log(\"self.settings:\",self.settings)\n\t//self.config.settings.DEanalysis.min_count = self.settings.min_count\n\t//self.config.settings.DEanalysis.min_total_count = self.settings.min_total_count\n\tif (self.settings.pvalue == 0) throw 'p-value significance cannot be zero'\n\tconst p_value_cutoff = -Math.log10(self.settings.pvalue)\n\tconst p_value_adjusted_original = self.settings.adjusted_original_pvalue\n\tlet num_significant_genes = 0\n\tlet num_non_significant_genes = 0\n\tself.table_rows = []\n\tconst circle = dotg\n\t\t.append('circle')\n\t\t.attr('stroke', d => {\n\t\t\tlet color\n\t\t\tconst value3 = roundValueAuto(d.fold_change)\n\t\t\tconst value4 = roundValueAuto(Math.pow(10, -d.original_p_value))\n\t\t\tconst value5 = roundValueAuto(Math.pow(10, -d.adjusted_p_value))\n\t\t\tif (\n\t\t\t\tp_value_adjusted_original == 'adjusted' &&\n\t\t\t\td.adjusted_p_value > p_value_cutoff &&\n\t\t\t\tMath.abs(d.fold_change) > fold_change_cutoff\n\t\t\t) {\n\t\t\t\tcolor = 'red'\n\t\t\t\tnum_significant_genes += 1\n\n\t\t\t\tself.table_rows.push([\n\t\t\t\t\t{ value: d.gene_name },\n\t\t\t\t\t{ value: d.gene_symbol },\n\t\t\t\t\t{ value: value3 },\n\t\t\t\t\t{ value: value4 },\n\t\t\t\t\t{ value: value5 }\n\t\t\t\t])\n\t\t\t} else if (\n\t\t\t\tp_value_adjusted_original == 'original' &&\n\t\t\t\td.original_p_value > p_value_cutoff &&\n\t\t\t\tMath.abs(d.fold_change) > fold_change_cutoff\n\t\t\t) {\n\t\t\t\tcolor = 'red'\n\t\t\t\tnum_significant_genes += 1\n\t\t\t\tself.table_rows.push([\n\t\t\t\t\t{ value: d.gene_name },\n\t\t\t\t\t{ value: d.gene_symbol },\n\t\t\t\t\t{ value: value3 },\n\t\t\t\t\t{ value: value4 },\n\t\t\t\t\t{ value: value5 }\n\t\t\t\t])\n\t\t\t} else {\n\t\t\t\tcolor = 'black'\n\t\t\t\tnum_non_significant_genes += 1\n\t\t\t}\n\t\t\treturn color\n\t\t})\n\t\t.attr('stroke-opacity', 0.2)\n\t\t.attr('stroke-width', 1)\n\t\t.attr('fill', hlcolor)\n\t\t.attr('fill-opacity', 0)\n\t\t.each(function (d) {\n\t\t\td.vo_circle = this\n\t\t})\n\t\t.on('mouseover', circlemouseover)\n\t\t.on('mouseout', circlemouseout)\n\t//.on('click', (event, d) => {\n\t//\tcircleclick(d, mavb, event.clientX, event.clientY)\n\t//})\n\tself.table_rows.sort((a, b) => a[2].value - b[2].value).reverse() // Sorting genes in descending order of fold change\n\t//console.log(\n\t//\t'Percentage of significant genes:',\n\t//\t(num_significant_genes * 100) / (num_significant_genes + num_non_significant_genes)\n\t//)\n\n\tconst logfc0line = mavb.vo_dotarea.append('line').attr('stroke', '#ccc').attr('shape-rendering', 'crispEdges')\n\n\tfunction resize(w, h) {\n\t\twidth = w\n\t\theight = h\n\t\tyaxisw = Math.max(50, width / 8)\n\t\txaxish = Math.max(50, height / 8)\n\n\t\tradius = Math.max(width, height) / 80\n\t\tconst maxradius = radius * 3\n\t\tif (radiusscale) radiusscale.range([radius, maxradius])\n\t\tcircle.each(d => {\n\t\t\td.vo_radius = radiusscale ? radiusscale(Math.abs(d.tvalue)) : radius\n\t\t})\n\n\t\txpad = Math.max(maxradius, width / 50)\n\t\typad = Math.max(maxradius, height / 50)\n\t\tyaxisg.attr('transform', 'translate(' + yaxisw + ',' + toppad + ')')\n\t\txaxisg.attr('transform', 'translate(' + (yaxisw + xpad) + ',' + (toppad + height + ypad) + ')')\n\t\txlab.attr('x', yaxisw + xpad + width / 2).attr('y', toppad + height + ypad + xaxish - 5)\n\t\tylab.attr('transform', 'translate(15,' + (toppad + height / 2) + ') rotate(-90)')\n\t\tmavb.vo_dotarea.attr('transform', 'translate(' + (yaxisw + xpad) + ',' + toppad + ')')\n\t\tbox.attr('width', width).attr('height', height)\n\t\txscale.range([0, width])\n\t\tyscale.range([height, 0])\n\t\tdotg.attr('transform', d => {\n\t\t\treturn 'translate(' + xscale(d.fold_change) + ',' + yscale(d.adjusted_p_value) + ')'\n\t\t})\n\t\tcircle.attr('r', d => {\n\t\t\treturn d.vo_radius\n\t\t})\n\t\tlogfc0line.attr('x1', xscale(0)).attr('x2', xscale(0)).attr('y2', height)\n\n\t\tsvg.attr('width', yaxisw + xpad + width + rightpad).attr('height', toppad + height + ypad + xaxish)\n\t\taxisstyle({\n\t\t\taxis: yaxisg.call(d3axis.axisLeft().scale(yscale)),\n\t\t\tcolor: 'black',\n\t\t\tshowline: true\n\t\t})\n\t\taxisstyle({\n\t\t\taxis: xaxisg.call(d3axis.axisBottom().scale(xscale)),\n\t\t\tcolor: 'black',\n\t\t\tshowline: true\n\t\t})\n\t}\n\tresize(400, 400)\n\n\tif (mavb[0].adjusted_p_value != undefined) {\n\t\t// enable pvalue switching between adjusted and unadjusted\n\t\tconst row = holder.append('div').style('margin', '20px')\n\t\tminlogpv = 0\n\t\tmaxlogpv = 0\n\t\tlet text_string\n\t\tfor (const d of mavb) {\n\t\t\tlet pv\n\t\t\tif (p_value_adjusted_original == 'adjusted') {\n\t\t\t\tpv = d.adjusted_p_value\n\t\t\t} else {\n\t\t\t\tpv = d.original_p_value\n\t\t\t}\n\t\t\tif (pv == 0) continue\n\t\t\tminlogpv = Math.min(minlogpv, pv)\n\t\t\tmaxlogpv = Math.max(maxlogpv, pv)\n\t\t}\n\t\tyscale.domain([minlogpv, maxlogpv])\n\t\taxisstyle({\n\t\t\taxis: yaxisg.call(d3axis.axisLeft().scale(yscale)),\n\t\t\tcolor: 'black',\n\t\t\tshowline: true\n\t\t})\n\t\tdotg.attr('transform', d => {\n\t\t\tlet pv\n\t\t\tif (p_value_adjusted_original == 'adjusted') {\n\t\t\t\tpv = d.adjusted_p_value\n\t\t\t} else {\n\t\t\t\tpv = d.original_p_value\n\t\t\t}\n\t\t\treturn 'translate(' + xscale(d.fold_change) + ',' + yscale(pv) + ')'\n\t\t})\n\t\tif (p_value_adjusted_original == 'adjusted') {\n\t\t\ttext_string = '-log10(adjusted P value)'\n\t\t} else {\n\t\t\ttext_string = '-log10(original P value)'\n\t\t}\n\t\tylab.text(text_string)\n\t\tconst table_stats = table2col({ holder: self.dom.detailsDiv })\n\t\tconst addStats = [\n\t\t\t{\n\t\t\t\tlabel: 'Percentage of significant genes',\n\t\t\t\tvalue: roundValueAuto((num_significant_genes * 100) / (num_significant_genes + num_non_significant_genes))\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Number of significant genes',\n\t\t\t\tvalue: num_significant_genes\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Number of total genes',\n\t\t\t\tvalue: num_significant_genes + num_non_significant_genes\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: self.config.state.groups[0].name + ' sample size',\n\t\t\t\tvalue: sample_size1\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: self.config.state.groups[1].name + ' sample size',\n\t\t\t\tvalue: sample_size2\n\t\t\t}\n\t\t]\n\n\t\tfor (const dataRow of addStats) {\n\t\t\tconst [td1, td2] = table_stats.addRow()\n\t\t\ttd1.text(dataRow.label)\n\t\t\ttd2.style('text-align', 'end').text(dataRow.value)\n\t\t}\n\n\t\tself.table_cols = [\n\t\t\t{ label: 'Gene Name' },\n\t\t\t{ label: 'Gene Symbol' },\n\t\t\t{ label: 'log2 Fold change' },\n\t\t\t{ label: 'Original p-value (linear scale)' },\n\t\t\t{ label: 'Adjusted p-value (linear scale)' }\n\t\t]\n\t\tif (self.settings.pvaluetable == true) {\n\t\t\tconst d = self.dom.tableDiv.append('div').html(`<br>DE analysis results`)\n\t\t\trenderTable({\n\t\t\t\tcolumns: self.table_cols,\n\t\t\t\trows: self.table_rows,\n\t\t\t\tdiv: d,\n\t\t\t\tshowLines: true,\n\t\t\t\tmaxHeight: '150vh',\n\t\t\t\tresize: true\n\t\t\t})\n\t\t} else {\n\t\t\tself.dom.tableDiv.selectAll('*').remove()\n\t\t}\n\n\t\tif (self.settings.gene_ora && self.app.opts.genome.termdbs) {\n\t\t\t// Currently backend only uses msigdb, but in future may use other databases in genome.termdbs{}. In ui will need to generate a <select> to choose one key of termdbs{}.\n\t\t\t//console.log('Run gene ora:', self.settings.gene_ora)\n\t\t\t//console.log('output.data:', output.data)\n\t\t\tconst sample_genes = []\n\t\t\tconst background_genes = []\n\t\t\t//console.log('self:', self)\n\t\t\t//console.log('fold_change_cutoff:', fold_change_cutoff)\n\n\t\t\t// Need to handle those genes which do not have a name\n\t\t\tif (self.settings.gene_ora == 'upregulated') {\n\t\t\t\tfor (const gene of output.data) {\n\t\t\t\t\tif (gene.gene_symbol.length > 0) {\n\t\t\t\t\t\t// Do not include blank rows\n\t\t\t\t\t\tif (fold_change_cutoff < Math.abs(gene.fold_change) && gene.fold_change > 0) {\n\t\t\t\t\t\t\tsample_genes.push(gene.gene_symbol)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbackground_genes.push(gene.gene_symbol)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (self.settings.gene_ora == 'downregulated') {\n\t\t\t\tfor (const gene of output.data) {\n\t\t\t\t\tif (gene.gene_symbol.length > 0) {\n\t\t\t\t\t\t// Do not include blank rows\n\t\t\t\t\t\tif (fold_change_cutoff < Math.abs(gene.fold_change) && gene.fold_change < 0) {\n\t\t\t\t\t\t\tsample_genes.push(gene.gene_symbol)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbackground_genes.push(gene.gene_symbol)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (self.settings.gene_ora == 'both') {\n\t\t\t\tfor (const gene of output.data) {\n\t\t\t\t\tif (gene.gene_symbol.length > 0) {\n\t\t\t\t\t\t// Do not include blank rows\n\t\t\t\t\t\tif (fold_change_cutoff < Math.abs(gene.fold_change)) {\n\t\t\t\t\t\t\tsample_genes.push(gene.gene_symbol)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbackground_genes.push(gene.gene_symbol)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.log('Unrecognized option')\n\t\t\t}\n\n\t\t\tconst geneORAparams = {\n\t\t\t\tsample_genes: sample_genes.toString(),\n\t\t\t\tbackground_genes: background_genes.toString(),\n\t\t\t\tgenome: self.app.vocabApi.opts.state.vocab.genome\n\t\t\t}\n\t\t\tconst config = {\n\t\t\t\tchartType: 'geneORA',\n\t\t\t\tgeneORAparams: geneORAparams\n\t\t\t}\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_create',\n\t\t\t\tconfig\n\t\t\t})\n\t\t}\n\n\t\tif (self.settings.gsea && self.app.opts.genome.termdbs) {\n\t\t\t// Currently backend only uses msigdb, but in future may use other databases in genome.termdbs{}. In ui will need to generate a <select> to choose one key of termdbs{}.\n\t\t\tconst gsea_params = {\n\t\t\t\tgenes: output.data.map(i => i.gene_symbol),\n\t\t\t\tfold_change: output.data.map(i => i.fold_change),\n\t\t\t\tgenome: self.app.vocabApi.opts.state.vocab.genome\n\t\t\t}\n\t\t\t//console.log(\"gsea_params:\",gsea_params)\n\t\t\tconst config = {\n\t\t\t\tchartType: 'gsea',\n\t\t\t\tgsea_params: gsea_params\n\t\t\t}\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_create',\n\t\t\t\tconfig\n\t\t\t})\n\t\t}\n\t}\n\treturn svg\n}\n\nexport async function getPlotConfig(opts, app) {\n\ttry {\n\t\tif (opts.samplelst.groups.length != 2) throw 'opts.samplelst.groups[].length!=2'\n\t\tif (opts.samplelst.groups[0].values?.length < 1) throw 'group 1 not having >1 samples'\n\t\tif (opts.samplelst.groups[1].values?.length < 1) throw 'group 2 not having >1 samples'\n\t\tconst config = {\n\t\t\t//idea for fixing nav button\n\t\t\t//samplelst: { groups: app.opts.state.groups}\n\t\t\tsettings: {\n\t\t\t\tDEanalysis: {\n\t\t\t\t\tpvalue: 0.05,\n\t\t\t\t\tfoldchange: 2,\n\t\t\t\t\tmin_count: 10,\n\t\t\t\t\tmin_total_count: 15,\n\t\t\t\t\tpvaluetable: false,\n\t\t\t\t\tadjusted_original_pvalue: 'adjusted',\n\t\t\t\t\tmethod: undefined,\n\t\t\t\t\tgene_ora: undefined,\n\t\t\t\t\tgsea: undefined\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn copyMerge(config, opts)\n\t} catch (e) {\n\t\tthrow `${e} [DEanalysis getPlotConfig()]`\n\t}\n}\n\nexport const DEanalysisInit = getCompInit(DEanalysis)\n// this alias will allow abstracted dynamic imports\nexport const componentInit = DEanalysisInit\n\nexport function makeChartBtnMenu(holder, chartsInstance) {\n\t/*\n\tholder: the holder in the tooltip\n\tchartsInstance: MassCharts instance\n termdbConfig is accessible at chartsInstance.state.termdbConfig{}\n mass option is accessible at chartsInstance.app.opts{}\n\t*/\n\t// to fill in menu, create options in \"holder\"\n\t// to hide menu, call chartsInstance.dom.tip.hide()\n\t// upon clicking an option, generate plot:\n\tchartsInstance.prepPlot({\n\t\tconfig: {\n\t\t\tchartType: 'DEanalysis'\n\t\t}\n\t})\n}\n\nfunction circlemouseover(event, d) {\n\ttip.clear().show(event.clientX, event.clientY)\n\tconst lst = [\n\t\t{ k: 'gene_name', v: d.gene_name },\n\t\t{ k: 'gene_symbol', v: d.gene_symbol },\n\t\t{ k: 'log fold change', v: roundValueAuto(d.fold_change) },\n\t\t{ k: 'log original p-value', v: roundValueAuto(d.original_p_value) },\n\t\t{ k: 'log adjusted p-value', v: roundValueAuto(d.adjusted_p_value) }\n\t]\n\tconst table = table2col({ holder: tip.d })\n\tfor (const item of lst) {\n\t\tconst [td1, td2] = table.addRow()\n\t\ttd1.text(item.k)\n\t\ttd2.text(item.v)\n\t}\n\n\tif (!d.ma_label) {\n\t\td3select(d.ma_circle).attr('fill-opacity', 0.9)\n\t\td3select(d.vo_circle).attr('fill-opacity', 0.9)\n\t}\n}\n\nfunction circlemouseout(event, d) {\n\ttip.hide()\n\tif (!d.ma_label) {\n\t\td3select(d.ma_circle).attr('fill-opacity', 0)\n\t\td3select(d.vo_circle).attr('fill-opacity', 0)\n\t}\n}\n\nexport async function openHiercluster(term, samplelstTW, app, id, newId) {\n\t// barchart config.term{} name is confusing, as it is actually a termsetting object, not t erm\n\t// thus convert the given term into a termwrapper\n\t// tw.q can be missing and will be filled in with default setting\n\tconst tw = term.term ? term : { term }\n\n\tlet config = {\n\t\tchartType: 'hierCluster',\n\t\tgenes: ['barchart', xxx]\n\t}\n\tif (id) config.insertBefore = id\n\tif (newId) config.id = newId()\n\tawait app.dispatch({\n\t\ttype: 'plot_create',\n\t\tconfig\n\t})\n}\n\nasync function runDEanalysis(self) {\n\tconst output = await dofetch3('DEanalysis', {\n\t\tbody: {\n\t\t\tgenome: self.app.vocabApi.vocab.genome,\n\t\t\tdslabel: self.app.vocabApi.vocab.dslabel,\n\t\t\tsamplelst: self.config.samplelst,\n\t\t\tmin_count: self.settings.min_count,\n\t\t\tmin_total_count: self.settings.min_total_count,\n\t\t\tmethod: self.settings.method\n\t\t}\n\t})\n\tif (output.error) console.log('server side error:', output.error)\n\treturn output\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  svgLegend
3
- } from "./chunk-FPQKVUJW.js";
3
+ } from "./chunk-NWHIPXEK.js";
4
4
  import {
5
5
  configUiInit
6
- } from "./chunk-X5ZQI22O.js";
6
+ } from "./chunk-Z3TD3CHR.js";
7
7
  import {
8
8
  topBarInit
9
9
  } from "./chunk-U6ZCLI5S.js";
10
- import "./chunk-WA6VYIW4.js";
10
+ import "./chunk-47W2ODRY.js";
11
11
  import "./chunk-CLHA5AEH.js";
12
- import "./chunk-PU7EMWOK.js";
12
+ import "./chunk-HR3FNUVU.js";
13
13
  import "./chunk-7KFEDC2T.js";
14
14
  import "./chunk-FCPSU6WB.js";
15
15
  import "./chunk-WX2C2ZIZ.js";
@@ -17,7 +17,7 @@ import "./chunk-CVWXP35F.js";
17
17
  import "./chunk-OTWQWP6Z.js";
18
18
  import "./chunk-6BHKLDWV.js";
19
19
  import "./chunk-EG3MKQQH.js";
20
- import "./chunk-TU4H4R2T.js";
20
+ import "./chunk-LGC254YE.js";
21
21
  import "./chunk-ZYRXVRSD.js";
22
22
  import "./chunk-SJ4KZVLF.js";
23
23
  import "./chunk-ALPXXDQD.js";
@@ -222,7 +222,7 @@ var DiscoInteractions = class {
222
222
  }
223
223
  ]
224
224
  };
225
- const _ = await import("./block.init-MFZ6BKQR.js");
225
+ const _ = await import("./block.init-7PZ4PJTK.js");
226
226
  await _.default(arg);
227
227
  };
228
228
  }
@@ -2459,4 +2459,4 @@ export {
2459
2459
  discoInit,
2460
2460
  getPlotConfig
2461
2461
  };
2462
- //# sourceMappingURL=Disco-ZLOF2OSY.js.map
2462
+ //# sourceMappingURL=Disco-HFIKRNBB.js.map