@milaboratories/graph-maker 1.1.138 → 1.1.139

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 (219) hide show
  1. package/dist/GraphMaker/components/LassoControls/index.vue.js +15 -13
  2. package/dist/GraphMaker/components/LassoControls/index.vue.js.map +1 -1
  3. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +9 -3
  4. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts.map +1 -1
  5. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts +17 -2
  6. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts.map +1 -1
  7. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +13 -4
  8. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts.map +1 -1
  9. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +28 -7
  10. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
  11. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.d.ts +6 -2
  12. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.d.ts.map +1 -1
  13. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts +16 -2
  14. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts.map +1 -1
  15. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts +14 -2
  16. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts.map +1 -1
  17. package/dist/node_modules/@milaboratories/miplots4/dist/DataFrame.js +95 -72
  18. package/dist/node_modules/@milaboratories/miplots4/dist/DataFrame.js.map +1 -1
  19. package/dist/node_modules/@milaboratories/miplots4/dist/MiPlots.js +1 -1
  20. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/ChartRenderer.js +124 -122
  21. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/ChartRenderer.js.map +1 -1
  22. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/Chart.js +72 -91
  23. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/Chart.js.map +1 -1
  24. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/ChartsGroup.js +43 -41
  25. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/ChartsGroup.js.map +1 -1
  26. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCellTooltip.js +28 -0
  27. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCellTooltip.js.map +1 -0
  28. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getGroupedCellsData.js +94 -0
  29. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getGroupedCellsData.js.map +1 -0
  30. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/index.js +42 -38
  31. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/index.js.map +1 -1
  32. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/utils/calculateCaptionTails.js.map +1 -1
  33. package/dist/node_modules/@milaboratories/miplots4/dist/common/Legend.js.map +1 -1
  34. package/dist/node_modules/@milaboratories/miplots4/dist/common/Tooltip.js +11 -11
  35. package/dist/node_modules/@milaboratories/miplots4/dist/common/Tooltip.js.map +1 -1
  36. package/dist/node_modules/@milaboratories/miplots4/dist/common/useDataFrame.js +20 -0
  37. package/dist/node_modules/@milaboratories/miplots4/dist/common/useDataFrame.js.map +1 -0
  38. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/ChartRenderer.js +181 -181
  39. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/ChartRenderer.js.map +1 -1
  40. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/DendroSettingsImpl.js +2 -2
  41. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/DendroSettingsImpl.js.map +1 -1
  42. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Chart.js +45 -45
  43. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Chart.js.map +1 -1
  44. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Heatmap.js +27 -27
  45. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Heatmap.js.map +1 -1
  46. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Legend.js.map +1 -1
  47. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/LinksGroup.js +18 -18
  48. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/LinksGroup.js.map +1 -1
  49. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/NodesGroup.js +36 -36
  50. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/NodesGroup.js.map +1 -1
  51. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHeatmapData.js +45 -41
  52. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHeatmapData.js.map +1 -1
  53. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHierarchyData.js +33 -33
  54. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHierarchyData.js.map +1 -1
  55. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/index.js +90 -93
  56. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/index.js.map +1 -1
  57. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js +200 -199
  58. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js.map +1 -1
  59. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js +17 -17
  60. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
  61. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/layers/BoxElement.js.map +1 -1
  62. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js +102 -99
  63. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js.map +1 -1
  64. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/bar.js +31 -36
  65. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/bar.js.map +1 -1
  66. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/binnedDots.js +62 -74
  67. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/binnedDots.js.map +1 -1
  68. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/boxes.js +52 -53
  69. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/boxes.js.map +1 -1
  70. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/dots.js +32 -32
  71. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/dots.js.map +1 -1
  72. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/lines.js +7 -6
  73. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/lines.js.map +1 -1
  74. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/logo.js +23 -23
  75. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/logo.js.map +1 -1
  76. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/pairedPoints.js +63 -63
  77. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/pairedPoints.js.map +1 -1
  78. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/sina.js +60 -64
  79. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/sina.js.map +1 -1
  80. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/stackedBar.js +23 -23
  81. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/stackedBar.js.map +1 -1
  82. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/getOutliersBounds.js +5 -5
  83. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/getOutliersBounds.js.map +1 -1
  84. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/splitTextByWidth.js +13 -13
  85. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/splitTextByWidth.js.map +1 -1
  86. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js +258 -256
  87. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js.map +1 -1
  88. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/HeatmapSettingsImpl.js +1 -1
  89. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
  90. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/Annotation.js +45 -44
  91. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
  92. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js +107 -106
  93. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js.map +1 -1
  94. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js +18 -18
  95. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js.map +1 -1
  96. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js +99 -95
  97. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js.map +1 -1
  98. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js +30 -29
  99. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js.map +1 -1
  100. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateAnnotationTitleSizes.js +1 -1
  101. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateAnnotationTitleSizes.js.map +1 -1
  102. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateCaptionTails.js.map +1 -1
  103. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/ChartRenderer.js +143 -142
  104. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/ChartRenderer.js.map +1 -1
  105. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/HistogramSettingsImpl.js.map +1 -1
  106. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/components/Chart.js +30 -30
  107. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/components/Chart.js.map +1 -1
  108. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/components/ChartsGroup.js +7 -7
  109. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/getHistogramData.js +53 -54
  110. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/getHistogramData.js.map +1 -1
  111. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/index.js +59 -55
  112. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/index.js.map +1 -1
  113. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/@d3fc/d3fc-axis/src/axisBase.js +7 -7
  114. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-array/src/min.js +6 -12
  115. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-array/src/min.js.map +1 -1
  116. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-shape/src/line.js.map +1 -1
  117. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/kdbush/index.js +148 -0
  118. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/kdbush/index.js.map +1 -0
  119. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js +172 -168
  120. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js.map +1 -1
  121. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js +26 -26
  122. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
  123. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Chart.js +11 -11
  124. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxisTitles.js +30 -29
  125. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxisTitles.js.map +1 -1
  126. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartLayersData.js +135 -153
  127. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartLayersData.js.map +1 -1
  128. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTooltip.js +35 -32
  129. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTooltip.js.map +1 -1
  130. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js +27 -27
  131. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js.map +1 -1
  132. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartsGroup.js +14 -14
  133. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/constants.js.map +1 -1
  134. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/dots.js +24 -22
  135. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/dots.js.map +1 -1
  136. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js +11 -14
  137. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js.map +1 -1
  138. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js +57 -58
  139. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js.map +1 -1
  140. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/linearRegression.js +85 -83
  141. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/linearRegression.js.map +1 -1
  142. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/createAesGetter.js +20 -20
  143. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/createAesGetter.js.map +1 -1
  144. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/createLegendInfo.js +44 -37
  145. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/createLegendInfo.js.map +1 -1
  146. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/formatColumnValue.js +11 -0
  147. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/formatColumnValue.js.map +1 -0
  148. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/getVisibleLabels.js +46 -56
  149. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/getVisibleLabels.js.map +1 -1
  150. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js +223 -205
  151. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  152. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/SettingsImpl.js +22 -22
  153. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
  154. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/colors.js +42 -0
  155. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/colors.js.map +1 -0
  156. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js +84 -81
  157. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
  158. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/SVGLayer.js +11 -11
  159. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/UpperSVG.js +15 -14
  160. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
  161. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/index.js +89 -114
  162. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/index.js.map +1 -1
  163. package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js +3 -1
  164. package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js.map +1 -1
  165. package/dist/node_modules/@milaboratories/miplots4/dist/types/dendro.js +1 -1
  166. package/dist/node_modules/@milaboratories/miplots4/dist/types/dendro.js.map +1 -1
  167. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js +1 -1
  168. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js.map +1 -1
  169. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js +1 -1
  170. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js.map +1 -1
  171. package/dist/node_modules/@milaboratories/miplots4/dist/types/histogram.js +1 -1
  172. package/dist/node_modules/@milaboratories/miplots4/dist/types/histogram.js.map +1 -1
  173. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js +1 -1
  174. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js.map +1 -1
  175. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot.js +4 -4
  176. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot.js.map +1 -1
  177. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer/TextMeasurer.js +39 -0
  178. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer/TextMeasurer.js.map +1 -0
  179. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer/charToWidth.json.js +101 -0
  180. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer/charToWidth.json.js.map +1 -0
  181. package/dist/node_modules/@milaboratories/miplots4/dist/utils/arrangeLegendParts.js +4 -4
  182. package/dist/node_modules/@milaboratories/miplots4/dist/utils/arrangeLegendParts.js.map +1 -1
  183. package/dist/node_modules/@milaboratories/miplots4/dist/utils/getLegendWidth.js +3 -3
  184. package/dist/node_modules/@milaboratories/miplots4/dist/utils/getLegendWidth.js.map +1 -1
  185. package/dist/node_modules/@milaboratories/pf-plots/dist/index.js +1031 -1023
  186. package/dist/node_modules/@milaboratories/pf-plots/dist/index.js.map +1 -1
  187. package/package.json +3 -3
  188. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCells.js +0 -91
  189. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCells.js.map +0 -1
  190. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/add.js +0 -30
  191. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/add.js.map +0 -1
  192. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/cover.js +0 -29
  193. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/cover.js.map +0 -1
  194. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/data.js +0 -12
  195. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/data.js.map +0 -1
  196. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/extent.js +0 -7
  197. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/extent.js.map +0 -1
  198. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/find.js +0 -26
  199. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/find.js.map +0 -1
  200. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/quad.js +0 -7
  201. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/quad.js.map +0 -1
  202. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/quadtree.js +0 -51
  203. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/quadtree.js.map +0 -1
  204. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/remove.js +0 -21
  205. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/remove.js.map +0 -1
  206. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/root.js +0 -7
  207. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/root.js.map +0 -1
  208. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/size.js +0 -12
  209. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/size.js.map +0 -1
  210. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/visit.js +0 -14
  211. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/visit.js.map +0 -1
  212. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/visitAfter.js +0 -19
  213. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/visitAfter.js.map +0 -1
  214. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/x.js +0 -11
  215. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/x.js.map +0 -1
  216. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/y.js +0 -11
  217. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/y.js.map +0 -1
  218. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer.js +0 -24
  219. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ChartRenderer.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/ChartRenderer.tsx"],"sourcesContent":["import {Error} from '../common/Error';\nimport {\n BLACK,\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n MAX_SHOWN_UNIQUE_VALUES_IN_LABELS,\n TITLE_LINE_HEIGHT,\n TITLE_MARGIN,\n} from '../constants';\nimport {FACET_TITLE_LINE} from '../discrete/constants';\nimport {splitTextByWidth} from '../discrete/utils';\nimport type {CurveLayer, DotsLayer} from './ScatterplotSettingsImpl';\nimport type {AesGetters, CaptionsSizes, Margins} from './components/types';\nimport {\n DEFAULT_DOT_AES,\n FACET_AXIS_OFFSET,\n FACET_TITLE_OFFSET,\n MIN_MARGIN,\n MIN_PADDING,\n TICK_OFFSET,\n TITLE_LINE,\n} from './constants';\nimport {LEGEND_OFFSET} from './constants';\nimport type {GroupedDots} from './dots';\nimport type {ScatterplotLayerData} from './getLayersData';\nimport type {TrendsData} from './linearRegression';\nimport type {ScatterplotLayer} from './ScatterplotSettingsImpl';\nimport type {ScatterplotSettingsImpl} from './ScatterplotSettingsImpl';\nimport {createAesGetter} from './utils/createAesGetter';\nimport {getTicksAndFormat} from './utils/getTicksAndFormat';\nimport {isContinuousAes} from '../types';\nimport type {ColumnName, ScatterplotLegendInfo} from '../types';\nimport {getContinuousColorScale} from '../utils/getContinuousColorScale';\nimport {getContinuousLegendTicks} from '../utils/getContinuousLegendTicks';\nimport {TextMeasurer} from '../utils/TextMeasurer';\nimport type {ScaleLinear} from 'd3-scale';\nimport {scaleLinear, scaleLog, scaleOrdinal, scaleSqrt, scaleSymlog} from 'd3-scale';\nimport {DEFAULT_TICKS_SIZE, PADDINGS} from './constants';\nimport type {ReactElement} from 'react';\nimport React from 'react';\nimport type {Root} from 'react-dom/client';\nimport {createRoot} from 'react-dom/client';\nimport {ChartsGroup} from './components/ChartsGroup';\nimport type {ChartDimensionsData, ChartSizes, ChartsScales} from './components/types';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport type { DotAesItem, LegendData, LegendItem } from '../common/types';\n\nfunction getChartEdgeSides(index: number, facetsCount: number, columnsCount: number, rowsCount: number) {\n const chartSides: ('left' | 'right' | 'top' | 'bottom')[] = [];\n if (index % columnsCount === columnsCount - 1) {\n chartSides.push('right');\n }\n if (index % columnsCount === 0) {\n chartSides.push('left');\n }\n if (index < columnsCount) {\n chartSides.push('top');\n }\n if (\n Math.ceil((index + 1) / columnsCount) === rowsCount ||\n (Math.ceil((index + 1) / columnsCount) === rowsCount - 1 &&\n index % columnsCount > (facetsCount - 1) % columnsCount)\n ) {\n chartSides.push('bottom');\n }\n return chartSides;\n}\n\nfunction calculatePaddings(\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n captionsSizes: CaptionsSizes,\n currentRowFacetKeys: string[],\n facetTitles: Record<string, string[]>,\n chartEdgeSides: ('left' | 'right' | 'top' | 'bottom')[],\n facetSettings?: ScatterplotSettingsImpl['facetSettings']\n) {\n const needLeftAxis = chartEdgeSides.includes('left') || !facetSettings?.sharedY;\n const needLeftAxisTitle = chartEdgeSides.includes('left') && yAxis.title !== '';\n const needBottomAxis = chartEdgeSides.includes('bottom') || !facetSettings?.sharedX;\n const needBottomAxisTitle = chartEdgeSides.includes('bottom') && xAxis.title !== '';\n\n const yCaptions = captionsSizes.yAxisCaptionsWidth + 2 * TICK_OFFSET;\n const yTicks = (yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + TICK_OFFSET;\n const yAxisTitle = needLeftAxisTitle ? TITLE_LINE + MIN_PADDING : 0;\n\n const xCaptions = captionsSizes.xAxisCaptionsWidth + 2 * TICK_OFFSET;\n const xTicks = xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const xAxisTitle = needBottomAxisTitle ? TITLE_LINE + MIN_PADDING : 0;\n\n const leftAxisElements = yCaptions + yTicks + yAxisTitle + FACET_AXIS_OFFSET;\n const bottomAxisElements = xCaptions + xTicks + xAxisTitle + FACET_AXIS_OFFSET;\n\n const facetTitlesLinesCount = Math.max(...currentRowFacetKeys.map(key => facetTitles[key].length));\n return {\n left: needLeftAxis ? leftAxisElements : MIN_PADDING,\n top: facetTitlesLinesCount === 0 ? 0 : FACET_TITLE_OFFSET * 2 + facetTitlesLinesCount * FACET_TITLE_LINE,\n bottom: needBottomAxis ? bottomAxisElements + 8 : MIN_PADDING,\n right: MIN_PADDING,\n };\n}\n\n// facet keys grouped by rows\nfunction getFacetRows(facetKeys: string[], nRows: number, nColumns: number): string[][] {\n const result: string[][] = [];\n for (let i = 0; i < nRows; i++) {\n result.push(facetKeys.slice(i * nColumns, i * nColumns + nColumns));\n }\n return result;\n}\n\nfunction getRowColumn(idx: number, columnsCount: number) {\n const row = Math.floor(idx / columnsCount);\n const column = idx - row * columnsCount;\n return [row, column];\n}\n\nfunction createAesGetters(\n legendInfo: ScatterplotLegendInfo,\n layers: ScatterplotLayer[],\n trend: ScatterplotSettingsImpl['trend']\n): AesGetters {\n const dotLayer = layers.find(l => l.type === 'dots') as DotsLayer | undefined;\n const curveLayer = layers.find(l => l.type === 'curve') as CurveLayer | undefined;\n\n return {\n dotShape: createAesGetter(legendInfo, dotLayer?.aes.dotShape ?? DEFAULT_DOT_AES.shape,'dotShape'),\n dotColor: createAesGetter(legendInfo, dotLayer?.aes.dotFill ?? DEFAULT_DOT_AES.color, 'dotFill'),\n dotSize: createAesGetter(legendInfo, dotLayer?.aes.dotSize ?? DEFAULT_DOT_AES.size, 'dotSize'),\n lineShape: createAesGetter(legendInfo, curveLayer?.aes.lineShape ?? 'solid', 'lineShape'),\n lineColor: createAesGetter(legendInfo, curveLayer?.aes.lineColor ?? BLACK, 'lineColor'),\n trendColor: createAesGetter(legendInfo, trend?.color ?? DEFAULT_DOT_AES.color, 'fillColor')\n };\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n component: ReactElement = (<></>);\n margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n chartsDimensions: Record<string, ChartDimensionsData> = {};\n chartSizes: ChartSizes = {\n chartWidth: DEFAULT_WIDTH, // width of single chart\n chartHeight: DEFAULT_HEIGHT, // height of single chart\n chartsWidth: DEFAULT_WIDTH, // width of all charts in charts row\n chartsHeight: DEFAULT_HEIGHT, // width of all charts in charts column, without axes\n totalWidth: DEFAULT_WIDTH, // width of all charts in charts row, plus left axis, plus legend\n totalHeight: DEFAULT_HEIGHT, // width of all charts in charts height, plus bottom axis, plus top title\n };\n columnsCount = 1;\n rowsCount = 1;\n scales: ChartsScales = {\n x: {null: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH])},\n y: {null: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0])},\n };\n captionsSizes: CaptionsSizes = {\n xAxisCaptionsWidth: 30,\n yAxisCaptionsWidth: 100,\n };\n facetTitles: Record<string, string[]> = {}; // can be multiline\n mainTitle: string[] = []; // can be multiline\n legend: LegendData = {width: 0, height: 0, items: []};\n\n clear() {\n if (this.parentNode && this.rootNode) {\n this.parentNode?.removeChild(this.rootNode);\n this.parentNode = null;\n this.rootNode = null;\n }\n // timeout to avoid trying to unmount during rendering\n setTimeout(() => {\n this.reactRoot?.unmount();\n this.reactRoot = null;\n });\n }\n\n init(node: HTMLElement) {\n if (this.parentNode === null) {\n this.parentNode = node;\n this.rootNode = document.createElement('div');\n this.parentNode.appendChild(this.rootNode);\n this.reactRoot = createRoot(this.rootNode);\n }\n }\n\n updateChartSizes(size: ScatterplotSettingsImpl['chartSettings']['size']) {\n this.chartSizes.chartWidth = size.width;\n this.chartSizes.chartHeight = size.height;\n }\n\n updateChartDimensions(\n facetKeys: string[],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis']\n ) {\n const {chartWidth, chartHeight} = this.chartSizes;\n let currentLeft = 0;\n let currentTop = 0;\n this.chartsDimensions = facetKeys.reduce((res: Record<string, ChartDimensionsData>, key: string, index) => {\n const [currentRow, currentColumn] = getRowColumn(index, this.columnsCount);\n const chartEdgeSides = getChartEdgeSides(index, facetKeys.length, this.columnsCount, this.rowsCount);\n const padding = calculatePaddings(\n xAxis,\n yAxis,\n this.captionsSizes,\n getFacetRows(facetKeys, this.rowsCount, this.columnsCount)[currentRow],\n this.facetTitles,\n chartEdgeSides,\n facetSettings\n );\n\n const outerWidth = chartWidth + padding.left + padding.right;\n const outerHeight = chartHeight + padding.top + padding.bottom;\n res[key] = {\n left: currentLeft,\n top: currentTop,\n chartEdgeSides,\n padding,\n inner: {width: chartWidth, height: chartHeight},\n outer: {width: outerWidth, height: outerHeight},\n };\n currentLeft += outerWidth;\n if (currentColumn === this.columnsCount - 1) {\n currentLeft = 0;\n currentTop += outerHeight;\n }\n return res;\n }, {});\n\n const chartsWidth = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.width + this.chartsDimensions[key].left)\n );\n const chartsHeight = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.height + this.chartsDimensions[key].top)\n );\n this.chartSizes.chartsWidth = chartsWidth;\n this.chartSizes.chartsHeight = chartsHeight;\n }\n\n updateViewport(\n facetKeys: string[],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n groupedDots: GroupedDots,\n trendsData: TrendsData | null\n ) {\n const facetCount = facetKeys.length;\n const maxNRows = Math.min(facetSettings.nRows ?? facetCount, facetCount);\n const maxNCols = Math.min(facetSettings.nCols ?? facetCount, facetCount);\n // Use columns/rows count from settings if some of them defined, else make 1 column\n this.columnsCount = facetSettings.nRows ? Math.ceil(facetCount / maxNRows) : maxNCols;\n this.rowsCount = Math.ceil(facetCount / this.columnsCount);\n\n let [minXAll, maxXAll] = [Infinity, -Infinity];\n let [minYAll, maxYAll] = [Infinity, -Infinity];\n const dotExtentsByKeys = facetKeys.reduce((res: Record<string, Record<string, number>>, key) => {\n const dotsData = groupedDots[key];\n const {minX, minY, maxX, maxY} = dotsData;\n minXAll = Math.min(minXAll, minX);\n minYAll = Math.min(minYAll, minY);\n maxXAll = Math.max(maxXAll, maxX);\n maxYAll = Math.max(maxYAll, maxY);\n res[key] = {minX, maxX, minY, maxY};\n return res;\n }, {});\n\n const newScalesX:ChartsScales['x'] = {};\n const newScalesY:ChartsScales['y'] = {};\n\n let needsUpdateXScales = false;\n let needsUpdateYScales = false;\n facetKeys.forEach(key => {\n const scaleX = xAxis.scale === 'log' ? scaleLog() : scaleLinear();\n\n const extents = dotExtentsByKeys[key];\n let minX = xAxis.lowerValue ? Number(xAxis.lowerValue) : facetSettings.sharedX ? minXAll : extents.minX;\n let maxX = xAxis.upperValue ? Number(xAxis.upperValue) : facetSettings.sharedX ? maxXAll : extents.maxX;\n\n if (typeof xAxis.symmetricRange !== 'undefined') {\n const middle = xAxis.symmetricRange;\n if (middle >= minX && middle <= maxX) {\n const halfRange = Math.max(middle - minX, maxX - middle);\n minX = middle - halfRange;\n maxX = middle + halfRange;\n }\n }\n\n const rangeH = [0, this.chartSizes.chartWidth];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempX = scaleX\n .copy()\n .domain([minX, maxX])\n .range([PADDINGS.LEFT, this.chartSizes.chartWidth - PADDINGS.RIGHT]);\n scaleX\n .domain([tempX.invert(0), tempX.invert(this.chartSizes.chartWidth)])\n .range(rangeH)\n .nice();\n const prevScale = this.scales.x[key];\n if (prevScale && !needsUpdateXScales) {\n const domain = prevScale.domain();\n const range = prevScale.domain();\n if (\n domain[0] !== scaleX.domain()[0] || domain[1] !== scaleX.domain()[1]\n || range[0] !== scaleX.range()[0] || range[1] !== scaleX.range()[1]\n ) {\n needsUpdateXScales = true;\n }\n }\n newScalesX[key] = scaleX;\n });\n // for right Y viewport bounds we must know X bounds, to calculate trends area Y bounds\n const trendYBoundsByKeys = facetKeys.reduce((res: Record<string, Record<string, number>>, key) => {\n const trendsList = trendsData ? trendsData[key] : [];\n res[key] = trendsList.reduce(\n (res, trend) => {\n const xBounds = trend.bounded ? trend.xBounds : this.scales.x[key].domain();\n const i1 = trend.getInterval(xBounds[0]);\n const i2 = trend.getInterval(xBounds[1]);\n res.minY = Math.min(res.minY, isNaN(i1.left) ? res.minY : i1.left, isNaN(i2.left) ? res.minY : i2.left);\n res.maxY = Math.max(res.maxY, isNaN(i1.right) ? res.maxY : i1.right, isNaN(i2.right) ? res.maxY : i2.right);\n return res;\n },\n {minY: Infinity, maxY: -Infinity}\n );\n minYAll = Math.min(minYAll, res[key].minY);\n maxYAll = Math.max(maxYAll, res[key].maxY);\n return res;\n }, {});\n facetKeys.forEach(key => {\n const scaleY = yAxis.scale === 'log' ? scaleLog() : scaleLinear();\n\n const dotExtents = dotExtentsByKeys[key];\n const trendExtents = trendYBoundsByKeys[key];\n let minY = yAxis.lowerValue ? Number(yAxis.lowerValue) : facetSettings.sharedY ? minYAll : Math.min(dotExtents.minY, trendExtents.minY);\n let maxY = yAxis.upperValue ? Number(yAxis.upperValue) : facetSettings.sharedY ? maxYAll : Math.max(dotExtents.maxY, trendExtents.maxY);\n\n if (typeof yAxis.symmetricRange !== 'undefined') {\n const middle = yAxis.symmetricRange;\n if (middle >= minY && middle <= maxY) {\n const halfRange = Math.max(middle - minY, maxY - middle);\n minY = middle - halfRange;\n maxY = middle + halfRange;\n }\n }\n\n const rangeV = [this.chartSizes.chartHeight, 0];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempY = scaleY\n .copy()\n .domain([minY, maxY])\n .range([this.chartSizes.chartHeight - PADDINGS.BOTTOM, PADDINGS.TOP]);\n scaleY\n .domain([tempY.invert(this.chartSizes.chartHeight), tempY.invert(0)])\n .range(rangeV)\n .nice();\n\n const prevScale = this.scales.y[key];\n if (prevScale && !needsUpdateYScales) {\n const domain = prevScale.domain();\n const range = prevScale.domain();\n if (\n domain[0] !== scaleY.domain()[0] || domain[1] !== scaleY.domain()[1]\n || range[0] !== scaleY.range()[0] || range[1] !== scaleY.range()[1]\n ) {\n needsUpdateYScales = true;\n }\n }\n newScalesY[key] = scaleY;\n });\n\n if (needsUpdateXScales) {\n this.scales.x = newScalesX;\n }\n if (needsUpdateYScales) {\n this.scales.y = newScalesY;\n }\n }\n\n updateCaptionsSize(onlyPositive: boolean) {\n const textMeasurer = new TextMeasurer('600 14px Arial');\n\n let maxYTick = 0;\n\n function getMaxTickWidth(ticks: string[]) {\n return Math.max(...ticks.map(key => textMeasurer.getTextWidth(key)));\n }\n\n Object.values(this.scales.y).forEach(scale => {\n const {ticks, format} = getTicksAndFormat(scale, onlyPositive);\n maxYTick = Math.max(maxYTick, getMaxTickWidth(ticks.map(format)));\n });\n this.captionsSizes = {\n xAxisCaptionsWidth: 20,\n yAxisCaptionsWidth: maxYTick,\n };\n }\n\n createMainTitle(facetKeys: string[], title: ScatterplotSettingsImpl['chartSettings']['title']) {\n const firstChart = this.chartsDimensions[facetKeys[0]];\n const lastChart = this.chartsDimensions[facetKeys[facetKeys.length - 1]];\n\n this.mainTitle = splitTextByWidth(\n title.name,\n this.chartSizes.chartsWidth - firstChart.padding.left - lastChart.padding.right,\n 20\n );\n }\n\n createFacetTitles(facetKeys: string[], facetLabels: string[][]) {\n this.facetTitles = facetKeys.reduce((res: Record<string, string[]>, key, idx) => {\n if (facetLabels[idx].length === 1 && facetLabels[idx][0] === 'null') {\n res[key] = [];\n } else {\n res[key] = splitTextByWidth(facetLabels[idx].join(', '), this.chartSizes.chartWidth, 14);\n }\n return res;\n }, {});\n }\n\n updateMargins() {\n const titleTextHeight = TITLE_LINE_HEIGHT * this.mainTitle.length;\n const titleHeight = titleTextHeight > 0 ? titleTextHeight + TITLE_MARGIN * 2 : 0;\n this.margins = {\n top: Math.max(titleHeight, MIN_MARGIN),\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: this.legend.width + MIN_MARGIN,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartsWidth + this.margins.right;\n this.chartSizes.totalHeight =\n this.margins.top + Math.max(this.chartSizes.chartsHeight, this.legend.height) + this.margins.bottom;\n }\n\n updateLegendSize(\n legend: ScatterplotSettingsImpl['chartSettings']['legend'],\n legendInfo: ScatterplotLegendInfo,\n grouping: ColumnName[],\n layers: ScatterplotLayer[]\n ) {\n if (!legend.show) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const legendItems: LegendItem[] = [];\n const emptySizes = {width:0, height:0, left:0, top: 0};\n\n grouping.forEach(column => {\n const info = legendInfo[column.value];\n if (info.usedAes.length === 0 || !info.aesMap) {\n return;\n }\n if (info.values.length > MAX_SHOWN_UNIQUE_VALUES_IN_LABELS) {\n console.warn(`Too many values for discrete legend (${info.values.length})`);\n return;\n }\n const aesData: Record<string, DotAesItem> = {};\n info.values.forEach(columnValue => {\n if (!aesData[columnValue]) {\n aesData[columnValue] = {...DEFAULT_DOT_AES} as DotAesItem;\n }\n info.usedAes.forEach(key => {\n if (key === 'dotFill' || key === 'lineColor') {\n aesData[columnValue].color = info.aesMap[columnValue]?.[key] ?? BLACK;\n }\n if (key === 'dotShape') {\n aesData[columnValue].shape = info.aesMap[columnValue]?.[key] ?? '21';\n }\n if (key === 'dotSize') {\n aesData[columnValue].size = info.aesMap[columnValue]?.[key] ?? 3;\n }\n });\n });\n\n const title = column.label ?? column.value;\n const scale = scaleOrdinal<DotAesItem>()\n .domain(info.values)\n .range(info.values.map(value => aesData[value]))\n .unknown(DEFAULT_DOT_AES);\n legendItems.push({...emptySizes, id: column.value, type: 'dots', title, scale, values:info.values, labels:info.labels});\n });\n\n layers.forEach(layer => {\n if (layer.type === 'dots' && isContinuousAes(layer.aes.dotFill)) {\n const {domain, range, columnName, type = 'linear'} = layer.aes.dotFill;\n const title = columnName.label ?? columnName.value;\n const colorScale = getContinuousColorScale(range, domain, 'linear') as ScaleLinear<string, string>; // always linear for legend - scale to render gradient, not for dots\n const tickPositionScale = (type === 'log' ? scaleSymlog<string, string>() : scaleLinear<string, string>())\n .domain(domain)\n // @ts-ignore\n .range([this.chartSizes.chartHeight, 0]);\n const values = getContinuousLegendTicks(tickPositionScale, domain as [number, number]);\n legendItems.push({...emptySizes, id: 'dotFill', type: 'continuous', title, scale: colorScale, tickPositionScale, values});\n }\n if (layer.type === 'dots' && isContinuousAes(layer.aes.dotSize)) {\n const {columnName, domain, range} = layer.aes.dotSize;\n const title = columnName.label ?? columnName.value;\n const scale = scaleSqrt(domain, range);\n const values = scale.ticks(3);\n const format = scale.tickFormat(3);\n const labels = values.reduce((res: Record<string, string>, v) => {\n res[String(v)] = format(v);\n return res;\n }, {});\n legendItems.push({...emptySizes, id: columnName.value, type: 'size', title, scale, values, labels});\n }\n });\n\n if (!legendItems.length) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const items = arrangeLegendParts(legendItems, this.chartSizes.chartHeight);\n\n const lastItem = items[items.length - 1];\n const legendWidth = lastItem.left + lastItem.width + LEGEND_OFFSET;\n const legendHeight = this.chartSizes.chartHeight;\n\n this.legend = {\n width: legendWidth,\n height: legendHeight,\n items,\n };\n }\n\n render(\n settingsId: string,\n chartSettings: ScatterplotSettingsImpl['chartSettings'],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n facetKeys: string[],\n facetLabels: string[][],\n groupedDots: GroupedDots,\n trendsData: TrendsData | null,\n keyColumn: ColumnName,\n onlyPositive: {x: boolean; y: boolean},\n legendInfo: ScatterplotLegendInfo,\n layersData: Record<string, ScatterplotLayerData[]>,\n grouping: ColumnName[],\n layers: ScatterplotLayer[],\n trend: ScatterplotSettingsImpl['trend'],\n onTooltipHintSwitch: (v:boolean) => void\n ) {\n const {xAxis, yAxis, size, title, legend} = chartSettings;\n this.updateChartSizes(size);\n this.updateViewport(facetKeys, facetSettings, xAxis, yAxis, groupedDots, trendsData);\n this.updateCaptionsSize(onlyPositive.y);\n this.createFacetTitles(facetKeys, facetLabels);\n this.updateChartDimensions(facetKeys, facetSettings, xAxis, yAxis);\n this.updateLegendSize(legend, legendInfo, grouping, layers);\n this.createMainTitle(facetKeys, title);\n this.updateMargins();\n const component = (\n <ChartsGroup\n settingsId={settingsId}\n chartSettings={chartSettings}\n facetKeys={facetKeys}\n facetSettings={facetSettings}\n chartSizes={this.chartSizes}\n chartsDimensions={this.chartsDimensions}\n scales={this.scales}\n groupedDots={groupedDots}\n trendsData={trendsData}\n legendData={this.legend}\n columnsCount={this.columnsCount}\n margins={this.margins}\n keyColumn={keyColumn}\n mainTitle={this.mainTitle}\n facetTitles={this.facetTitles}\n captionsSizes={this.captionsSizes}\n onlyPositive={onlyPositive}\n layersData={layersData}\n aesGetters={createAesGetters(legendInfo, layers, trend)}\n onTooltipHintSwitch={onTooltipHintSwitch}\n />\n );\n this.component = component;\n this.reactRoot?.render(component);\n }\n\n renderError(message: string) {\n this.reactRoot?.render(<Error message={message} />);\n }\n}\n\nexport default ChartRenderer;\n"],"names":["getChartEdgeSides","index","facetsCount","columnsCount","rowsCount","chartSides","calculatePaddings","xAxis","yAxis","captionsSizes","currentRowFacetKeys","facetTitles","chartEdgeSides","facetSettings","needLeftAxis","needLeftAxisTitle","needBottomAxis","needBottomAxisTitle","yCaptions","TICK_OFFSET","yTicks","DEFAULT_TICKS_SIZE","yAxisTitle","TITLE_LINE","MIN_PADDING","xCaptions","xTicks","xAxisTitle","leftAxisElements","FACET_AXIS_OFFSET","bottomAxisElements","facetTitlesLinesCount","key","FACET_TITLE_OFFSET","FACET_TITLE_LINE","getFacetRows","facetKeys","nRows","nColumns","result","i","getRowColumn","idx","row","column","createAesGetters","legendInfo","layers","trend","dotLayer","l","curveLayer","createAesGetter","DEFAULT_DOT_AES","BLACK","ChartRenderer","__publicField","jsx","Fragment","MIN_MARGIN","DEFAULT_WIDTH","DEFAULT_HEIGHT","scaleLinear","_a","node","createRoot","size","chartWidth","chartHeight","currentLeft","currentTop","res","currentRow","currentColumn","padding","outerWidth","outerHeight","chartsWidth","chartsHeight","groupedDots","trendsData","facetCount","maxNRows","maxNCols","minXAll","maxXAll","minYAll","maxYAll","dotExtentsByKeys","dotsData","minX","minY","maxX","maxY","newScalesX","newScalesY","needsUpdateXScales","needsUpdateYScales","scaleX","scaleLog","extents","middle","halfRange","rangeH","tempX","PADDINGS","prevScale","domain","range","trendYBoundsByKeys","trendsList","xBounds","i1","i2","scaleY","dotExtents","trendExtents","rangeV","tempY","onlyPositive","textMeasurer","TextMeasurer","maxYTick","getMaxTickWidth","ticks","scale","format","getTicksAndFormat","title","firstChart","lastChart","splitTextByWidth","facetLabels","titleTextHeight","TITLE_LINE_HEIGHT","titleHeight","TITLE_MARGIN","legend","grouping","legendItems","emptySizes","info","MAX_SHOWN_UNIQUE_VALUES_IN_LABELS","aesData","columnValue","_b","_c","scaleOrdinal","value","layer","isContinuousAes","columnName","type","colorScale","getContinuousColorScale","tickPositionScale","scaleSymlog","values","getContinuousLegendTicks","scaleSqrt","labels","v","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","legendHeight","settingsId","chartSettings","keyColumn","layersData","onTooltipHintSwitch","component","ChartsGroup","message","Error"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"ChartRenderer.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/ChartRenderer.tsx"],"sourcesContent":["import type { ScaleLinear } from 'd3-scale';\nimport { scaleLinear, scaleLog, scaleOrdinal, scaleSqrt, scaleSymlog } from 'd3-scale';\nimport type { ReactElement } from 'react';\nimport type { Root } from 'react-dom/client';\nimport { createRoot } from 'react-dom/client';\nimport { Error } from '../common/Error';\nimport type { DotAesItem, LegendData, LegendItem } from '../common/types';\nimport { DataFrameProvider } from '../common/useDataFrame';\nimport {\n BLACK,\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n MAX_SHOWN_UNIQUE_VALUES_IN_LABELS,\n TITLE_LINE_HEIGHT,\n TITLE_MARGIN,\n} from '../constants';\nimport type { DataFrame } from '../DataFrame';\nimport { FACET_TITLE_LINE } from '../discrete/constants';\nimport { splitTextByWidth } from '../discrete/utils';\nimport type { ColumnName, PointShape, ScatterplotLegendInfo } from '../types';\nimport { isContinuousAes } from '../types';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport { getContinuousColorScale } from '../utils/getContinuousColorScale';\nimport { getContinuousLegendTicks } from '../utils/getContinuousLegendTicks';\nimport { TextMeasurer } from '../utils/TextMeasurer/TextMeasurer';\nimport { ChartsGroup } from './components/ChartsGroup';\nimport type { AesGetters, CaptionsSizes, ChartDimensionsData, ChartSizes, ChartsScales, Margins } from './components/types';\nimport {\n DEFAULT_DOT_AES,\n DEFAULT_TICKS_SIZE,\n FACET_AXIS_OFFSET,\n FACET_TITLE_OFFSET,\n LEGEND_OFFSET,\n MIN_MARGIN,\n MIN_PADDING,\n PADDINGS,\n TICK_OFFSET,\n TITLE_LINE,\n} from './constants';\nimport type { GroupedDots } from './dots';\nimport type { ScatterplotLayerData } from './getLayersData';\nimport type { TrendsData } from './linearRegression';\nimport type { CurveLayer, DotsLayer, ScatterplotLayer, ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport { createAesGetter } from './utils/createAesGetter';\nimport { getTicksAndFormat } from './utils/getTicksAndFormat';\n\nfunction getChartEdgeSides(index: number, facetsCount: number, columnsCount: number, rowsCount: number) {\n const chartSides: ('left' | 'right' | 'top' | 'bottom')[] = [];\n if (index % columnsCount === columnsCount - 1) {\n chartSides.push('right');\n }\n if (index % columnsCount === 0) {\n chartSides.push('left');\n }\n if (index < columnsCount) {\n chartSides.push('top');\n }\n if (\n Math.ceil((index + 1) / columnsCount) === rowsCount ||\n (Math.ceil((index + 1) / columnsCount) === rowsCount - 1 &&\n index % columnsCount > (facetsCount - 1) % columnsCount)\n ) {\n chartSides.push('bottom');\n }\n return chartSides;\n}\n\nfunction calculatePaddings(\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n captionsSizes: CaptionsSizes,\n currentRowFacetKeys: string[],\n facetTitles: Record<string, string[]>,\n chartEdgeSides: ('left' | 'right' | 'top' | 'bottom')[],\n facetSettings?: ScatterplotSettingsImpl['facetSettings']\n) {\n const needLeftAxis = chartEdgeSides.includes('left') || !facetSettings?.sharedY;\n const needLeftAxisTitle = chartEdgeSides.includes('left') && yAxis.title !== '';\n const needBottomAxis = chartEdgeSides.includes('bottom') || !facetSettings?.sharedX;\n const needBottomAxisTitle = chartEdgeSides.includes('bottom') && xAxis.title !== '';\n\n const yCaptions = captionsSizes.yAxisCaptionsWidth + 2 * TICK_OFFSET;\n const yTicks = (yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + TICK_OFFSET;\n const yAxisTitle = needLeftAxisTitle ? TITLE_LINE + MIN_PADDING : 0;\n\n const xCaptions = captionsSizes.xAxisCaptionsWidth + 2 * TICK_OFFSET;\n const xTicks = xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const xAxisTitle = needBottomAxisTitle ? TITLE_LINE + MIN_PADDING : 0;\n\n const leftAxisElements = yCaptions + yTicks + yAxisTitle + FACET_AXIS_OFFSET;\n const bottomAxisElements = xCaptions + xTicks + xAxisTitle + FACET_AXIS_OFFSET;\n\n const facetTitlesLinesCount = Math.max(...currentRowFacetKeys.map(key => facetTitles[key].length));\n return {\n left: needLeftAxis ? leftAxisElements : MIN_PADDING,\n top: facetTitlesLinesCount === 0 ? 0 : FACET_TITLE_OFFSET * 2 + facetTitlesLinesCount * FACET_TITLE_LINE,\n bottom: needBottomAxis ? bottomAxisElements + 8 : MIN_PADDING,\n right: MIN_PADDING,\n };\n}\n\n// facet keys grouped by rows\nfunction getFacetRows(facetKeys: string[], nRows: number, nColumns: number): string[][] {\n const result: string[][] = [];\n for (let i = 0; i < nRows; i++) {\n result.push(facetKeys.slice(i * nColumns, i * nColumns + nColumns));\n }\n return result;\n}\n\nfunction getRowColumn(idx: number, columnsCount: number) {\n const row = Math.floor(idx / columnsCount);\n const column = idx - row * columnsCount;\n return [row, column];\n}\n\nfunction createAesGetters(\n dataFrame: DataFrame,\n legendInfo: ScatterplotLegendInfo,\n layers: ScatterplotLayer[],\n trend: ScatterplotSettingsImpl['trend']\n): AesGetters {\n const dotLayer = layers.find(l => l.type === 'dots') as DotsLayer | undefined;\n const curveLayer = layers.find(l => l.type === 'curve') as CurveLayer | undefined;\n\n return {\n dotShape: createAesGetter(dataFrame, legendInfo, dotLayer?.aes.dotShape ?? DEFAULT_DOT_AES.shape,'dotShape'),\n dotColor: createAesGetter(dataFrame, legendInfo, dotLayer?.aes.dotFill ?? DEFAULT_DOT_AES.color, 'dotFill'),\n dotSize: createAesGetter(dataFrame, legendInfo, dotLayer?.aes.dotSize ?? DEFAULT_DOT_AES.size, 'dotSize'),\n lineShape: createAesGetter(dataFrame, legendInfo, curveLayer?.aes.lineShape ?? 'solid', 'lineShape'),\n lineColor: createAesGetter(dataFrame, legendInfo, curveLayer?.aes.lineColor ?? BLACK, 'lineColor'),\n trendColor: createAesGetter(dataFrame, legendInfo, trend?.color ?? DEFAULT_DOT_AES.color, 'fillColor')\n };\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n component: ReactElement = (<></>);\n margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n chartsDimensions: Record<string, ChartDimensionsData> = {};\n chartSizes: ChartSizes = {\n chartWidth: DEFAULT_WIDTH, // width of single chart\n chartHeight: DEFAULT_HEIGHT, // height of single chart\n chartsWidth: DEFAULT_WIDTH, // width of all charts in charts row\n chartsHeight: DEFAULT_HEIGHT, // width of all charts in charts column, without axes\n totalWidth: DEFAULT_WIDTH, // width of all charts in charts row, plus left axis, plus legend\n totalHeight: DEFAULT_HEIGHT, // width of all charts in charts height, plus bottom axis, plus top title\n };\n columnsCount = 1;\n rowsCount = 1;\n scales: ChartsScales = {\n x: {null: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH])},\n y: {null: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0])},\n };\n captionsSizes: CaptionsSizes = {\n xAxisCaptionsWidth: 30,\n yAxisCaptionsWidth: 100,\n };\n facetTitles: Record<string, string[]> = {}; // can be multiline\n mainTitle: string[] = []; // can be multiline\n legend: LegendData = {width: 0, height: 0, items: []};\n\n clear() {\n if (this.parentNode && this.rootNode) {\n this.parentNode?.removeChild(this.rootNode);\n this.parentNode = null;\n this.rootNode = null;\n }\n // timeout to avoid trying to unmount during rendering\n setTimeout(() => {\n this.reactRoot?.unmount();\n this.reactRoot = null;\n });\n }\n\n init(node: HTMLElement) {\n if (this.parentNode === null) {\n this.parentNode = node;\n this.rootNode = document.createElement('div');\n this.parentNode.appendChild(this.rootNode);\n this.reactRoot = createRoot(this.rootNode);\n }\n }\n\n updateChartSizes(size: ScatterplotSettingsImpl['chartSettings']['size']) {\n this.chartSizes.chartWidth = size.width;\n this.chartSizes.chartHeight = size.height;\n }\n\n updateChartDimensions(\n facetKeys: string[],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis']\n ) {\n const {chartWidth, chartHeight} = this.chartSizes;\n let currentLeft = 0;\n let currentTop = 0;\n this.chartsDimensions = facetKeys.reduce((res: Record<string, ChartDimensionsData>, key: string, index) => {\n const [currentRow, currentColumn] = getRowColumn(index, this.columnsCount);\n const chartEdgeSides = getChartEdgeSides(index, facetKeys.length, this.columnsCount, this.rowsCount);\n const padding = calculatePaddings(\n xAxis,\n yAxis,\n this.captionsSizes,\n getFacetRows(facetKeys, this.rowsCount, this.columnsCount)[currentRow],\n this.facetTitles,\n chartEdgeSides,\n facetSettings\n );\n\n const outerWidth = chartWidth + padding.left + padding.right;\n const outerHeight = chartHeight + padding.top + padding.bottom;\n res[key] = {\n left: currentLeft,\n top: currentTop,\n chartEdgeSides,\n padding,\n inner: {width: chartWidth, height: chartHeight},\n outer: {width: outerWidth, height: outerHeight},\n };\n currentLeft += outerWidth;\n if (currentColumn === this.columnsCount - 1) {\n currentLeft = 0;\n currentTop += outerHeight;\n }\n return res;\n }, {});\n\n const chartsWidth = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.width + this.chartsDimensions[key].left)\n );\n const chartsHeight = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.height + this.chartsDimensions[key].top)\n );\n this.chartSizes.chartsWidth = chartsWidth;\n this.chartSizes.chartsHeight = chartsHeight;\n }\n\n updateViewport(\n facetKeys: string[],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n groupedDots: GroupedDots,\n trendsData: TrendsData | null\n ) {\n const facetCount = facetKeys.length;\n const maxNRows = Math.min(facetSettings.nRows ?? facetCount, facetCount);\n const maxNCols = Math.min(facetSettings.nCols ?? facetCount, facetCount);\n // Use columns/rows count from settings if some of them defined, else make 1 column\n this.columnsCount = facetSettings.nRows ? Math.ceil(facetCount / maxNRows) : maxNCols;\n this.rowsCount = Math.ceil(facetCount / this.columnsCount);\n\n let [minXAll, maxXAll] = [Infinity, -Infinity];\n let [minYAll, maxYAll] = [Infinity, -Infinity];\n const dotExtentsByKeys = facetKeys.reduce((res: Record<string, Record<string, number>>, key) => {\n const dotsData = groupedDots[key];\n const {minX, minY, maxX, maxY} = dotsData;\n minXAll = Math.min(minXAll, minX);\n minYAll = Math.min(minYAll, minY);\n maxXAll = Math.max(maxXAll, maxX);\n maxYAll = Math.max(maxYAll, maxY);\n res[key] = {minX, maxX, minY, maxY};\n return res;\n }, {});\n\n const newScalesX:ChartsScales['x'] = {};\n const newScalesY:ChartsScales['y'] = {};\n\n let needsUpdateXScales = false;\n let needsUpdateYScales = false;\n facetKeys.forEach(key => {\n const scaleX = xAxis.scale === 'log' ? scaleLog() : scaleLinear();\n\n const extents = dotExtentsByKeys[key];\n let minX = xAxis.lowerValue ? Number(xAxis.lowerValue) : facetSettings.sharedX ? minXAll : extents.minX;\n let maxX = xAxis.upperValue ? Number(xAxis.upperValue) : facetSettings.sharedX ? maxXAll : extents.maxX;\n\n if (typeof xAxis.symmetricRange !== 'undefined') {\n const middle = xAxis.symmetricRange;\n if (middle >= minX && middle <= maxX) {\n const halfRange = Math.max(middle - minX, maxX - middle);\n minX = middle - halfRange;\n maxX = middle + halfRange;\n }\n }\n\n const rangeH = [0, this.chartSizes.chartWidth];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempX = scaleX\n .copy()\n .domain([minX, maxX])\n .range([PADDINGS.LEFT, this.chartSizes.chartWidth - PADDINGS.RIGHT]);\n scaleX\n .domain([tempX.invert(0), tempX.invert(this.chartSizes.chartWidth)])\n .range(rangeH)\n .nice();\n const prevScale = this.scales.x[key];\n if (prevScale === undefined) {\n needsUpdateXScales = true;\n } else if (!needsUpdateXScales) {\n const domain = prevScale.domain();\n const range = prevScale.range();\n if (\n domain[0] !== scaleX.domain()[0] || domain[1] !== scaleX.domain()[1]\n || range[0] !== scaleX.range()[0] || range[1] !== scaleX.range()[1]\n ) {\n needsUpdateXScales = true;\n }\n }\n newScalesX[key] = scaleX;\n });\n // for right Y viewport bounds we must know X bounds, to calculate trends area Y bounds\n const trendYBoundsByKeys = facetKeys.reduce((res: Record<string, Record<string, number>>, key) => {\n const trendsList = trendsData ? trendsData[key] : [];\n res[key] = trendsList.reduce(\n (res, trend) => {\n const xBounds = trend.bounded ? trend.xBounds : this.scales.x[key].domain();\n const i1 = trend.getInterval(xBounds[0]);\n const i2 = trend.getInterval(xBounds[1]);\n res.minY = Math.min(res.minY, isNaN(i1.left) ? res.minY : i1.left, isNaN(i2.left) ? res.minY : i2.left);\n res.maxY = Math.max(res.maxY, isNaN(i1.right) ? res.maxY : i1.right, isNaN(i2.right) ? res.maxY : i2.right);\n return res;\n },\n {minY: Infinity, maxY: -Infinity}\n );\n minYAll = Math.min(minYAll, res[key].minY);\n maxYAll = Math.max(maxYAll, res[key].maxY);\n return res;\n }, {});\n facetKeys.forEach(key => {\n const scaleY = yAxis.scale === 'log' ? scaleLog() : scaleLinear();\n\n const dotExtents = dotExtentsByKeys[key];\n const trendExtents = trendYBoundsByKeys[key];\n let minY = yAxis.lowerValue ? Number(yAxis.lowerValue) : facetSettings.sharedY ? minYAll : Math.min(dotExtents.minY, trendExtents.minY);\n let maxY = yAxis.upperValue ? Number(yAxis.upperValue) : facetSettings.sharedY ? maxYAll : Math.max(dotExtents.maxY, trendExtents.maxY);\n\n if (typeof yAxis.symmetricRange !== 'undefined') {\n const middle = yAxis.symmetricRange;\n if (middle >= minY && middle <= maxY) {\n const halfRange = Math.max(middle - minY, maxY - middle);\n minY = middle - halfRange;\n maxY = middle + halfRange;\n }\n }\n\n const rangeV = [this.chartSizes.chartHeight, 0];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempY = scaleY\n .copy()\n .domain([minY, maxY])\n .range([this.chartSizes.chartHeight - PADDINGS.BOTTOM, PADDINGS.TOP]);\n scaleY\n .domain([tempY.invert(this.chartSizes.chartHeight), tempY.invert(0)])\n .range(rangeV)\n .nice();\n\n const prevScale = this.scales.y[key];\n if (prevScale === undefined) {\n needsUpdateYScales = true;\n } else if (!needsUpdateYScales) {\n const domain = prevScale.domain();\n const range = prevScale.range();\n if (\n domain[0] !== scaleY.domain()[0] || domain[1] !== scaleY.domain()[1]\n || range[0] !== scaleY.range()[0] || range[1] !== scaleY.range()[1]\n ) {\n needsUpdateYScales = true;\n }\n }\n newScalesY[key] = scaleY;\n });\n\n if (needsUpdateXScales) {\n this.scales.x = newScalesX;\n }\n if (needsUpdateYScales) {\n this.scales.y = newScalesY;\n }\n }\n\n updateCaptionsSize(onlyPositive: boolean) {\n const textMeasurer = new TextMeasurer('600 14px Arial');\n\n let maxYTick = 0;\n\n function getMaxTickWidth(ticks: string[]) {\n return Math.max(...ticks.map(key => textMeasurer.getTextWidth(key)));\n }\n\n Object.values(this.scales.y).forEach(scale => {\n const {ticks, format} = getTicksAndFormat(scale, onlyPositive);\n maxYTick = Math.max(maxYTick, getMaxTickWidth(ticks.map(format)));\n });\n this.captionsSizes = {\n xAxisCaptionsWidth: 20,\n yAxisCaptionsWidth: maxYTick,\n };\n }\n\n createMainTitle(facetKeys: string[], title: ScatterplotSettingsImpl['chartSettings']['title']) {\n const firstChart = this.chartsDimensions[facetKeys[0]];\n const lastChart = this.chartsDimensions[facetKeys[facetKeys.length - 1]];\n\n this.mainTitle = splitTextByWidth(\n title.name,\n this.chartSizes.chartsWidth - firstChart.padding.left - lastChart.padding.right,\n 20\n );\n }\n\n createFacetTitles(facetKeys: string[], facetLabels: string[][]) {\n this.facetTitles = facetKeys.reduce((res: Record<string, string[]>, key, idx) => {\n if (facetLabels[idx].length === 1 && facetLabels[idx][0] === 'null') {\n res[key] = [];\n } else {\n res[key] = splitTextByWidth(facetLabels[idx].join(', '), this.chartSizes.chartWidth, 14);\n }\n return res;\n }, {});\n }\n\n updateMargins() {\n const titleTextHeight = TITLE_LINE_HEIGHT * this.mainTitle.length;\n const titleHeight = titleTextHeight > 0 ? titleTextHeight + TITLE_MARGIN * 2 : 0;\n this.margins = {\n top: Math.max(titleHeight, MIN_MARGIN),\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: this.legend.width + MIN_MARGIN,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartsWidth + this.margins.right;\n this.chartSizes.totalHeight =\n this.margins.top + Math.max(this.chartSizes.chartsHeight, this.legend.height) + this.margins.bottom;\n }\n\n updateLegendSize(\n legend: ScatterplotSettingsImpl['chartSettings']['legend'],\n legendInfo: ScatterplotLegendInfo,\n grouping: ColumnName[],\n layers: ScatterplotLayer[]\n ) {\n if (!legend.show) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const legendItems: LegendItem[] = [];\n const emptySizes = {width:0, height:0, left:0, top: 0};\n\n grouping.forEach(column => {\n const info = legendInfo[column.value];\n if (info.usedAes.length === 0 || !info.aesMap) {\n return;\n }\n if (info.values.length > MAX_SHOWN_UNIQUE_VALUES_IN_LABELS) {\n console.warn(`Too many values for discrete legend (${info.values.length})`);\n return;\n }\n const aesData: Record<string, DotAesItem> = {};\n info.values.forEach(columnValue => {\n if (!aesData[columnValue]) {\n aesData[columnValue] = {...DEFAULT_DOT_AES} as DotAesItem;\n }\n info.usedAes.forEach(key => {\n if (key === 'dotFill' || key === 'lineColor') {\n aesData[columnValue].color = (info.aesMap(columnValue, key) ?? BLACK) as string;\n }\n if (key === 'dotShape') {\n aesData[columnValue].shape = (info.aesMap(columnValue,key) ?? '21') as PointShape;\n }\n if (key === 'dotSize') {\n aesData[columnValue].size = (info.aesMap(columnValue,key) ?? 3) as number;\n }\n });\n });\n\n const title = column.label ?? column.value;\n const scale = scaleOrdinal<DotAesItem>()\n .domain(info.values)\n .range(info.values.map(value => aesData[value]))\n .unknown(DEFAULT_DOT_AES);\n legendItems.push({...emptySizes, id: column.value, type: 'dots', title, scale, values:info.values, labels:info.labels});\n });\n\n layers.forEach(layer => {\n if (layer.type === 'dots' && isContinuousAes(layer.aes.dotFill)) {\n const {domain, range, columnName, type = 'linear'} = layer.aes.dotFill;\n const title = columnName.label ?? columnName.value;\n const colorScale = getContinuousColorScale(range, domain, 'linear') as ScaleLinear<string, string>; // always linear for legend - scale to render gradient, not for dots\n const tickPositionScale = (type === 'log' ? scaleSymlog<string, string>() : scaleLinear<string, string>())\n .domain(domain)\n // @ts-ignore\n .range([this.chartSizes.chartHeight, 0]);\n const values = getContinuousLegendTicks(tickPositionScale, domain as [number, number]);\n legendItems.push({...emptySizes, id: 'dotFill', type: 'continuous', title, scale: colorScale, tickPositionScale, values});\n }\n if (layer.type === 'dots' && isContinuousAes(layer.aes.dotSize)) {\n const {columnName, domain, range} = layer.aes.dotSize;\n const title = columnName.label ?? columnName.value;\n const scale = scaleSqrt(domain, range);\n const values = scale.ticks(3);\n const format = scale.tickFormat(3);\n const labels = values.reduce((res: Record<string, string>, v) => {\n res[String(v)] = format(v);\n return res;\n }, {});\n legendItems.push({...emptySizes, id: columnName.value, type: 'size', title, scale, values, labels});\n }\n });\n\n if (!legendItems.length) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const items = arrangeLegendParts(legendItems, this.chartSizes.chartHeight);\n\n const lastItem = items[items.length - 1];\n const legendWidth = lastItem.left + lastItem.width + LEGEND_OFFSET;\n const legendHeight = this.chartSizes.chartHeight;\n\n this.legend = {\n width: legendWidth,\n height: legendHeight,\n items,\n };\n }\n\n render(\n dataFrame: DataFrame,\n settingsId: string,\n chartSettings: ScatterplotSettingsImpl['chartSettings'],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n facetKeys: string[],\n facetLabels: string[][],\n groupedDots: GroupedDots,\n trendsData: TrendsData | null,\n keyColumn: ColumnName,\n onlyPositive: {x: boolean; y: boolean},\n legendInfo: ScatterplotLegendInfo,\n layersData: Record<string, ScatterplotLayerData[]>,\n grouping: ColumnName[],\n layers: ScatterplotLayer[],\n trend: ScatterplotSettingsImpl['trend'],\n onTooltipHintSwitch: (v:boolean) => void\n ) {\n const {xAxis, yAxis, size, title, legend} = chartSettings;\n this.updateChartSizes(size);\n this.updateViewport(facetKeys, facetSettings, xAxis, yAxis, groupedDots, trendsData);\n this.updateCaptionsSize(onlyPositive.y);\n this.createFacetTitles(facetKeys, facetLabels);\n this.updateChartDimensions(facetKeys, facetSettings, xAxis, yAxis);\n this.updateLegendSize(legend, legendInfo, grouping, layers);\n this.createMainTitle(facetKeys, title);\n this.updateMargins();\n const component = (\n <DataFrameProvider dataFrame={dataFrame}>\n <ChartsGroup\n settingsId={settingsId}\n chartSettings={chartSettings}\n facetKeys={facetKeys}\n facetSettings={facetSettings}\n chartSizes={this.chartSizes}\n chartsDimensions={this.chartsDimensions}\n scales={this.scales}\n groupedDots={groupedDots}\n trendsData={trendsData}\n legendData={this.legend}\n columnsCount={this.columnsCount}\n margins={this.margins}\n keyColumn={keyColumn}\n mainTitle={this.mainTitle}\n facetTitles={this.facetTitles}\n captionsSizes={this.captionsSizes}\n onlyPositive={onlyPositive}\n layersData={layersData}\n aesGetters={createAesGetters(dataFrame, legendInfo, layers, trend)}\n onTooltipHintSwitch={onTooltipHintSwitch}\n />\n </DataFrameProvider>\n );\n this.component = component;\n this.reactRoot?.render(component);\n }\n\n renderError(message: string) {\n this.reactRoot?.render(<Error message={message} />);\n }\n}\n\nexport default ChartRenderer;\n"],"names":["getChartEdgeSides","index","facetsCount","columnsCount","rowsCount","chartSides","calculatePaddings","xAxis","yAxis","captionsSizes","currentRowFacetKeys","facetTitles","chartEdgeSides","facetSettings","needLeftAxis","needLeftAxisTitle","needBottomAxis","needBottomAxisTitle","yCaptions","TICK_OFFSET","yTicks","DEFAULT_TICKS_SIZE","yAxisTitle","TITLE_LINE","MIN_PADDING","xCaptions","xTicks","xAxisTitle","leftAxisElements","FACET_AXIS_OFFSET","bottomAxisElements","facetTitlesLinesCount","key","FACET_TITLE_OFFSET","FACET_TITLE_LINE","getFacetRows","facetKeys","nRows","nColumns","result","i","getRowColumn","idx","row","column","createAesGetters","dataFrame","legendInfo","layers","trend","dotLayer","l","curveLayer","createAesGetter","DEFAULT_DOT_AES","BLACK","ChartRenderer","__publicField","jsx","Fragment","MIN_MARGIN","DEFAULT_WIDTH","DEFAULT_HEIGHT","scaleLinear","_a","node","createRoot","size","chartWidth","chartHeight","currentLeft","currentTop","res","currentRow","currentColumn","padding","outerWidth","outerHeight","chartsWidth","chartsHeight","groupedDots","trendsData","facetCount","maxNRows","maxNCols","minXAll","maxXAll","minYAll","maxYAll","dotExtentsByKeys","dotsData","minX","minY","maxX","maxY","newScalesX","newScalesY","needsUpdateXScales","needsUpdateYScales","scaleX","scaleLog","extents","middle","halfRange","rangeH","tempX","PADDINGS","prevScale","domain","range","trendYBoundsByKeys","trendsList","xBounds","i1","i2","scaleY","dotExtents","trendExtents","rangeV","tempY","onlyPositive","textMeasurer","TextMeasurer","maxYTick","getMaxTickWidth","ticks","scale","format","getTicksAndFormat","title","firstChart","lastChart","splitTextByWidth","facetLabels","titleTextHeight","TITLE_LINE_HEIGHT","titleHeight","TITLE_MARGIN","legend","grouping","legendItems","emptySizes","info","MAX_SHOWN_UNIQUE_VALUES_IN_LABELS","aesData","columnValue","scaleOrdinal","m","value","layer","isContinuousAes","columnName","type","colorScale","getContinuousColorScale","tickPositionScale","scaleSymlog","values","getContinuousLegendTicks","scaleSqrt","labels","v","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","legendHeight","settingsId","chartSettings","keyColumn","layersData","onTooltipHintSwitch","component","DataFrameProvider","ChartsGroup","message","Error"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,18 +1,18 @@
1
- import { DEFAULT_HEIGHT_SMALL as n, DEFAULT_HEIGHT as u, DEFAULT_WIDTH_SMALL as p, DEFAULT_WIDTH as c, BLACK as o } from "../constants.js";
1
+ import p from "../node_modules/lodash/lodash.js";
2
+ import { DEFAULT_HEIGHT_SMALL as d, DEFAULT_HEIGHT as c, DEFAULT_WIDTH_SMALL as y, DEFAULT_WIDTH as g, BLACK as l } from "../constants.js";
2
3
  import "../types/common.js";
3
4
  import "../types/discrete.js";
4
- import { ScatterplotSettingsSchema as d } from "../types/scatterplot.js";
5
+ import { ScatterplotSettingsSchema as m } from "../types/scatterplot.js";
5
6
  import "../types/heatmap.js";
6
7
  import "../types/dendro.js";
7
8
  import "../types/histogram.js";
8
9
  import "../types/bubble.js";
9
- import { exhaustive as y } from "../utils/index.js";
10
- import g from "../node_modules/lodash/lodash.js";
11
- var m = Object.defineProperty, f = (s, t, e) => t in s ? m(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e, i = (s, t, e) => f(s, typeof t != "symbol" ? t + "" : t, e);
12
- class v {
10
+ import { exhaustive as f } from "../utils/index.js";
11
+ var v = Object.defineProperty, S = (s, t, e) => t in s ? v(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e, i = (s, t, e) => S(s, typeof t != "symbol" ? t + "" : t, e);
12
+ class A {
13
13
  constructor(t) {
14
14
  i(this, "type", "dots"), i(this, "aes", {
15
- dotFill: o,
15
+ dotFill: l,
16
16
  dotShape: "21",
17
17
  dotSize: 3,
18
18
  opacity: 1
@@ -22,10 +22,10 @@ class v {
22
22
  };
23
23
  }
24
24
  }
25
- class A {
25
+ class w {
26
26
  constructor(t) {
27
27
  i(this, "type", "curve"), i(this, "smoothing"), i(this, "aes", {
28
- lineColor: o,
28
+ lineColor: l,
29
29
  lineWidth: 1,
30
30
  lineShape: "solid",
31
31
  opacity: 1
@@ -35,14 +35,14 @@ class A {
35
35
  };
36
36
  }
37
37
  }
38
- class E {
38
+ class k {
39
39
  constructor(t) {
40
40
  i(this, "id"), i(this, "type", "scatterplot"), i(this, "keyColumn"), i(this, "facetSettings"), i(this, "x"), i(this, "y"), i(this, "facetBy"), i(this, "grouping"), i(this, "label"), i(this, "highlight"), i(this, "chartSettings"), i(this, "inheritedAes"), i(this, "trend"), i(this, "layers");
41
- var e, r, h, a;
42
- d.parse(t), this.id = g.uniqueId("settings"), this.keyColumn = t.keyColumn, this.facetSettings = { sharedX: !0, sharedY: !0, titlePosition: "left", ...t.facetSettings }, this.x = t.x, this.y = t.y, this.facetBy = t.facetBy ?? [], this.grouping = t.grouping ?? [], this.label = t.label ?? null, this.highlight = t.highlight ?? null, this.chartSettings = {
41
+ var e, r, h, a, n, u;
42
+ m.parse(t), this.id = p.uniqueId("settings"), this.keyColumn = t.keyColumn, this.facetSettings = { sharedX: !0, sharedY: !0, titlePosition: "left", ...t.facetSettings }, this.x = t.x, this.y = t.y, this.facetBy = t.facetBy ?? [], this.grouping = t.grouping ?? [], this.label = t.label ?? null, this.highlight = t.highlight ?? null, this.chartSettings = {
43
43
  size: {
44
- width: ((e = t == null ? void 0 : t.size) == null ? void 0 : e.width) ?? (this.facetBy.length ? p : c),
45
- height: ((r = t == null ? void 0 : t.size) == null ? void 0 : r.height) ?? (this.facetBy.length ? n : u)
44
+ width: ((e = t == null ? void 0 : t.size) == null ? void 0 : e.width) ?? (this.facetBy.length ? y : g),
45
+ height: ((r = t == null ? void 0 : t.size) == null ? void 0 : r.height) ?? (this.facetBy.length ? d : c)
46
46
  },
47
47
  title: {
48
48
  position: "center",
@@ -71,24 +71,24 @@ class E {
71
71
  ...t.legend
72
72
  },
73
73
  tooltips: {
74
- show: !0,
75
- ...t.tooltips
74
+ ...t.tooltips,
75
+ show: ((n = t.tooltips) == null ? void 0 : n.show) !== !1 && (((u = t.tooltips) == null ? void 0 : u.content) ?? []).length > 0
76
76
  }
77
77
  }, this.inheritedAes = t.inheritedAes ?? {}, this.trend = t != null && t.trend ? {
78
78
  bounded: t.trend.bounded ?? !1,
79
- color: t.trend.color ?? o
80
- } : null, this.layers = t.layers.map((l) => {
81
- if (l.type === "dots")
82
- return new v(l);
83
- if (l.type === "curve")
84
- return new A(l);
85
- y(l, "Unknown layer type");
79
+ color: t.trend.color ?? l
80
+ } : null, this.layers = t.layers.map((o) => {
81
+ if (o.type === "dots")
82
+ return new A(o);
83
+ if (o.type === "curve")
84
+ return new w(o);
85
+ f(o, "Unknown layer type");
86
86
  }).filter(Boolean);
87
87
  }
88
88
  }
89
89
  export {
90
- A as CurveLayer,
91
- v as DotsLayer,
92
- E as ScatterplotSettingsImpl
90
+ w as CurveLayer,
91
+ A as DotsLayer,
92
+ k as ScatterplotSettingsImpl
93
93
  };
94
94
  //# sourceMappingURL=ScatterplotSettingsImpl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScatterplotSettingsImpl.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/ScatterplotSettingsImpl.ts"],"sourcesContent":["import {BLACK, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL} from '../constants';\nimport {type AesMap, ScatterplotSettingsSchema} from '../types';\nimport type {\n AxisSettings,\n ColumnName,\n ContinuousAesFromColumn,\n FrameType,\n InheritAesScatterplot,\n LegendPosition,\n LineShape,\n CurveLayer as OuterCurveLayer,\n DotsLayer as OuterDotsLayer,\n PointShape,\n ScatterplotSettings,\n SettingsInterface,\n TitlePosition,\n} from '../types';\nimport {exhaustive} from '../utils';\nimport lodash from 'lodash';\n\nexport class DotsLayer {\n readonly type = 'dots';\n readonly aes: {\n dotFill: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n dotShape: PointShape | InheritAesScatterplot;\n dotSize: number | ContinuousAesFromColumn<number>;\n opacity: number;\n } = {\n dotFill: BLACK,\n dotShape: '21',\n dotSize: 3,\n opacity: 1,\n };\n\n constructor(layer: OuterDotsLayer) {\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport class CurveLayer {\n readonly type = 'curve';\n readonly smoothing: boolean;\n readonly aes: {\n lineColor: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n lineWidth: number;\n lineShape: LineShape;\n opacity: number;\n } = {\n lineColor: BLACK,\n lineWidth: 1,\n lineShape: 'solid',\n opacity: 1,\n };\n\n constructor(layer: OuterCurveLayer) {\n this.smoothing = layer.smoothing ?? false;\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport type ScatterplotLayer = DotsLayer | CurveLayer;\n\nexport interface ScatterplotAxisSettings extends AxisSettings {\n title: string | ColumnName;\n}\n\nexport class ScatterplotSettingsImpl implements SettingsInterface {\n readonly id: string;\n readonly type = 'scatterplot';\n readonly keyColumn: ColumnName;\n readonly facetSettings: {\n sharedX: boolean;\n sharedY: boolean;\n nRows?: number;\n nCols?: number;\n titlePosition: 'left' | 'center' | 'right';\n };\n readonly x: ColumnName;\n readonly y: ColumnName;\n readonly facetBy: ColumnName[];\n readonly grouping: ColumnName[];\n readonly label: ColumnName | null;\n readonly highlight: ColumnName | null;\n readonly chartSettings: {\n readonly size: {width: number; height: number};\n readonly title: {name: string; show: boolean; position: TitlePosition};\n readonly yAxis: ScatterplotAxisSettings;\n readonly xAxis: ScatterplotAxisSettings;\n readonly frame: {type: FrameType};\n readonly legend: {show: boolean; position: LegendPosition};\n readonly tooltips: {show: boolean; content?: ColumnName[]};\n };\n readonly inheritedAes: Record<string, AesMap>;\n\n readonly trend: {\n bounded: boolean;\n color: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n } | null;\n\n readonly layers: ScatterplotLayer[];\n\n constructor(settings: ScatterplotSettings) {\n ScatterplotSettingsSchema.parse(settings);\n this.id = lodash.uniqueId('settings');\n this.keyColumn = settings.keyColumn;\n this.facetSettings = {sharedX: true, sharedY: true, titlePosition: 'left', ...settings.facetSettings};\n this.x = settings.x;\n this.y = settings.y;\n this.facetBy = settings.facetBy ?? [];\n this.grouping = settings.grouping ?? [];\n this.label = settings.label ?? null;\n this.highlight = settings.highlight ?? null;\n this.chartSettings = {\n size: {\n width: settings?.size?.width ?? (this.facetBy.length ? DEFAULT_WIDTH_SMALL : DEFAULT_WIDTH),\n height: settings?.size?.height ?? (this.facetBy.length ? DEFAULT_HEIGHT_SMALL : DEFAULT_HEIGHT),\n },\n title: {\n position: 'center',\n show: true,\n ...settings.title,\n name: settings.title?.name ?? 'Chart',\n },\n yAxis: {\n title: settings.y.label ?? settings.y.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.yAxis,\n },\n xAxis: {\n title: settings.x.label ?? settings.x.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.xAxis,\n },\n frame: {type: settings.frame?.type ?? 'full'},\n legend: {\n show: true,\n position: 'right',\n ...settings.legend,\n },\n tooltips: {\n show: true,\n ...settings.tooltips,\n },\n };\n\n this.inheritedAes = settings.inheritedAes ?? {};\n this.trend = settings?.trend\n ? {\n bounded: settings.trend.bounded ?? false,\n color: settings.trend.color ?? BLACK,\n }\n : null;\n\n this.layers = settings.layers\n .map(layer => {\n if (layer.type === 'dots') {\n return new DotsLayer(layer);\n }\n if (layer.type === 'curve') {\n return new CurveLayer(layer);\n }\n exhaustive(layer, 'Unknown layer type');\n })\n .filter(Boolean) as ScatterplotLayer[];\n }\n}\n"],"names":["DotsLayer","layer","__publicField","BLACK","CurveLayer","ScatterplotSettingsImpl","settings","ScatterplotSettingsSchema","lodash","_a","DEFAULT_WIDTH_SMALL","DEFAULT_WIDTH","_b","DEFAULT_HEIGHT_SMALL","DEFAULT_HEIGHT","_c","_d","exhaustive"],"mappings":";;;;;;;;;;;AAoBO,MAAMA,EAAU;AAAA,EAcnB,YAAYC,GAAuB;AAb1BC,IAAAA,EAAA,MAAA,QAAO,MAAA,GACPA,EAAA,MAAA,OAKL;AAAA,MACA,SAASC;AAAAA,MACT,UAAU;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,IAAA,CAAA,GAIT,KAAK,MAAM;AAAA,MACP,GAAG,KAAK;AAAA,MACR,GAAGF,EAAM;AAAA,IAAA;AAAA,EAEjB;AACJ;AAEO,MAAMG,EAAW;AAAA,EAepB,YAAYH,GAAwB;AAd3BC,IAAAA,EAAA,MAAA,QAAO,OAAA,GACPA,EAAA,MAAA,WAAA,GACAA,EAAA,MAAA,OAKL;AAAA,MACA,WAAWC;AAAAA,MACX,WAAW;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,IAAA,CAAA,GAIT,KAAK,YAAYF,EAAM,aAAa,IACpC,KAAK,MAAM;AAAA,MACP,GAAG,KAAK;AAAA,MACR,GAAGA,EAAM;AAAA,IAAA;AAAA,EAEjB;AACJ;AAQO,MAAMI,EAAqD;AAAA,EAmC9D,YAAYC,GAA+B;AAlClCJ,IAAAA,EAAA,MAAA,IAAA,GACAA,EAAA,MAAA,QAAO,aAAA,GACPA,EAAA,MAAA,WAAA,GACAA,EAAA,MAAA,eAAA,GAOAA,EAAA,MAAA,GAAA,GACAA,EAAA,MAAA,GAAA,GACAA,EAAA,MAAA,SAAA,GACAA,EAAA,MAAA,UAAA,GACAA,EAAA,MAAA,OAAA,GACAA,EAAA,MAAA,WAAA,GACAA,EAAA,MAAA,eAAA,GASAA,EAAA,MAAA,cAAA,GAEAA,EAAA,MAAA,OAAA,GAKAA,EAAA,MAAA,QAAA;;AAGLK,IAAAA,EAA0B,MAAMD,CAAQ,GACxC,KAAK,KAAKE,EAAO,SAAS,UAAU,GACpC,KAAK,YAAYF,EAAS,WAC1B,KAAK,gBAAgB,EAAC,SAAS,IAAM,SAAS,IAAM,eAAe,QAAQ,GAAGA,EAAS,iBACvF,KAAK,IAAIA,EAAS,GAClB,KAAK,IAAIA,EAAS,GAClB,KAAK,UAAUA,EAAS,WAAW,CAAA,GACnC,KAAK,WAAWA,EAAS,YAAY,CAAA,GACrC,KAAK,QAAQA,EAAS,SAAS,MAC/B,KAAK,YAAYA,EAAS,aAAa,MACvC,KAAK,gBAAgB;AAAA,MACjB,MAAM;AAAA,QACF,SAAOG,IAAAH,KAAA,OAAA,SAAAA,EAAU,SAAV,OAAA,SAAAG,EAAgB,WAAU,KAAK,QAAQ,SAASC,IAAsBC;AAAAA,QAC7E,UAAQC,IAAAN,KAAA,OAAA,SAAAA,EAAU,SAAV,OAAA,SAAAM,EAAgB,YAAW,KAAK,QAAQ,SAASC,IAAuBC;AAAAA,MAAA;AAAA,MAEpF,OAAO;AAAA,QACH,UAAU;AAAA,QACV,MAAM;AAAA,QACN,GAAGR,EAAS;AAAA,QACZ,QAAMS,IAAAT,EAAS,UAAT,OAAA,SAAAS,EAAgB,SAAQ;AAAA,MAAA;AAAA,MAElC,OAAO;AAAA,QACH,OAAOT,EAAS,EAAE,SAASA,EAAS,EAAE;AAAA,QACtC,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA,QACX,GAAGA,EAAS;AAAA,MAAA;AAAA,MAEhB,OAAO;AAAA,QACH,OAAOA,EAAS,EAAE,SAASA,EAAS,EAAE;AAAA,QACtC,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA,QACX,GAAGA,EAAS;AAAA,MAAA;AAAA,MAEhB,OAAO,EAAC,QAAMU,IAAAV,EAAS,UAAT,OAAA,SAAAU,EAAgB,SAAQ,OAAA;AAAA,MACtC,QAAQ;AAAA,QACJ,MAAM;AAAA,QACN,UAAU;AAAA,QACV,GAAGV,EAAS;AAAA,MAAA;AAAA,MAEhB,UAAU;AAAA,QACN,MAAM;AAAA,QACN,GAAGA,EAAS;AAAA,MAAA;AAAA,IAAA,GAIpB,KAAK,eAAeA,EAAS,gBAAgB,CAAA,GAC7C,KAAK,QAAQA,KAAA,QAAAA,EAAU,QACjB;AAAA,MACI,SAASA,EAAS,MAAM,WAAW;AAAA,MACnC,OAAOA,EAAS,MAAM,SAASH;AAAAA,IAAA,IAEnC,MAEN,KAAK,SAASG,EAAS,OAClB,IAAI,CAAAL,MAAS;AACV,UAAIA,EAAM,SAAS;AACf,eAAO,IAAID,EAAUC,CAAK;AAE9B,UAAIA,EAAM,SAAS;AACf,eAAO,IAAIG,EAAWH,CAAK;AAE/BgB,MAAAA,EAAWhB,GAAO,oBAAoB;AAAA,IAC1C,CAAC,EACA,OAAO,OAAO;AAAA,EACvB;AACJ;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"ScatterplotSettingsImpl.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/ScatterplotSettingsImpl.ts"],"sourcesContent":["import lodash from 'lodash';\nimport { BLACK, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL } from '../constants';\nimport type {\n AxisSettings,\n ColumnName,\n ContinuousAesFromColumn,\n FrameType,\n InheritAesScatterplot,\n LegendPosition,\n LineShape,\n CurveLayer as OuterCurveLayer,\n DotsLayer as OuterDotsLayer,\n PointShape,\n ScatterplotSettings,\n SettingsInterface,\n TitlePosition,\n} from '../types';\nimport { type AesRecord, ScatterplotSettingsSchema } from '../types';\nimport { exhaustive } from '../utils';\n\nexport class DotsLayer {\n readonly type = 'dots';\n readonly aes: {\n dotFill: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n dotShape: PointShape | InheritAesScatterplot;\n dotSize: number | ContinuousAesFromColumn<number>;\n opacity: number;\n } = {\n dotFill: BLACK,\n dotShape: '21',\n dotSize: 3,\n opacity: 1,\n };\n\n constructor(layer: OuterDotsLayer) {\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport class CurveLayer {\n readonly type = 'curve';\n readonly smoothing: boolean;\n readonly aes: {\n lineColor: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n lineWidth: number;\n lineShape: LineShape;\n opacity: number;\n } = {\n lineColor: BLACK,\n lineWidth: 1,\n lineShape: 'solid',\n opacity: 1,\n };\n\n constructor(layer: OuterCurveLayer) {\n this.smoothing = layer.smoothing ?? false;\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport type ScatterplotLayer = DotsLayer | CurveLayer;\n\nexport interface ScatterplotAxisSettings extends AxisSettings {\n title: string | ColumnName;\n}\n\nexport class ScatterplotSettingsImpl implements SettingsInterface {\n readonly id: string;\n readonly type = 'scatterplot';\n readonly keyColumn: ColumnName;\n readonly facetSettings: {\n sharedX: boolean;\n sharedY: boolean;\n nRows?: number;\n nCols?: number;\n titlePosition: 'left' | 'center' | 'right';\n };\n readonly x: ColumnName;\n readonly y: ColumnName;\n readonly facetBy: ColumnName[];\n readonly grouping: ColumnName[];\n readonly label: ColumnName | null;\n readonly highlight: ColumnName | null;\n readonly chartSettings: {\n readonly size: {width: number; height: number};\n readonly title: {name: string; show: boolean; position: TitlePosition};\n readonly yAxis: ScatterplotAxisSettings;\n readonly xAxis: ScatterplotAxisSettings;\n readonly frame: {type: FrameType};\n readonly legend: {show: boolean; position: LegendPosition};\n readonly tooltips: {show: boolean; content?: ColumnName[]};\n };\n readonly inheritedAes: Record<string, AesRecord>;\n\n readonly trend: {\n bounded: boolean;\n color: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n } | null;\n\n readonly layers: ScatterplotLayer[];\n\n constructor(settings: ScatterplotSettings) {\n ScatterplotSettingsSchema.parse(settings);\n this.id = lodash.uniqueId('settings');\n this.keyColumn = settings.keyColumn;\n this.facetSettings = {sharedX: true, sharedY: true, titlePosition: 'left', ...settings.facetSettings};\n this.x = settings.x;\n this.y = settings.y;\n this.facetBy = settings.facetBy ?? [];\n this.grouping = settings.grouping ?? [];\n this.label = settings.label ?? null;\n this.highlight = settings.highlight ?? null;\n this.chartSettings = {\n size: {\n width: settings?.size?.width ?? (this.facetBy.length ? DEFAULT_WIDTH_SMALL : DEFAULT_WIDTH),\n height: settings?.size?.height ?? (this.facetBy.length ? DEFAULT_HEIGHT_SMALL : DEFAULT_HEIGHT),\n },\n title: {\n position: 'center',\n show: true,\n ...settings.title,\n name: settings.title?.name ?? 'Chart',\n },\n yAxis: {\n title: settings.y.label ?? settings.y.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.yAxis,\n },\n xAxis: {\n title: settings.x.label ?? settings.x.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.xAxis,\n },\n frame: {type: settings.frame?.type ?? 'full'},\n legend: {\n show: true,\n position: 'right',\n ...settings.legend,\n },\n tooltips: {\n ...settings.tooltips,\n show: !(settings.tooltips?.show === false) && (settings.tooltips?.content ?? []).length > 0,\n },\n };\n\n this.inheritedAes = settings.inheritedAes ?? {};\n this.trend = settings?.trend\n ? {\n bounded: settings.trend.bounded ?? false,\n color: settings.trend.color ?? BLACK,\n }\n : null;\n\n this.layers = settings.layers\n .map(layer => {\n if (layer.type === 'dots') {\n return new DotsLayer(layer);\n }\n if (layer.type === 'curve') {\n return new CurveLayer(layer);\n }\n exhaustive(layer, 'Unknown layer type');\n })\n .filter(Boolean) as ScatterplotLayer[];\n }\n}\n"],"names":["DotsLayer","layer","__publicField","BLACK","CurveLayer","ScatterplotSettingsImpl","settings","ScatterplotSettingsSchema","lodash","_a","DEFAULT_WIDTH_SMALL","DEFAULT_WIDTH","_b","DEFAULT_HEIGHT_SMALL","DEFAULT_HEIGHT","_c","_d","_e","_f","exhaustive"],"mappings":"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","x_google_ignoreList":[0]}
@@ -6,17 +6,17 @@ import { ChartAxisTitles as G } from "./ChartAxisTitles.js";
6
6
  import { ChartFacetTitle as L } from "./ChartFacetTitle.js";
7
7
  import { ChartLayersData as M } from "./ChartLayersData.js";
8
8
  import { ChartTrendsData as S } from "./ChartTrendsData.js";
9
- import { Grid as Y } from "./Grid.js";
9
+ import { Grid as b } from "./Grid.js";
10
10
  const q = C.memo(({
11
- facetKey: l,
11
+ facetKey: h,
12
12
  width: t,
13
13
  height: i,
14
14
  dimensions: e,
15
15
  scales: a,
16
16
  xAxis: o,
17
17
  yAxis: r,
18
- frameType: d,
19
- dotsData: h,
18
+ frameType: l,
19
+ dotsData: d,
20
20
  facetSettings: y,
21
21
  trendsData: D,
22
22
  captionsSizes: g,
@@ -28,9 +28,9 @@ const q = C.memo(({
28
28
  onMouseLeaveDot: x
29
29
  }) => {
30
30
  const { padding: c } = e, T = p((n) => {
31
- f == null || f(n, l);
31
+ f == null || f(n, h);
32
32
  }), w = p((n) => {
33
- x == null || x(n, l);
33
+ x == null || x(n, h);
34
34
  });
35
35
  return /* @__PURE__ */ s.jsxs("g", { transform: `translate(${e.left + c.left},${e.top + c.top})`, children: [
36
36
  !1,
@@ -39,7 +39,7 @@ const q = C.memo(({
39
39
  {
40
40
  width: t,
41
41
  dimensions: e,
42
- frameType: d,
42
+ frameType: l,
43
43
  facetTitle: u
44
44
  }
45
45
  ),
@@ -52,11 +52,11 @@ const q = C.memo(({
52
52
  dimensions: e,
53
53
  xAxis: o,
54
54
  yAxis: r,
55
- dotsData: h
55
+ dotsData: d
56
56
  }
57
57
  ),
58
58
  /* @__PURE__ */ s.jsx(
59
- Y,
59
+ b,
60
60
  {
61
61
  width: t,
62
62
  height: i,
@@ -64,7 +64,7 @@ const q = C.memo(({
64
64
  scaleY: a.y,
65
65
  axisX: o,
66
66
  axisY: r,
67
- frameType: d
67
+ frameType: l
68
68
  }
69
69
  ),
70
70
  /* @__PURE__ */ s.jsx(
@@ -97,7 +97,7 @@ const q = C.memo(({
97
97
  width: t,
98
98
  height: i,
99
99
  scales: a,
100
- dotsData: h,
100
+ dotsData: d,
101
101
  layersData: j,
102
102
  aesGetters: m,
103
103
  onMouseEnterDot: T,
@@ -1,49 +1,50 @@
1
- import { j as s } from "../../node_modules/react/jsx-runtime.js";
2
- import { r as u } from "../../_virtual/index.js";
3
- import { BLACK as A } from "../../constants.js";
4
- import { MIN_PADDING as r, TITLE_LINE as e } from "../constants.js";
5
- function c(t, i) {
6
- return typeof t == "string" ? t : i.length ? i[0].data[t.value] : "";
1
+ import { j as r } from "../../node_modules/react/jsx-runtime.js";
2
+ import { r as j } from "../../_virtual/index.js";
3
+ import { useDataFrame as A } from "../../common/useDataFrame.js";
4
+ import { BLACK as b } from "../../constants.js";
5
+ import { MIN_PADDING as s, TITLE_LINE as i } from "../constants.js";
6
+ function h(n, e, t) {
7
+ return typeof e == "string" ? e : t.length ? n.getColumnValue(e.value, t[0].idx) : "";
7
8
  }
8
- const E = u.memo(({
9
- debug: t,
10
- width: i,
11
- height: o,
9
+ const T = j.memo(({
10
+ debug: n,
11
+ width: e,
12
+ height: t,
12
13
  dimensions: l,
13
- xAxis: h,
14
- yAxis: m,
15
- dotsData: f
14
+ xAxis: c,
15
+ yAxis: f,
16
+ dotsData: g
16
17
  }) => {
17
- const { padding: n } = l, { dots: x } = f, g = c(h.title, x), p = c(m.title, x), a = l.chartEdgeSides.includes("left"), d = l.chartEdgeSides.includes("bottom");
18
- return (d || a) && /* @__PURE__ */ s.jsxs("g", { dominantBaseline: "central", textAnchor: "middle", fontWeight: "500", fontSize: "14px", fill: A, children: [
19
- d && /* @__PURE__ */ s.jsx("text", { x: i / 2, y: o + n.bottom - r - e / 2, children: g }),
20
- t && d && /* @__PURE__ */ s.jsx(
18
+ const d = A(), { padding: o } = l, { dots: x } = g, u = h(d, c.title, x), p = h(d, f.title, x), a = l.chartEdgeSides.includes("left"), m = l.chartEdgeSides.includes("bottom");
19
+ return (m || a) && /* @__PURE__ */ r.jsxs("g", { dominantBaseline: "central", textAnchor: "middle", fontWeight: "500", fontSize: "14px", fill: b, children: [
20
+ m && /* @__PURE__ */ r.jsx("text", { x: e / 2, y: t + o.bottom - s - i / 2, children: u }),
21
+ n && m && /* @__PURE__ */ r.jsx(
21
22
  "rect",
22
23
  {
23
24
  x: "0",
24
- y: o + n.bottom - r - e,
25
- width: i,
26
- height: e,
25
+ y: t + o.bottom - s - i,
26
+ width: e,
27
+ height: i,
27
28
  fill: "none",
28
29
  stroke: "black"
29
30
  }
30
31
  ),
31
- a && /* @__PURE__ */ s.jsx(
32
+ a && /* @__PURE__ */ r.jsx(
32
33
  "text",
33
34
  {
34
- x: -n.left + r + e / 2,
35
- y: o / 2,
36
- transform: `rotate(-90,${-n.left + r + e / 2},${o / 2})`,
35
+ x: -o.left + s + i / 2,
36
+ y: t / 2,
37
+ transform: `rotate(-90,${-o.left + s + i / 2},${t / 2})`,
37
38
  children: p
38
39
  }
39
40
  ),
40
- t && a && /* @__PURE__ */ s.jsx(
41
+ n && a && /* @__PURE__ */ r.jsx(
41
42
  "rect",
42
43
  {
43
- x: -n.left + r,
44
+ x: -o.left + s,
44
45
  y: "0",
45
- width: e,
46
- height: o,
46
+ width: i,
47
+ height: t,
47
48
  fill: "none",
48
49
  stroke: "black"
49
50
  }
@@ -51,6 +52,6 @@ const E = u.memo(({
51
52
  ] });
52
53
  });
53
54
  export {
54
- E as ChartAxisTitles
55
+ T as ChartAxisTitles
55
56
  };
56
57
  //# sourceMappingURL=ChartAxisTitles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartAxisTitles.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/components/ChartAxisTitles.tsx"],"sourcesContent":["import { memo } from 'react';\nimport { BLACK } from '../../constants';\nimport type { ColumnName } from '../../types';\nimport { MIN_PADDING, TITLE_LINE } from '../constants';\nimport type { Dot, GroupedDots } from '../dots';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\nimport type {\n ChartDimensionsData\n} from './types';\n\ninterface Props {\n debug?: boolean;\n width: number;\n height: number;\n dimensions: ChartDimensionsData;\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'];\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'];\n dotsData: GroupedDots[keyof GroupedDots];\n}\n\nfunction getTitle(title: string | ColumnName, dots: Dot[]): string {\n if (typeof title === 'string') {\n return title;\n }\n if (!dots.length) {\n return '';\n }\n return dots[0].data[title.value] as string;\n}\n\nexport const ChartAxisTitles = memo(({\n debug,\n width,\n height,\n dimensions,\n xAxis,\n yAxis,\n dotsData,\n}: Props) =>{\n const {padding} = dimensions;\n const {dots} = dotsData;\n const xTitle = getTitle(xAxis.title, dots);\n const yTitle = getTitle(yAxis.title, dots);\n\n const needLeftAxisTitle = dimensions.chartEdgeSides.includes('left');\n const needBottomAxisTitle = dimensions.chartEdgeSides.includes('bottom');\n\n return (needBottomAxisTitle || needLeftAxisTitle) && (\n <g dominantBaseline=\"central\" textAnchor=\"middle\" fontWeight=\"500\" fontSize=\"14px\" fill={BLACK}>\n {needBottomAxisTitle && (\n <text x={width / 2} y={height + padding.bottom - MIN_PADDING - TITLE_LINE / 2}>\n {xTitle}\n </text>\n )}\n {debug && needBottomAxisTitle && (\n <rect\n x=\"0\"\n y={height + padding.bottom - MIN_PADDING - TITLE_LINE}\n width={width}\n height={TITLE_LINE}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n {needLeftAxisTitle && (\n <text\n x={-padding.left + MIN_PADDING + TITLE_LINE / 2}\n y={height / 2}\n transform={`rotate(-90,${-padding.left + MIN_PADDING + TITLE_LINE / 2},${height / 2})`}\n >\n {yTitle}\n </text>\n )}\n {debug && needLeftAxisTitle && (\n <rect\n x={-padding.left + MIN_PADDING}\n y=\"0\"\n width={TITLE_LINE}\n height={height}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n );\n});"],"names":["getTitle","title","dots","ChartAxisTitles","memo","debug","width","height","dimensions","xAxis","yAxis","dotsData","padding","xTitle","yTitle","needLeftAxisTitle","needBottomAxisTitle","jsxs","BLACK","jsx","MIN_PADDING","TITLE_LINE"],"mappings":";;;;AAoBA,SAASA,EAASC,GAA4BC,GAAqB;AAC/D,SAAI,OAAOD,KAAU,WACVA,IAENC,EAAK,SAGHA,EAAK,CAAC,EAAE,KAAKD,EAAM,KAAK,IAFpB;AAGf;AAEO,MAAME,IAAkBC,EAAAA,KAAK,CAAC;AAAA,EACjC,OAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,QAAAC;AAAAA,EACA,YAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,UAAAC;AACJ,MAAY;AACR,QAAM,EAAC,SAAAC,EAAAA,IAAWJ,GACZ,EAAC,MAAAN,EAAAA,IAAQS,GACTE,IAASb,EAASS,EAAM,OAAOP,CAAI,GACnCY,IAASd,EAASU,EAAM,OAAOR,CAAI,GAEnCa,IAAoBP,EAAW,eAAe,SAAS,MAAM,GAC7DQ,IAAsBR,EAAW,eAAe,SAAS,QAAQ;AAEvE,UAAQQ,KAAuBD,MAC1BE,gBAAAA,EAAAA,KAAC,KAAA,EAAE,kBAAiB,WAAU,YAAW,UAAS,YAAW,OAAM,UAAS,QAAO,MAAMC,GACrF,UAAA;AAAA,IAAAF,KACGG,gBAAAA,EAAAA,IAAC,QAAA,EAAK,GAAGb,IAAQ,GAAG,GAAGC,IAASK,EAAQ,SAASQ,IAAcC,IAAa,GACvE,UAAAR,GACL;AAAA,IAEHR,KAASW,KACNG,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,GAAE;AAAA,QACF,GAAGZ,IAASK,EAAQ,SAASQ,IAAcC;AAAAA,QAC3C,OAAAf;AAAAA,QACA,QAAQe;AAAAA,QACR,MAAK;AAAA,QACL,QAAO;AAAA,MAAA;AAAA,IAAA;AAAA,IAGdN,KACGI,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,GAAG,CAACP,EAAQ,OAAOQ,IAAcC,IAAa;AAAA,QAC9C,GAAGd,IAAS;AAAA,QACZ,WAAW,cAAc,CAACK,EAAQ,OAAOQ,IAAcC,IAAa,CAAC,IAAId,IAAS,CAAC;AAAA,QAElF,UAAAO;AAAAA,MAAA;AAAA,IAAA;AAAA,IAGRT,KAASU,KACNI,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,GAAG,CAACP,EAAQ,OAAOQ;AAAAA,QACnB,GAAE;AAAA,QACF,OAAOC;AAAAA,QACP,QAAAd;AAAAA,QACA,MAAK;AAAA,QACL,QAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAGnB;AAER,CAAC;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"ChartAxisTitles.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/components/ChartAxisTitles.tsx"],"sourcesContent":["import { memo } from 'react';\nimport { useDataFrame } from '../../common/useDataFrame';\nimport { BLACK } from '../../constants';\nimport type { DataFrame } from '../../DataFrame';\nimport type { ColumnName } from '../../types';\nimport { MIN_PADDING, TITLE_LINE } from '../constants';\nimport type { Dot, GroupedDots } from '../dots';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\nimport type {\n ChartDimensionsData\n} from './types';\n\ninterface Props {\n debug?: boolean;\n width: number;\n height: number;\n dimensions: ChartDimensionsData;\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'];\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'];\n dotsData: GroupedDots[keyof GroupedDots];\n}\n\nfunction getTitle(dataFrame: DataFrame, title: string | ColumnName, dots: Dot[]): string {\n if (typeof title === 'string') {\n return title;\n }\n if (!dots.length) {\n return '';\n }\n return dataFrame.getColumnValue(title.value, dots[0].idx) as string;\n}\n\nexport const ChartAxisTitles = memo(({\n debug,\n width,\n height,\n dimensions,\n xAxis,\n yAxis,\n dotsData,\n}: Props) =>{\n const dataFrame = useDataFrame();\n const {padding} = dimensions;\n const {dots} = dotsData;\n const xTitle = getTitle(dataFrame, xAxis.title, dots);\n const yTitle = getTitle(dataFrame, yAxis.title, dots);\n\n const needLeftAxisTitle = dimensions.chartEdgeSides.includes('left');\n const needBottomAxisTitle = dimensions.chartEdgeSides.includes('bottom');\n\n return (needBottomAxisTitle || needLeftAxisTitle) && (\n <g dominantBaseline=\"central\" textAnchor=\"middle\" fontWeight=\"500\" fontSize=\"14px\" fill={BLACK}>\n {needBottomAxisTitle && (\n <text x={width / 2} y={height + padding.bottom - MIN_PADDING - TITLE_LINE / 2}>\n {xTitle}\n </text>\n )}\n {debug && needBottomAxisTitle && (\n <rect\n x=\"0\"\n y={height + padding.bottom - MIN_PADDING - TITLE_LINE}\n width={width}\n height={TITLE_LINE}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n {needLeftAxisTitle && (\n <text\n x={-padding.left + MIN_PADDING + TITLE_LINE / 2}\n y={height / 2}\n transform={`rotate(-90,${-padding.left + MIN_PADDING + TITLE_LINE / 2},${height / 2})`}\n >\n {yTitle}\n </text>\n )}\n {debug && needLeftAxisTitle && (\n <rect\n x={-padding.left + MIN_PADDING}\n y=\"0\"\n width={TITLE_LINE}\n height={height}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n );\n});"],"names":["getTitle","dataFrame","title","dots","ChartAxisTitles","memo","debug","width","height","dimensions","xAxis","yAxis","dotsData","useDataFrame","padding","xTitle","yTitle","needLeftAxisTitle","needBottomAxisTitle","jsxs","BLACK","jsx","MIN_PADDING","TITLE_LINE"],"mappings":";;;;;AAsBA,SAASA,EAASC,GAAsBC,GAA4BC,GAAqB;AACrF,SAAI,OAAOD,KAAU,WACVA,IAENC,EAAK,SAGHF,EAAU,eAAeC,EAAM,OAAOC,EAAK,CAAC,EAAE,GAAG,IAF7C;AAGf;AAEO,MAAMC,IAAkBC,EAAAA,KAAK,CAAC;AAAA,EACjC,OAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,QAAAC;AAAAA,EACA,YAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,UAAAC;AACJ,MAAY;AACR,QAAMX,IAAYY,KACZ,EAAC,SAAAC,EAAAA,IAAWL,GACZ,EAAC,MAAAN,MAAQS,GACTG,IAASf,EAASC,GAAWS,EAAM,OAAOP,CAAI,GAC9Ca,IAAShB,EAASC,GAAWU,EAAM,OAAOR,CAAI,GAE9Cc,IAAoBR,EAAW,eAAe,SAAS,MAAM,GAC7DS,IAAsBT,EAAW,eAAe,SAAS,QAAQ;AAEvE,UAAQS,KAAuBD,MAC1BE,gBAAAA,EAAAA,KAAC,KAAA,EAAE,kBAAiB,WAAU,YAAW,UAAS,YAAW,OAAM,UAAS,QAAO,MAAMC,GACrF,UAAA;AAAA,IAAAF,KACGG,gBAAAA,EAAAA,IAAC,QAAA,EAAK,GAAGd,IAAQ,GAAG,GAAGC,IAASM,EAAQ,SAASQ,IAAcC,IAAa,GACvE,UAAAR,GACL;AAAA,IAEHT,KAASY,KACNG,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,GAAE;AAAA,QACF,GAAGb,IAASM,EAAQ,SAASQ,IAAcC;AAAAA,QAC3C,OAAAhB;AAAAA,QACA,QAAQgB;AAAAA,QACR,MAAK;AAAA,QACL,QAAO;AAAA,MAAA;AAAA,IAAA;AAAA,IAGdN,KACGI,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,GAAG,CAACP,EAAQ,OAAOQ,IAAcC,IAAa;AAAA,QAC9C,GAAGf,IAAS;AAAA,QACZ,WAAW,cAAc,CAACM,EAAQ,OAAOQ,IAAcC,IAAa,CAAC,IAAIf,IAAS,CAAC;AAAA,QAElF,UAAAQ;AAAAA,MAAA;AAAA,IAAA;AAAA,IAGRV,KAASW,KACNI,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,GAAG,CAACP,EAAQ,OAAOQ;AAAAA,QACnB,GAAE;AAAA,QACF,OAAOC;AAAAA,QACP,QAAAf;AAAAA,QACA,MAAK;AAAA,QACL,QAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAGnB;AAER,CAAC;","x_google_ignoreList":[0]}