@sjcrh/proteinpaint-client 2.77.0 → 2.78.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/dist/{2dmaf-acb8cfdd.js → 2dmaf-7dddba15.js} +1 -1
  2. package/dist/{AppHeader-315dbd3a.js → AppHeader-67cea623.js} +1 -1
  3. package/dist/{ColorScale-4b4ea8a2.js → ColorScale-7a36cc17.js} +1 -1
  4. package/dist/{DEanalysis-28ddd620.js → DEanalysis-417e1f88.js} +1 -1
  5. package/dist/{Disco-3c427131.js → Disco-30abd4cb.js} +1 -1
  6. package/dist/{Disco.UI-b071cf7a.js → Disco.UI-ea58ee03.js} +1 -1
  7. package/dist/{DragControls-7961799c.js → DragControls-a5072cfd.js} +1 -1
  8. package/dist/{DziViewer-aa5b5706.js → DziViewer-af3c5a76.js} +1 -1
  9. package/dist/FilterRxComp-cb149666.js +1 -0
  10. package/dist/FilterStateless-bdd1416d.js +1 -0
  11. package/dist/{HicApp-674a148d.js → HicApp-fe8682af.js} +1 -1
  12. package/dist/{OrbitControls-58ca2292.js → OrbitControls-0d20d46b.js} +1 -1
  13. package/dist/{WSIViewer-afe97e2e.js → WSIViewer-64e55fb8.js} +1 -1
  14. package/dist/{adSandbox-791d704e.js → adSandbox-5753745b.js} +1 -1
  15. package/dist/app-488d9fd6.js +1 -0
  16. package/dist/{app-bd9f016b.js → app-5aa892cb.js} +1 -1
  17. package/dist/app-d9433820.js +1 -0
  18. package/dist/app.js +1 -1
  19. package/dist/bam-4e0df8b6.js +1 -0
  20. package/dist/{barchart-e3dcfc5f.js → barchart-687ae584.js} +1 -1
  21. package/dist/{barchart.events-cecb7bf5.js → barchart.events-9e2c1acf.js} +1 -1
  22. package/dist/{bars.renderer-58e38632.js → bars.renderer-95f7250f.js} +1 -1
  23. package/dist/{block-944afb9f.js → block-2f22e7fd.js} +1 -1
  24. package/dist/block.lazyload-143ae987.js +1 -0
  25. package/dist/{block.legend-3dbc41a8.js → block.legend-aa831169.js} +1 -1
  26. package/dist/{block.mds-b3967ce5.js → block.mds-64d95cf9.js} +1 -1
  27. package/dist/{block.mds.cnv-6de3115e.js → block.mds.cnv-2520897d.js} +1 -1
  28. package/dist/{block.mds.expressionrank-553613e8.js → block.mds.expressionrank-582ed7bc.js} +1 -1
  29. package/dist/{block.mds.expressionstat-2c396bb9.js → block.mds.expressionstat-483c9bc9.js} +1 -1
  30. package/dist/{block.mds.geneboxplot-552fe571.js → block.mds.geneboxplot-c1276cba.js} +1 -1
  31. package/dist/{block.mds.junction-1e25c13d.js → block.mds.junction-4a132819.js} +1 -1
  32. package/dist/{block.mds.svcnv-462d762d.js → block.mds.svcnv-a532eca7.js} +1 -1
  33. package/dist/{block.mds.svcnv.share-766e4b22.js → block.mds.svcnv.share-6575b7cf.js} +1 -1
  34. package/dist/{block.mds2-6e04432d.js → block.mds2-9ce41a23.js} +1 -1
  35. package/dist/{block.svg-40b47da8.js → block.svg-adb13c76.js} +1 -1
  36. package/dist/{block.tk.aicheck-cc42cbaf.js → block.tk.aicheck-ef6b634b.js} +1 -1
  37. package/dist/{block.tk.ase-da848c5f.js → block.tk.ase-1b119031.js} +1 -1
  38. package/dist/{block.tk.bam-8053c97e.js → block.tk.bam-2aa824aa.js} +1 -1
  39. package/dist/{block.tk.bedgraphdot-79cb0faf.js → block.tk.bedgraphdot-983fe4b3.js} +1 -1
  40. package/dist/{block.tk.bigwig.ui-a8decec7.js → block.tk.bigwig.ui-fb6401ee.js} +1 -1
  41. package/dist/{block.tk.hicstraw-3d1e9d41.js → block.tk.hicstraw-c6732591.js} +1 -1
  42. package/dist/{block.tk.junction-81eae755.js → block.tk.junction-429b654c.js} +1 -1
  43. package/dist/{block.tk.junction.textmatrixui-4c45b69a.js → block.tk.junction.textmatrixui-15bd752c.js} +1 -1
  44. package/dist/{block.tk.ld-997fca31.js → block.tk.ld-fba14536.js} +1 -1
  45. package/dist/{block.tk.menu-d3e7ccbb.js → block.tk.menu-1299ae5e.js} +1 -1
  46. package/dist/{block.tk.pgv-ae1d1f59.js → block.tk.pgv-c946527f.js} +1 -1
  47. package/dist/{boxplot-fed0a86b.js → boxplot-dbf30a19.js} +1 -1
  48. package/dist/{brainImaging-b455fd0c.js → brainImaging-b2865ba3.js} +1 -1
  49. package/dist/{brush-06989a5e.js → brush-1a123226.js} +1 -1
  50. package/dist/{categorical-82722704.js → categorical-f67752ed.js} +1 -1
  51. package/dist/{condition-f68cc8d1.js → condition-dcc70001.js} +1 -1
  52. package/dist/{controls-1d99916a.js → controls-f4648f7f.js} +1 -1
  53. package/dist/controls.btns-26bb6ef1.js +1 -0
  54. package/dist/{controls.config-00ce9f0b.js → controls.config-9870bdea.js} +1 -1
  55. package/dist/{cuminc-879690b0.js → cuminc-2273cdd3.js} +1 -1
  56. package/dist/{customdata.inputui-c563c695.js → customdata.inputui-fb1b24dc.js} +1 -1
  57. package/dist/{dataDownload-087ac205.js → dataDownload-b94871d0.js} +1 -1
  58. package/dist/{databrowser.ui-9f98f6b3.js → databrowser.ui-8ace51c3.js} +1 -1
  59. package/dist/{density-e0aff1d0.js → density-e023c28f.js} +1 -1
  60. package/dist/{dictionary-fe0ea1d6.js → dictionary-321e19f9.js} +1 -1
  61. package/dist/{drag-e11d6644.js → drag-1b98e43e.js} +1 -1
  62. package/dist/{e2pca-b3250d5c.js → e2pca-00e78fdc.js} +1 -1
  63. package/dist/{ep-9ca01df0.js → ep-b0d6177c.js} +1 -1
  64. package/dist/{facet-397afad5.js → facet-26292a3d.js} +1 -1
  65. package/dist/{filter-b3d3964e.js → filter-67d51c09.js} +1 -1
  66. package/dist/{fusion.parse-e5312047.js → fusion.parse-7e3a6071.js} +1 -1
  67. package/dist/{geneExpClustering-4383ff2c.js → geneExpClustering-a2cf1bb9.js} +1 -1
  68. package/dist/{geneExpression-52678025.js → geneExpression-d1d5a7ca.js} +1 -1
  69. package/dist/{geneExpression-cfb86b5d.js → geneExpression-dc10af2c.js} +1 -1
  70. package/dist/{geneExpression-2422f66b.js → geneExpression-e4a5a2cd.js} +1 -1
  71. package/dist/{geneORA-81220ec0.js → geneORA-248baba7.js} +1 -1
  72. package/dist/{geneVariant-18f9591a.js → geneVariant-447d6af9.js} +1 -1
  73. package/dist/{geneVariant-4d22b146.js → geneVariant-7366f3d1.js} +1 -1
  74. package/dist/{genefusion.ui-e38778dd.js → genefusion.ui-e219424a.js} +1 -1
  75. package/dist/{genesearch-0587c713.js → genesearch-d8780180.js} +1 -1
  76. package/dist/{geneset-604d0529.js → geneset-1f67d4c9.js} +1 -1
  77. package/dist/genomeBrowser-52c639b4.js +1 -0
  78. package/dist/{genomeBrowser.controls-204f007e.js → genomeBrowser.controls-3a7a1c94.js} +1 -1
  79. package/dist/{groupsetting-53dfd5e5.js → groupsetting-697a1503.js} +1 -1
  80. package/dist/{gsea-a1b04406.js → gsea-d3286c53.js} +1 -1
  81. package/dist/hierCluster-00268175.js +1 -0
  82. package/dist/{html.legend-6807e9ad.js → html.legend-0abd27ff.js} +1 -1
  83. package/dist/{imagePlot-f96cdc61.js → imagePlot-f6398b6e.js} +1 -1
  84. package/dist/{lasso-845446b8.js → lasso-48317f42.js} +1 -1
  85. package/dist/launch.adhoc-98dc0421.js +1 -0
  86. package/dist/{leftlabel.sample-3a6037c2.js → leftlabel.sample-591bc38d.js} +1 -1
  87. package/dist/legacyDataset-354f1a29.js +1 -0
  88. package/dist/{log-0ea548ec.js → log-1001ca83.js} +1 -1
  89. package/dist/{lollipop-75e11e9a.js → lollipop-40c4c5cb.js} +1 -1
  90. package/dist/{maf-e4af10d7.js → maf-10526648.js} +1 -1
  91. package/dist/{maftimeline-cc2e866c.js → maftimeline-a77349ad.js} +1 -1
  92. package/dist/matrix-1190d4b3.js +1 -0
  93. package/dist/matrix-bc0ccf83.js +1 -0
  94. package/dist/{mavb-b2dd74f6.js → mavb-0d28dd97.js} +1 -1
  95. package/dist/{mds.fimo-f19840cd.js → mds.fimo-929b9e65.js} +1 -1
  96. package/dist/{mds.samplescatterplot-254f1de6.js → mds.samplescatterplot-5a4ee6b6.js} +1 -1
  97. package/dist/{mds.survivalplot-f440db10.js → mds.survivalplot-b04947ee.js} +1 -1
  98. package/dist/metaboliteIntensity-f407ad0c.js +1 -0
  99. package/dist/niceNumLabels-621ef5c3.js +1 -0
  100. package/dist/{nodrag-f6c0801c.js → nodrag-b2866dd8.js} +1 -1
  101. package/dist/{notify-da3afe99.js → notify-91f0bc5d.js} +1 -1
  102. package/dist/{numeric-1d0318e8.js → numeric-eb1d29b3.js} +1 -1
  103. package/dist/{numeric.binary-88bf9e0d.js → numeric.binary-da92d665.js} +1 -1
  104. package/dist/numeric.continuous-92d1dea8.js +1 -0
  105. package/dist/numeric.discrete-cd8f09b1.js +1 -0
  106. package/dist/{numeric.spline-b3968b77.js → numeric.spline-9a9987b6.js} +1 -1
  107. package/dist/{numeric.toggle-ab8b79be.js → numeric.toggle-8f68f077.js} +1 -1
  108. package/dist/{oncomatrix-5f4326a8.js → oncomatrix-c29e6de9.js} +1 -1
  109. package/dist/{parseData-62083461.js → parseData-3bf0ef9f.js} +1 -1
  110. package/dist/{plot.2dvaf-eccd8ef3.js → plot.2dvaf-9e59c7d1.js} +1 -1
  111. package/dist/plot.app-fc3608a9.js +1 -0
  112. package/dist/plot.barplot-122296f7.js +1 -0
  113. package/dist/{plot.boxplot-0c538ebe.js → plot.boxplot-99c5aac5.js} +1 -1
  114. package/dist/{plot.brainImaging-ee3a0272.js → plot.brainImaging-a7bb79d6.js} +1 -1
  115. package/dist/{plot.disco-c9249cbd.js → plot.disco-ccdf741c.js} +1 -1
  116. package/dist/{plot.dzi-dfd72ddf.js → plot.dzi-aafdf56b.js} +1 -1
  117. package/dist/plot.ssgq-146075f5.js +1 -0
  118. package/dist/{plot.vaf2cov-4081decd.js → plot.vaf2cov-41e13dd9.js} +1 -1
  119. package/dist/{plot.wsi-f6325d95.js → plot.wsi-2327ad63.js} +1 -1
  120. package/dist/{profileBarchart-f4da0483.js → profileBarchart-46616916.js} +1 -1
  121. package/dist/profileHome-121aaddb.js +1 -0
  122. package/dist/profilePlot-a2591a28.js +1 -0
  123. package/dist/{profilePolar-996784ad.js → profilePolar-006a56b1.js} +1 -1
  124. package/dist/{profileRadar-79299186.js → profileRadar-3320d932.js} +1 -1
  125. package/dist/{profileRadarFacility-00e31213.js → profileRadarFacility-7a9cea80.js} +1 -1
  126. package/dist/{profileSummary-df75e6ff.js → profileSummary-7a747b4e.js} +1 -1
  127. package/dist/recover-edcdde38.js +1 -0
  128. package/dist/{regression.inputs-e647b716.js → regression.inputs-d5d44e49.js} +1 -1
  129. package/dist/{regression.inputs.values.table-b283619d.js → regression.inputs.values.table-daf7bcda.js} +1 -1
  130. package/dist/regression.results-31a8884d.js +1 -0
  131. package/dist/{renderPvalueTable-0ed37e90.js → renderPvalueTable-05c29ccf.js} +1 -1
  132. package/dist/sampleScatter-f6c04130.js +1 -0
  133. package/dist/{sampleScatter.rendererThree-aa51e3c8.js → sampleScatter.rendererThree-448689c6.js} +2 -2
  134. package/dist/{sampleView-e4819da2.js → sampleView-0931e571.js} +1 -1
  135. package/dist/{samplelst-9d9ff205.js → samplelst-27115b0e.js} +1 -1
  136. package/dist/{samplematrix-3556e5c0.js → samplematrix-2bb2480b.js} +1 -1
  137. package/dist/{scatter-ff17f653.js → scatter-a8d7c2a0.js} +1 -1
  138. package/dist/select2Terms-480025f5.js +1 -0
  139. package/dist/{selectGenomeWithTklst-84f4ff79.js → selectGenomeWithTklst-71344af2.js} +1 -1
  140. package/dist/{singleCellCellType-a2ce9bfa.js → singleCellCellType-b4061c59.js} +1 -1
  141. package/dist/{singleCellGeneExpression-a2b45c7a.js → singleCellGeneExpression-547149f2.js} +1 -1
  142. package/dist/singleCellPlot-2f5ad46a.js +1 -0
  143. package/dist/{singlecell-a5b8a39b.js → singlecell-1c3bee25.js} +1 -1
  144. package/dist/{singlecell-63cb06d8.js → singlecell-281a74a6.js} +1 -1
  145. package/dist/snp-32b8cbd8.js +1 -0
  146. package/dist/{snp-6e312b4c.js → snp-6bbefa83.js} +1 -1
  147. package/dist/snplocus-84450f3d.js +1 -0
  148. package/dist/{spliceevent.a53ss.diagram-aa2df5d7.js → spliceevent.a53ss.diagram-c04f46f1.js} +1 -1
  149. package/dist/{spliceevent.exonskip.diagram-0b792984.js → spliceevent.exonskip.diagram-a514c12e.js} +1 -1
  150. package/dist/spliceevent.exonskip.getdefault-a9a45dfc.js +1 -0
  151. package/dist/{spliceevent.noeventdiagram-e6e29a6e.js → spliceevent.noeventdiagram-b1be922c.js} +1 -1
  152. package/dist/{spliceevent.phrase-5f65a5f4.js → spliceevent.phrase-57659f7c.js} +1 -1
  153. package/dist/{stattable-775a5af5.js → stattable-7fa50fd2.js} +1 -1
  154. package/dist/{style.gdc-519a42d8.js → style.gdc-6b6a2e0c.js} +1 -1
  155. package/dist/{summary-5866c75f.js → summary-54587ccf.js} +1 -1
  156. package/dist/{sunburst-f928bfd2.js → sunburst-c24faf27.js} +1 -1
  157. package/dist/{survival-405514f6.js → survival-21e6637b.js} +1 -1
  158. package/dist/survival-538cddc2.js +1 -0
  159. package/dist/{svg.download-cd895635.js → svg.download-0dd56dfd.js} +1 -1
  160. package/dist/{svg.legend-812ea603.js → svg.legend-21629769.js} +1 -1
  161. package/dist/{svgraph-037fd7b6.js → svgraph-76e34d5e.js} +1 -1
  162. package/dist/{svmr-3bd143c3.js → svmr-89b80ea2.js} +1 -1
  163. package/dist/table-10183501.js +1 -0
  164. package/dist/{table-e013d8fc.js → table-bb97b5c9.js} +1 -1
  165. package/dist/{termInfo-e16f90f2.js → termInfo-4d954045.js} +1 -1
  166. package/dist/termdb.bins-06fd21c1.js +1 -0
  167. package/dist/termsetting-c12f1c69.js +1 -0
  168. package/dist/{tk-25ae65c4.js → tk-b96367f7.js} +1 -1
  169. package/dist/{toggleButtons-2144daab.js → toggleButtons-bb9aca2f.js} +1 -1
  170. package/dist/{tp.ui-38bc5890.js → tp.ui-f01b186b.js} +1 -1
  171. package/dist/tvs.density-064e5767.js +1 -0
  172. package/dist/{tvs.geneVariant-f99fe353.js → tvs.geneVariant-3fac6bed.js} +1 -1
  173. package/dist/{tvs.numeric-d9108473.js → tvs.numeric-86aacc82.js} +1 -1
  174. package/dist/{tvs.samplelst-3b8ee998.js → tvs.samplelst-1b00d7b6.js} +1 -1
  175. package/dist/{uiUtils-57f4b1ba.js → uiUtils-5aad7e13.js} +1 -1
  176. package/dist/{variantBrowser-56ebc7e1.js → variantBrowser-2c465d02.js} +1 -1
  177. package/dist/{vcf-e43b533a.js → vcf-55bf2c83.js} +1 -1
  178. package/dist/{violin-1352dab2.js → violin-edbe9a63.js} +1 -1
  179. package/dist/violin.interactivity-57637244.js +1 -0
  180. package/dist/{violin.renderer-4273257d.js → violin.renderer-4cab7448.js} +1 -1
  181. package/dist/{violinRenderer-7f46e468.js → violinRenderer-24abe5fd.js} +1 -1
  182. package/dist/{viridis-87a8b605.js → viridis-8a8f3e12.js} +1 -1
  183. package/dist/{y-cac91178.js → y-6fe1bb7b.js} +1 -1
  184. package/dist/{zoom-001c2f01.js → zoom-6a36fb2b.js} +1 -1
  185. package/package.json +6 -5
  186. package/dist/FilterRxComp-e8de560c.js +0 -1
  187. package/dist/FilterStateless-75514d37.js +0 -1
  188. package/dist/app-3d14cbe4.js +0 -1
  189. package/dist/app-8b5b982a.js +0 -1
  190. package/dist/bam-fa90bae8.js +0 -1
  191. package/dist/block.lazyload-4c4e81ff.js +0 -1
  192. package/dist/controls.btns-237b3154.js +0 -1
  193. package/dist/genomeBrowser-9f0e8a60.js +0 -1
  194. package/dist/hierCluster-edaaacc5.js +0 -1
  195. package/dist/hierCluster.config-a84f69a3.js +0 -1
  196. package/dist/hierCluster.interactivity-dd917fd3.js +0 -1
  197. package/dist/hierCluster.renderers-4d33e96a.js +0 -1
  198. package/dist/launch.adhoc-cb00917b.js +0 -1
  199. package/dist/legacyDataset-c9bab1e6.js +0 -1
  200. package/dist/matrix-8b3341c4.js +0 -1
  201. package/dist/matrix.cells-4dd055e7.js +0 -1
  202. package/dist/matrix.cluster-7ab94fb5.js +0 -1
  203. package/dist/matrix.config-b3b56456.js +0 -1
  204. package/dist/matrix.controls-6e0e9692.js +0 -1
  205. package/dist/matrix.data-baabaf57.js +0 -1
  206. package/dist/matrix.dom-cb1f4872.js +0 -1
  207. package/dist/matrix.groups-9990aade.js +0 -1
  208. package/dist/matrix.interactivity-3f3cf44d.js +0 -1
  209. package/dist/matrix.layout-50bc2ea5.js +0 -1
  210. package/dist/matrix.legend-024e2d50.js +0 -1
  211. package/dist/matrix.renderers-1aed44e5.js +0 -1
  212. package/dist/matrix.serieses-dc18fcc2.js +0 -1
  213. package/dist/matrix.sort-89b98e83.js +0 -1
  214. package/dist/matrix.sorterUi-0ad98ef0.js +0 -1
  215. package/dist/metaboliteIntensity-4d905d93.js +0 -1
  216. package/dist/niceNumLabels-ef07b7ad.js +0 -1
  217. package/dist/numeric.continuous-d27197cf.js +0 -1
  218. package/dist/numeric.discrete-b826f33b.js +0 -1
  219. package/dist/plot.app-4dc30ebc.js +0 -1
  220. package/dist/plot.barplot-331715f6.js +0 -1
  221. package/dist/plot.ssgq-b5f68395.js +0 -1
  222. package/dist/profileHome-11b7d146.js +0 -1
  223. package/dist/profilePlot-5dd1fe71.js +0 -1
  224. package/dist/recover-4888c2a9.js +0 -1
  225. package/dist/regression.results-f61b4a25.js +0 -1
  226. package/dist/sampleScatter-b96546e9.js +0 -1
  227. package/dist/select2Terms-eb437c2a.js +0 -1
  228. package/dist/singleCellPlot-e7e57b0f.js +0 -1
  229. package/dist/snp-41aa88d1.js +0 -1
  230. package/dist/snplocus-0653ba82.js +0 -1
  231. package/dist/spliceevent.exonskip.getdefault-af1943e3.js +0 -1
  232. package/dist/survival-10dd3d28.js +0 -1
  233. package/dist/table-be2a9975.js +0 -1
  234. package/dist/termdb.bins-a60aaa77.js +0 -1
  235. package/dist/termsetting-7467350f.js +0 -1
  236. package/dist/tvs.density-060d3006.js +0 -1
  237. package/dist/violin.interactivity-2502dcd8.js +0 -1
