@sjcrh/proteinpaint-client 2.219.1 → 2.221.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (983) hide show
  1. package/dist/2dmaf-7YU3SNKL.js +1362 -0
  2. package/dist/AggMatrixInput-73CDR5FS.js +402 -0
  3. package/dist/AggregateMatrix-NNULVFBM.js +37 -0
  4. package/dist/AppHeader-EZDDLLXU.js +826 -0
  5. package/dist/BoxPlot-463E7CRY.js +1229 -0
  6. package/dist/CorrelationVolcano-LHIIMBPP.js +613 -0
  7. package/dist/Cuminc-UL2TCIKV.js +1217 -0
  8. package/dist/DE-VRFSKFDW.js +85 -0
  9. package/dist/DEinput-FZTQRWVC.js +479 -0
  10. package/dist/DM-PO7CQZNT.js +86 -0
  11. package/dist/DifferentialAnalysis-WK6HE3YH.js +236 -0
  12. package/dist/Disco-YBNQJQFG.js +3384 -0
  13. package/dist/Disco.UI-HC5XYBFV.js +239 -0
  14. package/dist/DmrPlot-7VJ5C66D.js +361 -0
  15. package/dist/GB-VPFQRDRO.js +1388 -0
  16. package/dist/GSEA-ZEJB3QZQ.js +870 -0
  17. package/dist/GeneExpInput-SBDDIY6G.js +38 -0
  18. package/dist/Geomap-23AHGP2V.js +80 -0
  19. package/dist/HicApp-7AQQE4CM.js +2240 -0
  20. package/dist/IDCViewer-NO5Q6VOB.js +10808 -0
  21. package/dist/NumBinaryEditor-DSRP4OOU.js +274 -0
  22. package/dist/NumBinaryEditor.unit.spec-TT666YL4.js +308 -0
  23. package/dist/NumContEditor-6CURFOCH.js +100 -0
  24. package/dist/NumContEditor.unit.spec-MNVCFCMP.js +160 -0
  25. package/dist/NumCustomBinEditor-SQRR5EFL.js +29 -0
  26. package/dist/NumCustomBinEditor.unit.spec-F7BZWGGT.js +393 -0
  27. package/dist/NumDiscreteEditor-U7Z2QNYP.js +165 -0
  28. package/dist/NumDiscreteEditor.unit.spec-EIEBUZCX.js +229 -0
  29. package/dist/NumRegularBinEditor-CVZSWN6Y.js +29 -0
  30. package/dist/NumRegularBinEditor.unit.spec-ZMAJOIHL.js +274 -0
  31. package/dist/NumSplineEditor-U43D5NBJ.js +205 -0
  32. package/dist/NumSplineEditor.unit.spec-C52AADTS.js +220 -0
  33. package/dist/NumericDensity-PUKDZOVI.js +29 -0
  34. package/dist/NumericDensity.unit.spec-2347S76D.js +414 -0
  35. package/dist/NumericHandler-3RT32PTR.js +30 -0
  36. package/dist/NumericHandler.unit.spec-4PADL4KZ.js +225 -0
  37. package/dist/ProteomeInput-NFV4FW4U.js +610 -0
  38. package/dist/Regression-N7M7N6G4.js +1412 -0
  39. package/dist/RunChart2-UPQ7C6QE.js +744 -0
  40. package/dist/SC-KBW2NHUV.js +1290 -0
  41. package/dist/Violin-GWCOP3ZF.js +1092 -0
  42. package/dist/Volcano-X3HT32GQ.js +2661 -0
  43. package/dist/Volcano-X3HT32GQ.js.map +7 -0
  44. package/dist/Wsi-NXAEOYIS.js +636 -0
  45. package/dist/aboutSunburst-5EKXZV2A.js +86 -0
  46. package/dist/aboutSunburst-5EKXZV2A.js.map +7 -0
  47. package/dist/adSandbox-RPEWEEW7.js +29 -0
  48. package/dist/animatedBubbleChart-ILDMZRBX.js +542 -0
  49. package/dist/app-LOUC4J47.js +28 -0
  50. package/dist/app-MRKXZ6AZ.js +38 -0
  51. package/dist/app.js +15 -15
  52. package/dist/bam-SQWPHCZZ.js +872 -0
  53. package/dist/bam-SQWPHCZZ.js.map +7 -0
  54. package/dist/barchart-CJR37234.js +38 -0
  55. package/dist/barchart2-QQYLTHWR.js +305 -0
  56. package/dist/block-GLF6QNKY.js +6203 -0
  57. package/dist/block-GLF6QNKY.js.map +7 -0
  58. package/dist/block.init-YJQTJIDO.js +29 -0
  59. package/dist/block.mds.expressionrank-GBMEI5KQ.js +350 -0
  60. package/dist/block.mds.geneboxplot-XWE3E5IW.js +819 -0
  61. package/dist/block.mds.junction-QLEHFVPE.js +1534 -0
  62. package/dist/block.mds.svcnv-53DTOPBC.js +6413 -0
  63. package/dist/block.svg-57T37ABS.js +155 -0
  64. package/dist/block.tk.aicheck-6DXJTS3H.js +274 -0
  65. package/dist/block.tk.bam-CJFFQDNX.js +1906 -0
  66. package/dist/block.tk.bam-CJFFQDNX.js.map +7 -0
  67. package/dist/block.tk.bigwig.ui-OYIVXE2L.js +202 -0
  68. package/dist/block.tk.hicstraw-UKTGEBWT.js +814 -0
  69. package/dist/block.tk.junction-ZU5KPFQ3.js +2353 -0
  70. package/dist/block.tk.junction.textmatrixui-P4WXTAZR.js +190 -0
  71. package/dist/block.tk.ld-3PQ4O2AE.js +90 -0
  72. package/dist/block.tk.menu-LLITB6UA.js +1050 -0
  73. package/dist/block.tk.pgv-Y3FBXUO3.js +934 -0
  74. package/dist/brainImaging-4B3WXLNP.js +550 -0
  75. package/dist/brainRegions-7VLONUWN.js +213 -0
  76. package/dist/bubbleHeatmap-DI6GJRR6.js +374 -0
  77. package/dist/cellTypeBubbleHeatmap-HJY53DB2.js +274 -0
  78. package/dist/chunk-226MNBZ2.js +240 -0
  79. package/dist/chunk-2CDFU4MQ.js +536 -0
  80. package/dist/chunk-2CDFU4MQ.js.map +7 -0
  81. package/dist/chunk-2CNFGVHU.js +257 -0
  82. package/dist/chunk-2MC3RNKA.js +2685 -0
  83. package/dist/chunk-2OMX5AYB.js +195 -0
  84. package/dist/chunk-2SL4QWUS.js +50 -0
  85. package/dist/chunk-3KGBC5MK.js +692 -0
  86. package/dist/chunk-3PCRAPUV.js +56 -0
  87. package/dist/chunk-4DBOMSKP.js +102 -0
  88. package/dist/chunk-4TJO2DGU.js +2297 -0
  89. package/dist/chunk-4TJO2DGU.js.map +7 -0
  90. package/dist/chunk-57BS6KNI.js +466 -0
  91. package/dist/chunk-5AXS5G4A.js +2334 -0
  92. package/dist/chunk-5DI4UNH5.js +562 -0
  93. package/dist/chunk-5HJG6ECV.js +237 -0
  94. package/dist/chunk-5ZYANHGX.js +550 -0
  95. package/dist/chunk-6T4MN7LV.js +397 -0
  96. package/dist/chunk-75MRUW2K.js +103 -0
  97. package/dist/chunk-7J3W3KCN.js +255 -0
  98. package/dist/chunk-7SFK32JP.js +398 -0
  99. package/dist/chunk-7SFK32JP.js.map +7 -0
  100. package/dist/chunk-AIZYAKIE.js +182 -0
  101. package/dist/chunk-AJNFI6GA.js +2008 -0
  102. package/dist/chunk-BJAWDZBL.js +2799 -0
  103. package/dist/chunk-C6PVZVIH.js +379 -0
  104. package/dist/chunk-C77X5ZUV.js +176 -0
  105. package/dist/chunk-C7KUMZQM.js +59 -0
  106. package/dist/chunk-C7ROKWV2.js +140 -0
  107. package/dist/chunk-CAH6LJ5Z.js +31 -0
  108. package/dist/chunk-CUCP2GMT.js +102 -0
  109. package/dist/chunk-DTGAMBRJ.js +134 -0
  110. package/dist/chunk-DXT7GDHY.js +55 -0
  111. package/dist/chunk-ENPMWVWG.js +5214 -0
  112. package/dist/chunk-EYKJQJ7R.js +382 -0
  113. package/dist/chunk-FE5TCBIT.js +30 -0
  114. package/dist/chunk-FJ2JV2VK.js +217 -0
  115. package/dist/chunk-FPMJJBLV.js +4389 -0
  116. package/dist/chunk-FPMJJBLV.js.map +7 -0
  117. package/dist/chunk-FZYVPRVQ.js +38 -0
  118. package/dist/chunk-GBKQHVKJ.js +274 -0
  119. package/dist/chunk-GUW7VTUL.js +281 -0
  120. package/dist/chunk-H7F6DMJA.js +70 -0
  121. package/dist/chunk-HH3NUAR2.js +96 -0
  122. package/dist/chunk-HRTPGNOG.js +159 -0
  123. package/dist/chunk-IFPRYTS7.js +848 -0
  124. package/dist/chunk-IJSFSUI4.js +302 -0
  125. package/dist/chunk-IRQKX6DL.js +263 -0
  126. package/dist/chunk-JHLF2ZC2.js +472 -0
  127. package/dist/chunk-JNZL7HKB.js +1219 -0
  128. package/dist/chunk-K2ARLT2A.js +26 -0
  129. package/dist/chunk-K3G56J5R.js +299 -0
  130. package/dist/chunk-KKUCG2QE.js +516 -0
  131. package/dist/chunk-KPXCXBNU.js +626 -0
  132. package/dist/chunk-LF5WBI27.js +418 -0
  133. package/dist/chunk-LF5WBI27.js.map +7 -0
  134. package/dist/chunk-MANAUI7R.js +54 -0
  135. package/dist/chunk-MEUSRAOE.js +170 -0
  136. package/dist/chunk-MHWYRNGA.js +348 -0
  137. package/dist/chunk-MSTYU3QO.js +14 -0
  138. package/dist/chunk-MWARRQT4.js +141 -0
  139. package/dist/chunk-MXKYPTZ7.js +203 -0
  140. package/dist/chunk-NX5IB4IY.js +37 -0
  141. package/dist/chunk-OZUF7O2S.js +133 -0
  142. package/dist/chunk-PRTLCJYF.js +2941 -0
  143. package/dist/chunk-PRTLCJYF.js.map +7 -0
  144. package/dist/chunk-PWYMHUXY.js +116 -0
  145. package/dist/chunk-PWYMHUXY.js.map +7 -0
  146. package/dist/chunk-QNCE6EOK.js +82 -0
  147. package/dist/chunk-RIHO7ZD5.js +119 -0
  148. package/dist/chunk-RV335DF2.js +266 -0
  149. package/dist/chunk-SFPZUBPM.js +2102 -0
  150. package/dist/chunk-SFPZUBPM.js.map +7 -0
  151. package/dist/chunk-THAUD62Q.js +1253 -0
  152. package/dist/chunk-VBTBUXXX.js +6375 -0
  153. package/dist/chunk-VHWJK2MP.js +56 -0
  154. package/dist/chunk-VLIOMJDR.js +276 -0
  155. package/dist/chunk-VMK4RHV5.js +54 -0
  156. package/dist/chunk-WD7FZ5EE.js +26536 -0
  157. package/dist/chunk-WD7FZ5EE.js.map +7 -0
  158. package/dist/chunk-WJLRU5OF.js +5786 -0
  159. package/dist/chunk-WJLRU5OF.js.map +7 -0
  160. package/dist/chunk-WKT7RF3C.js +468 -0
  161. package/dist/chunk-WXSMUSU7.js +184 -0
  162. package/dist/chunk-WXSX5OQJ.js +296 -0
  163. package/dist/chunk-WY3IORKG.js +194 -0
  164. package/dist/chunk-WYSOOKFJ.js +480 -0
  165. package/dist/chunk-XBBFFOLS.js +123 -0
  166. package/dist/chunk-XSRQGX5H.js +340 -0
  167. package/dist/chunk-YLL6CTBL.js +54 -0
  168. package/dist/chunk-YPBY37KD.js +1339 -0
  169. package/dist/chunk-YUNJBIK4.js +243 -0
  170. package/dist/chunk-Z5ECCUNG.js +444 -0
  171. package/dist/chunk-ZAC34BZQ.js +35 -0
  172. package/dist/chunk-ZAC34BZQ.js.map +7 -0
  173. package/dist/cohort-5WL6UJOS.js +66 -0
  174. package/dist/cohortSunburst-R3Z5KJQL.js +402 -0
  175. package/dist/condition-2IILUMVB.js +323 -0
  176. package/dist/controls-G3JITZF5.js +30 -0
  177. package/dist/controls.config-BO7KPPET.js +30 -0
  178. package/dist/correlation-CZILLVEM.js +91 -0
  179. package/dist/customdata.inputui-BXFQAMTR.js +280 -0
  180. package/dist/dataDownload-QTWR4IW7.js +326 -0
  181. package/dist/dataDownload-QTWR4IW7.js.map +7 -0
  182. package/dist/databrowser.ui-V2NJQF3U.js +421 -0
  183. package/dist/dictionary-OVAQX6R3.js +109 -0
  184. package/dist/dnaMethylation-DHPFRXB2.js +29 -0
  185. package/dist/dnaMethylation.integration.spec-PJLIRGN5.js +194 -0
  186. package/dist/dofetch-KBTN6OW4.js +49 -0
  187. package/dist/e2pca-O7SNMJGB.js +340 -0
  188. package/dist/ep-NIVLKG4S.js +1247 -0
  189. package/dist/expclust.gdc.spec-LVCD6C43.js +298 -0
  190. package/dist/facet-LB4SCXE4.js +556 -0
  191. package/dist/gb-3IJ4NCPO.js +77 -0
  192. package/dist/geneExpClustering-SIAC7CMA.js +240 -0
  193. package/dist/geneExpression-KPUOZ4PT.js +309 -0
  194. package/dist/geneExpression-P2TTZXN2.js +29 -0
  195. package/dist/geneExpression.unit.spec-Q5D6XHUF.js +151 -0
  196. package/dist/geneORA-PKUIJKTL.js +269 -0
  197. package/dist/geneRanking-ZGT5MHBV.js +544 -0
  198. package/dist/geneVariant-24YNANTT.js +289 -0
  199. package/dist/geneVariant-CDGENHWQ.js +32 -0
  200. package/dist/geneVariant.integration.spec-7QW4C2WO.js +672 -0
  201. package/dist/genefusion.ui-NVXGSBXD.js +299 -0
  202. package/dist/geneset-7STL6UDD.js +199 -0
  203. package/dist/genomeBrowser.spec-OE2CIP7I.js +272 -0
  204. package/dist/grin2-2HXUIY5O.js +66 -0
  205. package/dist/grin2-32IIJR5E.js +945 -0
  206. package/dist/hierCluster-MDZEI2KB.js +51 -0
  207. package/dist/hierCluster-T3PZUGBI.js +55 -0
  208. package/dist/hierCluster.config-7UN6AYGB.js +32 -0
  209. package/dist/hierCluster.integration.spec-DWOYVK6T.js +479 -0
  210. package/dist/hierCluster.interactivity-5OM6XNFG.js +45 -0
  211. package/dist/hierCluster.renderers-YGX6MZZW.js +18 -0
  212. package/dist/imagePlot-KBRXDV5G.js +152 -0
  213. package/dist/importPlot-DJMIC22L.js +8 -0
  214. package/dist/isoformExpression-SWDWADRC.js +31 -0
  215. package/dist/isoformExpression.unit.spec-2U5KCYBP.js +233 -0
  216. package/dist/junction-NMXVVGRG.js +32 -0
  217. package/dist/junction.customTerm-3R2GNE3A.js +15 -0
  218. package/dist/junction.unit.spec-JTGBPPN7.js +178 -0
  219. package/dist/launch.adhoc-YB5SKMNY.js +33 -0
  220. package/dist/leftlabel.sample-QKXIODCS.js +253 -0
  221. package/dist/lollipop-TSZ62PBH.js +162 -0
  222. package/dist/maf-4L5YN4CG.js +451 -0
  223. package/dist/maftimeline-VOYB3NY3.js +583 -0
  224. package/dist/matrix-IWJECVTF.js +55 -0
  225. package/dist/matrix-MMJAJZA7.js +50 -0
  226. package/dist/matrix.cells-5RTZUJVN.js +25 -0
  227. package/dist/matrix.config-DZGOZWJS.js +33 -0
  228. package/dist/matrix.data-Y5TPRGMW.js +22 -0
  229. package/dist/matrix.groups-6DXCAY4P.js +25 -0
  230. package/dist/matrix.integration.spec-2N237E7T.js +3156 -0
  231. package/dist/matrix.interactivity-FL33UUKR.js +33 -0
  232. package/dist/matrix.layout-7SYHV3KJ.js +35 -0
  233. package/dist/matrix.legend-S3E76TVO.js +19 -0
  234. package/dist/matrix.renderers-3SIBT2RP.js +30 -0
  235. package/dist/matrix.serieses-3UGLZW25.js +18 -0
  236. package/dist/matrix.sort-A7CNLDUJ.js +25 -0
  237. package/dist/matrix.sort.unit.spec-L3H44T6I.js +464 -0
  238. package/dist/matrix.sorterUi-6PZR3YOD.js +15 -0
  239. package/dist/matrix.sorterUi.unit.spec-2NRU5UFH.js +334 -0
  240. package/dist/matrix.unit.spec-HRZIJB6T.js +146 -0
  241. package/dist/mavb-ZVRQSDPS.js +726 -0
  242. package/dist/mds.fimo-ZKETTET7.js +509 -0
  243. package/dist/mds.samplescatterplot-ZV3UNRLP.js +1545 -0
  244. package/dist/mds.survivalplot-OVXZRTU4.js +472 -0
  245. package/dist/multivalue-6BE5IA4F.js +79 -0
  246. package/dist/numericDictTermCluster-6XDVVWLE.js +62 -0
  247. package/dist/oncomatrix-XK62NEOO.js +286 -0
  248. package/dist/oncomatrix.spec-YVTCHOPS.js +439 -0
  249. package/dist/plot.2dvaf-NUOBWMNX.js +368 -0
  250. package/dist/plot.app-G6IQWXTV.js +32 -0
  251. package/dist/plot.barplot-6QJ6HEJR.js +93 -0
  252. package/dist/plot.boxplot-XKQJSW2O.js +142 -0
  253. package/dist/plot.brainImaging-UTHFJFXU.js +51 -0
  254. package/dist/plot.disco-3MSCX7TM.js +98 -0
  255. package/dist/plot.ssgq-4KBVHF42.js +130 -0
  256. package/dist/plot.vaf2cov-OGUQSSDS.js +249 -0
  257. package/dist/polar2-V7M56GTZ.js +228 -0
  258. package/dist/profileForms-TS3BJLHH.js +937 -0
  259. package/dist/profilePlot-DP5272HR.js +45 -0
  260. package/dist/proteinView-K4K4SP3L.js +1346 -0
  261. package/dist/proteomeCohortCompare-SFWVGLFK.js +866 -0
  262. package/dist/pseudbulk.unit.spec-NFOA7J2C.js +82 -0
  263. package/dist/pseudobulk-XKZQEZ4I.js +31 -0
  264. package/dist/qualitative-7OSFNVI5.js +241 -0
  265. package/dist/qualitative-OIIN6E4Y.js +34 -0
  266. package/dist/radar2-AHZJKX7S.js +323 -0
  267. package/dist/radarFacility2-OUW6D5E7.js +331 -0
  268. package/dist/rememberedGvQ.unit.spec-SHTMMZGG.js +210 -0
  269. package/dist/render-7UZSGX3Q.js +29 -0
  270. package/dist/report-J7HKTXZ2.js +213 -0
  271. package/dist/sampleView-6547OUIM.js +39 -0
  272. package/dist/samplelst-UHF23UEB.js +114 -0
  273. package/dist/samplematrix-OOKS3TMR.js +2188 -0
  274. package/dist/sc-WF2BLGNG.js +77 -0
  275. package/dist/scatter-ABCVFGRV.js +84 -0
  276. package/dist/scatter-WF7XM3IA.js +919 -0
  277. package/dist/selectGenomeWithTklst-67HU5KRB.js +125 -0
  278. package/dist/singleCellCellType-3FZPJ25V.js +29 -0
  279. package/dist/singleCellCellType.unit.spec-TOMREHWK.js +150 -0
  280. package/dist/singleCellGeneExpression-NQTJ5KJQ.js +29 -0
  281. package/dist/singleCellGeneExpression.unit.spec-ZWUQTU2N.js +144 -0
  282. package/dist/singleCellNumericValue-VI7H722L.js +29 -0
  283. package/dist/singleCellNumericValue.unit.spec-QGLHES7H.js +412 -0
  284. package/dist/singleCellPlot-RU5T6SJK.js +44 -0
  285. package/dist/singlecell-C3CJVNXP.js +1562 -0
  286. package/dist/singlecell-NRQZ7KC6.js +77 -0
  287. package/dist/snp-X6XY65VS.js +29 -0
  288. package/dist/snp.unit.spec-6EENK7GQ.js +167 -0
  289. package/dist/snplocus-R4JA6TFT.js +200 -0
  290. package/dist/snplst-SOWVHSXH.js +36 -0
  291. package/dist/spliceevent.a53ss.diagram-IRLCCVQZ.js +142 -0
  292. package/dist/spliceevent.exonskip.diagram-4KG7LE5D.js +274 -0
  293. package/dist/spliceevent.noeventdiagram-OWXAJJX7.js +451 -0
  294. package/dist/ssGSEA-EMOKPLMP.js +29 -0
  295. package/dist/ssGSEA.unit.spec-KXQ7R5WH.js +79 -0
  296. package/dist/stattable-H2G7MOZG.js +112 -0
  297. package/dist/studyCatalog-3ITQXWFL.js +457 -0
  298. package/dist/summarizeCnvGeneexp-ZIPU6YDY.js +154 -0
  299. package/dist/summarizeGeneexpSurvival-3RYU226R.js +101 -0
  300. package/dist/summarizeMutationCnv-RGDBUB22.js +155 -0
  301. package/dist/summarizeMutationDiagnosis-Z4MZE6Y4.js +31 -0
  302. package/dist/summarizeMutationSurvival-Z5CNRH7E.js +95 -0
  303. package/dist/summary-6QQCNX3B.js +40 -0
  304. package/dist/summary.integration.spec-3ULXTZUP.js +405 -0
  305. package/dist/summaryInput-4QKR34QB.js +238 -0
  306. package/dist/sunburst-KB3BWC72.js +34 -0
  307. package/dist/sunburst-XTFBHZNH.js +274 -0
  308. package/dist/survival-7O6ZK63E.js +49 -0
  309. package/dist/survival-NNCY4K6C.js +1248 -0
  310. package/dist/survival.integration.spec-ZYZHZAXA.js +609 -0
  311. package/dist/svgraph-ZLSFFEAC.js +1377 -0
  312. package/dist/svmr-REBBDEYM.js +3834 -0
  313. package/dist/swimmer-NUBRIWLI.js +993 -0
  314. package/dist/swimmer-NUBRIWLI.js.map +7 -0
  315. package/dist/table-CWIQQESJ.js +192 -0
  316. package/dist/termCollection-7TYJSQ45.js +29 -0
  317. package/dist/termCollection-7Z55QNL7.js +247 -0
  318. package/dist/termCollection.unit.spec-LQ5MIBDH.js +295 -0
  319. package/dist/termCollectionFractionSelection-24DZYVDU.js +38 -0
  320. package/dist/termCollectionFractionSelection.unit.spec-DCV2CFS5.js +184 -0
  321. package/dist/tk-2WZFPRCP.js +37 -0
  322. package/dist/tk-QTLEYIP7.js +1193 -0
  323. package/dist/tk-QTLEYIP7.js.map +7 -0
  324. package/dist/tp.ui-HXQX2UH4.js +1453 -0
  325. package/dist/tvs.categorical-4D3JI2ER.js +28 -0
  326. package/dist/tvs.condition-62FXFHZ5.js +160 -0
  327. package/dist/tvs.density-IGO4I4T2.js +19 -0
  328. package/dist/tvs.dt-FZSVMJOO.js +34 -0
  329. package/dist/tvs.dtcnv.categorical-PPFQIC42.js +31 -0
  330. package/dist/tvs.dtcnv.continuous-TV2IGHY4.js +72 -0
  331. package/dist/tvs.dtfusion-ON4BA4XJ.js +31 -0
  332. package/dist/tvs.dtitd-VFNROOWQ.js +31 -0
  333. package/dist/tvs.dtsnvindel-ZXOP37T5.js +31 -0
  334. package/dist/tvs.dtsv-EUHPTW7J.js +31 -0
  335. package/dist/tvs.multivalue-NHVXZNDI.js +84 -0
  336. package/dist/tvs.numeric-FPWDPO3J.js +32 -0
  337. package/dist/tvs.samplelst-ZZHRNUP4.js +95 -0
  338. package/dist/tvs.survival-F3KSG3U6.js +110 -0
  339. package/dist/tvs.termCollection-B37DZLDY.js +118 -0
  340. package/dist/vocabulary-XNE5FFDK.js +32 -0
  341. package/dist/vocabulary-XNE5FFDK.js.map +7 -0
  342. package/dist/wsi.direct-3YH3QGQD.js +11514 -0
  343. package/package.json +4 -4
  344. package/dist/2dmaf-O2SQ5RGD.js +0 -1362
  345. package/dist/AggMatrixInput-LUCTWXHU.js +0 -402
  346. package/dist/AggregateMatrix-JVMF27YL.js +0 -37
  347. package/dist/AppHeader-DJU6HRKO.js +0 -826
  348. package/dist/BoxPlot-22RXMPRL.js +0 -1229
  349. package/dist/CorrelationVolcano-PBZWPFSN.js +0 -613
  350. package/dist/Cuminc-EL74X5GY.js +0 -1217
  351. package/dist/DE-W5SAMMRW.js +0 -85
  352. package/dist/DEinput-ZKEFJZQU.js +0 -479
  353. package/dist/DM-ABKDXMDG.js +0 -86
  354. package/dist/DifferentialAnalysis-3JTZ5WCQ.js +0 -236
  355. package/dist/Disco-ME53U25C.js +0 -3384
  356. package/dist/Disco.UI-F7XKJMKR.js +0 -239
  357. package/dist/DmrPlot-OWBXUTON.js +0 -361
  358. package/dist/GB-7X6DBWKS.js +0 -1388
  359. package/dist/GSEA-GAZIEGD7.js +0 -870
  360. package/dist/GeneExpInput-BAOC6ICV.js +0 -38
  361. package/dist/Geomap-OZERLL7V.js +0 -80
  362. package/dist/HicApp-WDH5LVTD.js +0 -2240
  363. package/dist/IDCViewer-XBZFU3BU.js +0 -10808
  364. package/dist/NumBinaryEditor-5R4EUQOZ.js +0 -274
  365. package/dist/NumBinaryEditor.unit.spec-ULBXMOYY.js +0 -308
  366. package/dist/NumContEditor-EN6V4FLQ.js +0 -100
  367. package/dist/NumContEditor.unit.spec-VDWKNIFN.js +0 -160
  368. package/dist/NumCustomBinEditor-UB34ALNZ.js +0 -29
  369. package/dist/NumCustomBinEditor.unit.spec-WZXJ7GEC.js +0 -393
  370. package/dist/NumDiscreteEditor-H6J67YEL.js +0 -165
  371. package/dist/NumDiscreteEditor.unit.spec-KJ7YU22W.js +0 -229
  372. package/dist/NumRegularBinEditor-R5JVUG7J.js +0 -29
  373. package/dist/NumRegularBinEditor.unit.spec-RZ73FMNO.js +0 -274
  374. package/dist/NumSplineEditor-AOR6OAJA.js +0 -205
  375. package/dist/NumSplineEditor.unit.spec-Z6ZEI3UO.js +0 -220
  376. package/dist/NumericDensity-SRTFTDQA.js +0 -29
  377. package/dist/NumericDensity.unit.spec-MRREBAYU.js +0 -414
  378. package/dist/NumericHandler-7RALUACA.js +0 -30
  379. package/dist/NumericHandler.unit.spec-MDO23WRB.js +0 -225
  380. package/dist/ProteomeInput-MOBXHRD5.js +0 -610
  381. package/dist/Regression-XWT4NNTG.js +0 -1412
  382. package/dist/RunChart2-Q7W5MWJS.js +0 -744
  383. package/dist/SC-MM3JTEVL.js +0 -1290
  384. package/dist/Violin-XNTBDUPG.js +0 -1092
  385. package/dist/Volcano-GRKXU3WL.js +0 -2619
  386. package/dist/Volcano-GRKXU3WL.js.map +0 -7
  387. package/dist/Wsi-22KJSFVH.js +0 -636
  388. package/dist/adSandbox-TLYWQOOA.js +0 -29
  389. package/dist/animatedBubbleChart-67SY5JGP.js +0 -542
  390. package/dist/app-FG3KPE4R.js +0 -28
  391. package/dist/app-VK5LYO6B.js +0 -38
  392. package/dist/bam-TNLNISLV.js +0 -872
  393. package/dist/bam-TNLNISLV.js.map +0 -7
  394. package/dist/barchart-IGWRVB6W.js +0 -38
  395. package/dist/barchart2-TT6OBJJP.js +0 -305
  396. package/dist/block-5PV2TYWJ.js +0 -6232
  397. package/dist/block-5PV2TYWJ.js.map +0 -7
  398. package/dist/block.init-2Y6CNK7H.js +0 -29
  399. package/dist/block.mds.expressionrank-VZ4JVPTG.js +0 -350
  400. package/dist/block.mds.geneboxplot-NYMS32JP.js +0 -819
  401. package/dist/block.mds.junction-3R6C3B5W.js +0 -1534
  402. package/dist/block.mds.svcnv-SO5CYYIQ.js +0 -6413
  403. package/dist/block.svg-R4ASXXNW.js +0 -155
  404. package/dist/block.tk.aicheck-LYRTDZRA.js +0 -274
  405. package/dist/block.tk.bam-GR7CHGGQ.js +0 -1897
  406. package/dist/block.tk.bam-GR7CHGGQ.js.map +0 -7
  407. package/dist/block.tk.bedgraphdot-GERXK2O6.js +0 -375
  408. package/dist/block.tk.bedgraphdot-GERXK2O6.js.map +0 -7
  409. package/dist/block.tk.bigwig.ui-3KMMZX2M.js +0 -202
  410. package/dist/block.tk.hicstraw-7HH4PGFY.js +0 -814
  411. package/dist/block.tk.junction-BPEKLYS2.js +0 -2353
  412. package/dist/block.tk.junction.textmatrixui-2QU5DL2X.js +0 -190
  413. package/dist/block.tk.ld-TJREYPNY.js +0 -90
  414. package/dist/block.tk.menu-HDBZK4YP.js +0 -1050
  415. package/dist/block.tk.pgv-G5GCYBK2.js +0 -934
  416. package/dist/brainImaging-ODWHF7WZ.js +0 -550
  417. package/dist/brainRegions-DC7DEA7N.js +0 -213
  418. package/dist/bubbleHeatmap-T5ACULRL.js +0 -374
  419. package/dist/cellTypeBubbleHeatmap-RQINXXTK.js +0 -274
  420. package/dist/chunk-24ZS2XWC.js +0 -176
  421. package/dist/chunk-2EPEWVKQ.js +0 -4378
  422. package/dist/chunk-2EPEWVKQ.js.map +0 -7
  423. package/dist/chunk-2PHFY3VP.js +0 -195
  424. package/dist/chunk-2QFMKWNS.js +0 -281
  425. package/dist/chunk-2UB6JZ3I.js +0 -466
  426. package/dist/chunk-3GQ54XTJ.js +0 -70
  427. package/dist/chunk-3IE6FDVA.js +0 -1253
  428. package/dist/chunk-4ENIOXIT.js +0 -133
  429. package/dist/chunk-4OOQ52ET.js +0 -182
  430. package/dist/chunk-5NI77Z3O.js +0 -119
  431. package/dist/chunk-5TPWMYBG.js +0 -274
  432. package/dist/chunk-64JHE3GV.js +0 -50
  433. package/dist/chunk-6MUJGVOH.js +0 -140
  434. package/dist/chunk-6XKAOSQE.js +0 -116
  435. package/dist/chunk-6XKAOSQE.js.map +0 -7
  436. package/dist/chunk-6YGSVJJD.js +0 -54
  437. package/dist/chunk-7PQVNQFR.js +0 -255
  438. package/dist/chunk-7XW4JWMJ.js +0 -170
  439. package/dist/chunk-7ZEJKFGW.js +0 -55
  440. package/dist/chunk-A6ZUYQHO.js +0 -159
  441. package/dist/chunk-ALIMVUHR.js +0 -1219
  442. package/dist/chunk-ANBGNYNP.js +0 -1339
  443. package/dist/chunk-ATZNXW5F.js +0 -237
  444. package/dist/chunk-AUPTEHV7.js +0 -257
  445. package/dist/chunk-B2KYLEYM.js +0 -30
  446. package/dist/chunk-BJCET6RU.js +0 -263
  447. package/dist/chunk-BKW35Z4U.js +0 -26619
  448. package/dist/chunk-BKW35Z4U.js.map +0 -7
  449. package/dist/chunk-CJHNPYFQ.js +0 -2292
  450. package/dist/chunk-CJHNPYFQ.js.map +0 -7
  451. package/dist/chunk-CTVPW77S.js +0 -194
  452. package/dist/chunk-D6U65W7Q.js +0 -626
  453. package/dist/chunk-DJMDETVU.js +0 -2685
  454. package/dist/chunk-DKPAOVJH.js +0 -243
  455. package/dist/chunk-DRESQF33.js +0 -38
  456. package/dist/chunk-DXM5MQCZ.js +0 -382
  457. package/dist/chunk-ETXOEP4N.js +0 -184
  458. package/dist/chunk-FOUMNTII.js +0 -134
  459. package/dist/chunk-FTGLS763.js +0 -56
  460. package/dist/chunk-GN2A5NL5.js +0 -472
  461. package/dist/chunk-GWNCQ5YI.js +0 -468
  462. package/dist/chunk-GX6G2SSW.js +0 -26
  463. package/dist/chunk-H3YF55ZI.js +0 -848
  464. package/dist/chunk-IANE75G3.js +0 -444
  465. package/dist/chunk-IKZQST6E.js +0 -5213
  466. package/dist/chunk-IPRYYK26.js +0 -96
  467. package/dist/chunk-JL3PYV5F.js +0 -6375
  468. package/dist/chunk-K6VYSDB5.js +0 -276
  469. package/dist/chunk-KSS26PXB.js +0 -54
  470. package/dist/chunk-LO2QBHP6.js +0 -418
  471. package/dist/chunk-LO2QBHP6.js.map +0 -7
  472. package/dist/chunk-LSRFRZNP.js +0 -59
  473. package/dist/chunk-LYX4S6WA.js +0 -266
  474. package/dist/chunk-ME3HB3V6.js +0 -5787
  475. package/dist/chunk-ME3HB3V6.js.map +0 -7
  476. package/dist/chunk-MP7BA3GK.js +0 -14
  477. package/dist/chunk-MVSUESEV.js +0 -141
  478. package/dist/chunk-NQMS7WV3.js +0 -2799
  479. package/dist/chunk-NR6WFCPF.js +0 -348
  480. package/dist/chunk-NS2MZN3C.js +0 -562
  481. package/dist/chunk-NUA66GW7.js +0 -37
  482. package/dist/chunk-NYEFSOKD.js +0 -550
  483. package/dist/chunk-OVHQFZAE.js +0 -34
  484. package/dist/chunk-OVHQFZAE.js.map +0 -7
  485. package/dist/chunk-QM724EG2.js +0 -103
  486. package/dist/chunk-RIL33JCW.js +0 -102
  487. package/dist/chunk-RJAJG5KN.js +0 -2954
  488. package/dist/chunk-RJAJG5KN.js.map +0 -7
  489. package/dist/chunk-SLHXR4BZ.js +0 -82
  490. package/dist/chunk-SO76DLSZ.js +0 -299
  491. package/dist/chunk-T7CKGRGP.js +0 -398
  492. package/dist/chunk-T7CKGRGP.js.map +0 -7
  493. package/dist/chunk-TUO5I6LP.js +0 -123
  494. package/dist/chunk-TWTPWEYL.js +0 -240
  495. package/dist/chunk-U2GHNZ4N.js +0 -54
  496. package/dist/chunk-UAB5PGOP.js +0 -56
  497. package/dist/chunk-UCB3W3OT.js +0 -217
  498. package/dist/chunk-UJIB7QM3.js +0 -2334
  499. package/dist/chunk-UYQGTW7I.js +0 -1857
  500. package/dist/chunk-UYQGTW7I.js.map +0 -7
  501. package/dist/chunk-VBDJG6GZ.js +0 -2008
  502. package/dist/chunk-VOXUMZMG.js +0 -379
  503. package/dist/chunk-WCNMP54T.js +0 -516
  504. package/dist/chunk-WETOH7YW.js +0 -692
  505. package/dist/chunk-WKGKKM6F.js +0 -480
  506. package/dist/chunk-WV44DGEJ.js +0 -397
  507. package/dist/chunk-XVEEMQAT.js +0 -31
  508. package/dist/chunk-YBOHXANC.js +0 -302
  509. package/dist/chunk-YNQFOPS6.js +0 -203
  510. package/dist/chunk-YVQ4USPP.js +0 -340
  511. package/dist/chunk-ZWLT5QS3.js +0 -102
  512. package/dist/chunk-ZYAZHJPZ.js +0 -296
  513. package/dist/cohort-QSLKB4ZO.js +0 -66
  514. package/dist/cohortSunburst-AQFSNJ5K.js +0 -402
  515. package/dist/condition-MLS6TJHV.js +0 -323
  516. package/dist/controls-ZT3GZ667.js +0 -30
  517. package/dist/controls.config-F7NIPLKB.js +0 -30
  518. package/dist/correlation-ZEIQJGSQ.js +0 -91
  519. package/dist/customdata.inputui-6PJSAJK2.js +0 -280
  520. package/dist/dataDownload-CHMPXHBY.js +0 -325
  521. package/dist/dataDownload-CHMPXHBY.js.map +0 -7
  522. package/dist/databrowser.ui-EMZ5L2Y7.js +0 -421
  523. package/dist/dictionary-U2BWGY6B.js +0 -109
  524. package/dist/dnaMethylation-R34E2XNC.js +0 -29
  525. package/dist/dnaMethylation.integration.spec-4Z2AJHWY.js +0 -194
  526. package/dist/dofetch-JY4A7BYI.js +0 -47
  527. package/dist/e2pca-WSSCXX6A.js +0 -340
  528. package/dist/ep-ATUWEHDJ.js +0 -1247
  529. package/dist/expclust.gdc.spec-QRIRRPO7.js +0 -298
  530. package/dist/facet-5VDCSP3S.js +0 -556
  531. package/dist/gb-Y4UG6LFA.js +0 -77
  532. package/dist/geneExpClustering-OO67JNJ2.js +0 -240
  533. package/dist/geneExpression-5KGV3MAA.js +0 -29
  534. package/dist/geneExpression-KPRFXKU7.js +0 -309
  535. package/dist/geneExpression.unit.spec-YV45EZ5O.js +0 -151
  536. package/dist/geneORA-R74JPUTC.js +0 -269
  537. package/dist/geneRanking-IJTXNMHV.js +0 -544
  538. package/dist/geneVariant-HBAHT6LU.js +0 -32
  539. package/dist/geneVariant-JT3EGAIH.js +0 -289
  540. package/dist/geneVariant.integration.spec-TFQYPUAS.js +0 -672
  541. package/dist/genefusion.ui-MMTQMTHC.js +0 -299
  542. package/dist/geneset-VMBICNCZ.js +0 -199
  543. package/dist/genomeBrowser.spec-2XLLIYGA.js +0 -272
  544. package/dist/grin2-2RYPEUWV.js +0 -66
  545. package/dist/grin2-Y6KAFVV2.js +0 -945
  546. package/dist/hierCluster-EKGFBQT4.js +0 -51
  547. package/dist/hierCluster-Z4PVNMGS.js +0 -55
  548. package/dist/hierCluster.config-Q6WUNK2K.js +0 -32
  549. package/dist/hierCluster.integration.spec-2LHSHNFC.js +0 -479
  550. package/dist/hierCluster.interactivity-OGQ3KUY6.js +0 -45
  551. package/dist/hierCluster.renderers-3GJZXG75.js +0 -18
  552. package/dist/imagePlot-ZJEZPBX7.js +0 -152
  553. package/dist/importPlot-GFEFYEHZ.js +0 -8
  554. package/dist/isoformExpression-A2X3DSR6.js +0 -31
  555. package/dist/isoformExpression.unit.spec-VKMEGCL4.js +0 -233
  556. package/dist/junction-HWIHLQU2.js +0 -32
  557. package/dist/junction.customTerm-C3VWXEYH.js +0 -15
  558. package/dist/junction.unit.spec-ZYJGDOXJ.js +0 -178
  559. package/dist/launch.adhoc-HW5AZM4T.js +0 -33
  560. package/dist/leftlabel.sample-MTW2HRRQ.js +0 -253
  561. package/dist/lollipop-VWW5H6CR.js +0 -162
  562. package/dist/maf-KEJYO3H4.js +0 -451
  563. package/dist/maftimeline-MJZDSGSR.js +0 -583
  564. package/dist/matrix-3UJW6LOA.js +0 -50
  565. package/dist/matrix-W4AX5OBM.js +0 -55
  566. package/dist/matrix.cells-5DAIZ3E5.js +0 -25
  567. package/dist/matrix.config-PK26VPQT.js +0 -33
  568. package/dist/matrix.data-UK5DGKBK.js +0 -22
  569. package/dist/matrix.groups-NM4Q5YDN.js +0 -25
  570. package/dist/matrix.integration.spec-FGWNBCRR.js +0 -3156
  571. package/dist/matrix.interactivity-4C37PII5.js +0 -33
  572. package/dist/matrix.layout-ODV7WXUP.js +0 -35
  573. package/dist/matrix.legend-5MY7OXWN.js +0 -19
  574. package/dist/matrix.renderers-QA7W7ZUL.js +0 -30
  575. package/dist/matrix.serieses-4FSFJPCK.js +0 -18
  576. package/dist/matrix.sort-3QLFMBJ5.js +0 -25
  577. package/dist/matrix.sort.unit.spec-HVOC6IYT.js +0 -464
  578. package/dist/matrix.sorterUi-EY3SA6CG.js +0 -15
  579. package/dist/matrix.sorterUi.unit.spec-OAXWPZZI.js +0 -334
  580. package/dist/matrix.unit.spec-RAL7AU22.js +0 -146
  581. package/dist/mavb-KIM63AC4.js +0 -726
  582. package/dist/mds.fimo-DMAVM56P.js +0 -509
  583. package/dist/mds.samplescatterplot-KILTR2C7.js +0 -1545
  584. package/dist/mds.survivalplot-PV76ANBP.js +0 -472
  585. package/dist/multivalue-2V5LMQY7.js +0 -79
  586. package/dist/numericDictTermCluster-TGL4X6UC.js +0 -62
  587. package/dist/oncomatrix-2O7SLXHX.js +0 -286
  588. package/dist/oncomatrix.spec-HZJKOF5G.js +0 -439
  589. package/dist/plot.2dvaf-424NNMMA.js +0 -368
  590. package/dist/plot.app-YBZDNST2.js +0 -32
  591. package/dist/plot.barplot-YZQBYJUY.js +0 -93
  592. package/dist/plot.boxplot-5OW6IBQL.js +0 -142
  593. package/dist/plot.brainImaging-H3ABPPD3.js +0 -51
  594. package/dist/plot.disco-X7KCDWGX.js +0 -98
  595. package/dist/plot.ssgq-GYRVHTC7.js +0 -130
  596. package/dist/plot.vaf2cov-B2TELPHL.js +0 -249
  597. package/dist/polar2-5KNZRLXY.js +0 -228
  598. package/dist/profileForms-FY34KXCL.js +0 -937
  599. package/dist/profilePlot-3FX2TPYC.js +0 -45
  600. package/dist/proteinView-WSEO3LD3.js +0 -1346
  601. package/dist/proteomeCohortCompare-KA2DF3EE.js +0 -866
  602. package/dist/pseudbulk.unit.spec-AT3TFCOW.js +0 -82
  603. package/dist/pseudobulk-4ZRHUC7W.js +0 -31
  604. package/dist/qualitative-3OBGJRP6.js +0 -241
  605. package/dist/qualitative-FHJD44OA.js +0 -34
  606. package/dist/radar2-X757WR6V.js +0 -323
  607. package/dist/radarFacility2-GUBAK4Y3.js +0 -331
  608. package/dist/rememberedGvQ.unit.spec-ADO4Y2OE.js +0 -210
  609. package/dist/render-MZEPNEMU.js +0 -29
  610. package/dist/report-TUAFDGAE.js +0 -213
  611. package/dist/sampleView-X6YKCBE7.js +0 -39
  612. package/dist/samplelst-UPNRALBH.js +0 -114
  613. package/dist/samplematrix-W3HZK3IS.js +0 -2188
  614. package/dist/sc-UL7233UR.js +0 -77
  615. package/dist/scatter-FTJ77NUM.js +0 -919
  616. package/dist/scatter-VQQRIW6N.js +0 -84
  617. package/dist/selectGenomeWithTklst-HPYPSPFI.js +0 -125
  618. package/dist/singleCellCellType-XTKGOH6H.js +0 -29
  619. package/dist/singleCellCellType.unit.spec-A62GT72A.js +0 -150
  620. package/dist/singleCellGeneExpression-X7H5GTU3.js +0 -29
  621. package/dist/singleCellGeneExpression.unit.spec-2KQBHG7O.js +0 -144
  622. package/dist/singleCellNumericValue-6YS42PZ2.js +0 -29
  623. package/dist/singleCellNumericValue.unit.spec-DNVXQFKI.js +0 -412
  624. package/dist/singleCellPlot-MGOQ7EQV.js +0 -44
  625. package/dist/singlecell-CIOB5XON.js +0 -77
  626. package/dist/singlecell-QW3SLQD6.js +0 -1562
  627. package/dist/snp-6B4MIPKL.js +0 -29
  628. package/dist/snp.unit.spec-HNILS56E.js +0 -167
  629. package/dist/snplocus-DDFLYZ2Y.js +0 -200
  630. package/dist/snplst-JYKOV73J.js +0 -36
  631. package/dist/spliceevent.a53ss.diagram-IBD5ITXR.js +0 -142
  632. package/dist/spliceevent.exonskip.diagram-ZJGEVUYW.js +0 -274
  633. package/dist/spliceevent.noeventdiagram-RNLNTFOW.js +0 -451
  634. package/dist/ssGSEA-42VQLAXL.js +0 -29
  635. package/dist/ssGSEA.unit.spec-FBJANIKG.js +0 -79
  636. package/dist/stattable-FROSNTJY.js +0 -112
  637. package/dist/studyCatalog-XIYNJ24U.js +0 -457
  638. package/dist/summarizeCnvGeneexp-N3OFI24L.js +0 -154
  639. package/dist/summarizeGeneexpSurvival-J4DO2AL4.js +0 -101
  640. package/dist/summarizeMutationCnv-Y43BBSI4.js +0 -155
  641. package/dist/summarizeMutationDiagnosis-JAEAUFCA.js +0 -31
  642. package/dist/summarizeMutationSurvival-4QZDDXDV.js +0 -95
  643. package/dist/summary-DTJZ7NNA.js +0 -40
  644. package/dist/summary.integration.spec-HRRE3J45.js +0 -405
  645. package/dist/summaryInput-WCADUZBK.js +0 -238
  646. package/dist/sunburst-BGXSCB63.js +0 -274
  647. package/dist/sunburst-DSFFFP33.js +0 -504
  648. package/dist/sunburst-DSFFFP33.js.map +0 -7
  649. package/dist/survival-LFXQIWRT.js +0 -49
  650. package/dist/survival-ONWZ5RFM.js +0 -1248
  651. package/dist/survival.integration.spec-ZP7XWHQH.js +0 -609
  652. package/dist/svgraph-2SL2SJVU.js +0 -1377
  653. package/dist/svmr-ONIPMLC2.js +0 -3834
  654. package/dist/swimmer-2EJZH5PP.js +0 -785
  655. package/dist/swimmer-2EJZH5PP.js.map +0 -7
  656. package/dist/table-LLCFO4KK.js +0 -192
  657. package/dist/termCollection-DAHJGR5P.js +0 -247
  658. package/dist/termCollection-QIN53TIL.js +0 -29
  659. package/dist/termCollection.unit.spec-FQOX2IVP.js +0 -295
  660. package/dist/termCollectionFractionSelection-UKEVVZXL.js +0 -38
  661. package/dist/termCollectionFractionSelection.unit.spec-URGEYBU2.js +0 -184
  662. package/dist/tk-4PYQ6WJQ.js +0 -1116
  663. package/dist/tk-4PYQ6WJQ.js.map +0 -7
  664. package/dist/tk-GM7CJ2LU.js +0 -37
  665. package/dist/tp.ui-TRUHW6GP.js +0 -1453
  666. package/dist/tvs.categorical-IY6YSFVN.js +0 -28
  667. package/dist/tvs.condition-YTD7GOPW.js +0 -160
  668. package/dist/tvs.density-CB24PXDE.js +0 -19
  669. package/dist/tvs.dt-AQQIZD5Z.js +0 -34
  670. package/dist/tvs.dtcnv.categorical-WOAOGJSW.js +0 -31
  671. package/dist/tvs.dtcnv.continuous-TJBEPJGO.js +0 -72
  672. package/dist/tvs.dtfusion-SFMZQKKU.js +0 -31
  673. package/dist/tvs.dtitd-Q5RQTCLD.js +0 -31
  674. package/dist/tvs.dtsnvindel-UEK4O6WI.js +0 -31
  675. package/dist/tvs.dtsv-ECS4KEYG.js +0 -31
  676. package/dist/tvs.multivalue-CJIZ3I54.js +0 -84
  677. package/dist/tvs.numeric-UFAOJR2B.js +0 -32
  678. package/dist/tvs.samplelst-BVFY2P7Q.js +0 -95
  679. package/dist/tvs.survival-L56B3I55.js +0 -110
  680. package/dist/tvs.termCollection-BFIBVBSA.js +0 -118
  681. package/dist/vocabulary-MTKDDDGB.js +0 -32
  682. package/dist/wsi.direct-OSHY7VL4.js +0 -11514
  683. /package/dist/{2dmaf-O2SQ5RGD.js.map → 2dmaf-7YU3SNKL.js.map} +0 -0
  684. /package/dist/{AggMatrixInput-LUCTWXHU.js.map → AggMatrixInput-73CDR5FS.js.map} +0 -0
  685. /package/dist/{AggregateMatrix-JVMF27YL.js.map → AggregateMatrix-NNULVFBM.js.map} +0 -0
  686. /package/dist/{AppHeader-DJU6HRKO.js.map → AppHeader-EZDDLLXU.js.map} +0 -0
  687. /package/dist/{BoxPlot-22RXMPRL.js.map → BoxPlot-463E7CRY.js.map} +0 -0
  688. /package/dist/{CorrelationVolcano-PBZWPFSN.js.map → CorrelationVolcano-LHIIMBPP.js.map} +0 -0
  689. /package/dist/{Cuminc-EL74X5GY.js.map → Cuminc-UL2TCIKV.js.map} +0 -0
  690. /package/dist/{DE-W5SAMMRW.js.map → DE-VRFSKFDW.js.map} +0 -0
  691. /package/dist/{DEinput-ZKEFJZQU.js.map → DEinput-FZTQRWVC.js.map} +0 -0
  692. /package/dist/{DM-ABKDXMDG.js.map → DM-PO7CQZNT.js.map} +0 -0
  693. /package/dist/{DifferentialAnalysis-3JTZ5WCQ.js.map → DifferentialAnalysis-WK6HE3YH.js.map} +0 -0
  694. /package/dist/{Disco-ME53U25C.js.map → Disco-YBNQJQFG.js.map} +0 -0
  695. /package/dist/{Disco.UI-F7XKJMKR.js.map → Disco.UI-HC5XYBFV.js.map} +0 -0
  696. /package/dist/{DmrPlot-OWBXUTON.js.map → DmrPlot-7VJ5C66D.js.map} +0 -0
  697. /package/dist/{GB-7X6DBWKS.js.map → GB-VPFQRDRO.js.map} +0 -0
  698. /package/dist/{GSEA-GAZIEGD7.js.map → GSEA-ZEJB3QZQ.js.map} +0 -0
  699. /package/dist/{GeneExpInput-BAOC6ICV.js.map → GeneExpInput-SBDDIY6G.js.map} +0 -0
  700. /package/dist/{Geomap-OZERLL7V.js.map → Geomap-23AHGP2V.js.map} +0 -0
  701. /package/dist/{HicApp-WDH5LVTD.js.map → HicApp-7AQQE4CM.js.map} +0 -0
  702. /package/dist/{IDCViewer-XBZFU3BU.js.map → IDCViewer-NO5Q6VOB.js.map} +0 -0
  703. /package/dist/{NumBinaryEditor-5R4EUQOZ.js.map → NumBinaryEditor-DSRP4OOU.js.map} +0 -0
  704. /package/dist/{NumBinaryEditor.unit.spec-ULBXMOYY.js.map → NumBinaryEditor.unit.spec-TT666YL4.js.map} +0 -0
  705. /package/dist/{NumContEditor-EN6V4FLQ.js.map → NumContEditor-6CURFOCH.js.map} +0 -0
  706. /package/dist/{NumContEditor.unit.spec-VDWKNIFN.js.map → NumContEditor.unit.spec-MNVCFCMP.js.map} +0 -0
  707. /package/dist/{NumCustomBinEditor-UB34ALNZ.js.map → NumCustomBinEditor-SQRR5EFL.js.map} +0 -0
  708. /package/dist/{NumCustomBinEditor.unit.spec-WZXJ7GEC.js.map → NumCustomBinEditor.unit.spec-F7BZWGGT.js.map} +0 -0
  709. /package/dist/{NumDiscreteEditor-H6J67YEL.js.map → NumDiscreteEditor-U7Z2QNYP.js.map} +0 -0
  710. /package/dist/{NumDiscreteEditor.unit.spec-KJ7YU22W.js.map → NumDiscreteEditor.unit.spec-EIEBUZCX.js.map} +0 -0
  711. /package/dist/{NumRegularBinEditor-R5JVUG7J.js.map → NumRegularBinEditor-CVZSWN6Y.js.map} +0 -0
  712. /package/dist/{NumRegularBinEditor.unit.spec-RZ73FMNO.js.map → NumRegularBinEditor.unit.spec-ZMAJOIHL.js.map} +0 -0
  713. /package/dist/{NumSplineEditor-AOR6OAJA.js.map → NumSplineEditor-U43D5NBJ.js.map} +0 -0
  714. /package/dist/{NumSplineEditor.unit.spec-Z6ZEI3UO.js.map → NumSplineEditor.unit.spec-C52AADTS.js.map} +0 -0
  715. /package/dist/{NumericDensity-SRTFTDQA.js.map → NumericDensity-PUKDZOVI.js.map} +0 -0
  716. /package/dist/{NumericDensity.unit.spec-MRREBAYU.js.map → NumericDensity.unit.spec-2347S76D.js.map} +0 -0
  717. /package/dist/{NumericHandler-7RALUACA.js.map → NumericHandler-3RT32PTR.js.map} +0 -0
  718. /package/dist/{NumericHandler.unit.spec-MDO23WRB.js.map → NumericHandler.unit.spec-4PADL4KZ.js.map} +0 -0
  719. /package/dist/{ProteomeInput-MOBXHRD5.js.map → ProteomeInput-NFV4FW4U.js.map} +0 -0
  720. /package/dist/{Regression-XWT4NNTG.js.map → Regression-N7M7N6G4.js.map} +0 -0
  721. /package/dist/{RunChart2-Q7W5MWJS.js.map → RunChart2-UPQ7C6QE.js.map} +0 -0
  722. /package/dist/{SC-MM3JTEVL.js.map → SC-KBW2NHUV.js.map} +0 -0
  723. /package/dist/{Violin-XNTBDUPG.js.map → Violin-GWCOP3ZF.js.map} +0 -0
  724. /package/dist/{Wsi-22KJSFVH.js.map → Wsi-NXAEOYIS.js.map} +0 -0
  725. /package/dist/{adSandbox-TLYWQOOA.js.map → adSandbox-RPEWEEW7.js.map} +0 -0
  726. /package/dist/{animatedBubbleChart-67SY5JGP.js.map → animatedBubbleChart-ILDMZRBX.js.map} +0 -0
  727. /package/dist/{app-FG3KPE4R.js.map → app-LOUC4J47.js.map} +0 -0
  728. /package/dist/{app-VK5LYO6B.js.map → app-MRKXZ6AZ.js.map} +0 -0
  729. /package/dist/{barchart-IGWRVB6W.js.map → barchart-CJR37234.js.map} +0 -0
  730. /package/dist/{barchart2-TT6OBJJP.js.map → barchart2-QQYLTHWR.js.map} +0 -0
  731. /package/dist/{block.init-2Y6CNK7H.js.map → block.init-YJQTJIDO.js.map} +0 -0
  732. /package/dist/{block.mds.expressionrank-VZ4JVPTG.js.map → block.mds.expressionrank-GBMEI5KQ.js.map} +0 -0
  733. /package/dist/{block.mds.geneboxplot-NYMS32JP.js.map → block.mds.geneboxplot-XWE3E5IW.js.map} +0 -0
  734. /package/dist/{block.mds.junction-3R6C3B5W.js.map → block.mds.junction-QLEHFVPE.js.map} +0 -0
  735. /package/dist/{block.mds.svcnv-SO5CYYIQ.js.map → block.mds.svcnv-53DTOPBC.js.map} +0 -0
  736. /package/dist/{block.svg-R4ASXXNW.js.map → block.svg-57T37ABS.js.map} +0 -0
  737. /package/dist/{block.tk.aicheck-LYRTDZRA.js.map → block.tk.aicheck-6DXJTS3H.js.map} +0 -0
  738. /package/dist/{block.tk.bigwig.ui-3KMMZX2M.js.map → block.tk.bigwig.ui-OYIVXE2L.js.map} +0 -0
  739. /package/dist/{block.tk.hicstraw-7HH4PGFY.js.map → block.tk.hicstraw-UKTGEBWT.js.map} +0 -0
  740. /package/dist/{block.tk.junction-BPEKLYS2.js.map → block.tk.junction-ZU5KPFQ3.js.map} +0 -0
  741. /package/dist/{block.tk.junction.textmatrixui-2QU5DL2X.js.map → block.tk.junction.textmatrixui-P4WXTAZR.js.map} +0 -0
  742. /package/dist/{block.tk.ld-TJREYPNY.js.map → block.tk.ld-3PQ4O2AE.js.map} +0 -0
  743. /package/dist/{block.tk.menu-HDBZK4YP.js.map → block.tk.menu-LLITB6UA.js.map} +0 -0
  744. /package/dist/{block.tk.pgv-G5GCYBK2.js.map → block.tk.pgv-Y3FBXUO3.js.map} +0 -0
  745. /package/dist/{brainImaging-ODWHF7WZ.js.map → brainImaging-4B3WXLNP.js.map} +0 -0
  746. /package/dist/{brainRegions-DC7DEA7N.js.map → brainRegions-7VLONUWN.js.map} +0 -0
  747. /package/dist/{bubbleHeatmap-T5ACULRL.js.map → bubbleHeatmap-DI6GJRR6.js.map} +0 -0
  748. /package/dist/{cellTypeBubbleHeatmap-RQINXXTK.js.map → cellTypeBubbleHeatmap-HJY53DB2.js.map} +0 -0
  749. /package/dist/{chunk-TWTPWEYL.js.map → chunk-226MNBZ2.js.map} +0 -0
  750. /package/dist/{chunk-AUPTEHV7.js.map → chunk-2CNFGVHU.js.map} +0 -0
  751. /package/dist/{chunk-DJMDETVU.js.map → chunk-2MC3RNKA.js.map} +0 -0
  752. /package/dist/{chunk-2PHFY3VP.js.map → chunk-2OMX5AYB.js.map} +0 -0
  753. /package/dist/{chunk-64JHE3GV.js.map → chunk-2SL4QWUS.js.map} +0 -0
  754. /package/dist/{chunk-WETOH7YW.js.map → chunk-3KGBC5MK.js.map} +0 -0
  755. /package/dist/{chunk-UAB5PGOP.js.map → chunk-3PCRAPUV.js.map} +0 -0
  756. /package/dist/{chunk-ZWLT5QS3.js.map → chunk-4DBOMSKP.js.map} +0 -0
  757. /package/dist/{chunk-2UB6JZ3I.js.map → chunk-57BS6KNI.js.map} +0 -0
  758. /package/dist/{chunk-UJIB7QM3.js.map → chunk-5AXS5G4A.js.map} +0 -0
  759. /package/dist/{chunk-NS2MZN3C.js.map → chunk-5DI4UNH5.js.map} +0 -0
  760. /package/dist/{chunk-ATZNXW5F.js.map → chunk-5HJG6ECV.js.map} +0 -0
  761. /package/dist/{chunk-NYEFSOKD.js.map → chunk-5ZYANHGX.js.map} +0 -0
  762. /package/dist/{chunk-WV44DGEJ.js.map → chunk-6T4MN7LV.js.map} +0 -0
  763. /package/dist/{chunk-QM724EG2.js.map → chunk-75MRUW2K.js.map} +0 -0
  764. /package/dist/{chunk-7PQVNQFR.js.map → chunk-7J3W3KCN.js.map} +0 -0
  765. /package/dist/{chunk-4OOQ52ET.js.map → chunk-AIZYAKIE.js.map} +0 -0
  766. /package/dist/{chunk-VBDJG6GZ.js.map → chunk-AJNFI6GA.js.map} +0 -0
  767. /package/dist/{chunk-NQMS7WV3.js.map → chunk-BJAWDZBL.js.map} +0 -0
  768. /package/dist/{chunk-VOXUMZMG.js.map → chunk-C6PVZVIH.js.map} +0 -0
  769. /package/dist/{chunk-24ZS2XWC.js.map → chunk-C77X5ZUV.js.map} +0 -0
  770. /package/dist/{chunk-LSRFRZNP.js.map → chunk-C7KUMZQM.js.map} +0 -0
  771. /package/dist/{chunk-6MUJGVOH.js.map → chunk-C7ROKWV2.js.map} +0 -0
  772. /package/dist/{chunk-XVEEMQAT.js.map → chunk-CAH6LJ5Z.js.map} +0 -0
  773. /package/dist/{chunk-RIL33JCW.js.map → chunk-CUCP2GMT.js.map} +0 -0
  774. /package/dist/{chunk-FOUMNTII.js.map → chunk-DTGAMBRJ.js.map} +0 -0
  775. /package/dist/{chunk-7ZEJKFGW.js.map → chunk-DXT7GDHY.js.map} +0 -0
  776. /package/dist/{chunk-IKZQST6E.js.map → chunk-ENPMWVWG.js.map} +0 -0
  777. /package/dist/{chunk-DXM5MQCZ.js.map → chunk-EYKJQJ7R.js.map} +0 -0
  778. /package/dist/{chunk-B2KYLEYM.js.map → chunk-FE5TCBIT.js.map} +0 -0
  779. /package/dist/{chunk-UCB3W3OT.js.map → chunk-FJ2JV2VK.js.map} +0 -0
  780. /package/dist/{chunk-DRESQF33.js.map → chunk-FZYVPRVQ.js.map} +0 -0
  781. /package/dist/{chunk-5TPWMYBG.js.map → chunk-GBKQHVKJ.js.map} +0 -0
  782. /package/dist/{chunk-2QFMKWNS.js.map → chunk-GUW7VTUL.js.map} +0 -0
  783. /package/dist/{chunk-3GQ54XTJ.js.map → chunk-H7F6DMJA.js.map} +0 -0
  784. /package/dist/{chunk-IPRYYK26.js.map → chunk-HH3NUAR2.js.map} +0 -0
  785. /package/dist/{chunk-A6ZUYQHO.js.map → chunk-HRTPGNOG.js.map} +0 -0
  786. /package/dist/{chunk-H3YF55ZI.js.map → chunk-IFPRYTS7.js.map} +0 -0
  787. /package/dist/{chunk-YBOHXANC.js.map → chunk-IJSFSUI4.js.map} +0 -0
  788. /package/dist/{chunk-BJCET6RU.js.map → chunk-IRQKX6DL.js.map} +0 -0
  789. /package/dist/{chunk-GN2A5NL5.js.map → chunk-JHLF2ZC2.js.map} +0 -0
  790. /package/dist/{chunk-ALIMVUHR.js.map → chunk-JNZL7HKB.js.map} +0 -0
  791. /package/dist/{chunk-GX6G2SSW.js.map → chunk-K2ARLT2A.js.map} +0 -0
  792. /package/dist/{chunk-SO76DLSZ.js.map → chunk-K3G56J5R.js.map} +0 -0
  793. /package/dist/{chunk-WCNMP54T.js.map → chunk-KKUCG2QE.js.map} +0 -0
  794. /package/dist/{chunk-D6U65W7Q.js.map → chunk-KPXCXBNU.js.map} +0 -0
  795. /package/dist/{chunk-6YGSVJJD.js.map → chunk-MANAUI7R.js.map} +0 -0
  796. /package/dist/{chunk-7XW4JWMJ.js.map → chunk-MEUSRAOE.js.map} +0 -0
  797. /package/dist/{chunk-NR6WFCPF.js.map → chunk-MHWYRNGA.js.map} +0 -0
  798. /package/dist/{chunk-MP7BA3GK.js.map → chunk-MSTYU3QO.js.map} +0 -0
  799. /package/dist/{chunk-MVSUESEV.js.map → chunk-MWARRQT4.js.map} +0 -0
  800. /package/dist/{chunk-YNQFOPS6.js.map → chunk-MXKYPTZ7.js.map} +0 -0
  801. /package/dist/{chunk-NUA66GW7.js.map → chunk-NX5IB4IY.js.map} +0 -0
  802. /package/dist/{chunk-4ENIOXIT.js.map → chunk-OZUF7O2S.js.map} +0 -0
  803. /package/dist/{chunk-SLHXR4BZ.js.map → chunk-QNCE6EOK.js.map} +0 -0
  804. /package/dist/{chunk-5NI77Z3O.js.map → chunk-RIHO7ZD5.js.map} +0 -0
  805. /package/dist/{chunk-LYX4S6WA.js.map → chunk-RV335DF2.js.map} +0 -0
  806. /package/dist/{chunk-3IE6FDVA.js.map → chunk-THAUD62Q.js.map} +0 -0
  807. /package/dist/{chunk-JL3PYV5F.js.map → chunk-VBTBUXXX.js.map} +0 -0
  808. /package/dist/{chunk-FTGLS763.js.map → chunk-VHWJK2MP.js.map} +0 -0
  809. /package/dist/{chunk-K6VYSDB5.js.map → chunk-VLIOMJDR.js.map} +0 -0
  810. /package/dist/{chunk-U2GHNZ4N.js.map → chunk-VMK4RHV5.js.map} +0 -0
  811. /package/dist/{chunk-GWNCQ5YI.js.map → chunk-WKT7RF3C.js.map} +0 -0
  812. /package/dist/{chunk-ETXOEP4N.js.map → chunk-WXSMUSU7.js.map} +0 -0
  813. /package/dist/{chunk-ZYAZHJPZ.js.map → chunk-WXSX5OQJ.js.map} +0 -0
  814. /package/dist/{chunk-CTVPW77S.js.map → chunk-WY3IORKG.js.map} +0 -0
  815. /package/dist/{chunk-WKGKKM6F.js.map → chunk-WYSOOKFJ.js.map} +0 -0
  816. /package/dist/{chunk-TUO5I6LP.js.map → chunk-XBBFFOLS.js.map} +0 -0
  817. /package/dist/{chunk-YVQ4USPP.js.map → chunk-XSRQGX5H.js.map} +0 -0
  818. /package/dist/{chunk-KSS26PXB.js.map → chunk-YLL6CTBL.js.map} +0 -0
  819. /package/dist/{chunk-ANBGNYNP.js.map → chunk-YPBY37KD.js.map} +0 -0
  820. /package/dist/{chunk-DKPAOVJH.js.map → chunk-YUNJBIK4.js.map} +0 -0
  821. /package/dist/{chunk-IANE75G3.js.map → chunk-Z5ECCUNG.js.map} +0 -0
  822. /package/dist/{cohort-QSLKB4ZO.js.map → cohort-5WL6UJOS.js.map} +0 -0
  823. /package/dist/{cohortSunburst-AQFSNJ5K.js.map → cohortSunburst-R3Z5KJQL.js.map} +0 -0
  824. /package/dist/{condition-MLS6TJHV.js.map → condition-2IILUMVB.js.map} +0 -0
  825. /package/dist/{controls-ZT3GZ667.js.map → controls-G3JITZF5.js.map} +0 -0
  826. /package/dist/{controls.config-F7NIPLKB.js.map → controls.config-BO7KPPET.js.map} +0 -0
  827. /package/dist/{correlation-ZEIQJGSQ.js.map → correlation-CZILLVEM.js.map} +0 -0
  828. /package/dist/{customdata.inputui-6PJSAJK2.js.map → customdata.inputui-BXFQAMTR.js.map} +0 -0
  829. /package/dist/{databrowser.ui-EMZ5L2Y7.js.map → databrowser.ui-V2NJQF3U.js.map} +0 -0
  830. /package/dist/{dictionary-U2BWGY6B.js.map → dictionary-OVAQX6R3.js.map} +0 -0
  831. /package/dist/{dnaMethylation-R34E2XNC.js.map → dnaMethylation-DHPFRXB2.js.map} +0 -0
  832. /package/dist/{dnaMethylation.integration.spec-4Z2AJHWY.js.map → dnaMethylation.integration.spec-PJLIRGN5.js.map} +0 -0
  833. /package/dist/{dofetch-JY4A7BYI.js.map → dofetch-KBTN6OW4.js.map} +0 -0
  834. /package/dist/{e2pca-WSSCXX6A.js.map → e2pca-O7SNMJGB.js.map} +0 -0
  835. /package/dist/{ep-ATUWEHDJ.js.map → ep-NIVLKG4S.js.map} +0 -0
  836. /package/dist/{expclust.gdc.spec-QRIRRPO7.js.map → expclust.gdc.spec-LVCD6C43.js.map} +0 -0
  837. /package/dist/{facet-5VDCSP3S.js.map → facet-LB4SCXE4.js.map} +0 -0
  838. /package/dist/{gb-Y4UG6LFA.js.map → gb-3IJ4NCPO.js.map} +0 -0
  839. /package/dist/{geneExpClustering-OO67JNJ2.js.map → geneExpClustering-SIAC7CMA.js.map} +0 -0
  840. /package/dist/{geneExpression-KPRFXKU7.js.map → geneExpression-KPUOZ4PT.js.map} +0 -0
  841. /package/dist/{geneExpression-5KGV3MAA.js.map → geneExpression-P2TTZXN2.js.map} +0 -0
  842. /package/dist/{geneExpression.unit.spec-YV45EZ5O.js.map → geneExpression.unit.spec-Q5D6XHUF.js.map} +0 -0
  843. /package/dist/{geneORA-R74JPUTC.js.map → geneORA-PKUIJKTL.js.map} +0 -0
  844. /package/dist/{geneRanking-IJTXNMHV.js.map → geneRanking-ZGT5MHBV.js.map} +0 -0
  845. /package/dist/{geneVariant-JT3EGAIH.js.map → geneVariant-24YNANTT.js.map} +0 -0
  846. /package/dist/{geneVariant-HBAHT6LU.js.map → geneVariant-CDGENHWQ.js.map} +0 -0
  847. /package/dist/{geneVariant.integration.spec-TFQYPUAS.js.map → geneVariant.integration.spec-7QW4C2WO.js.map} +0 -0
  848. /package/dist/{genefusion.ui-MMTQMTHC.js.map → genefusion.ui-NVXGSBXD.js.map} +0 -0
  849. /package/dist/{geneset-VMBICNCZ.js.map → geneset-7STL6UDD.js.map} +0 -0
  850. /package/dist/{genomeBrowser.spec-2XLLIYGA.js.map → genomeBrowser.spec-OE2CIP7I.js.map} +0 -0
  851. /package/dist/{grin2-2RYPEUWV.js.map → grin2-2HXUIY5O.js.map} +0 -0
  852. /package/dist/{grin2-Y6KAFVV2.js.map → grin2-32IIJR5E.js.map} +0 -0
  853. /package/dist/{hierCluster-EKGFBQT4.js.map → hierCluster-MDZEI2KB.js.map} +0 -0
  854. /package/dist/{hierCluster-Z4PVNMGS.js.map → hierCluster-T3PZUGBI.js.map} +0 -0
  855. /package/dist/{hierCluster.config-Q6WUNK2K.js.map → hierCluster.config-7UN6AYGB.js.map} +0 -0
  856. /package/dist/{hierCluster.integration.spec-2LHSHNFC.js.map → hierCluster.integration.spec-DWOYVK6T.js.map} +0 -0
  857. /package/dist/{hierCluster.interactivity-OGQ3KUY6.js.map → hierCluster.interactivity-5OM6XNFG.js.map} +0 -0
  858. /package/dist/{hierCluster.renderers-3GJZXG75.js.map → hierCluster.renderers-YGX6MZZW.js.map} +0 -0
  859. /package/dist/{imagePlot-ZJEZPBX7.js.map → imagePlot-KBRXDV5G.js.map} +0 -0
  860. /package/dist/{importPlot-GFEFYEHZ.js.map → importPlot-DJMIC22L.js.map} +0 -0
  861. /package/dist/{isoformExpression-A2X3DSR6.js.map → isoformExpression-SWDWADRC.js.map} +0 -0
  862. /package/dist/{isoformExpression.unit.spec-VKMEGCL4.js.map → isoformExpression.unit.spec-2U5KCYBP.js.map} +0 -0
  863. /package/dist/{junction-HWIHLQU2.js.map → junction-NMXVVGRG.js.map} +0 -0
  864. /package/dist/{junction.customTerm-C3VWXEYH.js.map → junction.customTerm-3R2GNE3A.js.map} +0 -0
  865. /package/dist/{junction.unit.spec-ZYJGDOXJ.js.map → junction.unit.spec-JTGBPPN7.js.map} +0 -0
  866. /package/dist/{launch.adhoc-HW5AZM4T.js.map → launch.adhoc-YB5SKMNY.js.map} +0 -0
  867. /package/dist/{leftlabel.sample-MTW2HRRQ.js.map → leftlabel.sample-QKXIODCS.js.map} +0 -0
  868. /package/dist/{lollipop-VWW5H6CR.js.map → lollipop-TSZ62PBH.js.map} +0 -0
  869. /package/dist/{maf-KEJYO3H4.js.map → maf-4L5YN4CG.js.map} +0 -0
  870. /package/dist/{maftimeline-MJZDSGSR.js.map → maftimeline-VOYB3NY3.js.map} +0 -0
  871. /package/dist/{matrix-3UJW6LOA.js.map → matrix-IWJECVTF.js.map} +0 -0
  872. /package/dist/{matrix-W4AX5OBM.js.map → matrix-MMJAJZA7.js.map} +0 -0
  873. /package/dist/{matrix.cells-5DAIZ3E5.js.map → matrix.cells-5RTZUJVN.js.map} +0 -0
  874. /package/dist/{matrix.config-PK26VPQT.js.map → matrix.config-DZGOZWJS.js.map} +0 -0
  875. /package/dist/{matrix.data-UK5DGKBK.js.map → matrix.data-Y5TPRGMW.js.map} +0 -0
  876. /package/dist/{matrix.groups-NM4Q5YDN.js.map → matrix.groups-6DXCAY4P.js.map} +0 -0
  877. /package/dist/{matrix.integration.spec-FGWNBCRR.js.map → matrix.integration.spec-2N237E7T.js.map} +0 -0
  878. /package/dist/{matrix.interactivity-4C37PII5.js.map → matrix.interactivity-FL33UUKR.js.map} +0 -0
  879. /package/dist/{matrix.layout-ODV7WXUP.js.map → matrix.layout-7SYHV3KJ.js.map} +0 -0
  880. /package/dist/{matrix.legend-5MY7OXWN.js.map → matrix.legend-S3E76TVO.js.map} +0 -0
  881. /package/dist/{matrix.renderers-QA7W7ZUL.js.map → matrix.renderers-3SIBT2RP.js.map} +0 -0
  882. /package/dist/{matrix.serieses-4FSFJPCK.js.map → matrix.serieses-3UGLZW25.js.map} +0 -0
  883. /package/dist/{matrix.sort-3QLFMBJ5.js.map → matrix.sort-A7CNLDUJ.js.map} +0 -0
  884. /package/dist/{matrix.sort.unit.spec-HVOC6IYT.js.map → matrix.sort.unit.spec-L3H44T6I.js.map} +0 -0
  885. /package/dist/{matrix.sorterUi-EY3SA6CG.js.map → matrix.sorterUi-6PZR3YOD.js.map} +0 -0
  886. /package/dist/{matrix.sorterUi.unit.spec-OAXWPZZI.js.map → matrix.sorterUi.unit.spec-2NRU5UFH.js.map} +0 -0
  887. /package/dist/{matrix.unit.spec-RAL7AU22.js.map → matrix.unit.spec-HRZIJB6T.js.map} +0 -0
  888. /package/dist/{mavb-KIM63AC4.js.map → mavb-ZVRQSDPS.js.map} +0 -0
  889. /package/dist/{mds.fimo-DMAVM56P.js.map → mds.fimo-ZKETTET7.js.map} +0 -0
  890. /package/dist/{mds.samplescatterplot-KILTR2C7.js.map → mds.samplescatterplot-ZV3UNRLP.js.map} +0 -0
  891. /package/dist/{mds.survivalplot-PV76ANBP.js.map → mds.survivalplot-OVXZRTU4.js.map} +0 -0
  892. /package/dist/{multivalue-2V5LMQY7.js.map → multivalue-6BE5IA4F.js.map} +0 -0
  893. /package/dist/{numericDictTermCluster-TGL4X6UC.js.map → numericDictTermCluster-6XDVVWLE.js.map} +0 -0
  894. /package/dist/{oncomatrix-2O7SLXHX.js.map → oncomatrix-XK62NEOO.js.map} +0 -0
  895. /package/dist/{oncomatrix.spec-HZJKOF5G.js.map → oncomatrix.spec-YVTCHOPS.js.map} +0 -0
  896. /package/dist/{plot.2dvaf-424NNMMA.js.map → plot.2dvaf-NUOBWMNX.js.map} +0 -0
  897. /package/dist/{plot.app-YBZDNST2.js.map → plot.app-G6IQWXTV.js.map} +0 -0
  898. /package/dist/{plot.barplot-YZQBYJUY.js.map → plot.barplot-6QJ6HEJR.js.map} +0 -0
  899. /package/dist/{plot.boxplot-5OW6IBQL.js.map → plot.boxplot-XKQJSW2O.js.map} +0 -0
  900. /package/dist/{plot.brainImaging-H3ABPPD3.js.map → plot.brainImaging-UTHFJFXU.js.map} +0 -0
  901. /package/dist/{plot.disco-X7KCDWGX.js.map → plot.disco-3MSCX7TM.js.map} +0 -0
  902. /package/dist/{plot.ssgq-GYRVHTC7.js.map → plot.ssgq-4KBVHF42.js.map} +0 -0
  903. /package/dist/{plot.vaf2cov-B2TELPHL.js.map → plot.vaf2cov-OGUQSSDS.js.map} +0 -0
  904. /package/dist/{polar2-5KNZRLXY.js.map → polar2-V7M56GTZ.js.map} +0 -0
  905. /package/dist/{profileForms-FY34KXCL.js.map → profileForms-TS3BJLHH.js.map} +0 -0
  906. /package/dist/{profilePlot-3FX2TPYC.js.map → profilePlot-DP5272HR.js.map} +0 -0
  907. /package/dist/{proteinView-WSEO3LD3.js.map → proteinView-K4K4SP3L.js.map} +0 -0
  908. /package/dist/{proteomeCohortCompare-KA2DF3EE.js.map → proteomeCohortCompare-SFWVGLFK.js.map} +0 -0
  909. /package/dist/{pseudbulk.unit.spec-AT3TFCOW.js.map → pseudbulk.unit.spec-NFOA7J2C.js.map} +0 -0
  910. /package/dist/{pseudobulk-4ZRHUC7W.js.map → pseudobulk-XKZQEZ4I.js.map} +0 -0
  911. /package/dist/{qualitative-3OBGJRP6.js.map → qualitative-7OSFNVI5.js.map} +0 -0
  912. /package/dist/{qualitative-FHJD44OA.js.map → qualitative-OIIN6E4Y.js.map} +0 -0
  913. /package/dist/{radar2-X757WR6V.js.map → radar2-AHZJKX7S.js.map} +0 -0
  914. /package/dist/{radarFacility2-GUBAK4Y3.js.map → radarFacility2-OUW6D5E7.js.map} +0 -0
  915. /package/dist/{rememberedGvQ.unit.spec-ADO4Y2OE.js.map → rememberedGvQ.unit.spec-SHTMMZGG.js.map} +0 -0
  916. /package/dist/{render-MZEPNEMU.js.map → render-7UZSGX3Q.js.map} +0 -0
  917. /package/dist/{report-TUAFDGAE.js.map → report-J7HKTXZ2.js.map} +0 -0
  918. /package/dist/{sampleView-X6YKCBE7.js.map → sampleView-6547OUIM.js.map} +0 -0
  919. /package/dist/{samplelst-UPNRALBH.js.map → samplelst-UHF23UEB.js.map} +0 -0
  920. /package/dist/{samplematrix-W3HZK3IS.js.map → samplematrix-OOKS3TMR.js.map} +0 -0
  921. /package/dist/{sc-UL7233UR.js.map → sc-WF2BLGNG.js.map} +0 -0
  922. /package/dist/{scatter-VQQRIW6N.js.map → scatter-ABCVFGRV.js.map} +0 -0
  923. /package/dist/{scatter-FTJ77NUM.js.map → scatter-WF7XM3IA.js.map} +0 -0
  924. /package/dist/{selectGenomeWithTklst-HPYPSPFI.js.map → selectGenomeWithTklst-67HU5KRB.js.map} +0 -0
  925. /package/dist/{singleCellCellType-XTKGOH6H.js.map → singleCellCellType-3FZPJ25V.js.map} +0 -0
  926. /package/dist/{singleCellCellType.unit.spec-A62GT72A.js.map → singleCellCellType.unit.spec-TOMREHWK.js.map} +0 -0
  927. /package/dist/{singleCellGeneExpression-X7H5GTU3.js.map → singleCellGeneExpression-NQTJ5KJQ.js.map} +0 -0
  928. /package/dist/{singleCellGeneExpression.unit.spec-2KQBHG7O.js.map → singleCellGeneExpression.unit.spec-ZWUQTU2N.js.map} +0 -0
  929. /package/dist/{singleCellNumericValue-6YS42PZ2.js.map → singleCellNumericValue-VI7H722L.js.map} +0 -0
  930. /package/dist/{singleCellNumericValue.unit.spec-DNVXQFKI.js.map → singleCellNumericValue.unit.spec-QGLHES7H.js.map} +0 -0
  931. /package/dist/{singleCellPlot-MGOQ7EQV.js.map → singleCellPlot-RU5T6SJK.js.map} +0 -0
  932. /package/dist/{singlecell-QW3SLQD6.js.map → singlecell-C3CJVNXP.js.map} +0 -0
  933. /package/dist/{singlecell-CIOB5XON.js.map → singlecell-NRQZ7KC6.js.map} +0 -0
  934. /package/dist/{snp-6B4MIPKL.js.map → snp-X6XY65VS.js.map} +0 -0
  935. /package/dist/{snp.unit.spec-HNILS56E.js.map → snp.unit.spec-6EENK7GQ.js.map} +0 -0
  936. /package/dist/{snplocus-DDFLYZ2Y.js.map → snplocus-R4JA6TFT.js.map} +0 -0
  937. /package/dist/{snplst-JYKOV73J.js.map → snplst-SOWVHSXH.js.map} +0 -0
  938. /package/dist/{spliceevent.a53ss.diagram-IBD5ITXR.js.map → spliceevent.a53ss.diagram-IRLCCVQZ.js.map} +0 -0
  939. /package/dist/{spliceevent.exonskip.diagram-ZJGEVUYW.js.map → spliceevent.exonskip.diagram-4KG7LE5D.js.map} +0 -0
  940. /package/dist/{spliceevent.noeventdiagram-RNLNTFOW.js.map → spliceevent.noeventdiagram-OWXAJJX7.js.map} +0 -0
  941. /package/dist/{ssGSEA-42VQLAXL.js.map → ssGSEA-EMOKPLMP.js.map} +0 -0
  942. /package/dist/{ssGSEA.unit.spec-FBJANIKG.js.map → ssGSEA.unit.spec-KXQ7R5WH.js.map} +0 -0
  943. /package/dist/{stattable-FROSNTJY.js.map → stattable-H2G7MOZG.js.map} +0 -0
  944. /package/dist/{studyCatalog-XIYNJ24U.js.map → studyCatalog-3ITQXWFL.js.map} +0 -0
  945. /package/dist/{summarizeCnvGeneexp-N3OFI24L.js.map → summarizeCnvGeneexp-ZIPU6YDY.js.map} +0 -0
  946. /package/dist/{summarizeGeneexpSurvival-J4DO2AL4.js.map → summarizeGeneexpSurvival-3RYU226R.js.map} +0 -0
  947. /package/dist/{summarizeMutationCnv-Y43BBSI4.js.map → summarizeMutationCnv-RGDBUB22.js.map} +0 -0
  948. /package/dist/{summarizeMutationDiagnosis-JAEAUFCA.js.map → summarizeMutationDiagnosis-Z4MZE6Y4.js.map} +0 -0
  949. /package/dist/{summarizeMutationSurvival-4QZDDXDV.js.map → summarizeMutationSurvival-Z5CNRH7E.js.map} +0 -0
  950. /package/dist/{summary-DTJZ7NNA.js.map → summary-6QQCNX3B.js.map} +0 -0
  951. /package/dist/{summary.integration.spec-HRRE3J45.js.map → summary.integration.spec-3ULXTZUP.js.map} +0 -0
  952. /package/dist/{summaryInput-WCADUZBK.js.map → summaryInput-4QKR34QB.js.map} +0 -0
  953. /package/dist/{termCollection-QIN53TIL.js.map → sunburst-KB3BWC72.js.map} +0 -0
  954. /package/dist/{sunburst-BGXSCB63.js.map → sunburst-XTFBHZNH.js.map} +0 -0
  955. /package/dist/{survival-LFXQIWRT.js.map → survival-7O6ZK63E.js.map} +0 -0
  956. /package/dist/{survival-ONWZ5RFM.js.map → survival-NNCY4K6C.js.map} +0 -0
  957. /package/dist/{survival.integration.spec-ZP7XWHQH.js.map → survival.integration.spec-ZYZHZAXA.js.map} +0 -0
  958. /package/dist/{svgraph-2SL2SJVU.js.map → svgraph-ZLSFFEAC.js.map} +0 -0
  959. /package/dist/{svmr-ONIPMLC2.js.map → svmr-REBBDEYM.js.map} +0 -0
  960. /package/dist/{table-LLCFO4KK.js.map → table-CWIQQESJ.js.map} +0 -0
  961. /package/dist/{termCollectionFractionSelection-UKEVVZXL.js.map → termCollection-7TYJSQ45.js.map} +0 -0
  962. /package/dist/{termCollection-DAHJGR5P.js.map → termCollection-7Z55QNL7.js.map} +0 -0
  963. /package/dist/{termCollection.unit.spec-FQOX2IVP.js.map → termCollection.unit.spec-LQ5MIBDH.js.map} +0 -0
  964. /package/dist/{tk-GM7CJ2LU.js.map → termCollectionFractionSelection-24DZYVDU.js.map} +0 -0
  965. /package/dist/{termCollectionFractionSelection.unit.spec-URGEYBU2.js.map → termCollectionFractionSelection.unit.spec-DCV2CFS5.js.map} +0 -0
  966. /package/dist/{tvs.categorical-IY6YSFVN.js.map → tk-2WZFPRCP.js.map} +0 -0
  967. /package/dist/{tp.ui-TRUHW6GP.js.map → tp.ui-HXQX2UH4.js.map} +0 -0
  968. /package/dist/{tvs.density-CB24PXDE.js.map → tvs.categorical-4D3JI2ER.js.map} +0 -0
  969. /package/dist/{tvs.condition-YTD7GOPW.js.map → tvs.condition-62FXFHZ5.js.map} +0 -0
  970. /package/dist/{tvs.dt-AQQIZD5Z.js.map → tvs.density-IGO4I4T2.js.map} +0 -0
  971. /package/dist/{tvs.numeric-UFAOJR2B.js.map → tvs.dt-FZSVMJOO.js.map} +0 -0
  972. /package/dist/{tvs.dtcnv.categorical-WOAOGJSW.js.map → tvs.dtcnv.categorical-PPFQIC42.js.map} +0 -0
  973. /package/dist/{tvs.dtcnv.continuous-TJBEPJGO.js.map → tvs.dtcnv.continuous-TV2IGHY4.js.map} +0 -0
  974. /package/dist/{tvs.dtfusion-SFMZQKKU.js.map → tvs.dtfusion-ON4BA4XJ.js.map} +0 -0
  975. /package/dist/{tvs.dtitd-Q5RQTCLD.js.map → tvs.dtitd-VFNROOWQ.js.map} +0 -0
  976. /package/dist/{tvs.dtsnvindel-UEK4O6WI.js.map → tvs.dtsnvindel-ZXOP37T5.js.map} +0 -0
  977. /package/dist/{tvs.dtsv-ECS4KEYG.js.map → tvs.dtsv-EUHPTW7J.js.map} +0 -0
  978. /package/dist/{tvs.multivalue-CJIZ3I54.js.map → tvs.multivalue-NHVXZNDI.js.map} +0 -0
  979. /package/dist/{vocabulary-MTKDDDGB.js.map → tvs.numeric-FPWDPO3J.js.map} +0 -0
  980. /package/dist/{tvs.samplelst-BVFY2P7Q.js.map → tvs.samplelst-ZZHRNUP4.js.map} +0 -0
  981. /package/dist/{tvs.survival-L56B3I55.js.map → tvs.survival-F3KSG3U6.js.map} +0 -0
  982. /package/dist/{tvs.termCollection-BFIBVBSA.js.map → tvs.termCollection-B37DZLDY.js.map} +0 -0
  983. /package/dist/{wsi.direct-OSHY7VL4.js.map → wsi.direct-3YH3QGQD.js.map} +0 -0
