@sjcrh/proteinpaint-client 2.76.0 → 2.76.1

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 (218) hide show
  1. package/dist/{2dmaf-74b99126.js → 2dmaf-593951c7.js} +1 -1
  2. package/dist/{AppHeader-cecb39c2.js → AppHeader-29b88e14.js} +1 -1
  3. package/dist/{ColorScale-21cab8d2.js → ColorScale-3d3c42dc.js} +1 -1
  4. package/dist/{DEanalysis-95bad59a.js → DEanalysis-f81e0f19.js} +1 -1
  5. package/dist/{Disco-a6e921a0.js → Disco-db386f7a.js} +1 -1
  6. package/dist/{Disco.UI-9ad999ed.js → Disco.UI-8ed9cb39.js} +1 -1
  7. package/dist/{DragControls-e3b6a937.js → DragControls-d6250d18.js} +1 -1
  8. package/dist/{DziViewer-354a790d.js → DziViewer-9352e224.js} +1 -1
  9. package/dist/{FilterRxComp-701a1480.js → FilterRxComp-0f35b322.js} +1 -1
  10. package/dist/{FilterStateless-54c0b763.js → FilterStateless-b1c6ee04.js} +1 -1
  11. package/dist/{HicApp-d5a946bf.js → HicApp-14b94b20.js} +1 -1
  12. package/dist/{OrbitControls-694652cd.js → OrbitControls-45f56ed4.js} +1 -1
  13. package/dist/{WSIViewer-dc7f8eb0.js → WSIViewer-80f60272.js} +1 -1
  14. package/dist/{adSandbox-f438e388.js → adSandbox-94424b88.js} +1 -1
  15. package/dist/app-2cd97738.js +1 -0
  16. package/dist/{app-3320ab6f.js → app-686b9547.js} +1 -1
  17. package/dist/app-f031940d.js +1 -0
  18. package/dist/app.js +1 -1
  19. package/dist/{bam-431875ef.js → bam-6631640f.js} +1 -1
  20. package/dist/barchart-3c5d734c.js +1 -0
  21. package/dist/{barchart.events-da29c90d.js → barchart.events-df44e666.js} +1 -1
  22. package/dist/{bars.renderer-dcfdd59b.js → bars.renderer-b232d882.js} +1 -1
  23. package/dist/{block-6aedd569.js → block-4134e823.js} +1 -1
  24. package/dist/block.lazyload-eda77d9b.js +1 -0
  25. package/dist/{block.legend-d3f61ef7.js → block.legend-d2b7f1cb.js} +1 -1
  26. package/dist/{block.mds-3ad17dfa.js → block.mds-ebe7b58d.js} +1 -1
  27. package/dist/{block.mds.cnv-857ba868.js → block.mds.cnv-99f0a414.js} +1 -1
  28. package/dist/{block.mds.expressionrank-7e3b208c.js → block.mds.expressionrank-96bf864b.js} +1 -1
  29. package/dist/{block.mds.expressionstat-f2d31c86.js → block.mds.expressionstat-dcab3fd1.js} +1 -1
  30. package/dist/{block.mds.geneboxplot-f0fbaf12.js → block.mds.geneboxplot-e5b2a4ce.js} +1 -1
  31. package/dist/{block.mds.junction-7f87f48f.js → block.mds.junction-534eef9b.js} +1 -1
  32. package/dist/{block.mds.svcnv-ac035c12.js → block.mds.svcnv-de6a3c7d.js} +1 -1
  33. package/dist/{block.mds.svcnv.share-886d9479.js → block.mds.svcnv.share-2c2c16db.js} +1 -1
  34. package/dist/{block.mds2-7852c1ee.js → block.mds2-373fcb4d.js} +1 -1
  35. package/dist/{block.svg-9b916fa6.js → block.svg-be5d741d.js} +1 -1
  36. package/dist/{block.tk.aicheck-6770e333.js → block.tk.aicheck-f2da5e81.js} +1 -1
  37. package/dist/{block.tk.ase-ee807e59.js → block.tk.ase-ef848944.js} +1 -1
  38. package/dist/{block.tk.bam-00fba6e8.js → block.tk.bam-11fcba17.js} +1 -1
  39. package/dist/{block.tk.bedgraphdot-7fda78e9.js → block.tk.bedgraphdot-a81b0709.js} +1 -1
  40. package/dist/{block.tk.bigwig.ui-cc1a42f3.js → block.tk.bigwig.ui-f8e5ba71.js} +1 -1
  41. package/dist/{block.tk.hicstraw-526470e3.js → block.tk.hicstraw-e7072b25.js} +1 -1
  42. package/dist/{block.tk.junction-b43a4cda.js → block.tk.junction-1c9a7854.js} +1 -1
  43. package/dist/{block.tk.junction.textmatrixui-a60ed78a.js → block.tk.junction.textmatrixui-ffecbb16.js} +1 -1
  44. package/dist/{block.tk.ld-d15bde41.js → block.tk.ld-274c3a82.js} +1 -1
  45. package/dist/{block.tk.menu-3aeb93c6.js → block.tk.menu-e970cd4a.js} +1 -1
  46. package/dist/{block.tk.pgv-9af2bd64.js → block.tk.pgv-f4d4dbf7.js} +1 -1
  47. package/dist/{boxplot-e17a17b7.js → boxplot-44d3b48f.js} +1 -1
  48. package/dist/{brainImaging-bf2ceee9.js → brainImaging-2eaa419d.js} +1 -1
  49. package/dist/{brush-aa175142.js → brush-bb4ae2fb.js} +1 -1
  50. package/dist/{categorical-a52014a1.js → categorical-db9b0175.js} +1 -1
  51. package/dist/{condition-c646e357.js → condition-4e788f7d.js} +1 -1
  52. package/dist/{controls-287e6efa.js → controls-3c1691d7.js} +1 -1
  53. package/dist/{controls.btns-79b805dd.js → controls.btns-5b1240c8.js} +1 -1
  54. package/dist/controls.config-81cd5749.js +1 -0
  55. package/dist/cuminc-c4db28f0.js +1 -0
  56. package/dist/{customdata.inputui-dc49d94b.js → customdata.inputui-f9234d1f.js} +1 -1
  57. package/dist/{dataDownload-3a3d4f33.js → dataDownload-a4dfa2d0.js} +1 -1
  58. package/dist/{databrowser.ui-d8d3f8fd.js → databrowser.ui-a64bab0c.js} +1 -1
  59. package/dist/{density-a82a8b1c.js → density-69a732f6.js} +1 -1
  60. package/dist/{dictionary-c5a19d90.js → dictionary-e2232e84.js} +1 -1
  61. package/dist/{drag-7b30ba17.js → drag-d8daa62f.js} +1 -1
  62. package/dist/{e2pca-82765817.js → e2pca-f9324654.js} +1 -1
  63. package/dist/{ep-d017ec2f.js → ep-a5c1ee3a.js} +1 -1
  64. package/dist/{facet-a9b44ef3.js → facet-98971c68.js} +1 -1
  65. package/dist/{fusion.parse-d40d0b9d.js → fusion.parse-466ded6d.js} +1 -1
  66. package/dist/{geneExpClustering-34c3f518.js → geneExpClustering-66c05fb1.js} +1 -1
  67. package/dist/{geneExpression-0d1b7244.js → geneExpression-5685eae2.js} +1 -1
  68. package/dist/{geneExpression-589f485b.js → geneExpression-b5d0261f.js} +1 -1
  69. package/dist/{geneExpression-7d14983f.js → geneExpression-ff46a389.js} +1 -1
  70. package/dist/{geneORA-903a780f.js → geneORA-f1a90d02.js} +1 -1
  71. package/dist/{geneVariant-92c4e870.js → geneVariant-1cf17b3b.js} +1 -1
  72. package/dist/{geneVariant-89601b34.js → geneVariant-d0b9e1cb.js} +1 -1
  73. package/dist/{genefusion.ui-7e22e811.js → genefusion.ui-89a727ea.js} +1 -1
  74. package/dist/{genesearch-a4e19f0d.js → genesearch-41cb55ce.js} +1 -1
  75. package/dist/{geneset-108a39d2.js → geneset-b63496eb.js} +1 -1
  76. package/dist/{genomeBrowser-12f86a36.js → genomeBrowser-ec8fbddc.js} +1 -1
  77. package/dist/{genomeBrowser.controls-d5067811.js → genomeBrowser.controls-2dcaf4f5.js} +1 -1
  78. package/dist/{groupsetting-b4416a96.js → groupsetting-3fef59f9.js} +1 -1
  79. package/dist/{gsea-543dab25.js → gsea-3075c82c.js} +1 -1
  80. package/dist/{hierCluster-26e14090.js → hierCluster-33a828a1.js} +1 -1
  81. package/dist/hierCluster.config-fa799d06.js +1 -0
  82. package/dist/{hierCluster.interactivity-e56f6542.js → hierCluster.interactivity-6d453881.js} +1 -1
  83. package/dist/{hierCluster.renderers-74a64cf5.js → hierCluster.renderers-6279d7fb.js} +1 -1
  84. package/dist/{html.legend-a3f4ebfe.js → html.legend-fac5cb07.js} +1 -1
  85. package/dist/{imagePlot-b9eae4ae.js → imagePlot-38254245.js} +1 -1
  86. package/dist/{lasso-f767f634.js → lasso-e8b9500e.js} +1 -1
  87. package/dist/{launch.adhoc-abca6af3.js → launch.adhoc-2799109b.js} +1 -1
  88. package/dist/{leftlabel.sample-24c2388d.js → leftlabel.sample-afcdcefd.js} +1 -1
  89. package/dist/{legacyDataset-e0e201ab.js → legacyDataset-3b08c91a.js} +1 -1
  90. package/dist/{log-99af3443.js → log-4d84c357.js} +1 -1
  91. package/dist/{lollipop-806f8fa4.js → lollipop-64c5cdfc.js} +1 -1
  92. package/dist/{maf-b06579e4.js → maf-fd4ffbd0.js} +1 -1
  93. package/dist/{maftimeline-4840a380.js → maftimeline-3e892da7.js} +1 -1
  94. package/dist/{matrix-00bb50ff.js → matrix-e371888a.js} +1 -1
  95. package/dist/{matrix.cells-914dd0c6.js → matrix.cells-eb4110a7.js} +1 -1
  96. package/dist/{matrix.cluster-783ceab0.js → matrix.cluster-0df274ed.js} +1 -1
  97. package/dist/{matrix.config-6ce74dfe.js → matrix.config-3ef822b9.js} +1 -1
  98. package/dist/{matrix.controls-7b2a6f95.js → matrix.controls-42bb2063.js} +1 -1
  99. package/dist/{matrix.data-dac4f1b7.js → matrix.data-27b8e3a9.js} +1 -1
  100. package/dist/{matrix.dom-4e10bbe9.js → matrix.dom-1bbe1f39.js} +1 -1
  101. package/dist/{matrix.groups-b9fca14a.js → matrix.groups-67606700.js} +1 -1
  102. package/dist/{matrix.interactivity-84169b43.js → matrix.interactivity-cdcc56c9.js} +1 -1
  103. package/dist/{matrix.layout-dd5a44fd.js → matrix.layout-857cd336.js} +1 -1
  104. package/dist/{matrix.legend-ac6d45e6.js → matrix.legend-09f6dc57.js} +1 -1
  105. package/dist/{matrix.renderers-78010275.js → matrix.renderers-d392fb69.js} +1 -1
  106. package/dist/{matrix.serieses-9b4fd744.js → matrix.serieses-b03b62aa.js} +1 -1
  107. package/dist/{matrix.sort-014d798d.js → matrix.sort-9440c86a.js} +1 -1
  108. package/dist/{matrix.sorterUi-9bf7e6f9.js → matrix.sorterUi-2c5eb35f.js} +1 -1
  109. package/dist/{mavb-c6be46fc.js → mavb-9d86df89.js} +1 -1
  110. package/dist/{mds.fimo-bff6a1ed.js → mds.fimo-bffccb9f.js} +1 -1
  111. package/dist/{mds.samplescatterplot-9a02b9fb.js → mds.samplescatterplot-b3908cc7.js} +1 -1
  112. package/dist/{mds.survivalplot-055549f4.js → mds.survivalplot-9ad7dabc.js} +1 -1
  113. package/dist/{metaboliteIntensity-fac92f8b.js → metaboliteIntensity-ec3176f4.js} +1 -1
  114. package/dist/niceNumLabels-5f45218a.js +1 -0
  115. package/dist/{nodrag-16ad4b03.js → nodrag-ab7d5a9f.js} +1 -1
  116. package/dist/{notify-224cccbd.js → notify-59f61230.js} +1 -1
  117. package/dist/{numeric-b0b17185.js → numeric-4853b665.js} +1 -1
  118. package/dist/{numeric.binary-1f9e93f2.js → numeric.binary-1dd9a2b4.js} +1 -1
  119. package/dist/{numeric.continuous-ebcd0567.js → numeric.continuous-ed132eea.js} +1 -1
  120. package/dist/{numeric.discrete-7b97044a.js → numeric.discrete-d780d076.js} +1 -1
  121. package/dist/{numeric.spline-1be88f3d.js → numeric.spline-abe07708.js} +1 -1
  122. package/dist/{numeric.toggle-7fa2a770.js → numeric.toggle-647423dd.js} +1 -1
  123. package/dist/oncomatrix-7ac995a2.js +1 -0
  124. package/dist/{parseData-21fe9822.js → parseData-567f3d70.js} +1 -1
  125. package/dist/{plot.2dvaf-18a35e4b.js → plot.2dvaf-4016e75e.js} +1 -1
  126. package/dist/plot.app-d6fe76e2.js +1 -0
  127. package/dist/plot.barplot-d2fc5020.js +1 -0
  128. package/dist/{plot.boxplot-fe3046c6.js → plot.boxplot-76229491.js} +1 -1
  129. package/dist/{plot.brainImaging-2ceb6023.js → plot.brainImaging-39b80a1c.js} +1 -1
  130. package/dist/{plot.disco-6011f87f.js → plot.disco-9a544f9a.js} +1 -1
  131. package/dist/{plot.dzi-6728a7c8.js → plot.dzi-f1658ebf.js} +1 -1
  132. package/dist/{plot.ssgq-5581dc56.js → plot.ssgq-aeb2dabc.js} +1 -1
  133. package/dist/{plot.vaf2cov-b2284c64.js → plot.vaf2cov-ba8332ed.js} +1 -1
  134. package/dist/{plot.wsi-9a9d4034.js → plot.wsi-2d802557.js} +1 -1
  135. package/dist/{profileBarchart-0476f1f8.js → profileBarchart-72adc533.js} +1 -1
  136. package/dist/{profileHome-32eb9b50.js → profileHome-37fd52e5.js} +1 -1
  137. package/dist/{profilePlot-c7e099e8.js → profilePlot-0b897a05.js} +1 -1
  138. package/dist/profilePolar-a7248d48.js +1 -0
  139. package/dist/profileRadar-1ba5d8fd.js +1 -0
  140. package/dist/profileRadarFacility-452e76ef.js +1 -0
  141. package/dist/{profileSummary-b114204f.js → profileSummary-7f0eacf0.js} +1 -1
  142. package/dist/{recover-49e09de0.js → recover-74f2e965.js} +1 -1
  143. package/dist/{regression.inputs-a761f40d.js → regression.inputs-ff00f74e.js} +1 -1
  144. package/dist/{regression.inputs.values.table-5929d25a.js → regression.inputs.values.table-1753d56b.js} +1 -1
  145. package/dist/{regression.results-69bc42d0.js → regression.results-6f85a5dc.js} +1 -1
  146. package/dist/{renderPvalueTable-dc5d15f2.js → renderPvalueTable-17558d6a.js} +1 -1
  147. package/dist/{sampleScatter-2d0ed680.js → sampleScatter-97917406.js} +1 -1
  148. package/dist/{sampleScatter.rendererThree-0b12ac61.js → sampleScatter.rendererThree-4649d1ec.js} +2 -2
  149. package/dist/{sampleView-484ab133.js → sampleView-f86dc5ea.js} +1 -1
  150. package/dist/{samplelst-689796e6.js → samplelst-4a5512df.js} +1 -1
  151. package/dist/{samplematrix-2b137a05.js → samplematrix-1192e5e2.js} +1 -1
  152. package/dist/{scatter-205e013f.js → scatter-cc1b0d07.js} +1 -1
  153. package/dist/{select2Terms-b21e184a.js → select2Terms-d4f6ed9e.js} +1 -1
  154. package/dist/{selectGenomeWithTklst-466995b4.js → selectGenomeWithTklst-b5cfd153.js} +1 -1
  155. package/dist/{singleCellCellType-5db730bb.js → singleCellCellType-d8c58253.js} +1 -1
  156. package/dist/{singleCellGeneExpression-7147a2d0.js → singleCellGeneExpression-b7209531.js} +1 -1
  157. package/dist/{singleCellPlot-73b2738f.js → singleCellPlot-e6f83b2a.js} +1 -1
  158. package/dist/{singlecell-bca774ed.js → singlecell-321dd973.js} +1 -1
  159. package/dist/{singlecell-24409b72.js → singlecell-879235b3.js} +1 -1
  160. package/dist/snp-541ec14d.js +1 -0
  161. package/dist/{snp-a8388ce4.js → snp-b046b7e6.js} +1 -1
  162. package/dist/snplocus-61ff1c10.js +1 -0
  163. package/dist/{spliceevent.a53ss.diagram-e2eab72b.js → spliceevent.a53ss.diagram-1a84db58.js} +1 -1
  164. package/dist/{spliceevent.exonskip.diagram-4d5df3a1.js → spliceevent.exonskip.diagram-da10648b.js} +1 -1
  165. package/dist/{spliceevent.exonskip.getdefault-a94aad6e.js → spliceevent.exonskip.getdefault-8028e522.js} +1 -1
  166. package/dist/{spliceevent.noeventdiagram-ea97b0fb.js → spliceevent.noeventdiagram-1d6d790d.js} +1 -1
  167. package/dist/{spliceevent.phrase-c5832470.js → spliceevent.phrase-2ca0ce59.js} +1 -1
  168. package/dist/{stattable-7c5ecc2f.js → stattable-c5f12d9c.js} +1 -1
  169. package/dist/{style.gdc-131f3c77.js → style.gdc-5b7d90c6.js} +1 -1
  170. package/dist/summary-0624f5e6.js +1 -0
  171. package/dist/{sunburst-533902a7.js → sunburst-30295714.js} +1 -1
  172. package/dist/{survival-e16e068f.js → survival-816e055a.js} +1 -1
  173. package/dist/{survival-92250664.js → survival-fcc7719f.js} +1 -1
  174. package/dist/{svg.download-35926549.js → svg.download-e89a7369.js} +1 -1
  175. package/dist/{svg.legend-8d490df2.js → svg.legend-c93f2980.js} +1 -1
  176. package/dist/{svgraph-6fac8cbc.js → svgraph-6ab3011b.js} +1 -1
  177. package/dist/{svmr-d07ff695.js → svmr-3ad3d600.js} +1 -1
  178. package/dist/{table-ad744310.js → table-4d3a771e.js} +1 -1
  179. package/dist/{table-29d5a973.js → table-f50a9344.js} +1 -1
  180. package/dist/{termInfo-bf99a37e.js → termInfo-d0a9e65f.js} +1 -1
  181. package/dist/{termdb.bins-8b656cc3.js → termdb.bins-01e8cce6.js} +1 -1
  182. package/dist/{termsetting-33ea66f1.js → termsetting-ad8c4f3a.js} +1 -1
  183. package/dist/{tk-071a7550.js → tk-e74c9beb.js} +1 -1
  184. package/dist/{toggleButtons-dbdbad01.js → toggleButtons-04c5ad7c.js} +1 -1
  185. package/dist/{tp.ui-9c2e9fc5.js → tp.ui-7b24f0ef.js} +1 -1
  186. package/dist/{tvs.density-f6128793.js → tvs.density-b2790080.js} +1 -1
  187. package/dist/{tvs.geneVariant-ca4bdbb1.js → tvs.geneVariant-418ed4ff.js} +1 -1
  188. package/dist/{tvs.numeric-0260a825.js → tvs.numeric-de14101f.js} +1 -1
  189. package/dist/{tvs.samplelst-cb71b3bf.js → tvs.samplelst-15bb62f1.js} +1 -1
  190. package/dist/{uiUtils-f1bd2bcc.js → uiUtils-ff2d4a6a.js} +1 -1
  191. package/dist/{variantBrowser-7c540224.js → variantBrowser-261373bf.js} +1 -1
  192. package/dist/{vcf-5cc55588.js → vcf-145bf5dd.js} +1 -1
  193. package/dist/violin-e647aac9.js +1 -0
  194. package/dist/{violin.interactivity-4da6d7a9.js → violin.interactivity-30a239fe.js} +1 -1
  195. package/dist/{violin.renderer-ce024265.js → violin.renderer-e29d2700.js} +1 -1
  196. package/dist/{violinRenderer-f7c96a60.js → violinRenderer-08b3b58c.js} +1 -1
  197. package/dist/{viridis-01ab20c5.js → viridis-d86ad99b.js} +1 -1
  198. package/dist/{y-67939f83.js → y-06b0d47c.js} +1 -1
  199. package/dist/{zoom-25dce8b9.js → zoom-d6ef6f3f.js} +1 -1
  200. package/package.json +1 -1
  201. package/dist/app-649f8357.js +0 -1
  202. package/dist/app-b369b169.js +0 -1
  203. package/dist/barchart-8277ed43.js +0 -1
  204. package/dist/block.lazyload-87b12654.js +0 -1
  205. package/dist/controls.config-28d6d6a8.js +0 -1
  206. package/dist/cuminc-9e275854.js +0 -1
  207. package/dist/hierCluster.config-98e82dff.js +0 -1
  208. package/dist/niceNumLabels-238aabce.js +0 -1
  209. package/dist/oncomatrix-351af2a0.js +0 -1
  210. package/dist/plot.app-30c4b8e5.js +0 -1
  211. package/dist/plot.barplot-7c4865a2.js +0 -1
  212. package/dist/profilePolar-6b981e63.js +0 -1
  213. package/dist/profileRadar-bca1cc03.js +0 -1
  214. package/dist/profileRadarFacility-bbb1ecd8.js +0 -1
  215. package/dist/snp-37d06246.js +0 -1
  216. package/dist/snplocus-7a1ea8c9.js +0 -1
  217. package/dist/summary-5ec455d3.js +0 -1
  218. package/dist/violin-2ba509eb.js +0 -1