@@ -1 +1 @@
1
- import{M as t,bn as e,bo as a,Z as n,j as l,U as o,I as r,ag as s,a9 as i,d as c,ah as d,f as p}from"./app-3d14cbe4.js";import{b as f}from"./block.lazyload-4c4e81ff.js";import{d as u}from"./lasso-845446b8.js";import{b as g,a as m}from"./axis-747c801e.js";import"./drag-e11d6644.js";import"./nodrag-f6c0801c.js";import"./pointer-c7475677.js";const h="#ffa200";const v=new t;function x(t,e,a,n){if(!t.dataname){t.dataname="Differential expression"}if(t.input){const l=t.input;delete t.input;const o=y({genome:t.genome,filename:t.dataname,holder:a,tracks:t.tracks,hostURL:t.hostURL,jwt:n},l.trim().split("\n"));if(o){e("Error with diferential gene expressionn data: "+o)}return}let l;if(t.url){l=new Request(t.hostURL+"/urltextfile",{method:"POST",body:JSON.stringify({url:t.url,jwt:n})});delete t.url}else if(t.file){l=new Request(t.hostURL+"/textfile",{method:"POST",body:JSON.stringify({file:t.file,jwt:n})});delete t.file}else{e("neither .input nor .url given for MA-Volcano plot");return}const o=a.append("div").style("margin","20px").style("color","#aaa").style("font-size","1.5em").text("Loading differential gene expression data ...");fetch(l).then((t=>t.json())).then((e=>{if(e.error)throw{message:e.error};if(!e.text)throw{message:"no data loaded"};const l=y({genome:t.genome,filename:t.dataname,holder:a,tracks:t.tracks,hostURL:t.hostURL,jwt:n},e.text.trim().split("\n"));if(l)throw{message:"Error with differential gene expression data: "+l}})).catch((t=>{e(t.message);if(t.stack)console.log(t.stack)})).then((()=>{o.remove()}))}function b(t,n,l,o,r){let s,i,c,d,p,f;if(o!==undefined)[i,c,d,p,f]=e(o,t);else{[s,i,c,d,p,f]=a(100,100,t);s.header.text("Differential gene expression viewer");s.body.style("margin","10px")}i.append("div").style("margin-top","30px").style("color","#858585").html(`\n\t\t<p>Interactive MA and Volcano plot for exploring differentially expressed genes.</p>\n\t\t<a href=https://docs.google.com/document/d/1gEhywyMzMQRM10NFvsObw1yDSWxVY7pxYjsQ2-nd6x4/edit?usp=sharing target=_blank>File format</a>\n\t\t`);function u(t,e){p.style("color",e?"red":"black").text(t)}const g=()=>{d.selectAll("*").remove();const e=d.append("input").attr("type","file").on("change",(e=>{const a=e.target.files[0];if(!a){g();return}if(!a.size){u("Invalid file "+a.name);g();return}const i=new FileReader;i.onload=e=>{const i=c.options[c.selectedIndex].innerHTML;const d=y({genome:t[i],filename:a.name,hostURL:n,jwt:l,holder:o,sandbox_header:r},e.target.result.trim().split("\n"));if(d){u(d,1);g();return}if(s)s.pane.remove()};i.onerror=function(){u("Error reading file "+a.name,1);g();return};i.readAsText(a,"utf8")}));setTimeout((()=>e.node().focus()),1100)};g()}function y(t,e){if(t.tracks){for(const e of t.tracks){e.iscustom=true}}const[a,o]=k(e[0].trim());if(a){return a}t.hastvalue=o.includes("tvalue");const r=[];let s=0;let i=0;let c=0;for(let a=1;a<e.length;a++){const n=e[a];if(n=="")continue;if(n[0]=="#")continue;const l=n.trim().split("\t");const d={};for(let t=0;t<o.length;t++){d[o[t]]=l[t]}if(!d.gene){return"(line "+(a+1)+") missing gene"}d.gene=d.gene.replace(/"/g,"");if(!d.logfoldchange){return"(line "+(a+1)+") missing log fold change"}{const t=Number.parseFloat(d.logfoldchange);if(Number.isNaN(t)){c++;continue}d.logfoldchange=t}if(!d.averagevalue){return"(line "+(a+1)+") missing average value"}{const t=Number.parseFloat(d.averagevalue);if(Number.isNaN(t)){return"(line "+(a+1)+") invalid value for average value: "+d.averagevalue}d.averagevalue=t}if(!d.pvalue){s++;continue}else{const t=Number.parseFloat(d.pvalue);if(Number.isNaN(t)){s++;continue}d.pvalue=t}if(d.pvalueadj){const t=Number.parseFloat(d.pvalueadj);if(Number.isNaN(t)){i++;continue}d.pvalueadj=t}if(t.hastvalue){if(!d.tvalue){return"(line "+(a+1)+") missing T value"}{const t=Number.parseFloat(d.tvalue);if(Number.isNaN(t)){return"(line "+(a+1)+") invalid value for T value: "+d.tvalue}d.tvalue=t}}r.push(d)}if(r.length==0){return"No valid data"}if(t.holder==undefined){const e=n({x:100,y:100});e.header.text(t.filename);t.holder=e.body}else{t.holder.selectAll("*").remove();if(t.sandbox_header!==undefined)t.holder.append("div").html('<span style="opacity:.5;font-size:.7em">FILE: </span> '+t.filename)}t.data=r;if(c+s+i>0){const e=t.holder.append("div").style("width","800px");if(c){l(e,c+" lines dropped for invalid log fold change value")}if(s){l(e,s+" lines dropped for invalid P value")}if(i){l(e,i+" lines dropped for invalid adjusted P value")}}_(t);return null}function k(t){const e=t.toLowerCase().split("\t");const a=t.split("\t");if(a.length<=1){return["invalid file header"]}const n=(...t)=>{for(const a of t){const t=e.indexOf(a);if(t!=-1)return t}return-1};let l=n("gene");if(l==-1)return["gene missing from header"];a[l]="gene";l=n("logfc","log.foldchange");if(l==-1)return["log.foldchange missing from header"];a[l]="logfoldchange";l=n("aveexpr","average.value");if(l==-1)return["average.value missing from header"];a[l]="averagevalue";l=n("t","t.value");if(l!=-1){a[l]="tvalue"}l=n("p.value");if(l==-1)return["p.value missing from header"];a[l]="pvalue";l=n("p.value.adjusted","adj.p.val","adjustedp-value(fdr)");if(l!=-1){a[l]="pvalueadj"}return[null,a]}function _(t){if(t.hastvalue){let e=Math.abs(t.data[0].tvalue);let a=0;for(const n of t.data){const t=Math.abs(n.tvalue);e=Math.min(e,t);a=Math.max(a,t)}t.tvaluemin=e;t.tvaluemax=a}const e=t.holder.append("div").style("display","inline-block").style("vertical-align","top").style("margin","20px");const a=w(e,t);const n=t.holder.append("div").style("display","inline-block").style("vertical-align","top").style("margin","20px");const l=M(n,t);const r=t.holder.append("div").style("margin","20px");const s=r.append("textarea").style("display","inline-block").attr("rows",5).attr("cols",10).style("resize","both").attr("placeholder","Enter genes, separate by space or newline");const i=r.append("div").style("display","inline-block").style("margin-left","10px").style("vertical-align","top");i.append("button").style("display","block").text("Show gene labels").on("click",(e=>{const a=s.property("value").trim();if(a=="")return;const n=new Set;for(const t of a.split(/[\s\n\t]+/)){n.add(t.toUpperCase())}if(n.size==0)return;for(const e of t.data){if(!e.ma_label&&n.has(e.gene.toUpperCase())){A(e,t)}}}));i.append("button").style("display","block").text("Remove all labels").on("click",(e=>{for(const e of t.data){if(e.ma_label){A(e,t)}}}));i.append("div").style("margin-top","10px").style("color","#858585").style("font-size",".8em").html('<span style="font-size:1.3em">TIP:</span> click circles to toggle highlight on genes;<br>drag to move a gene label around.');const c=r.append("div").style("display","inline-block").style("margin-left","30px").style("vertical-align","top");c.append("button").text("Get MA plot").style("display","block").on("click",(t=>{o(a.node(),"MAplot")}));c.append("button").text("Get volcano plot").style("display","block").on("click",(t=>{o(l.node(),"Volcano")}))}function w(t,e){const a=[];let n=0,l=0;for(const t of e.data){n=Math.min(n,t.logfoldchange);l=Math.max(l,t.logfoldchange);a.push(t.averagevalue)}a.sort(((t,e)=>t-e));const o=a[0];const i=a[a.length-1];let c,d,p,f,u,v,x,b=50,y=50,k;const _=t.append("svg");const w=_.append("g");const M=_.append("g");const A=_.append("text").text("Average expression value").attr("fill","black").attr("text-anchor","middle");const E=_.append("text").text("log2(fold change)").attr("fill","black").attr("text-anchor","middle");e.ma_dotarea=_.append("g");const P=e.ma_dotarea.append("rect").attr("stroke","#ededed").attr("fill","none").attr("shape-rendering","crispEdges");const U=r().domain([o,i]);const z=r().domain([n,l]);let F;if(e.hastvalue){F=r().domain([e.tvaluemin,e.tvaluemax])}const S=e.ma_dotarea.selectAll().data(e.data).enter().append("g").each((function(t){t.ma_g=this}));const T=S.append("circle").attr("stroke","black").attr("stroke-opacity",.2).attr("stroke-width",1).attr("fill",h).attr("fill-opacity",0).each((function(t){t.ma_circle=this})).on("mouseover",N).on("mouseout",R).on("click",((t,a)=>{L(a,e,t.clientX,t.clientY)}));const I=e.ma_dotarea.append("line").attr("stroke","#ccc").attr("shape-rendering","crispEdges");const O=_.append("g");const Y=O.append("line").attr("stroke",h).attr("shape-rendering","crispEdges");const X=O.append("line").attr("stroke",h).attr("shape-rendering","crispEdges");const C=O.append("line").attr("stroke",h).attr("shape-rendering","crispEdges");const V=O.append("rect").attr("fill","white").attr("stroke",h).attr("shape-rendering","crispEdges");const D=O.append("line").attr("stroke",h).attr("shape-rendering","crispEdges");const q=a[Math.ceil(a.length*.05)];const J=a[Math.ceil(a.length*.95)];const G=a[Math.ceil(a.length*.25)];const Q=a[Math.ceil(a.length*.75)];const H=a[Math.ceil(a.length/2)];function W(t,a){p=t;f=a;c=Math.max(50,p/8);d=Math.max(50,f/8);k=Math.max(p,f)/80;const n=k*3;U.range([0,p]);z.range([f,0]);if(F)F.range([k,n]);T.each((t=>{t.ma_radius=F?F(Math.abs(t.tvalue)):k}));x=k*3;u=Math.max(n,p/50);v=Math.max(n,f/50);w.attr("transform","translate("+c+","+b+")");M.attr("transform","translate("+(c+u)+","+(b+f+v+x+v)+")");A.attr("x",c+u+p/2).attr("y",b+f+v+x+v+d-5);E.attr("transform","translate(15,"+(b+f/2)+") rotate(-90)");e.ma_dotarea.attr("transform","translate("+(c+u)+","+b+")");P.attr("width",p).attr("height",f);S.attr("transform",(t=>"translate("+U(t.averagevalue)+","+z(t.logfoldchange)+")"));T.attr("r",(t=>t.ma_radius));I.attr("x2",p).attr("y1",z(0)).attr("y2",z(0));O.attr("transform","translate("+(c+u)+","+(b+f+v)+")");const l=U(q),o=U(G),r=U(H),i=U(Q),h=U(J);X.attr("x1",l).attr("x2",l).attr("y2",x);C.attr("x1",h).attr("x2",h).attr("y2",x);D.attr("x1",r).attr("x2",r).attr("y2",x);V.attr("x",o).attr("width",i-o).attr("height",x);Y.attr("x1",l).attr("x2",h).attr("y1",x/2).attr("y2",x/2);_.attr("width",c+u+p+y).attr("height",b+f+v+x+v+d);s({axis:w.call(g().scale(z)),color:"black",showline:true});s({axis:M.call(m().scale(U)),color:"black",showline:true})}W(400,400);j(S.selectAll("circle"),_,"vo_circle");return _}function M(t,e){let a=0,n=0,l=0,o=0;for(const t of e.data){a=Math.min(a,t.logfoldchange);n=Math.max(n,t.logfoldchange);if(t.pvalue==0){continue}else{const e=-Math.log(t.pvalue,10);l=Math.min(l,e);o=Math.max(o,e)}}let i,c,d,p,f,u,v=50,x=50,b;const y=t.append("svg");const k=y.append("g");const _=y.append("g");const w=y.append("text").text("log2(fold change)").attr("fill","black").attr("text-anchor","middle");const M=y.append("text").text("-log(P value)").attr("fill","black").attr("text-anchor","middle");e.vo_dotarea=y.append("g");const A=e.vo_dotarea.append("rect").attr("stroke","#ededed").attr("fill","none").attr("shape-rendering","crispEdges");const E=r().domain([a,n]);const P=r().domain([l,o]);let U;if(e.hastvalue)U=r().domain([e.tvaluemin,e.tvaluemax]);const z=e.vo_dotarea.selectAll().data(e.data).enter().append("g").each((function(t){t.vo_g=this}));const F=z.append("circle").attr("stroke","black").attr("stroke-opacity",.2).attr("stroke-width",1).attr("fill",h).attr("fill-opacity",0).each((function(t){t.vo_circle=this})).on("mouseover",N).on("mouseout",R).on("click",((t,a)=>{L(a,e,t.clientX,t.clientY)}));const S=e.vo_dotarea.append("line").attr("stroke","#ccc").attr("shape-rendering","crispEdges");function T(t,a){d=t;p=a;i=Math.max(50,d/8);c=Math.max(50,p/8);b=Math.max(d,p)/80;const n=b*3;if(U)U.range([b,n]);F.each((t=>{t.vo_radius=U?U(Math.abs(t.tvalue)):b}));f=Math.max(n,d/50);u=Math.max(n,p/50);k.attr("transform","translate("+i+","+v+")");_.attr("transform","translate("+(i+f)+","+(v+p+u)+")");w.attr("x",i+f+d/2).attr("y",v+p+u+c-5);M.attr("transform","translate(15,"+(v+p/2)+") rotate(-90)");e.vo_dotarea.attr("transform","translate("+(i+f)+","+v+")");A.attr("width",d).attr("height",p);E.range([0,d]);P.range([p,0]);z.attr("transform",(t=>"translate("+E(t.logfoldchange)+","+P(t.pvalue==0?o:-Math.log(t.pvalue,10))+")"));F.attr("r",(t=>t.vo_radius));S.attr("x1",E(0)).attr("x2",E(0)).attr("y2",p);y.attr("width",i+f+d+x).attr("height",v+p+u+c);s({axis:k.call(g().scale(P)),color:"black",showline:true});s({axis:_.call(m().scale(E)),color:"black",showline:true})}T(400,400);if(e.data[0].pvalueadj!=undefined){const a=t.append("div").style("margin","20px");a.append("span").text("Select P value for Volcano plot:");const n=a.append("select").style("margin-left","5px").on("change",(t=>{l=0;o=0;const a=n.node().selectedIndex==0;for(const t of e.data){const e=a?t.pvalue:t.pvalueadj;if(e==0)continue;const n=-Math.log(e,10);l=Math.min(l,n);o=Math.max(o,n)}P.domain([l,o]);s({axis:k.call(g().scale(P)),color:"black",showline:true});z.attr("transform",(t=>{const e=a?t.pvalue:t.pvalueadj;return"translate("+E(t.logfoldchange)+","+P(e==0?o:-Math.log(e,10))+")"}));M.text(a?"-log(P value)":"-log(adjusted P value)")}));n.append("option").text("Unadjusted P value");n.append("option").text("Adjusted P value")}j(z.selectAll("circle"),y,"ma_circle");return y}function j(t,e,a){const n=u().items(t).targetArea(e);function l(){e.selectAll(".possible").style("fill-opacity",0).classed("not_possible",true).classed("selected",false).each((t=>{c(t[a]).attr("fill-opacity",0)}))}function o(){n.possibleItems().style("fill-opacity",.9).classed("not_possible",false).classed("possible",true).each((t=>{c(t[a]).attr("fill-opacity",.9)}))}function r(){}n.on("start",l).on("draw",o).on("end",r);e.call(n)}function N(t,e){v.clear().show(t.clientX,t.clientY);const a=[{k:"gene",v:e.gene},{k:"average value",v:e.averagevalue},{k:"log fold change",v:e.logfoldchange},{k:"P value",v:e.pvalue}];if(e.pvalueadj!=undefined){a.push({k:"adjusted P value",v:e.pvalueadj})}if(e.tvalue!=undefined){a.push({k:"T value",v:e.tvalue})}for(const t in e){if(t=="gene"||t=="averagevalue"||t=="logfoldchange"||t=="pvalue"||t=="pvalueadj"||t=="tvalue"){continue}const n=e[t];if(typeof n!="string"){continue}a.push({k:t,v:n})}i(v.d,a);if(!e.ma_label){c(e.ma_circle).attr("fill-opacity",.9);c(e.vo_circle).attr("fill-opacity",.9)}}function R(t,e){v.hide();if(!e.ma_label){c(e.ma_circle).attr("fill-opacity",0);c(e.vo_circle).attr("fill-opacity",0)}}function A(t,e){if(t.ma_label){t.ma_label.remove();t.ma_labelbg.remove();t.ma_label=null;t.vo_label.remove();t.vo_labelbg.remove();t.vo_label=null;c(t.ma_circle).attr("fill-opacity",0);c(t.vo_circle).attr("fill-opacity",0);return}e.ma_dotarea.node().appendChild(t.ma_g);t.ma_labelbg=c(t.ma_g).append("text").text(t.gene).attr("x",t.ma_radius+5).attr("y",0).attr("dominant-baseline","central").attr("font-size",14).attr("font-family",d).attr("fill","none").attr("stroke","white").attr("stroke-width",3);t.ma_label=c(t.ma_g).append("text").text(t.gene).attr("x",t.ma_radius+5).attr("y",0).attr("dominant-baseline","central").attr("font-size",14).attr("fill","black").attr("font-family",d).on("mousedown",((t,e)=>{E(e.ma_label,e.ma_labelbg,t)}));e.vo_dotarea.node().appendChild(t.vo_g);t.vo_labelbg=c(t.vo_g).append("text").text(t.gene).attr("x",t.vo_radius+5).attr("y",0).attr("dominant-baseline","central").attr("font-size",14).attr("font-family",d).attr("fill","none").attr("stroke","white").attr("stroke-width",3);t.vo_label=c(t.vo_g).append("text").text(t.gene).attr("x",t.vo_radius+5).attr("y",0).attr("dominant-baseline","central").attr("font-size",14).attr("fill","black").attr("font-family",d).on("mousedown",((t,e)=>{E(e.vo_label,e.vo_labelbg,t)}));c(t.ma_circle).attr("fill-opacity",.8);c(t.vo_circle).attr("fill-opacity",.8)}function E(t,e,a){event.preventDefault();const n=Number.parseFloat(t.attr("x"));const l=Number.parseFloat(t.attr("y"));const o=a.clientX;const r=a.clientY;const s=c(document.body);s.on("mousemove",(a=>{t.attr("x",n+a.clientX-o).attr("y",l+a.clientY-r);e.attr("x",n+a.clientX-o).attr("y",l+a.clientY-r)})).on("mouseup",(t=>{s.on("mousemove",null).on("mouseup",null)}))}function L(t,e,a,l){if(e.tracks){if(!t.ma_label){const o=n({x:a+20,y:l-50});o.header.text(t.gene);P(e,t.gene,o.body)}}A(t,e)}function P(t,e,a){fetch(new Request(t.hostURL+"/genelookup",{method:"POST",body:JSON.stringify({deep:1,input:e,genome:t.genome.name,jwt:t.jwt})})).then((t=>t.json())).then((n=>{if(n.error)throw{message:n.error};if(!n.gmlst||n.gmlst.length==0)throw{message:"No genes can be found for "+e};const l=new Map;for(const t of n.gmlst){if(!l.has(t.chr)){l.set(t.chr,{chr:t.chr,start:t.start,stop:t.stop})}l.get(t.chr).start=Math.min(t.start,l.get(t.chr).start);l.get(t.chr).stop=Math.max(t.stop,l.get(t.chr).stop)}const o=[...l][0][1];const r=[...t.tracks];p(t.genome,r);f({holder:a,hostURL:t.hostURL,jwt:t.jwt,genome:t.genome,chr:o.chr,start:o.start,stop:o.stop,tklst:r,nobox:true})})).catch((t=>{l(a,t.message);if(t.stack)console.log(t.stack)}))}export{x as mavbparseinput,b as mavbui};
1
+ import{M as t,bn as e,bo as a,Z as n,j as l,U as o,I as r,ag as s,a9 as i,d as c,ah as d,f as p}from"./app-488d9fd6.js";import{b as f}from"./block.lazyload-143ae987.js";import{d as u}from"./lasso-48317f42.js";import{b as g,a as m}from"./axis-747c801e.js";import"./drag-1b98e43e.js";import"./nodrag-b2866dd8.js";import"./pointer-c7475677.js";const h="#ffa200";const v=new t;function x(t,e,a,n){if(!t.dataname){t.dataname="Differential expression"}if(t.input){const l=t.input;delete t.input;const o=y({genome:t.genome,filename:t.dataname,holder:a,tracks:t.tracks,hostURL:t.hostURL,jwt:n},l.trim().split("\n"));if(o){e("Error with diferential gene expressionn data: "+o)}return}let l;if(t.url){l=new Request(t.hostURL+"/urltextfile",{method:"POST",body:JSON.stringify({url:t.url,jwt:n})});delete t.url}else if(t.file){l=new Request(t.hostURL+"/textfile",{method:"POST",body:JSON.stringify({file:t.file,jwt:n})});delete t.file}else{e("neither .input nor .url given for MA-Volcano plot");return}const o=a.append("div").style("margin","20px").style("color","#aaa").style("font-size","1.5em").text("Loading differential gene expression data ...");fetch(l).then((t=>t.json())).then((e=>{if(e.error)throw{message:e.error};if(!e.text)throw{message:"no data loaded"};const l=y({genome:t.genome,filename:t.dataname,holder:a,tracks:t.tracks,hostURL:t.hostURL,jwt:n},e.text.trim().split("\n"));if(l)throw{message:"Error with differential gene expression data: "+l}})).catch((t=>{e(t.message);if(t.stack)console.log(t.stack)})).then((()=>{o.remove()}))}function b(t,n,l,o,r){let s,i,c,d,p,f;if(o!==undefined)[i,c,d,p,f]=e(o,t);else{[s,i,c,d,p,f]=a(100,100,t);s.header.text("Differential gene expression viewer");s.body.style("margin","10px")}i.append("div").style("margin-top","30px").style("color","#858585").html(`\n\t\t<p>Interactive MA and Volcano plot for exploring differentially expressed genes.</p>\n\t\t<a href=https://docs.google.com/document/d/1gEhywyMzMQRM10NFvsObw1yDSWxVY7pxYjsQ2-nd6x4/edit?usp=sharing target=_blank>File format</a>\n\t\t`);function u(t,e){p.style("color",e?"red":"black").text(t)}const g=()=>{d.selectAll("*").remove();const e=d.append("input").attr("type","file").on("change",(e=>{const a=e.target.files[0];if(!a){g();return}if(!a.size){u("Invalid file "+a.name);g();return}const i=new FileReader;i.onload=e=>{const i=c.options[c.selectedIndex].innerHTML;const d=y({genome:t[i],filename:a.name,hostURL:n,jwt:l,holder:o,sandbox_header:r},e.target.result.trim().split("\n"));if(d){u(d,1);g();return}if(s)s.pane.remove()};i.onerror=function(){u("Error reading file "+a.name,1);g();return};i.readAsText(a,"utf8")}));setTimeout((()=>e.node().focus()),1100)};g()}function y(t,e){if(t.tracks){for(const e of t.tracks){e.iscustom=true}}const[a,o]=k(e[0].trim());if(a){return a}t.hastvalue=o.includes("tvalue");const r=[];let s=0;let i=0;let c=0;for(let a=1;a<e.length;a++){const n=e[a];if(n=="")continue;if(n[0]=="#")continue;const l=n.trim().split("\t");const d={};for(let t=0;t<o.length;t++){d[o[t]]=l[t]}if(!d.gene){return"(line "+(a+1)+") missing gene"}d.gene=d.gene.replace(/"/g,"");if(!d.logfoldchange){return"(line "+(a+1)+") missing log fold change"}{const t=Number.parseFloat(d.logfoldchange);if(Number.isNaN(t)){c++;continue}d.logfoldchange=t}if(!d.averagevalue){return"(line "+(a+1)+") missing average value"}{const t=Number.parseFloat(d.averagevalue);if(Number.isNaN(t)){return"(line "+(a+1)+") invalid value for average value: "+d.averagevalue}d.averagevalue=t}if(!d.pvalue){s++;continue}else{const t=Number.parseFloat(d.pvalue);if(Number.isNaN(t)){s++;continue}d.pvalue=t}if(d.pvalueadj){const t=Number.parseFloat(d.pvalueadj);if(Number.isNaN(t)){i++;continue}d.pvalueadj=t}if(t.hastvalue){if(!d.tvalue){return"(line "+(a+1)+") missing T value"}{const t=Number.parseFloat(d.tvalue);if(Number.isNaN(t)){return"(line "+(a+1)+") invalid value for T value: "+d.tvalue}d.tvalue=t}}r.push(d)}if(r.length==0){return"No valid data"}if(t.holder==undefined){const e=n({x:100,y:100});e.header.text(t.filename);t.holder=e.body}else{t.holder.selectAll("*").remove();if(t.sandbox_header!==undefined)t.holder.append("div").html('<span style="opacity:.5;font-size:.7em">FILE: </span> '+t.filename)}t.data=r;if(c+s+i>0){const e=t.holder.append("div").style("width","800px");if(c){l(e,c+" lines dropped for invalid log fold change value")}if(s){l(e,s+" lines dropped for invalid P value")}if(i){l(e,i+" lines dropped for invalid adjusted P value")}}_(t);return null}function k(t){const e=t.toLowerCase().split("\t");const a=t.split("\t");if(a.length<=1){return["invalid file header"]}const n=(...t)=>{for(const a of t){const t=e.indexOf(a);if(t!=-1)return t}return-1};let l=n("gene");if(l==-1)return["gene missing from header"];a[l]="gene";l=n("logfc","log.foldchange");if(l==-1)return["log.foldchange missing from header"];a[l]="logfoldchange";l=n("aveexpr","average.value");if(l==-1)return["average.value missing from header"];a[l]="averagevalue";l=n("t","t.value");if(l!=-1){a[l]="tvalue"}l=n("p.value");if(l==-1)return["p.value missing from header"];a[l]="pvalue";l=n("p.value.adjusted","adj.p.val","adjustedp-value(fdr)");if(l!=-1){a[l]="pvalueadj"}return[null,a]}function _(t){if(t.hastvalue){let e=Math.abs(t.data[0].tvalue);let a=0;for(const n of t.data){const t=Math.abs(n.tvalue);e=Math.min(e,t);a=Math.max(a,t)}t.tvaluemin=e;t.tvaluemax=a}const e=t.holder.append("div").style("display","inline-block").style("vertical-align","top").style("margin","20px");const a=w(e,t);const n=t.holder.append("div").style("display","inline-block").style("vertical-align","top").style("margin","20px");const l=M(n,t);const r=t.holder.append("div").style("margin","20px");const s=r.append("textarea").style("display","inline-block").attr("rows",5).attr("cols",10).style("resize","both").attr("placeholder","Enter genes, separate by space or newline");const i=r.append("div").style("display","inline-block").style("margin-left","10px").style("vertical-align","top");i.append("button").style("display","block").text("Show gene labels").on("click",(e=>{const a=s.property("value").trim();if(a=="")return;const n=new Set;for(const t of a.split(/[\s\n\t]+/)){n.add(t.toUpperCase())}if(n.size==0)return;for(const e of t.data){if(!e.ma_label&&n.has(e.gene.toUpperCase())){A(e,t)}}}));i.append("button").style("display","block").text("Remove all labels").on("click",(e=>{for(const e of t.data){if(e.ma_label){A(e,t)}}}));i.append("div").style("margin-top","10px").style("color","#858585").style("font-size",".8em").html('<span style="font-size:1.3em">TIP:</span> click circles to toggle highlight on genes;<br>drag to move a gene label around.');const c=r.append("div").style("display","inline-block").style("margin-left","30px").style("vertical-align","top");c.append("button").text("Get MA plot").style("display","block").on("click",(t=>{o(a.node(),"MAplot")}));c.append("button").text("Get volcano plot").style("display","block").on("click",(t=>{o(l.node(),"Volcano")}))}function w(t,e){const a=[];let n=0,l=0;for(const t of e.data){n=Math.min(n,t.logfoldchange);l=Math.max(l,t.logfoldchange);a.push(t.averagevalue)}a.sort(((t,e)=>t-e));const o=a[0];const i=a[a.length-1];let c,d,p,f,u,v,x,b=50,y=50,k;const _=t.append("svg");const w=_.append("g");const M=_.append("g");const A=_.append("text").text("Average expression value").attr("fill","black").attr("text-anchor","middle");const E=_.append("text").text("log2(fold change)").attr("fill","black").attr("text-anchor","middle");e.ma_dotarea=_.append("g");const P=e.ma_dotarea.append("rect").attr("stroke","#ededed").attr("fill","none").attr("shape-rendering","crispEdges");const U=r().domain([o,i]);const z=r().domain([n,l]);let F;if(e.hastvalue){F=r().domain([e.tvaluemin,e.tvaluemax])}const S=e.ma_dotarea.selectAll().data(e.data).enter().append("g").each((function(t){t.ma_g=this}));const T=S.append("circle").attr("stroke","black").attr("stroke-opacity",.2).attr("stroke-width",1).attr("fill",h).attr("fill-opacity",0).each((function(t){t.ma_circle=this})).on("mouseover",N).on("mouseout",R).on("click",((t,a)=>{L(a,e,t.clientX,t.clientY)}));const I=e.ma_dotarea.append("line").attr("stroke","#ccc").attr("shape-rendering","crispEdges");const O=_.append("g");const Y=O.append("line").attr("stroke",h).attr("shape-rendering","crispEdges");const X=O.append("line").attr("stroke",h).attr("shape-rendering","crispEdges");const C=O.append("line").attr("stroke",h).attr("shape-rendering","crispEdges");const V=O.append("rect").attr("fill","white").attr("stroke",h).attr("shape-rendering","crispEdges");const D=O.append("line").attr("stroke",h).attr("shape-rendering","crispEdges");const q=a[Math.ceil(a.length*.05)];const J=a[Math.ceil(a.length*.95)];const G=a[Math.ceil(a.length*.25)];const Q=a[Math.ceil(a.length*.75)];const H=a[Math.ceil(a.length/2)];function W(t,a){p=t;f=a;c=Math.max(50,p/8);d=Math.max(50,f/8);k=Math.max(p,f)/80;const n=k*3;U.range([0,p]);z.range([f,0]);if(F)F.range([k,n]);T.each((t=>{t.ma_radius=F?F(Math.abs(t.tvalue)):k}));x=k*3;u=Math.max(n,p/50);v=Math.max(n,f/50);w.attr("transform","translate("+c+","+b+")");M.attr("transform","translate("+(c+u)+","+(b+f+v+x+v)+")");A.attr("x",c+u+p/2).attr("y",b+f+v+x+v+d-5);E.attr("transform","translate(15,"+(b+f/2)+") rotate(-90)");e.ma_dotarea.attr("transform","translate("+(c+u)+","+b+")");P.attr("width",p).attr("height",f);S.attr("transform",(t=>"translate("+U(t.averagevalue)+","+z(t.logfoldchange)+")"));T.attr("r",(t=>t.ma_radius));I.attr("x2",p).attr("y1",z(0)).attr("y2",z(0));O.attr("transform","translate("+(c+u)+","+(b+f+v)+")");const l=U(q),o=U(G),r=U(H),i=U(Q),h=U(J);X.attr("x1",l).attr("x2",l).attr("y2",x);C.attr("x1",h).attr("x2",h).attr("y2",x);D.attr("x1",r).attr("x2",r).attr("y2",x);V.attr("x",o).attr("width",i-o).attr("height",x);Y.attr("x1",l).attr("x2",h).attr("y1",x/2).attr("y2",x/2);_.attr("width",c+u+p+y).attr("height",b+f+v+x+v+d);s({axis:w.call(g().scale(z)),color:"black",showline:true});s({axis:M.call(m().scale(U)),color:"black",showline:true})}W(400,400);j(S.selectAll("circle"),_,"vo_circle");return _}function M(t,e){let a=0,n=0,l=0,o=0;for(const t of e.data){a=Math.min(a,t.logfoldchange);n=Math.max(n,t.logfoldchange);if(t.pvalue==0){continue}else{const e=-Math.log(t.pvalue,10);l=Math.min(l,e);o=Math.max(o,e)}}let i,c,d,p,f,u,v=50,x=50,b;const y=t.append("svg");const k=y.append("g");const _=y.append("g");const w=y.append("text").text("log2(fold change)").attr("fill","black").attr("text-anchor","middle");const M=y.append("text").text("-log(P value)").attr("fill","black").attr("text-anchor","middle");e.vo_dotarea=y.append("g");const A=e.vo_dotarea.append("rect").attr("stroke","#ededed").attr("fill","none").attr("shape-rendering","crispEdges");const E=r().domain([a,n]);const P=r().domain([l,o]);let U;if(e.hastvalue)U=r().domain([e.tvaluemin,e.tvaluemax]);const z=e.vo_dotarea.selectAll().data(e.data).enter().append("g").each((function(t){t.vo_g=this}));const F=z.append("circle").attr("stroke","black").attr("stroke-opacity",.2).attr("stroke-width",1).attr("fill",h).attr("fill-opacity",0).each((function(t){t.vo_circle=this})).on("mouseover",N).on("mouseout",R).on("click",((t,a)=>{L(a,e,t.clientX,t.clientY)}));const S=e.vo_dotarea.append("line").attr("stroke","#ccc").attr("shape-rendering","crispEdges");function T(t,a){d=t;p=a;i=Math.max(50,d/8);c=Math.max(50,p/8);b=Math.max(d,p)/80;const n=b*3;if(U)U.range([b,n]);F.each((t=>{t.vo_radius=U?U(Math.abs(t.tvalue)):b}));f=Math.max(n,d/50);u=Math.max(n,p/50);k.attr("transform","translate("+i+","+v+")");_.attr("transform","translate("+(i+f)+","+(v+p+u)+")");w.attr("x",i+f+d/2).attr("y",v+p+u+c-5);M.attr("transform","translate(15,"+(v+p/2)+") rotate(-90)");e.vo_dotarea.attr("transform","translate("+(i+f)+","+v+")");A.attr("width",d).attr("height",p);E.range([0,d]);P.range([p,0]);z.attr("transform",(t=>"translate("+E(t.logfoldchange)+","+P(t.pvalue==0?o:-Math.log(t.pvalue,10))+")"));F.attr("r",(t=>t.vo_radius));S.attr("x1",E(0)).attr("x2",E(0)).attr("y2",p);y.attr("width",i+f+d+x).attr("height",v+p+u+c);s({axis:k.call(g().scale(P)),color:"black",showline:true});s({axis:_.call(m().scale(E)),color:"black",showline:true})}T(400,400);if(e.data[0].pvalueadj!=undefined){const a=t.append("div").style("margin","20px");a.append("span").text("Select P value for Volcano plot:");const n=a.append("select").style("margin-left","5px").on("change",(t=>{l=0;o=0;const a=n.node().selectedIndex==0;for(const t of e.data){const e=a?t.pvalue:t.pvalueadj;if(e==0)continue;const n=-Math.log(e,10);l=Math.min(l,n);o=Math.max(o,n)}P.domain([l,o]);s({axis:k.call(g().scale(P)),color:"black",showline:true});z.attr("transform",(t=>{const e=a?t.pvalue:t.pvalueadj;return"translate("+E(t.logfoldchange)+","+P(e==0?o:-Math.log(e,10))+")"}));M.text(a?"-log(P value)":"-log(adjusted P value)")}));n.append("option").text("Unadjusted P value");n.append("option").text("Adjusted P value")}j(z.selectAll("circle"),y,"ma_circle");return y}function j(t,e,a){const n=u().items(t).targetArea(e);function l(){e.selectAll(".possible").style("fill-opacity",0).classed("not_possible",true).classed("selected",false).each((t=>{c(t[a]).attr("fill-opacity",0)}))}function o(){n.possibleItems().style("fill-opacity",.9).classed("not_possible",false).classed("possible",true).each((t=>{c(t[a]).attr("fill-opacity",.9)}))}function r(){}n.on("start",l).on("draw",o).on("end",r);e.call(n)}function N(t,e){v.clear().show(t.clientX,t.clientY);const a=[{k:"gene",v:e.gene},{k:"average value",v:e.averagevalue},{k:"log fold change",v:e.logfoldchange},{k:"P value",v:e.pvalue}];if(e.pvalueadj!=undefined){a.push({k:"adjusted P value",v:e.pvalueadj})}if(e.tvalue!=undefined){a.push({k:"T value",v:e.tvalue})}for(const t in e){if(t=="gene"||t=="averagevalue"||t=="logfoldchange"||t=="pvalue"||t=="pvalueadj"||t=="tvalue"){continue}const n=e[t];if(typeof n!="string"){continue}a.push({k:t,v:n})}i(v.d,a);if(!e.ma_label){c(e.ma_circle).attr("fill-opacity",.9);c(e.vo_circle).attr("fill-opacity",.9)}}function R(t,e){v.hide();if(!e.ma_label){c(e.ma_circle).attr("fill-opacity",0);c(e.vo_circle).attr("fill-opacity",0)}}function A(t,e){if(t.ma_label){t.ma_label.remove();t.ma_labelbg.remove();t.ma_label=null;t.vo_label.remove();t.vo_labelbg.remove();t.vo_label=null;c(t.ma_circle).attr("fill-opacity",0);c(t.vo_circle).attr("fill-opacity",0);return}e.ma_dotarea.node().appendChild(t.ma_g);t.ma_labelbg=c(t.ma_g).append("text").text(t.gene).attr("x",t.ma_radius+5).attr("y",0).attr("dominant-baseline","central").attr("font-size",14).attr("font-family",d).attr("fill","none").attr("stroke","white").attr("stroke-width",3);t.ma_label=c(t.ma_g).append("text").text(t.gene).attr("x",t.ma_radius+5).attr("y",0).attr("dominant-baseline","central").attr("font-size",14).attr("fill","black").attr("font-family",d).on("mousedown",((t,e)=>{E(e.ma_label,e.ma_labelbg,t)}));e.vo_dotarea.node().appendChild(t.vo_g);t.vo_labelbg=c(t.vo_g).append("text").text(t.gene).attr("x",t.vo_radius+5).attr("y",0).attr("dominant-baseline","central").attr("font-size",14).attr("font-family",d).attr("fill","none").attr("stroke","white").attr("stroke-width",3);t.vo_label=c(t.vo_g).append("text").text(t.gene).attr("x",t.vo_radius+5).attr("y",0).attr("dominant-baseline","central").attr("font-size",14).attr("fill","black").attr("font-family",d).on("mousedown",((t,e)=>{E(e.vo_label,e.vo_labelbg,t)}));c(t.ma_circle).attr("fill-opacity",.8);c(t.vo_circle).attr("fill-opacity",.8)}function E(t,e,a){event.preventDefault();const n=Number.parseFloat(t.attr("x"));const l=Number.parseFloat(t.attr("y"));const o=a.clientX;const r=a.clientY;const s=c(document.body);s.on("mousemove",(a=>{t.attr("x",n+a.clientX-o).attr("y",l+a.clientY-r);e.attr("x",n+a.clientX-o).attr("y",l+a.clientY-r)})).on("mouseup",(t=>{s.on("mousemove",null).on("mouseup",null)}))}function L(t,e,a,l){if(e.tracks){if(!t.ma_label){const o=n({x:a+20,y:l-50});o.header.text(t.gene);P(e,t.gene,o.body)}}A(t,e)}function P(t,e,a){fetch(new Request(t.hostURL+"/genelookup",{method:"POST",body:JSON.stringify({deep:1,input:e,genome:t.genome.name,jwt:t.jwt})})).then((t=>t.json())).then((n=>{if(n.error)throw{message:n.error};if(!n.gmlst||n.gmlst.length==0)throw{message:"No genes can be found for "+e};const l=new Map;for(const t of n.gmlst){if(!l.has(t.chr)){l.set(t.chr,{chr:t.chr,start:t.start,stop:t.stop})}l.get(t.chr).start=Math.min(t.start,l.get(t.chr).start);l.get(t.chr).stop=Math.max(t.stop,l.get(t.chr).stop)}const o=[...l][0][1];const r=[...t.tracks];p(t.genome,r);f({holder:a,hostURL:t.hostURL,jwt:t.jwt,genome:t.genome,chr:o.chr,start:o.start,stop:o.stop,tklst:r,nobox:true})})).catch((t=>{l(a,t.message);if(t.stack)console.log(t.stack)}))}export{x as mavbparseinput,b as mavbui};
@@ -1 +1 @@
1
- import{M as t,k as e,p as a,q as n,ah as r,a9 as o,ag as i,I as s,w as l}from"./app-3d14cbe4.js";import{c as p}from"./axis-747c801e.js";const f=80;const c=5;async function d(t){window.obj=t;t.errdiv=t.div.append("div");try{g(t);await h(t)}catch(e){t.errdiv.text(e.message||e);if(e.stack)console.log(e.stack)}}function g(a){a.motifrowheight=16;a.gaincolor="red";a.losscolor="blue";a.flankspan=15;if(!a.fimo_thresh)a.fimo_thresh=.001;if(!a.minabslogp)a.minabslogp=1;a.tip=new t;const n=a.div.append("table").style("border-spacing","3px").style("border-collapse","separate").style("margin","10px");{const t=n.append("tr");t.append("td").text("Flanking sequence (#nt)");const r=t.append("td");r.append("input").attr("type","number").style("margin","0px 10px").style("width","100px").property("value",a.flankspan).on("keyup",(t=>{if(!e(t))return;const n=Number.parseInt(t.target.value);if(n<10){window.alert("Enter integer above 10");return}if(n==a.flankspan)return;a.flankspan=n;h(a)}));r.append("span").style("font-size","0.7em").style("opacity",.5).text("Press ENTER to update")}{const t=n.append("tr");t.append("td").text("P-value cutoff");const r=t.append("td");r.append("input").attr("type","number").style("margin","0px 10px").style("width","100px").property("value",a.fimo_thresh).on("keyup",(t=>{if(!e(t))return;const n=Number.parseFloat(t.target.value);if(n<=0){window.alert("Enter a p value between 0 to 1");return}if(n==a.fimo_thresh)return;a.fimo_thresh=n;h(a)}));r.append("span").style("font-size","0.7em").style("opacity",.5).text("Press ENTER to update")}{const t=n.append("tr");t.append("td").text("Minimum log10 p-value difference");const r=t.append("td");r.append("input").attr("type","number").style("margin","0px 10px").style("width","100px").property("value",a.minabslogp).on("keyup",(t=>{if(!e(t))return;const n=Number.parseFloat(t.target.value);if(n<=0){window.alert("Enter a number above 0");return}if(n==a.minabslogp)return;a.minabslogp=n;h(a)}));r.append("span").style("font-size","0.7em").style("opacity",.5).text("Press ENTER to update")}a.wait=a.div.append("div");a.svg=a.div.append("svg");a.dynamic_g=a.svg.append("g");a.legend={};a.legend.logpvaluediv=a.div.append("div");m(a)}function m(t){if(!t.factor_profiles)return;if(!Array.isArray(t.factor_profiles))throw"factor_profiles is not array";for(const e of t.factor_profiles){if(!e.name)throw"name missing for a profile";if(!e.leftpad)e.leftpad=20;if(!e.width)e.width=300;e.headerg=t.svg.append("g");e.textlabel=e.headerg.append("text").text(e.name).attr("x",e.width/2).attr("text-anchor","middle").attr("y",-30);if(e.isgenevalue){e.color="green";e.axisg=e.headerg.append("g");continue}if(e.isgenevalueonesample){if(!e.samplename)throw"samplename missing for isgenevalueonesample";e.barcolor="#62945B";e.axisg=e.headerg.append("g");continue}throw"unknown profile type"}}function h(t){a(t.wait.text("Loading..."));t.dynamic_g.selectAll("*").remove();const e={genome:t.genome.name,m:t.m,fimo_thresh:t.fimo_thresh,flankspan:t.flankspan,minabslogp:t.minabslogp};return n("fimo",e).then((e=>{if(e.error)throw"Error: cannot do motif finding: "+e.error;if(t.callback_once){t.callback_once();delete t.callback_once}if(!e.items||e.items.length==0)throw"Found no motif change due to this mutation";t.wait.style("display","none");for(const t of e.items){if(t.attr){t.gene=t.attr["Transcription factor"]}else{t.gene=t.name}}return u(e,t)})).catch((e=>{t.wait.style("display","block").text(e.message||e);if(e.stack)console.log(e.stack)}))}async function u(t,e){x(t,e);if(e.factor_profiles){await v(t,e);let a=Number.parseInt(e.svg.attr("width"));for(const n of e.factor_profiles){n.headerg.attr("transform","translate("+(a+n.leftpad)+","+f+")");n.motifs=[];for(const e of t.items){const t=e.layer1_g.append("g").attr("transform","translate("+(a+n.leftpad)+",0)");n.motifs.push({motif:e,g:t,message:t.append("text").text("Loading...").attr("dominant-baseline","central").attr("fill","#ccc")})}a+=n.leftpad+n.width;e.svg.attr("width",a+5);await _(e,n);for(const e of t.items){e.bgbox.attr("width",a);e.coverbox.attr("width",a)}}}}function x(t,e){const a=14;const n=a*t.refseq.length;{const n=(e.m.pos-t.refstart+.5)*a;const r=e.dynamic_g.append("g").attr("transform","translate("+n+","+f+")");r.append("rect").attr("x",-a/2).attr("y",-10).attr("width",a).attr("height",10).attr("fill","#666");r.append("text").attr("y",-15).attr("text-anchor","middle").text(e.m.chr+":"+e.m.pos+" "+e.m.ref+">"+e.m.alt)}let o=f+c;const i=1;const s=e.dynamic_g.append("g").attr("transform","translate(0,"+o+")");for(const[o,l]of t.items.entries()){l.g=s.append("g").attr("transform","translate(0,"+(e.motifrowheight*(o+.5)+i*o)+")");l.layer1_g=l.g.append("g");l.layer2_g=l.g.append("g");l.bgbox=l.layer1_g.append("rect").attr("y",-e.motifrowheight/2).attr("width",n).attr("height",e.motifrowheight).attr("fill","white");const p=(l.start-t.refstart)*a;const f=(Math.min(l.stop,t.refstop)-l.start)*a;l.layer1_g.append("rect").attr("x",p).attr("y",-e.motifrowheight/2).attr("width",f).attr("height",e.motifrowheight).attr("fill",l.gain?e.gaincolor:e.losscolor).attr("fill-opacity",l.logpvaluediff/(l.gain?t.valuemax:t.valuemin));let c;if(l.strand=="+"){c="> "+l.name+" >"}else{c="< "+l.name+" <"}l.layer1_g.append("text").text(c).attr("x",p+f/2).attr("dominant-baseline","central").attr("text-anchor","middle").attr("stroke","white").attr("stroke-width",3).attr("font-size",e.motifrowheight-3).attr("font-family",r).style("white-space","pre");l.layer1_g.append("text").text(c).attr("x",p+f/2).attr("dominant-baseline","central").attr("text-anchor","middle").attr("font-size",e.motifrowheight-3).attr("font-family",r).style("white-space","pre");l.coverbox=l.layer2_g.append("rect").attr("y",-e.motifrowheight/2).attr("width",n).attr("height",e.motifrowheight).attr("fill","white").attr("fill-opacity",0).on("mouseover",(t=>{l.bgbox.attr("fill","#f9fabd");y(l,e,t)})).on("mouseout",(()=>{l.bgbox.attr("fill","white");e.tip.hide()}))}o+=(i+e.motifrowheight)*t.items.length+20;b(t,e);e.svg.attr("width",n).attr("height",o)}function y(t,e,a){e.tip.clear();if(t.attr){e.tip.d.append("div").text("MOTIF").style("font-weight","bold");const a=[{k:"P-values",v:w(t,e)},{k:"Strand",v:t.strand}];o(e.tip.d,a);e.tip.d.append("div").text("FACTOR").style("font-weight","bold");const n=[];for(const e in t.attr){n.push({k:e,v:t.attr[e]})}o(e.tip.d,n)}else{const a=[{k:"TF",v:t.name},{k:"P-values",v:w(t,e)},{k:"Strand",v:t.strand}];o(e.tip.d,a)}e.tip.show(a.clientX,a.clientY)}function w(t,e){return(t.pvalue_ref==undefined?'<span style="opacity:.5;padding:2px"><span style="font-size:.7em">REF</span> not found</span>':'<span style="background-color:'+e.losscolor+';padding:2px;color:white;"><span style="font-size:.7em">REF</span> '+t.pvalue_ref+"</span>")+"<br>"+(t.pvalue_alt==undefined?'<span style="opacity:.5;padding:2px"><span style="font-size:.7em">ALT</span> not found</span>':'<span style="background-color:'+e.gaincolor+';padding:2px;color:white;"><span style="font-size:.7em">ALT</span> '+t.pvalue_alt+"</span>")}function b(t,e){e.legend.logpvaluediv.selectAll("*").remove();const a=50,n=4,o=12,l=55,f=20;e.legend.logpvaluediv.append("span").text("Log10 p-value difference");const c=e.legend.logpvaluediv.append("svg").attr("width",(a+l)*2).attr("height",o+n+f);const d=c.append("g").attr("transform","translate("+a+","+(o+n)+")");i({axis:d.call(p().scale(s().domain([t.valuemin,0,t.valuemax]).range([0,l,l*2])).tickValues([t.valuemin,0,t.valuemax]).tickSize(n))});const g=Math.random().toString();const m=Math.random().toString();const h=c.append("defs");{const t=h.append("linearGradient").attr("id",m);t.append("stop").attr("offset","0%").attr("stop-color",e.losscolor);t.append("stop").attr("offset","100%").attr("stop-color","white")}{const t=h.append("linearGradient").attr("id",g);t.append("stop").attr("offset","0%").attr("stop-color","white");t.append("stop").attr("offset","100%").attr("stop-color",e.gaincolor)}c.append("rect").attr("x",a).attr("y",o+n).attr("width",l).attr("height",f).attr("fill","url(#"+m+")");c.append("rect").attr("x",a+l).attr("y",o+n).attr("width",l).attr("height",f).attr("fill","url(#"+g+")");c.append("text").attr("x",a-5).attr("y",o+n+f/2).attr("font-family",r).attr("font-size",o).attr("text-anchor","end").attr("dominant-baseline","central").attr("fill","black").text("Loss");c.append("text").attr("x",a+l*2+5).attr("y",o+n+f/2).attr("font-family",r).attr("font-size",o).attr("dominant-baseline","central").attr("fill","black").text("Gain")}async function v(t,e){e.gene2position={};const a=new Set;for(const e of t.items){a.add(e.gene)}for(const t of a){const a=await k(t,e);if(a){e.gene2position[t]=a}}}function k(t,e){return n("genelookup",{genome:e.genome.name,input:t,deep:1}).then((t=>{if(!t.gmlst)return null;const e=l(t.gmlst);return e[0]}))}function _(t,e){if(e.isgenevalue){return M(t,e)}if(e.isgenevalueonesample){return E(t,e)}throw"unknown profile type"}async function E(t,e){const r={genome:t.genome.name,genes:[],sample:e.samplename};if(e.mdslabel){r.dslabel=e.mdslabel;r.querykey=e.querykey;if(e.samplegroup_attrlst){r.getgroup=e.samplegroup_attrlst}}else{r.iscustom=1;r.file=e.file;r.url=e.url;r.indexURL=e.indexURL}for(const e in t.gene2position){const a=t.gene2position[e];r.genes.push({gene:e,chr:a.chr,start:a.start,stop:a.stop})}return n("mdsgenevalueonesample",r).then((a=>{if(a.error)throw a.error;for(const t of e.motifs){t.message.text("No data")}if(a.nodata)return;if(!a.result)throw"error";let n=0,r=0;for(const t in a.result){n=Math.min(n,a.result[t]);r=Math.max(r,a.result[t])}const o=s().domain([n,r]).range([0,e.width]);i({axis:e.axisg.call(p().scale(o).ticks(4)),showline:1});for(const n of e.motifs){const r=a.result[n.motif.gene];if(Number.isFinite(r)){n.message.text("");n.g.append("rect").attr("y",-t.motifrowheight/2).attr("width",Math.max(1,o(r))).attr("height",t.motifrowheight).attr("shape-rendering","crispEdges").attr("fill",e.barcolor)}}e.textlabel.attr("x",e.width/2).attr("text-anchor","middle").attr("y",-30)})).catch((e=>{if(e.stack)console.log(e.stack);a(t.wait.text(e.message||e))}))}async function M(t,e){e.gene2result=new Map;for(const a in t.gene2position){const n=await L(t,e,a);if(n){z(t,e,a,n);e.gene2result.set(a,n);F(t,e)}}N(t,e)}function z(t,e,a,n){if(n.nodata)return;for(const t of e.motifs){if(t.motif.gene!=a)continue;t.boxplot={out:[]};if(n.w1!=undefined){t.boxplot.hline=t.g.append("line").attr("stroke",e.color).attr("shape-rendering","crispEdges");t.boxplot.linew1=t.g.append("line").attr("stroke",e.color).attr("shape-rendering","crispEdges");t.boxplot.linew2=t.g.append("line").attr("stroke",e.color).attr("shape-rendering","crispEdges");t.boxplot.box=t.g.append("rect").attr("fill","white").attr("stroke",e.color).attr("shape-rendering","crispEdges");t.boxplot.linep50=t.g.append("line").attr("stroke",e.color).attr("shape-rendering","crispEdges")}if(n.out){for(const a of n.out){const n=t.g.append("circle").attr("stroke",e.color).attr("fill","white").attr("fill-opacity",0);t.boxplot.out.push({value:a.value,circle:n})}}}}function F(t,e){let a=0,n=0;for(const t of e.gene2result.values()){a=Math.min(a,t.min);n=Math.max(n,t.max)}const r=s().domain([a,n]).range([0,e.width]);const o=t.motifrowheight-2;for(const[t,a]of e.gene2result){for(const n of e.motifs){if(n.motif.gene!=t)continue;const e=n.boxplot;if(!e)continue;if(e.hline){const t=r(a.w1);const n=r(a.w2);const i=r(a.p25);const s=r(a.p50);const l=r(a.p75);e.hline.transition().attr("x1",t).attr("x2",n);e.linew1.transition().attr("x1",t).attr("x2",t).attr("y1",-o/2).attr("y2",o/2);e.linew2.transition().attr("x1",n).attr("x2",n).attr("y1",-o/2).attr("y2",o/2);e.box.transition().attr("x",i).attr("y",-o/2).attr("width",l-i).attr("height",o);e.linep50.transition().attr("x1",s).attr("x2",s).attr("y1",-o/2).attr("y2",o/2)}for(const t of e.out){t.circle.transition().attr("cx",r(t.value)).attr("r",o/3)}}}i({axis:e.axisg.transition().call(p().scale(r).ticks(4)),showline:1})}function L(t,e,a){const r=t.gene2position[a];const o={genome:t.genome.name,gene:a,chr:r.chr,start:r.start,stop:r.stop,getgroup2boxplot:1};if(e.mdslabel){o.dslabel=e.mdslabel;o.querykey=e.querykey;if(e.samplegroup_attrlst){o.getgroup=e.samplegroup_attrlst}}else{o.iscustom=1;o.file=e.file;o.url=e.url;o.indexURL=e.indexURL}return n("mdsgeneboxplot",o).then((t=>{if(t.error)throw"Error: "+t.error;if(t.nodata)throw"No data";for(const t of e.motifs){if(t.motif.gene==a){t.message.text("")}}return t})).catch((t=>{if(t.stack)console.log(t.stack);for(const n of e.motifs){if(n.motif.gene==a){n.message.text(t.message||t)}}}))}function N(t,e){let a=0;for(const t of e.gene2result.values()){a=Math.max(a,t.n)}e.textlabel.text(e.name+" (n="+a+")").attr("x",e.width/2).attr("text-anchor","middle").attr("y",-30)}export{d as init};
1
+ import{M as t,k as e,p as a,q as n,ah as r,a9 as o,ag as i,I as s,w as l}from"./app-488d9fd6.js";import{c as p}from"./axis-747c801e.js";const f=80;const c=5;async function d(t){window.obj=t;t.errdiv=t.div.append("div");try{g(t);await h(t)}catch(e){t.errdiv.text(e.message||e);if(e.stack)console.log(e.stack)}}function g(a){a.motifrowheight=16;a.gaincolor="red";a.losscolor="blue";a.flankspan=15;if(!a.fimo_thresh)a.fimo_thresh=.001;if(!a.minabslogp)a.minabslogp=1;a.tip=new t;const n=a.div.append("table").style("border-spacing","3px").style("border-collapse","separate").style("margin","10px");{const t=n.append("tr");t.append("td").text("Flanking sequence (#nt)");const r=t.append("td");r.append("input").attr("type","number").style("margin","0px 10px").style("width","100px").property("value",a.flankspan).on("keyup",(t=>{if(!e(t))return;const n=Number.parseInt(t.target.value);if(n<10){window.alert("Enter integer above 10");return}if(n==a.flankspan)return;a.flankspan=n;h(a)}));r.append("span").style("font-size","0.7em").style("opacity",.5).text("Press ENTER to update")}{const t=n.append("tr");t.append("td").text("P-value cutoff");const r=t.append("td");r.append("input").attr("type","number").style("margin","0px 10px").style("width","100px").property("value",a.fimo_thresh).on("keyup",(t=>{if(!e(t))return;const n=Number.parseFloat(t.target.value);if(n<=0){window.alert("Enter a p value between 0 to 1");return}if(n==a.fimo_thresh)return;a.fimo_thresh=n;h(a)}));r.append("span").style("font-size","0.7em").style("opacity",.5).text("Press ENTER to update")}{const t=n.append("tr");t.append("td").text("Minimum log10 p-value difference");const r=t.append("td");r.append("input").attr("type","number").style("margin","0px 10px").style("width","100px").property("value",a.minabslogp).on("keyup",(t=>{if(!e(t))return;const n=Number.parseFloat(t.target.value);if(n<=0){window.alert("Enter a number above 0");return}if(n==a.minabslogp)return;a.minabslogp=n;h(a)}));r.append("span").style("font-size","0.7em").style("opacity",.5).text("Press ENTER to update")}a.wait=a.div.append("div");a.svg=a.div.append("svg");a.dynamic_g=a.svg.append("g");a.legend={};a.legend.logpvaluediv=a.div.append("div");m(a)}function m(t){if(!t.factor_profiles)return;if(!Array.isArray(t.factor_profiles))throw"factor_profiles is not array";for(const e of t.factor_profiles){if(!e.name)throw"name missing for a profile";if(!e.leftpad)e.leftpad=20;if(!e.width)e.width=300;e.headerg=t.svg.append("g");e.textlabel=e.headerg.append("text").text(e.name).attr("x",e.width/2).attr("text-anchor","middle").attr("y",-30);if(e.isgenevalue){e.color="green";e.axisg=e.headerg.append("g");continue}if(e.isgenevalueonesample){if(!e.samplename)throw"samplename missing for isgenevalueonesample";e.barcolor="#62945B";e.axisg=e.headerg.append("g");continue}throw"unknown profile type"}}function h(t){a(t.wait.text("Loading..."));t.dynamic_g.selectAll("*").remove();const e={genome:t.genome.name,m:t.m,fimo_thresh:t.fimo_thresh,flankspan:t.flankspan,minabslogp:t.minabslogp};return n("fimo",e).then((e=>{if(e.error)throw"Error: cannot do motif finding: "+e.error;if(t.callback_once){t.callback_once();delete t.callback_once}if(!e.items||e.items.length==0)throw"Found no motif change due to this mutation";t.wait.style("display","none");for(const t of e.items){if(t.attr){t.gene=t.attr["Transcription factor"]}else{t.gene=t.name}}return u(e,t)})).catch((e=>{t.wait.style("display","block").text(e.message||e);if(e.stack)console.log(e.stack)}))}async function u(t,e){x(t,e);if(e.factor_profiles){await b(t,e);let a=Number.parseInt(e.svg.attr("width"));for(const n of e.factor_profiles){n.headerg.attr("transform","translate("+(a+n.leftpad)+","+f+")");n.motifs=[];for(const e of t.items){const t=e.layer1_g.append("g").attr("transform","translate("+(a+n.leftpad)+",0)");n.motifs.push({motif:e,g:t,message:t.append("text").text("Loading...").attr("dominant-baseline","central").attr("fill","#ccc")})}a+=n.leftpad+n.width;e.svg.attr("width",a+5);await _(e,n);for(const e of t.items){e.bgbox.attr("width",a);e.coverbox.attr("width",a)}}}}function x(t,e){const a=14;const n=a*t.refseq.length;{const n=(e.m.pos-t.refstart+.5)*a;const r=e.dynamic_g.append("g").attr("transform","translate("+n+","+f+")");r.append("rect").attr("x",-a/2).attr("y",-10).attr("width",a).attr("height",10).attr("fill","#666");r.append("text").attr("y",-15).attr("text-anchor","middle").text(e.m.chr+":"+e.m.pos+" "+e.m.ref+">"+e.m.alt)}let o=f+c;const i=1;const s=e.dynamic_g.append("g").attr("transform","translate(0,"+o+")");for(const[o,l]of t.items.entries()){l.g=s.append("g").attr("transform","translate(0,"+(e.motifrowheight*(o+.5)+i*o)+")");l.layer1_g=l.g.append("g");l.layer2_g=l.g.append("g");l.bgbox=l.layer1_g.append("rect").attr("y",-e.motifrowheight/2).attr("width",n).attr("height",e.motifrowheight).attr("fill","white");const p=(l.start-t.refstart)*a;const f=(Math.min(l.stop,t.refstop)-l.start)*a;l.layer1_g.append("rect").attr("x",p).attr("y",-e.motifrowheight/2).attr("width",f).attr("height",e.motifrowheight).attr("fill",l.gain?e.gaincolor:e.losscolor).attr("fill-opacity",l.logpvaluediff/(l.gain?t.valuemax:t.valuemin));let c;if(l.strand=="+"){c="> "+l.name+" >"}else{c="< "+l.name+" <"}l.layer1_g.append("text").text(c).attr("x",p+f/2).attr("dominant-baseline","central").attr("text-anchor","middle").attr("stroke","white").attr("stroke-width",3).attr("font-size",e.motifrowheight-3).attr("font-family",r).style("white-space","pre");l.layer1_g.append("text").text(c).attr("x",p+f/2).attr("dominant-baseline","central").attr("text-anchor","middle").attr("font-size",e.motifrowheight-3).attr("font-family",r).style("white-space","pre");l.coverbox=l.layer2_g.append("rect").attr("y",-e.motifrowheight/2).attr("width",n).attr("height",e.motifrowheight).attr("fill","white").attr("fill-opacity",0).on("mouseover",(t=>{l.bgbox.attr("fill","#f9fabd");y(l,e,t)})).on("mouseout",(()=>{l.bgbox.attr("fill","white");e.tip.hide()}))}o+=(i+e.motifrowheight)*t.items.length+20;v(t,e);e.svg.attr("width",n).attr("height",o)}function y(t,e,a){e.tip.clear();if(t.attr){e.tip.d.append("div").text("MOTIF").style("font-weight","bold");const a=[{k:"P-values",v:w(t,e)},{k:"Strand",v:t.strand}];o(e.tip.d,a);e.tip.d.append("div").text("FACTOR").style("font-weight","bold");const n=[];for(const e in t.attr){n.push({k:e,v:t.attr[e]})}o(e.tip.d,n)}else{const a=[{k:"TF",v:t.name},{k:"P-values",v:w(t,e)},{k:"Strand",v:t.strand}];o(e.tip.d,a)}e.tip.show(a.clientX,a.clientY)}function w(t,e){return(t.pvalue_ref==undefined?'<span style="opacity:.5;padding:2px"><span style="font-size:.7em">REF</span> not found</span>':'<span style="background-color:'+e.losscolor+';padding:2px;color:white;"><span style="font-size:.7em">REF</span> '+t.pvalue_ref+"</span>")+"<br>"+(t.pvalue_alt==undefined?'<span style="opacity:.5;padding:2px"><span style="font-size:.7em">ALT</span> not found</span>':'<span style="background-color:'+e.gaincolor+';padding:2px;color:white;"><span style="font-size:.7em">ALT</span> '+t.pvalue_alt+"</span>")}function v(t,e){e.legend.logpvaluediv.selectAll("*").remove();const a=50,n=4,o=12,l=55,f=20;e.legend.logpvaluediv.append("span").text("Log10 p-value difference");const c=e.legend.logpvaluediv.append("svg").attr("width",(a+l)*2).attr("height",o+n+f);const d=c.append("g").attr("transform","translate("+a+","+(o+n)+")");i({axis:d.call(p().scale(s().domain([t.valuemin,0,t.valuemax]).range([0,l,l*2])).tickValues([t.valuemin,0,t.valuemax]).tickSize(n))});const g=Math.random().toString();const m=Math.random().toString();const h=c.append("defs");{const t=h.append("linearGradient").attr("id",m);t.append("stop").attr("offset","0%").attr("stop-color",e.losscolor);t.append("stop").attr("offset","100%").attr("stop-color","white")}{const t=h.append("linearGradient").attr("id",g);t.append("stop").attr("offset","0%").attr("stop-color","white");t.append("stop").attr("offset","100%").attr("stop-color",e.gaincolor)}c.append("rect").attr("x",a).attr("y",o+n).attr("width",l).attr("height",f).attr("fill","url(#"+m+")");c.append("rect").attr("x",a+l).attr("y",o+n).attr("width",l).attr("height",f).attr("fill","url(#"+g+")");c.append("text").attr("x",a-5).attr("y",o+n+f/2).attr("font-family",r).attr("font-size",o).attr("text-anchor","end").attr("dominant-baseline","central").attr("fill","black").text("Loss");c.append("text").attr("x",a+l*2+5).attr("y",o+n+f/2).attr("font-family",r).attr("font-size",o).attr("dominant-baseline","central").attr("fill","black").text("Gain")}async function b(t,e){e.gene2position={};const a=new Set;for(const e of t.items){a.add(e.gene)}for(const t of a){const a=await k(t,e);if(a){e.gene2position[t]=a}}}function k(t,e){return n("genelookup",{genome:e.genome.name,input:t,deep:1}).then((t=>{if(!t.gmlst)return null;const e=l(t.gmlst);return e[0]}))}function _(t,e){if(e.isgenevalue){return M(t,e)}if(e.isgenevalueonesample){return E(t,e)}throw"unknown profile type"}async function E(t,e){const r={genome:t.genome.name,genes:[],sample:e.samplename};if(e.mdslabel){r.dslabel=e.mdslabel;r.querykey=e.querykey;if(e.samplegroup_attrlst){r.getgroup=e.samplegroup_attrlst}}else{r.iscustom=1;r.file=e.file;r.url=e.url;r.indexURL=e.indexURL}for(const e in t.gene2position){const a=t.gene2position[e];r.genes.push({gene:e,chr:a.chr,start:a.start,stop:a.stop})}return n("mdsgenevalueonesample",r).then((a=>{if(a.error)throw a.error;for(const t of e.motifs){t.message.text("No data")}if(a.nodata)return;if(!a.result)throw"error";let n=0,r=0;for(const t in a.result){n=Math.min(n,a.result[t]);r=Math.max(r,a.result[t])}const o=s().domain([n,r]).range([0,e.width]);i({axis:e.axisg.call(p().scale(o).ticks(4)),showline:1});for(const n of e.motifs){const r=a.result[n.motif.gene];if(Number.isFinite(r)){n.message.text("");n.g.append("rect").attr("y",-t.motifrowheight/2).attr("width",Math.max(1,o(r))).attr("height",t.motifrowheight).attr("shape-rendering","crispEdges").attr("fill",e.barcolor)}}e.textlabel.attr("x",e.width/2).attr("text-anchor","middle").attr("y",-30)})).catch((e=>{if(e.stack)console.log(e.stack);a(t.wait.text(e.message||e))}))}async function M(t,e){e.gene2result=new Map;for(const a in t.gene2position){const n=await L(t,e,a);if(n){z(t,e,a,n);e.gene2result.set(a,n);F(t,e)}}N(t,e)}function z(t,e,a,n){if(n.nodata)return;for(const t of e.motifs){if(t.motif.gene!=a)continue;t.boxplot={out:[]};if(n.w1!=undefined){t.boxplot.hline=t.g.append("line").attr("stroke",e.color).attr("shape-rendering","crispEdges");t.boxplot.linew1=t.g.append("line").attr("stroke",e.color).attr("shape-rendering","crispEdges");t.boxplot.linew2=t.g.append("line").attr("stroke",e.color).attr("shape-rendering","crispEdges");t.boxplot.box=t.g.append("rect").attr("fill","white").attr("stroke",e.color).attr("shape-rendering","crispEdges");t.boxplot.linep50=t.g.append("line").attr("stroke",e.color).attr("shape-rendering","crispEdges")}if(n.out){for(const a of n.out){const n=t.g.append("circle").attr("stroke",e.color).attr("fill","white").attr("fill-opacity",0);t.boxplot.out.push({value:a.value,circle:n})}}}}function F(t,e){let a=0,n=0;for(const t of e.gene2result.values()){a=Math.min(a,t.min);n=Math.max(n,t.max)}const r=s().domain([a,n]).range([0,e.width]);const o=t.motifrowheight-2;for(const[t,a]of e.gene2result){for(const n of e.motifs){if(n.motif.gene!=t)continue;const e=n.boxplot;if(!e)continue;if(e.hline){const t=r(a.w1);const n=r(a.w2);const i=r(a.p25);const s=r(a.p50);const l=r(a.p75);e.hline.transition().attr("x1",t).attr("x2",n);e.linew1.transition().attr("x1",t).attr("x2",t).attr("y1",-o/2).attr("y2",o/2);e.linew2.transition().attr("x1",n).attr("x2",n).attr("y1",-o/2).attr("y2",o/2);e.box.transition().attr("x",i).attr("y",-o/2).attr("width",l-i).attr("height",o);e.linep50.transition().attr("x1",s).attr("x2",s).attr("y1",-o/2).attr("y2",o/2)}for(const t of e.out){t.circle.transition().attr("cx",r(t.value)).attr("r",o/3)}}}i({axis:e.axisg.transition().call(p().scale(r).ticks(4)),showline:1})}function L(t,e,a){const r=t.gene2position[a];const o={genome:t.genome.name,gene:a,chr:r.chr,start:r.start,stop:r.stop,getgroup2boxplot:1};if(e.mdslabel){o.dslabel=e.mdslabel;o.querykey=e.querykey;if(e.samplegroup_attrlst){o.getgroup=e.samplegroup_attrlst}}else{o.iscustom=1;o.file=e.file;o.url=e.url;o.indexURL=e.indexURL}return n("mdsgeneboxplot",o).then((t=>{if(t.error)throw"Error: "+t.error;if(t.nodata)throw"No data";for(const t of e.motifs){if(t.motif.gene==a){t.message.text("")}}return t})).catch((t=>{if(t.stack)console.log(t.stack);for(const n of e.motifs){if(n.motif.gene==a){n.message.text(t.message||t)}}}))}function N(t,e){let a=0;for(const t of e.gene2result.values()){a=Math.max(a,t.n)}e.textlabel.text(e.name+" (n="+a+")").attr("x",e.width/2).attr("text-anchor","middle").attr("y",-30)}export{d as init};
@@ -1 +1 @@
1
- import{d as e,M as t,j as s,a7 as a,a8 as l,I as o,a9 as n,k as i,N as r,Z as c,v as p,aa as d,q as m,ab as f,p as u,ac as y,ad as b,f as v}from"./app-3d14cbe4.js";import{s as x}from"./legacy-d3-polyfill-bdb2d792.js";import{b as g}from"./block.lazyload-4c4e81ff.js";import{d as h}from"./lasso-845446b8.js";import{d as _}from"./zoom-001c2f01.js";import{f as k}from"./FilterStateless-75514d37.js";import{e as w}from"./FilterRxComp-e8de560c.js";import"./termsetting-7467350f.js";import{g as O}from"./filter-b3d3964e.js";import"./drag-e11d6644.js";import"./nodrag-f6c0801c.js";import"./pointer-c7475677.js";import"./table-be2a9975.js";import"./tslib.es6-c3c2d88f.js";import"./partjson.esm-b3f1fc21.js";import"./termdb.bins-a60aaa77.js";import"path";function j(e){const t={waitTime:0,pad:5,nameKey:"",steps:[{type:"restyle",applyTo:"all",css:{selector:"text",key:"font-size",value:"12px"}},{type:"move",repeat:2,pad:0,css:{selector:"text"},boxSorter:(e,t)=>{if(e.x1>t.x1)return-1;if(t.x1>e.x1)return 1;if(e.y1>t.y1)return-1;if(t.y1>e.y1)return 1;return 0}}]};return Object.assign(t,e)}async function z(e,t={}){if(!e||!e.size())return;const s=j(t);if(!s.steps||!s.steps.length)return;if(!s.svg)s.svg=e.node().closest("svg");await R(s.waitTime);s.svgBox=s.svg.getBoundingClientRect();const a=S(e,s);const l=A(a);window.boxes=a;if(l){const t=s.steps.shift();const o=t.applyTo=="all"?a:t.type=="move"?a.filter((e=>e.collisions.length)):a.filter((e=>e.collisions.length===l));if(o.length){if(t.boxSorter)o.sort(t.boxSorter);for(const e of o){const l=S(e.label,s)[0];Object.assign(e,l);F(e,a.filter((t=>t!=e)));await C[t.type](e,t,a,s)}}if(typeof t.repeat=="number"&&t.repeat>0){t.repeat+=-1;s.steps.unshift(t)}if(s.steps.length)setTimeout((()=>z(e,s)),0);else a.forEach(B)}else a.forEach(B)}function S(t,s){const a=[];t.each((function(t){const l=this;const o=l.getBoundingClientRect();const n={elem:l,label:e(l),x1:o.x-s.svgBox.x,x2:o.x-s.svgBox.x+o.width,y1:o.y-s.svgBox.y,y2:o.y-s.svgBox.y+o.height,width:o.width,height:o.height};n.maxFree={n:Math.max(n.y1,0),s:Math.max(s.svgBox.y+s.svgBox.height-n.y2,0),e:Math.max(s.svgBox.x+s.svgBox.width-n.x2,0),w:Math.max(n.x1,0)};n.corners={};n.overlapSum=0;n.collisions=[];n.maxOverlaps={};if(s.nameKey)n.name=t[s.nameKey];N(n,s.svgBox);a.push(n)}));return a}function A(e){let t=0;for(const s of e){const a=F(s,e.filter((e=>e!=s)));if(t===0||a>0&&a<t){t=a}}e.sort(M);return t}function M(e,t){return e.collisions.length-t.collisions.length}function F(e,t){const s=e.x1,a=e.x2;const l=e.y1,o=e.y2;for(const n of t){if(n===e)continue;const t={};if(n.x2<s){t.w=s-n.x2}else if(n.x1>a){t.e=n.x1-a}if(n.y2<l){t.n=l-n.y2}else if(n.y1>o){t.s=n.y1-o}const i={};if(Object.keys(t).length){if("n"in t&&t.n<e.maxFree.n)e.maxFree.n=t.n;if("s"in t&&t.s<e.maxFree.s)e.maxFree.s=t.s;if("e"in t&&t.e<e.maxFree.e)e.maxFree.e=t.e;if("w"in t&&t.w<e.maxFree.w)e.maxFree.w=t.w}else{if(n.x1<=s&&a<=n.x2){if(n.x1<=s&&s<=n.x2){const t=n.x2-s;if(!("x"in e.maxOverlaps)||e.maxOverlaps.x.val<t)e.maxOverlaps.x={val:t,dir:"w"};if(n.y1<=l&&l<=n.y2){const s=n.y2-l;i.nw=t*s;if(!("y"in e.maxOverlaps)||e.maxOverlaps.y.val<s)e.maxOverlaps.y={val:s,dir:"n"}}if(n.y1<=o&&o<=n.y2){const s=o-n.y1;i.sw=t*s;if(!("y"in e.maxOverlaps)||e.maxOverlaps.y.val<s)e.maxOverlaps.y={val:s,dir:"s"}}}if(n.x1<=a&&a<=n.x2){const t=a-n.x1;if(!("x"in e.maxOverlaps)||e.maxOverlaps.x.val<t)e.maxOverlaps.x={val:t,dir:"e"};if(n.y1<=l&&l<=n.y2){const s=n.y2-l;i.ne=t*s;if(!("y"in e.maxOverlaps)||e.maxOverlaps.y.val<s)e.maxOverlaps.y={val:s,dir:"n"}}if(n.y1<=o&&o<=n.y2){const s=o-n.y1;i.se=t*s;if(!("y"in e.maxOverlaps)||e.maxOverlaps.y.val<s)e.maxOverlaps.y={val:s,dir:"s"}}}}else{if(s<=n.x1&&n.x1<=a){const t=a-n.x1;if(!("x"in e.maxOverlaps)||e.maxOverlaps.x.val<t)e.maxOverlaps.x={val:t,dir:"e"};if(l<=n.y1&&n.y1<=o){const s=o-n.y1;i.se=t*s;if(!("y"in e.maxOverlaps)||e.maxOverlaps.y.val<s)e.maxOverlaps.y={val:s,dir:"s"}}if(l<=n.y2&&n.y2<=o){const s=n.y2-l;i.ne=t*s;if(!("y"in e.maxOverlaps)||e.maxOverlaps.y.val<s)e.maxOverlaps.y={val:s,dir:"n"}}}if(s<=n.x2&&n.x2<=a){const t=n.x2-s;if(!("x"in e.maxOverlaps)||e.maxOverlaps.x.val<t)e.maxOverlaps.x={val:t,dir:"w"};if(l<=n.y1&&n.y1<=o){const s=o-n.y1;i.sw=t*s;if(!("y"in e.maxOverlaps)||e.maxOverlaps.y.val<s)e.maxOverlaps.y={val:s,dir:"s"}}if(l<=n.y2&&n.y2<=o){const s=n.y2-l;i.nw=t*s;if(!("y"in e.maxOverlaps)||e.maxOverlaps.y.val<s)e.maxOverlaps.y={val:s,dir:"n"}}}}}const r=Object.keys(i);if(r.length){e.collisions.push({box:n.name,corners:r});for(const t of r){if(!e.corners[t])e.corners[t]={against:[],sum:0};e.corners[t].against.push(n.name);e.corners[t].sum+=i[t];e.overlapSum+=i[t]}}}return e.collisions.length}function N(e,t){const s=e.x1,a=e.x2;const l=e.y1,o=e.y2;const n=[];if(s<0){e.maxOverlaps.x={val:Math.abs(s),dir:"w"};n.push("w");e.corners.w={against:[],sum:Math.abs(s)*e.height};e.overlapSum+=e.corners.w.sum}const i=a-t.width;if(i>0&&(!e.maxOverlaps.x||e.maxOverlaps.x.val<i)){e.maxOverlaps.x={val:i,dir:"e"};n.push("e");e.corners.e={against:["svgbox"],sum:i*e.height};e.overlapSum+=e.corners.e.sum}if(l<0){e.maxOverlaps.y={val:Math.abs(l),dir:"n"};n.push("n");e.corners.n={against:["svgbox"],sum:Math.abs(l)};e.overlapSum+=e.corners.n.sum}const r=o-t.height;if(r>0&&(!e.maxOverlaps.y||e.maxOverlaps.y.val<r)){e.maxOverlaps.y={val:r,dir:"s"};n.push("s");e.corners.s={against:["svgbox"],sum:r*e.height};e.overlapSum+=e.corners.s.sum}if(n.length)e.collisions.push({box:"svg",corners:n})}async function E(t,s,a,l){const o=new Map;t.label.selectAll(s.css.selector).each((function(t){const a=e(this);o.set(this,a.attr(s.css.key));a.attr(s.css.key,s.css.value)}));await R(l.waitTime);const n=S(t.label,l)[0];a.indexOf(t);F(n,a.filter((e=>e!=t)));if(s.applyTo=="all"){Object.assign(t,n)}else{if(n.overlapSum>=t.overlapSum){t.label.selectAll(s.css.selector).each((function(t){e(this).attr(s.css.key,o.get(this))}))}else{Object.assign(t,n)}}}async function T(t,s,a,l){const o=Object.keys(t.maxFree).filter((e=>t.maxFree[e]>0));if(!o.length)return;const n=new Map;if(t.maxOverlaps.y&&t.maxOverlaps.y.val>0){if(t.maxOverlaps.y.dir=="s"&&o.includes("n")){t.label.selectAll(s.css.selector).each((function(a){const l=e(this);n.set(this,l.attr("y")||0);l.attr("y",Math.max(-t.maxFree.n,-t.maxOverlaps.y.val)-s.pad)}))}if(t.maxOverlaps.y.dir=="n"&&o.includes("s")){t.label.selectAll(s.css.selector).each((function(a){const l=e(this);n.set(this,l.attr("y")||0);l.attr("y",Math.min(t.maxFree.s,t.maxOverlaps.y.val)+s.pad)}))}}if(n.size){await R(l.waitTime);const o=S(t.label,l)[0];F(o,a.filter((e=>e!=t)));if(o.overlapSum>=t.overlapSum){t.label.selectAll(s.css.selector).each((function(t){e(this).attr("y",n.get(this))}))}else{Object.assign(t,o);if(!t.collisions.length)return}}if(t.maxOverlaps.x&&t.maxOverlaps.x.val>0){if(t.maxOverlaps.x.dir=="e"&&o.includes("w")){t.label.selectAll(s.css.selector).each((function(a){const l=e(this);n.set(this,l.attr("x")||0);l.attr("x",Math.max(-t.maxFree.w,-t.maxOverlaps.x.val)-s.pad)}))}if(t.maxOverlaps.x.dir=="w"&&o.includes("e")){t.label.selectAll(s.css.selector).each((function(a){const l=e(this);n.set(this,l.attr("x")||0);l.attr("x",Math.min(t.maxFree.e,t.maxOverlaps.x.val)+s.pad)}))}}if(!n.size)return;await R(l.waitTime);const i=S(t.label,l)[0];F(i,a.filter((e=>e!=t)));if(i.overlapSum>=t.overlapSum){t.label.selectAll(s.css.selector).each((function(t){e(this).attr("x",n.get(this))}))}else{Object.assign(t,i)}}const C={restyle:E,move:T};function B(e){return}function R(e){return new Promise((t=>setTimeout(t,e)))}const q=3;const L=.7;const I="black";async function X(e,a,l){if(l){window.obj=e}if(!e.lasso)e.lasso={postSelectMenuOptions:[{label:"List samples",callback:"listSamples"}]};e.menu=new t({padding:"2px"});e.menu2=new t({padding:"10px"});e.tip=new t({padding:"5px"});e.errordiv=a.append("div").style("margin","10px");e.sayerror=t=>{s(e.errordiv,typeof t=="string"?t:t.message);if(t.stack)console.log(t.stack)};const o=a.append("table").style("border-spacing","20px");const n=o.append("tr");const i=n.append("td").style("vertical-align","top");const r=n.append("td").style("vertical-align","top");{const d=r.append("div").style("margin-bottom","5px");d.append("input").attr("type","text").attr("placeholder","Search sample").style("width","200px").on("keyup",(t=>{const s=t.target.value;if(!s){e.dotselection.transition().attr("r",q);return}const a=s.toLowerCase();e.dotselection.filter((e=>m(e,a))).transition().attr("r",q*2);e.dotselection.filter((e=>!m(e,a))).transition().attr("r",1)}));function m(e,t){let s=false;let a=Object.values(e).filter((e=>e!=null&&typeof e!="number"));let l=a.filter((e=>typeof e!="object")).map((e=>e.toLowerCase()));l.forEach((e=>{if(e.toLowerCase().includes(t))return s=true}));if(!s){a.forEach((e=>{if(e&&typeof e=="object"){const a=Object.values(e).filter((e=>e!=null&&typeof e!="number")).map((e=>e.toLowerCase()));a.forEach((e=>{if(e.toLowerCase().includes(t))return s=true}))}}))}return s}}const c=r.append("div").style("overflow-x","hidden").style("overflow-y","auto").style("height","100vh");e.legendtable=c.append("table").style("border-spacing","5px");e.filterDiv=i.append("div").style("position","relative");const p=i.append("div").style("position","relative");e.scattersvg=p.append("svg");e.scattersvg_resizehandle=p.append("div");e.scattersvg_buttons=p.append("div");try{await Y(e);D(e);G(e);P(e)}catch(f){if(f.stack)console.log(f.stack);e.sayerror(f.message||f)}}async function Y(e){if(e.dslabel){const t=["genome="+e.genome.name,"dslabel="+e.dslabel];if(e.analysisdata){if(e.analysisdata.subset){if(!e.analysisdata.subset.key)throw".subset.key missing";if(!e.analysisdata.subset.value)throw".subset.value missing";t.push("subsetkey="+e.analysisdata.subset.key);t.push("subsetvalue="+e.analysisdata.subset.value)}}const s=await a("mdssamplescatterplot?"+t.join("&"));if(s.error)throw s.error;if(!s.dots)throw"server error";e.sample2dot=new Map;for(const t of s.dots){e.sample2dot.set(t.sample,t)}U(e,s);e.colorbyattributes=s.colorbyattributes;e.colorbygeneexpression=s.colorbygeneexpression;e.tracks=s.tracks;e.querykey=s.querykey;e.sample_attributes=e.mds.sampleAttribute.attributes;return}const t=e.analysisdata;if(e.disco||t.disco){const s=e.disco||t.disco;e.mds=e.genome.datasets[s.dslabel]}else if(e.mds){e.mds=e.genome.datasets[e.mds.dslabel]}if(!t)throw"both .analysisdata{} and .dslabel are missing";if(t.samples){if(!Array.isArray(t.samples))throw".analysisdata.samples is not array";e.dots=t.samples}else if(t.tabular_data){let s=t.tabular_data.split("\n");if(s.length<2)throw"at least 2 rows, header row + at least 1 sample data must be supplied";t.samples=[];const a=s.shift().split("\t");if(a.length<3)throw"at least 3 columns are required with X, Y and sample name";t.samplekey=a[2];let l=a.indexOf("x");if(l==-1)l=a.indexOf("X");if(l==-1)throw'"X" or "x" column missing from tabular data';let o=a.indexOf("y");if(o==-1)o=a.indexOf("Y");if(o==-1)throw'"Y" or "y" column missing from tabular data';for(const e of s){const s=e.split("\t");const n={};for(const[e,t]of s.entries()){if(e==l)n.x=Number.parseFloat(t);else if(e==o)n.y=Number.parseFloat(t);else n[a[e]]=t}t.samples.push(n)}e.dots=t.samples;if(t.sample_attributes==undefined){t.sample_attributes={};for(const[e,s]of a.entries()){if(e<=2)continue;t.sample_attributes[s]={label:s}}}if(!t.colorbyattributes&&a.length>3)t.colorbyattributes=[{key:a[3]}]}else{throw"unknown data encoding in .analysisdata{}"}e.sample2dot=new Map;for(const s of e.dots){if(!Number.isFinite(s.x)||!Number.isFinite(s.y))throw"non-numeric x/y for a sample";if(t.samplekey){s.sample=s[t.samplekey];delete s[t.samplekey]}if(t.sample_attributes){s.s={};for(const e in t.sample_attributes){s.s[e]=s[e];delete s[e]}}e.sample2dot.set(s.sample,s)}e.sample_attributes=t.sample_attributes;e.colorbyattributes=t.colorbyattributes;e.attr_levels=t.attr_levels;if(t.user_samples){if(!Array.isArray(t.user_samples))throw".user_samples[] is not array";e.dots_user=[];for(const s of t.user_samples){if(!Number.isFinite(s.x)||!Number.isFinite(s.y))throw"non-numeric x/y for a USER sample";if(t.samplekey){s.sample=s[t.samplekey];delete s[t.samplekey]}if(!s.color)s.color=I;e.dots_user.push(s)}}if(!e.filterApi){e.filterApi=k({btn:e.filterDiv.append("div"),btnLabel:"Filter",emptyLabel:"+New Filter",holder:e.filterDiv.append("div"),vocab:w(t),debug:true,callback(s){e.filteredSamples=O(t.samples,s);if(e.dotselection._groups[0].length!=e.filteredSamples.size){e.dotselection.transition().attr("r",(t=>e.filteredSamples.has(t.sample)?q:0)).style("opacity",(t=>e.filteredSamples.has(t.sample)?1:0))}else{e.dotselection.transition().attr("r",q).style("opacity",1)}V(e)}});e.filterApi.main({type:"tvslst",join:"",lst:[]});e.filteredSamples=[]}}function U(e,t){if(!e.analysisdata){e.dots=t.dots;return}if(!e.analysisdata.str)throw".analysisdata.str missing while trying to combine client/server data";const s=new Map;e.dots_user=[];for(const t of e.analysisdata.str.trim().split("\n")){const a=t.split("\t");if(a.length<3){continue}const l=a[2];if(!l)continue;const o={x:Number(a[0]),y:Number(a[1])};if(Number.isNaN(o.x)||Number.isNaN(o.y))continue;if(a[3]){o.sample=l;o.color=I;e.dots_user.push(o);continue}s.set(l,o)}e.dots=[];for(const a of t.dots){const t=s.get(a.sample);if(!t)continue;a.x=t.x;a.y=t.y;e.dots.push(a)}}function D(e){if(e.colorbyattributes){if(!Array.isArray(e.colorbyattributes))throw".colorbyattributes[] is not array";if(!e.sample_attributes)throw".sample_attributes{} missing when .colorbyattributes is defined";for(const t of e.colorbyattributes){if(typeof t!="object")throw"one of .colorbyattributes[] is not array";if(!t.key)throw".key missing from one of .colorbyattributes[]";const s=e.sample_attributes[t.key];if(!s)throw"unknown key from .colorbyattributes: "+t.key;t.label=s.label;t.values=s.values;if(!t.values){t.values={};for(const s of e.dots){const e=s.s[t.key];if(e==undefined||e==null)continue;t.values[e]={}}}const a=l(x);for(const e in t.values){if(!t.values[e].color)t.values[e].color=a(e)}if(e.analysisdata){const s=e.analysisdata.sample_attributes;if(s[t.key].values==undefined)s[t.key].values=t.values}}}if(e.attr_levels){if(!Array.isArray(e.attr_levels))throw".attr_levels[] is not array";if(e.attr_levels.length<2)throw".attr_levels[] array has less than 2 items";if(!e.sample_attributes)throw".sample_attributes is missing when .attr_levels is defined";for(const t of e.attr_levels){if(!t.key)throw".key missing from one of attr_levels[]";const s=e.sample_attributes[t.key];if(!s)throw".attr_levels key missing from sample_attributes{}: "+t.key;if(!s.values){s.values={};for(const a of e.dots){const e=a.s[t.key];if(e==undefined||e==null||s.values[e])continue;s.values[e]={}}const a=l(x);for(const e in s.values){if(!s.values[e].color)s.values[e].color=a(e)}s.orderByCount=true}if(t.label);}}}function P(t){const s=t.scattersvg.node().closest(".sja_root_holder");let a=t.dots[0].x,l=a,r=t.dots[0].y,c=r;for(const e of[...t.dots,...t.dots_user||[]]){a=Math.min(a,e.x);l=Math.max(l,e.x);r=Math.min(r,e.y);c=Math.max(c,e.y)}let p=t.xscale=o().domain([a,l]);let d=t.yscale=o().domain([r,c]);if(!t.dimensions)t.dimensions={};if(!("autoResize"in t.dimensions))t.dimensions.autoResize=true;if(!("minWidth"in t.dimensions))t.dimensions.minWidth=300;if(!("minHeight"in t.dimensions))t.dimensions.minHeight=300;let m;const f=250;const u=s.getBoundingClientRect();let y=30,b=50,v=100,x=30,g=20,h=t.dimensions.width?t.dimensions.width:Math.max(t.dimensions.minWidth,.75*(u.width-f)),_=t.dimensions.height?t.dimensions.height:Math.max(t.dimensions.minHeight,Math.min(1.2*h,.5*u.height)),k=18;const w=t.scattersvg;const O=t.dotg=w.append("g").attr("transform","translate("+(v+g)+","+y+")");const j=O.selectAll().data(t.dots).enter().append("g").attr("class","sample_dot");const S=j.append("circle").attr("stroke","none").attr("r",q).on("mouseover",((e,s)=>{e.target.setAttribute("stroke","white");const a=[{k:"Sample",v:s.sample}];if(t.sample_attributes){for(const e in t.sample_attributes){const l=t.sample_attributes[e];s.s[e];a.push({k:l.label,v:s.s[e]})}}n(t.tip.clear().d,a);t.tip.show(e.clientX,e.clientY)})).on("mouseout",((e,s)=>{e.target.setAttribute("stroke","none");t.tip.hide()})).on("click",((e,s)=>{Q(s,t,e)}));t.dotselection=S;let A,M,F,N,E;const T=t.userlabel_grp={userlabels:N,userlabel_borders:E};if(t.dots_user){A=O.selectAll().data(t.dots_user).enter().append("g").attr("class","sample_dot");M=A.append("circle").attr("stroke","none").attr("fill",(e=>e.color)).attr("r",q).on("mouseover",((e,s)=>{const a=[{k:"Sample",v:s.sample}];if(t.sample_attributes){for(const e in t.sample_attributes){const l=t.sample_attributes[e];if(s[e])a.push({k:l.label,v:s[e]})}}n(t.tip.clear().d,a);t.tip.show(e.clientX,e.clientY);Object.values(T).forEach((e=>e.filter((e=>e.sample==s.sample)).attr("font-weight","bold")))})).on("mouseout",((e,s)=>{t.tip.hide();Object.values(T).forEach((e=>e.filter((e=>e.sample==s.sample)).attr("font-weight","normal")))}));F=O.selectAll().data(t.dots_user).enter().append("g").attr("class","userlabelg");T.userlabel_borders=F.append("text").attr("fill","#fff").attr("font-size",k).attr("stroke","white").attr("stroke-width","3px").text((e=>e.sample)).attr("text-anchor","end");T.userlabels=F.append("text").attr("fill",(e=>e.color)).attr("font-size",k).text((e=>e.sample)).on("mouseover",((e,s)=>{M.filter((e=>e.sample==s.sample)).attr("r",q*2);w.style("cursor","move");const a=[{k:"Sample",v:s.sample}];if(t.sample_attributes){for(const e in t.sample_attributes){const l=t.sample_attributes[e];if(s[e])a.push({k:l.label,v:s[e]})}}n(t.tip.clear().d,a);t.tip.show(e.clientX,e.clientY)})).on("mouseout",((e,s)=>{M.filter((e=>e.sample==s.sample)).attr("r",q);w.style("cursor","auto");t.tip.hide()})).on("mousedown",((s,a)=>{s.preventDefault();s.stopPropagation();const l=e(document.body);const o=s.clientX;const n=s.clientY;p=t.zoomed_scale&&t.zoomed_scale>1?t.new_xscale:t.xscale;d=t.zoomed_scale&&t.zoomed_scale>1?t.new_yscale:t.yscale;const i=F.filter((e=>e.sample==a.sample));const[r,c]=i.attr("transform").match(/[\d\.]+/g).map(Number);l.on("mousemove",(e=>{i.attr("transform","translate("+(r+e.clientX-o)+","+(c+e.clientY-n)+")")}));l.on("mouseup",(e=>{l.on("mousemove",null).on("mouseup",null);a.x_=p.invert(r+e.clientX-o);a.y_=d.invert(c+e.clientY-n)}))})).on("dblclick",((e,s)=>{t.menu2.clear().show(e.clientX-90,e.clientY);t.menu2.d.append("input").attr("type","text").property("value",s.sample).style("display","block").style("margin-bottom","5px").on("keyup",(e=>{if(!i(e))return;const a=e.target.value;Object.values(T).forEach((e=>e.filter((e=>e.sample==s.sample)).text(a)));s.sample=a;t.menu2.hide()}));t.menu2.d.append("input").attr("type","color").property("value",s.color).on("change",(e=>{const t=e.target.value;Object.values(T).forEach((e=>e.filter((e=>e.sample==s.sample)).attr("fill",t)));M.filter((e=>e.sample==s.sample)).attr("fill",t);s.color=t}))}));T.userlabels.append("title").text("Double-click to edit")}W(t);function C(){b=h/20+20;w.attr("width",v+g+h+x).attr("height",y+_+g+b);const e=t.zoomed_scale&&t.zoomed_scale>1?t.new_xscale:p;const a=t.zoomed_scale&&t.zoomed_scale>1?t.new_yscale:d;e.range([0,h]);a.range([_,0]);j.attr("transform",(t=>"translate("+e(t.x)+","+a(t.y)+")"));if(A){A.attr("transform",(t=>"translate("+e(t.x)+","+a(t.y)+")"));F.attr("transform",(t=>{const s=t.x_?e(t.x_):e(t.x),l=t.y_?a(t.y_):a(t.y);let o;Object.values(T).forEach((e=>e.filter((e=>e.sample==t.sample)).each((function(){o=this.getBBox().width})).attr("text-anchor",s+o>=h?"end":"start")));return"translate("+s+","+l+")"}))}m=s.getBoundingClientRect();if(t.userlabel_grp&&F&&F.size()){z(F,{waitTime:0,nameKey:"sample"})}}C();t.scattersvg_resizehandle.style("position","absolute").style("right","0px").style("bottom","0px").attr("class","sja_clbtext").text("drag to resize").on("mousedown",(t=>{t.preventDefault();const s=e(document.body);const a=t.clientX;const l=t.clientY;const o=h;const n=_;s.on("mousemove",(e=>{h=o+e.clientX-a;_=n+e.clientY-l;C()}));s.on("mouseup",(()=>{s.on("mousemove",null).on("mouseup",null)}))}));function B(){const e=s.getBoundingClientRect();const a=h*e.width/m.width;h=t.dimensions.minWidth?Math.max(t.dimensions.minWidth,a):a;const l=_*e.height/m.height;_=t.dimensions.minHeight?Math.max(t.dimensions.minHeight,l):l;m=e;C()}let R;if(t.dimensions.autoResize){window.addEventListener("resize",(()=>{if(R)clearTimeout(R);R=setTimeout(B,50)}))}H(t)}function H(e){const t=e.scattersvg;e.scattersvg_buttons.style("position","absolute").style("right","0px").style("top","0px");e.zoom_active=false;const s=e.scattersvg_buttons.append("div").style("padding","2px 5px").style("border","1px solid #999").style("color","#999").style("background-color","#fff").style("cursor","pointer").style("font-weight","300").style("border-radius","5px").style("text-align","center").text("Pan / Zoom").on("click",d);const a=e.scattersvg_buttons.append("div").style("margin-top","2px").style("padding","2px 5px").style("border-radius","5px").style("text-align","center").style("display",e.zoom_active?"block":"none").style("background-color","#ddd");const l=a.append("div").style("margin","5px 2px");l.append("div").style("display","block").style("padding","2px 4px").style("font-size","80%").text("Zoom");l.append("div").style("display","block").style("padding","2px").style("font-size","70%").html('<p style="margin:1px;">Mouse wheel </br>or use these buttons</p>');const o=l.append("button").style("margin","1px").style("padding","2px 7px").text("+");const n=l.append("button").style("margin","1px").style("padding","2px 8px").text("-");const i=a.append("div").style("margin","5px 2px");i.append("div").style("display","block").style("padding","2px").style("font-size","80%").text("Pan");i.append("div").style("display","block").style("padding","2px").style("font-size","70%").html('<p style="margin:1px;">Mouse click </br>+ Mouse move</p>');const c=a.append("div").style("margin","5px 2px");const p=c.append("button").style("margin","1px").style("padding","2px 8px").text("Reset");function d(){e.zoom_active=e.zoom_active?false:true;s.style("border",e.zoom_active?"2px solid #000":"1px solid #999").style("color",e.zoom_active?"#000":"#999").style("background-color",e.zoom_active?"#eee":"#fff").style("font-weight",e.zoom_active?"400":"300");m.style("pointer-events",e.zoom_active?"none":"auto");a.style("display",e.zoom_active?"block":"none");const l=_().scaleExtent([1,5]).on("zoom",e.zoom_active?i:null);function i(t){e.new_xscale=t.transform.rescaleX(e.xscale);e.new_yscale=t.transform.rescaleY(e.yscale);e.zoomed_scale=t.transform.k;const s=e.dotg.selectAll(".sample_dot");s.attr("transform",(t=>"translate("+e.new_xscale(t.x)+","+e.new_yscale(t.y)+")"));const a=e.dotg.selectAll(".userlabelg");a.attr("transform",(t=>"translate("+e.new_xscale(t.x_||t.x)+","+e.new_yscale(t.y_||t.y)+")"))}if(e.zoom_active)t.call(l);else t.on(".zoom",null);o.on("click",(()=>{l.scaleBy(t.transition().duration(750),1.5)}));n.on("click",(()=>{l.scaleBy(t.transition().duration(750),.5)}));p.on("click",(()=>{t.transition().duration(750).call(l.transform,r)}))}const m=e.scattersvg_buttons.append("div").style("display","block").style("padding","2px 5px").style("margin-top","5px").style("border","1px solid #999").style("color","#999").style("background-color","#fff").style("cursor","pointer").style("font-weight","300").style("border-radius","5px").style("text-align","center").text("Lasso select").on("click",y);const f=e.scattersvg_buttons.append("div").style("margin-top","2px").style("padding","2px 5px").style("border-radius","5px").style("text-align","center").style("display",e.lasso_active?"block":"none").style("background-color","#ddd");const u=f.append("div").style("margin","5px 2px");u.append("div").style("display","block").style("padding","2px").style("font-size","80%").text("Lasso usage");u.append("div").style("display","block").style("padding","2px").style("font-size","70%").html('<p style="margin:1px;">Mouse click </br>+ Mouse move <br>'+"TIP: Release the mouse <br> when desired dots <br> are selected, without <br>closing the loop. </p>");function y(){const t=e.dotg.selectAll("g");e.lasso_active=e.lasso_active?false:true;s.style("pointer-events",e.lasso_active?"none":"auto");f.style("display",e.lasso_active?"block":"none");m.style("border",e.lasso_active?"2px solid #000":"1px solid #999").style("color",e.lasso_active?"#000":"#999").style("background-color",e.lasso_active?"#eee":"#fff").style("font-weight",e.lasso_active?"400":"300");te(e,t);if(e.lasso_active)return;t.selectAll("circle").classed("not_possible",false).classed("possible",false).attr("r",q).style("fill-opacity","1")}}function W(e){let t;if(e.colorbygeneexpression&&e.colorbygeneexpression.__inuse);else if(e.attr_levels){t={key:e.attr_levels[1].key};t.values=e.sample_attributes[t.key].values}else if(e.colorbyattributes){t={key:(e.colorbyattributes.find((e=>e.__inuse))||e.colorbyattributes[0]).key};t.values=e.sample_attributes[t.key].values}e.dotselection.transition().attr("fill",(e=>{if(t){const s=e.s[t.key];return t.values[s]?t.values[s].color:"black"}return"#ccc"}))}function G(e){if(e.attr_levels){K(e);return}if(e.colorbyattributes){J(e);return}if(e.colorbygeneexpression);}function K(e){const t=e.legendtable.append("tr").append("td").append("div").style("position","relative");const s=t.append("div");const a=e.attr_levels[0];a.v2c=new Map;a.unannotated=0;for(const t of e.dots){const e=t.s[a.key];if(e==undefined||e==null){a.unannotated++;continue}if(!a.v2c.has(e))a.v2c.set(e,{dots:[]});a.v2c.get(e).dots.push(t);if(a.label){a.v2c.get(e).label=t.s[a.label]}}for(const t of Z(a,e)){const l=a.v2c.get(t);const o=s.append("div").style("margin-top","20px").attr("class","sja_lb_div");o.append("div").attr("class","sja_l1lb").html((l.label||t)+' &nbsp;<span style="font-size:.8em">n='+l.dots.length+"</span>").style("margin-top","15px");const n=e.attr_levels[1];if(n){const t=e.sample_attributes[n.key].values;n.v2c=new Map;n.unannotated=0;for(const e of l.dots){const s=e.s[n.key];if(s==undefined||s==null){n.unannotated++;continue}if(!n.v2c.has(s)){const e=t[s];if(e){e.dots=[];n.v2c.set(s,e)}}if(n.v2c.has(s)){n.v2c.get(s).dots.push(e);if(n.label){n.v2c.get(s).label=e.s[n.label]}}}if(!e.hide_subtype_legend){for(const s of Z(n,e)){const a=n.v2c.get(s);const l=o.append("div").style("display","inline-block").style("white-space","nowrap").attr("class","sja_clb").on("click",(()=>{if(a.selected){a.selected=false;l.style("border","");let o=true;for(const e in t){if(t[e].selected)o=false}if(o){e.dotselection.transition().attr("r",q)}else{e.dotselection.filter((e=>e.s[n.key]==s)).transition().attr("r",L)}return}let o=true;for(const e in t){if(t[e].selected)o=false}a.selected=true;l.style("border","solid 1px #858585");if(o){e.dotselection.transition().attr("r",(e=>e.s[n.key]==s?q:L))}else{e.dotselection.filter((e=>e.s[n.key]==s)).transition().attr("r",q)}}));l.append("div").style("display","inline-block").attr("class","sja_mcdot").style("background",a.color).style("margin-right","3px").text(a.dots.length);l.append("div").style("display","inline-block").style("color",a.color).text(a.label||s);a.cell=l}}if(n.unannotated){const e=o.append("div").style("margin-top","20px");e.append("div").text('Unannotated for "'+n.key+'": '+n.unannotated)}}}if(a.unannotated){const e=s.append("div").style("margin-top","20px");e.append("div").html('Unannotated for "'+a.key+'": '+a.unannotated)}if(a.v2c.size>10){s.style("overflow-y","scroll").style("height","800px").style("resize","vertical")}}function Z(e,t){const s=t.sample_attributes[e.key];if(!s.values||s.orderByCount){return[...e.v2c].sort(((e,t)=>t[1].dots.length-e[1].dots.length)).map((e=>e[0]))}const a=[];for(const t in s.values){if(e.v2c.has(t))a.push(t)}return a}function J(e){if(!e.colorbyattributes.find((e=>e.__inuse)))e.colorbyattributes[0].__inuse=true;for(const t of e.colorbyattributes){const s=e.legendtable.append("tr");t.labelhandle=s.append("td").append("div").style("white-space","nowrap").text(t.label).attr("class","sja_clb").on("click",(()=>{for(const t of e.colorbyattributes){t.__inuse=false;t.labelhandle.style("background","").style("border-bottom","")}t.__inuse=true;t.labelhandle.style("background","#ededed").style("border-bottom","solid 2px #858585");W(e)}));if(t.__inuse){t.labelhandle.style("background","#ededed").style("border-bottom","solid 2px #858585")}for(const s of e.dots){const e=s.s[t.key];if(e==undefined||e==null)continue;if(!t.values[e])t.values[e]={color:"black"};t.values[e].count=1+(t.values[e].count||0)}const a=s.append("td");for(const s in t.values){const l=t.values[s];if(l.count==0||l.count==undefined)continue;const o=a.append("div").style("display","inline-block").attr("class","sja_clb").on("click",(()=>{if(l.selected){l.selected=false;o.style("border","");let a=true;for(const e in t.values){if(t.values[e].selected)a=false}if(a){e.dotselection.transition().attr("r",q)}else{e.dotselection.filter((e=>e.s[t.key]==s)).transition().attr("r",L)}return}let a=true;for(const e in t.values){if(t.values[e].selected)a=false}l.selected=true;o.style("border","solid 1px #858585");if(a){e.dotselection.transition().attr("r",(e=>e.s[t.key]==s?q:L))}else{e.dotselection.filter((e=>e.s[t.key]==s)).transition().attr("r",q)}}));o.append("div").style("display","inline-block").attr("class","sja_mcdot").style("background",l.color).style("margin-right","3px").text(l.count);o.append("div").style("display","inline-block").style("color",l.color).text(l.name||s);l.cell=o}}}function V(t){const s=t.dots.filter((e=>t.filteredSamples.has(e.sample)));const a=Array.from(s,(e=>e.s));const l=t.attr_levels?.[0].label||t.attr_levels?.[0].key;const o=[...new Set(Array.from(a,(e=>e[l])))];const n=t.attr_levels?.[1].label||t.attr_levels?.[1].key;const i=[...new Set(Array.from(a,(e=>e[n])))];const r=t.legendtable.node().querySelectorAll(".sja_lb_div");for(const t of r){const s=e(t).select(".sja_l1lb").node().innerText.split(/\s{2}n=/)[0];if(!o.includes(s))e(t).style("display","none");else{e(t).style("display","block");const s=e(t).node().querySelectorAll(".sja_clb");for(const t of s){const s=e(t).node().querySelectorAll("div")[1];if(!i.includes(s.innerText))e(t).style("display","none");else e(t).style("display","inline-block")}}}}function Q(e,t,s){if(t.dslabel){ee(e,t,s);return}if(t.mds){$(e,t,s);return}}async function $(e,t,s){const a=c({x:s.clientX,y:s.clientY});a.header.text(e.sample);const l=p(a.body);try{const s=await d();const o={genome:t.genome.name,dslabel:t.mds.label,querykey:t.mds.querykey,getsample4disco:e.sample};const n=await m("/mdssvcnv",o);if(n.error)throw n.error;if(!n.text)throw".text missing";const i=a.body.append("div");const r=await s.dtDisco({holderSelector:i,chromosomeType:t.genome.name,majorchr:t.genome.majorchr,settings:{showControls:false,selectedSamples:[]},callbacks:{geneLabelClick:{type:"genomepaint",hostURL:sessionStorage.getItem("hostURL")||"",genome:t.genome.name,dslabel:t.mds.label,sample:e.sample}}});const c={sampleName:e.sample,data:JSON.parse(n.text)};r.main(c);l.remove()}catch(e){l.text("Error: "+(e.message||e));if(e.stack)console.log(e.stack)}}function ee(e,t,s){const a=c({x:s.clientX,y:s.clientY});a.header.text(e.sample);const l=a.body.append("div").style("margin","20px").text("Loading ...");m("/mdssvcnv",{genome:t.genome.name,dslabel:t.dslabel,querykey:t.querykey,gettrack4singlesample:e.sample}).then((s=>{l.remove();ie({obj:t,dot:e,sampletracks:s.tracks,holder:a.body})}))}function te(e,t){const s=e.scattersvg;let a;if(e.lasso_active){a=h().items(t.selectAll("circle")).targetArea(s);a.on("start",l).on("draw",o).on("end",n);s.call(a)}else{s.selectAll(".lasso").remove();s.on("mousedown.drag",null)}function l(){if(!e.lasso_active)return;a.items().attr("r",2).style("fill-opacity",".5").classed("not_possible",true).classed("selected",false)}function o(){if(!e.lasso_active)return;a.possibleItems().attr("r",q).style("fill-opacity","1").classed("not_possible",false).classed("possible",true)}function n(t){if(!e.lasso_active)return;const l=s.selectAll(".possible").data().map((e=>e.sample));if(l.length)i(t,l);else e.menu.hide();a.items().classed("not_possible",false).classed("possible",false);a.selectedItems().attr("r",q);a.notSelectedItems().attr("r",l.length==0?q:L).style("fill-opacity","1")}function i(t,s){e.menu.clear().show(t.sourceEvent.clientX-90,t.sourceEvent.clientY);if(e.mds&&e.mds.gene2mutcount){e.menu.d.append("div").attr("class","sja_menuoption").text("Recurrently mutated genes").on("click",(async()=>{e.menu.hide();await ae(e,s)}))}for(const t of e.lasso.postSelectMenuOptions){e.menu.d.append("div").attr("class","sja_menuoption").text(t.label).on("click",(async()=>{e.menu.hide();const a={samples:s,sample_attributes:e.sample_attributes,sample2dot:e.sample2dot};if(t.callback=="listSamples")se(a);else t.callback(a)}))}e.menu.d.append("div").attr("class","sja_menuoption").text("Cancel").on("click",(()=>{a.items().classed("not_possible",false).classed("possible",false).attr("r",q).style("fill-opacity","1");e.menu.hide()}));e.menu.d.append("div").style("padding","10px").style("font-size",".8em").style("width","150px").text(s.length+" samples selected")}}function se(e){const{samples:t,sample_attributes:s,sample2dot:a}=e;const l=Object.keys(s);let o=l.map((e=>s[e].label?s[e].label:e));o.unshift("Sample");const n=o.join("\t");const i=[n];for(const e of t){if(a.get(e).s){let t=[];t.push(e);for(const s of l)t.push(a.get(e).s[s]);i.push(t.join("\t"))}}f("List of selected samples",[{text:i.join("\n")}])}function ae(e,t){e.pane=c({x:event.clientX,y:event.clientY});e.pane.header.text("Recurrently Mutated Genes");e.pane.wait=p(e.pane.body);e.pane.matrix_criteria_div=e.pane.body.append("div");e.pane.sample_matrix_div=e.pane.body.append("div");le(e,t)}function le(e,t){let s=[],a=[],l=[],o,n=15;const i=e.pane.matrix_criteria_div;if(e.mds.mutCountType){s=e.mds.mutCountType;const r=s.filter((e=>!e.db_col.includes("cnv")));const c=s.filter((e=>e.db_col.includes("cnv")));const p=c.find((e=>e.default));o=p;a=s.filter((e=>e.default)).map((e=>e.db_col));l=[...a];const d=i.append("div").style("margin","5px 20px");const m=i.append("div").style("margin","5px 20px").style("padding","5px").style("border-top","solid 1px #ededed").style("border-bottom","solid 1px #ededed").style("background-color","#FCFBF7").style("font-size",".8em");d.append("span").style("margin-right","20px").style("font-size",".8em").text("MUTATION COUNT & NO. OF GENE CRITERIA").attr("class","sja_clbtext").on("click",(()=>{if(m.style("display")=="none"){u(m)}else{y(m)}}));const f=m.append("div");const b=f.append("div").style("display","table-cell").style("width","110px");b.append("div").text("Consequences").style("padding-right","15px");const v=f.append("div").style("display","table-cell").style("border-left","solid 1px #ededed");r.forEach((e=>{const t=v.append("div");const s=t.append("input").attr("type","checkbox").attr("name","mut_type").attr("value",e.db_col).style("margin","3px").style("margin-left","4px").property("checked",e.default);s.on("change",(()=>{if(s.node().checked){l.push(s.node().value)}else{l=l.filter((e=>e!==s.node().value))}}));t.append("label").attr("for",e.db_col).html(e.label)}));const x=v.append("input").attr("type","checkbox").attr("name","noncnv").attr("value","cnv").style("margin","3px").style("margin-left","4px").property("checked",p?true:false).on("change",(()=>{if(x.node().checked){k.property("disabled",false);w.property("disabled",false)}else{k.property("disabled",true);w.property("disabled",true)}}));v.append("label").attr("for","cnv").text("CNV");const g=v.append("div").style("display","block").style("padding","3px 15px");const h=[...new Set(c.map((e=>e.sizecutoff)))];const _=[...new Set(c.map((e=>e.log2cutoff)))];g.append("label").attr("for","cnv_size").style("margin","2px 10px").text("Size cutoff");const k=g.append("select").attr("name","cnv_size");h.forEach((e=>{k.append("option").attr("value",e).text(e)}));k.property("selectedIndex",p.sizecutoff=="1Mb"?0:p.sizecutoff=="2Mb"?1:2);g.append("label").attr("for","log2_ratio").style("margin","2px 10px").text("log2(ratio) cutoff");const w=g.append("select").attr("name","log2_ratio");_.forEach((e=>{w.append("option").attr("value",e.toFixed(1)).text(e.toFixed(1))}));w.property("selectedIndex",p.log2cutoff==.1?0:p.log2cutoff==.2?1:2);const O=m.append("div").style("padding-top","10px");const j=O.append("div").style("display","table-cell").style("width","110px");j.append("div").text("No. of Genes").style("padding-right","15px");const z=O.append("div").style("display","table-cell").style("padding","3px").style("border-left","solid 1px #ededed");const S=[10,15,20,30,40];const A=z.append("select").attr("name","gene_n");S.forEach((e=>{A.append("option").attr("value",e).text(e)}));A.property("selectedIndex",S.findIndex((e=>e==n)));m.append("button").style("margin","10px").style("padding","3px 10px").text("Calculate").on("click",(()=>{const s=v.node().querySelectorAll("input:checked");l=[];s.forEach((e=>{if(e.value!=="cnv"&&!l.includes(e.value))l.push(e.value);else if(e.value=="cnv"){const e=k.node().value;const t=w.node().value;o=c.find((s=>s.sizecutoff==e&&s.log2cutoff==t));l.push(o.db_col)}}));n=A.node().value;oe(e,t,l,n);a=[...l]}))}else a=["total"];oe(e,t,a,n)}async function oe(e,t,s,l){try{const o={genome:e.genome.name,dslabel:e.mds.label,samples:t,selectedMutTypes:s,nGenes:l};const n=await a("mdsgenecount",{method:"POST",body:JSON.stringify(o)});if(n.error)throw n.error;if(!n.genes)throw".genes missing";if(!n.genes.length){e.pane.wait.html("No gene retrived with mutations.");e.pane.matrix_criteria_div.style("display","none");return}ne({obj:e,genes:n.genes,samples:t,holder:e.pane.body});e.pane.wait.remove()}catch(t){e.pane.wait.text("Error: "+(t.message||t));if(t.stack)console.log(t.stack)}}function ne(e){const{obj:t,genes:s,samples:a}=e;const l=t.pane.sample_matrix_div;l.selectAll("*").remove();for(const e of s){e.ismutation=true;e.genename=e.gene;e.label=e.gene;delete e.gene;e.querykeylst=["svcnv","snvindel"];t.features_on_rows?e.height=50:e.width=50}const o={genome:t.genome,dslabel:t.mds.label,features:s,features_on_rows:t.features_on_rows,ismutation_allsymbolic:true,hostURL:sessionStorage.getItem("hostURL")||"",limitbysamplesetgroup:{samples:a},jwt:sessionStorage.getItem("jwt")||"",holder:l.append("div").style("margin","20px")};import("./samplematrix-3556e5c0.js").then((e=>{const t=new e.Samplematrix(o);t._pane=l}))}function ie(e){const{obj:t,dot:s,sampletracks:a,holder:l}=e;const o={genome:t.genome,hostURL:sessionStorage.getItem("hostURL")||"",jwt:sessionStorage.getItem("jwt")||"",holder:l,chr:t.genome.defaultcoord.chr,start:t.genome.defaultcoord.start,stop:t.genome.defaultcoord.stop,nobox:1,tklst:[]};if(t.tracks){for(const e of t.tracks)o.tklst.push(e)}const n=t.mds.queries[t.querykey];if(n){const e={singlesample:{name:s.sample},mds:t.mds,querykey:t.querykey};for(const t in n){e[t]=n[t]}o.tklst.push(e);if(n.checkexpressionrank){const e={type:b.mdsexpressionrank,name:s.sample+" gene expression rank",dslabel:t.mds.label,querykey:n.checkexpressionrank.querykey,sample:s.sample};if(n.groupsamplebyattr){const t=n.groupsamplebyattr.attrlst;if(t&&t.length){e.attributes=[];for(const a of t){e.attributes.push({k:a.k,label:a.label,kvalue:s.s[a.k]})}}}o.tklst.push(e)}}if(a){for(const e of a)o.tklst.push(e)}v(t.genome,o.tklst);g(o)}export{X as init};
1
+ import{d as e,M as t,j as s,a7 as a,a8 as l,I as o,a9 as n,k as i,N as r,Z as c,v as p,aa as d,q as m,ab as f,p as u,ac as y,ad as b,f as v}from"./app-488d9fd6.js";import{s as x}from"./legacy-d3-polyfill-bdb2d792.js";import{b as g}from"./block.lazyload-143ae987.js";import{d as h}from"./lasso-48317f42.js";import{d as _}from"./zoom-6a36fb2b.js";import{f as k}from"./FilterStateless-bdd1416d.js";import{e as w}from"./FilterRxComp-cb149666.js";import"./termsetting-c12f1c69.js";import{g as O}from"./filter-67d51c09.js";import"./drag-1b98e43e.js";import"./nodrag-b2866dd8.js";import"./pointer-c7475677.js";import"./table-10183501.js";import"./tslib.es6-c3c2d88f.js";import"./partjson.esm-b3f1fc21.js";import"./termdb.bins-06fd21c1.js";import"path";function j(e){const t={waitTime:0,pad:5,nameKey:"",steps:[{type:"restyle",applyTo:"all",css:{selector:"text",key:"font-size",value:"12px"}},{type:"move",repeat:2,pad:0,css:{selector:"text"},boxSorter:(e,t)=>{if(e.x1>t.x1)return-1;if(t.x1>e.x1)return 1;if(e.y1>t.y1)return-1;if(t.y1>e.y1)return 1;return 0}}]};return Object.assign(t,e)}async function z(e,t={}){if(!e||!e.size())return;const s=j(t);if(!s.steps||!s.steps.length)return;if(!s.svg)s.svg=e.node().closest("svg");await R(s.waitTime);s.svgBox=s.svg.getBoundingClientRect();const a=S(e,s);const l=A(a);window.boxes=a;if(l){const t=s.steps.shift();const o=t.applyTo=="all"?a:t.type=="move"?a.filter((e=>e.collisions.length)):a.filter((e=>e.collisions.length===l));if(o.length){if(t.boxSorter)o.sort(t.boxSorter);for(const e of o){const l=S(e.label,s)[0];Object.assign(e,l);F(e,a.filter((t=>t!=e)));await C[t.type](e,t,a,s)}}if(typeof t.repeat=="number"&&t.repeat>0){t.repeat+=-1;s.steps.unshift(t)}if(s.steps.length)setTimeout((()=>z(e,s)),0);else a.forEach(B)}else a.forEach(B)}function S(t,s){const a=[];t.each((function(t){const l=this;const o=l.getBoundingClientRect();const n={elem:l,label:e(l),x1:o.x-s.svgBox.x,x2:o.x-s.svgBox.x+o.width,y1:o.y-s.svgBox.y,y2:o.y-s.svgBox.y+o.height,width:o.width,height:o.height};n.maxFree={n:Math.max(n.y1,0),s:Math.max(s.svgBox.y+s.svgBox.height-n.y2,0),e:Math.max(s.svgBox.x+s.svgBox.width-n.x2,0),w:Math.max(n.x1,0)};n.corners={};n.overlapSum=0;n.collisions=[];n.maxOverlaps={};if(s.nameKey)n.name=t[s.nameKey];N(n,s.svgBox);a.push(n)}));return a}function A(e){let t=0;for(const s of e){const a=F(s,e.filter((e=>e!=s)));if(t===0||a>0&&a<t){t=a}}e.sort(M);return t}function M(e,t){return e.collisions.length-t.collisions.length}function F(e,t){const s=e.x1,a=e.x2;const l=e.y1,o=e.y2;for(const n of t){if(n===e)continue;const t={};if(n.x2<s){t.w=s-n.x2}else if(n.x1>a){t.e=n.x1-a}if(n.y2<l){t.n=l-n.y2}else if(n.y1>o){t.s=n.y1-o}const i={};if(Object.keys(t).length){if("n"in t&&t.n<e.maxFree.n)e.maxFree.n=t.n;if("s"in t&&t.s<e.maxFree.s)e.maxFree.s=t.s;if("e"in t&&t.e<e.maxFree.e)e.maxFree.e=t.e;if("w"in t&&t.w<e.maxFree.w)e.maxFree.w=t.w}else{if(n.x1<=s&&a<=n.x2){if(n.x1<=s&&s<=n.x2){const t=n.x2-s;if(!("x"in e.maxOverlaps)||e.maxOverlaps.x.val<t)e.maxOverlaps.x={val:t,dir:"w"};if(n.y1<=l&&l<=n.y2){const s=n.y2-l;i.nw=t*s;if(!("y"in e.maxOverlaps)||e.maxOverlaps.y.val<s)e.maxOverlaps.y={val:s,dir:"n"}}if(n.y1<=o&&o<=n.y2){const s=o-n.y1;i.sw=t*s;if(!("y"in e.maxOverlaps)||e.maxOverlaps.y.val<s)e.maxOverlaps.y={val:s,dir:"s"}}}if(n.x1<=a&&a<=n.x2){const t=a-n.x1;if(!("x"in e.maxOverlaps)||e.maxOverlaps.x.val<t)e.maxOverlaps.x={val:t,dir:"e"};if(n.y1<=l&&l<=n.y2){const s=n.y2-l;i.ne=t*s;if(!("y"in e.maxOverlaps)||e.maxOverlaps.y.val<s)e.maxOverlaps.y={val:s,dir:"n"}}if(n.y1<=o&&o<=n.y2){const s=o-n.y1;i.se=t*s;if(!("y"in e.maxOverlaps)||e.maxOverlaps.y.val<s)e.maxOverlaps.y={val:s,dir:"s"}}}}else{if(s<=n.x1&&n.x1<=a){const t=a-n.x1;if(!("x"in e.maxOverlaps)||e.maxOverlaps.x.val<t)e.maxOverlaps.x={val:t,dir:"e"};if(l<=n.y1&&n.y1<=o){const s=o-n.y1;i.se=t*s;if(!("y"in e.maxOverlaps)||e.maxOverlaps.y.val<s)e.maxOverlaps.y={val:s,dir:"s"}}if(l<=n.y2&&n.y2<=o){const s=n.y2-l;i.ne=t*s;if(!("y"in e.maxOverlaps)||e.maxOverlaps.y.val<s)e.maxOverlaps.y={val:s,dir:"n"}}}if(s<=n.x2&&n.x2<=a){const t=n.x2-s;if(!("x"in e.maxOverlaps)||e.maxOverlaps.x.val<t)e.maxOverlaps.x={val:t,dir:"w"};if(l<=n.y1&&n.y1<=o){const s=o-n.y1;i.sw=t*s;if(!("y"in e.maxOverlaps)||e.maxOverlaps.y.val<s)e.maxOverlaps.y={val:s,dir:"s"}}if(l<=n.y2&&n.y2<=o){const s=n.y2-l;i.nw=t*s;if(!("y"in e.maxOverlaps)||e.maxOverlaps.y.val<s)e.maxOverlaps.y={val:s,dir:"n"}}}}}const r=Object.keys(i);if(r.length){e.collisions.push({box:n.name,corners:r});for(const t of r){if(!e.corners[t])e.corners[t]={against:[],sum:0};e.corners[t].against.push(n.name);e.corners[t].sum+=i[t];e.overlapSum+=i[t]}}}return e.collisions.length}function N(e,t){const s=e.x1,a=e.x2;const l=e.y1,o=e.y2;const n=[];if(s<0){e.maxOverlaps.x={val:Math.abs(s),dir:"w"};n.push("w");e.corners.w={against:[],sum:Math.abs(s)*e.height};e.overlapSum+=e.corners.w.sum}const i=a-t.width;if(i>0&&(!e.maxOverlaps.x||e.maxOverlaps.x.val<i)){e.maxOverlaps.x={val:i,dir:"e"};n.push("e");e.corners.e={against:["svgbox"],sum:i*e.height};e.overlapSum+=e.corners.e.sum}if(l<0){e.maxOverlaps.y={val:Math.abs(l),dir:"n"};n.push("n");e.corners.n={against:["svgbox"],sum:Math.abs(l)};e.overlapSum+=e.corners.n.sum}const r=o-t.height;if(r>0&&(!e.maxOverlaps.y||e.maxOverlaps.y.val<r)){e.maxOverlaps.y={val:r,dir:"s"};n.push("s");e.corners.s={against:["svgbox"],sum:r*e.height};e.overlapSum+=e.corners.s.sum}if(n.length)e.collisions.push({box:"svg",corners:n})}async function E(t,s,a,l){const o=new Map;t.label.selectAll(s.css.selector).each((function(t){const a=e(this);o.set(this,a.attr(s.css.key));a.attr(s.css.key,s.css.value)}));await R(l.waitTime);const n=S(t.label,l)[0];a.indexOf(t);F(n,a.filter((e=>e!=t)));if(s.applyTo=="all"){Object.assign(t,n)}else{if(n.overlapSum>=t.overlapSum){t.label.selectAll(s.css.selector).each((function(t){e(this).attr(s.css.key,o.get(this))}))}else{Object.assign(t,n)}}}async function T(t,s,a,l){const o=Object.keys(t.maxFree).filter((e=>t.maxFree[e]>0));if(!o.length)return;const n=new Map;if(t.maxOverlaps.y&&t.maxOverlaps.y.val>0){if(t.maxOverlaps.y.dir=="s"&&o.includes("n")){t.label.selectAll(s.css.selector).each((function(a){const l=e(this);n.set(this,l.attr("y")||0);l.attr("y",Math.max(-t.maxFree.n,-t.maxOverlaps.y.val)-s.pad)}))}if(t.maxOverlaps.y.dir=="n"&&o.includes("s")){t.label.selectAll(s.css.selector).each((function(a){const l=e(this);n.set(this,l.attr("y")||0);l.attr("y",Math.min(t.maxFree.s,t.maxOverlaps.y.val)+s.pad)}))}}if(n.size){await R(l.waitTime);const o=S(t.label,l)[0];F(o,a.filter((e=>e!=t)));if(o.overlapSum>=t.overlapSum){t.label.selectAll(s.css.selector).each((function(t){e(this).attr("y",n.get(this))}))}else{Object.assign(t,o);if(!t.collisions.length)return}}if(t.maxOverlaps.x&&t.maxOverlaps.x.val>0){if(t.maxOverlaps.x.dir=="e"&&o.includes("w")){t.label.selectAll(s.css.selector).each((function(a){const l=e(this);n.set(this,l.attr("x")||0);l.attr("x",Math.max(-t.maxFree.w,-t.maxOverlaps.x.val)-s.pad)}))}if(t.maxOverlaps.x.dir=="w"&&o.includes("e")){t.label.selectAll(s.css.selector).each((function(a){const l=e(this);n.set(this,l.attr("x")||0);l.attr("x",Math.min(t.maxFree.e,t.maxOverlaps.x.val)+s.pad)}))}}if(!n.size)return;await R(l.waitTime);const i=S(t.label,l)[0];F(i,a.filter((e=>e!=t)));if(i.overlapSum>=t.overlapSum){t.label.selectAll(s.css.selector).each((function(t){e(this).attr("x",n.get(this))}))}else{Object.assign(t,i)}}const C={restyle:E,move:T};function B(e){return}function R(e){return new Promise((t=>setTimeout(t,e)))}const q=3;const L=.7;const I="black";async function X(e,a,l){if(l){window.obj=e}if(!e.lasso)e.lasso={postSelectMenuOptions:[{label:"List samples",callback:"listSamples"}]};e.menu=new t({padding:"2px"});e.menu2=new t({padding:"10px"});e.tip=new t({padding:"5px"});e.errordiv=a.append("div").style("margin","10px");e.sayerror=t=>{s(e.errordiv,typeof t=="string"?t:t.message);if(t.stack)console.log(t.stack)};const o=a.append("table").style("border-spacing","20px");const n=o.append("tr");const i=n.append("td").style("vertical-align","top");const r=n.append("td").style("vertical-align","top");{const d=r.append("div").style("margin-bottom","5px");d.append("input").attr("type","text").attr("placeholder","Search sample").style("width","200px").on("keyup",(t=>{const s=t.target.value;if(!s){e.dotselection.transition().attr("r",q);return}const a=s.toLowerCase();e.dotselection.filter((e=>m(e,a))).transition().attr("r",q*2);e.dotselection.filter((e=>!m(e,a))).transition().attr("r",1)}));function m(e,t){let s=false;let a=Object.values(e).filter((e=>e!=null&&typeof e!="number"));let l=a.filter((e=>typeof e!="object")).map((e=>e.toLowerCase()));l.forEach((e=>{if(e.toLowerCase().includes(t))return s=true}));if(!s){a.forEach((e=>{if(e&&typeof e=="object"){const a=Object.values(e).filter((e=>e!=null&&typeof e!="number")).map((e=>e.toLowerCase()));a.forEach((e=>{if(e.toLowerCase().includes(t))return s=true}))}}))}return s}}const c=r.append("div").style("overflow-x","hidden").style("overflow-y","auto").style("height","100vh");e.legendtable=c.append("table").style("border-spacing","5px");e.filterDiv=i.append("div").style("position","relative");const p=i.append("div").style("position","relative");e.scattersvg=p.append("svg");e.scattersvg_resizehandle=p.append("div");e.scattersvg_buttons=p.append("div");try{await Y(e);D(e);G(e);P(e)}catch(f){if(f.stack)console.log(f.stack);e.sayerror(f.message||f)}}async function Y(e){if(e.dslabel){const t=["genome="+e.genome.name,"dslabel="+e.dslabel];if(e.analysisdata){if(e.analysisdata.subset){if(!e.analysisdata.subset.key)throw".subset.key missing";if(!e.analysisdata.subset.value)throw".subset.value missing";t.push("subsetkey="+e.analysisdata.subset.key);t.push("subsetvalue="+e.analysisdata.subset.value)}}const s=await a("mdssamplescatterplot?"+t.join("&"));if(s.error)throw s.error;if(!s.dots)throw"server error";e.sample2dot=new Map;for(const t of s.dots){e.sample2dot.set(t.sample,t)}U(e,s);e.colorbyattributes=s.colorbyattributes;e.colorbygeneexpression=s.colorbygeneexpression;e.tracks=s.tracks;e.querykey=s.querykey;e.sample_attributes=e.mds.sampleAttribute.attributes;return}const t=e.analysisdata;if(e.disco||t.disco){const s=e.disco||t.disco;e.mds=e.genome.datasets[s.dslabel]}else if(e.mds){e.mds=e.genome.datasets[e.mds.dslabel]}if(!t)throw"both .analysisdata{} and .dslabel are missing";if(t.samples){if(!Array.isArray(t.samples))throw".analysisdata.samples is not array";e.dots=t.samples}else if(t.tabular_data){let s=t.tabular_data.split("\n");if(s.length<2)throw"at least 2 rows, header row + at least 1 sample data must be supplied";t.samples=[];const a=s.shift().split("\t");if(a.length<3)throw"at least 3 columns are required with X, Y and sample name";t.samplekey=a[2];let l=a.indexOf("x");if(l==-1)l=a.indexOf("X");if(l==-1)throw'"X" or "x" column missing from tabular data';let o=a.indexOf("y");if(o==-1)o=a.indexOf("Y");if(o==-1)throw'"Y" or "y" column missing from tabular data';for(const e of s){const s=e.split("\t");const n={};for(const[e,t]of s.entries()){if(e==l)n.x=Number.parseFloat(t);else if(e==o)n.y=Number.parseFloat(t);else n[a[e]]=t}t.samples.push(n)}e.dots=t.samples;if(t.sample_attributes==undefined){t.sample_attributes={};for(const[e,s]of a.entries()){if(e<=2)continue;t.sample_attributes[s]={label:s}}}if(!t.colorbyattributes&&a.length>3)t.colorbyattributes=[{key:a[3]}]}else{throw"unknown data encoding in .analysisdata{}"}e.sample2dot=new Map;for(const s of e.dots){if(!Number.isFinite(s.x)||!Number.isFinite(s.y))throw"non-numeric x/y for a sample";if(t.samplekey){s.sample=s[t.samplekey];delete s[t.samplekey]}if(t.sample_attributes){s.s={};for(const e in t.sample_attributes){s.s[e]=s[e];delete s[e]}}e.sample2dot.set(s.sample,s)}e.sample_attributes=t.sample_attributes;e.colorbyattributes=t.colorbyattributes;e.attr_levels=t.attr_levels;if(t.user_samples){if(!Array.isArray(t.user_samples))throw".user_samples[] is not array";e.dots_user=[];for(const s of t.user_samples){if(!Number.isFinite(s.x)||!Number.isFinite(s.y))throw"non-numeric x/y for a USER sample";if(t.samplekey){s.sample=s[t.samplekey];delete s[t.samplekey]}if(!s.color)s.color=I;e.dots_user.push(s)}}if(!e.filterApi){e.filterApi=k({btn:e.filterDiv.append("div"),btnLabel:"Filter",emptyLabel:"+New Filter",holder:e.filterDiv.append("div"),vocab:w(t),debug:true,callback(s){e.filteredSamples=O(t.samples,s);if(e.dotselection._groups[0].length!=e.filteredSamples.size){e.dotselection.transition().attr("r",(t=>e.filteredSamples.has(t.sample)?q:0)).style("opacity",(t=>e.filteredSamples.has(t.sample)?1:0))}else{e.dotselection.transition().attr("r",q).style("opacity",1)}V(e)}});e.filterApi.main({type:"tvslst",join:"",lst:[]});e.filteredSamples=[]}}function U(e,t){if(!e.analysisdata){e.dots=t.dots;return}if(!e.analysisdata.str)throw".analysisdata.str missing while trying to combine client/server data";const s=new Map;e.dots_user=[];for(const t of e.analysisdata.str.trim().split("\n")){const a=t.split("\t");if(a.length<3){continue}const l=a[2];if(!l)continue;const o={x:Number(a[0]),y:Number(a[1])};if(Number.isNaN(o.x)||Number.isNaN(o.y))continue;if(a[3]){o.sample=l;o.color=I;e.dots_user.push(o);continue}s.set(l,o)}e.dots=[];for(const a of t.dots){const t=s.get(a.sample);if(!t)continue;a.x=t.x;a.y=t.y;e.dots.push(a)}}function D(e){if(e.colorbyattributes){if(!Array.isArray(e.colorbyattributes))throw".colorbyattributes[] is not array";if(!e.sample_attributes)throw".sample_attributes{} missing when .colorbyattributes is defined";for(const t of e.colorbyattributes){if(typeof t!="object")throw"one of .colorbyattributes[] is not array";if(!t.key)throw".key missing from one of .colorbyattributes[]";const s=e.sample_attributes[t.key];if(!s)throw"unknown key from .colorbyattributes: "+t.key;t.label=s.label;t.values=s.values;if(!t.values){t.values={};for(const s of e.dots){const e=s.s[t.key];if(e==undefined||e==null)continue;t.values[e]={}}}const a=l(x);for(const e in t.values){if(!t.values[e].color)t.values[e].color=a(e)}if(e.analysisdata){const s=e.analysisdata.sample_attributes;if(s[t.key].values==undefined)s[t.key].values=t.values}}}if(e.attr_levels){if(!Array.isArray(e.attr_levels))throw".attr_levels[] is not array";if(e.attr_levels.length<2)throw".attr_levels[] array has less than 2 items";if(!e.sample_attributes)throw".sample_attributes is missing when .attr_levels is defined";for(const t of e.attr_levels){if(!t.key)throw".key missing from one of attr_levels[]";const s=e.sample_attributes[t.key];if(!s)throw".attr_levels key missing from sample_attributes{}: "+t.key;if(!s.values){s.values={};for(const a of e.dots){const e=a.s[t.key];if(e==undefined||e==null||s.values[e])continue;s.values[e]={}}const a=l(x);for(const e in s.values){if(!s.values[e].color)s.values[e].color=a(e)}s.orderByCount=true}if(t.label);}}}function P(t){const s=t.scattersvg.node().closest(".sja_root_holder");let a=t.dots[0].x,l=a,r=t.dots[0].y,c=r;for(const e of[...t.dots,...t.dots_user||[]]){a=Math.min(a,e.x);l=Math.max(l,e.x);r=Math.min(r,e.y);c=Math.max(c,e.y)}let p=t.xscale=o().domain([a,l]);let d=t.yscale=o().domain([r,c]);if(!t.dimensions)t.dimensions={};if(!("autoResize"in t.dimensions))t.dimensions.autoResize=true;if(!("minWidth"in t.dimensions))t.dimensions.minWidth=300;if(!("minHeight"in t.dimensions))t.dimensions.minHeight=300;let m;const f=250;const u=s.getBoundingClientRect();let y=30,b=50,v=100,x=30,g=20,h=t.dimensions.width?t.dimensions.width:Math.max(t.dimensions.minWidth,.75*(u.width-f)),_=t.dimensions.height?t.dimensions.height:Math.max(t.dimensions.minHeight,Math.min(1.2*h,.5*u.height)),k=18;const w=t.scattersvg;const O=t.dotg=w.append("g").attr("transform","translate("+(v+g)+","+y+")");const j=O.selectAll().data(t.dots).enter().append("g").attr("class","sample_dot");const S=j.append("circle").attr("stroke","none").attr("r",q).on("mouseover",((e,s)=>{e.target.setAttribute("stroke","white");const a=[{k:"Sample",v:s.sample}];if(t.sample_attributes){for(const e in t.sample_attributes){const l=t.sample_attributes[e];s.s[e];a.push({k:l.label,v:s.s[e]})}}n(t.tip.clear().d,a);t.tip.show(e.clientX,e.clientY)})).on("mouseout",((e,s)=>{e.target.setAttribute("stroke","none");t.tip.hide()})).on("click",((e,s)=>{Q(s,t,e)}));t.dotselection=S;let A,M,F,N,E;const T=t.userlabel_grp={userlabels:N,userlabel_borders:E};if(t.dots_user){A=O.selectAll().data(t.dots_user).enter().append("g").attr("class","sample_dot");M=A.append("circle").attr("stroke","none").attr("fill",(e=>e.color)).attr("r",q).on("mouseover",((e,s)=>{const a=[{k:"Sample",v:s.sample}];if(t.sample_attributes){for(const e in t.sample_attributes){const l=t.sample_attributes[e];if(s[e])a.push({k:l.label,v:s[e]})}}n(t.tip.clear().d,a);t.tip.show(e.clientX,e.clientY);Object.values(T).forEach((e=>e.filter((e=>e.sample==s.sample)).attr("font-weight","bold")))})).on("mouseout",((e,s)=>{t.tip.hide();Object.values(T).forEach((e=>e.filter((e=>e.sample==s.sample)).attr("font-weight","normal")))}));F=O.selectAll().data(t.dots_user).enter().append("g").attr("class","userlabelg");T.userlabel_borders=F.append("text").attr("fill","#fff").attr("font-size",k).attr("stroke","white").attr("stroke-width","3px").text((e=>e.sample)).attr("text-anchor","end");T.userlabels=F.append("text").attr("fill",(e=>e.color)).attr("font-size",k).text((e=>e.sample)).on("mouseover",((e,s)=>{M.filter((e=>e.sample==s.sample)).attr("r",q*2);w.style("cursor","move");const a=[{k:"Sample",v:s.sample}];if(t.sample_attributes){for(const e in t.sample_attributes){const l=t.sample_attributes[e];if(s[e])a.push({k:l.label,v:s[e]})}}n(t.tip.clear().d,a);t.tip.show(e.clientX,e.clientY)})).on("mouseout",((e,s)=>{M.filter((e=>e.sample==s.sample)).attr("r",q);w.style("cursor","auto");t.tip.hide()})).on("mousedown",((s,a)=>{s.preventDefault();s.stopPropagation();const l=e(document.body);const o=s.clientX;const n=s.clientY;p=t.zoomed_scale&&t.zoomed_scale>1?t.new_xscale:t.xscale;d=t.zoomed_scale&&t.zoomed_scale>1?t.new_yscale:t.yscale;const i=F.filter((e=>e.sample==a.sample));const[r,c]=i.attr("transform").match(/[\d\.]+/g).map(Number);l.on("mousemove",(e=>{i.attr("transform","translate("+(r+e.clientX-o)+","+(c+e.clientY-n)+")")}));l.on("mouseup",(e=>{l.on("mousemove",null).on("mouseup",null);a.x_=p.invert(r+e.clientX-o);a.y_=d.invert(c+e.clientY-n)}))})).on("dblclick",((e,s)=>{t.menu2.clear().show(e.clientX-90,e.clientY);t.menu2.d.append("input").attr("type","text").property("value",s.sample).style("display","block").style("margin-bottom","5px").on("keyup",(e=>{if(!i(e))return;const a=e.target.value;Object.values(T).forEach((e=>e.filter((e=>e.sample==s.sample)).text(a)));s.sample=a;t.menu2.hide()}));t.menu2.d.append("input").attr("type","color").property("value",s.color).on("change",(e=>{const t=e.target.value;Object.values(T).forEach((e=>e.filter((e=>e.sample==s.sample)).attr("fill",t)));M.filter((e=>e.sample==s.sample)).attr("fill",t);s.color=t}))}));T.userlabels.append("title").text("Double-click to edit")}W(t);function C(){b=h/20+20;w.attr("width",v+g+h+x).attr("height",y+_+g+b);const e=t.zoomed_scale&&t.zoomed_scale>1?t.new_xscale:p;const a=t.zoomed_scale&&t.zoomed_scale>1?t.new_yscale:d;e.range([0,h]);a.range([_,0]);j.attr("transform",(t=>"translate("+e(t.x)+","+a(t.y)+")"));if(A){A.attr("transform",(t=>"translate("+e(t.x)+","+a(t.y)+")"));F.attr("transform",(t=>{const s=t.x_?e(t.x_):e(t.x),l=t.y_?a(t.y_):a(t.y);let o;Object.values(T).forEach((e=>e.filter((e=>e.sample==t.sample)).each((function(){o=this.getBBox().width})).attr("text-anchor",s+o>=h?"end":"start")));return"translate("+s+","+l+")"}))}m=s.getBoundingClientRect();if(t.userlabel_grp&&F&&F.size()){z(F,{waitTime:0,nameKey:"sample"})}}C();t.scattersvg_resizehandle.style("position","absolute").style("right","0px").style("bottom","0px").attr("class","sja_clbtext").text("drag to resize").on("mousedown",(t=>{t.preventDefault();const s=e(document.body);const a=t.clientX;const l=t.clientY;const o=h;const n=_;s.on("mousemove",(e=>{h=o+e.clientX-a;_=n+e.clientY-l;C()}));s.on("mouseup",(()=>{s.on("mousemove",null).on("mouseup",null)}))}));function B(){const e=s.getBoundingClientRect();const a=h*e.width/m.width;h=t.dimensions.minWidth?Math.max(t.dimensions.minWidth,a):a;const l=_*e.height/m.height;_=t.dimensions.minHeight?Math.max(t.dimensions.minHeight,l):l;m=e;C()}let R;if(t.dimensions.autoResize){window.addEventListener("resize",(()=>{if(R)clearTimeout(R);R=setTimeout(B,50)}))}H(t)}function H(e){const t=e.scattersvg;e.scattersvg_buttons.style("position","absolute").style("right","0px").style("top","0px");e.zoom_active=false;const s=e.scattersvg_buttons.append("div").style("padding","2px 5px").style("border","1px solid #999").style("color","#999").style("background-color","#fff").style("cursor","pointer").style("font-weight","300").style("border-radius","5px").style("text-align","center").text("Pan / Zoom").on("click",d);const a=e.scattersvg_buttons.append("div").style("margin-top","2px").style("padding","2px 5px").style("border-radius","5px").style("text-align","center").style("display",e.zoom_active?"block":"none").style("background-color","#ddd");const l=a.append("div").style("margin","5px 2px");l.append("div").style("display","block").style("padding","2px 4px").style("font-size","80%").text("Zoom");l.append("div").style("display","block").style("padding","2px").style("font-size","70%").html('<p style="margin:1px;">Mouse wheel </br>or use these buttons</p>');const o=l.append("button").style("margin","1px").style("padding","2px 7px").text("+");const n=l.append("button").style("margin","1px").style("padding","2px 8px").text("-");const i=a.append("div").style("margin","5px 2px");i.append("div").style("display","block").style("padding","2px").style("font-size","80%").text("Pan");i.append("div").style("display","block").style("padding","2px").style("font-size","70%").html('<p style="margin:1px;">Mouse click </br>+ Mouse move</p>');const c=a.append("div").style("margin","5px 2px");const p=c.append("button").style("margin","1px").style("padding","2px 8px").text("Reset");function d(){e.zoom_active=e.zoom_active?false:true;s.style("border",e.zoom_active?"2px solid #000":"1px solid #999").style("color",e.zoom_active?"#000":"#999").style("background-color",e.zoom_active?"#eee":"#fff").style("font-weight",e.zoom_active?"400":"300");m.style("pointer-events",e.zoom_active?"none":"auto");a.style("display",e.zoom_active?"block":"none");const l=_().scaleExtent([1,5]).on("zoom",e.zoom_active?i:null);function i(t){e.new_xscale=t.transform.rescaleX(e.xscale);e.new_yscale=t.transform.rescaleY(e.yscale);e.zoomed_scale=t.transform.k;const s=e.dotg.selectAll(".sample_dot");s.attr("transform",(t=>"translate("+e.new_xscale(t.x)+","+e.new_yscale(t.y)+")"));const a=e.dotg.selectAll(".userlabelg");a.attr("transform",(t=>"translate("+e.new_xscale(t.x_||t.x)+","+e.new_yscale(t.y_||t.y)+")"))}if(e.zoom_active)t.call(l);else t.on(".zoom",null);o.on("click",(()=>{l.scaleBy(t.transition().duration(750),1.5)}));n.on("click",(()=>{l.scaleBy(t.transition().duration(750),.5)}));p.on("click",(()=>{t.transition().duration(750).call(l.transform,r)}))}const m=e.scattersvg_buttons.append("div").style("display","block").style("padding","2px 5px").style("margin-top","5px").style("border","1px solid #999").style("color","#999").style("background-color","#fff").style("cursor","pointer").style("font-weight","300").style("border-radius","5px").style("text-align","center").text("Lasso select").on("click",y);const f=e.scattersvg_buttons.append("div").style("margin-top","2px").style("padding","2px 5px").style("border-radius","5px").style("text-align","center").style("display",e.lasso_active?"block":"none").style("background-color","#ddd");const u=f.append("div").style("margin","5px 2px");u.append("div").style("display","block").style("padding","2px").style("font-size","80%").text("Lasso usage");u.append("div").style("display","block").style("padding","2px").style("font-size","70%").html('<p style="margin:1px;">Mouse click </br>+ Mouse move <br>'+"TIP: Release the mouse <br> when desired dots <br> are selected, without <br>closing the loop. </p>");function y(){const t=e.dotg.selectAll("g");e.lasso_active=e.lasso_active?false:true;s.style("pointer-events",e.lasso_active?"none":"auto");f.style("display",e.lasso_active?"block":"none");m.style("border",e.lasso_active?"2px solid #000":"1px solid #999").style("color",e.lasso_active?"#000":"#999").style("background-color",e.lasso_active?"#eee":"#fff").style("font-weight",e.lasso_active?"400":"300");te(e,t);if(e.lasso_active)return;t.selectAll("circle").classed("not_possible",false).classed("possible",false).attr("r",q).style("fill-opacity","1")}}function W(e){let t;if(e.colorbygeneexpression&&e.colorbygeneexpression.__inuse);else if(e.attr_levels){t={key:e.attr_levels[1].key};t.values=e.sample_attributes[t.key].values}else if(e.colorbyattributes){t={key:(e.colorbyattributes.find((e=>e.__inuse))||e.colorbyattributes[0]).key};t.values=e.sample_attributes[t.key].values}e.dotselection.transition().attr("fill",(e=>{if(t){const s=e.s[t.key];return t.values[s]?t.values[s].color:"black"}return"#ccc"}))}function G(e){if(e.attr_levels){K(e);return}if(e.colorbyattributes){J(e);return}if(e.colorbygeneexpression);}function K(e){const t=e.legendtable.append("tr").append("td").append("div").style("position","relative");const s=t.append("div");const a=e.attr_levels[0];a.v2c=new Map;a.unannotated=0;for(const t of e.dots){const e=t.s[a.key];if(e==undefined||e==null){a.unannotated++;continue}if(!a.v2c.has(e))a.v2c.set(e,{dots:[]});a.v2c.get(e).dots.push(t);if(a.label){a.v2c.get(e).label=t.s[a.label]}}for(const t of Z(a,e)){const l=a.v2c.get(t);const o=s.append("div").style("margin-top","20px").attr("class","sja_lb_div");o.append("div").attr("class","sja_l1lb").html((l.label||t)+' &nbsp;<span style="font-size:.8em">n='+l.dots.length+"</span>").style("margin-top","15px");const n=e.attr_levels[1];if(n){const t=e.sample_attributes[n.key].values;n.v2c=new Map;n.unannotated=0;for(const e of l.dots){const s=e.s[n.key];if(s==undefined||s==null){n.unannotated++;continue}if(!n.v2c.has(s)){const e=t[s];if(e){e.dots=[];n.v2c.set(s,e)}}if(n.v2c.has(s)){n.v2c.get(s).dots.push(e);if(n.label){n.v2c.get(s).label=e.s[n.label]}}}if(!e.hide_subtype_legend){for(const s of Z(n,e)){const a=n.v2c.get(s);const l=o.append("div").style("display","inline-block").style("white-space","nowrap").attr("class","sja_clb").on("click",(()=>{if(a.selected){a.selected=false;l.style("border","");let o=true;for(const e in t){if(t[e].selected)o=false}if(o){e.dotselection.transition().attr("r",q)}else{e.dotselection.filter((e=>e.s[n.key]==s)).transition().attr("r",L)}return}let o=true;for(const e in t){if(t[e].selected)o=false}a.selected=true;l.style("border","solid 1px #858585");if(o){e.dotselection.transition().attr("r",(e=>e.s[n.key]==s?q:L))}else{e.dotselection.filter((e=>e.s[n.key]==s)).transition().attr("r",q)}}));l.append("div").style("display","inline-block").attr("class","sja_mcdot").style("background",a.color).style("margin-right","3px").text(a.dots.length);l.append("div").style("display","inline-block").style("color",a.color).text(a.label||s);a.cell=l}}if(n.unannotated){const e=o.append("div").style("margin-top","20px");e.append("div").text('Unannotated for "'+n.key+'": '+n.unannotated)}}}if(a.unannotated){const e=s.append("div").style("margin-top","20px");e.append("div").html('Unannotated for "'+a.key+'": '+a.unannotated)}if(a.v2c.size>10){s.style("overflow-y","scroll").style("height","800px").style("resize","vertical")}}function Z(e,t){const s=t.sample_attributes[e.key];if(!s.values||s.orderByCount){return[...e.v2c].sort(((e,t)=>t[1].dots.length-e[1].dots.length)).map((e=>e[0]))}const a=[];for(const t in s.values){if(e.v2c.has(t))a.push(t)}return a}function J(e){if(!e.colorbyattributes.find((e=>e.__inuse)))e.colorbyattributes[0].__inuse=true;for(const t of e.colorbyattributes){const s=e.legendtable.append("tr");t.labelhandle=s.append("td").append("div").style("white-space","nowrap").text(t.label).attr("class","sja_clb").on("click",(()=>{for(const t of e.colorbyattributes){t.__inuse=false;t.labelhandle.style("background","").style("border-bottom","")}t.__inuse=true;t.labelhandle.style("background","#ededed").style("border-bottom","solid 2px #858585");W(e)}));if(t.__inuse){t.labelhandle.style("background","#ededed").style("border-bottom","solid 2px #858585")}for(const s of e.dots){const e=s.s[t.key];if(e==undefined||e==null)continue;if(!t.values[e])t.values[e]={color:"black"};t.values[e].count=1+(t.values[e].count||0)}const a=s.append("td");for(const s in t.values){const l=t.values[s];if(l.count==0||l.count==undefined)continue;const o=a.append("div").style("display","inline-block").attr("class","sja_clb").on("click",(()=>{if(l.selected){l.selected=false;o.style("border","");let a=true;for(const e in t.values){if(t.values[e].selected)a=false}if(a){e.dotselection.transition().attr("r",q)}else{e.dotselection.filter((e=>e.s[t.key]==s)).transition().attr("r",L)}return}let a=true;for(const e in t.values){if(t.values[e].selected)a=false}l.selected=true;o.style("border","solid 1px #858585");if(a){e.dotselection.transition().attr("r",(e=>e.s[t.key]==s?q:L))}else{e.dotselection.filter((e=>e.s[t.key]==s)).transition().attr("r",q)}}));o.append("div").style("display","inline-block").attr("class","sja_mcdot").style("background",l.color).style("margin-right","3px").text(l.count);o.append("div").style("display","inline-block").style("color",l.color).text(l.name||s);l.cell=o}}}function V(t){const s=t.dots.filter((e=>t.filteredSamples.has(e.sample)));const a=Array.from(s,(e=>e.s));const l=t.attr_levels?.[0].label||t.attr_levels?.[0].key;const o=[...new Set(Array.from(a,(e=>e[l])))];const n=t.attr_levels?.[1].label||t.attr_levels?.[1].key;const i=[...new Set(Array.from(a,(e=>e[n])))];const r=t.legendtable.node().querySelectorAll(".sja_lb_div");for(const t of r){const s=e(t).select(".sja_l1lb").node().innerText.split(/\s{2}n=/)[0];if(!o.includes(s))e(t).style("display","none");else{e(t).style("display","block");const s=e(t).node().querySelectorAll(".sja_clb");for(const t of s){const s=e(t).node().querySelectorAll("div")[1];if(!i.includes(s.innerText))e(t).style("display","none");else e(t).style("display","inline-block")}}}}function Q(e,t,s){if(t.dslabel){ee(e,t,s);return}if(t.mds){$(e,t,s);return}}async function $(e,t,s){const a=c({x:s.clientX,y:s.clientY});a.header.text(e.sample);const l=p(a.body);try{const s=await d();const o={genome:t.genome.name,dslabel:t.mds.label,querykey:t.mds.querykey,getsample4disco:e.sample};const n=await m("/mdssvcnv",o);if(n.error)throw n.error;if(!n.text)throw".text missing";const i=a.body.append("div");const r=await s.dtDisco({holderSelector:i,chromosomeType:t.genome.name,majorchr:t.genome.majorchr,settings:{showControls:false,selectedSamples:[]},callbacks:{geneLabelClick:{type:"genomepaint",hostURL:sessionStorage.getItem("hostURL")||"",genome:t.genome.name,dslabel:t.mds.label,sample:e.sample}}});const c={sampleName:e.sample,data:JSON.parse(n.text)};r.main(c);l.remove()}catch(e){l.text("Error: "+(e.message||e));if(e.stack)console.log(e.stack)}}function ee(e,t,s){const a=c({x:s.clientX,y:s.clientY});a.header.text(e.sample);const l=a.body.append("div").style("margin","20px").text("Loading ...");m("/mdssvcnv",{genome:t.genome.name,dslabel:t.dslabel,querykey:t.querykey,gettrack4singlesample:e.sample}).then((s=>{l.remove();ie({obj:t,dot:e,sampletracks:s.tracks,holder:a.body})}))}function te(e,t){const s=e.scattersvg;let a;if(e.lasso_active){a=h().items(t.selectAll("circle")).targetArea(s);a.on("start",l).on("draw",o).on("end",n);s.call(a)}else{s.selectAll(".lasso").remove();s.on("mousedown.drag",null)}function l(){if(!e.lasso_active)return;a.items().attr("r",2).style("fill-opacity",".5").classed("not_possible",true).classed("selected",false)}function o(){if(!e.lasso_active)return;a.possibleItems().attr("r",q).style("fill-opacity","1").classed("not_possible",false).classed("possible",true)}function n(t){if(!e.lasso_active)return;const l=s.selectAll(".possible").data().map((e=>e.sample));if(l.length)i(t,l);else e.menu.hide();a.items().classed("not_possible",false).classed("possible",false);a.selectedItems().attr("r",q);a.notSelectedItems().attr("r",l.length==0?q:L).style("fill-opacity","1")}function i(t,s){e.menu.clear().show(t.sourceEvent.clientX-90,t.sourceEvent.clientY);if(e.mds&&e.mds.gene2mutcount){e.menu.d.append("div").attr("class","sja_menuoption").text("Recurrently mutated genes").on("click",(async()=>{e.menu.hide();await ae(e,s)}))}for(const t of e.lasso.postSelectMenuOptions){e.menu.d.append("div").attr("class","sja_menuoption").text(t.label).on("click",(async()=>{e.menu.hide();const a={samples:s,sample_attributes:e.sample_attributes,sample2dot:e.sample2dot};if(t.callback=="listSamples")se(a);else t.callback(a)}))}e.menu.d.append("div").attr("class","sja_menuoption").text("Cancel").on("click",(()=>{a.items().classed("not_possible",false).classed("possible",false).attr("r",q).style("fill-opacity","1");e.menu.hide()}));e.menu.d.append("div").style("padding","10px").style("font-size",".8em").style("width","150px").text(s.length+" samples selected")}}function se(e){const{samples:t,sample_attributes:s,sample2dot:a}=e;const l=Object.keys(s);let o=l.map((e=>s[e].label?s[e].label:e));o.unshift("Sample");const n=o.join("\t");const i=[n];for(const e of t){if(a.get(e).s){let t=[];t.push(e);for(const s of l)t.push(a.get(e).s[s]);i.push(t.join("\t"))}}f("List of selected samples",[{text:i.join("\n")}])}function ae(e,t){e.pane=c({x:event.clientX,y:event.clientY});e.pane.header.text("Recurrently Mutated Genes");e.pane.wait=p(e.pane.body);e.pane.matrix_criteria_div=e.pane.body.append("div");e.pane.sample_matrix_div=e.pane.body.append("div");le(e,t)}function le(e,t){let s=[],a=[],l=[],o,n=15;const i=e.pane.matrix_criteria_div;if(e.mds.mutCountType){s=e.mds.mutCountType;const r=s.filter((e=>!e.db_col.includes("cnv")));const c=s.filter((e=>e.db_col.includes("cnv")));const p=c.find((e=>e.default));o=p;a=s.filter((e=>e.default)).map((e=>e.db_col));l=[...a];const d=i.append("div").style("margin","5px 20px");const m=i.append("div").style("margin","5px 20px").style("padding","5px").style("border-top","solid 1px #ededed").style("border-bottom","solid 1px #ededed").style("background-color","#FCFBF7").style("font-size",".8em");d.append("span").style("margin-right","20px").style("font-size",".8em").text("MUTATION COUNT & NO. OF GENE CRITERIA").attr("class","sja_clbtext").on("click",(()=>{if(m.style("display")=="none"){u(m)}else{y(m)}}));const f=m.append("div");const b=f.append("div").style("display","table-cell").style("width","110px");b.append("div").text("Consequences").style("padding-right","15px");const v=f.append("div").style("display","table-cell").style("border-left","solid 1px #ededed");r.forEach((e=>{const t=v.append("div");const s=t.append("input").attr("type","checkbox").attr("name","mut_type").attr("value",e.db_col).style("margin","3px").style("margin-left","4px").property("checked",e.default);s.on("change",(()=>{if(s.node().checked){l.push(s.node().value)}else{l=l.filter((e=>e!==s.node().value))}}));t.append("label").attr("for",e.db_col).html(e.label)}));const x=v.append("input").attr("type","checkbox").attr("name","noncnv").attr("value","cnv").style("margin","3px").style("margin-left","4px").property("checked",p?true:false).on("change",(()=>{if(x.node().checked){k.property("disabled",false);w.property("disabled",false)}else{k.property("disabled",true);w.property("disabled",true)}}));v.append("label").attr("for","cnv").text("CNV");const g=v.append("div").style("display","block").style("padding","3px 15px");const h=[...new Set(c.map((e=>e.sizecutoff)))];const _=[...new Set(c.map((e=>e.log2cutoff)))];g.append("label").attr("for","cnv_size").style("margin","2px 10px").text("Size cutoff");const k=g.append("select").attr("name","cnv_size");h.forEach((e=>{k.append("option").attr("value",e).text(e)}));k.property("selectedIndex",p.sizecutoff=="1Mb"?0:p.sizecutoff=="2Mb"?1:2);g.append("label").attr("for","log2_ratio").style("margin","2px 10px").text("log2(ratio) cutoff");const w=g.append("select").attr("name","log2_ratio");_.forEach((e=>{w.append("option").attr("value",e.toFixed(1)).text(e.toFixed(1))}));w.property("selectedIndex",p.log2cutoff==.1?0:p.log2cutoff==.2?1:2);const O=m.append("div").style("padding-top","10px");const j=O.append("div").style("display","table-cell").style("width","110px");j.append("div").text("No. of Genes").style("padding-right","15px");const z=O.append("div").style("display","table-cell").style("padding","3px").style("border-left","solid 1px #ededed");const S=[10,15,20,30,40];const A=z.append("select").attr("name","gene_n");S.forEach((e=>{A.append("option").attr("value",e).text(e)}));A.property("selectedIndex",S.findIndex((e=>e==n)));m.append("button").style("margin","10px").style("padding","3px 10px").text("Calculate").on("click",(()=>{const s=v.node().querySelectorAll("input:checked");l=[];s.forEach((e=>{if(e.value!=="cnv"&&!l.includes(e.value))l.push(e.value);else if(e.value=="cnv"){const e=k.node().value;const t=w.node().value;o=c.find((s=>s.sizecutoff==e&&s.log2cutoff==t));l.push(o.db_col)}}));n=A.node().value;oe(e,t,l,n);a=[...l]}))}else a=["total"];oe(e,t,a,n)}async function oe(e,t,s,l){try{const o={genome:e.genome.name,dslabel:e.mds.label,samples:t,selectedMutTypes:s,nGenes:l};const n=await a("mdsgenecount",{method:"POST",body:JSON.stringify(o)});if(n.error)throw n.error;if(!n.genes)throw".genes missing";if(!n.genes.length){e.pane.wait.html("No gene retrived with mutations.");e.pane.matrix_criteria_div.style("display","none");return}ne({obj:e,genes:n.genes,samples:t,holder:e.pane.body});e.pane.wait.remove()}catch(t){e.pane.wait.text("Error: "+(t.message||t));if(t.stack)console.log(t.stack)}}function ne(e){const{obj:t,genes:s,samples:a}=e;const l=t.pane.sample_matrix_div;l.selectAll("*").remove();for(const e of s){e.ismutation=true;e.genename=e.gene;e.label=e.gene;delete e.gene;e.querykeylst=["svcnv","snvindel"];t.features_on_rows?e.height=50:e.width=50}const o={genome:t.genome,dslabel:t.mds.label,features:s,features_on_rows:t.features_on_rows,ismutation_allsymbolic:true,hostURL:sessionStorage.getItem("hostURL")||"",limitbysamplesetgroup:{samples:a},jwt:sessionStorage.getItem("jwt")||"",holder:l.append("div").style("margin","20px")};import("./samplematrix-2bb2480b.js").then((e=>{const t=new e.Samplematrix(o);t._pane=l}))}function ie(e){const{obj:t,dot:s,sampletracks:a,holder:l}=e;const o={genome:t.genome,hostURL:sessionStorage.getItem("hostURL")||"",jwt:sessionStorage.getItem("jwt")||"",holder:l,chr:t.genome.defaultcoord.chr,start:t.genome.defaultcoord.start,stop:t.genome.defaultcoord.stop,nobox:1,tklst:[]};if(t.tracks){for(const e of t.tracks)o.tklst.push(e)}const n=t.mds.queries[t.querykey];if(n){const e={singlesample:{name:s.sample},mds:t.mds,querykey:t.querykey};for(const t in n){e[t]=n[t]}o.tklst.push(e);if(n.checkexpressionrank){const e={type:b.mdsexpressionrank,name:s.sample+" gene expression rank",dslabel:t.mds.label,querykey:n.checkexpressionrank.querykey,sample:s.sample};if(n.groupsamplebyattr){const t=n.groupsamplebyattr.attrlst;if(t&&t.length){e.attributes=[];for(const a of t){e.attributes.push({k:a.k,label:a.label,kvalue:s.s[a.k]})}}}o.tklst.push(e)}}if(a){for(const e of a)o.tklst.push(e)}v(t.genome,o.tklst);g(o)}export{X as init};
@@ -1 +1 @@
1
- import{M as e,j as t,U as s,q as n,ae as a,a8 as l,af as p,I as o,d as i,ag as r}from"./app-3d14cbe4.js";import{b as d,a as u}from"./axis-747c801e.js";async function c(n,a,l){if(l){window.obj=n}n.plots=[];n.menu=new e({padding:"5px"});n.tip=new e({padding:"5px"});n.errordiv=a.append("div").style("margin","10px");n.sayerror=e=>{t(n.errordiv,typeof e=="string"?e:e.message);if(e.stack)console.log(e.stack)};n.uidiv=a.append("div").style("margin","20px");n.plotdiv=a.append("div").style("margin","20px");n.legendtable=a.append("table").style("border-spacing","5px");a.append("button").text("SVG").on("click",(()=>{s(n.plotlist[0].svg.node(),"Survival")}));try{await m(n);if(!n.plotlist){n.plotlist=[]}if(!Array.isArray(n.plotlist))throw".plotlist should be array";if(n.plotlist.length==0){const e={type:n.plottypes[0].key};n.plotlist.push(e)}for(const e of n.plotlist){f(e,n)}}catch(e){if(e.stack)console.log(e.stack);n.sayerror("Cannot make plot: "+(e.message||e))}}function m(e){const t={genome:e.genome.name,dslabel:e.mds.label,init:1};return n("mdssurvivalplot",t).then((t=>{if(t.error)throw t.error;if(!t.plottypes)throw"plottypes[] missing";e.plottypes=t.plottypes;e.samplegroupings=t.samplegroupings}))}function f(e,t){y(e,t);const s=t.uidiv.append("div").style("margin","20px");if(t.plottypes.length>1){const n=s.append("div").style("margin-bottom","10px").append("select").on("change",(t=>{e.type=t.target.options[t.target.selectedIndex].value}));for(const[s,a]of t.plottypes.entries()){n.append("option").text(a.name).property("value",a.key);if(a.key==e.type){n.node().selectedIndex=s}}}if(t.samplegroupings&&!e.samplerule.full.immutable){const n=s.append("div").style("margin-bottom","20px");const a=s.append("div").style("display","none");n.append("span").html("Choose samples from&nbsp;").style("opacity",.5);const l={};const p=n.append("select").style("margin-right","5px").on("change",(t=>{for(const e in l){l[e].style("display","none")}const s=t.target.options[t.target.selectedIndex];a.style("display",s.usesampleset?"block":"none");if(s.useall){e.samplerule.full.useall=1;delete e.samplerule.full.byattr;return}if(s.usesampleset){delete e.samplerule.full.byattr;delete e.samplerule.full.useall;e.samplerule.full.usesampleset=1;v(e,a);return}delete e.samplerule.full.useall;e.samplerule.full.byattr=1;e.samplerule.key=s.key;const n=l[s.key];n.style("display","inline");e.samplerule.full.value=n.node().options[n.node().selectedIndex].value}));for(const[s,a]of t.samplegroupings.entries()){p.append("option").text(a.label).property("key",a.key);const t=e.samplerule.full.byattr&&e.samplerule.full.key==a.key;if(t){p.node().selectedIndex=s}const o=n.append("select").on("change",(t=>{e.samplerule.full.value=t.target.options[t.target.selectedIndex].value}));l[a.key]=o;o.style("display",t?"inline":"none");for(const[s,n]of a.values.entries()){o.append("option").text(n.value+" (n="+n.count+")").property("value",n.value);if(t&&n.value==e.samplerule.full.value){o.node().selectedIndex=s}}}p.append("option").text("all samples").property("useall",1);if(e.samplerule.full.useall){p.node().selectedIndex=t.samplegroupings.length}p.append("option").text("custom sampleset").property("usesampleset",1)}x(e,s);e.button=s.append("button").text("Make plot").on("click",(()=>{h(e,t)}));e.d=t.plotdiv.append("div").style("margin","20px"),e.legend={d_pvalue:e.d.append("div").style("margin","10px"),d_samplefull:e.d.append("div").style("margin","10px"),d_curves:e.d.append("div").style("margin","10px")};e.svg=e.d.append("svg");e.resize_handle=e.d.append("div").append("div").attr("class","sja_clbtext").text("drag to resize").style("float","right");if(e.renderplot){h(e,t)}}function y(e,t){if(!e.type){e.type=t.plottypes[0].key}if(!e.samplerule){e.samplerule={}}if(!e.samplerule.full){e.samplerule.full={}}if(t.samplegroupings){if(!e.samplerule.full.useall){e.samplerule.full.byattr=1;if(!e.samplerule.full.key){e.samplerule.full.key=t.samplegroupings[0].key;e.samplerule.full.value=t.samplegroupings[0].values[0].value}}}else{e.samplerule.full.useall=1}if(e.samplerule.set){const t=e.samplerule.set;if(t.geneexpression){if(!t.bymedian&&!t.byquartile){t.bymedian=1}}}if(!e.width)e.width=500;if(!e.height)e.height=500;if(!e.toppad)e.toppad=10;if(!e.rightpad)e.rightpad=10;if(!e.xaxispad)e.xaxispad=10;if(!e.yaxispad)e.yaxispad=10;if(!e.xaxish)e.xaxish=40;if(!e.yaxisw)e.yaxisw=65;if(!e.censorticksize)e.censorticksize=6;if(!e.tickfontsize)e.tickfontsize=14;if(!e.labfontsize)e.labfontsize=15}function g(e,t){const s=l(p);const n=0;let a=0;for(const t of e.samplesets){t.color=s(t.name);for(const e of t.steps){a=Math.max(a,e.x)}}e.svg.selectAll("*").remove();const c=e.svg.append("g");for(const t of e.samplesets){t.path=c.append("path").attr("stroke",t.color).attr("fill","none");t.ticks=c.append("path").attr("stroke",t.color).attr("fill","none")}const m=e.svg.append("g");const f=o().domain([0,1]);const y=e.svg.append("g");const g=y.append("text").text("Survival").attr("transform","rotate(-90)");const h=e.svg.append("g");const x=o().domain([n,a]);const v=e.svg.append("text").attr("font-size",e.labfontsize).text(t.plottypes.find((t=>t.key==e.type)).timelabel).attr("x",e.yaxisw+e.yaxispad+e.width/2).attr("y",e.toppad+e.height+e.xaxispad+e.xaxish-3);function b(){c.attr("transform","translate("+(e.yaxisw+e.yaxispad)+","+e.toppad+")");for(const t of e.samplesets){const s=[];const n=["M 0 0"];for(const l of t.steps){n.push("H "+e.width*l.x/a);const t=e.height*(l.y+l.drop);n.push("V "+t);if(l.censored){const t=e.height*l.y;for(const n of l.censored){const l=e.width*n/a;s.push("M "+(l-e.censorticksize/2)+" "+(t-e.censorticksize/2)+" l "+e.censorticksize+" "+e.censorticksize+" M "+(l+e.censorticksize/2)+" "+(t-e.censorticksize/2)+" l -"+e.censorticksize+" "+e.censorticksize)}}}t.path.attr("d",n.join(" "));if(s.length){t.ticks.attr("d",s.join(" "))}}m.attr("transform","translate("+e.yaxisw+","+e.toppad+")");r({axis:m.call(d().scale(f.range([e.height,0])).ticks(Math.floor(e.height/(e.tickfontsize+20)))),showline:1,fontsize:e.tickfontsize});y.attr("transform","translate("+e.labfontsize+","+(e.toppad+e.height/2)+")");g.attr("font-size",e.labfontsize);h.attr("transform","translate("+(e.yaxisw+e.yaxispad)+","+(e.toppad+e.height+e.xaxispad)+")");let t;h.append("text").text(a).attr("font-size",e.tickfontsize).each((function(){t=Math.floor(e.width/(this.getBBox().width+30))})).remove();r({axis:h.call(u().scale(x.range([0,e.width])).ticks(t)),showline:1,fontsize:e.tickfontsize});v.attr("font-size",e.labfontsize).attr("x",e.yaxisw+e.yaxispad+e.width/2).attr("y",e.toppad+e.height+e.xaxispad+e.xaxish-3);e.svg.attr("width",e.yaxisw+e.yaxispad+e.width+e.rightpad).attr("height",e.toppad+e.height+e.xaxispad+e.xaxish)}b();e.resize_handle.on("mousedown",(t=>{t.preventDefault();const s=i(document.body);const n=t.clientX;const a=t.clientY;const l=e.width;const p=e.height;s.on("mousemove",(()=>{e.width=l+t.clientX-n;e.height=p+t.clientY-a;b()}));s.on("mouseup",(()=>{s.on("mousemove",null).on("mouseup",null)}))}));if(Number.isFinite(e.pvalue)){e.legend.d_pvalue.style("display","block").text("P-value: "+e.pvalue)}else{e.legend.d_pvalue.style("display","none")}e.legend.d_curves.selectAll("*").remove();for(const t of e.samplesets){e.legend.d_curves.append("div").style("margin","3px").html('<span style="background:'+t.color+'">&nbsp;&nbsp;</span> '+t.name+(t.pvalue==undefined?"":", P-value: "+t.pvalue))}}function h(e,t){e.button.text("Loading...").attr("disabled",1);const s={genome:t.genome.name,dslabel:t.mds.label,type:e.type,samplerule:e.samplerule};n("mdssurvivalplot",s).then((s=>{if(s.error)throw s.error;if(!s.samplesets)throw"samplesets[] missing";e.samplesets=s.samplesets;e.pvalue=s.pvalue;g(e,t);if(e.samplerule.set&&e.samplerule.set.mutation){if(e.mutation_count.cnv)e.mutation_count.cnv.html("(n="+s.count_cnv+")&nbsp;");if(e.mutation_count.loh)e.mutation_count.loh.html("(n="+s.count_loh+")&nbsp;");if(e.mutation_count.snvindel)e.mutation_count.snvindel.html("(n="+s.count_snvindel+")&nbsp;");if(e.mutation_count.sv)e.mutation_count.sv.html("(n="+s.count_sv+")&nbsp;");if(e.mutation_count.fusion)e.mutation_count.fusion.html("(n="+s.count_fusion+")&nbsp;");if(e.mutation_count.itd)e.mutation_count.itd.html("(n="+s.count_itd+")&nbsp;")}})).catch((e=>{t.sayerror(e)})).then((()=>{e.button.text("Update plot").attr("disabled",null)}))}function x(e,t){if(!e.samplerule.set)return;const s=e.samplerule.set;if(s.geneexpression){if(!s.bymedian&&!s.byquartile){s.bymedian=1}const n=t.append("div").style("margin-bottom","10px");n.append("span").style("opacity",.5).html("Divide samples by "+s.gene+" expression with&nbsp;");const a=n.append("select").on("change",(t=>{const s=t.target.options[t.target.selectedIndex];if(s.median){e.samplerule.set.bymedian=1;delete e.samplerule.set.byquartile;l.style("display","none")}else if(s.quartile){e.samplerule.set.byquartile=1;delete e.samplerule.set.bymedian;l.style("display","inline")}}));a.append("option").text("median (group=2)").property("median",1);a.append("option").text("quartile (group=4)").property("quartile",1);const l=n.append("span").style("margin-left","10px");l.append("span").html("Compare each quartile against&nbsp;").style("opacity",.5);{const t=l.append("select").on("change",(t=>{delete e.samplerule.set.against1st;delete e.samplerule.set.against4th;switch(t.target.selectedIndex){case 0:break;case 1:e.samplerule.set.against1st=1;break;case 2:e.samplerule.set.against4th=1;break}}));t.append("option").text("none");t.append("option").text("first quartile");t.append("option").text("fourth quartile");if(s.against1st){t.node().selectedIndex=1}else if(t.against4th){t.node().selectedIndex=2}}if(s.bymedian){a.node().selectedIndex=0;l.style("display","none")}else if(s.byquartile){a.node().selectedIndex=1;l.style("display","inline")}}if(s.mutation){e.mutation_count={};if(s.snvindel){const n=t.append("div").style("margin-bottom","20px");e.mutation_count.snvindel=n.append("span");if(s.snvindel.name){n.append("span").html("SNV/indel&nbsp;");const e=n.append("select");e.append("option").text(s.snvindel.name).property("named",1);e.append("option").text("any mutation at "+s.chr+":"+s.start)}else{n.append("span").text("SNV/indel at "+s.chr+":"+(s.start==s.stop?s.start:s.start+"-"+s.stop))}}if(s.cnv){const n=t.append("div").style("margin-bottom","20px");e.mutation_count.cnv=n.append("span");n.append("span").html("Copy number variation over "+s.chr+":"+s.start+"-"+s.stop+' <span style="font-size:.7em">'+a(s.stop-s.start)+"</span>&nbsp;")}if(s.loh){const n=t.append("div").style("margin-bottom","20px");e.mutation_count.loh=n.append("span");n.append("span").html("LOH over "+s.chr+":"+s.start+"-"+s.stop+' <span style="font-size:.7em">'+a(s.stop-s.start)+"</span>&nbsp;")}if(s.sv){const n=t.append("div").style("margin-bottom","20px");e.mutation_count.sv=n.append("span");n.append("span").html("SV at "+s.chr+":"+(s.start==s.stop?s.start:s.start+"-"+s.stop)+"&nbsp;")}if(s.fusion){const n=t.append("div").style("margin-bottom","20px");e.mutation_count.fusion=n.append("span");n.append("span").html("Fusion at "+s.chr+":"+(s.start==s.stop?s.start:s.start+"-"+s.stop)+"&nbsp;")}if(s.itd){const n=t.append("div").style("margin-bottom","20px");e.mutation_count.itd=n.append("span");n.append("span").html("ITD over "+s.chr+":"+s.start+"-"+s.stop+' <span style="font-size:.7em">'+a(s.stop-s.start)+"</span>&nbsp;")}}}function v(e,t){let s=t.selectAll("div").size();if(s)return;const n=t.append("div").style("margin-bottom","10px");const a=n.append("div").style("margin-left","20px");a.append("div").style("vertical-align","top").style("display","inline-block").style("opacity",.5).html("Enter sample names<br>(one sample per line) &nbsp;");const l=a.append("textarea").style("display","inline-block").attr("cols","20").attr("rows","10").on("change",(()=>{let t=e.samplerule.full.sampleset=[];const s=l.property("value").trim();if(!s)return;for(const e of s.split("\n")){t.push(e)}}))}export{c as init};
1
+ import{M as e,j as t,U as s,q as n,ae as a,a8 as l,af as p,I as o,d as i,ag as r}from"./app-488d9fd6.js";import{b as d,a as u}from"./axis-747c801e.js";async function c(n,a,l){if(l){window.obj=n}n.plots=[];n.menu=new e({padding:"5px"});n.tip=new e({padding:"5px"});n.errordiv=a.append("div").style("margin","10px");n.sayerror=e=>{t(n.errordiv,typeof e=="string"?e:e.message);if(e.stack)console.log(e.stack)};n.uidiv=a.append("div").style("margin","20px");n.plotdiv=a.append("div").style("margin","20px");n.legendtable=a.append("table").style("border-spacing","5px");a.append("button").text("SVG").on("click",(()=>{s(n.plotlist[0].svg.node(),"Survival")}));try{await m(n);if(!n.plotlist){n.plotlist=[]}if(!Array.isArray(n.plotlist))throw".plotlist should be array";if(n.plotlist.length==0){const e={type:n.plottypes[0].key};n.plotlist.push(e)}for(const e of n.plotlist){f(e,n)}}catch(e){if(e.stack)console.log(e.stack);n.sayerror("Cannot make plot: "+(e.message||e))}}function m(e){const t={genome:e.genome.name,dslabel:e.mds.label,init:1};return n("mdssurvivalplot",t).then((t=>{if(t.error)throw t.error;if(!t.plottypes)throw"plottypes[] missing";e.plottypes=t.plottypes;e.samplegroupings=t.samplegroupings}))}function f(e,t){y(e,t);const s=t.uidiv.append("div").style("margin","20px");if(t.plottypes.length>1){const n=s.append("div").style("margin-bottom","10px").append("select").on("change",(t=>{e.type=t.target.options[t.target.selectedIndex].value}));for(const[s,a]of t.plottypes.entries()){n.append("option").text(a.name).property("value",a.key);if(a.key==e.type){n.node().selectedIndex=s}}}if(t.samplegroupings&&!e.samplerule.full.immutable){const n=s.append("div").style("margin-bottom","20px");const a=s.append("div").style("display","none");n.append("span").html("Choose samples from&nbsp;").style("opacity",.5);const l={};const p=n.append("select").style("margin-right","5px").on("change",(t=>{for(const e in l){l[e].style("display","none")}const s=t.target.options[t.target.selectedIndex];a.style("display",s.usesampleset?"block":"none");if(s.useall){e.samplerule.full.useall=1;delete e.samplerule.full.byattr;return}if(s.usesampleset){delete e.samplerule.full.byattr;delete e.samplerule.full.useall;e.samplerule.full.usesampleset=1;v(e,a);return}delete e.samplerule.full.useall;e.samplerule.full.byattr=1;e.samplerule.key=s.key;const n=l[s.key];n.style("display","inline");e.samplerule.full.value=n.node().options[n.node().selectedIndex].value}));for(const[s,a]of t.samplegroupings.entries()){p.append("option").text(a.label).property("key",a.key);const t=e.samplerule.full.byattr&&e.samplerule.full.key==a.key;if(t){p.node().selectedIndex=s}const o=n.append("select").on("change",(t=>{e.samplerule.full.value=t.target.options[t.target.selectedIndex].value}));l[a.key]=o;o.style("display",t?"inline":"none");for(const[s,n]of a.values.entries()){o.append("option").text(n.value+" (n="+n.count+")").property("value",n.value);if(t&&n.value==e.samplerule.full.value){o.node().selectedIndex=s}}}p.append("option").text("all samples").property("useall",1);if(e.samplerule.full.useall){p.node().selectedIndex=t.samplegroupings.length}p.append("option").text("custom sampleset").property("usesampleset",1)}x(e,s);e.button=s.append("button").text("Make plot").on("click",(()=>{h(e,t)}));e.d=t.plotdiv.append("div").style("margin","20px"),e.legend={d_pvalue:e.d.append("div").style("margin","10px"),d_samplefull:e.d.append("div").style("margin","10px"),d_curves:e.d.append("div").style("margin","10px")};e.svg=e.d.append("svg");e.resize_handle=e.d.append("div").append("div").attr("class","sja_clbtext").text("drag to resize").style("float","right");if(e.renderplot){h(e,t)}}function y(e,t){if(!e.type){e.type=t.plottypes[0].key}if(!e.samplerule){e.samplerule={}}if(!e.samplerule.full){e.samplerule.full={}}if(t.samplegroupings){if(!e.samplerule.full.useall){e.samplerule.full.byattr=1;if(!e.samplerule.full.key){e.samplerule.full.key=t.samplegroupings[0].key;e.samplerule.full.value=t.samplegroupings[0].values[0].value}}}else{e.samplerule.full.useall=1}if(e.samplerule.set){const t=e.samplerule.set;if(t.geneexpression){if(!t.bymedian&&!t.byquartile){t.bymedian=1}}}if(!e.width)e.width=500;if(!e.height)e.height=500;if(!e.toppad)e.toppad=10;if(!e.rightpad)e.rightpad=10;if(!e.xaxispad)e.xaxispad=10;if(!e.yaxispad)e.yaxispad=10;if(!e.xaxish)e.xaxish=40;if(!e.yaxisw)e.yaxisw=65;if(!e.censorticksize)e.censorticksize=6;if(!e.tickfontsize)e.tickfontsize=14;if(!e.labfontsize)e.labfontsize=15}function g(e,t){const s=l(p);const n=0;let a=0;for(const t of e.samplesets){t.color=s(t.name);for(const e of t.steps){a=Math.max(a,e.x)}}e.svg.selectAll("*").remove();const c=e.svg.append("g");for(const t of e.samplesets){t.path=c.append("path").attr("stroke",t.color).attr("fill","none");t.ticks=c.append("path").attr("stroke",t.color).attr("fill","none")}const m=e.svg.append("g");const f=o().domain([0,1]);const y=e.svg.append("g");const g=y.append("text").text("Survival").attr("transform","rotate(-90)");const h=e.svg.append("g");const x=o().domain([n,a]);const v=e.svg.append("text").attr("font-size",e.labfontsize).text(t.plottypes.find((t=>t.key==e.type)).timelabel).attr("x",e.yaxisw+e.yaxispad+e.width/2).attr("y",e.toppad+e.height+e.xaxispad+e.xaxish-3);function b(){c.attr("transform","translate("+(e.yaxisw+e.yaxispad)+","+e.toppad+")");for(const t of e.samplesets){const s=[];const n=["M 0 0"];for(const l of t.steps){n.push("H "+e.width*l.x/a);const t=e.height*(l.y+l.drop);n.push("V "+t);if(l.censored){const t=e.height*l.y;for(const n of l.censored){const l=e.width*n/a;s.push("M "+(l-e.censorticksize/2)+" "+(t-e.censorticksize/2)+" l "+e.censorticksize+" "+e.censorticksize+" M "+(l+e.censorticksize/2)+" "+(t-e.censorticksize/2)+" l -"+e.censorticksize+" "+e.censorticksize)}}}t.path.attr("d",n.join(" "));if(s.length){t.ticks.attr("d",s.join(" "))}}m.attr("transform","translate("+e.yaxisw+","+e.toppad+")");r({axis:m.call(d().scale(f.range([e.height,0])).ticks(Math.floor(e.height/(e.tickfontsize+20)))),showline:1,fontsize:e.tickfontsize});y.attr("transform","translate("+e.labfontsize+","+(e.toppad+e.height/2)+")");g.attr("font-size",e.labfontsize);h.attr("transform","translate("+(e.yaxisw+e.yaxispad)+","+(e.toppad+e.height+e.xaxispad)+")");let t;h.append("text").text(a).attr("font-size",e.tickfontsize).each((function(){t=Math.floor(e.width/(this.getBBox().width+30))})).remove();r({axis:h.call(u().scale(x.range([0,e.width])).ticks(t)),showline:1,fontsize:e.tickfontsize});v.attr("font-size",e.labfontsize).attr("x",e.yaxisw+e.yaxispad+e.width/2).attr("y",e.toppad+e.height+e.xaxispad+e.xaxish-3);e.svg.attr("width",e.yaxisw+e.yaxispad+e.width+e.rightpad).attr("height",e.toppad+e.height+e.xaxispad+e.xaxish)}b();e.resize_handle.on("mousedown",(t=>{t.preventDefault();const s=i(document.body);const n=t.clientX;const a=t.clientY;const l=e.width;const p=e.height;s.on("mousemove",(()=>{e.width=l+t.clientX-n;e.height=p+t.clientY-a;b()}));s.on("mouseup",(()=>{s.on("mousemove",null).on("mouseup",null)}))}));if(Number.isFinite(e.pvalue)){e.legend.d_pvalue.style("display","block").text("P-value: "+e.pvalue)}else{e.legend.d_pvalue.style("display","none")}e.legend.d_curves.selectAll("*").remove();for(const t of e.samplesets){e.legend.d_curves.append("div").style("margin","3px").html('<span style="background:'+t.color+'">&nbsp;&nbsp;</span> '+t.name+(t.pvalue==undefined?"":", P-value: "+t.pvalue))}}function h(e,t){e.button.text("Loading...").attr("disabled",1);const s={genome:t.genome.name,dslabel:t.mds.label,type:e.type,samplerule:e.samplerule};n("mdssurvivalplot",s).then((s=>{if(s.error)throw s.error;if(!s.samplesets)throw"samplesets[] missing";e.samplesets=s.samplesets;e.pvalue=s.pvalue;g(e,t);if(e.samplerule.set&&e.samplerule.set.mutation){if(e.mutation_count.cnv)e.mutation_count.cnv.html("(n="+s.count_cnv+")&nbsp;");if(e.mutation_count.loh)e.mutation_count.loh.html("(n="+s.count_loh+")&nbsp;");if(e.mutation_count.snvindel)e.mutation_count.snvindel.html("(n="+s.count_snvindel+")&nbsp;");if(e.mutation_count.sv)e.mutation_count.sv.html("(n="+s.count_sv+")&nbsp;");if(e.mutation_count.fusion)e.mutation_count.fusion.html("(n="+s.count_fusion+")&nbsp;");if(e.mutation_count.itd)e.mutation_count.itd.html("(n="+s.count_itd+")&nbsp;")}})).catch((e=>{t.sayerror(e)})).then((()=>{e.button.text("Update plot").attr("disabled",null)}))}function x(e,t){if(!e.samplerule.set)return;const s=e.samplerule.set;if(s.geneexpression){if(!s.bymedian&&!s.byquartile){s.bymedian=1}const n=t.append("div").style("margin-bottom","10px");n.append("span").style("opacity",.5).html("Divide samples by "+s.gene+" expression with&nbsp;");const a=n.append("select").on("change",(t=>{const s=t.target.options[t.target.selectedIndex];if(s.median){e.samplerule.set.bymedian=1;delete e.samplerule.set.byquartile;l.style("display","none")}else if(s.quartile){e.samplerule.set.byquartile=1;delete e.samplerule.set.bymedian;l.style("display","inline")}}));a.append("option").text("median (group=2)").property("median",1);a.append("option").text("quartile (group=4)").property("quartile",1);const l=n.append("span").style("margin-left","10px");l.append("span").html("Compare each quartile against&nbsp;").style("opacity",.5);{const t=l.append("select").on("change",(t=>{delete e.samplerule.set.against1st;delete e.samplerule.set.against4th;switch(t.target.selectedIndex){case 0:break;case 1:e.samplerule.set.against1st=1;break;case 2:e.samplerule.set.against4th=1;break}}));t.append("option").text("none");t.append("option").text("first quartile");t.append("option").text("fourth quartile");if(s.against1st){t.node().selectedIndex=1}else if(t.against4th){t.node().selectedIndex=2}}if(s.bymedian){a.node().selectedIndex=0;l.style("display","none")}else if(s.byquartile){a.node().selectedIndex=1;l.style("display","inline")}}if(s.mutation){e.mutation_count={};if(s.snvindel){const n=t.append("div").style("margin-bottom","20px");e.mutation_count.snvindel=n.append("span");if(s.snvindel.name){n.append("span").html("SNV/indel&nbsp;");const e=n.append("select");e.append("option").text(s.snvindel.name).property("named",1);e.append("option").text("any mutation at "+s.chr+":"+s.start)}else{n.append("span").text("SNV/indel at "+s.chr+":"+(s.start==s.stop?s.start:s.start+"-"+s.stop))}}if(s.cnv){const n=t.append("div").style("margin-bottom","20px");e.mutation_count.cnv=n.append("span");n.append("span").html("Copy number variation over "+s.chr+":"+s.start+"-"+s.stop+' <span style="font-size:.7em">'+a(s.stop-s.start)+"</span>&nbsp;")}if(s.loh){const n=t.append("div").style("margin-bottom","20px");e.mutation_count.loh=n.append("span");n.append("span").html("LOH over "+s.chr+":"+s.start+"-"+s.stop+' <span style="font-size:.7em">'+a(s.stop-s.start)+"</span>&nbsp;")}if(s.sv){const n=t.append("div").style("margin-bottom","20px");e.mutation_count.sv=n.append("span");n.append("span").html("SV at "+s.chr+":"+(s.start==s.stop?s.start:s.start+"-"+s.stop)+"&nbsp;")}if(s.fusion){const n=t.append("div").style("margin-bottom","20px");e.mutation_count.fusion=n.append("span");n.append("span").html("Fusion at "+s.chr+":"+(s.start==s.stop?s.start:s.start+"-"+s.stop)+"&nbsp;")}if(s.itd){const n=t.append("div").style("margin-bottom","20px");e.mutation_count.itd=n.append("span");n.append("span").html("ITD over "+s.chr+":"+s.start+"-"+s.stop+' <span style="font-size:.7em">'+a(s.stop-s.start)+"</span>&nbsp;")}}}function v(e,t){let s=t.selectAll("div").size();if(s)return;const n=t.append("div").style("margin-bottom","10px");const a=n.append("div").style("margin-left","20px");a.append("div").style("vertical-align","top").style("display","inline-block").style("opacity",.5).html("Enter sample names<br>(one sample per line) &nbsp;");const l=a.append("textarea").style("display","inline-block").attr("cols","20").attr("rows","10").on("change",(()=>{let t=e.samplerule.full.sampleset=[];const s=l.property("value").trim();if(!s)return;for(const e of s.split("\n")){t.push(e)}}))}export{c as init};
@@ -0,0 +1 @@
1
+ import{_ as n}from"./tslib.es6-c3c2d88f.js";import{P as e}from"./app-488d9fd6.js";function i(n){switch(n){case"./numeric.binary.ts":return import("./numeric.binary-da92d665.js");case"./numeric.continuous.ts":return import("./numeric.continuous-92d1dea8.js");case"./numeric.discrete.ts":return import("./numeric.discrete-cd8f09b1.js");case"./numeric.spline.ts":return import("./numeric.spline-9a9987b6.js");case"./numeric.toggle.ts":return import("./numeric.toggle-8f68f077.js");default:return new Promise((function(e,i){(typeof queueMicrotask==="function"?queueMicrotask:setTimeout)(i.bind(null,new Error("Unknown variable dynamic import: "+n)))}))}}function t(e){return n(this,void 0,void 0,(function*(){const n=e.opts.numericEditMenuVersion;const i=n.length>1?"toggle":n[0];const t=yield o(i);return yield t.getHandler(e)}))}function r(i,t,r=null){var o;return n(this,void 0,void 0,(function*(){if(!((o=i.q)===null||o===void 0?void 0:o.mode))i.q={mode:"continuous"};if(r)e(i.q,r);if(i.q.mode!="continuous"&&!i.term.bins){yield t.setTermBins(i)}return i}))}function o(e){return n(this,void 0,void 0,(function*(){try{return yield i(`./numeric.${e}.ts`)}catch(n){if(n.stack)console.log(n.stack);throw`Type numeric.${e} does not exist [handlers/numeric.ts importSubtype()]`}}))}export{r as fillTW,t as getHandler};
@@ -0,0 +1 @@
1
+ import{j as t}from"./termsetting-c12f1c69.js";function n(n){const o=n.sort(((t,n)=>t-n));const s=Math.abs(o[0]-o[o.length-1]);const r=t(s);const c=s>=10?0:s>=1?1:r+2;return n.map((t=>Number(t.toFixed(c))))}export{n};
@@ -1 +1 @@
1
- import{d as e}from"./app-3d14cbe4.js";const t={passive:false};const n={capture:true,passive:false};function s(e){e.stopImmediatePropagation()}function a(e){e.preventDefault();e.stopImmediatePropagation()}function o(t){var s=t.document.documentElement,o=e(t).on("dragstart.drag",a,n);if("onselectstart"in s){o.on("selectstart.drag",a,n)}else{s.__noselect=s.style.MozUserSelect;s.style.MozUserSelect="none"}}function l(t,s){var o=t.document.documentElement,l=e(t).on("dragstart.drag",null);if(s){l.on("click.drag",a,n);setTimeout((function(){l.on("click.drag",null)}),0)}if("onselectstart"in o){l.on("selectstart.drag",null)}else{o.style.MozUserSelect=o.__noselect;delete o.__noselect}}export{n as a,s as b,a as c,o as d,t as n,l as y};
1
+ import{d as e}from"./app-488d9fd6.js";const t={passive:false};const n={capture:true,passive:false};function s(e){e.stopImmediatePropagation()}function a(e){e.preventDefault();e.stopImmediatePropagation()}function o(t){var s=t.document.documentElement,o=e(t).on("dragstart.drag",a,n);if("onselectstart"in s){o.on("selectstart.drag",a,n)}else{s.__noselect=s.style.MozUserSelect;s.style.MozUserSelect="none"}}function l(t,s){var o=t.document.documentElement,l=e(t).on("dragstart.drag",null);if(s){l.on("click.drag",a,n);setTimeout((function(){l.on("click.drag",null)}),0)}if("onselectstart"in o){l.on("selectstart.drag",null)}else{o.style.MozUserSelect=o.__noselect;delete o.__noselect}}export{n as a,s as b,a as c,o as d,t as n,l as y};
@@ -1 +1 @@
1
- import{d as e}from"./app-3d14cbe4.js";const t=e("body").append("div").style("position","fixed").style("top",`16px`).style("right","10px").style("font-size","1.2em").style("background-color","rgba(250, 250, 250, 0.75)").style("z-index",1e4);let o,i=0;const s=sessionStorage.getItem("hostURL")||window.testHost||"";const n=s.endsWith("/")?`${s}sse`:`${s}/sse`;a();function a(){o=new EventSource(n);let s=0;o.onmessage=o=>{if(i===0)i=o.timeStamp;if(s===0)s=o.timeStamp;const n=JSON.parse(o.data);if(o.timeStamp>s&&n.find((e=>e.reload)));const a=n;const r=t.selectAll(`:scope>div`).data(a,(e=>e.key));r.exit().remove();r.style("color",(e=>e.color||(e.status=="ok"?"green":"red"))).style("border",(e=>`1px solid ${e.color||"#000"}`)).html((e=>`${e.key}: ${e.message}`)).each((function(t){if(t.reload&&o.timeStamp>s)window.location.reload();else if(t.duration){setTimeout((()=>e(this).transition().duration(t.duration).style("opacity",0).remove()),t.duration)}}));r.enter().append("div").style("margin","5px").style("padding","5px").style("border",(e=>`1px solid ${e.color||"#000"}`)).style("color",(e=>e.color||(e.status=="ok"?"green":"red"))).html((e=>`${e.key}: ${e.message}`)).on("click",(function(){})).each((function(t){if(t.reload&&o.timeStamp>s)window.location.reload();else if(t.duration){setTimeout((()=>e(this).transition().duration(t.duration).style("opacity",0).remove()),t.duration)}}))};o.onerror=e=>console.log(e)}document.addEventListener("visibilitychange",(()=>{if(document.hidden)o.close();else if(!o||o.readyState===2)a()}));
1
+ import{d as e}from"./app-488d9fd6.js";const t=e("body").append("div").style("position","fixed").style("top",`16px`).style("right","10px").style("font-size","1.2em").style("background-color","rgba(250, 250, 250, 0.75)").style("z-index",1e4);let o,i=0;const s=sessionStorage.getItem("hostURL")||window.testHost||"";const n=s.endsWith("/")?`${s}sse`:`${s}/sse`;a();function a(){o=new EventSource(n);let s=0;o.onmessage=o=>{if(i===0)i=o.timeStamp;if(s===0)s=o.timeStamp;const n=JSON.parse(o.data);if(o.timeStamp>s&&n.find((e=>e.reload)));const a=n;const r=t.selectAll(`:scope>div`).data(a,(e=>e.key));r.exit().remove();r.style("color",(e=>e.color||(e.status=="ok"?"green":"red"))).style("border",(e=>`1px solid ${e.color||"#000"}`)).html((e=>`${e.key}: ${e.message}`)).each((function(t){if(t.reload&&o.timeStamp>s)window.location.reload();else if(t.duration){setTimeout((()=>e(this).transition().duration(t.duration).style("opacity",0).remove()),t.duration)}}));r.enter().append("div").style("margin","5px").style("padding","5px").style("border",(e=>`1px solid ${e.color||"#000"}`)).style("color",(e=>e.color||(e.status=="ok"?"green":"red"))).html((e=>`${e.key}: ${e.message}`)).on("click",(function(){})).each((function(t){if(t.reload&&o.timeStamp>s)window.location.reload();else if(t.duration){setTimeout((()=>e(this).transition().duration(t.duration).style("opacity",0).remove()),t.duration)}}))};o.onerror=e=>console.log(e)}document.addEventListener("visibilitychange",(()=>{if(document.hidden)o.close();else if(!o||o.readyState===2)a()}));
@@ -1 +1 @@
1
- import{_ as e}from"./tslib.es6-c3c2d88f.js";function t(e){switch(e){case"./numeric.binary.ts":return import("./numeric.binary-88bf9e0d.js");case"./numeric.continuous.ts":return import("./numeric.continuous-d27197cf.js");case"./numeric.discrete.ts":return import("./numeric.discrete-b826f33b.js");case"./numeric.spline.ts":return import("./numeric.spline-b3968b77.js");case"./numeric.toggle.ts":return import("./numeric.toggle-ab8b79be.js");default:return new Promise((function(t,n){(typeof queueMicrotask==="function"?queueMicrotask:setTimeout)(n.bind(null,new Error("Unknown variable dynamic import: "+e)))}))}}function n(t){return e(this,void 0,void 0,(function*(){const e=t.opts.numericEditMenuVersion;const n=e.length>1?"toggle":e[0];const i=yield r(n);return yield i.getHandler(t)}))}function i(t,n,i=null){return e(this,void 0,void 0,(function*(){if(!t.q.mode){if(!i||i.mode)t.q.mode="discrete"}const e=t.term.type=="float"||t.term.type=="integer"?"toggle":t.q.mode;const o=yield r(e);return yield o.fillTW(t,n,i)}))}function r(n){return e(this,void 0,void 0,(function*(){try{return yield t(`./numeric.${n}.ts`)}catch(e){if(e.stack)console.log(e.stack);throw`Type numeric.${n} does not exist [handlers/numeric.ts importSubtype()]`}}))}export{i as fillTW,n as getHandler};
1
+ import{_ as e}from"./tslib.es6-c3c2d88f.js";function t(e){switch(e){case"./numeric.binary.ts":return import("./numeric.binary-da92d665.js");case"./numeric.continuous.ts":return import("./numeric.continuous-92d1dea8.js");case"./numeric.discrete.ts":return import("./numeric.discrete-cd8f09b1.js");case"./numeric.spline.ts":return import("./numeric.spline-9a9987b6.js");case"./numeric.toggle.ts":return import("./numeric.toggle-8f68f077.js");default:return new Promise((function(t,n){(typeof queueMicrotask==="function"?queueMicrotask:setTimeout)(n.bind(null,new Error("Unknown variable dynamic import: "+e)))}))}}function n(t){return e(this,void 0,void 0,(function*(){const e=t.opts.numericEditMenuVersion;const n=e.length>1?"toggle":e[0];const i=yield r(n);return yield i.getHandler(t)}))}function i(t,n,i=null){return e(this,void 0,void 0,(function*(){if(!t.q.mode){if(!i||i.mode)t.q.mode="discrete"}const e=t.term.type=="float"||t.term.type=="integer"?"toggle":t.q.mode;const o=yield r(e);return yield o.fillTW(t,n,i)}))}function r(n){return e(this,void 0,void 0,(function*(){try{return yield t(`./numeric.${n}.ts`)}catch(e){if(e.stack)console.log(e.stack);throw`Type numeric.${n} does not exist [handlers/numeric.ts importSubtype()]`}}))}export{i as fillTW,n as getHandler};
@@ -1 +1 @@
1
- import{_ as e}from"./tslib.es6-c3c2d88f.js";import{setDensityPlot as t}from"./density-e0aff1d0.js";import{renderBoundaryInclusionInput as i,renderBoundaryInputDivs as n}from"./numeric.discrete-b826f33b.js";import{g as o,a as r}from"./termdb.bins-a60aaa77.js";import{m as d}from"./checkbox-96437f4d.js";import{o as s}from"./termsetting-7467350f.js";import{convertViolinData as a}from"./tvs.numeric-d9108473.js";import{v as l}from"./violinRenderer-7f46e468.js";import"./app-3d14cbe4.js";import"./drag-e11d6644.js";import"./nodrag-f6c0801c.js";import"./pointer-c7475677.js";import"./toggleButtons-2144daab.js";import"./radiobutton-09bff425.js";import"path";import"./tvs.density-060d3006.js";import"./brush-06989a5e.js";import"./niceNumLabels-ef07b7ad.js";import"./axis-747c801e.js";import"./line-264f8f9e.js";import"./constant-426a1483.js";import"./basis-3870f5ba.js";function u(o){return{getPillName(e){return s(o,e)},getPillStatus(){var e;return{text:((e=o.usecase)===null||e===void 0?void 0:e.target)=="regression"?o.data.q.lst.find((e=>e.label!=o.data.refGrp)).label:"binary"}},showEditMenu(r){var d,s,f,y;return e(this,void 0,void 0,(function*(){o.num_obj={};o.num_obj.plot_size={width:500,height:100,xpad:10,ypad:20};r.selectAll("*").remove();r.append("div").style("padding","10px").style("text-align","center").html("Getting distribution data ...<br/>");const v=yield o.vocabApi.getViolinPlotData({tw:{term:o.term,q:o.q},filter:o.filter,filter0:(s=(d=o.vocabApi.state)===null||d===void 0?void 0:d.termfilter)===null||s===void 0?void 0:s.filter0,svgw:o.num_obj.plot_size.width/window.devicePixelRatio},(y=(f=o.opts).getBodyParams)===null||y===void 0?void 0:y.call(f));o.num_obj.density_data=a(v);o.dom.num_holder=r;r.selectAll("*").remove();o.dom.density_div=r.append("div");o.vr=new l(o.dom.density_div,o.num_obj.density_data,o.num_obj.plot_size.width,o.num_obj.plot_size.height);o.num_obj.svg=o.vr.svg;o.dom.bins_div=r.append("div").style("padding","4px");m(o);t(o);i(o);o.dom.cutoff_div=o.dom.bins_div.append("div").style("margin","10px");p(o);o.dom.bins_table=o.dom.bins_div.append("div").style("display","flex").style("color","rgb(136, 136, 136)").style("margin","10px").style("width","100%");o.dom.rangeAndLabelDiv=o.dom.bins_table.append("div");n(o,o.q.lst);const b=r.append("div").style("padding","3px 10px");b.append("button").style("margin","5px").html("Apply").on("click",(()=>e(this,void 0,void 0,(function*(){delete o.q.startinclusive;delete o.q.stopinclusive;delete o.q.bin_size;delete o.q.first_bin;delete o.q.last_bin;o.q.lst=c(o);o.numqByTermIdModeType[o.term.id].binary=JSON.parse(JSON.stringify(o.q));o.q.mode="binary";o.runCallback()}))));b.append("button").style("margin","5px").html("Reset").on("click",(()=>{o.q={};delete o.numqByTermIdModeType[o.term.id];u(o).showEditMenu(o.dom.num_holder)}))}))}}}function m(e){const t=e.num_obj.density_data;const i=e.q&&e.q.lst&&e.q.lst.length?e.q.lst[0].stop:undefined;const n=e.numqByTermIdModeType;if(!e.term)throw`Missing .term{} [numeric.binary, setqDefaults()]`;const d=e.term;if(!n[d.id])n[d.id]={};if(!n[d.id].binary){const o=i!==undefined?Number(i):t.maxvalue!=t.minvalue?t.minvalue+(t.maxvalue-t.minvalue)/2:t.maxvalue;n[d.id].binary={mode:"binary",type:"custom-bin",modeBinaryCutoffType:"normal",modeBinaryCutoffPercentile:50,lst:[{startunbounded:true,stopinclusive:true,stop:o.toFixed(e.term.type=="integer"?0:2)},{stopunbounded:true,start:o.toFixed(e.term.type=="integer"?0:2)}]}}if(!e.q||e.q.mode!=="binary")e.q={};const s=JSON.parse(JSON.stringify(n[d.id].binary));e.q=Object.assign(s,e.q);if(e.q.lst){e.q.lst.forEach((t=>{if(!("label"in t))t.label=o(t,e.q);if(!("range"in t))t.range=r(t,e.q)}))}}function p(i){return e(this,void 0,void 0,(function*(){i.dom.cutoff_div.append("span").style("margin-right","5px").style("opacity",.5).text("Boundary value");i.dom.customBinBoundaryInput=i.dom.cutoff_div.append("input").style("width","100px").attr("type","number").style("margin-right","10px").attr("value",i.q.modeBinaryCutoffType=="normal"?i.q.lst[0].stop:i.q.modeBinaryCutoffPercentile).on("change",s);i.dom.customBinBoundaryPercentileCheckbox=d({holder:i.dom.cutoff_div,labeltext:"Use percentile",checked:i.q.modeBinaryCutoffType=="percentile",divstyle:{display:"inline-block"},callback:l});function s(){return e(this,void 0,void 0,(function*(){const e=+this.value;if(i.q.modeBinaryCutoffType=="normal"){a(e)}else if(i.q.modeBinaryCutoffType=="percentile"){if(e<1||e>99){window.alert("Invalid percentile value: enter integer between 1 and 99");return}i.q.modeBinaryCutoffPercentile=e;yield u()}else{throw"invalid modeBinaryCutoffType value"}}))}function a(e){i.q.lst[0].stop=e;i.q.lst[1].start=e;i.q.lst.forEach((e=>{e.label=o(e,i.q);e.range=r(e,i.q)}));if(!i.num_obj)throw`Missing density data [numeric.binary updateUI()]`;t(i);n(i,i.q.lst)}function l(){return e(this,void 0,void 0,(function*(){i.q.modeBinaryCutoffType=i.q.modeBinaryCutoffType=="percentile"?"normal":"percentile";if(i.q.modeBinaryCutoffType=="normal"){const e=i.q.lst[0].stop;i.dom.customBinBoundaryInput.property("value",e);a(e)}else if(i.q.modeBinaryCutoffType=="percentile"){i.dom.customBinBoundaryInput.property("value",i.q.modeBinaryCutoffPercentile);yield u()}else{throw"invalid modeBinaryCutoffType value"}}))}function u(){return e(this,void 0,void 0,(function*(){const e=yield i.opts.vocabApi.getPercentile(i.term.id,[i.q.modeBinaryCutoffPercentile],i.filter);a(e.values[0])}))}}))}function c(e){const t=e.dom.boundaryInput.property("value")=="startinclusive";const i=e.dom.boundaryInput.property("value")=="stopinclusive";const n=e.dom.bins_table.node().querySelectorAll("input");const r=e.q.lst[0].stop;const d=[{startunbounded:true,stop:r,startinclusive:t,stopinclusive:i},{start:r,startinclusive:t,stopinclusive:i,stopunbounded:true}];d.forEach(((t,i)=>{const r=n[i].value;t.label=r?r:o(t,e.q)}));return d}export{u as getHandler};
1
+ import{_ as e}from"./tslib.es6-c3c2d88f.js";import{setDensityPlot as t}from"./density-e023c28f.js";import{renderBoundaryInclusionInput as i,renderBoundaryInputDivs as n}from"./numeric.discrete-cd8f09b1.js";import{g as o,a as r}from"./termdb.bins-06fd21c1.js";import{m as d}from"./checkbox-96437f4d.js";import{o as s}from"./termsetting-c12f1c69.js";import{convertViolinData as a}from"./tvs.numeric-86aacc82.js";import{v as l}from"./violinRenderer-24abe5fd.js";import"./app-488d9fd6.js";import"./drag-1b98e43e.js";import"./nodrag-b2866dd8.js";import"./pointer-c7475677.js";import"./toggleButtons-bb9aca2f.js";import"./radiobutton-09bff425.js";import"path";import"./tvs.density-064e5767.js";import"./brush-1a123226.js";import"./niceNumLabels-621ef5c3.js";import"./axis-747c801e.js";import"./line-264f8f9e.js";import"./constant-426a1483.js";import"./basis-3870f5ba.js";function u(o){return{getPillName(e){return s(o,e)},getPillStatus(){var e;return{text:((e=o.usecase)===null||e===void 0?void 0:e.target)=="regression"?o.data.q.lst.find((e=>e.label!=o.data.refGrp)).label:"binary"}},showEditMenu(r){var d,s,f,y;return e(this,void 0,void 0,(function*(){o.num_obj={};o.num_obj.plot_size={width:500,height:100,xpad:10,ypad:20};r.selectAll("*").remove();r.append("div").style("padding","10px").style("text-align","center").html("Getting distribution data ...<br/>");const v=yield o.vocabApi.getViolinPlotData({tw:{term:o.term,q:o.q},filter:o.filter,filter0:(s=(d=o.vocabApi.state)===null||d===void 0?void 0:d.termfilter)===null||s===void 0?void 0:s.filter0,svgw:o.num_obj.plot_size.width/window.devicePixelRatio},(y=(f=o.opts).getBodyParams)===null||y===void 0?void 0:y.call(f));o.num_obj.density_data=a(v);o.dom.num_holder=r;r.selectAll("*").remove();o.dom.density_div=r.append("div");o.vr=new l(o.dom.density_div,o.num_obj.density_data,o.num_obj.plot_size.width,o.num_obj.plot_size.height);o.num_obj.svg=o.vr.svg;o.dom.bins_div=r.append("div").style("padding","4px");m(o);t(o);i(o);o.dom.cutoff_div=o.dom.bins_div.append("div").style("margin","10px");p(o);o.dom.bins_table=o.dom.bins_div.append("div").style("display","flex").style("color","rgb(136, 136, 136)").style("margin","10px").style("width","100%");o.dom.rangeAndLabelDiv=o.dom.bins_table.append("div");n(o,o.q.lst);const b=r.append("div").style("padding","3px 10px");b.append("button").style("margin","5px").html("Apply").on("click",(()=>e(this,void 0,void 0,(function*(){delete o.q.startinclusive;delete o.q.stopinclusive;delete o.q.bin_size;delete o.q.first_bin;delete o.q.last_bin;o.q.lst=c(o);o.numqByTermIdModeType[o.term.id].binary=JSON.parse(JSON.stringify(o.q));o.q.mode="binary";o.runCallback()}))));b.append("button").style("margin","5px").html("Reset").on("click",(()=>{o.q={};delete o.numqByTermIdModeType[o.term.id];u(o).showEditMenu(o.dom.num_holder)}))}))}}}function m(e){const t=e.num_obj.density_data;const i=e.q&&e.q.lst&&e.q.lst.length?e.q.lst[0].stop:undefined;const n=e.numqByTermIdModeType;if(!e.term)throw`Missing .term{} [numeric.binary, setqDefaults()]`;const d=e.term;if(!n[d.id])n[d.id]={};if(!n[d.id].binary){const o=i!==undefined?Number(i):t.maxvalue!=t.minvalue?t.minvalue+(t.maxvalue-t.minvalue)/2:t.maxvalue;n[d.id].binary={mode:"binary",type:"custom-bin",modeBinaryCutoffType:"normal",modeBinaryCutoffPercentile:50,lst:[{startunbounded:true,stopinclusive:true,stop:o.toFixed(e.term.type=="integer"?0:2)},{stopunbounded:true,start:o.toFixed(e.term.type=="integer"?0:2)}]}}if(!e.q||e.q.mode!=="binary")e.q={};const s=JSON.parse(JSON.stringify(n[d.id].binary));e.q=Object.assign(s,e.q);if(e.q.lst){e.q.lst.forEach((t=>{if(!("label"in t))t.label=o(t,e.q);if(!("range"in t))t.range=r(t,e.q)}))}}function p(i){return e(this,void 0,void 0,(function*(){i.dom.cutoff_div.append("span").style("margin-right","5px").style("opacity",.5).text("Boundary value");i.dom.customBinBoundaryInput=i.dom.cutoff_div.append("input").style("width","100px").attr("type","number").style("margin-right","10px").attr("value",i.q.modeBinaryCutoffType=="normal"?i.q.lst[0].stop:i.q.modeBinaryCutoffPercentile).on("change",s);i.dom.customBinBoundaryPercentileCheckbox=d({holder:i.dom.cutoff_div,labeltext:"Use percentile",checked:i.q.modeBinaryCutoffType=="percentile",divstyle:{display:"inline-block"},callback:l});function s(){return e(this,void 0,void 0,(function*(){const e=+this.value;if(i.q.modeBinaryCutoffType=="normal"){a(e)}else if(i.q.modeBinaryCutoffType=="percentile"){if(e<1||e>99){window.alert("Invalid percentile value: enter integer between 1 and 99");return}i.q.modeBinaryCutoffPercentile=e;yield u()}else{throw"invalid modeBinaryCutoffType value"}}))}function a(e){i.q.lst[0].stop=e;i.q.lst[1].start=e;i.q.lst.forEach((e=>{e.label=o(e,i.q);e.range=r(e,i.q)}));if(!i.num_obj)throw`Missing density data [numeric.binary updateUI()]`;t(i);n(i,i.q.lst)}function l(){return e(this,void 0,void 0,(function*(){i.q.modeBinaryCutoffType=i.q.modeBinaryCutoffType=="percentile"?"normal":"percentile";if(i.q.modeBinaryCutoffType=="normal"){const e=i.q.lst[0].stop;i.dom.customBinBoundaryInput.property("value",e);a(e)}else if(i.q.modeBinaryCutoffType=="percentile"){i.dom.customBinBoundaryInput.property("value",i.q.modeBinaryCutoffPercentile);yield u()}else{throw"invalid modeBinaryCutoffType value"}}))}function u(){return e(this,void 0,void 0,(function*(){const e=yield i.opts.vocabApi.getPercentile(i.term.id,[i.q.modeBinaryCutoffPercentile],i.filter);a(e.values[0])}))}}))}function c(e){const t=e.dom.boundaryInput.property("value")=="startinclusive";const i=e.dom.boundaryInput.property("value")=="stopinclusive";const n=e.dom.bins_table.node().querySelectorAll("input");const r=e.q.lst[0].stop;const d=[{startunbounded:true,stop:r,startinclusive:t,stopinclusive:i},{start:r,startinclusive:t,stopinclusive:i,stopunbounded:true}];d.forEach(((t,i)=>{const r=n[i].value;t.label=r?r:o(t,e.q)}));return d}export{u as getHandler};
@@ -0,0 +1 @@
1
+ import{_ as t}from"./tslib.es6-c3c2d88f.js";import{o as e}from"./termsetting-c12f1c69.js";import{convertViolinData as i}from"./tvs.numeric-86aacc82.js";import{v as o}from"./violinRenderer-24abe5fd.js";import{m as l}from"./checkbox-96437f4d.js";import"./app-488d9fd6.js";import"path";import"./tvs.density-064e5767.js";import"./brush-1a123226.js";import"./pointer-c7475677.js";import"./nodrag-b2866dd8.js";import"./niceNumLabels-621ef5c3.js";import"./axis-747c801e.js";import"./line-264f8f9e.js";import"./constant-426a1483.js";import"./basis-3870f5ba.js";function n(n){return{getPillName(t){return e(n,t)},getPillStatus(){return{text:"continuous"}},showEditMenu(e){var a,r,p,d,c;return t(this,void 0,void 0,(function*(){s(n);e.style("padding","5px").selectAll("*").remove();const t=e.append("div");const m={width:500,height:100,xpad:10,ypad:20};const u=yield n.vocabApi.getViolinPlotData({tw:{term:n.term,q:n.q},filter:n.filter,filter0:(r=(a=n.vocabApi.state)===null||a===void 0?void 0:a.termfilter)===null||r===void 0?void 0:r.filter0,svgw:m.width/window.devicePixelRatio},(d=(p=n.opts).getBodyParams)===null||d===void 0?void 0:d.call(p));const v=i(u);const f=new o(t,v,m.width,m.height);f.render();let h;if(((c=n.usecase)===null||c===void 0?void 0:c.target)=="matrix"){h=l({holder:e,labeltext:"Convert to z-score",checked:n.q.convert2ZScore?true:false,divstyle:{display:"inline-block",padding:"3px 10px"},callback:t=>{n.q.convert2ZScore=t;if(t){g.property("value",1);delete n.q.scale}}})}const y=e.append("div").style("display","inline-block");y.append("div").style("display","inline-block").style("padding","3px 10px").html("Scale values");const g=y.append("select").on("change",(t=>{if(!n.q)throw`Missing .q{} [numeric.continuous getHandler()]`;if(t.target.value!="1"){if(h)h.property("checked",false);n.q.scale=Number(t.target.value)}else delete n.q.scale}));g.selectAll("option").data([{html:"No Scaling",value:1},{html:"Per 10",value:10},{html:"Per 100",value:100},{html:"Per 1000",value:1e3}]).enter().append("option").attr("value",(t=>t.value)).html((t=>t.html)).property("selected",(t=>"scale"in n.q&&t.value==n.q.scale));const x=e.append("div").style("padding","3px 10px");if(n.term.type=="survival"){x.append("div").style("font-size",".8em").style("margin","20px 5px 5px 5px").html(`\n\t\t\t\t\t\tDisplay survival outcomes as time to event (${n.term.unit})\n\t\t\t\t\t`)}x.append("button").style("margin","5px").html("Apply").on("click",(()=>{n.q.mode="continuous";n.runCallback()}))}))}}}function s(t){const e=t.numqByTermIdModeType;const i=t.term;if(!e[i.id])e[i.id]={};if(!e[i.id].continuous){e[i.id].continuous={mode:"continuous"}}const o=JSON.parse(JSON.stringify(e[i.id].continuous));t.q=Object.assign(o,t.q)}export{n as getHandler};