@sjcrh/proteinpaint-client 2.74.2 → 2.76.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 (307) hide show
  1. package/dist/{2dmaf-b2d78c57.js → 2dmaf-74b99126.js} +1 -1
  2. package/dist/AppHeader-cecb39c2.js +1 -0
  3. package/dist/{ColorScale-9c76aef3.js → ColorScale-21cab8d2.js} +1 -1
  4. package/dist/DEanalysis-95bad59a.js +1 -0
  5. package/dist/Disco-a6e921a0.js +1 -0
  6. package/dist/Disco.UI-9ad999ed.js +1 -0
  7. package/dist/{DragControls-586f72db.js → DragControls-e3b6a937.js} +1 -1
  8. package/dist/{DziViewer-6311327c.js → DziViewer-354a790d.js} +1 -1
  9. package/dist/FilterRxComp-701a1480.js +1 -0
  10. package/dist/{FilterStateless-046081c2.js → FilterStateless-54c0b763.js} +1 -1
  11. package/dist/{HicApp-40e44cba.js → HicApp-d5a946bf.js} +1 -1
  12. package/dist/{OrbitControls-0cda1772.js → OrbitControls-694652cd.js} +1 -1
  13. package/dist/WSIViewer-dc7f8eb0.js +1 -0
  14. package/dist/adSandbox-f438e388.js +1 -0
  15. package/dist/app-3320ab6f.js +1 -0
  16. package/dist/app-649f8357.js +1 -0
  17. package/dist/app-b369b169.js +1 -0
  18. package/dist/app.js +1 -1
  19. package/dist/bam-431875ef.js +1 -0
  20. package/dist/barchart-8277ed43.js +1 -0
  21. package/dist/barchart.events-da29c90d.js +1 -0
  22. package/dist/{bars.renderer-5f7a4174.js → bars.renderer-dcfdd59b.js} +1 -1
  23. package/dist/block-6aedd569.js +1 -0
  24. package/dist/block.lazyload-87b12654.js +1 -0
  25. package/dist/block.legend-d3f61ef7.js +1 -0
  26. package/dist/{block.mds-effc078d.js → block.mds-3ad17dfa.js} +1 -1
  27. package/dist/{block.mds.cnv-ec861a26.js → block.mds.cnv-857ba868.js} +1 -1
  28. package/dist/{block.mds.expressionrank-a2ad7c80.js → block.mds.expressionrank-7e3b208c.js} +1 -1
  29. package/dist/{block.mds.expressionstat-31dc5595.js → block.mds.expressionstat-f2d31c86.js} +1 -1
  30. package/dist/{block.mds.geneboxplot-3ca857ce.js → block.mds.geneboxplot-f0fbaf12.js} +1 -1
  31. package/dist/{block.mds.junction-debba938.js → block.mds.junction-7f87f48f.js} +1 -1
  32. package/dist/{block.mds.svcnv-8dc5abdf.js → block.mds.svcnv-ac035c12.js} +1 -1
  33. package/dist/{block.mds.svcnv.share-81e62600.js → block.mds.svcnv.share-886d9479.js} +1 -1
  34. package/dist/block.mds2-7852c1ee.js +1 -0
  35. package/dist/{block.svg-9121e8e7.js → block.svg-9b916fa6.js} +1 -1
  36. package/dist/{block.tk.aicheck-c1b478e9.js → block.tk.aicheck-6770e333.js} +1 -1
  37. package/dist/{block.tk.ase-0f6ded48.js → block.tk.ase-ee807e59.js} +1 -1
  38. package/dist/{block.tk.bam-7cd06aee.js → block.tk.bam-00fba6e8.js} +1 -1
  39. package/dist/{block.tk.bedgraphdot-3ef8b94e.js → block.tk.bedgraphdot-7fda78e9.js} +1 -1
  40. package/dist/{block.tk.bigwig.ui-d1248810.js → block.tk.bigwig.ui-cc1a42f3.js} +1 -1
  41. package/dist/{block.tk.hicstraw-ee731e55.js → block.tk.hicstraw-526470e3.js} +1 -1
  42. package/dist/{block.tk.junction-4d8cab4d.js → block.tk.junction-b43a4cda.js} +1 -1
  43. package/dist/{block.tk.junction.textmatrixui-a6430b27.js → block.tk.junction.textmatrixui-a60ed78a.js} +1 -1
  44. package/dist/{block.tk.ld-8429a18b.js → block.tk.ld-d15bde41.js} +1 -1
  45. package/dist/{block.tk.menu-3f31f958.js → block.tk.menu-3aeb93c6.js} +1 -1
  46. package/dist/{block.tk.pgv-07e46705.js → block.tk.pgv-9af2bd64.js} +1 -1
  47. package/dist/boxplot-e17a17b7.js +1 -0
  48. package/dist/brainImaging-bf2ceee9.js +1 -0
  49. package/dist/{brush-c386fe3d.js → brush-aa175142.js} +1 -1
  50. package/dist/categorical-a52014a1.js +1 -0
  51. package/dist/condition-c646e357.js +1 -0
  52. package/dist/controls-287e6efa.js +1 -0
  53. package/dist/{controls.btns-1cb2bfab.js → controls.btns-79b805dd.js} +1 -1
  54. package/dist/controls.config-28d6d6a8.js +1 -0
  55. package/dist/cuminc-9e275854.js +1 -0
  56. package/dist/{customdata.inputui-cbd712ea.js → customdata.inputui-dc49d94b.js} +1 -1
  57. package/dist/dataDownload-3a3d4f33.js +1 -0
  58. package/dist/databrowser.ui-d8d3f8fd.js +1 -0
  59. package/dist/{density-19266ebf.js → density-a82a8b1c.js} +1 -1
  60. package/dist/dictionary-c5a19d90.js +1 -0
  61. package/dist/{drag-0b968811.js → drag-7b30ba17.js} +1 -1
  62. package/dist/{e2pca-b8752945.js → e2pca-82765817.js} +1 -1
  63. package/dist/{ep-a86b185a.js → ep-d017ec2f.js} +1 -1
  64. package/dist/facet-a9b44ef3.js +1 -0
  65. package/dist/{fusion.parse-244b2b97.js → fusion.parse-d40d0b9d.js} +1 -1
  66. package/dist/geneExpClustering-34c3f518.js +1 -0
  67. package/dist/geneExpression-0d1b7244.js +1 -0
  68. package/dist/{geneExpression-e0430f2e.js → geneExpression-589f485b.js} +1 -1
  69. package/dist/{geneExpression-387205bf.js → geneExpression-7d14983f.js} +1 -1
  70. package/dist/geneORA-903a780f.js +1 -0
  71. package/dist/{geneVariant-7de021b6.js → geneVariant-89601b34.js} +1 -1
  72. package/dist/geneVariant-92c4e870.js +1 -0
  73. package/dist/{genefusion.ui-a331de19.js → genefusion.ui-7e22e811.js} +1 -1
  74. package/dist/{genesearch-ea59f5d4.js → genesearch-a4e19f0d.js} +1 -1
  75. package/dist/geneset-108a39d2.js +1 -0
  76. package/dist/genomeBrowser-12f86a36.js +1 -0
  77. package/dist/genomeBrowser.controls-d5067811.js +1 -0
  78. package/dist/{groupsetting-20ffef77.js → groupsetting-b4416a96.js} +1 -1
  79. package/dist/gsea-543dab25.js +1 -0
  80. package/dist/hierCluster-26e14090.js +1 -0
  81. package/dist/hierCluster.config-98e82dff.js +1 -0
  82. package/dist/{hierCluster.interactivity-9b433033.js → hierCluster.interactivity-e56f6542.js} +1 -1
  83. package/dist/hierCluster.renderers-74a64cf5.js +1 -0
  84. package/dist/{html.legend-abb5452e.js → html.legend-a3f4ebfe.js} +1 -1
  85. package/dist/imagePlot-b9eae4ae.js +1 -0
  86. package/dist/{lasso-55cf4057.js → lasso-f767f634.js} +1 -1
  87. package/dist/launch.adhoc-abca6af3.js +1 -0
  88. package/dist/leftlabel.sample-24c2388d.js +1 -0
  89. package/dist/legacyDataset-e0e201ab.js +1 -0
  90. package/dist/{log-cf45fcf2.js → log-99af3443.js} +1 -1
  91. package/dist/{lollipop-c5b6e615.js → lollipop-806f8fa4.js} +1 -1
  92. package/dist/{maf-7535f1f9.js → maf-b06579e4.js} +1 -1
  93. package/dist/{maftimeline-1292ab62.js → maftimeline-4840a380.js} +1 -1
  94. package/dist/matrix-00bb50ff.js +1 -0
  95. package/dist/matrix.cells-914dd0c6.js +1 -0
  96. package/dist/{matrix.cluster-168bc96b.js → matrix.cluster-783ceab0.js} +1 -1
  97. package/dist/matrix.config-6ce74dfe.js +1 -0
  98. package/dist/matrix.controls-7b2a6f95.js +1 -0
  99. package/dist/{matrix.data-b1d0febe.js → matrix.data-dac4f1b7.js} +1 -1
  100. package/dist/{matrix.dom-00defa30.js → matrix.dom-4e10bbe9.js} +1 -1
  101. package/dist/matrix.groups-b9fca14a.js +1 -0
  102. package/dist/matrix.interactivity-84169b43.js +1 -0
  103. package/dist/{matrix.layout-c2345231.js → matrix.layout-dd5a44fd.js} +1 -1
  104. package/dist/matrix.legend-ac6d45e6.js +1 -0
  105. package/dist/matrix.renderers-78010275.js +1 -0
  106. package/dist/matrix.serieses-9b4fd744.js +1 -0
  107. package/dist/matrix.sort-014d798d.js +1 -0
  108. package/dist/{matrix.sorterUi-a741ba2e.js → matrix.sorterUi-9bf7e6f9.js} +1 -1
  109. package/dist/{mavb-92136d17.js → mavb-c6be46fc.js} +1 -1
  110. package/dist/{mds.fimo-c03115b4.js → mds.fimo-bff6a1ed.js} +1 -1
  111. package/dist/mds.samplescatterplot-9a02b9fb.js +1 -0
  112. package/dist/{mds.survivalplot-366db380.js → mds.survivalplot-055549f4.js} +1 -1
  113. package/dist/{metaboliteIntensity-ddb6e480.js → metaboliteIntensity-fac92f8b.js} +1 -1
  114. package/dist/niceNumLabels-238aabce.js +1 -0
  115. package/dist/{nodrag-2c046d31.js → nodrag-16ad4b03.js} +1 -1
  116. package/dist/{notify-44ebc0df.js → notify-224cccbd.js} +1 -1
  117. package/dist/{numeric-918d4686.js → numeric-b0b17185.js} +1 -1
  118. package/dist/numeric.binary-1f9e93f2.js +1 -0
  119. package/dist/numeric.continuous-ebcd0567.js +1 -0
  120. package/dist/numeric.discrete-7b97044a.js +1 -0
  121. package/dist/numeric.spline-1be88f3d.js +1 -0
  122. package/dist/numeric.toggle-7fa2a770.js +1 -0
  123. package/dist/oncomatrix-351af2a0.js +1 -0
  124. package/dist/{parseData-e66308cd.js → parseData-21fe9822.js} +1 -1
  125. package/dist/partjson.esm-b3f1fc21.js +1 -0
  126. package/dist/{plot.2dvaf-73dbfbd1.js → plot.2dvaf-18a35e4b.js} +1 -1
  127. package/dist/plot.app-30c4b8e5.js +1 -0
  128. package/dist/plot.barplot-7c4865a2.js +1 -0
  129. package/dist/{plot.boxplot-641da058.js → plot.boxplot-fe3046c6.js} +1 -1
  130. package/dist/plot.brainImaging-2ceb6023.js +1 -0
  131. package/dist/plot.disco-6011f87f.js +1 -0
  132. package/dist/{plot.dzi-41ea26e5.js → plot.dzi-6728a7c8.js} +1 -1
  133. package/dist/plot.ssgq-5581dc56.js +1 -0
  134. package/dist/{plot.vaf2cov-80e58833.js → plot.vaf2cov-b2284c64.js} +1 -1
  135. package/dist/{plot.wsi-51cc48ef.js → plot.wsi-9a9d4034.js} +1 -1
  136. package/dist/profileBarchart-0476f1f8.js +1 -0
  137. package/dist/profileHome-32eb9b50.js +1 -0
  138. package/dist/profilePlot-c7e099e8.js +1 -0
  139. package/dist/profilePolar-6b981e63.js +1 -0
  140. package/dist/profileRadar-bca1cc03.js +1 -0
  141. package/dist/profileRadarFacility-bbb1ecd8.js +1 -0
  142. package/dist/profileSummary-b114204f.js +1 -0
  143. package/dist/recover-49e09de0.js +1 -0
  144. package/dist/regression.inputs-a761f40d.js +1 -0
  145. package/dist/regression.inputs.values.table-5929d25a.js +1 -0
  146. package/dist/regression.results-69bc42d0.js +1 -0
  147. package/dist/{renderPvalueTable-895a72c2.js → renderPvalueTable-dc5d15f2.js} +1 -1
  148. package/dist/sampleScatter-2d0ed680.js +1 -0
  149. package/dist/{sampleScatter.rendererThree-5e686004.js → sampleScatter.rendererThree-0b12ac61.js} +2 -2
  150. package/dist/sampleView-484ab133.js +1 -0
  151. package/dist/samplelst-689796e6.js +1 -0
  152. package/dist/{samplematrix-2a1d7d82.js → samplematrix-2b137a05.js} +1 -1
  153. package/dist/scatter-205e013f.js +1 -0
  154. package/dist/{select2Terms-b4fffc50.js → select2Terms-b21e184a.js} +1 -1
  155. package/dist/{selectGenomeWithTklst-acf7e568.js → selectGenomeWithTklst-466995b4.js} +1 -1
  156. package/dist/singleCellCellType-5db730bb.js +1 -0
  157. package/dist/{singleCellGeneExpression-6de17162.js → singleCellGeneExpression-7147a2d0.js} +1 -1
  158. package/dist/singleCellPlot-73b2738f.js +1 -0
  159. package/dist/{singlecell-f76c856a.js → singlecell-24409b72.js} +1 -1
  160. package/dist/singlecell-bca774ed.js +1 -0
  161. package/dist/{snp-9590a1b4.js → snp-37d06246.js} +1 -1
  162. package/dist/snp-a8388ce4.js +1 -0
  163. package/dist/snplocus-7a1ea8c9.js +1 -0
  164. package/dist/{snplst-007a1926.js → snplst-6865d7c7.js} +1 -1
  165. package/dist/{spliceevent.a53ss.diagram-63dfef69.js → spliceevent.a53ss.diagram-e2eab72b.js} +1 -1
  166. package/dist/{spliceevent.exonskip.diagram-76fa9af8.js → spliceevent.exonskip.diagram-4d5df3a1.js} +1 -1
  167. package/dist/spliceevent.exonskip.getdefault-a94aad6e.js +1 -0
  168. package/dist/{spliceevent.noeventdiagram-64a099e0.js → spliceevent.noeventdiagram-ea97b0fb.js} +1 -1
  169. package/dist/{spliceevent.phrase-770c8cac.js → spliceevent.phrase-c5832470.js} +1 -1
  170. package/dist/{stattable-f1189f0f.js → stattable-7c5ecc2f.js} +1 -1
  171. package/dist/{style.gdc-89cfdb0f.js → style.gdc-131f3c77.js} +1 -1
  172. package/dist/summary-5ec455d3.js +1 -0
  173. package/dist/{sunburst-d5379952.js → sunburst-533902a7.js} +1 -1
  174. package/dist/survival-92250664.js +1 -0
  175. package/dist/survival-e16e068f.js +1 -0
  176. package/dist/{svg.download-86850940.js → svg.download-35926549.js} +1 -1
  177. package/dist/{svg.legend-a94b0697.js → svg.legend-8d490df2.js} +1 -1
  178. package/dist/{svgraph-c57b9ae3.js → svgraph-6fac8cbc.js} +1 -1
  179. package/dist/{svmr-cf6f1b27.js → svmr-d07ff695.js} +1 -1
  180. package/dist/table-29d5a973.js +1 -0
  181. package/dist/table-ad744310.js +1 -0
  182. package/dist/termInfo-bf99a37e.js +1 -0
  183. package/dist/{termdb.bins-9faa5170.js → termdb.bins-8b656cc3.js} +1 -1
  184. package/dist/termsetting-33ea66f1.js +1 -0
  185. package/dist/tk-071a7550.js +1 -0
  186. package/dist/{toggleButtons-002aeda1.js → toggleButtons-dbdbad01.js} +1 -1
  187. package/dist/tp.ui-9c2e9fc5.js +1 -0
  188. package/dist/tslib.es6-c3c2d88f.js +1 -0
  189. package/dist/tvs.density-f6128793.js +1 -0
  190. package/dist/{tvs.geneVariant-3a65ad94.js → tvs.geneVariant-ca4bdbb1.js} +1 -1
  191. package/dist/tvs.numeric-0260a825.js +1 -0
  192. package/dist/{tvs.samplelst-1eeb586b.js → tvs.samplelst-cb71b3bf.js} +1 -1
  193. package/dist/{uiUtils-1336bad7.js → uiUtils-f1bd2bcc.js} +1 -1
  194. package/dist/{variantBrowser-f0c812c1.js → variantBrowser-7c540224.js} +1 -1
  195. package/dist/{vcf-c4a23924.js → vcf-5cc55588.js} +1 -1
  196. package/dist/violin-2ba509eb.js +1 -0
  197. package/dist/violin.interactivity-4da6d7a9.js +1 -0
  198. package/dist/{violin.renderer-dafd89fa.js → violin.renderer-ce024265.js} +1 -1
  199. package/dist/{violinRenderer-8215f40d.js → violinRenderer-f7c96a60.js} +1 -1
  200. package/dist/{viridis-ffd14c4d.js → viridis-01ab20c5.js} +1 -1
  201. package/dist/{y-dd197cc9.js → y-67939f83.js} +1 -1
  202. package/dist/{zoom-9c63e74c.js → zoom-25dce8b9.js} +1 -1
  203. package/package.json +6 -4
  204. package/dist/AppHeader-a2a7e518.js +0 -1
  205. package/dist/DEanalysis-a6b50e49.js +0 -1
  206. package/dist/Disco-1c71b7dd.js +0 -1
  207. package/dist/Disco.UI-4c16ee50.js +0 -1
  208. package/dist/FilterRxComp-242f4615.js +0 -1
  209. package/dist/WSIViewer-d90032d7.js +0 -1
  210. package/dist/adSandbox-3528c372.js +0 -1
  211. package/dist/app-07dee349.js +0 -1
  212. package/dist/app-a8c4854a.js +0 -1
  213. package/dist/app-ade9c62a.js +0 -1
  214. package/dist/bam-92483a98.js +0 -1
  215. package/dist/barchart-3e69d094.js +0 -1
  216. package/dist/barchart.events-9b11d97e.js +0 -1
  217. package/dist/block-dcb130fb.js +0 -1
  218. package/dist/block.lazyload-9f031cac.js +0 -1
  219. package/dist/block.legend-b2987cd9.js +0 -1
  220. package/dist/block.mds2-de6e0986.js +0 -1
  221. package/dist/boxplot-1178fffc.js +0 -1
  222. package/dist/brainImaging-98ed7aa2.js +0 -1
  223. package/dist/categorical-26528ce8.js +0 -1
  224. package/dist/condition-b0d74550.js +0 -1
  225. package/dist/controls-0bacec22.js +0 -1
  226. package/dist/controls.config-0ccc9d79.js +0 -1
  227. package/dist/controls.divide-a9fe9466.js +0 -1
  228. package/dist/controls.overlay-fe20d41d.js +0 -1
  229. package/dist/controls.term1-faa2efcf.js +0 -1
  230. package/dist/cuminc-7e2cac2d.js +0 -1
  231. package/dist/dataDownload-ade8d840.js +0 -1
  232. package/dist/databrowser.ui-716f0519.js +0 -1
  233. package/dist/dictionary-3f83ce63.js +0 -1
  234. package/dist/facet-6850cfed.js +0 -1
  235. package/dist/geneExpClustering-7fd3c87e.js +0 -1
  236. package/dist/geneExpression-6462537d.js +0 -1
  237. package/dist/geneORA-7eb818c4.js +0 -1
  238. package/dist/geneVariant-b58e924a.js +0 -1
  239. package/dist/geneset-9f69ad3f.js +0 -1
  240. package/dist/genomeBrowser-1b2b83f7.js +0 -1
  241. package/dist/genomeBrowser.controls-cd8ddeb1.js +0 -1
  242. package/dist/gsea-36376589.js +0 -1
  243. package/dist/hierCluster-f1e30c19.js +0 -1
  244. package/dist/hierCluster.config-da3510b1.js +0 -1
  245. package/dist/hierCluster.renderers-610d8860.js +0 -1
  246. package/dist/imagePlot-7089bdff.js +0 -1
  247. package/dist/launch.adhoc-d229fd55.js +0 -1
  248. package/dist/leftlabel.sample-a919168c.js +0 -1
  249. package/dist/legacyDataset-1cbcb67d.js +0 -1
  250. package/dist/matrix-0614794d.js +0 -1
  251. package/dist/matrix.cells-819d4991.js +0 -1
  252. package/dist/matrix.config-c54ca273.js +0 -1
  253. package/dist/matrix.controls-5eca7822.js +0 -1
  254. package/dist/matrix.groups-4660dd70.js +0 -1
  255. package/dist/matrix.interactivity-23d83183.js +0 -1
  256. package/dist/matrix.legend-2e647224.js +0 -1
  257. package/dist/matrix.renderers-43445f4f.js +0 -1
  258. package/dist/matrix.serieses-972fbe5d.js +0 -1
  259. package/dist/matrix.sort-80d9b788.js +0 -1
  260. package/dist/mds.samplescatterplot-1623e6d0.js +0 -1
  261. package/dist/niceNumLabels-6cfc1508.js +0 -1
  262. package/dist/numeric.binary-80467e8b.js +0 -1
  263. package/dist/numeric.continuous-69a62a15.js +0 -1
  264. package/dist/numeric.discrete-86181905.js +0 -1
  265. package/dist/numeric.spline-1b07fd13.js +0 -1
  266. package/dist/numeric.toggle-37c4bee8.js +0 -1
  267. package/dist/oncomatrix-475271da.js +0 -1
  268. package/dist/plot.app-aa916e0e.js +0 -1
  269. package/dist/plot.barplot-8b440a2b.js +0 -1
  270. package/dist/plot.brainImaging-2f796b0c.js +0 -1
  271. package/dist/plot.disco-43e18d2f.js +0 -1
  272. package/dist/plot.ssgq-e49cb70b.js +0 -1
  273. package/dist/profileBarchart-91463ab6.js +0 -1
  274. package/dist/profileHome-d37a6821.js +0 -1
  275. package/dist/profilePlot-9ca577cb.js +0 -1
  276. package/dist/profilePolar-19c7da5b.js +0 -1
  277. package/dist/profileRadar-8bf094e3.js +0 -1
  278. package/dist/profileRadarFacility-f9fd8971.js +0 -1
  279. package/dist/profileSummary-93999c14.js +0 -1
  280. package/dist/recover-36ada47f.js +0 -1
  281. package/dist/regression.inputs-cb57ece6.js +0 -1
  282. package/dist/regression.inputs.values.table-908bb37a.js +0 -1
  283. package/dist/regression.results-c186a8dc.js +0 -1
  284. package/dist/roundValue-b0d0517c.js +0 -1
  285. package/dist/sampleScatter-9d5b3630.js +0 -1
  286. package/dist/sampleView-2d895023.js +0 -1
  287. package/dist/samplelst-9f8343ff.js +0 -1
  288. package/dist/scatter-b4992f64.js +0 -1
  289. package/dist/singleCellCellType-84a0c2cf.js +0 -1
  290. package/dist/singleCellPlot-2f2b8619.js +0 -1
  291. package/dist/singlecell-90567dde.js +0 -1
  292. package/dist/snp-79ec95ba.js +0 -1
  293. package/dist/snplocus-cb629be1.js +0 -1
  294. package/dist/spliceevent.exonskip.getdefault-31d2950c.js +0 -1
  295. package/dist/summary-b77bef3c.js +0 -1
  296. package/dist/survival-61ab375a.js +0 -1
  297. package/dist/survival-80a0ade9.js +0 -1
  298. package/dist/table-79e3e776.js +0 -1
  299. package/dist/table-eee91e14.js +0 -1
  300. package/dist/termInfo-f851b415.js +0 -1
  301. package/dist/tk-75566002.js +0 -1
  302. package/dist/tp.ui-02911b56.js +0 -1
  303. package/dist/tslib.es6-1f85f553.js +0 -1
  304. package/dist/tvs.density-026fca97.js +0 -1
  305. package/dist/tvs.numeric-3f3d9919.js +0 -1
  306. package/dist/violin-1515c3e6.js +0 -1
  307. package/dist/violin.interactivity-8e2f480d.js +0 -1
