@sjcrh/proteinpaint-client 2.219.1 → 2.220.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-KRIX5DBS.js +1362 -0
- package/dist/AggMatrixInput-GBQD74NV.js +402 -0
- package/dist/AggregateMatrix-U2MOQOSZ.js +37 -0
- package/dist/AppHeader-OBZWUCOD.js +826 -0
- package/dist/BoxPlot-ZK6Q5JGE.js +1229 -0
- package/dist/CorrelationVolcano-WGR4JIGK.js +613 -0
- package/dist/Cuminc-I6D6YSIL.js +1217 -0
- package/dist/DE-HO7UBKPC.js +85 -0
- package/dist/DEinput-6LX4I65N.js +479 -0
- package/dist/DM-WYKLX4IC.js +86 -0
- package/dist/DifferentialAnalysis-L5VVBCVZ.js +236 -0
- package/dist/Disco-HLARIYXU.js +3384 -0
- package/dist/Disco.UI-W64WFVC3.js +239 -0
- package/dist/DmrPlot-BKQOT4JM.js +361 -0
- package/dist/GB-WKFGDJYW.js +1388 -0
- package/dist/GSEA-DCCJI5JE.js +870 -0
- package/dist/GeneExpInput-APLFNE6N.js +38 -0
- package/dist/Geomap-FTKWCV4J.js +80 -0
- package/dist/HicApp-ZGZKO4Y4.js +2240 -0
- package/dist/IDCViewer-MXB3OZUZ.js +10808 -0
- package/dist/NumBinaryEditor-S3MHUVZ5.js +274 -0
- package/dist/NumBinaryEditor.unit.spec-264X5ULG.js +308 -0
- package/dist/NumContEditor-MKEZCZMR.js +100 -0
- package/dist/NumContEditor.unit.spec-KBRAIU7M.js +160 -0
- package/dist/NumCustomBinEditor-OSF64BFC.js +29 -0
- package/dist/NumCustomBinEditor.unit.spec-T2SRBXTV.js +393 -0
- package/dist/NumDiscreteEditor-PVW5HRRQ.js +165 -0
- package/dist/NumDiscreteEditor.unit.spec-GUK7VWMR.js +229 -0
- package/dist/NumRegularBinEditor-757VRGFQ.js +29 -0
- package/dist/NumRegularBinEditor.unit.spec-JUIGEH3Z.js +274 -0
- package/dist/NumSplineEditor-U6MVFSCZ.js +205 -0
- package/dist/NumSplineEditor.unit.spec-PSH6YENX.js +220 -0
- package/dist/NumericDensity-YIP25Z4Y.js +29 -0
- package/dist/NumericDensity.unit.spec-3OSIZJHH.js +414 -0
- package/dist/NumericHandler-D2CO3FTS.js +30 -0
- package/dist/NumericHandler.unit.spec-RNFVGO2I.js +225 -0
- package/dist/ProteomeInput-ZOBJ2VU6.js +610 -0
- package/dist/Regression-ABKJOOMQ.js +1412 -0
- package/dist/RunChart2-D5CEEFEE.js +744 -0
- package/dist/SC-RLVEECU5.js +1290 -0
- package/dist/Violin-PCNX2CWV.js +1092 -0
- package/dist/Volcano-NVFNO7NE.js +2661 -0
- package/dist/Volcano-NVFNO7NE.js.map +7 -0
- package/dist/Wsi-MAMCK5YZ.js +636 -0
- package/dist/aboutSunburst-VSQADTFD.js +86 -0
- package/dist/aboutSunburst-VSQADTFD.js.map +7 -0
- package/dist/adSandbox-5YFAQZO6.js +29 -0
- package/dist/animatedBubbleChart-GM2GXDP3.js +542 -0
- package/dist/app-FNNCH37H.js +28 -0
- package/dist/app-ID5S5FUP.js +38 -0
- package/dist/app.js +14 -14
- package/dist/bam-JZLYXHMF.js +872 -0
- package/dist/barchart-EAXXILCH.js +38 -0
- package/dist/barchart2-E6A4UMUB.js +305 -0
- package/dist/block-VMVJH77F.js +6203 -0
- package/dist/block-VMVJH77F.js.map +7 -0
- package/dist/block.init-TUCGKLXG.js +29 -0
- package/dist/block.mds.expressionrank-YVROHZVX.js +350 -0
- package/dist/block.mds.geneboxplot-TQNEWBJY.js +819 -0
- package/dist/block.mds.junction-ZOSTZQF5.js +1534 -0
- package/dist/block.mds.svcnv-XSTSJ4ZD.js +6413 -0
- package/dist/block.svg-D6HXL4SC.js +155 -0
- package/dist/block.tk.aicheck-7RNC4HRR.js +274 -0
- package/dist/block.tk.bam-L3U5YH3F.js +1897 -0
- package/dist/block.tk.bigwig.ui-UVSZ7LWQ.js +202 -0
- package/dist/block.tk.hicstraw-YFBJR5LO.js +814 -0
- package/dist/block.tk.junction-DNRK2JNQ.js +2353 -0
- package/dist/block.tk.junction.textmatrixui-EN4ADCAU.js +190 -0
- package/dist/block.tk.ld-I5CTAJ4K.js +90 -0
- package/dist/block.tk.menu-HUZBY7OM.js +1050 -0
- package/dist/block.tk.pgv-KA6BFYPY.js +934 -0
- package/dist/brainImaging-OQB2ZHCU.js +550 -0
- package/dist/brainRegions-2CRVMS24.js +213 -0
- package/dist/bubbleHeatmap-MANNFEG2.js +374 -0
- package/dist/cellTypeBubbleHeatmap-LRK4R4EC.js +274 -0
- package/dist/chunk-2NB5HVXB.js +159 -0
- package/dist/chunk-2OMX5AYB.js +195 -0
- package/dist/chunk-3E26ITYK.js +55 -0
- package/dist/chunk-3H4FCRAN.js +266 -0
- package/dist/chunk-4GKC43U3.js +480 -0
- package/dist/chunk-4NQS45KH.js +302 -0
- package/dist/chunk-4TJO2DGU.js +2297 -0
- package/dist/chunk-4TJO2DGU.js.map +7 -0
- package/dist/chunk-4ZV6SE4B.js +240 -0
- package/dist/chunk-5DI4UNH5.js +562 -0
- package/dist/chunk-5TA5LHPW.js +54 -0
- package/dist/chunk-5YQXNW6Y.js +1339 -0
- package/dist/chunk-67MD4UES.js +848 -0
- package/dist/chunk-6BBUIRHA.js +123 -0
- package/dist/chunk-6DESNDD5.js +468 -0
- package/dist/chunk-6DRRN5XP.js +243 -0
- package/dist/chunk-6T4MN7LV.js +397 -0
- package/dist/chunk-7SFK32JP.js +398 -0
- package/dist/chunk-7SFK32JP.js.map +7 -0
- package/dist/chunk-7TLUQH7J.js +82 -0
- package/dist/chunk-7YMZSVWW.js +1219 -0
- package/dist/chunk-AENUJ7UO.js +299 -0
- package/dist/chunk-AZSWQWKL.js +263 -0
- package/dist/chunk-B5IJAQG4.js +2054 -0
- package/dist/chunk-B5IJAQG4.js.map +7 -0
- package/dist/chunk-BOCU6PXO.js +257 -0
- package/dist/chunk-C7KUMZQM.js +59 -0
- package/dist/chunk-C7ROKWV2.js +140 -0
- package/dist/chunk-C7ZPDNOJ.js +70 -0
- package/dist/chunk-CAH6LJ5Z.js +31 -0
- package/dist/chunk-DEQREL5P.js +692 -0
- package/dist/chunk-DXKZBSSD.js +2799 -0
- package/dist/chunk-DZBPF5QI.js +550 -0
- package/dist/chunk-DZDK64XY.js +516 -0
- package/dist/chunk-E6C2EWHU.js +176 -0
- package/dist/chunk-EYKJQJ7R.js +382 -0
- package/dist/chunk-FE5TCBIT.js +30 -0
- package/dist/chunk-FJ2JV2VK.js +217 -0
- package/dist/chunk-FZYVPRVQ.js +38 -0
- package/dist/chunk-GBKQHVKJ.js +274 -0
- package/dist/chunk-GK5QS5BR.js +2685 -0
- package/dist/chunk-GLAR6VNF.js +626 -0
- package/dist/chunk-GUW7VTUL.js +281 -0
- package/dist/chunk-H6YM4NKS.js +134 -0
- package/dist/chunk-HJKVYTYK.js +379 -0
- package/dist/chunk-HN67TOA7.js +2008 -0
- package/dist/chunk-IXV7FX5B.js +255 -0
- package/dist/chunk-IZ4IPYQY.js +466 -0
- package/dist/chunk-JHLF2ZC2.js +472 -0
- package/dist/chunk-JPPNQVKA.js +56 -0
- package/dist/chunk-K2ARLT2A.js +26 -0
- package/dist/chunk-KCVBFXGO.js +2941 -0
- package/dist/chunk-KCVBFXGO.js.map +7 -0
- package/dist/chunk-LOX5GAVG.js +103 -0
- package/dist/chunk-M6OSJMVD.js +536 -0
- package/dist/chunk-M6OSJMVD.js.map +7 -0
- package/dist/chunk-MANAUI7R.js +54 -0
- package/dist/chunk-MEUSRAOE.js +170 -0
- package/dist/chunk-MHWYRNGA.js +348 -0
- package/dist/chunk-NX5IB4IY.js +37 -0
- package/dist/chunk-PEKCVKJK.js +26621 -0
- package/dist/chunk-PEKCVKJK.js.map +7 -0
- package/dist/chunk-PIGTIWSK.js +34 -0
- package/dist/chunk-PIN5YUVJ.js +6375 -0
- package/dist/chunk-PV7AYYRZ.js +50 -0
- package/dist/chunk-QI7OWVFY.js +54 -0
- package/dist/chunk-QWBNQYIF.js +182 -0
- package/dist/chunk-RIHO7ZD5.js +119 -0
- package/dist/chunk-S6WRMFWQ.js +418 -0
- package/dist/chunk-SUOEFEJO.js +96 -0
- package/dist/chunk-TVSNHVWX.js +194 -0
- package/dist/chunk-U3CWWOHL.js +340 -0
- package/dist/chunk-VGC4STKW.js +56 -0
- package/dist/chunk-VHC4FDEJ.js +141 -0
- package/dist/chunk-VLIOMJDR.js +276 -0
- package/dist/chunk-VSDJEPDN.js +5214 -0
- package/dist/chunk-WJLRU5OF.js +5786 -0
- package/dist/chunk-WJLRU5OF.js.map +7 -0
- package/dist/chunk-WTWHUZ4O.js +203 -0
- package/dist/chunk-XHZ723K4.js +2334 -0
- package/dist/chunk-XP4P55IC.js +14 -0
- package/dist/chunk-XVPPM25G.js +1253 -0
- package/dist/chunk-XYUERIZ6.js +4389 -0
- package/dist/chunk-XYUERIZ6.js.map +7 -0
- package/dist/chunk-YDIIKD7O.js +102 -0
- package/dist/chunk-YLGSRK75.js +102 -0
- package/dist/chunk-YR6EXI2K.js +184 -0
- package/dist/chunk-Z53VY5JV.js +296 -0
- package/dist/chunk-Z5ECCUNG.js +444 -0
- package/dist/chunk-Z7Q2O5Y7.js +237 -0
- package/dist/cohort-ERDL7EJU.js +66 -0
- package/dist/cohortSunburst-KSTVS3OQ.js +402 -0
- package/dist/condition-CTJYHRJG.js +323 -0
- package/dist/controls-MMMRBTZL.js +30 -0
- package/dist/controls.config-ZKMQI27Q.js +30 -0
- package/dist/correlation-NEQNBQTT.js +91 -0
- package/dist/customdata.inputui-THUR7DF5.js +280 -0
- package/dist/dataDownload-ZMAJUKBX.js +326 -0
- package/dist/dataDownload-ZMAJUKBX.js.map +7 -0
- package/dist/databrowser.ui-A6ZSIUG4.js +421 -0
- package/dist/dictionary-TQUVCHIN.js +109 -0
- package/dist/dnaMethylation-ZMJYY3ML.js +29 -0
- package/dist/dnaMethylation.integration.spec-5DTBGTYB.js +194 -0
- package/dist/dofetch-KBTN6OW4.js +49 -0
- package/dist/e2pca-DNWBF545.js +340 -0
- package/dist/ep-JNH3HMY4.js +1247 -0
- package/dist/expclust.gdc.spec-2NJ7JVJW.js +298 -0
- package/dist/facet-RWQFAVVU.js +556 -0
- package/dist/gb-OT2Z3Y7J.js +77 -0
- package/dist/geneExpClustering-TPYGSTMO.js +240 -0
- package/dist/geneExpression-4K3OTXBZ.js +29 -0
- package/dist/geneExpression-KPUOZ4PT.js +309 -0
- package/dist/geneExpression.unit.spec-26MCGRAP.js +151 -0
- package/dist/geneORA-GNXKCN45.js +269 -0
- package/dist/geneRanking-LV6W6TT7.js +544 -0
- package/dist/geneVariant-B2SYTHG6.js +289 -0
- package/dist/geneVariant-O4XG5VEM.js +32 -0
- package/dist/geneVariant.integration.spec-YYVPAFXT.js +672 -0
- package/dist/genefusion.ui-CVGGYVV3.js +299 -0
- package/dist/geneset-MBMCJNXT.js +199 -0
- package/dist/genomeBrowser.spec-OVXFKEIU.js +272 -0
- package/dist/grin2-OXRU465E.js +945 -0
- package/dist/grin2-YCJGBRFG.js +66 -0
- package/dist/hierCluster-KNPWL5KD.js +51 -0
- package/dist/hierCluster-L3LYQZQL.js +55 -0
- package/dist/hierCluster.config-VZBV5QIO.js +32 -0
- package/dist/hierCluster.integration.spec-ZM7K7WI4.js +479 -0
- package/dist/hierCluster.interactivity-EA7WVIQR.js +45 -0
- package/dist/hierCluster.renderers-YGX6MZZW.js +18 -0
- package/dist/imagePlot-OLVI26S5.js +152 -0
- package/dist/importPlot-3SSCNROC.js +8 -0
- package/dist/isoformExpression-BTMJNAAO.js +31 -0
- package/dist/isoformExpression.unit.spec-S2W5T42Z.js +233 -0
- package/dist/junction-GIS5OCRO.js +32 -0
- package/dist/junction.customTerm-3R2GNE3A.js +15 -0
- package/dist/junction.unit.spec-MSILW6QZ.js +178 -0
- package/dist/launch.adhoc-LLJY4LA5.js +33 -0
- package/dist/leftlabel.sample-P6DDVCOW.js +253 -0
- package/dist/lollipop-J34YCYIP.js +162 -0
- package/dist/maf-MFEEYT5P.js +451 -0
- package/dist/maftimeline-TGJ37QYA.js +583 -0
- package/dist/matrix-A6BNFCIH.js +55 -0
- package/dist/matrix-XTKRVPMQ.js +50 -0
- package/dist/matrix.cells-5RTZUJVN.js +25 -0
- package/dist/matrix.config-RMDDMOZ5.js +33 -0
- package/dist/matrix.data-Y5TPRGMW.js +22 -0
- package/dist/matrix.groups-6DXCAY4P.js +25 -0
- package/dist/matrix.integration.spec-2DVRXVNH.js +3156 -0
- package/dist/matrix.interactivity-MGOYEKDN.js +33 -0
- package/dist/matrix.layout-T7EC5ZC2.js +35 -0
- package/dist/matrix.legend-S3E76TVO.js +19 -0
- package/dist/matrix.renderers-GR77V3RL.js +30 -0
- package/dist/matrix.serieses-3UGLZW25.js +18 -0
- package/dist/matrix.sort-A7CNLDUJ.js +25 -0
- package/dist/matrix.sort.unit.spec-YUCV7G5L.js +464 -0
- package/dist/matrix.sorterUi-6PZR3YOD.js +15 -0
- package/dist/matrix.sorterUi.unit.spec-FESIQ2RC.js +334 -0
- package/dist/matrix.unit.spec-6QF3WKM7.js +146 -0
- package/dist/mavb-UXJBITZM.js +726 -0
- package/dist/mds.fimo-IPNWVBO4.js +509 -0
- package/dist/mds.samplescatterplot-KEG7RSN3.js +1545 -0
- package/dist/mds.survivalplot-LJF2CD33.js +472 -0
- package/dist/multivalue-YRQZ73DI.js +79 -0
- package/dist/numericDictTermCluster-6XDVVWLE.js +62 -0
- package/dist/oncomatrix-TIMH5JKS.js +286 -0
- package/dist/oncomatrix.spec-MUOKKCJN.js +439 -0
- package/dist/plot.2dvaf-3OL4S6QG.js +368 -0
- package/dist/plot.app-CMLHZV5F.js +32 -0
- package/dist/plot.barplot-NRYMIPK6.js +93 -0
- package/dist/plot.boxplot-ANGW3WUC.js +142 -0
- package/dist/plot.brainImaging-YUDBYKX5.js +51 -0
- package/dist/plot.disco-LV7RE3YO.js +98 -0
- package/dist/plot.ssgq-F2LOQFYD.js +130 -0
- package/dist/plot.vaf2cov-5OKC7X6D.js +249 -0
- package/dist/polar2-BGJA2GHZ.js +228 -0
- package/dist/profileForms-BKP3OBKV.js +937 -0
- package/dist/profilePlot-5PRRNUKD.js +45 -0
- package/dist/proteinView-VZIWIZZY.js +1346 -0
- package/dist/proteomeCohortCompare-XZI5OI4X.js +866 -0
- package/dist/pseudbulk.unit.spec-DXJQV7JQ.js +82 -0
- package/dist/pseudobulk-FCH3WW6O.js +31 -0
- package/dist/qualitative-ATX53V44.js +34 -0
- package/dist/qualitative-BRKLVRKW.js +241 -0
- package/dist/radar2-6BBT2FBT.js +323 -0
- package/dist/radarFacility2-76Q3IYP2.js +331 -0
- package/dist/rememberedGvQ.unit.spec-SHTMMZGG.js +210 -0
- package/dist/render-KUC3QH36.js +29 -0
- package/dist/report-KB4K7ZXC.js +213 -0
- package/dist/sampleView-QD2JLZ4T.js +39 -0
- package/dist/samplelst-6R5RYHNV.js +114 -0
- package/dist/samplematrix-NGORNBTR.js +2188 -0
- package/dist/sc-27AHZZDK.js +77 -0
- package/dist/scatter-FXLZMWD6.js +84 -0
- package/dist/scatter-OWFYLMSJ.js +919 -0
- package/dist/selectGenomeWithTklst-ZTGABCXC.js +125 -0
- package/dist/singleCellCellType-7XXJ5NWC.js +29 -0
- package/dist/singleCellCellType.unit.spec-Y3TEYYCF.js +150 -0
- package/dist/singleCellGeneExpression-EUAIEIYJ.js +29 -0
- package/dist/singleCellGeneExpression.unit.spec-JVHPFLML.js +144 -0
- package/dist/singleCellNumericValue-FHIECJDK.js +29 -0
- package/dist/singleCellNumericValue.unit.spec-ZFG56MIO.js +412 -0
- package/dist/singleCellPlot-NDGIW32L.js +44 -0
- package/dist/singlecell-JPWVPZEF.js +1562 -0
- package/dist/singlecell-N7RJMWZ2.js +77 -0
- package/dist/snp-APUTOL2F.js +29 -0
- package/dist/snp.unit.spec-4AN7AJKO.js +167 -0
- package/dist/snplocus-WIMFAMBE.js +200 -0
- package/dist/snplst-SUJ5AK4E.js +36 -0
- package/dist/spliceevent.a53ss.diagram-4UBI7PFJ.js +142 -0
- package/dist/spliceevent.exonskip.diagram-NVEXVRIC.js +274 -0
- package/dist/spliceevent.noeventdiagram-CKEWNLVF.js +451 -0
- package/dist/ssGSEA-CJOVXTAW.js +29 -0
- package/dist/ssGSEA.unit.spec-A7VRVJSF.js +79 -0
- package/dist/stattable-JBJVVLQE.js +112 -0
- package/dist/studyCatalog-NEL7XSIP.js +457 -0
- package/dist/summarizeCnvGeneexp-BZSCTA5W.js +154 -0
- package/dist/summarizeGeneexpSurvival-743KXNV7.js +101 -0
- package/dist/summarizeMutationCnv-CALMSQGV.js +155 -0
- package/dist/summarizeMutationDiagnosis-OTE7O4AS.js +31 -0
- package/dist/summarizeMutationSurvival-VOZOFTFM.js +95 -0
- package/dist/summary-XJKCD35N.js +40 -0
- package/dist/summary.integration.spec-OOEU6WNB.js +405 -0
- package/dist/summaryInput-JSOXVSMY.js +238 -0
- package/dist/sunburst-J3QHMYKW.js +34 -0
- package/dist/sunburst-LZPP6NPV.js +274 -0
- package/dist/survival-5GWRVTQ6.js +49 -0
- package/dist/survival-FW7N3YXZ.js +1248 -0
- package/dist/survival.integration.spec-WN36VUHL.js +609 -0
- package/dist/svgraph-N35EMK3G.js +1377 -0
- package/dist/svmr-EWL5WDDD.js +3834 -0
- package/dist/swimmer-Z6FUH4CD.js +993 -0
- package/dist/swimmer-Z6FUH4CD.js.map +7 -0
- package/dist/table-EI2OIRGE.js +192 -0
- package/dist/termCollection-K3EX5P3F.js +29 -0
- package/dist/termCollection-TBTAHLVH.js +247 -0
- package/dist/termCollection.unit.spec-ZVNAIPHZ.js +295 -0
- package/dist/termCollectionFractionSelection-ATNIPWVX.js +38 -0
- package/dist/termCollectionFractionSelection.unit.spec-VBRWWBML.js +184 -0
- package/dist/tk-P3RPLUVH.js +1193 -0
- package/dist/tk-P3RPLUVH.js.map +7 -0
- package/dist/tk-U6CYISBH.js +37 -0
- package/dist/tp.ui-KBFYUSWS.js +1453 -0
- package/dist/tvs.categorical-5USP772O.js +28 -0
- package/dist/tvs.condition-652MAA2Z.js +160 -0
- package/dist/tvs.dt-7BTARQUS.js +34 -0
- package/dist/tvs.dtcnv.categorical-GAOO3DGO.js +31 -0
- package/dist/tvs.dtcnv.continuous-P2QRD45O.js +72 -0
- package/dist/tvs.dtfusion-L3I65W7L.js +31 -0
- package/dist/tvs.dtitd-B3JPW6OL.js +31 -0
- package/dist/tvs.dtsnvindel-6Y6CJBZV.js +31 -0
- package/dist/tvs.dtsv-GL7CPATL.js +31 -0
- package/dist/tvs.multivalue-75IM23FZ.js +84 -0
- package/dist/tvs.numeric-XB3GBPHE.js +32 -0
- package/dist/tvs.samplelst-QUA45UE7.js +95 -0
- package/dist/tvs.survival-EKSDZZIO.js +110 -0
- package/dist/tvs.termCollection-5ATMDC7O.js +118 -0
- package/dist/vocabulary-5QBBQAYC.js +32 -0
- package/dist/vocabulary-5QBBQAYC.js.map +7 -0
- package/dist/wsi.direct-BU6BL5UR.js +11514 -0
- package/package.json +3 -3
- package/dist/2dmaf-O2SQ5RGD.js +0 -1362
- package/dist/AggMatrixInput-LUCTWXHU.js +0 -402
- package/dist/AggregateMatrix-JVMF27YL.js +0 -37
- package/dist/AppHeader-DJU6HRKO.js +0 -826
- package/dist/BoxPlot-22RXMPRL.js +0 -1229
- package/dist/CorrelationVolcano-PBZWPFSN.js +0 -613
- package/dist/Cuminc-EL74X5GY.js +0 -1217
- package/dist/DE-W5SAMMRW.js +0 -85
- package/dist/DEinput-ZKEFJZQU.js +0 -479
- package/dist/DM-ABKDXMDG.js +0 -86
- package/dist/DifferentialAnalysis-3JTZ5WCQ.js +0 -236
- package/dist/Disco-ME53U25C.js +0 -3384
- package/dist/Disco.UI-F7XKJMKR.js +0 -239
- package/dist/DmrPlot-OWBXUTON.js +0 -361
- package/dist/GB-7X6DBWKS.js +0 -1388
- package/dist/GSEA-GAZIEGD7.js +0 -870
- package/dist/GeneExpInput-BAOC6ICV.js +0 -38
- package/dist/Geomap-OZERLL7V.js +0 -80
- package/dist/HicApp-WDH5LVTD.js +0 -2240
- package/dist/IDCViewer-XBZFU3BU.js +0 -10808
- package/dist/NumBinaryEditor-5R4EUQOZ.js +0 -274
- package/dist/NumBinaryEditor.unit.spec-ULBXMOYY.js +0 -308
- package/dist/NumContEditor-EN6V4FLQ.js +0 -100
- package/dist/NumContEditor.unit.spec-VDWKNIFN.js +0 -160
- package/dist/NumCustomBinEditor-UB34ALNZ.js +0 -29
- package/dist/NumCustomBinEditor.unit.spec-WZXJ7GEC.js +0 -393
- package/dist/NumDiscreteEditor-H6J67YEL.js +0 -165
- package/dist/NumDiscreteEditor.unit.spec-KJ7YU22W.js +0 -229
- package/dist/NumRegularBinEditor-R5JVUG7J.js +0 -29
- package/dist/NumRegularBinEditor.unit.spec-RZ73FMNO.js +0 -274
- package/dist/NumSplineEditor-AOR6OAJA.js +0 -205
- package/dist/NumSplineEditor.unit.spec-Z6ZEI3UO.js +0 -220
- package/dist/NumericDensity-SRTFTDQA.js +0 -29
- package/dist/NumericDensity.unit.spec-MRREBAYU.js +0 -414
- package/dist/NumericHandler-7RALUACA.js +0 -30
- package/dist/NumericHandler.unit.spec-MDO23WRB.js +0 -225
- package/dist/ProteomeInput-MOBXHRD5.js +0 -610
- package/dist/Regression-XWT4NNTG.js +0 -1412
- package/dist/RunChart2-Q7W5MWJS.js +0 -744
- package/dist/SC-MM3JTEVL.js +0 -1290
- package/dist/Violin-XNTBDUPG.js +0 -1092
- package/dist/Volcano-GRKXU3WL.js +0 -2619
- package/dist/Volcano-GRKXU3WL.js.map +0 -7
- package/dist/Wsi-22KJSFVH.js +0 -636
- package/dist/adSandbox-TLYWQOOA.js +0 -29
- package/dist/animatedBubbleChart-67SY5JGP.js +0 -542
- package/dist/app-FG3KPE4R.js +0 -28
- package/dist/app-VK5LYO6B.js +0 -38
- package/dist/bam-TNLNISLV.js +0 -872
- package/dist/barchart-IGWRVB6W.js +0 -38
- package/dist/barchart2-TT6OBJJP.js +0 -305
- package/dist/block-5PV2TYWJ.js +0 -6232
- package/dist/block-5PV2TYWJ.js.map +0 -7
- package/dist/block.init-2Y6CNK7H.js +0 -29
- package/dist/block.mds.expressionrank-VZ4JVPTG.js +0 -350
- package/dist/block.mds.geneboxplot-NYMS32JP.js +0 -819
- package/dist/block.mds.junction-3R6C3B5W.js +0 -1534
- package/dist/block.mds.svcnv-SO5CYYIQ.js +0 -6413
- package/dist/block.svg-R4ASXXNW.js +0 -155
- package/dist/block.tk.aicheck-LYRTDZRA.js +0 -274
- package/dist/block.tk.bam-GR7CHGGQ.js +0 -1897
- package/dist/block.tk.bedgraphdot-GERXK2O6.js +0 -375
- package/dist/block.tk.bedgraphdot-GERXK2O6.js.map +0 -7
- package/dist/block.tk.bigwig.ui-3KMMZX2M.js +0 -202
- package/dist/block.tk.hicstraw-7HH4PGFY.js +0 -814
- package/dist/block.tk.junction-BPEKLYS2.js +0 -2353
- package/dist/block.tk.junction.textmatrixui-2QU5DL2X.js +0 -190
- package/dist/block.tk.ld-TJREYPNY.js +0 -90
- package/dist/block.tk.menu-HDBZK4YP.js +0 -1050
- package/dist/block.tk.pgv-G5GCYBK2.js +0 -934
- package/dist/brainImaging-ODWHF7WZ.js +0 -550
- package/dist/brainRegions-DC7DEA7N.js +0 -213
- package/dist/bubbleHeatmap-T5ACULRL.js +0 -374
- package/dist/cellTypeBubbleHeatmap-RQINXXTK.js +0 -274
- package/dist/chunk-24ZS2XWC.js +0 -176
- package/dist/chunk-2EPEWVKQ.js +0 -4378
- package/dist/chunk-2EPEWVKQ.js.map +0 -7
- package/dist/chunk-2PHFY3VP.js +0 -195
- package/dist/chunk-2QFMKWNS.js +0 -281
- package/dist/chunk-2UB6JZ3I.js +0 -466
- package/dist/chunk-3GQ54XTJ.js +0 -70
- package/dist/chunk-3IE6FDVA.js +0 -1253
- package/dist/chunk-4OOQ52ET.js +0 -182
- package/dist/chunk-5NI77Z3O.js +0 -119
- package/dist/chunk-5TPWMYBG.js +0 -274
- package/dist/chunk-64JHE3GV.js +0 -50
- package/dist/chunk-6MUJGVOH.js +0 -140
- package/dist/chunk-6YGSVJJD.js +0 -54
- package/dist/chunk-7PQVNQFR.js +0 -255
- package/dist/chunk-7XW4JWMJ.js +0 -170
- package/dist/chunk-7ZEJKFGW.js +0 -55
- package/dist/chunk-A6ZUYQHO.js +0 -159
- package/dist/chunk-ALIMVUHR.js +0 -1219
- package/dist/chunk-ANBGNYNP.js +0 -1339
- package/dist/chunk-ATZNXW5F.js +0 -237
- package/dist/chunk-AUPTEHV7.js +0 -257
- package/dist/chunk-B2KYLEYM.js +0 -30
- package/dist/chunk-BJCET6RU.js +0 -263
- package/dist/chunk-BKW35Z4U.js +0 -26619
- package/dist/chunk-BKW35Z4U.js.map +0 -7
- package/dist/chunk-CJHNPYFQ.js +0 -2292
- package/dist/chunk-CJHNPYFQ.js.map +0 -7
- package/dist/chunk-CTVPW77S.js +0 -194
- package/dist/chunk-D6U65W7Q.js +0 -626
- package/dist/chunk-DJMDETVU.js +0 -2685
- package/dist/chunk-DKPAOVJH.js +0 -243
- package/dist/chunk-DRESQF33.js +0 -38
- package/dist/chunk-DXM5MQCZ.js +0 -382
- package/dist/chunk-ETXOEP4N.js +0 -184
- package/dist/chunk-FOUMNTII.js +0 -134
- package/dist/chunk-FTGLS763.js +0 -56
- package/dist/chunk-GN2A5NL5.js +0 -472
- package/dist/chunk-GWNCQ5YI.js +0 -468
- package/dist/chunk-GX6G2SSW.js +0 -26
- package/dist/chunk-H3YF55ZI.js +0 -848
- package/dist/chunk-IANE75G3.js +0 -444
- package/dist/chunk-IKZQST6E.js +0 -5213
- package/dist/chunk-IPRYYK26.js +0 -96
- package/dist/chunk-JL3PYV5F.js +0 -6375
- package/dist/chunk-K6VYSDB5.js +0 -276
- package/dist/chunk-KSS26PXB.js +0 -54
- package/dist/chunk-LO2QBHP6.js +0 -418
- package/dist/chunk-LSRFRZNP.js +0 -59
- package/dist/chunk-LYX4S6WA.js +0 -266
- package/dist/chunk-ME3HB3V6.js +0 -5787
- package/dist/chunk-ME3HB3V6.js.map +0 -7
- package/dist/chunk-MP7BA3GK.js +0 -14
- package/dist/chunk-MVSUESEV.js +0 -141
- package/dist/chunk-NQMS7WV3.js +0 -2799
- package/dist/chunk-NR6WFCPF.js +0 -348
- package/dist/chunk-NS2MZN3C.js +0 -562
- package/dist/chunk-NUA66GW7.js +0 -37
- package/dist/chunk-NYEFSOKD.js +0 -550
- package/dist/chunk-OVHQFZAE.js +0 -34
- package/dist/chunk-QM724EG2.js +0 -103
- package/dist/chunk-RIL33JCW.js +0 -102
- package/dist/chunk-RJAJG5KN.js +0 -2954
- package/dist/chunk-RJAJG5KN.js.map +0 -7
- package/dist/chunk-SLHXR4BZ.js +0 -82
- package/dist/chunk-SO76DLSZ.js +0 -299
- package/dist/chunk-T7CKGRGP.js +0 -398
- package/dist/chunk-T7CKGRGP.js.map +0 -7
- package/dist/chunk-TUO5I6LP.js +0 -123
- package/dist/chunk-TWTPWEYL.js +0 -240
- package/dist/chunk-U2GHNZ4N.js +0 -54
- package/dist/chunk-UAB5PGOP.js +0 -56
- package/dist/chunk-UCB3W3OT.js +0 -217
- package/dist/chunk-UJIB7QM3.js +0 -2334
- package/dist/chunk-UYQGTW7I.js +0 -1857
- package/dist/chunk-UYQGTW7I.js.map +0 -7
- package/dist/chunk-VBDJG6GZ.js +0 -2008
- package/dist/chunk-VOXUMZMG.js +0 -379
- package/dist/chunk-WCNMP54T.js +0 -516
- package/dist/chunk-WETOH7YW.js +0 -692
- package/dist/chunk-WKGKKM6F.js +0 -480
- package/dist/chunk-WV44DGEJ.js +0 -397
- package/dist/chunk-XVEEMQAT.js +0 -31
- package/dist/chunk-YBOHXANC.js +0 -302
- package/dist/chunk-YNQFOPS6.js +0 -203
- package/dist/chunk-YVQ4USPP.js +0 -340
- package/dist/chunk-ZWLT5QS3.js +0 -102
- package/dist/chunk-ZYAZHJPZ.js +0 -296
- package/dist/cohort-QSLKB4ZO.js +0 -66
- package/dist/cohortSunburst-AQFSNJ5K.js +0 -402
- package/dist/condition-MLS6TJHV.js +0 -323
- package/dist/controls-ZT3GZ667.js +0 -30
- package/dist/controls.config-F7NIPLKB.js +0 -30
- package/dist/correlation-ZEIQJGSQ.js +0 -91
- package/dist/customdata.inputui-6PJSAJK2.js +0 -280
- package/dist/dataDownload-CHMPXHBY.js +0 -325
- package/dist/dataDownload-CHMPXHBY.js.map +0 -7
- package/dist/databrowser.ui-EMZ5L2Y7.js +0 -421
- package/dist/dictionary-U2BWGY6B.js +0 -109
- package/dist/dnaMethylation-R34E2XNC.js +0 -29
- package/dist/dnaMethylation.integration.spec-4Z2AJHWY.js +0 -194
- package/dist/dofetch-JY4A7BYI.js +0 -47
- package/dist/e2pca-WSSCXX6A.js +0 -340
- package/dist/ep-ATUWEHDJ.js +0 -1247
- package/dist/expclust.gdc.spec-QRIRRPO7.js +0 -298
- package/dist/facet-5VDCSP3S.js +0 -556
- package/dist/gb-Y4UG6LFA.js +0 -77
- package/dist/geneExpClustering-OO67JNJ2.js +0 -240
- package/dist/geneExpression-5KGV3MAA.js +0 -29
- package/dist/geneExpression-KPRFXKU7.js +0 -309
- package/dist/geneExpression.unit.spec-YV45EZ5O.js +0 -151
- package/dist/geneORA-R74JPUTC.js +0 -269
- package/dist/geneRanking-IJTXNMHV.js +0 -544
- package/dist/geneVariant-HBAHT6LU.js +0 -32
- package/dist/geneVariant-JT3EGAIH.js +0 -289
- package/dist/geneVariant.integration.spec-TFQYPUAS.js +0 -672
- package/dist/genefusion.ui-MMTQMTHC.js +0 -299
- package/dist/geneset-VMBICNCZ.js +0 -199
- package/dist/genomeBrowser.spec-2XLLIYGA.js +0 -272
- package/dist/grin2-2RYPEUWV.js +0 -66
- package/dist/grin2-Y6KAFVV2.js +0 -945
- package/dist/hierCluster-EKGFBQT4.js +0 -51
- package/dist/hierCluster-Z4PVNMGS.js +0 -55
- package/dist/hierCluster.config-Q6WUNK2K.js +0 -32
- package/dist/hierCluster.integration.spec-2LHSHNFC.js +0 -479
- package/dist/hierCluster.interactivity-OGQ3KUY6.js +0 -45
- package/dist/hierCluster.renderers-3GJZXG75.js +0 -18
- package/dist/imagePlot-ZJEZPBX7.js +0 -152
- package/dist/importPlot-GFEFYEHZ.js +0 -8
- package/dist/isoformExpression-A2X3DSR6.js +0 -31
- package/dist/isoformExpression.unit.spec-VKMEGCL4.js +0 -233
- package/dist/junction-HWIHLQU2.js +0 -32
- package/dist/junction.customTerm-C3VWXEYH.js +0 -15
- package/dist/junction.unit.spec-ZYJGDOXJ.js +0 -178
- package/dist/launch.adhoc-HW5AZM4T.js +0 -33
- package/dist/leftlabel.sample-MTW2HRRQ.js +0 -253
- package/dist/lollipop-VWW5H6CR.js +0 -162
- package/dist/maf-KEJYO3H4.js +0 -451
- package/dist/maftimeline-MJZDSGSR.js +0 -583
- package/dist/matrix-3UJW6LOA.js +0 -50
- package/dist/matrix-W4AX5OBM.js +0 -55
- package/dist/matrix.cells-5DAIZ3E5.js +0 -25
- package/dist/matrix.config-PK26VPQT.js +0 -33
- package/dist/matrix.data-UK5DGKBK.js +0 -22
- package/dist/matrix.groups-NM4Q5YDN.js +0 -25
- package/dist/matrix.integration.spec-FGWNBCRR.js +0 -3156
- package/dist/matrix.interactivity-4C37PII5.js +0 -33
- package/dist/matrix.layout-ODV7WXUP.js +0 -35
- package/dist/matrix.legend-5MY7OXWN.js +0 -19
- package/dist/matrix.renderers-QA7W7ZUL.js +0 -30
- package/dist/matrix.serieses-4FSFJPCK.js +0 -18
- package/dist/matrix.sort-3QLFMBJ5.js +0 -25
- package/dist/matrix.sort.unit.spec-HVOC6IYT.js +0 -464
- package/dist/matrix.sorterUi-EY3SA6CG.js +0 -15
- package/dist/matrix.sorterUi.unit.spec-OAXWPZZI.js +0 -334
- package/dist/matrix.unit.spec-RAL7AU22.js +0 -146
- package/dist/mavb-KIM63AC4.js +0 -726
- package/dist/mds.fimo-DMAVM56P.js +0 -509
- package/dist/mds.samplescatterplot-KILTR2C7.js +0 -1545
- package/dist/mds.survivalplot-PV76ANBP.js +0 -472
- package/dist/multivalue-2V5LMQY7.js +0 -79
- package/dist/numericDictTermCluster-TGL4X6UC.js +0 -62
- package/dist/oncomatrix-2O7SLXHX.js +0 -286
- package/dist/oncomatrix.spec-HZJKOF5G.js +0 -439
- package/dist/plot.2dvaf-424NNMMA.js +0 -368
- package/dist/plot.app-YBZDNST2.js +0 -32
- package/dist/plot.barplot-YZQBYJUY.js +0 -93
- package/dist/plot.boxplot-5OW6IBQL.js +0 -142
- package/dist/plot.brainImaging-H3ABPPD3.js +0 -51
- package/dist/plot.disco-X7KCDWGX.js +0 -98
- package/dist/plot.ssgq-GYRVHTC7.js +0 -130
- package/dist/plot.vaf2cov-B2TELPHL.js +0 -249
- package/dist/polar2-5KNZRLXY.js +0 -228
- package/dist/profileForms-FY34KXCL.js +0 -937
- package/dist/profilePlot-3FX2TPYC.js +0 -45
- package/dist/proteinView-WSEO3LD3.js +0 -1346
- package/dist/proteomeCohortCompare-KA2DF3EE.js +0 -866
- package/dist/pseudbulk.unit.spec-AT3TFCOW.js +0 -82
- package/dist/pseudobulk-4ZRHUC7W.js +0 -31
- package/dist/qualitative-3OBGJRP6.js +0 -241
- package/dist/qualitative-FHJD44OA.js +0 -34
- package/dist/radar2-X757WR6V.js +0 -323
- package/dist/radarFacility2-GUBAK4Y3.js +0 -331
- package/dist/rememberedGvQ.unit.spec-ADO4Y2OE.js +0 -210
- package/dist/render-MZEPNEMU.js +0 -29
- package/dist/report-TUAFDGAE.js +0 -213
- package/dist/sampleView-X6YKCBE7.js +0 -39
- package/dist/samplelst-UPNRALBH.js +0 -114
- package/dist/samplematrix-W3HZK3IS.js +0 -2188
- package/dist/sc-UL7233UR.js +0 -77
- package/dist/scatter-FTJ77NUM.js +0 -919
- package/dist/scatter-VQQRIW6N.js +0 -84
- package/dist/selectGenomeWithTklst-HPYPSPFI.js +0 -125
- package/dist/singleCellCellType-XTKGOH6H.js +0 -29
- package/dist/singleCellCellType.unit.spec-A62GT72A.js +0 -150
- package/dist/singleCellGeneExpression-X7H5GTU3.js +0 -29
- package/dist/singleCellGeneExpression.unit.spec-2KQBHG7O.js +0 -144
- package/dist/singleCellNumericValue-6YS42PZ2.js +0 -29
- package/dist/singleCellNumericValue.unit.spec-DNVXQFKI.js +0 -412
- package/dist/singleCellPlot-MGOQ7EQV.js +0 -44
- package/dist/singlecell-CIOB5XON.js +0 -77
- package/dist/singlecell-QW3SLQD6.js +0 -1562
- package/dist/snp-6B4MIPKL.js +0 -29
- package/dist/snp.unit.spec-HNILS56E.js +0 -167
- package/dist/snplocus-DDFLYZ2Y.js +0 -200
- package/dist/snplst-JYKOV73J.js +0 -36
- package/dist/spliceevent.a53ss.diagram-IBD5ITXR.js +0 -142
- package/dist/spliceevent.exonskip.diagram-ZJGEVUYW.js +0 -274
- package/dist/spliceevent.noeventdiagram-RNLNTFOW.js +0 -451
- package/dist/ssGSEA-42VQLAXL.js +0 -29
- package/dist/ssGSEA.unit.spec-FBJANIKG.js +0 -79
- package/dist/stattable-FROSNTJY.js +0 -112
- package/dist/studyCatalog-XIYNJ24U.js +0 -457
- package/dist/summarizeCnvGeneexp-N3OFI24L.js +0 -154
- package/dist/summarizeGeneexpSurvival-J4DO2AL4.js +0 -101
- package/dist/summarizeMutationCnv-Y43BBSI4.js +0 -155
- package/dist/summarizeMutationDiagnosis-JAEAUFCA.js +0 -31
- package/dist/summarizeMutationSurvival-4QZDDXDV.js +0 -95
- package/dist/summary-DTJZ7NNA.js +0 -40
- package/dist/summary.integration.spec-HRRE3J45.js +0 -405
- package/dist/summaryInput-WCADUZBK.js +0 -238
- package/dist/sunburst-BGXSCB63.js +0 -274
- package/dist/sunburst-DSFFFP33.js +0 -504
- package/dist/sunburst-DSFFFP33.js.map +0 -7
- package/dist/survival-LFXQIWRT.js +0 -49
- package/dist/survival-ONWZ5RFM.js +0 -1248
- package/dist/survival.integration.spec-ZP7XWHQH.js +0 -609
- package/dist/svgraph-2SL2SJVU.js +0 -1377
- package/dist/svmr-ONIPMLC2.js +0 -3834
- package/dist/swimmer-2EJZH5PP.js +0 -785
- package/dist/swimmer-2EJZH5PP.js.map +0 -7
- package/dist/table-LLCFO4KK.js +0 -192
- package/dist/termCollection-DAHJGR5P.js +0 -247
- package/dist/termCollection-QIN53TIL.js +0 -29
- package/dist/termCollection.unit.spec-FQOX2IVP.js +0 -295
- package/dist/termCollectionFractionSelection-UKEVVZXL.js +0 -38
- package/dist/termCollectionFractionSelection.unit.spec-URGEYBU2.js +0 -184
- package/dist/tk-4PYQ6WJQ.js +0 -1116
- package/dist/tk-4PYQ6WJQ.js.map +0 -7
- package/dist/tk-GM7CJ2LU.js +0 -37
- package/dist/tp.ui-TRUHW6GP.js +0 -1453
- package/dist/tvs.categorical-IY6YSFVN.js +0 -28
- package/dist/tvs.condition-YTD7GOPW.js +0 -160
- package/dist/tvs.dt-AQQIZD5Z.js +0 -34
- package/dist/tvs.dtcnv.categorical-WOAOGJSW.js +0 -31
- package/dist/tvs.dtcnv.continuous-TJBEPJGO.js +0 -72
- package/dist/tvs.dtfusion-SFMZQKKU.js +0 -31
- package/dist/tvs.dtitd-Q5RQTCLD.js +0 -31
- package/dist/tvs.dtsnvindel-UEK4O6WI.js +0 -31
- package/dist/tvs.dtsv-ECS4KEYG.js +0 -31
- package/dist/tvs.multivalue-CJIZ3I54.js +0 -84
- package/dist/tvs.numeric-UFAOJR2B.js +0 -32
- package/dist/tvs.samplelst-BVFY2P7Q.js +0 -95
- package/dist/tvs.survival-L56B3I55.js +0 -110
- package/dist/tvs.termCollection-BFIBVBSA.js +0 -118
- package/dist/vocabulary-MTKDDDGB.js +0 -32
- package/dist/wsi.direct-OSHY7VL4.js +0 -11514
- /package/dist/{2dmaf-O2SQ5RGD.js.map → 2dmaf-KRIX5DBS.js.map} +0 -0
- /package/dist/{AggMatrixInput-LUCTWXHU.js.map → AggMatrixInput-GBQD74NV.js.map} +0 -0
- /package/dist/{AggregateMatrix-JVMF27YL.js.map → AggregateMatrix-U2MOQOSZ.js.map} +0 -0
- /package/dist/{AppHeader-DJU6HRKO.js.map → AppHeader-OBZWUCOD.js.map} +0 -0
- /package/dist/{BoxPlot-22RXMPRL.js.map → BoxPlot-ZK6Q5JGE.js.map} +0 -0
- /package/dist/{CorrelationVolcano-PBZWPFSN.js.map → CorrelationVolcano-WGR4JIGK.js.map} +0 -0
- /package/dist/{Cuminc-EL74X5GY.js.map → Cuminc-I6D6YSIL.js.map} +0 -0
- /package/dist/{DE-W5SAMMRW.js.map → DE-HO7UBKPC.js.map} +0 -0
- /package/dist/{DEinput-ZKEFJZQU.js.map → DEinput-6LX4I65N.js.map} +0 -0
- /package/dist/{DM-ABKDXMDG.js.map → DM-WYKLX4IC.js.map} +0 -0
- /package/dist/{DifferentialAnalysis-3JTZ5WCQ.js.map → DifferentialAnalysis-L5VVBCVZ.js.map} +0 -0
- /package/dist/{Disco-ME53U25C.js.map → Disco-HLARIYXU.js.map} +0 -0
- /package/dist/{Disco.UI-F7XKJMKR.js.map → Disco.UI-W64WFVC3.js.map} +0 -0
- /package/dist/{DmrPlot-OWBXUTON.js.map → DmrPlot-BKQOT4JM.js.map} +0 -0
- /package/dist/{GB-7X6DBWKS.js.map → GB-WKFGDJYW.js.map} +0 -0
- /package/dist/{GSEA-GAZIEGD7.js.map → GSEA-DCCJI5JE.js.map} +0 -0
- /package/dist/{GeneExpInput-BAOC6ICV.js.map → GeneExpInput-APLFNE6N.js.map} +0 -0
- /package/dist/{Geomap-OZERLL7V.js.map → Geomap-FTKWCV4J.js.map} +0 -0
- /package/dist/{HicApp-WDH5LVTD.js.map → HicApp-ZGZKO4Y4.js.map} +0 -0
- /package/dist/{IDCViewer-XBZFU3BU.js.map → IDCViewer-MXB3OZUZ.js.map} +0 -0
- /package/dist/{NumBinaryEditor-5R4EUQOZ.js.map → NumBinaryEditor-S3MHUVZ5.js.map} +0 -0
- /package/dist/{NumBinaryEditor.unit.spec-ULBXMOYY.js.map → NumBinaryEditor.unit.spec-264X5ULG.js.map} +0 -0
- /package/dist/{NumContEditor-EN6V4FLQ.js.map → NumContEditor-MKEZCZMR.js.map} +0 -0
- /package/dist/{NumContEditor.unit.spec-VDWKNIFN.js.map → NumContEditor.unit.spec-KBRAIU7M.js.map} +0 -0
- /package/dist/{NumCustomBinEditor-UB34ALNZ.js.map → NumCustomBinEditor-OSF64BFC.js.map} +0 -0
- /package/dist/{NumCustomBinEditor.unit.spec-WZXJ7GEC.js.map → NumCustomBinEditor.unit.spec-T2SRBXTV.js.map} +0 -0
- /package/dist/{NumDiscreteEditor-H6J67YEL.js.map → NumDiscreteEditor-PVW5HRRQ.js.map} +0 -0
- /package/dist/{NumDiscreteEditor.unit.spec-KJ7YU22W.js.map → NumDiscreteEditor.unit.spec-GUK7VWMR.js.map} +0 -0
- /package/dist/{NumRegularBinEditor-R5JVUG7J.js.map → NumRegularBinEditor-757VRGFQ.js.map} +0 -0
- /package/dist/{NumRegularBinEditor.unit.spec-RZ73FMNO.js.map → NumRegularBinEditor.unit.spec-JUIGEH3Z.js.map} +0 -0
- /package/dist/{NumSplineEditor-AOR6OAJA.js.map → NumSplineEditor-U6MVFSCZ.js.map} +0 -0
- /package/dist/{NumSplineEditor.unit.spec-Z6ZEI3UO.js.map → NumSplineEditor.unit.spec-PSH6YENX.js.map} +0 -0
- /package/dist/{NumericDensity-SRTFTDQA.js.map → NumericDensity-YIP25Z4Y.js.map} +0 -0
- /package/dist/{NumericDensity.unit.spec-MRREBAYU.js.map → NumericDensity.unit.spec-3OSIZJHH.js.map} +0 -0
- /package/dist/{NumericHandler-7RALUACA.js.map → NumericHandler-D2CO3FTS.js.map} +0 -0
- /package/dist/{NumericHandler.unit.spec-MDO23WRB.js.map → NumericHandler.unit.spec-RNFVGO2I.js.map} +0 -0
- /package/dist/{ProteomeInput-MOBXHRD5.js.map → ProteomeInput-ZOBJ2VU6.js.map} +0 -0
- /package/dist/{Regression-XWT4NNTG.js.map → Regression-ABKJOOMQ.js.map} +0 -0
- /package/dist/{RunChart2-Q7W5MWJS.js.map → RunChart2-D5CEEFEE.js.map} +0 -0
- /package/dist/{SC-MM3JTEVL.js.map → SC-RLVEECU5.js.map} +0 -0
- /package/dist/{Violin-XNTBDUPG.js.map → Violin-PCNX2CWV.js.map} +0 -0
- /package/dist/{Wsi-22KJSFVH.js.map → Wsi-MAMCK5YZ.js.map} +0 -0
- /package/dist/{adSandbox-TLYWQOOA.js.map → adSandbox-5YFAQZO6.js.map} +0 -0
- /package/dist/{animatedBubbleChart-67SY5JGP.js.map → animatedBubbleChart-GM2GXDP3.js.map} +0 -0
- /package/dist/{app-FG3KPE4R.js.map → app-FNNCH37H.js.map} +0 -0
- /package/dist/{app-VK5LYO6B.js.map → app-ID5S5FUP.js.map} +0 -0
- /package/dist/{bam-TNLNISLV.js.map → bam-JZLYXHMF.js.map} +0 -0
- /package/dist/{barchart-IGWRVB6W.js.map → barchart-EAXXILCH.js.map} +0 -0
- /package/dist/{barchart2-TT6OBJJP.js.map → barchart2-E6A4UMUB.js.map} +0 -0
- /package/dist/{block.init-2Y6CNK7H.js.map → block.init-TUCGKLXG.js.map} +0 -0
- /package/dist/{block.mds.expressionrank-VZ4JVPTG.js.map → block.mds.expressionrank-YVROHZVX.js.map} +0 -0
- /package/dist/{block.mds.geneboxplot-NYMS32JP.js.map → block.mds.geneboxplot-TQNEWBJY.js.map} +0 -0
- /package/dist/{block.mds.junction-3R6C3B5W.js.map → block.mds.junction-ZOSTZQF5.js.map} +0 -0
- /package/dist/{block.mds.svcnv-SO5CYYIQ.js.map → block.mds.svcnv-XSTSJ4ZD.js.map} +0 -0
- /package/dist/{block.svg-R4ASXXNW.js.map → block.svg-D6HXL4SC.js.map} +0 -0
- /package/dist/{block.tk.aicheck-LYRTDZRA.js.map → block.tk.aicheck-7RNC4HRR.js.map} +0 -0
- /package/dist/{block.tk.bam-GR7CHGGQ.js.map → block.tk.bam-L3U5YH3F.js.map} +0 -0
- /package/dist/{block.tk.bigwig.ui-3KMMZX2M.js.map → block.tk.bigwig.ui-UVSZ7LWQ.js.map} +0 -0
- /package/dist/{block.tk.hicstraw-7HH4PGFY.js.map → block.tk.hicstraw-YFBJR5LO.js.map} +0 -0
- /package/dist/{block.tk.junction-BPEKLYS2.js.map → block.tk.junction-DNRK2JNQ.js.map} +0 -0
- /package/dist/{block.tk.junction.textmatrixui-2QU5DL2X.js.map → block.tk.junction.textmatrixui-EN4ADCAU.js.map} +0 -0
- /package/dist/{block.tk.ld-TJREYPNY.js.map → block.tk.ld-I5CTAJ4K.js.map} +0 -0
- /package/dist/{block.tk.menu-HDBZK4YP.js.map → block.tk.menu-HUZBY7OM.js.map} +0 -0
- /package/dist/{block.tk.pgv-G5GCYBK2.js.map → block.tk.pgv-KA6BFYPY.js.map} +0 -0
- /package/dist/{brainImaging-ODWHF7WZ.js.map → brainImaging-OQB2ZHCU.js.map} +0 -0
- /package/dist/{brainRegions-DC7DEA7N.js.map → brainRegions-2CRVMS24.js.map} +0 -0
- /package/dist/{bubbleHeatmap-T5ACULRL.js.map → bubbleHeatmap-MANNFEG2.js.map} +0 -0
- /package/dist/{cellTypeBubbleHeatmap-RQINXXTK.js.map → cellTypeBubbleHeatmap-LRK4R4EC.js.map} +0 -0
- /package/dist/{chunk-A6ZUYQHO.js.map → chunk-2NB5HVXB.js.map} +0 -0
- /package/dist/{chunk-2PHFY3VP.js.map → chunk-2OMX5AYB.js.map} +0 -0
- /package/dist/{chunk-7ZEJKFGW.js.map → chunk-3E26ITYK.js.map} +0 -0
- /package/dist/{chunk-LYX4S6WA.js.map → chunk-3H4FCRAN.js.map} +0 -0
- /package/dist/{chunk-WKGKKM6F.js.map → chunk-4GKC43U3.js.map} +0 -0
- /package/dist/{chunk-YBOHXANC.js.map → chunk-4NQS45KH.js.map} +0 -0
- /package/dist/{chunk-TWTPWEYL.js.map → chunk-4ZV6SE4B.js.map} +0 -0
- /package/dist/{chunk-NS2MZN3C.js.map → chunk-5DI4UNH5.js.map} +0 -0
- /package/dist/{chunk-KSS26PXB.js.map → chunk-5TA5LHPW.js.map} +0 -0
- /package/dist/{chunk-ANBGNYNP.js.map → chunk-5YQXNW6Y.js.map} +0 -0
- /package/dist/{chunk-H3YF55ZI.js.map → chunk-67MD4UES.js.map} +0 -0
- /package/dist/{chunk-TUO5I6LP.js.map → chunk-6BBUIRHA.js.map} +0 -0
- /package/dist/{chunk-GWNCQ5YI.js.map → chunk-6DESNDD5.js.map} +0 -0
- /package/dist/{chunk-DKPAOVJH.js.map → chunk-6DRRN5XP.js.map} +0 -0
- /package/dist/{chunk-WV44DGEJ.js.map → chunk-6T4MN7LV.js.map} +0 -0
- /package/dist/{chunk-SLHXR4BZ.js.map → chunk-7TLUQH7J.js.map} +0 -0
- /package/dist/{chunk-ALIMVUHR.js.map → chunk-7YMZSVWW.js.map} +0 -0
- /package/dist/{chunk-SO76DLSZ.js.map → chunk-AENUJ7UO.js.map} +0 -0
- /package/dist/{chunk-BJCET6RU.js.map → chunk-AZSWQWKL.js.map} +0 -0
- /package/dist/{chunk-AUPTEHV7.js.map → chunk-BOCU6PXO.js.map} +0 -0
- /package/dist/{chunk-LSRFRZNP.js.map → chunk-C7KUMZQM.js.map} +0 -0
- /package/dist/{chunk-6MUJGVOH.js.map → chunk-C7ROKWV2.js.map} +0 -0
- /package/dist/{chunk-3GQ54XTJ.js.map → chunk-C7ZPDNOJ.js.map} +0 -0
- /package/dist/{chunk-XVEEMQAT.js.map → chunk-CAH6LJ5Z.js.map} +0 -0
- /package/dist/{chunk-WETOH7YW.js.map → chunk-DEQREL5P.js.map} +0 -0
- /package/dist/{chunk-NQMS7WV3.js.map → chunk-DXKZBSSD.js.map} +0 -0
- /package/dist/{chunk-NYEFSOKD.js.map → chunk-DZBPF5QI.js.map} +0 -0
- /package/dist/{chunk-WCNMP54T.js.map → chunk-DZDK64XY.js.map} +0 -0
- /package/dist/{chunk-24ZS2XWC.js.map → chunk-E6C2EWHU.js.map} +0 -0
- /package/dist/{chunk-DXM5MQCZ.js.map → chunk-EYKJQJ7R.js.map} +0 -0
- /package/dist/{chunk-B2KYLEYM.js.map → chunk-FE5TCBIT.js.map} +0 -0
- /package/dist/{chunk-UCB3W3OT.js.map → chunk-FJ2JV2VK.js.map} +0 -0
- /package/dist/{chunk-DRESQF33.js.map → chunk-FZYVPRVQ.js.map} +0 -0
- /package/dist/{chunk-5TPWMYBG.js.map → chunk-GBKQHVKJ.js.map} +0 -0
- /package/dist/{chunk-DJMDETVU.js.map → chunk-GK5QS5BR.js.map} +0 -0
- /package/dist/{chunk-D6U65W7Q.js.map → chunk-GLAR6VNF.js.map} +0 -0
- /package/dist/{chunk-2QFMKWNS.js.map → chunk-GUW7VTUL.js.map} +0 -0
- /package/dist/{chunk-FOUMNTII.js.map → chunk-H6YM4NKS.js.map} +0 -0
- /package/dist/{chunk-VOXUMZMG.js.map → chunk-HJKVYTYK.js.map} +0 -0
- /package/dist/{chunk-VBDJG6GZ.js.map → chunk-HN67TOA7.js.map} +0 -0
- /package/dist/{chunk-7PQVNQFR.js.map → chunk-IXV7FX5B.js.map} +0 -0
- /package/dist/{chunk-2UB6JZ3I.js.map → chunk-IZ4IPYQY.js.map} +0 -0
- /package/dist/{chunk-GN2A5NL5.js.map → chunk-JHLF2ZC2.js.map} +0 -0
- /package/dist/{chunk-FTGLS763.js.map → chunk-JPPNQVKA.js.map} +0 -0
- /package/dist/{chunk-GX6G2SSW.js.map → chunk-K2ARLT2A.js.map} +0 -0
- /package/dist/{chunk-QM724EG2.js.map → chunk-LOX5GAVG.js.map} +0 -0
- /package/dist/{chunk-6YGSVJJD.js.map → chunk-MANAUI7R.js.map} +0 -0
- /package/dist/{chunk-7XW4JWMJ.js.map → chunk-MEUSRAOE.js.map} +0 -0
- /package/dist/{chunk-NR6WFCPF.js.map → chunk-MHWYRNGA.js.map} +0 -0
- /package/dist/{chunk-NUA66GW7.js.map → chunk-NX5IB4IY.js.map} +0 -0
- /package/dist/{chunk-OVHQFZAE.js.map → chunk-PIGTIWSK.js.map} +0 -0
- /package/dist/{chunk-JL3PYV5F.js.map → chunk-PIN5YUVJ.js.map} +0 -0
- /package/dist/{chunk-64JHE3GV.js.map → chunk-PV7AYYRZ.js.map} +0 -0
- /package/dist/{chunk-U2GHNZ4N.js.map → chunk-QI7OWVFY.js.map} +0 -0
- /package/dist/{chunk-4OOQ52ET.js.map → chunk-QWBNQYIF.js.map} +0 -0
- /package/dist/{chunk-5NI77Z3O.js.map → chunk-RIHO7ZD5.js.map} +0 -0
- /package/dist/{chunk-LO2QBHP6.js.map → chunk-S6WRMFWQ.js.map} +0 -0
- /package/dist/{chunk-IPRYYK26.js.map → chunk-SUOEFEJO.js.map} +0 -0
- /package/dist/{chunk-CTVPW77S.js.map → chunk-TVSNHVWX.js.map} +0 -0
- /package/dist/{chunk-YVQ4USPP.js.map → chunk-U3CWWOHL.js.map} +0 -0
- /package/dist/{chunk-UAB5PGOP.js.map → chunk-VGC4STKW.js.map} +0 -0
- /package/dist/{chunk-MVSUESEV.js.map → chunk-VHC4FDEJ.js.map} +0 -0
- /package/dist/{chunk-K6VYSDB5.js.map → chunk-VLIOMJDR.js.map} +0 -0
- /package/dist/{chunk-IKZQST6E.js.map → chunk-VSDJEPDN.js.map} +0 -0
- /package/dist/{chunk-YNQFOPS6.js.map → chunk-WTWHUZ4O.js.map} +0 -0
- /package/dist/{chunk-UJIB7QM3.js.map → chunk-XHZ723K4.js.map} +0 -0
- /package/dist/{chunk-MP7BA3GK.js.map → chunk-XP4P55IC.js.map} +0 -0
- /package/dist/{chunk-3IE6FDVA.js.map → chunk-XVPPM25G.js.map} +0 -0
- /package/dist/{chunk-RIL33JCW.js.map → chunk-YDIIKD7O.js.map} +0 -0
- /package/dist/{chunk-ZWLT5QS3.js.map → chunk-YLGSRK75.js.map} +0 -0
- /package/dist/{chunk-ETXOEP4N.js.map → chunk-YR6EXI2K.js.map} +0 -0
- /package/dist/{chunk-ZYAZHJPZ.js.map → chunk-Z53VY5JV.js.map} +0 -0
- /package/dist/{chunk-IANE75G3.js.map → chunk-Z5ECCUNG.js.map} +0 -0
- /package/dist/{chunk-ATZNXW5F.js.map → chunk-Z7Q2O5Y7.js.map} +0 -0
- /package/dist/{cohort-QSLKB4ZO.js.map → cohort-ERDL7EJU.js.map} +0 -0
- /package/dist/{cohortSunburst-AQFSNJ5K.js.map → cohortSunburst-KSTVS3OQ.js.map} +0 -0
- /package/dist/{condition-MLS6TJHV.js.map → condition-CTJYHRJG.js.map} +0 -0
- /package/dist/{controls-ZT3GZ667.js.map → controls-MMMRBTZL.js.map} +0 -0
- /package/dist/{controls.config-F7NIPLKB.js.map → controls.config-ZKMQI27Q.js.map} +0 -0
- /package/dist/{correlation-ZEIQJGSQ.js.map → correlation-NEQNBQTT.js.map} +0 -0
- /package/dist/{customdata.inputui-6PJSAJK2.js.map → customdata.inputui-THUR7DF5.js.map} +0 -0
- /package/dist/{databrowser.ui-EMZ5L2Y7.js.map → databrowser.ui-A6ZSIUG4.js.map} +0 -0
- /package/dist/{dictionary-U2BWGY6B.js.map → dictionary-TQUVCHIN.js.map} +0 -0
- /package/dist/{dnaMethylation-R34E2XNC.js.map → dnaMethylation-ZMJYY3ML.js.map} +0 -0
- /package/dist/{dnaMethylation.integration.spec-4Z2AJHWY.js.map → dnaMethylation.integration.spec-5DTBGTYB.js.map} +0 -0
- /package/dist/{dofetch-JY4A7BYI.js.map → dofetch-KBTN6OW4.js.map} +0 -0
- /package/dist/{e2pca-WSSCXX6A.js.map → e2pca-DNWBF545.js.map} +0 -0
- /package/dist/{ep-ATUWEHDJ.js.map → ep-JNH3HMY4.js.map} +0 -0
- /package/dist/{expclust.gdc.spec-QRIRRPO7.js.map → expclust.gdc.spec-2NJ7JVJW.js.map} +0 -0
- /package/dist/{facet-5VDCSP3S.js.map → facet-RWQFAVVU.js.map} +0 -0
- /package/dist/{gb-Y4UG6LFA.js.map → gb-OT2Z3Y7J.js.map} +0 -0
- /package/dist/{geneExpClustering-OO67JNJ2.js.map → geneExpClustering-TPYGSTMO.js.map} +0 -0
- /package/dist/{geneExpression-5KGV3MAA.js.map → geneExpression-4K3OTXBZ.js.map} +0 -0
- /package/dist/{geneExpression-KPRFXKU7.js.map → geneExpression-KPUOZ4PT.js.map} +0 -0
- /package/dist/{geneExpression.unit.spec-YV45EZ5O.js.map → geneExpression.unit.spec-26MCGRAP.js.map} +0 -0
- /package/dist/{geneORA-R74JPUTC.js.map → geneORA-GNXKCN45.js.map} +0 -0
- /package/dist/{geneRanking-IJTXNMHV.js.map → geneRanking-LV6W6TT7.js.map} +0 -0
- /package/dist/{geneVariant-JT3EGAIH.js.map → geneVariant-B2SYTHG6.js.map} +0 -0
- /package/dist/{geneVariant-HBAHT6LU.js.map → geneVariant-O4XG5VEM.js.map} +0 -0
- /package/dist/{geneVariant.integration.spec-TFQYPUAS.js.map → geneVariant.integration.spec-YYVPAFXT.js.map} +0 -0
- /package/dist/{genefusion.ui-MMTQMTHC.js.map → genefusion.ui-CVGGYVV3.js.map} +0 -0
- /package/dist/{geneset-VMBICNCZ.js.map → geneset-MBMCJNXT.js.map} +0 -0
- /package/dist/{genomeBrowser.spec-2XLLIYGA.js.map → genomeBrowser.spec-OVXFKEIU.js.map} +0 -0
- /package/dist/{grin2-Y6KAFVV2.js.map → grin2-OXRU465E.js.map} +0 -0
- /package/dist/{grin2-2RYPEUWV.js.map → grin2-YCJGBRFG.js.map} +0 -0
- /package/dist/{hierCluster-EKGFBQT4.js.map → hierCluster-KNPWL5KD.js.map} +0 -0
- /package/dist/{hierCluster-Z4PVNMGS.js.map → hierCluster-L3LYQZQL.js.map} +0 -0
- /package/dist/{hierCluster.config-Q6WUNK2K.js.map → hierCluster.config-VZBV5QIO.js.map} +0 -0
- /package/dist/{hierCluster.integration.spec-2LHSHNFC.js.map → hierCluster.integration.spec-ZM7K7WI4.js.map} +0 -0
- /package/dist/{hierCluster.interactivity-OGQ3KUY6.js.map → hierCluster.interactivity-EA7WVIQR.js.map} +0 -0
- /package/dist/{hierCluster.renderers-3GJZXG75.js.map → hierCluster.renderers-YGX6MZZW.js.map} +0 -0
- /package/dist/{imagePlot-ZJEZPBX7.js.map → imagePlot-OLVI26S5.js.map} +0 -0
- /package/dist/{importPlot-GFEFYEHZ.js.map → importPlot-3SSCNROC.js.map} +0 -0
- /package/dist/{isoformExpression-A2X3DSR6.js.map → isoformExpression-BTMJNAAO.js.map} +0 -0
- /package/dist/{isoformExpression.unit.spec-VKMEGCL4.js.map → isoformExpression.unit.spec-S2W5T42Z.js.map} +0 -0
- /package/dist/{junction-HWIHLQU2.js.map → junction-GIS5OCRO.js.map} +0 -0
- /package/dist/{junction.customTerm-C3VWXEYH.js.map → junction.customTerm-3R2GNE3A.js.map} +0 -0
- /package/dist/{junction.unit.spec-ZYJGDOXJ.js.map → junction.unit.spec-MSILW6QZ.js.map} +0 -0
- /package/dist/{launch.adhoc-HW5AZM4T.js.map → launch.adhoc-LLJY4LA5.js.map} +0 -0
- /package/dist/{leftlabel.sample-MTW2HRRQ.js.map → leftlabel.sample-P6DDVCOW.js.map} +0 -0
- /package/dist/{lollipop-VWW5H6CR.js.map → lollipop-J34YCYIP.js.map} +0 -0
- /package/dist/{maf-KEJYO3H4.js.map → maf-MFEEYT5P.js.map} +0 -0
- /package/dist/{maftimeline-MJZDSGSR.js.map → maftimeline-TGJ37QYA.js.map} +0 -0
- /package/dist/{matrix-3UJW6LOA.js.map → matrix-A6BNFCIH.js.map} +0 -0
- /package/dist/{matrix-W4AX5OBM.js.map → matrix-XTKRVPMQ.js.map} +0 -0
- /package/dist/{matrix.cells-5DAIZ3E5.js.map → matrix.cells-5RTZUJVN.js.map} +0 -0
- /package/dist/{matrix.config-PK26VPQT.js.map → matrix.config-RMDDMOZ5.js.map} +0 -0
- /package/dist/{matrix.data-UK5DGKBK.js.map → matrix.data-Y5TPRGMW.js.map} +0 -0
- /package/dist/{matrix.groups-NM4Q5YDN.js.map → matrix.groups-6DXCAY4P.js.map} +0 -0
- /package/dist/{matrix.integration.spec-FGWNBCRR.js.map → matrix.integration.spec-2DVRXVNH.js.map} +0 -0
- /package/dist/{matrix.interactivity-4C37PII5.js.map → matrix.interactivity-MGOYEKDN.js.map} +0 -0
- /package/dist/{matrix.layout-ODV7WXUP.js.map → matrix.layout-T7EC5ZC2.js.map} +0 -0
- /package/dist/{matrix.legend-5MY7OXWN.js.map → matrix.legend-S3E76TVO.js.map} +0 -0
- /package/dist/{matrix.renderers-QA7W7ZUL.js.map → matrix.renderers-GR77V3RL.js.map} +0 -0
- /package/dist/{matrix.serieses-4FSFJPCK.js.map → matrix.serieses-3UGLZW25.js.map} +0 -0
- /package/dist/{matrix.sort-3QLFMBJ5.js.map → matrix.sort-A7CNLDUJ.js.map} +0 -0
- /package/dist/{matrix.sort.unit.spec-HVOC6IYT.js.map → matrix.sort.unit.spec-YUCV7G5L.js.map} +0 -0
- /package/dist/{matrix.sorterUi-EY3SA6CG.js.map → matrix.sorterUi-6PZR3YOD.js.map} +0 -0
- /package/dist/{matrix.sorterUi.unit.spec-OAXWPZZI.js.map → matrix.sorterUi.unit.spec-FESIQ2RC.js.map} +0 -0
- /package/dist/{matrix.unit.spec-RAL7AU22.js.map → matrix.unit.spec-6QF3WKM7.js.map} +0 -0
- /package/dist/{mavb-KIM63AC4.js.map → mavb-UXJBITZM.js.map} +0 -0
- /package/dist/{mds.fimo-DMAVM56P.js.map → mds.fimo-IPNWVBO4.js.map} +0 -0
- /package/dist/{mds.samplescatterplot-KILTR2C7.js.map → mds.samplescatterplot-KEG7RSN3.js.map} +0 -0
- /package/dist/{mds.survivalplot-PV76ANBP.js.map → mds.survivalplot-LJF2CD33.js.map} +0 -0
- /package/dist/{multivalue-2V5LMQY7.js.map → multivalue-YRQZ73DI.js.map} +0 -0
- /package/dist/{numericDictTermCluster-TGL4X6UC.js.map → numericDictTermCluster-6XDVVWLE.js.map} +0 -0
- /package/dist/{oncomatrix-2O7SLXHX.js.map → oncomatrix-TIMH5JKS.js.map} +0 -0
- /package/dist/{oncomatrix.spec-HZJKOF5G.js.map → oncomatrix.spec-MUOKKCJN.js.map} +0 -0
- /package/dist/{plot.2dvaf-424NNMMA.js.map → plot.2dvaf-3OL4S6QG.js.map} +0 -0
- /package/dist/{plot.app-YBZDNST2.js.map → plot.app-CMLHZV5F.js.map} +0 -0
- /package/dist/{plot.barplot-YZQBYJUY.js.map → plot.barplot-NRYMIPK6.js.map} +0 -0
- /package/dist/{plot.boxplot-5OW6IBQL.js.map → plot.boxplot-ANGW3WUC.js.map} +0 -0
- /package/dist/{plot.brainImaging-H3ABPPD3.js.map → plot.brainImaging-YUDBYKX5.js.map} +0 -0
- /package/dist/{plot.disco-X7KCDWGX.js.map → plot.disco-LV7RE3YO.js.map} +0 -0
- /package/dist/{plot.ssgq-GYRVHTC7.js.map → plot.ssgq-F2LOQFYD.js.map} +0 -0
- /package/dist/{plot.vaf2cov-B2TELPHL.js.map → plot.vaf2cov-5OKC7X6D.js.map} +0 -0
- /package/dist/{polar2-5KNZRLXY.js.map → polar2-BGJA2GHZ.js.map} +0 -0
- /package/dist/{profileForms-FY34KXCL.js.map → profileForms-BKP3OBKV.js.map} +0 -0
- /package/dist/{profilePlot-3FX2TPYC.js.map → profilePlot-5PRRNUKD.js.map} +0 -0
- /package/dist/{proteinView-WSEO3LD3.js.map → proteinView-VZIWIZZY.js.map} +0 -0
- /package/dist/{proteomeCohortCompare-KA2DF3EE.js.map → proteomeCohortCompare-XZI5OI4X.js.map} +0 -0
- /package/dist/{pseudbulk.unit.spec-AT3TFCOW.js.map → pseudbulk.unit.spec-DXJQV7JQ.js.map} +0 -0
- /package/dist/{pseudobulk-4ZRHUC7W.js.map → pseudobulk-FCH3WW6O.js.map} +0 -0
- /package/dist/{qualitative-FHJD44OA.js.map → qualitative-ATX53V44.js.map} +0 -0
- /package/dist/{qualitative-3OBGJRP6.js.map → qualitative-BRKLVRKW.js.map} +0 -0
- /package/dist/{radar2-X757WR6V.js.map → radar2-6BBT2FBT.js.map} +0 -0
- /package/dist/{radarFacility2-GUBAK4Y3.js.map → radarFacility2-76Q3IYP2.js.map} +0 -0
- /package/dist/{rememberedGvQ.unit.spec-ADO4Y2OE.js.map → rememberedGvQ.unit.spec-SHTMMZGG.js.map} +0 -0
- /package/dist/{render-MZEPNEMU.js.map → render-KUC3QH36.js.map} +0 -0
- /package/dist/{report-TUAFDGAE.js.map → report-KB4K7ZXC.js.map} +0 -0
- /package/dist/{sampleView-X6YKCBE7.js.map → sampleView-QD2JLZ4T.js.map} +0 -0
- /package/dist/{samplelst-UPNRALBH.js.map → samplelst-6R5RYHNV.js.map} +0 -0
- /package/dist/{samplematrix-W3HZK3IS.js.map → samplematrix-NGORNBTR.js.map} +0 -0
- /package/dist/{sc-UL7233UR.js.map → sc-27AHZZDK.js.map} +0 -0
- /package/dist/{scatter-VQQRIW6N.js.map → scatter-FXLZMWD6.js.map} +0 -0
- /package/dist/{scatter-FTJ77NUM.js.map → scatter-OWFYLMSJ.js.map} +0 -0
- /package/dist/{selectGenomeWithTklst-HPYPSPFI.js.map → selectGenomeWithTklst-ZTGABCXC.js.map} +0 -0
- /package/dist/{singleCellCellType-XTKGOH6H.js.map → singleCellCellType-7XXJ5NWC.js.map} +0 -0
- /package/dist/{singleCellCellType.unit.spec-A62GT72A.js.map → singleCellCellType.unit.spec-Y3TEYYCF.js.map} +0 -0
- /package/dist/{singleCellGeneExpression-X7H5GTU3.js.map → singleCellGeneExpression-EUAIEIYJ.js.map} +0 -0
- /package/dist/{singleCellGeneExpression.unit.spec-2KQBHG7O.js.map → singleCellGeneExpression.unit.spec-JVHPFLML.js.map} +0 -0
- /package/dist/{singleCellNumericValue-6YS42PZ2.js.map → singleCellNumericValue-FHIECJDK.js.map} +0 -0
- /package/dist/{singleCellNumericValue.unit.spec-DNVXQFKI.js.map → singleCellNumericValue.unit.spec-ZFG56MIO.js.map} +0 -0
- /package/dist/{singleCellPlot-MGOQ7EQV.js.map → singleCellPlot-NDGIW32L.js.map} +0 -0
- /package/dist/{singlecell-QW3SLQD6.js.map → singlecell-JPWVPZEF.js.map} +0 -0
- /package/dist/{singlecell-CIOB5XON.js.map → singlecell-N7RJMWZ2.js.map} +0 -0
- /package/dist/{snp-6B4MIPKL.js.map → snp-APUTOL2F.js.map} +0 -0
- /package/dist/{snp.unit.spec-HNILS56E.js.map → snp.unit.spec-4AN7AJKO.js.map} +0 -0
- /package/dist/{snplocus-DDFLYZ2Y.js.map → snplocus-WIMFAMBE.js.map} +0 -0
- /package/dist/{snplst-JYKOV73J.js.map → snplst-SUJ5AK4E.js.map} +0 -0
- /package/dist/{spliceevent.a53ss.diagram-IBD5ITXR.js.map → spliceevent.a53ss.diagram-4UBI7PFJ.js.map} +0 -0
- /package/dist/{spliceevent.exonskip.diagram-ZJGEVUYW.js.map → spliceevent.exonskip.diagram-NVEXVRIC.js.map} +0 -0
- /package/dist/{spliceevent.noeventdiagram-RNLNTFOW.js.map → spliceevent.noeventdiagram-CKEWNLVF.js.map} +0 -0
- /package/dist/{ssGSEA-42VQLAXL.js.map → ssGSEA-CJOVXTAW.js.map} +0 -0
- /package/dist/{ssGSEA.unit.spec-FBJANIKG.js.map → ssGSEA.unit.spec-A7VRVJSF.js.map} +0 -0
- /package/dist/{stattable-FROSNTJY.js.map → stattable-JBJVVLQE.js.map} +0 -0
- /package/dist/{studyCatalog-XIYNJ24U.js.map → studyCatalog-NEL7XSIP.js.map} +0 -0
- /package/dist/{summarizeCnvGeneexp-N3OFI24L.js.map → summarizeCnvGeneexp-BZSCTA5W.js.map} +0 -0
- /package/dist/{summarizeGeneexpSurvival-J4DO2AL4.js.map → summarizeGeneexpSurvival-743KXNV7.js.map} +0 -0
- /package/dist/{summarizeMutationCnv-Y43BBSI4.js.map → summarizeMutationCnv-CALMSQGV.js.map} +0 -0
- /package/dist/{summarizeMutationDiagnosis-JAEAUFCA.js.map → summarizeMutationDiagnosis-OTE7O4AS.js.map} +0 -0
- /package/dist/{summarizeMutationSurvival-4QZDDXDV.js.map → summarizeMutationSurvival-VOZOFTFM.js.map} +0 -0
- /package/dist/{summary-DTJZ7NNA.js.map → summary-XJKCD35N.js.map} +0 -0
- /package/dist/{summary.integration.spec-HRRE3J45.js.map → summary.integration.spec-OOEU6WNB.js.map} +0 -0
- /package/dist/{summaryInput-WCADUZBK.js.map → summaryInput-JSOXVSMY.js.map} +0 -0
- /package/dist/{termCollection-QIN53TIL.js.map → sunburst-J3QHMYKW.js.map} +0 -0
- /package/dist/{sunburst-BGXSCB63.js.map → sunburst-LZPP6NPV.js.map} +0 -0
- /package/dist/{survival-LFXQIWRT.js.map → survival-5GWRVTQ6.js.map} +0 -0
- /package/dist/{survival-ONWZ5RFM.js.map → survival-FW7N3YXZ.js.map} +0 -0
- /package/dist/{survival.integration.spec-ZP7XWHQH.js.map → survival.integration.spec-WN36VUHL.js.map} +0 -0
- /package/dist/{svgraph-2SL2SJVU.js.map → svgraph-N35EMK3G.js.map} +0 -0
- /package/dist/{svmr-ONIPMLC2.js.map → svmr-EWL5WDDD.js.map} +0 -0
- /package/dist/{table-LLCFO4KK.js.map → table-EI2OIRGE.js.map} +0 -0
- /package/dist/{termCollectionFractionSelection-UKEVVZXL.js.map → termCollection-K3EX5P3F.js.map} +0 -0
- /package/dist/{termCollection-DAHJGR5P.js.map → termCollection-TBTAHLVH.js.map} +0 -0
- /package/dist/{termCollection.unit.spec-FQOX2IVP.js.map → termCollection.unit.spec-ZVNAIPHZ.js.map} +0 -0
- /package/dist/{tk-GM7CJ2LU.js.map → termCollectionFractionSelection-ATNIPWVX.js.map} +0 -0
- /package/dist/{termCollectionFractionSelection.unit.spec-URGEYBU2.js.map → termCollectionFractionSelection.unit.spec-VBRWWBML.js.map} +0 -0
- /package/dist/{tvs.categorical-IY6YSFVN.js.map → tk-U6CYISBH.js.map} +0 -0
- /package/dist/{tp.ui-TRUHW6GP.js.map → tp.ui-KBFYUSWS.js.map} +0 -0
- /package/dist/{tvs.dt-AQQIZD5Z.js.map → tvs.categorical-5USP772O.js.map} +0 -0
- /package/dist/{tvs.condition-YTD7GOPW.js.map → tvs.condition-652MAA2Z.js.map} +0 -0
- /package/dist/{tvs.numeric-UFAOJR2B.js.map → tvs.dt-7BTARQUS.js.map} +0 -0
- /package/dist/{tvs.dtcnv.categorical-WOAOGJSW.js.map → tvs.dtcnv.categorical-GAOO3DGO.js.map} +0 -0
- /package/dist/{tvs.dtcnv.continuous-TJBEPJGO.js.map → tvs.dtcnv.continuous-P2QRD45O.js.map} +0 -0
- /package/dist/{tvs.dtfusion-SFMZQKKU.js.map → tvs.dtfusion-L3I65W7L.js.map} +0 -0
- /package/dist/{tvs.dtitd-Q5RQTCLD.js.map → tvs.dtitd-B3JPW6OL.js.map} +0 -0
- /package/dist/{tvs.dtsnvindel-UEK4O6WI.js.map → tvs.dtsnvindel-6Y6CJBZV.js.map} +0 -0
- /package/dist/{tvs.dtsv-ECS4KEYG.js.map → tvs.dtsv-GL7CPATL.js.map} +0 -0
- /package/dist/{tvs.multivalue-CJIZ3I54.js.map → tvs.multivalue-75IM23FZ.js.map} +0 -0
- /package/dist/{vocabulary-MTKDDDGB.js.map → tvs.numeric-XB3GBPHE.js.map} +0 -0
- /package/dist/{tvs.samplelst-BVFY2P7Q.js.map → tvs.samplelst-QUA45UE7.js.map} +0 -0
- /package/dist/{tvs.survival-L56B3I55.js.map → tvs.survival-EKSDZZIO.js.map} +0 -0
- /package/dist/{tvs.termCollection-BFIBVBSA.js.map → tvs.termCollection-5ATMDC7O.js.map} +0 -0
- /package/dist/{wsi.direct-OSHY7VL4.js.map → wsi.direct-BU6BL5UR.js.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../plots/swimmer.ts"],
|
|
4
|
-
"sourcesContent": ["import { getCompInit, copyMerge, type RxComponent, type ComponentApi } from '#rx'\nimport { PlotBase } from '#plots/PlotBase.ts'\nimport { controlsInit } from './controls'\nimport { dofetch3 } from '#common/dofetch'\nimport { Menu, DownloadMenu, axisstyle, shapes, shapeSelector, make_radios } from '#dom'\nimport { rgb } from 'd3-color'\nimport { getCombinedTermFilter } from '#filter'\nimport { getColors } from '#shared/common.js'\nimport { scaleLinear } from 'd3-scale'\nimport { axisBottom } from 'd3-axis'\nimport type {\n\tSwimmerLane,\n\tSwimmerLegendItem,\n\tSwimmerPoint,\n\tSwimmerRequest,\n\tSwimmerResponse,\n\tSwimmerTimeReference\n} from '#types'\nimport { getTermValue } from './sampleView.ts'\nimport { getT0T2defaultQ } from './summaryQ.ts'\nimport { fillTermWrapper } from '#termsetting'\n\n/*\nswimmer plot: one horizontal lane per patient. the thin grey base bar spans from\ntime 0 to the lane end (the terminal event, e.g. death, else the latest event or interval end);\ncolored segments mark treatment intervals; dots mark clinical events. when the ds has time references\n(e.g. birth, diagnosis, treatment start), radio buttons above the plot switch time 0 between them.\n*/\n\ntype LegendEntry = {\n\tkey: string\n\tlabel: string\n\tcolor: string\n\tshape: string\n\t/** marker height relative to the other events */\n\tsize: number\n\tsampleTerms?: string[]\n\t/** hidden by the user in the legend: its segments or markers are not drawn */\n\thidden: boolean\n}\n\n/** user changes to one legend item, overriding the ds config */\ntype LegendOverride = { color?: string; shape?: string; hidden?: boolean }\n\n/** legend overrides by legend label (items of several keys merged under one label change together).\nhidden is stored as false rather than deleted, since plot_edit merges settings and cannot remove keys */\ntype LegendOverrides = {\n\tcategories: { [label: string]: LegendOverride }\n\tevents: { [label: string]: LegendOverride }\n\t/** categories of the \"mark by\" term on linked points (e.g. ctDNA status of CSF dots) */\n\tpointCategories: { [label: string]: LegendOverride }\n}\n\n/** linked points (with a point sample) that have no value for the \"mark by\" term */\nconst noValueCategory = 'No value'\n\n/** pixel gap between a lane name and the lane area */\nconst labelGap = 14\n\n/** pixel width of the legend column, right of the lanes */\nconst legendWidth = 190\n\n/** bounding box of each shape path within its 16x16 icon box, measured once per shape. the icons fill\nthat box unevenly (e.g. the cross spans 12px, the circle 16px), so sizing by the box would give markers\nof different heights */\nconst shapeBBox = new Map<string, { x: number; y: number; width: number; height: number }>()\n\n/** draw an event marker centered at (cx, cy) inside holder, scaled so the visible shape is `height` px tall.\nthe shape is a key of the shared #dom shapes. a transparent\nrect keeps thin shapes (e.g. a cross) easy to hover */\nfunction drawMarker(holder, shapeKey: string, cx: number, cy: number, height: number, color: string) {\n\tconst key = shapes[shapeKey] ? shapeKey : 'filledCircle'\n\tconst shape = shapes[key]\n\tconst g = holder.append('g').attr('transform', `translate(${cx},${cy})`)\n\tg.append('rect')\n\t\t.attr('x', -height / 2)\n\t\t.attr('y', -height / 2)\n\t\t.attr('width', height)\n\t\t.attr('height', height)\n\t\t.attr('fill', 'transparent')\n\tconst path = g.append('path').attr('d', shape.path).attr('fill', color)\n\tlet box = shapeBBox.get(key)\n\tif (!box) {\n\t\tconst b = path.node().getBBox()\n\t\t// getBBox() is all zeros while the svg is hidden; fall back to the icon box without caching\n\t\tif (b.width && b.height) {\n\t\t\tbox = { x: b.x, y: b.y, width: b.width, height: b.height }\n\t\t\tshapeBBox.set(key, box)\n\t\t}\n\t}\n\tconst bb = box || { x: 0, y: 0, width: 16, height: 16 }\n\t// solid shapes get a thin white halo, to stand out on segments and on each other; line shapes (cross,\n\t// outlines) are thin filled paths, so a same-colored stroke thickens them to stay legible. the stroke (px)\n\t// is subtracted from the height\n\tconst strokePx = shape.isFilled ? Math.min(1, height * 0.1) : Math.max(1, height * 0.08)\n\tconst scale = Math.max(0.1, height - strokePx) / bb.height\n\tpath\n\t\t.attr('transform', `scale(${scale}) translate(${-(bb.x + bb.width / 2)},${-(bb.y + bb.height / 2)})`)\n\t\t.attr('stroke', shape.isFilled ? 'white' : color)\n\t\t.attr('stroke-width', strokePx / scale)\n\t\t.attr('stroke-linejoin', 'round')\n\treturn g\n}\n\ntype SwimmerSettings = {\n\t/** pixel height of one lane, including spacing */\n\trowHeight: number\n\t/** pixel width of the lane area, excluding sample names and legend */\n\tplotWidth: number\n\t/** 'end': longest lane first; 'sample': by lane (patient) name */\n\tsortBy: 'end' | 'sample'\n\tshowSampleNames: boolean\n\tlegend: LegendOverrides\n\t/** key of a ds time reference (swimmer.timeReferences); unset: the ds default */\n\ttimeReference?: string\n}\n\nclass Swimmer extends PlotBase implements RxComponent {\n\tstatic type = 'swimmer'\n\n\ttype: string\n\tcomponents: { controls: any }\n\tdom!: {\n\t\tholder: any\n\t\tcontrolsHolder: any\n\t\terrdiv: any\n\t\tloadingDiv: any\n\t\tplotDiv: any\n\t\tnoteDiv: any\n\t\ttip: Menu\n\t}\n\trenderer!: SwimmerRenderer\n\n\tconstructor(opts: any, api: ComponentApi) {\n\t\tsuper(opts, api)\n\t\tthis.type = Swimmer.type\n\t\tthis.components = { controls: {} }\n\t\tif (this.opts.header) {\n\t\t\tthis.opts.header.style('padding-left', '7px').style('color', 'rgb(85, 85, 85)').html('Swimmer Plot')\n\t\t}\n\t}\n\n\tgetState(appState) {\n\t\tconst config = appState.plots.find(p => p.id === this.id)\n\t\tif (!config) throw `No plot with id='${this.id}' found`\n\t\treturn {\n\t\t\tconfig,\n\t\t\t// global mass filter combined with this plot's local filter (config.filter, set by the plot wrapper's filter UI)\n\t\t\ttermfilter: getCombinedTermFilter(appState, config.filter),\n\t\t\tgenome: appState.vocab.genome,\n\t\t\tdslabel: appState.vocab.dslabel,\n\t\t\tswimmer: appState.termdbConfig?.queries?.swimmer || {}\n\t\t}\n\t}\n\n\tasync init() {\n\t\tconst holder = this.opts.holder.append('div').attr('data-testid', 'sjpp-swimmer-holder')\n\t\tconst controlsHolder = holder.append('div').style('display', 'inline-block').style('vertical-align', 'top')\n\t\tconst rightDiv = holder.append('div').style('display', 'inline-block').style('vertical-align', 'top')\n\t\tthis.dom = {\n\t\t\tholder,\n\t\t\tcontrolsHolder,\n\t\t\terrdiv: rightDiv.append('div').attr('class', 'sja_errorbar').style('display', 'none'),\n\t\t\tloadingDiv: rightDiv.append('div').style('display', 'none').style('padding', '24px').text('Loading ...'),\n\t\t\tplotDiv: rightDiv.append('div').attr('data-testid', 'sjpp-swimmer-plot').style('padding', '10px'),\n\t\t\tnoteDiv: rightDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('padding', '0 10px 10px 10px')\n\t\t\t\t.style('font-size', '.9em')\n\t\t\t\t.style('opacity', 0.7),\n\t\t\ttip: new Menu({ padding: '5px' })\n\t\t}\n\t\tthis.renderer = new SwimmerRenderer(this.app, this.dom, settings =>\n\t\t\tthis.app.dispatch({ type: 'plot_edit', id: this.id, config: { settings: { swimmer: settings } } })\n\t\t)\n\t\tconst laneName = this.renderer.laneType?.name || 'sample'\n\t\tthis.components = {\n\t\t\tcontrols: await controlsInit({\n\t\t\t\tapp: this.app,\n\t\t\t\tid: this.id,\n\t\t\t\tholder: controlsHolder,\n\t\t\t\tinputs: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'term',\n\t\t\t\t\t\tconfigKey: 'term0',\n\t\t\t\t\t\tchartType: 'swimmer',\n\t\t\t\t\t\tusecase: { target: 'swimmer', detail: 'term0' },\n\t\t\t\t\t\tlabel: 'Divide by',\n\t\t\t\t\t\ttitle: 'Split lanes into one panel per category',\n\t\t\t\t\t\tvocabApi: this.app.vocabApi,\n\t\t\t\t\t\tnumericEditMenuVersion: ['discrete'],\n\t\t\t\t\t\tdefaultQ4fillTW: getT0T2defaultQ()\n\t\t\t\t\t},\n\t\t\t\t\t...this.getPointTermInputs(),\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Sort lanes by',\n\t\t\t\t\t\ttype: 'radio',\n\t\t\t\t\t\tchartType: 'swimmer',\n\t\t\t\t\t\tsettingsKey: 'sortBy',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{ label: 'Lane length', value: 'end' },\n\t\t\t\t\t\t\t{ label: `${laneName[0].toUpperCase()}${laneName.slice(1)} name`, value: 'sample' }\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: `Show ${laneName} names`,\n\t\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\t\tchartType: 'swimmer',\n\t\t\t\t\t\tsettingsKey: 'showSampleNames',\n\t\t\t\t\t\tboxLabel: 'Yes'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Row height',\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tchartType: 'swimmer',\n\t\t\t\t\t\tsettingsKey: 'rowHeight',\n\t\t\t\t\t\tmin: 6,\n\t\t\t\t\t\tmax: 50\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Plot width',\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tchartType: 'swimmer',\n\t\t\t\t\t\tsettingsKey: 'plotWidth',\n\t\t\t\t\t\tmin: 200,\n\t\t\t\t\t\tmax: 3000\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t}\n\t\tthis.components.controls.on('downloadClick.swimmer', event => {\n\t\t\tconst svg = this.renderer.dom.svg\n\t\t\tif (!svg) return\n\t\t\tnew DownloadMenu([{ name: 'Swimmer plot', svg }], 'swimmer_plot').show(event.clientX, event.clientY, event.target)\n\t\t})\n\t}\n\n\t/** \"Mark <event> by\" term input, only when the ds has points linked to samples (e.g. CSF dots). the\n\tterm picker lists only terms of those samples' types */\n\tgetPointTermInputs() {\n\t\tconst sw = this.app.vocabApi.termdbConfig?.queries?.swimmer\n\t\tif (!sw?.pointSampleTypes?.length) return []\n\t\tconst events = (sw.pointSampleEvents || []).map(k => sw.events?.[k]?.label || k)\n\t\tconst what = [...new Set(events)].join(' / ') || 'linked samples'\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: 'term',\n\t\t\t\tconfigKey: 'pointTerm',\n\t\t\t\tchartType: 'swimmer',\n\t\t\t\tusecase: { target: 'swimmer', detail: 'pointTerm', sampleTypes: sw.pointSampleTypes },\n\t\t\t\tlabel: `Mark ${what} by`,\n\t\t\t\ttitle: `Color the ${what} markers by a variable of their own samples`,\n\t\t\t\tvocabApi: this.app.vocabApi,\n\t\t\t\tnumericEditMenuVersion: ['discrete'],\n\t\t\t\tdefaultQ4fillTW: getT0T2defaultQ()\n\t\t\t}\n\t\t]\n\t}\n\n\tasync main() {\n\t\ttry {\n\t\t\tthis.toggleLoadingDiv()\n\t\t\tthis.dom.errdiv.style('display', 'none')\n\t\t\tconst result = await this.fetchLanes()\n\t\t\tthis.toggleLoadingDiv('none')\n\t\t\tthis.renderer.update({\n\t\t\t\tswimmer: this.state.swimmer,\n\t\t\t\tsettings: this.state.config.settings.swimmer,\n\t\t\t\tlanes: result.lanes,\n\t\t\t\tdivideByOrder: result.divideByOrder,\n\t\t\t\tterm0: this.state.config.term0,\n\t\t\t\tpointTerm: this.state.config.pointTerm,\n\t\t\t\tpointCategoryOrder: result.pointCategoryOrder,\n\t\t\t\ttimeReference: result.timeReference\n\t\t\t})\n\t\t} catch (e: any) {\n\t\t\tthis.toggleLoadingDiv('none')\n\t\t\tthis.printError(e)\n\t\t}\n\t}\n\n\tdestroy() {\n\t\tthis.renderer?.destroy()\n\t}\n\n\tasync fetchLanes(): Promise<SwimmerResponse> {\n\t\tconst body: any = {\n\t\t\tgenome: this.state.genome,\n\t\t\tdslabel: this.state.dslabel,\n\t\t\tfilter: this.state.termfilter?.filter\n\t\t}\n\t\tif (this.state.config.term0) body.term0 = this.state.config.term0\n\t\tif (this.state.config.pointTerm) body.pointTerm = this.state.config.pointTerm\n\t\tconst timeReference = this.state.config.settings.swimmer.timeReference\n\t\tif (timeReference) body.timeReference = timeReference\n\t\treturn await fetchSwimmerLanes(body)\n\t}\n}\n\n/** draws swimmer lanes, divide-by panels and the legend into dom.plotDiv, with notes in dom.noteDiv. used by\nthe swimmer chart and by sample view, which shows the lane of the viewed patient */\nexport class SwimmerRenderer {\n\tapp: any\n\t/** client copy of ds.queries.swimmer: timeLabel, timeReferences, categories, events, terminalEvent,\n\tpointSampleTypes, pointSampleEvents */\n\tswimmer: any = {}\n\tsettings!: SwimmerSettings\n\t/** divide-by tw, lanes are then split into one panel per category */\n\tterm0?: any\n\tlanes: SwimmerLane[] = []\n\t/** divide-by category order from the server, only with term0 */\n\tdivideByOrder: string[] = []\n\t/** \"mark by\" tw of the linked points (e.g. a CSF term); their markers are then colored by point.category */\n\tpointTerm?: any\n\t/** point category order from the server, only with pointTerm */\n\tpointCategoryOrder: string[] = []\n\t/** key of the time reference of the lanes, from the server; unset when the ds has none */\n\ttimeReference?: string\n\tdom: { plotDiv: any; noteDiv: any; tip: Menu; svg?: any }\n\t/** sample type of the lanes, which are patients: the root sample type when the db has exactly one, e.g.\n\t{name:'patient', plural_name:'patients'}, to name lanes in messages and controls. */\n\tlaneType?: { name: string; plural_name: string }\n\t/** annotations of point samples (e.g. CSF) shown on hover, fetched once per sample id */\n\tpointSampleAnno = new Map<string, Promise<{ label: string; value: string }[]>>()\n\t/** menu to edit a legend entry, reused across legend clicks */\n\tlegendMenu?: Menu\n\n\t/** called with changed settings (e.g. legend edits, time reference); without it the renderer keeps legend\n\tchanges itself and redraws, and offers no time reference radio buttons since switching needs new lanes */\n\tonSettingsChange?: (settings: Partial<SwimmerSettings>) => void\n\n\tconstructor(\n\t\tapp: any,\n\t\tdom: { plotDiv: any; noteDiv: any; tip: Menu },\n\t\tonSettingsChange?: (settings: Partial<SwimmerSettings>) => void\n\t) {\n\t\tthis.app = app\n\t\tthis.dom = dom\n\t\tthis.onSettingsChange = onSettingsChange\n\t\tconst roots = Object.values(app.vocabApi?.termdbConfig?.sampleTypes || {}).filter((t: any) => t.parent_id == null)\n\t\tif (roots.length == 1) this.laneType = roots[0] as { name: string; plural_name: string }\n\t}\n\n\tupdate(d: {\n\t\tswimmer: any\n\t\tsettings: SwimmerSettings\n\t\tlanes: SwimmerLane[]\n\t\tdivideByOrder?: string[]\n\t\tterm0?: any\n\t\tpointTerm?: any\n\t\tpointCategoryOrder?: string[]\n\t\ttimeReference?: string\n\t}) {\n\t\tthis.swimmer = d.swimmer || {}\n\t\tthis.settings = d.settings\n\t\tthis.lanes = d.lanes\n\t\tthis.divideByOrder = d.divideByOrder || []\n\t\tthis.term0 = d.term0\n\t\tthis.pointTerm = d.pointTerm\n\t\tthis.pointCategoryOrder = d.pointCategoryOrder || []\n\t\tthis.timeReference = d.timeReference\n\t\tthis.render()\n\t}\n\n\t/** whether a point is colored by the \"mark by\" term: a linked point of a markBy event */\n\tisMarkedPoint(p: SwimmerPoint): boolean {\n\t\treturn !!this.pointTerm && p.sampleId !== undefined && !!this.swimmer.pointSampleEvents?.includes(p.event)\n\t}\n\n\t/** with pointTerm: legend of the marked points' categories, in server order, then \"No value\" when some\n\tmarked point lacks a value. colors come from term.values when set there, else a default palette; the shape\n\tis that of the point's event. user overrides apply as for the other legend sections */\n\tgetPointLegend(events: { byKey: Map<string, LegendEntry> }) {\n\t\tif (!this.pointTerm) return { byKey: new Map<string, LegendEntry>(), entries: [] as LegendEntry[] }\n\t\tlet hasNoValue = false\n\t\tlet shape: string | undefined\n\t\tfor (const lane of this.lanes) {\n\t\t\tfor (const p of lane.points) {\n\t\t\t\tif (!this.isMarkedPoint(p)) continue\n\t\t\t\tshape ||= events.byKey.get(p.event)?.shape\n\t\t\t\tif (!p.category) hasNoValue = true\n\t\t\t}\n\t\t}\n\t\tconst termColors = new Map<string, string>()\n\t\tfor (const [k, v] of Object.entries((this.pointTerm.term?.values || {}) as { [k: string]: any }))\n\t\t\tif (v.color) termColors.set(v.label || k, v.color)\n\t\tconst labels = [...this.pointCategoryOrder, ...(hasNoValue ? [noValueCategory] : [])]\n\t\tconst palette = getColors(Math.max(labels.length, 1))\n\t\tconst configured = {}\n\t\tfor (const label of labels)\n\t\t\tconfigured[label] = {\n\t\t\t\tlabel,\n\t\t\t\tcolor: label == noValueCategory ? '#aaa' : termColors.get(label) || palette(label),\n\t\t\t\tshape\n\t\t\t}\n\t\treturn this.getLegend(configured, new Set(labels), this.settings.legend?.pointCategories)\n\t}\n\n\t/** lanes split by divide-by category, in server order. without term0 there is one unlabeled group.\n\ta patient with several categories (a multivalue term, or samples in different categories) is in each\n\tof its groups; lanes without a value are left out and counted in the note below the plot */\n\tgetGroups<T extends { lane: SwimmerLane }>(lanes: T[]): { label?: string; lanes: T[] }[] {\n\t\tif (!this.term0) return [{ lanes }]\n\t\tconst byLabel = new Map<string, T[]>(this.divideByOrder.map(c => [c, []]))\n\t\tlet noValue = 0\n\t\tfor (const l of lanes) {\n\t\t\tif (!l.lane.divideBy?.length) {\n\t\t\t\tnoValue++\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const c of l.lane.divideBy) {\n\t\t\t\tif (!byLabel.has(c)) byLabel.set(c, [])\n\t\t\t\tbyLabel.get(c)!.push(l)\n\t\t\t}\n\t\t}\n\t\tif (noValue) {\n\t\t\tconst name = this.term0.term?.name || 'the divide-by variable'\n\t\t\tconst noun = noValue > 1 ? this.laneType?.plural_name || 'samples' : this.laneType?.name || 'sample'\n\t\t\tthis.dom.noteDiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('data-testid', 'sjpp-swimmer-novalue-note')\n\t\t\t\t.text(`${noValue} ${noun} without a value for ${name} not shown`)\n\t\t}\n\t\treturn [...byLabel].filter(([, l]) => l.length).map(([label, l]) => ({ label, lanes: l }))\n\t}\n\n\t/** lane end: the terminal event time when present, else the latest event or interval time */\n\tgetLaneEnd(lane: SwimmerLane): number {\n\t\tconst terminal = this.swimmer.terminalEvent\n\t\tif (terminal) {\n\t\t\tconst t = lane.points.find(p => p.event == terminal)\n\t\t\tif (t) return t.time\n\t\t}\n\t\tlet end = 0\n\t\tfor (const p of lane.points) end = Math.max(end, p.time)\n\t\tfor (const r of lane.ranges) end = Math.max(end, r.start, r.end ?? 0)\n\t\treturn end\n\t}\n\n\t/** legend entries for interval categories or events: configured items first (in config order,\n\tmerged by label), then any key found in the data that the ds did not configure, with a default color. a\n\tclipBeforeOrigin event with no drawn marker (e.g. birth in a treatment-referenced view) is left out. user\n\toverrides (by label) take precedence over the ds config */\n\tgetLegend(\n\t\tconfigured: { [key: string]: SwimmerLegendItem } | undefined,\n\t\tdataKeys: Set<string>,\n\t\toverrides: { [label: string]: LegendOverride } = {}\n\t) {\n\t\tconst byKey = new Map<string, LegendEntry>()\n\t\tconst entries: LegendEntry[] = []\n\t\tconst seenLabels = new Set<string>()\n\t\tconst unconfigured = [...dataKeys].filter(k => !configured?.[k])\n\t\tconst fallback = getColors(Math.max(unconfigured.length, 1))\n\t\tconst add = (key: string, item: SwimmerLegendItem) => {\n\t\t\tconst label = item.label || key\n\t\t\tconst o = overrides[label] || {}\n\t\t\tconst e: LegendEntry = {\n\t\t\t\tkey,\n\t\t\t\tlabel,\n\t\t\t\tcolor: o.color || item.color || fallback(key),\n\t\t\t\tshape: o.shape || item.shape || 'filledCircle',\n\t\t\t\tsize: item.size || 1,\n\t\t\t\tsampleTerms: item.sampleTerms,\n\t\t\t\thidden: !!o.hidden\n\t\t\t}\n\t\t\tbyKey.set(key, e)\n\t\t\tif (!seenLabels.has(e.label)) {\n\t\t\t\tseenLabels.add(e.label)\n\t\t\t\tentries.push(e)\n\t\t\t}\n\t\t}\n\t\tfor (const [key, item] of Object.entries(configured || {})) {\n\t\t\tif (item.clipBeforeOrigin && !dataKeys.has(key)) continue\n\t\t\tadd(key, item)\n\t\t}\n\t\tfor (const key of unconfigured) add(key, {})\n\t\treturn { byKey, entries }\n\t}\n\n\trender() {\n\t\tconst s = this.settings\n\t\tconst plotDiv = this.dom.plotDiv\n\t\tplotDiv.selectAll('*').remove()\n\t\tthis.dom.noteDiv.selectAll('*').remove()\n\t\tdelete this.dom.svg\n\n\t\tconst ref: SwimmerTimeReference | undefined = this.swimmer.timeReferences?.find(\n\t\t\t(r: SwimmerTimeReference) => r.key == this.timeReference\n\t\t)\n\t\tthis.renderTimeReferences()\n\n\t\tif (!this.lanes.length) {\n\t\t\tplotDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('opacity', 0.6)\n\t\t\t\t.text(`No ${this.laneType?.plural_name || 'samples'} with timeline data match the current filter`)\n\t\t\treturn\n\t\t}\n\n\t\tconst lanes = this.lanes.map(lane => ({ lane, end: this.getLaneEnd(lane) }))\n\t\tif (s.sortBy == 'sample') lanes.sort((a, b) => a.lane.sample.localeCompare(b.lane.sample))\n\t\telse lanes.sort((a, b) => b.end - a.end)\n\n\t\tconst categoryKeys = new Set<string>()\n\t\tconst eventKeys = new Set<string>()\n\t\tfor (const { lane } of lanes) {\n\t\t\tfor (const r of lane.ranges) categoryKeys.add(r.category)\n\t\t\t// a clipped event (e.g. birth in a treatment-referenced view) is not drawn\n\t\t\tfor (const p of lane.points) if (!this.isClipped(p)) eventKeys.add(p.event)\n\t\t}\n\t\tconst categories = this.getLegend(this.swimmer.categories, categoryKeys, s.legend?.categories)\n\t\tconst events = this.getLegend(this.swimmer.events, eventKeys, s.legend?.events)\n\t\tconst pointCategories = this.getPointLegend(events)\n\n\t\tconst fontSize = Math.min(12, Math.max(7, s.rowHeight - 3))\n\t\tconst axisHeight = 45\n\t\tconst topPad = 10\n\t\tconst rightPad = 20\n\t\t// lanes are separated by a thin fixed gap so the bar fills most of the row; segments and\n\t\t// event dots scale with the bar rather than the row\n\t\tconst laneGap = Math.max(1, Math.round(s.rowHeight * 0.1))\n\t\tconst barH = Math.max(2, s.rowHeight - laneGap)\n\t\tconst segH = Math.max(1, barH * 0.6)\n\t\t// the base bar is a thin line under the segments\n\t\tconst baseH = Math.max(1, barH * 0.25)\n\t\t// event markers are 70% of the bar height, all shapes the same height unless an event sets a relative size\n\t\tconst markerH = Math.max(4, barH * 0.7)\n\n\t\tconst svg = plotDiv.append('svg').attr('data-testid', 'sjpp-swimmer-svg')\n\t\tthis.dom.svg = svg\n\t\tconst names = lanes.map(l => l.lane.sample)\n\t\tconst labelWidth = s.showSampleNames ? getMaxTextWidth(svg, names, fontSize) + labelGap + 6 : 10\n\n\t\t// one shared time scale for all divide-by panels, so they can be compared\n\t\tconst maxEnd = Math.max(...lanes.map(l => l.end), 1)\n\t\t// events before the time origin (e.g. a CSF sample collected before treatment start) have\n\t\t// negative times; extend the axis left so they do not overlap the sample names. events with\n\t\t// clipBeforeOrigin (e.g. birth in a treatment-referenced view) do not; their markers before time 0 are\n\t\t// not drawn\n\t\tlet minTime = 0\n\t\tfor (const { lane } of lanes) {\n\t\t\tfor (const p of lane.points) {\n\t\t\t\tif (!this.isClipped(p)) minTime = Math.min(minTime, p.time)\n\t\t\t}\n\t\t\tfor (const r of lane.ranges) minTime = Math.min(minTime, r.start)\n\t\t}\n\t\tconst x = scaleLinear()\n\t\t\t.domain([minTime < 0 ? minTime - (maxEnd - minTime) * 0.01 : 0, maxEnd * 1.02])\n\t\t\t.range([0, s.plotWidth])\n\t\tconst ticks = x.ticks(Math.max(2, Math.floor(s.plotWidth / 90)))\n\n\t\tconst tip = this.dom.tip\n\t\tconst timeLabel = ref?.timeLabel || this.swimmer.timeLabel || 'Time'\n\t\tconst fmt = (d: number) => (Number.isInteger(d) ? String(d) : d.toFixed(1))\n\n\t\tconst groups = this.getGroups(lanes)\n\t\tif (!groups.length) {\n\t\t\tsvg.remove()\n\t\t\tdelete this.dom.svg\n\t\t\tplotDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('opacity', 0.6)\n\t\t\t\t.text(`No ${this.laneType?.plural_name || 'samples'} have a value for the divide-by variable`)\n\t\t\treturn\n\t\t}\n\t\tconst titleH = groups[0].label !== undefined ? 24 : 0\n\t\tconst groupGap = 16\n\t\tlet yOffset = topPad\n\t\tfor (const group of groups) {\n\t\t\tif (group.label !== undefined) {\n\t\t\t\tsvg\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.attr('data-testid', 'sjpp-swimmer-group-title')\n\t\t\t\t\t.attr('x', labelWidth)\n\t\t\t\t\t.attr('y', yOffset + 15)\n\t\t\t\t\t.attr('font-size', 14)\n\t\t\t\t\t.attr('font-weight', 600)\n\t\t\t\t\t.attr('fill', '#333')\n\t\t\t\t\t.text(`${group.label} (n=${group.lanes.length})`)\n\t\t\t\tyOffset += titleH\n\t\t\t}\n\t\t\tconst plotHeight = group.lanes.length * s.rowHeight\n\t\t\tconst mainG = svg.append('g').attr('transform', `translate(${labelWidth},${yOffset})`)\n\n\t\t\t// vertical grid lines behind the lanes\n\t\t\tmainG\n\t\t\t\t.append('g')\n\t\t\t\t.selectAll('line')\n\t\t\t\t.data(ticks)\n\t\t\t\t.enter()\n\t\t\t\t.append('line')\n\t\t\t\t.attr('x1', d => x(d))\n\t\t\t\t.attr('x2', d => x(d))\n\t\t\t\t.attr('y1', 0)\n\t\t\t\t.attr('y2', plotHeight)\n\t\t\t\t.attr('stroke', '#e6e6e6')\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\n\t\t\tfor (const [i, { lane, end }] of group.lanes.entries()) {\n\t\t\t\tconst y = i * s.rowHeight\n\t\t\t\tconst g = mainG.append('g').attr('transform', `translate(0,${y})`)\n\n\t\t\t\t// base bar: a thin line, hovered through a transparent rect of the bar height\n\t\t\t\tconst baseG = g.append('g')\n\t\t\t\tbaseG\n\t\t\t\t\t.append('rect')\n\t\t\t\t\t.attr('x', x(0))\n\t\t\t\t\t.attr('y', (s.rowHeight - baseH) / 2)\n\t\t\t\t\t.attr('width', Math.max(0, x(end) - x(0)))\n\t\t\t\t\t.attr('height', baseH)\n\t\t\t\t\t.attr('fill', '#999')\n\t\t\t\t\t.attr('fill-opacity', 0.5)\n\t\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\tbaseG\n\t\t\t\t\t.append('rect')\n\t\t\t\t\t.attr('x', x(0))\n\t\t\t\t\t.attr('y', (s.rowHeight - barH) / 2)\n\t\t\t\t\t.attr('width', Math.max(0, x(end) - x(0)))\n\t\t\t\t\t.attr('height', barH)\n\t\t\t\t\t.attr('fill', 'transparent')\n\t\t\t\tbaseG\n\t\t\t\t\t.on('mouseover', event => {\n\t\t\t\t\t\ttip.clear().show(event.clientX, event.clientY)\n\t\t\t\t\t\ttip.d.append('div').style('font-weight', 'bold').text(lane.sample)\n\t\t\t\t\t\ttip.d.append('div').text(`Lane end: ${fmt(end)} (${timeLabel.toLowerCase()})`)\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => tip.hide())\n\n\t\t\t\t// interval segments. one without an end (blank or NA in the file) is ongoing: drawn up to the lane\n\t\t\t\t// end, with an arrowhead\n\t\t\t\tfor (const r of lane.ranges) {\n\t\t\t\t\tconst entry = categories.byKey.get(r.category)!\n\t\t\t\t\tif (entry.hidden) continue\n\t\t\t\t\tconst segEnd = r.end ?? Math.max(end, r.start)\n\t\t\t\t\tconst segTop = (s.rowHeight - segH) / 2\n\t\t\t\t\tconst seg = g.append('g').on('mouseout', () => tip.hide())\n\t\t\t\t\t// translucent, so overlapping intervals and the base bar show through\n\t\t\t\t\tseg.attr('fill-opacity', 0.75)\n\t\t\t\t\tseg\n\t\t\t\t\t\t.append('rect')\n\t\t\t\t\t\t.attr('x', x(r.start))\n\t\t\t\t\t\t.attr('y', segTop)\n\t\t\t\t\t\t.attr('width', Math.max(1, x(segEnd) - x(r.start)))\n\t\t\t\t\t\t.attr('height', segH)\n\t\t\t\t\t\t.attr('fill', entry.color)\n\t\t\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\t\tif (r.end == null) {\n\t\t\t\t\t\tconst xe = x(r.start) + Math.max(1, x(segEnd) - x(r.start))\n\t\t\t\t\t\tseg\n\t\t\t\t\t\t\t.append('path')\n\t\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\t'd',\n\t\t\t\t\t\t\t\t`M${xe},${segTop - segH / 3}L${xe + segH * 0.8},${s.rowHeight / 2}L${xe},${segTop + segH * 1.33}Z`\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.attr('fill', entry.color)\n\t\t\t\t\t}\n\t\t\t\t\tseg.on('mouseover', event => {\n\t\t\t\t\t\ttip.clear().show(event.clientX, event.clientY)\n\t\t\t\t\t\ttip.d.append('div').style('font-weight', 'bold').text(lane.sample)\n\t\t\t\t\t\ttip.d.append('div').text(`${entry.label}${entry.label != r.category ? ` (${r.category})` : ''}`)\n\t\t\t\t\t\ttip.d\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.text(\n\t\t\t\t\t\t\t\tr.end == null\n\t\t\t\t\t\t\t\t\t? `From ${fmt(r.start)}, ongoing (${timeLabel.toLowerCase()})`\n\t\t\t\t\t\t\t\t\t: `${fmt(r.start)} to ${fmt(r.end)} (${timeLabel.toLowerCase()})`\n\t\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// events\n\t\t\t\tfor (const p of lane.points) {\n\t\t\t\t\tif (this.isClipped(p)) continue\n\t\t\t\t\tconst entry = events.byKey.get(p.event)!\n\t\t\t\t\tif (entry.hidden) continue\n\t\t\t\t\t// a marked point is drawn by its \"mark by\" category\n\t\t\t\t\tconst mark = this.isMarkedPoint(p) ? pointCategories.byKey.get(p.category || noValueCategory) : undefined\n\t\t\t\t\tif (mark?.hidden) continue\n\t\t\t\t\tconst dot = drawMarker(\n\t\t\t\t\t\tg,\n\t\t\t\t\t\tmark?.shape || entry.shape,\n\t\t\t\t\t\tx(p.time),\n\t\t\t\t\t\ts.rowHeight / 2,\n\t\t\t\t\t\tmarkerH * entry.size,\n\t\t\t\t\t\tmark?.color || entry.color\n\t\t\t\t\t)\n\t\t\t\t\t\t.attr('data-event', p.event)\n\t\t\t\t\t\t.on('mouseover', event => {\n\t\t\t\t\t\t\ttip.clear().show(event.clientX, event.clientY)\n\t\t\t\t\t\t\ttip.d.append('div').style('font-weight', 'bold').text(lane.sample)\n\t\t\t\t\t\t\ttip.d.append('div').text(`${entry.label}: ${fmt(p.time)} (${timeLabel.toLowerCase()})`)\n\t\t\t\t\t\t\tif (mark) tip.d.append('div').text(`${this.pointTerm.term?.name}: ${mark.label}`)\n\t\t\t\t\t\t\tif (p.sample) {\n\t\t\t\t\t\t\t\ttip.d.append('div').text(`Sample: ${p.sample}`)\n\t\t\t\t\t\t\t\tif (p.sampleId !== undefined && entry.sampleTerms?.length)\n\t\t\t\t\t\t\t\t\tthis.showPointSampleAnno(tip, p.sampleId, entry.sampleTerms)\n\t\t\t\t\t\t\t\ttip.d.append('div').style('font-size', '0.8em').style('opacity', 0.7).text('Click to open sample view')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('mouseout', () => tip.hide())\n\t\t\t\t\tif (p.sample && p.sampleId !== undefined) {\n\t\t\t\t\t\tconst sample = { sampleId: p.sampleId, sampleName: p.sample }\n\t\t\t\t\t\tdot\n\t\t\t\t\t\t\t.attr('data-testid', 'sjpp-swimmer-linked-point')\n\t\t\t\t\t\t\t.attr('role', 'button')\n\t\t\t\t\t\t\t.attr('tabindex', 0)\n\t\t\t\t\t\t\t.attr('aria-label', `Open sample view of ${p.sample}`)\n\t\t\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\t\ttip.hide()\n\t\t\t\t\t\t\t\tthis.openSampleView(sample)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.on('keydown', (event: KeyboardEvent) => {\n\t\t\t\t\t\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\t\t\t\tthis.openSampleView(sample)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (s.showSampleNames) {\n\t\t\t\t\tg.append('text')\n\t\t\t\t\t\t.attr('x', -labelGap)\n\t\t\t\t\t\t.attr('y', s.rowHeight / 2)\n\t\t\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t\t.attr('font-size', fontSize)\n\t\t\t\t\t\t.attr('fill', '#333')\n\t\t\t\t\t\t.attr('role', 'button')\n\t\t\t\t\t\t.attr('tabindex', 0)\n\t\t\t\t\t\t.attr('aria-label', `Open sample view of ${lane.sample}`)\n\t\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t\t.text(lane.sample)\n\t\t\t\t\t\t.on('click', () => this.openSampleView({ sampleId: lane.sampleId, sampleName: lane.sample }, true))\n\t\t\t\t\t\t.on('keydown', (event: KeyboardEvent) => {\n\t\t\t\t\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\t\t\tthis.openSampleView({ sampleId: lane.sampleId, sampleName: lane.sample }, true)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('mouseover', event => {\n\t\t\t\t\t\t\ttip.clear().show(event.clientX, event.clientY)\n\t\t\t\t\t\t\ttip.d.append('div').text('Click to open sample view')\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('mouseout', () => tip.hide())\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// x axis\n\t\t\tconst axisG = mainG.append('g').attr('transform', `translate(0,${plotHeight + 2})`)\n\t\t\taxisG.call(axisBottom(x).tickValues(ticks))\n\t\t\taxisstyle({ axis: axisG, showline: true, fontsize: 11 })\n\t\t\taxisG\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', s.plotWidth / 2)\n\t\t\t\t.attr('y', 34)\n\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t.attr('font-size', 12)\n\t\t\t\t.attr('fill', '#333')\n\t\t\t\t.text(timeLabel)\n\t\t\tyOffset += plotHeight + axisHeight + groupGap\n\t\t}\n\t\tconst legendHeight = this.renderLegend(\n\t\t\tsvg.append('g').attr('transform', `translate(${labelWidth + s.plotWidth + rightPad},${topPad})`),\n\t\t\tcategories.entries,\n\t\t\tevents.entries,\n\t\t\tpointCategories.entries\n\t\t)\n\t\t// a few lanes (e.g. one patient in sample view) can be shorter than the legend\n\t\tsvg\n\t\t\t.attr('width', labelWidth + s.plotWidth + rightPad + legendWidth)\n\t\t\t.attr('height', Math.max(yOffset - groupGap, topPad + legendHeight))\n\t}\n\n\t/** returns the legend height. events linked to samples (e.g. \"CSF sample\") are listed last. with a \"mark\n\tby\" term their markers take the term's category colors and shapes, so the event row has no icon and names\n\tthe term, and the term's categories follow, indented:\n\t Events\n\t Follow-up\n\t CSF sample by <term name>\n\t category1\n\t category2 */\n\trenderLegend(g, categories: LegendEntry[], events: LegendEntry[], pointCategories: LegendEntry[] = []): number {\n\t\tconst lineH = 18\n\t\tconst indent = 20\n\t\tlet y = 0\n\t\tconst fit = (text: string, max: number) => (text.length > max ? text.slice(0, max - 1) + '\u2026' : text)\n\t\tconst title = (text: string) => {\n\t\t\tg.append('text')\n\t\t\t\t.attr('y', y + 10)\n\t\t\t\t.attr('font-size', 12)\n\t\t\t\t.attr('font-weight', 'bold')\n\t\t\t\t.text(text)\n\t\t\ty += lineH\n\t\t}\n\t\tconst item = (\n\t\t\ttype: keyof LegendOverrides,\n\t\t\te: LegendEntry,\n\t\t\tentries: LegendEntry[],\n\t\t\tdrawIcon: (holder: any, e: LegendEntry) => void,\n\t\t\t/** label: shown instead of e.label */\n\t\t\topts: { x?: number; allowColor?: boolean; allowShape?: boolean; label?: string } = {}\n\t\t) => {\n\t\t\tconst x = opts.x || 0\n\t\t\t// long labels (e.g. a term name, or a free-text note stored as a category) are cut to fit the legend\n\t\t\t// width, with the full text on hover\n\t\t\tconst max = Math.floor((26 * (legendWidth - x)) / legendWidth)\n\t\t\tconst row = g\n\t\t\t\t.append('g')\n\t\t\t\t.attr('transform', `translate(${x},${y})`)\n\t\t\t\t.attr('data-testid', 'sjpp-swimmer-legend-item')\n\t\t\t\t.attr('data-legend-type', type)\n\t\t\t\t.attr('role', 'button')\n\t\t\t\t.attr('tabindex', 0)\n\t\t\t\t.attr('aria-label', `Edit legend item ${opts.label || e.label}`)\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.style('opacity', e.hidden ? 0.4 : 1)\n\t\t\tconst showMenu = event =>\n\t\t\t\tthis.showLegendMenu(event, type, e, entries, {\n\t\t\t\t\tallowColor: opts.allowColor !== false,\n\t\t\t\t\tallowShape: type != 'categories' && opts.allowShape !== false\n\t\t\t\t})\n\t\t\trow.on('click', showMenu).on('keydown', (event: KeyboardEvent) => {\n\t\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tshowMenu(event)\n\t\t\t\t}\n\t\t\t})\n\t\t\t// transparent box so the gap between icon and label is clickable too\n\t\t\trow\n\t\t\t\t.append('rect')\n\t\t\t\t.attr('width', legendWidth - 20 - x)\n\t\t\t\t.attr('height', lineH)\n\t\t\t\t.attr('fill', 'transparent')\n\t\t\tdrawIcon(row, e)\n\t\t\trow\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', 20)\n\t\t\t\t.attr('y', 10)\n\t\t\t\t.attr('font-size', 12)\n\t\t\t\t.attr('fill', '#333')\n\t\t\t\t.style('text-decoration', e.hidden ? 'line-through' : 'none')\n\t\t\t\t.text(fit(opts.label || e.label, max))\n\t\t\tif ((opts.label || e.label).length > max) row.append('title').text(opts.label || e.label)\n\t\t\ty += lineH\n\t\t}\n\t\tconst rect = (row, e: LegendEntry) =>\n\t\t\trow.append('rect').attr('x', 0).attr('y', 3).attr('width', 14).attr('height', 8).attr('fill', e.color)\n\t\tconst marker = (row, e: LegendEntry) => drawMarker(row, e.shape, 7, 7, Math.max(6, 12 * e.size), e.color)\n\n\t\tif (categories.length) {\n\t\t\ttitle('Intervals')\n\t\t\tfor (const e of categories) item('categories', e, categories, rect)\n\t\t\ty += 8\n\t\t}\n\t\tif (events.length) {\n\t\t\tconst linkedKeys = new Set<string>(this.swimmer.pointSampleEvents || [])\n\t\t\tconst linked = events.filter(e => linkedKeys.has(e.key))\n\t\t\tconst ordered = [...events.filter(e => !linkedKeys.has(e.key)), ...linked]\n\t\t\tconst marked = this.pointTerm && pointCategories.length > 0\n\t\t\ttitle('Events')\n\t\t\tfor (const e of ordered) {\n\t\t\t\tif (!marked || !linkedKeys.has(e.key)) {\n\t\t\t\t\titem('events', e, ordered, marker)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t// markers take the mark-by term's category colors and shapes: no icon, no color or shape option\n\t\t\t\titem('events', e, ordered, () => {}, {\n\t\t\t\t\tallowColor: false,\n\t\t\t\t\tallowShape: false,\n\t\t\t\t\tlabel: `${e.label} by ${this.pointTerm.term?.name || ''}`\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (marked) {\n\t\t\t\tfor (const e of pointCategories) item('pointCategories', e, pointCategories, marker, { x: indent })\n\t\t\t}\n\t\t\ty += 8\n\t\t}\n\t\treturn y\n\t}\n\n\t/** a clipBeforeOrigin event before time 0 (e.g. birth in a treatment-referenced view), not drawn */\n\tisClipped(p: SwimmerPoint) {\n\t\treturn p.time < 0 && !!this.swimmer.events?.[p.event]?.clipBeforeOrigin\n\t}\n\n\t/** radio buttons to switch the time reference (e.g. birth, diagnosis, treatment start), above the plot. only\n\twith two or more ds time references and onSettingsChange, which refetches the lanes */\n\trenderTimeReferences() {\n\t\tconst refs: SwimmerTimeReference[] = this.swimmer.timeReferences || []\n\t\tif (refs.length < 2 || !this.onSettingsChange) return\n\t\tconst current = this.timeReference\n\t\tconst holder = this.dom.plotDiv\n\t\t\t.append('div')\n\t\t\t.attr('data-testid', 'sjpp-swimmer-time-references')\n\t\t\t.attr('role', 'radiogroup')\n\t\t\t.attr('aria-label', 'Time from')\n\t\t\t.style('margin-bottom', '8px')\n\t\tholder.append('span').style('margin-right', '8px').style('opacity', 0.8).text('Time from:')\n\t\tmake_radios({\n\t\t\tholder: holder.append('div').style('display', 'inline-block'),\n\t\t\toptions: refs.map(r => ({\n\t\t\t\tlabel: r.label || r.key,\n\t\t\t\tvalue: r.key,\n\t\t\t\tchecked: r.key == current,\n\t\t\t\ttestid: `sjpp-swimmer-time-reference-${r.key}`\n\t\t\t})),\n\t\t\tstyles: { display: 'inline-block', padding: '3px 10px 3px 0' },\n\t\t\t// the lanes are refetched and the plot redrawn, these radios included\n\t\t\tcallback: key => this.onSettingsChange!({ timeReference: key })\n\t\t})\n\t}\n\n\t/** legend item menu, as in the scatter plot legend: hide/show, show only, show all, color, and shape for\n\tevents. \"show only\" and \"show all\" act within the item's own section (intervals, events or mark-by\n\tcategories). color and shape options are left out for an event whose markers are drawn by the mark-by term */\n\tshowLegendMenu(\n\t\tevent,\n\t\ttype: keyof LegendOverrides,\n\t\te: LegendEntry,\n\t\tentries: LegendEntry[],\n\t\topts: { allowColor: boolean; allowShape: boolean }\n\t) {\n\t\tthis.dom.tip.hide()\n\t\tif (!this.legendMenu) this.legendMenu = new Menu({ padding: '0px' })\n\t\tconst menu = this.legendMenu\n\t\tconst div = menu.clear().d.append('div')\n\t\tconst option = (text: string, edit: () => { [label: string]: LegendOverride }) =>\n\t\t\tdiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t.text(text)\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tmenu.hide()\n\t\t\t\t\tthis.editLegend(type, edit())\n\t\t\t\t})\n\t\toption(e.hidden ? 'Show' : 'Hide', () => ({ [e.label]: { hidden: !e.hidden } }))\n\t\tif (entries.length > 1)\n\t\t\toption('Show only', () => Object.fromEntries(entries.map(x => [x.label, { hidden: x.label != e.label }])))\n\t\tif (entries.some(x => x.hidden))\n\t\t\toption('Show all', () => Object.fromEntries(entries.map(x => [x.label, { hidden: false }])))\n\t\tif (opts.allowColor)\n\t\t\tdiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_sharp_border')\n\t\t\t\t.style('padding', '0px 10px')\n\t\t\t\t.text('Color:')\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'color')\n\t\t\t\t.attr('value', rgb(e.color).formatHex())\n\t\t\t\t.on('change', (ev: Event) => {\n\t\t\t\t\tmenu.hide()\n\t\t\t\t\tthis.editLegend(type, { [e.label]: { color: (ev.target as HTMLInputElement).value } })\n\t\t\t\t})\n\t\tif (opts.allowShape) {\n\t\t\tdiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t.text('Change shape')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tdiv.selectAll('*').remove()\n\t\t\t\t\t// shapeSelector lists the shapes in the order of the shapes object\n\t\t\t\t\tshapeSelector(div, (index: number) => {\n\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t\tthis.editLegend(type, { [e.label]: { shape: Object.keys(shapes)[index] } })\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t}\n\t\tmenu.showunder(event.target)\n\t}\n\n\t/** remove the body-mounted menus and their body listeners */\n\tdestroy() {\n\t\tthis.dom.tip.destroy()\n\t\tthis.legendMenu?.destroy()\n\t}\n\n\t/** merge changes into the legend overrides, then save them through onSettingsChange or redraw locally */\n\teditLegend(type: keyof LegendOverrides, changes: { [label: string]: LegendOverride }) {\n\t\tconst legend: LegendOverrides = structuredClone(\n\t\t\tthis.settings.legend || { categories: {}, events: {}, pointCategories: {} }\n\t\t)\n\t\tif (!legend[type]) legend[type] = {}\n\t\tfor (const [label, o] of Object.entries(changes)) legend[type][label] = { ...legend[type][label], ...o }\n\t\tif (this.onSettingsChange) this.onSettingsChange({ legend })\n\t\telse {\n\t\t\tthis.settings = { ...this.settings, legend }\n\t\t\tthis.render()\n\t\t}\n\t}\n\n\t/** list annotations of a point's own sample (e.g. a CSF sample) in the open tooltip, using the same\n\tsingle-sample query and value formatting as sample view. termIds comes from the event's sampleTerms in\n\tthe dataset config and sets which terms are shown and in what order. the table fills in only if the\n\ttooltip still shows this point */\n\tasync showPointSampleAnno(tip, sampleId: number, termIds: string[]) {\n\t\tconst holder = tip.d.append('div').attr('data-sampleid', sampleId).style('margin', '4px 0')\n\t\tholder.append('div').style('opacity', 0.6).text('Loading annotations ...')\n\t\tlet rows: { label: string; value: string }[]\n\t\ttry {\n\t\t\trows = await this.getPointSampleAnno(sampleId, termIds)\n\t\t} catch (e: any) {\n\t\t\trows = []\n\t\t\tconsole.warn('swimmer: cannot load sample annotations', e)\n\t\t}\n\t\tif (!holder.node()?.isConnected) return // tooltip moved on to another element\n\t\tholder.selectAll('*').remove()\n\t\tif (!rows.length) return\n\t\tconst table = holder.append('table').style('border-spacing', '0 1px').style('font-size', '0.9em')\n\t\tfor (const r of rows) {\n\t\t\tconst tr = table.append('tr')\n\t\t\ttr.append('td').style('padding-right', '8px').style('opacity', 0.7).text(r.label)\n\t\t\ttr.append('td').text(r.value)\n\t\t}\n\t}\n\n\tgetPointSampleAnno(sampleId: number, termIds: string[]) {\n\t\tconst cacheKey = `${sampleId}\\t${termIds.join('\\t')}`\n\t\tlet pr = this.pointSampleAnno.get(cacheKey)\n\t\tif (!pr) {\n\t\t\tpr = (async () => {\n\t\t\t\tconst data = await this.app.vocabApi.getSingleSampleData({ sampleId, term_ids: termIds })\n\t\t\t\tif ('error' in data) throw data.error\n\t\t\t\tconst rows: { label: string; value: string }[] = []\n\t\t\t\t// configured order; a term without a value for this sample is skipped\n\t\t\t\tfor (const id of termIds.filter(id => data[id])) {\n\t\t\t\t\tconst term = data[id].term\n\t\t\t\t\tconst value = getTermValue(term, data)\n\t\t\t\t\tif (value != null) rows.push({ label: term.name, value })\n\t\t\t\t}\n\t\t\t\treturn rows\n\t\t\t})()\n\t\t\t// a failed fetch is not cached, so the next hover retries\n\t\t\tpr.catch(() => this.pointSampleAnno.delete(cacheKey))\n\t\t\tthis.pointSampleAnno.set(cacheKey, pr)\n\t\t}\n\t\treturn pr\n\t}\n\n\t/** withRelated: open the sample with its related samples (e.g. a patient lane shows the patient and\n\tits primary/PDX/CSF samples as columns), as when the sample is picked in the sample view search box;\n\totherwise only this sample (e.g. a CSF dot). the sample view's swimmer lane uses the same time reference */\n\topenSampleView(sample: { sampleId: number; sampleName: string }, withRelated = false) {\n\t\tconst config: any = { chartType: 'sampleView', ...(withRelated ? { sample } : { samples: [sample] }) }\n\t\tif (this.timeReference) config.swimmerTimeReference = this.timeReference\n\t\tthis.app.dispatch({ type: 'plot_create', config })\n\t}\n}\n\n/** termdb/swimmer request. the route sends errors as a plain string, so they are not cached by dofetch3 */\nexport async function fetchSwimmerLanes(body: SwimmerRequest): Promise<SwimmerResponse> {\n\tconst result: SwimmerResponse | string = await dofetch3('termdb/swimmer', { body })\n\tif (typeof result == 'string') throw result\n\tif (!result?.lanes) throw 'invalid response from termdb/swimmer'\n\treturn result\n}\n\n/** default settings of the swimmer chart, reused by sample view */\nexport function getDefaultSwimmerSettings(): SwimmerSettings {\n\treturn {\n\t\trowHeight: 20,\n\t\tplotWidth: 800,\n\t\tsortBy: 'end',\n\t\tshowSampleNames: true,\n\t\tlegend: { categories: {}, events: {}, pointCategories: {} }\n\t}\n}\n\n/** widest rendered label in px at the given font size (px). getBBox() is 0 when the svg is hidden,\nwhich only shrinks the left margin; the plot is visible when render() runs */\nfunction getMaxTextWidth(svg, labels: string[], fontSize: number): number {\n\tlet max = 0\n\tfor (const label of labels) {\n\t\tconst t = svg.append('text').attr('font-size', fontSize).text(label)\n\t\tmax = Math.max(max, t.node().getBBox().width)\n\t\tt.remove()\n\t}\n\treturn max\n}\n\nexport async function getPlotConfig(opts, app) {\n\tconst settings = getDefaultSwimmerSettings()\n\tconst config: any = {\n\t\tchartType: 'swimmer',\n\t\tsettings: {\n\t\t\tcontrols: { isOpen: false },\n\t\t\tswimmer: settings\n\t\t}\n\t}\n\tcopyMerge(config, opts)\n\t// a divide-by or mark-by tw from a saved session or another chart is raw until filled here\n\tif (config.term0) config.term0 = await fillTermWrapper(config.term0, app.vocabApi)\n\tif (config.pointTerm) config.pointTerm = await fillTermWrapper(config.pointTerm, app.vocabApi)\n\treturn config\n}\n\nexport const swimmerInit = getCompInit(Swimmer)\n// this alias will allow abstracted dynamic imports\nexport const componentInit = swimmerInit\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["id"]
|
|
7
|
-
}
|
package/dist/table-LLCFO4KK.js
DELETED
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
PlotBase,
|
|
3
|
-
controlsInit
|
|
4
|
-
} from "./chunk-BKW35Z4U.js";
|
|
5
|
-
import "./chunk-HJ6L54YS.js";
|
|
6
|
-
import "./chunk-ETXOEP4N.js";
|
|
7
|
-
import "./chunk-CNFTQSNE.js";
|
|
8
|
-
import "./chunk-5NI77Z3O.js";
|
|
9
|
-
import "./chunk-TVJOSRCH.js";
|
|
10
|
-
import "./chunk-3CIL7KH7.js";
|
|
11
|
-
import "./chunk-T4XPCSLP.js";
|
|
12
|
-
import "./chunk-CJHNPYFQ.js";
|
|
13
|
-
import "./chunk-W5J3LTYS.js";
|
|
14
|
-
import "./chunk-NR6WFCPF.js";
|
|
15
|
-
import "./chunk-GN2A5NL5.js";
|
|
16
|
-
import "./chunk-ME3HB3V6.js";
|
|
17
|
-
import {
|
|
18
|
-
getCompInit
|
|
19
|
-
} from "./chunk-HBNB5TRH.js";
|
|
20
|
-
import "./chunk-PF4DSFDR.js";
|
|
21
|
-
import "./chunk-4OLM3KSB.js";
|
|
22
|
-
import "./chunk-6XKAOSQE.js";
|
|
23
|
-
import "./chunk-TLT4YIG3.js";
|
|
24
|
-
import "./chunk-5R63Q5KH.js";
|
|
25
|
-
import {
|
|
26
|
-
select_default
|
|
27
|
-
} from "./chunk-I6Y4O3RR.js";
|
|
28
|
-
import "./chunk-Q5RDQNIT.js";
|
|
29
|
-
import "./chunk-HS5PO5ZQ.js";
|
|
30
|
-
|
|
31
|
-
// plots/table.js
|
|
32
|
-
var TdbTable = class _TdbTable extends PlotBase {
|
|
33
|
-
static type = "table";
|
|
34
|
-
constructor(opts, api) {
|
|
35
|
-
super(opts, api);
|
|
36
|
-
this.type = _TdbTable.type;
|
|
37
|
-
}
|
|
38
|
-
async init() {
|
|
39
|
-
const opts = this.opts;
|
|
40
|
-
const controls = opts.controls ? null : opts.holder.append("div");
|
|
41
|
-
const holder = opts.controls ? opts.holder : opts.holder.append("div");
|
|
42
|
-
this.dom = {
|
|
43
|
-
header: opts.header,
|
|
44
|
-
controls,
|
|
45
|
-
holder,
|
|
46
|
-
div: holder.style("margin", "10px 0px").style("display", "none"),
|
|
47
|
-
inputs: ["term1", "overlay"]
|
|
48
|
-
};
|
|
49
|
-
if (this.dom.header) this.dom.header.html("Crosstab");
|
|
50
|
-
setInteractivity(this);
|
|
51
|
-
setRenderers(this);
|
|
52
|
-
await this.setControls();
|
|
53
|
-
}
|
|
54
|
-
async setControls() {
|
|
55
|
-
if (this.opts.controls) {
|
|
56
|
-
this.opts.controls.on("downloadClick.table", this.download);
|
|
57
|
-
} else {
|
|
58
|
-
this.dom.holder.attr("class", "pp-termdb-plot-viz").style("display", "inline-block").style("min-width", "300px").style("margin-left", "50px");
|
|
59
|
-
this.components = {
|
|
60
|
-
controls: await controlsInit({
|
|
61
|
-
app: this.app,
|
|
62
|
-
id: this.id,
|
|
63
|
-
holder: this.dom.controls.style("display", "inline-block")
|
|
64
|
-
})
|
|
65
|
-
};
|
|
66
|
-
this.components.controls.on("downloadClick.table", this.download);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
getState(appState, sub) {
|
|
70
|
-
const config = appState.plots.find((p) => p.id === this.id);
|
|
71
|
-
if (!config) {
|
|
72
|
-
throw `No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`;
|
|
73
|
-
}
|
|
74
|
-
return {
|
|
75
|
-
activeCohort: appState.activeCohort,
|
|
76
|
-
termfilter: appState.termfilter,
|
|
77
|
-
config: {
|
|
78
|
-
term: config.term,
|
|
79
|
-
term2: config.term2,
|
|
80
|
-
settings: {
|
|
81
|
-
common: config.settings.common,
|
|
82
|
-
table: config.settings.table
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
async main() {
|
|
88
|
-
try {
|
|
89
|
-
this.config = structuredClone(this.state.config);
|
|
90
|
-
if (!this.config.term2) {
|
|
91
|
-
this.dom.div.style("display", "none");
|
|
92
|
-
throw "term2 is required for table view";
|
|
93
|
-
}
|
|
94
|
-
const c = this.state.config;
|
|
95
|
-
if (this.dom.header) this.dom.header.html(c.term.term.name + " vs " + c.term2.term.name);
|
|
96
|
-
const reqOpts = this.getDataRequestOpts();
|
|
97
|
-
this.data = await this.vocabApi.getNestedChartSeriesData(reqOpts);
|
|
98
|
-
this.app.vocabApi.syncTermData(this.state.config, this.data);
|
|
99
|
-
const [columns, rows] = this.processData(this.data);
|
|
100
|
-
this.render(columns, rows);
|
|
101
|
-
} catch (e) {
|
|
102
|
-
throw e;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
// creates an opts object for the vocabApi.getNestedChartsData()
|
|
106
|
-
getDataRequestOpts() {
|
|
107
|
-
const c = this.config;
|
|
108
|
-
const opts = { term: c.term, filter: this.state.termfilter.filter };
|
|
109
|
-
if (c.term2) opts.term2 = c.term2;
|
|
110
|
-
if (c.term0) opts.term0 = c.term0;
|
|
111
|
-
return opts;
|
|
112
|
-
}
|
|
113
|
-
processData(data) {
|
|
114
|
-
const t2 = this.config.term2.term;
|
|
115
|
-
const columns = data.refs.rows.map((key) => {
|
|
116
|
-
const label = t2.values && key in t2.values ? t2.values[key].label : key;
|
|
117
|
-
return { key, label };
|
|
118
|
-
});
|
|
119
|
-
const column_keys = data.refs.rows;
|
|
120
|
-
const t1 = this.config.term.term;
|
|
121
|
-
const rows = data.refs.cols.map((v1) => {
|
|
122
|
-
const series = data.charts[0].serieses.find((d) => d.seriesId == v1);
|
|
123
|
-
const label = t1.values && v1 in t1.values ? t1.values[v1].label : v1;
|
|
124
|
-
return {
|
|
125
|
-
label,
|
|
126
|
-
lst: !series ? [] : series.data.slice().sort((a, b) => column_keys.indexOf(a.dataId) - column_keys.indexOf(b.dataId)).map((d) => {
|
|
127
|
-
return {
|
|
128
|
-
label: d.dataId,
|
|
129
|
-
value: d.total
|
|
130
|
-
};
|
|
131
|
-
})
|
|
132
|
-
};
|
|
133
|
-
});
|
|
134
|
-
return [columns, rows];
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
function setInteractivity(self) {
|
|
138
|
-
self.download = () => {
|
|
139
|
-
if (!self.state || !self.state.isVisible) return;
|
|
140
|
-
const data = [];
|
|
141
|
-
self.dom.div.selectAll("tr").each(function() {
|
|
142
|
-
const series = [];
|
|
143
|
-
select_default(this).selectAll("th, td").each(function() {
|
|
144
|
-
series.push(select_default(this).text());
|
|
145
|
-
});
|
|
146
|
-
data.push(series);
|
|
147
|
-
});
|
|
148
|
-
const matrix = data.map((row) => row.join(" ")).join("\n");
|
|
149
|
-
const a = document.createElement("a");
|
|
150
|
-
document.body.appendChild(a);
|
|
151
|
-
a.addEventListener(
|
|
152
|
-
"click",
|
|
153
|
-
function() {
|
|
154
|
-
a.download = self.config.term.term.name + " table.txt";
|
|
155
|
-
a.href = URL.createObjectURL(new Blob([matrix], { type: "text/tab-separated-values" }));
|
|
156
|
-
document.body.removeChild(a);
|
|
157
|
-
},
|
|
158
|
-
false
|
|
159
|
-
);
|
|
160
|
-
a.click();
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
function setRenderers(self) {
|
|
164
|
-
self.render = function render(columns, rows) {
|
|
165
|
-
self.dom.div.style("display", "inline-block").selectAll("*").remove();
|
|
166
|
-
const table = self.dom.div.append("table").style("margin-right", "20px").style("border-spacing", "3px").style("border-collapse", "collapse").style("border", "1px solid black");
|
|
167
|
-
const tr = table.append("tr").style("white-space", "normal").style("background-color", "#ececec");
|
|
168
|
-
tr.append("td");
|
|
169
|
-
for (const value of columns) {
|
|
170
|
-
const label = value.label;
|
|
171
|
-
tr.append("th").text(label.length > 20 ? label.slice(0, 16) + "..." : label).attr("aria-label", label).style("border", "1px solid black").style("padding", "3px").style("text-align", "center").style("min-width", "80px").style("max-width", "150px").style("word-break", label.length > 12 ? "break-word" : "normal").style("vertical-align", "top");
|
|
172
|
-
}
|
|
173
|
-
let i = 0;
|
|
174
|
-
for (const t1v of rows) {
|
|
175
|
-
const tr2 = table.append("tr").style("background-color", i++ % 2 == 0 ? "#fff" : "#ececec");
|
|
176
|
-
tr2.append("th").text(t1v.label.length > 20 ? t1v.label.slice(0, 20) + "..." : t1v.label).attr("aria-label", t1v.label).style("border", "1px solid black").style("padding", "3px").style("word-break", t1v.label.length > 12 ? "break-all" : "normal");
|
|
177
|
-
const column_keys = columns.map((d) => d.key);
|
|
178
|
-
for (const t2label of column_keys) {
|
|
179
|
-
const td = tr2.append("td").style("border", "1px solid black").style("padding", "3px 5px").style("text-align", "center");
|
|
180
|
-
const v = t1v.lst.find((i2) => i2.label == t2label);
|
|
181
|
-
if (v) {
|
|
182
|
-
td.html(v.value);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
var tableInit = getCompInit(TdbTable);
|
|
189
|
-
export {
|
|
190
|
-
tableInit
|
|
191
|
-
};
|
|
192
|
-
//# sourceMappingURL=table-LLCFO4KK.js.map
|
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
HandlerBase,
|
|
3
|
-
getFractionSelectionError,
|
|
4
|
-
renderFractionSelection,
|
|
5
|
-
renderTable
|
|
6
|
-
} from "./chunk-BKW35Z4U.js";
|
|
7
|
-
import "./chunk-HJ6L54YS.js";
|
|
8
|
-
import "./chunk-ETXOEP4N.js";
|
|
9
|
-
import "./chunk-CNFTQSNE.js";
|
|
10
|
-
import "./chunk-5NI77Z3O.js";
|
|
11
|
-
import "./chunk-TVJOSRCH.js";
|
|
12
|
-
import "./chunk-3CIL7KH7.js";
|
|
13
|
-
import "./chunk-T4XPCSLP.js";
|
|
14
|
-
import "./chunk-CJHNPYFQ.js";
|
|
15
|
-
import "./chunk-W5J3LTYS.js";
|
|
16
|
-
import "./chunk-NR6WFCPF.js";
|
|
17
|
-
import {
|
|
18
|
-
termItemType
|
|
19
|
-
} from "./chunk-GN2A5NL5.js";
|
|
20
|
-
import "./chunk-ME3HB3V6.js";
|
|
21
|
-
import "./chunk-HBNB5TRH.js";
|
|
22
|
-
import "./chunk-PF4DSFDR.js";
|
|
23
|
-
import "./chunk-4OLM3KSB.js";
|
|
24
|
-
import "./chunk-6XKAOSQE.js";
|
|
25
|
-
import "./chunk-TLT4YIG3.js";
|
|
26
|
-
import "./chunk-5R63Q5KH.js";
|
|
27
|
-
import "./chunk-I6Y4O3RR.js";
|
|
28
|
-
import "./chunk-Q5RDQNIT.js";
|
|
29
|
-
import "./chunk-HS5PO5ZQ.js";
|
|
30
|
-
|
|
31
|
-
// termsetting/handlers/termCollection.ts
|
|
32
|
-
var TermCollectionHandler = class extends HandlerBase {
|
|
33
|
-
//main menu dom elements before drag and drop divs are added
|
|
34
|
-
constructor(opts) {
|
|
35
|
-
super(opts);
|
|
36
|
-
this.dom = {};
|
|
37
|
-
this.termsetting = opts.termsetting;
|
|
38
|
-
this.tw = opts.termsetting.tw;
|
|
39
|
-
this.dom.holder = opts.holder || this.termsetting.dom.tip.d;
|
|
40
|
-
}
|
|
41
|
-
async showEditMenu(div) {
|
|
42
|
-
const self = this.termsetting;
|
|
43
|
-
div.selectAll("*").remove();
|
|
44
|
-
const terms = self.term.termlst;
|
|
45
|
-
const groupDiv = div.append("div");
|
|
46
|
-
const callback = this.tw.term.memberType == "numeric" ? self.tw.type === "TermCollectionTWFraction" ? addFractionTable(self, groupDiv, terms) : addNumericTable(self, groupDiv, terms) : addCategoricalTable(self, groupDiv, terms);
|
|
47
|
-
const buttons = div.append("div").style("padding", "6px 20px");
|
|
48
|
-
buttons.append("button").attr("data-testid", "sjpp-term-collection-members-apply").text("Apply").on("click", callback);
|
|
49
|
-
}
|
|
50
|
-
async showBinsEditMenu(div) {
|
|
51
|
-
const self = this.termsetting;
|
|
52
|
-
div.selectAll("*").remove();
|
|
53
|
-
const { NumericHandler } = await import("./NumericHandler-7RALUACA.js");
|
|
54
|
-
const { NumDiscreteEditor } = await import("./NumDiscreteEditor-H6J67YEL.js");
|
|
55
|
-
const numericHandler = new NumericHandler({ termsetting: self });
|
|
56
|
-
const densityData = { min: 0, max: 1 };
|
|
57
|
-
numericHandler.density_data = densityData;
|
|
58
|
-
numericHandler.density.density_data = densityData;
|
|
59
|
-
numericHandler.density.no_density_data = true;
|
|
60
|
-
numericHandler.density.showViolin = async (div2) => {
|
|
61
|
-
div2.selectAll("*").remove();
|
|
62
|
-
div2.append("div").style("padding", "10px 5px").text("Fraction range is 0 to 1.");
|
|
63
|
-
return densityData;
|
|
64
|
-
};
|
|
65
|
-
numericHandler.density.setBinLines = async () => {
|
|
66
|
-
};
|
|
67
|
-
const editor = new NumDiscreteEditor({ termsetting: self }, numericHandler);
|
|
68
|
-
await editor.showEditMenu(div.append("div"));
|
|
69
|
-
const buttons = div.append("div").style("margin", "0px 0px 10px 12px");
|
|
70
|
-
buttons.append("button").attr("data-testid", "sjpp-term-collection-bins-apply").text("Apply").on("click", () => {
|
|
71
|
-
const editedQ = editor.getEditedQ();
|
|
72
|
-
self.q = {
|
|
73
|
-
...editedQ,
|
|
74
|
-
denominators: self.q.denominators,
|
|
75
|
-
numerators: self.q.numerators
|
|
76
|
-
};
|
|
77
|
-
self.dom.tip.hide();
|
|
78
|
-
self.api.runCallback();
|
|
79
|
-
});
|
|
80
|
-
buttons.append("button").style("margin-left", "8px").text("Reset").on("click", () => editor.undoEdits());
|
|
81
|
-
}
|
|
82
|
-
getPillStatus() {
|
|
83
|
-
return this.tw.getStatus(this.termsetting.usecase);
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
function addFractionTable(self, div, terms) {
|
|
87
|
-
const selection = {
|
|
88
|
-
numerators: self.q.numerators?.slice() || [],
|
|
89
|
-
denominators: self.q.denominators?.slice() || []
|
|
90
|
-
};
|
|
91
|
-
renderFractionSelection({
|
|
92
|
-
holder: div,
|
|
93
|
-
termlst: terms,
|
|
94
|
-
selection,
|
|
95
|
-
propsByTermId: self.term.propsByTermId
|
|
96
|
-
});
|
|
97
|
-
return () => {
|
|
98
|
-
const error = getFractionSelectionError(selection);
|
|
99
|
-
if (error) return window.alert(error);
|
|
100
|
-
const q = self.q;
|
|
101
|
-
q.denominators = selection.denominators;
|
|
102
|
-
q.numerators = selection.numerators;
|
|
103
|
-
self.api.runCallback();
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
function addNumericTable(self, div, terms) {
|
|
107
|
-
const selectedRows = getSelectedRows(self, terms);
|
|
108
|
-
const rows = [];
|
|
109
|
-
for (const [index, term] of terms.entries()) {
|
|
110
|
-
const selected = selectedRows.includes(index);
|
|
111
|
-
const checked = selected && self.q.numerators?.includes(term.id) ? "checked" : "";
|
|
112
|
-
const disabled = selected ? "" : "disabled";
|
|
113
|
-
rows.push([
|
|
114
|
-
{},
|
|
115
|
-
{
|
|
116
|
-
html: `<input type='checkbox' data-testid='sjpp-term-collection-sort-member' ${checked} ${disabled} />`
|
|
117
|
-
}
|
|
118
|
-
]);
|
|
119
|
-
}
|
|
120
|
-
const columns = [getTermNameColumn(self, terms), { label: "Use for sorting" }];
|
|
121
|
-
const noButtonCallback = () => {
|
|
122
|
-
for (const tr of div.select("table").select("tbody").node().querySelectorAll("tr")) {
|
|
123
|
-
const memberCheckbox = tr.querySelector(
|
|
124
|
-
'input[type="checkbox"]:not([data-testid="sjpp-term-collection-sort-member"])'
|
|
125
|
-
);
|
|
126
|
-
const sortingCheckbox = tr.querySelector(
|
|
127
|
-
'[data-testid="sjpp-term-collection-sort-member"]'
|
|
128
|
-
);
|
|
129
|
-
if (!memberCheckbox || !sortingCheckbox) continue;
|
|
130
|
-
sortingCheckbox.disabled = !memberCheckbox.checked;
|
|
131
|
-
if (!memberCheckbox.checked) sortingCheckbox.checked = false;
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
renderTable({
|
|
135
|
-
rows,
|
|
136
|
-
columns,
|
|
137
|
-
div,
|
|
138
|
-
maxHeight: "40vh",
|
|
139
|
-
noButtonCallback,
|
|
140
|
-
striped: false,
|
|
141
|
-
showHeader: true,
|
|
142
|
-
//false,
|
|
143
|
-
selectedRows,
|
|
144
|
-
columnButtons: void 0,
|
|
145
|
-
//Leave until table.js is typed
|
|
146
|
-
buttons: void 0
|
|
147
|
-
});
|
|
148
|
-
return () => {
|
|
149
|
-
const q = self.q;
|
|
150
|
-
const trs = div.select("table").select("tbody").node().querySelectorAll("tr");
|
|
151
|
-
q.lst = getSelectedTermIds(terms, trs);
|
|
152
|
-
q.numerators = terms.filter((term, i) => {
|
|
153
|
-
const checked = trs[i].querySelector('[data-testid="sjpp-term-collection-sort-member"]')?.checked;
|
|
154
|
-
return checked === true;
|
|
155
|
-
}).map((t) => t.id);
|
|
156
|
-
self.api.runCallback();
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
function addCategoricalTable(self, div, terms) {
|
|
160
|
-
const rows = [];
|
|
161
|
-
for (let i = 0; i < terms.length; i++) {
|
|
162
|
-
rows.push([{}]);
|
|
163
|
-
}
|
|
164
|
-
const selectedRows = getSelectedRows(self, terms);
|
|
165
|
-
const columns = [getTermNameColumn(self, terms)];
|
|
166
|
-
renderTable({
|
|
167
|
-
rows,
|
|
168
|
-
columns,
|
|
169
|
-
div: div.append("div").style("margin-top", "10px"),
|
|
170
|
-
maxWidth: "30vw",
|
|
171
|
-
maxHeight: "40vh",
|
|
172
|
-
noButtonCallback: () => {
|
|
173
|
-
},
|
|
174
|
-
striped: false,
|
|
175
|
-
showHeader: true,
|
|
176
|
-
//false,
|
|
177
|
-
selectedRows,
|
|
178
|
-
columnButtons: void 0,
|
|
179
|
-
//Leave until table.js is typed
|
|
180
|
-
buttons: void 0
|
|
181
|
-
});
|
|
182
|
-
const categoryDiv = div.append("div").style("margin-top", "15px");
|
|
183
|
-
const values = Object.assign({}, ...self.tw.term.termlst?.map((t) => t.values || {}) ?? []);
|
|
184
|
-
const categoryTable = categoryDiv.append("div");
|
|
185
|
-
const ckSource = self.tw.q.categoryKeys || self.tw.term.categoryKeys || [];
|
|
186
|
-
renderTable({
|
|
187
|
-
columns: [{ label: "CATEGORIES" }],
|
|
188
|
-
rows: ckSource.map((ck) => {
|
|
189
|
-
return [{ value: values[ck.key]?.label ?? ck.key, checked: ck.shown }];
|
|
190
|
-
}),
|
|
191
|
-
div: categoryTable,
|
|
192
|
-
maxWidth: "30vw",
|
|
193
|
-
maxHeight: "40vh",
|
|
194
|
-
noButtonCallback: () => {
|
|
195
|
-
},
|
|
196
|
-
// FIXME to supply a real callback
|
|
197
|
-
striped: false,
|
|
198
|
-
showHeader: true,
|
|
199
|
-
//false,
|
|
200
|
-
selectAll: true,
|
|
201
|
-
columnButtons: void 0,
|
|
202
|
-
//Leave until table.js is typed
|
|
203
|
-
buttons: void 0
|
|
204
|
-
});
|
|
205
|
-
return () => {
|
|
206
|
-
const trs = div.select("table").select("tbody").node().querySelectorAll("tr");
|
|
207
|
-
self.q.lst = getSelectedTermIds(terms, trs);
|
|
208
|
-
const catTrs = categoryTable.select("table").select("tbody").node().querySelectorAll("tr");
|
|
209
|
-
self.q.categoryKeys = ckSource.map((ck, i) => {
|
|
210
|
-
const checked = catTrs[i].querySelectorAll("td")[1].querySelector("input")?.checked;
|
|
211
|
-
return { key: ck.key, shown: !!checked };
|
|
212
|
-
});
|
|
213
|
-
self.api.runCallback();
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
function getSelectedRows(self, terms) {
|
|
217
|
-
const selectedIds = self.q.lst?.length > 0 ? new Set(self.q.lst) : new Set(self.term.termIds?.length > 0 ? self.term.termIds : terms.map((term) => term.id));
|
|
218
|
-
return terms.map((term, index) => selectedIds.has(term.id) ? index : -1).filter((index) => index !== -1);
|
|
219
|
-
}
|
|
220
|
-
function getSelectedTermIds(terms, trs) {
|
|
221
|
-
return terms.filter((_, i) => trs[i].querySelectorAll("td")[1].querySelector("input")?.checked === true).map((term) => term.id);
|
|
222
|
-
}
|
|
223
|
-
function getTermNameColumn(self, terms) {
|
|
224
|
-
if (!terms?.[0]) throw new Error("terms[0] missing");
|
|
225
|
-
return {
|
|
226
|
-
label: termItemType(terms[0]),
|
|
227
|
-
fillCell(td, index) {
|
|
228
|
-
const term = terms[index];
|
|
229
|
-
const color = self.term.propsByTermId?.[term.id]?.color || term.color;
|
|
230
|
-
if (color) {
|
|
231
|
-
td.append("span").attr("data-testid", "sjpp-term-collection-member-color").style("display", "inline-block").style("width", "10px").style("height", "10px").style("margin-right", "5px").style("background-color", color);
|
|
232
|
-
}
|
|
233
|
-
td.append("span").text(term.name);
|
|
234
|
-
}
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
function fillTW(tw) {
|
|
238
|
-
if (!tw.type) tw.type = "termCollection";
|
|
239
|
-
if (!tw.q) tw.q = { mode: "continuous", type: "compositePercentage" };
|
|
240
|
-
else tw.q.mode = "continuous";
|
|
241
|
-
return tw;
|
|
242
|
-
}
|
|
243
|
-
export {
|
|
244
|
-
TermCollectionHandler,
|
|
245
|
-
fillTW
|
|
246
|
-
};
|
|
247
|
-
//# sourceMappingURL=termCollection-DAHJGR5P.js.map
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
SearchHandler
|
|
3
|
-
} from "./chunk-TUO5I6LP.js";
|
|
4
|
-
import "./chunk-BKW35Z4U.js";
|
|
5
|
-
import "./chunk-HJ6L54YS.js";
|
|
6
|
-
import "./chunk-ETXOEP4N.js";
|
|
7
|
-
import "./chunk-CNFTQSNE.js";
|
|
8
|
-
import "./chunk-5NI77Z3O.js";
|
|
9
|
-
import "./chunk-TVJOSRCH.js";
|
|
10
|
-
import "./chunk-3CIL7KH7.js";
|
|
11
|
-
import "./chunk-T4XPCSLP.js";
|
|
12
|
-
import "./chunk-CJHNPYFQ.js";
|
|
13
|
-
import "./chunk-W5J3LTYS.js";
|
|
14
|
-
import "./chunk-NR6WFCPF.js";
|
|
15
|
-
import "./chunk-GN2A5NL5.js";
|
|
16
|
-
import "./chunk-ME3HB3V6.js";
|
|
17
|
-
import "./chunk-HBNB5TRH.js";
|
|
18
|
-
import "./chunk-PF4DSFDR.js";
|
|
19
|
-
import "./chunk-4OLM3KSB.js";
|
|
20
|
-
import "./chunk-6XKAOSQE.js";
|
|
21
|
-
import "./chunk-TLT4YIG3.js";
|
|
22
|
-
import "./chunk-5R63Q5KH.js";
|
|
23
|
-
import "./chunk-I6Y4O3RR.js";
|
|
24
|
-
import "./chunk-Q5RDQNIT.js";
|
|
25
|
-
import "./chunk-HS5PO5ZQ.js";
|
|
26
|
-
export {
|
|
27
|
-
SearchHandler
|
|
28
|
-
};
|
|
29
|
-
//# sourceMappingURL=termCollection-QIN53TIL.js.map
|