@milaboratories/miplots4 1.0.128 → 1.0.130

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 (365) hide show
  1. package/dist/DataFrame.d.ts +15 -9
  2. package/dist/DataFrame.d.ts.map +1 -1
  3. package/dist/DataFrame.js +105 -81
  4. package/dist/DataFrame.js.map +1 -1
  5. package/dist/bubble/ChartRenderer.d.ts +6 -5
  6. package/dist/bubble/ChartRenderer.d.ts.map +1 -1
  7. package/dist/bubble/ChartRenderer.js +123 -121
  8. package/dist/bubble/ChartRenderer.js.map +1 -1
  9. package/dist/bubble/components/Chart.d.ts +3 -2
  10. package/dist/bubble/components/Chart.d.ts.map +1 -1
  11. package/dist/bubble/components/Chart.js +78 -97
  12. package/dist/bubble/components/Chart.js.map +1 -1
  13. package/dist/bubble/components/ChartsGroup.d.ts +6 -5
  14. package/dist/bubble/components/ChartsGroup.d.ts.map +1 -1
  15. package/dist/bubble/components/ChartsGroup.js +39 -37
  16. package/dist/bubble/components/ChartsGroup.js.map +1 -1
  17. package/dist/bubble/getCellTooltip.d.ts +5 -0
  18. package/dist/bubble/getCellTooltip.d.ts.map +1 -0
  19. package/dist/bubble/getCellTooltip.js +28 -0
  20. package/dist/bubble/getCellTooltip.js.map +1 -0
  21. package/dist/bubble/{getCells.d.ts → getGroupedCellsData.d.ts} +4 -4
  22. package/dist/bubble/getGroupedCellsData.d.ts.map +1 -0
  23. package/dist/bubble/getGroupedCellsData.js +94 -0
  24. package/dist/bubble/getGroupedCellsData.js.map +1 -0
  25. package/dist/bubble/index.d.ts +4 -4
  26. package/dist/bubble/index.d.ts.map +1 -1
  27. package/dist/bubble/index.js +47 -42
  28. package/dist/bubble/index.js.map +1 -1
  29. package/dist/bubble/utils/calculateCaptionTails.d.ts +2 -2
  30. package/dist/bubble/utils/calculateCaptionTails.d.ts.map +1 -1
  31. package/dist/bubble/utils/calculateCaptionTails.js.map +1 -1
  32. package/dist/common/Legend.d.ts.map +1 -1
  33. package/dist/common/Legend.js.map +1 -1
  34. package/dist/common/Tooltip.js +1 -1
  35. package/dist/common/Tooltip.js.map +1 -1
  36. package/dist/common/types.d.ts +1 -1
  37. package/dist/common/types.d.ts.map +1 -1
  38. package/dist/common/useDataFrame.d.ts +11 -0
  39. package/dist/common/useDataFrame.d.ts.map +1 -0
  40. package/dist/common/useDataFrame.js +20 -0
  41. package/dist/common/useDataFrame.js.map +1 -0
  42. package/dist/dendro/ChartRenderer.d.ts +9 -8
  43. package/dist/dendro/ChartRenderer.d.ts.map +1 -1
  44. package/dist/dendro/ChartRenderer.js +187 -187
  45. package/dist/dendro/ChartRenderer.js.map +1 -1
  46. package/dist/dendro/components/Chart.d.ts +8 -8
  47. package/dist/dendro/components/Chart.d.ts.map +1 -1
  48. package/dist/dendro/components/Chart.js +35 -35
  49. package/dist/dendro/components/Chart.js.map +1 -1
  50. package/dist/dendro/components/Heatmap.d.ts +3 -3
  51. package/dist/dendro/components/Heatmap.d.ts.map +1 -1
  52. package/dist/dendro/components/Heatmap.js +23 -23
  53. package/dist/dendro/components/Heatmap.js.map +1 -1
  54. package/dist/dendro/components/Legend.d.ts.map +1 -1
  55. package/dist/dendro/components/Legend.js.map +1 -1
  56. package/dist/dendro/components/LinksGroup.d.ts +6 -6
  57. package/dist/dendro/components/LinksGroup.d.ts.map +1 -1
  58. package/dist/dendro/components/LinksGroup.js +17 -17
  59. package/dist/dendro/components/LinksGroup.js.map +1 -1
  60. package/dist/dendro/components/NodesGroup.d.ts +7 -7
  61. package/dist/dendro/components/NodesGroup.d.ts.map +1 -1
  62. package/dist/dendro/components/NodesGroup.js +29 -29
  63. package/dist/dendro/components/NodesGroup.js.map +1 -1
  64. package/dist/dendro/components/types.d.ts +2 -2
  65. package/dist/dendro/components/types.d.ts.map +1 -1
  66. package/dist/dendro/getHeatmapData.d.ts +2 -2
  67. package/dist/dendro/getHeatmapData.d.ts.map +1 -1
  68. package/dist/dendro/getHeatmapData.js +48 -44
  69. package/dist/dendro/getHeatmapData.js.map +1 -1
  70. package/dist/dendro/getHierarchyData.d.ts +3 -3
  71. package/dist/dendro/getHierarchyData.d.ts.map +1 -1
  72. package/dist/dendro/getHierarchyData.js +31 -31
  73. package/dist/dendro/getHierarchyData.js.map +1 -1
  74. package/dist/dendro/index.d.ts +5 -5
  75. package/dist/dendro/index.d.ts.map +1 -1
  76. package/dist/dendro/index.js +86 -89
  77. package/dist/dendro/index.js.map +1 -1
  78. package/dist/discrete/ChartRenderer.d.ts +6 -6
  79. package/dist/discrete/ChartRenderer.d.ts.map +1 -1
  80. package/dist/discrete/ChartRenderer.js +197 -196
  81. package/dist/discrete/ChartRenderer.js.map +1 -1
  82. package/dist/discrete/DiscreteSettingsImpl.d.ts +3 -3
  83. package/dist/discrete/DiscreteSettingsImpl.d.ts.map +1 -1
  84. package/dist/discrete/DiscreteSettingsImpl.js +8 -8
  85. package/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
  86. package/dist/discrete/components/layers/BoxElement.js.map +1 -1
  87. package/dist/discrete/index.d.ts +1 -1
  88. package/dist/discrete/index.d.ts.map +1 -1
  89. package/dist/discrete/index.js +109 -106
  90. package/dist/discrete/index.js.map +1 -1
  91. package/dist/discrete/layers/bar.d.ts +2 -2
  92. package/dist/discrete/layers/bar.d.ts.map +1 -1
  93. package/dist/discrete/layers/bar.js +32 -37
  94. package/dist/discrete/layers/bar.js.map +1 -1
  95. package/dist/discrete/layers/binnedDots.d.ts +3 -3
  96. package/dist/discrete/layers/binnedDots.d.ts.map +1 -1
  97. package/dist/discrete/layers/binnedDots.js +66 -78
  98. package/dist/discrete/layers/binnedDots.js.map +1 -1
  99. package/dist/discrete/layers/boxes.d.ts +3 -4
  100. package/dist/discrete/layers/boxes.d.ts.map +1 -1
  101. package/dist/discrete/layers/boxes.js +59 -60
  102. package/dist/discrete/layers/boxes.js.map +1 -1
  103. package/dist/discrete/layers/dots.d.ts +2 -3
  104. package/dist/discrete/layers/dots.d.ts.map +1 -1
  105. package/dist/discrete/layers/dots.js +30 -30
  106. package/dist/discrete/layers/dots.js.map +1 -1
  107. package/dist/discrete/layers/lines.js +11 -10
  108. package/dist/discrete/layers/lines.js.map +1 -1
  109. package/dist/discrete/layers/logo.d.ts +2 -2
  110. package/dist/discrete/layers/logo.d.ts.map +1 -1
  111. package/dist/discrete/layers/logo.js +21 -21
  112. package/dist/discrete/layers/logo.js.map +1 -1
  113. package/dist/discrete/layers/pairedPoints.d.ts +2 -2
  114. package/dist/discrete/layers/pairedPoints.d.ts.map +1 -1
  115. package/dist/discrete/layers/pairedPoints.js +62 -62
  116. package/dist/discrete/layers/pairedPoints.js.map +1 -1
  117. package/dist/discrete/layers/sina.d.ts +3 -4
  118. package/dist/discrete/layers/sina.d.ts.map +1 -1
  119. package/dist/discrete/layers/sina.js +67 -71
  120. package/dist/discrete/layers/sina.js.map +1 -1
  121. package/dist/discrete/layers/stackedBar.d.ts +1 -1
  122. package/dist/discrete/layers/stackedBar.d.ts.map +1 -1
  123. package/dist/discrete/layers/stackedBar.js +25 -25
  124. package/dist/discrete/layers/stackedBar.js.map +1 -1
  125. package/dist/discrete/layers/violins.js +13 -13
  126. package/dist/discrete/utils/getOutliersBounds.d.ts +1 -1
  127. package/dist/discrete/utils/getOutliersBounds.d.ts.map +1 -1
  128. package/dist/discrete/utils/getOutliersBounds.js +5 -5
  129. package/dist/discrete/utils/getOutliersBounds.js.map +1 -1
  130. package/dist/discrete/utils/splitTextByWidth.js +1 -1
  131. package/dist/discrete/utils/splitTextByWidth.js.map +1 -1
  132. package/dist/heatmap/ChartRenderer.d.ts +7 -6
  133. package/dist/heatmap/ChartRenderer.d.ts.map +1 -1
  134. package/dist/heatmap/ChartRenderer.js +286 -266
  135. package/dist/heatmap/ChartRenderer.js.map +1 -1
  136. package/dist/heatmap/HeatmapSettingsImpl.d.ts +2 -2
  137. package/dist/heatmap/HeatmapSettingsImpl.d.ts.map +1 -1
  138. package/dist/heatmap/HeatmapSettingsImpl.js +1 -1
  139. package/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
  140. package/dist/heatmap/components/Annotations/Annotation.d.ts.map +1 -1
  141. package/dist/heatmap/components/Annotations/Annotation.js +40 -39
  142. package/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
  143. package/dist/heatmap/components/Captions/GroupCaptions.d.ts.map +1 -1
  144. package/dist/heatmap/components/Captions/GroupCaptions.js +45 -36
  145. package/dist/heatmap/components/Captions/GroupCaptions.js.map +1 -1
  146. package/dist/heatmap/components/Chart.d.ts.map +1 -1
  147. package/dist/heatmap/components/Chart.js +104 -101
  148. package/dist/heatmap/components/Chart.js.map +1 -1
  149. package/dist/heatmap/components/ChartsGroup.d.ts +2 -2
  150. package/dist/heatmap/components/ChartsGroup.d.ts.map +1 -1
  151. package/dist/heatmap/components/ChartsGroup.js +14 -14
  152. package/dist/heatmap/components/ChartsGroup.js.map +1 -1
  153. package/dist/heatmap/components/Dendrograms.d.ts +3 -1
  154. package/dist/heatmap/components/Dendrograms.d.ts.map +1 -1
  155. package/dist/heatmap/components/Dendrograms.js +54 -48
  156. package/dist/heatmap/components/Dendrograms.js.map +1 -1
  157. package/dist/heatmap/components/types.d.ts +5 -4
  158. package/dist/heatmap/components/types.d.ts.map +1 -1
  159. package/dist/heatmap/getCells.d.ts +3 -2
  160. package/dist/heatmap/getCells.d.ts.map +1 -1
  161. package/dist/heatmap/getCells.js +97 -93
  162. package/dist/heatmap/getCells.js.map +1 -1
  163. package/dist/heatmap/getDendrograms.d.ts +2 -2
  164. package/dist/heatmap/getDendrograms.d.ts.map +1 -1
  165. package/dist/heatmap/getDendrograms.js +36 -36
  166. package/dist/heatmap/getDendrograms.js.map +1 -1
  167. package/dist/heatmap/index.d.ts +3 -3
  168. package/dist/heatmap/index.d.ts.map +1 -1
  169. package/dist/heatmap/index.js +13 -12
  170. package/dist/heatmap/index.js.map +1 -1
  171. package/dist/heatmap/utils/calculateAnnotationTitleSizes.d.ts.map +1 -1
  172. package/dist/heatmap/utils/calculateAnnotationTitleSizes.js +1 -1
  173. package/dist/heatmap/utils/calculateAnnotationTitleSizes.js.map +1 -1
  174. package/dist/heatmap/utils/calculateCaptionTails.d.ts +3 -3
  175. package/dist/heatmap/utils/calculateCaptionTails.d.ts.map +1 -1
  176. package/dist/heatmap/utils/calculateCaptionTails.js +89 -54
  177. package/dist/heatmap/utils/calculateCaptionTails.js.map +1 -1
  178. package/dist/heatmap/utils/calculateChartSideElementSizes.js +19 -19
  179. package/dist/heatmap/utils/calculateChartSideElementSizes.js.map +1 -1
  180. package/dist/histogram/ChartRenderer.d.ts +6 -5
  181. package/dist/histogram/ChartRenderer.d.ts.map +1 -1
  182. package/dist/histogram/ChartRenderer.js +154 -153
  183. package/dist/histogram/ChartRenderer.js.map +1 -1
  184. package/dist/histogram/HistogramSettingsImpl.d.ts +2 -2
  185. package/dist/histogram/HistogramSettingsImpl.d.ts.map +1 -1
  186. package/dist/histogram/HistogramSettingsImpl.js.map +1 -1
  187. package/dist/histogram/components/Chart.js +48 -48
  188. package/dist/histogram/components/Chart.js.map +1 -1
  189. package/dist/histogram/components/types.d.ts +4 -3
  190. package/dist/histogram/components/types.d.ts.map +1 -1
  191. package/dist/histogram/getHistogramData.d.ts +7 -7
  192. package/dist/histogram/getHistogramData.d.ts.map +1 -1
  193. package/dist/histogram/getHistogramData.js +52 -53
  194. package/dist/histogram/getHistogramData.js.map +1 -1
  195. package/dist/histogram/index.d.ts +3 -3
  196. package/dist/histogram/index.d.ts.map +1 -1
  197. package/dist/histogram/index.js +49 -45
  198. package/dist/histogram/index.js.map +1 -1
  199. package/dist/node_modules/@d3fc/d3fc-axis/src/axisBase.js +10 -10
  200. package/dist/node_modules/d3-array/src/min.js +5 -11
  201. package/dist/node_modules/d3-array/src/min.js.map +1 -1
  202. package/dist/node_modules/d3-shape/src/area.js +30 -30
  203. package/dist/node_modules/d3-shape/src/line.js +6 -6
  204. package/dist/node_modules/d3-shape/src/line.js.map +1 -1
  205. package/dist/node_modules/kdbush/index.js +148 -0
  206. package/dist/node_modules/kdbush/index.js.map +1 -0
  207. package/dist/scatterplot/ChartRenderer.d.ts +7 -6
  208. package/dist/scatterplot/ChartRenderer.d.ts.map +1 -1
  209. package/dist/scatterplot/ChartRenderer.js +212 -195
  210. package/dist/scatterplot/ChartRenderer.js.map +1 -1
  211. package/dist/scatterplot/ScatterplotSettingsImpl.d.ts +2 -2
  212. package/dist/scatterplot/ScatterplotSettingsImpl.d.ts.map +1 -1
  213. package/dist/scatterplot/ScatterplotSettingsImpl.js +8 -8
  214. package/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
  215. package/dist/scatterplot/components/ChartAxisTitles.d.ts.map +1 -1
  216. package/dist/scatterplot/components/ChartAxisTitles.js +31 -30
  217. package/dist/scatterplot/components/ChartAxisTitles.js.map +1 -1
  218. package/dist/scatterplot/components/ChartLayersData.d.ts.map +1 -1
  219. package/dist/scatterplot/components/ChartLayersData.js +138 -156
  220. package/dist/scatterplot/components/ChartLayersData.js.map +1 -1
  221. package/dist/scatterplot/components/ChartTooltip.d.ts.map +1 -1
  222. package/dist/scatterplot/components/ChartTooltip.js +28 -27
  223. package/dist/scatterplot/components/ChartTooltip.js.map +1 -1
  224. package/dist/scatterplot/components/ChartTrendsData.js +21 -21
  225. package/dist/scatterplot/components/ChartTrendsData.js.map +1 -1
  226. package/dist/scatterplot/components/ChartsGroup.js +3 -3
  227. package/dist/scatterplot/components/ChartsGroup.js.map +1 -1
  228. package/dist/scatterplot/components/types.d.ts +7 -7
  229. package/dist/scatterplot/components/types.d.ts.map +1 -1
  230. package/dist/scatterplot/constants.d.ts +1 -1
  231. package/dist/scatterplot/constants.d.ts.map +1 -1
  232. package/dist/scatterplot/constants.js.map +1 -1
  233. package/dist/scatterplot/dots.d.ts +2 -2
  234. package/dist/scatterplot/dots.d.ts.map +1 -1
  235. package/dist/scatterplot/dots.js +21 -21
  236. package/dist/scatterplot/dots.js.map +1 -1
  237. package/dist/scatterplot/getLayersData.d.ts +3 -3
  238. package/dist/scatterplot/getLayersData.d.ts.map +1 -1
  239. package/dist/scatterplot/getLayersData.js +12 -15
  240. package/dist/scatterplot/getLayersData.js.map +1 -1
  241. package/dist/scatterplot/index.d.ts +4 -4
  242. package/dist/scatterplot/index.d.ts.map +1 -1
  243. package/dist/scatterplot/index.js +71 -72
  244. package/dist/scatterplot/index.js.map +1 -1
  245. package/dist/scatterplot/linearRegression.d.ts +5 -4
  246. package/dist/scatterplot/linearRegression.d.ts.map +1 -1
  247. package/dist/scatterplot/linearRegression.js +88 -86
  248. package/dist/scatterplot/linearRegression.js.map +1 -1
  249. package/dist/scatterplot/utils/createAesGetter.d.ts +3 -2
  250. package/dist/scatterplot/utils/createAesGetter.d.ts.map +1 -1
  251. package/dist/scatterplot/utils/createAesGetter.js +21 -21
  252. package/dist/scatterplot/utils/createAesGetter.js.map +1 -1
  253. package/dist/scatterplot/utils/createLegendInfo.d.ts +2 -10
  254. package/dist/scatterplot/utils/createLegendInfo.d.ts.map +1 -1
  255. package/dist/scatterplot/utils/createLegendInfo.js +44 -37
  256. package/dist/scatterplot/utils/createLegendInfo.js.map +1 -1
  257. package/dist/scatterplot/utils/getVisibleLabels.d.ts +6 -9
  258. package/dist/scatterplot/utils/getVisibleLabels.d.ts.map +1 -1
  259. package/dist/scatterplot/utils/getVisibleLabels.js +46 -56
  260. package/dist/scatterplot/utils/getVisibleLabels.js.map +1 -1
  261. package/dist/scatterplot-umap/ChartRenderer.d.ts +18 -15
  262. package/dist/scatterplot-umap/ChartRenderer.d.ts.map +1 -1
  263. package/dist/scatterplot-umap/ChartRenderer.js +231 -214
  264. package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  265. package/dist/scatterplot-umap/SettingsImpl.d.ts +2 -2
  266. package/dist/scatterplot-umap/SettingsImpl.d.ts.map +1 -1
  267. package/dist/scatterplot-umap/SettingsImpl.js +6 -6
  268. package/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
  269. package/dist/scatterplot-umap/colors.d.ts +6 -0
  270. package/dist/scatterplot-umap/colors.d.ts.map +1 -0
  271. package/dist/scatterplot-umap/colors.js +42 -0
  272. package/dist/scatterplot-umap/colors.js.map +1 -0
  273. package/dist/scatterplot-umap/components/Lasso.d.ts.map +1 -1
  274. package/dist/scatterplot-umap/components/Lasso.js +148 -124
  275. package/dist/scatterplot-umap/components/Lasso.js.map +1 -1
  276. package/dist/scatterplot-umap/components/LowerSVG.d.ts +2 -2
  277. package/dist/scatterplot-umap/components/LowerSVG.d.ts.map +1 -1
  278. package/dist/scatterplot-umap/components/LowerSVG.js +88 -87
  279. package/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
  280. package/dist/scatterplot-umap/components/UpperSVG.d.ts.map +1 -1
  281. package/dist/scatterplot-umap/components/UpperSVG.js +20 -19
  282. package/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
  283. package/dist/scatterplot-umap/index.d.ts +0 -2
  284. package/dist/scatterplot-umap/index.d.ts.map +1 -1
  285. package/dist/scatterplot-umap/index.js +77 -104
  286. package/dist/scatterplot-umap/index.js.map +1 -1
  287. package/dist/scatterplot-umap/types.d.ts +7 -10
  288. package/dist/scatterplot-umap/types.d.ts.map +1 -1
  289. package/dist/types/bubble.d.ts +12 -12
  290. package/dist/types/common.d.ts +4 -3
  291. package/dist/types/common.d.ts.map +1 -1
  292. package/dist/types/common.js +1 -1
  293. package/dist/types/common.js.map +1 -1
  294. package/dist/types/dendro.d.ts +10 -10
  295. package/dist/types/dendro.d.ts.map +1 -1
  296. package/dist/types/dendro.js +1 -1
  297. package/dist/types/dendro.js.map +1 -1
  298. package/dist/types/discrete.d.ts +14 -14
  299. package/dist/types/discrete.d.ts.map +1 -1
  300. package/dist/types/discrete.js +3 -3
  301. package/dist/types/discrete.js.map +1 -1
  302. package/dist/types/heatmap.d.ts +28 -28
  303. package/dist/types/heatmap.d.ts.map +1 -1
  304. package/dist/types/heatmap.js +1 -1
  305. package/dist/types/heatmap.js.map +1 -1
  306. package/dist/types/histogram.d.ts +8 -8
  307. package/dist/types/histogram.d.ts.map +1 -1
  308. package/dist/types/histogram.js +1 -1
  309. package/dist/types/histogram.js.map +1 -1
  310. package/dist/types/scatterplot-umap.d.ts +11 -15
  311. package/dist/types/scatterplot-umap.d.ts.map +1 -1
  312. package/dist/types/scatterplot-umap.js +9 -9
  313. package/dist/types/scatterplot-umap.js.map +1 -1
  314. package/dist/types/scatterplot.d.ts +12 -12
  315. package/dist/types/scatterplot.d.ts.map +1 -1
  316. package/dist/types/scatterplot.js +1 -1
  317. package/dist/types/scatterplot.js.map +1 -1
  318. package/dist/utils/TextMeasurer/TextMeasurer.d.ts +7 -0
  319. package/dist/utils/TextMeasurer/TextMeasurer.d.ts.map +1 -0
  320. package/dist/utils/TextMeasurer/TextMeasurer.js +42 -0
  321. package/dist/utils/TextMeasurer/TextMeasurer.js.map +1 -0
  322. package/dist/utils/TextMeasurer/charToWidth.json.js +155 -0
  323. package/dist/utils/TextMeasurer/charToWidth.json.js.map +1 -0
  324. package/dist/utils/arrangeLegendParts.js +1 -1
  325. package/dist/utils/arrangeLegendParts.js.map +1 -1
  326. package/dist/utils/getChartEdgeSides.d.ts +1 -1
  327. package/dist/utils/getLegendWidth.d.ts.map +1 -1
  328. package/dist/utils/getLegendWidth.js +1 -1
  329. package/dist/utils/getLegendWidth.js.map +1 -1
  330. package/package.json +5 -3
  331. package/dist/bubble/getCells.d.ts.map +0 -1
  332. package/dist/bubble/getCells.js +0 -91
  333. package/dist/bubble/getCells.js.map +0 -1
  334. package/dist/node_modules/d3-quadtree/src/add.js +0 -30
  335. package/dist/node_modules/d3-quadtree/src/add.js.map +0 -1
  336. package/dist/node_modules/d3-quadtree/src/cover.js +0 -29
  337. package/dist/node_modules/d3-quadtree/src/cover.js.map +0 -1
  338. package/dist/node_modules/d3-quadtree/src/data.js +0 -12
  339. package/dist/node_modules/d3-quadtree/src/data.js.map +0 -1
  340. package/dist/node_modules/d3-quadtree/src/extent.js +0 -7
  341. package/dist/node_modules/d3-quadtree/src/extent.js.map +0 -1
  342. package/dist/node_modules/d3-quadtree/src/find.js +0 -26
  343. package/dist/node_modules/d3-quadtree/src/find.js.map +0 -1
  344. package/dist/node_modules/d3-quadtree/src/quad.js +0 -7
  345. package/dist/node_modules/d3-quadtree/src/quad.js.map +0 -1
  346. package/dist/node_modules/d3-quadtree/src/quadtree.js +0 -51
  347. package/dist/node_modules/d3-quadtree/src/quadtree.js.map +0 -1
  348. package/dist/node_modules/d3-quadtree/src/remove.js +0 -21
  349. package/dist/node_modules/d3-quadtree/src/remove.js.map +0 -1
  350. package/dist/node_modules/d3-quadtree/src/root.js +0 -7
  351. package/dist/node_modules/d3-quadtree/src/root.js.map +0 -1
  352. package/dist/node_modules/d3-quadtree/src/size.js +0 -12
  353. package/dist/node_modules/d3-quadtree/src/size.js.map +0 -1
  354. package/dist/node_modules/d3-quadtree/src/visit.js +0 -14
  355. package/dist/node_modules/d3-quadtree/src/visit.js.map +0 -1
  356. package/dist/node_modules/d3-quadtree/src/visitAfter.js +0 -19
  357. package/dist/node_modules/d3-quadtree/src/visitAfter.js.map +0 -1
  358. package/dist/node_modules/d3-quadtree/src/x.js +0 -11
  359. package/dist/node_modules/d3-quadtree/src/x.js.map +0 -1
  360. package/dist/node_modules/d3-quadtree/src/y.js +0 -11
  361. package/dist/node_modules/d3-quadtree/src/y.js.map +0 -1
  362. package/dist/utils/TextMeasurer.d.ts +0 -8
  363. package/dist/utils/TextMeasurer.d.ts.map +0 -1
  364. package/dist/utils/TextMeasurer.js +0 -27
  365. package/dist/utils/TextMeasurer.js.map +0 -1
