@sjcrh/proteinpaint-client 2.77.0 → 2.78.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{2dmaf-acb8cfdd.js → 2dmaf-7dddba15.js} +1 -1
- package/dist/{AppHeader-315dbd3a.js → AppHeader-67cea623.js} +1 -1
- package/dist/{ColorScale-4b4ea8a2.js → ColorScale-7a36cc17.js} +1 -1
- package/dist/{DEanalysis-28ddd620.js → DEanalysis-417e1f88.js} +1 -1
- package/dist/{Disco-3c427131.js → Disco-30abd4cb.js} +1 -1
- package/dist/{Disco.UI-b071cf7a.js → Disco.UI-ea58ee03.js} +1 -1
- package/dist/{DragControls-7961799c.js → DragControls-a5072cfd.js} +1 -1
- package/dist/{DziViewer-aa5b5706.js → DziViewer-af3c5a76.js} +1 -1
- package/dist/FilterRxComp-cb149666.js +1 -0
- package/dist/FilterStateless-bdd1416d.js +1 -0
- package/dist/{HicApp-674a148d.js → HicApp-fe8682af.js} +1 -1
- package/dist/{OrbitControls-58ca2292.js → OrbitControls-0d20d46b.js} +1 -1
- package/dist/{WSIViewer-afe97e2e.js → WSIViewer-64e55fb8.js} +1 -1
- package/dist/{adSandbox-791d704e.js → adSandbox-5753745b.js} +1 -1
- package/dist/app-488d9fd6.js +1 -0
- package/dist/{app-bd9f016b.js → app-5aa892cb.js} +1 -1
- package/dist/app-d9433820.js +1 -0
- package/dist/app.js +1 -1
- package/dist/bam-4e0df8b6.js +1 -0
- package/dist/{barchart-e3dcfc5f.js → barchart-687ae584.js} +1 -1
- package/dist/{barchart.events-cecb7bf5.js → barchart.events-9e2c1acf.js} +1 -1
- package/dist/{bars.renderer-58e38632.js → bars.renderer-95f7250f.js} +1 -1
- package/dist/{block-944afb9f.js → block-2f22e7fd.js} +1 -1
- package/dist/block.lazyload-143ae987.js +1 -0
- package/dist/{block.legend-3dbc41a8.js → block.legend-aa831169.js} +1 -1
- package/dist/{block.mds-b3967ce5.js → block.mds-64d95cf9.js} +1 -1
- package/dist/{block.mds.cnv-6de3115e.js → block.mds.cnv-2520897d.js} +1 -1
- package/dist/{block.mds.expressionrank-553613e8.js → block.mds.expressionrank-582ed7bc.js} +1 -1
- package/dist/{block.mds.expressionstat-2c396bb9.js → block.mds.expressionstat-483c9bc9.js} +1 -1
- package/dist/{block.mds.geneboxplot-552fe571.js → block.mds.geneboxplot-c1276cba.js} +1 -1
- package/dist/{block.mds.junction-1e25c13d.js → block.mds.junction-4a132819.js} +1 -1
- package/dist/{block.mds.svcnv-462d762d.js → block.mds.svcnv-a532eca7.js} +1 -1
- package/dist/{block.mds.svcnv.share-766e4b22.js → block.mds.svcnv.share-6575b7cf.js} +1 -1
- package/dist/{block.mds2-6e04432d.js → block.mds2-9ce41a23.js} +1 -1
- package/dist/{block.svg-40b47da8.js → block.svg-adb13c76.js} +1 -1
- package/dist/{block.tk.aicheck-cc42cbaf.js → block.tk.aicheck-ef6b634b.js} +1 -1
- package/dist/{block.tk.ase-da848c5f.js → block.tk.ase-1b119031.js} +1 -1
- package/dist/{block.tk.bam-8053c97e.js → block.tk.bam-2aa824aa.js} +1 -1
- package/dist/{block.tk.bedgraphdot-79cb0faf.js → block.tk.bedgraphdot-983fe4b3.js} +1 -1
- package/dist/{block.tk.bigwig.ui-a8decec7.js → block.tk.bigwig.ui-fb6401ee.js} +1 -1
- package/dist/{block.tk.hicstraw-3d1e9d41.js → block.tk.hicstraw-c6732591.js} +1 -1
- package/dist/{block.tk.junction-81eae755.js → block.tk.junction-429b654c.js} +1 -1
- package/dist/{block.tk.junction.textmatrixui-4c45b69a.js → block.tk.junction.textmatrixui-15bd752c.js} +1 -1
- package/dist/{block.tk.ld-997fca31.js → block.tk.ld-fba14536.js} +1 -1
- package/dist/{block.tk.menu-d3e7ccbb.js → block.tk.menu-1299ae5e.js} +1 -1
- package/dist/{block.tk.pgv-ae1d1f59.js → block.tk.pgv-c946527f.js} +1 -1
- package/dist/{boxplot-fed0a86b.js → boxplot-dbf30a19.js} +1 -1
- package/dist/{brainImaging-b455fd0c.js → brainImaging-b2865ba3.js} +1 -1
- package/dist/{brush-06989a5e.js → brush-1a123226.js} +1 -1
- package/dist/{categorical-82722704.js → categorical-f67752ed.js} +1 -1
- package/dist/{condition-f68cc8d1.js → condition-dcc70001.js} +1 -1
- package/dist/{controls-1d99916a.js → controls-f4648f7f.js} +1 -1
- package/dist/controls.btns-26bb6ef1.js +1 -0
- package/dist/{controls.config-00ce9f0b.js → controls.config-9870bdea.js} +1 -1
- package/dist/{cuminc-879690b0.js → cuminc-2273cdd3.js} +1 -1
- package/dist/{customdata.inputui-c563c695.js → customdata.inputui-fb1b24dc.js} +1 -1
- package/dist/{dataDownload-087ac205.js → dataDownload-b94871d0.js} +1 -1
- package/dist/{databrowser.ui-9f98f6b3.js → databrowser.ui-8ace51c3.js} +1 -1
- package/dist/{density-e0aff1d0.js → density-e023c28f.js} +1 -1
- package/dist/{dictionary-fe0ea1d6.js → dictionary-321e19f9.js} +1 -1
- package/dist/{drag-e11d6644.js → drag-1b98e43e.js} +1 -1
- package/dist/{e2pca-b3250d5c.js → e2pca-00e78fdc.js} +1 -1
- package/dist/{ep-9ca01df0.js → ep-b0d6177c.js} +1 -1
- package/dist/{facet-397afad5.js → facet-26292a3d.js} +1 -1
- package/dist/{filter-b3d3964e.js → filter-67d51c09.js} +1 -1
- package/dist/{fusion.parse-e5312047.js → fusion.parse-7e3a6071.js} +1 -1
- package/dist/{geneExpClustering-4383ff2c.js → geneExpClustering-a2cf1bb9.js} +1 -1
- package/dist/{geneExpression-52678025.js → geneExpression-d1d5a7ca.js} +1 -1
- package/dist/{geneExpression-cfb86b5d.js → geneExpression-dc10af2c.js} +1 -1
- package/dist/{geneExpression-2422f66b.js → geneExpression-e4a5a2cd.js} +1 -1
- package/dist/{geneORA-81220ec0.js → geneORA-248baba7.js} +1 -1
- package/dist/{geneVariant-18f9591a.js → geneVariant-447d6af9.js} +1 -1
- package/dist/{geneVariant-4d22b146.js → geneVariant-7366f3d1.js} +1 -1
- package/dist/{genefusion.ui-e38778dd.js → genefusion.ui-e219424a.js} +1 -1
- package/dist/{genesearch-0587c713.js → genesearch-d8780180.js} +1 -1
- package/dist/{geneset-604d0529.js → geneset-1f67d4c9.js} +1 -1
- package/dist/genomeBrowser-52c639b4.js +1 -0
- package/dist/{genomeBrowser.controls-204f007e.js → genomeBrowser.controls-3a7a1c94.js} +1 -1
- package/dist/{groupsetting-53dfd5e5.js → groupsetting-697a1503.js} +1 -1
- package/dist/{gsea-a1b04406.js → gsea-d3286c53.js} +1 -1
- package/dist/hierCluster-00268175.js +1 -0
- package/dist/{html.legend-6807e9ad.js → html.legend-0abd27ff.js} +1 -1
- package/dist/{imagePlot-f96cdc61.js → imagePlot-f6398b6e.js} +1 -1
- package/dist/{lasso-845446b8.js → lasso-48317f42.js} +1 -1
- package/dist/launch.adhoc-98dc0421.js +1 -0
- package/dist/{leftlabel.sample-3a6037c2.js → leftlabel.sample-591bc38d.js} +1 -1
- package/dist/legacyDataset-354f1a29.js +1 -0
- package/dist/{log-0ea548ec.js → log-1001ca83.js} +1 -1
- package/dist/{lollipop-75e11e9a.js → lollipop-40c4c5cb.js} +1 -1
- package/dist/{maf-e4af10d7.js → maf-10526648.js} +1 -1
- package/dist/{maftimeline-cc2e866c.js → maftimeline-a77349ad.js} +1 -1
- package/dist/matrix-1190d4b3.js +1 -0
- package/dist/matrix-bc0ccf83.js +1 -0
- package/dist/{mavb-b2dd74f6.js → mavb-0d28dd97.js} +1 -1
- package/dist/{mds.fimo-f19840cd.js → mds.fimo-929b9e65.js} +1 -1
- package/dist/{mds.samplescatterplot-254f1de6.js → mds.samplescatterplot-5a4ee6b6.js} +1 -1
- package/dist/{mds.survivalplot-f440db10.js → mds.survivalplot-b04947ee.js} +1 -1
- package/dist/metaboliteIntensity-f407ad0c.js +1 -0
- package/dist/niceNumLabels-621ef5c3.js +1 -0
- package/dist/{nodrag-f6c0801c.js → nodrag-b2866dd8.js} +1 -1
- package/dist/{notify-da3afe99.js → notify-91f0bc5d.js} +1 -1
- package/dist/{numeric-1d0318e8.js → numeric-eb1d29b3.js} +1 -1
- package/dist/{numeric.binary-88bf9e0d.js → numeric.binary-da92d665.js} +1 -1
- package/dist/numeric.continuous-92d1dea8.js +1 -0
- package/dist/numeric.discrete-cd8f09b1.js +1 -0
- package/dist/{numeric.spline-b3968b77.js → numeric.spline-9a9987b6.js} +1 -1
- package/dist/{numeric.toggle-ab8b79be.js → numeric.toggle-8f68f077.js} +1 -1
- package/dist/{oncomatrix-5f4326a8.js → oncomatrix-c29e6de9.js} +1 -1
- package/dist/{parseData-62083461.js → parseData-3bf0ef9f.js} +1 -1
- package/dist/{plot.2dvaf-eccd8ef3.js → plot.2dvaf-9e59c7d1.js} +1 -1
- package/dist/plot.app-fc3608a9.js +1 -0
- package/dist/plot.barplot-122296f7.js +1 -0
- package/dist/{plot.boxplot-0c538ebe.js → plot.boxplot-99c5aac5.js} +1 -1
- package/dist/{plot.brainImaging-ee3a0272.js → plot.brainImaging-a7bb79d6.js} +1 -1
- package/dist/{plot.disco-c9249cbd.js → plot.disco-ccdf741c.js} +1 -1
- package/dist/{plot.dzi-dfd72ddf.js → plot.dzi-aafdf56b.js} +1 -1
- package/dist/plot.ssgq-146075f5.js +1 -0
- package/dist/{plot.vaf2cov-4081decd.js → plot.vaf2cov-41e13dd9.js} +1 -1
- package/dist/{plot.wsi-f6325d95.js → plot.wsi-2327ad63.js} +1 -1
- package/dist/{profileBarchart-f4da0483.js → profileBarchart-46616916.js} +1 -1
- package/dist/profileHome-121aaddb.js +1 -0
- package/dist/profilePlot-a2591a28.js +1 -0
- package/dist/{profilePolar-996784ad.js → profilePolar-006a56b1.js} +1 -1
- package/dist/{profileRadar-79299186.js → profileRadar-3320d932.js} +1 -1
- package/dist/{profileRadarFacility-00e31213.js → profileRadarFacility-7a9cea80.js} +1 -1
- package/dist/{profileSummary-df75e6ff.js → profileSummary-7a747b4e.js} +1 -1
- package/dist/recover-edcdde38.js +1 -0
- package/dist/{regression.inputs-e647b716.js → regression.inputs-d5d44e49.js} +1 -1
- package/dist/{regression.inputs.values.table-b283619d.js → regression.inputs.values.table-daf7bcda.js} +1 -1
- package/dist/regression.results-31a8884d.js +1 -0
- package/dist/{renderPvalueTable-0ed37e90.js → renderPvalueTable-05c29ccf.js} +1 -1
- package/dist/sampleScatter-f6c04130.js +1 -0
- package/dist/{sampleScatter.rendererThree-aa51e3c8.js → sampleScatter.rendererThree-448689c6.js} +2 -2
- package/dist/{sampleView-e4819da2.js → sampleView-0931e571.js} +1 -1
- package/dist/{samplelst-9d9ff205.js → samplelst-27115b0e.js} +1 -1
- package/dist/{samplematrix-3556e5c0.js → samplematrix-2bb2480b.js} +1 -1
- package/dist/{scatter-ff17f653.js → scatter-a8d7c2a0.js} +1 -1
- package/dist/select2Terms-480025f5.js +1 -0
- package/dist/{selectGenomeWithTklst-84f4ff79.js → selectGenomeWithTklst-71344af2.js} +1 -1
- package/dist/{singleCellCellType-a2ce9bfa.js → singleCellCellType-b4061c59.js} +1 -1
- package/dist/{singleCellGeneExpression-a2b45c7a.js → singleCellGeneExpression-547149f2.js} +1 -1
- package/dist/singleCellPlot-2f5ad46a.js +1 -0
- package/dist/{singlecell-a5b8a39b.js → singlecell-1c3bee25.js} +1 -1
- package/dist/{singlecell-63cb06d8.js → singlecell-281a74a6.js} +1 -1
- package/dist/snp-32b8cbd8.js +1 -0
- package/dist/{snp-6e312b4c.js → snp-6bbefa83.js} +1 -1
- package/dist/snplocus-84450f3d.js +1 -0
- package/dist/{spliceevent.a53ss.diagram-aa2df5d7.js → spliceevent.a53ss.diagram-c04f46f1.js} +1 -1
- package/dist/{spliceevent.exonskip.diagram-0b792984.js → spliceevent.exonskip.diagram-a514c12e.js} +1 -1
- package/dist/spliceevent.exonskip.getdefault-a9a45dfc.js +1 -0
- package/dist/{spliceevent.noeventdiagram-e6e29a6e.js → spliceevent.noeventdiagram-b1be922c.js} +1 -1
- package/dist/{spliceevent.phrase-5f65a5f4.js → spliceevent.phrase-57659f7c.js} +1 -1
- package/dist/{stattable-775a5af5.js → stattable-7fa50fd2.js} +1 -1
- package/dist/{style.gdc-519a42d8.js → style.gdc-6b6a2e0c.js} +1 -1
- package/dist/{summary-5866c75f.js → summary-54587ccf.js} +1 -1
- package/dist/{sunburst-f928bfd2.js → sunburst-c24faf27.js} +1 -1
- package/dist/{survival-405514f6.js → survival-21e6637b.js} +1 -1
- package/dist/survival-538cddc2.js +1 -0
- package/dist/{svg.download-cd895635.js → svg.download-0dd56dfd.js} +1 -1
- package/dist/{svg.legend-812ea603.js → svg.legend-21629769.js} +1 -1
- package/dist/{svgraph-037fd7b6.js → svgraph-76e34d5e.js} +1 -1
- package/dist/{svmr-3bd143c3.js → svmr-89b80ea2.js} +1 -1
- package/dist/table-10183501.js +1 -0
- package/dist/{table-e013d8fc.js → table-bb97b5c9.js} +1 -1
- package/dist/{termInfo-e16f90f2.js → termInfo-4d954045.js} +1 -1
- package/dist/termdb.bins-06fd21c1.js +1 -0
- package/dist/termsetting-c12f1c69.js +1 -0
- package/dist/{tk-25ae65c4.js → tk-b96367f7.js} +1 -1
- package/dist/{toggleButtons-2144daab.js → toggleButtons-bb9aca2f.js} +1 -1
- package/dist/{tp.ui-38bc5890.js → tp.ui-f01b186b.js} +1 -1
- package/dist/tvs.density-064e5767.js +1 -0
- package/dist/{tvs.geneVariant-f99fe353.js → tvs.geneVariant-3fac6bed.js} +1 -1
- package/dist/{tvs.numeric-d9108473.js → tvs.numeric-86aacc82.js} +1 -1
- package/dist/{tvs.samplelst-3b8ee998.js → tvs.samplelst-1b00d7b6.js} +1 -1
- package/dist/{uiUtils-57f4b1ba.js → uiUtils-5aad7e13.js} +1 -1
- package/dist/{variantBrowser-56ebc7e1.js → variantBrowser-2c465d02.js} +1 -1
- package/dist/{vcf-e43b533a.js → vcf-55bf2c83.js} +1 -1
- package/dist/{violin-1352dab2.js → violin-edbe9a63.js} +1 -1
- package/dist/violin.interactivity-57637244.js +1 -0
- package/dist/{violin.renderer-4273257d.js → violin.renderer-4cab7448.js} +1 -1
- package/dist/{violinRenderer-7f46e468.js → violinRenderer-24abe5fd.js} +1 -1
- package/dist/{viridis-87a8b605.js → viridis-8a8f3e12.js} +1 -1
- package/dist/{y-cac91178.js → y-6fe1bb7b.js} +1 -1
- package/dist/{zoom-001c2f01.js → zoom-6a36fb2b.js} +1 -1
- package/package.json +6 -5
- package/dist/FilterRxComp-e8de560c.js +0 -1
- package/dist/FilterStateless-75514d37.js +0 -1
- package/dist/app-3d14cbe4.js +0 -1
- package/dist/app-8b5b982a.js +0 -1
- package/dist/bam-fa90bae8.js +0 -1
- package/dist/block.lazyload-4c4e81ff.js +0 -1
- package/dist/controls.btns-237b3154.js +0 -1
- package/dist/genomeBrowser-9f0e8a60.js +0 -1
- package/dist/hierCluster-edaaacc5.js +0 -1
- package/dist/hierCluster.config-a84f69a3.js +0 -1
- package/dist/hierCluster.interactivity-dd917fd3.js +0 -1
- package/dist/hierCluster.renderers-4d33e96a.js +0 -1
- package/dist/launch.adhoc-cb00917b.js +0 -1
- package/dist/legacyDataset-c9bab1e6.js +0 -1
- package/dist/matrix-8b3341c4.js +0 -1
- package/dist/matrix.cells-4dd055e7.js +0 -1
- package/dist/matrix.cluster-7ab94fb5.js +0 -1
- package/dist/matrix.config-b3b56456.js +0 -1
- package/dist/matrix.controls-6e0e9692.js +0 -1
- package/dist/matrix.data-baabaf57.js +0 -1
- package/dist/matrix.dom-cb1f4872.js +0 -1
- package/dist/matrix.groups-9990aade.js +0 -1
- package/dist/matrix.interactivity-3f3cf44d.js +0 -1
- package/dist/matrix.layout-50bc2ea5.js +0 -1
- package/dist/matrix.legend-024e2d50.js +0 -1
- package/dist/matrix.renderers-1aed44e5.js +0 -1
- package/dist/matrix.serieses-dc18fcc2.js +0 -1
- package/dist/matrix.sort-89b98e83.js +0 -1
- package/dist/matrix.sorterUi-0ad98ef0.js +0 -1
- package/dist/metaboliteIntensity-4d905d93.js +0 -1
- package/dist/niceNumLabels-ef07b7ad.js +0 -1
- package/dist/numeric.continuous-d27197cf.js +0 -1
- package/dist/numeric.discrete-b826f33b.js +0 -1
- package/dist/plot.app-4dc30ebc.js +0 -1
- package/dist/plot.barplot-331715f6.js +0 -1
- package/dist/plot.ssgq-b5f68395.js +0 -1
- package/dist/profileHome-11b7d146.js +0 -1
- package/dist/profilePlot-5dd1fe71.js +0 -1
- package/dist/recover-4888c2a9.js +0 -1
- package/dist/regression.results-f61b4a25.js +0 -1
- package/dist/sampleScatter-b96546e9.js +0 -1
- package/dist/select2Terms-eb437c2a.js +0 -1
- package/dist/singleCellPlot-e7e57b0f.js +0 -1
- package/dist/snp-41aa88d1.js +0 -1
- package/dist/snplocus-0653ba82.js +0 -1
- package/dist/spliceevent.exonskip.getdefault-af1943e3.js +0 -1
- package/dist/survival-10dd3d28.js +0 -1
- package/dist/table-be2a9975.js +0 -1
- package/dist/termdb.bins-a60aaa77.js +0 -1
- package/dist/termsetting-7467350f.js +0 -1
- package/dist/tvs.density-060d3006.js +0 -1
- package/dist/violin.interactivity-2502dcd8.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as t,h as e,P as a,K as i}from"./app-
|
|
1
|
+
import{b as t,h as e,P as a,K as i}from"./app-488d9fd6.js";import{topBarInit as s}from"./controls.btns-26bb6ef1.js";import{configUiInit as n}from"./controls.config-9870bdea.js";import{r as o}from"./table-10183501.js";import"./termsetting-c12f1c69.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-
|
|
1
|
+
import{_ as e,$ as t,a0 as n,d as r}from"./app-488d9fd6.js";import{p as i}from"./pointer-c7475677.js";import{d as s,y as u}from"./nodrag-b2866dd8.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-
|
|
1
|
+
import{_ as e}from"./tslib.es6-c3c2d88f.js";import{GroupSettingMethods as t}from"./groupsetting-697a1503.js";import{o as r,s as i}from"./termsetting-c12f1c69.js";import{P as o}from"./app-488d9fd6.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-
|
|
1
|
+
import{_ as e}from"./tslib.es6-c3c2d88f.js";import{o as t,s as r}from"./termsetting-c12f1c69.js";import{m as a}from"./radiobutton-09bff425.js";import{t as n,y as i,P as s}from"./app-488d9fd6.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-
|
|
1
|
+
import{h as t,K as i}from"./app-488d9fd6.js";import{topBarInit as s}from"./controls.btns-26bb6ef1.js";import{configUiInit as e}from"./controls.config-9870bdea.js";import{T as o}from"./termsetting-c12f1c69.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;c(this);d(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 d(t){t.render=function(){t.dom.holder.style("background",t.isOpen?n:"")}}function c(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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{h as t,K as e,L as o}from"./app-488d9fd6.js";class n{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 o=this.opts.debug;this.features=await e({burgerbtn:i({holder:this.dom.burger_div,callback:t.callback,debug:o}),downloadbtn:a({id:t.id,holder:this.dom.holder.insert("div"),callback:t.downloadHandler,debug:o}),helpbtn:s({id:t.id,holder:this.dom.holder.insert("div"),callback:t.helpHandler,debug:o})})}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 o in this.features){this.features[o].main(e,t)}}}const l=t(n);function i(t){const e=t.holder.style("margin","15px 20px");o["burguer"](e,{handler:t.callback,title:"Settings"});const n={dom:{btn:e}};const l={main(t){n.dom.btn.style("display",t?"inline-block":"block")}};if(t.debug)l.Inner=n;return Object.freeze(l)}function s(t){const e=t.holder.style("margin","20px");o["help"](e,{handler:t.callback,title:"Documentation"});const n={plotTypes:["profilePolar","profileBarchart","profileRadar","profileRadarFacility"],dom:{btn:e}};const l={main(t,e){if(n.plotTypes.includes(e.chartType))n.dom.btn.style("display",t?"inline-block":"block");else n.dom.btn.style("display","none")}};if(t.debug)l.Inner=n;return Object.freeze(l)}function a(t){const e=t.holder.style("margin-left","20px").attr("aria-label","Download plot image");o["download"](e,{handler:t.callback});const n={plotTypes:["summary","boxplot","scatter"],dom:{btn:e}};const l={main(t,e){n.dom.btn.style("display",t?"inline-block":"block")}};if(t.debug)l.Inner=n;return Object.freeze(l)}export{l as topBarInit};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as t,h as e,K as s,r as i}from"./app-3d14cbe4.js";import{h as n}from"./termsetting-7467350f.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 i=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){i.style(t,e.styles[t])}}const n=i.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);i.append("span").style("vertical-align","top").html((t=>" "+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;n.property("checked",l)},dom:{divs:e.holder.selectAll("div"),labels:e.holder.selectAll("label").select("span"),inputs:i.selectAll("input")}};return a}let a=1;let o=1;function p(t){return`sjpp-control-${o++}-${t||Math.random().toString().slice(-4)}-${Math.random().toString().slice(-6)}`}class r{constructor(t){this.type="controlsConfig";this.app=t.app;this.id=t.id;this.instanceNum=a++;c(this)}async init(){try{const t=this.app.dispatch;const e=this.setDom();const i=this.opts.debug;this.inputs={};const n={};for(const e of this.opts.inputs){if(typeof e=="object"){const s=e;if(s.type in x){this.inputs[s.settingsKey||s.configKey]=await x[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 x){this.inputs[e]=await x[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(n)}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 d=e(r);function c(t){t.rowIsVisible=function(){return this.style.display!="none"}}function u(t){const e=p(t.instanceNum);const s={id:e,dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").attr("id",e).attr("class","sja-termdb-config-row-label").attr("aria-label",t.title).html(t.label),inputs:{}},values:{}};if(!t.inputs)t.inputs=[{min:t.min,max:t.max,step:t.step,width:t.width,settingsKey:t.settingsKey}];const i=t.debounceInterval||("debounceInterval"in t.parent?.app.opts?t.parent?.app.opts.debounceInterval:100);for(const l of t.inputs){let a;function o(t=false){if(a)clearTimeout(a);if(!t)a=setTimeout(r,i)}function r(){let e=Number(s.dom.inputs[l.settingsKey].property("value"));if(l.max&&l.max<e)e=l.max;if(l.min&&l.min>e)e=l.min;if(t.callback)t.callback(e);else{t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[l.settingsKey]:t.processInput?t.processInput(e):e}}}})}}const d=t.holder.append("td").style("text-align",t.align||"").attr("colspan",t.colspan||"");if(!l.settingsKey){d.style("color","#555").style("cursor","default").html(l.label)}else{s.dom.inputs[l.settingsKey]=d.append("input").attr("aria-labelledby",s.id).attr("type","number").attr("min","min"in l?l.min:null).attr("max","max"in l?l.max:null).attr("step",l.step||t.step||null).style("width",(l.width||t.width||100)+"px").on("keyup",(e=>{const i=s.values[t.settingsKey]!==Number(s.dom.inputs[l.settingsKey].property("value"));o(e.key!=="Enter"&&i)})).on("change",(t=>{o(false)}))}}const n={main(e){const i=t.getDisplayStyle?.(e)||"table-row";t.holder.style("display",i);for(const i in s.dom.inputs){const n=e.settings[t.chartType][i];s.dom.inputs[i].property("value",n);s.values[i]=n}}};if(t.debug)n.Inner=s;return Object.freeze(n)}function y(t){const e=p(t.instanceNum);const s={id:e,dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").attr("id",e).attr("class","sja-termdb-config-row-label").attr("aria-label",t.title).attr("overflow","visible").html(t.label),inputTd:t.holder.append("td")}};const i={};s.dom.input=s.dom.inputTd.append("input").attr("type","text").attr("aria-labelledby",s.id).style("width",(t.width||100)+"px").on("change",(()=>{const e=s.dom.input.property("value");const n=Number(e);if(isNaN(n))throw`non-numeric value for ${t.settingsKey}='${e}'`;i[n]=e;t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[t.settingsKey]:n}}}})}));const n={main(e){const n=e.settings[t.chartType][t.settingsKey];const l=typeof n=="number"?n:Number(n);if(typeof n!="number")i[l]=n;s.dom.input.property("value",n in i?i[l]:n)}};if(t.debug)n.Inner=s;return Object.freeze(n)}function h(t){const e=p(t.instanceNum);const s={id:e,dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").attr("id",e).attr("class","sja-termdb-config-row-label").attr("aria-label",t.title).html(t.label),inputTd:t.holder.append("td")}};s.dom.input=s.dom.inputTd.append("input").attr("type","text").attr("placeholder",t.placeholder).attr("aria-labelledby",s.id).style("width",(t.width||100)+"px").on("change",(()=>{const e=s.dom.input.property("value");t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[t.settingsKey]:t.processInput?t.processInput(e):e}}}})}));const i={main(e){s.dom.input.property("value",e.settings[t.chartType][t.settingsKey])}};if(t.debug)i.Inner=s;return Object.freeze(i)}function m(t){const e=p(t.instanceNum);const s={id:e,dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").attr("id",e).attr("class","sja-termdb-config-row-label").attr("aria-label",t.title).html(t.label),inputTd:t.holder.append("td").attr("colspan",t.colspan||"").style("text-align",t.align||"")}};s.dom.input=s.dom.inputTd.append("input").attr("type","color").attr("aria-labelledby",s.id).on("change",(()=>{const e=s.dom.input.property("value");t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[t.settingsKey]:t.processInput?t.processInput(e):e}}}})}));const n={main(e){const n=e.settings[t.chartType][t.settingsKey];s.dom.input.property("value",i(n).formatHex());t.holder.style("display",t.getDisplayStyle?.(e)||"table-row")}};if(t.debug)n.Inner=s;return Object.freeze(n)}function b(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}];const i=t.styles||{};for(const n of s){e.inputs[n.settingsKey]=l({name:p(t.instanceNum),holder:t.holder.append("td").attr("colspan",t.colspan||"").style("text-align",t.align||""),options:n.options,getDisplayStyle:()=>"block",styles:i,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]:{[n.settingsKey]:s.value}}}})}}}})}const n={main(s){const i=t.getDisplayStyle?.(s)||"table-row";e.dom.row.style("display",i);if(i=="none")return;for(const i in e.inputs){const n=e.inputs[i];n.main(s.settings[t.chartType][i]);n.dom.divs.style("display",(e=>e.getDisplayStyle?e.getDisplayStyle(s):t.labelDisplay||"inline-block"));if(t.setRadioLabel)n.dom.labels.html(t.setRadioLabel)}}};if(t.debug)n.Inner=e;return Object.freeze(n)}function g(t){const e=p(t.instanceNum);const s={id:e,dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").attr("id",e).html(t.label).attr("class","sja-termdb-config-row-label"),inputTd:t.holder.append("td")}};s.dom.select=s.dom.inputTd.append("select").attr("aria-labelledby",e).property("disabled",t.disabled).on("change",(()=>{const e=s.dom.select.property("value");if(t.callback)t.callback(e);else t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[t.settingsKey]:e}}}})}));s.dom.select.style("max-width","300px");s.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=>" "+t.label+" "));const i={main(e){t.holder.style("display",t.getDisplayStyle?.(e)||"table-row");s.dom.select.property("value",e.settings[t.chartType][t.settingsKey])}};if(t.debug)i.Inner=s;return Object.freeze(i)}function f(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(" "+t.boxLabel);const i={main(s){const i=s.settings[t.chartType][t.settingsKey];e.dom.input.property("checked",t.processInput?t.processInput(i):i);t.holder.style("display",t.getDisplayStyle?.(s)||"table-row")}};if(t.debug)i.Inner=e;return Object.freeze(i)}function v(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(i){const n=t(this);s.dom.input=n.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}}}})}));n.append("span").html(i.label)}));s.dom.inputs=s.dom.labels.selectAll("input");const i={main(t){const i=t.settings[e.chartType][e.settingsKey];s.dom.inputs.property("checked",(t=>i.includes(t.value)));s.dom.labels.style("display",(e=>e.getDisplayStyle?.(t)||""));e.holder.style("display",e.getDisplayStyle?.(t)||"table-row")}};if(e.debug)i.Inner=s;return Object.freeze(i)}function w(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 T(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 n({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 i={[t.configKey]:e};if(t.processConfig)t.processConfig(i);t.dispatch({type:"plot_edit",id:t.id,config:i})}});const i={usestate:true,main(i){const n=t.getDisplayStyle?.(i)||"table-row";t.holder.style("display",n);const{config:l,activeCohort:a,termfilter:o}=JSON.parse(JSON.stringify(i));const p=i[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)i.Inner=e;return Object.freeze(i)}const x={number:u,math:y,text:h,color:m,radio:b,dropdown:g,checkbox:f,multiCheckbox:v,custom:w,term:T};export{d as configUiInit,x as initByInput};
|
|
1
|
+
import{d as t,h as e,K as s,r as i}from"./app-488d9fd6.js";import{h as n}from"./termsetting-c12f1c69.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 i=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){i.style(t,e.styles[t])}}const n=i.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);i.append("span").style("vertical-align","top").html((t=>" "+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;n.property("checked",l)},dom:{divs:e.holder.selectAll("div"),labels:e.holder.selectAll("label").select("span"),inputs:i.selectAll("input")}};return a}let a=1;let o=1;function p(t){return`sjpp-control-${o++}-${t||Math.random().toString().slice(-4)}-${Math.random().toString().slice(-6)}`}class r{constructor(t){this.type="controlsConfig";this.app=t.app;this.id=t.id;this.instanceNum=a++;c(this)}async init(){try{const t=this.app.dispatch;const e=this.setDom();const i=this.opts.debug;this.inputs={};const n={};for(const e of this.opts.inputs){if(typeof e=="object"){const s=e;if(s.type in x){this.inputs[s.settingsKey||s.configKey]=await x[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 x){this.inputs[e]=await x[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(n)}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 d=e(r);function c(t){t.rowIsVisible=function(){return this.style.display!="none"}}function u(t){const e=p(t.instanceNum);const s={id:e,dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").attr("id",e).attr("class","sja-termdb-config-row-label").attr("aria-label",t.title).html(t.label),inputs:{}},values:{}};if(!t.inputs)t.inputs=[{min:t.min,max:t.max,step:t.step,width:t.width,settingsKey:t.settingsKey}];const i=t.debounceInterval||("debounceInterval"in t.parent?.app.opts?t.parent?.app.opts.debounceInterval:100);for(const l of t.inputs){let a;function o(t=false){if(a)clearTimeout(a);if(!t)a=setTimeout(r,i)}function r(){let e=Number(s.dom.inputs[l.settingsKey].property("value"));if(l.max&&l.max<e)e=l.max;if(l.min&&l.min>e)e=l.min;if(t.callback)t.callback(e);else{t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[l.settingsKey]:t.processInput?t.processInput(e):e}}}})}}const d=t.holder.append("td").style("text-align",t.align||"").attr("colspan",t.colspan||"");if(!l.settingsKey){d.style("color","#555").style("cursor","default").html(l.label)}else{s.dom.inputs[l.settingsKey]=d.append("input").attr("aria-labelledby",s.id).attr("type","number").attr("min","min"in l?l.min:null).attr("max","max"in l?l.max:null).attr("step",l.step||t.step||null).style("width",(l.width||t.width||100)+"px").on("keyup",(e=>{const i=s.values[t.settingsKey]!==Number(s.dom.inputs[l.settingsKey].property("value"));o(e.key!=="Enter"&&i)})).on("change",(t=>{o(false)}))}}const n={main(e){const i=t.getDisplayStyle?.(e)||"table-row";t.holder.style("display",i);for(const i in s.dom.inputs){const n=e.settings[t.chartType][i];s.dom.inputs[i].property("value",n);s.values[i]=n}}};if(t.debug)n.Inner=s;return Object.freeze(n)}function y(t){const e=p(t.instanceNum);const s={id:e,dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").attr("id",e).attr("class","sja-termdb-config-row-label").attr("aria-label",t.title).attr("overflow","visible").html(t.label),inputTd:t.holder.append("td")}};const i={};s.dom.input=s.dom.inputTd.append("input").attr("type","text").attr("aria-labelledby",s.id).style("width",(t.width||100)+"px").on("change",(()=>{const e=s.dom.input.property("value");const n=Number(e);if(isNaN(n))throw`non-numeric value for ${t.settingsKey}='${e}'`;i[n]=e;t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[t.settingsKey]:n}}}})}));const n={main(e){const n=e.settings[t.chartType][t.settingsKey];const l=typeof n=="number"?n:Number(n);if(typeof n!="number")i[l]=n;s.dom.input.property("value",n in i?i[l]:n)}};if(t.debug)n.Inner=s;return Object.freeze(n)}function h(t){const e=p(t.instanceNum);const s={id:e,dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").attr("id",e).attr("class","sja-termdb-config-row-label").attr("aria-label",t.title).html(t.label),inputTd:t.holder.append("td")}};s.dom.input=s.dom.inputTd.append("input").attr("type","text").attr("placeholder",t.placeholder).attr("aria-labelledby",s.id).style("width",(t.width||100)+"px").on("change",(()=>{const e=s.dom.input.property("value");t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[t.settingsKey]:t.processInput?t.processInput(e):e}}}})}));const i={main(e){s.dom.input.property("value",e.settings[t.chartType][t.settingsKey])}};if(t.debug)i.Inner=s;return Object.freeze(i)}function m(t){const e=p(t.instanceNum);const s={id:e,dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").attr("id",e).attr("class","sja-termdb-config-row-label").attr("aria-label",t.title).html(t.label),inputTd:t.holder.append("td").attr("colspan",t.colspan||"").style("text-align",t.align||"")}};s.dom.input=s.dom.inputTd.append("input").attr("type","color").attr("aria-labelledby",s.id).on("change",(()=>{const e=s.dom.input.property("value");t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[t.settingsKey]:t.processInput?t.processInput(e):e}}}})}));const n={main(e){const n=e.settings[t.chartType][t.settingsKey];s.dom.input.property("value",i(n).formatHex());t.holder.style("display",t.getDisplayStyle?.(e)||"table-row")}};if(t.debug)n.Inner=s;return Object.freeze(n)}function b(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}];const i=t.styles||{};for(const n of s){e.inputs[n.settingsKey]=l({name:p(t.instanceNum),holder:t.holder.append("td").attr("colspan",t.colspan||"").style("text-align",t.align||""),options:n.options,getDisplayStyle:()=>"block",styles:i,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]:{[n.settingsKey]:s.value}}}})}}}})}const n={main(s){const i=t.getDisplayStyle?.(s)||"table-row";e.dom.row.style("display",i);if(i=="none")return;for(const i in e.inputs){const n=e.inputs[i];n.main(s.settings[t.chartType][i]);n.dom.divs.style("display",(e=>e.getDisplayStyle?e.getDisplayStyle(s):t.labelDisplay||"inline-block"));if(t.setRadioLabel)n.dom.labels.html(t.setRadioLabel)}}};if(t.debug)n.Inner=e;return Object.freeze(n)}function g(t){const e=p(t.instanceNum);const s={id:e,dom:{row:t.holder.style("display","table-row"),labelTd:t.holder.append("td").attr("id",e).html(t.label).attr("class","sja-termdb-config-row-label"),inputTd:t.holder.append("td")}};s.dom.select=s.dom.inputTd.append("select").attr("aria-labelledby",e).property("disabled",t.disabled).on("change",(()=>{const e=s.dom.select.property("value");if(t.callback)t.callback(e);else t.dispatch({type:"plot_edit",id:t.id,config:{settings:{[t.chartType]:{[t.settingsKey]:e}}}})}));s.dom.select.style("max-width","300px");s.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=>" "+t.label+" "));const i={main(e){t.holder.style("display",t.getDisplayStyle?.(e)||"table-row");s.dom.select.property("value",e.settings[t.chartType][t.settingsKey])}};if(t.debug)i.Inner=s;return Object.freeze(i)}function f(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(" "+t.boxLabel);const i={main(s){const i=s.settings[t.chartType][t.settingsKey];e.dom.input.property("checked",t.processInput?t.processInput(i):i);t.holder.style("display",t.getDisplayStyle?.(s)||"table-row")}};if(t.debug)i.Inner=e;return Object.freeze(i)}function v(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(i){const n=t(this);s.dom.input=n.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}}}})}));n.append("span").html(i.label)}));s.dom.inputs=s.dom.labels.selectAll("input");const i={main(t){const i=t.settings[e.chartType][e.settingsKey];s.dom.inputs.property("checked",(t=>i.includes(t.value)));s.dom.labels.style("display",(e=>e.getDisplayStyle?.(t)||""));e.holder.style("display",e.getDisplayStyle?.(t)||"table-row")}};if(e.debug)i.Inner=s;return Object.freeze(i)}function w(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 T(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 n({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 i={[t.configKey]:e};if(t.processConfig)t.processConfig(i);t.dispatch({type:"plot_edit",id:t.id,config:i})}});const i={usestate:true,main(i){const n=t.getDisplayStyle?.(i)||"table-row";t.holder.style("display",n);const{config:l,activeCohort:a,termfilter:o}=JSON.parse(JSON.stringify(i));const p=i[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)i.Inner=e;return Object.freeze(i)}const x={number:u,math:y,text:h,color:m,radio:b,dropdown:g,checkbox:f,multiCheckbox:v,custom:w,term:T};export{d as configUiInit,x as initByInput};
|
|
@@ -1 +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-3d14cbe4.js";import{term0_term2_defaultQ as o,controlsInit as l,renderTerm1Label as d}from"./controls-1d99916a.js";import{f as p}from"./termsetting-7467350f.js";import{s as h}from"./legacy-d3-polyfill-bdb2d792.js";import{h as m}from"./html.legend-6807e9ad.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-0ed37e90.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-237b3154.js";import"./controls.config-00ce9f0b.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
|
+
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-488d9fd6.js";import{term0_term2_defaultQ as o,controlsInit as l,renderTerm1Label as d}from"./controls-f4648f7f.js";import{f as p}from"./termsetting-c12f1c69.js";import{s as h}from"./legacy-d3-polyfill-bdb2d792.js";import{h as m}from"./html.legend-0abd27ff.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-05c29ccf.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-26bb6ef1.js";import"./controls.config-9870bdea.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-
|
|
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-488d9fd6.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-
|
|
1
|
+
import{h as t,P as e,y as i,d as s}from"./app-488d9fd6.js";import{f as o,h as a}from"./termsetting-c12f1c69.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-57f4b1ba.js";import{j as a,aT as l}from"./app-3d14cbe4.js";import{T as c}from"./toggleButtons-2144daab.js";import{appInit as d}from"./app-8b5b982a.js";import"./tslib.es6-c3c2d88f.js";import"./recover-4888c2a9.js";import"./termsetting-7467350f.js";import"path";import"./FilterRxComp-e8de560c.js";import"./table-be2a9975.js";import"./partjson.esm-b3f1fc21.js";import"./termdb.bins-a60aaa77.js";import"./FilterStateless-75514d37.js";import"./app-bd9f016b.js";import"./termInfo-e16f90f2.js";import"./genesearch-0587c713.js";import"./checkbox-96437f4d.js";import"./rehydrateFilter-12d118cb.js";import"./sampleScatter-b96546e9.js";import"./controls-1d99916a.js";import"./controls.btns-237b3154.js";import"./controls.config-00ce9f0b.js";import"./zoom-001c2f01.js";import"./pointer-c7475677.js";import"./nodrag-f6c0801c.js";import"./lasso-845446b8.js";import"./drag-e11d6644.js";import"./shapes-21ebfec4.js";import"./sampleView-e4819da2.js";import"./select2Terms-eb437c2a.js";import"./svg.download-cd895635.js";import"./sampleScatter.rendererThree-aa51e3c8.js";import"./axis-747c801e.js";import"./line-264f8f9e.js";import"./constant-426a1483.js";import"./summary-5866c75f.js";import"./violin-1352dab2.js";import"./violin.renderer-4273257d.js";import"./brush-06989a5e.js";import"./basis-3870f5ba.js";import"./log-0ea548ec.js";import"./html.legend-6807e9ad.js";import"./violin.interactivity-2502dcd8.js";import"./niceNumLabels-ef07b7ad.js";import"./barchart-e3dcfc5f.js";import"./bars.settings-64bb4642.js";import"./bars.renderer-58e38632.js";import"./svg.legend-812ea603.js";import"./barchart.events-cecb7bf5.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
|
+
import{a as e,m as t,c as n,d as i,i as o,f as s,e as r}from"./uiUtils-5aad7e13.js";import{j as a,aT as l}from"./app-488d9fd6.js";import{T as c}from"./toggleButtons-bb9aca2f.js";import{appInit as d}from"./app-d9433820.js";import"./tslib.es6-c3c2d88f.js";import"./recover-edcdde38.js";import"./termsetting-c12f1c69.js";import"path";import"./FilterRxComp-cb149666.js";import"./table-10183501.js";import"./partjson.esm-b3f1fc21.js";import"./termdb.bins-06fd21c1.js";import"./FilterStateless-bdd1416d.js";import"./app-5aa892cb.js";import"./termInfo-4d954045.js";import"./genesearch-d8780180.js";import"./checkbox-96437f4d.js";import"./rehydrateFilter-12d118cb.js";import"./sampleScatter-f6c04130.js";import"./controls-f4648f7f.js";import"./controls.btns-26bb6ef1.js";import"./controls.config-9870bdea.js";import"./zoom-6a36fb2b.js";import"./pointer-c7475677.js";import"./nodrag-b2866dd8.js";import"./lasso-48317f42.js";import"./drag-1b98e43e.js";import"./shapes-21ebfec4.js";import"./sampleView-0931e571.js";import"./select2Terms-480025f5.js";import"./svg.download-0dd56dfd.js";import"./sampleScatter.rendererThree-448689c6.js";import"./axis-747c801e.js";import"./line-264f8f9e.js";import"./constant-426a1483.js";import"./summary-54587ccf.js";import"./violin-edbe9a63.js";import"./violin.renderer-4cab7448.js";import"./brush-1a123226.js";import"./basis-3870f5ba.js";import"./log-1001ca83.js";import"./html.legend-0abd27ff.js";import"./violin.interactivity-57637244.js";import"./niceNumLabels-621ef5c3.js";import"./barchart-687ae584.js";import"./bars.settings-64bb4642.js";import"./bars.renderer-95f7250f.js";import"./svg.legend-21629769.js";import"./barchart.events-9e2c1acf.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};
|