@@ -1 +0,0 @@
1
- import{h as t,M as e,a as s,d as o,y as a,J as i,b as n,K as r,I as l,r as c,L as p,N as d,O as h,B as m,z as f,n as u,P as g,Q as y}from"./app-a8c4854a.js";import{c as b,f as v}from"./roundValue-b0d0517c.js";import{controlsInit as x}from"./controls-0bacec22.js";import{d as S}from"./zoom-9c63e74c.js";import{d as w}from"./lasso-55cf4057.js";import{c as C,g as j,r as T,a as k,b as D,d as _,e as A,f as M,h as L,o as W,i as O,j as z}from"./recover-36ada47f.js";import{t as $}from"./downloadTextfile-5723af95.js";import{r as I}from"./table-79e3e776.js";import{a as N,b as G,c as R}from"./FilterRxComp-242f4615.js";import{searchSampleInput as q}from"./sampleView-2d895023.js";import{s as V}from"./select2Terms-b4fffc50.js";import{d as E}from"./svg.download-86850940.js";import{s as P}from"./sampleScatter.rendererThree-5e686004.js";import{a as F,b as H,c as B}from"./axis-747c801e.js";import{l as U}from"./line-264f8f9e.js";class K{constructor(t){this.type="search";J(this);X(this)}async init(t){this.dom={holder:this.opts.holder,holderNode:this.opts.holder.node(),tip:new e({padding:"5px"})};this.initUI()}reactsTo(t){return t.type.startsWith("search")||t.type.startsWith("cohort")}getState(t){return{cohortStr:t.activeCohort==-1||!t.termdbConfig.selectCohort?"":t.termdbConfig.selectCohort.values[t.activeCohort].keys.slice().sort().join(","),search:t.search,nav:t.nav}}async main(){this.dom.holder.style("display",this.state.search.isVisible&&this.state.nav.header_mode!="only_buttons"?"inline-block":"none")}async doSearch(t){if(!t){this.clear({hide:true});this.bus.emit("postSearch",[]);return}const e=await this.app.vocabApi.findTerm(t,this.state.cohortStr,this.opts.usecase);if(!e.lst||e.lst.length==0){this.noResult()}else{this.showTerms(e)}this.bus.emit("postSearch",e)}}const Y=t(K);function J(t){t.initUI=()=>{t.dom.holder.style("display",t.search&&t.search.isVisible==false?"none":"inline-block");t.dom.input=t.dom.holder.style("text-align","center").append("input").attr("type","search").attr("class","tree_search").attr("placeholder","Search").style("width","180px").style("display","block").on("input",s.debounce(t.onInput,300));t.dom.resultDiv=t.dom.tip.d.style("border-left",t.opts.resultsHolder?"":"solid 1px rgb(133,182,225)").style("padding-left","5px")};t.noResult=()=>{t.clear();t.dom.resultDiv.append("div").text("No match").style("padding","3px 3px 3px 0px").style("opacity",.5)};t.showTerms=e=>{if(t.opts.disable_terms)e.lst.forEach((e=>{if(e.disabled)t.opts.disable_terms.push(e)}));t.clear({hide:!e.lst.length});if(e.lst.length){t.dom.resultDiv.append("table").selectAll().data(e.lst).enter().append("tr").each(t.showTerm)}};t.showTerm=function(e){const s=o(this);const a=s.append("td").text(e.name);if(e.type){a.style("cursor","pointer").attr("class","sja_menuoption").on("click",(()=>{t.app.dispatch({type:"plot_create",config:{chartType:e.type=="survival"?"survival":"summary",term:{term:e}}});t.clear({hide:true})}))}else{a.style("padding","5px 10px").style("opacity",.5)}s.append("td").text((e.__ancestorNames||[]).join(" > ")).style("opacity",.5).style("font-size",".7em")};t.clear=(e={})=>{t.dom.tip.clear();if(e.hide)t.dom.tip.hide();else t.dom.tip.showunder(t.dom.holderNode)}}function X(t){t.onInput=async()=>{const e=t.dom.input.property("value");try{await t.doSearch(e)}catch(e){t.clear();a(t.dom.resultDiv,"Error: "+(e.message||e));if(e.stack)console.log(e.stack)}}}function Z(t){switch(t){case"../plots/DEanalysis.js":return import("./DEanalysis-a6b50e49.js");case"../plots/Disco.js":return import("./Disco-1c71b7dd.js");case"../plots/DziViewer.js":return import("./DziViewer-6311327c.js");case"../plots/WSIViewer.js":return import("./WSIViewer-d90032d7.js");case"../plots/barchart.data.js":return import("./FilterRxComp-242f4615.js").then((function(t){return t.k}));case"../plots/barchart.events.js":return import("./barchart.events-9b11d97e.js");case"../plots/barchart.js":return import("./barchart-3e69d094.js");case"../plots/bars.renderer.js":return import("./bars.renderer-5f7a4174.js");case"../plots/bars.settings.js":return import("./bars.settings-64bb4642.js");case"../plots/boxplot.js":return import("./boxplot-1178fffc.js");case"../plots/brainImaging.js":return import("./brainImaging-98ed7aa2.js");case"../plots/controls.btns.js":return import("./controls.btns-1cb2bfab.js");case"../plots/controls.config.js":return import("./controls.config-0ccc9d79.js");case"../plots/controls.divide.js":return import("./controls.divide-a9fe9466.js");case"../plots/controls.js":return import("./controls-0bacec22.js");case"../plots/controls.overlay.js":return import("./controls.overlay-fe20d41d.js");case"../plots/controls.term1.js":return import("./controls.term1-faa2efcf.js");case"../plots/cuminc.js":return import("./cuminc-7e2cac2d.js");case"../plots/dataDownload.js":return import("./dataDownload-ade8d840.js");case"../plots/dictionary.js":return import("./dictionary-3f83ce63.js");case"../plots/facet.js":return import("./facet-6850cfed.js");case"../plots/geneExpression.js":return import("./geneExpression-e0430f2e.js");case"../plots/geneORA.js":return import("./geneORA-7eb818c4.js");case"../plots/geneset.js":return import("./geneset-9f69ad3f.js");case"../plots/genomeBrowser.controls.js":return import("./genomeBrowser.controls-cd8ddeb1.js");case"../plots/genomeBrowser.js":return import("./genomeBrowser-1b2b83f7.js");case"../plots/gsea.js":return import("./gsea-36376589.js");case"../plots/hierCluster.config.js":return import("./hierCluster.config-da3510b1.js");case"../plots/hierCluster.interactivity.js":return import("./hierCluster.interactivity-9b433033.js").then((function(t){return t.i}));case"../plots/hierCluster.js":return import("./hierCluster-f1e30c19.js");case"../plots/hierCluster.renderers.js":return import("./hierCluster.renderers-610d8860.js").then((function(t){return t.r}));case"../plots/imagePlot.js":return import("./imagePlot-7089bdff.js");case"../plots/matrix.cells.js":return import("./matrix.cells-819d4991.js");case"../plots/matrix.cluster.js":return import("./matrix.cluster-168bc96b.js");case"../plots/matrix.config.js":return import("./matrix.config-c54ca273.js");case"../plots/matrix.controls.js":return import("./matrix.controls-5eca7822.js");case"../plots/matrix.data.js":return import("./matrix.data-b1d0febe.js").then((function(t){return t.m}));case"../plots/matrix.dom.js":return import("./matrix.dom-00defa30.js");case"../plots/matrix.groups.js":return import("./matrix.groups-4660dd70.js").then((function(t){return t.m}));case"../plots/matrix.interactivity.js":return import("./matrix.interactivity-23d83183.js");case"../plots/matrix.js":return import("./matrix-0614794d.js");case"../plots/matrix.layout.js":return import("./matrix.layout-c2345231.js").then((function(t){return t.m}));case"../plots/matrix.legend.js":return import("./matrix.legend-2e647224.js").then((function(t){return t.m}));case"../plots/matrix.renderers.js":return import("./matrix.renderers-43445f4f.js");case"../plots/matrix.serieses.js":return import("./matrix.serieses-972fbe5d.js").then((function(t){return t.m}));case"../plots/matrix.sort.js":return import("./matrix.sort-80d9b788.js");case"../plots/matrix.sorterUi.js":return import("./matrix.sorterUi-a741ba2e.js");case"../plots/plot.app.js":return import("./plot.app-aa916e0e.js");case"../plots/plot.brainImaging.js":return import("./plot.brainImaging-2f796b0c.js");case"../plots/plot.disco.js":return import("./plot.disco-43e18d2f.js");case"../plots/plot.ssgq.js":return import("./plot.ssgq-e49cb70b.js");case"../plots/profileBarchart.js":return import("./profileBarchart-91463ab6.js");case"../plots/profilePlot.js":return import("./profilePlot-9ca577cb.js");case"../plots/profilePolar.js":return import("./profilePolar-19c7da5b.js");case"../plots/profileRadar.js":return import("./profileRadar-8bf094e3.js");case"../plots/profileRadarFacility.js":return import("./profileRadarFacility-f9fd8971.js");case"../plots/profileSummary.js":return import("./profileSummary-93999c14.js");case"../plots/regression.inputs.js":return import("./regression.inputs-cb57ece6.js").then((function(t){return t.b}));case"../plots/regression.inputs.term.js":return import("./regression.inputs-cb57ece6.js").then((function(t){return t.a}));case"../plots/regression.inputs.values.table.js":return import("./regression.inputs.values.table-908bb37a.js");case"../plots/regression.js":return import("./regression.inputs-cb57ece6.js").then((function(t){return t.r}));case"../plots/regression.results.js":return import("./regression.results-c186a8dc.js").then((function(t){return t.r}));case"../plots/sampleScatter.interactivity.js":return Promise.resolve().then((function(){return $t}));case"../plots/sampleScatter.js":return Promise.resolve().then((function(){return Jt}));case"../plots/sampleScatter.renderer.js":return Promise.resolve().then((function(){return Wt}));case"../plots/sampleScatter.rendererThree.js":return import("./sampleScatter.rendererThree-5e686004.js").then((function(t){return t.c}));case"../plots/sampleView.js":return import("./sampleView-2d895023.js");case"../plots/scatter.js":return import("./scatter-b4992f64.js");case"../plots/singleCellPlot.js":return import("./singleCellPlot-2f2b8619.js");case"../plots/stattable.js":return import("./stattable-f1189f0f.js");case"../plots/summary.js":return import("./summary-b77bef3c.js");case"../plots/survival.js":return import("./survival-80a0ade9.js");case"../plots/table.js":return import("./table-eee91e14.js");case"../plots/variantBrowser.js":return import("./variantBrowser-f0c812c1.js");case"../plots/violin.interactivity.js":return import("./violin.interactivity-8e2f480d.js");case"../plots/violin.js":return import("./violin-1515c3e6.js");case"../plots/violin.renderer.js":return import("./violin.renderer-dafd89fa.js");default:return new Promise((function(e,s){(typeof queueMicrotask==="function"?queueMicrotask:setTimeout)(s.bind(null,new Error("Unknown variable dynamic import: "+t)))}))}}class Q{constructor(){this.type="sessionBtn";this.route="termdb";this.embedderOrigin=window.location.origin;this.hostURL=sessionStorage.getItem("hostURL")||this.embedderOrigin}async init(t){const s=new e({padding:"0px"});this.dom={button:this.opts.button,tip:s};this.dom.button.on("click",(()=>{this.dom.tip.clear();this.showMenu()}));this.dslabel=t.vocab.dslabel;this.savedSessions=JSON.parse(localStorage.getItem("savedMassSessions")||`{}`);this.requiredAuth=t.termdbConfig?.requiredAuth?.find((t=>t.route==this.route&&t.type=="jwt"))}async showMenu(){this.dom.tip.clear().d.style("padding",0);const t=[{label:`Open`,title:"Recover a saved session",callback:this.open},{label:`Save`,title:"Save the current view",callback:this.save},{label:`Share`,title:"Create a URL link to share this view",callback:this.getSessionUrl}];if(!this.serverCachedSessions)await this.setServerCachedSessions();if(Object.keys(this.savedSessions).length||Object.keys(this.serverCachedSessions).length){t.push({label:`Delete`,title:"Delete a saved session",callback:this.delete})}this.dom.tip.clear().d.selectAll(".sja_menuoption sja_sharp_border").data(t).enter().append("div").attr("class","sja_menuoption sja_sharp_border").attr("title",(t=>t.title)).html((t=>t.label)).on("click",((t,e)=>{this.dom.tip.clear().d.style("padding","10px");this.showBackBtn();e.callback.call(this)}));this.dom.tip.showunder(this.dom.button.node())}async open(){const t=`sjpp-session-open-radio-`+Math.random().toString().slice(-6);this.dom.tip.d.append("div").style("display","none").style("padding","3px 9px").html(`\n\t\t\t<b>Open in</b>\n\t\t\t<label>\n\t\t\t\t<input type='radio' name='${t}' value='new' style='margin-right: 0; vertical-align: bottom'/>\n\t\t\t\t<span>a new tab</span>\n\t\t\t</label>\n\t\t\t<label style='margin-left: 5px'>\n\t\t\t\t<input type='radio' name='${t}' value='current' checked=checked style='margin-right: 0; vertical-align: bottom'/>\n\t\t\t\t<span>current tab</span>\n\t\t\t</label>\n\t\t`);const e=await this.listSessions({trClickHandler:async(e,s)=>{const{loc:o,id:a}=s;if(!a)return;if(o.includes("browser")){this.sessionName=a;const e=this.savedSessions[a];await tt(e,this.app);const s=this.dom.tip.d.node().querySelector(`[name="${t}"]:checked`).value;if(s=="current"){this.app.dispatch({type:"app_refresh",state:e})}else if(window.location.origin==this.hostURL){window.open(`/?mass-session-id=${a}&src=browser`)}else{if(e.embedder)i({state:e});else{const{protocol:t,host:s,search:o,origin:a,href:n}=window.location;const r={protocol:t,host:s,search:o,origin:a,href:n};i({state:Object.assign({embedder:r},e)})}}this.dom.tip.hide()}else if(o=="server"){const e=this.app.vocabApi.mayGetAuthHeaders(this.route);const s={id:a,route:this.route,dslabel:this.dslabel,embedder:window.location.hostname};const o=await n(`/massSession?`,{headers:e,body:s});if(!o.state)throw o.error||"unable to get the cached session from the server";await tt(o.state,this.app);this.savedSessions[a]=o.state;const r=this.dom.tip.d.node().querySelector(`[name="${t}"]:checked`).value;if(r=="current"){this.app.dispatch({type:"app_refresh",state:o.state})}else if(window.location.origin==this.hostURL){window.open(`/?mass-session-id=${a}&src=cred&dslabel=${this.dslabel}&route=${this.route}`)}else{i(o)}this.dom.tip.hide()}}});e.headtr.select("th").html("Open from");const s=e.tbody.insert("tr","tr");s.append("td").style("text-align","center").style("padding","3px 9px").html("Local file");const o=s.append("td").style("text-align","left").append("label");o.append("span").style("padding","3px 9px").style("text-decoration","underline").style("cursor","pointer").html("Choose File");o.append("input").attr("type","file").attr("placeholder","file name").style("opacity",0).style("width","0.1px").style("height","0.1px").style("position","absolute").on("change",(async()=>{const e=event.target.files.item(0);const s=await e.text();let o=e.name;if(this.savedSessions[o]){o=prompt(`Leave as-is to overwrite a session with the same name, or enter a different session name.`,o)}this.sessionName=o;const a=JSON.parse(s);await tt(a,this.app);this.savedSessions[o]=a;localStorage.setItem("savedMassSessions",JSON.stringify(this.savedSessions));const n=this.dom.tip.d.node().querySelector(`[name="${t}"]:checked`).value;if(n=="current"){this.app.dispatch({type:"app_refresh",state:a})}else if(window.location.origin==this.hostURL){window.open(`/?mass-session-id=${o}&src=browser`)}else{if(a.embedder)i({state:a});else{const{protocol:t,host:e,search:s,origin:o,href:n}=window.location;const r={protocol:t,host:e,search:s,origin:o,href:n};i({state:Object.assign({embedder:r},a)})}}this.dom.tip.hide()}))}async listSessions(t={}){const e=this.dom.tip.d.append("table").attr("class","sjpp-controls-table");const s=e.append("thead").append("tr");s.selectAll("th").data(["Cache Location","Session ID"]).enter().append("th").style("text-align",((t,e)=>e===0?"center":"left")).style("padding","3px 9px").html((t=>t));const o=Object.keys(this.savedSessions).map((t=>({loc:"browser",id:t})));if(!this.serverCachedSessions)await this.setServerCachedSessions();o.push(...this.serverCachedSessions.map((t=>({loc:"server",id:t}))));const a=e.append("tbody");const i=a.selectAll("tr").data(o).enter().append("tr").on("click",t.trClickHandler||null);i.selectAll("td").data((t=>[t,t])).enter().append("td").style("text-align",((t,e)=>e===0?"center":"left")).style("padding","3px 9px").style("cursor","pointer").html(((t,e)=>e===0?t.loc:t.id));if(!this.serverCachedSessions.length&&this.requiredAuth&&!this.app.vocabApi.hasVerifiedToken()){e.append("tbody").append("tr").selectAll("td").data(["server","requires sign-in"]).enter().append("td").style("text-align",((t,e)=>e===0?"center":"left")).style("padding","3px 9px").html((t=>t))}return{table:e,headtr:s,tbody:a,trs:i}}async setServerCachedSessions(){const t=this.app.getState();this.requiredAuth=t.termdbConfig?.requiredAuth?.find((t=>t.route==this.route&&t.type=="jwt"));if(!this.requiredAuth){this.serverCachedSessions=[];return}const e=this.app.vocabApi.mayGetAuthHeaders(this.route);const s={route:this.route,dslabel:this.dslabel,embedder:window.location.hostname};const o=await n("/sessionIds",{headers:e,body:s});this.serverCachedSessions=o.sessionIds||[]}async save(t){const e=this.dom.tip.d;const s=e.append("div");s.append("span").html("Save as");const o=Object.keys(this.savedSessions);if(!this.serverCachedSessions)await this.setServerCachedSessions();o.push(...this.serverCachedSessions.filter((t=>!o.includes(t))));const a=this.sessionName||"unnamed-session";const i=s.append("input").attr("type","text").attr("placeholder",a).style("width","220px").on("input",(()=>{n.selectAll("*").remove();const t=i.property("value");const e=o.filter((e=>e===t));const s=o.filter((e=>e.startsWith(t)));const a=o.filter((e=>e.includes(t)&&e!==t&&!s.includes(e)));n.selectAll("div").data([...e,...s,...a]).enter().append("div").attr("class","sja_menuoption").html((t=>t)).on("click",((t,e)=>{i.property("value",e);n.selectAll("*").remove()}))}));const n=e.append("div");const r=e.append("div");r.append("span").html("Save to&nbsp;");r.append("button").style("min-width","80px").html("Browser").attr("title",`Save the session in your current browser's cache. The session can be easily recovered, but not shared among your other devices`).on("click",(()=>{this.sessionName=i.property("value")||a;this.savedSessions[this.sessionName]=this.app.getState();localStorage.setItem("savedMassSessions",JSON.stringify(this.savedSessions));this.confirmAction(`Cached '<b>${this.sessionName}</b>' in browser`)}));r.append("button").style("min-width","80px").html("File").attr("title",`Save the session into a local file. The session can be easily recoved using the 'Open from local file' option.`).on("click",(()=>{const t=i.property("value")||a;this.savedSessions[t]=this.app.getState();this.download(t);this.confirmAction(`Downloaded '<b>${t}</b>'`)}));if(this.requiredAuth){const t=this.app.vocabApi.hasVerifiedToken()?"":"Requires sign-in. ";r.append("button").style("min-width","80px").html("Server").attr("title",`${t}Save the session into a remote server. The session can be easily shared across your different devices and recovered using the 'Open from server' option.`).property("disabled",!this.app.vocabApi.hasVerifiedToken()).on("click",(async()=>{if(!this.app.vocabApi.hasVerifiedToken()){alert("Requires sign-in");return}const t=i.property("value")||a;this.savedSessions[t]=this.app.getState();const e=await this.getSessionUrl(t);if(e.id!=t)throw`error saving ${t}`;this.confirmAction(`Saved '<b>${t}</b>' on the server`)}))}}download(t=""){const e=t||this.sessionName;const s=e?.endsWith(".txt")?"":".txt";const o=`${e}${s}`;$(o,JSON.stringify(this.savedSessions[e]))}async getSessionUrl(t=""){const e=this.app.vocabApi.mayGetAuthHeaders("termdb");const s=structuredClone(this.app.getState());const{protocol:o,host:a,search:r,origin:l,href:c}=window.location;s.embedder={protocol:o,host:a,search:r,origin:l,href:c};if(t){s.__sessionFor__={route:this.route,filename:t,dslabel:this.dslabel,embedder:window.location.hostname}}const p=await n("/massSession",{headers:e,method:"POST",body:JSON.stringify(s)});if(t){return p}else{const t=`${this.hostURL}/?mass-session-id=${p.id}&noheader=1`;this.dom.tip.showunder(this.dom.button.node());const e=this.dom.tip.d.append("div").style("margin","10px");e.append("div").style("margin-bottom","12px").html(`Click the link to recover this session. Bookmark or share this link.`);const o=e.append("a").attr("href",t).attr("target","_blank").html(p.id);if(this.hostURL!=window.location.origin){o.on("click",(t=>{t.preventDefault();i({state:s},window.location.origin);return false}))}e.append("div").html(`\n\t\t\t\t\t<br>\n\t\t\t\t\t<div style="max-width: 400px; font-size: 1em; opacity:.6">\n\t\t\t\t\t<span>NOTES</span>\n\t\t\t\t\t<ul>\n\t\t\t\t\t<li>A recovered session may hide data or views to users that are not authorized to access the saved datasets or features.</li>\n\t\t\t\t\t<li>This session will be saved for ${this.opts.massSessionDuration} days.</li>\n\t\t\t\t\t</ul>\n\t\t\t\t\t</div>`);setTimeout((()=>{this.dom.button.property("disabled",false)}),1e3)}}async delete(){const t=await this.listSessions({trClickHandler:function(s){const a=this.lastChild.querySelector("input");const i=s.target==a?a.checked:!a.checked;o(this).style("text-decoration",i?"line-through":"");if(s.target!=a)a.checked=i;const n=t.table.node().querySelectorAll("input:checked");e.property("disabled",n.length?false:true)}});t.headtr.append("th").html("Delete");t.trs.each((function(t){o(this).append("td").style("text-align","center").append("input").attr("type","checkbox").attr("value",t.id)}));const e=this.dom.tip.d.append("div").style("text-align","center").append("button").html("Delete selected sessions").property("disabled",true).on("click",(async()=>{const e=t.table.node().querySelectorAll("input");const s=[];for(const t of e){if(o(t).property("checked")){const e=t.parentNode.parentNode.__data__;if(e.loc=="browser"){delete this.savedSessions[t.value]}else if(e.loc=="server"){delete this.serverCachedSessions[t.value];s.push(t.value)}else throw`unknown cache location=${e.loc}`}}localStorage.setItem("savedMassSessions",JSON.stringify(this.savedSessions));try{const t=this.app.vocabApi.mayGetAuthHeaders("termdb");const e={ids:s,route:this.route,dslabel:this.dslabel,embedder:window.location.hostname};const o=n(`/massSession?`,{method:"DELETE",headers:t,body:e})}catch(t){throw t}this.dom.tip.hide()}))}showBackBtn(){this.dom.tip.d.append("div").attr("class","sja_clbtext2").style("margin-bottom","10px").style("cursor","pointer").html(`&lt; Session Menu`).on("click",(()=>this.showMenu()))}confirmAction(t){this.dom.tip.clear().d.append("div").html(t).transition().delay(3e3).duration(1e3).style("opacity",0);setTimeout((()=>{this.dom.tip.hide()}),3500)}}async function tt(t,e){if(t.plots){const s=[];for(const o of t.plots){s.push((async()=>{const t=await Z(`../plots/${o.chartType}.js`);return await t.getPlotConfig(o,e)})())}try{await Promise.all(s)}catch(t){console.log(t);e.printError(t)}}}const et=t(Q);let st=0;const ot="_MASS_AUTOID_"+Math.random().toString().slice(-6);let at=(+new Date).toString().slice(-8);const it=new e({padding:"0px",offsetX:0,offsetY:0});it.d.style("z-index",5555);const nt={top:"COHORT",mid:"NONE",btm:"",subheader:"cohort"};const rt={top:"CHARTS",mid:"NONE",btm:"",subheader:"charts"};const lt={top:"GROUPS",mid:"NONE",btm:"",subheader:"groups"};const ct={top:"FILTER",mid:"NONE",btm:"",subheader:"filter"};function pt(){return ot+"_"+at++}class dt{constructor(t){this.type="nav";this.instanceNum=st++;this.activeTab=0;this.activeCohort=0;this.searching=false;this.samplecounts={};this.massSessionDuration=t.massSessionDuration;this.sessionDaysLeft=t.app.opts.sessionDaysLeft||null;this.sessionId=t.app.opts.sessionId||null;ft(this);mt(this)}async init(t){try{this.cohortFilter=N(t.termfilter.filter,"cohortFilter");this.initUI(t);this.initCohort(t);this.components=await r({search:Y({app:this.app,holder:this.dom.searchDiv,usecase:{target:"barchart",detail:"term"}}),filter:G({app:this.app,vocabApi:this.app.vocabApi,holder:this.dom.subheader.filter.append("div"),hideLabel:this.opts.header_mode==="with_tabs",emptyLabel:"+Add new filter",callback:t=>{this.app.dispatch({type:"filter_replace",filter:t})}}),charts:C({app:this.app,holder:this.dom.subheader.charts,vocab:this.opts.vocab}),groups:j({app:this.app,holder:this.dom.subheader.groups,vocab:this.opts.vocab}),recover:T({app:this.app,holder:this.dom.recoverDiv,getState:t=>t,reactsTo:t=>t.type!="plot_edit",maxHistoryLen:5}),sessionBtn:et({app:this.app,button:this.dom.saveBtn,massSessionDuration:this.opts.massSessionDuration,sessionDaysLeft:this.app.opts.sessionDaysLeft||null})});this.mayShowMessage_sessionDaysLeft()}catch(t){throw t}}reactsTo(t){if(t.type.includes("cache_termq"))return true;if(t.type.startsWith("filter"))return true;if(t.type.startsWith("cohort"))return true;if(t.type.startsWith("tab"))return true;if(t.type=="plot_create")return true;if(t.type=="plot_delete")return true;if(t.type=="app_refresh")return true;if(t.type.endsWith("_customTerm"))return true;if(t.type.endsWith("_group"))return true}getState(t){return{searching:this.searching,nav:t.nav,activeCohort:t.activeCohort,termdbConfig:t.termdbConfig,filter:t.termfilter.filter,plots:t.plots,groups:t.groups}}async main(){this.dom.tabDiv.style("display",this.state.nav.header_mode==="with_tabs"?"inline-block":"none");this.dom.tip.hide();this.activeTab=this.state.nav.activeTab;this.prevCohort=this.activeCohort;this.activeCohort=+this.state.activeCohort;this.filterUiRoot=N(this.state.filter,"filterUiRoot");this.cohortFilter=N(this.state.filter,"cohortFilter");if(this.cohortNames){this.activeCohortName=this.cohortNames[this.activeCohort];if(this.activeCohort!==-1)this.activeCohortLabel=this.state.termdbConfig.selectCohort.values[this.activeCohort].shortLabel}this.filterJSON=JSON.stringify(this.state.filter);this.cohortsData=await this.app.vocabApi.getCohortsData();if(this.state.nav.header_mode==="with_tabs"){if(!(this.activeCohortName in this.samplecounts)){this.samplecounts[this.activeCohortName]=await this.app.vocabApi.getCohortSampleCount(this.activeCohortName)}if(!(this.filterJSON in this.samplecounts)){if(!this.filterUiRoot||!this.filterUiRoot.lst.length){this.samplecounts[this.filterJSON]=this.samplecounts[this.activeCohortName]}else{const t=await this.app.vocabApi.getFilteredSampleCount(this.filterJSON);this.samplecounts[this.filterJSON]=t}}}this.updateUI()}}const ht=t(dt);function mt(t){t.initUI=s=>{const o=t.opts.holder.append("div").style("white-space","nowrap");let a=o.append("div").style("display","inline-block").style("float","right").style("font-size","1.1em").style("margin-top","50px").text(s.termdbConfig?.title?.text||"");const i=o.append("div").style("display","none").style("vertical-align","bottom");const n=o.append("div").style("vertical-align","top").style("margin","10px").style("display","inline-block");t.opts.holder.attr("class","sjpp-nav");t.dom={holder:t.opts.holder,header:o,tabDiv:i,controlsDiv:n,searchDiv:n.append("div").style("margin","10px"),sessionDiv:n.append("div").style("display","inline-block"),recoverDiv:n.append("div").style("display","inline-block"),helpDiv:n.append("div").style("display","none"),sessionElapsedMessageDiv:n.append("div").style("display","none"),subheaderDiv:t.opts.holder.append("div").style("display","block").style("padding-top","5px").style("border-bottom","1px solid #000"),messageDiv:t.opts.holder.append("div").style("margin","30px").style("display","none"),titleDiv:a,tip:new e({padding:"5px"})};if(s.nav.header_mode=="only_buttons"){t.dom.tabDiv.style("display","none");t.dom.recoverDiv.style("display","none");a.style("margin-top","95px").style("font-size","0.9em");if(s.termdbConfig.title?.link)a.on("click",(()=>window.open(s.termdbConfig.title.link,"_blank"))).on("mouseover",(()=>a.style("cursor","pointer")))}if(t.opts.header_mode==="with_cohortHtmlSelect"){t.dom.cohortStandaloneDiv=o.append("div").style("display","inline-block").style("margin","10px").style("vertical-align","top");t.dom.cohortStandaloneDiv.append("label").html("Cohort: ");t.dom.cohortSelect=t.dom.cohortStandaloneDiv.append("select").on("change",(function(){t.app.dispatch({type:"cohort_set",activeCohort:+this.value})}));t.dom.cohortSelect.selectAll("option").data(s.termdbConfig.selectCohort.values).enter().append("option").attr("value",((t,e)=>e)).property("selected",((t,e)=>e===s.activeCohort)).html((t=>t.shortLabel))}t.dom.subheader=Object.freeze({search:t.dom.subheaderDiv.append("div").style("display","none"),groups:t.dom.subheaderDiv.append("div").style("display","none"),charts:t.dom.subheaderDiv.append("div").style("display","none"),cohort:t.dom.subheaderDiv.append("div").style("display","none"),filter:t.dom.subheaderDiv.append("div").style("display","none"),cart:t.dom.subheaderDiv.append("div").style("display","none").html("<br/>Cart feature under construction - work in progress<br/>&nbsp;<br/>")});t.tabs=[rt,lt,ct];if(s.termdbConfig.selectCohort)t.tabs.unshift(nt);const r=t.dom.tabDiv.append("table").style("border-collapse","collapse");r.selectAll("tr").data(["top","mid","btm"]).enter().append("tr").style("font-size",((t,e)=>e==1?"20px":"12px")).selectAll("td").data(((e,s)=>t.tabs.map(((t,o)=>({rowNum:s,key:e,colNum:o,label:t[e],subheader:t.subheader}))))).enter().append("td").style("display","none").style("width","100px").style("padding",(t=>t.rowNum===0?"12px 12px 3px 12px":"3px 12px")).style("text-align","center").style("border-left","1px solid #ccc").style("border-right","1px solid #ccc").style("color","#aaa").style("cursor","pointer").html((t=>t.label)).on("click",t.setTab);t.dom.trs=r.selectAll("tr");t.dom.tds=r.selectAll("td");t.subheaderKeys=t.tabs.map((t=>t.subheader));t.dom.saveBtn=t.dom.sessionDiv.append("button").style("margin","10px").text("Session ▼");if(t.sessionDaysLeft!=null){t.dom.fileBtn=t.dom.sessionDiv.append("button").style("margin","10px").text("Export Session").on("click",(e=>{t.getSessionFile(e)}))}const l=s.termdbConfig.helpPages;if(l){t.dom.helpBtn=t.dom.helpDiv.style("display","inline-block").append("button").style("margin","10px").html("Help &#9660;").on("click",(t=>{const e=t.target.getBoundingClientRect();const s=it.clear().show(e.left-0,e.top+e.height+5).d.append("div");for(const t of l){s.append("div").style("margin","15px").append("a").attr("href",t.url).attr("target","_blank").text(t.label)}}))}};t.mayShowMessage_sessionDaysLeft=()=>{if(!Number.isFinite(t.sessionDaysLeft)){return}t.dom.sessionElapsedMessageDiv.style("display","block");t.dom.remainingDaysMessage=t.dom.sessionElapsedMessageDiv.append("div").style("display","block").style("opacity","0.65").html(`<u>${t.sessionDaysLeft} days</u> left until this session is removed. Click the "Save Session" button to create a new one.`)};t.updateUI=async(e=false)=>{if(!t.dom.subheaderDiv)return;if(t.activeTab&&t.state.termdbConfig.selectCohort&&t.activeCohort==-1){t.dom.subheaderDiv.style("display","none");t.dom.messageDiv.selectAll("text").remove();t.dom.messageDiv.style("display","").text('No cohort selected. Please select a cohort in the "COHORT" tab.')}else{let s="block";if(e){s=t.dom.subheaderDiv.style("display")=="none"?"block":"none"}if(t.dom.subheaderDiv)t.dom.subheaderDiv.style("display",s);if(t.dom.messageDiv)t.dom.messageDiv.style("display","none")}const s=t.state.termdbConfig.selectCohort;t.dom.searchDiv.style("display",s&&t.activeCohort==-1||t.state.nav.header_mode=="only_buttons"?"none":"inline-block");t.dom.header.style("border-bottom",t.state.nav.header_mode==="with_tabs"?"1px solid #000":"");t.dom.tds.style("display","").style("color",(e=>e.colNum==t.activeTab?"#000":"#aaa")).style("background-color",(e=>e.colNum==t.activeTab?"#ececec":"transparent")).html((function(e,s){if(e.key=="top")return this.innerHTML;if(e.subheader=="groups"){if(e.key=="mid")return t.state.groups.length||"NONE";return""}if(e.subheader==="charts"){const s=t.state.plots.length;if(e.key=="mid")return!s?"NONE":s;else return""}else if(e.subheader==="cohort"){if(t.activeCohortName&&t.activeCohortName in t.samplecounts){return e.key=="top"?this.innerHTML:e.key=="mid"?t.activeCohortLabel:"n="+t.samplecounts[t.activeCohortName]}else{return e.key=="mid"?"NONE":this.innerHTML}}else if(e.subheader==="filter"){const s=t.filterUiRoot?t.filterUiRoot:{lst:[]};if(s.lst.length===0){return e.key==="mid"?"NONE":t.samplecounts["undefined"]?`n=${t.samplecounts["undefined"]}`:""}else{const o=t.samplecounts[t.filterJSON]!=undefined?"n="+t.samplecounts[t.filterJSON]:"";return e.key==="mid"?s.lst.length:o}}else{return e.key==="mid"?this.innerHTML:"&nbsp;"}}));for(const e in t.dom.subheader){t.dom.subheader[e].style("display",t.tabs[t.activeTab].subheader===e?"block":"none")}t.renderCohortsTable();if(t.opts.header_mode==="with_cohort_select"){t.dom.cohortSelect.selectAll("option").property("value",appState.activeCohort)}};t.renderCohortsTable=()=>{if(!t.dom.cohortTable)return;t.dom.cohortTable.selectAll("*").remove();const e=[{label:"Feature"}];const s=[];const o=t.cohortsData;if("error"in o)throw o.error;for(const t of o.features)s.push([{value:t.name}]);for(const t of o.cohorts){e.push({label:t.cohort?`${t.name} (${t.cohort})`:t.name});for(const[e,a]of o.features.entries()){const i=o.cfeatures.find((e=>e.idfeature===a.idfeature&&e.cohort===t.cohort));if(i)s[e].push({value:i.value})}}I({rows:s,columns:e,div:t.dom.cohortTable,showLines:false,maxHeight:"60vh"});t.dom.cohortTable.select("table").style("border-collapse","collapse");t.dom.cohortTable.selectAll(`tbody > tr > td`).style("background-color","transparent");const a=t.state.termdbConfig.selectCohort;const i=a.values[t.activeCohort].keys;let n=`tbody > tr > td:nth-child(${t.activeCohort+2})`;const r=i.length>1;if(r){n="";for(const t of i){const e=o.cohorts.map((t=>t.cohort)).indexOf(t);if(n!=="")n+=",";n+=`tbody > tr > td:nth-child(${e+2})`}}const l=t.dom.cohortTable.selectAll(n);l.style("background-color","yellow");t.dom.cohortInputs.property("checked",((e,s)=>s===t.activeCohort))};t.initCohort=async e=>{const s=e.termdbConfig.selectCohort;if(!s)return;t.dom.tds.filter((t=>t.colNum===0)).style("display","");t.cohortNames=s.values.map((t=>t.keys.slice().sort().join(",")));if(s.title){t.dom.cohortTitle=t.dom.subheader.cohort.append("h2").style("margin-left","10px").text(s.title)}if(s.description){t.dom.cohortDescription=t.dom.subheader.cohort.append("div").style("margin-left","10px").html(s.description)}if(s.prompt){t.dom.cohortPrompt=t.dom.subheader.cohort.append("div").style("margin-left","10px").style("padding-top","30px").style("padding-bottom","10px").style("font-weight","bold").text(s.prompt)}t.dom.cohortOpts=t.dom.subheader.cohort.append("div").style("margin-bottom","30px").style("margin-left","10px");t.dom.cohortOpts.append("table").selectAll("tr").data(s.values).enter().append("tr").each((function(e,s){const a=o(this);const i=a.append("td");const n="sja-termdb-cohort-"+t.instanceNum;const r=n+"-"+s;i.append("input").attr("type","radio").attr("name",n).attr("id",r).attr("value",s).property("checked",s===t.activeCohort).style("margin-right","5px").style("margin-left","0px").on("click",(()=>{t.app.dispatch({type:"cohort_set",activeCohort:s})}));i.append("label").attr("for",r).attr("colspan",2).style("cursor","pointer").html((t=>t.label));a.selectAll("td").style("max-width","600px").style("padding-bottom","10px").style("padding-right","20px").style("vertical-align","top")}));t.dom.cohortInputs=t.dom.cohortOpts.selectAll("input");t.dom.cohortTable=t.dom.subheader.cohort.append("div");if(s.asterisk){t.dom.cohortAsterisk=t.dom.subheader.cohort.append("div").style("margin-left","10px").style("padding-top","20px").style("padding-bottom","20px").style("font-size","small").text(s.asterisk)}}}function ft(t){t.setTab=async(e,s)=>{if(s.colNum===t.activeTab&&!t.searching){t.prevCohort=t.activeCohort;await t.updateUI(true);if(t.bus)t.bus.emit("postRender");return}t.activeTab=s.colNum;t.searching=false;t.app.dispatch({type:"tab_set",activeTab:t.activeTab});if(t.activeTab==1&&t.activeCohort!=-1&&!t.state.plots.length){t.app.dispatch({type:"plot_create",id:pt(),config:{chartType:"dictionary"}})}};t.getSessionFile=async e=>{const s=await n(`/massSession?id=${t.sessionId}`);const o=document.createElement("a");const a="data:application/json;charset=utf-8,"+encodeURIComponent(JSON.stringify(s.state));o.setAttribute("href",a);o.download=`${t.sessionId}.json`;o.click();o.remove()}}function ut(t,e){return gt(t)||yt(t,e)||bt()}function gt(t){if(Array.isArray(t))return t}function yt(t,e){var s=[];var o=true;var a=false;var i=undefined;try{for(var n=t[Symbol.iterator](),r;!(o=(r=n.next()).done);o=true){s.push(r.value);if(e&&s.length===e)break}}catch(t){a=true;i=t}finally{try{if(!o&&n["return"]!=null)n["return"]()}finally{if(a)throw i}}return s}function bt(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function vt(t,e,s,o){t=t.filter((function(t,o){var a=e(t,o),i=s(t,o);return a!=null&&isFinite(a)&&i!=null&&isFinite(i)}));if(o){t.sort((function(t,s){return e(t)-e(s)}))}var a=t.length,i=new Float64Array(a),n=new Float64Array(a);var r=0,l=0,c,p,d;for(var h=0;h<a;){d=t[h];i[h]=c=+e(d,h,t);n[h]=p=+s(d,h,t);++h;r+=(c-r)/h;l+=(p-l)/h}for(var m=0;m<a;++m){i[m]-=r;n[m]-=l}return[i,n,r,l]}function xt(t,e,s,o){var a=0;for(var i=0,n=t.length;i<n;i++){var r=t[i],l=+e(r,i,t),c=+s(r,i,t);if(l!=null&&isFinite(l)&&c!=null&&isFinite(c)){o(l,c,a++)}}}function St(t,e,s,o,a){var i=0,n=0;xt(t,e,s,(function(t,e){var s=e-a(t),r=e-o;i+=s*s;n+=r*r}));return 1-i/n}function wt(t){return Math.atan2(t[1][1]-t[0][1],t[1][0]-t[0][0])*180/Math.PI}function Ct(t){return[(t[0][0]+t[1][0])/2,(t[0][1]+t[1][1])/2]}function jt(t,e,s){var o=Math.log(e-t)*Math.LOG10E+1|0;var a=1*Math.pow(10,-o/2-1),i=1e4;var n=[l(t),l(e)],r=0;while(c(n)&&r<i){}return n;function l(t){return[t,s(t)]}function c(t){r++;var e=t.length;var s=false;for(var o=0;o<e-1;o++){var i=t[o],n=t[o+1],c=Ct([i,n]),p=l(c[0]),d=wt([i,c]),h=wt([i,p]),m=Math.abs(d-h);if(m>a){t.splice(o+1,0,p);s=true}}return s}}function Tt(t,e,s,o){var a=o-t*t,i=Math.abs(a)<1e-24?0:(s-t*e)/a,n=e-i*t;return[n,i]}function kt(){var t=function t(e){return e[0]},e=function t(e){return e[1]},s;function o(o){var a=0,i=0,n=0,r=0,l=0,c=s?+s[0]:Infinity,p=s?+s[1]:-Infinity;xt(o,t,e,(function(t,e){++a;i+=(t-i)/a;n+=(e-n)/a;r+=(t*e-r)/a;l+=(t*t-l)/a;if(!s){if(t<c)c=t;if(t>p)p=t}}));var d=Tt(i,n,r,l),h=ut(d,2),m=h[0],f=h[1],u=function t(e){return f*e+m},g=[[c,u(c)],[p,u(p)]];g.a=f;g.b=m;g.predict=u;g.rSquared=St(o,t,e,n,u);return g}o.domain=function(t){return arguments.length?(s=t,o):s};o.x=function(e){return arguments.length?(t=e,o):t};o.y=function(t){return arguments.length?(e=t,o):e};return o}function Dt(){var t=function t(e){return e[0]},e=function t(e){return e[1]},s;function o(o){var a=vt(o,t,e),i=ut(a,4),n=i[0],r=i[1],l=i[2],c=i[3],p=n.length;var d=0,h=0,m=0,f=0,u=0,g,y,b,v;for(g=0;g<p;){y=n[g];b=r[g++];v=y*y;d+=(v-d)/g;h+=(v*y-h)/g;m+=(v*v-m)/g;f+=(y*b-f)/g;u+=(v*b-u)/g}var x=0,S=0,w=s?+s[0]:Infinity,C=s?+s[1]:-Infinity;xt(o,t,e,(function(t,e){S++;x+=(e-x)/S;if(!s){if(t<w)w=t;if(t>C)C=t}}));var j=m-d*d,T=d*j-h*h,k=(u*d-f*h)/T,D=(f*j-u*h)/T,_=-k*d,A=function t(e){e=e-l;return k*e*e+D*e+_+c};var M=jt(w,C,A);M.a=k;M.b=D-2*k*l;M.c=_-D*l+k*l*l+c;M.predict=A;M.rSquared=St(o,t,e,x,A);return M}o.domain=function(t){return arguments.length?(s=t,o):s};o.x=function(e){return arguments.length?(t=e,o):t};o.y=function(t){return arguments.length?(e=t,o):e};return o}function _t(){var t=function t(e){return e[0]},e=function t(e){return e[1]},s=3,o;function a(a){if(s===1){var i=kt().x(t).y(e).domain(o)(a);i.coefficients=[i.b,i.a];delete i.a;delete i.b;return i}if(s===2){var n=Dt().x(t).y(e).domain(o)(a);n.coefficients=[n.c,n.b,n.a];delete n.a;delete n.b;delete n.c;return n}var r=vt(a,t,e),l=ut(r,4),c=l[0],p=l[1],d=l[2],h=l[3],m=c.length,f=[],u=[],g=s+1;var y=0,b=0,v=o?+o[0]:Infinity,x=o?+o[1]:-Infinity;xt(a,t,e,(function(t,e){++b;y+=(e-y)/b;if(!o){if(t<v)v=t;if(t>x)x=t}}));var S,w,C,j,T;for(S=0;S<g;++S){for(C=0,j=0;C<m;++C){j+=Math.pow(c[C],S)*p[C]}f.push(j);T=new Float64Array(g);for(w=0;w<g;++w){for(C=0,j=0;C<m;++C){j+=Math.pow(c[C],S+w)}T[w]=j}u.push(T)}u.push(f);var k=Mt(u),D=function t(e){e-=d;var s=h+k[0]+k[1]*e+k[2]*e*e;for(S=3;S<g;++S){s+=k[S]*Math.pow(e,S)}return s},_=jt(v,x,D);_.coefficients=At(g,k,-d,h);_.predict=D;_.rSquared=St(a,t,e,y,D);return _}a.domain=function(t){return arguments.length?(o=t,a):o};a.x=function(e){return arguments.length?(t=e,a):t};a.y=function(t){return arguments.length?(e=t,a):e};a.order=function(t){return arguments.length?(s=t,a):s};return a}function At(t,e,s,o){var a=Array(t);var i,n,r,l;for(i=0;i<t;++i){a[i]=0}for(i=t-1;i>=0;--i){r=e[i];l=1;a[i]+=r;for(n=1;n<=i;++n){l*=(i+1-n)/n;a[i-n]+=r*Math.pow(s,n)*l}}a[0]+=o;return a}function Mt(t){var e=t.length-1,s=[];var o,a,i,n,r;for(o=0;o<e;++o){n=o;for(a=o+1;a<e;++a){if(Math.abs(t[o][a])>Math.abs(t[o][n])){n=a}}for(i=o;i<e+1;++i){r=t[i][o];t[i][o]=t[i][n];t[i][n]=r}for(a=o+1;a<e;++a){for(i=e;i>=o;i--){t[i][a]-=t[i][o]*t[o][a]/t[o][o]}}}for(a=e-1;a>=0;--a){r=0;for(i=a+1;i<e;++i){r+=t[i][a]*s[i]}s[a]=(t[e][a]-r)/t[a][a]}return s}function Lt(t){P(t);t.render=function(){const e=t.mainDiv.selectAll(":scope > div").data(t.charts,(t=>t?.id));e.exit().remove();e.each(t.renderChart);e.enter().append("div").style("vertical-align","top").each(t.renderChart)};t.renderChart=function(e){e.chartDiv=o(this);const a=t.settings;e.chartDiv.style("opacity",0).style("display","inline-block");e.chartDiv.on("mouseover",(s=>{if(!t.onClick)t.showTooltip(s,e)}));e.chartDiv.on("click",(s=>t.showTooltip(s,e)));e.svg=e.chartDiv.select("svg").empty()?e.chartDiv.append("svg"):e.chartDiv.select("svg");s(e,a);e.chartDiv.transition().duration(a.duration).style("opacity",1)};t.initAxes=function(e){if(e.data.samples.length==0)return;e.xAxisScale=l().domain([e.xMin,e.xMax]).range([t.axisOffset.x,t.settings.svgw+t.axisOffset.x]);e.axisBottom=F(e.xAxisScale);e.yAxisScale=l().domain([e.yMax,e.yMin]).range([t.axisOffset.y,t.settings.svgh+t.axisOffset.y]);e.zAxisScale=l().domain([e.zMin,e.zMax]).range([0,t.settings.svgd]);e.xScaleMin=e.xAxisScale(e.xMin);e.xScaleMax=e.xAxisScale(e.xMax);e.yScaleMin=e.xAxisScale(e.yMin);e.yScaleMax=e.yAxisScale(e.yMax);e.zScaleMin=e.xAxisScale(e.zMin);e.zScaleMax=e.zAxisScale(e.zMax);e.axisLeft=H(e.yAxisScale);const s=t.config.settings.sampleScatter.defaultColor;if(!t.config.startColor)t.config.startColor=t.config.stopColor={};if(!t.config.startColor[e.id]){t.config.startColor[e.id]=c(s).brighter().brighter().toString()}if(!t.config.stopColor[e.id]){t.config.stopColor[e.id]=c(s).darker().toString()}if(t.config.colorTW?.q.mode==="continuous"){const[s,o]=e.cohortSamples.filter((e=>!t.config.colorTW.term.values||!(e.category in t.config.colorTW.term.values))).reduce(((t,e)=>[e.category<t[0]?e.category:t[0],e.category>t[1]?e.category:t[1]]),[e.cohortSamples[0].category,e.cohortSamples[0].category]);e.colorGenerator=l().domain([s,o]).range([t.config.startColor[e.id],t.config.stopColor[e.id]])}};function s(e,s){const o=e.svg;let n=Math.min(20*40/e.colorLegend.size,25);if(n<12)n=12;let r=e.colorLegend.size*n;if(e.colorLegend.get("Ref")?.sampleCount>0)r+=60;const l=t.config.scaleDotTW?200:100;t.legendHeight=Math.max(r,e.shapeLegend.size*30)+l;const c=t.charts.length==1?s.svgw+800:s.svgw+(t.config.shapeTW?600:350);o.transition().duration(s.duration).attr("width",c).attr("height",Math.max(s.svgh+100,t.legendHeight));a(e);if(t.is3D)t.render3DSerie(e);else if(t.is2DLarge)t.render2DSerieLarge(e);else{i(e,s.duration);t.renderLegend(e,n)}}function a(e){const s=e.svg;let o,a,i;if(s.select(".sjpcb-scatter-mainG").size()==0){e.mainG=s.append("g").attr("class","sjpcb-scatter-mainG");o=s.append("g").attr("class","sjpcb-scatter-axis");a=s.append("g").attr("class","sjpcb-scatter-labelsG");e.xAxis=o.append("g").attr("class","sjpcb-scatter-x-axis");e.yAxis=o.append("g").attr("class","sjpcb-scatter-y-axis").attr("transform",`translate(${t.axisOffset.x}, 0)`);e.mainG.append("rect").attr("class","zoom").attr("x",t.axisOffset.x).attr("y",t.axisOffset.y-t.settings.size).attr("width",t.settings.svgw).attr("height",t.settings.svgh).attr("fill","white");e.serie=e.mainG.append("g").attr("class","sjpcb-scatter-series");e.regressionG=e.mainG.append("g").attr("class","sjpcb-scatter-lowess");const n=`${Date.now()}`;const r=`sjpp_clip_${n}`;t.defs=s.append("defs");i=t.defs.append("clipPath").attr("id",r).append("rect");const l=t.defs.append("linearGradient").attr("id",`linear-gradient-${e.id}`).attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");t.startGradient[e.id]=l.append("stop").attr("offset","0%").attr("stop-color",t.config.startColor[e.id]);t.stopGradient[e.id]=l.append("stop").attr("offset","100%").attr("stop-color",t.config.stopColor[e.id]);e.mainG.attr("clip-path",`url(#${r})`);e.legendG=s.append("g").attr("class","sjpcb-scatter-legend")}else{e.mainG=s.select(".sjpcb-scatter-mainG");e.serie=e.mainG.select(".sjpcb-scatter-series");e.regressionG=e.mainG.select(".sjpcb-scatter-lowess");o=s.select(".sjpcb-scatter-axis");a=s.select(".sjpcb-scatter-labelsG");e.xAxis=o.select(".sjpcb-scatter-x-axis");e.yAxis=o.select(".sjpcb-scatter-y-axis");e.legendG=s.select(".sjpcb-scatter-legend");i=s.select(`defs > clipPath > rect`)}e.xAxis.attr("transform",`translate(0, ${t.settings.svgh+t.axisOffset.y})`);e.legendG.attr("transform",`translate(${t.settings.svgw+t.axisOffset.x+50}, 20)`);if(e.axisBottom){e.xAxis.call(e.axisBottom);e.yAxis.call(e.axisLeft)}const n=Math.sqrt(t.settings.size);if(t.settings.showAxes&&!(t.is2DLarge||t.is3D)){i.attr("x",t.axisOffset.x).attr("y",0).attr("width",t.settings.svgw+2*n).attr("height",t.settings.svgh+t.axisOffset.y);o.style("opacity",1);if(t.config.term){let s=t.config.term.term.name;if(!t.config.colorTW&&!t.config.shapeTW&&!t.config.term0)s=`${s}, n=${e.cohortSamples.length}`;a.selectAll("*").remove();a.append("text").attr("transform",`translate(${t.axisOffset.x+t.settings.svgw/2}, ${t.settings.svgh+t.axisOffset.y+40})`).attr("text-anchor","middle").text(s);if(t.config.term0&&!t.config.colorTW&&!t.config.shapeTW){const s=`${e.id}, n=${e.cohortSamples.length}`;a.append("text").attr("transform",`translate(${t.axisOffset.x+t.settings.svgw/2}, ${t.settings.svgh+t.axisOffset.y+65})`).attr("text-anchor","middle").text(s)}a.append("text").attr("transform",`translate(${t.axisOffset.x-50}, ${t.settings.svgh/2+t.axisOffset.y}) rotate(-90)`).attr("text-anchor","middle").text(t.config.term2.term.name)}}else{o.style("opacity",0);i.attr("x",t.axisOffset.x-n).attr("y",0).attr("width",t.settings.svgw+2*n).attr("height",t.settings.svgh+t.axisOffset.y+n)}}function i(e,s){if(t.canvas)t.canvas.remove();const o=e.serie;const a=e.data;const i=o.selectAll('path[name="serie"]').data(a.samples);i.exit().remove();i.transition().duration(s).attr("name","serie").attr("transform",(s=>t.transform(e,s))).attr("d",(s=>t.getShape(e,s))).attr("fill",(s=>t.getColor(s,e))).attr("stroke",(s=>t.getColor(s,e))).attr("stroke-width",(e=>t.getStrokeWidth(e))).style("fill-opacity",(e=>t.getOpacity(e)));i.enter().append("path").attr("name","serie").attr("transform",(s=>t.transform(e,s))).attr("d",(s=>t.getShape(e,s))).attr("fill",(s=>t.getColor(s,e))).attr("stroke",(s=>t.getColor(s,e))).attr("stroke-width",(e=>t.getStrokeWidth(e))).style("fill-opacity",(e=>t.getOpacity(e))).transition().duration(s);t.mayRenderRegression()}t.getStrokeWidth=function(e){const s=t.getOpacity(e);if(s<=.2)return 0;if(s==1.2)return 2;return 1};t.processData=async function(){for(const e of t.charts){t.initAxes(e);const s=t.config.settings.sampleScatter.regression;if(!s||s=="None")continue;let o;const a=[];await e.cohortSamples.forEach((t=>{const s=e.xAxisScale(t.x);const o=e.yAxisScale(t.y);a.push({x:s,y:o})}));let i;if(s=="Polynomial"){o=_t().x((t=>t.x)).y((t=>t.y)).order(3);i=o(a)}else if(s=="Lowess"){const e=[],s=[];for(const t of a){e.push(t.x);s.push(t.y)}i=await t.app.vocabApi.getLowessCurve({coords:{X:e,Y:s}})}else{throw`unsupported regression type='${s}'`}e.regressionCurve=i}};t.mayRenderRegression=async function(){for(const e of t.charts){e.regressionG?.selectAll("*").remove();if(e.regressionCurve){const t=U().x((t=>t[0])).y((t=>t[1]));const s=e.regressionG.append("path");s.attr("d",t(e.regressionCurve)).attr("stroke","blue").attr("fill","none").style("stroke-width","2")}}};t.getColor=function(e,s){if(t.config.colorTW?.q.mode=="continuous"&&"sampleId"in e){const t=s.colorGenerator(e.category);return t}if(e.category=="Default")return t.config.settings.sampleScatter.defaultColor;const o=s.colorLegend.get(e.category);return o.color};t.getOpacity=function(e){if("sampleId"in e){if(t.filterSampleStr){if(!e.sample?.toLowerCase().includes(t.filterSampleStr.toLowerCase()))return.2;else return 1.2}const s=e.hidden?.["category"]||e.hidden?.["shape"]?0:t.settings.opacity;return s}const s=t.settings.showRef?t.settings.opacity:0;return s};t.getShape=function(t,e,s=1){const o=t.shapeLegend.get(e.shape).shape%qt.length;return qt[o]};t.transform=function(e,s,o=1){const a=e.xAxisScale(s.x);const i=e.yAxisScale(s.y);const n=!("sampleId"in s);let r;if(!t.config.scaleDotTW||n){r="sampleId"in s?t.settings.size:t.settings.refSize}else{const o=t.settings.maxShapeSize-t.settings.minShapeSize;if(t.settings.scaleDotOrder=="Ascending")r=t.settings.minShapeSize+(s.scale-e.scaleMin)/(e.scaleMax-e.scaleMin)*o;else r=t.settings.maxShapeSize-(s.scale-e.scaleMin)/(e.scaleMax-e.scaleMin)*o}const l=`translate(${a},${i}) scale(${t.zoom*r*o/3})`;return l};t.lassoReset=e=>{const s=e.chartDiv.select(".sjpcb-scatter-mainG");if(e.lasso)e.lasso.items(s.select(".sjpcb-scatter-series").selectAll('path[name="serie"]')).targetArea(s).on("start",o).on("draw",a).on("end",i);function o(s){if(t.lassoOn){e.lasso.items().attr("transform",(s=>t.transform(e,s,1/2))).style("fill-opacity",(e=>t.getOpacity(e)!=0?.5:0)).classed("not_possible",true).classed("selected",false)}}function a(s){if(t.lassoOn){e.lasso.possibleItems().attr("transform",(s=>t.transform(e,s,1.2))).style("fill-opacity",(e=>t.getOpacity(e))).classed("not_possible",false).classed("possible",true);e.lasso.notPossibleItems().attr("transform",(s=>t.transform(e,s,1/2))).style("fill-opacity",(e=>t.getOpacity(e)!=0?.5:0)).classed("not_possible",true).classed("possible",false)}}function i(s){if(t.lassoOn){e.lasso.items().classed("not_possible",false).classed("possible",false);e.lasso.selectedItems().attr("transform",(s=>t.transform(e,s,1.3)));e.lasso.items().style("fill-opacity",(e=>t.getOpacity(e)));t.selectedItems=[];for(const s of e.lasso.selectedItems()){const e=s.__data__;if("sampleId"in e&&!(e.hidden["category"]||e.hidden["shape"]))t.selectedItems.push(s)}e.lasso.notSelectedItems().attr("transform",(s=>t.transform(e,s)));n(s.sourceEvent)}}function n(e){const s=t.selectedItems.map((t=>t.__data__));t.dom.tip.clear().hide();if(t.selectedItems.length==0)return;t.dom.tip.show(e.clientX,e.clientY);const o=t.dom.tip.d.append("div");o.append("div").attr("class","sja_menuoption sja_sharp_border").text(`List ${t.selectedItems.length} samples`).on("click",(e=>{t.dom.tip.hide();t.showTable({name:"Group "+(t.config.groups.length+1),items:s},e.clientX,e.clientY,true)}));o.append("div").attr("class","sja_menuoption sja_sharp_border").text("Add to a group").on("click",(async()=>{const e={name:"Group",items:s};const o=k([e]);const a=D(o);_(t.app,a,t.state.groups)}));o.append("div").attr("class","sja_menuoption sja_sharp_border").text("Add to a group and filter").on("click",(()=>{const e={name:"Group",items:s};const o=k([e]);const a=D(o);_(t.app,a,t.state.groups);t.addToFilter(o)}));if("sample"in s[0])o.append("div").attr("class","sja_menuoption sja_sharp_border").text("Show samples").on("click",(async e=>{const o=[];for(const t of s)o.push({sampleId:t.sampleId,sampleName:t.sample});t.app.dispatch({type:"plot_create",id:pt(),config:{chartType:"sampleView",samples:o}});t.dom.tip.hide()}))}if(t.lassoOn){s.on(".zoom",null);s.on("mousedown.drag",null);s.call(e.lasso)}};t.addGroup=async function(e){e.plotId=t.id;await t.app.vocabApi.addGroup(e);t.dom.tip.hide()};t.setTools=function(){if(!t.charts[0])return;const e=t.config.settings.controls.isOpen;const s=t.dom.toolsDiv.style("background-color","white");s.selectAll("*").remove();let o="block";if(e)o="inline-block";const a=s.insert("div").style("display",o).style("margin","20px").attr("name","sjpp-reset-btn");p["restart"](a,{handler:g});const i=s.insert("div").style("display",o).style("margin","20px").attr("name","sjpp-zoom-in-btn");p["zoomIn"](i,{handler:f});const n=s.insert("div").style("display",o).style("margin","20px").attr("name","sjpp-zoom-out-btn");p["zoomOut"](n,{handler:u});const r=s.insert("div").style("display",o).style("margin","20px");const l=s.insert("div").style("display",o).style("margin","20px");if(!(t.is2DLarge||t.is3D)){p["search"](r,{handler:e=>t.searchSample(e)});p["lasso"](l,{handler:y,enabled:t.lassoOn})}t.dom.groupDiv=s.insert("div").style("display",o).style("margin","20px");const c=t.charts[0].mainG;const h=S().scaleExtent([.5,t.config.scaleDotTW?4:10]).on("zoom",m).filter((t=>{if(t.type==="wheel")return t.ctrlKey;return true}));if(t.config.scaleDotTW&&t.zoom>4)g();c.call(h);for(const e of t.charts){e.lasso=w();t.lassoReset(e)}t.updateGroupsButton();t.settings;function m(e){for(const s of t.charts){const o=e.transform.rescaleX(s.xAxisScale);const a=e.transform.rescaleY(s.yAxisScale);s.xAxis.call(s.axisBottom.scale(o));s.yAxis.call(s.axisLeft.scale(a));s.serie.attr("transform",e.transform);t.zoom=e.transform.scale(1).k;const i=s.serie.selectAll('path[name="serie"');i.attr("transform",(e=>t.transform(s,e,1)));if(t.lassoOn)s.lasso.selectedItems().attr("transform",(e=>t.transform(s,e,1.2)));if(t.config.scaleDotTW)t.drawScaleDotLegend(s)}}function f(){for(const e of t.charts)if(t.is2DLarge)t.zoom=t.zoom+.25;else h.scaleBy(e.mainG.transition().duration(750),1.5)}function u(){for(const e of t.charts)if(t.is2DLarge)t.zoom=t.zoom-.25;else h.scaleBy(e.mainG.transition().duration(750),.5)}function g(){for(const e of t.charts)if(t.is2DLarge)t.zoom=1;else e.mainG.transition().duration(750).call(h.transform,d);t.render()}function y(){t.lassoOn=!t.lassoOn;for(const e of t.charts){if(t.lassoOn){e.mainG.on(".zoom",null);e.mainG.call(e.lasso)}else{e.mainG.on("mousedown.drag",null);e.lasso.items().classed("not_possible",false);e.lasso.items().classed("possible",false);e.lasso.items().attr("r",t.settings.size).style("fill-opacity",(e=>t.getOpacity(e)));e.mainG.call(h);t.selectedItems=null}}l.select("*").remove();p["lasso"](l,{handler:y,enabled:t.lassoOn})}};t.updateGroupsButton=function(){t.dom.groupDiv.selectAll("*").remove();t.dom.tip.hide();if(t.config.groups.length==0)return;t.dom.groupDiv.append("button").style("border","none").style("background","transparent").style("padding",0).append("div").style("font-size","1.1em").html(`&#931${t.config.groups.length+1};`).on("click",(e=>{if(t.config.groups.length==1)t.showGroupMenu(e,t.config.groups[0]);else t.showGroupsMenu(e)}))};t.renderLegend=function(e,s){const o=e.legendG;o.selectAll("*").remove();let a=0;let i=25;if(!t.config.colorTW&&!t.config.shapeTW&&!t.config.colorColumn){if(t.config.scaleDotTW){e.scaleG=o.append("g").attr("transform",`translate(${a},${t.legendHeight-150})`);t.drawScaleDotLegend(e)}return}let n;let r=Math.min(.8,20/e.colorLegend.size);if(r<.5)r=.5;const p=o.style("font-size",`${r}em`);let d=t.config.term0?`${e.id}, n=${e.cohortSamples.length}`:`${e.cohortSamples.length} ${t.config.sampleType?t.config.sampleType+"s":"samples"}`;if(t.filterSampleStr)d+=`, search = ${t.filterSampleStr}`;p.append("text").attr("x",0).attr("y",i).text(d).style("font-weight","bold");i+=s+10;if(t.config.colorTW||t.config.colorColumn){n=`${h(t.config.colorTW?.term?.name||t.config.colorColumn.name,t.config.shapeTW==undefined)}`;const r=e.colorLegend.get("Ref");if(t.config.colorTW?.term?.type=="geneVariant"&&t.config.colorTW?.q.type=="values")i=t.renderGeneVariantLegend(e,a,i,o,t.config.colorTW,"category",e.colorLegend);else{p.append("text").attr("id","legendTitle").attr("x",a).attr("y",i).text(n).style("font-weight","bold");i+=s;if(t.config.colorTW?.q?.mode==="continuous"){const o=150;const[a,n]=e.colorGenerator.domain();const r=l().domain([a,n]).range([0,o]);const c=(n-a)/4;const d=[a,a+c,a+2*c,a+3*c,n];const h=B(r).tickValues(d);p.append("g").attr("transform",`translate(0, 100)`).call(h);e.startRect=p.append("rect").attr("x",-25).attr("y",100).attr("width",20).attr("height",20).style("fill",t.config.startColor[e.id]).on("click",(s=>t.editColor(e,"startColor",e.startRect)));e.stopRect=p.append("rect").attr("x",o+5).attr("y",100).attr("width",20).attr("height",20).style("fill",t.config.stopColor[e.id]).on("click",(s=>t.editColor(e,"stopColor",e.stopRect)));p.append("rect").attr("x",0).attr("y",100).attr("width",o).attr("height",20).style("fill",`url(#linear-gradient-${e.id})`);i+=s}else{for(const[n,r]of e.colorLegend){if(n=="Ref")continue;const l=n;const c=t.config.colorTW?.q.hiddenValues?n in t.config.colorTW.q.hiddenValues:false;const[d,h]=m(p,r,l,a,i,c);if(!t.config.colorColumn){d.on("click",(s=>t.onLegendClick(e,o,"colorTW",n,s,r)));h.on("click",(s=>t.onLegendClick(e,o,"colorTW",n,s,r)))}i+=s}}}if(r?.sampleCount>0){i=i+s;const n=o.append("g");n.append("text").attr("x",a).attr("y",i).text("Reference").style("font-weight","bold");i=i+s;const l=o.append("g");l.append("path").attr("transform",(t=>`translate(${a-2}, ${i-5}) scale(0.5)`)).style("fill",r.color).attr("d",qt[0]).style("stroke",c(r.color).darker());l.on("click",(s=>t.onLegendClick(e,o,"colorTW","Ref",s,r)));const p=o.append("g").append("text").attr("x",a+10).attr("y",i).text(`n=${r.sampleCount}`).style("text-decoration",!t.settings.showRef?"line-through":"none").attr("alignment-baseline","middle");p.on("click",(s=>t.onLegendClick(e,o,"colorTW","Ref",s,r)))}}if(t.config.scaleDotTW){e.scaleG=o.append("g").attr("transform",`translate(${a},${t.legendHeight-100})`);t.drawScaleDotLegend(e)}if(t.config.shapeTW){a=!t.config.colorTW?0:t.config.colorTW.term.type=="geneVariant"&&t.config.colorTW.q.type=="values"?300:200;i=60;n=`${h(t.config.shapeTW.term.name)}`;if(t.config.shapeTW.term.type=="geneVariant"&&t.config.shapeTW.q.type=="values")t.renderGeneVariantLegend(e,a,i,o,t.config.shapeTW,"shape",e.shapeLegend);else{const r=o.append("g");r.append("text").attr("x",a).attr("y",i).text(n).style("font-weight","bold");i+=s+10;const l="gray";for(const[n,p]of e.shapeLegend){if(n=="Ref")continue;const d=p.shape%qt.length;const h=qt[d];const m=n;const f=p.sampleCount;const u=t.config.shapeTW.q.hiddenValues?n in t.config.shapeTW.q.hiddenValues:false;const g=r.append("g");g.append("path").attr("transform",(t=>`translate(${a}, ${i-5}) scale(0.5)`)).style("fill",l).attr("d",h).style("stroke",c(l).darker());g.append("text").attr("x",a+10).attr("y",i).text(`${m}, n=${f}`).style("text-decoration",u?"line-through":"none").attr("alignment-baseline","middle");i+=s;g.on("click",(s=>t.onLegendClick(e,o,"shapeTW",n,s,p)))}}}function h(t,e=false){if(t.length>25&&!e)t=t.slice(0,25)+"...";return t}function m(s,a,i,n,r,l=false){Math.min(5*40/e.colorLegend.size,5);const p=s.append("g");p.append("path").attr("d",qt[0]).attr("transform",`translate(${n-2}, ${r-5}) scale(0.5)`).style("fill",a.color).style("stroke",c(a.color).darker());if(!t.config.colorColumn)p.on("click",(s=>t.onLegendClick(e,o,"colorTW",key,s,a)));const d=s.append("g");d.append("text").attr("name","sjpp-scatter-legend-label").attr("x",n+10).attr("y",r).text(`${i}, n=${a.sampleCount}`).style("text-decoration",l?"line-through":"none").attr("alignment-baseline","middle");return[p,d]}};t.drawScaleDotLegend=function(s){const a=s.scaleG;a.selectAll("*").remove();const i=70;const n=t.settings.minShapeSize/3;const r=t.settings.maxShapeSize/3;const l=t.settings.scaleDotOrder;const c=l=="Ascending";const p=a.append("g");p.append("text").text(t.config.scaleDotTW.term.name).style("font-weight","bold");const d=b(s.scaleMin).toString();const h=b(s.scaleMax).toString();const m=10;const f=40;const u=16;const g=u*n;const y=u*r;const v=g/2;const x=y/2;const S=a.append("g").attr("transform",`translate(${m},${f})`);const w=5+d.toString().length*7;S.append("path").attr("d",qt[0]).style("fill","#aaa").style("stroke","#aaa").attr("transform",`translate(${c?-v:-x}, ${c?-v:-x}) scale(${c?n:r})`);const C=a.append("g").attr("transform",`translate(${i+m},${f})`);C.append("path").attr("d",qt[0]).style("fill","#aaa").style("stroke","#aaa").attr("transform",`translate(${c?-x:-v}, ${c?-x:-v}) scale(${c?r:n})`);S.append("text").attr("x",c?-v-w:-x-w).attr("y",5).style("font-size",".8em").attr("text-anchor","start").text(d);C.append("text").attr("x",c?y+w:g+w).attr("y",5).style("font-size",".8em").text(h);S.append("line").attr("x1",0).attr("y1",c?v:x).attr("x2",i).attr("y2",c?x:v).style("stroke","#aaa");S.append("line").attr("x1",0).attr("y1",c?-v:-x).attr("x2",i).attr("y2",c?-x:-v).style("stroke","#aaa");a.append("rect").attr("width",110*t.zoom).attr("height",50).attr("fill","transparent").on("click",(s=>{const a=new e({padding:"3px"});const i=a.d;i.append("label").text("Min:");const n=i.append("input").attr("type","number").attr("min","1").attr("max","100").style("width","50px").attr("value",t.settings.minShapeSize).on("change",(()=>{let e=parseFloat(n.node().value);if(e<Gt){e=Gt;n.node().value=Gt}t.config.settings.sampleScatter.minShapeSize=e;t.app.dispatch({type:"plot_edit",id:t.id,config:t.config})}));i.append("label").text("Max:");const r=i.append("input").attr("type","number").attr("min","1").attr("max","1000").style("width","50px").attr("value",t.settings.maxShapeSize).on("change",(()=>{let e=parseFloat(r.node().value);if(e>Rt){e=Rt;r.node().value=Rt}t.config.settings.sampleScatter.maxShapeSize=e;t.app.dispatch({type:"plot_edit",id:t.id,config:t.config})}));const c=a.d.append("div");c.append("label").text("Order: ");const p=["Ascending","Descending"];c.selectAll("input").data(p).enter().append("div").style("display","inline-block").each(d);function d(e){const s=o(this);const a=s.append("input").attr("type","radio").attr("id",e).attr("value",e).property("checked",(t=>t==l));s.append("label").text(e).attr("for",e);a.on("change",(e=>{t.config.settings.sampleScatter.scaleDotOrder=e.target.value;c.selectAll("input").nodes().find((t=>t.value!=e.target.value)).checked=false;t.app.dispatch({type:"plot_edit",id:t.id,config:t.config})}))}a.showunder(s.target)}))};t.editColor=function(s,o,a){const i=t.config[o][s.id];const n=new e({padding:"3px"});const r=n.clear().d.append("Label").text("Color:").append("input").attr("type","color").attr("value",c(i).formatHex()).on("change",(()=>{const e=r.node().value;t.changeGradientColor(s,o,a,e);n.hide()}));n.showunder(a.node(),false)};t.changeGradientColor=function(e,s,o,a){const i=c(a).formatHex();t.config[s][e.id]=i;o.style("fill",i);e.colorGenerator=l().range([t.config.startColor[e.id],t.config.stopColor[e.id]]);t.startGradient[e.id].attr("stop-color",t.config.startColor[e.id]);t.stopGradient[e.id].attr("stop-color",t.config.stopColor[e.id]);t.app.dispatch({type:"plot_edit",id:t.id,config:t.config})};t.renderGeneVariantLegend=function(e,s,o,a,i,n,r){const l=125;const p=i.term.name.length>25?i.term.name.slice(0,25)+"...":i.term.name;let d=p;const f=a.append("g").style("font-size","0.9em");f.append("text").attr("id","legendTitle").attr("x",s).attr("y",o).text(d).style("font-weight","bold");s+=l;const u=e.cohortSamples[0]["cat_info"][n];for(const[p,d]of u.entries()){o+=25;const p=d.dt;const u=h[d.origin]?.label;const g=u?`${u[0]} ${m[p]}`:m[p];f.append("text").attr("x",s-l).attr("y",o).text(u?`${u} ${m[p]}`:m[p]).style("font-weight","bold");o+=25;for(const[p,d]of r){if(p=="Ref")continue;if(!p.includes(g))continue;const r=p.split(", ")[0];const h=f.append("g");if(n=="shape"){const t=d.shape%qt.length;h.append("path").attr("transform",(t=>`translate(${s-l-2}, ${o-8}) scale(0.5)`)).style("fill","gray").attr("d",qt[t]).style("stroke",c("gray").darker())}else{h.append("path").attr("d",qt[0]).attr("transform",`translate(${-2}, ${o-8}) scale(0.5)`).style("fill",d.color).style("stroke",c(d.color).darker());h.on("click",(s=>t.onLegendClick(e,a,"colorTW",p,s,d)))}const m=i.q.hiddenValues?p in i.q.hiddenValues:false;f.append("g").append("text").attr("x",s-l+10).attr("y",o).attr("name","sjpp-scatter-legend-label").style("text-decoration",m?"line-through":"none").text(r+(p.includes(g)?`, n=${d.sampleCount}`:"")).on("click",(s=>t.onLegendClick(e,f,n=="shape"?"shapeTW":"colorTW",p,s,d)));o+=25}}return o}}var Wt=Object.freeze({__proto__:null,setRenderers:Lt});function Ot(t){t.showTooltip=function(e,s){const o=e.type=="click";t.onClick=o;if(o)t.searchMenu?.hide();if(!(e.target.tagName=="path"&&e.target.getAttribute("name")=="serie")){if(t.onClick&&o){t.onClick=false;t.dom.tooltip.hide();return}if(!o){t.dom.tooltip.hide()}return}const a=e.target.__data__;const i="sample"in a;let n=10;n=n/t.zoom;const r=s.data.samples.filter((e=>{const o=zt(e.x,e.y,a.x,a.y,s);if(!("sampleId"in e)&&(!t.settings.showRef||t.settings.refSize==0))return false;return t.getOpacity(e)>0&&o<n}));r.sort(((e,s)=>{if(!("sampleId"in e))return 1;if(t.config.term){if(e.x<s.x)return-1;if(e.x>s.x)return 1;if(e.y<s.y)return-1;return 1}if(t.config.colorTW){if(t.config.colorTW.term.type=="categorical"){if(e.category.includes(f.WT.label)||e.category.includes(f.Blank.label))return 1}else{if(e.category<s.category)return-1;else if(e.category>s.category)return 1}}if(e.shape.includes(f.WT.label)||e.shape.includes(f.Blank.label))return 1;return-1}));if(r.length==0)return;const l=[];const p=t.config.term?true:false;const d=t=>`${t.x.toPrecision(2)},${t.y.toPrecision(2)}`;for(const t of r){const e=d(t);let s=l.find((t=>t.id==e));if(!s){s={id:e,parentId:null,samples:[t],level:1,category:null,children:[]};l.push(s);if(p){const o=j("x",t);const a={id:o,parentId:e,samples:[t],level:2,category:"X",children:[],value:o};l.push(a);s.children.push(a);const i=j("y",t);const n={id:`${i}${o}`,parent:a,parentId:o,samples:[t],level:3,category:"Y",children:[],value:i};a.children.push(n);l.push(n);s.xnode=a;s.ynode=n}}else{s.samples.push(t);if(p){s.xnode.samples.push(t);s.ynode.samples.push(t)}}}let h=p?4:2;let m=p?["y","x",""]:[""];if(t.config.colorTW)C("category",t.config.colorTW);if(t.config.shapeTW)C("shape",t.config.shapeTW,t.config.colorTW);if(t.config.scaleDotTW)C("scale",t.config.scaleDotTW,t.config.shapeTW);t.dom.tooltip.clear();const u=t.dom.tooltip.d.style("padding","5px");const g=t.state.termdbConfig.queries?.singleSampleGenomeQuantification;const y=t.state.termdbConfig.queries?.singleSampleMutation;if(r.length>1)u.append("div").style("color","#aaa").style("padding","3px").style("font-weight","bold").html(`${r.length} Samples`);const b=u.append("div").style("max-height","400px").style("overflow","scroll");if(r.length>3)b.attr("class","sjpp_show_scrollbar");const v=b.append("table").style("width","100%");const x=l.filter((t=>p?t.level==1:t.level==2));if(p)for(const t of x){if(r.length>1)v.append("tr").append("td").attr("colspan",3).style("border-top","1px solid #aaa");for(const e of t.children){w(e)}}else for(const t of x){if(r.length>1)v.append("tr").append("td").attr("colspan",3).style("border-top","1px solid #aaa");w(t)}t.dom.tooltip.show(e.clientX,e.clientY,true,false);function S(e){const s=e=="category"?t.config.colorTW:e=="shape"?t.config.shapeTW:e=="scale"?t.config.scaleDotTW:e=="X"&&t.config.term?t.config.term:e=="Y"&&t.config.term2?t.config.term2:null;return s}function w(e){const a=S(e.category);e.added=true;let n;const l=e.samples[0];if(l.category!="Ref"){let n=v.append("tr");const p=a!=null&&(a==t.config.colorTW||a==t.config.shapeTW);let d=a?a.term.name:e.category;if(r.length>1&&!i)d=d+` (${e.samples.length})`;n.append("td").style("color","#aaa").text(d);const h=n.append("td");if(p){const i=a==t.config.colorTW?t.getColor(l,s):t.config.colorTW?"gray":t.settings.defaultColor;const r=a==t.config.colorTW?s.shapeLegend.get("Ref").shape%qt.length:s.shapeLegend.get(l.shape).shape%qt.length;const p=qt[r];let m="black";const u=c("white").toString();if(a?.term.type=="geneVariant"&&a.q.type=="values"){for(const t in f){const s=f[t];if(e.value.includes(s.label)){if(c(s.color).toString()!=u)m=s.color;break}}if(o){n.append("td").append("button").text("Lollipop").on("click",(async e=>{await t.openLollipop(d);t.dom.tip.hide()}))}}let g=e.value.toString().length;const y=g*9+60;const b=h.append("svg").attr("width",y).attr("height","25px");const v=b.append("g").attr("transform","translate(10, 14)");v.append("path").attr("d",p).attr("fill",i).attr("stroke","#aaa").attr("transform","translate(0, -2) scale(0.5)");const x=v.append("text").attr("x",12).attr("y",6).attr("font-size","0.9em");x.append("tspan").text(e.value).attr("fill",m)}else h.style("padding","2px").text(`${e.value}`)}for(const t of e.children)if(!t.added)w(t);if(e.children.length==0&&i){for(const s of e.samples){if("info"in s)for(const[t,e]of Object.entries(s.info)){n=v.append("tr");n.append("td").style("color","#aaa").text(t);n.append("td").text(e)}n=v.append("tr");n.append("td").style("color","#aaa").text("Sample");n.append("td").style("padding","2px").text(s.sample);if("sampleId"in s&&o){n.append("td").append("button").text("Sample view").on("click",(e=>t.openSampleView(s)));if(y)n.append("td").append("button").text("Disco").on("click",(async e=>t.openDiscoPlot(s)));if(g)n.append("td").append("button").text("Met Array").on("click",(async e=>t.openMetArray(s)))}}}}function C(t,e,s){for(const o of r){const a=j(t,o,e);let i="";for(const t of m)i+=j(t,o,s);const n=a+i;let r=l.find((t=>t.id==n&&t.parentId==i));let c=l.find((t=>t.id==i));if(!r){r={id:n,parentId:i,samples:[],level:h,category:t,children:[],value:a};l.push(r)}r.samples.push(o);if(c)c.children.push(r)}h++;m.unshift(t)}function j(t,e,s){if(t=="")return"";let o=e[t];if(s?.term.type=="geneVariant"&&s.q.type=="values"){const s=o.split(", ")[0];for(const a in f){const i=f[a];if(s==i.label){const s=e.cat_info[t].find((t=>t.class==i.key)).mname;if(s)o=`${s} ${o}`}}}if(typeof o=="number"&&o%1!=0)o=o.toPrecision(2);return o}};t.openSampleView=function(e){t.dom.tooltip.hide();t.onClick=false;t.app.dispatch({type:"plot_create",id:pt(),config:{chartType:"sampleView",sample:{sampleId:e.sampleId,sampleName:e.sample}}});t.dom.tip.hide()};t.openMetArray=async function(e){t.dom.tooltip.hide();t.onClick=false;e.sample_id=e.sample;for(const s in t.state.termdbConfig.queries.singleSampleGenomeQuantification){const o=u(t.opts.plotDiv);o.header.text(e.sample_id);const a=await import("./plot.ssgq-e49cb70b.js");await a.plotSingleSampleGenomeQuantification(t.state.termdbConfig,t.state.vocab.dslabel,s,e,o.body.append("div").style("margin","20px"),t.app.opts.genome)}t.dom.tip.hide()};t.openDiscoPlot=async function(e){t.dom.tooltip.hide();t.onClick=false;e.sample_id=e.sample;const s=u(t.opts.plotDiv);s.header.text(e.sample_id);const o=await import("./plot.disco-43e18d2f.js");o.default(t.state.termdbConfig,t.state.vocab.dslabel,e,s.body,t.app.opts.genome)};t.openLollipop=async function(e){t.dom.tooltip.hide();t.onClick=false;const s=u(t.opts.plotDiv||select(t.opts.holder.node().parentNode));s.header.text(e);const o={holder:s.body.append("div").style("margin","20px"),genome:t.app.opts.genome,nobox:true,query:e,tklst:[{type:"mds3",dslabel:t.app.opts.state.vocab.dslabel,filter0:t.state.termfilter.filter0,filterObj:structuredClone(t.state.termfilter.filter)}]};const a=await import("./app-a8c4854a.js").then((function(t){return t.c3}));await a.default(o)};t.onLegendClick=function(s,o,a,i,n,r){const l=t.config[a];const p=l.q.hiddenValues?i in l.q.hiddenValues:false;const d=new e({padding:"0px"});const h=d.d.append("div");h.append("div").attr("class","sja_menuoption sja_sharp_border").text(p?"Show":"Hide").on("click",(()=>{t.hideCategory(o,l,i,!p);d.hide();const e={};e[a]=l;t.app.dispatch({type:"plot_edit",id:t.id,config:e})}));h.append("div").attr("class","sja_menuoption sja_sharp_border").text("Show only").on("click",(()=>{const e=a=="colorTW"?s.colorLegend:s.shapeLegend;for(const s of e.keys())t.hideCategory(o,l,s,l.term.type=="geneVariant"&&l.q.type=="values"?!s.startsWith(i):s!=i);d.hide();const n={};n[a]=l;t.app.dispatch({type:"plot_edit",id:t.id,config:n})}));h.append("div").attr("class","sja_menuoption sja_sharp_border").text("Show all").on("click",(()=>{d.hide();const e=a=="colorTW"?s.colorLegend:s.shapeLegend;for(const s of e.keys())t.hideCategory(o,l,s,false);const i={};i[a]=l;t.app.dispatch({type:"plot_edit",id:t.id,config:i})}));if(r.color){const e=c(r.color).formatHex();const s=h.append("div").attr("class","sja_sharp_border").style("padding","0px 10px").text("Color:").append("input").attr("type","color").attr("value",e).on("change",(()=>{t.changeColor(i,s.node().value);d.hide()}))}d.showunder(n.target)};t.hideCategory=function(e,s,o,a){if(o=="Ref"){t.settings.showRef=!a;t.app.dispatch({type:"plot_edit",id:t.id,config:{settings:{sampleScatter:t.settings}}})}if(!s.q.hiddenValues)s.q.hiddenValues={};const i=!(s.term.type=="geneVariant"&&s.q.type=="values")&&s.term.values[o]?s.term.values[o]:{key:o,label:o};const n=e.selectAll(`text[name="sjpp-scatter-legend-label"]`).nodes();const r=n.find((t=>o.startsWith(t.innerHTML)))?.parentElement;if(r)r.style["text-decoration"]=a?"line-through":"none";if(!a)delete s.q.hiddenValues[o];else s.q.hiddenValues[o]=i};t.changeColor=async function(e,s){const o=t.config.colorTW;if(!(o.term.type=="geneVariant"&&o.q.type=="values")&&o.term.values[e])o.term.values[e].color=s;else{if(!o.term.values)o.term.values={};o.term.values[e]={key:e,label:e,color:s}}await t.app.dispatch({type:"plot_edit",id:t.id,config:{colorTW:o}})};t.searchSample=async function(s){if(!this.searchMenu){this.searchMenu=new e({padding:"3px"});this.samplesData=await this.app.vocabApi.getSamplesByName({filter:t.state.termfilter.filter});const s=t=>{};q(this.searchMenu.d,this.samplesData,s,(e=>t.filterSamples(e)))}this.searchMenu.show(s.clientX,s.clientY,false)};t.filterSamples=function(e){this.filterSampleStr=e;t.render()};t.getCategoryInfo=function(t,e){if(!(e in t))return"";return t[e]};t.addToFilter=function(e){const s=N(t.state.termfilter.filter,"filterUiRoot");const o=R([s,D(e)]);o.tag="filterUiRoot";t.app.dispatch({type:"filter_replace",filter:o})};t.showTable=function(e,s,o,a){let i=[];const n=[];const r=e.items[0];if("sample"in r)n.push(f("Sample","label"));if(t.config.colorTW)n.push(f(t.config.colorTW.term.name,"label"));if(t.config.shapeTW)n.push(f(t.config.shapeTW.term.name,"label"));let l=false;for(const s of e.items){const e=[];if("sample"in s)e.push(f(s.sample));if(t.config.colorTW)e.push(f(t.getCategoryInfo(s,"category")));if(t.config.shapeTW)e.push(f(t.getCategoryInfo(s,"shape")));if("info"in s){l=true;const t=[];for(const[e,o]of Object.entries(s.info))t.push(`${e}: ${o}`);e.push(f(t.join(", ")))}i.push(e)}if(l)n.push(f("Info","label"));t.dom.tip.clear();const c=t.dom.tip.d.append("div").style("padding","5px");const p=c.append("div").style("margin-top","5px");const d=p.append("div").html("&nbsp;"+e.name).style("font-size","0.9rem").on("click",(()=>{const s=d.select("input").empty();if(!s)return;d.html("");const o=d.append("input").attr("value",e.name).on("change",(async()=>{const s=o.node().value;if(s)t.renameGroup(e,s);else o.node().value=e.name;d.html("&nbsp;"+e.name)}));o.node().focus();o.node().select()}));const h=c.append("div");const m=[];if(a){const e={text:"Add to a group",callback:e=>{const s=[];for(const o of e)s.push(t.selectedItems[o].__data__);const o={name:`Group ${t.config.groups.length+1}`,items:s,index:t.config.groups.length};const a=D(k([o]));_(t.app,a,t.state.groups)}};m.push(e)}else{const i={text:"Delete samples",callback:i=>{e.items=e.items.filter(((t,e,s)=>!(e in i)));t.showTable(e,s,o,a)}};m.push(i)}I({rows:i,columns:n,div:h,showLines:true,maxWidth:n.length*"15"+"vw",maxHeight:"35vh",buttons:m,selectAll:true});t.dom.tip.show(s,o,false,false);function f(t,e="value"){let s={};s[e]=t;return s}};t.showGroupMenu=function(e,s){t.dom.tip.clear();t.dom.tip.show(e.clientX,e.clientY,false,true);const o=t.dom.tip.d.append("div");const a=t.config.name?t.config.name:"Summary scatter";const i=k([s],a+" groups");const n=o.append("div").attr("name","sjpp-group-input-div").html("&nbsp;"+s.name).style("font-size","0.9rem").on("click",(()=>{const e=n.select("input").empty();if(!e)return;n.html("");const o=n.append("input").attr("value",s.name).on("change",(async()=>{const e=o.node().value;if(e)t.renameGroup(s,e);else o.node().value=s.name;n.html("&nbsp;"+s.name)}));o.node().focus();o.node().select()}));o.append("div").attr("class","sja_menuoption sja_sharp_border").text(`Edit ${s.items.length} samples`).on("click",(o=>{t.dom.tip.hide();t.showTable(s,e.clientX,e.clientY,false)}));t.addCommonMenuItems(o,i);o.append("div").attr("class","sja_menuoption sja_sharp_border").text(`Delete group`).on("click",(async e=>{await t.app.vocabApi.deleteGroup(s.name);t.dom.tip.hide()}));o.append("div").attr("class","sja_menuoption sja_sharp_border").text("Add to filter").on("click",(()=>{t.addToFilter(i);t.app.dispatch({type:"plot_edit",id:t.id,config:{groups:t.config.groups}})}));o.append("div").attr("class","sja_menuoption sja_sharp_border").text(s.showOnly?"Show All":"Show Only").on("click",(()=>{s.showOnly=!s.showOnly;t.app.dispatch({type:"plot_edit",id:t.id,config:{groups:t.config.groups}})}))};t.renameGroup=async function(e,s){const o=t.config.groups.findIndex((t=>t.name==s));if(o!=-1)alert(`Group named ${s} already exists`);else await t.app.dispatch({type:"rename_group",index:e.index,newName:s})};t.addCommonMenuItems=function(e,s){A(t.dom.tip,e,s,t.app,t.id,t.state);if(t.state.supportedChartTypes.includes("survival"))M("survival",e,"Compare survival",t.dom.tip,s,t.id,this);if(t.state.supportedChartTypes.includes("cuminc"))M("cuminc",e,"Compare cumulative incidence",t.dom.tip,s,t.id,this);const o=e.append("div").attr("class","sja_menuoption sja_sharp_border").html("Summarize");o.insert("div").html("›").style("float","right");o.on("click",(async e=>{L(o,(e=>{W(e,s,t.app,t.id)}),t.app,t.dom.tip)}))};t.showGroupsMenu=function(e){t.dom.tip.clear();t.dom.tip.show(e.clientX,e.clientY,false,true);const s=t.dom.tip.d.append("div");const o=t.config.name?t.config.name:"Summary scatter";const a=k(t.config.groups,o+" groups");let i=s.append("div");for(const[o,a]of t.config.groups.entries()){i=s.append("div").attr("class","sja_menuoption sja_sharp_border");i.insert("div").style("display","inline-block").text(` ${a.name}: ${a.items.length} `);i.append("div").style("display","inline-block").style("float","right").html("&nbsp;&nbsp;›");i.on("click",(s=>{t.dom.tip.clear().hide();t.showGroupMenu(e,a)}))}t.addCommonMenuItems(s,a);i=s.append("div").attr("class","sja_menuoption sja_sharp_border").text("Delete groups").on("click",(async e=>{for(const e of t.config.groups)await t.app.vocabApi.deleteGroup(e.name);t.app.dispatch({type:"plot_edit",id:t.id,config:{groups:[]}})}))}}function zt(t,e,s,o,a){const i=a.xAxisScale(s)-a.xAxisScale(t);const n=a.yAxisScale(o)-a.yAxisScale(e);const r=Math.sqrt(Math.pow(i,2)+Math.pow(n,2));return r}var $t=Object.freeze({__proto__:null,setInteractivity:Ot});const It={filledCircle:"M 8,8 m 8,0 a 8,8 0 1,0 -16,0 a 8,8 0 1,0 16,0",emptyVerticalRectangle:"M4 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm0 1h8a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1",emptyCircle:"M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16",emptyShield:"M5.338 1.59a61 61 0 0 0-2.837.856.48.48 0 0 0-.328.39c-.554 4.157.726 7.19 2.253 9.188a10.7 10.7 0 0 0 2.287 2.233c.346.244.652.42.893.533q.18.085.293.118a1 1 0 0 0 .101.025 1 1 0 0 0 .1-.025q.114-.034.294-.118c.24-.113.547-.29.893-.533a10.7 10.7 0 0 0 2.287-2.233c1.527-1.997 2.807-5.031 2.253-9.188a.48.48 0 0 0-.328-.39c-.651-.213-1.75-.56-2.837-.855C9.552 1.29 8.531 1.067 8 1.067c-.53 0-1.552.223-2.662.524zM5.072.56C6.157.265 7.31 0 8 0s1.843.265 2.928.56c1.11.3 2.229.655 2.887.87a1.54 1.54 0 0 1 1.044 1.262c.596 4.477-.787 7.795-2.465 9.99a11.8 11.8 0 0 1-2.517 2.453 7 7 0 0 1-1.048.625c-.28.132-.581.24-.829.24s-.548-.108-.829-.24a7 7 0 0 1-1.048-.625 11.8 11.8 0 0 1-2.517-2.453C1.928 10.487.545 7.169 1.141 2.692A1.54 1.54 0 0 1 2.185 1.43 63 63 0 0 1 5.072.56",filledTriangle:"M7.022 1.566a1.13 1.13 0 0 1 1.96 0l6.857 11.667c.457.778-.092 1.767-.98 1.767H1.144c-.889 0-1.437-.99-.98-1.767z",emptyTriangle:"M7.938 2.016A.13.13 0 0 1 8.002 2a.13.13 0 0 1 .063.016.15.15 0 0 1 .054.057l6.857 11.667c.036.06.035.124.002.183a.2.2 0 0 1-.054.06.1.1 0 0 1-.066.017H1.146a.1.1 0 0 1-.066-.017.2.2 0 0 1-.054-.06.18.18 0 0 1 .002-.183L7.884 2.073a.15.15 0 0 1 .054-.057m1.044-.45a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767z",filledShield:"M5.072.56C6.157.265 7.31 0 8 0s1.843.265 2.928.56c1.11.3 2.229.655 2.887.87a1.54 1.54 0 0 1 1.044 1.262c.596 4.477-.787 7.795-2.465 9.99a11.8 11.8 0 0 1-2.517 2.453 7 7 0 0 1-1.048.625c-.28.132-.581.24-.829.24s-.548-.108-.829-.24a7 7 0 0 1-1.048-.625 11.8 11.8 0 0 1-2.517-2.453C1.928 10.487.545 7.169 1.141 2.692A1.54 1.54 0 0 1 2.185 1.43 63 63 0 0 1 5.072.56",filledDiamond:"M6.95.435c.58-.58 1.52-.58 2.1 0l6.515 6.516c.58.58.58 1.519 0 2.098L9.05 15.565c-.58.58-1.519.58-2.098 0L.435 9.05a1.48 1.48 0 0 1 0-2.098z",largeCross:"M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z",emptyDiamond:"M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z",plusIcon:"M8 2a.5.5 0 0 1 .5.5v5h5a.5.5 0 0 1 0 1h-5v5a.5.5 0 0 1-1 0v-5h-5a.5.5 0 0 1 0-1h5v-5A.5.5 0 0 1 8 2",filledEgg:"M14 10a6 6 0 0 1-12 0C2 5.686 5 0 8 0s6 5.686 6 10",filledPentagon:"M7.685.256a.5.5 0 0 1 .63 0l7.421 6.03a.5.5 0 0 1 .162.538l-2.788 8.827a.5.5 0 0 1-.476.349H3.366a.5.5 0 0 1-.476-.35L.102 6.825a.5.5 0 0 1 .162-.538l7.42-6.03Z",emptyEgg:"M8 15a5 5 0 0 1-5-5c0-1.956.69-4.286 1.742-6.12.524-.913 1.112-1.658 1.704-2.164C7.044 1.206 7.572 1 8 1s.956.206 1.554.716c.592.506 1.18 1.251 1.704 2.164C12.31 5.714 13 8.044 13 10a5 5 0 0 1-5 5m0 1a6 6 0 0 0 6-6c0-4.314-3-10-6-10S2 5.686 2 10a6 6 0 0 0 6 6",emptyPentagon:"M7.685 1.545a.5.5 0 0 1 .63 0l6.263 5.088a.5.5 0 0 1 .161.539l-2.362 7.479a.5.5 0 0 1-.476.349H4.099a.5.5 0 0 1-.476-.35L1.26 7.173a.5.5 0 0 1 .161-.54l6.263-5.087Zm8.213 5.28a.5.5 0 0 0-.162-.54L8.316.257a.5.5 0 0 0-.631 0L.264 6.286a.5.5 0 0 0-.162.538l2.788 8.827a.5.5 0 0 0 .476.349h9.268a.5.5 0 0 0 .476-.35l2.788-8.826Z",filledDiamondSuit:"M2.45 7.4 7.2 1.067a1 1 0 0 1 1.6 0L13.55 7.4a1 1 0 0 1 0 1.2L8.8 14.933a1 1 0 0 1-1.6 0L2.45 8.6a1 1 0 0 1 0-1.2",emptySquare:"M6.95.435c.58-.58 1.52-.58 2.1 0l6.515 6.516c.58.58.58 1.519 0 2.098L9.05 15.565c-.58.58-1.519.58-2.098 0L.435 9.05a1.48 1.48 0 0 1 0-2.098zm1.4.7a.495.495 0 0 0-.7 0L1.134 7.65a.495.495 0 0 0 0 .7l6.516 6.516a.495.495 0 0 0 .7 0l6.516-6.516a.495.495 0 0 0 0-.7L8.35 1.134z",emptyDiamondSuit:"M8.384 1.226a.463.463 0 0 0-.768 0l-4.56 6.468a.54.54 0 0 0 0 .612l4.56 6.469a.463.463 0 0 0 .768 0l4.56-6.469a.54.54 0 0 0 0-.612zM6.848.613a1.39 1.39 0 0 1 2.304 0l4.56 6.468a1.61 1.61 0 0 1 0 1.838l-4.56 6.468a1.39 1.39 0 0 1-2.304 0L2.288 8.92a1.61 1.61 0 0 1 0-1.838z",crossShape:"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708",filledSquare:"M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2z"};const Nt=Object.values(It);const Gt=.2;const Rt=4;const qt=Nt;class Vt{constructor(){this.type="sampleScatter";this.lassoOn=false;this.zoom=1;this.startGradient={};this.stopGradient={}}async init(t){const s=this.opts.holder.insert("div").style("display","inline-block");const a=s.insert("div").style("display","inline-block").attr("class","pp-termdb-plot-controls");this.mainDiv=this.opts.holder.insert("div").style("display","inline-block").style("vertical-align","top");const i=80;this.axisOffset={x:i,y:30};this.dom={header:this.opts.header,loadingDiv:this.opts.holder.append("div").style("position","absolute").style("left","45%").style("top","60%"),tip:new e({padding:"0px"}),tooltip:new e({padding:"2px",offsetX:10,offsetY:0}),controlsHolder:a,toolsDiv:s.insert("div")};this.settings={};if(this.dom.header)this.dom.header.html("Scatter Plot");Ot(this);Lt(this);document.addEventListener("scroll",(t=>this?.dom?.tooltip?.hide()));o(".sjpp-output-sandbox-content").on("scroll",(t=>this.dom.tooltip.hide()))}getState(t){const e=t.plots.find((t=>t.id===this.id));if(!e){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}const s=O(t);return{config:e,termfilter:t.termfilter,supportedChartTypes:t.termdbConfig.supportedChartTypes[s],matrixplots:t.termdbConfig.matrixplots,vocab:t.vocab,termdbConfig:t.termdbConfig,groups:z(t)}}getDataRequestOpts(){const t=this.config;const e=[];if(t.term)e.push(t.term);if(t.term2)e.push(t.term2);const s={name:t.name,colorTW:t.colorTW,filter:this.getFilter(),coordTWs:e};if(this.state.termfilter.filter0)s.filter0=this.state.termfilter.filter0;if(t.colorColumn)s.colorColumn=t.colorColumn;if(t.shapeTW)s.shapeTW=t.shapeTW;if(t.scaleDotTW){if(!t.scaleDotTW.q)t.scaleDotTW.q={};t.scaleDotTW.q.mode="continuous";s.scaleDotTW=t.scaleDotTW}if(t.term0)s.divideByTW=t.term0;return s}async main(){this.config=structuredClone(this.state.config);if(this.config.settings.sampleScatter.regression!=="None"&&this.config.term0){if(this.charts)for(const t of this.charts)t.chartDiv.selectAll("*").remove();this.dom.loadingDiv.style("display","block").html("Processing data...")}if(this.dom.header)this.dom.header.html(this.config.name+` <span style="opacity:.6;font-size:.7em;margin-left:10px;">SCATTER PLOT</span>`);g(this.settings,this.config.settings.sampleScatter);const t=this.getDataRequestOpts();if(t.coordTWs.length==1)return;const e=await this.app.vocabApi.getScatterData(t);if(e.error)throw e.error;this.charts=[];let s=0;for(const[t,o]of Object.entries(e)){if(!Array.isArray(o.samples))throw"data.samples[] not array";if(o.isLast)this.createChart(t,o,s);else this.createChart(t,o,0)}this.initRanges();this.is3D=this.config.term&&this.config.term0?.q.mode=="continuous";if(!this.config.colorColumn)await this.setControls();await this.processData();this.render();this.dom.loadingDiv.style("display","none");if(!this.is3D)this.setTools();this.dom.tip.hide()}createChart(t,e,s){const o=e.samples.filter((t=>"sampleId"in t));if(o.length>1e4)this.is2DLarge=true;const a=new Map(e.colorLegend);const i=new Map(e.shapeLegend);this.charts.splice(s,0,{id:t,data:e,cohortSamples:o,colorLegend:a,shapeLegend:i})}initRanges(){if(this.charts.length>1){const t=[];for(const e of this.charts)t.push(...e.data.samples);const e=t[0];const[s,o,a,i,n,r,l,c]=t.reduce(((t,e)=>[e.x<t[0]?e.x:t[0],e.x>t[1]?e.x:t[1],e.y<t[2]?e.y:t[2],e.y>t[3]?e.y:t[3],e.z<t[4]?e.z:t[4],e.z>t[5]?e.z:t[5],"scale"in e?e.scale<t[6]?e.scale:t[6]:Number.POSITIVE_INFINITY,"scale"in e?e.scale>t[7]?e.scale:t[7]:Number.NEGATIVE_INFINITY]),[e.x,e.x,e.y,e.y,e.z,e.z,e.scale,e.scale]);for(const t of this.charts){t.xMin=s;t.xMax=o;t.yMin=a;t.yMax=i;t.zMin=n;t.zMax=r;t.scaleMin=l;t.scaleMax=c}}else for(const t of this.charts){if(t.data.samples.length==0)return;const e=t.data.samples[0];const[s,o,a,i,n,r,l,c]=t.data.samples.reduce(((t,e)=>[e.x<t[0]?e.x:t[0],e.x>t[1]?e.x:t[1],e.y<t[2]?e.y:t[2],e.y>t[3]?e.y:t[3],e.z<t[4]?e.z:t[4],e.z>t[5]?e.z:t[5],"scale"in e?e.scale<t[6]?e.scale:t[6]:Number.POSITIVE_INFINITY,"scale"in e?e.scale>t[7]?e.scale:t[7]:Number.NEGATIVE_INFINITY]),[e.x,e.x,e.y,e.y,e.z,e.z,e.scale,e.scale]);t.xMin=s;t.xMax=o;t.yMin=a;t.yMax=i;t.zMin=n;t.zMax=r;t.scaleMin=l;t.scaleMax=c}}async setControls(){this.dom.controlsHolder.selectAll("*").remove();const t=this.charts[0]?.data.samples.find((t=>!("sampleId"in t)))||false;const e={type:"term",configKey:"scaleDotTW",chartType:"sampleScatter",usecase:{target:"sampleScatter",detail:"numeric"},title:"Scale sample by term value",label:"Scale by",vocabApi:this.app.vocabApi,numericEditMenuVersion:["continuous"]};const s={type:"term",configKey:"shapeTW",chartType:"sampleScatter",usecase:{target:"sampleScatter",detail:"shapeTW"},title:"Categories to assign a shape",label:"Shape",vocabApi:this.app.vocabApi};const o={label:"Sample size",type:"number",chartType:"sampleScatter",settingsKey:"size",title:"Sample size, represents the factor used to scale the sample",min:0};const a={label:"Min size",type:"number",chartType:"sampleScatter",settingsKey:"minShapeSize",title:"Minimum sample size",min:Gt,max:Rt};const i={label:"Max size",type:"number",chartType:"sampleScatter",settingsKey:"maxShapeSize",title:"Maximum sample size",min:Gt,max:Rt};const n={label:"Scale order",type:"radio",chartType:"sampleScatter",settingsKey:"scaleDotOrder",options:[{label:"Ascending",value:"Ascending"},{label:"Descending",value:"Descending"}]};const r={label:"Reference size",type:"number",chartType:"sampleScatter",settingsKey:"refSize",title:"It represents the area of the reference symbol in square pixels",min:0};const l={boxLabel:"Visible",label:"Show axes",type:"checkbox",chartType:"sampleScatter",settingsKey:"showAxes",title:`Option to show/hide plot axes`};const c=[{type:"term",configKey:"colorTW",chartType:"sampleScatter",usecase:{target:"sampleScatter",detail:"colorTW"},title:"Categories to color the samples",label:"Color",vocabApi:this.app.vocabApi,numericEditMenuVersion:["continuous","discrete"]},{label:"Opacity",type:"number",chartType:"sampleScatter",settingsKey:"opacity",title:"It represents the opacity of the elements",min:0,max:1,step:.1},{label:"Chart width",type:"number",chartType:"sampleScatter",settingsKey:"svgw"},{label:"Chart height",type:"number",chartType:"sampleScatter",settingsKey:"svgh"}];if(this.config.sampleCategory){const t=Object.values(this.config.sampleCategory.tw.term.values).map((t=>({label:t.label||t.key,value:t.key})));if(this.config.sampleCategory.order)t.sort(((t,e)=>{const s=this.config.sampleCategory.order.indexOf(t.value);const o=this.config.sampleCategory.order.indexOf(e.value);if(s<o)return-1;return 1}));if(!this.settings.sampleCategory)this.settings.sampleCategory=this.config.sampleCategory.defaultValue||"";t.push({label:"All",value:""});const e={label:"Sample type",type:"dropdown",chartType:"sampleScatter",settingsKey:"sampleCategory",options:t};c.push(e)}if(!this.is2DLarge){c.unshift({type:"term",configKey:"term0",chartType:"sampleScatter",usecase:{target:"sampleScatter",detail:"term0"},title:"Categories to divide by",label:this.config.term0?.q?.mode=="continuous"?"Z":"Divide by",vocabApi:this.app.vocabApi,numericEditMenuVersion:this.app.hasWebGL?.()?["discrete","continuous"]:["discrete"],processInput:t=>{if(t?.term.type=="integer"||t?.term.type=="float")t.q={mode:"continuous"}}})}else{c.push({label:"Sample size",type:"number",chartType:"sampleScatter",settingsKey:"threeSize",title:"Sample size",min:0,max:1,step:.001}),c.push({label:"Field of Vision",type:"number",chartType:"sampleScatter",settingsKey:"threeFOV",title:"Field of Vision",min:50,max:90,step:1})}if(this.config.term){c.unshift(...[{type:"term",configKey:"term",chartType:"sampleScatter",usecase:{target:"sampleScatter",detail:"numeric"},title:"X coordinate to plot the samples",label:"X",vocabApi:this.app.vocabApi,menuOptions:"!remove",numericEditMenuVersion:["continuous"]},{type:"term",configKey:"term2",chartType:"sampleScatter",usecase:{target:"sampleScatter",detail:"numeric"},title:"Y coordinate to plot the samples",label:"Y",vocabApi:this.app.vocabApi,menuOptions:"!remove",numericEditMenuVersion:["continuous"]}]);if(!this.is3D){c.splice(4,0,s);c.splice(5,0,e);if(this.config.scaleDotTW){c.splice(6,0,a);c.splice(7,0,i);c.splice(8,0,n);if(t)c.splice(9,0,r)}else{c.splice(6,0,o);if(t)c.splice(7,0,r)}c.push({label:"Show regression",type:"dropdown",chartType:"sampleScatter",settingsKey:"regression",options:[{label:"None",value:"None"},{label:"Lowess",value:"Lowess"},{label:"Polynomial",value:"Polynomial"}]})}else{c.push({label:"Chart depth",type:"number",chartType:"sampleScatter",settingsKey:"svgd"});c.push({label:"Field of vision",title:"Camera field of view, in degrees",type:"number",chartType:"sampleScatter",settingsKey:"fov"})}c.push(l);c.push({label:"Default color",type:"color",chartType:"sampleScatter",settingsKey:"defaultColor"})}else if(!this.is2DLarge){c.splice(2,0,s);c.splice(3,0,e);if(this.config.scaleDotTW){c.splice(4,0,a);c.splice(5,0,i);c.splice(6,0,n);if(t)c.splice(7,0,r)}else{c.splice(4,0,o);if(t)c.splice(5,0,r)}c.push(l)}this.components={controls:await x({app:this.app,id:this.id,holder:this.dom.controlsHolder,inputs:c})};this.components.controls.on("downloadClick.scatter",(()=>{if(this.is2DLarge||this.is3D){const t=this.canvas.toDataURL("image/png");Pt(t)}else for(const t of this.charts)E(t.svg,"scatter.svg",this.opts.holder.node())}))}getFilter(){const t={type:"tvslst",in:true,join:"and",lst:[]};const e="sampleCategory"in this.settings?this.settings.sampleCategory:this.config.sampleCategory?.defaultValue;if(e){const s=this.config.sampleCategory.tw;t.lst.push({type:"tvs",tvs:{term:s.term,values:[{key:e}]}})}const s=[this.state.termfilter.filter,t];if(this.config.filter)s.push(this.config.filter);const o=R(s);return o}}function Et(t,e,s=null){let o={chartType:"sampleScatter",name:e.name,filter:s};if(e.sampleCategory)o.sampleCategory={tw:structuredClone(e.sampleCategory.tw),order:e.sampleCategory.order,defaultValue:e.sampleCategory.defaultValue};if(e.sampleType)o.sampleType=e.sampleType;if(e.colorTW)o.colorTW=structuredClone(e.colorTW);else if(e.colorColumn)o.colorColumn=structuredClone(e.colorColumn);if("shapeTW"in e)o.shapeTW=structuredClone(e.shapeTW);if(e.settings)o.settings=structuredClone(e.settings);t.dispatch({type:"plot_create",config:o})}function Pt(t){const e=document.createElement("a");e.setAttribute("download","image");document.body.appendChild(e);e.click();e.remove();e.href=t;e.click();e.remove()}async function Ft(t,e){try{if(t.colorTW)await v(t.colorTW,e.vocabApi);if(t.shapeTW)await v(t.shapeTW,e.vocabApi);if(t.term)await v(t.term,e.vocabApi);if(t.term2)await v(t.term2,e.vocabApi);if(t.term0)await v(t.term0,e.vocabApi);if(t.scaleDotTW)await v(t.scaleDotTW,e.vocabApi);if(t.sampleCategory)await v(t.sampleCategory.tw,e.vocabApi);let s=Kt();if(t.settings)g(s,t.settings);if(!t.term&&!t.term2)s.showAxes=false;const o={groups:[],settings:{controls:{isOpen:false},sampleScatter:s},startColor:{},stopColor:{}};const a=g(o,t);if(a.term0?.q?.mode=="continuous"&&!e.hasWebGL())throw"Can not load Z/Divide by term in continuous mode as WebGL is not supported";return a}catch(t){console.log(t);throw`${t} [sampleScatter getPlotConfig()]`}}const Ht=t(Vt);const Bt=Ht;function Ut(t,e){const s=t.append("div");if(e.state.termdbConfig.scatterplots)for(const t of e.state.termdbConfig.scatterplots){s.append("div").attr("class","sja_menuoption sja_sharp_border").text(t.name).on("click",(()=>{Et(e.app,t);e.dom.tip.hide()}))}s.append("div");if(!e.state.termdbConfig.hiddenChartTypes?.includes("dynamicScatter")){const t=(t,s)=>{e.app.dispatch({type:"plot_create",config:{chartType:"sampleScatter",term:{term:t,q:{mode:"continuous"}},term2:{term:s,q:{mode:"continuous"}},name:"Dynamic Scatter"}})};V(e.dom.tip,e.app,"sampleScatter","numeric",t)}}function Kt(){return{size:1,minShapeSize:.5,maxShapeSize:4,scaleDotOrder:"Ascending",refSize:.8,svgw:500,svgh:500,svgd:500,axisTitleFontSize:16,showAxes:true,showRef:true,opacity:.8,defaultColor:y,regression:"None",fov:50,threeSize:.002,threeFOV:70}}async function Yt(t,e,s){const o={holder:t,state:{vocab:e.vocab,plots:[{chartType:"sampleScatter",subfolder:"plots",name:s.name,colorTW:s.colorTW,sampleType:s.sampleType,sampleCategory:{tw:structuredClone(s.sampleCategory.tw),order:s.sampleCategory.order,defaultValue:s.sampleCategory.defaultValue}}]}};const a=await import("./plot.app-aa916e0e.js");await a.appInit(o)}var Jt=Object.freeze({__proto__:null,minShapeSize:Gt,maxShapeSize:Rt,shapes:qt,openScatterPlot:Et,downloadImage:Pt,getPlotConfig:Ft,scatterInit:Ht,componentInit:Bt,makeChartBtnMenu:Ut,getDefaultScatterSettings:Kt,renderScatter:Yt});export{$t as a,Jt as b,Kt as g,ht as n,Wt as s};
@@ -1 +0,0 @@
1
- import{h as t,P as e,b as s,d as i}from"./app-a8c4854a.js";import"./controls-0bacec22.js";import"./roundValue-b0d0517c.js";import{g as o}from"./FilterRxComp-242f4615.js";import"./controls.btns-1cb2bfab.js";import"./controls.config-0ccc9d79.js";import"./controls.overlay-fe20d41d.js";import"./controls.term1-faa2efcf.js";import"./controls.divide-a9fe9466.js";import"./table-79e3e776.js";import"./tslib.es6-1f85f553.js";import"./termdb.bins-9faa5170.js";import"path";const a="root";const l=15;class n{constructor(t){this.opts=t;this.type="sampleView";this.setDom(t);m(this);c(this)}setDom(t){const e=t.holder.append("div");const s=e.append("div").style("display","inline-block");const i=e.append("div").style("display","inline-block").style("padding","20px");const o=e.append("div").style("display","flex").style("flex-direction","row").style("flex-wrap","wrap").style("justify-content","flex-start").style("width","100vw");const a=o;const l=i.insert("div").style("display","inline-block");const n=i.append("div").style("display","inline-block").style("vertical-align","top");this.dom={header:t.header,holder:t.holder,controlsDiv:s,sampleDiv:l,showPlotsDiv:n,plotsDiv:a}}async init(t){this.termsByCohort={};await this.setSampleSelect(t);const e=this.getState(t);await this.setControls(e)}async setSampleSelect(t){const e=t.plots.find((t=>t.id===this.id));const s=this.dom.sampleDiv;if(this.dom.header)this.dom.header.html(`Sample View`);if(e.samples&&e.samples.length>1){s.insert("label").style("vertical-align","top").html("Samples:");const t=s.insert("select").style("margin","0px 5px").property("multiple",true).attr("id","select");t.selectAll("option").data(e.samples).enter().append("option").attr("value",(t=>t.sampleId)).property("selected",((t,e)=>e<l)).html(((t,e)=>t.sampleName));this.dom.noteDiv=s.insert("div").style("display","none").style("vertical-align","top").style("font-size","0.8em").style("color","#aaa").html(`*Note that only ${l} samples can be selected.<br/>&nbsp;Navigate through the list to view all the samples.`);if(e.samples.length>l)this.dom.noteDiv.style("display","inline-block");t.on("change",(s=>{const i=t.node().options;const o=[];let a=0;for(const t of i){if(t.selected){if(a<l){const s=Number(t.value);const i=e.samples.find((t=>t.sampleId==s)).sampleName;const l={sampleId:s,sampleName:i};o.push(l);a++}else t.selected=false}}this.app.dispatch({type:"plot_edit",id:this.id,config:{samples:o}})}))}else{this.samplesData=await this.app.vocabApi.getSamplesByName({filter:o(t.termfilter?.filter)});const i=t=>{if(this.samplesData[t]){const e=g(this.samplesData,t);this.app.dispatch({type:"plot_edit",id:this.id,config:{samples:e}})}else{this.dom.tableDiv.style("display","none");for(const t of this.discoPlots)t.style("display","none");for(const t of this.singleSamplePlots)t.style("display","none");for(const t of this.brainPlots)t.style("display","none")}};const a=f(this.dom.sampleDiv,this.samplesData,i);this.sample=e.sample||{sampleId:this.samplesData[a].id,sampleName:a};this.dom.downloadbt=s.insert("button").style("margin-left","10px").style("vertical-align","top").text("Download").on("click",(t=>{this.downloadData()}));this.dom.messageDiv=s.insert("div").style("display","inline-block").style("display","none").style("vertical-align","top").html("&nbsp;&nbsp;Downloading data ...")}}getState(t){const e=t.plots?.find((t=>t.id===this.id));let s=e.samples||g(this.samplesData,this.sample.sampleName);if(e.samples?.length>15)s=e.samples.filter(((t,e)=>e<15));const i=t.termdbConfig.queries;const o={config:e,termfilter:t.termfilter,activeCohort:e.activeCohort,terms:e.terms,expandedTermIds:e.expandedTermIds,samples:s,singleSampleGenomeQuantification:i?.singleSampleGenomeQuantification,singleSampleMutation:i?.singleSampleMutation,NIdata:i?.NIdata,hasVerifiedToken:this.app.vocabApi.hasVerifiedToken(),tokenVerificationPayload:this.app.vocabApi.tokenVerificationPayload,termdbConfig:t.termdbConfig,vocab:t.vocab};if(t.termdbConfig.selectCohort){o.toSelectCohort=true;const e=t.termdbConfig.selectCohort.values[o.activeCohort];if(e){o.cohortValuelst=e.keys}}return o}async main(){if(this.mayRequireToken())return;this.config=structuredClone(this.state.config);this.settings=this.state.config.settings.sampleView;this.dom.plotsDiv.selectAll("*").remove();this.termsById=this.getTermsById(this.state);this.sampleDataByTermId={};const t=this.termsById[a];t.terms=await this.requestTermRecursive(t);this.orderedVisibleTerms=this.getOrderedVisibleTerms(t);if(this.dom.downloadbt)this.dom.downloadbt.style("display",this.settings.showDictionary?"inline-block":"none");if(this.settings.showDictionary)this.renderSampleDictionary();this.dom.tableDiv.style("display",this.settings.showDictionary?"block":"none");await this.renderPlots(this.state,this.state.samples);this.showVisiblePlots()}async setControls(t){const e=t.termdbConfig.queries;const s=e?.singleSampleMutation||e?.singleSampleGenomeQuantification||e?.NIdata||e?.images||e?.DZImages;if(s){this.dom.showPlotsDiv.append("input").attr("id","showDictionary").attr("type","checkbox").property("checked",true).on("change",(t=>{this.app.dispatch({type:"plot_edit",id:this.id,config:{settings:{sampleView:{showDictionary:t.target.checked}}}})}));this.dom.showPlotsDiv.append("label").text("Show Dictionary").attr("for","showDictionary")}if(e?.DZImages){this.dom.showPlotsDiv.append("input").attr("id","showDzi").attr("type","checkbox").property("checked",true).on("change",(t=>{this.app.dispatch({type:"plot_edit",id:this.id,config:{settings:{sampleView:{showDzi:t.target.checked}}}})}));this.dom.showPlotsDiv.append("label").attr("for","showDzi").text("Show DZI images")}if(e?.WSImages){this.dom.showPlotsDiv.append("input").attr("id","showWsi").attr("type","checkbox").property("checked",true).on("change",(t=>{this.app.dispatch({type:"plot_edit",id:this.id,config:{settings:{sampleView:{showWsi:t.target.checked}}}})}));this.dom.showPlotsDiv.append("label").attr("for","showWsi").text("Show WSI images")}if(e?.singleSampleMutation){this.dom.showPlotsDiv.append("input").attr("type","checkbox").property("checked",true).attr("id","showDisco").on("change",(t=>{this.app.dispatch({type:"plot_edit",id:this.id,config:{settings:{sampleView:{showDisco:t.target.checked}}}})}));this.dom.showPlotsDiv.append("label").text("Show Disco").attr("for","showDisco")}if(e?.singleSampleGenomeQuantification){for(const t in e.singleSampleGenomeQuantification){const e=t.replace(/([a-z](?=[A-Z]))/g,"$1 ");this.dom.showPlotsDiv.append("input").attr("type","checkbox").property("checked",true).attr("id",t).on("change",(e=>{this.app.dispatch({type:"plot_edit",id:this.id,config:{settings:{sampleView:{[t]:e.target.checked}}}})}));this.dom.showPlotsDiv.append("label").text("Show "+e).attr("for",t)}}if(e?.images){this.dom.showPlotsDiv.append("input").attr("type","checkbox").property("checked",true).attr("id","showImages").on("change",(t=>{this.app.dispatch({type:"plot_edit",id:this.id,config:{settings:{sampleView:{showImages:t.target.checked}}}})}));this.dom.showPlotsDiv.append("label").text("Show Images").attr("for","showImages")}if(e?.NIdata){this.dom.showPlotsDiv.append("input").attr("type","checkbox").property("checked",true).attr("id","showBrainImaging").on("change",(t=>{this.app.dispatch({type:"plot_edit",id:this.id,config:{settings:{sampleView:{showBrainImaging:t.target.checked}}}})}));this.dom.showPlotsDiv.append("label").text("Show brain imaging").attr("for","showBrainImaging")}}getTermsById(t){if(!(t.activeCohort in this.termsByCohort)){this.termsByCohort[t.activeCohort]={[a]:{id:a,__tree_isroot:true}}}return this.termsByCohort[t.activeCohort]}async requestTermRecursive(t,e=[a]){const s=await this.app.vocabApi.getTermChildren(t,this.state.toSelectCohort?this.state.cohortValuelst:null);if(s.error)throw s.error;if(!s.lst||s.lst.length==0){return[]}const i=[];const o=e.slice(-1)[0];for(const t of s.lst){t.parent_id=o;const s=[...e];const a=structuredClone(t);a.ancestry=s;i.push(a);if(!a.isleaf&&this.config.expandedTermIds.includes(a.id)){a.terms=await this.requestTermRecursive(a,[...s,t.id]);if(this.state.samples)await this.fillSampleData(a.terms)}else{const t=this.termsById[a.id];if(this.state.samples)await this.fillSampleData([a]);if(t&&t.terms){a.terms=t.terms}}this.termsById[a.id]=a}return i}getOrderedVisibleTerms(t){const e=Object.values(this.termsById).filter(this.isVisibleTermId.bind(this));const s=[];this.sortVisibleTerms(this.termsById[a],e,s);return s}isVisibleTermId(t){if(t.parent_id==a)return true;if(!t.ancestry)return false;for(const e of t.ancestry){if(e===a)continue;if(!this.config.expandedTermIds.includes(e))return false}return true}sortVisibleTerms(t,e,s=[]){const i=[];const o=[];for(const s of e){if(s.parent_id==t.id){o.push(s)}else i.push(s)}e.splice(0,e.length,...i);if(e.length){for(const t of o){s.push(t);if(!t.isleaf&&e.length){this.sortVisibleTerms(t,e,s)}}}else{s.push(...o)}}async fillSampleData(t){const e=[];for(const s of t)e.push(s.id);for(const t of this.state.samples){const s=await this.app.vocabApi.getSingleSampleData({sampleId:t.sampleId,term_ids:e});if("error"in s)throw s.error;if(!this.sampleDataByTermId[t.sampleId])this.sampleDataByTermId[t.sampleId]={};for(const e in s)this.sampleDataByTermId[t.sampleId][e]=s[e]}}async downloadData(){this.dom.messageDiv.style("display","block");this.dom.downloadbt.style("display","none");const t=`samples.tsv`;const e={};let s="Sample";for(const t of this.state.samples){e[t.sampleId]=await this.app.vocabApi.getSingleSampleData({sampleId:t.sampleId});s+=`\t${t.sampleName}`}s+="\n";const i=this.state.samples[0].sampleId;for(const t in e[i]){const o=e[i][t].term;s+=`${o.name}`;for(const t in e){const i=e[t];let a=r(o,i);if(a==null)a="Missing";s+=`\t${a}`}s+="\n"}const o="data:text/tsv;charset=utf-8,"+encodeURIComponent(s);const a=document.createElement("a");a.setAttribute("href",o);a.setAttribute("download",t);document.body.appendChild(a);a.click();a.remove();this.dom.messageDiv.style("display","none");this.dom.downloadbt.style("display","inline-block")}mayRequireToken(){if(this.state.hasVerifiedToken){this.dom.holder.style("display","block");return false}else{const t=this.state.tokenVerificationPayload;const e=t?.error=="Missing access"&&this.state.termdbConfig.dataDownloadCatch?.missingAccess;const s=e?.message?.replace("MISSING-ACCESS-LINK",e?.links[t?.linkKey]);const i=this.state.termdbConfig.dataDownloadCatch?.helpLink;this.dom.holder.style("color","#e44").style("padding","10px").html(s||(this.state.tokenVerificationMessage||"Requires sign-in")+(i?` <a href='${i}' target=_blank>Tutorial</a>`:""));return true}}showVisiblePlots(){this.visiblePlots=false;this.showPlotsFromCategory(this.discoPlots,"showDisco");for(const t in this.state.singleSampleGenomeQuantification)this.showPlotsFromCategory(this.singleSamplePlots[t],t);this.showPlotsFromCategory(this.brainPlots,"showBrain");this.showPlotsFromCategory(this.imagePlots,"showImages");this.showPlotsFromCategory(this.dziPlots,"showDzi");this.showPlotsFromCategory(this.wsiPlots,"showWsi");if(this.state.samples.length==1&&this.visiblePlots)this.dom.tableDiv.style("max-width","48vw").style("max-height","40vw").attr("class","sjpp_show_scrollbar");else this.dom.tableDiv.style("max-width","").style("max-height","").attr("class","")}showPlotsFromCategory(t,e){for(const s of t){const t=this.state.samples.find((t=>t.sampleName==s.sample.sampleName));const i=this.settings[e]&&t;if(i)this.visiblePlots=true;s.cellDiv.style("display",i?"table-cell":"none")}}async renderPlots(t,e){const i=this.dom.plotsDiv;this.discoPlots=[];this.singleSamplePlots={};this.brainPlots=[];this.imagePlots=[];this.dziPlots=[];this.wsiPlots=[];t.termdbConfig.queries;if(t.termdbConfig.queries?.DZImages){let o=i.append("div");if(t.samples.length==1)o.style("display","inline-block").style("width","50vw");for(const i of e){const e=await s("sampledzimages",{body:{genome:this.app.opts.genome.name,dslabel:t.vocab.dslabel,sample_id:i.sampleName}});if(e.sampleDZImages?.length>0){const s=o.append("div").style("display","inline-block");this.dziPlots.push({sample:i,cellDiv:s});const a=await import("./plot.dzi-41ea26e5.js");a.default(t.vocab.dslabel,s,this.app.opts.genome,i.sampleName,e.sampleDZImages)}}}if(t.termdbConfig.queries?.WSImages){let s=i.append("div");if(t.samples.length==1)s.style("display","inline-block").style("width","50vw");for(const i of e){const e=s.append("div").style("display","inline-block");const o=await import("./plot.wsi-51cc48ef.js");o.default(t.vocab.dslabel,e,this.app.opts.genome,i.sampleName)}}if(t.termdbConfig?.queries?.singleSampleMutation){let s=i.append("div");if(t.samples.length==1)s.style("display","inline-block").style("width","50vw");for(const i of e){const e=s.append("div").style("display","inline-block");this.discoPlots.push({sample:i,cellDiv:e});if(t.samples.length>1)e.insert("div").style("font-weight","bold").style("padding-left","20px").text(i.sampleName);const o=await import("./plot.disco-43e18d2f.js");o.default(t.termdbConfig,t.vocab.dslabel,{sample_id:i.sampleName},e,this.app.opts.genome)}}if(t.termdbConfig.queries?.singleSampleGenomeQuantification){for(const s in t.termdbConfig.queries.singleSampleGenomeQuantification){this.singleSamplePlots[s]=[];let o=i.append("div");if(t.samples.length==1)o.style("display","inline-block").style("width","50vw");for(const i of e){const e=s.match(/[A-Z][a-z]+|[0-9]+/g).join(" ");const a=o.insert("div").style("display","table-cell").style("padding","20px");this.singleSamplePlots[s].push({sample:i,cellDiv:a});if(t.samples.length>1)a.insert("div").style("font-weight","bold").text(`${i.sampleName} ${e}`);const l=await import("./plot.ssgq-e49cb70b.js");await l.plotSingleSampleGenomeQuantification(t.termdbConfig,t.vocab.dslabel,s,{sample_id:i.sampleName},a.insert("div"),this.app.opts.genome)}}}if(t.termdbConfig.queries?.NIdata){let s=i.append("div");if(t.samples.length==1)s.style("display","inline-block");for(const s in t.termdbConfig.queries?.NIdata){let o=i.append("div");if(t.samples.length==1)o.style("display","inline-block").style("width","50vw");for(const i of e){const e=o.insert("div").style("display","inline-block");this.brainPlots.push({sample:i,cellDiv:e});if(t.samples.length>1)e.insert("div").style("font-weight","bold").style("padding-left","20px").text(i.sampleName);const a=await import("./plot.brainImaging-2f796b0c.js");a.default(t.termdbConfig,t.vocab.dslabel,s,{sample_id:i.sampleName},e,this.app.opts.genome)}}}if(t.termdbConfig?.queries?.images){let s=i.append("div");if(t.samples.length==1)s.style("display","inline-block").style("width","50vw");for(const i of e){const e=s.append("div").style("display","inline-block");this.imagePlots.push({sample:i,cellDiv:e});if(t.samples.length>1)e.insert("div").style("font-weight","bold").style("padding-left","20px").text(i.sampleName);const o=await import("./imagePlot-7089bdff.js");o.renderImagePlot(t,e,i)}}}}function r(t,e){let s=e[t.id]?.value;if(s==null||s==undefined||s=="undefined")return null;if(t.type=="float"||t.type=="integer"){s=t.values?.[s]?.label||t.values?.[s]?.key||s;if(isNaN(s))return s;return s%1==0?s.toString():s.toFixed(2).toString()}if(t.type=="categorical")return t.values[s]?.label||t.values[s]?.key;if(t.type=="condition"){const e=s.toString().split(" ");let[i,o]=e;o=t.values[o].label||t.values[o].key;return`Max grade: ${o}, Time to event: ${Number(i).toFixed(1)} years`}if(t.type=="survival"){const e=s.split(" ");let[i,o]=e;o=t.values?.[o]?.label||t.values?.[o]?.key||o;return`${o} after ${Number(i).toFixed(1)} years`}return null}const p=t(n);const d=p;function c(t){t.renderSampleDictionary=function(){this.dom.tableDiv=this.dom.plotsDiv.append("div").style("display","inline-block").style("padding","20px");const e=this.dom.tableDiv.append("table").style("border-collapse","collapse");const s=e.append("thead");const i=s.append("tr");const o=e.append("tbody");const a=[];for(const e of t.state.samples)a.push(t.sampleDataByTermId[e.sampleId]);t.renderTHead(["",...t.state.samples.map((t=>t.sampleName))],i);const l=t.orderedVisibleTerms.map(((t,e)=>[{term:t},...a.map((e=>({term:t,sample:e})))]));t.renderTBody(l,o)};t.renderTHead=function(e,s){const i=s.selectAll("th").data(e);i.exit().remove();i.html(t.getThHtml);i.enter().append("th").style("padding","5px 10px").style("text-align","end").html(t.getThHtml)};t.getThHtml=t=>t;t.renderTBody=function(e,s){const i=s.selectAll("tr").data(e);i.exit().remove();i.each(t.renderTr);i.enter().append("tr").each(t.renderTr)};t.renderTr=function(e,s){const o=i(this).selectAll("td").data(e,(t=>t));o.exit().remove();o.each(t.renderTd);o.enter().append("td").style("border-bottom","solid 1px rgb(245,245,245)").style("text-align",((t,e)=>e===0?"left":"center")).style("padding","2px 10px").each(t.renderTd)};t.renderTd=function(e,s){if(!e.sample){t.renderTerm(i(this));return}e.sample;const o=e.term;const a=o.type=="integer"||o.type=="float";const l=r(e.term,e.sample);const n=i(this).datum(e).style("text-align","end").style("padding","5px 10px").html(e.sample[e.term.id]?.label||l);if(a)n.append("button").style("margin-left","5px").text("Plot").on("click",(e=>{const s={id:o.id,q:{mode:"continuous"}};t.app.dispatch({type:"plot_create",config:{chartType:"violin",term:s,value:l}})}))};t.renderTerm=function(e){const s=e.datum();if(!e.select("span").size()){const s=e.append("span");s.append("button").style("border-width",0).style("border-radius","5px").style("width","28px").style("height","28px").style("cursor","pointer");s.append("span").style("margin-left",`3px`).style("cursor","pointer");e.on("click",t.toggleTerm)}const i=(s.term.ancestry.length-1)*24;const o=e.select(":scope>span").style("margin-left",`${i}px`);o.select("button").style("display",s.term.isleaf?"none":"").html(t.config.expandedTermIds.includes(s.term.id)?"-":"+");o.select("span").html(s.term.name);return}}function m(t){t.toggleTerm=function(){const e=i(this).datum();if(e.term.isleaf)return;const s=t.config.expandedTermIds.slice();const o=s.indexOf(e.term.id);if(o==-1)s.push(e.term.id);else s.splice(o,1);t.app.dispatch({type:"plot_edit",id:t.id,config:{expandedTermIds:s}})}}async function h(t,s){const i=s.getState()?.termdbConfig?.queries;const o={sampleView:{showDictionary:true,showDisco:true,showBrain:true,showImages:true,showDzi:true,showWsi:true}};if(i)for(const t in i.singleSampleGenomeQuantification)o.sampleView[t]=true;const l={activeCohort:0,sample:null,expandedTermIds:[a],settings:o};return e(l,t)}function f(t,e,s,i){const o=100;const a=[];for(const t in e)if(e[t].type=="root"||e[t].type==null||e[t].type=="")a.push(t);const l=a.length>1e4;if(a.length==0)return;const n=a[0];const r=t.append("input").attr("list","sampleDatalist").property("autocomplete","off").attr("placeholder",n).style("width","400px");const p=t.append("datalist").attr("id","sampleDatalist");d(a);r.on("keyup",(t=>{p.selectAll("*").remove();const e=r.node().value.toLowerCase();if(i)i(e);const s=[];for(const t of a){if(t.toLowerCase().startsWith(e))s.push(t);if(s.length==o&&a.length>1e4)break}for(const t of a){if(t.toLowerCase().includes(e)&&!s.includes(t))s.push(t);if(s.length==o&&a.length>1e4)break}if(s.length>1||s.length==1&&r.node().value!=s[0])d(s)}));r.on("change",(t=>{const e=r.node().value;s(e)}));function d(t){p.selectAll("option").data(t.filter(((t,e)=>e<o))).enter().append("option").attr("value",(t=>t)).attr("label",((e,s)=>c(e)+(s+1==o?l?`Showing first ${s+1} hits`:`Showing ${s+1} of ${t.length} hits`:s+1===t.length&&s>0?` (Found ${t.length} hits)`:"")))}function c(t){const s=g(e,t);return s.map((t=>t.sampleName)).join(" > ")}return n}function g(t,e){let s=e;const i=Object.values(t);let o=i.find((t=>t.ancestor_name==s));while(o){s=o.name;o=i.find((t=>t.ancestor_name==s))}let a=t[s];if(!a)return[];const l=[{sampleId:a.id,sampleName:a.name}];while(a.ancestor_name){if(t[a.ancestor_name]?.type!="root")l.unshift({sampleId:a.ancestor_id,sampleName:a.ancestor_name});a=t[a.ancestor_name]}return l}export{d as componentInit,h as getPlotConfig,g as getSamplesRelated,r as getTermValue,p as sampleViewInit,f as searchSampleInput};
@@ -1 +0,0 @@
1
- import{m as e}from"./roundValue-b0d0517c.js";import{r as l}from"./table-79e3e776.js";import"./tslib.es6-1f85f553.js";import"./app-a8c4854a.js";import"path";function t(l){return{showEditMenu(e){var t,o,s,n,a;e.selectAll("*").remove();if(((t=l.vocabApi.termdbConfig)===null||t===void 0?void 0:t.displaySampleIds)&&l.vocabApi.hasVerifiedToken()){const t=l.q.groups;for(const l of t){const t=e.append("div").style("display","inline-block").style("vertical-align","top");const o=(e,t)=>{l.values[e].checked=t.checked};const s=l.in?l.name:`${l.name} will exclude these samples`;i(t,s,l,o)}e.append("div").append("div").style("display","inline-block").style("float","right").style("padding","6px 20px").append("button").attr("class","sjpp_apply_btn sja_filter_tag_btn").text("Apply").on("click",(()=>{for(const e of t)e.values=e.values.filter((e=>!("checked"in e)||e.checked));l.runCallback()}))}else{const t=l.vocabApi.tokenVerificationPayload;const i=(t===null||t===void 0?void 0:t.error)=="Missing access"&&((o=l.vocabApi.termdbConfig.dataDownloadCatch)===null||o===void 0?void 0:o.missingAccess);const d=t&&((s=i===null||i===void 0?void 0:i.message)===null||s===void 0?void 0:s.replace("MISSING-ACCESS-LINK",i===null||i===void 0?void 0:i.links[t.linkKey||""]));const p=(a=(n=l.vocabApi.termdbConfig)===null||n===void 0?void 0:n.dataDownloadCatch)===null||a===void 0?void 0:a.helpLink;e.append("div").style("color","#e44").style("padding","10px").html(d||(l.vocabApi.tokenVerificationMessage||"Requires sign-in")+(p?` <a href='${p}' target=_blank>Tutorial</a>`:""))}},getPillStatus(){},getPillName(t){return e(l,t)}}}function i(e,t,i,o){e.style("padding","6px").append("div").style("margin","10px").style("font-size","0.8rem").html(`<b> ${t}</b>.`);const s=[];for(const e of i.values)s.push([{value:e.sample}]);const n=[{label:"Sample"}];l({rows:s,columns:n,div:e,maxWidth:"30vw",maxHeight:"40vh",noButtonCallback:o,striped:false,showHeader:false,selectAll:true,columnButtons:undefined,buttons:undefined})}function o(e){if(!e.q.type)e.q.type="custom-samplelst";if(!e.q.groups)e.q.groups=[];if(e.q.groups.length==0){for(const l in e.term.values){const t=e.term.values[l];e.q.groups.push({name:l,inuse:t.inuse,values:t.list})}}}export{o as fillTW,t as getHandler};
@@ -1 +0,0 @@
1
- import{h as t,d as e,I as s,P as a,U as i}from"./app-a8c4854a.js";import{controlsInit as r}from"./controls-0bacec22.js";import{h as n}from"./FilterRxComp-242f4615.js";import{a as o,b as c}from"./axis-747c801e.js";import"./controls.btns-1cb2bfab.js";import"./controls.config-0ccc9d79.js";import"./controls.overlay-fe20d41d.js";import"./roundValue-b0d0517c.js";import"./tslib.es6-1f85f553.js";import"path";import"./table-79e3e776.js";import"./termdb.bins-9faa5170.js";import"./controls.term1-faa2efcf.js";import"./controls.divide-a9fe9466.js";class l{constructor(t){this.type="scatter"}async init(){const t=this.opts.controls?this.opts.holder:this.opts.holder.append("div");this.dom={header:this.opts.header,controls:this.opts.controls?null:holder.append("div"),div:t};this.settings={};if(this.dom.header)this.dom.header.html("Scatter Plot");await this.setControls();h(this);p(this)}async setControls(){if(this.opts.controls){this.opts.controls.on("downloadClick.boxplot",this.download)}else{this.components={controls:await r({app:this.app,id:this.id,holder:this.dom.controls.attr("class","pp-termdb-plot-controls"),inputs:["term1","overlay","divideBy"]})};this.components.controls.on("downloadClick.boxplot",this.download)}}getState(t){const e=t.plots.find((t=>t.id===this.id));if(!e){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}return{activeCohort:t.activeCohort,termfilter:t.termfilter,config:{term:e.term,term0:e.term0,term2:e.term2,settings:{common:e.settings.common,scatter:JSON.parse(JSON.stringify(e.settings.scatter))}}}}async main(){try{this.config=structuredClone(this.state.config);if(this.dom.header)this.dom.header.html(this.config.term.term.name+" vs "+this.config.term2.term.name);a(this.settings,this.state.config.settings.scatter);if(!this.pj)this.pj=m(this);const t=this.getDataRequestOpts();this.currData=await this.app.vocabApi.getNestedChartSeriesData(t);this.app.vocabApi.syncTermData(this.state.config,this.currData);this.pj.refresh({data:this.currData.rows});this.render()}catch(t){throw t}}getDataRequestOpts(){const t=this.config;const e={chartType:"scatter",term:t.term,filter:this.state.termfilter.filter};if(t.term2)e.term2=t.term2;if(t.term0)e.term0=t.term0;if(this.state.ssid)e.ssid=this.state.ssid;return e}}const d=t(l);function p(t){t.render=function(){const e=t.dom.div.selectAll(".pp-scatter-chart").data(t.pj.tree.charts,(t=>t.chartId));e.exit().remove();e.each(t.updateCharts);e.enter().each(t.addCharts);t.dom.div.style("display","block");t.dom.div.on("mouseover",t.mouseover).on("mouseout",t.mouseout)};t.addCharts=function(s){const i=t.settings;const r=e(this).append("div").attr("class","pp-scatter-chart").style("opacity",0).style("width",i.svgw+50+"px").style("display","inline-block").style("margin",i.chartMargin+"px").style("top",0).style("left",0).style("text-align","left").style("border","1px solid #eee").style("box-shadow","0px 0px 1px 0px #ccc").style("background",s.color);r.append("div").attr("class","sjpcb-scatter-title").style("text-align","center").style("width",i.svgw+50+"px").style("height",i.chartTitleDivHt+"px").style("font-weight","600").style("margin","5px").datum(s.chartId).html(s.chartId);const n=r.append("svg").attr("class","pp-scatter-svg");a(n,s,i,0);r.transition().duration(i.duration).style("opacity",1)};t.updateCharts=function(s){const i=t.settings;const r=e(this);r.transition().duration(i.duration).style("width",i.svgw+50+"px").style("background",s.color);r.select(".sjpcb-scatter-title").style("width",i.svgw+50).style("height",i.chartTitleDivHt+"px").datum(s.chartId).html(s.chartId);r.selectAll(".sjpcb-lock-icon").style("display",i.scale=="byChart"?"block":"none");r.selectAll(".sjpcb-unlock-icon").style("display",i.scale=="byChart"?"none":"block");a(r.select("svg"),s,i,i.duration)};function a(t,s,a,o){t.transition().duration(o).attr("width",a.svgw).attr("height",a.svgh).style("overflow","visible").style("padding-left","20px");const[c,l,d,p,h,m]=i(t);c.attr("transform","translate("+a.svgPadding.left+","+a.svgPadding.top+")");const g=c.selectAll(".sjpcb-scatter-series").data(s.serieses,(t=>t&&t[0]?t[0].seriesId:""));g.exit().remove();g.each((function(t,i){r(e(this),s,t,i,a,a.duration)}));g.enter().append("g").attr("class","sjpcb-scatter-series").each((function(t,i){r(e(this),s,t,i,a,o)}));n(d,h,p,m,a,s)}function i(t){let e,s,a,i,r,n;if(!t.select(".sjpcb-scatter-mainG").size()){e=t.append("g").attr("class","sjpcb-scatter-mainG");s=e.append("g").attr("class","sjpcb-scatter-axis");a=s.append("g").attr("class","sjpcb-scatter-x-axis");i=s.append("g").attr("class","sjpcb-scatter-y-axis");r=s.append("g").attr("class","sjpcb-scatter-x-title");n=s.append("g").attr("class","sjpcb-scatter-y-title")}else{e=t.select(".sjpcb-scatter-mainG");s=e.select(".sjpcb-scatter-axis");a=s.select(".sjpcb-scatter-x-axis");i=s.select(".sjpcb-scatter-y-axis");r=s.select(".sjpcb-scatter-x-title");n=s.select(".sjpcb-scatter-y-title")}return[e,s,a,i,r,n]}function r(t,e,s,a,i,r){t.selectAll("circle").remove();const n=t.selectAll("circle").data(s.data,(t=>t.x));n.exit().remove();n.transition().duration(r).attr("r",i.radius).attr("cx",(t=>t.scaledX)).attr("cy",(t=>t.scaledY)).style("fill-opacity",i.fillOpacity);n.enter().append("circle").attr("r",i.radius).attr("cx",(t=>t.scaledX)).attr("cy",(t=>t.scaledY)).style("fill-opacity",i.fillOpacity).transition().duration(r)}function n(e,a,i,r,n,l){e.attr("transform","translate(0,"+(n.svgh-n.svgPadding.top-n.svgPadding.bottom)+")").call(o(l.xScale).ticks(5));i.call(c(s().domain(l.yScale.domain()).range([0,n.svgh-n.svgPadding.top-n.svgPadding.bottom])).ticks(5));a.select("text, title").remove();const d=t.config.term.term.name.length>24?t.config.term.term.name.slice(0,20)+"...":t.config.term.term.name;const p=a.attr("transform","translate("+(n.svgw-n.svgPadding.left-n.svgPadding.right)/2+","+(n.svgh-n.axisTitleFontSize)+")").append("text").style("text-anchor","middle").style("font-size",n.axisTitleFontSize+"px").text(d+(t.config.term.term.unit?", "+t.config.term.term.unit:""));p.append("title").text(t.config.term.term.name);const h=t.config.term2.term.name.length>24?t.config.term2.term.name.slice(0,20)+"...":t.config.term2.term.name;r.select("text, title").remove();const m=r.attr("transform","translate("+(-n.svgPadding.left/2-n.axisTitleFontSize)+","+(n.svgh-n.svgPadding.top-n.svgPadding.bottom)/2+")rotate(-90)").append("text").style("text-anchor","middle").style("font-size",n.axisTitleFontSize+"px").text(h+(t.config.term2.term.unit?", "+t.config.term2.term.unit:""));m.append("title").text(t.config.term2.term.name)}}function h(t){t.mouseover=function(e){if(e.target.tagName=="circle"){const s=e.target.__data__;const a=[`<tr><td style='padding:3px; color:#aaa'>X:</td><td style='padding:3px; text-align:center'>${s.x}</td></tr>`,`<tr><td style='padding:3px; color:#aaa'>Y:</td><td style='padding:3px; text-align:center'>${s.y}</td></tr>`];t.app.tip.show(e.clientX,e.clientY).d.html(`<table class='sja_simpletable'>${a.join("\n")}</table>`)}else{t.app.tip.hide()}};t.mouseout=function(){t.app.tip.hide()};t.download=()=>{if(!t.state||!t.state.isVisible)return;const s=[];const a={x:undefined,y:undefined};const r=[];let n=0,o=0,c=0;let l=0,d=0;t.dom.div.selectAll(".sjpcb-scatter-mainG").each((function(){s.push(this);const t=this.getBBox();if(t.width>n)n=t.width;if(t.height>o)o=t.height;const i=Math.round(this.parentNode.parentNode.getBoundingClientRect().y);if(!d){l=i;d++}else if(Math.abs(i-l)<5){d++}const p=e(this).attr("transform").split("translate(")[1].split(")")[0].split(",").map((t=>+t.trim()));if(a.x===undefined||p[0]>a.x)a.x=+p[0];if(a.y===undefined||p[1]>a.y)a.y=+p[1];const h=this.parentNode.parentNode.firstChild;const m=h.getBoundingClientRect();if(m.width>n)n=m.width;if(m.height>c)c=m.height;r.push({text:h.innerText,styles:window.getComputedStyle(h)})}));n+=30;o+=30;const p=document.createElementNS("http://www.w3.org/2000/svg","svg");e(p).style("display","block").style("opacity",1).attr("width",d*n).attr("height",Math.floor(s.length/d)*o);const h=window.getComputedStyle(document.querySelector(".pp-scatter-svg"));const m=e(p);for(const t of h){if(t.startsWith("font"))m.style(t,h.getPropertyValue(t))}s.forEach(((t,s)=>{const i=t.cloneNode(true);const l=s%d;const h=Math.floor(s/d);const m={x:l*n+a.x,y:h*o+a.y};const g=e(p).append("text").attr("transform","translate("+m.x+","+m.y+")").text(r[s].text);for(const t of r[s].styles){if(t.startsWith("font"))g.style(t,r[s].styles.getPropertyValue(t))}e(i).attr("transform","translate("+m.x+","+(m.y+c)+")");p.appendChild(i)}));const g=t.plot.term.term.name+" scatter";i(p,g)}}function m(t){const e=t.settings;const a=new n({template:{yMin:">$val2",yMax:"<$val2",charts:[{chartId:"@key",chc:"@key",xMin:">$val1",xMax:"<$val1",yMin:">$val2",yMax:"<$val2","__:xScale":"=xScale()","__:yScale":"=yScale()",serieses:[{chartId:"@parent.@parent.@key",seriesId:"@key",data:[{"__:chc":"@parent.@parent.chc","__:seriesId":"@parent.@parent.seriesId",x:"$val1",y:"$val2","_1:scaledX":"=scaledX()","_1:scaledY":"=scaledY()"},"$val2"]},"-"]},"$val0"]},"=":{xScale(t,a){return s().domain([a.self.xMin,a.self.xMax]).range([0,e.svgw-e.svgPadding.left-e.svgPadding.right])},scaledX(t,e){return e.context.context.context.parent.xScale(e.self.x)},scaledY(t,e){return e.context.context.context.parent.yScale(e.self.y)},yScale(t,a){const i=a.self.yMax;const r=e.scale=="byChart"?[i,0]:[a.root.yMax,0];return s().domain(r).range([0,e.svgh-e.svgPadding.top-e.svgPadding.bottom])}}});return a}export{d as scatterInit,p as setRenderers};
@@ -1 +0,0 @@
1
- import{_ as t}from"./tslib.es6-1f85f553.js";import{s as e}from"./roundValue-b0d0517c.js";import{getHandler as i}from"./categorical-26528ce8.js";import{P as r}from"./app-a8c4854a.js";import"path";import"./groupsetting-20ffef77.js";function o(e){return t(this,void 0,void 0,(function*(){return i(e)}))}function s(t,i,o=null){var s,p;if(!((s=t.term)===null||s===void 0?void 0:s.sample))throw"missing term.sample";if(!((p=t.term)===null||p===void 0?void 0:p.plot))throw"missing term.plot";if(!Object.keys(t.q).includes("type"))t.q.type="values";if(!t.term.groupsetting)t.term.groupsetting={disabled:false};if(t.q.type=="predefined-groupset"){if(!Number.isInteger(t.q.predefined_groupset_idx))throw"predefined_groupset_idx is not an integer"}if(t.q.type=="custom-groupset"){if(!t.q.customset)throw"invalid customset"}if(o){o.isAtomic=true;r(t.q,o)}e(t.q,t.term)}export{s as fillTW,o as getHandler};
@@ -1 +0,0 @@
1
- import{b as e,y as t,h as s,P as o,M as n,d as i,C as l,I as a,r,Q as p}from"./app-a8c4854a.js";import{d as c}from"./zoom-9c63e74c.js";import{r as d}from"./table-79e3e776.js";import{controlsInit as h}from"./controls-0bacec22.js";import{d as g}from"./svg.download-86850940.js";import{a as m}from"./genesearch-ea59f5d4.js";import{T as f,c as u}from"./roundValue-b0d0517c.js";import{a as y,b,c as x}from"./axis-747c801e.js";import"./pointer-c7475677.js";import"./nodrag-2c046d31.js";import"./tslib.es6-1f85f553.js";import"./controls.btns-1cb2bfab.js";import"./controls.config-0ccc9d79.js";import"./controls.overlay-fe20d41d.js";import"./FilterRxComp-242f4615.js";import"./termdb.bins-9faa5170.js";import"path";import"./controls.term1-faa2efcf.js";import"./controls.divide-a9fe9466.js";class v{constructor(){this.type="singleCellPlot";this.tip=new n({padding:"4px",offsetX:10,offsetY:0});this.tip.d.style("max-height","300px").style("overflow","scroll").style("font-size","0.9em");this.startGradient={};this.stopGradient={}}async init(t){const s=this.getState(t);const o=s.termdbConfig.queries;this.tableOnPlot=t.nav?.header_mode=="hidden";const l=this.opts.holder.insert("div").style("display","inline-block").attr("class","pp-termdb-plot-controls");const a=this.opts.holder.insert("div").style("display","inline-block").style("vertical-align","top");const r=a.append("div").style("padding","10px");const p=a.append("div");const c=r.append("div");const h=r.append("div").style("padding-top","10px").style("display","inline-block");if(this.tableOnPlot){c.append("input").attr("id",`showSamples`).attr("type","checkbox").property("checked",true).on("change",(e=>{this.app.dispatch({type:"plot_edit",id:this.id,config:{settings:{singleCellPlot:{showSamples:e.target.checked}}}})}));c.append("label").text("Show samples").attr("for",`showSamples`)}for(const e of s.config.plots){const t=e.name.replace(/\s+/g,"");c.append("input").attr("id",`show${t}`).attr("type","checkbox").property("checked",true).on("change",(e=>{this.app.dispatch({type:"plot_edit",id:this.id,config:{settings:{singleCellPlot:{[`show${t}`]:e.target.checked}}}})}));c.append("label").text(e.name).attr("for",`show${t}`)}if(o.singleCell?.geneExpression){h.append("label").html("Gene expression:");const e=m({tip:new n({padding:"0px"}),genome:this.app.opts.genome,row:h,searchOnly:"gene",placeholder:s.config.gene||"Gene",callback:()=>{o?.style("display","inline-block");t?.style("display","inline-block");const s=e.geneSymbol;this.app.dispatch({type:"plot_edit",id:this.id,config:{gene:s}})},emptyInputCallback:()=>{o.style("display","none");t.style("display","none");this.app.dispatch({type:"plot_edit",id:this.id,config:{gene:null}})},hideHelp:true,focusOff:true});const t=h.append("select").style("display",s.config.gene?"inline-block":"none");for(const e of s.termdbConfig?.queries.singleCell.data.plots){t.append("option").text(e.colorColumn)}t.on("change",(async()=>{const e=s.termdbConfig?.queries.singleCell.data.plots[0];const o=e.columnName;const n={sample:s.config.sample.sampleName,columnName:o,category:t.node().value};await this.app.vocabApi.getTopTermsByType(n)}));const o=h.append("button").text("Open violin").style("margin-left","2px").style("display",s.config.gene?"inline-block":"none");o.on("click",(()=>{const o=e.geneSymbol||s.config.gene;const n=this.state.config.plots.find((e=>e.colorColumn==t.node().value)).name;const i=this.plots.find((e=>e.name==n));const l={};for(const e of i.clusters){l[e]={key:e,value:e}}this.app.dispatch({type:"plot_create",config:{chartType:"violin",settings:{violin:{plotThickness:50}},term:{term:{type:f.SINGLECELL_GENE_EXPRESSION,id:o,gene:o,name:o,sample:s.config.sample}},term2:{term:{type:f.SINGLECELL_CELLTYPE,id:f.SINGLECELL_CELLTYPE,name:"Cell type",sample:s.config.sample,plot:i.name,values:l}}}})}))}const g=r.append("div").style("padding","10px").style("display","inline-block");const y=a.append("div").style("display","flex").style("flex-wrap","wrap").style("justify-content","flex-start").style("width","92vw");this.dom={header:this.opts.header,loadingDiv:this.opts.holder.append("div").style("position","absolute").style("left","45%").style("top","60%"),tip:new n({padding:"0px"}),tooltip:new n({padding:"2px",offsetX:10,offsetY:0}),controlsHolder:l,tableDiv:p,deDiv:g,plotsDiv:y};if(this.tableOnPlot){await w(p,this,t)}const b=80;this.axisOffset={x:b,y:30};if(o.singleCell?.DEgenes){this.dom.deDiv.append("label").html("View differentially expresed genes of a cluster vs rest of cells:&nbsp;");this.dom.deselect=this.dom.deDiv.append("select");if(this.app.opts.genome.termdbs)this.dom.GSEAbt=this.dom.deDiv.append("button").style("margin-left","5px").property("disabled",true).text("Gene set enrichment analysis").on("click",(e=>{const t={genes:this.genes,fold_change:this.fold_changes,genome:this.app.vocabApi.opts.state.vocab.genome};const s={chartType:"gsea",gsea_params:t};this.app.dispatch({type:"plot_create",config:s})}));const t=this.dom.deDiv.append("div");this.dom.DETableDiv=t;this.dom.deselect.append("option").text("");this.dom.deselect.on("change",(async o=>{t.selectAll("*").remove();const n=this.dom.deselect.node().value.split(" ")?.[1];if(this.dom.GSEAbt)this.dom.GSEAbt.property("disabled",!n);if(!n)return;const i=s.termdbConfig.queries.singleCell.DEgenes.columnName;const l=this.state.config.experimentID||this.state.config.sample||this.samples[0]?.experiments[0]?.experimentID;const a={genome:s.genome,dslabel:s.dslabel,categoryName:n,sample:l,columnName:i};const r=await e("termdb/singlecellDEgenes",{body:a});const p=[{label:"Gene"},{label:"Log2FC"},{label:"Adjusted P-value"}];const c=[];this.genes=[];this.fold_changes=[];r.genes.sort(((e,t)=>t.avg_log2FC-e.avg_log2FC));for(const e of r.genes){const t=[{value:e.name},{value:u(e.avg_log2FC)},{value:u(e.p_val_adj)}];c.push(t);this.genes.push(e.name);this.fold_changes.push(e.avg_log2FC)}d({rows:c,columns:p,resize:true,div:t})}))}this.settings={};document.addEventListener("scroll",(e=>this?.tip?.hide()));i(".sjpp-output-sandbox-content").on("scroll",(e=>this.tip.hide()));await this.setControls(s)}async setControls(e){const t=[{label:"Chart width",type:"number",chartType:"singleCellPlot",settingsKey:"svgw",min:300,max:1e3},{label:"Chart height",type:"number",chartType:"singleCellPlot",settingsKey:"svgh",min:300,max:1e3},{label:"Show borders",type:"checkbox",chartType:"singleCellPlot",settingsKey:"showBorders",boxLabel:""}];if(this.tableOnPlot)t.push({label:"Show samples",type:"checkbox",chartType:"singleCellPlot",settingsKey:"showSamples",boxLabel:""});this.components={controls:await h({app:this.app,id:this.id,holder:this.dom.controlsHolder,inputs:t})};this.components.controls.on("downloadClick.singleCellPlot",(()=>{for(const e of this.plots)g(e.svg,"plot.svg",this.opts.holder.node())}))}getState(e){const t=e.plots.find((e=>e.id===this.id));if(!t){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}return{config:t,dslabel:e.vocab.dslabel,genome:e.vocab.genome,termdbConfig:e.termdbConfig}}async main(){this.config=structuredClone(this.state.config);o(this.settings,this.config.settings.singleCellPlot);this.dom.tableDiv.style("display",this.settings.showSamples?"block":"none");this.legendRendered=false;const e=[];for(const t of this.config.plots){const s=t.name.replace(/\s+/g,"");const o=this.settings[`show${s}`];if(o)e.push(t.name)}const t={genome:this.state.genome,dslabel:this.state.dslabel,plots:e};let s;if(this.state.config.sample){s=this.state.config.sample;t.sample=this.state.config.experimentID||this.state.config.sample}else{s=this.samples[0].sample;t.sample=this.samples[0].experiments?.[0]?.experimentID||this.samples[0].sample}if(this.state.config.gene)t.gene=this.state.config.gene;this.renderPlots(t);if(this.dom.header)this.dom.header.html(`${s} Single Cell Data`)}async renderPlots(s){this.dom.plotsDiv.selectAll("*").remove();this.plots=[];try{const t=await e("termdb/singlecellData",{body:s});if(t.error)throw t.error;for(const e of t.plots){e.id=e.name.replace(/\s+/g,"");this.renderPlot(e)}this.refName=t.refName}catch(e){if(e.stack)console.log(e.stack);t(this.dom.plotsDiv,e);return}}renderPlot(e){const t={};let s=new Set(e.cells.map((e=>e.category)));e.clusters=Array.from(s).sort(((e,t)=>{const s=parseInt(e.split(" ")[1]);const o=parseInt(t.split(" ")[1]);return s-o}));if(this.dom.deselect&&!this.legendRendered){this.dom.deselect.selectAll("*").remove();this.dom.deselect.append("option").text("");for(const t of e.clusters)this.dom.deselect.append("option").text(t)}const o=l(e.clusters.length+2);for(const s of e.clusters)t[s]=s=="ref"||s=="No"?"#F2F2F2":e.colorMap?.[s]?e.colorMap[s]:o(s);e.colorMap=t;this.plots.push(e);this.initAxes(e);e.plotDiv=this.dom.plotsDiv.append("div").style("overflow","hidden").style("display","inline-block").style("padding","10px").style("flex-grow",1);if(this.state.config.settings.singleCellPlot.showBorders)e.plotDiv.style("border","1px solid #aaa");this.renderLegend(e);const n=e.plotDiv.append("svg").attr("width",this.settings.svgw).attr("height",this.settings.svgh+40).on("mouseover",(t=>{if(this.state.config.gene&&!this.onClick)this.showTooltip(t,e)})).on("click",(t=>this.showTooltip(t,e)));n.append("text").attr("transform",`translate(20, 30)`).style("font-weight","bold").text(`${e.name}`);e.svg=n;const i=c().scaleExtent([.5,5]).on("zoom",(t=>this.handleZoom(t,e))).filter((e=>{if(e.type==="wheel")return e.ctrlKey;return true}));n.call(i);const a=n.selectAll("g").data(e.cells);a.enter().append("g").attr("transform",(t=>`translate(${e.xAxisScale(t.x)}, ${e.yAxisScale(t.y)+40})`)).append("circle").attr("r",1.5).attr("fill",(t=>this.getColor(t,e))).style("fill-opacity",(e=>this.getOpacity(e)))}getOpacity(e){if(this.config.hiddenClusters.includes(e.category))return 0;return.7}getColor(e,t){const s="#FAFAFA";if(this.state.config.gene){if(!e.geneExp)return s;if(t.colorGenerator)return t.colorGenerator(e.geneExp);return s}return t.colorMap[e.category]}handleZoom(e,t){t.svg.attr("transform",e.transform);t.zoom=e.transform.scale(1).k}initAxes(e){if(!e.cells.length)return;const t=e.cells[0];const[s,o,n,i]=e.cells.reduce(((e,t)=>[t.x<e[0]?t.x:e[0],t.x>e[1]?t.x:e[1],t.y<e[2]?t.y:e[2],t.y>e[3]?t.y:e[3]]),[t.x,t.x,t.y,t.y]);const l=5;e.xAxisScale=a().domain([s,o]).range([0+l,this.settings.svgh+l]);e.axisBottom=y(e.xAxisScale);e.yAxisScale=a().domain([i,n]).range([0+l,this.settings.svgh+l]);e.axisLeft=b(e.yAxisScale);e.zoom=1}renderLegend(e){const t=e.colorMap;let s=e.legendSVG;if(!e.legendSVG){s=e.plotDiv.append("svg").attr("width",250).attr("height",this.settings.svgh).style("vertical-align","top");e.legendSVG=s}s.selectAll("*").remove();if(this.state.termdbConfig.queries.singleCell.data.sameLegend&&this.legendRendered)return;this.legendRendered=true;const o=s.append("g").attr("transform",`translate(25, 50)`).style("font-size","0.8em");if(this.state.config.gene){this.renderColorGradient(e,o);return}o.append("text").attr("transform",`translate(${0}, ${25})`).style("font-weight","bold").text(`${e.colorBy}`);const n=20;let i=50;let l=0;for(const s in t){const r=e.cells.filter((e=>e.category==s));const p=this.config.hiddenClusters.includes(s);const c=r.length;const d=t[s];const h=o.append("g").attr("transform",(e=>`translate(${l}, ${i})`));h.append("circle").attr("r",3).attr("fill",d);h.append("g").attr("transform",`translate(${l+10}, ${5})`).append("text").text(`${s=="ref"?this.state.termdbConfig.queries.singleCell.data.refName:s=="query"?this.state.config.sample:s} n=${c}`).style("text-decoration",p?"line-through":"none").on("click",(e=>a(this,e,s)));i+=n}function a(e,t,s,o){const n=t.target;const i=n.style["text-decoration"]=="line-through";n.style["text-decoration"]=i?"none":"line-through";let l=e.config.hiddenClusters;if(!i)l.push(s);else l.splice(l.indexOf(s),1);e.app.dispatch({type:"plot_edit",id:e.id,config:{hiddenClusters:l}})}}renderColorGradient(e,t){if(e.cells.length==0)return;const s=r(p);if(!this.config.startColor[e.name])this.config.startColor[e.name]=s.brighter(1).toString();if(!this.config.stopColor[e.name])this.config.stopColor[e.name]=s.darker(3).toString();const o=this.config.startColor[e.name];const n=this.config.stopColor[e.name];const i=t.append("defs").append("linearGradient").attr("id",`linear-gradient-${e.id}`).attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");this.startGradient[e.name]=i.append("stop").attr("offset","0%").attr("stop-color",o);this.stopGradient[e.name]=i.append("stop").attr("offset","100%").attr("stop-color",n);let l,c;const d=e.cells[0]?.geneExp==undefined?[]:e.cells.map((e=>e.geneExp));if(d.length==0){e.colorGenerator=null;return}else[l,c]=d.reduce(((e,t)=>[t<e[0]?t:e[0],t>e[1]?t:e[1]]),[d[0],d[0]]);e.colorGenerator=a().domain([l,c]).range([o,n]);const h=100;const g=a().domain([l,c]).range([0,h]);const m=(c-l)/4;const f=[l,l+m,l+2*m,l+3*m,c];const u=x(g).tickValues(f);t.append("g").attr("transform",`translate(0, 100)`).call(u);e.startRect=t.append("rect").attr("x",-25).attr("y",100).attr("width",20).attr("height",20).style("fill",o).on("click",(t=>this.editColor(e,"startColor",e.startRect)));e.stopRect=t.append("rect").attr("x",h+5).attr("y",100).attr("width",20).attr("height",20).style("fill",n).on("click",(t=>this.editColor(e,"stopColor",e.stopRect)));t.append("rect").attr("x",0).attr("y",100).attr("width",h).attr("height",20).style("fill",`url(#linear-gradient-${e.id})`)}editColor(e,t,s){const o=this.config[t][e.name];const i=new n({padding:"3px"});const l=i.clear().d.append("Label").text("Color:").append("input").attr("type","color").attr("value",r(o).formatHex()).on("change",(()=>{const o=l.node().value;this.changeGradientColor(e,t,s,o);i.hide()}));i.showunder(s.node(),false)}changeGradientColor=function(e,t,s,o){this.config[t][e.name]=o;this.app.dispatch({type:"plot_edit",id:this.id,config:this.config})};distance(e,t,s,o,n){const i=n.xAxisScale(s)-n.xAxisScale(e);const l=n.yAxisScale(o)-n.yAxisScale(t);const a=Math.sqrt(Math.pow(i,2)+Math.pow(l,2));return a}showTooltip(e,t){if(this.onClick&&e.type=="click"){this.onClick=false;this.tip.hide();return}if(e.target.tagName=="circle"){this.onClick=e.type=="click";const s=e.target.__data__;const o=this.tip.clear();const n=o.d.append("table");let i=n.append("tr");i.append("td").style("color","#aaa").text(t.colorBy);const l=i.append("td");const a=l.append("svg").attr("width",150).attr("height",20);const r=10;const p=12;const c=a.append("g").attr("transform",`translate(${r}, ${p})`);c.append("circle").attr("fill",this.getColor(s,t)).attr("r",4);a.append("g").attr("transform",`translate(${r+15}, ${p+4})`).append("text").text(s.category);if("geneExp"in s){i=n.append("tr");i.append("td").style("color","#aaa").text("Gene expression");i.append("td").text(u(s.geneExp))}o.show(e.clientX,e.clientY,true,true)}else this.onMouseOut(e)}onMouseOut(e){this.tip.hide()}}async function C(e,t){const s=e.append("div").style("padding","5px");w(s,t,t.state)}async function w(s,o,n){const i={genome:n.vocab.genome,dslabel:n.vocab.dslabel};let l;try{l=await e("termdb/singlecellSamples",{body:i});if(l.error)throw l.error}catch(e){t(s,e);return}const a=l.samples;o.samples=a;a.sort(((e,t)=>{const s=e.primarySite?.localeCompare(t.primarySite);if(s==1||s==-1)return s;else return e.sample.localeCompare(t.sample)}));const[r,p]=await S(o,a,n);const c=[];let h="40vh";if(o.tableOnPlot){c.push(0);h="30vh"}d({rows:r,columns:p,resize:true,singleMode:true,div:s,maxHeight:h,noButtonCallback:e=>{if(o.dom.DETableDiv){o.dom.deselect.node().value="";o.dom.DETableDiv.selectAll("*").remove();if(o.dom.GSEAbt)o.dom.GSEAbt.property("disabled",true)}const t=r[e][0].value;const s={chartType:"singleCellPlot",sample:t};if(r[e][0].__experimentID){s.experimentID=r[e][0].__experimentID}if(o.tableOnPlot){o.app.dispatch({type:"plot_edit",id:o.id,config:s})}else{o.dom.tip.hide();o.app.dispatch({type:"plot_create",config:s})}},selectedRows:c})}async function S(e,t,s){const o=[];for(const e of t){if(e.experiments)for(const t of e.experiments){const n=[{value:e.sample,__experimentID:t.experimentID}];for(const t of s.termdbConfig.queries.singleCell.samples.sampleColumns||[]){n.push({value:e[t.termid]})}for(const t of s.termdbConfig.queries.singleCell.samples.experimentColumns||[]){n.push({value:e[t.label]})}n.push({value:t.experimentID});o.push(n)}else{const t=[{value:e.sample}];for(const o of s.termdbConfig.queries.singleCell.samples.sampleColumns||[]){t.push({value:e[o.termid]})}o.push(t)}}const n=[{label:s.termdbConfig.queries.singleCell.samples.firstColumnName||"Sample"}];for(const t of s.termdbConfig.queries.singleCell.samples.sampleColumns||[]){n.push({label:(await e.app.vocabApi.getterm(t.termid)).name,width:"15vw"})}for(const e of s.termdbConfig.queries.singleCell.samples.experimentColumns||[]){n.push({label:e.label,width:"20vw"})}if(t.some((e=>e.experiments))){n.push({label:"Experiment"})}return[o,n]}const k=s(v);const D=k;async function _(e,t){try{const s=t.vocabApi.termdbConfig?.queries?.singleCell.data.plots;const n=E();for(const e of s){const t=e.name.replace(/\s+/g,"");const s=`show${t}`;n[s]=true}const i={hiddenClusters:[],settings:{singleCellPlot:n},startColor:{},stopColor:{},plots:s};const l=o(i,e);return l}catch(e){console.log(e);throw`${e} [singleCellPlot getPlotConfig()]`}}function E(){return{svgw:420,svgh:420,showBorders:false,showSamples:true}}export{D as componentInit,E as getDefaultSingleCellSettings,_ as getPlotConfig,C as makeChartBtnMenu,k as scatterInit};
@@ -1 +0,0 @@
1
- import{b as e,y as t}from"./app-a8c4854a.js";import{r as o}from"./table-79e3e776.js";import"./tslib.es6-1f85f553.js";const a="hg38";const r="GDC";const l=[{label:"Case"},{label:"Project"},{label:"Primary Site"},{label:"Disease Type"},{label:"Sample Type"}];async function s({holder:e,filter0:t,callbackOnRender:o,debugmode:a=false}){const r={};if(typeof o=="function"){o(r)}const l={errDiv:e.append("div"),controlDiv:e.append("div"),tableDiv:e.append("div"),opts:{filter0:t}};await i(l);return r}async function i(s){s.tableDiv.selectAll("*").remove();const i=s.tableDiv.append("div").text("Loading...");let c;{const o={genome:a,dslabel:r};if(s.opts.filter0)o.filter0=s.opts.filter0;try{c=await e("termdb/singlecellSamples",{body:o});if(c.error)throw c.error}catch(e){i.remove();t(s.errDiv,e);return}}console.log(c);i.remove();const p=[];const v=[];for(const e of c.samples){for(const t of e.experiments){const o=[{value:e.sample},{value:e["case.project.project_id"]},{value:e["case.primary_site"]},{value:e["case.disease_type"]},{value:t.sampleType}];p.push(o);v.push(t.experimentID)}}o({rows:p,columns:l,resize:true,div:s.tableDiv.append("div"),noButtonCallback:e=>{n(v[e],s)}})}async function n(o,l){l.tableDiv.selectAll("*").remove();const s=l.tableDiv.append("div").text("Loading...");let i;{const n={genome:a,dslabel:r,sample:o};try{i=await e("termdb/singlecellData",{body:n});if(i.error)throw i.error}catch(e){s.remove();t(l.errDiv,e);return}}console.log(i);s.remove()}export{s as gdcSinglecellUi};
@@ -1 +0,0 @@
1
- import{_ as t}from"./tslib.es6-1f85f553.js";import{getHandler as e}from"./categorical-26528ce8.js";import{P as r}from"./app-a8c4854a.js";import{s as i}from"./roundValue-b0d0517c.js";import"./groupsetting-20ffef77.js";import"path";function o(r){return t(this,void 0,void 0,(function*(){return e(r)}))}function s(e,o,s=null){return t(this,void 0,void 0,(function*(){if(typeof e.term!=="object")throw"tw.term is not an object";if(!e.term.id||!e.term.name)throw"missing snp id/name";if(!e.term.chr||!Number.isInteger(e.term.start)||!Number.isInteger(e.term.stop))throw"incomplete position information";if(!e.term.ref||!e.term.alt);if(!Object.keys(e.q).includes("type"))e.q.type="values";if(!e.term.groupsetting)e.term.groupsetting={disabled:false};if(e.q.type=="predefined-groupset"){if(!Number.isInteger(e.q.predefined_groupset_idx))throw"predefined_groupset_idx is not an integer"}if(e.q.type=="custom-groupset"){if(!e.q.customset)throw"invalid customset"}if(s){r(e.q,s)}i(e.q,e.term)}))}export{s as fillTW,o as getHandler};
@@ -1 +0,0 @@
1
- import{_ as t}from"./tslib.es6-1f85f553.js";import{mayRestrictAncestry as e,makeSnpSelect as i}from"./snplst-007a1926.js";import{f as r}from"./FilterStateless-046081c2.js";import{g as n}from"./FilterRxComp-242f4615.js";import"./roundValue-b0d0517c.js";import"./app-a8c4854a.js";import{a}from"./genesearch-ea59f5d4.js";import"./snplst.sampleSum-e47d05f0.js";import"./table-79e3e776.js";import"./termdb.bins-9faa5170.js";import"path";const s="Variants in a locus";function o(e){return{getPillName(){return e.term.name},getPillStatus(){if(!e.term||!e.q)return;if(!e.term.snps)throw`Missing term.snps [snplocs.ts getPillStatus()]`;let t=`${e.q.chr}:${e.q.start}-${e.q.stop}, ${e.term.snps.length} variant${e.term.snps.length>1?"s":""}`;if(e.term.reachedVariantLimit){t+='<span style="margin-left: 6px; background:#aaa; font-size:1em;font-style: normal; border-radius: 7px;color:white;padding:0px 5px;">&#9888;<span>'}return{text:t}},validateQ(t){d(t)},showEditMenu(i){return t(this,void 0,void 0,(function*(){yield l(e,i)}))}}}function l(r,o){var l;return t(this,void 0,void 0,(function*(){const d=o.append("div").style("margin","15px");const c=yield e(r,d);const u=a({genome:r.opts.genomeObj,tip:r.dom.tip2,row:d.append("div").style("margin-top","20px"),defaultCoord:r.q&&r.q.chr?{chr:r.q.chr,start:r.q.start,stop:r.q.stop}:undefined});d.select(".sja_genesearchinput").style("margin","0px");d.append("span").style("margin","5px 0px").style("display","inline-block").style("opacity",.4).style("font-size",".7em").html('"Gene": Gene name (e.g. AKT1)</br>"Position": chr:start-stop (e.g. chr1:5000-6000)</br>"dbSNP": dbSNP accession (e.g. rs1042522)');yield f(r,(l=r.q)===null||l===void 0?void 0:l.variant_filter,d);const[v,h,y]=i(d.append("div").attr("class","sjpp-snp-select").style("margin-top","15px"),r,"snplocus");if(r.usecase.target=="dataDownload")d.select(".sjpp-snp-select").style("display","none");const g=d.append("div").style("margin-top","15px");g.append("button").style("margin-top","15px").text("Submit").on("click",(e=>t(this,void 0,void 0,(function*(){if(!u.chr)return window.alert("Invalid coordinate");e.target.disabled=true;e.target.innerHTML="Validating input...";if(r.term);else{r.term={id:m()}}if(!r.q)r.q={};r.term.type="snplocus";r.q.chr=u.chr;r.q.start=u.start;r.q.stop=u.stop;r.term.name=s;delete r.term.snps;r.q.variant_filter=n(r.variantFilter.active);yield p(r);{const t=Number(v.property("value"));r.q.AFcutoff=t<0||t>=100?5:t}r.q.alleleType=h.property("selectedIndex");r.q.geneticModel=y.property("selectedIndex");if(c){r.q.restrictAncestry=c.node().options[c.property("selectedIndex")].__ancestry_obj}r.runCallback()}))));g.append("span").style("padding-left","15px").style("opacity",.8).style("font-size",".8em").text(r.usecase.target=="dataDownload"?"":"Variants will be treated individually in separate regression models")}))}function p(e){return t(this,void 0,void 0,(function*(){const t=yield e.vocabApi.validateSnps(e.q);if(t.error)throw t.error;e.q.cacheid=t.cacheid;e.term.snps=t.snps;e.term.reachedVariantLimit=t.reachedVariantLimit}))}function d(t){const e=t.q;if(!Number.isFinite(e.AFcutoff))throw"AFcutoff is not number";if(e.AFcutoff<0||e.AFcutoff>100)throw"AFcutoff is not within 0 to 100";if(![0,1].includes(e.alleleType))throw"alleleType value is not one of 0/1";if(![0,1,2,3].includes(e.geneticModel))throw"geneticModel value is not one of 0/1";if(!e.chr)throw"chr missing";if(!Number.isInteger(e.start))throw"start coordinate is not integer";if(!Number.isInteger(e.stop))throw"stop coordinate is not integer";if(e.start<0)throw"start < 0";if(e.stop<=e.start)throw"stop <= start"}function c(e,i){return t(this,void 0,void 0,(function*(){try{d(e)}catch(t){throw"snplocus validateQ(): "+t}if(!e.term.name)e.term.name=s;if(e.id==undefined||e.id==""){if(e.term.id==undefined||e.term.id==""){e.term.id=m()}e.id=e.term.id}else{if(e.term.id==undefined||e.term.id==""){e.term.id=e.id}}yield p({term:e.term,q:e.q,vocabApi:i})}))}function m(){return"snplocus"+Math.random()}function f(e,i,n,a){return t(this,void 0,void 0,(function*(){if(!e.variantFilter){e.variantFilter=yield e.vocabApi.get_variantFilter()}if(!e.variantFilter.terms){return}if(!e.variantFilter.opts)throw"variantFilter.opts{} missing";if(!e.variantFilter.filter)throw".filter missing from variantFilter{}";if(!Array.isArray(e.variantFilter.terms)||e.variantFilter.terms.length==0)throw"variantFilter.terms[] is not non-empty array";if(i){e.variantFilter.active=JSON.parse(JSON.stringify(i))}else{e.variantFilter.active=JSON.parse(JSON.stringify(e.variantFilter.filter))}const s=n.append("div").style("margin-top","15px");s.append("span").text("VARIANT FILTERS").style("font-size",".8em").style("opacity",.5);const o=s.append("div");r({joinWith:e.variantFilter.opts.joinWith,emptyLabel:"+Variant Filter",holder:o,vocab:{terms:e.variantFilter.terms},callback:i=>t(this,void 0,void 0,(function*(){e.variantFilter.active=i;if(a)yield a()}))}).main(e.variantFilter.active)}))}export{c as fillTW,o as getHandler};
@@ -1 +0,0 @@
1
- import{bX as e,bV as n}from"./app-a8c4854a.js";function o(o){let t=0;for(let a=1;a<o.length;a++){const i=o[a];const f=o[t];if(i.isskipexon&&f.isaltexon){t=a;continue}if(i.frame==e&&f.framenocheck){t=a;continue}if(i.frame==n&&f.frame!=n){t=a;continue}}return t}export{o as e};
@@ -1 +0,0 @@
1
- import{h as t,P as e,M as i}from"./app-a8c4854a.js";import{f as o,i as r}from"./roundValue-b0d0517c.js";import{r as s}from"./recover-36ada47f.js";import{getDefaultViolinSettings as a}from"./violin-1515c3e6.js";import{getDefaultBarSettings as n}from"./barchart-3e69d094.js";import{g as p}from"./sampleScatter-9d5b3630.js";import{T as c}from"./toggleButtons-002aeda1.js";import"./tslib.es6-1f85f553.js";import"path";import"./FilterRxComp-242f4615.js";import"./table-79e3e776.js";import"./termdb.bins-9faa5170.js";import"./FilterStateless-046081c2.js";import"./app-ade9c62a.js";import"./termInfo-f851b415.js";import"./genesearch-ea59f5d4.js";import"./checkbox-96437f4d.js";import"./rehydrateFilter-12d118cb.js";import"./controls-0bacec22.js";import"./controls.btns-1cb2bfab.js";import"./controls.config-0ccc9d79.js";import"./controls.overlay-fe20d41d.js";import"./controls.term1-faa2efcf.js";import"./controls.divide-a9fe9466.js";import"./violin.renderer-dafd89fa.js";import"./brush-c386fe3d.js";import"./pointer-c7475677.js";import"./nodrag-2c046d31.js";import"./axis-747c801e.js";import"./line-264f8f9e.js";import"./constant-426a1483.js";import"./basis-3870f5ba.js";import"./log-cf45fcf2.js";import"./html.legend-abb5452e.js";import"./violin.interactivity-8e2f480d.js";import"./niceNumLabels-6cfc1508.js";import"./bars.settings-64bb4642.js";import"./bars.renderer-5f7a4174.js";import"./svg.legend-a94b0697.js";import"./barchart.events-9b11d97e.js";import"./zoom-9c63e74c.js";import"./lasso-55cf4057.js";import"./drag-0b968811.js";import"./downloadTextfile-5723af95.js";import"./sampleView-2d895023.js";import"./select2Terms-b4fffc50.js";import"./svg.download-86850940.js";import"./sampleScatter.rendererThree-5e686004.js";class l{constructor(t){this.type="summary";this.components={recover:{},plots:{}};this.chartsByType={}}async init(t){const e=this.getState(t);const i=structuredClone(e.config);m(this);this.initUi(this.opts,i);this.components.recover=await s({app:this.app,holder:this.dom.localRecoverDiv,getState:t=>this.getState(t),reactsTo:t=>t.id==this.id&&t.type=="plot_edit"&&t._scope_!="none",plot_id:this.id,maxHistoryLen:10,margin:"5px 10px"})}reactsTo(t){if(t.type.includes("cache_termq"))return true;if(t.type.startsWith("plot_")){return t.id===this.id}if(t.type.startsWith("filter"))return true;if(t.type.startsWith("cohort"))return true;if(t.type=="app_refresh")return true}getState(t){const e=t.plots.find((t=>t.id===this.id));if(!e){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}return{config:e,_scope_:t._scope_}}async main(){this.dom.errdiv.style("display","none");this.config=structuredClone(this.state.config);if(!this.components.plots[this.config.childType]){await this.setComponent(this.config)}for(const t in this.components.plots){this.components.plots[t]}this.render();const t=this.tabsData.findIndex((t=>t.childType==this.config.childType));this.chartToggles.update(t,this.config)}async setComponent(t){let e;if(t.childType=="barchart")e=await import("./barchart-3e69d094.js");else if(t.childType=="violin")e=await import("./violin-1515c3e6.js");else if(t.childType=="table")e=await import("./table-eee91e14.js");else if(t.childType=="boxplot")e=await import("./boxplot-1178fffc.js");else if(t.childType=="sampleScatter")e=await import("./sampleScatter-9d5b3630.js").then((function(t){return t.b}));else throw`unsupported childType='${t.childType}'`;this.dom.plotDivs[t.childType]=this.dom.viz.append("div");this.components.plots[t.childType]=await e.componentInit({app:this.app,holder:this.dom.plotDivs[t.childType],id:this.id,parent:this.api})}destroy(){this.dom.holder.app_div.selectAll("*").remove();this.dom.holder.app_div.remove();for(const t in this.dom){delete this.dom[t]}}}const d=t(l);function m(t){t.initUi=function(e,o){const s=e.holder;try{t.dom={tip:new i({padding:"0px"}),holder:s,body:s.body.style("white-space","nowrap").style("overflow-x","auto"),errdiv:s.body.append("div").style("display","none").style("padding","5px").style("background-color","rgba(255,100,100,0.2)"),viz:s.body.append("div"),plotDivs:{}};s.header.style("padding",0);t.dom.paneTitleDiv=t.dom.holder.header.append("div").style("display","inline-block").style("color","#999").style("padding-left","7px");t.dom.paneTitleDiv.append("div").classed("sjpp-term-header",true).style("display","inline-block").style("vertical-align","sub").html(o.term.term.name);t.tabsData=[{childType:"barchart",label:"Barchart",isVisible:()=>true,disabled:t=>false,getConfig:async()=>{if(!t.config)return;const e={id:t.id,childType:"barchart"};const i=t.config?.term;const o=t.config?.term2;if(i){const o=r(i?.term)?"discrete":i?.q.mode||"discrete";e.term=await t.getWrappedTermCopy(i,o)}if(o){const i=r(o.term)?"discrete":o.q.mode||"discrete";e.term2=await t.getWrappedTermCopy(o,i)}return e},active:true,callback:t.tabClickCallback},{childType:"violin",label:"Violin",disabled:t=>false,isVisible:()=>r(t.config?.term?.term)||r(t.config?.term2?.term),getConfig:async()=>{const e=t.config?.term;const i=t.config.term2;let o,s;r(e?.term)?t.violinContTerm="term":t.violinContTerm="term2";if(t.violinContTerm&&t.violinContTerm==="term"||e.q?.mode=="continuous"){o=await t.getWrappedTermCopy(e,"continuous");s=await t.getWrappedTermCopy(i,"discrete");t.violinContTerm="term"}else if(t.violinContTerm&&t.violinContTerm==="term2"||i?.q?.mode=="continuous"){o=await t.getWrappedTermCopy(e,"discrete");s=await t.getWrappedTermCopy(i,"continuous");t.violinContTerm="term2"}else if(i?.q?.mode=="discrete"){o=await t.getWrappedTermCopy(e,"discrete");s=await t.getWrappedTermCopy(i,"continuous");t.violinContTerm="term2"}else{o=await t.getWrappedTermCopy(e,"continuous");s=await t.getWrappedTermCopy(i,"discrete");t.violinContTerm="term"}const a={childType:"violin",term:o,term2:s};return a},active:false,callback:t.tabClickCallback},{childType:"table",label:"Crosstab - in development",disabled:t=>true,isVisible:()=>false,active:false,callback:t.tabClickCallback},{childType:"boxplot",label:"Boxplot - TODO",disabled:t=>true,isVisible:()=>false,active:false,callback:t.tabClickCallback},{childType:"sampleScatter",label:"Scatter",disabled:t=>false,isVisible:()=>r(t.config?.term.term)&&r(t.config?.term2?.term),getConfig:async()=>{const e=await t.getWrappedTermCopy(t.config?.term,"continuous");const i=await t.getWrappedTermCopy(t.config?.term2,"continuous");let o={childType:"sampleScatter",term:e,term2:i,groups:[],term0:t.config.term0};return o},active:false,callback:t.tabClickCallback}];t.dom.chartToggles=t.dom.paneTitleDiv.append("div").style("display","inline-block").style("margin-left","10px");t.chartToggles=new c({holder:t.dom.chartToggles,tabs:t.tabsData,noContent:true});t.chartToggles.main();t.dom.localRecoverDiv=t.dom.paneTitleDiv.append("div").style("display","inline-block")}catch(t){throw t}};t.tabClickCallback=async(e,i)=>{if(!i||!i.getConfig)return;const o=await i.getConfig();if(o)t.app.dispatch({type:"plot_edit",id:t.id,config:o})};t.getWrappedTermCopy=async function(e,i){if(!e)return;const r=structuredClone(e);r.q.mode=i;await o(r,t.app.vocabApi);return r};t.render=function(){for(const e in t.components.plots){const i=t.components.plots[e];if(i.type!=t.config.childType){t.dom.plotDivs[i.type].style("display","none")}}t.dom.plotDivs[t.config.childType].style("display","")}}async function f(t,i){if(!t.term)throw"summary getPlotConfig: opts.term{} missing";try{await o(t.term,i.vocabApi);if(t.term2)await o(t.term2,i.vocabApi);if(t.term0)await o(t.term0,i.vocabApi)}catch(t){throw`${t} [summary getPlotConfig()]`}const r={chartType:"summary",childType:"barchart",term:t.term,groups:[],settings:{controls:{isOpen:false},common:{use_logscale:false,use_percentage:false,barheight:300,barwidth:20,barspace:2},barchart:n(i),violin:a(),sampleScatter:p()},mayAdjustConfig(t,e={}){if(!e.childType){if(t.term?.q?.mode=="continuous"&&t.term2?.q?.mode=="continuous"){t.childType="sampleScatter"}else if(t.term?.q?.mode=="continuous"||t.term2?.q?.mode=="continuous")t.childType="violin";else t.childType="barchart"}}};return e(r,t)}export{f as getPlotConfig,d as summaryInit};
@@ -1 +0,0 @@
1
- import{_ as t}from"./tslib.es6-1f85f553.js";import{m as o}from"./roundValue-b0d0517c.js";import{getHandler as e}from"./numeric.toggle-37c4bee8.js";import"./app-a8c4854a.js";import"path";import"./toggleButtons-002aeda1.js";function i(i){return{showEditMenu(o){return t(this,void 0,void 0,(function*(){const t=yield e(i);yield t.showEditMenu(o)}))},getPillStatus(){},getPillName(t){return o(i,t)}}}function r(t,o){}export{r as fillTW,i as getHandler};
@@ -1 +0,0 @@
1
- import{h as e,P as t,M as s,a8 as i,af as r,r as a,aC as n,d as l,I as o}from"./app-a8c4854a.js";import{controlsInit as d}from"./controls-0bacec22.js";import{s as c}from"./legacy-d3-polyfill-bdb2d792.js";import{h as p}from"./html.legend-abb5452e.js";import{h}from"./FilterRxComp-242f4615.js";import{f as u}from"./roundValue-b0d0517c.js";import{s as v,r as m,a as f,g}from"./renderPvalueTable-895a72c2.js";import{a as y}from"./svg.download-86850940.js";import{l as b}from"./line-264f8f9e.js";import{a as x}from"./area-f56e50f9.js";import{a as I,b as k}from"./axis-747c801e.js";import"./controls.btns-1cb2bfab.js";import"./controls.config-0ccc9d79.js";import"./controls.overlay-fe20d41d.js";import"./tslib.es6-1f85f553.js";import"path";import"./table-79e3e776.js";import"./termdb.bins-9faa5170.js";import"./controls.term1-faa2efcf.js";import"./controls.divide-a9fe9466.js";import"./pointer-c7475677.js";import"./constant-426a1483.js";class j{constructor(e){this.type="survival"}async init(){const e=this.opts;const t=this.opts.controls?null:e.holder.append("div");const i=e.controls?e.holder:e.holder.append("div");this.dom={loadingDiv:i.append("div").style("position","absolute").style("display","none").style("padding","20px").html("Loading ..."),header:e.header,controls:t,holder:i,chartsDiv:i.append("div").style("margin","10px"),legendDiv:i.append("div").style("margin","5px 5px 15px 5px"),hiddenDiv:i.append("div").style("margin","5px 5px 15px 5px"),tip:new s({padding:"5px"}),legendTip:new s({padding:"5px"})};this.dom.tip.onHide=()=>{this.activeMenu=false};if(this.dom.header)this.dom.header.html("Survival Plot");this.settings=Object.assign({},e.settings);this.pj=O(this);this.lineFxn=b().curve(v).x((e=>e.scaledX)).y((e=>e.scaledY));T(this);S(this);this.legendRenderer=p(this.dom.legendDiv,{settings:{legendOrientation:"vertical"},handlers:{legend:{click:e=>this.legendClick(e.target.__data__,e.clientX,e.clientY)}}});this.hiddenRenderer=p(this.dom.hiddenDiv,{settings:{legendOrientation:"vertical"},handlers:{legend:{click:e=>this.legendClick(e.target.__data__,e.clientX,e.clientY)}}});await this.setControls()}async setControls(){if(this.opts.controls){this.opts.controls.on("downloadClick.survival",this.download)}else{this.dom.holder.attr("class","pp-termdb-plot-viz").style("display","inline-block").style("min-width","300px").style("margin-left","50px");this.components={controls:await d({app:this.app,id:this.id,holder:this.dom.controls.attr("class","pp-termdb-plot-controls").style("display","inline-block"),inputs:[{type:"overlay",usecase:{target:"survival",detail:"term2"},numericEditMenuVersion:["discrete"]},{type:"divideBy",usecase:{target:"survival",detail:"term0"}},{label:"Chart width",type:"number",chartType:"survival",settingsKey:"svgw",title:"The internal width of the chart plot"},{label:"Chart height",type:"number",chartType:"survival",settingsKey:"svgh",title:"The internal height of the chart plot"},{label:"95% CI",boxLabel:"Visible",type:"checkbox",chartType:"survival",settingsKey:"ciVisible"},{label:"Censored Symbol",type:"radio",chartType:"survival",settingsKey:"symbol",options:[{label:"X",value:"x"},{label:"Tick",value:"vtick"}]},{label:"Time Factor",type:"math",chartType:"survival",settingsKey:"timeFactor",title:"Rescale the time scale by multiplying this factor. Enter a number or an expression like 1/365."},{label:"Time Unit",type:"text",chartType:"survival",settingsKey:"timeUnit",title:`The unit to display in the x-axis title, like 'years'`},{label:"X-axis ticks",type:"text",chartType:"survival",settingsKey:"xTickValues",title:`Option to customize the x-axis tick values, enter as comma-separated values. Will be ignored if empty`,processInput:e=>e?e.split(",").map(Number):[]},{label:"At-risk counts",boxLabel:"Visible",type:"checkbox",chartType:"survival",settingsKey:"atRiskVisible",title:"Display the at-risk counts"},{label:"Default color",type:"color",chartType:"survival",settingsKey:"defaultColor"}]})};this.components.controls.on("downloadClick.survival",this.download)}}getState(e){const t=e.plots.find((e=>e.id===this.id));if(!t){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}return{isVisible:t.term.term.type=="survival"||t.term2&&t.term2.term.type=="survival",genome:this.app.vocabApi.vocab.genome,dslabel:this.app.vocabApi.vocab.dslabel,activeCohort:e.activeCohort,termfilter:e.termfilter,config:{term:JSON.parse(JSON.stringify(t.term)),term0:t.term0?JSON.parse(JSON.stringify(t.term0)):null,term2:t.term2?JSON.parse(JSON.stringify(t.term2)):null,settings:t.settings.survival},termdbConfig:e.termdbConfig}}async main(){try{if(!this.state.isVisible){this.dom.holder.style("display","none");return}if(this.dom.header)this.dom.header.html(this.state.config.term.term.name+` plot`);this.toggleLoadingDiv();Object.assign(this.settings,this.state.config.settings);this.settings.defaultHidden=this.getDefaultHidden();this.settings.hidden=this.settings.customHidden||this.settings.defaultHidden;this.settings.xTitleLabel=this.getXtitleLabel();const e=this.getDataRequestOpts();const t=await this.app.vocabApi.getNestedChartSeriesData(e);this.toggleLoadingDiv("none");this.serverData=t;this.app.vocabApi.syncTermData(this.state.config,t);this.currData=this.processData(t);this.refs=t.refs;this.pj.refresh({data:this.currData});this.setTerm2Color(this.pj.tree.charts);this.symbol=this.getSymbol(7);this.render()}catch(e){throw e}}getDataRequestOpts(){const e=this.state.config;const t={chartType:"survival",term:e.term,filter:this.state.termfilter.filter};if(e.term2)t.term2=e.term2;if(e.term0)t.term0=e.term0;if(this.state.ssid)t.ssid=this.state.ssid;return t}getDefaultHidden(){const e=[];const t=this.state.config.term2;if(!t)return e;const s=t.q.hiddenValues;if(s&&Object.keys(s).length){for(const i in s){e.push(t.term.values[i].label)}}return e}getXtitleLabel(){const e=this.state.config.term.term.type=="survival"?"term":"term2";const t=this.settings.timeUnit?this.settings.timeUnit:this.state.config[e].term.unit;const s=`Time to Event (${t})`;return s}processData(e){this.uniqueSeriesIds=new Set;const t=[];const s=["survival","lower","upper"];for(const i of e.case){const r={};e.keys.forEach(((e,t)=>{r[e]=s.includes(e)?Number(i[t]):i[t]}));r.time=r.time*this.settings.timeFactor;t.push(r);this.uniqueSeriesIds.add(r.seriesId)}this.tests={};if(e.tests){for(const t in e.tests){const s=e.tests[t];this.tests[t]=[];for(const e of s){if(this.settings.hidden.includes(e.series1)||this.settings.hidden.includes(e.series2))continue;this.tests[t].push({pvalue:{id:"pvalue",text:e.pvalue},series1:{id:e.series1},series2:{id:e.series2}})}if(!this.tests[t].length)delete this.tests[t]}}return t}setTerm2Color(e){if(!e)return;const s=this.state.config;const l=t({},s.term2?.term?.values||{},s.term2?.values||{});const o=this.refs.bins[2]&&[this.refs.bins[2]]||Object.values(l);this.term2toColor={};this.colorScale=this.uniqueSeriesIds.size<11?i(r):i(c);const d=[];for(const t of e){for(const e of t.serieses){const t=o.find((t=>t.seriesId===e.seriesId||t.key===e.seriesId||t.name===e.seriesId||t.label===e.seriesId));const s={orig:t?.color||(e.seriesId==""?this.settings.defaultColor:this.colorScale(e.seriesId))};s.rgb=a(s.orig);s.adjusted=s.rgb.toString();s.hex=n(s.adjusted);this.term2toColor[e.seriesId]=s;if(!d.find((t=>t.seriesId==e.seriesId))){d.push({key:e.seriesId,seriesId:e.seriesId,text:e.seriesLabel,color:this.term2toColor[e.seriesId].adjusted,isHidden:this.settings.hidden.includes(e.seriesId)})}}}if(this.refs.orderedKeys){const e=this.refs.orderedKeys.series;d.sort(((t,s)=>e.indexOf(t.seriesId)-e.indexOf(s.seriesId)))}this.legendValues={};d.forEach(((e,t)=>{this.legendValues[e.seriesId]={seriesId:e.seriesId,order:"order"in e?e.order:t,color:this.term2toColor[e.seriesId].orig}}));const p=this.state.config.term2?.values;if(p){d.sort(((e,t)=>{const s=p[e.seriesId];const i=p[t.seriesId];if(s&&i){if("order"in s&&"order"in i)return s.order-i.order;if(s.order)return s.order;if(i.order)return i.order;return 0}if(s)return s.order||0;if(i)return i.order||0;return e.order-t.order}));d.forEach(((e,t)=>{this.legendValues[e.seriesId].order=t}))}if((!s.term.term.type=="survival"||s.term2)&&d.length){const e=s.term.term.type=="survival"?"term2":"term";this.legendData=[{name:s[e].term.name,items:d.filter((e=>!e.isHidden))}];this.hiddenData=[{name:`<span style='color:#aaa; font-weight:400'><span>Hidden categories</span><span style='font-size:0.8rem'> CLICK TO SHOW</span></span>`,items:d.filter((e=>e.isHidden)).map((e=>Object.assign({},e,{isHidden:false})))}]}else{this.legendData=[]}for(const e in this.tests){const t=this.tests[e];for(const e of t){for(const t in e){if(t=="pvalue"){e[t].color="#000"}else{const s=d.find((s=>s.seriesId==e[t].id));e[t].color=s.color;e[t].text=s.text}}}}}toggleLoadingDiv(e=""){if(e!="none"){this.dom.loadingDiv.style("opacity",0).style("display",e).transition().duration("loadingWait"in this?this.loadingWait:0).style("opacity",1)}else{this.dom.loadingDiv.style("display",e)}this.loadingWait=1e3}}const w=e(j);const C=w;function S(e){e.render=function(){const t=e.pj.tree.charts||[{chartId:"No survival data"}];const s=e.dom.chartsDiv.selectAll(".pp-survival-chart").data(t,(e=>e.chartId));s.exit().remove();s.each(e.updateCharts);s.enter().each(e.addCharts);e.dom.holder.style("display","inline-block");e.dom.chartsDiv.on("mouseover",e.mouseover).on("mouseout",e.mouseout);e.legendRenderer(e.settings.atRiskVisible?[]:e.legendData);if(!e.hiddenData?.[0]?.items.length)e.dom.hiddenDiv.style("display","none");else{e.dom.hiddenDiv.style("display","");e.hiddenRenderer(e.hiddenData)}};const t=t=>{e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{hiddenPvalues:t}}}})};const s=t=>e.activeMenu=t;e.addCharts=function(a){const n=e.settings;i(a,n);const o=l(this).append("div").attr("class","pp-survival-chart").style("opacity",a.serieses?0:1).style("width","fit-content").style("display","inline-block").style("margin",n.chartMargin+"px").style("padding","10px").style("top",0).style("left",0).style("text-align","left").style("vertical-align","top");const d=o.append("div").style("width",n.svgw+50+"px").style("height",n.chartTitleDivHt+"px").style("text-align","center").style("font-weight","600").style("margin","5px").append("div").attr("class","sjpp-survival-title").style("display","inline-block").style("width","fit-content").datum(a).html((e=>e.chartId)).style("cursor","pointer").on("mouseover",(()=>d.style("text-decoration","underline"))).on("mouseout",(()=>d.style("text-decoration",""))).on("click",e.showMenuForSelectedChart);if(a.serieses){const i=o.append("svg").attr("class","pp-survival-svg");r(i,a,n,0);o.transition().duration(n.duration).style("opacity",1);o.append("div").attr("class","pp-survival-chartLegends").style("vertical-align","top").style("margin","10px 10px 10px 30px").style("display","none");if(e.tests&&a.rawChartId in e.tests){const i=o.select(".pp-survival-chartLegends").style("display","inline-block").append("div");m({title:"Group comparisons (log-rank test)",holder:i,plot:"survival",tests:e.tests[a.rawChartId],s:n,bins:e.refs.bins,tip:e.app.tip,setActiveMenu:s,updateHiddenPvalues:t})}}};function i(e,t){e.visibleSerieses=e.serieses?.filter((e=>!t.hidden.includes(e.seriesId)))||[];const s=e.visibleSerieses.reduce(((e,t)=>t.seriesLabel&&t.seriesLabel.length>e?t.seriesLabel.length:e),0);e.atRiskLabelWidth=t.atRiskVisible?s*(t.axisTitleFontSize-2)*.4+t.atRiskLabelOffset:0}e.updateCharts=function(a){if(!a.serieses)return;const n=e.settings;i(a,n);const o=l(this);o.transition().duration(n.duration).style("width","fit-content");o.select(".sjpp-survival-title").style("width",n.svgw+50).style("height",n.chartTitleDivHt+"px").datum(a.chartId).html(a.chartId);o.selectAll(".sjpp-lock-icon").style("display",n.scale=="byChart"?"block":"none");o.selectAll(".sjpp-unlock-icon").style("display",n.scale=="byChart"?"none":"block");r(o.select("svg"),a,n,n.duration);o.select(".pp-survival-chartLegends").selectAll("*").remove();if(e.tests&&a.rawChartId in e.tests){const i=o.select(".pp-survival-chartLegends").style("display","inline-block").append("div");m({title:"Group comparisons (log-rank test)",holder:i,plot:"survival",tests:e.tests[a.rawChartId],s:n,bins:e.refs.bins,tip:e.app.tip,setActiveMenu:s,updateHiddenPvalues:t})}};function r(t,s,i,r){const o=i.atRiskVisible?i.axisTitleFontSize+4+s.visibleSerieses.length*2*(i.axisTitleFontSize+4):0;t.transition().duration(r).attr("width",i.svgw+s.atRiskLabelWidth).attr("height",i.svgh+o).style("overflow","visible").style("padding-left","20px");const[d,p,h,u,v,m,g,y,b]=a(t);const x=s.atRiskLabelWidth+i.svgPadding.left;d.attr("transform","translate("+x+","+i.svgPadding.top+")");const I=p.selectAll(".sjpp-survival-series").data(s.visibleSerieses,(e=>e&&e[0]?e[0].seriesId:""));I.exit().remove();I.each((function(e,t){n(l(this),s,e,t,i,i.duration)}));I.enter().append("g").attr("class","sjpp-survival-series").each((function(e,t){n(l(this),s,e,t,i)}));c(u,m,v,g,i,s);f({g:y,s:i,chart:s,term2values:e.state.config.term2?.values,term2toColor:e.term2toColor,onSerieClick:e.legendClick});b.attr("x",0).attr("width",i.svgw-i.svgPadding.left-i.svgPadding.right).attr("y",0).attr("height",i.svgh-i.svgPadding.top-i.svgPadding.bottom+i.xAxisOffset);t.seriesTip.update({xScale:s.xScale,xTitleLabel:i.xTitleLabel,decimals:i.seriesTipDecimals,serieses:s.visibleSerieses.map((t=>{const s=`${t.seriesLabel||"Probability"}:`;const i=e.term2toColor[t.seriesId].adjusted||"#000";return{data:t.data.map((e=>({x:e.x,html:`<span style='color: ${i}'>`+`${s} ${(100*e.y).toFixed(2)}% (${(100*e.lower).toFixed(2)} - ${(100*e.upper).toFixed(2)})`+`</span>`})))}}))})}function a(t,s){let i,r,a,n,l,o,d,c,p,h;if(!t.select(".sjpp-survival-mainG").size()){i=t.append("g").attr("class","sjpp-survival-mainG");r=i.append("g").attr("class","sjpcb-survival-seriesesG");a=i.append("g").attr("class","sjpp-survival-axis");n=a.append("g").attr("class","sjpp-survival-x-axis");l=a.append("g").attr("class","sjpp-survival-y-axis");o=a.append("g").attr("class","sjpp-survival-x-title");d=a.append("g").attr("class","sjpp-survival-y-title");c=i.append("g").attr("class","sjpp-survival-atrisk");h=i.append("line").attr("class","sjpcb-plot-tip-line").attr("stroke","#000").attr("stroke-width","1px");p=i.append("rect").attr("class","sjpcb-plot-tip-rect").style("fill","transparent")}else{i=t.select(".sjpp-survival-mainG");r=i.select(".sjpcb-survival-seriesesG");a=i.select(".sjpp-survival-axis");n=a.select(".sjpp-survival-x-axis");l=a.select(".sjpp-survival-y-axis");o=a.select(".sjpp-survival-x-title");d=a.select(".sjpp-survival-y-title");c=i.select(".sjpp-survival-atrisk");p=i.select(".sjpcb-plot-tip-rect");h=i.select(".sjpcb-plot-tip-line")}if(!t.seriesTip){t.seriesTip=g(h,p,e.app?.tip)}return[i,r,a,n,l,o,d,c,p]}function n(t,s,i,r,a,n){t.selectAll("path").remove();t.append("path").attr("d",x().curve(v).x((e=>e.scaledX)).y0((e=>e.scaledY[1])).y1((e=>e.scaledY[2]))(i.data)).style("display",a.ciVisible?"":"none").style("fill",e.term2toColor[i.seriesId].adjusted).style("opacity","0.15").style("stroke","none");d(a,t,i.data.map((e=>({seriesId:e.seriesId,x:e.x,y:e.y,scaledX:e.scaledX,scaledY:e.scaledY[0],seriesName:"survival",seriesLabel:i.seriesLabel,nevent:e.nevent,ncensor:e.ncensor,nrisk:e.nrisk}))));d(a,t.append("g"),i.data.map((e=>({seriesId:e.seriesId,x:e.x,y:e.lower,scaledX:e.scaledX,scaledY:e.scaledY[1],seriesName:"lower",seriesLabel:i.seriesLabel,nevent:e.nevent,ncensor:0,nrisk:e.nrisk}))));d(a,t.append("g"),i.data.map((e=>({seriesId:e.seriesId,x:e.x,y:e.upper,scaledX:e.scaledX,scaledY:e.scaledY[2],seriesName:"upper",seriesLabel:i.seriesLabel,nevent:e.nevent,ncensor:0,nrisk:e.nrisk}))))}function d(t,s,i){s.selectAll("g").remove();const r=i.filter(((e,t)=>t===0||e.nevent||t===i.length-1));const a=i.filter((e=>e.ncensor));s.append("g");const n=i[0].seriesName;const l=e.term2toColor[i[0].seriesId].adjusted;if(n=="survival"){s.append("path").attr("d",e.lineFxn(r)).style("fill","none").style("stroke",l).style("opacity",1).style("stroke-opacity",1)}const o=s.append("g").attr("class","sjpp-survival-censored");const d=o.selectAll(".sjpp-survival-censored-x").data(a,(e=>e.x));d.exit().remove();d.attr("transform",(e=>`translate(${e.scaledX},${e.scaledY})`)).style("stroke",l).style("display","");d.enter().append("path").attr("class","sjpp-survival-censored-x").attr("transform",(e=>`translate(${e.scaledX},${e.scaledY})`)).attr("d",e.symbol).style("fill","transparent").style("fill-opacity",t.fillOpacity).style("stroke",l).style("display","")}function c(e,t,s,i,r,a){let n;if(r.xTickValues?.length){a.xTickValues=r.xTickValues.filter((e=>e===0||e>=a.xMin&&e<=a.xMax));n=I(a.xScale).tickValues(a.xTickValues)}else{a.xTickValues=[];n=I(a.xScale).ticks(4).tickFormat((e=>{a.xTickValues.push(e);return e}))}const l=-.5;e.attr("transform",`translate(${l}, ${r.svgh-r.svgPadding.top-r.svgPadding.bottom+r.xAxisOffset+l})`).call(n);s.attr("transform",`translate(${r.yAxisOffset+l}, ${l})`).call(k(o().domain(a.yScale.domain()).range(a.yScale.range())).ticks(5));t.select("text, title").remove();t.attr("transform","translate("+(r.svgw-r.svgPadding.left-r.svgPadding.right)/2+","+(r.svgh-r.axisTitleFontSize-4)+")").append("text").style("text-anchor","middle").style("font-size",r.axisTitleFontSize+"px").text(r.xTitleLabel);const d="Probability of Survival";i.select("text, title").remove();i.attr("transform","translate("+(-r.svgPadding.left/2-r.axisTitleFontSize)+","+(r.svgh-r.svgPadding.top-r.svgPadding.bottom)/2+")rotate(-90)").append("text").style("text-anchor","middle").style("font-size",r.axisTitleFontSize+"px").text(d)}e.getSymbol=function(t){const s=t,i=s/2;switch(e.settings.symbol){case"x":return`M -${i},-${i} l ${s},${s} M ${i},-${i} l -${s},${s}`;case"vtick":return`M 0,-${i} L 0,${i}`;default:throw`Unrecognized survival plot symbol='${e.settings.symbol}'`}}}function T(e){e.download=function(){if(!e.state)return;y(e.dom.chartsDiv.selectAll(".sjpp-survival-mainG"),"Survival_Plot",e.dom.chartsDiv.select(".pp-survival-chart").node())};e.mouseover=function(e){e.target.__data__};e.mouseout=function(){if(e.activeMenu)return;e.app.tip.hide()};e.legendClick=function(t,s,i){if(t===undefined)return;const r=e.settings.hidden.slice();const a=r.indexOf(t.seriesId);if(a==-1){r.push(t.seriesId);e.showLegendItemMenu(t,r,s,i)}else{r.splice(a,1);e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{customHidden:r}}}})}};e.showLegendItemMenu=function(t,s,i,r){const a=e.state.config.term2?.term||null;const n=a?.values?.[t.seriesId]?.label||t.seriesId;const o=`<div style='padding-bottom:8px'><b>${n}</b></div>`;const d=t.seriesId||t.seriesId===0?t:{seriesId:t.id,dataId:t.dataId};if(!d.seriesId&&!d.dataId){if(!a){const s=e.dom.legendTip.clear().d.append("div").html("Edit color: ");const a=s.append("input").attr("type","color").attr("value",e.settings.defaultColor).on("change",(()=>e.adjustColor(a.property("value"),t)));e.dom.legendTip.show(i,r)}return}const c=[];c.push({label:"Hide",callback:()=>{p.hide();e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{customHidden:s}}}})}});if(e.legendData[0]?.items.length>1){c.push({label:"Move&nbsp;",setInput:s=>{const i=e.legendValues[t.seriesId].order;if(i!=0)s.append("button").html("up").on("click",(()=>{p.hide();e.adjustValueOrder(t,-1)}));if(i<e.legendData[0]?.items.length-1)s.append("button").html("down").on("click",(()=>{p.hide();e.adjustValueOrder(t,1)}))}})}c.push({setInput:s=>{const i=s.append("div");i.html("Edit color: ");const r=i.append("input").attr("type","color").attr("value",e.term2toColor[t.seriesId].hex).on("change",(()=>e.adjustColor(r.property("value"),t)))}});if(!c.length)return;const p=e.dom.legendTip.clear();p.d.append("div").html(o);p.d.append("div").selectAll("div").data(c).enter().append("div").attr("class",(e=>e.label=="Hide"?"sja_menuoption":"sja_menuoption_not_interactive")).on("click",((s,i)=>{if(i.setInput)return;e.app.tip.hide();i.callback(t)})).each((function(e){const t=l(this);if(e.label)t.append("div").style("display","inline-block").html(e.label);if(e.setInput)e.setInput(t.append("div").style("display","inline-block"))}));p.show(event.clientX,event.clientY)};e.adjustValueOrder=(t,s)=>{const i=JSON.parse(JSON.stringify(e.state.config.term2?.values||e.legendValues));if(!i[t.seriesId]){i[t.seriesId]=Object.assign({},e.state.config.term2?.term?.values||{})}for(const t in i){if(!("order"in i[t]))i[t].order=e.legendValues[t].order}const r=i[t.seriesId];r.order+=s;for(const e in i){if(e==t.seriesId)continue;if("order"in i[e]&&i[e].order===r.order){i[e].order+=-1*s;break}}const a=JSON.parse(JSON.stringify(e.state.config.term2));a.values=i;e.app.dispatch({type:"plot_edit",id:e.id,config:{term2:a}});e.app.tip.hide()};e.adjustColor=(t,s)=>{const i=a(t).formatHex();const r=e.state.config.term2;if(!r){e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{defaultColor:i}}}})}else{const t=structuredClone(r?.term.values||e.legendValues);const a=structuredClone(r);a.term.values=t;if(!t)a.term.values={[s.seriesId]:{}};a.term.values[s.seriesId].color=i;e.app.dispatch({type:"plot_edit",id:e.id,config:{term2:a}})}e.app.tip.hide()};e.showMenuForSelectedChart=function(){e.dom.tip.clear();e.activeMenu=true;e.dom.tip.showunder(this).d.append("button").html("Download SVG").on("click",(()=>{if(!e.state)return;const t=l(this.closest(".pp-survival-chart"));y(t.select(".sjpp-survival-mainG"),"Survival_Plot",t.node())}))}}async function D(e,s){if(!e.term)throw"survival getPlotConfig: opts.term{} missing";try{await u(e.term,s.vocabApi);if(e.term2)await u(e.term2,s.vocabApi);if(e.term0)await u(e.term0,s.vocabApi)}catch(e){throw`${e} [survival getPlotConfig()]`}const i={id:e.term.term.id,settings:{controls:{term2:null,term0:null},survival:{radius:5,ciVisible:false,fill:"#fff",stroke:"#000",symbol:"vtick",fillOpacity:0,chartMargin:10,svgw:400,svgh:300,timeFactor:1,timeUnit:"",atRiskVisible:true,atRiskLabelOffset:-20,xTickValues:[],seriesTipDecimals:1,svgPadding:{top:20,left:55,right:20,bottom:50},axisTitleFontSize:16,xAxisOffset:5,yAxisOffset:-5,hiddenPvalues:[],defaultColor:"#2077b4"}}};return t(i,e)}function O(e){const t=new h({template:{yMin:">=yMin()",yMax:"<=yMax()",charts:[{chartId:"@key",rawChartId:"$chartId",xMin:">$time",xMax:"<$time","__:xScale":"=xScale()","__:yScale":"=yScale()",yMin:">=yMin()",yMax:"<=yMax()",serieses:[{chartId:"@parent.@parent.@key",seriesId:"@key","__:seriesLabel":"=seriesLabel()",data:[{"__:seriesId":"@parent.@parent.seriesId",x:"$time",y:"$survival",lower:"$lower",upper:"$upper","_1:scaledX":"=scaledX()","_1:scaledY":"=scaledY()",nevent:"$nevent",ncensor:"$ncensor",nrisk:"$nrisk"},"=timeCensored()"]},"$seriesId"],"@done()":"=sortSerieses()"},"=chartTitle()"],"@done()":"=sortCharts()"},"=":{chartTitle(t){e.settings;if(!t.chartId||t.chartId=="-"){const t=e.state.config.term.term.type=="survival"?"term":"term2";return e.state.config[t].term.name}const s=e.state.config.term0;if(!s||!s.term.values)return t.chartId;if(s.q?.type=="predefined-groupset"||s.q?.type=="custom-groupset")return t.chartId;const i=e.state.config.term0.term.values[t.chartId];return i&&i.label?i.label:t.chartId},seriesLabel(t,s){const i=e.state.config.term2;if(!i)return;const r=s.self.seriesId;if(i?.q?.type=="predefined-groupset"||i?.q?.type=="custom-groupset")return r;if(i&&i.term.values&&r in i.term.values)return i.term.values[r].label;return r},timeCensored(e){return e.time+"-"+e.ncensor},y(e,t){const s=t.context.parent.seriesId;return s=="CI"?[e.lower,e.upper]:e[s]},yMin(e){return e.lower},yMax(e){return e.upper},xScale(t,s){const i=e.settings;i.method==2?0:s.self.xMin;return o().domain([0,s.self.xMax]).range([0,i.svgw-i.svgPadding.left-i.svgPadding.right])},scaledX(e,t){return t.context.context.context.parent.xScale(t.self.x)},scaledY(e,t){const s=t.context.context.context.parent.yScale;const i=t.self;return[s(i.y),s(i.lower),s(i.upper)]},yScale(t,s){const i=e.settings;i.scale=="byChart"?s.self.yMax:s.root.yMax;const r=[1.05,0];return o().domain(r).range([0,i.svgh-i.svgPadding.top-i.svgPadding.bottom])},sortSerieses(t){for(const e of t.serieses){e.data.sort(((e,t)=>e.x<t.x?-1:1))}if(e.refs.orderedKeys){const s=e.refs.orderedKeys.series;t.serieses.sort(((e,t)=>s.indexOf(e.seriesId)-s.indexOf(t.seriesId)))}if(e.refs.bins){const s=e.refs.bins.map((e=>e.label));t.serieses.sort(((e,t)=>s.indexOf(e.seriesId)-s.indexOf(t.seriesId)))}},sortCharts(t){if(!e.refs.orderedKeys)return;const s=e.refs.orderedKeys.chart;t.charts.sort(((e,t)=>s.indexOf(e.chartId)-s.indexOf(t.chartId)))}}});return t}export{C as componentInit,D as getPlotConfig,w as survivalInit};
@@ -1 +0,0 @@
1
- import{_ as t}from"./tslib.es6-1f85f553.js";import{d as e}from"./app-a8c4854a.js";function n({columns:t,rows:n,div:o,columnButtons:l,buttons:s,noButtonCallback:a,singleMode:i=false,noRadioBtn:c=false,showLines:d=true,striped:r=true,showHeader:p=true,maxWidth:f="90vw",maxHeight:h="40vh",selectedRows:u=[],selectAll:b=false,resize:y=false,selectedRowStyle:w={},inputName:g=null,dataTestId:m=null}){v();let k=w;function v(){if(!t||(t===null||t===void 0?void 0:t.length)==0)throw`Missing columns data`;if(!n)throw`Missing rows data`;if(!o)throw`Missing div argument`;const e=[];for(const[o,l]of n.entries()){if(l.length!=t.length)e.push(o+1)}if(e.length>0)throw`Num of row objects != num of cols. Line num(s) = ${e}`;if(s){for(const[t,e]of s.entries()){if(!e.text)throw`Missing button.text in buttons, line #${t+1}`;if(!e.callback)throw`Missing button.callback in buttons, line #${t+1}`}}}const x=g||"select"+Math.random();const _=o.append("div").style("background-color","white");if(y){if(n.length>10)_.style("height",h);_.style("max-width",f);_.style("resize","both")}else{_.style("max-height",h).style("max-width",f);if(t.length>2)_.style("resize","horizontal")}_.attr("class","sjpp_show_scrollbar");const j=_.append("table").style("width","100%");if(m){j.attr("data-testid",m)}const C=j.append("thead").style("position","sticky").style("top","0").style("background-color","white").style("padding","5px");const A=C.append("tr");if(d)A.append("td").style("width","1vw");if(s||a){const t=A.append("td").attr("class","sjpp_table_header").style("width","1.5vw");if(!i){const e=t.append("input").attr("aria-label","Check/Uncheck All").attr("id","checkboxHeader").attr("type","checkbox").on("change",(()=>{const t=M.selectAll("input").nodes();M.selectAll("input").property("checked",e.node().checked);if(s)I();if(a)for(const[e,n]of t.entries())a(e,n)}));e.node().checked=b;if(!p)A.append("th").text("Check/Uncheck All").attr("class","sjpp_table_header sjpp_table_item")}}if(l&&l.length>0){A.append("th").text("Actions").attr("class","sjpp_table_item sjpp_table_header")}if(p)for(const e of t){const t=A.append("th").text(e.label).attr("class","sjpp_table_item sjpp_table_header");if(e.width)t.style("width",e.width)}const M=j.append("tbody");for(const[e,o]of n.entries()){let n;const p=M.append("tr").attr("class","sjpp_row_wrapper");if(r&&e%2==1)p.style("background-color","rgb(245,245,245)");if(s||a)p.on("click",(t=>{if(t.target!==n.node()){if(i)n.node().checked=true;else n.node().checked=!n.node().checked;n.dispatch("change")}}));if(d){p.append("td").text(e+1).style("text-align","center").style("width","1vw").style("font-size","0.8rem")}if(s||a){const t=p.append("td").style("width","1.5vw").style("float","center");if(c){t.style("display","none")}n=t.append("input").attr("aria-label","Select row").attr("type",i?"radio":"checkbox").attr("name",x).attr("value",e).property("checked",b||u.includes(e)).on("change",(()=>{if(s)I();else a(e,n.node());const t=n.property("checked");for(const e in k){p.style(e,t?k[e]:"")}}));const o=n.property("checked");for(const t in w){p.style(t,o?w[t]:"")}}if(l&&l.length>0){const t=p.append("td").attr("class","sjpp_table_item");for(const n of l){n.button=t.append("button").style("white-space","normal").text(n.text).on("click",(t=>n.callback(t,e)));if(n.dataTestId){n.button.attr("data-testid",n.dataTestId)}if("disabled"in n)n.button.node().disabled=n.disabled(e)}}for(const[n,l]of o.entries()){const o=p.append("td").attr("class","sjpp_table_item");l.__td=o;const s=t[n];if(s.editCallback&&l.value){o.on("click",(t=>{t.stopImmediatePropagation();const n=o.select("input").empty();if(!n)return;o.html("");const a=o.append("input").attr("value",l.value).on("change",(()=>{const t=a.node().value;l.value=t;o.text(l.value);s.editCallback(e,l)}));a.node().focus();a.node().select()}))}if(s.width)o.style("width",s.width);if(s.align)o.style("text-align",s.align);if(s.nowrap)o.style("white-space","nowrap");if(l.url){o.append("a").text(l.value||l.value==0?l.value:l.url).attr("href",l.url).attr("target","_blank")}else if(l.html)o.html(l.html);else if("value"in l)o.text(l.value);else if(l.color){if(l.disabled){o.style("background-color",l.color)}else{const t=o.append("input").attr("type","color").attr("value",l.color).on("change",(()=>{const n=t.node().value;l.color=n;if(s.editCallback)s.editCallback(e,l)}))}}}}if(s){const t=o.append("div").insert("div").style("display","inline-block").style("float","right").style("padding-bottom","5px");for(const e of s){e.button=t.append("button").text(e.text).style("margin","10px 10px 0 0").on("click",(()=>{e.callback(R(),e.button.node())}));if(e.class)e.button.attr("class",e.class);e.button.node().disabled=u.length==0&&!b}I()}function I(){if(!s)return;const t=R();for(const e of s){e.button.node().disabled=t.length==0;if(e.onChange)e.onChange(t,e.button.node())}}function R(){const t=M.selectAll("input:checked");const e=[];if(!t.empty()){t.each(((t,n,o)=>{const l=o[n];e.push(Number.parseInt(l.value))}))}return e}const z={update(t){if(t.selectedRowStyle){k=t.selectedRowStyle;const n=M.selectAll("tr");for(const t in k){n.style(t,(function(){return e(this).select("td input").property("checked")?k[t]:""}))}}}};return z}function o(e,n){return t(this,void 0,void 0,(function*(){const t=`table.tsv`;let o="";for(const t of n){o+=`${t.label}\t`}o+="\n";for(const t of e){for(const e of t){let t="";if(e.value)t=e.value;else if(e.url)t=e.url;else if(e.color)t=e.color;o+=`${t}\t`}o+="\n"}const l="data:text/tsv;charset=utf-8,"+encodeURIComponent(o);const s=document.createElement("a");s.setAttribute("href",l);s.setAttribute("download",t);document.body.appendChild(s);s.click();s.remove()}))}export{o as d,n as r};