@@ -0,0 +1,7 @@
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, DataPointInteractions } 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 { create, pointer } from 'd3-selection'\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, termsettingInit } 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/** a drawn event marker, in the pixel space of its panel, for the hover and click hit test */\ntype MarkerHit = {\n\tp: SwimmerPoint\n\tlane: SwimmerLane\n\tentry: LegendEntry\n\t/** legend entry of the \"mark by\" category of a marked point */\n\tmark?: LegendEntry\n\tshape: string\n\tcolor: string\n\t/** marker center */\n\tx: number\n\ty: number\n\theight: number\n\t/** half the drawn width of the shape */\n\thalfWidth: number\n}\n\n/** one lane of a panel, for hovering its interval segments and base bar */\ntype LaneRow = {\n\tlane: SwimmerLane\n\tend: number\n\t/** drawn segments, with their pixel extent incl. the arrowhead of an ongoing interval */\n\tsegments: { r: SwimmerLane['ranges'][number]; entry: LegendEntry; x0: number; x1: number }[]\n}\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/** the #dom shape of a marker `height` px tall: its path transform, centering the shape at 0,0, and its drawn\nhalf width. uses the measured bbox of the shape, else its 16x16 icon box */\nfunction getMarkerGeometry(shapeKey: string, height: number) {\n\tconst key = shapes[shapeKey] ? shapeKey : 'filledCircle'\n\tconst shape = shapes[key]\n\tconst bb = shapeBBox.get(key) || { 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\treturn {\n\t\tshape,\n\t\tstrokePx,\n\t\tscale,\n\t\ttransform: `scale(${scale}) translate(${-(bb.x + bb.width / 2)},${-(bb.y + bb.height / 2)})`,\n\t\thalfWidth: (bb.width * scale + strokePx) / 2\n\t}\n}\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 */\nfunction drawMarker(holder, shapeKey: string, cx: number, cy: number, height: number, color: string) {\n\tconst key = shapes[shapeKey] ? shapeKey : 'filledCircle'\n\tconst g = holder.append('g').attr('transform', `translate(${cx},${cy})`)\n\tconst path = g.append('path').attr('d', shapes[key].path).attr('fill', color)\n\tif (!shapeBBox.has(key)) {\n\t\tconst b = path.node().getBBox()\n\t\t// getBBox() is all zeros while the svg is hidden or detached; the icon box is used then, without caching\n\t\tif (b.width && b.height) shapeBBox.set(key, { x: b.x, y: b.y, width: b.width, height: b.height })\n\t}\n\tconst m = getMarkerGeometry(key, height)\n\tpath\n\t\t.attr('transform', m.transform)\n\t\t.attr('stroke', m.shape.isFilled ? 'white' : color)\n\t\t.attr('stroke-width', m.strokePx / m.scale)\n\t\t.attr('stroke-linejoin', 'round')\n\treturn g\n}\n\n/** a 14px marker icon as svg markup, for html table cells */\nfunction getMarkerIconHtml(shapeKey: string, color: string): string {\n\tconst svg = create('svg').attr('width', 14).attr('height', 14).style('vertical-align', 'middle')\n\tdrawMarker(svg, shapeKey, 7, 7, 12, color)\n\treturn svg.node()!.outerHTML\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(\n\t\t\tthis.app,\n\t\t\tthis.dom,\n\t\t\tsettings => this.app.dispatch({ type: 'plot_edit', id: this.id, config: { settings: { swimmer: settings } } }),\n\t\t\tpointTerm => this.app.dispatch({ type: 'plot_edit', id: this.id, config: { pointTerm } })\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\t/** menu of the \"mark by\" term pill in the legend, shared with pointTermPill */\n\tpointTermMenu?: Menu\n\t/** termsetting behind the legend's \"mark by\" pill, for the same edit, replace and remove options as the\n\tcontrols */\n\tpointTermPill?: any\n\t/** hover and click handling of each divide-by panel, replaced on every render */\n\tinteractions: DataPointInteractions<MarkerHit>[] = []\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\t/** called with the new \"mark by\" tw, or null when removed, from the legend pill of that term */\n\tonPointTermChange?: (tw: any) => 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\tonPointTermChange?: (tw: any) => void\n\t) {\n\t\tthis.app = app\n\t\tthis.dom = dom\n\t\tthis.onSettingsChange = onSettingsChange\n\t\tthis.onPointTermChange = onPointTermChange\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\t\tfor (const i of this.interactions) i.destroy()\n\t\tthis.interactions = []\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\t\t\tconst markers: MarkerHit[] = []\n\t\t\tconst rows: LaneRow[] = []\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\t\t\t\tconst row: LaneRow = { lane, end, segments: [] }\n\t\t\t\trows.push(row)\n\n\t\t\t\t// base bar: a thin line\n\t\t\t\tg.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\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')\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\tconst xe = x(r.start) + Math.max(1, x(segEnd) - x(r.start))\n\t\t\t\t\trow.segments.push({ r, entry, x0: x(r.start), x1: r.end == null ? xe + segH * 0.8 : xe })\n\t\t\t\t\tif (r.end == null) {\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}\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 shape = mark?.shape || entry.shape\n\t\t\t\t\tconst color = mark?.color || entry.color\n\t\t\t\t\tconst height = markerH * entry.size\n\t\t\t\t\tconst cx = x(p.time)\n\t\t\t\t\t// hover and click go through the panel cover, see attachInteractions()\n\t\t\t\t\tconst dot = drawMarker(g, shape, cx, s.rowHeight / 2, height, color).attr('data-event', p.event)\n\t\t\t\t\t// after drawMarker(), which measures the shape on its first use\n\t\t\t\t\tconst { halfWidth } = getMarkerGeometry(shape, height)\n\t\t\t\t\tmarkers.push({ p, lane, entry, mark, shape, color, x: cx, y: y + s.rowHeight / 2, height, halfWidth })\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.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\tthis.attachInteractions(mainG, markers, rows, {\n\t\t\t\tplotWidth: s.plotWidth,\n\t\t\t\trowHeight: s.rowHeight,\n\t\t\t\tsegH,\n\t\t\t\tbarH,\n\t\t\t\tx,\n\t\t\t\ttimeLabel,\n\t\t\t\tfmt\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 is\n\tfollowed by the term as a pill, as in the controls, then the term's categories, indented:\n\t Events\n\t Follow-up\n\t Mark CSF sample by\n\t [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. the event's legend options are\n\t\t\t\t// in the menu of the term pill\n\t\t\t\tg.append('text')\n\t\t\t\t\t.attr('x', 20)\n\t\t\t\t\t.attr('y', y + 10)\n\t\t\t\t\t.attr('font-size', 12)\n\t\t\t\t\t.attr('fill', '#333')\n\t\t\t\t\t.style('opacity', e.hidden ? 0.4 : 1)\n\t\t\t\t\t.style('text-decoration', e.hidden ? 'line-through' : 'none')\n\t\t\t\t\t.text(`Mark ${e.label} by`)\n\t\t\t\ty += lineH\n\t\t\t\tconst name = this.pointTerm.term?.name || ''\n\t\t\t\tconst pill = g\n\t\t\t\t\t.append('g')\n\t\t\t\t\t.attr('transform', `translate(${indent},${y})`)\n\t\t\t\t\t.attr('data-testid', 'sjpp-swimmer-legend-pointterm')\n\t\t\t\t\t.attr('role', 'button')\n\t\t\t\t\t.attr('tabindex', 0)\n\t\t\t\t\t.attr('aria-label', `Edit ${name}`)\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\tconst pillRect = pill.append('rect').attr('rx', 6).attr('height', 20).attr('fill', '#cfe2f3')\n\t\t\t\tconst max = Math.floor((26 * (legendWidth - indent - 12)) / legendWidth)\n\t\t\t\tconst pillText = pill.append('text').attr('x', 6).attr('y', 14).attr('font-size', 12).text(fit(name, max))\n\t\t\t\tif (name.length > max) pill.append('title').text(name)\n\t\t\t\tpillRect.attr('width', (pillText.node().getComputedTextLength() || name.length * 7) + 12)\n\t\t\t\tconst showMenu = () => this.showPointTermMenu(pill.node(), e, ordered)\n\t\t\t\tpill.on('click', showMenu).on('keydown', (event: KeyboardEvent) => {\n\t\t\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\tshowMenu()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\ty += 24\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\tthis.addLegendOptions(menu, menu.clear().d.append('div'), type, e, entries, opts)\n\t\tmenu.showunder(event.target)\n\t}\n\n\t/** menu of the \"mark by\" term pill in the legend: the edit, replace and remove options of the controls'\n\t\"Mark ... by\" pill, then the legend options of the marked event (e), without color or shape */\n\tasync showPointTermMenu(node: Element, e: LegendEntry, entries: LegendEntry[]) {\n\t\tthis.dom.tip.hide()\n\t\tthis.legendMenu?.hide()\n\t\tif (!this.pointTermMenu) this.pointTermMenu = new Menu({ padding: '0px' })\n\t\tconst menu = this.pointTermMenu\n\t\tif (!this.pointTermPill)\n\t\t\tthis.pointTermPill = termsettingInit({\n\t\t\t\tvocabApi: this.app.vocabApi,\n\t\t\t\trenderAs: 'none',\n\t\t\t\ttip: menu,\n\t\t\t\tmenuOptions: '*',\n\t\t\t\tusecase: { target: 'swimmer', detail: 'pointTerm', sampleTypes: this.swimmer.pointSampleTypes },\n\t\t\t\tnumericEditMenuVersion: ['discrete'],\n\t\t\t\tdefaultQ4fillTW: getT0T2defaultQ(),\n\t\t\t\tcallback: tw => {\n\t\t\t\t\tmenu.hide()\n\t\t\t\t\tthis.onPointTermChange?.(tw)\n\t\t\t\t}\n\t\t\t})\n\t\t// main() adds .tw to its argument and may fill its nested q in place (e.g. q.type of custom bins), so\n\t\t// clone the frozen state wrapper. a .tw in the state (the controls' pill adds one to the tw it dispatches)\n\t\t// is a plain copy, not the TwBase instance main() expects there, so it is dropped for main() to rebuild\n\t\tconst pointTerm = structuredClone(this.pointTerm)\n\t\tdelete pointTerm.tw\n\t\tawait this.pointTermPill.main(pointTerm)\n\t\t// clears the menu, adds the term options and shows the menu under node\n\t\tthis.pointTermPill.showMenu(null, node)\n\t\tthis.addLegendOptions(menu, menu.d.append('div'), 'events', e, entries, { allowColor: false, allowShape: false })\n\t}\n\n\t/** legend options of entry e, appended to div inside menu */\n\taddLegendOptions(\n\t\tmenu: Menu,\n\t\tdiv,\n\t\ttype: keyof LegendOverrides,\n\t\te: LegendEntry,\n\t\tentries: LegendEntry[],\n\t\topts: { allowColor: boolean; allowShape: boolean }\n\t) {\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}\n\n\t/** remove the body-mounted menus and their body listeners */\n\tdestroy() {\n\t\tfor (const i of this.interactions) i.destroy()\n\t\tthis.dom.tip.destroy()\n\t\tthis.legendMenu?.destroy()\n\t\t// also destroys pointTermMenu, its tip\n\t\tthis.pointTermPill?.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/** whether a marker opens a sample view on click: a point linked to its own sample (e.g. a CSF dot) */\n\tisLinked(d: MarkerHit) {\n\t\treturn !!d.p.sample && d.p.sampleId !== undefined\n\t}\n\n\t/** hover and click of a panel, through a transparent cover over its lanes. the shared DataPointInteractions\n\thit-tests the markers; when none is under the cursor, a hover shows the interval segments or the base bar\n\tunder it. a marker is hit when the cursor is within its drawn left and right edges, anywhere in its lane's\n\trow, so only markers whose shapes overlap at the cursor are listed together. a click on several\n\tlinked markers opens a menu to pick the sample to view */\n\tattachInteractions(\n\t\tmainG,\n\t\tmarkers: MarkerHit[],\n\t\trows: LaneRow[],\n\t\to: {\n\t\t\tplotWidth: number\n\t\t\trowHeight: number\n\t\t\tsegH: number\n\t\t\tbarH: number\n\t\t\tx: (t: number) => number\n\t\t\ttimeLabel: string\n\t\t\tfmt: (d: number) => string\n\t\t}\n\t) {\n\t\tconst tip = this.dom.tip\n\t\tconst time = `(${o.timeLabel.toLowerCase()})`\n\t\tconst hoverLayer = mainG.append('g').style('pointer-events', 'none')\n\t\tconst minX = markers.reduce((v, d) => Math.min(v, d.x - d.halfWidth), 0)\n\t\tconst maxX = rows.reduce(\n\t\t\t(right, row) => row.segments.reduce((v, segment) => Math.max(v, segment.x1), right),\n\t\t\tmarkers.reduce((v, d) => Math.max(v, d.x + d.halfWidth), o.plotWidth)\n\t\t)\n\t\tconst cover = mainG\n\t\t\t.append('rect')\n\t\t\t.attr('data-testid', 'sjpp-swimmer-cover')\n\t\t\t.attr('x', minX)\n\t\t\t.attr('width', maxX - minX)\n\t\t\t.attr('height', rows.length * o.rowHeight)\n\t\t\t.attr('fill', 'transparent')\n\t\t\t.style('pointer-events', 'all')\n\t\t// cursor in panel pixels; the row number of the cursor, and y snapped to the center of that row, where its\n\t\t// markers are\n\t\tconst getCursor = (event: MouseEvent) => {\n\t\t\tconst [mx, my] = pointer(event, mainG.node())\n\t\t\tconst i = Math.floor(my / o.rowHeight)\n\t\t\treturn { mx, my, i, cy: (i + 0.5) * o.rowHeight }\n\t\t}\n\t\tlet hovered: MarkerHit[] = []\n\t\t// row of the cursor, set by toLocalCoords() before isHidden() runs on the candidates\n\t\tlet cursorRow = -1\n\t\tconst dpi = new DataPointInteractions<MarkerHit>({\n\t\t\tcover,\n\t\t\thoverLayer,\n\t\t\thoverTip: tip,\n\t\t\tpoints: markers,\n\t\t\tgetX: d => d.x,\n\t\t\tgetY: d => d.y,\n\t\t\ttoLocalCoords: event => {\n\t\t\t\tconst { mx, cy, i } = getCursor(event)\n\t\t\t\tcursorRow = i\n\t\t\t\treturn [mx, cy]\n\t\t\t},\n\t\t\thitRadius: Math.max(0, ...markers.map(d => d.halfWidth)),\n\t\t\tperDotRadius: d => d.halfWidth,\n\t\t\t// only markers of the cursor's row: a large marker (event size of about 3 or more) would otherwise be\n\t\t\t// within reach from the neighboring lanes. so the hit distance is the horizontal one\n\t\t\tisHidden: d => Math.floor(d.y / o.rowHeight) !== cursorRow,\n\t\t\t// outline of the marker's shape, 2px larger on each side\n\t\t\ttoHoverSpec: d => {\n\t\t\t\tconst m = getMarkerGeometry(d.shape, d.height + 4)\n\t\t\t\treturn {\n\t\t\t\t\tpath: m.shape.path,\n\t\t\t\t\ttransform: `translate(${d.x},${d.y}) ${m.transform}`,\n\t\t\t\t\tstroke: 'black',\n\t\t\t\t\tfill: 'none'\n\t\t\t\t}\n\t\t\t},\n\t\t\titemNoun: 'event',\n\t\t\trenderSingleHoverTooltip: (d, container) => this.renderMarkerTip(d, container, time, o.fmt),\n\t\t\tbuildMultiHitTableData: dots => this.buildMarkersTable(dots, o.timeLabel, o.fmt),\n\t\t\tonHover: dots => {\n\t\t\t\thovered = dots\n\t\t\t\tcover.style('cursor', dots.some(d => this.isLinked(d)) ? 'pointer' : 'default')\n\t\t\t},\n\t\t\tonSingleClick: (d, event, ctx) => this.openMarkerSamples([d], event, ctx, time, o.fmt),\n\t\t\tonMultiClick: (dots, event, ctx) => this.openMarkerSamples(dots, event, ctx, time, o.fmt)\n\t\t})\n\t\tdpi.attach()\n\t\tthis.interactions.push(dpi)\n\n\t\t// runs after the DataPointInteractions mousemove handler, which sets `hovered`\n\t\tcover.on('mousemove.lane', (event: MouseEvent) => {\n\t\t\tif (hovered.length || dpi.clickMenu.d.style('display') != 'none') return\n\t\t\tconst { mx, my, i, cy } = getCursor(event)\n\t\t\tconst row = rows[i]\n\t\t\tif (!row) return tip.hide()\n\t\t\tconst dy = Math.abs(my - cy)\n\t\t\tconst segments = row.segments.filter(sg => {\n\t\t\t\tif (mx < sg.x0 || mx > sg.x1) return false\n\t\t\t\tif (sg.r.end != null) return dy <= o.segH / 2\n\t\t\t\tconst arrowStart = sg.x1 - o.segH * 0.8\n\t\t\t\tif (mx < arrowStart) return dy <= o.segH / 2\n\t\t\t\tconst fraction = (sg.x1 - mx) / (o.segH * 0.8)\n\t\t\t\treturn my >= cy - (o.segH / 2 + o.segH / 3) * fraction && my <= cy + (o.segH * 1.33 - o.segH / 2) * fraction\n\t\t\t})\n\t\t\tconst onBase = dy <= o.barH / 2 && mx >= o.x(0) && mx <= o.x(row.end)\n\t\t\tif (!segments.length && !onBase) return tip.hide()\n\t\t\ttip.clear()\n\t\t\ttip.d.append('div').style('font-weight', 'bold').text(row.lane.sample)\n\t\t\tfor (const { r, entry } of segments) {\n\t\t\t\tconst div = tip.d.append('div').attr('data-testid', 'sjpp-swimmer-tip-interval')\n\t\t\t\tdiv\n\t\t\t\t\t.append('svg')\n\t\t\t\t\t.attr('width', 14)\n\t\t\t\t\t.attr('height', 10)\n\t\t\t\t\t.style('margin-right', '5px')\n\t\t\t\t\t.append('rect')\n\t\t\t\t\t.attr('y', 1)\n\t\t\t\t\t.attr('width', 14)\n\t\t\t\t\t.attr('height', 8)\n\t\t\t\t\t.attr('fill', entry.color)\n\t\t\t\tdiv.append('span').text(`${entry.label}${entry.label != r.category ? ` (${r.category})` : ''}`)\n\t\t\t\ttip.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('margin-left', '19px')\n\t\t\t\t\t.text(\n\t\t\t\t\t\tr.end == null ? `From ${o.fmt(r.start)}, ongoing ${time}` : `${o.fmt(r.start)} to ${o.fmt(r.end)} ${time}`\n\t\t\t\t\t)\n\t\t\t}\n\t\t\tif (!segments.length) tip.d.append('div').text(`Lane end: ${o.fmt(row.end)} ${time}`)\n\t\t\ttip.show(event.clientX, event.clientY)\n\t\t})\n\t}\n\n\t/** hover tooltip of one marker: the lane name, the event with its legend icon, and a linked point's sample\n\twith its annotations */\n\trenderMarkerTip(d: MarkerHit, container, time: string, fmt: (d: number) => string) {\n\t\tconst { p, lane, entry, mark } = d\n\t\tcontainer.append('div').style('font-weight', 'bold').text(lane.sample)\n\t\tconst row = container.append('div').attr('data-testid', 'sjpp-swimmer-tip-event')\n\t\trow.append('span').style('margin-right', '5px').html(getMarkerIconHtml(d.shape, d.color))\n\t\trow.append('span').text(`${entry.label}: ${fmt(p.time)} ${time}`)\n\t\tif (mark) container.append('div').text(`${this.pointTerm.term?.name}: ${mark.label}`)\n\t\tif (!p.sample) return\n\t\tcontainer.append('div').text(`Sample: ${p.sample}`)\n\t\tif (p.sampleId === undefined) return\n\t\tif (entry.sampleTerms?.length) this.showPointSampleAnno(container, p.sampleId, entry.sampleTerms)\n\t\tcontainer.append('div').style('font-size', '0.8em').style('opacity', 0.7).text('Click to open sample view')\n\t}\n\n\t/** multi-hit hover table of overlapping markers, one row per marker with its legend icon */\n\tbuildMarkersTable(dots: MarkerHit[], timeLabel: string, fmt: (d: number) => string) {\n\t\tconst hasSample = dots.some(d => d.p.sample)\n\t\tconst hasMark = dots.some(d => d.mark)\n\t\tconst columns: any[] = [\n\t\t\t{ label: '' },\n\t\t\t{ label: 'Event' },\n\t\t\t{ label: timeLabel, sortable: true },\n\t\t\t...(hasMark ? [{ label: this.pointTerm.term?.name || '' }] : []),\n\t\t\t...(hasSample ? [{ label: 'Sample' }] : [])\n\t\t]\n\t\tconst rows = dots.map(d => [\n\t\t\t{ html: getMarkerIconHtml(d.shape, d.color) },\n\t\t\t{ value: d.entry.label },\n\t\t\t{ value: fmt(d.p.time) },\n\t\t\t...(hasMark ? [{ value: d.mark?.label || '' }] : []),\n\t\t\t...(hasSample ? [{ value: d.p.sample || '' }] : [])\n\t\t])\n\t\treturn { columns, rows }\n\t}\n\n\t/** click on markers: opens the sample view of the one linked marker, or a menu to pick one of several */\n\topenMarkerSamples(dots: MarkerHit[], event: MouseEvent, ctx, time: string, fmt: (d: number) => string) {\n\t\tconst linked = dots.filter(d => this.isLinked(d))\n\t\tif (linked.length < 2) {\n\t\t\tctx.dismiss()\n\t\t\tif (linked.length) this.openSampleView({ sampleId: linked[0].p.sampleId!, sampleName: linked[0].p.sample! })\n\t\t\treturn\n\t\t}\n\t\tconst menu: Menu = ctx.clickMenu\n\t\tmenu.clear()\n\t\tmenu.d.append('div').style('padding', '5px 10px').style('opacity', 0.7).text('Open sample view of')\n\t\tfor (const d of linked) {\n\t\t\tconst sample = { sampleId: d.p.sampleId!, sampleName: d.p.sample! }\n\t\t\tconst option = menu.d\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t.attr('data-testid', 'sjpp-swimmer-sample-choice')\n\t\t\t\t.attr('role', 'button')\n\t\t\t\t.attr('tabindex', 0)\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tmenu.hide()\n\t\t\t\t\tthis.openSampleView(sample)\n\t\t\t\t})\n\t\t\t\t.on('keydown', (e: KeyboardEvent) => {\n\t\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t\tthis.openSampleView(sample)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\toption.append('span').style('margin-right', '5px').html(getMarkerIconHtml(d.shape, d.color))\n\t\t\toption.append('span').text(`${d.p.sample} (${d.entry.label}: ${fmt(d.p.time)} ${time})`)\n\t\t}\n\t\tmenu.show(event.clientX, event.clientY)\n\t}\n\n\t/** list annotations of a point's own sample (e.g. a CSF sample) in container of the open tooltip, using the\n\tsame single-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(container, sampleId: number, termIds: string[]) {\n\t\tconst holder = container.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
+ }
@@ -0,0 +1,192 @@
1
+ import {
2
+ PlotBase,
3
+ controlsInit
4
+ } from "./chunk-WD7FZ5EE.js";
5
+ import "./chunk-HJ6L54YS.js";
6
+ import "./chunk-WXSMUSU7.js";
7
+ import "./chunk-CNFTQSNE.js";
8
+ import "./chunk-RIHO7ZD5.js";
9
+ import "./chunk-TVJOSRCH.js";
10
+ import "./chunk-3CIL7KH7.js";
11
+ import "./chunk-T4XPCSLP.js";
12
+ import "./chunk-4TJO2DGU.js";
13
+ import "./chunk-W5J3LTYS.js";
14
+ import "./chunk-MHWYRNGA.js";
15
+ import "./chunk-JHLF2ZC2.js";
16
+ import "./chunk-WJLRU5OF.js";
17
+ import {
18
+ getCompInit
19
+ } from "./chunk-HBNB5TRH.js";
20
+ import "./chunk-PF4DSFDR.js";
21
+ import "./chunk-4OLM3KSB.js";
22
+ import "./chunk-PWYMHUXY.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-CWIQQESJ.js.map
@@ -0,0 +1,29 @@
1
+ import {
2
+ SearchHandler
3
+ } from "./chunk-XBBFFOLS.js";
4
+ import "./chunk-WD7FZ5EE.js";
5
+ import "./chunk-HJ6L54YS.js";
6
+ import "./chunk-WXSMUSU7.js";
7
+ import "./chunk-CNFTQSNE.js";
8
+ import "./chunk-RIHO7ZD5.js";
9
+ import "./chunk-TVJOSRCH.js";
10
+ import "./chunk-3CIL7KH7.js";
11
+ import "./chunk-T4XPCSLP.js";
12
+ import "./chunk-4TJO2DGU.js";
13
+ import "./chunk-W5J3LTYS.js";
14
+ import "./chunk-MHWYRNGA.js";
15
+ import "./chunk-JHLF2ZC2.js";
16
+ import "./chunk-WJLRU5OF.js";
17
+ import "./chunk-HBNB5TRH.js";
18
+ import "./chunk-PF4DSFDR.js";
19
+ import "./chunk-4OLM3KSB.js";
20
+ import "./chunk-PWYMHUXY.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-7TYJSQ45.js.map