@@ -1,37 +1,37 @@
1
- import p from "../node_modules/lodash/lodash.js";
2
- import P from "../node_modules/d3-array/src/deviation.js";
3
- import z from "../node_modules/d3-array/src/mean.js";
4
- import Q from "../node_modules/d3-array/src/extent.js";
5
- const W = 5e5;
6
- function Z(l) {
7
- const r = P(l), i = z(l);
8
- return r === void 0 || i === void 0 || r === 0 ? (f) => f : (f) => (f - i) / r;
1
+ import x from "../node_modules/lodash/lodash.js";
2
+ import J from "../node_modules/d3-array/src/deviation.js";
3
+ import q from "../node_modules/d3-array/src/mean.js";
4
+ import P from "../node_modules/d3-array/src/extent.js";
5
+ const Q = 5e5;
6
+ function W(a) {
7
+ const r = J(a), i = q(a);
8
+ return r === void 0 || i === void 0 || r === 0 ? (y) => y : (y) => (y - i) / r;
9
9
  }
10
- function k(l) {
11
- const r = z(l), [i, f] = Q(l);
12
- return r === void 0 || i === void 0 || f === void 0 || f === i ? (m) => m : (m) => (m - r) / (f - i);
10
+ function Z(a) {
11
+ const r = q(a), [i, y] = P(a);
12
+ return r === void 0 || i === void 0 || y === void 0 || y === i ? (m) => m : (m) => (m - r) / (y - i);
13
13
  }
14
- function w(l, r) {
15
- return l === "standardScaling" ? Z(r) : l === "meanNormalization" ? k(r) : (i) => i;
14
+ function k(a, r) {
15
+ return a === "standardScaling" ? W(r) : a === "meanNormalization" ? Z(r) : (i) => i;
16
16
  }
17
- function D(l) {
18
- if (!l.length)
17
+ function G(a) {
18
+ if (!a.length)
19
19
  return [];
20
20
  let r = [[]];
21
- return l.forEach((i) => {
22
- const f = [];
21
+ return a.forEach((i) => {
22
+ const y = [];
23
23
  i.forEach((m) => {
24
- f.push(...r.map((v) => [...v, m]));
25
- }), r = f;
24
+ y.push(...r.map((g) => [...g, m]));
25
+ }), r = y;
26
26
  }), r;
27
27
  }
28
- function ne(l, r, i, f, m, v, h, M, I, N, E, A) {
29
- const V = l.columnNames.length ? l.getColumn(l.columnNames[0]).length : 0;
30
- V > W && console.error(`Too many cells for graph rendering (${V})`);
31
- const X = m.length ? m.map((e) => l.getColumnCategories(e.value)) : [["null"]], O = v.length ? v.map((e) => l.getColumnCategories(e.value)) : [["null"]], R = h.length ? h.map((e) => l.getColumnCategories(e.value)) : [["null"]], $ = D(X), j = D(O), S = D(R), _ = $.map((e) => e.join("_")), g = j.map((e) => e.join("_")), b = S.map((e) => e.join("_")), t = {
28
+ function ne(a, r, i, y, m, g, K, B, z, I, C, N) {
29
+ const D = a.columnNames.length ? a.getColumn(a.columnNames[0]).length : 0;
30
+ D > Q && console.error(`Too many cells for graph rendering (${D})`);
31
+ const A = m.length ? m.map((e) => a.getColumnCategories(e.value)) : [["null"]], X = g.length ? g.map((e) => a.getColumnCategories(e.value)) : [["null"]], O = K.length ? K.map((e) => a.getColumnCategories(e.value)) : [["null"]], S = G(A), M = G(X), $ = G(O), j = S.map((e) => e.join("_")), E = M.map((e) => e.join("_")), b = $.map((e) => e.join("_")), t = {
32
32
  meta: {
33
- facetKeys: _,
34
- xGroupKeys: g,
33
+ facetKeys: j,
34
+ xGroupKeys: E,
35
35
  yGroupKeys: b,
36
36
  xKeysByGroups: {},
37
37
  yKeysByGroups: {},
@@ -41,89 +41,93 @@ function ne(l, r, i, f, m, v, h, M, I, N, E, A) {
41
41
  yGroupLabels: {},
42
42
  xDataByKeys: {},
43
43
  yDataByKeys: {},
44
- facetKeyValues: _.reduce((e, s, n) => (e[s] = $[n], e), {}),
45
- xGroupKeyValues: g.reduce((e, s, n) => (e[s] = j[n], e), {}),
46
- yGroupKeyValues: b.reduce((e, s, n) => (e[s] = S[n], e), {}),
44
+ facetKeyValues: j.reduce((e, s, o) => (e[s] = S[o], e), {}),
45
+ xGroupKeyValues: E.reduce((e, s, o) => (e[s] = M[o], e), {}),
46
+ yGroupKeyValues: b.reduce((e, s, o) => (e[s] = $[o], e), {}),
47
47
  valueExtent: [1 / 0, -1 / 0]
48
48
  },
49
49
  facets: {}
50
- }, C = r.valueLabels ?? r.value, B = i.valueLabels ?? i.value, Y = M.filter((e) => e.axis === "x").map((e) => e.valueColumn.value), T = M.filter((e) => e.axis === "y").map((e) => e.valueColumn.value), F = Object.values(I ?? {}).map((e) => e.value), U = Object.values(N ?? {}).map((e) => e.value), H = p.uniq([...Y, ...F, C]), J = p.uniq([...T, ...U, B]);
51
- if (l.rows.forEach((e) => {
52
- const s = m.length ? m.map((a) => e[a.value]).join("_") : "null", n = v.length ? v.map((a) => e[a.value]).join("_") : "null", K = h.length ? h.map((a) => e[a.value]).join("_") : "null", L = v.length ? v.map((a) => e[a.valueLabels ?? a.value]).join(", ") : "", G = h.length ? h.map((a) => e[a.valueLabels ?? a.value]).join(", ") : "";
53
- t.meta.xGroupLabels[n] = L, t.meta.yGroupLabels[n] = G;
54
- const o = e[r.value], u = e[i.value], y = e[f.value] ?? A;
55
- if (!(o === null || u === null || y === null)) {
56
- if (t.facets[s] || (t.facets[s] = {
57
- xKeys: [],
58
- yKeys: [],
59
- xKeysByGroups: {},
60
- yKeysByGroups: {},
61
- cells: {}
62
- }), t.facets[s].xKeysByGroups[n] || (t.facets[s].xKeysByGroups[n] = []), t.facets[s].yKeysByGroups[K] || (t.facets[s].yKeysByGroups[K] = []), t.facets[s].xKeys.push(o), t.facets[s].yKeys.push(u), t.facets[s].xKeysByGroups[n].push(o), t.facets[s].yKeysByGroups[K].push(u), t.facets[s].cells[o] || (t.facets[s].cells[o] = {}), t.meta.valueExtent[0] = Math.min(y, t.meta.valueExtent[0]), t.meta.valueExtent[1] = Math.max(y, t.meta.valueExtent[1]), t.facets[s].cells[o][u])
63
- throw Error(`More than 1 value for x=${o}, y=${u}`);
64
- if (t.meta.xLabels[o] && String(e[C]) !== t.meta.xLabels[o])
65
- throw Error(`More than 1 x-label value for x=${o}`);
66
- if (t.meta.yLabels[u] && String(e[B]) !== t.meta.yLabels[u])
67
- throw Error(`More than 1 y-label value for y=${u}`);
68
- t.meta.xLabels[o] = String(e[C]), t.meta.yLabels[u] = String(e[B]), H.forEach((a) => {
69
- const c = typeof t.meta.xDataByKeys[a] < "u", d = c && typeof t.meta.xDataByKeys[a][o] < "u";
70
- if (c || (t.meta.xDataByKeys[a] = {}), d && t.meta.xDataByKeys[a][o] !== e[a])
71
- throw Error(`More than 1 value for x = ${o} and column = ${a}`);
72
- d || (t.meta.xDataByKeys[a][o] = e[a]);
73
- }), J.forEach((a) => {
74
- const c = typeof t.meta.yDataByKeys[a] < "u", d = c && typeof t.meta.yDataByKeys[a][u] < "u";
75
- if (c || (t.meta.yDataByKeys[a] = {}), d && t.meta.yDataByKeys[a][u] !== e[a])
76
- throw Error(`More than 1 value for y = ${u} and column = ${a}`);
77
- d || (t.meta.yDataByKeys[a][u] = e[a]);
78
- }), t.facets[s].cells[o][u] = {
79
- id: `${o}_${u}`,
80
- x: o,
81
- y: u,
82
- value: y,
83
- normalizedValue: y,
84
- data: e
85
- };
86
- }
87
- }), t.meta.facetKeys = t.meta.facetKeys.filter((e) => t.facets[e]), t.meta.facetKeys.forEach((e) => {
50
+ }, _ = r.valueLabels ?? r.value, w = i.valueLabels ?? i.value, R = B.filter((e) => e.axis === "x").map((e) => e.valueColumn.value), Y = B.filter((e) => e.axis === "y").map((e) => e.valueColumn.value), T = Object.values(z ?? {}).map((e) => e.value), F = Object.values(I ?? {}).map((e) => e.value), U = x.uniq([...R, ...T, _]), H = x.uniq([...Y, ...F, w]);
51
+ for (let e = 0; e < a.rowsCount; e++) {
52
+ const s = m.length ? m.map((n) => a.getColumnValue(n.value, e)).join("_") : "null", o = g.length ? g.map((n) => a.getColumnValue(n.value, e)).join("_") : "null", d = K.length ? K.map((n) => a.getColumnValue(n.value, e)).join("_") : "null", V = g.length ? g.map((n) => a.getColumnValue(n.valueLabels ?? n.value, e)).join(", ") : "", L = K.length ? K.map((n) => a.getColumnValue(n.valueLabels ?? n.value, e)).join(", ") : "";
53
+ t.meta.xGroupLabels[o] = V, t.meta.yGroupLabels[o] = L;
54
+ const l = String(a.getColumnValue(r.value, e)), u = String(a.getColumnValue(i.value, e)), f = a.getColumnValue(y.value, e) ?? N;
55
+ if (l === "null" || u === "null" || f === null)
56
+ continue;
57
+ if (t.facets[s] || (t.facets[s] = {
58
+ xKeys: [],
59
+ yKeys: [],
60
+ xKeysByGroups: {},
61
+ yKeysByGroups: {},
62
+ cells: {}
63
+ }), t.facets[s].xKeysByGroups[o] || (t.facets[s].xKeysByGroups[o] = []), t.facets[s].yKeysByGroups[d] || (t.facets[s].yKeysByGroups[d] = []), t.facets[s].xKeys.push(l), t.facets[s].yKeys.push(u), t.facets[s].xKeysByGroups[o].push(l), t.facets[s].yKeysByGroups[d].push(u), t.facets[s].cells[l] || (t.facets[s].cells[l] = {}), t.meta.valueExtent[0] = Math.min(f, t.meta.valueExtent[0]), t.meta.valueExtent[1] = Math.max(f, t.meta.valueExtent[1]), t.facets[s].cells[l][u])
64
+ throw Error(`More than 1 value for x=${l}, y=${u}`);
65
+ const v = a.getColumnValue(_, e);
66
+ if (t.meta.xLabels[l] && String(v) !== t.meta.xLabels[l])
67
+ throw Error(`More than 1 x-label value for x=${l}`);
68
+ const p = a.getColumnValue(w, e);
69
+ if (t.meta.yLabels[u] && String(p) !== t.meta.yLabels[u])
70
+ throw Error(`More than 1 y-label value for y=${u}`);
71
+ t.meta.xLabels[l] = String(v), t.meta.yLabels[u] = String(p), U.forEach((n) => {
72
+ const c = typeof t.meta.xDataByKeys[n] < "u", h = c && typeof t.meta.xDataByKeys[n][l] < "u";
73
+ if (c || (t.meta.xDataByKeys[n] = {}), h && t.meta.xDataByKeys[n][l] !== a.getColumnValue(n, e))
74
+ throw Error(`More than 1 value for x = ${l} and column = ${n}`);
75
+ h || (t.meta.xDataByKeys[n][l] = a.getColumnValue(n, e));
76
+ }), H.forEach((n) => {
77
+ const c = typeof t.meta.yDataByKeys[n] < "u", h = c && typeof t.meta.yDataByKeys[n][u] < "u";
78
+ if (c || (t.meta.yDataByKeys[n] = {}), h && t.meta.yDataByKeys[n][u] !== a.getColumnValue(n, e))
79
+ throw Error(`More than 1 value for y = ${u} and column = ${n}`);
80
+ h || (t.meta.yDataByKeys[n][u] = a.getColumnValue(n, e));
81
+ }), t.facets[s].cells[l][u] = {
82
+ isCell: !0,
83
+ idx: e,
84
+ id: `${l}_${u}`,
85
+ x: l,
86
+ y: u,
87
+ value: f,
88
+ normalizedValue: f
89
+ };
90
+ }
91
+ if (t.meta.facetKeys = t.meta.facetKeys.filter((e) => t.facets[e]), t.meta.facetKeys.forEach((e) => {
88
92
  const s = t.facets[e];
89
- s.xKeys = p.uniq(s.xKeys), s.yKeys = p.uniq(s.yKeys), g.forEach((n) => {
90
- t.facets[e].xKeysByGroups[n] = p.uniq(
91
- t.facets[e].xKeysByGroups[n]
93
+ s.xKeys = x.uniq(s.xKeys), s.yKeys = x.uniq(s.yKeys), E.forEach((o) => {
94
+ t.facets[e].xKeysByGroups[o] = x.uniq(
95
+ t.facets[e].xKeysByGroups[o]
92
96
  );
93
- }), b.forEach((n) => {
94
- t.facets[e].yKeysByGroups[n] = p.uniq(
95
- t.facets[e].yKeysByGroups[n]
97
+ }), b.forEach((o) => {
98
+ t.facets[e].yKeysByGroups[o] = x.uniq(
99
+ t.facets[e].yKeysByGroups[o]
96
100
  );
97
101
  });
98
- }), E) {
102
+ }), C) {
99
103
  const e = [1 / 0, -1 / 0];
100
104
  t.meta.facetKeys.forEach((s) => {
101
- const { xKeys: n, yKeys: K, cells: L } = t.facets[s], G = E.direction === "row" ? n : K, o = E.direction === "row" ? K : n, u = E.direction === "row" ? (y, a) => {
102
- var c;
103
- return (c = L[y]) == null ? void 0 : c[a];
104
- } : (y, a) => {
105
- var c;
106
- return (c = L[a]) == null ? void 0 : c[y];
105
+ const { xKeys: o, yKeys: d, cells: V } = t.facets[s], L = C.direction === "row" ? o : d, l = C.direction === "row" ? d : o, u = C.direction === "row" ? (f, v) => {
106
+ var p;
107
+ return (p = V[f]) == null ? void 0 : p[v];
108
+ } : (f, v) => {
109
+ var p;
110
+ return (p = V[v]) == null ? void 0 : p[f];
107
111
  };
108
- o.forEach((y) => {
109
- const a = [];
110
- G.forEach((d) => {
111
- var q;
112
- const x = (q = u(d, y)) == null ? void 0 : q.value;
113
- x !== void 0 && a.push(x);
112
+ l.forEach((f) => {
113
+ const v = [];
114
+ L.forEach((n) => {
115
+ var h;
116
+ const c = (h = u(n, f)) == null ? void 0 : h.value;
117
+ c !== void 0 && v.push(c);
114
118
  });
115
- const c = w(E.method, a);
116
- G.forEach((d) => {
117
- const x = u(d, y);
118
- x !== void 0 && (x.normalizedValue = c(x.value), e[0] = Math.min(x.normalizedValue, e[0]), e[1] = Math.max(x.normalizedValue, e[1]));
119
+ const p = k(C.method, v);
120
+ L.forEach((n) => {
121
+ const c = u(n, f);
122
+ c !== void 0 && (c.normalizedValue = p(c.value), e[0] = Math.min(c.normalizedValue, e[0]), e[1] = Math.max(c.normalizedValue, e[1]));
119
123
  });
120
124
  });
121
125
  }), t.meta.valueExtent = e;
122
126
  }
123
- return t.meta.xKeysByGroups = g.reduce((e, s) => (e[s] = p.uniq(
124
- p.flatten(t.meta.facetKeys.map((n) => t.facets[n].xKeysByGroups[s]))
125
- ), e), {}), t.meta.yKeysByGroups = b.reduce((e, s) => (e[s] = p.uniq(
126
- p.flatten(t.meta.facetKeys.map((n) => t.facets[n].yKeysByGroups[s]))
127
+ return t.meta.xKeysByGroups = E.reduce((e, s) => (e[s] = x.uniq(
128
+ x.flatten(t.meta.facetKeys.map((o) => t.facets[o].xKeysByGroups[s]))
129
+ ), e), {}), t.meta.yKeysByGroups = b.reduce((e, s) => (e[s] = x.uniq(
130
+ x.flatten(t.meta.facetKeys.map((o) => t.facets[o].yKeysByGroups[s]))
127
131
  ), e), {}), t.meta.valueExtent[0] === 1 / 0 && (t.meta.valueExtent[0] = 0), t.meta.valueExtent[1] === -1 / 0 && (t.meta.valueExtent[1] = 0), t;
128
132
  }
129
133
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"getCells.js","sources":["../../src/heatmap/getCells.ts"],"sourcesContent":["import type {DataFrame} from '../DataFrame';\nimport type {HeatmapSettingsImpl} from './HeatmapSettingsImpl';\nimport type {ColumnName, DataValue, NormalizationMethod} from '../types';\nimport {deviation, extent, mean} from 'd3-array';\nimport lodash from 'lodash';\n\nconst MAX_RENDERED_CELLS_COUNT = 500000;\nfunction normalizeByStd(values:number[]) {\n const stdValue = deviation(values);\n const meanValue = mean(values);\n\n if (stdValue === undefined || meanValue === undefined || stdValue === 0) {\n return (v:number) => v;\n }\n return (v:number) => (v - meanValue) / stdValue;\n}\nfunction normalizeByMinMax(values:number[]) {\n const meanValue = mean(values);\n const [min, max] = extent(values);\n if (meanValue === undefined || min === undefined || max === undefined || max === min) {\n return (v:number) => v;\n }\n return (v:number) => (v - meanValue) / (max - min);\n}\n\nfunction getNormalizationFn(method:NormalizationMethod, values:number[]) {\n if (method === 'standardScaling') {\n return normalizeByStd(values);\n }\n if (method === 'meanNormalization') {\n return normalizeByMinMax(values);\n }\n return (v:number) => v;\n}\n\nexport type Cell = {\n id: string;\n value: DataValue;\n normalizedValue: DataValue;\n x: DataValue;\n y: DataValue;\n data: Record<string, DataValue>;\n};\n\nexport type GroupedCellsData = {\n meta: {\n facetKeys: string[];\n xGroupKeys: string[];\n yGroupKeys: string[];\n xKeysByGroups: Record<string, string[]>;\n yKeysByGroups: Record<string, string[]>;\n // for titles, if facet by more 1 columns title has several values separated by commas\n facetKeyValues: Record<string, string[]>;\n xGroupKeyValues: Record<string, string[]>;\n yGroupKeyValues: Record<string, string[]>;\n xLabels: Record<string, string>;\n yLabels: Record<string, string>;\n xGroupLabels: Record<string, string>;\n yGroupLabels: Record<string, string>;\n valueExtent: [number, number]; // for color scales\n // data for labels, annotations and dendrograms\n xDataByKeys: Record<string, Record<string, DataValue>>;\n yDataByKeys: Record<string, Record<string, DataValue>>;\n };\n //facet groups\n facets: Record<\n string,\n {\n // axis keys\n xKeys: string[];\n yKeys: string[];\n // axis keys grouped by group keys from meta\n xKeysByGroups: Record<string, string[]>;\n yKeysByGroups: Record<string, string[]>;\n // cells grouped by X, then by Y\n cells: Record<string, Record<string, Cell>>;\n }\n >;\n};\n\n// all combinations with 1 key from each list\nfunction getKeysCombinations(keysLists: string[][]) {\n if (!keysLists.length) {\n return [];\n }\n let result: string[][] = [[]];\n keysLists.forEach(keys => {\n const nextResult: string[][] = [];\n keys.forEach(key => {\n nextResult.push(...result.map(resultItem => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\n\nexport function getCells(\n data: DataFrame,\n xColumn: ColumnName,\n yColumn: ColumnName,\n valueColumn: ColumnName,\n facetBy: ColumnName[],\n xGroupBy: ColumnName[],\n yGroupBy: ColumnName[],\n annotations: HeatmapSettingsImpl['annotations'],\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY'],\n normalization: HeatmapSettingsImpl['normalization'],\n NAValueAs: HeatmapSettingsImpl['NAValueAs'],\n): GroupedCellsData {\n const dataSize = data.columnNames.length ? data.getColumn(data.columnNames[0]).length : 0;\n if (dataSize > MAX_RENDERED_CELLS_COUNT) {\n console.error(`Too many cells for graph rendering (${dataSize})`);\n }\n const facetKeysLists = facetBy.length\n ? facetBy.map(column => data.getColumnCategories(column.value))\n : [['null']];\n const xGroupKeysLists = xGroupBy.length\n ? xGroupBy.map(column => data.getColumnCategories(column.value))\n : [['null']];\n const yGroupKeysLists = yGroupBy.length\n ? yGroupBy.map(column => data.getColumnCategories(column.value))\n : [['null']];\n const facetKeysCombinations = getKeysCombinations(facetKeysLists);\n const xGroupKeysCombinations = getKeysCombinations(xGroupKeysLists);\n const yGroupKeysCombinations = getKeysCombinations(yGroupKeysLists);\n\n const facetKeys = facetKeysCombinations.map(keys => keys.join('_'));\n const xGroupKeys = xGroupKeysCombinations.map(keys => keys.join('_'));\n const yGroupKeys = yGroupKeysCombinations.map(keys => keys.join('_'));\n\n const result: GroupedCellsData = {\n meta: {\n facetKeys,\n xGroupKeys,\n yGroupKeys,\n xKeysByGroups: {},\n yKeysByGroups: {},\n xLabels: {},\n yLabels: {},\n xGroupLabels: {},\n yGroupLabels: {},\n xDataByKeys: {},\n yDataByKeys: {},\n facetKeyValues: facetKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = facetKeysCombinations[index];\n return res;\n }, {}),\n xGroupKeyValues: xGroupKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = xGroupKeysCombinations[index];\n return res;\n }, {}),\n yGroupKeyValues: yGroupKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = yGroupKeysCombinations[index];\n return res;\n }, {}),\n valueExtent: [Infinity, -Infinity],\n },\n facets: {},\n };\n\n const xLabelsSource = xColumn.valueLabels ?? xColumn.value;\n const yLabelsSource = yColumn.valueLabels ?? yColumn.value;\n const annotationColumnsX = annotations.filter(item => item.axis === 'x').map(item => item.valueColumn.value);\n const annotationColumnsY = annotations.filter(item => item.axis === 'y').map(item => item.valueColumn.value);\n const dendrogramXColumns = Object.values(dendrogramX ?? {}).map(column => column.value);\n const dendrogramYColumns = Object.values(dendrogramY ?? {}).map(column => column.value);\n const additionalDataColumnsX = lodash.uniq([...annotationColumnsX, ...dendrogramXColumns, xLabelsSource]);\n const additionalDataColumnsY = lodash.uniq([...annotationColumnsY, ...dendrogramYColumns, yLabelsSource]);\n data.rows.forEach(row => {\n const facetKey = facetBy.length ? facetBy.map(column => row[column.value]).join('_') : 'null';\n const xGroupKey = xGroupBy.length ? xGroupBy.map(column => row[column.value]).join('_') : 'null';\n const yGroupKey = yGroupBy.length ? yGroupBy.map(column => row[column.value]).join('_') : 'null';\n const xGroupLabel = xGroupBy.length ? xGroupBy.map(column => row[column.valueLabels ?? column.value]).join(', ') : '';\n const yGroupLabel = yGroupBy.length ? yGroupBy.map(column => row[column.valueLabels ?? column.value]).join(', ') : '';\n result.meta.xGroupLabels[xGroupKey] = xGroupLabel;\n result.meta.yGroupLabels[xGroupKey] = yGroupLabel;\n const x = row[xColumn.value] as string;\n const y = row[yColumn.value] as string;\n const value = (row[valueColumn.value] ?? NAValueAs) as number | null;\n if (x === null || y === null || value === null) {\n return;\n }\n if (!result.facets[facetKey]) {\n result.facets[facetKey] = {\n xKeys: [],\n yKeys: [],\n xKeysByGroups: {},\n yKeysByGroups: {},\n cells: {},\n };\n }\n if (!result.facets[facetKey].xKeysByGroups[xGroupKey]) {\n result.facets[facetKey].xKeysByGroups[xGroupKey] = [];\n }\n if (!result.facets[facetKey].yKeysByGroups[yGroupKey]) {\n result.facets[facetKey].yKeysByGroups[yGroupKey] = [];\n }\n result.facets[facetKey].xKeys.push(x);\n result.facets[facetKey].yKeys.push(y);\n result.facets[facetKey].xKeysByGroups[xGroupKey].push(x);\n result.facets[facetKey].yKeysByGroups[yGroupKey].push(y);\n\n if (!result.facets[facetKey].cells[x]) {\n result.facets[facetKey].cells[x] = {};\n }\n result.meta.valueExtent[0] = Math.min(value, result.meta.valueExtent[0]);\n result.meta.valueExtent[1] = Math.max(value, result.meta.valueExtent[1]);\n if (result.facets[facetKey].cells[x][y]) {\n throw Error(`More than 1 value for x=${x}, y=${y}`);\n }\n if (result.meta.xLabels[x] && String(row[xLabelsSource]) !== result.meta.xLabels[x]) {\n throw Error(`More than 1 x-label value for x=${x}`);\n }\n if (result.meta.yLabels[y] && String(row[yLabelsSource]) !== result.meta.yLabels[y]) {\n throw Error(`More than 1 y-label value for y=${y}`);\n }\n result.meta.xLabels[x] = String(row[xLabelsSource]);\n result.meta.yLabels[y] = String(row[yLabelsSource]);\n // data for labels, annotations and dendrograms by X\n additionalDataColumnsX.forEach(columnKey => {\n const isAddedColumn = typeof result.meta.xDataByKeys[columnKey] !== 'undefined';\n const isAddedValue = isAddedColumn && typeof result.meta.xDataByKeys[columnKey][x] !== 'undefined';\n if (!isAddedColumn) {\n result.meta.xDataByKeys[columnKey] = {};\n }\n if (isAddedValue && result.meta.xDataByKeys[columnKey][x] !== row[columnKey]) {\n throw Error(`More than 1 value for x = ${x} and column = ${columnKey}`);\n }\n if (!isAddedValue) {\n result.meta.xDataByKeys[columnKey][x] = row[columnKey];\n }\n });\n // data for labels, annotations and dendrograms by Y\n additionalDataColumnsY.forEach(columnKey => {\n const isAddedColumn = typeof result.meta.yDataByKeys[columnKey] !== 'undefined';\n const isAddedValue = isAddedColumn && typeof result.meta.yDataByKeys[columnKey][y] !== 'undefined';\n if (!isAddedColumn) {\n result.meta.yDataByKeys[columnKey] = {};\n }\n if (isAddedValue && result.meta.yDataByKeys[columnKey][y] !== row[columnKey]) {\n throw Error(`More than 1 value for y = ${y} and column = ${columnKey}`);\n }\n if (!isAddedValue) {\n result.meta.yDataByKeys[columnKey][y] = row[columnKey];\n }\n });\n result.facets[facetKey].cells[x][y] = {\n id: `${x}_${y}`,\n x,\n y,\n value,\n normalizedValue: value,\n data: row,\n };\n });\n result.meta.facetKeys = result.meta.facetKeys.filter((key) => result.facets[key]); // filter only used;\n\n // make uniq x, y, x-group and y-group keys\n result.meta.facetKeys.forEach(facetKey => {\n const facet = result.facets[facetKey];\n facet.xKeys = lodash.uniq(facet.xKeys);\n facet.yKeys = lodash.uniq(facet.yKeys);\n xGroupKeys.forEach(xGroupKey => {\n result.facets[facetKey].xKeysByGroups[xGroupKey] = lodash.uniq(\n result.facets[facetKey].xKeysByGroups[xGroupKey]\n );\n });\n yGroupKeys.forEach(yGroupKey => {\n result.facets[facetKey].yKeysByGroups[yGroupKey] = lodash.uniq(\n result.facets[facetKey].yKeysByGroups[yGroupKey]\n );\n });\n });\n\n if (normalization) {\n const valueExtent = [Infinity, -Infinity] as [number, number];\n result.meta.facetKeys.forEach(facetKey => {\n const {xKeys, yKeys, cells} = result.facets[facetKey];\n const cellKeys = normalization.direction === 'row' ? xKeys : yKeys;\n const groupKeys = normalization.direction === 'row' ? yKeys : xKeys;\n const cellGetter = normalization.direction === 'row'\n ? (cellKey:string, groupKey:string) => cells[cellKey]?.[groupKey]\n : (cellKey:string, groupKey:string) => cells[groupKey]?.[cellKey];\n groupKeys.forEach((groupKey) => {\n const values:number[] = [];\n cellKeys.forEach((cellKey) => {\n const v = cellGetter(cellKey, groupKey)?.value;\n if (v !== undefined) {\n values.push(v as number);\n }\n });\n const normalize = getNormalizationFn(normalization.method, values);\n cellKeys.forEach((cellKey) => {\n const cell = cellGetter(cellKey, groupKey);\n if (cell !== undefined) {\n cell.normalizedValue = normalize(cell.value as number);\n valueExtent[0] = Math.min(cell.normalizedValue, valueExtent[0]);\n valueExtent[1] = Math.max(cell.normalizedValue, valueExtent[1]);\n }\n });\n });\n });\n result.meta.valueExtent = valueExtent;\n }\n\n // every facet may contain not all of available keys, but for shared axes it is necessary to have all of them\n result.meta.xKeysByGroups = xGroupKeys.reduce((res: Record<string, string[]>, xGroupKey) => {\n res[xGroupKey] = lodash.uniq(\n lodash.flatten(result.meta.facetKeys.map(facetKey => result.facets[facetKey].xKeysByGroups[xGroupKey]))\n );\n return res;\n }, {});\n result.meta.yKeysByGroups = yGroupKeys.reduce((res: Record<string, string[]>, yGroupKey) => {\n res[yGroupKey] = lodash.uniq(\n lodash.flatten(result.meta.facetKeys.map(facetKey => result.facets[facetKey].yKeysByGroups[yGroupKey]))\n );\n return res;\n }, {});\n\n // avoid render errors on empty data\n if (result.meta.valueExtent[0] === Infinity) {\n result.meta.valueExtent[0] = 0;\n }\n if (result.meta.valueExtent[1] === -Infinity) {\n result.meta.valueExtent[1] = 0;\n }\n\n return result;\n}\n"],"names":["MAX_RENDERED_CELLS_COUNT","normalizeByStd","values","stdValue","deviation","meanValue","mean","v","normalizeByMinMax","min","max","extent","getNormalizationFn","method","getKeysCombinations","keysLists","result","keys","nextResult","key","resultItem","getCells","data","xColumn","yColumn","valueColumn","facetBy","xGroupBy","yGroupBy","annotations","dendrogramX","dendrogramY","normalization","NAValueAs","dataSize","facetKeysLists","column","xGroupKeysLists","yGroupKeysLists","facetKeysCombinations","xGroupKeysCombinations","yGroupKeysCombinations","facetKeys","xGroupKeys","yGroupKeys","res","index","xLabelsSource","yLabelsSource","annotationColumnsX","item","annotationColumnsY","dendrogramXColumns","dendrogramYColumns","additionalDataColumnsX","lodash","additionalDataColumnsY","row","facetKey","xGroupKey","yGroupKey","xGroupLabel","yGroupLabel","x","y","value","columnKey","isAddedColumn","isAddedValue","facet","valueExtent","xKeys","yKeys","cells","cellKeys","groupKeys","cellGetter","cellKey","groupKey","_a","normalize","cell"],"mappings":"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"}
1
+ {"version":3,"file":"getCells.js","sources":["../../src/heatmap/getCells.ts"],"sourcesContent":["import { deviation, extent, mean } from 'd3-array';\nimport lodash from 'lodash';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue, NormalizationMethod } from '../types';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\n\nconst MAX_RENDERED_CELLS_COUNT = 500000;\nfunction normalizeByStd(values:number[]) {\n const stdValue = deviation(values);\n const meanValue = mean(values);\n\n if (stdValue === undefined || meanValue === undefined || stdValue === 0) {\n return (v:number) => v;\n }\n return (v:number) => (v - meanValue) / stdValue;\n}\nfunction normalizeByMinMax(values:number[]) {\n const meanValue = mean(values);\n const [min, max] = extent(values);\n if (meanValue === undefined || min === undefined || max === undefined || max === min) {\n return (v:number) => v;\n }\n return (v:number) => (v - meanValue) / (max - min);\n}\n\nfunction getNormalizationFn(method:NormalizationMethod, values:number[]) {\n if (method === 'standardScaling') {\n return normalizeByStd(values);\n }\n if (method === 'meanNormalization') {\n return normalizeByMinMax(values);\n }\n return (v:number) => v;\n}\n\nexport type Cell = {\n isCell: true;\n idx: number;\n id: string;\n value: DataValue;\n normalizedValue: DataValue;\n x: DataValue;\n y: DataValue;\n};\n\nexport type GroupedCellsData = {\n meta: {\n facetKeys: string[];\n xGroupKeys: string[];\n yGroupKeys: string[];\n xKeysByGroups: Record<string, string[]>;\n yKeysByGroups: Record<string, string[]>;\n // for titles, if facet by more 1 columns title has several values separated by commas\n facetKeyValues: Record<string, string[]>;\n xGroupKeyValues: Record<string, string[]>;\n yGroupKeyValues: Record<string, string[]>;\n xLabels: Record<string, string>;\n yLabels: Record<string, string>;\n xGroupLabels: Record<string, string>;\n yGroupLabels: Record<string, string>;\n valueExtent: [number, number]; // for color scales\n // data for labels, annotations and dendrograms\n xDataByKeys: Record<string, Record<string, DataValue>>;\n yDataByKeys: Record<string, Record<string, DataValue>>;\n };\n //facet groups\n facets: Record<\n string,\n {\n // axis keys\n xKeys: string[];\n yKeys: string[];\n // axis keys grouped by group keys from meta\n xKeysByGroups: Record<string, string[]>;\n yKeysByGroups: Record<string, string[]>;\n // cells grouped by X, then by Y\n cells: Record<string, Record<string, Cell>>;\n }\n >;\n};\n\n// all combinations with 1 key from each list\nfunction getKeysCombinations(keysLists: string[][]) {\n if (!keysLists.length) {\n return [];\n }\n let result: string[][] = [[]];\n keysLists.forEach(keys => {\n const nextResult: string[][] = [];\n keys.forEach(key => {\n nextResult.push(...result.map(resultItem => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\n\nexport function getCells(\n data: DataFrame,\n xColumn: ColumnName,\n yColumn: ColumnName,\n valueColumn: ColumnName,\n facetBy: ColumnName[],\n xGroupBy: ColumnName[],\n yGroupBy: ColumnName[],\n annotations: HeatmapSettingsImpl['annotations'],\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY'],\n normalization: HeatmapSettingsImpl['normalization'],\n NAValueAs: HeatmapSettingsImpl['NAValueAs'],\n): GroupedCellsData {\n const dataSize = data.columnNames.length ? data.getColumn(data.columnNames[0]).length : 0;\n if (dataSize > MAX_RENDERED_CELLS_COUNT) {\n console.error(`Too many cells for graph rendering (${dataSize})`);\n }\n const facetKeysLists = facetBy.length\n ? facetBy.map(column => data.getColumnCategories(column.value))\n : [['null']];\n const xGroupKeysLists = xGroupBy.length\n ? xGroupBy.map(column => data.getColumnCategories(column.value))\n : [['null']];\n const yGroupKeysLists = yGroupBy.length\n ? yGroupBy.map(column => data.getColumnCategories(column.value))\n : [['null']];\n const facetKeysCombinations = getKeysCombinations(facetKeysLists);\n const xGroupKeysCombinations = getKeysCombinations(xGroupKeysLists);\n const yGroupKeysCombinations = getKeysCombinations(yGroupKeysLists);\n\n const facetKeys = facetKeysCombinations.map(keys => keys.join('_'));\n const xGroupKeys = xGroupKeysCombinations.map(keys => keys.join('_'));\n const yGroupKeys = yGroupKeysCombinations.map(keys => keys.join('_'));\n\n const result: GroupedCellsData = {\n meta: {\n facetKeys,\n xGroupKeys,\n yGroupKeys,\n xKeysByGroups: {},\n yKeysByGroups: {},\n xLabels: {},\n yLabels: {},\n xGroupLabels: {},\n yGroupLabels: {},\n xDataByKeys: {},\n yDataByKeys: {},\n facetKeyValues: facetKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = facetKeysCombinations[index];\n return res;\n }, {}),\n xGroupKeyValues: xGroupKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = xGroupKeysCombinations[index];\n return res;\n }, {}),\n yGroupKeyValues: yGroupKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = yGroupKeysCombinations[index];\n return res;\n }, {}),\n valueExtent: [Infinity, -Infinity],\n },\n facets: {},\n };\n\n const xLabelsSource = xColumn.valueLabels ?? xColumn.value;\n const yLabelsSource = yColumn.valueLabels ?? yColumn.value;\n const annotationColumnsX = annotations.filter(item => item.axis === 'x').map(item => item.valueColumn.value);\n const annotationColumnsY = annotations.filter(item => item.axis === 'y').map(item => item.valueColumn.value);\n const dendrogramXColumns = Object.values(dendrogramX ?? {}).map(column => column.value);\n const dendrogramYColumns = Object.values(dendrogramY ?? {}).map(column => column.value);\n const additionalDataColumnsX = lodash.uniq([...annotationColumnsX, ...dendrogramXColumns, xLabelsSource]);\n const additionalDataColumnsY = lodash.uniq([...annotationColumnsY, ...dendrogramYColumns, yLabelsSource]);\n\n for (let i = 0; i < data.rowsCount; i++) {\n const facetKey = facetBy.length ? facetBy.map(column => data.getColumnValue(column.value, i)).join('_') : 'null';\n const xGroupKey = xGroupBy.length ? xGroupBy.map(column => data.getColumnValue(column.value, i)).join('_') : 'null';\n const yGroupKey = yGroupBy.length ? yGroupBy.map(column => data.getColumnValue(column.value, i)).join('_') : 'null';\n const xGroupLabel = xGroupBy.length ? xGroupBy.map(column => data.getColumnValue(column.valueLabels ?? column.value, i)).join(', ') : '';\n const yGroupLabel = yGroupBy.length ? yGroupBy.map(column => data.getColumnValue(column.valueLabels ?? column.value, i)).join(', ') : '';\n result.meta.xGroupLabels[xGroupKey] = xGroupLabel;\n result.meta.yGroupLabels[xGroupKey] = yGroupLabel;\n const x = String(data.getColumnValue(xColumn.value, i));\n const y = String(data.getColumnValue(yColumn.value, i));\n const value = (data.getColumnValue(valueColumn.value, i) ?? NAValueAs) as number | null;\n \n if (x === 'null' || y === 'null' || value === null) {\n continue;\n }\n\n if (!result.facets[facetKey]) {\n result.facets[facetKey] = {\n xKeys: [],\n yKeys: [],\n xKeysByGroups: {},\n yKeysByGroups: {},\n cells: {},\n };\n }\n if (!result.facets[facetKey].xKeysByGroups[xGroupKey]) {\n result.facets[facetKey].xKeysByGroups[xGroupKey] = [];\n }\n if (!result.facets[facetKey].yKeysByGroups[yGroupKey]) {\n result.facets[facetKey].yKeysByGroups[yGroupKey] = [];\n }\n result.facets[facetKey].xKeys.push(x);\n result.facets[facetKey].yKeys.push(y);\n result.facets[facetKey].xKeysByGroups[xGroupKey].push(x);\n result.facets[facetKey].yKeysByGroups[yGroupKey].push(y);\n\n if (!result.facets[facetKey].cells[x]) {\n result.facets[facetKey].cells[x] = {};\n }\n result.meta.valueExtent[0] = Math.min(value, result.meta.valueExtent[0]);\n result.meta.valueExtent[1] = Math.max(value, result.meta.valueExtent[1]);\n if (result.facets[facetKey].cells[x][y]) {\n throw Error(`More than 1 value for x=${x}, y=${y}`);\n }\n const xLabelsSourceValue = data.getColumnValue(xLabelsSource, i);\n if (result.meta.xLabels[x] && String(xLabelsSourceValue) !== result.meta.xLabels[x]) {\n throw Error(`More than 1 x-label value for x=${x}`);\n }\n const yLabelsSourceValue = data.getColumnValue(yLabelsSource, i);\n if (result.meta.yLabels[y] && String(yLabelsSourceValue) !== result.meta.yLabels[y]) {\n throw Error(`More than 1 y-label value for y=${y}`);\n }\n result.meta.xLabels[x] = String(xLabelsSourceValue);\n result.meta.yLabels[y] = String(yLabelsSourceValue);\n // data for labels, annotations and dendrograms by X\n additionalDataColumnsX.forEach(columnKey => {\n const isAddedColumn = typeof result.meta.xDataByKeys[columnKey] !== 'undefined';\n const isAddedValue = isAddedColumn && typeof result.meta.xDataByKeys[columnKey][x] !== 'undefined';\n if (!isAddedColumn) {\n result.meta.xDataByKeys[columnKey] = {};\n }\n if (isAddedValue && result.meta.xDataByKeys[columnKey][x] !== data.getColumnValue(columnKey, i)) {\n throw Error(`More than 1 value for x = ${x} and column = ${columnKey}`);\n }\n if (!isAddedValue) {\n result.meta.xDataByKeys[columnKey][x] = data.getColumnValue(columnKey, i);\n }\n });\n // data for labels, annotations and dendrograms by Y\n additionalDataColumnsY.forEach(columnKey => {\n const isAddedColumn = typeof result.meta.yDataByKeys[columnKey] !== 'undefined';\n const isAddedValue = isAddedColumn && typeof result.meta.yDataByKeys[columnKey][y] !== 'undefined';\n if (!isAddedColumn) {\n result.meta.yDataByKeys[columnKey] = {};\n }\n if (isAddedValue && result.meta.yDataByKeys[columnKey][y] !== data.getColumnValue(columnKey, i)) {\n throw Error(`More than 1 value for y = ${y} and column = ${columnKey}`);\n }\n if (!isAddedValue) {\n result.meta.yDataByKeys[columnKey][y] = data.getColumnValue(columnKey, i);\n }\n });\n result.facets[facetKey].cells[x][y] = {\n isCell: true,\n idx: i,\n id: `${x}_${y}`,\n x,\n y,\n value,\n normalizedValue: value,\n };\n }\n\n result.meta.facetKeys = result.meta.facetKeys.filter((key) => result.facets[key]); // filter only used;\n\n // make uniq x, y, x-group and y-group keys\n result.meta.facetKeys.forEach(facetKey => {\n const facet = result.facets[facetKey];\n facet.xKeys = lodash.uniq(facet.xKeys);\n facet.yKeys = lodash.uniq(facet.yKeys);\n xGroupKeys.forEach(xGroupKey => {\n result.facets[facetKey].xKeysByGroups[xGroupKey] = lodash.uniq(\n result.facets[facetKey].xKeysByGroups[xGroupKey]\n );\n });\n yGroupKeys.forEach(yGroupKey => {\n result.facets[facetKey].yKeysByGroups[yGroupKey] = lodash.uniq(\n result.facets[facetKey].yKeysByGroups[yGroupKey]\n );\n });\n });\n\n if (normalization) {\n const valueExtent = [Infinity, -Infinity] as [number, number];\n result.meta.facetKeys.forEach(facetKey => {\n const {xKeys, yKeys, cells} = result.facets[facetKey];\n const cellKeys = normalization.direction === 'row' ? xKeys : yKeys;\n const groupKeys = normalization.direction === 'row' ? yKeys : xKeys;\n const cellGetter = normalization.direction === 'row'\n ? (cellKey:string, groupKey:string) => cells[cellKey]?.[groupKey]\n : (cellKey:string, groupKey:string) => cells[groupKey]?.[cellKey];\n groupKeys.forEach((groupKey) => {\n const values:number[] = [];\n cellKeys.forEach((cellKey) => {\n const v = cellGetter(cellKey, groupKey)?.value;\n if (v !== undefined) {\n values.push(v as number);\n }\n });\n const normalize = getNormalizationFn(normalization.method, values);\n cellKeys.forEach((cellKey) => {\n const cell = cellGetter(cellKey, groupKey);\n if (cell !== undefined) {\n cell.normalizedValue = normalize(cell.value as number);\n valueExtent[0] = Math.min(cell.normalizedValue, valueExtent[0]);\n valueExtent[1] = Math.max(cell.normalizedValue, valueExtent[1]);\n }\n });\n });\n });\n result.meta.valueExtent = valueExtent;\n }\n\n // every facet may contain not all of available keys, but for shared axes it is necessary to have all of them\n result.meta.xKeysByGroups = xGroupKeys.reduce((res: Record<string, string[]>, xGroupKey) => {\n res[xGroupKey] = lodash.uniq(\n lodash.flatten(result.meta.facetKeys.map(facetKey => result.facets[facetKey].xKeysByGroups[xGroupKey]))\n );\n return res;\n }, {});\n result.meta.yKeysByGroups = yGroupKeys.reduce((res: Record<string, string[]>, yGroupKey) => {\n res[yGroupKey] = lodash.uniq(\n lodash.flatten(result.meta.facetKeys.map(facetKey => result.facets[facetKey].yKeysByGroups[yGroupKey]))\n );\n return res;\n }, {});\n\n // avoid render errors on empty data\n if (result.meta.valueExtent[0] === Infinity) {\n result.meta.valueExtent[0] = 0;\n }\n if (result.meta.valueExtent[1] === -Infinity) {\n result.meta.valueExtent[1] = 0;\n }\n\n return result;\n}\n"],"names":["MAX_RENDERED_CELLS_COUNT","normalizeByStd","values","stdValue","deviation","meanValue","mean","v","normalizeByMinMax","min","max","extent","getNormalizationFn","method","getKeysCombinations","keysLists","result","keys","nextResult","key","resultItem","getCells","data","xColumn","yColumn","valueColumn","facetBy","xGroupBy","yGroupBy","annotations","dendrogramX","dendrogramY","normalization","NAValueAs","dataSize","facetKeysLists","column","xGroupKeysLists","yGroupKeysLists","facetKeysCombinations","xGroupKeysCombinations","yGroupKeysCombinations","facetKeys","xGroupKeys","yGroupKeys","res","index","xLabelsSource","yLabelsSource","annotationColumnsX","item","annotationColumnsY","dendrogramXColumns","dendrogramYColumns","additionalDataColumnsX","lodash","additionalDataColumnsY","i","facetKey","xGroupKey","yGroupKey","xGroupLabel","yGroupLabel","x","y","value","xLabelsSourceValue","yLabelsSourceValue","columnKey","isAddedColumn","isAddedValue","facet","valueExtent","xKeys","yKeys","cells","cellKeys","groupKeys","cellGetter","cellKey","groupKey","_a","normalize","cell"],"mappings":"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"}
@@ -3,8 +3,8 @@ import { GroupedCellsData } from './getCells';
3
3
  import { HeatmapSettingsImpl } from './HeatmapSettingsImpl';
4
4
  import { HierarchyNode } from 'd3-hierarchy';
5
5
  export type DendrogramsData = Record<string, {
6
- hierarchyX: HierarchyNode<Cluster>[];
7
- hierarchyY: HierarchyNode<Cluster>[];
6
+ hierarchyByGroupX: Record<string, HierarchyNode<Cluster>>;
7
+ hierarchyByGroupY: Record<string, HierarchyNode<Cluster>>;
8
8
  }>;
9
9
  export declare function getDendrograms(groupedCellsData: GroupedCellsData, dendrogramX: HeatmapSettingsImpl['dendrogramX'], dendrogramY: HeatmapSettingsImpl['dendrogramY'], facetSettings: HeatmapSettingsImpl['facetSettings']): DendrogramsData;
10
10
  //# sourceMappingURL=getDendrograms.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getDendrograms.d.ts","sourceRoot":"","sources":["../../src/heatmap/getDendrograms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAE/D,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAGhD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE;IACzC,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;CACxC,CAAC,CAAA;AAEF,wBAAgB,cAAc,CAC1B,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,GACpD,eAAe,CA4DjB"}
1
+ {"version":3,"file":"getDendrograms.d.ts","sourceRoot":"","sources":["../../src/heatmap/getDendrograms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAE/D,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAGhD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE;IACzC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;CAC7D,CAAC,CAAA;AAEF,wBAAgB,cAAc,CAC1B,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,GACpD,eAAe,CAwDjB"}
@@ -1,48 +1,48 @@
1
1
  import { getClusters as x } from "./getClusters.js";
2
- import m from "../node_modules/d3-hierarchy/src/hierarchy/index.js";
3
- function z(e, y, n, k) {
4
- const { facetKeys: G, xGroupKeys: B, yGroupKeys: E } = e.meta, K = {};
5
- if (y && k.sharedX)
2
+ import B from "../node_modules/d3-hierarchy/src/hierarchy/index.js";
3
+ function w(e, o, a, K) {
4
+ const { facetKeys: G, xGroupKeys: k, yGroupKeys: m } = e.meta, p = {};
5
+ if (o && K.sharedX)
6
6
  throw Error("Dendrogram on X axis is not available with shared by facets X axis");
7
- return G.forEach((c) => {
8
- const u = {
9
- hierarchyX: [],
10
- hierarchyY: []
11
- }, o = e.facets[c];
12
- if (y) {
13
- const r = [], i = [];
14
- B.forEach((s) => {
15
- const h = o.xKeysByGroups[s], p = o.yKeys, t = x(
16
- h,
17
- h.map((l) => p.map((f) => {
18
- var a;
19
- return ((a = o.cells[l][f]) == null ? void 0 : a.normalizedValue) ?? y.fillNA;
7
+ return G.forEach((y) => {
8
+ const n = {
9
+ hierarchyByGroupX: {},
10
+ hierarchyByGroupY: {}
11
+ }, c = e.facets[y];
12
+ if (o) {
13
+ const r = [];
14
+ k.forEach((s) => {
15
+ const i = c.xKeysByGroups[s], u = c.yKeys, t = x(
16
+ i,
17
+ i.map((f) => u.map((l) => {
18
+ var h;
19
+ return ((h = c.cells[f][l]) == null ? void 0 : h.normalizedValue) ?? o.fillNA;
20
20
  })),
21
- y.distance,
22
- y.linkage
21
+ o.distance,
22
+ o.linkage
23
23
  );
24
- e.facets[c].xKeysByGroups[s] = t.keys, i.push(...t.keys), r.push(t);
25
- }), e.facets[c].xKeys = i, u.hierarchyX = r.map((s) => m(s));
24
+ e.facets[y].xKeysByGroups[s] = t.keys, r.push(...t.keys), n.hierarchyByGroupX[s] = B(t);
25
+ }), e.facets[y].xKeys = r;
26
26
  }
27
- if (n) {
28
- const r = [], i = [];
29
- E.forEach((s) => {
30
- const h = o.yKeysByGroups[s], p = o.xKeys, t = x(
31
- h,
32
- h.map((l) => p.map((f) => {
33
- var a;
34
- return ((a = o.cells[f][l]) == null ? void 0 : a.normalizedValue) ?? n.fillNA;
27
+ if (a) {
28
+ const r = [];
29
+ m.forEach((s) => {
30
+ const i = c.yKeysByGroups[s], u = c.xKeys, t = x(
31
+ i,
32
+ i.map((f) => u.map((l) => {
33
+ var h;
34
+ return ((h = c.cells[l][f]) == null ? void 0 : h.normalizedValue) ?? a.fillNA;
35
35
  })),
36
- n.distance,
37
- n.linkage
36
+ a.distance,
37
+ a.linkage
38
38
  );
39
- e.facets[c].yKeysByGroups[s] = t.keys, i.push(...t.keys), r.push(t);
40
- }), e.facets[c].yKeys = i, u.hierarchyY = r.map((s) => m(s));
39
+ e.facets[y].yKeysByGroups[s] = t.keys, r.push(...t.keys), n.hierarchyByGroupY[s] = B(t);
40
+ }), e.facets[y].yKeys = r;
41
41
  }
42
- K[c] = u;
43
- }), K;
42
+ p[y] = n;
43
+ }), p;
44
44
  }
45
45
  export {
46
- z as getDendrograms
46
+ w as getDendrograms
47
47
  };
48
48
  //# sourceMappingURL=getDendrograms.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getDendrograms.js","sources":["../../src/heatmap/getDendrograms.ts"],"sourcesContent":["import type {Cluster} from './components/types';\nimport type {GroupedCellsData} from './getCells';\nimport type {HeatmapSettingsImpl} from './HeatmapSettingsImpl';\nimport {getClusters} from './getClusters';\nimport type {HierarchyNode} from 'd3-hierarchy';\nimport {hierarchy} from 'd3-hierarchy';\n\nexport type DendrogramsData = Record<string, {\n hierarchyX: HierarchyNode<Cluster>[];\n hierarchyY: HierarchyNode<Cluster>[];\n}>\n\nexport function getDendrograms(\n groupedCellsData: GroupedCellsData,\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY'],\n facetSettings: HeatmapSettingsImpl['facetSettings']\n): DendrogramsData {\n const {facetKeys, xGroupKeys, yGroupKeys} = groupedCellsData.meta;\n const result:DendrogramsData = {};\n\n if (dendrogramX && facetSettings.sharedX) {\n throw Error('Dendrogram on X axis is not available with shared by facets X axis');\n }\n\n facetKeys.forEach(facetKey => {\n const facetResult: DendrogramsData[string] = {\n hierarchyX: [],\n hierarchyY: [],\n };\n const cellsGroup = groupedCellsData.facets[facetKey];\n if (dendrogramX) {\n const groupClusters:Cluster[] = [];\n const updatedXKeys:string[] = [];\n xGroupKeys.forEach(xGroupKey => {\n const xKeys = cellsGroup.xKeysByGroups[xGroupKey];\n const yKeys = cellsGroup.yKeys;\n const rootCluster = getClusters(\n xKeys,\n xKeys.map(x => yKeys.map(y => (cellsGroup.cells[x][y]?.normalizedValue ?? dendrogramX.fillNA) as number)),\n dendrogramX.distance,\n dendrogramX.linkage\n );\n //set sorted group keys\n groupedCellsData.facets[facetKey].xKeysByGroups[xGroupKey] = rootCluster.keys;\n updatedXKeys.push(...rootCluster.keys);\n groupClusters.push(rootCluster);\n });\n // set sorted group keys of all groups\n groupedCellsData.facets[facetKey].xKeys = updatedXKeys;\n facetResult.hierarchyX = groupClusters.map((item) => hierarchy(item));\n }\n if (dendrogramY) {\n const groupClusters:Cluster[] = [];\n const updatedYKeys:string[] = [];\n yGroupKeys.forEach(yGroupKey => {\n const yKeys = cellsGroup.yKeysByGroups[yGroupKey];\n const xKeys = cellsGroup.xKeys;\n const rootCluster = getClusters(\n yKeys,\n yKeys.map(y => xKeys.map(x => (cellsGroup.cells[x][y]?.normalizedValue ?? dendrogramY.fillNA) as number)),\n dendrogramY.distance,\n dendrogramY.linkage\n );\n //set sorted group keys\n groupedCellsData.facets[facetKey].yKeysByGroups[yGroupKey] = rootCluster.keys;\n updatedYKeys.push(...rootCluster.keys);\n groupClusters.push(rootCluster);\n });\n // set sorted group keys of all groups\n groupedCellsData.facets[facetKey].yKeys = updatedYKeys;\n facetResult.hierarchyY = groupClusters.map((item) => hierarchy(item));\n }\n result[facetKey] = facetResult;\n });\n\n return result;\n}\n"],"names":["getDendrograms","groupedCellsData","dendrogramX","dendrogramY","facetSettings","facetKeys","xGroupKeys","yGroupKeys","result","facetKey","facetResult","cellsGroup","groupClusters","updatedXKeys","xGroupKey","xKeys","yKeys","rootCluster","getClusters","x","y","_a","item","hierarchy","updatedYKeys","yGroupKey"],"mappings":";;AAYO,SAASA,EACZC,GACAC,GACAC,GACAC,GACe;AACf,QAAM,EAAC,WAAAC,GAAW,YAAAC,GAAY,YAAAC,EAAA,IAAcN,EAAiB,MACvDO,IAAyB,CAAA;AAE/B,MAAIN,KAAeE,EAAc;AAC7B,UAAM,MAAM,oEAAoE;AAGpF,SAAAC,EAAU,QAAQ,CAAAI,MAAY;AAC1B,UAAMC,IAAuC;AAAA,MACzC,YAAY,CAAA;AAAA,MACZ,YAAY,CAAA;AAAA,IAAC,GAEXC,IAAaV,EAAiB,OAAOQ,CAAQ;AACnD,QAAIP,GAAa;AACb,YAAMU,IAA0B,CAAA,GAC1BC,IAAwB,CAAA;AAC9B,MAAAP,EAAW,QAAQ,CAAAQ,MAAa;AAC5B,cAAMC,IAAQJ,EAAW,cAAcG,CAAS,GAC1CE,IAAQL,EAAW,OACnBM,IAAcC;AAAA,UAChBH;AAAA,UACAA,EAAM,IAAI,CAAAI,MAAKH,EAAM,IAAI,CAAAI,MAAA;;AAAM,qBAAAC,IAAAV,EAAW,MAAMQ,CAAC,EAAEC,CAAC,MAArB,gBAAAC,EAAwB,oBAAmBnB,EAAY;AAAA,WAAiB,CAAC;AAAA,UACxGA,EAAY;AAAA,UACZA,EAAY;AAAA,QAAA;AAGhB,QAAAD,EAAiB,OAAOQ,CAAQ,EAAE,cAAcK,CAAS,IAAIG,EAAY,MACzEJ,EAAa,KAAK,GAAGI,EAAY,IAAI,GACrCL,EAAc,KAAKK,CAAW;AAAA,MAClC,CAAC,GAEDhB,EAAiB,OAAOQ,CAAQ,EAAE,QAAQI,GAC1CH,EAAY,aAAaE,EAAc,IAAI,CAACU,MAASC,EAAUD,CAAI,CAAC;AAAA,IACxE;AACA,QAAInB,GAAa;AACb,YAAMS,IAA0B,CAAA,GAC1BY,IAAwB,CAAA;AAC9B,MAAAjB,EAAW,QAAQ,CAAAkB,MAAa;AAC5B,cAAMT,IAAQL,EAAW,cAAcc,CAAS,GAC1CV,IAAQJ,EAAW,OACnBM,IAAcC;AAAA,UAChBF;AAAA,UACAA,EAAM,IAAI,CAAAI,MAAKL,EAAM,IAAI,CAAAI,MAAA;;AAAM,qBAAAE,IAAAV,EAAW,MAAMQ,CAAC,EAAEC,CAAC,MAArB,gBAAAC,EAAwB,oBAAmBlB,EAAY;AAAA,WAAiB,CAAC;AAAA,UACxGA,EAAY;AAAA,UACZA,EAAY;AAAA,QAAA;AAGhB,QAAAF,EAAiB,OAAOQ,CAAQ,EAAE,cAAcgB,CAAS,IAAIR,EAAY,MACzEO,EAAa,KAAK,GAAGP,EAAY,IAAI,GACrCL,EAAc,KAAKK,CAAW;AAAA,MAClC,CAAC,GAEDhB,EAAiB,OAAOQ,CAAQ,EAAE,QAAQe,GAC1Cd,EAAY,aAAaE,EAAc,IAAI,CAACU,MAASC,EAAUD,CAAI,CAAC;AAAA,IACxE;AACA,IAAAd,EAAOC,CAAQ,IAAIC;AAAA,EACvB,CAAC,GAEMF;AACX;"}
1
+ {"version":3,"file":"getDendrograms.js","sources":["../../src/heatmap/getDendrograms.ts"],"sourcesContent":["import type {Cluster} from './components/types';\nimport type {GroupedCellsData} from './getCells';\nimport type {HeatmapSettingsImpl} from './HeatmapSettingsImpl';\nimport {getClusters} from './getClusters';\nimport type {HierarchyNode} from 'd3-hierarchy';\nimport {hierarchy} from 'd3-hierarchy';\n\nexport type DendrogramsData = Record<string, {\n hierarchyByGroupX: Record<string, HierarchyNode<Cluster>>;\n hierarchyByGroupY: Record<string, HierarchyNode<Cluster>>;\n}>\n\nexport function getDendrograms(\n groupedCellsData: GroupedCellsData,\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY'],\n facetSettings: HeatmapSettingsImpl['facetSettings']\n): DendrogramsData {\n const {facetKeys, xGroupKeys, yGroupKeys} = groupedCellsData.meta;\n const result:DendrogramsData = {};\n\n if (dendrogramX && facetSettings.sharedX) {\n throw Error('Dendrogram on X axis is not available with shared by facets X axis');\n }\n\n facetKeys.forEach(facetKey => {\n const facetResult: DendrogramsData[string] = {\n hierarchyByGroupX: {},\n hierarchyByGroupY: {},\n };\n const cellsGroup = groupedCellsData.facets[facetKey];\n if (dendrogramX) {\n const updatedXKeys:string[] = [];\n xGroupKeys.forEach(xGroupKey => {\n const xKeys = cellsGroup.xKeysByGroups[xGroupKey];\n const yKeys = cellsGroup.yKeys;\n const rootCluster = getClusters(\n xKeys,\n xKeys.map(x => yKeys.map(y => (cellsGroup.cells[x][y]?.normalizedValue ?? dendrogramX.fillNA) as number)),\n dendrogramX.distance,\n dendrogramX.linkage\n );\n //set sorted group keys\n groupedCellsData.facets[facetKey].xKeysByGroups[xGroupKey] = rootCluster.keys;\n updatedXKeys.push(...rootCluster.keys);\n facetResult.hierarchyByGroupX[xGroupKey] = hierarchy(rootCluster);\n });\n // set sorted group keys of all groups\n groupedCellsData.facets[facetKey].xKeys = updatedXKeys;\n }\n if (dendrogramY) {\n const updatedYKeys:string[] = [];\n yGroupKeys.forEach(yGroupKey => {\n const yKeys = cellsGroup.yKeysByGroups[yGroupKey];\n const xKeys = cellsGroup.xKeys;\n const rootCluster = getClusters(\n yKeys,\n yKeys.map(y => xKeys.map(x => (cellsGroup.cells[x][y]?.normalizedValue ?? dendrogramY.fillNA) as number)),\n dendrogramY.distance,\n dendrogramY.linkage\n );\n //set sorted group keys\n groupedCellsData.facets[facetKey].yKeysByGroups[yGroupKey] = rootCluster.keys;\n updatedYKeys.push(...rootCluster.keys);\n facetResult.hierarchyByGroupY[yGroupKey] = hierarchy(rootCluster);\n });\n // set sorted group keys of all groups\n groupedCellsData.facets[facetKey].yKeys = updatedYKeys;\n }\n result[facetKey] = facetResult;\n });\n\n return result;\n}\n"],"names":["getDendrograms","groupedCellsData","dendrogramX","dendrogramY","facetSettings","facetKeys","xGroupKeys","yGroupKeys","result","facetKey","facetResult","cellsGroup","updatedXKeys","xGroupKey","xKeys","yKeys","rootCluster","getClusters","x","y","_a","hierarchy","updatedYKeys","yGroupKey"],"mappings":";;AAYO,SAASA,EACZC,GACAC,GACAC,GACAC,GACe;AACf,QAAM,EAAC,WAAAC,GAAW,YAAAC,GAAY,YAAAC,EAAA,IAAcN,EAAiB,MACvDO,IAAyB,CAAA;AAE/B,MAAIN,KAAeE,EAAc;AAC7B,UAAM,MAAM,oEAAoE;AAGpF,SAAAC,EAAU,QAAQ,CAAAI,MAAY;AAC1B,UAAMC,IAAuC;AAAA,MACzC,mBAAmB,CAAA;AAAA,MACnB,mBAAmB,CAAA;AAAA,IAAC,GAElBC,IAAaV,EAAiB,OAAOQ,CAAQ;AACnD,QAAIP,GAAa;AACb,YAAMU,IAAwB,CAAA;AAC9B,MAAAN,EAAW,QAAQ,CAAAO,MAAa;AAC5B,cAAMC,IAAQH,EAAW,cAAcE,CAAS,GAC1CE,IAAQJ,EAAW,OACnBK,IAAcC;AAAA,UAChBH;AAAA,UACAA,EAAM,IAAI,CAAAI,MAAKH,EAAM,IAAI,CAAAI,MAAA;;AAAM,qBAAAC,IAAAT,EAAW,MAAMO,CAAC,EAAEC,CAAC,MAArB,gBAAAC,EAAwB,oBAAmBlB,EAAY;AAAA,WAAiB,CAAC;AAAA,UACxGA,EAAY;AAAA,UACZA,EAAY;AAAA,QAAA;AAGhB,QAAAD,EAAiB,OAAOQ,CAAQ,EAAE,cAAcI,CAAS,IAAIG,EAAY,MACzEJ,EAAa,KAAK,GAAGI,EAAY,IAAI,GACrCN,EAAY,kBAAkBG,CAAS,IAAIQ,EAAUL,CAAW;AAAA,MACpE,CAAC,GAEDf,EAAiB,OAAOQ,CAAQ,EAAE,QAAQG;AAAA,IAC9C;AACA,QAAIT,GAAa;AACb,YAAMmB,IAAwB,CAAA;AAC9B,MAAAf,EAAW,QAAQ,CAAAgB,MAAa;AAC5B,cAAMR,IAAQJ,EAAW,cAAcY,CAAS,GAC1CT,IAAQH,EAAW,OACnBK,IAAcC;AAAA,UAChBF;AAAA,UACAA,EAAM,IAAI,CAAAI,MAAKL,EAAM,IAAI,CAAAI,MAAA;;AAAM,qBAAAE,IAAAT,EAAW,MAAMO,CAAC,EAAEC,CAAC,MAArB,gBAAAC,EAAwB,oBAAmBjB,EAAY;AAAA,WAAiB,CAAC;AAAA,UACxGA,EAAY;AAAA,UACZA,EAAY;AAAA,QAAA;AAGhB,QAAAF,EAAiB,OAAOQ,CAAQ,EAAE,cAAcc,CAAS,IAAIP,EAAY,MACzEM,EAAa,KAAK,GAAGN,EAAY,IAAI,GACrCN,EAAY,kBAAkBa,CAAS,IAAIF,EAAUL,CAAW;AAAA,MACpE,CAAC,GAEDf,EAAiB,OAAOQ,CAAQ,EAAE,QAAQa;AAAA,IAC9C;AACA,IAAAd,EAAOC,CAAQ,IAAIC;AAAA,EACvB,CAAC,GAEMF;AACX;"}
@@ -1,10 +1,10 @@
1
1
  import { AbstractChart } from '../AbstractChart';
2
+ import { DataFrame } from '../DataFrame';
3
+ import { DataValue, HeatmapEventHandlers, HeatmapSettings } from '../types';
4
+ import { default as ChartRenderer } from './ChartRenderer';
2
5
  import { GroupedCellsData } from './getCells';
3
6
  import { DendrogramsData } from './getDendrograms';
4
- import { default as ChartRenderer } from './ChartRenderer';
5
- import { DataValue, HeatmapEventHandlers, HeatmapSettings } from '../types';
6
7
  import { HeatmapSettingsImpl } from './HeatmapSettingsImpl';
7
- import { DataFrame } from '../DataFrame';
8
8
  export declare class ChartHeatmap extends AbstractChart {
9
9
  settings: HeatmapSettingsImpl;
10
10
  chartRenderer: ChartRenderer;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/heatmap/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,YAAY,CAAC;AAEjD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAItD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAa,SAAS,EAAE,oBAAoB,EAAE,eAAe,EAAC,MAAM,UAAU,CAAC;AAC3F,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,qBAAa,YAAa,SAAQ,aAAa;IAC3C,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,aAAa,gBAAuB;IAEpC,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAmB;IAC3D,cAAc,EAAE;QACZ,gBAAgB,EAAE,gBAAgB,CAAC;QACnC,eAAe,EAAE,eAAe,CAAC;QACjC,cAAc,EAAE,SAAS,EAAE,CAAC;KAC/B,GAAG,IAAI,CAAQ;gBAEJ,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,CAAC,EAAC,oBAAoB;IAS3F,KAAK,CAAC,IAAI,EAAE,WAAW;IAYvB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe;IAsBhE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAIhD,MAAM,IAAI,MAAM;IAKhB,mCAAmC,CAAC,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,mBAAmB;IA6DpG,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAUpE,WAAW;IA0CX,gBAAgB;IAIhB,YAAY;CAiCf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/heatmap/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAc,SAAS,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE7F,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,qBAAa,YAAa,SAAQ,aAAa;IAC3C,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,aAAa,gBAAuB;IAEpC,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAmB;IAC3D,cAAc,EAAE;QACZ,gBAAgB,EAAE,gBAAgB,CAAC;QACnC,eAAe,EAAE,eAAe,CAAC;QACjC,cAAc,EAAE,SAAS,EAAE,CAAC;KAC/B,GAAG,IAAI,CAAQ;gBAEJ,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,CAAC,EAAC,oBAAoB;IAS3F,KAAK,CAAC,IAAI,EAAE,WAAW;IAavB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe;IAuBhE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAIhD,MAAM,IAAI,MAAM;IAKhB,mCAAmC,CAAC,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,mBAAmB;IA6DpG,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAUpE,WAAW;IA0CX,gBAAgB;IAIhB,YAAY;CAkCf"}
@@ -1,18 +1,18 @@
1
1
  var q = Object.defineProperty;
2
2
  var z = (l, o, a) => o in l ? q(l, o, { enumerable: !0, configurable: !0, writable: !0, value: a }) : l[o] = a;
3
3
  var y = (l, o, a) => z(l, typeof o != "symbol" ? o + "" : o, a);
4
- import { AbstractChart as K } from "../AbstractChart.js";
5
- import { getCells as F } from "./getCells.js";
6
- import { getDendrograms as J } from "./getDendrograms.js";
4
+ import { renderToString as K } from "../node_modules/react-dom/server.browser.js";
5
+ import { AbstractChart as F } from "../AbstractChart.js";
7
6
  import { isColumnName as D } from "../utils/index.js";
8
- import { renderToString as L } from "../node_modules/react-dom/server.browser.js";
9
- import M from "./ChartRenderer.js";
7
+ import J from "./ChartRenderer.js";
8
+ import { getCells as L } from "./getCells.js";
9
+ import { getDendrograms as M } from "./getDendrograms.js";
10
10
  import { HeatmapSettingsImpl as U } from "./HeatmapSettingsImpl.js";
11
- class ea extends K {
11
+ class ea extends F {
12
12
  constructor(a, t, e) {
13
13
  super(a, t);
14
14
  y(this, "settings");
15
- y(this, "chartRenderer", new M());
15
+ y(this, "chartRenderer", new J());
16
16
  y(this, "onTooltipHintSwitch", () => {
17
17
  });
18
18
  y(this, "calculatedData", null);
@@ -22,7 +22,7 @@ class ea extends K {
22
22
  try {
23
23
  this.chartRenderer.init(a), this._updateData(), this._updateChart();
24
24
  } catch (t) {
25
- t instanceof Error && this.chartRenderer.renderError(t.message);
25
+ t instanceof Error && (this.chartRenderer.renderError(t.message), console.error(t));
26
26
  }
27
27
  }
28
28
  unmount() {
@@ -33,14 +33,14 @@ class ea extends K {
33
33
  const e = this.settings, r = this.data;
34
34
  this.settings = new U(t), this.data = a, this._needUpdateCalculatedDataBySettings(e, this.settings) || this._needUpdateCalculatedDataByData(r, this.data) ? this._updateData() : this._updateAesInData(), this._updateChart();
35
35
  } catch (e) {
36
- e instanceof Error && this.chartRenderer.renderError(e.message);
36
+ e instanceof Error && (this.chartRenderer.renderError(e.message), console.error(e));
37
37
  }
38
38
  }
39
39
  updateChartState(a, t) {
40
40
  console.warn("no chart state for heatmap");
41
41
  }
42
42
  export() {
43
- return this._updateChart(), L(this.chartRenderer.component);
43
+ return this._updateChart(), K(this.chartRenderer.component);
44
44
  }
45
45
  _needUpdateCalculatedDataBySettings(a, t) {
46
46
  var X, Y, A, x, R, b, w, G, T, j, k, v;
@@ -93,7 +93,7 @@ class ea extends K {
93
93
  dendrogramY: C,
94
94
  normalization: p,
95
95
  NAValueAs: f
96
- } = this.settings, n = F(
96
+ } = this.settings, n = L(
97
97
  this.data,
98
98
  a,
99
99
  t,
@@ -106,7 +106,7 @@ class ea extends K {
106
106
  C,
107
107
  p,
108
108
  f
109
- ), _ = J(n, u, C, h), B = m.valueType === "discrete" ? this.data.getColumnCategories(e.value) : [];
109
+ ), _ = M(n, u, C, h), B = m.valueType === "discrete" ? this.data.getColumnCategories(e.value) : [];
110
110
  this.calculatedData = {
111
111
  groupedCellsData: n,
112
112
  dendrogramsData: _,
@@ -131,6 +131,7 @@ class ea extends K {
131
131
  normalization: u
132
132
  } = this.settings;
133
133
  this.chartRenderer.render(
134
+ this.data,
134
135
  a,
135
136
  e,
136
137
  r,