@@ -1 +1 @@
1
- import{b as t,h as e,P as a,K as i}from"./app-b369b169.js";import{topBarInit as s}from"./controls.btns-79b805dd.js";import{configUiInit as n}from"./controls.config-28d6d6a8.js";import{r as o}from"./table-29d5a973.js";import"./termsetting-33ea66f1.js";import"./tslib.es6-c3c2d88f.js";import"path";class r{constructor(t){this.opts=t;this.type="brainImaging";this.isOpen=true}async init(){const t=this.opts.holder;const e=t.append("div").style("display","inline-block").style("vertical-align","top");const a=e.append("div");const o=e.append("div");const r=this.getConfigInputsOptions();this.features=await i({topbar:s({app:this.app,id:this.id,downloadHandler:()=>{const e=t.select('div[id="sjpp_brainImaging_holder_div"] img').node();const a="brainImaging";const i=document.createElement("a");document.body.appendChild(i);i.addEventListener("click",(()=>{i.download=a+".png";i.href=e.src;document.body.removeChild(i)}),false);i.click()},callback:()=>this.toggleVisibility(this.isOpen),isOpen:()=>this.isOpen,holder:a}),config:n({app:this.app,id:this.id,holder:o,isOpen:()=>this.isOpen,inputs:r})})}getConfigInputsOptions(){const t=[{label:"Sagittal",type:"number",chartType:"brainImaging",settingsKey:"brainImageL",title:"Sagittal",min:0,max:192},{label:"Coronal",type:"number",chartType:"brainImaging",settingsKey:"brainImageF",title:"Coronal",min:0,max:228},{label:"Axial",type:"number",chartType:"brainImaging",settingsKey:"brainImageT",title:"Axial",min:0,max:192}];return t}async main(){const e=this.state.settings;this.isOpen=e.brainImaging.isOpen;this.opts.holder.select('div[id="sjpp_brainImaging_holder_div"]').remove();const a=this.opts.holder.append("div").attr("id","sjpp_brainImaging_holder_div").style("display","inline-block");if(this.opts.header)this.opts.header.style("padding-left","7px").style("color","rgb(85, 85, 85)").text(`Brain Imaging: ${this.state.queryKey}`);const i=this.app.getState();for(const t in this.features){this.features[t].update({state:this.state,appState:i})}const s={genome:i.vocab.genome,dslabel:i.vocab.dslabel,refKey:this.state.queryKey,l:e.brainImaging.brainImageL,f:e.brainImaging.brainImageF,t:e.brainImaging.brainImageT,selectedSampleFileNames:this.state.selectedSampleFileNames};const n=await t("brainImaging",{body:s});if(n.error)throw n.error;const o=await n.brainImage;const r=new Image;r.onload=()=>{a.append("img").attr("width",r.width*2).attr("height",r.height*2).attr("src",o)};r.src=o}getState(t){return t.plots.find((t=>t.id===this.id))}toggleVisibility(t){this.app.dispatch({type:"plot_edit",id:this.opts.id,config:{settings:{brainImaging:{isOpen:!t}}}})}}function p(e,a){a.dom.tip.clear();const i=e.append("div");if(a.state.termdbConfig.queries.NIdata){for(const[e,s]of Object.entries(a.state.termdbConfig.queries.NIdata)){const n=i.append("div");const r=n.append("div").attr("class","sja_menuoption sja_sharp_border").text(e).on("click",(async()=>{r.attr("class","sja_menuoption_not_interactive");r.on("click",null);const i={genome:a.opts.vocab.genome,dslabel:a.opts.vocab.dslabel,refKey:e,samplesOnly:true};const p=await t("brainImaging",{body:i});const l=p.brainImage;const[c,d]=await m(a,l,a.state,e);const g={text:"APPLY",class:"sjpp_apply_btn sja_filter_tag_btn",callback:t=>{a.dom.tip.hide();const i=t.map((t=>l[t].sample+".nii"));const n={chartType:"brainImaging",queryKey:e,settings:{brainImaging:{brainImageL:s.parameters.l,brainImageF:s.parameters.f,brainImageT:s.parameters.t}},selectedSampleFileNames:i};a.app.dispatch({type:"plot_create",config:n})}};o({rows:c,columns:d,resize:true,singleMode:false,div:n.append("div"),maxHeight:"40vh",buttons:[g]})}))}}}const l=e(r);const c=l;async function d(t){const e={brainImaging:{brainImageL:76,brainImageF:116,brainImageT:80}};const i={chartType:"brainImaging",settings:e};return a(i,t)}async function m(t,e,a,i){const s=[];for(const t of e){const e=[{value:t.sample}];for(const s of a.termdbConfig.queries.NIdata[i].sampleColumns||[]){e.push({value:t[s.termid]})}s.push(e)}const n=[{label:"Sample"}];for(const e of a.termdbConfig.queries.NIdata[i].sampleColumns||[]){n.push({label:(await t.app.vocabApi.getterm(e.termid)).name,width:"15vw"})}return[s,n]}export{l as brainImaging,c as componentInit,d as getPlotConfig,p as makeChartBtnMenu};
1
+ import{b as t,h as e,P as a,K as i}from"./app-2cd97738.js";import{topBarInit as s}from"./controls.btns-5b1240c8.js";import{configUiInit as n}from"./controls.config-81cd5749.js";import{r as o}from"./table-f50a9344.js";import"./termsetting-ad8c4f3a.js";import"./tslib.es6-c3c2d88f.js";import"path";class r{constructor(t){this.opts=t;this.type="brainImaging";this.isOpen=true}async init(){const t=this.opts.holder;const e=t.append("div").style("display","inline-block").style("vertical-align","top");const a=e.append("div");const o=e.append("div");const r=this.getConfigInputsOptions();this.features=await i({topbar:s({app:this.app,id:this.id,downloadHandler:()=>{const e=t.select('div[id="sjpp_brainImaging_holder_div"] img').node();const a="brainImaging";const i=document.createElement("a");document.body.appendChild(i);i.addEventListener("click",(()=>{i.download=a+".png";i.href=e.src;document.body.removeChild(i)}),false);i.click()},callback:()=>this.toggleVisibility(this.isOpen),isOpen:()=>this.isOpen,holder:a}),config:n({app:this.app,id:this.id,holder:o,isOpen:()=>this.isOpen,inputs:r})})}getConfigInputsOptions(){const t=[{label:"Sagittal",type:"number",chartType:"brainImaging",settingsKey:"brainImageL",title:"Sagittal",min:0,max:192},{label:"Coronal",type:"number",chartType:"brainImaging",settingsKey:"brainImageF",title:"Coronal",min:0,max:228},{label:"Axial",type:"number",chartType:"brainImaging",settingsKey:"brainImageT",title:"Axial",min:0,max:192}];return t}async main(){const e=this.state.settings;this.isOpen=e.brainImaging.isOpen;this.opts.holder.select('div[id="sjpp_brainImaging_holder_div"]').remove();const a=this.opts.holder.append("div").attr("id","sjpp_brainImaging_holder_div").style("display","inline-block");if(this.opts.header)this.opts.header.style("padding-left","7px").style("color","rgb(85, 85, 85)").text(`Brain Imaging: ${this.state.queryKey}`);const i=this.app.getState();for(const t in this.features){this.features[t].update({state:this.state,appState:i})}const s={genome:i.vocab.genome,dslabel:i.vocab.dslabel,refKey:this.state.queryKey,l:e.brainImaging.brainImageL,f:e.brainImaging.brainImageF,t:e.brainImaging.brainImageT,selectedSampleFileNames:this.state.selectedSampleFileNames};const n=await t("brainImaging",{body:s});if(n.error)throw n.error;const o=await n.brainImage;const r=new Image;r.onload=()=>{a.append("img").attr("width",r.width*2).attr("height",r.height*2).attr("src",o)};r.src=o}getState(t){return t.plots.find((t=>t.id===this.id))}toggleVisibility(t){this.app.dispatch({type:"plot_edit",id:this.opts.id,config:{settings:{brainImaging:{isOpen:!t}}}})}}function p(e,a){a.dom.tip.clear();const i=e.append("div");if(a.state.termdbConfig.queries.NIdata){for(const[e,s]of Object.entries(a.state.termdbConfig.queries.NIdata)){const n=i.append("div");const r=n.append("div").attr("class","sja_menuoption sja_sharp_border").text(e).on("click",(async()=>{r.attr("class","sja_menuoption_not_interactive");r.on("click",null);const i={genome:a.opts.vocab.genome,dslabel:a.opts.vocab.dslabel,refKey:e,samplesOnly:true};const p=await t("brainImaging",{body:i});const l=p.brainImage;const[c,d]=await m(a,l,a.state,e);const g={text:"APPLY",class:"sjpp_apply_btn sja_filter_tag_btn",callback:t=>{a.dom.tip.hide();const i=t.map((t=>l[t].sample+".nii"));const n={chartType:"brainImaging",queryKey:e,settings:{brainImaging:{brainImageL:s.parameters.l,brainImageF:s.parameters.f,brainImageT:s.parameters.t}},selectedSampleFileNames:i};a.app.dispatch({type:"plot_create",config:n})}};o({rows:c,columns:d,resize:true,singleMode:false,div:n.append("div"),maxHeight:"40vh",buttons:[g]})}))}}}const l=e(r);const c=l;async function d(t){const e={brainImaging:{brainImageL:76,brainImageF:116,brainImageT:80}};const i={chartType:"brainImaging",settings:e};return a(i,t)}async function m(t,e,a,i){const s=[];for(const t of e){const e=[{value:t.sample}];for(const s of a.termdbConfig.queries.NIdata[i].sampleColumns||[]){e.push({value:t[s.termid]})}s.push(e)}const n=[{label:"Sample"}];for(const e of a.termdbConfig.queries.NIdata[i].sampleColumns||[]){n.push({label:(await t.app.vocabApi.getterm(e.termid)).name,width:"15vw"})}return[s,n]}export{l as brainImaging,c as componentInit,d as getPlotConfig,p as makeChartBtnMenu};
@@ -1 +1 @@
1
- import{_ as e,$ as t,a0 as n,d as r}from"./app-b369b169.js";import{p as i}from"./pointer-c7475677.js";import{d as s,y as u}from"./nodrag-16ad4b03.js";var a=e=>()=>e;function o(e,{sourceEvent:t,target:n,selection:r,mode:i,dispatch:s}){Object.defineProperties(this,{type:{value:e,enumerable:true,configurable:true},sourceEvent:{value:t,enumerable:true,configurable:true},target:{value:n,enumerable:true,configurable:true},selection:{value:r,enumerable:true,configurable:true},mode:{value:i,enumerable:true,configurable:true},_:{value:s}})}function l(e){e.stopImmediatePropagation()}function c(e){e.preventDefault();e.stopImmediatePropagation()}var f={name:"drag"},h={name:"space"},p={name:"handle"},d={name:"center"};const{abs:v,max:b,min:y}=Math;function m(e){return[+e[0],+e[1]]}function w(e){return[m(e[0]),m(e[1])]}var g={name:"x",handles:["w","e"].map(K),input:function(e,t){return e==null?null:[[+e[0],t[0][1]],[+e[1],t[1][1]]]},output:function(e){return e&&[e[0][0],e[1][0]]}};var _={name:"y",handles:["n","s"].map(K),input:function(e,t){return e==null?null:[[t[0][0],+e[0]],[t[1][0],+e[1]]]},output:function(e){return e&&[e[0][1],e[1][1]]}};var x={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"};var k={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"};var z={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"};var A={overlay:+1,selection:+1,n:null,e:+1,s:null,w:-1,nw:-1,ne:+1,se:+1,sw:-1};var E={overlay:+1,selection:+1,n:-1,e:null,s:+1,w:null,nw:-1,ne:-1,se:+1,sw:+1};function K(e){return{type:e}}function j(e){return!e.ctrlKey&&!e.button}function P(){var e=this.ownerSVGElement||this;if(e.hasAttribute("viewBox")){e=e.viewBox.baseVal;return[[e.x,e.y],[e.x+e.width,e.y+e.height]]}return[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]}function T(){return navigator.maxTouchPoints||"ontouchstart"in this}function V(e){while(!e.__brush)if(!(e=e.parentNode))return;return e.__brush}function B(e){return e[0][0]===e[1][0]||e[0][1]===e[1][1]}function C(){return M(g)}function I(){return M(_)}function M(m){var C=P,I=j,M=T,S=true,D=e("start","brush","end"),G=6,N;function O(e){var t=e.property("__brush",Q).selectAll(".overlay").data([K("overlay")]);t.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",x.overlay).merge(t).each((function(){var e=V(this).extent;r(this).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1])}));e.selectAll(".selection").data([K("selection")]).enter().append("rect").attr("class","selection").attr("cursor",x.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var n=e.selectAll(".handle").data(m.handles,(function(e){return e.type}));n.exit().remove();n.enter().append("rect").attr("class",(function(e){return"handle handle--"+e.type})).attr("cursor",(function(e){return x[e.type]}));e.each($).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",H).filter(M).on("touchstart.brush",H).on("touchmove.brush",J).on("touchend.brush touchcancel.brush",L).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}O.move=function(e,r,i){if(e.tween){e.on("start.brush",(function(e){q(this,arguments).beforestart().start(e)})).on("interrupt.brush end.brush",(function(e){q(this,arguments).end(e)})).tween("brush",(function(){var e=this,n=e.__brush,i=q(e,arguments),s=n.selection,u=m.input(typeof r==="function"?r.apply(this,arguments):r,n.extent),a=t(s,u);function o(t){n.selection=t===1&&u===null?null:a(t);$.call(e);i.brush()}return s!==null&&u!==null?o:o(1)}))}else{e.each((function(){var e=this,t=arguments,s=e.__brush,u=m.input(typeof r==="function"?r.apply(e,t):r,s.extent),a=q(e,t).beforestart();n(e);s.selection=u===null?null:u;$.call(e);a.start(i).brush(i).end(i)}))}};O.clear=function(e,t){O.move(e,null,t)};function $(){var e=r(this),t=V(this).selection;if(t){e.selectAll(".selection").style("display",null).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1]);e.selectAll(".handle").style("display",null).attr("x",(function(e){return e.type[e.type.length-1]==="e"?t[1][0]-G/2:t[0][0]-G/2})).attr("y",(function(e){return e.type[0]==="s"?t[1][1]-G/2:t[0][1]-G/2})).attr("width",(function(e){return e.type==="n"||e.type==="s"?t[1][0]-t[0][0]+G:G})).attr("height",(function(e){return e.type==="e"||e.type==="w"?t[1][1]-t[0][1]+G:G}))}else{e.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}}function q(e,t,n){var r=e.__brush.emitter;return r&&(!n||!r.clean)?r:new F(e,t,n)}function F(e,t,n){this.that=e;this.args=t;this.state=e.__brush;this.active=0;this.clean=n}F.prototype={beforestart:function(){if(++this.active===1)this.state.emitter=this,this.starting=true;return this},start:function(e,t){if(this.starting)this.starting=false,this.emit("start",e,t);else this.emit("brush",e);return this},brush:function(e,t){this.emit("brush",e,t);return this},end:function(e,t){if(--this.active===0)delete this.state.emitter,this.emit("end",e,t);return this},emit:function(e,t,n){var i=r(this.that).datum();D.call(e,this.that,new o(e,{sourceEvent:t,target:O,selection:m.output(this.state.selection),mode:n,dispatch:D}),i)}};function H(e){if(N&&!e.touches)return;if(!I.apply(this,arguments))return;var t=this,a=e.target.__data__.type,o=(S&&e.metaKey?a="overlay":a)==="selection"?f:S&&e.altKey?d:p,w=m===_?null:A[a],K=m===g?null:E[a],j=V(t),P=j.extent,T=j.selection,C=P[0][0],M,D,G=P[0][1],O,F,H=P[1][0],J,L,Q=P[1][1],R,U,W=0,X=0,Y,Z=w&&K&&S&&e.shiftKey,ee,te,ne=Array.from(e.touches||[e],(e=>{const n=e.identifier;e=i(e,t);e.point0=e.slice();e.identifier=n;return e}));n(t);var re=q(t,arguments,true).beforestart();if(a==="overlay"){if(T)Y=true;const t=[ne[0],ne[1]||ne[0]];j.selection=T=[[M=m===_?C:y(t[0][0],t[1][0]),O=m===g?G:y(t[0][1],t[1][1])],[J=m===_?H:b(t[0][0],t[1][0]),R=m===g?Q:b(t[0][1],t[1][1])]];if(ne.length>1)oe(e)}else{M=T[0][0];O=T[0][1];J=T[1][0];R=T[1][1]}D=M;F=O;L=J;U=R;var ie=r(t).attr("pointer-events","none");var se=ie.selectAll(".overlay").attr("cursor",x[a]);if(e.touches){re.moved=ae;re.ended=le}else{var ue=r(e.view).on("mousemove.brush",ae,true).on("mouseup.brush",le,true);if(S)ue.on("keydown.brush",ce,true).on("keyup.brush",fe,true);s(e.view)}$.call(t);re.start(e,o.name);function ae(e){for(const n of e.changedTouches||[e]){for(const e of ne)if(e.identifier===n.identifier)e.cur=i(n,t)}if(Z&&!ee&&!te&&ne.length===1){const e=ne[0];if(v(e.cur[0]-e[0])>v(e.cur[1]-e[1]))te=true;else ee=true}for(const e of ne)if(e.cur)e[0]=e.cur[0],e[1]=e.cur[1];Y=true;c(e);oe(e)}function oe(e){const n=ne[0],r=n.point0;var i;W=n[0]-r[0];X=n[1]-r[1];switch(o){case h:case f:{if(w)W=b(C-M,y(H-J,W)),D=M+W,L=J+W;if(K)X=b(G-O,y(Q-R,X)),F=O+X,U=R+X;break}case p:{if(ne[1]){if(w)D=b(C,y(H,ne[0][0])),L=b(C,y(H,ne[1][0])),w=1;if(K)F=b(G,y(Q,ne[0][1])),U=b(G,y(Q,ne[1][1])),K=1}else{if(w<0)W=b(C-M,y(H-M,W)),D=M+W,L=J;else if(w>0)W=b(C-J,y(H-J,W)),D=M,L=J+W;if(K<0)X=b(G-O,y(Q-O,X)),F=O+X,U=R;else if(K>0)X=b(G-R,y(Q-R,X)),F=O,U=R+X}break}case d:{if(w)D=b(C,y(H,M-W*w)),L=b(C,y(H,J+W*w));if(K)F=b(G,y(Q,O-X*K)),U=b(G,y(Q,R+X*K));break}}if(L<D){w*=-1;i=M,M=J,J=i;i=D,D=L,L=i;if(a in k)se.attr("cursor",x[a=k[a]])}if(U<F){K*=-1;i=O,O=R,R=i;i=F,F=U,U=i;if(a in z)se.attr("cursor",x[a=z[a]])}if(j.selection)T=j.selection;if(ee)D=T[0][0],L=T[1][0];if(te)F=T[0][1],U=T[1][1];if(T[0][0]!==D||T[0][1]!==F||T[1][0]!==L||T[1][1]!==U){j.selection=[[D,F],[L,U]];$.call(t);re.brush(e,o.name)}}function le(e){l(e);if(e.touches){if(e.touches.length)return;if(N)clearTimeout(N);N=setTimeout((function(){N=null}),500)}else{u(e.view,Y);ue.on("keydown.brush keyup.brush mousemove.brush mouseup.brush",null)}ie.attr("pointer-events","all");se.attr("cursor",x.overlay);if(j.selection)T=j.selection;if(B(T))j.selection=null,$.call(t);re.end(e,o.name)}function ce(e){switch(e.keyCode){case 16:{Z=w&&K;break}case 18:{if(o===p){if(w)J=L-W*w,M=D+W*w;if(K)R=U-X*K,O=F+X*K;o=d;oe(e)}break}case 32:{if(o===p||o===d){if(w<0)J=L-W;else if(w>0)M=D-W;if(K<0)R=U-X;else if(K>0)O=F-X;o=h;se.attr("cursor",x.selection);oe(e)}break}default:return}c(e)}function fe(e){switch(e.keyCode){case 16:{if(Z){ee=te=Z=false;oe(e)}break}case 18:{if(o===d){if(w<0)J=L;else if(w>0)M=D;if(K<0)R=U;else if(K>0)O=F;o=p;oe(e)}break}case 32:{if(o===h){if(e.altKey){if(w)J=L-W*w,M=D+W*w;if(K)R=U-X*K,O=F+X*K;o=d}else{if(w<0)J=L;else if(w>0)M=D;if(K<0)R=U;else if(K>0)O=F;o=p}se.attr("cursor",x[a]);oe(e)}break}default:return}c(e)}}function J(e){q(this,arguments).moved(e)}function L(e){q(this,arguments).ended(e)}function Q(){var e=this.__brush||{selection:null};e.extent=w(C.apply(this,arguments));e.dim=m;return e}O.extent=function(e){return arguments.length?(C=typeof e==="function"?e:a(w(e)),O):C};O.filter=function(e){return arguments.length?(I=typeof e==="function"?e:a(!!e),O):I};O.touchable=function(e){return arguments.length?(M=typeof e==="function"?e:a(!!e),O):M};O.handleSize=function(e){return arguments.length?(G=+e,O):G};O.keyModifiers=function(e){return arguments.length?(S=!!e,O):S};O.on=function(){var e=D.on.apply(D,arguments);return e===D?O:e};return O}export{I as a,C as b};
1
+ import{_ as e,$ as t,a0 as n,d as r}from"./app-2cd97738.js";import{p as i}from"./pointer-c7475677.js";import{d as s,y as u}from"./nodrag-ab7d5a9f.js";var a=e=>()=>e;function o(e,{sourceEvent:t,target:n,selection:r,mode:i,dispatch:s}){Object.defineProperties(this,{type:{value:e,enumerable:true,configurable:true},sourceEvent:{value:t,enumerable:true,configurable:true},target:{value:n,enumerable:true,configurable:true},selection:{value:r,enumerable:true,configurable:true},mode:{value:i,enumerable:true,configurable:true},_:{value:s}})}function l(e){e.stopImmediatePropagation()}function c(e){e.preventDefault();e.stopImmediatePropagation()}var f={name:"drag"},h={name:"space"},p={name:"handle"},d={name:"center"};const{abs:v,max:b,min:y}=Math;function m(e){return[+e[0],+e[1]]}function w(e){return[m(e[0]),m(e[1])]}var g={name:"x",handles:["w","e"].map(K),input:function(e,t){return e==null?null:[[+e[0],t[0][1]],[+e[1],t[1][1]]]},output:function(e){return e&&[e[0][0],e[1][0]]}};var _={name:"y",handles:["n","s"].map(K),input:function(e,t){return e==null?null:[[t[0][0],+e[0]],[t[1][0],+e[1]]]},output:function(e){return e&&[e[0][1],e[1][1]]}};var x={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"};var k={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"};var z={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"};var A={overlay:+1,selection:+1,n:null,e:+1,s:null,w:-1,nw:-1,ne:+1,se:+1,sw:-1};var E={overlay:+1,selection:+1,n:-1,e:null,s:+1,w:null,nw:-1,ne:-1,se:+1,sw:+1};function K(e){return{type:e}}function j(e){return!e.ctrlKey&&!e.button}function P(){var e=this.ownerSVGElement||this;if(e.hasAttribute("viewBox")){e=e.viewBox.baseVal;return[[e.x,e.y],[e.x+e.width,e.y+e.height]]}return[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]}function T(){return navigator.maxTouchPoints||"ontouchstart"in this}function V(e){while(!e.__brush)if(!(e=e.parentNode))return;return e.__brush}function B(e){return e[0][0]===e[1][0]||e[0][1]===e[1][1]}function C(){return M(g)}function I(){return M(_)}function M(m){var C=P,I=j,M=T,S=true,D=e("start","brush","end"),G=6,N;function O(e){var t=e.property("__brush",Q).selectAll(".overlay").data([K("overlay")]);t.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",x.overlay).merge(t).each((function(){var e=V(this).extent;r(this).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1])}));e.selectAll(".selection").data([K("selection")]).enter().append("rect").attr("class","selection").attr("cursor",x.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var n=e.selectAll(".handle").data(m.handles,(function(e){return e.type}));n.exit().remove();n.enter().append("rect").attr("class",(function(e){return"handle handle--"+e.type})).attr("cursor",(function(e){return x[e.type]}));e.each($).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",H).filter(M).on("touchstart.brush",H).on("touchmove.brush",J).on("touchend.brush touchcancel.brush",L).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}O.move=function(e,r,i){if(e.tween){e.on("start.brush",(function(e){q(this,arguments).beforestart().start(e)})).on("interrupt.brush end.brush",(function(e){q(this,arguments).end(e)})).tween("brush",(function(){var e=this,n=e.__brush,i=q(e,arguments),s=n.selection,u=m.input(typeof r==="function"?r.apply(this,arguments):r,n.extent),a=t(s,u);function o(t){n.selection=t===1&&u===null?null:a(t);$.call(e);i.brush()}return s!==null&&u!==null?o:o(1)}))}else{e.each((function(){var e=this,t=arguments,s=e.__brush,u=m.input(typeof r==="function"?r.apply(e,t):r,s.extent),a=q(e,t).beforestart();n(e);s.selection=u===null?null:u;$.call(e);a.start(i).brush(i).end(i)}))}};O.clear=function(e,t){O.move(e,null,t)};function $(){var e=r(this),t=V(this).selection;if(t){e.selectAll(".selection").style("display",null).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1]);e.selectAll(".handle").style("display",null).attr("x",(function(e){return e.type[e.type.length-1]==="e"?t[1][0]-G/2:t[0][0]-G/2})).attr("y",(function(e){return e.type[0]==="s"?t[1][1]-G/2:t[0][1]-G/2})).attr("width",(function(e){return e.type==="n"||e.type==="s"?t[1][0]-t[0][0]+G:G})).attr("height",(function(e){return e.type==="e"||e.type==="w"?t[1][1]-t[0][1]+G:G}))}else{e.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}}function q(e,t,n){var r=e.__brush.emitter;return r&&(!n||!r.clean)?r:new F(e,t,n)}function F(e,t,n){this.that=e;this.args=t;this.state=e.__brush;this.active=0;this.clean=n}F.prototype={beforestart:function(){if(++this.active===1)this.state.emitter=this,this.starting=true;return this},start:function(e,t){if(this.starting)this.starting=false,this.emit("start",e,t);else this.emit("brush",e);return this},brush:function(e,t){this.emit("brush",e,t);return this},end:function(e,t){if(--this.active===0)delete this.state.emitter,this.emit("end",e,t);return this},emit:function(e,t,n){var i=r(this.that).datum();D.call(e,this.that,new o(e,{sourceEvent:t,target:O,selection:m.output(this.state.selection),mode:n,dispatch:D}),i)}};function H(e){if(N&&!e.touches)return;if(!I.apply(this,arguments))return;var t=this,a=e.target.__data__.type,o=(S&&e.metaKey?a="overlay":a)==="selection"?f:S&&e.altKey?d:p,w=m===_?null:A[a],K=m===g?null:E[a],j=V(t),P=j.extent,T=j.selection,C=P[0][0],M,D,G=P[0][1],O,F,H=P[1][0],J,L,Q=P[1][1],R,U,W=0,X=0,Y,Z=w&&K&&S&&e.shiftKey,ee,te,ne=Array.from(e.touches||[e],(e=>{const n=e.identifier;e=i(e,t);e.point0=e.slice();e.identifier=n;return e}));n(t);var re=q(t,arguments,true).beforestart();if(a==="overlay"){if(T)Y=true;const t=[ne[0],ne[1]||ne[0]];j.selection=T=[[M=m===_?C:y(t[0][0],t[1][0]),O=m===g?G:y(t[0][1],t[1][1])],[J=m===_?H:b(t[0][0],t[1][0]),R=m===g?Q:b(t[0][1],t[1][1])]];if(ne.length>1)oe(e)}else{M=T[0][0];O=T[0][1];J=T[1][0];R=T[1][1]}D=M;F=O;L=J;U=R;var ie=r(t).attr("pointer-events","none");var se=ie.selectAll(".overlay").attr("cursor",x[a]);if(e.touches){re.moved=ae;re.ended=le}else{var ue=r(e.view).on("mousemove.brush",ae,true).on("mouseup.brush",le,true);if(S)ue.on("keydown.brush",ce,true).on("keyup.brush",fe,true);s(e.view)}$.call(t);re.start(e,o.name);function ae(e){for(const n of e.changedTouches||[e]){for(const e of ne)if(e.identifier===n.identifier)e.cur=i(n,t)}if(Z&&!ee&&!te&&ne.length===1){const e=ne[0];if(v(e.cur[0]-e[0])>v(e.cur[1]-e[1]))te=true;else ee=true}for(const e of ne)if(e.cur)e[0]=e.cur[0],e[1]=e.cur[1];Y=true;c(e);oe(e)}function oe(e){const n=ne[0],r=n.point0;var i;W=n[0]-r[0];X=n[1]-r[1];switch(o){case h:case f:{if(w)W=b(C-M,y(H-J,W)),D=M+W,L=J+W;if(K)X=b(G-O,y(Q-R,X)),F=O+X,U=R+X;break}case p:{if(ne[1]){if(w)D=b(C,y(H,ne[0][0])),L=b(C,y(H,ne[1][0])),w=1;if(K)F=b(G,y(Q,ne[0][1])),U=b(G,y(Q,ne[1][1])),K=1}else{if(w<0)W=b(C-M,y(H-M,W)),D=M+W,L=J;else if(w>0)W=b(C-J,y(H-J,W)),D=M,L=J+W;if(K<0)X=b(G-O,y(Q-O,X)),F=O+X,U=R;else if(K>0)X=b(G-R,y(Q-R,X)),F=O,U=R+X}break}case d:{if(w)D=b(C,y(H,M-W*w)),L=b(C,y(H,J+W*w));if(K)F=b(G,y(Q,O-X*K)),U=b(G,y(Q,R+X*K));break}}if(L<D){w*=-1;i=M,M=J,J=i;i=D,D=L,L=i;if(a in k)se.attr("cursor",x[a=k[a]])}if(U<F){K*=-1;i=O,O=R,R=i;i=F,F=U,U=i;if(a in z)se.attr("cursor",x[a=z[a]])}if(j.selection)T=j.selection;if(ee)D=T[0][0],L=T[1][0];if(te)F=T[0][1],U=T[1][1];if(T[0][0]!==D||T[0][1]!==F||T[1][0]!==L||T[1][1]!==U){j.selection=[[D,F],[L,U]];$.call(t);re.brush(e,o.name)}}function le(e){l(e);if(e.touches){if(e.touches.length)return;if(N)clearTimeout(N);N=setTimeout((function(){N=null}),500)}else{u(e.view,Y);ue.on("keydown.brush keyup.brush mousemove.brush mouseup.brush",null)}ie.attr("pointer-events","all");se.attr("cursor",x.overlay);if(j.selection)T=j.selection;if(B(T))j.selection=null,$.call(t);re.end(e,o.name)}function ce(e){switch(e.keyCode){case 16:{Z=w&&K;break}case 18:{if(o===p){if(w)J=L-W*w,M=D+W*w;if(K)R=U-X*K,O=F+X*K;o=d;oe(e)}break}case 32:{if(o===p||o===d){if(w<0)J=L-W;else if(w>0)M=D-W;if(K<0)R=U-X;else if(K>0)O=F-X;o=h;se.attr("cursor",x.selection);oe(e)}break}default:return}c(e)}function fe(e){switch(e.keyCode){case 16:{if(Z){ee=te=Z=false;oe(e)}break}case 18:{if(o===d){if(w<0)J=L;else if(w>0)M=D;if(K<0)R=U;else if(K>0)O=F;o=p;oe(e)}break}case 32:{if(o===h){if(e.altKey){if(w)J=L-W*w,M=D+W*w;if(K)R=U-X*K,O=F+X*K;o=d}else{if(w<0)J=L;else if(w>0)M=D;if(K<0)R=U;else if(K>0)O=F;o=p}se.attr("cursor",x[a]);oe(e)}break}default:return}c(e)}}function J(e){q(this,arguments).moved(e)}function L(e){q(this,arguments).ended(e)}function Q(){var e=this.__brush||{selection:null};e.extent=w(C.apply(this,arguments));e.dim=m;return e}O.extent=function(e){return arguments.length?(C=typeof e==="function"?e:a(w(e)),O):C};O.filter=function(e){return arguments.length?(I=typeof e==="function"?e:a(!!e),O):I};O.touchable=function(e){return arguments.length?(M=typeof e==="function"?e:a(!!e),O):M};O.handleSize=function(e){return arguments.length?(G=+e,O):G};O.keyModifiers=function(e){return arguments.length?(S=!!e,O):S};O.on=function(){var e=D.on.apply(D,arguments);return e===D?O:e};return O}export{I as a,C as b};
@@ -1 +1 @@
1
- import{_ as e}from"./tslib.es6-c3c2d88f.js";import{GroupSettingMethods as t}from"./groupsetting-b4416a96.js";import{o as r,s as i}from"./termsetting-33ea66f1.js";import{P as o}from"./app-b369b169.js";import"path";function s(i){return e(this,void 0,void 0,(function*(){n(i);return{getPillName(e){return r(i,e)},getPillStatus(){var e;if(((e=i.usecase)===null||e===void 0?void 0:e.target)=="regression"){return i.q.mode=="binary"?{text:"binary"}:{text:"categorical"}}return i.validateGroupsetting()},validateQ(e){var t;const r=e.term;const o=e.q;if(o.type=="values"){if(!r.values)i.error="no term.values defined";if(o.mode=="binary"){if(Object.keys(r.values).length!=2)i.error="term.values must have exactly two keys";if(e.sampleCounts){for(const t in r.values){if(!e.sampleCounts.find((e=>e.key===t)))i.error=`there are no samples for the required binary value=${t}`}}}}else if(o.type=="predefined-groupset"||o.type=="custom-groupset"){let i;if(o.type=="predefined-groupset"){if(!r.groupsetting)throw"no term.groupsetting";if(!((t=r.groupsetting.lst)===null||t===void 0?void 0:t.length))throw"term.groupsetting.lst is empty";i=r.groupsetting.lst[o.predefined_groupset_idx];if(!i)throw"no groupset entry for groupsetting.lst[predefined_groupset_idx]"}else{i=o.customset;if(!i)throw"invalid q.customset"}if(i.groups.some((e=>e.name===undefined)))throw"every group in groupset must have .name defined";if(o.mode=="binary"){if(i.groups.length!=2)throw"there must be exactly two groups";if(e.sampleCounts){for(const t of i.groups){if(!e.sampleCounts.find((e=>e.label===t.name)))throw`there are no samples for the required binary value=${t.name}`}}}}},showEditMenu(){return e(this,void 0,void 0,(function*(){yield new t(i).main()}))},postMain(){var t,r;return e(this,void 0,void 0,(function*(){const e=((r=(t=i.opts).getBodyParams)===null||r===void 0?void 0:r.call(t))||{};const o=yield i.vocabApi.getCategories(i.term,i.filter,e);i.category2samplecount=o.lst}))}}}))}function n(e){e.validateGroupsetting=function(){var t,r;if(e.q.type=="values")return{text:""};const i=e.q.name||e.q.reuseId;if(i)return{text:i};if(e.q.type=="predefined-groupset"){if(!Number.isInteger(e.q.predefined_groupset_idx))return{text:"q.predefined_groupset_idx is not an integer",bgcolor:"red"};if(!((r=(t=e.term.groupsetting)===null||t===void 0?void 0:t.lst)===null||r===void 0?void 0:r.length))return{text:"term.groupsetting is empty",bgcolor:"red"};const i=e.term.groupsetting.lst[e.q.predefined_groupset_idx];if(!i)return{text:"term.groupsetting.lst entry is missing",bgcolor:"red"};return{text:i.name}}if(e.q.type=="custom-groupset"){if(!e.q.customset)return{text:"q.customset is missing",bgcolor:"red"};const t=e.q.customset.groups.length;return{text:"Divided into "+t+" groups"}}return{text:"Unknown setting for groupsetting",bgcolor:"red"}}}function u(e,t,r=null){if(!Object.keys(e.q).includes("type"))e.q.type="values";if(!e.term.groupsetting)e.term.groupsetting={disabled:true};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(r){r.isAtomic=true;o(e.q,r)}i(e.q,e.term)}export{u as fillTW,s as getHandler,n as setCategoryMethods};
1
+ import{_ as e}from"./tslib.es6-c3c2d88f.js";import{GroupSettingMethods as t}from"./groupsetting-3fef59f9.js";import{o as r,s as i}from"./termsetting-ad8c4f3a.js";import{P as o}from"./app-2cd97738.js";import"path";function s(i){return e(this,void 0,void 0,(function*(){n(i);return{getPillName(e){return r(i,e)},getPillStatus(){var e;if(((e=i.usecase)===null||e===void 0?void 0:e.target)=="regression"){return i.q.mode=="binary"?{text:"binary"}:{text:"categorical"}}return i.validateGroupsetting()},validateQ(e){var t;const r=e.term;const o=e.q;if(o.type=="values"){if(!r.values)i.error="no term.values defined";if(o.mode=="binary"){if(Object.keys(r.values).length!=2)i.error="term.values must have exactly two keys";if(e.sampleCounts){for(const t in r.values){if(!e.sampleCounts.find((e=>e.key===t)))i.error=`there are no samples for the required binary value=${t}`}}}}else if(o.type=="predefined-groupset"||o.type=="custom-groupset"){let i;if(o.type=="predefined-groupset"){if(!r.groupsetting)throw"no term.groupsetting";if(!((t=r.groupsetting.lst)===null||t===void 0?void 0:t.length))throw"term.groupsetting.lst is empty";i=r.groupsetting.lst[o.predefined_groupset_idx];if(!i)throw"no groupset entry for groupsetting.lst[predefined_groupset_idx]"}else{i=o.customset;if(!i)throw"invalid q.customset"}if(i.groups.some((e=>e.name===undefined)))throw"every group in groupset must have .name defined";if(o.mode=="binary"){if(i.groups.length!=2)throw"there must be exactly two groups";if(e.sampleCounts){for(const t of i.groups){if(!e.sampleCounts.find((e=>e.label===t.name)))throw`there are no samples for the required binary value=${t.name}`}}}}},showEditMenu(){return e(this,void 0,void 0,(function*(){yield new t(i).main()}))},postMain(){var t,r;return e(this,void 0,void 0,(function*(){const e=((r=(t=i.opts).getBodyParams)===null||r===void 0?void 0:r.call(t))||{};const o=yield i.vocabApi.getCategories(i.term,i.filter,e);i.category2samplecount=o.lst}))}}}))}function n(e){e.validateGroupsetting=function(){var t,r;if(e.q.type=="values")return{text:""};const i=e.q.name||e.q.reuseId;if(i)return{text:i};if(e.q.type=="predefined-groupset"){if(!Number.isInteger(e.q.predefined_groupset_idx))return{text:"q.predefined_groupset_idx is not an integer",bgcolor:"red"};if(!((r=(t=e.term.groupsetting)===null||t===void 0?void 0:t.lst)===null||r===void 0?void 0:r.length))return{text:"term.groupsetting is empty",bgcolor:"red"};const i=e.term.groupsetting.lst[e.q.predefined_groupset_idx];if(!i)return{text:"term.groupsetting.lst entry is missing",bgcolor:"red"};return{text:i.name}}if(e.q.type=="custom-groupset"){if(!e.q.customset)return{text:"q.customset is missing",bgcolor:"red"};const t=e.q.customset.groups.length;return{text:"Divided into "+t+" groups"}}return{text:"Unknown setting for groupsetting",bgcolor:"red"}}}function u(e,t,r=null){if(!Object.keys(e.q).includes("type"))e.q.type="values";if(!e.term.groupsetting)e.term.groupsetting={disabled:true};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(r){r.isAtomic=true;o(e.q,r)}i(e.q,e.term)}export{u as fillTW,s as getHandler,n as setCategoryMethods};
@@ -1 +1 @@
1
- import{_ as e}from"./tslib.es6-c3c2d88f.js";import{o as t,s as r}from"./termsetting-33ea66f1.js";import{m as a}from"./radiobutton-09bff425.js";import{t as n,y as i,P as s}from"./app-b369b169.js";import"path";const o=[1,2,3,4,5];function l(e){return{getPillName(r){return t(e,r)},getPillStatus(){return d(e)},showEditMenu(t){if(e.q.mode=="discrete"){return p(e,t)}if(e.q.mode=="binary"||e.q.mode=="cuminc"||e.q.mode=="cox"){return u(e,t)}console.error("invalid q.mode:",e.q.mode);throw"invalid q.mode"}}}function d(e){var t,r,a,i;const s=((t=e.q)===null||t===void 0?void 0:t.name)||((r=e.q)===null||r===void 0?void 0:r.reuseId);if(s)return{text:s};if(e.q.mode=="discrete"){if((a=e.q.breaks)===null||a===void 0?void 0:a.length){return{text:e.q.breaks.length+1+" groups"}}else{if(e.q.bar_by_grade){if(e.q.value_by_max_grade)return{text:"Max. Grade"};if(e.q.value_by_most_recent)return{text:"Most Recent Grade"};if(e.q.value_by_computable_grade)return{text:"Any Grade"};return{text:"Error: unknown grade setting",bgcolor:"red"}}if(e.q.bar_by_children)return{text:"Sub-condition"}}}if(e.q.mode=="binary"){return{text:((i=e.usecase)===null||i===void 0?void 0:i.target)=="regression"?e.data.q.groups.find((t=>t.name!=e.data.refGrp)).name:"binary"}}if(e.q.mode=="cuminc"||e.q.mode=="cox"){if(!e.q.breaks||e.q.breaks.length==0)n("Missing q.breaks");return{text:`Grades ${e.q.breaks[0]}-5`}}return{}}function p(t,r){var a;return e(this,void 0,void 0,(function*(){const e=r.append("div").style("margin","10px 0px 10px 5px").style("border-left","solid 1px #ededed");e.append("div").style("display","inline-block").style("margin","0px 0px 5px 5px").style("color","rgb(136, 136, 136)").text("Grade type:");const s=e.append("select").style("display","inline").style("margin","0px 10px").on("change",(()=>{const e=s.property("selectedIndex");t.q.bar_by_grade=e!=3;t.q.bar_by_children=e==3;t.q.value_by_max_grade=e==0;t.q.value_by_most_recent=e==1;t.q.value_by_computable_grade=e==2||e==3;t.dom.tip.hide();t.runCallback()}));s.append("option").text("Max grade per patient");s.append("option").text("Most recent grade per patient");s.append("option").text("Any grade per patient");if(t.term.subconditions){s.append("option").text("Sub-conditions")}s.property("selectedIndex",t.q.bar_by_children?3:t.q.value_by_computable_grade?2:t.q.value_by_most_recent?1:0);if(t.q.bar_by_children){return}const o=r.append("div").style("margin","20px 0px 10px 5px").style("border-left","solid 1px #ededed");o.append("div").text("Divide grades into groups (optional):").style("margin","0px 0px 10px 5px").style("color","rgb(136, 136, 136)");const l=o.append("div").style("display","flex").style("align-items","start").style("margin-left","10px").style("width","100%");const d=l.append("div").style("margin-right","20px");const p=l.append("div").style("display","grid").style("grid-template-columns","auto auto").style("column-gap","20px").style("align-items","center").style("margin-right","5px");d.append("div").style("margin-bottom","5px").style("color","rgb(136, 136, 136)").text("Cutoff grades");const u=d.append("textarea").style("width","100px").style("height","70px").on("keyup",m);d.append("div").style("font-size",".6em").style("margin-left","1px").style("color","#858585").html("Enter numeric values </br>seperated by ENTER");if((a=t.q.breaks)===null||a===void 0?void 0:a.length){u.property("value",t.q.breaks.join("\n"))}m();function m(){p.selectAll("*").remove();const e=b();if(!e.length){delete t.q.breaks;delete t.q.groups;return}if(!t.term.values)n(`Missing term values`);const r=Object.keys(t.term.values).filter((e=>{var r;return!((r=t.term.values)===null||r===void 0?void 0:r[e].uncomputable)})).map(Number).sort(((e,t)=>e-t));const a=c(r,e);p.append("div").style("margin-bottom","3px").style("color","rgb(136, 136, 136)").text("Range");p.append("div").style("margin-bottom","3px").style("color","rgb(136, 136, 136)").text("Label");for(const[e,t]of a.entries()){p.append("div").text(t.name.replace(/Grades* /,""));p.append("div").append("input").attr("type","text").property("value",t.name).style("margin","2px 0px").on("change",(function(){a[e].name=this.value}))}t.q.breaks=e;t.q.groups=a}function b(){const e=u.property("value").trim();if(!e)return[];const t=[...new Set(e.split("\n"))];const a=[];for(const e of t){const t=Number(e);if(!Number.isInteger(t)){i(r,"cutoff grade must be an integer value");return[]}if(t<1||t>5){i(r,`cutoff grade must be within grades 1-5`);return[]}a.push(t)}if(!a.length)return[];return a.sort(((e,t)=>e-t))}r.append("button").text("Apply").style("margin","10px").on("click",(e=>{e.target.disabled=true;e.target.innerHTML="Loading...";t.runCallback()}))}))}function u(e,t){var r;const i=t.append("div").style("margin","10px").style("display","grid").style("grid-template-columns","auto auto").style("gap","20px");i.append("div").text("Grade cutoff").style("opacity",.4);const s=i.append("div");const l=s.append("select").on("change",u);for(const t of o){l.append("option").text((r=e.term.values)===null||r===void 0?void 0:r[t].label)}l.property("selectedIndex",e.q.breaks[0]-1);i.append("div").text(e.q.mode=="binary"?"Group 1":"Censored").style("opacity",.4);const d=i.append("div").style("opacity",.4);i.append("div").text(e.q.mode=="binary"?"Group 2":"Event").style("opacity",.4);const p=i.append("div").style("opacity",.4);u();function u(){var t,r;const a=l.property("selectedIndex")+1;d.selectAll("*").remove();p.selectAll("*").remove();const n=Object.keys(e.term.values).map(Number).sort(((e,t)=>e-t));for(const i of n){if(i<a){d.append("div").text((t=e.term.values)===null||t===void 0?void 0:t[i].label)}else{p.append("div").text((r=e.term.values)===null||r===void 0?void 0:r[i].label)}}}const m=e.vocabApi.termdbConfig.timeUnit;let b;if(e.q.mode=="cox"){b=e.q.timeScale;i.append("div").text("Time axis").style("opacity",.4);const t=[{label:m.charAt(0).toUpperCase()+m.slice(1),value:"time"},{label:"Age",value:"age"}];if(e.q.timeScale=="age"){t[1].checked=true}else{t[0].checked=true}a({holder:i.append("div"),options:t,styles:{margin:""},callback:e=>b=e})}t.append("button").text("Apply").style("margin","10px").on("click",(t=>{if(!e.q.breaks||e.q.breaks.length==0)n("Missing q.breaks");const r=l.property("selectedIndex")+1;e.q.breaks[0]=r;if(e.q.mode=="binary"){const t=Object.keys(e.term.values).map(Number).sort(((e,t)=>e-t));e.q.groups=c(t,e.q.breaks);e.refGrp=e.q.groups[0].name}if(e.q.mode=="cox")e.q.timeScale=b;t.target.disabled=true;t.target.innerHTML="Loading...";e.runCallback()}))}function c(e,t){e.sort(((e,t)=>e-t));const r=[];let a={values:[]};let n;for(const i of e){if(t.includes(i)){n=i;const e=Math.max(...a.values);if(!r.length){if(a.values.length==1){if(a.values[0]!==0)throw"unexpected group value";a.name="Grade 0"}else{if(a.values.length==2&&a.values.includes(-1)&&a.values.includes(0)){a.name="Not tested/Grade 0"}else{a.name=a.values.includes(-1)?`Not tested/Grade 0 - Grade ${e}`:`Grades 0-${e}`}}}else{a.name=a.values.length==1?`Grade ${a.values[0]}`:`${a.name}-${e}`}r.push(a);a={name:`Grade ${n}`,values:[i]}}else{a.values.push(i)}}a.name=`Grades ${n}-5`;r.push(a);return r}function m(e,t,a){var n,i;r(e.q,e.term);if(a){s(e.q,a)}if(!Object.keys(e.q).includes("mode"))e.q.mode="discrete";if(e.q.value_by_max_grade||e.q.value_by_most_recent||e.q.value_by_computable_grade);else{e.q.value_by_max_grade=true}if(e.q.bar_by_grade||e.q.bar_by_children);else{e.q.bar_by_grade=true}if(e.q.mode=="binary"||e.q.mode=="cox"||e.q.mode=="cuminc"){const t=e.q.mode=="binary"?1:3;if(!((n=e.q.breaks)===null||n===void 0?void 0:n.length))e.q.breaks=[t];if(e.q.breaks.length!=1||![1,2,3,4,5].includes(e.q.breaks[0]))throw"invalid tw.q.breaks"}if((i=e.q.breaks)===null||i===void 0?void 0:i.length){if(!e.term.values)throw"missing term.values";if(e.q.mode=="discrete"||e.q.mode=="binary"){const t=Object.keys(e.term.values).filter((t=>{var r;return e.q.mode=="discrete"?!((r=e.term.values)===null||r===void 0?void 0:r[t].uncomputable):t})).map(Number).sort(((e,t)=>e-t));e.q.groups=c(t,e.q.breaks)}}if(e.q.mode=="cox"){if(!e.q.timeScale)e.q.timeScale="time";if(!["age","time"].includes(e.q.timeScale))throw"invalid q.timeScale"}}export{m as fillTW,l as getHandler};
1
+ import{_ as e}from"./tslib.es6-c3c2d88f.js";import{o as t,s as r}from"./termsetting-ad8c4f3a.js";import{m as a}from"./radiobutton-09bff425.js";import{t as n,y as i,P as s}from"./app-2cd97738.js";import"path";const o=[1,2,3,4,5];function l(e){return{getPillName(r){return t(e,r)},getPillStatus(){return d(e)},showEditMenu(t){if(e.q.mode=="discrete"){return p(e,t)}if(e.q.mode=="binary"||e.q.mode=="cuminc"||e.q.mode=="cox"){return u(e,t)}console.error("invalid q.mode:",e.q.mode);throw"invalid q.mode"}}}function d(e){var t,r,a,i;const s=((t=e.q)===null||t===void 0?void 0:t.name)||((r=e.q)===null||r===void 0?void 0:r.reuseId);if(s)return{text:s};if(e.q.mode=="discrete"){if((a=e.q.breaks)===null||a===void 0?void 0:a.length){return{text:e.q.breaks.length+1+" groups"}}else{if(e.q.bar_by_grade){if(e.q.value_by_max_grade)return{text:"Max. Grade"};if(e.q.value_by_most_recent)return{text:"Most Recent Grade"};if(e.q.value_by_computable_grade)return{text:"Any Grade"};return{text:"Error: unknown grade setting",bgcolor:"red"}}if(e.q.bar_by_children)return{text:"Sub-condition"}}}if(e.q.mode=="binary"){return{text:((i=e.usecase)===null||i===void 0?void 0:i.target)=="regression"?e.data.q.groups.find((t=>t.name!=e.data.refGrp)).name:"binary"}}if(e.q.mode=="cuminc"||e.q.mode=="cox"){if(!e.q.breaks||e.q.breaks.length==0)n("Missing q.breaks");return{text:`Grades ${e.q.breaks[0]}-5`}}return{}}function p(t,r){var a;return e(this,void 0,void 0,(function*(){const e=r.append("div").style("margin","10px 0px 10px 5px").style("border-left","solid 1px #ededed");e.append("div").style("display","inline-block").style("margin","0px 0px 5px 5px").style("color","rgb(136, 136, 136)").text("Grade type:");const s=e.append("select").style("display","inline").style("margin","0px 10px").on("change",(()=>{const e=s.property("selectedIndex");t.q.bar_by_grade=e!=3;t.q.bar_by_children=e==3;t.q.value_by_max_grade=e==0;t.q.value_by_most_recent=e==1;t.q.value_by_computable_grade=e==2||e==3;t.dom.tip.hide();t.runCallback()}));s.append("option").text("Max grade per patient");s.append("option").text("Most recent grade per patient");s.append("option").text("Any grade per patient");if(t.term.subconditions){s.append("option").text("Sub-conditions")}s.property("selectedIndex",t.q.bar_by_children?3:t.q.value_by_computable_grade?2:t.q.value_by_most_recent?1:0);if(t.q.bar_by_children){return}const o=r.append("div").style("margin","20px 0px 10px 5px").style("border-left","solid 1px #ededed");o.append("div").text("Divide grades into groups (optional):").style("margin","0px 0px 10px 5px").style("color","rgb(136, 136, 136)");const l=o.append("div").style("display","flex").style("align-items","start").style("margin-left","10px").style("width","100%");const d=l.append("div").style("margin-right","20px");const p=l.append("div").style("display","grid").style("grid-template-columns","auto auto").style("column-gap","20px").style("align-items","center").style("margin-right","5px");d.append("div").style("margin-bottom","5px").style("color","rgb(136, 136, 136)").text("Cutoff grades");const u=d.append("textarea").style("width","100px").style("height","70px").on("keyup",m);d.append("div").style("font-size",".6em").style("margin-left","1px").style("color","#858585").html("Enter numeric values </br>seperated by ENTER");if((a=t.q.breaks)===null||a===void 0?void 0:a.length){u.property("value",t.q.breaks.join("\n"))}m();function m(){p.selectAll("*").remove();const e=b();if(!e.length){delete t.q.breaks;delete t.q.groups;return}if(!t.term.values)n(`Missing term values`);const r=Object.keys(t.term.values).filter((e=>{var r;return!((r=t.term.values)===null||r===void 0?void 0:r[e].uncomputable)})).map(Number).sort(((e,t)=>e-t));const a=c(r,e);p.append("div").style("margin-bottom","3px").style("color","rgb(136, 136, 136)").text("Range");p.append("div").style("margin-bottom","3px").style("color","rgb(136, 136, 136)").text("Label");for(const[e,t]of a.entries()){p.append("div").text(t.name.replace(/Grades* /,""));p.append("div").append("input").attr("type","text").property("value",t.name).style("margin","2px 0px").on("change",(function(){a[e].name=this.value}))}t.q.breaks=e;t.q.groups=a}function b(){const e=u.property("value").trim();if(!e)return[];const t=[...new Set(e.split("\n"))];const a=[];for(const e of t){const t=Number(e);if(!Number.isInteger(t)){i(r,"cutoff grade must be an integer value");return[]}if(t<1||t>5){i(r,`cutoff grade must be within grades 1-5`);return[]}a.push(t)}if(!a.length)return[];return a.sort(((e,t)=>e-t))}r.append("button").text("Apply").style("margin","10px").on("click",(e=>{e.target.disabled=true;e.target.innerHTML="Loading...";t.runCallback()}))}))}function u(e,t){var r;const i=t.append("div").style("margin","10px").style("display","grid").style("grid-template-columns","auto auto").style("gap","20px");i.append("div").text("Grade cutoff").style("opacity",.4);const s=i.append("div");const l=s.append("select").on("change",u);for(const t of o){l.append("option").text((r=e.term.values)===null||r===void 0?void 0:r[t].label)}l.property("selectedIndex",e.q.breaks[0]-1);i.append("div").text(e.q.mode=="binary"?"Group 1":"Censored").style("opacity",.4);const d=i.append("div").style("opacity",.4);i.append("div").text(e.q.mode=="binary"?"Group 2":"Event").style("opacity",.4);const p=i.append("div").style("opacity",.4);u();function u(){var t,r;const a=l.property("selectedIndex")+1;d.selectAll("*").remove();p.selectAll("*").remove();const n=Object.keys(e.term.values).map(Number).sort(((e,t)=>e-t));for(const i of n){if(i<a){d.append("div").text((t=e.term.values)===null||t===void 0?void 0:t[i].label)}else{p.append("div").text((r=e.term.values)===null||r===void 0?void 0:r[i].label)}}}const m=e.vocabApi.termdbConfig.timeUnit;let b;if(e.q.mode=="cox"){b=e.q.timeScale;i.append("div").text("Time axis").style("opacity",.4);const t=[{label:m.charAt(0).toUpperCase()+m.slice(1),value:"time"},{label:"Age",value:"age"}];if(e.q.timeScale=="age"){t[1].checked=true}else{t[0].checked=true}a({holder:i.append("div"),options:t,styles:{margin:""},callback:e=>b=e})}t.append("button").text("Apply").style("margin","10px").on("click",(t=>{if(!e.q.breaks||e.q.breaks.length==0)n("Missing q.breaks");const r=l.property("selectedIndex")+1;e.q.breaks[0]=r;if(e.q.mode=="binary"){const t=Object.keys(e.term.values).map(Number).sort(((e,t)=>e-t));e.q.groups=c(t,e.q.breaks);e.refGrp=e.q.groups[0].name}if(e.q.mode=="cox")e.q.timeScale=b;t.target.disabled=true;t.target.innerHTML="Loading...";e.runCallback()}))}function c(e,t){e.sort(((e,t)=>e-t));const r=[];let a={values:[]};let n;for(const i of e){if(t.includes(i)){n=i;const e=Math.max(...a.values);if(!r.length){if(a.values.length==1){if(a.values[0]!==0)throw"unexpected group value";a.name="Grade 0"}else{if(a.values.length==2&&a.values.includes(-1)&&a.values.includes(0)){a.name="Not tested/Grade 0"}else{a.name=a.values.includes(-1)?`Not tested/Grade 0 - Grade ${e}`:`Grades 0-${e}`}}}else{a.name=a.values.length==1?`Grade ${a.values[0]}`:`${a.name}-${e}`}r.push(a);a={name:`Grade ${n}`,values:[i]}}else{a.values.push(i)}}a.name=`Grades ${n}-5`;r.push(a);return r}function m(e,t,a){var n,i;r(e.q,e.term);if(a){s(e.q,a)}if(!Object.keys(e.q).includes("mode"))e.q.mode="discrete";if(e.q.value_by_max_grade||e.q.value_by_most_recent||e.q.value_by_computable_grade);else{e.q.value_by_max_grade=true}if(e.q.bar_by_grade||e.q.bar_by_children);else{e.q.bar_by_grade=true}if(e.q.mode=="binary"||e.q.mode=="cox"||e.q.mode=="cuminc"){const t=e.q.mode=="binary"?1:3;if(!((n=e.q.breaks)===null||n===void 0?void 0:n.length))e.q.breaks=[t];if(e.q.breaks.length!=1||![1,2,3,4,5].includes(e.q.breaks[0]))throw"invalid tw.q.breaks"}if((i=e.q.breaks)===null||i===void 0?void 0:i.length){if(!e.term.values)throw"missing term.values";if(e.q.mode=="discrete"||e.q.mode=="binary"){const t=Object.keys(e.term.values).filter((t=>{var r;return e.q.mode=="discrete"?!((r=e.term.values)===null||r===void 0?void 0:r[t].uncomputable):t})).map(Number).sort(((e,t)=>e-t));e.q.groups=c(t,e.q.breaks)}}if(e.q.mode=="cox"){if(!e.q.timeScale)e.q.timeScale="time";if(!["age","time"].includes(e.q.timeScale))throw"invalid q.timeScale"}}export{m as fillTW,l as getHandler};
@@ -1 +1 @@
1
- import{h as t,K as i}from"./app-b369b169.js";import{topBarInit as s}from"./controls.btns-79b805dd.js";import{configUiInit as e}from"./controls.config-28d6d6a8.js";import{T as o}from"./termsetting-33ea66f1.js";import"./tslib.es6-c3c2d88f.js";import"path";const n="#fdfaf4";const p={[o.GENE_VARIANT]:{type:"predefined-groupset"},[o.GENE_EXPRESSION]:{mode:"discrete"},[o.METABOLITE_INTENSITY]:{mode:"discrete"}};class d{constructor(t){this.opts=t;this.type="plotControls";this.customEvents=["downloadClick","infoClick","helpClick"];this.isOpen=false;h(this);a(this)}async init(){try{this.setDom();this.features=await i({topbar:s({app:this.app,id:this.id,holder:this.dom.topbar,callback:this.toggleVisibility,isOpen:()=>this.isOpen,downloadHandler:()=>this.bus.emit("downloadClick"),infoHandler:t=>this.app.dispatch({type:"plot_edit",id:this.opts.id,config:{settings:{termInfo:{isVisible:t}}}}),helpHandler:()=>this.bus.emit("helpClick")}),config:e({app:this.app,id:this.id,holder:this.dom.config_div,isOpen:()=>this.isOpen,tip:this.app.tip,inputs:this.opts.inputs})})}catch(t){throw t}}setDom(){const t=this.opts.holder.append("div");const i=this.opts.holder.append("div");this.dom={holder:this.opts.holder.style("vertical-align","top").style("transition","0.5s"),topbar:t,config_div:i}}getState(t){const i=t.plots.find((t=>t.id===this.id));if(!i){throw`No plot with id='${this.id}' found.`}return{genome:t.genome,dslabel:t.dslabel,activeCohort:t.activeCohort,termfilter:t.termfilter,config:i}}main(t=undefined){if(!this.state)return;if(typeof t=="boolean")this.isOpen=t;else{const t=this.state.config.settings.controls;if(t&&"isOpen"in t)this.isOpen=t.isOpen}this.render();const i=this.app.getState();for(const t in this.features){this.features[t].update({state:this.state,appState:i})}}}const r=t(d);function a(t){t.render=function(){t.dom.holder.style("background",t.isOpen?n:"")}}function h(t){t.toggleVisibility=()=>{const i=t.state.config.settings.controls;if(i&&"isOpen"in i){t.app.dispatch({type:"plot_edit",id:t.id,config:{settings:{controls:{isOpen:!i.isOpen}}},_scope_:"none"})}else{t.main(!t.isOpen)}}}export{r as controlsInit,p as term0_term2_defaultQ};
1
+ import{h as t,K as i}from"./app-2cd97738.js";import{topBarInit as s}from"./controls.btns-5b1240c8.js";import{configUiInit as e}from"./controls.config-81cd5749.js";import{T as o}from"./termsetting-ad8c4f3a.js";import"./tslib.es6-c3c2d88f.js";import"path";const n="#fdfaf4";const p={[o.GENE_VARIANT]:{type:"predefined-groupset"},[o.GENE_EXPRESSION]:{mode:"discrete"},[o.METABOLITE_INTENSITY]:{mode:"discrete"}};class r{constructor(t){this.opts=t;this.type="plotControls";this.customEvents=["downloadClick","infoClick","helpClick"];this.isOpen=false;d(this);c(this)}async init(){try{this.setDom();this.features=await i({topbar:s({app:this.app,id:this.id,holder:this.dom.topbar,callback:this.toggleVisibility,isOpen:()=>this.isOpen,downloadHandler:()=>this.bus.emit("downloadClick"),infoHandler:t=>this.app.dispatch({type:"plot_edit",id:this.opts.id,config:{settings:{termInfo:{isVisible:t}}}}),helpHandler:()=>this.bus.emit("helpClick")}),config:e({app:this.app,id:this.id,holder:this.dom.config_div,isOpen:()=>this.isOpen,tip:this.app.tip,inputs:this.opts.inputs})})}catch(t){throw t}}setDom(){const t=this.opts.holder.append("div");const i=this.opts.holder.append("div");this.dom={holder:this.opts.holder.style("vertical-align","top").style("transition","0.5s"),topbar:t,config_div:i}}getState(t){const i=t.plots.find((t=>t.id===this.id));if(!i){throw`No plot with id='${this.id}' found.`}return{genome:t.genome,dslabel:t.dslabel,activeCohort:t.activeCohort,termfilter:t.termfilter,config:i}}main(t=undefined){if(!this.state)return;if(typeof t=="boolean")this.isOpen=t;else{const t=this.state.config.settings.controls;if(t&&"isOpen"in t)this.isOpen=t.isOpen}this.render();const i=this.app.getState();for(const t in this.features){this.features[t].update({state:this.state,appState:i})}}}const a=t(r);function c(t){t.render=function(){t.dom.holder.style("background",t.isOpen?n:"")}}function d(t){t.toggleVisibility=()=>{const i=t.state.config.settings.controls;if(i&&"isOpen"in i){t.app.dispatch({type:"plot_edit",id:t.id,config:{settings:{controls:{isOpen:!i.isOpen}}},_scope_:"none"})}else{t.main(!t.isOpen)}}}function h(t){if(!t||!Object.keys(t).length)return"";switch(t.term.type){case o.CATEGORICAL:return"Group categories";case o.INTEGER:case o.FLOAT:return t.q.mode=="discrete"?"Customize bins":"Customize";case o.GENE_VARIANT:return"Group variants";case o.SNP:return"Group genotypes";default:return"Customize"}}export{a as controlsInit,h as renderTerm1Label,p as term0_term2_defaultQ};
@@ -1 +1 @@
1
- import{h as t,K as e,L as n}from"./app-b369b169.js";class o{constructor(t){this.type="controlsTopBar"}async init(){const t=this.opts;this.dom={holder:t.holder,burger_div:t.holder.append("div"),button_bar:t.holder.append("div")};const n=this.opts.debug;this.features=await e({burgerbtn:i({holder:this.dom.burger_div,callback:t.callback,debug:n}),downloadbtn:a({id:t.id,holder:this.dom.holder.insert("div"),callback:t.downloadHandler,debug:n}),helpbtn:s({id:t.id,holder:this.dom.holder.insert("div"),callback:t.helpHandler,debug:n})})}getState(t){return{config:t.plots.find((t=>t.id===this.id)),isOpen:this.opts.isOpen()}}main(){const t=this.state.config;const e=this.opts.isOpen();this.dom.button_bar.style("display",e?"inline-block":"block").style("float",e?"right":"none");for(const n in this.features){this.features[n].main(e,t)}}}const l=t(o);function i(t){const e={dom:{btn:t.holder.style("margin","10px").style("margin-left","20px").style("font-family","verdana").style("font-size","28px").style("cursor","pointer").style("transition","0.5s").html("&#8801;").on("click",t.callback).attr("aria-label","Settings")}};const n={main(t){e.dom.btn.style("display",t?"inline-block":"block")}};if(t.debug)n.Inner=e;return Object.freeze(n)}function s(t){const e=t.holder.style("margin","20px");n["help"](e,{handler:t.callback,title:"Documentation"});const o={plotTypes:["profilePolar","profileBarchart","profileRadar","profileRadarFacility"],dom:{btn:e}};const l={main(t,e){if(o.plotTypes.includes(e.chartType))o.dom.btn.style("display",t?"inline-block":"block");else o.dom.btn.style("display","none")}};if(t.debug)l.Inner=o;return Object.freeze(l)}function a(t){const e=t.holder.style("margin-left","20px").attr("aria-label","Download plot image");n["download"](e,{handler:t.callback});const o={plotTypes:["summary","boxplot","scatter"],dom:{btn:e}};const l={main(t,e){o.dom.btn.style("display",t?"inline-block":"block")}};if(t.debug)l.Inner=o;return Object.freeze(l)}export{l as topBarInit};
1
+ import{h as t,K as e,L as n}from"./app-2cd97738.js";class o{constructor(t){this.type="controlsTopBar"}async init(){const t=this.opts;this.dom={holder:t.holder,burger_div:t.holder.append("div"),button_bar:t.holder.append("div")};const n=this.opts.debug;this.features=await e({burgerbtn:i({holder:this.dom.burger_div,callback:t.callback,debug:n}),downloadbtn:a({id:t.id,holder:this.dom.holder.insert("div"),callback:t.downloadHandler,debug:n}),helpbtn:s({id:t.id,holder:this.dom.holder.insert("div"),callback:t.helpHandler,debug:n})})}getState(t){return{config:t.plots.find((t=>t.id===this.id)),isOpen:this.opts.isOpen()}}main(){const t=this.state.config;const e=this.opts.isOpen();this.dom.button_bar.style("display",e?"inline-block":"block").style("float",e?"right":"none");for(const n in this.features){this.features[n].main(e,t)}}}const l=t(o);function i(t){const e={dom:{btn:t.holder.style("margin","10px").style("margin-left","20px").style("font-family","verdana").style("font-size","28px").style("cursor","pointer").style("transition","0.5s").html("&#8801;").on("click",t.callback).attr("aria-label","Settings")}};const n={main(t){e.dom.btn.style("display",t?"inline-block":"block")}};if(t.debug)n.Inner=e;return Object.freeze(n)}function s(t){const e=t.holder.style("margin","20px");n["help"](e,{handler:t.callback,title:"Documentation"});const o={plotTypes:["profilePolar","profileBarchart","profileRadar","profileRadarFacility"],dom:{btn:e}};const l={main(t,e){if(o.plotTypes.includes(e.chartType))o.dom.btn.style("display",t?"inline-block":"block");else o.dom.btn.style("display","none")}};if(t.debug)l.Inner=o;return Object.freeze(l)}function a(t){const e=t.holder.style("margin-left","20px").attr("aria-label","Download plot image");n["download"](e,{handler:t.callback});const o={plotTypes:["summary","boxplot","scatter"],dom:{btn:e}};const l={main(t,e){o.dom.btn.style("display",t?"inline-block":"block")}};if(t.debug)l.Inner=o;return Object.freeze(l)}export{l as topBarInit};
@@ -0,0 +1 @@
1
+ import{d as t,h as e,K as s,r as n}from"./app-2cd97738.js";import{h as i}from"./termsetting-ad8c4f3a.js";import"./tslib.es6-c3c2d88f.js";import"path";function l(e){const s=e.holder.selectAll("div").data(e.options,(t=>t.value)).style("display","block");s.exit().each((function(e){t(this).on("input",null).on("click",null).remove()}));const n=s.enter().append("div").attr("aria-label",(t=>t.title)).style("display","block").style("padding",e.styles&&"padding"in e.styles?e.styles.padding:"5px").append("label");if(e.styles){for(const t in e.styles){n.style(t,e.styles[t])}}const i=n.append("input").attr("type","radio").attr("name",e.name).attr("value",(t=>t.value)).style("vertical-align","top").style("margin-top","2px").style("margin-right",0).property("checked",e.isCheckedFxn).on("mouseup",e.listeners.input).on("keyup",e.listeners.input);n.append("span").style("vertical-align","top").html((t=>"&nbsp;"+t.label)).on("mouseup",e.listeners.input).on("keyup",e.listeners.input);function l(t){return t.value==a.currValue}const a={main(t){a.currValue=t;i.property("checked",l)},dom:{divs:e.holder.selectAll("div"),labels:e.holder.selectAll("label").select("span"),inputs:n.selectAll("input")}};return a}let a=0;class o{constructor(t){this.type="controlsConfig";this.app=t.app;this.id=t.id;this.instanceNum=a++;r(this)}async init(){try{const t=this.app.dispatch;const e=this.setDom();const n=this.opts.debug;this.inputs={};const i={};for(const e of this.opts.inputs){if(typeof e=="object"){const s=e;if(s.type in w){this.inputs[s.settingsKey||s.configKey]=await w[s.type](Object.assign({},s,{holder:this.dom.table.append("tr"),dispatch:t,id:this.id,instanceNum:this.instanceNum,debug:this.opts.debug,parent:this}))}}else if(e in w){this.inputs[e]=await w[e]({holder:this.dom.table.append("tr"),dispatch:t,id:this.id,instanceNum:this.instanceNum,debug:this.opts.debug,parent:this})}else{throw`unsupported opts.inputs[] entry of '${e}' for controlsInit()`}}this.components=await s(i)}catch(t){throw t}}setDom(){this.dom={holder:this.opts.holder.style("max-width","50px").style("height",0).style("vertical-align","top").style("transition","0.2s ease-in-out").style("visibility","hidden").style("transition","0.2s")};this.dom.table=this.dom.holder.append("table").attr("cellpadding",0).attr("cellspacing",0);return this.dom.table}getState(t){const e=t.plots.find((t=>t.id===this.id));return{genome:t.genome,dslabel:t.dslabel,activeCohort:t.activeCohort,termfilter:t.termfilter,config:e,isOpen:this.opts.isOpen()}}main(){const t=this.state.config;const e=this.opts.isOpen();this.render(e);for(const e in this.inputs){const s=this.inputs[e];s.main(s.usestate?this.state:t)}}render(t){this.dom.holder.style("visibility",t?"visible":"hidden").style("max-width",t?"700px":"50px").style("height",t?"":0).style("resize",t?"both":"none");this.dom.table.selectAll("tr").filter(this.rowIsVisible).selectAll("td").style("border-top","2px solid #FFECDD").style("padding","5px 10px")}}const p=e(o);function r(t){t.rowIsVisible=function(){return this.style.display!="none"}}function d(t){const e={dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").html(t.label).attr("class","sja-termdb-config-row-label").attr("aria-label",t.title),inputs:{}},values:{}};if(!t.inputs)t.inputs=[{min:t.min,max:t.max,step:t.step,width:t.width,settingsKey:t.settingsKey}];const s=t.debounceInterval||("debounceInterval"in t.parent?.app.opts?t.parent?.app.opts.debounceInterval:100);for(const i of t.inputs){let l;function a(t=false){if(l)clearTimeout(l);if(!t)l=setTimeout(o,s)}function o(){let s=Number(e.dom.inputs[i.settingsKey].property("value"));if(i.max&&i.max<s)s=i.max;if(i.min&&i.min>s)s=i.min;if(t.callback)t.callback(s);else{t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[i.settingsKey]:t.processInput?t.processInput(s):s}}}})}}const p=t.holder.append("td").style("text-align",t.align||"").attr("colspan",t.colspan||"");if(!i.settingsKey){p.style("color","#999").style("cursor","default").html(i.label)}else{e.dom.inputs[i.settingsKey]=p.append("input").attr("type","number").attr("min","min"in i?i.min:null).attr("max","max"in i?i.max:null).attr("step",i.step||t.step||null).style("width",(i.width||t.width||100)+"px").on("keyup",(s=>{const n=e.values[t.settingsKey]!==Number(e.dom.inputs[i.settingsKey].property("value"));a(s.key!=="Enter"&&n)})).on("change",(t=>{a(false)}))}}const n={main(s){const n=t.getDisplayStyle?.(s)||"table-row";t.holder.style("display",n);for(const n in e.dom.inputs){const i=s.settings[t.chartType][n];e.dom.inputs[n].property("value",i);e.values[n]=i}}};if(t.debug)n.Inner=e;return Object.freeze(n)}function c(t){const e={dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").html(t.label).attr("class","sja-termdb-config-row-label").attr("aria-label",t.title).attr("overflow","visible"),inputTd:t.holder.append("td")}};const s={};e.dom.input=e.dom.inputTd.append("input").attr("type","text").style("width",(t.width||100)+"px").on("change",(()=>{const n=e.dom.input.property("value");const i=Number(n);if(isNaN(i))throw`non-numeric value for ${t.settingsKey}='${n}'`;s[i]=n;t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[t.settingsKey]:i}}}})}));const n={main(n){const i=n.settings[t.chartType][t.settingsKey];const l=typeof i=="number"?i:Number(i);if(typeof i!="number")s[l]=i;e.dom.input.property("value",i in s?s[l]:i)}};if(t.debug)n.Inner=e;return Object.freeze(n)}function u(t){const e={dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").html(t.label).attr("class","sja-termdb-config-row-label").attr("aria-label",t.title),inputTd:t.holder.append("td")}};e.dom.input=e.dom.inputTd.append("input").attr("type","text").attr("placeholder",t.placeholder).style("width",(t.width||100)+"px").on("change",(()=>{const s=e.dom.input.property("value");t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[t.settingsKey]:t.processInput?t.processInput(s):s}}}})}));const s={main(s){e.dom.input.property("value",s.settings[t.chartType][t.settingsKey])}};if(t.debug)s.Inner=e;return Object.freeze(s)}function y(t){const e={dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").attr("aria-label",t.title).html(t.label).attr("class","sja-termdb-config-row-label"),inputTd:t.holder.append("td").attr("colspan",t.colspan||"").style("text-align",t.align||"")}};e.dom.input=e.dom.inputTd.append("input").attr("type","color").on("change",(()=>{const s=e.dom.input.property("value");t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[t.settingsKey]:t.processInput?t.processInput(s):s}}}})}));const s={main(s){const i=s.settings[t.chartType][t.settingsKey];e.dom.input.property("value",n(i).formatHex());t.holder.style("display",t.getDisplayStyle?.(s)||"table-row")}};if(t.debug)s.Inner=e;return Object.freeze(s)}function h(t){const e={dom:{row:t.holder,labelTdb:t.holder.append("td").html(t.label).attr("aria-label",t.title).attr("class","sja-termdb-config-row-label")},inputs:{}};const s=t.inputs?t.inputs:[{settingsKey:t.settingsKey,options:t.options}];if(!("instanceNum"in t))t.instanceNum=`sjpp-${Math.random().toString().slice(-7)}-${Date.now()}`;const n=t.styles||{};for(const i of s){e.inputs[i.settingsKey]=l({name:`pp-control-${i.settingsKey}-${t.instanceNum}`,holder:t.holder.append("td").attr("colspan",t.colspan||"").style("text-align",t.align||""),options:i.options,getDisplayStyle:()=>"block",styles:n,listeners:{input(e,s){if(e.key&&e.key!=="Enter")return;if(t.callback){t.callback(s.value)}else{t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[i.settingsKey]:s.value}}}})}}}})}const i={main(s){const n=t.getDisplayStyle?.(s)||"table-row";e.dom.row.style("display",n);if(n=="none")return;for(const n in e.inputs){const i=e.inputs[n];i.main(s.settings[t.chartType][n]);i.dom.divs.style("display",(e=>e.getDisplayStyle?e.getDisplayStyle(s):t.labelDisplay||"inline-block"));if(t.setRadioLabel)i.dom.labels.html(t.setRadioLabel)}}};if(t.debug)i.Inner=e;return Object.freeze(i)}function m(t){const e={dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").html(t.label).attr("class","sja-termdb-config-row-label"),inputTd:t.holder.append("td")}};e.dom.select=e.dom.inputTd.append("select").property("disabled",t.disabled).on("change",(()=>{const s=e.dom.select.property("value");if(t.callback)t.callback(s);else t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[t.settingsKey]:s}}}})}));e.dom.select.style("max-width","300px");e.dom.select.selectAll("option").data(t.options).enter().append("option").property("disabled",(t=>t.disabled)).attr("value",(t=>t.value)).attr("selected",(t=>t.selected)).html((t=>"&nbsp;"+t.label+"&nbsp;"));const s={main(s){t.holder.style("display",t.getDisplayStyle?.(s)||"table-row");e.dom.select.property("value",s.settings[t.chartType][t.settingsKey])}};if(t.debug)s.Inner=e;return Object.freeze(s)}function b(t){const e={dom:{row:t.holder.style("display","table-row"),labelTdb:t.holder.append("td").attr("aria-label",t.title).html(t.label).attr("class","sja-termdb-config-row-label"),inputTd:t.holder.append("td").attr("colspan",t.colspan||"").style("text-align",t.align||"")}};const s=e.dom.inputTd.append("label");e.dom.input=s.append("input").attr("type","checkbox").on("change",(()=>{const s=e.dom.input.property("checked");if(t.callback)t.callback(s);t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[t.settingsKey]:t.processInput?t.processInput(s):s}}}})}));s.append("span").html("&nbsp;"+t.boxLabel);const n={main(s){const n=s.settings[t.chartType][t.settingsKey];e.dom.input.property("checked",t.processInput?t.processInput(n):n);t.holder.style("display",t.getDisplayStyle?.(s)||"table-row")}};if(t.debug)n.Inner=e;return Object.freeze(n)}function g(e){const s={dom:{row:e.holder.style("display","table-row"),labelTdb:e.holder.append("td").attr("aria-label",e.title).html(e.label).attr("class","sja-termdb-config-row-label"),inputTd:e.holder.append("td").attr("colspan",e.colspan||"").style("padding","5px").style("text-align",e.align||"")}};s.dom.labels=s.dom.inputTd.selectAll("label").data(e.options).enter().append("label").style("margin-right","8px").each((function(n){const i=t(this);s.dom.input=i.append("input").attr("type","checkbox").attr("value",(t=>t.value)).on("change",(()=>{const t=[];s.dom.labels.selectAll("input").each((function(e){if(this.checked)t.push(e.value)}));e.dispatch({type:"plot_edit",id:e.id,config:{settings:{[e.chartType]:{[e.settingsKey]:t}}}})}));i.append("span").html(n.label)}));s.dom.inputs=s.dom.labels.selectAll("input");const n={main(t){const n=t.settings[e.chartType][e.settingsKey];s.dom.inputs.property("checked",(t=>n.includes(t.value)));s.dom.labels.style("display",(e=>e.getDisplayStyle?.(t)||""));e.holder.style("display",e.getDisplayStyle?.(t)||"table-row")}};if(e.debug)n.Inner=s;return Object.freeze(n)}function f(t){const e={dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").html(t.label).attr("class","sja-termdb-config-row-label").attr("aria-label",t.title).style("vertical-align","top"),inputTd:t.holder.append("td")}};e.api=t.init(e);if(t.debug)e.api.Inner=e;return Object.freeze(e.api)}async function v(t){const e={dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").html(t.label).attr("class","sja-termdb-config-row-label").attr("aria-label",t.title),inputTd:t.holder.append("td")}};const s=await i({menuOptions:t.menuOptions||"*",numericEditMenuVersion:t.numericEditMenuVersion||["continuous","discrete"],vocabApi:t.vocabApi,vocab:t.state?.vocab,activeCohort:t.state?.activeCohort,holder:e.dom.inputTd.append("div"),debug:t.debug,usecase:t.usecase,getBodyParams:t.getBodyParams,defaultQ4fillTW:t.defaultQ4fillTW,callback:async e=>{if(t.parent.dom.loadingDiv&&t.parent.dom.svg){t.parent.dom.loadingDiv.selectAll("*").remove();t.parent.dom.loadingDiv.html("").style("display","").style("position","relative").style("left","45%");t.parent.dom.loadingDiv.html("Processing data ...");t.parent.dom.svg.style("opacity",.1).style("pointer-events","none")}if(e&&!e.q)throw"data.q{} missing from pill callback";if(t.processInput)await t.processInput(e);await s.main(e?e:{term:null,q:null});const n={[t.configKey]:e};if(t.processConfig)t.processConfig(n);t.dispatch({type:"plot_edit",id:t.id,config:n})}});const n={usestate:true,main(n){const i=t.getDisplayStyle?.(n)||"table-row";t.holder.style("display",i);const{config:l,activeCohort:a,termfilter:o}=JSON.parse(JSON.stringify(n));const p=n[t.configKey]||l&&l[t.configKey]||{};const r={term:p.term||null,q:p.q,activeCohort:a,filter:o&&o.filter};if("$id"in p)r.$id=p.$id;s.main(r);e.dom.labelTd.datum(p).html(t.label)}};if(t.debug)n.Inner=e;return Object.freeze(n)}const w={number:d,math:c,text:u,color:y,radio:h,dropdown:m,checkbox:b,multiCheckbox:g,custom:f,term:v};export{p as configUiInit,w as initByInput};
@@ -0,0 +1 @@
1
+ import{P as e,M as t,a8 as s,af as i,r as n,h as a,d as r,I as c}from"./app-2cd97738.js";import{term0_term2_defaultQ as o,controlsInit as l,renderTerm1Label as d}from"./controls-3c1691d7.js";import{f as p}from"./termsetting-ad8c4f3a.js";import{s as h}from"./legacy-d3-polyfill-bdb2d792.js";import{h as m}from"./html.legend-fac5cb07.js";import{c as u}from"./partjson.esm-b3f1fc21.js";import{s as g,r as f,a as y,g as v}from"./renderPvalueTable-17558d6a.js";import{l as x}from"./line-264f8f9e.js";import{a as b}from"./area-f56e50f9.js";import{a as I,b as k}from"./axis-747c801e.js";import"./controls.btns-5b1240c8.js";import"./controls.config-81cd5749.js";import"./tslib.es6-c3c2d88f.js";import"path";import"./pointer-c7475677.js";import"./constant-426a1483.js";class S{constructor(s){this.type="cuminc";this.pj=A(this);this.state={config:e({settings:JSON.parse(_)},s.config)};const i=s.holder;this.dom={holder:i,chartsDiv:i.append("div").style("margin","10px"),legendDiv:i.append("div").style("margin","5px"),hiddenDiv:i.append("div").style("margin","5px 5px 15px 5px")};this.tip=new t({padding:"5px"});this.lineFxn=x().curve(g).x((e=>e.scaledX)).y((e=>e.scaledY));this.hidePlotTitle=true;C(this);this.legendRenderer=m(this.dom.legendDiv,{settings:{legendOrientation:"vertical"},handlers:{legend:{click:e=>this.legendClick(e.target.__data__,e.clientX,e.clientY)}}})}main(e){this.config=structuredClone(this.state.config);if(this.config.term.term.type!="condition")throw"cuminc term is not a condition term";this.settings=this.config.settings.cuminc;this.settings.xTitleLabel="Years since entry into the cohort";this.settings.atRiskVisible=false;this.processResults(e);this.pj.refresh({data:this.currData});this.setTerm2Color(this.pj.tree.charts);this.render()}processResults(e){const t=Object.keys(e);if(t.length!=1)throw"must be a single chart";const s=t[0];const i=e[s];this.currData=[];this.uniqueSeriesIds=new Set;for(const e in i.estimates){const t=i.estimates[e];for(const i of t){const{time:t,est:n,low:a,up:r,nrisk:c,nevent:o,ncensor:l}=i;const d={chartId:s,seriesId:e,time:t,cuminc:n*100,low:a*100,high:r*100,nrisk:c,nevent:o,ncensor:l};this.currData.push(d);this.uniqueSeriesIds.add(d.seriesId)}}this.tests={};if(i.tests?.length!=1)throw"must have a single test";const n=i.tests[0];this.tests[s]=[{pvalue:{id:"pvalue",text:n.permutation?n.pvalue+"*":n.pvalue},series1:{id:n.series1},series2:{id:n.series2},permutation:n.permutation}];this.refs={}}setTerm2Color(e){if(!e)return;if(e.length!=1)throw"should be a single chart";const t=e[0];this.term2toColor={};this.colorScale=this.uniqueSeriesIds.size<11?s(i):s(h);const a=[];for(const e of t.serieses){const t=this.config.term2?.term.values?.[e.seriesId]?.color;const s={orig:t||(e.seriesId==""?this.settings.defaultColor:this.colorScale(e.seriesId))};s.rgb=n(s.orig);s.adjusted=s.rgb.toString();this.term2toColor[e.seriesId]=s;if(!a.find((t=>t.seriesId==e.seriesId))){a.push({seriesId:e.seriesId,text:e.seriesLabel,color:this.term2toColor[e.seriesId].adjusted})}}if(this.config.term2&&a.length){this.legendData=[{name:this.config.term2.term.name,items:a}]}else{this.legendData=[]}const r=this.tests[t.chartId];if(r.length!=1)throw"should have one test";const c=r[0];for(const e in c){if(e=="pvalue"){c[e].color="#000"}else if(e.startsWith("series")){const t=a.find((t=>t.seriesId==c[e].id));c[e].color=t.color;c[e].text=t.text}else{continue}}}}class w{constructor(e){this.type="cuminc";this.chartIncrement=0}async init(e){const s=this.opts;const i=this.opts.controls?null:s.holder.append("div");const n=s.controls?s.holder:s.holder.append("div");this.dom={loadingDiv:n.append("div").style("position","absolute").style("display","none").style("padding","20px").html("Loading ..."),header:s.header,controls:i,holder:n,chartsDiv:n.append("div").style("margin","10px"),legendDiv:n.append("div").style("margin","5px"),hiddenDiv:n.append("div").style("margin","5px 5px 15px 5px")};this.tip=new t({padding:"5px"});if(this.dom.header)this.dom.header.html("Cumulative Incidence Plot");this.settings=Object.assign({},this.opts.settings);this.pj=A(this);this.lineFxn=x().curve(g).x((e=>e.scaledX)).y((e=>e.scaledY));D(this);C(this);this.legendRenderer=m(this.dom.legendDiv,{settings:{legendOrientation:"vertical"},handlers:{legend:{click:e=>this.legendClick(e.target.__data__,e.clientX,e.clientY)}}});this.hiddenRenderer=m(this.dom.hiddenDiv,{settings:{legendOrientation:"vertical"},handlers:{legend:{click:e=>this.hideLegendItem(e.target.__data__)}}});await this.setControls(e)}async setControls(e){const t=e.plots.find((e=>e.id===this.id));if(this.opts.controls){this.opts.controls.on("downloadClick.boxplot",this.download)}else{this.dom.holder.attr("class","pp-termdb-plot-viz").style("display","inline-block").style("min-width","300px").style("margin-left","50px");const e=[];for(const s in t.term.term.values){const i=t.term.term.values[s];if(i.uncomputable)continue;e.push({label:i.label,value:s})}const s=structuredClone(o);Object.assign(s,{numeric:{mode:"discrete",type:"custom-bin",preferredBins:"median"}});this.components={controls:await l({app:this.app,id:this.id,holder:this.dom.controls.attr("class","pp-termdb-plot-controls").style("display","inline-block"),inputs:[{type:"term",configKey:"term",chartType:"cuminc",usecase:{target:"cuminc",detail:"term"},label:d,vocabApi:this.app.vocabApi,menuOptions:"edit"},{type:"term",configKey:"term2",chartType:"cuminc",usecase:{target:"cuminc",detail:"term2"},title:"Overlay data",label:"Overlay",vocabApi:this.app.vocabApi,numericEditMenuVersion:["discrete"],defaultQ4fillTW:s},{type:"term",configKey:"term0",chartType:"cuminc",usecase:{target:"cuminc",detail:"term0"},title:"Divide by data",label:"Divide by",vocabApi:this.app.vocabApi,numericEditMenuVersion:["discrete"],defaultQ4fillTW:s},{label:"Minimum sample size of series",type:"number",chartType:"cuminc",settingsKey:"minSampleSize"},{label:"Minimum at-risk count of event",type:"number",chartType:"cuminc",settingsKey:"minAtRisk"},{label:"Chart width",type:"number",chartType:"cuminc",settingsKey:"svgw",title:"The internal width of the chart plot"},{label:"Chart height",type:"number",chartType:"cuminc",settingsKey:"svgh",title:"The internal height of the chart plot"},{label:"X-axis ticks",type:"text",chartType:"cuminc",settingsKey:"xTickValues",placeholder:"tick,tick,...",processInput:e=>e?e.split(",").map(Number):[]},{label:"Y-axis ticks",type:"text",chartType:"cuminc",settingsKey:"yTickValues",placeholder:"tick,tick,...",processInput:e=>e?e.split(",").map(Number):[]},{label:"At-risk counts",boxLabel:"Visible",type:"checkbox",chartType:"cuminc",settingsKey:"atRiskVisible",title:"Display the at-risk counts"},{label:"95% confidence interval",boxLabel:"Visible",type:"checkbox",chartType:"cuminc",settingsKey:"ciVisible"},{label:"Default color",type:"color",chartType:"cuminc",settingsKey:"defaultColor"}]})};this.components.controls.on("downloadClick.boxplot",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{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.cuminc}}}async main(){try{this.config=structuredClone(this.state.config);if(this.dom.header)this.dom.header.html(this.state.config.term.term.name+' <span style="opacity:.6;font-size:.7em;margin-left:10px;">CUMULATIVE INCIDENCE</span>');if(this.config.term.term.type!="condition")throw"cuminc term is not a condition term";this.toggleLoadingDiv();Object.assign(this.settings,this.config.settings);this.settings.defaultHidden=this.getDefaultHidden();this.settings.hidden=this.settings.customHidden||this.settings.defaultHidden;this.settings.xTitleLabel="Years since diagnosis";const e=this.getDataRequestOpts();const t=await this.app.vocabApi.getNestedChartSeriesData(e);if(t.error)throw t.error;this.toggleLoadingDiv("none");this.app.vocabApi.syncTermData(this.config,t);this.processResults(t);this.pj.refresh({data:this.currData});this.sortSerieses(this.pj.tree.charts);this.setTerm2Color(this.pj.tree.charts);this.render()}catch(e){console.error(e)}}getDataRequestOpts(){const e=this.config;const t={chartType:"cuminc",term:e.term,filter:this.state.termfilter.filter,minSampleSize:e.settings.minSampleSize};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.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}processResults(e){const t=this.settings;const s=this.config;const i={};const n={};const a=e.lowSampleSize;const r=e.noEvents;this.currData=[];this.uniqueSeriesIds=new Set;this.tests={};this.noData=[];this.refs=e.refs;for(const s in e.data){const a=e.data[s];if(a.estimates){for(const e in a.estimates){const n=a.estimates[e];if(!n.filter((e=>e.nrisk>=t.minAtRisk&&e.est>0)).length){s in r?r[s].push(e):r[s]=[e];continue}s in i?i[s][e]=n:i[s]={[e]:n}}if(!(s in i))this.noData.push(s)}else{this.noData.push(s)}if(a.tests){n[s]=a.tests.filter((e=>e.series1 in i[s]&&e.series2 in i[s]&&!t.hidden.includes(e.series1)&&!t.hidden.includes(e.series2)))}}for(const e in i){const s=i[e];for(const i in s){const n=s[i];for(const s of n){const{time:n,est:a,low:r,up:c,nrisk:o,nevent:l,ncensor:d}=s;const p={chartId:e,seriesId:i,time:n,cuminc:a*100,low:r*100,high:c*100,nrisk:o,nevent:l,ncensor:d};if(p.nrisk<t.minAtRisk){this.currData.push(p);break}this.currData.push(p);this.uniqueSeriesIds.add(p.seriesId)}}}for(const e in n){for(const t of n[e]){const s={pvalue:{id:"pvalue",text:t.permutation?t.pvalue+"*":t.pvalue},series1:{id:t.series1},series2:{id:t.series2},permutation:t.permutation};e in this.tests?this.tests[e].push(s):this.tests[e]=[s]}}this.lowSampleSize={};for(const e in a){this.lowSampleSize[e]=a[e].map((e=>s.term2?.term.values?.[e]?.label||e))}this.noEvents={};for(const e in r){this.noEvents[e]=r[e].map((e=>s.term2?.term.values?.[e]?.label||e))}}sortSerieses(e){if(!e)return;for(const t of e){const e=t.serieses.map((e=>e.seriesId));const s=[...e.filter((e=>!this.settings.defaultHidden.includes(e))),...e.filter((e=>this.settings.defaultHidden.includes(e)))];t.serieses.sort(((e,t)=>s.indexOf(e.seriesId)-s.indexOf(t.seriesId)))}}setTerm2Color(e){if(!e){this.legendData=[];return}this.term2toColor={};this.colorScale=this.uniqueSeriesIds.size<11?s(i):s(h);const t=[];for(const s of e){for(const e of s.serieses){const s=this.config.term2?.term.values?.[e.seriesId]?.color;const i={orig:s||(e.seriesId==""?this.settings.defaultColor:this.colorScale(e.seriesId))};i.rgb=n(i.orig);i.adjusted=i.rgb.toString();this.term2toColor[e.seriesId]=i;if(!t.find((t=>t.seriesId==e.seriesId))){t.push({seriesId:e.seriesId,text:e.seriesLabel,color:this.term2toColor[e.seriesId].adjusted,isHidden:this.settings.hidden.includes(e.seriesId)})}}}if(this.config.term2&&t.length){this.legendData=[{name:this.config.term2.term.name,items:t.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:t.filter((e=>e.isHidden)).map((e=>Object.assign({},e,{isHidden:false})))}]}else{this.legendData=[]}for(const e in this.tests){const s=this.tests[e];for(const e of s){for(const s in e){if(s=="pvalue"){e[s].color="#000"}else if(s.startsWith("series")){const i=t.find((t=>t.seriesId==e[s].id));e[s].color=i.color;e[s].text=i.text}else{continue}}}}}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 T=a(w);const j=T;function C(e){e.render=function(){const t=e.pj.tree.charts||[{}];if(e.noData?.length){t.push(...e.noData.map((t=>{let s=t;const i=e.config.term0;if(i.q?.type=="predefined-groupset"||i.q?.type=="custom-groupset")return{chartId:t,chartTitle:s};if(i.term.values){const e=i.term.values[t];if(e&&e.label)s=e.label}return{chartId:t,chartTitle:s}})))}const s=e.dom.chartsDiv.selectAll(".pp-cuminc-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.config.term2)e.dom.hiddenDiv.style("display","none");else{e.dom.hiddenDiv.style("display","");e.hiddenRenderer(e.hiddenData)}};e.addCharts=function(n){const a=e.settings;const c=r(this).append("div").attr("class","pp-cuminc-chart").style("opacity",n.serieses?0:1).style("display","inline-block").style("margin",a.chartMargin+"px").style("padding","10px").style("top",0).style("left",0).style("text-align","center").style("vertical-align","top").style("background",n.color);c.append("div").attr("class","sjpcb-cuminc-title").style("text-align","center").style("width",`${a.svgw+50}px`).style("height",a.chartTitleDivHt+"px").style("font-weight","600").style("margin","5px").datum(n.chartId).html(n.chartTitle);if(e.hidePlotTitle)c.select(".sjpcb-cuminc-title").style("display","none");c.append("div").attr("class","pp-cuminc-chart-noData").style("display","none").style("width",`${a.svgw+50}px`).style("margin","40px 5px").text("No cumulative incidence data");if(n.serieses){t(n,a);const e=c.append("svg").attr("class","pp-cuminc-svg");s(e,n,a);c.style("opacity",1)}else{c.select(".pp-cuminc-chart-noData").style("display","block")}c.append("div").attr("class","pp-cuminc-chartLegends").style("vertical-align","top").style("text-align",n.serieses?"left":"center").style("margin",n.serieses?"10px 30px 0px 20px":"0px").style("display","none");if(e.tests&&n.chartId in e.tests){const t=c.select(".pp-cuminc-chartLegends").style("display","inline-block").append("div").style("margin-bottom","30px");f({title:"Group comparisons (Gray's test)",holder:t,plot:"cuminc",tests:e.tests[n.chartId],s:a,bins:e.refs.bins})}if(e.noEvents&&n.chartId in e.noEvents){const t=c.select(".pp-cuminc-chartLegends").style("display","inline-block").append("div").style("margin-bottom","30px");const s="Skipped series (no events)";i(t,s,e.noEvents[n.chartId],a)}if(e.lowSampleSize&&n.chartId in e.lowSampleSize){const t=c.select(".pp-cuminc-chartLegends").style("display","inline-block").append("div").style("margin-bottom","30px");const s="Skipped series (low sample size)";i(t,s,e.lowSampleSize[n.chartId],a)}};function t(e,t){e.visibleSerieses=t.hidden?e.serieses.filter((e=>!t.hidden.includes(e.seriesId))):e.serieses}e.updateCharts=function(n){const a=e.settings;const c=r(this);c.style("background",n.color);c.select(".sjpcb-cuminc-title").style("width",`${a.svgw+50}px`).style("height",a.chartTitleDivHt+"px").datum(n.chartId).html(n.chartTitle);if(e.hidePlotTitle)c.select(".sjpcb-cuminc-title").style("display","none");c.selectAll(".sjpcb-lock-icon").style("display",a.scale=="byChart"?"block":"none");c.selectAll(".sjpcb-unlock-icon").style("display",a.scale=="byChart"?"none":"block");if(n.serieses){c.select(".pp-cuminc-chart-noData").style("display","none");t(n,a);s(c.select("svg"),n,a)}else{c.select(".pp-cuminc-chart-noData").style("display","block").style("width",`${a.svgw+50}px`);c.select("svg").remove();c.select(".pp-cuminc-chartLegends").style("text-align","center").style("margin","0px")}c.select(".pp-cuminc-chartLegends").selectAll("*").remove();if(e.tests&&n.chartId in e.tests){const t=c.select(".pp-cuminc-chartLegends").style("display","inline-block").append("div").style("margin-bottom","30px");f({title:"Group comparisons (Gray's test)",holder:t,plot:"cuminc",tests:e.tests[n.chartId],s:a,bins:e.refs.bins})}if(e.noEvents&&n.chartId in e.noEvents){const t=c.select(".pp-cuminc-chartLegends").style("display","inline-block").append("div").style("margin-bottom","30px");const s="Skipped series (no events)";i(t,s,e.noEvents[n.chartId],a)}if(e.lowSampleSize&&n.chartId in e.lowSampleSize){const t=c.select(".pp-cuminc-chartLegends").style("display","inline-block").append("div").style("margin-bottom","30px");const s="Skipped series (low sample size)";i(t,s,e.lowSampleSize[n.chartId],a)}};function s(t,s,i){const o=i.atRiskVisible?i.axisTitleFontSize+4+s.visibleSerieses.length*2*i.axisTitleFontSize:0;t.attr("width",i.svgw).attr("height",i.svgh+o).style("overflow","visible").style("padding-left","20px");const[l,d,p,h,m,u,g,f,v,x,b]=n(t);l.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);const I=i.svgPadding.left;p.attr("transform","translate("+I+","+i.svgPadding.top+")");const k=h.selectAll(".sjpcb-cuminc-series").data(s.visibleSerieses,(e=>e&&e[0]?e[0].seriesId:""));k.exit().remove();k.each((function(e,t){a(r(this),e,i)}));k.enter().append("g").attr("class","sjpcb-cuminc-series").each((function(e,t){a(r(this),e,i)}));c(u,f,g,v,i,s);y({g:x,s:i,chart:s,term2values:e.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?`${t.seriesLabel}:`:"Cumulative Incidence:";const i=e.term2toColor[t.seriesId].adjusted;return{data:t.data.map((e=>({x:e.x,html:`<span style='color: ${i}'>`+`${s} ${e.y.toFixed(2)} (${e.low.toFixed(2)} - ${e.high.toFixed(2)})`+`</span>`})))}}))})}function i(e,t,s,i){const n=i.axisTitleFontSize-2;e.selectAll("*").remove();e.append("div").style("padding-bottom","5px").style("font-size",n+"px").style("font-weight","bold").text(t);const a=e.append("div").style("padding-bottom","5px").style("font-size",n+"px");a.selectAll("div").data(s).enter().append("div").attr("class","pp-cuminc-chartLegends-skipped").text((e=>e))}function n(t,s){let i,n,a,r,c,o,l,d,p,h,m,u;if(!t.select(".sjpcb-cuminc-mainG").size()){const s=`${e.id}-${e.chartIncrement++}`;i=t.append("defs").append("clipPath").attr("id",s).append("rect");n=t.append("g").attr("class","sjpcb-cuminc-clipG");a=t.append("g").attr("class","sjpcb-cuminc-mainG").attr("data-testid","sja-cuminc-main-g");r=a.append("g").attr("class","sjpcb-cuminc-seriesesG").attr("clip-path",`url(#${s})`);c=a.append("g").attr("class","sjpcb-cuminc-axis");o=c.append("g").attr("class","sjpcb-cuminc-x-axis");l=c.append("g").attr("class","sjpcb-cuminc-y-axis");d=c.append("g").attr("class","sjpcb-cuminc-x-title");p=c.append("g").attr("class","sjpcb-cuminc-y-title");h=a.append("g").attr("class","sjpp-cuminc-atrisk");u=a.append("line").attr("class","sjpcb-plot-tip-line").attr("stroke","#000").attr("stroke-width","2px");m=a.append("rect").attr("class","sjpcb-plot-tip-rect").style("fill","transparent")}else{i=t.select("defs clipPath rect");n=t.select(".sjpcb-cuminc-clipG");a=t.select(".sjpcb-cuminc-mainG");r=a.select(".sjpcb-cuminc-seriesesG");c=a.select(".sjpcb-cuminc-axis");o=c.select(".sjpcb-cuminc-x-axis");l=c.select(".sjpcb-cuminc-y-axis");d=c.select(".sjpcb-cuminc-x-title");p=c.select(".sjpcb-cuminc-y-title");h=a.select(".sjpp-cuminc-atrisk");m=a.select(".sjpcb-plot-tip-rect");u=a.select(".sjpcb-plot-tip-line")}if(!t.seriesTip){t.seriesTip=v(u,m,e.app?.tip)}return[i,n,a,r,c,o,l,d,p,h,m]}function a(t,s,i){t.selectAll("path").remove();t.append("path").attr("d",e.lineFxn(s.data.map((e=>({scaledX:e.scaledX,scaledY:e.scaledY[0]}))))).style("fill","none").style("stroke",e.term2toColor[s.seriesId].adjusted).style("stroke-width",2).style("stroke-linecap","square").style("opacity",1).style("stroke-opacity",1);t.append("path").attr("d",b().curve(g).x((e=>e.scaledX)).y0((e=>e.scaledY[1])).y1((e=>e.scaledY[2]))(s.data)).style("display",i.ciVisible?"":"none").style("fill",e.term2toColor[s.seriesId].adjusted).style("opacity","0.15").style("stroke","none")}function c(e,t,s,i,n,a){const r=I(a.xScale).tickValues(a.xTickValues);const c=k(a.yScale).tickValues(a.yTickValues);const o=-.5;e.attr("transform",`translate(${o}, ${n.svgh-n.svgPadding.top-n.svgPadding.bottom+n.xAxisOffset+o})`).call(r);s.attr("transform",`translate(${n.yAxisOffset+o}, ${o})`).call(c);t.select("text, title").remove();t.attr("transform","translate("+(n.svgw-n.svgPadding.left-n.svgPadding.right)/2+","+(n.svgh-n.axisTitleFontSize-4)+")").append("text").style("text-anchor","middle").style("font-size",n.axisTitleFontSize+"px").text(n.xTitleLabel);const l="Cumulative Incidence (%)";i.select("text, title").remove();i.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(l)}}function D(e){e.mouseover=function(e){e.target.__data__};e.mouseout=function(){e.app.tip.hide()};e.legendClick=function(t,s,i){if(t===undefined)return;const a=e.tip.clear();if(e.config.term2==null){const t=n(e.settings.defaultColor).formatHex();const r=a.d.append("div").attr("class","sja_sharp_border").style("padding","0px 10px").text("Edit color:");const c=r.append("input").attr("type","color").attr("value",t).on("change",(()=>{const t=c.node().value;e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{cuminc:{defaultColor:t}}}});a.hide()}));a.show(s,i);return}if(!t.seriesId)return;a.d.append("div").attr("class","sja_menuoption sja_sharp_border").text(`Hide`).on("click",(async s=>{a.hide();e.hideLegendItem(t)}));let r=e.term2toColor[t.seriesId]?.adjusted;if(r){r=n(r).formatHex();const s=a.d.append("div").attr("class","sja_sharp_border").style("padding","0px 10px").text("Edit color:");const i=s.append("input").attr("type","color").attr("value",r).on("change",(()=>{const s=e.config.term2;const n=structuredClone(s);if(!n.term.values)n.term.values={[t.seriesId]:{}};else if(!n.term.values[t.seriesId])n.term.values[t.seriesId]={};n.term.values[t.seriesId].color=i.node().value;e.app.dispatch({type:"plot_edit",id:e.id,config:{term2:n}});a.hide()}))}a.show(event.clientX,event.clientY)};e.hideLegendItem=function(t){const s=e.settings.hidden.slice();const i=s.indexOf(t.seriesId);i==-1?s.push(t.seriesId):s.splice(i,1);e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{cuminc:{customHidden:s}}}})}}const _=JSON.stringify({controls:{term2:null,term0:null},cuminc:{minSampleSize:10,minAtRisk:10,atRiskVisible:true,atRiskLabelOffset:-10,seriesTipDecimals:0,ciVisible:true,radius:5,fill:"#fff",stroke:"#000",fillOpacity:0,chartMargin:10,svgw:400,svgh:300,svgPadding:{top:20,left:55,right:20,bottom:50},axisTitleFontSize:16,xAxisOffset:5,yAxisOffset:-5,defaultColor:"#2077b4"}});async function O(t,s){if(!t.term)throw"cuminc: opts.term{} missing";try{await p(t.term,s.vocabApi,{condition:{mode:"cuminc"}});if(t.term2)await p(t.term2,s.vocabApi);if(t.term0)await p(t.term0,s.vocabApi)}catch(e){throw`${e} [cuminc getPlotConfig()]`}const i={id:t.term.term.id,settings:JSON.parse(_)};return e(i,t)}function A(e){const t=new u({template:{xMin:">=x()",xMax:"<=x()",yMin:">=yMin()",yMax:"<=yMax()",charts:[{chartId:"@key",chartTitle:"=chartTitle()",xMin:">=x()",xMax:"<=x()","__:xTickValues":"=xTickValues()","__:yTickValues":"=yTickValues()","__: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:"$cuminc",low:"$low",high:"$high","_1:scaledX":"=scaledX()","_1:scaledY":"=scaledY()",nrisk:"$nrisk",nevent:"$nevent",ncensor:"$ncensor"},"$time"]},"$seriesId"],"@done()":"=sortSerieses()"},"$chartId"]},"=":{chartTitle(t){if(!e.state?.config?.term)return t.chartId;e.settings;const s=e.config.term.q.breaks[0];if(!t.chartId||t.chartId=="-"){return s==5?"CTCAE grade 5":`CTCAE grade ${s}-5`}const i=e.config.term0;if(!i||!i.term.values)return t.chartId;if(i.q?.type=="predefined-groupset"||i.q?.type=="custom-groupset")return t.chartId;const n=e.config.term0.term.values[t.chartId];return n&&n.label?n.label:t.chartId},seriesLabel(t,s){const i=e.config?.term2;if(!i)return s.self.seriesId;const n=s.self.seriesId;if(i?.q?.type=="predefined-groupset"||i?.q?.type=="custom-groupset")return n;if(i&&i.term.values&&n in i.term.values)return i.term.values[n].label;return n},x(t){if(e.settings.hidden?.includes(t.seriesId))return;return t.time},yMin(t){if(e.settings.hidden?.includes(t.seriesId))return;return e.settings.ciVisible?t.low:t.cuminc},yMax(t){if(e.settings.hidden?.includes(t.seriesId))return;return e.settings.ciVisible?t.high:t.cuminc},xTickValues(t,s){const i=e.settings;if(i.xTickValues?.length){return i.xTickValues}else{const e=s.root.xMin;const t=s.root.xMax;return V(e,t)}},xScale(t,s){const i=e.settings;const n=Math.min(...s.self.xTickValues);const a=Math.max(...s.self.xTickValues);return c().domain([n,a]).range([0,i.svgw-i.svgPadding.left-i.svgPadding.right])},scaledX(e,t){const s=t.context.context.context.parent.xScale.clamp(false);return s(t.self.x)},yTickValues(t,s){const i=e.settings;if(i.yTickValues?.length){return i.yTickValues}else{const e=s.root.yMin;const t=s.root.yMax;return V(e,t)}},yScale(t,s){const i=e.settings;const n=Math.min(...s.self.yTickValues);const a=Math.max(...s.self.yTickValues);return c().domain([a,n]).range([0,i.svgh-i.svgPadding.top-i.svgPadding.bottom])},scaledY(e,t){const s=t.context.context.context.parent.yScale.clamp(false);const i=t.self;return[s(i.y),s(i.low),s(i.high)]},sortSerieses(t){if(!e.refs.bins)return;const s=e.refs.bins.map((e=>e.label));t.serieses.sort(((e,t)=>s.indexOf(e.seriesId)-s.indexOf(t.seriesId)))}}});return t}function V(e,t){const s=(t-e)/5;const i=Math.floor(Math.log10(s));const n=Math.round(s/(5*10**i))*(5*10**i)||1*10**i;const a=[];let r=e;while(r<=Math.min(100,t+n)){a.push(r);r=r+n}if(!a.includes(0))a.unshift(0);return a}export{S as Cuminc,j as componentInit,T as cumincInit,O as getPlotConfig};
@@ -1 +1 @@
1
- import{z as t,ak as n,b as e,ap as o,bE as i,bD as s,bc as a,aJ as r,bU as l,bi as p,at as m}from"./app-b369b169.js";function c(t){if(!t.usegm){return}const n=t.tip.d.append("div").style("margin","20px");n.append("p").text(`Add mutation and/or fusion to show over ${t.usegm.name} ${t.usegm.isoform}`);const e=n.append("textarea").attr("cols","50").attr("rows","5").property("placeholder","Enter data");e.node().focus();const o=n.append("div").append("input").attr("type","text").style("width","130px").property("placeholder","Dataset name");const i=n.append("div").style("margin-top","5px");const s=i.append("select");s.append("option").text("Codon position");s.append("option").text("RNA position");s.append("option").text("Genomic position");i.append("button").style("margin-left","5px").text("Submit").on("click",(async()=>{const n=e.property("value");if(n=="")return;a.style("display","none");const i=s.node().selectedIndex,r=[],l=[];for(const e of n.trim().split("\n")){const n=e.trim();if(!n)continue;const o=n.split(n.includes("\t")?"\t":n.includes(",")?",":" ");try{if(o.length==3||o.length==4){if(Number.isFinite(Number(o[2]))){f(o,r,i,t)}else{d(o,r,i,t)}continue}if(o.length==6||o.length==7){await u(o,r,i,t);continue}throw`Line="${o}" does not match the mutation, fusion, or cnv format. Please review.`}catch(t){l.push(n+": "+(t.message||t))}}if(r.find((t=>t.sample))&&r.find((t=>!t.sample))){l.push("sample name is provided for some but not all variants")}if(l.length){a.style("display","block").text("Rejected: "+l.join("\n"))}if(r.length==0)return;const p=t.block_addtk_template({type:"mds3",name:o.property("value")||"Custom data",iscustom:true,custom_variants:r});t.tk_load(p)}));i.append("button").text("Clear").style("margin-left","5px").on("click",(()=>{e.property("value","");o.property("value","")}));const a=n.append("div").style("display","none","margin-top","20px");b(n)}function d(e,o,i,s){const a=e[2].trim();if(!t[a])throw`Invalid mutation class=${a}`;const r={class:a,dt:n,isoform:s.usegm.isoform,mname:e[0].trim()};if(!r.mname)throw"missing mutation name";const l=g(i,e[1].trim(),s.usegm);r.chr=l[0];r.pos=l[1];if(e[3])r.sample=e[3];o.push(r)}async function u(t,n,o,i){const s={class:p,dt:m};if(t[6])s.sample=t[6];const[a,r,l,c,d,u]=t;if(!a)throw"gene1 is missing";if(!c)throw"gene2 is missing";if(!r)throw"isoform1 is missing";if(!d)throw"isoform2 is missing";if(!l)throw"pos1 is missing";if(!u)throw"pos2 is missing";{const t=await e("genelookup",{body:{deep:1,genome:i.genome.name,input:a}});if(t.error)throw"invalid gene1";const n=t.gmlst.find((t=>t.isoform==r));if(!n)throw"invalid isoform1";s.gene1=a;s.chr1=n.chr;const p=g(o,l,n);s.pos1=p[1];s.strand1=n.strand}{const t=await e("genelookup",{body:{deep:1,genome:i.genome.name,input:c}});if(t.error)throw"invalid gene2";const n=t.gmlst.find((t=>t.isoform==d));if(!n)throw"invalid isoform2";s.gene2=c;s.chr2=n.chr;const a=g(o,u,n);s.pos2=a[1];s.strand2=n.strand}n.push(s)}function f(t,n,e,a){const r=Number(t[2].trim());if(!Number.isFinite(r))throw"CNV value is not number";const l={chr:a.usegm.chr,dt:o,value:r,class:r>0?i:s};if(t[3])l.sample=t[3];const p=g(e,t[0].trim(),a.usegm),m=g(e,t[1].trim(),a.usegm);l.start=Math.min(p[1],m[1]);l.stop=Math.max(p[1],m[1]);n.push(l)}function g(t,n,e){const o=h(n,e.chr);if(!Number.isInteger(o))throw"position is not integer";if(t==0){const t=a(o,e);if(t==null)throw"cannot convert codon to genomic position";return[e.chr,t]}if(t==1){const t=r(o,e);if(t==null)throw"cannot convert RNA position to genomic position";return[e.chr,t]}if(t==2){return[e.chr,o-1]}throw"unknown selection"}function h(t,n){let e;if(t.includes(":")){const o=t.split(":");if(o[0]!=n)throw`Included chromosome=${o[0]} does not match current chromosome position=${n}`;e=Number(o[1])}else{e=Number(t)}return e}function b(t){{const[n,e]=y(t);n.text("Mutation format: mutation name, position, class, sample");e.html(`One mutation per line. Fields are joined by tab, comma or space. Please do not use both comma and space as separator.\n\t\t<ol>\n\t\t\t<li>Mutation name, can be any string</li>\n\t\t\t<li>Mutation position</li>\n\t\t\t<li>Mutation class code</li>\n\t\t\t<li>Optional sample name</li>\n\t\t</ol>\n\t\tPosition types:\n\t\t<ul><li>Codon position: integer, 1-based (do not use for noncoding gene)</li>\n\t\t<li>RNA position: integer, 1-based, beginning from transcription start site</li>\n\t\t<li>Genomic position: integer, 1-based coordinate</li></ul>`);l(e.append("table").style("margin-top","3px"),true)}{const[n,e]=y(t);n.text("SV/fusion format: gene1, isoform1, position1, gene2, isoform2, position2, sample");e.html(`Limited to two-gene fusion products. One product per line.\n\t\t\tFields are joined by tab, comma or space. Please do not use both comma and space as separator.\n\t\t<ol><li>N-term gene symbol</li>\n\t\t<li>N-term gene isoform</li>\n\t\t<li>N-term gene break-end position</li>\n\t\t<li>C-term gene symbol</li>\n\t\t<li>C-term gene isoform</li>\n\t\t<li>C-term gene break-end position</li>\n\t\t<li>Optional sample name</li>\n\t\t</ol>\n\t\tBreak-end position types:\n\t\t<ul><li>Codon position: integer, 1-based</li>\n\t\t<li>RNA position: integer, 1-based, beginning from transcription start site</li>\n\t\t<li>Genomic position: 1-based coordinate</li></ul>\n\t\tEither one of the isoforms must be already displayed.`)}{const[n,e]=y(t);n.text("CNV format: segment start, segment stop, CNV value, sample");e.html(`One CNV segment per line. Fields are joined by tab, comma or space. Please do not use both comma and space as separator.\n\t\t<ol>\n\t\t\t<li>Segment start position</li>\n\t\t\t<li>Segment stop position</li>\n\t\t\t<li>Copy number change value, positive value for gain, negative value for loss. Do not use 0</li>\n\t\t\t<li>Optional sample name</li>\n\t\t</ol>\n\t\tPosition types:\n\t\t<ul><li>Codon position: integer, 1-based (do not use for noncoding gene)</li>\n\t\t<li>RNA position: integer, 1-based, beginning from transcription start site</li>\n\t\t<li>Genomic position: integer, 1-based coordinate</li></ul>`)}}function y(t){const n=t.append("p");const e=n.append("span").style("opacity",.6);n.append("span").attr("class","sja_clbtext").style("margin-left","10px").text("Show details").on("click",(t=>{const n=o.style("display")=="none";o.style("display",n?"":"none");t.target.innerHTML=n?"Hide details":"Show details"}));const o=t.append("div").style("display","none").style("margin-left","20px").style("padding-left","10px").style("border-left","solid 1px black").style("color","#858585");return[e,o]}export{c as default,f as parseCnv,u as parseFusion,h as parseInputPosition,d as parseMutation,g as parsePositionFromGm};
1
+ import{z as t,ak as n,b as e,ap as o,bE as i,bD as s,bc as a,aJ as r,bU as l,bi as p,at as m}from"./app-2cd97738.js";function c(t){if(!t.usegm){return}const n=t.tip.d.append("div").style("margin","20px");n.append("p").text(`Add mutation and/or fusion to show over ${t.usegm.name} ${t.usegm.isoform}`);const e=n.append("textarea").attr("cols","50").attr("rows","5").property("placeholder","Enter data");e.node().focus();const o=n.append("div").append("input").attr("type","text").style("width","130px").property("placeholder","Dataset name");const i=n.append("div").style("margin-top","5px");const s=i.append("select");s.append("option").text("Codon position");s.append("option").text("RNA position");s.append("option").text("Genomic position");i.append("button").style("margin-left","5px").text("Submit").on("click",(async()=>{const n=e.property("value");if(n=="")return;a.style("display","none");const i=s.node().selectedIndex,r=[],l=[];for(const e of n.trim().split("\n")){const n=e.trim();if(!n)continue;const o=n.split(n.includes("\t")?"\t":n.includes(",")?",":" ");try{if(o.length==3||o.length==4){if(Number.isFinite(Number(o[2]))){f(o,r,i,t)}else{d(o,r,i,t)}continue}if(o.length==6||o.length==7){await u(o,r,i,t);continue}throw`Line="${o}" does not match the mutation, fusion, or cnv format. Please review.`}catch(t){l.push(n+": "+(t.message||t))}}if(r.find((t=>t.sample))&&r.find((t=>!t.sample))){l.push("sample name is provided for some but not all variants")}if(l.length){a.style("display","block").text("Rejected: "+l.join("\n"))}if(r.length==0)return;const p=t.block_addtk_template({type:"mds3",name:o.property("value")||"Custom data",iscustom:true,custom_variants:r});t.tk_load(p)}));i.append("button").text("Clear").style("margin-left","5px").on("click",(()=>{e.property("value","");o.property("value","")}));const a=n.append("div").style("display","none","margin-top","20px");b(n)}function d(e,o,i,s){const a=e[2].trim();if(!t[a])throw`Invalid mutation class=${a}`;const r={class:a,dt:n,isoform:s.usegm.isoform,mname:e[0].trim()};if(!r.mname)throw"missing mutation name";const l=g(i,e[1].trim(),s.usegm);r.chr=l[0];r.pos=l[1];if(e[3])r.sample=e[3];o.push(r)}async function u(t,n,o,i){const s={class:p,dt:m};if(t[6])s.sample=t[6];const[a,r,l,c,d,u]=t;if(!a)throw"gene1 is missing";if(!c)throw"gene2 is missing";if(!r)throw"isoform1 is missing";if(!d)throw"isoform2 is missing";if(!l)throw"pos1 is missing";if(!u)throw"pos2 is missing";{const t=await e("genelookup",{body:{deep:1,genome:i.genome.name,input:a}});if(t.error)throw"invalid gene1";const n=t.gmlst.find((t=>t.isoform==r));if(!n)throw"invalid isoform1";s.gene1=a;s.chr1=n.chr;const p=g(o,l,n);s.pos1=p[1];s.strand1=n.strand}{const t=await e("genelookup",{body:{deep:1,genome:i.genome.name,input:c}});if(t.error)throw"invalid gene2";const n=t.gmlst.find((t=>t.isoform==d));if(!n)throw"invalid isoform2";s.gene2=c;s.chr2=n.chr;const a=g(o,u,n);s.pos2=a[1];s.strand2=n.strand}n.push(s)}function f(t,n,e,a){const r=Number(t[2].trim());if(!Number.isFinite(r))throw"CNV value is not number";const l={chr:a.usegm.chr,dt:o,value:r,class:r>0?i:s};if(t[3])l.sample=t[3];const p=g(e,t[0].trim(),a.usegm),m=g(e,t[1].trim(),a.usegm);l.start=Math.min(p[1],m[1]);l.stop=Math.max(p[1],m[1]);n.push(l)}function g(t,n,e){const o=h(n,e.chr);if(!Number.isInteger(o))throw"position is not integer";if(t==0){const t=a(o,e);if(t==null)throw"cannot convert codon to genomic position";return[e.chr,t]}if(t==1){const t=r(o,e);if(t==null)throw"cannot convert RNA position to genomic position";return[e.chr,t]}if(t==2){return[e.chr,o-1]}throw"unknown selection"}function h(t,n){let e;if(t.includes(":")){const o=t.split(":");if(o[0]!=n)throw`Included chromosome=${o[0]} does not match current chromosome position=${n}`;e=Number(o[1])}else{e=Number(t)}return e}function b(t){{const[n,e]=y(t);n.text("Mutation format: mutation name, position, class, sample");e.html(`One mutation per line. Fields are joined by tab, comma or space. Please do not use both comma and space as separator.\n\t\t<ol>\n\t\t\t<li>Mutation name, can be any string</li>\n\t\t\t<li>Mutation position</li>\n\t\t\t<li>Mutation class code</li>\n\t\t\t<li>Optional sample name</li>\n\t\t</ol>\n\t\tPosition types:\n\t\t<ul><li>Codon position: integer, 1-based (do not use for noncoding gene)</li>\n\t\t<li>RNA position: integer, 1-based, beginning from transcription start site</li>\n\t\t<li>Genomic position: integer, 1-based coordinate</li></ul>`);l(e.append("table").style("margin-top","3px"),true)}{const[n,e]=y(t);n.text("SV/fusion format: gene1, isoform1, position1, gene2, isoform2, position2, sample");e.html(`Limited to two-gene fusion products. One product per line.\n\t\t\tFields are joined by tab, comma or space. Please do not use both comma and space as separator.\n\t\t<ol><li>N-term gene symbol</li>\n\t\t<li>N-term gene isoform</li>\n\t\t<li>N-term gene break-end position</li>\n\t\t<li>C-term gene symbol</li>\n\t\t<li>C-term gene isoform</li>\n\t\t<li>C-term gene break-end position</li>\n\t\t<li>Optional sample name</li>\n\t\t</ol>\n\t\tBreak-end position types:\n\t\t<ul><li>Codon position: integer, 1-based</li>\n\t\t<li>RNA position: integer, 1-based, beginning from transcription start site</li>\n\t\t<li>Genomic position: 1-based coordinate</li></ul>\n\t\tEither one of the isoforms must be already displayed.`)}{const[n,e]=y(t);n.text("CNV format: segment start, segment stop, CNV value, sample");e.html(`One CNV segment per line. Fields are joined by tab, comma or space. Please do not use both comma and space as separator.\n\t\t<ol>\n\t\t\t<li>Segment start position</li>\n\t\t\t<li>Segment stop position</li>\n\t\t\t<li>Copy number change value, positive value for gain, negative value for loss. Do not use 0</li>\n\t\t\t<li>Optional sample name</li>\n\t\t</ol>\n\t\tPosition types:\n\t\t<ul><li>Codon position: integer, 1-based (do not use for noncoding gene)</li>\n\t\t<li>RNA position: integer, 1-based, beginning from transcription start site</li>\n\t\t<li>Genomic position: integer, 1-based coordinate</li></ul>`)}}function y(t){const n=t.append("p");const e=n.append("span").style("opacity",.6);n.append("span").attr("class","sja_clbtext").style("margin-left","10px").text("Show details").on("click",(t=>{const n=o.style("display")=="none";o.style("display",n?"":"none");t.target.innerHTML=n?"Hide details":"Show details"}));const o=t.append("div").style("display","none").style("margin-left","20px").style("padding-left","10px").style("border-left","solid 1px black").style("color","#858585");return[e,o]}export{c as default,f as parseCnv,u as parseFusion,h as parseInputPosition,d as parseMutation,g as parsePositionFromGm};
@@ -1 +1 @@
1
- import{h as t,P as e,y as i,d as s}from"./app-b369b169.js";import{f as o,h as a}from"./termsetting-33ea66f1.js";import"./tslib.es6-c3c2d88f.js";import"path";class n{constructor(t){this.type="dataDownload";this.genomeObj=t.app.opts.genome;this.pillBy$id={}}async init(t){h(this);p(this);this.dom={header:this.opts.header,errordiv:this.opts.holder.append("div"),titleDiv:this.opts.holder.append("div").style("margin","10px"),terms:this.opts.holder.append("div").style("white-space","normal"),submitDiv:this.opts.holder.append("div").style("margin","10px")};this.dom.submitBtn=this.dom.submitDiv.append("button").html("Download").on("click",this.download);this.dom.submitNote=this.dom.submitDiv.append("span").style("margin-left","5px").style("font-style","italic")}getState(t,e){const i=t.plots.find((t=>t.id===this.id));if(!i){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}this.termdbConfig=t.termdbConfig;return{vocab:t.vocab,activeCohort:t.activeCohort,termfilter:t.termfilter,config:i,hasVerifiedToken:this.app.vocabApi.hasVerifiedToken(),tokenVerificationPayload:this.app.vocabApi.tokenVerificationPayload}}async main(){try{this.config=structuredClone(this.state.config);this.mayUpdateSandboxHeader();if(this.mayRequireToken())return;const t=await this.getDataRequestOpts();this.data=await this.app.vocabApi.getAnnotatedSampleData(t);this.processData();const e=this.activeSamples.length;this.dom.submitBtn.property("disabled",e<1);this.dom.submitNote.html(e?`${e} samples`:"no sample data");this.render()}catch(t){i(this.dom.errordiv,"Error: "+(t.error||t));if(t.stack)console.log(t.stack)}}mayUpdateSandboxHeader(){if(!this.dom.header)return;this.dom.header.html("<span>Data download</span>")}mayRequireToken(){if(this.state.hasVerifiedToken){this.dom.titleDiv.style("color","").html("Selected terms");this.dom.terms.style("display","");this.dom.submitDiv.style("display","");return false}else{const t=this.state.tokenVerificationPayload;const e=t?.error=="Missing access"&&this.termdbConfig.dataDownloadCatch?.missingAccess;const i=e?.message?.replace("MISSING-ACCESS-LINK",e?.links[t?.linkKey]);const s=this.termdbConfig.dataDownloadCatch?.helpLink;this.dom.titleDiv.style("color","#e44").html(i||(this.state.tokenVerificationMessage||"Requires sign-in")+(s?` <a href='${s}' target=_blank>Tutorial</a>`:""));this.dom.terms.style("display","none");this.dom.submitDiv.style("display","none");return true}}async getDataRequestOpts(){const t=this.config.terms;return{terms:t,filter:this.state.termfilter.filter}}processData(){const{lst:t,bySampleId:e}=this.data;this.activeSamples=[];for(const e of t){for(const t of this.config.terms){if(t.term&&t.$id in e){this.activeSamples.push(e);break}}}}async getNewPill(t,e){const i=await a({placeholder:"+Add variable",holder:t,menuOptions:"all",vocabApi:this.app.vocabApi,activeCohort:this.state.activeCohort,debug:this.app.opts.debug,usecase:{target:"dataDownload"},numericEditMenuVersion:["continuous","discrete"],noTermPromptOptions:this.getNoTermPromptOptions(),genomeObj:this.genomeObj,abbrCutoff:50,defaultQ4fillTW:{condition:{mode:"cuminc"},numeric:{mode:"continuous"}},callback:t=>{const i=this.config.terms.slice(0);const s=this.config.terms.findIndex((t=>t.$id===e.tw.$id));if(!t?.term){i.splice(s,1)}else if(s===-1){t.$id=e.tw.$id;if(!t.q?.mode&&(t.term.type=="integer"||t.term.type=="float")){t.q.mode="continuous"}i.push(t)}else{t.$id=e.tw.$id;i[s]=t}this.app.dispatch({type:"plot_edit",id:this.id,chartType:"dataDownload",config:{terms:i}})}});this.pillBy$id[e.tw.$id]=i;return i}getNoTermPromptOptions(){const t=[];if(this.termdbConfig.allowedTermTypes.includes("snplst")){t.push({termtype:"snplst",text:"A list of variants",q:{doNotRestrictAncestry:1,geneticModel:3,AFcutoff:0}})}if(this.termdbConfig.allowedTermTypes.includes("snplocus")){t.push({termtype:"snplocus",text:"Variants from a locus",q:{doNotRestrictAncestry:1,geneticModel:3,AFcutoff:0}})}if(t.length)t.unshift({isDictionary:true,text:"Dictionary variable"});return t}}const r=t(n);const d=r;const l=`_ts_${(+new Date).toString().slice(-8)}_${Math.random().toString().slice(-6)}`;let c=0;function m(){return`${c++}${l}`}function p(t){t.render=function(){const e=t.config.terms.map((e=>({tw:e,pill:t.pillBy$id[e.$id]})));e.push({tw:{$id:m()}});const i=t.dom.terms.selectAll(":scope>.sja-data-download-term").data(e,(t=>t.tw?.$id));i.exit().remove();i.each(t.renderTerm);i.enter().append("div").attr("class","sja-data-download-term").each(t.addTerm)};t.addTerm=async function(e){const i=s(this).style("display",e.tw?.term?"inline-block":"block").style("width","fit-content").style("margin","10px").style("padding","5px");e.pill=await t.getNewPill(i,e);await e.pill.main({term:e.tw?.term,q:e.tw?.q,filter:t.state.termfilter.filter,activeCohort:t.state.activeCohort,numericEditMenuVersion:["continuous","discrete"]})};t.renderTerm=async function(e){if(!e.pill)throw`no pill on update renderTerm()`;s(this).style("display",e.tw.term?"inline-block":"block");await e.pill.main({term:e.tw?.term,q:e.tw.q,filter:t.state.termfilter.filter,activeCohort:t.state.activeCohort})}}function h(t){t.download=async()=>{const e=["sample"];for(const i of t.config.terms){if(i.term.type=="condition"){e.push(`${i.term.name}_event (0=censored, 1=grade ${i.q.breaks[0]}-5, 2=non-${i.term.name} death)`);e.push(`${i.term.name}_time (years from diagnosis to event)`)}else if(i.term.snps){for(const t of i.term.snps){e.push(t.snpid)}}else{e.push(i.term.name)}}const i=[e];for(const e of t.activeSamples){const s=[e.sampleName||t.data.refs.bySampleId[e.sample]?.label];for(const i of t.config.terms){if(!e[i.$id])s.push("");else{if(i.term.type=="condition"){s.push(e[i.$id].key,e[i.$id].value)}else if(i.term.snps){for(const t of i.term.snps){s.push(e[i.$id]?.[t.snpid]||".")}}else{const t=i.term.values?.[e[i.$id].key]||e[i.$id];s.push(t.label||t.key)}}}i.push(s)}const s=i.map((t=>t.join("\t"))).join("\n");const o=document.createElement("a");document.body.appendChild(o);o.addEventListener("click",(function(){o.download="cohortData.txt";o.href=URL.createObjectURL(new Blob([s],{type:"text/tab-separated-values"}));document.body.removeChild(o)}),false);o.click();t.app.vocabApi.trackDsAction({action:"download",details:{terms:t.config.terms.map((t=>!("id"in t.term)?t.term.name:t.term.id)),filter:t.state.termfilter.filter}})}}let f=1;async function u(t,i){const s="id"in t?t.id:`_DATADOWNLOAD_${f++}`;const a={id:s,terms:[]};e(a,t);for(const t of a.terms){await o(t,i.vocabApi)}return a}export{d as componentInit,r as dataDownloadInit,u as getPlotConfig};
1
+ import{h as t,P as e,y as i,d as s}from"./app-2cd97738.js";import{f as o,h as a}from"./termsetting-ad8c4f3a.js";import"./tslib.es6-c3c2d88f.js";import"path";class n{constructor(t){this.type="dataDownload";this.genomeObj=t.app.opts.genome;this.pillBy$id={}}async init(t){h(this);p(this);this.dom={header:this.opts.header,errordiv:this.opts.holder.append("div"),titleDiv:this.opts.holder.append("div").style("margin","10px"),terms:this.opts.holder.append("div").style("white-space","normal"),submitDiv:this.opts.holder.append("div").style("margin","10px")};this.dom.submitBtn=this.dom.submitDiv.append("button").html("Download").on("click",this.download);this.dom.submitNote=this.dom.submitDiv.append("span").style("margin-left","5px").style("font-style","italic")}getState(t,e){const i=t.plots.find((t=>t.id===this.id));if(!i){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}this.termdbConfig=t.termdbConfig;return{vocab:t.vocab,activeCohort:t.activeCohort,termfilter:t.termfilter,config:i,hasVerifiedToken:this.app.vocabApi.hasVerifiedToken(),tokenVerificationPayload:this.app.vocabApi.tokenVerificationPayload}}async main(){try{this.config=structuredClone(this.state.config);this.mayUpdateSandboxHeader();if(this.mayRequireToken())return;const t=await this.getDataRequestOpts();this.data=await this.app.vocabApi.getAnnotatedSampleData(t);this.processData();const e=this.activeSamples.length;this.dom.submitBtn.property("disabled",e<1);this.dom.submitNote.html(e?`${e} samples`:"no sample data");this.render()}catch(t){i(this.dom.errordiv,"Error: "+(t.error||t));if(t.stack)console.log(t.stack)}}mayUpdateSandboxHeader(){if(!this.dom.header)return;this.dom.header.html("<span>Data download</span>")}mayRequireToken(){if(this.state.hasVerifiedToken){this.dom.titleDiv.style("color","").html("Selected terms");this.dom.terms.style("display","");this.dom.submitDiv.style("display","");return false}else{const t=this.state.tokenVerificationPayload;const e=t?.error=="Missing access"&&this.termdbConfig.dataDownloadCatch?.missingAccess;const i=e?.message?.replace("MISSING-ACCESS-LINK",e?.links[t?.linkKey]);const s=this.termdbConfig.dataDownloadCatch?.helpLink;this.dom.titleDiv.style("color","#e44").html(i||(this.state.tokenVerificationMessage||"Requires sign-in")+(s?` <a href='${s}' target=_blank>Tutorial</a>`:""));this.dom.terms.style("display","none");this.dom.submitDiv.style("display","none");return true}}async getDataRequestOpts(){const t=this.config.terms;return{terms:t,filter:this.state.termfilter.filter}}processData(){const{lst:t,bySampleId:e}=this.data;this.activeSamples=[];for(const e of t){for(const t of this.config.terms){if(t.term&&t.$id in e){this.activeSamples.push(e);break}}}}async getNewPill(t,e){const i=await a({placeholder:"+Add variable",holder:t,menuOptions:"all",vocabApi:this.app.vocabApi,activeCohort:this.state.activeCohort,debug:this.app.opts.debug,usecase:{target:"dataDownload"},numericEditMenuVersion:["continuous","discrete"],noTermPromptOptions:this.getNoTermPromptOptions(),genomeObj:this.genomeObj,abbrCutoff:50,defaultQ4fillTW:{condition:{mode:"cuminc"},numeric:{mode:"continuous"}},callback:t=>{const i=this.config.terms.slice(0);const s=this.config.terms.findIndex((t=>t.$id===e.tw.$id));if(!t?.term){i.splice(s,1)}else if(s===-1){t.$id=e.tw.$id;if(!t.q?.mode&&(t.term.type=="integer"||t.term.type=="float")){t.q.mode="continuous"}i.push(t)}else{t.$id=e.tw.$id;i[s]=t}this.app.dispatch({type:"plot_edit",id:this.id,chartType:"dataDownload",config:{terms:i}})}});this.pillBy$id[e.tw.$id]=i;return i}getNoTermPromptOptions(){const t=[];if(this.termdbConfig.allowedTermTypes.includes("snplst")){t.push({termtype:"snplst",text:"A list of variants",q:{doNotRestrictAncestry:1,geneticModel:3,AFcutoff:0}})}if(this.termdbConfig.allowedTermTypes.includes("snplocus")){t.push({termtype:"snplocus",text:"Variants from a locus",q:{doNotRestrictAncestry:1,geneticModel:3,AFcutoff:0}})}if(t.length)t.unshift({isDictionary:true,text:"Dictionary variable"});return t}}const r=t(n);const d=r;const l=`_ts_${(+new Date).toString().slice(-8)}_${Math.random().toString().slice(-6)}`;let c=0;function m(){return`${c++}${l}`}function p(t){t.render=function(){const e=t.config.terms.map((e=>({tw:e,pill:t.pillBy$id[e.$id]})));e.push({tw:{$id:m()}});const i=t.dom.terms.selectAll(":scope>.sja-data-download-term").data(e,(t=>t.tw?.$id));i.exit().remove();i.each(t.renderTerm);i.enter().append("div").attr("class","sja-data-download-term").each(t.addTerm)};t.addTerm=async function(e){const i=s(this).style("display",e.tw?.term?"inline-block":"block").style("width","fit-content").style("margin","10px").style("padding","5px");e.pill=await t.getNewPill(i,e);await e.pill.main({term:e.tw?.term,q:e.tw?.q,filter:t.state.termfilter.filter,activeCohort:t.state.activeCohort,numericEditMenuVersion:["continuous","discrete"]})};t.renderTerm=async function(e){if(!e.pill)throw`no pill on update renderTerm()`;s(this).style("display",e.tw.term?"inline-block":"block");await e.pill.main({term:e.tw?.term,q:e.tw.q,filter:t.state.termfilter.filter,activeCohort:t.state.activeCohort})}}function h(t){t.download=async()=>{const e=["sample"];for(const i of t.config.terms){if(i.term.type=="condition"){e.push(`${i.term.name}_event (0=censored, 1=grade ${i.q.breaks[0]}-5, 2=non-${i.term.name} death)`);e.push(`${i.term.name}_time (years from diagnosis to event)`)}else if(i.term.snps){for(const t of i.term.snps){e.push(t.snpid)}}else{e.push(i.term.name)}}const i=[e];for(const e of t.activeSamples){const s=[e.sampleName||t.data.refs.bySampleId[e.sample]?.label];for(const i of t.config.terms){if(!e[i.$id])s.push("");else{if(i.term.type=="condition"){s.push(e[i.$id].key,e[i.$id].value)}else if(i.term.snps){for(const t of i.term.snps){s.push(e[i.$id]?.[t.snpid]||".")}}else{const t=i.term.values?.[e[i.$id].key]||e[i.$id];s.push(t.label||t.key)}}}i.push(s)}const s=i.map((t=>t.join("\t"))).join("\n");const o=document.createElement("a");document.body.appendChild(o);o.addEventListener("click",(function(){o.download="cohortData.txt";o.href=URL.createObjectURL(new Blob([s],{type:"text/tab-separated-values"}));document.body.removeChild(o)}),false);o.click();t.app.vocabApi.trackDsAction({action:"download",details:{terms:t.config.terms.map((t=>!("id"in t.term)?t.term.name:t.term.id)),filter:t.state.termfilter.filter}})}}let f=1;async function u(t,i){const s="id"in t?t.id:`_DATADOWNLOAD_${f++}`;const a={id:s,terms:[]};e(a,t);for(const t of a.terms){await o(t,i.vocabApi)}return a}export{d as componentInit,r as dataDownloadInit,u as getPlotConfig};
@@ -1 +1 @@
1
- import{a as e,m as t,c as n,d as i,i as o,f as s,e as r}from"./uiUtils-f1bd2bcc.js";import{j as a,aT as l}from"./app-b369b169.js";import{T as c}from"./toggleButtons-dbdbad01.js";import{appInit as d}from"./app-649f8357.js";import"./tslib.es6-c3c2d88f.js";import"./recover-49e09de0.js";import"./termsetting-33ea66f1.js";import"path";import"./FilterRxComp-701a1480.js";import"./table-29d5a973.js";import"./partjson.esm-b3f1fc21.js";import"./termdb.bins-8b656cc3.js";import"./FilterStateless-54c0b763.js";import"./app-3320ab6f.js";import"./termInfo-bf99a37e.js";import"./genesearch-a4e19f0d.js";import"./checkbox-96437f4d.js";import"./rehydrateFilter-12d118cb.js";import"./sampleScatter-2d0ed680.js";import"./controls-287e6efa.js";import"./controls.btns-79b805dd.js";import"./controls.config-28d6d6a8.js";import"./zoom-25dce8b9.js";import"./pointer-c7475677.js";import"./nodrag-16ad4b03.js";import"./lasso-f767f634.js";import"./drag-7b30ba17.js";import"./downloadTextfile-5723af95.js";import"./sampleView-484ab133.js";import"./select2Terms-b21e184a.js";import"./svg.download-35926549.js";import"./sampleScatter.rendererThree-0b12ac61.js";import"./axis-747c801e.js";import"./line-264f8f9e.js";import"./constant-426a1483.js";import"./summary-5ec455d3.js";import"./violin-2ba509eb.js";import"./violin.renderer-ce024265.js";import"./brush-aa175142.js";import"./basis-3870f5ba.js";import"./log-99af3443.js";import"./html.legend-a3f4ebfe.js";import"./violin.interactivity-4da6d7a9.js";import"./niceNumLabels-238aabce.js";import"./barchart-8277ed43.js";import"./bars.settings-64bb4642.js";import"./bars.renderer-dcfdd59b.js";import"./svg.legend-8d490df2.js";import"./barchart.events-da29c90d.js";function p(e){const t={};const n=e.trim().split(/\r?\n/);const i=n[0].split("\t");const o=i.findIndex((e=>e.toLowerCase().includes("term_id")));const s=i.findIndex((e=>e.toLowerCase().includes("variable")));if(o!=-1)r(n,i);if(s!=-1)a(n,i);if(s==-1&&o==-1){throw`Unrecognized file format. Please check the header names.`}function r(e,n){const i=n.findIndex((e=>e.toLowerCase().includes("parent_id")));if(i==-1){throw`Missing required 'parent_id' header`}const s=n.findIndex((e=>e.toLowerCase().includes("name")));if(s==-1){throw`Missing required 'Name' header`}const r=n.findIndex((e=>e.toLowerCase().includes("type")));if(r==-1){throw`Missing required 'Type' header`}const a=n.findIndex((e=>e.toLowerCase().includes("values")));if(a==-1){throw`Missing required 'Values' header`}if(i==-1||s==-1||r==-1||a==-1){throw`Missing required header(s)`}const l=new Set;for(const[n,c]of e.entries()){if(n===0)continue;const e=n+1;try{const n=c.split("\t");for(const[t,i]of n.entries()){const n=t+1;let o;if(t==a)continue;if(i==""||i=="-"){o=true;throw`Blank or '-' entered for line ${e}, column ${n}`}if(o==true)throw`Invalid entry for line ${e}, column ${n}`}const d=n[o];const p=n[r];t[d]={id:d,name:n[s].trim().replace(/"/g,""),parent_id:n[i]!="root"?n[i]:null,type:n[r]!="non graphable"?n[r]:null};l.add(t[d].parent_id);if(p=="categorical"){t[d].values={}}const f=n[a].trim().replace(/"/g,"").split(";");for(const n of f){const i=n.trim();if(i=="")continue;const o=i.split("=");const s=o.shift();const r=o.join("=");if(!r)throw`Values="${i}" in line ${e} not in a key = value format.`;if(!t[d].values)t[d].values={};t[d].values[s]={label:r}}const m=Object.keys(t[d].values).length;t[d].groupsetting={disabled:m<3};u(t[d])}catch(t){throw`Line ${e} error: ${t}`}}for(const e in t)t[e].isleaf=!l.has(t[e].id)}function a(e,n){if(s==-1){throw`Missing required 'Variable' header`}const i=n.findIndex((e=>e.toLowerCase().includes("type")));if(i==-1){throw`Missing required 'Type' header`}const o=n.findIndex((e=>e.toLowerCase().includes("categories")));const r=n.map(((e,t)=>e.toLowerCase().includes("level_")?t:-1)).filter((e=>e!=-1));if(!r.length)r.push(s);const a=n.findIndex((e=>e.toLowerCase().includes("additional attributes")));const l={};const c=new Set;const d=new Map;d.set(null,[]);for(const[n,p]of e.entries()){if(n===0)continue;const e=n+1;try{const n=p.split("\t");const m=r.map((e=>n[e].trim().replace(/"/g,""))).filter((e=>e!="-"));if(m.length!=new Set(m).size){throw`Non-unique levels in line ${e}: ${JSON.stringify(m)}`}for(const[e,t]of m.entries()){if(e==0){if(d.get(null).indexOf(t)==-1)d.get(null).push(t)}if(e!=m.length-1){if(!d.has(t))d.set(t,[])}for(const n of m){if(e==m.indexOf(n)-1){if(d.get(t).indexOf(n)==-1)d.get(t).push(n)}}}const u=m.pop();const b=n.indexOf("-");if(b!=-1&&b<n.indexOf(u)){throw`Blank or '-' value detected between levels in line ${e}`}const y=f(n[i],n[o],n[a],e,u);const h=n[s]||u;if(h in t){const n=t[h];throw`Error: Multiple config rows for term.id='${h}': lines# ${n.lineNum} and ${e}`}t[h]={id:h,name:u,type:y.type,values:y.values,groupsetting:y.groupsetting,ancestry:m.slice(),parent_name:m.pop()||null,lineNum:e,additionalAttributes:y.attributes};l[u]=h;c.add(t[h].parent_name)}catch(t){throw`Line ${e} error: ${t}`}}m(l,t,c);for(const e in t){const n=t[e];n.child_order=d.get(n.parent_name).indexOf(n.name)+1;n.isleaf=!c.has(n.name);n.parent_id=l[n.parent_name]||null;delete n.parent_name;delete n.lineNum;delete n.ancestry}}return{terms:Object.values(t)}}function f(e,t,n,i,o){if(!e)throw`No type provided for variable: ${o} on line ${i}`;const s={type:e,values:t==""||t==undefined?{}:JSON.parse(t),attributes:n==""||n==undefined?{}:JSON.parse(n)};u(s);if(s.type=="categorical"){const e=Object.keys(s.values).length;s.groupsetting={disabled:e<3}}return s}function m(e,t,n,i){for(const i in t){const o=t[i];for(const[i,s]of o.ancestry.entries()){if(s in e){const n=e[s];const r=t[n];if(i-1<0&&r.parent_name||r.parent_name!=o.ancestry[i-1]){throw`Different parents for term=${s}, '${o.ancestry[i-1]}' and '${r.parent_name}'`}continue}t[s]={id:s,name:s,isleaf:false,ancestry:o.ancestry.slice(0,i)};t[s].parent_name=t[s].ancestry.slice(-1)[0]||null;e[s]=s;n.add(s)}}}function u(e){if(e.type!="integer"&&e.type!="float")return;if(!e.values)return;if(typeof e.values!="object")throw"numeric .values{} is not object";for(const t in e.values){if(t=="")throw"Cannot use empty string as an uncomputable category";const n=Number(t);if(Number.isNaN(n)){throw`Uncomputable category of a numeric term is required to be a number (here uses non-numeric value of ${t}).`}e.values[t].uncomputable=true}}function b(t,n){const i=t.append("div").style("margin","20px 20px 20px 40px").style("font-family","'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif").style("place-items","center left").style("overflow","hidden").classed("sjpp-app-ui",true);const o={};y(i);h(i,"Data Dictionary");const s=i.append("div").style("margin-left","2vw");g(s,o);const r=i.append("div").style("display","flex").style("align-items","center").style("margin","40px 0px 40px 130px");x(r,o,i,t);e(r,o,".databrowser_input");if(n)window.doms=o;return o}function y(e){e.append("div").style("margin","10px").style("opacity","0.65").html(`\n\t\t\t<ul>\n <li>\n Please see the <a href="https://github.com/stjude/proteinpaint/wiki/Data-Browser" target="_blank">documentation</a> for more information.\n </li>\n\t\t\t\t<li>\n\t\t\t\t\tDownload an example data dictionary <a href="https://proteinpaint.stjude.org/ppdemo/databrowser/dictionaryDemoData.tar.gz" target="_self" "download>here</a>.\n\t\t\t\t</li>\n </ul>`)}function h(e,n){const i=t(e,n);i.style("font-size","1.5em").style("color","#003366").style("margin","20px 10px 40px 10px").classed("sjpp-databrowser-section-header",true);const o=e.append("hr");o.style("color","ligthgrey").style("margin","-30px 0px 15px 0px").style("width","50vw").style("opacity","0.4")}function g(e,n){const i=[{label:"Select File",active:true,width:95,callback:async(e,t)=>{t.contentHolder.style("border","none").style("display","block");l(t.contentHolder);t.contentHolder.append("div").html(`<p style="margin-left: 10px; opacity: 0.65;">Select a file from your computer.</p>`);v(t.contentHolder,n);delete t.callback}},{label:"Paste Data",active:false,width:95,callback:async(e,t)=>{t.contentHolder.style("border","none").style("display","block");l(t.contentHolder);t.contentHolder.append("div").html(`<p style="margin-left: 10px; opacity: 0.65;">Paste data dictionary or phenotree in a tab delimited format.</p>`);j(t.contentHolder,n);delete t.callback}},{label:"File Path",active:false,width:95,callback:async(e,i)=>{i.contentHolder.style("border","none").style("display","block");l(i.contentHolder);i.contentHolder.append("div").html(`<p style="margin-left: 10px; opacity: 0.65;">Provide a URL file path.</p>`);t(i.contentHolder,"URL");w(i.contentHolder,n);delete i.callback}}];new c({holder:e,tabs:i}).main()}function w(e,t){const n=e.append("div").style("display","inline-block");const s=i(n).style("border","1px solid rgb(138, 177, 212)").classed("databrowser_input",true).on("keyup",(async()=>{const e=s.property("value").trim();if(o(e)){await fetch(e).then((e=>e.text())).then((e=>{t.data=p(e)}))}}))}function v(e,t){const n=e.append("div").style("display","inline-block");const i=s(n).classed("databrowser_input",true);i.on("change",(e=>{const n=e.target.files[0];const i=new FileReader;i.onload=e=>{t.data=p(e.target.result)};i.readAsText(n,"utf8")}))}function j(e,t){const n=e.append("div").style("display","block");const i=r({div:n,rows:10}).style("border","1px solid rgb(138, 177, 212)").style("margin","0px 0px 0px 20px").classed("databrowser_input",true).on("keyup",(async()=>{t.data=p(i.property("value").trim())}))}function x(e,t,i,o){const s=n({div:e,text:"Create Data Browser",color:"white",backgroundColor:"#001aff",border:"2px solid #001aff"});const r=e.append("div");s.style("margin-right","10px").style("font-size","16px").classed("sjpp-ui-submitBtn",true).attr("type","submit").on("click",(()=>{if(!t.data||t.data==undefined){const e=r.append("div").style("display","inline-block").style("max-width","20vw");a(e,"Please provide data");setTimeout((()=>e.remove()),3e3)}else{i.remove();d({holder:o,state:{vocab:{terms:t.data.terms},plots:[{chartType:"dictionary"}]}})}}))}export{b as init_databrowserUI};
1
+ import{a as e,m as t,c as n,d as i,i as o,f as s,e as r}from"./uiUtils-ff2d4a6a.js";import{j as a,aT as l}from"./app-2cd97738.js";import{T as c}from"./toggleButtons-04c5ad7c.js";import{appInit as d}from"./app-f031940d.js";import"./tslib.es6-c3c2d88f.js";import"./recover-74f2e965.js";import"./termsetting-ad8c4f3a.js";import"path";import"./FilterRxComp-0f35b322.js";import"./table-f50a9344.js";import"./partjson.esm-b3f1fc21.js";import"./termdb.bins-01e8cce6.js";import"./FilterStateless-b1c6ee04.js";import"./app-686b9547.js";import"./termInfo-d0a9e65f.js";import"./genesearch-41cb55ce.js";import"./checkbox-96437f4d.js";import"./rehydrateFilter-12d118cb.js";import"./sampleScatter-97917406.js";import"./controls-3c1691d7.js";import"./controls.btns-5b1240c8.js";import"./controls.config-81cd5749.js";import"./zoom-d6ef6f3f.js";import"./pointer-c7475677.js";import"./nodrag-ab7d5a9f.js";import"./lasso-e8b9500e.js";import"./drag-d8daa62f.js";import"./downloadTextfile-5723af95.js";import"./sampleView-f86dc5ea.js";import"./select2Terms-d4f6ed9e.js";import"./svg.download-e89a7369.js";import"./sampleScatter.rendererThree-4649d1ec.js";import"./axis-747c801e.js";import"./line-264f8f9e.js";import"./constant-426a1483.js";import"./summary-0624f5e6.js";import"./violin-e647aac9.js";import"./violin.renderer-e29d2700.js";import"./brush-bb4ae2fb.js";import"./basis-3870f5ba.js";import"./log-4d84c357.js";import"./html.legend-fac5cb07.js";import"./violin.interactivity-30a239fe.js";import"./niceNumLabels-5f45218a.js";import"./barchart-3c5d734c.js";import"./bars.settings-64bb4642.js";import"./bars.renderer-b232d882.js";import"./svg.legend-c93f2980.js";import"./barchart.events-df44e666.js";function p(e){const t={};const n=e.trim().split(/\r?\n/);const i=n[0].split("\t");const o=i.findIndex((e=>e.toLowerCase().includes("term_id")));const s=i.findIndex((e=>e.toLowerCase().includes("variable")));if(o!=-1)r(n,i);if(s!=-1)a(n,i);if(s==-1&&o==-1){throw`Unrecognized file format. Please check the header names.`}function r(e,n){const i=n.findIndex((e=>e.toLowerCase().includes("parent_id")));if(i==-1){throw`Missing required 'parent_id' header`}const s=n.findIndex((e=>e.toLowerCase().includes("name")));if(s==-1){throw`Missing required 'Name' header`}const r=n.findIndex((e=>e.toLowerCase().includes("type")));if(r==-1){throw`Missing required 'Type' header`}const a=n.findIndex((e=>e.toLowerCase().includes("values")));if(a==-1){throw`Missing required 'Values' header`}if(i==-1||s==-1||r==-1||a==-1){throw`Missing required header(s)`}const l=new Set;for(const[n,c]of e.entries()){if(n===0)continue;const e=n+1;try{const n=c.split("\t");for(const[t,i]of n.entries()){const n=t+1;let o;if(t==a)continue;if(i==""||i=="-"){o=true;throw`Blank or '-' entered for line ${e}, column ${n}`}if(o==true)throw`Invalid entry for line ${e}, column ${n}`}const d=n[o];const p=n[r];t[d]={id:d,name:n[s].trim().replace(/"/g,""),parent_id:n[i]!="root"?n[i]:null,type:n[r]!="non graphable"?n[r]:null};l.add(t[d].parent_id);if(p=="categorical"){t[d].values={}}const f=n[a].trim().replace(/"/g,"").split(";");for(const n of f){const i=n.trim();if(i=="")continue;const o=i.split("=");const s=o.shift();const r=o.join("=");if(!r)throw`Values="${i}" in line ${e} not in a key = value format.`;if(!t[d].values)t[d].values={};t[d].values[s]={label:r}}const m=Object.keys(t[d].values).length;t[d].groupsetting={disabled:m<3};u(t[d])}catch(t){throw`Line ${e} error: ${t}`}}for(const e in t)t[e].isleaf=!l.has(t[e].id)}function a(e,n){if(s==-1){throw`Missing required 'Variable' header`}const i=n.findIndex((e=>e.toLowerCase().includes("type")));if(i==-1){throw`Missing required 'Type' header`}const o=n.findIndex((e=>e.toLowerCase().includes("categories")));const r=n.map(((e,t)=>e.toLowerCase().includes("level_")?t:-1)).filter((e=>e!=-1));if(!r.length)r.push(s);const a=n.findIndex((e=>e.toLowerCase().includes("additional attributes")));const l={};const c=new Set;const d=new Map;d.set(null,[]);for(const[n,p]of e.entries()){if(n===0)continue;const e=n+1;try{const n=p.split("\t");const m=r.map((e=>n[e].trim().replace(/"/g,""))).filter((e=>e!="-"));if(m.length!=new Set(m).size){throw`Non-unique levels in line ${e}: ${JSON.stringify(m)}`}for(const[e,t]of m.entries()){if(e==0){if(d.get(null).indexOf(t)==-1)d.get(null).push(t)}if(e!=m.length-1){if(!d.has(t))d.set(t,[])}for(const n of m){if(e==m.indexOf(n)-1){if(d.get(t).indexOf(n)==-1)d.get(t).push(n)}}}const u=m.pop();const y=n.indexOf("-");if(y!=-1&&y<n.indexOf(u)){throw`Blank or '-' value detected between levels in line ${e}`}const b=f(n[i],n[o],n[a],e,u);const h=n[s]||u;if(h in t){const n=t[h];throw`Error: Multiple config rows for term.id='${h}': lines# ${n.lineNum} and ${e}`}t[h]={id:h,name:u,type:b.type,values:b.values,groupsetting:b.groupsetting,ancestry:m.slice(),parent_name:m.pop()||null,lineNum:e,additionalAttributes:b.attributes};l[u]=h;c.add(t[h].parent_name)}catch(t){throw`Line ${e} error: ${t}`}}m(l,t,c);for(const e in t){const n=t[e];n.child_order=d.get(n.parent_name).indexOf(n.name)+1;n.isleaf=!c.has(n.name);n.parent_id=l[n.parent_name]||null;delete n.parent_name;delete n.lineNum;delete n.ancestry}}return{terms:Object.values(t)}}function f(e,t,n,i,o){if(!e)throw`No type provided for variable: ${o} on line ${i}`;const s={type:e,values:t==""||t==undefined?{}:JSON.parse(t),attributes:n==""||n==undefined?{}:JSON.parse(n)};u(s);if(s.type=="categorical"){const e=Object.keys(s.values).length;s.groupsetting={disabled:e<3}}return s}function m(e,t,n,i){for(const i in t){const o=t[i];for(const[i,s]of o.ancestry.entries()){if(s in e){const n=e[s];const r=t[n];if(i-1<0&&r.parent_name||r.parent_name!=o.ancestry[i-1]){throw`Different parents for term=${s}, '${o.ancestry[i-1]}' and '${r.parent_name}'`}continue}t[s]={id:s,name:s,isleaf:false,ancestry:o.ancestry.slice(0,i)};t[s].parent_name=t[s].ancestry.slice(-1)[0]||null;e[s]=s;n.add(s)}}}function u(e){if(e.type!="integer"&&e.type!="float")return;if(!e.values)return;if(typeof e.values!="object")throw"numeric .values{} is not object";for(const t in e.values){if(t=="")throw"Cannot use empty string as an uncomputable category";const n=Number(t);if(Number.isNaN(n)){throw`Uncomputable category of a numeric term is required to be a number (here uses non-numeric value of ${t}).`}e.values[t].uncomputable=true}}function y(t,n){const i=t.append("div").style("margin","20px 20px 20px 40px").style("font-family","'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif").style("place-items","center left").style("overflow","hidden").classed("sjpp-app-ui",true);const o={};b(i);h(i,"Data Dictionary");const s=i.append("div").style("margin-left","2vw");g(s,o);const r=i.append("div").style("display","flex").style("align-items","center").style("margin","40px 0px 40px 130px");x(r,o,i,t);e(r,o,".databrowser_input");if(n)window.doms=o;return o}function b(e){e.append("div").style("margin","10px").style("opacity","0.65").html(`\n\t\t\t<ul>\n <li>\n Please see the <a href="https://github.com/stjude/proteinpaint/wiki/Data-Browser" target="_blank">documentation</a> for more information.\n </li>\n\t\t\t\t<li>\n\t\t\t\t\tDownload an example data dictionary <a href="https://proteinpaint.stjude.org/ppdemo/databrowser/dictionaryDemoData.tar.gz" target="_self" "download>here</a>.\n\t\t\t\t</li>\n </ul>`)}function h(e,n){const i=t(e,n);i.style("font-size","1.5em").style("color","#003366").style("margin","20px 10px 40px 10px").classed("sjpp-databrowser-section-header",true);const o=e.append("hr");o.style("color","ligthgrey").style("margin","-30px 0px 15px 0px").style("width","50vw").style("opacity","0.4")}function g(e,n){const i=[{label:"Select File",active:true,width:95,callback:async(e,t)=>{t.contentHolder.style("border","none").style("display","block");l(t.contentHolder);t.contentHolder.append("div").html(`<p style="margin-left: 10px; opacity: 0.65;">Select a file from your computer.</p>`);v(t.contentHolder,n);delete t.callback}},{label:"Paste Data",active:false,width:95,callback:async(e,t)=>{t.contentHolder.style("border","none").style("display","block");l(t.contentHolder);t.contentHolder.append("div").html(`<p style="margin-left: 10px; opacity: 0.65;">Paste data dictionary or phenotree in a tab delimited format.</p>`);j(t.contentHolder,n);delete t.callback}},{label:"File Path",active:false,width:95,callback:async(e,i)=>{i.contentHolder.style("border","none").style("display","block");l(i.contentHolder);i.contentHolder.append("div").html(`<p style="margin-left: 10px; opacity: 0.65;">Provide a URL file path.</p>`);t(i.contentHolder,"URL");w(i.contentHolder,n);delete i.callback}}];new c({holder:e,tabs:i}).main()}function w(e,t){const n=e.append("div").style("display","inline-block");const s=i(n).style("border","1px solid rgb(138, 177, 212)").classed("databrowser_input",true).on("keyup",(async()=>{const e=s.property("value").trim();if(o(e)){await fetch(e).then((e=>e.text())).then((e=>{t.data=p(e)}))}}))}function v(e,t){const n=e.append("div").style("display","inline-block");const i=s(n).classed("databrowser_input",true);i.on("change",(e=>{const n=e.target.files[0];const i=new FileReader;i.onload=e=>{t.data=p(e.target.result)};i.readAsText(n,"utf8")}))}function j(e,t){const n=e.append("div").style("display","block");const i=r({div:n,rows:10}).style("border","1px solid rgb(138, 177, 212)").style("margin","0px 0px 0px 20px").classed("databrowser_input",true).on("keyup",(async()=>{t.data=p(i.property("value").trim())}))}function x(e,t,i,o){const s=n({div:e,text:"Create Data Browser",color:"white",backgroundColor:"#001aff",border:"2px solid #001aff"});const r=e.append("div");s.style("margin-right","10px").style("font-size","16px").classed("sjpp-ui-submitBtn",true).attr("type","submit").on("click",(()=>{if(!t.data||t.data==undefined){const e=r.append("div").style("display","inline-block").style("max-width","20vw");a(e,"Please provide data");setTimeout((()=>e.remove()),3e3)}else{i.remove();d({holder:o,state:{vocab:{terms:t.data.terms},plots:[{chartType:"dictionary"}]}})}}))}export{y as init_databrowserUI};
@@ -1 +1 @@
1
- import{_ as e}from"./tslib.es6-c3c2d88f.js";import{I as t,d as s}from"./app-b369b169.js";import{g as n,a as i}from"./termdb.bins-8b656cc3.js";import{d as a}from"./drag-7b30ba17.js";import{p as o}from"./pointer-c7475677.js";import"./nodrag-16ad4b03.js";function r(s){return e(this,void 0,void 0,(function*(){if(!s.num_obj)throw`Missing density data [density.ts setDensityPlot()]`;const e=s.num_obj;if(e.density_data.maxvalue==e.density_data.minvalue){d(s);e.brushes.forEach((t=>{if(t.range.stop>e.density_data.minvalue)t.init()}))}else{s.q.mode=="spline"?s.dom.knots_div:s.dom.bins_div;s.vr.render();s.num_obj.binsize_g=s.num_obj.svg.append("g").attr("transform",`translate(${e.plot_size.xpad}, ${e.plot_size.ypad})`).attr("class","binsize_g");const n=e.density_data.maxvalue;const i=e.density_data.minvalue;s.num_obj.xscale=t().domain([i,n]).range([e.plot_size.xpad,e.plot_size.width+e.plot_size.xpad]);s.num_obj.ranges=[];if(s.q.first_bin){s.num_obj.ranges.push(s.q.first_bin);s.num_obj.ranges[0].bin="first"}if(s.q.last_bin){s.num_obj.ranges.push(s.q.last_bin);s.num_obj.ranges[1].bin="last"}s.num_obj.brushes=[];l(s,s.q)}s.renderBinLines=l}))}function d(e){e.num_obj.no_density_data=true;e.num_obj.ranges=[];if(e.q.first_bin){e.num_obj.ranges.push(e.q.first_bin);e.num_obj.ranges[0].bin="first"}if(e.q.last_bin){e.num_obj.ranges.push(e.q.last_bin);e.num_obj.ranges[1].bin="last"}e.num_obj.brushes=[];const t=e.num_obj.brushes;if(!e.num_obj.custom_bins_q){return}for(const s of e.num_obj.ranges.values()){const n=t.find((e=>e.orig===s));let i;if(!n){i={orig:s,range:JSON.parse(JSON.stringify(s))};t.push(i)}else{i=n}const a=e.num_obj.custom_bins_q;const o=e.num_obj.density_data.maxvalue;const r=e.num_obj.density_data.minvalue;const d=a.lst||[];if(d.length==0){const t=(o+r)/2;const s={startunbounded:true,stop:t,stopinclusive:true,name:"First bin"};const n={start:t,stopunbounded:true,startinclusive:false,name:"Last bin"};d.push(s);d.push(n);e.num_obj.custom_bins_q.lst=d}}}function l(e,t){const r=e.num_obj;if(!r.density_data)throw`Missing .density_data [density.ts, renderBinLines()]`;const d=Math.round(r.xscale(r.density_data.minvalue));const l=Math.round(r.xscale(r.density_data.maxvalue));const u=[];if(t.mode=="discrete"&&t.type=="regular-bin"){const e=r.density_data.maxvalue+Math.abs(t.first_bin.stop)-Math.min(r.density_data.minvalue,0);let s=0;for(let n=t.first_bin.stop;n<=e;n=n+t.bin_size){u.push({x:n,index:s,scaledX:Math.round(r.xscale(n))});s++}const n=u.slice().reverse().find((e=>e.scaledX<=l));if(t.last_bin&&t.last_bin.start&&t.last_bin.start!==n.x){u.push({x:t.last_bin.start,index:s,scaledX:Math.round(r.xscale(t.last_bin.start))})}}else if(t.mode=="discrete"&&t.type=="custom-bin"||t.mode=="binary"){u.push(...t.lst.slice(1).map(((e,t)=>({x:e.start,index:t,scaledX:Math.round(r.xscale(e.start))}))))}else if(t.mode=="spline"){u.push(...t.knots.map(((e,t)=>({x:e.value,index:t,scaledX:Math.round(r.xscale(e.value))}))))}u.forEach(((t,s)=>{t.isDraggable=e.q.type=="custom-bin"||e.q.mode=="spline"||s===0||e.q.last_bin&&e.q.last_bin.start===t.x&&t.index==u.length-1}));e.num_obj.binsize_g.selectAll("line").remove();const c=u.length==1?u[0]:u.slice().reverse().find((e=>e.scaledX<l));let m=c?Math.min(l,c.scaledX):l;e.num_obj.binsize_g.selectAll("line").data(u).enter().append("line").style("stroke",(e=>e.isDraggable?"#cc0000":"#555")).style("stroke-width",1).attr("x1",(e=>e.scaledX)).attr("y1",0).attr("x2",(e=>e.scaledX)).attr("y2",r.plot_size.height).style("cursor",(e=>e.isDraggable?"ew-resize":"")).style("display",(e=>!e.isDraggable&&e.scaledX>m?"none":"")).on("mouseover",(function(t){if(e.q.type!="regular-bin"||t.isDraggable)s(this).style("stroke-width",3)})).on("mouseout",(function(){s(this).style("stroke-width",1)})).each((function(e){if(e.isDraggable){const e=a().on("drag",g).on("end",p);s(this).call(e)}}));const b=e.num_obj.binsize_g.selectAll("line").filter((e=>!e.isDraggable));function g(t,a){const c=o(t,this)[0];if(c<=d||c>=l)return;const g=e.q.type=="regular-bin"?s(this):a.index>0&&c<=u[a.index-1].scaledX?s(this.previousSibling):a.index<u.length-1&&c>=u[a.index+1].scaledX?s(this.nextSibling):s(this);const p=g.datum();p.draggedX=c;g.attr("x1",p.draggedX).attr("y1",0).attr("x2",p.draggedX).attr("y2",r.plot_size.height);const _=+r.xscale.invert(p.draggedX);const f=e.term.type=="integer"?Math.round(_):_.toFixed(3);if(e.q.mode=="discrete"&&e.q.type=="regular-bin"){if(p.index===0){e.dom.first_stop_input.property("value",f);const t=e.q.last_bin?m:l;const n=p.draggedX-p.scaledX;b.each((function(e){e.draggedX=e.scaledX+n;s(this).attr("x1",e.draggedX).attr("y1",0).attr("x2",e.draggedX).attr("y2",r.plot_size.height).style("display",(e=>e.draggedX>=t?"none":""))}));e.q.first_bin.stop=f}else{e.dom.last_start_input.property("value",f);e.q.last_bin.start=f;b.style("display",(e=>p.draggedX&&e.scaledX>=p.draggedX?"none":""))}}else if(e.q.mode=="discrete"&&e.q.type=="custom-bin"||e.q.mode=="binary"){e.q.lst[p.index+1].start=f;e.q.lst[p.index+1].label=n(e.q.lst[p.index+1],e.q);e.q.lst[p.index+1].range=i(e.q.lst[p.index+1],e.q);e.q.lst[p.index].stop=f;e.q.lst[p.index].label=n(e.q.lst[p.index],e.q);e.q.lst[p.index].range=i(e.q.lst[p.index],e.q);if(e.dom.customBinBoundaryInput){e.q.modeBinaryCutoffType="normal";if(e.dom.customBinBoundaryPercentileCheckbox){e.dom.customBinBoundaryPercentileCheckbox.property("checked",false)}e.dom.customBinBoundaryInput.property("value",e.q.lst.slice(1).map((e=>e.start)).join("\n"))}if(e.dom.customBinLabelInput){e.dom.customBinLabelInput.property("value",(e=>e.label))}if(e.dom.customBinRanges){e.dom.customBinRanges.html((e=>e.range))}}else if(e.q.mode=="spline"){e.q.knots[p.index].value=f;if(e.dom.customKnotsInput){e.dom.customKnotsInput.property("value",e.q.knots.map((e=>e.value)).join("\n"))}}else{throw"Dragging not allowed for this term type"}}function p(t,n){const i=o(t,this)[0];const a=e.q.type=="regular-bin"?s(this):n.index>0&&i<=u[n.index-1].scaledX?s(this.previousSibling):n.index<u.length-1&&i>=u[n.index+1].scaledX?s(this.nextSibling):s(this);const d=a.datum();d.scaledX=d.draggedX;d.x=+r.xscale.invert(d.draggedX).toFixed(e.term.type=="integer"?0:3);if(e.q.mode=="discrete"&&e.q.type=="regular-bin"){if(d.index===0){e.q.first_bin.stop=d.x;b.each((function(t){t.scaledX=t.draggedX;t.x=+r.xscale.invert(t.draggedX).toFixed(e.term.type=="integer"?0:3)}))}else{e.q.last_bin.start=d.x}m=u.slice().reverse().find((e=>e.scaledX<l)).scaledX}else if(e.q.mode=="discrete"&&e.q.type=="custom-bin"){e.q.lst[d.index+1].start=d.x;e.q.lst[d.index].stop=d.x}else if(e.q.mode=="spline"){e.q.knots[d.index].value=d.x}}}export{r as setDensityPlot};
1
+ import{_ as e}from"./tslib.es6-c3c2d88f.js";import{I as t,d as s}from"./app-2cd97738.js";import{g as n,a as i}from"./termdb.bins-01e8cce6.js";import{d as a}from"./drag-d8daa62f.js";import{p as o}from"./pointer-c7475677.js";import"./nodrag-ab7d5a9f.js";function r(s){return e(this,void 0,void 0,(function*(){if(!s.num_obj)throw`Missing density data [density.ts setDensityPlot()]`;const e=s.num_obj;if(e.density_data.maxvalue==e.density_data.minvalue){d(s);e.brushes.forEach((t=>{if(t.range.stop>e.density_data.minvalue)t.init()}))}else{s.q.mode=="spline"?s.dom.knots_div:s.dom.bins_div;s.vr.render();s.num_obj.binsize_g=s.num_obj.svg.append("g").attr("transform",`translate(${e.plot_size.xpad}, ${e.plot_size.ypad})`).attr("class","binsize_g");const n=e.density_data.maxvalue;const i=e.density_data.minvalue;s.num_obj.xscale=t().domain([i,n]).range([e.plot_size.xpad,e.plot_size.width+e.plot_size.xpad]);s.num_obj.ranges=[];if(s.q.first_bin){s.num_obj.ranges.push(s.q.first_bin);s.num_obj.ranges[0].bin="first"}if(s.q.last_bin){s.num_obj.ranges.push(s.q.last_bin);s.num_obj.ranges[1].bin="last"}s.num_obj.brushes=[];l(s,s.q)}s.renderBinLines=l}))}function d(e){e.num_obj.no_density_data=true;e.num_obj.ranges=[];if(e.q.first_bin){e.num_obj.ranges.push(e.q.first_bin);e.num_obj.ranges[0].bin="first"}if(e.q.last_bin){e.num_obj.ranges.push(e.q.last_bin);e.num_obj.ranges[1].bin="last"}e.num_obj.brushes=[];const t=e.num_obj.brushes;if(!e.num_obj.custom_bins_q){return}for(const s of e.num_obj.ranges.values()){const n=t.find((e=>e.orig===s));let i;if(!n){i={orig:s,range:JSON.parse(JSON.stringify(s))};t.push(i)}else{i=n}const a=e.num_obj.custom_bins_q;const o=e.num_obj.density_data.maxvalue;const r=e.num_obj.density_data.minvalue;const d=a.lst||[];if(d.length==0){const t=(o+r)/2;const s={startunbounded:true,stop:t,stopinclusive:true,name:"First bin"};const n={start:t,stopunbounded:true,startinclusive:false,name:"Last bin"};d.push(s);d.push(n);e.num_obj.custom_bins_q.lst=d}}}function l(e,t){const r=e.num_obj;if(!r.density_data)throw`Missing .density_data [density.ts, renderBinLines()]`;const d=Math.round(r.xscale(r.density_data.minvalue));const l=Math.round(r.xscale(r.density_data.maxvalue));const u=[];if(t.mode=="discrete"&&t.type=="regular-bin"){const e=r.density_data.maxvalue+Math.abs(t.first_bin.stop)-Math.min(r.density_data.minvalue,0);let s=0;for(let n=t.first_bin.stop;n<=e;n=n+t.bin_size){u.push({x:n,index:s,scaledX:Math.round(r.xscale(n))});s++}const n=u.slice().reverse().find((e=>e.scaledX<=l));if(t.last_bin&&t.last_bin.start&&t.last_bin.start!==n.x){u.push({x:t.last_bin.start,index:s,scaledX:Math.round(r.xscale(t.last_bin.start))})}}else if(t.mode=="discrete"&&t.type=="custom-bin"||t.mode=="binary"){u.push(...t.lst.slice(1).map(((e,t)=>({x:e.start,index:t,scaledX:Math.round(r.xscale(e.start))}))))}else if(t.mode=="spline"){u.push(...t.knots.map(((e,t)=>({x:e.value,index:t,scaledX:Math.round(r.xscale(e.value))}))))}u.forEach(((t,s)=>{t.isDraggable=e.q.type=="custom-bin"||e.q.mode=="spline"||s===0||e.q.last_bin&&e.q.last_bin.start===t.x&&t.index==u.length-1}));e.num_obj.binsize_g.selectAll("line").remove();const c=u.length==1?u[0]:u.slice().reverse().find((e=>e.scaledX<l));let m=c?Math.min(l,c.scaledX):l;e.num_obj.binsize_g.selectAll("line").data(u).enter().append("line").style("stroke",(e=>e.isDraggable?"#cc0000":"#555")).style("stroke-width",1).attr("x1",(e=>e.scaledX)).attr("y1",0).attr("x2",(e=>e.scaledX)).attr("y2",r.plot_size.height).style("cursor",(e=>e.isDraggable?"ew-resize":"")).style("display",(e=>!e.isDraggable&&e.scaledX>m?"none":"")).on("mouseover",(function(t){if(e.q.type!="regular-bin"||t.isDraggable)s(this).style("stroke-width",3)})).on("mouseout",(function(){s(this).style("stroke-width",1)})).each((function(e){if(e.isDraggable){const e=a().on("drag",g).on("end",p);s(this).call(e)}}));const b=e.num_obj.binsize_g.selectAll("line").filter((e=>!e.isDraggable));function g(t,a){const c=o(t,this)[0];if(c<=d||c>=l)return;const g=e.q.type=="regular-bin"?s(this):a.index>0&&c<=u[a.index-1].scaledX?s(this.previousSibling):a.index<u.length-1&&c>=u[a.index+1].scaledX?s(this.nextSibling):s(this);const p=g.datum();p.draggedX=c;g.attr("x1",p.draggedX).attr("y1",0).attr("x2",p.draggedX).attr("y2",r.plot_size.height);const _=+r.xscale.invert(p.draggedX);const f=e.term.type=="integer"?Math.round(_):_.toFixed(3);if(e.q.mode=="discrete"&&e.q.type=="regular-bin"){if(p.index===0){e.dom.first_stop_input.property("value",f);const t=e.q.last_bin?m:l;const n=p.draggedX-p.scaledX;b.each((function(e){e.draggedX=e.scaledX+n;s(this).attr("x1",e.draggedX).attr("y1",0).attr("x2",e.draggedX).attr("y2",r.plot_size.height).style("display",(e=>e.draggedX>=t?"none":""))}));e.q.first_bin.stop=f}else{e.dom.last_start_input.property("value",f);e.q.last_bin.start=f;b.style("display",(e=>p.draggedX&&e.scaledX>=p.draggedX?"none":""))}}else if(e.q.mode=="discrete"&&e.q.type=="custom-bin"||e.q.mode=="binary"){e.q.lst[p.index+1].start=f;e.q.lst[p.index+1].label=n(e.q.lst[p.index+1],e.q);e.q.lst[p.index+1].range=i(e.q.lst[p.index+1],e.q);e.q.lst[p.index].stop=f;e.q.lst[p.index].label=n(e.q.lst[p.index],e.q);e.q.lst[p.index].range=i(e.q.lst[p.index],e.q);if(e.dom.customBinBoundaryInput){e.q.modeBinaryCutoffType="normal";if(e.dom.customBinBoundaryPercentileCheckbox){e.dom.customBinBoundaryPercentileCheckbox.property("checked",false)}e.dom.customBinBoundaryInput.property("value",e.q.lst.slice(1).map((e=>e.start)).join("\n"))}if(e.dom.customBinLabelInput){e.dom.customBinLabelInput.property("value",(e=>e.label))}if(e.dom.customBinRanges){e.dom.customBinRanges.html((e=>e.range))}}else if(e.q.mode=="spline"){e.q.knots[p.index].value=f;if(e.dom.customKnotsInput){e.dom.customKnotsInput.property("value",e.q.knots.map((e=>e.value)).join("\n"))}}else{throw"Dragging not allowed for this term type"}}function p(t,n){const i=o(t,this)[0];const a=e.q.type=="regular-bin"?s(this):n.index>0&&i<=u[n.index-1].scaledX?s(this.previousSibling):n.index<u.length-1&&i>=u[n.index+1].scaledX?s(this.nextSibling):s(this);const d=a.datum();d.scaledX=d.draggedX;d.x=+r.xscale.invert(d.draggedX).toFixed(e.term.type=="integer"?0:3);if(e.q.mode=="discrete"&&e.q.type=="regular-bin"){if(d.index===0){e.q.first_bin.stop=d.x;b.each((function(t){t.scaledX=t.draggedX;t.x=+r.xscale.invert(t.draggedX).toFixed(e.term.type=="integer"?0:3)}))}else{e.q.last_bin.start=d.x}m=u.slice().reverse().find((e=>e.scaledX<l)).scaledX}else if(e.q.mode=="discrete"&&e.q.type=="custom-bin"){e.q.lst[d.index+1].start=d.x;e.q.lst[d.index].stop=d.x}else if(e.q.mode=="spline"){e.q.knots[d.index].value=d.x}}}export{r as setDensityPlot};
@@ -1 +1 @@
1
- import{h as t,P as e}from"./app-b369b169.js";import{appInit as r}from"./app-3320ab6f.js";import"./termsetting-33ea66f1.js";import"./tslib.es6-c3c2d88f.js";import"path";import"./FilterRxComp-701a1480.js";import"./table-29d5a973.js";import"./partjson.esm-b3f1fc21.js";import"./termdb.bins-8b656cc3.js";import"./termInfo-bf99a37e.js";import"./toggleButtons-dbdbad01.js";class s{constructor(t){this.type="tree";this.dom={holder:t.holder.style("padding","20px"),header:t.header}}async init(t){this.tree=await r({vocabApi:this.app.vocabApi,holder:this.dom.holder,state:this.getState(t),tree:{click_term:t=>{const e=t.term||t;this.app.dispatch({type:"plot_create",config:{chartType:e.type=="survival"?"survival":"summary",term:t.term?t:{term:e}}});this.app.dispatch({type:"plot_delete",id:this.id})}}})}getState(t){return{tree:{usecase:{target:"dictionary"}},vocab:t.vocab,activeCohort:t.activeCohort,termfilter:t.termfilter,selectdTerms:t.selectedTerms,customTerms:t.customTerms}}main(){if(this.dom.header)this.dom.header.html("Data Dictionary");this.tree.dispatch({type:"app_refresh",state:this.state})}}const i=t(s);const a=i;function o(t,r){const s={};return e(s,t)}export{a as componentInit,i as dictInit,o as getPlotConfig};
1
+ import{h as t,P as e}from"./app-2cd97738.js";import{appInit as r}from"./app-686b9547.js";import"./termsetting-ad8c4f3a.js";import"./tslib.es6-c3c2d88f.js";import"path";import"./FilterRxComp-0f35b322.js";import"./table-f50a9344.js";import"./partjson.esm-b3f1fc21.js";import"./termdb.bins-01e8cce6.js";import"./termInfo-d0a9e65f.js";import"./toggleButtons-04c5ad7c.js";class s{constructor(t){this.type="tree";this.dom={holder:t.holder.style("padding","20px"),header:t.header}}async init(t){this.tree=await r({vocabApi:this.app.vocabApi,holder:this.dom.holder,state:this.getState(t),tree:{click_term:t=>{const e=t.term||t;this.app.dispatch({type:"plot_create",config:{chartType:e.type=="survival"?"survival":"summary",term:t.term?t:{term:e}}});this.app.dispatch({type:"plot_delete",id:this.id})}}})}getState(t){return{tree:{usecase:{target:"dictionary"}},vocab:t.vocab,activeCohort:t.activeCohort,termfilter:t.termfilter,selectdTerms:t.selectedTerms,customTerms:t.customTerms}}main(){if(this.dom.header)this.dom.header.html("Data Dictionary");this.tree.dispatch({type:"app_refresh",state:this.state})}}const i=t(s);const a=i;function o(t,r){const s={};return e(s,t)}export{a as componentInit,i as dictInit,o as getPlotConfig};
@@ -1 +1 @@
1
- import{n as e,a as t,d as n,b as r,c as u,y as a}from"./nodrag-16ad4b03.js";import{_ as i,d as o}from"./app-b369b169.js";import{p as c}from"./pointer-c7475677.js";var l=e=>()=>e;function f(e,{sourceEvent:t,subject:n,target:r,identifier:u,active:a,x:i,y:o,dx:c,dy:l,dispatch:f}){Object.defineProperties(this,{type:{value:e,enumerable:true,configurable:true},sourceEvent:{value:t,enumerable:true,configurable:true},subject:{value:n,enumerable:true,configurable:true},target:{value:r,enumerable:true,configurable:true},identifier:{value:u,enumerable:true,configurable:true},active:{value:a,enumerable:true,configurable:true},x:{value:i,enumerable:true,configurable:true},y:{value:o,enumerable:true,configurable:true},dx:{value:c,enumerable:true,configurable:true},dy:{value:l,enumerable:true,configurable:true},_:{value:f}})}f.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function s(e){return!e.ctrlKey&&!e.button}function d(){return this.parentNode}function g(e,t){return t==null?{x:e.x,y:e.y}:t}function h(){return navigator.maxTouchPoints||"ontouchstart"in this}function v(){var v=s,b=d,m=g,p=h,y={},x=i("start","drag","end"),w=0,j,T,_,k,E=0;function P(t){t.on("mousedown.drag",X).filter(p).on("touchstart.drag",D).on("touchmove.drag",K,e).on("touchend.drag touchcancel.drag",M).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function X(e,u){if(k||!v.call(this,e,u))return;var a=N(this,b.call(this,e,u),e,u,"mouse");if(!a)return;o(e.view).on("mousemove.drag",Y,t).on("mouseup.drag",q,t);n(e.view);r(e);_=false;j=e.clientX;T=e.clientY;a("start",e)}function Y(e){u(e);if(!_){var t=e.clientX-j,n=e.clientY-T;_=t*t+n*n>E}y.mouse("drag",e)}function q(e){o(e.view).on("mousemove.drag mouseup.drag",null);a(e.view,_);u(e);y.mouse("end",e)}function D(e,t){if(!v.call(this,e,t))return;var n=e.changedTouches,u=b.call(this,e,t),a=n.length,i,o;for(i=0;i<a;++i){if(o=N(this,u,e,t,n[i].identifier,n[i])){r(e);o("start",e,n[i])}}}function K(e){var t=e.changedTouches,n=t.length,r,a;for(r=0;r<n;++r){if(a=y[t[r].identifier]){u(e);a("drag",e,t[r])}}}function M(e){var t=e.changedTouches,n=t.length,u,a;if(k)clearTimeout(k);k=setTimeout((function(){k=null}),500);for(u=0;u<n;++u){if(a=y[t[u].identifier]){r(e);a("end",e,t[u])}}}function N(e,t,n,r,u,a){var i=x.copy(),o=c(a||n,t),l,s,d;if((d=m.call(e,new f("beforestart",{sourceEvent:n,target:P,identifier:u,active:w,x:o[0],y:o[1],dx:0,dy:0,dispatch:i}),r))==null)return;l=d.x-o[0]||0;s=d.y-o[1]||0;return function n(a,g,h){var v=o,b;switch(a){case"start":y[u]=n,b=w++;break;case"end":delete y[u],--w;case"drag":o=c(h||g,t),b=w;break}i.call(a,e,new f(a,{sourceEvent:g,subject:d,target:P,identifier:u,active:b,x:o[0]+l,y:o[1]+s,dx:o[0]-v[0],dy:o[1]-v[1],dispatch:i}),r)}}P.filter=function(e){return arguments.length?(v=typeof e==="function"?e:l(!!e),P):v};P.container=function(e){return arguments.length?(b=typeof e==="function"?e:l(e),P):b};P.subject=function(e){return arguments.length?(m=typeof e==="function"?e:l(e),P):m};P.touchable=function(e){return arguments.length?(p=typeof e==="function"?e:l(!!e),P):p};P.on=function(){var e=x.on.apply(x,arguments);return e===x?P:e};P.clickDistance=function(e){return arguments.length?(E=(e=+e)*e,P):Math.sqrt(E)};return P}export{v as d};
1
+ import{n as e,a as t,d as n,b as r,c as u,y as a}from"./nodrag-ab7d5a9f.js";import{_ as i,d as o}from"./app-2cd97738.js";import{p as c}from"./pointer-c7475677.js";var l=e=>()=>e;function f(e,{sourceEvent:t,subject:n,target:r,identifier:u,active:a,x:i,y:o,dx:c,dy:l,dispatch:f}){Object.defineProperties(this,{type:{value:e,enumerable:true,configurable:true},sourceEvent:{value:t,enumerable:true,configurable:true},subject:{value:n,enumerable:true,configurable:true},target:{value:r,enumerable:true,configurable:true},identifier:{value:u,enumerable:true,configurable:true},active:{value:a,enumerable:true,configurable:true},x:{value:i,enumerable:true,configurable:true},y:{value:o,enumerable:true,configurable:true},dx:{value:c,enumerable:true,configurable:true},dy:{value:l,enumerable:true,configurable:true},_:{value:f}})}f.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function s(e){return!e.ctrlKey&&!e.button}function d(){return this.parentNode}function g(e,t){return t==null?{x:e.x,y:e.y}:t}function h(){return navigator.maxTouchPoints||"ontouchstart"in this}function v(){var v=s,b=d,m=g,p=h,y={},x=i("start","drag","end"),w=0,j,T,_,k,E=0;function P(t){t.on("mousedown.drag",X).filter(p).on("touchstart.drag",D).on("touchmove.drag",K,e).on("touchend.drag touchcancel.drag",M).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function X(e,u){if(k||!v.call(this,e,u))return;var a=N(this,b.call(this,e,u),e,u,"mouse");if(!a)return;o(e.view).on("mousemove.drag",Y,t).on("mouseup.drag",q,t);n(e.view);r(e);_=false;j=e.clientX;T=e.clientY;a("start",e)}function Y(e){u(e);if(!_){var t=e.clientX-j,n=e.clientY-T;_=t*t+n*n>E}y.mouse("drag",e)}function q(e){o(e.view).on("mousemove.drag mouseup.drag",null);a(e.view,_);u(e);y.mouse("end",e)}function D(e,t){if(!v.call(this,e,t))return;var n=e.changedTouches,u=b.call(this,e,t),a=n.length,i,o;for(i=0;i<a;++i){if(o=N(this,u,e,t,n[i].identifier,n[i])){r(e);o("start",e,n[i])}}}function K(e){var t=e.changedTouches,n=t.length,r,a;for(r=0;r<n;++r){if(a=y[t[r].identifier]){u(e);a("drag",e,t[r])}}}function M(e){var t=e.changedTouches,n=t.length,u,a;if(k)clearTimeout(k);k=setTimeout((function(){k=null}),500);for(u=0;u<n;++u){if(a=y[t[u].identifier]){r(e);a("end",e,t[u])}}}function N(e,t,n,r,u,a){var i=x.copy(),o=c(a||n,t),l,s,d;if((d=m.call(e,new f("beforestart",{sourceEvent:n,target:P,identifier:u,active:w,x:o[0],y:o[1],dx:0,dy:0,dispatch:i}),r))==null)return;l=d.x-o[0]||0;s=d.y-o[1]||0;return function n(a,g,h){var v=o,b;switch(a){case"start":y[u]=n,b=w++;break;case"end":delete y[u],--w;case"drag":o=c(h||g,t),b=w;break}i.call(a,e,new f(a,{sourceEvent:g,subject:d,target:P,identifier:u,active:b,x:o[0]+l,y:o[1]+s,dx:o[0]-v[0],dy:o[1]-v[1],dispatch:i}),r)}}P.filter=function(e){return arguments.length?(v=typeof e==="function"?e:l(!!e),P):v};P.container=function(e){return arguments.length?(b=typeof e==="function"?e:l(e),P):b};P.subject=function(e){return arguments.length?(m=typeof e==="function"?e:l(e),P):m};P.touchable=function(e){return arguments.length?(p=typeof e==="function"?e:l(!!e),P):p};P.on=function(){var e=x.on.apply(x,arguments);return e===x?P:e};P.clickDistance=function(e){return arguments.length?(E=(e=+e)*e,P):Math.sqrt(E)};return P}export{v as d};
@@ -1 +1 @@
1
- import{Z as t,j as e,bL as n,M as a,a9 as o,I as r,U as s,d as l,ag as i}from"./app-b369b169.js";import{d as p}from"./tp.ui-9c2e9fc5.js";import{p as c}from"./viridis-01ab20c5.js";import{a as d,b as u}from"./axis-747c801e.js";import"./block.lazyload-87b12654.js";const m="#ccc";function f(n,a){const o=t({x:100,y:100});o.header.text("PCA - expression plot");const r=o.body.append("div").style("margin","20px");const s=o.body.append("div").style("margin","20px");const l=r.append("input").attr("size",30).attr("placeholder","PCA/SNE matrix file path").style("margin","10px").property("value","xiang/sep20/set1");const i=r.append("input").attr("size",30).attr("placeholder","numerical db file path").style("margin","10px").property("value","xiang/sep20/set1.db");r.append("button").text("Submit").on("click",(()=>{s.selectAll("*").remove();const t=l.property("value");if(t==""){s.text("No PCA file");return}const o=i.property("value");if(o==""){s.text("No db file");return}p(n+"/textfile").post(JSON.stringify({file:t,jwt:a}),(t=>{if(t.error){s.text("Error getting file: "+t.error);return}const[r,l]=h({holder:s,text:t.text});if(r){e(s,r);return}b({holder:s.append("div"),numdata2plot:l,hostURL:n,jwt:a,obj:{dbfile:o}})}))}));r.append("button").text("Clear").on("click",(()=>{l.property("value","");i.property("value","")}));r.append("span").style("padding-left","10px").html("<a href=https://docs.google.com/document/d/1Midt0rYs1iIJveUMjeng9si3q31YelcNe_PI3Njce9E/edit?usp=sharing target=_blank>Help</a>")}function h(t){const e=[];const p=t.text.split(/\r?\n/);for(let n=0;n<p.length;n++){const a=p[n];if(!a)continue;const o=a.split("\t");const r=o[0];const s=Number.parseFloat(o[1]);const l=Number.parseFloat(o[2]);if(Number.isNaN(s)){return["invalid x value at line "+(n+1)]}if(Number.isNaN(l)){return["invalid y value at line "+(n+1)]}const i={sample:r,x:s,y:l};if(t.mdanno){if(t.mdanno.annotation[r]){i.attr=[];for(const e in t.mdanno.annotation[r]){if(t.mdanno.mdh[e]){const n=t.mdanno.annotation[r][e];if(t.mdanno.mdh[e].values[n]){i.attr.push({k:t.mdanno.mdh[e].label,v:t.mdanno.mdh[e].values[n].label})}else{i.attr.push({k:t.mdanno.mdh[e].label,v:n})}}else{i.attr.push({k:e,v:"unknown term key"})}}}}e.push(i)}if(e.length==0){return["no samples"]}let f;if(t.obj&&t.obj.colorscale&&t.obj.colorscale.from&&t.obj.colorscale.to){f=n(t.obj.colorscale.from,t.obj.colorscale.to)}else{f=c}let h=e[0].x,b=e[0].x,x=e[0].y,g=e[0].y;for(const t of e){h=Math.min(h,t.x);b=Math.max(b,t.x);x=Math.min(x,t.y);g=Math.max(g,t.y)}const v=t.holder.append("div").style("display","inline-block");const y=new a({padding:"5px"});const j=v.append("svg");let k=30,w=50,N=100,M=30,A=20,z=500,C=500;const S=j.append("g");const E=j.append("g");const Y=j.append("g");const L=Y.selectAll().data(e).enter().append("g");const P=L.append("circle").attr("fill","#aaa").attr("stroke","none").on("mouseover",((t,e)=>{t.target.setAttribute("stroke","white");y.clear();y.show(t.clientX,t.clientY);const n=[{k:"name",v:e.sample}];if(e.value!=undefined){n.push({k:"value",v:e.value})}if(e.attr){for(const t of e.attr){n.push(t)}}o(y.d,n)})).on("mouseout",((t,e)=>{t.target.setAttribute("stroke","none");y.hide()}));if(t.obj){t.obj.circles=P}const U=r().domain([h,b]);const I=r().domain([x,g]);function J(){const t=3;w=z/20+20;j.attr("width",N+A+z+M).attr("height",k+C+A+w);S.attr("transform","translate("+(N+A)+","+(k+C+A)+")");E.attr("transform","translate("+N+","+k+")");Y.attr("transform","translate("+(N+A)+","+k+")");U.range([0,z]);I.range([C,0]);i({axis:S.call(d().scale(U)),color:"black",fontsize:z/40,showline:true});i({axis:E.call(u().scale(I)),color:"black",fontsize:C/40,showline:true});L.attr("transform",(t=>"translate("+U(t.x)+","+I(t.y)+")"));P.attr("r",t)}J();const X=v.append("div").style("position","relative");{const e=t.toprow||X;e.append("button").style("margin-right","20px").text("SVG").on("click",(()=>s(j.node(),"plot")))}const _=X.append("div").style("margin","10px 10px 10px 30px");if(t.obj){t.obj.legendholder=_}X.append("div").style("position","absolute").style("right","0px").style("top","0px").attr("class","sja_clbtext").text("drag to resize").on("mousedown",(t=>{t.preventDefault();const e=l(document.body);const n=t.clientX;const a=t.clientY;const o=z;const r=C;e.on("mousemove",(t=>{z=o+t.clientX-n;C=r+t.clientY-a;J()}));e.on("mouseup",(t=>{e.on("mousemove",null).on("mouseup",null)}))}));let q=false;const F=(t,e)=>{const n=new Map;let a=t[0].value,o=t[0].value;for(const e of t){n.set(e.sample,e.value);a=Math.max(a,e.value);o=Math.min(o,e.value)}let r,s;if(q){r=t.reduce(((t,e)=>t+e.value),0)/t.length;s=Math.sqrt(t.reduce(((t,e)=>t+Math.pow(e.value-r,2)),0)/t.length);console.log(r,s);o=a=0;t.forEach((t=>{const e=(t.value-r)/s;o=Math.min(o,e);a=Math.max(a,e)}))}P.attr("fill",(t=>{if(n.has(t.sample)){let e=n.get(t.sample);t.value=e;if(q){e=(e-r)/s;t.value=e}const l=(e-o)/(a-o);return f(l)}t.value=undefined;return m}));L.each((function(t){if(t.value!=undefined){this.parentNode.appendChild(this)}}));_.selectAll("*").remove();_.append("span").html(e+"&nbsp;");_.append("span").html("min: "+o+"&nbsp;");const l=[];for(let t=0;t<=1;t+=.1){l.push(f(t))}_.append("div").style("display","inline-block").style("width","150px").style("height","20px").style("background","linear-gradient(to right,"+l.join(",")+")").style("border","solid 1px "+m);_.append("span").html("&nbsp;max: "+a);const i=_.append("div").style("margin-top","10px");const p=Math.random().toString();i.append("input").attr("type","checkbox").style("margin-right","10px").property("checked",q).attr("id",p).on("change",(()=>{q=!q;F(t,e)}));i.append("label").attr("for",p).text("apply Z-score")};return[null,F]}function b(t){const e=t.holder.append("input").attr("placeholder","search gene").attr("padding-right","20px");const n=t.holder.append("span");e.on("keyup",(a=>{n.text("");if(a.code!="Enter")return;const o=e.property("value");if(!o)return;e.property("value","");p(t.hostURL+"/dbdata").post(JSON.stringify({db:t.obj.dbfile,tablename:"data",keyname:"gene",key:o.toLowerCase(),jwt:t.jwt}),(e=>{if(e.error){n.text("error getting data: "+e.error);return}if(!e.rows){n.text(".rows missing");return}if(e.rows.length==0){n.text("no match for "+o);return}t.obj.expressiondata=e.rows;t.obj.searchedgene=o;t.numdata2plot(e.rows,o);if(t.callback){t.callback()}}))}))}export{b as e2pca_genesearchui,f as e2pca_inputui,h as e2pca_plot};
1
+ import{Z as t,j as e,bL as n,M as a,a9 as o,I as r,U as s,d as l,ag as i}from"./app-2cd97738.js";import{d as p}from"./tp.ui-7b24f0ef.js";import{p as c}from"./viridis-d86ad99b.js";import{a as d,b as u}from"./axis-747c801e.js";import"./block.lazyload-eda77d9b.js";const m="#ccc";function f(n,a){const o=t({x:100,y:100});o.header.text("PCA - expression plot");const r=o.body.append("div").style("margin","20px");const s=o.body.append("div").style("margin","20px");const l=r.append("input").attr("size",30).attr("placeholder","PCA/SNE matrix file path").style("margin","10px").property("value","xiang/sep20/set1");const i=r.append("input").attr("size",30).attr("placeholder","numerical db file path").style("margin","10px").property("value","xiang/sep20/set1.db");r.append("button").text("Submit").on("click",(()=>{s.selectAll("*").remove();const t=l.property("value");if(t==""){s.text("No PCA file");return}const o=i.property("value");if(o==""){s.text("No db file");return}p(n+"/textfile").post(JSON.stringify({file:t,jwt:a}),(t=>{if(t.error){s.text("Error getting file: "+t.error);return}const[r,l]=h({holder:s,text:t.text});if(r){e(s,r);return}b({holder:s.append("div"),numdata2plot:l,hostURL:n,jwt:a,obj:{dbfile:o}})}))}));r.append("button").text("Clear").on("click",(()=>{l.property("value","");i.property("value","")}));r.append("span").style("padding-left","10px").html("<a href=https://docs.google.com/document/d/1Midt0rYs1iIJveUMjeng9si3q31YelcNe_PI3Njce9E/edit?usp=sharing target=_blank>Help</a>")}function h(t){const e=[];const p=t.text.split(/\r?\n/);for(let n=0;n<p.length;n++){const a=p[n];if(!a)continue;const o=a.split("\t");const r=o[0];const s=Number.parseFloat(o[1]);const l=Number.parseFloat(o[2]);if(Number.isNaN(s)){return["invalid x value at line "+(n+1)]}if(Number.isNaN(l)){return["invalid y value at line "+(n+1)]}const i={sample:r,x:s,y:l};if(t.mdanno){if(t.mdanno.annotation[r]){i.attr=[];for(const e in t.mdanno.annotation[r]){if(t.mdanno.mdh[e]){const n=t.mdanno.annotation[r][e];if(t.mdanno.mdh[e].values[n]){i.attr.push({k:t.mdanno.mdh[e].label,v:t.mdanno.mdh[e].values[n].label})}else{i.attr.push({k:t.mdanno.mdh[e].label,v:n})}}else{i.attr.push({k:e,v:"unknown term key"})}}}}e.push(i)}if(e.length==0){return["no samples"]}let f;if(t.obj&&t.obj.colorscale&&t.obj.colorscale.from&&t.obj.colorscale.to){f=n(t.obj.colorscale.from,t.obj.colorscale.to)}else{f=c}let h=e[0].x,b=e[0].x,x=e[0].y,g=e[0].y;for(const t of e){h=Math.min(h,t.x);b=Math.max(b,t.x);x=Math.min(x,t.y);g=Math.max(g,t.y)}const v=t.holder.append("div").style("display","inline-block");const y=new a({padding:"5px"});const j=v.append("svg");let k=30,w=50,N=100,M=30,A=20,z=500,C=500;const S=j.append("g");const E=j.append("g");const Y=j.append("g");const L=Y.selectAll().data(e).enter().append("g");const P=L.append("circle").attr("fill","#aaa").attr("stroke","none").on("mouseover",((t,e)=>{t.target.setAttribute("stroke","white");y.clear();y.show(t.clientX,t.clientY);const n=[{k:"name",v:e.sample}];if(e.value!=undefined){n.push({k:"value",v:e.value})}if(e.attr){for(const t of e.attr){n.push(t)}}o(y.d,n)})).on("mouseout",((t,e)=>{t.target.setAttribute("stroke","none");y.hide()}));if(t.obj){t.obj.circles=P}const U=r().domain([h,b]);const I=r().domain([x,g]);function J(){const t=3;w=z/20+20;j.attr("width",N+A+z+M).attr("height",k+C+A+w);S.attr("transform","translate("+(N+A)+","+(k+C+A)+")");E.attr("transform","translate("+N+","+k+")");Y.attr("transform","translate("+(N+A)+","+k+")");U.range([0,z]);I.range([C,0]);i({axis:S.call(d().scale(U)),color:"black",fontsize:z/40,showline:true});i({axis:E.call(u().scale(I)),color:"black",fontsize:C/40,showline:true});L.attr("transform",(t=>"translate("+U(t.x)+","+I(t.y)+")"));P.attr("r",t)}J();const X=v.append("div").style("position","relative");{const e=t.toprow||X;e.append("button").style("margin-right","20px").text("SVG").on("click",(()=>s(j.node(),"plot")))}const _=X.append("div").style("margin","10px 10px 10px 30px");if(t.obj){t.obj.legendholder=_}X.append("div").style("position","absolute").style("right","0px").style("top","0px").attr("class","sja_clbtext").text("drag to resize").on("mousedown",(t=>{t.preventDefault();const e=l(document.body);const n=t.clientX;const a=t.clientY;const o=z;const r=C;e.on("mousemove",(t=>{z=o+t.clientX-n;C=r+t.clientY-a;J()}));e.on("mouseup",(t=>{e.on("mousemove",null).on("mouseup",null)}))}));let q=false;const F=(t,e)=>{const n=new Map;let a=t[0].value,o=t[0].value;for(const e of t){n.set(e.sample,e.value);a=Math.max(a,e.value);o=Math.min(o,e.value)}let r,s;if(q){r=t.reduce(((t,e)=>t+e.value),0)/t.length;s=Math.sqrt(t.reduce(((t,e)=>t+Math.pow(e.value-r,2)),0)/t.length);console.log(r,s);o=a=0;t.forEach((t=>{const e=(t.value-r)/s;o=Math.min(o,e);a=Math.max(a,e)}))}P.attr("fill",(t=>{if(n.has(t.sample)){let e=n.get(t.sample);t.value=e;if(q){e=(e-r)/s;t.value=e}const l=(e-o)/(a-o);return f(l)}t.value=undefined;return m}));L.each((function(t){if(t.value!=undefined){this.parentNode.appendChild(this)}}));_.selectAll("*").remove();_.append("span").html(e+"&nbsp;");_.append("span").html("min: "+o+"&nbsp;");const l=[];for(let t=0;t<=1;t+=.1){l.push(f(t))}_.append("div").style("display","inline-block").style("width","150px").style("height","20px").style("background","linear-gradient(to right,"+l.join(",")+")").style("border","solid 1px "+m);_.append("span").html("&nbsp;max: "+a);const i=_.append("div").style("margin-top","10px");const p=Math.random().toString();i.append("input").attr("type","checkbox").style("margin-right","10px").property("checked",q).attr("id",p).on("change",(()=>{q=!q;F(t,e)}));i.append("label").attr("for",p).text("apply Z-score")};return[null,F]}function b(t){const e=t.holder.append("input").attr("placeholder","search gene").attr("padding-right","20px");const n=t.holder.append("span");e.on("keyup",(a=>{n.text("");if(a.code!="Enter")return;const o=e.property("value");if(!o)return;e.property("value","");p(t.hostURL+"/dbdata").post(JSON.stringify({db:t.obj.dbfile,tablename:"data",keyname:"gene",key:o.toLowerCase(),jwt:t.jwt}),(e=>{if(e.error){n.text("error getting data: "+e.error);return}if(!e.rows){n.text(".rows missing");return}if(e.rows.length==0){n.text("no match for "+o);return}t.obj.expressiondata=e.rows;t.obj.searchedgene=o;t.numdata2plot(e.rows,o);if(t.callback){t.callback()}}))}))}export{b as e2pca_genesearchui,f as e2pca_inputui,h as e2pca_plot};