@milaboratories/graph-maker 1.1.138 → 1.1.140

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 (253) hide show
  1. package/dist/GraphMaker/components/Chart.vue.d.ts.map +1 -1
  2. package/dist/GraphMaker/components/Chart.vue.js +1 -0
  3. package/dist/GraphMaker/components/Chart.vue.js.map +1 -1
  4. package/dist/GraphMaker/components/LassoControls/index.vue.js +15 -13
  5. package/dist/GraphMaker/components/LassoControls/index.vue.js.map +1 -1
  6. package/dist/GraphMaker/dataBindAes.d.ts +5 -5
  7. package/dist/GraphMaker/dataBindAes.d.ts.map +1 -1
  8. package/dist/GraphMaker/dataBindAes.js +52 -49
  9. package/dist/GraphMaker/dataBindAes.js.map +1 -1
  10. package/dist/GraphMaker/forms/LayersForm/AesSelector.vue.js +14 -14
  11. package/dist/GraphMaker/forms/LayersForm/AesSelector.vue.js.map +1 -1
  12. package/dist/GraphMaker/index.vue.d.ts.map +1 -1
  13. package/dist/GraphMaker/index.vue.js +125 -124
  14. package/dist/GraphMaker/index.vue.js.map +1 -1
  15. package/dist/GraphMaker/types.d.ts +1 -1
  16. package/dist/GraphMaker/types.d.ts.map +1 -1
  17. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +6 -0
  18. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts.map +1 -1
  19. package/dist/GraphMaker/utils/createChartSettingsForRender/composeChartSettings.d.ts +4 -8
  20. package/dist/GraphMaker/utils/createChartSettingsForRender/composeChartSettings.d.ts.map +1 -1
  21. package/dist/GraphMaker/utils/createChartSettingsForRender/composeChartSettings.js.map +1 -1
  22. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts +15 -0
  23. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts.map +1 -1
  24. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +12 -3
  25. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts.map +1 -1
  26. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +21 -0
  27. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
  28. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.d.ts +10 -6
  29. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.d.ts.map +1 -1
  30. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts +31 -13
  31. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts.map +1 -1
  32. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js +56 -62
  33. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js.map +1 -1
  34. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts +29 -13
  35. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts.map +1 -1
  36. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js +20 -19
  37. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js.map +1 -1
  38. package/dist/GraphMaker/utils/loadUniqueValuesToSave.d.ts.map +1 -1
  39. package/dist/GraphMaker/utils/loadUniqueValuesToSave.js +57 -54
  40. package/dist/GraphMaker/utils/loadUniqueValuesToSave.js.map +1 -1
  41. package/dist/lib.js +1 -1
  42. package/dist/node_modules/@milaboratories/miplots4/dist/AbstractChart.js +5 -5
  43. package/dist/node_modules/@milaboratories/miplots4/dist/AbstractChart.js.map +1 -1
  44. package/dist/node_modules/@milaboratories/miplots4/dist/DataFrame.js +95 -72
  45. package/dist/node_modules/@milaboratories/miplots4/dist/DataFrame.js.map +1 -1
  46. package/dist/node_modules/@milaboratories/miplots4/dist/MiPlots.js +8 -5
  47. package/dist/node_modules/@milaboratories/miplots4/dist/MiPlots.js.map +1 -1
  48. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/ChartRenderer.js +124 -122
  49. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/ChartRenderer.js.map +1 -1
  50. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/Chart.js +72 -91
  51. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/Chart.js.map +1 -1
  52. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/ChartsGroup.js +43 -41
  53. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/ChartsGroup.js.map +1 -1
  54. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCellTooltip.js +28 -0
  55. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCellTooltip.js.map +1 -0
  56. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getGroupedCellsData.js +94 -0
  57. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getGroupedCellsData.js.map +1 -0
  58. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/index.js +38 -34
  59. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/index.js.map +1 -1
  60. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/utils/calculateCaptionTails.js.map +1 -1
  61. package/dist/node_modules/@milaboratories/miplots4/dist/common/Error.js +4 -22
  62. package/dist/node_modules/@milaboratories/miplots4/dist/common/Error.js.map +1 -1
  63. package/dist/node_modules/@milaboratories/miplots4/dist/common/Legend.js.map +1 -1
  64. package/dist/node_modules/@milaboratories/miplots4/dist/common/Tooltip.js +11 -11
  65. package/dist/node_modules/@milaboratories/miplots4/dist/common/Tooltip.js.map +1 -1
  66. package/dist/node_modules/@milaboratories/miplots4/dist/common/useDataFrame.js +20 -0
  67. package/dist/node_modules/@milaboratories/miplots4/dist/common/useDataFrame.js.map +1 -0
  68. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/ChartRenderer.js +181 -181
  69. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/ChartRenderer.js.map +1 -1
  70. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/DendroSettingsImpl.js +2 -2
  71. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/DendroSettingsImpl.js.map +1 -1
  72. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Chart.js +45 -45
  73. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Chart.js.map +1 -1
  74. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Heatmap.js +27 -27
  75. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Heatmap.js.map +1 -1
  76. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Legend.js.map +1 -1
  77. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/LinksGroup.js +18 -18
  78. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/LinksGroup.js.map +1 -1
  79. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/NodesGroup.js +36 -36
  80. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/NodesGroup.js.map +1 -1
  81. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHeatmapData.js +45 -41
  82. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHeatmapData.js.map +1 -1
  83. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHierarchyData.js +33 -33
  84. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHierarchyData.js.map +1 -1
  85. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/index.js +90 -93
  86. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/index.js.map +1 -1
  87. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js +199 -198
  88. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js.map +1 -1
  89. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js +17 -17
  90. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
  91. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/layers/BoxElement.js.map +1 -1
  92. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js +102 -99
  93. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js.map +1 -1
  94. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/bar.js +31 -36
  95. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/bar.js.map +1 -1
  96. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/binnedDots.js +62 -74
  97. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/binnedDots.js.map +1 -1
  98. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/boxes.js +52 -53
  99. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/boxes.js.map +1 -1
  100. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/dots.js +32 -32
  101. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/dots.js.map +1 -1
  102. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/lines.js +7 -6
  103. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/lines.js.map +1 -1
  104. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/logo.js +23 -23
  105. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/logo.js.map +1 -1
  106. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/pairedPoints.js +63 -63
  107. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/pairedPoints.js.map +1 -1
  108. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/sina.js +60 -64
  109. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/sina.js.map +1 -1
  110. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/stackedBar.js +23 -23
  111. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/stackedBar.js.map +1 -1
  112. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/getOutliersBounds.js +5 -5
  113. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/getOutliersBounds.js.map +1 -1
  114. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/splitTextByWidth.js +13 -13
  115. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/splitTextByWidth.js.map +1 -1
  116. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js +258 -256
  117. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js.map +1 -1
  118. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/HeatmapSettingsImpl.js +1 -1
  119. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
  120. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/Annotation.js +81 -79
  121. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
  122. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js +140 -134
  123. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js.map +1 -1
  124. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js +17 -17
  125. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js.map +1 -1
  126. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js +99 -95
  127. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js.map +1 -1
  128. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js +32 -31
  129. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js.map +1 -1
  130. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateAnnotationTitleSizes.js +1 -1
  131. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateAnnotationTitleSizes.js.map +1 -1
  132. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateCaptionTails.js.map +1 -1
  133. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/ChartRenderer.js +143 -142
  134. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/ChartRenderer.js.map +1 -1
  135. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/HistogramSettingsImpl.js.map +1 -1
  136. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/components/Chart.js +30 -30
  137. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/components/Chart.js.map +1 -1
  138. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/components/ChartsGroup.js +7 -7
  139. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/getHistogramData.js +53 -54
  140. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/getHistogramData.js.map +1 -1
  141. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/index.js +62 -58
  142. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/index.js.map +1 -1
  143. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/@d3fc/d3fc-axis/src/axisBase.js +7 -7
  144. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-array/src/min.js +6 -12
  145. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-array/src/min.js.map +1 -1
  146. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-shape/src/line.js.map +1 -1
  147. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/kdbush/index.js +148 -0
  148. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/kdbush/index.js.map +1 -0
  149. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js +172 -168
  150. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js.map +1 -1
  151. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js +28 -28
  152. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
  153. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Chart.js +11 -11
  154. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxisTitles.js +30 -29
  155. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxisTitles.js.map +1 -1
  156. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartLayersData.js +135 -153
  157. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartLayersData.js.map +1 -1
  158. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTooltip.js +35 -32
  159. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTooltip.js.map +1 -1
  160. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js +27 -27
  161. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js.map +1 -1
  162. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartsGroup.js +14 -14
  163. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/constants.js.map +1 -1
  164. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/dots.js +24 -25
  165. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/dots.js.map +1 -1
  166. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js +13 -13
  167. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js.map +1 -1
  168. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js +69 -76
  169. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js.map +1 -1
  170. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/linearRegression.js +85 -83
  171. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/linearRegression.js.map +1 -1
  172. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/createAesGetter.js +20 -20
  173. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/createAesGetter.js.map +1 -1
  174. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/createLegendInfo.js +50 -38
  175. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/createLegendInfo.js.map +1 -1
  176. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/formatColumnValue.js +11 -0
  177. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/formatColumnValue.js.map +1 -0
  178. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/getVisibleLabels.js +46 -56
  179. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/getVisibleLabels.js.map +1 -1
  180. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/sortDotsByGrouping.js +18 -0
  181. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/sortDotsByGrouping.js.map +1 -0
  182. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js +223 -205
  183. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  184. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/SettingsImpl.js +26 -26
  185. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
  186. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/colors.js +42 -0
  187. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/colors.js.map +1 -0
  188. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js +84 -81
  189. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
  190. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/SVGLayer.js +11 -11
  191. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/UpperSVG.js +15 -14
  192. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
  193. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/index.js +97 -118
  194. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/index.js.map +1 -1
  195. package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js +3 -1
  196. package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js.map +1 -1
  197. package/dist/node_modules/@milaboratories/miplots4/dist/types/dendro.js +1 -1
  198. package/dist/node_modules/@milaboratories/miplots4/dist/types/dendro.js.map +1 -1
  199. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js +1 -1
  200. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js.map +1 -1
  201. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js +1 -1
  202. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js.map +1 -1
  203. package/dist/node_modules/@milaboratories/miplots4/dist/types/histogram.js +1 -1
  204. package/dist/node_modules/@milaboratories/miplots4/dist/types/histogram.js.map +1 -1
  205. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js +23 -17
  206. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js.map +1 -1
  207. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot.js +25 -19
  208. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot.js.map +1 -1
  209. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer/TextMeasurer.js +39 -0
  210. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer/TextMeasurer.js.map +1 -0
  211. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer/charToWidth.json.js +101 -0
  212. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer/charToWidth.json.js.map +1 -0
  213. package/dist/node_modules/@milaboratories/miplots4/dist/utils/arrangeLegendParts.js +4 -4
  214. package/dist/node_modules/@milaboratories/miplots4/dist/utils/arrangeLegendParts.js.map +1 -1
  215. package/dist/node_modules/@milaboratories/miplots4/dist/utils/arraysAreDifferent.js +7 -0
  216. package/dist/node_modules/@milaboratories/miplots4/dist/utils/arraysAreDifferent.js.map +1 -0
  217. package/dist/node_modules/@milaboratories/miplots4/dist/utils/getLegendWidth.js +3 -3
  218. package/dist/node_modules/@milaboratories/miplots4/dist/utils/getLegendWidth.js.map +1 -1
  219. package/dist/node_modules/@milaboratories/pf-plots/dist/index.js +1111 -1097
  220. package/dist/node_modules/@milaboratories/pf-plots/dist/index.js.map +1 -1
  221. package/package.json +3 -3
  222. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCells.js +0 -91
  223. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCells.js.map +0 -1
  224. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/add.js +0 -30
  225. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/add.js.map +0 -1
  226. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/cover.js +0 -29
  227. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/cover.js.map +0 -1
  228. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/data.js +0 -12
  229. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/data.js.map +0 -1
  230. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/extent.js +0 -7
  231. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/extent.js.map +0 -1
  232. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/find.js +0 -26
  233. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/find.js.map +0 -1
  234. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/quad.js +0 -7
  235. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/quad.js.map +0 -1
  236. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/quadtree.js +0 -51
  237. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/quadtree.js.map +0 -1
  238. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/remove.js +0 -21
  239. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/remove.js.map +0 -1
  240. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/root.js +0 -7
  241. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/root.js.map +0 -1
  242. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/size.js +0 -12
  243. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/size.js.map +0 -1
  244. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/visit.js +0 -14
  245. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/visit.js.map +0 -1
  246. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/visitAfter.js +0 -19
  247. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/visitAfter.js.map +0 -1
  248. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/x.js +0 -11
  249. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/x.js.map +0 -1
  250. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/y.js +0 -11
  251. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/y.js.map +0 -1
  252. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer.js +0 -24
  253. package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer.js.map +0 -1
@@ -1,40 +1,40 @@
1
+ import { l as E } from "../node_modules/lodash/lodash.js";
2
+ import { renderToString as A } from "../node_modules/react-dom/server.browser.js";
1
3
  import { AbstractChart as $ } from "../AbstractChart.js";
2
4
  import { NO_GROUPED as f } from "../DataFrame.js";
3
- import { MAX_GROUPS_COUNT as L, MAX_FACETS_COUNT as A } from "./constants.js";
4
- import { getLogoData as P } from "./layers/logo.js";
5
- import { getFacetStringKey as w } from "./utils/getFacetStringKey.js";
6
- import S from "../node_modules/lodash/lodash.js";
7
- import { renderToString as R } from "../node_modules/react-dom/server.browser.js";
8
- import U from "./ChartRenderer.js";
9
- import { DiscreteSettingsImpl as B, StatLayer as G, BoxLayer as O, ViolinLayer as T, DotLayer as x, LineLayer as K, ErrorBarLayer as F, BarLayer as j, StackedBarLayer as q, BinnedDotsLayer as I, PairedPointsLayer as H, SinaLayer as M, LogoPlotLayer as V } from "./DiscreteSettingsImpl.js";
10
- import { getBoxesData as X } from "./layers/boxes.js";
5
+ import R from "./ChartRenderer.js";
6
+ import { MAX_GROUPS_COUNT as S, MAX_FACETS_COUNT as U } from "./constants.js";
7
+ import { DiscreteSettingsImpl as C, StatLayer as G, BoxLayer as P, ViolinLayer as T, DotLayer as x, LineLayer as O, ErrorBarLayer as K, BarLayer as F, StackedBarLayer as I, BinnedDotsLayer as V, PairedPointsLayer as j, SinaLayer as q, LogoPlotLayer as H } from "./DiscreteSettingsImpl.js";
8
+ import { getBoxesData as M } from "./layers/boxes.js";
11
9
  import { getViolinsData as W } from "./layers/violins.js";
12
- import { getSinaData as z } from "./layers/sina.js";
13
- import { getDotsData as J } from "./layers/dots.js";
14
- import { getLinesData as Q } from "./layers/lines.js";
15
- import { getErrorBarsData as Y } from "./layers/errorbars.js";
16
- import { getBarsData as Z } from "./layers/bar.js";
17
- import { getStackedBarsData as tt } from "./layers/stackedBar.js";
18
- import { getBinnedDotsData as at } from "./layers/binnedDots.js";
19
- import { getPairedPointsData as et } from "./layers/pairedPoints.js";
10
+ import { getSinaData as X } from "./layers/sina.js";
11
+ import { getDotsData as z } from "./layers/dots.js";
12
+ import { getLinesData as J } from "./layers/lines.js";
13
+ import { getErrorBarsData as Q } from "./layers/errorbars.js";
14
+ import { getBarsData as Y } from "./layers/bar.js";
15
+ import { getStackedBarsData as Z } from "./layers/stackedBar.js";
16
+ import { getBinnedDotsData as tt } from "./layers/binnedDots.js";
17
+ import { getPairedPointsData as at } from "./layers/pairedPoints.js";
18
+ import { getLogoData as et } from "./layers/logo.js";
20
19
  import { getStatsData as rt } from "./layers/stats/index.js";
21
- var it = Object.defineProperty, nt = (c, a, t) => a in c ? it(c, a, { enumerable: !0, configurable: !0, writable: !0, value: t }) : c[a] = t, D = (c, a, t) => nt(c, typeof a != "symbol" ? a + "" : a, t);
22
- function C(c, a, t = null) {
23
- const r = a.value, s = c.getColumnCategories(r);
24
- return S.intersection(t ?? s, s).map(String);
20
+ import { getFacetStringKey as L } from "./utils/getFacetStringKey.js";
21
+ var st = Object.defineProperty, it = (o, a, t) => a in o ? st(o, a, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[a] = t, D = (o, a, t) => it(o, typeof a != "symbol" ? a + "" : a, t);
22
+ function w(o, a, t = null) {
23
+ const s = a.value, i = o.getColumnCategories(s);
24
+ return E.intersection(t ?? i, i).map(String);
25
25
  }
26
- function E(c) {
27
- if (!c.length)
26
+ function B(o) {
27
+ if (!o.length)
28
28
  return [];
29
29
  let a = [[]];
30
- return c.forEach((t) => {
31
- const r = [];
32
- t.forEach((s) => {
33
- r.push(...a.map((o) => [...o, s]));
34
- }), a = r;
30
+ return o.forEach((t) => {
31
+ const s = [];
32
+ t.forEach((i) => {
33
+ s.push(...a.map((n) => [...n, i]));
34
+ }), a = s;
35
35
  }), a;
36
36
  }
37
- function v(c, a) {
37
+ function v(o, a) {
38
38
  if (!a)
39
39
  return {
40
40
  keys: ["null"],
@@ -43,25 +43,30 @@ function v(c, a) {
43
43
  valueLabels: { null: "" },
44
44
  inheritedAes: null
45
45
  };
46
- const t = a.columnName.value, r = S.uniqBy(c.rows, (n) => n[t]), s = (n) => String(n[t]), o = (n) => a.columnName.valueLabels ? String(n[a.columnName.valueLabels]) : s(n), l = c.getColumnCategories(t, !a.allowNullGroup), i = (a.order ?? l).map(String);
46
+ const t = a.columnName.value, s = a.columnName.valueLabels, i = o.getColumnCategories(t, !1), n = (r) => s ? String(
47
+ o.getColumnValue(
48
+ s,
49
+ o.getColumnCategoryRowIndex(t, r)
50
+ )
51
+ ) : r, l = o.getColumnCategories(t, !a.allowNullGroup);
47
52
  return {
48
- keys: S.intersection(i, l),
53
+ keys: a.order === void 0 ? l : E.intersection(a.order.map(String), l),
49
54
  value: t,
50
55
  label: a.columnName.label ?? t,
51
- valueLabels: r.reduce((n, d) => (n[s(d)] = o(d), n), {}),
56
+ valueLabels: i.reduce((r, u) => (r[u] = n(u), r), {}),
52
57
  inheritedAes: a.inheritedAes ?? null
53
58
  };
54
59
  }
55
60
  class Et extends $ {
56
- constructor(a, t, r) {
57
- super(a, t), D(this, "settings"), D(this, "chartRenderer", new U()), D(this, "onTooltipHintSwitch", () => {
58
- }), D(this, "calculatedData", null), this.settings = new B(t), r && (this.onTooltipHintSwitch = r[0]);
61
+ constructor(a, t, s) {
62
+ super(a, t), D(this, "settings"), D(this, "chartRenderer", new R()), D(this, "onTooltipHintSwitch", () => {
63
+ }), D(this, "calculatedData", null), this.settings = new C(t), s && (this.onTooltipHintSwitch = s[0]);
59
64
  }
60
65
  mount(a) {
61
66
  try {
62
- this.chartRenderer.init(a), this._updateData(), this._updateChart();
67
+ this.chartRenderer.init(a), this._updateData(), this._updateChart(), this.hasError = !1;
63
68
  } catch (t) {
64
- t instanceof Error && this.chartRenderer.renderError(t.message);
69
+ this.hasError = !0, t instanceof Error && (this.chartRenderer.renderError(t.message), console.error(t));
65
70
  }
66
71
  }
67
72
  unmount() {
@@ -69,125 +74,123 @@ class Et extends $ {
69
74
  }
70
75
  updateSettingsAndData(a, t) {
71
76
  try {
72
- const r = this.settings, s = this.data;
73
- this.settings = new B(t), this.data = a, this._needUpdateCalculatedDataBySettings(r, this.settings) || this._needUpdateCalculatedDataByData(s, this.data) ? this._updateData() : this._updateAesInData(), this._updateChart();
74
- } catch (r) {
75
- r instanceof Error && this.chartRenderer.renderError(r.message);
77
+ const s = this.settings, i = this.data;
78
+ this.settings = new C(t), this.data = a, this._needUpdateCalculatedDataBySettings(s, this.settings) || this._needUpdateCalculatedDataByData(i, this.data) ? this._updateData() : this._updateAesInData(), this._updateChart(), this.hasError = !1;
79
+ } catch (s) {
80
+ this.hasError = !0, s instanceof Error && (this.chartRenderer.renderError(s.message), console.error(s));
76
81
  }
77
82
  }
78
83
  updateChartState(a, t) {
79
84
  console.warn("no chart state for discrete");
80
85
  }
81
86
  export() {
82
- return this._updateChart(), R(this.chartRenderer.component);
87
+ return this._updateChart(), A(this.chartRenderer.component);
83
88
  }
84
89
  _needUpdateCalculatedDataBySettings(a, t) {
85
- var r, s, o, l, i, n, d, h;
86
- return a.chartSettings.yAxis.scale !== t.chartSettings.yAxis.scale || (((r = a.primaryGrouping) == null ? void 0 : r.columnName.value) ?? "") !== (((s = t.primaryGrouping) == null ? void 0 : s.columnName.value) ?? "") || (((o = a.secondaryGrouping) == null ? void 0 : o.columnName.value) ?? "") !== (((l = t.secondaryGrouping) == null ? void 0 : l.columnName.value) ?? "") || (((i = a.primaryGrouping) == null ? void 0 : i.allowNullGroup) ?? "") !== (((n = t.primaryGrouping) == null ? void 0 : n.allowNullGroup) ?? "") || (((d = a.secondaryGrouping) == null ? void 0 : d.allowNullGroup) ?? "") !== (((h = t.secondaryGrouping) == null ? void 0 : h.allowNullGroup) ?? "") || a.facetBy.some((g, y) => {
87
- var m;
88
- return g.value !== ((m = t.facetBy[y]) == null ? void 0 : m.value);
89
- }) || a.layers.length !== t.layers.length || a.layers.some((g, y) => !g.isEqualForCalculation(t.layers[y]));
90
+ var s, i, n, l, r, u, d, h;
91
+ return a.chartSettings.yAxis.scale !== t.chartSettings.yAxis.scale || (((s = a.primaryGrouping) == null ? void 0 : s.columnName.value) ?? "") !== (((i = t.primaryGrouping) == null ? void 0 : i.columnName.value) ?? "") || (((n = a.secondaryGrouping) == null ? void 0 : n.columnName.value) ?? "") !== (((l = t.secondaryGrouping) == null ? void 0 : l.columnName.value) ?? "") || (((r = a.primaryGrouping) == null ? void 0 : r.allowNullGroup) ?? "") !== (((u = t.primaryGrouping) == null ? void 0 : u.allowNullGroup) ?? "") || (((d = a.secondaryGrouping) == null ? void 0 : d.allowNullGroup) ?? "") !== (((h = t.secondaryGrouping) == null ? void 0 : h.allowNullGroup) ?? "") || a.facetBy.some((g, m) => {
92
+ var p;
93
+ return g.value !== ((p = t.facetBy[m]) == null ? void 0 : p.value);
94
+ }) || a.layers.length !== t.layers.length || a.layers.some((g, m) => !g.isEqualForCalculation(t.layers[m]));
90
95
  }
91
96
  _needUpdateCalculatedDataByData(a, t) {
92
- const r = Object.keys(a.data), s = Object.keys(t.data);
93
- return a.id !== t.id || r.length !== s.length || r.some((o) => {
97
+ const s = Object.keys(a.data), i = Object.keys(t.data);
98
+ return a.id !== t.id || s.length !== i.length || s.some((n) => {
94
99
  var l;
95
- return a.data[o].length !== ((l = t.data[o]) == null ? void 0 : l.length);
100
+ return a.data[n].length !== ((l = t.data[n]) == null ? void 0 : l.length);
96
101
  });
97
102
  }
98
103
  _updateData() {
99
- const { chartSettings: a, y: t, keyColumn: r, facetBy: s, layers: o, facetSettings: l } = this.settings, { yAxis: i } = a, n = this.data.rows.every((e) => {
100
- const p = e[t.value];
101
- return p === null || !(Number(p) < 0);
102
- }), d = v(this.data, this.settings.primaryGrouping), h = v(this.data, this.settings.secondaryGrouping), g = s.map((e) => e.value), y = o.some((e) => e.type === "logo" || e.type === "bar");
103
- if (!y && d.keys.length > L)
104
+ const { chartSettings: a, y: t, keyColumn: s, facetBy: i, layers: n, facetSettings: l } = this.settings, { yAxis: r } = a, u = this.data.getColumn(t.value).every((e) => e === null || !(Number(e) < 0)), d = v(this.data, this.settings.primaryGrouping), h = v(this.data, this.settings.secondaryGrouping), g = i.map((e) => e.value), m = n.some((e) => e.type === "logo" || e.type === "bar");
105
+ if (!m && d.keys.length > S)
104
106
  throw Error(`Too many primary groups (${d.keys.length})`);
105
- if (!y && h.keys.length > L)
107
+ if (!m && h.keys.length > S)
106
108
  throw Error(`Too many secondary groups (${h.keys.length})`);
107
- const m = s.length ? E(
108
- s.map((e) => {
109
- var p;
110
- return C(this.data, e, (p = l == null ? void 0 : l.order) == null ? void 0 : p[e.value]);
109
+ const p = i.length ? B(
110
+ i.map((e) => {
111
+ var y;
112
+ return w(this.data, e, (y = l == null ? void 0 : l.order) == null ? void 0 : y[e.value]);
111
113
  })
112
114
  ) : [[f]];
113
- if (m.length > A)
114
- throw Error(`Too many facets (${m.length})`);
115
+ if (p.length > U)
116
+ throw Error(`Too many facets (${p.length})`);
115
117
  this.data.setGrouping([...g, d.value, h.value]);
116
- const u = {
117
- facet: m,
118
+ const c = {
119
+ facet: p,
118
120
  primary: d.value !== null ? d.keys : [f],
119
121
  secondary: h.value !== null ? h.keys : [f]
120
- }, _ = u.facet.reduce((e, p) => (e[w(p)] = u.primary.filter(
121
- (k) => this.data.getRowsByGrouping([...p, k]).length > 0
122
- ).map(String), e), {}), N = o.filter((e) => !(e instanceof G)).map((e) => {
123
- if (e instanceof O)
124
- return X(e, u, this.data, t, r, i);
122
+ }, _ = c.facet.reduce((e, y) => (e[L(y)] = c.primary.filter(
123
+ (k) => this.data.getRowsByGrouping([...y, k]).length > 0
124
+ ).map(String), e), {}), b = n.filter((e) => !(e instanceof G)).map((e) => {
125
+ if (e instanceof P)
126
+ return M(e, c, this.data, t, s, r);
125
127
  if (e instanceof T)
126
- return W(e, u, this.data, t, i);
128
+ return W(e, c, this.data, t, r);
127
129
  if (e instanceof x)
128
- return J(e, u, this.data, t, i, r);
130
+ return z(e, c, this.data, t, r, s);
131
+ if (e instanceof O)
132
+ return J(e, c, this.data, t, r);
129
133
  if (e instanceof K)
130
- return Q(e, u, this.data, t, i);
134
+ return Q(e, c, this.data, t, r);
131
135
  if (e instanceof F)
132
- return Y(e, u, this.data, t, i);
136
+ return Y(e, c, this.data, t, r);
137
+ if (e instanceof I)
138
+ return Z(e, c, this.data, t);
139
+ if (e instanceof V)
140
+ return tt(e, c, this.data, t, r);
133
141
  if (e instanceof j)
134
- return Z(e, u, this.data, t, i);
142
+ return at(e, c, this.data, t, r);
135
143
  if (e instanceof q)
136
- return tt(e, u, this.data, t);
137
- if (e instanceof I)
138
- return at(e, u, this.data, t, i);
144
+ return X(e, c, this.data, t, r);
139
145
  if (e instanceof H)
140
- return et(e, u, this.data, t, i);
141
- if (e instanceof M)
142
- return z(e, u, this.data, t, i);
143
- if (e instanceof V)
144
- return P(e, u, this.data, t);
146
+ return et(e, c, this.data, t);
145
147
  throw new Error("Unknown layer type");
146
- }), b = o.filter((e) => e instanceof G).map((e) => {
148
+ }), N = n.filter((e) => e instanceof G).map((e) => {
147
149
  if (d.value === null)
148
150
  throw new Error("Cannot calculate p-value without data grouping");
149
- return rt(e, u.facet, u.primary, t, this.data);
151
+ return rt(e, c.facet, c.primary, t, this.data);
150
152
  });
151
153
  this.calculatedData = {
152
- layersData: N,
153
- statsLayersData: b,
154
+ layersData: b,
155
+ statsLayersData: N,
154
156
  primaryGrouping: d,
155
157
  secondaryGrouping: h,
156
- facetKeyLists: m,
158
+ facetKeyLists: p,
157
159
  nonEmptyGroupsByFacets: _,
158
- onlyPositive: n
160
+ onlyPositive: u
159
161
  };
160
162
  }
161
163
  _updateAesInData() {
162
164
  if (this.calculatedData === null)
163
165
  return;
164
- const { layers: a, facetBy: t, primaryGrouping: r, secondaryGrouping: s, facetSettings: o } = this.settings, l = a.filter((i) => !(i instanceof G));
165
- for (let i = 0; i < l.length; i++) {
166
- const n = l[i];
167
- "aes" in n && (this.calculatedData.layersData[i].aes = n.aes);
166
+ const { layers: a, facetBy: t, primaryGrouping: s, secondaryGrouping: i, facetSettings: n } = this.settings, l = a.filter((r) => !(r instanceof G));
167
+ for (let r = 0; r < l.length; r++) {
168
+ const u = l[r];
169
+ "aes" in u && (this.calculatedData.layersData[r].aes = u.aes);
168
170
  }
169
- this.calculatedData.primaryGrouping = v(this.data, r), this.calculatedData.secondaryGrouping = v(this.data, s), this.calculatedData.facetKeyLists = t.length ? E(
170
- t.map((i) => {
171
- var n;
172
- return C(this.data, i, (n = o == null ? void 0 : o.order) == null ? void 0 : n[i.value]);
171
+ this.calculatedData.primaryGrouping = v(this.data, s), this.calculatedData.secondaryGrouping = v(this.data, i), this.calculatedData.facetKeyLists = t.length ? B(
172
+ t.map((r) => {
173
+ var u;
174
+ return w(this.data, r, (u = n == null ? void 0 : n.order) == null ? void 0 : u[r.value]);
173
175
  })
174
176
  ) : [[f]];
175
177
  }
176
178
  _updateChart() {
177
179
  if (!this.calculatedData)
178
180
  return;
179
- const { id: a, chartSettings: t, keyColumn: r, facetSettings: s } = this.settings, o = this.calculatedData.facetKeyLists.map(w), l = this.calculatedData.facetKeyLists.map((i) => i.map((n) => n === f ? "null" : n));
181
+ const { id: a, chartSettings: t, keyColumn: s, facetSettings: i } = this.settings, n = this.calculatedData.facetKeyLists.map(L), l = this.calculatedData.facetKeyLists.map((r) => r.map((u) => u === f ? "null" : u));
180
182
  this.chartRenderer.render(
183
+ this.data,
181
184
  a,
182
185
  t,
183
186
  this.calculatedData.primaryGrouping,
184
187
  this.calculatedData.secondaryGrouping,
185
- s,
186
- o,
188
+ i,
189
+ n,
187
190
  l,
188
191
  this.calculatedData.layersData,
189
192
  this.calculatedData.statsLayersData,
190
- r,
193
+ s,
191
194
  this.calculatedData.nonEmptyGroupsByFacets,
192
195
  this.calculatedData.onlyPositive,
193
196
  this.onTooltipHintSwitch
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/discrete/index.ts"],"sourcesContent":["import {AbstractChart} from '../AbstractChart';\nimport type {DataFrame, GroupKey} from '../DataFrame';\nimport {NO_GROUPED} from '../DataFrame';\nimport {MAX_FACETS_COUNT, MAX_GROUPS_COUNT} from './constants';\nimport {getLogoData} from './layers/logo';\nimport type {LayerData, StatsData} from './layers/types';\nimport {getFacetStringKey} from './utils/getFacetStringKey';\nimport type {ColumnName, DataValue, DiscreteEventHandlers, DiscreteSettings, GroupingData, Row} from '../types';\nimport lodash from 'lodash';\nimport {renderToString} from 'react-dom/server';\nimport ChartRenderer from './ChartRenderer';\nimport {\n BarLayer,\n BinnedDotsLayer,\n BoxLayer,\n DiscreteSettingsImpl,\n DotLayer,\n ErrorBarLayer,\n LineLayer,\n LogoPlotLayer,\n PairedPointsLayer,\n SinaLayer,\n StackedBarLayer,\n StatLayer,\n ViolinLayer,\n} from './DiscreteSettingsImpl';\nimport {\n getBarsData,\n getBinnedDotsData,\n getBoxesData,\n getDotsData,\n getErrorBarsData,\n getLinesData,\n getPairedPointsData,\n getSinaData,\n getStackedBarsData,\n getStatsData,\n getViolinsData,\n} from './layers';\n\nfunction getGroupingKeys(data: DataFrame, column: ColumnName, order: DataValue[] | null = null) {\n const groupingColumn = column.value;\n const availableKeys = data.getColumnCategories(groupingColumn);\n return lodash.intersection(order ?? availableKeys, availableKeys).map(String);\n}\n\n// all combinations with 1 key from each list\nfunction getKeysCombinations(keysLists: string[][]) {\n if (!keysLists.length) {\n return [];\n }\n let result: string[][] = [[]];\n keysLists.forEach(keys => {\n const nextResult: string[][] = [];\n keys.forEach(key => {\n nextResult.push(...result.map(resultItem => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\n\nfunction getGroupingData(\n data: DataFrame,\n grouping: DiscreteSettingsImpl['primaryGrouping' | 'secondaryGrouping']\n): GroupingData {\n if (!grouping) {\n return {\n keys: ['null'],\n value: null,\n label: '',\n valueLabels: {null: ''},\n inheritedAes: null,\n };\n }\n const groupingColumnId = grouping.columnName.value;\n const uniqRowsByGrouping = lodash.uniqBy(data.rows, row => row[groupingColumnId]);\n const getValue = (row: Row) => String(row[groupingColumnId]);\n const getValueLabel = (row: Row) =>\n grouping.columnName.valueLabels ? String(row[grouping.columnName.valueLabels]) : getValue(row);\n const keys = data.getColumnCategories(groupingColumnId, !grouping.allowNullGroup);\n\n const order = (grouping.order ?? keys).map(String);\n const orderedKeys = lodash.intersection(order, keys);\n\n return {\n keys: orderedKeys,\n value: groupingColumnId,\n label: grouping.columnName.label ?? groupingColumnId,\n valueLabels: uniqRowsByGrouping.reduce((res: Record<string, string>, row) => {\n res[getValue(row)] = getValueLabel(row);\n return res;\n }, {}),\n inheritedAes: grouping.inheritedAes ?? null,\n };\n}\n\nexport class ChartDiscrete extends AbstractChart {\n settings: DiscreteSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n layersData: LayerData[];\n statsLayersData: StatsData[];\n primaryGrouping: GroupingData;\n secondaryGrouping: GroupingData;\n facetKeyLists: GroupKey[][];\n nonEmptyGroupsByFacets: Record<string, string[]>;\n onlyPositive: boolean;\n } | null = null;\n\n constructor(data: DataFrame, settings: DiscreteSettings, eventHandlers?: DiscreteEventHandlers) {\n super(data, settings);\n\n this.settings = new DiscreteSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers[0];\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: DiscreteSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new DiscreteSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for discrete');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: DiscreteSettingsImpl, settings: DiscreteSettingsImpl) {\n return (\n prevSettings.chartSettings.yAxis.scale !== settings.chartSettings.yAxis.scale ||\n (prevSettings.primaryGrouping?.columnName.value ?? '') !==\n (settings.primaryGrouping?.columnName.value ?? '') ||\n (prevSettings.secondaryGrouping?.columnName.value ?? '') !==\n (settings.secondaryGrouping?.columnName.value ?? '') ||\n (prevSettings.primaryGrouping?.allowNullGroup ?? '') !==\n (settings.primaryGrouping?.allowNullGroup ?? '') ||\n (prevSettings.secondaryGrouping?.allowNullGroup ?? '') !==\n (settings.secondaryGrouping?.allowNullGroup ?? '') ||\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => !l.isEqualForCalculation(settings.layers[idx] as typeof l))\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {chartSettings, y, keyColumn, facetBy, layers, facetSettings} = this.settings;\n const {yAxis} = chartSettings;\n\n const onlyPositive = this.data.rows.every(row => {\n const v = row[y.value];\n return v === null || !(Number(v) < 0);\n });\n // console.info('only positive Y:', onlyPositive);\n\n const primaryGrouping = getGroupingData(this.data, this.settings.primaryGrouping);\n const secondaryGrouping = getGroupingData(this.data, this.settings.secondaryGrouping);\n const facetGroupingValues = facetBy.map(column => column.value);\n const hasLogoOrBarLayer = layers.some(l => l.type === 'logo' || l.type === 'bar');\n\n if (!hasLogoOrBarLayer && primaryGrouping.keys.length > MAX_GROUPS_COUNT) {\n throw Error(`Too many primary groups (${primaryGrouping.keys.length})`);\n }\n if (!hasLogoOrBarLayer && secondaryGrouping.keys.length > MAX_GROUPS_COUNT) {\n throw Error(`Too many secondary groups (${secondaryGrouping.keys.length})`);\n }\n\n // if facet created by more than 1 data column facet key contains all of them, and all keys are used in data grouping;\n // after data preparing we need only complex keys from concatenated strings\n const facetKeyLists:(GroupKey)[][] = facetBy.length\n ? getKeysCombinations(\n facetBy.map(column => getGroupingKeys(this.data, column, facetSettings?.order?.[column.value]))\n )\n : [[NO_GROUPED]];\n\n if (facetKeyLists.length > MAX_FACETS_COUNT) {\n throw Error(`Too many facets (${facetKeyLists.length})`);\n }\n this.data.setGrouping([...facetGroupingValues, primaryGrouping.value, secondaryGrouping.value]);\n const groupingKeys = {\n facet: facetKeyLists,\n primary: (primaryGrouping.value !== null ? primaryGrouping.keys : [NO_GROUPED]) as GroupKey[],\n secondary: (secondaryGrouping.value !== null ? secondaryGrouping.keys : [NO_GROUPED]) as GroupKey[],\n };\n\n const nonEmptyGroupsByFacets = groupingKeys.facet.reduce((res: Record<string, string[]>, facetKey) => {\n res[getFacetStringKey(facetKey)] = groupingKeys.primary.filter(\n primaryKey => this.data.getRowsByGrouping([...facetKey, primaryKey]).length > 0\n ).map(String);\n return res;\n }, {});\n\n const layersData = layers\n .filter(layer => !(layer instanceof StatLayer))\n .map(layer => {\n if (layer instanceof BoxLayer) {\n return getBoxesData(layer, groupingKeys, this.data, y, keyColumn, yAxis);\n }\n if (layer instanceof ViolinLayer) {\n return getViolinsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof DotLayer) {\n return getDotsData(layer, groupingKeys, this.data, y, yAxis, keyColumn);\n }\n if (layer instanceof LineLayer) {\n return getLinesData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof ErrorBarLayer) {\n return getErrorBarsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof BarLayer) {\n return getBarsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof StackedBarLayer) {\n return getStackedBarsData(layer, groupingKeys, this.data, y);\n }\n if (layer instanceof BinnedDotsLayer) {\n return getBinnedDotsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof PairedPointsLayer) {\n return getPairedPointsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof SinaLayer) {\n return getSinaData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof LogoPlotLayer) {\n return getLogoData(layer, groupingKeys, this.data, y);\n }\n throw new Error('Unknown layer type');\n });\n const statsLayersData = layers\n .filter(layer => layer instanceof StatLayer)\n .map(layer => {\n if (primaryGrouping.value === null) {\n throw new Error('Cannot calculate p-value without data grouping');\n }\n return getStatsData(layer as StatLayer, groupingKeys.facet, groupingKeys.primary, y, this.data);\n });\n this.calculatedData = {\n layersData,\n statsLayersData,\n primaryGrouping,\n secondaryGrouping,\n facetKeyLists,\n nonEmptyGroupsByFacets,\n onlyPositive,\n };\n }\n\n _updateAesInData() {\n if (this.calculatedData === null) {\n return;\n }\n const {layers, facetBy, primaryGrouping, secondaryGrouping, facetSettings} = this.settings;\n\n // updating aes in layers (except for stat layers with p-value), layers data is not recalculating\n const noStatLayers = layers.filter(layer => !(layer instanceof StatLayer));\n for (let i = 0; i < noStatLayers.length; i++) {\n const layer = noStatLayers[i];\n if ('aes' in layer) {\n this.calculatedData.layersData[i].aes = layer.aes;\n }\n }\n\n // updating grouping to update linked aes\n this.calculatedData.primaryGrouping = getGroupingData(this.data, primaryGrouping);\n this.calculatedData.secondaryGrouping = getGroupingData(this.data, secondaryGrouping);\n\n // updating for possibly changed facetSettings.order\n this.calculatedData.facetKeyLists = facetBy.length\n ? getKeysCombinations(\n facetBy.map(column => getGroupingKeys(this.data, column, facetSettings?.order?.[column.value]))\n )\n : [[NO_GROUPED]];\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, keyColumn, facetSettings} = this.settings;\n\n const facetKeys = this.calculatedData.facetKeyLists.map(getFacetStringKey);\n const facetLabels = this.calculatedData.facetKeyLists.map(v => v.map(v => v === NO_GROUPED ? 'null' : v)) as string[][];\n this.chartRenderer.render(\n id,\n chartSettings,\n this.calculatedData.primaryGrouping,\n this.calculatedData.secondaryGrouping,\n facetSettings,\n facetKeys,\n facetLabels,\n this.calculatedData.layersData,\n this.calculatedData.statsLayersData,\n keyColumn,\n this.calculatedData.nonEmptyGroupsByFacets,\n this.calculatedData.onlyPositive,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["getGroupingKeys","data","column","order","groupingColumn","availableKeys","lodash","getKeysCombinations","keysLists","result","keys","nextResult","key","resultItem","getGroupingData","grouping","groupingColumnId","uniqRowsByGrouping","row","getValue","getValueLabel","res","ChartDiscrete","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","DiscreteSettingsImpl","node","err","previousSettings","previousData","_field","_value","renderToString","prevSettings","_a","_b","_c","_d","_e","_f","_g","_h","el","idx","l","prevData","prevKeys","chartSettings","y","keyColumn","facetBy","layers","facetSettings","yAxis","onlyPositive","v","primaryGrouping","secondaryGrouping","facetGroupingValues","hasLogoOrBarLayer","MAX_GROUPS_COUNT","facetKeyLists","NO_GROUPED","MAX_FACETS_COUNT","groupingKeys","nonEmptyGroupsByFacets","facetKey","getFacetStringKey","primaryKey","layersData","layer","StatLayer","BoxLayer","getBoxesData","ViolinLayer","getViolinsData","DotLayer","getDotsData","LineLayer","getLinesData","ErrorBarLayer","getErrorBarsData","BarLayer","getBarsData","StackedBarLayer","getStackedBarsData","BinnedDotsLayer","getBinnedDotsData","PairedPointsLayer","getPairedPointsData","SinaLayer","getSinaData","LogoPlotLayer","getLogoData","statsLayersData","getStatsData","noStatLayers","i","id","facetKeys","facetLabels"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/discrete/index.ts"],"sourcesContent":["import { intersection } from 'lodash';\nimport { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame, GroupKey } from '../DataFrame';\nimport { NO_GROUPED } from '../DataFrame';\nimport type { Category, ColumnName, DataValue, DiscreteEventHandlers, DiscreteSettings, GroupingData } from '../types';\nimport ChartRenderer from './ChartRenderer';\nimport { MAX_FACETS_COUNT, MAX_GROUPS_COUNT } from './constants';\nimport {\n BarLayer,\n BinnedDotsLayer,\n BoxLayer,\n DiscreteSettingsImpl,\n DotLayer,\n ErrorBarLayer,\n LineLayer,\n LogoPlotLayer,\n PairedPointsLayer,\n SinaLayer,\n StackedBarLayer,\n StatLayer,\n ViolinLayer,\n} from './DiscreteSettingsImpl';\nimport {\n getBarsData,\n getBinnedDotsData,\n getBoxesData,\n getDotsData,\n getErrorBarsData,\n getLinesData,\n getPairedPointsData,\n getSinaData,\n getStackedBarsData,\n getStatsData,\n getViolinsData,\n} from './layers';\nimport { getLogoData } from './layers/logo';\nimport type { LayerData, StatsData } from './layers/types';\nimport { getFacetStringKey } from './utils/getFacetStringKey';\n\nfunction getGroupingKeys(data: DataFrame, column: ColumnName, order: DataValue[] | null = null) {\n const groupingColumn = column.value;\n const availableKeys = data.getColumnCategories(groupingColumn);\n return intersection(order ?? availableKeys, availableKeys).map(String);\n}\n\n// all combinations with 1 key from each list\nfunction getKeysCombinations(keysLists: string[][]) {\n if (!keysLists.length) {\n return [];\n }\n let result: string[][] = [[]];\n keysLists.forEach(keys => {\n const nextResult: string[][] = [];\n keys.forEach(key => {\n nextResult.push(...result.map(resultItem => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\n\nfunction getGroupingData(\n data: DataFrame,\n grouping: DiscreteSettingsImpl['primaryGrouping' | 'secondaryGrouping']\n): GroupingData {\n if (!grouping) {\n return {\n keys: ['null'],\n value: null,\n label: '',\n valueLabels: {null: ''},\n inheritedAes: null,\n };\n }\n\n const groupingColumnId = grouping.columnName.value;\n const groupingColumnLabelId = grouping.columnName.valueLabels;\n const categories = data.getColumnCategories(groupingColumnId, false);\n const getValueLabel = (category: Category) => {\n return groupingColumnLabelId \n ? String(\n data.getColumnValue(\n groupingColumnLabelId,\n data.getColumnCategoryRowIndex(groupingColumnId, category)\n )\n )\n : category;\n };\n \n const keys = data.getColumnCategories(groupingColumnId, !grouping.allowNullGroup);\n const orderedKeys = grouping.order === undefined ? keys : intersection(grouping.order.map(String), keys);\n\n return {\n keys: orderedKeys,\n value: groupingColumnId,\n label: grouping.columnName.label ?? groupingColumnId,\n valueLabels: categories.reduce((res: Record<string, string>, category: Category) => {\n res[category] = getValueLabel(category);\n return res;\n }, {}),\n inheritedAes: grouping.inheritedAes ?? null,\n };\n}\n\nexport class ChartDiscrete extends AbstractChart {\n settings: DiscreteSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n layersData: LayerData[];\n statsLayersData: StatsData[];\n primaryGrouping: GroupingData;\n secondaryGrouping: GroupingData;\n facetKeyLists: GroupKey[][];\n nonEmptyGroupsByFacets: Record<string, string[]>;\n onlyPositive: boolean;\n } | null = null;\n\n constructor(data: DataFrame, settings: DiscreteSettings, eventHandlers?: DiscreteEventHandlers) {\n super(data, settings);\n\n this.settings = new DiscreteSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers[0];\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n this.hasError = false;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: DiscreteSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new DiscreteSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n this.hasError = false;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for discrete');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: DiscreteSettingsImpl, settings: DiscreteSettingsImpl) {\n return (\n prevSettings.chartSettings.yAxis.scale !== settings.chartSettings.yAxis.scale ||\n (prevSettings.primaryGrouping?.columnName.value ?? '') !==\n (settings.primaryGrouping?.columnName.value ?? '') ||\n (prevSettings.secondaryGrouping?.columnName.value ?? '') !==\n (settings.secondaryGrouping?.columnName.value ?? '') ||\n (prevSettings.primaryGrouping?.allowNullGroup ?? '') !==\n (settings.primaryGrouping?.allowNullGroup ?? '') ||\n (prevSettings.secondaryGrouping?.allowNullGroup ?? '') !==\n (settings.secondaryGrouping?.allowNullGroup ?? '') ||\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => !l.isEqualForCalculation(settings.layers[idx] as typeof l))\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {chartSettings, y, keyColumn, facetBy, layers, facetSettings} = this.settings;\n const {yAxis} = chartSettings;\n\n const onlyPositive = this.data.getColumn(y.value).every(v => {\n return v === null || !(Number(v) < 0);\n });\n // console.info('only positive Y:', onlyPositive);\n\n const primaryGrouping = getGroupingData(this.data, this.settings.primaryGrouping);\n const secondaryGrouping = getGroupingData(this.data, this.settings.secondaryGrouping);\n const facetGroupingValues = facetBy.map(column => column.value);\n const hasLogoOrBarLayer = layers.some(l => l.type === 'logo' || l.type === 'bar');\n\n if (!hasLogoOrBarLayer && primaryGrouping.keys.length > MAX_GROUPS_COUNT) {\n throw Error(`Too many primary groups (${primaryGrouping.keys.length})`);\n }\n if (!hasLogoOrBarLayer && secondaryGrouping.keys.length > MAX_GROUPS_COUNT) {\n throw Error(`Too many secondary groups (${secondaryGrouping.keys.length})`);\n }\n\n // if facet created by more than 1 data column facet key contains all of them, and all keys are used in data grouping;\n // after data preparing we need only complex keys from concatenated strings\n const facetKeyLists:(GroupKey)[][] = facetBy.length\n ? getKeysCombinations(\n facetBy.map(column => getGroupingKeys(this.data, column, facetSettings?.order?.[column.value]))\n )\n : [[NO_GROUPED]];\n\n if (facetKeyLists.length > MAX_FACETS_COUNT) {\n throw Error(`Too many facets (${facetKeyLists.length})`);\n }\n this.data.setGrouping([...facetGroupingValues, primaryGrouping.value, secondaryGrouping.value]);\n const groupingKeys = {\n facet: facetKeyLists,\n primary: (primaryGrouping.value !== null ? primaryGrouping.keys : [NO_GROUPED]) as GroupKey[],\n secondary: (secondaryGrouping.value !== null ? secondaryGrouping.keys : [NO_GROUPED]) as GroupKey[],\n };\n\n const nonEmptyGroupsByFacets = groupingKeys.facet.reduce((res: Record<string, string[]>, facetKey) => {\n res[getFacetStringKey(facetKey)] = groupingKeys.primary.filter(\n primaryKey => this.data.getRowsByGrouping([...facetKey, primaryKey]).length > 0\n ).map(String);\n return res;\n }, {});\n\n const layersData = layers\n .filter(layer => !(layer instanceof StatLayer))\n .map(layer => {\n if (layer instanceof BoxLayer) {\n return getBoxesData(layer, groupingKeys, this.data, y, keyColumn, yAxis);\n }\n if (layer instanceof ViolinLayer) {\n return getViolinsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof DotLayer) {\n return getDotsData(layer, groupingKeys, this.data, y, yAxis, keyColumn);\n }\n if (layer instanceof LineLayer) {\n return getLinesData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof ErrorBarLayer) {\n return getErrorBarsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof BarLayer) {\n return getBarsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof StackedBarLayer) {\n return getStackedBarsData(layer, groupingKeys, this.data, y);\n }\n if (layer instanceof BinnedDotsLayer) {\n return getBinnedDotsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof PairedPointsLayer) {\n return getPairedPointsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof SinaLayer) {\n return getSinaData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof LogoPlotLayer) {\n return getLogoData(layer, groupingKeys, this.data, y);\n }\n throw new Error('Unknown layer type');\n });\n const statsLayersData = layers\n .filter(layer => layer instanceof StatLayer)\n .map(layer => {\n if (primaryGrouping.value === null) {\n throw new Error('Cannot calculate p-value without data grouping');\n }\n return getStatsData(layer as StatLayer, groupingKeys.facet, groupingKeys.primary, y, this.data);\n });\n this.calculatedData = {\n layersData,\n statsLayersData,\n primaryGrouping,\n secondaryGrouping,\n facetKeyLists,\n nonEmptyGroupsByFacets,\n onlyPositive,\n };\n }\n\n _updateAesInData() {\n if (this.calculatedData === null) {\n return;\n }\n const {layers, facetBy, primaryGrouping, secondaryGrouping, facetSettings} = this.settings;\n\n // updating aes in layers (except for stat layers with p-value), layers data is not recalculating\n const noStatLayers = layers.filter(layer => !(layer instanceof StatLayer));\n for (let i = 0; i < noStatLayers.length; i++) {\n const layer = noStatLayers[i];\n if ('aes' in layer) {\n this.calculatedData.layersData[i].aes = layer.aes;\n }\n }\n\n // updating grouping to update linked aes\n this.calculatedData.primaryGrouping = getGroupingData(this.data, primaryGrouping);\n this.calculatedData.secondaryGrouping = getGroupingData(this.data, secondaryGrouping);\n\n // updating for possibly changed facetSettings.order\n this.calculatedData.facetKeyLists = facetBy.length\n ? getKeysCombinations(\n facetBy.map(column => getGroupingKeys(this.data, column, facetSettings?.order?.[column.value]))\n )\n : [[NO_GROUPED]];\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, keyColumn, facetSettings} = this.settings;\n\n const facetKeys = this.calculatedData.facetKeyLists.map(getFacetStringKey);\n const facetLabels = this.calculatedData.facetKeyLists.map(v => v.map(v => v === NO_GROUPED ? 'null' : v)) as string[][];\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n this.calculatedData.primaryGrouping,\n this.calculatedData.secondaryGrouping,\n facetSettings,\n facetKeys,\n facetLabels,\n this.calculatedData.layersData,\n this.calculatedData.statsLayersData,\n keyColumn,\n this.calculatedData.nonEmptyGroupsByFacets,\n this.calculatedData.onlyPositive,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["getGroupingKeys","data","column","order","groupingColumn","availableKeys","intersection","getKeysCombinations","keysLists","result","keys","nextResult","key","resultItem","getGroupingData","grouping","groupingColumnId","groupingColumnLabelId","categories","getValueLabel","category","res","ChartDiscrete","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","DiscreteSettingsImpl","node","err","previousSettings","previousData","_field","_value","renderToString","prevSettings","_a","_b","_c","_d","_e","_f","_g","_h","el","idx","l","prevData","prevKeys","i","chartSettings","y","keyColumn","facetBy","layers","facetSettings","yAxis","onlyPositive","v","primaryGrouping","secondaryGrouping","facetGroupingValues","hasLogoOrBarLayer","MAX_GROUPS_COUNT","facetKeyLists","NO_GROUPED","MAX_FACETS_COUNT","groupingKeys","nonEmptyGroupsByFacets","facetKey","getFacetStringKey","primaryKey","layersData","layer","StatLayer","BoxLayer","getBoxesData","ViolinLayer","getViolinsData","DotLayer","getDotsData","LineLayer","getLinesData","ErrorBarLayer","getErrorBarsData","BarLayer","getBarsData","StackedBarLayer","getStackedBarsData","BinnedDotsLayer","getBinnedDotsData","PairedPointsLayer","getPairedPointsData","SinaLayer","getSinaData","LogoPlotLayer","getLogoData","statsLayersData","getStatsData","noStatLayers","id","facetKeys","facetLabels"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,60 +1,55 @@
1
- import { getFacetStringKey as h } from "../utils/getFacetStringKey.js";
2
- import { exhaustive as f } from "../../utils/index.js";
3
- import y from "../../node_modules/d3-array/src/mean.js";
1
+ import { exhaustive as y } from "../../utils/index.js";
2
+ import { getFacetStringKey as d } from "../utils/getFacetStringKey.js";
3
+ import x from "../../node_modules/d3-array/src/mean.js";
4
4
  import { quantileSorted as b } from "../../node_modules/d3-array/src/quantile.js";
5
- import d from "../../node_modules/d3-array/src/min.js";
6
- import x from "../../node_modules/d3-array/src/max.js";
7
- function M(r, n, s, o) {
5
+ import M from "../../node_modules/d3-array/src/min.js";
6
+ import w from "../../node_modules/d3-array/src/max.js";
7
+ function S(r, t, e) {
8
8
  if (r.length === 0)
9
9
  throw Error("Unable to create bar on empty data");
10
- const c = (t) => n === "log" ? Math.log10(t) : t, m = (t) => n === "log" ? Math.pow(10, t) : t, e = (t) => {
11
- const a = Number(t[s]);
12
- if (n === "log" && a < 1)
13
- throw Error(`Value < 1 in log scale: ${a}`);
14
- return a;
15
- };
16
- switch (o) {
10
+ const i = (a) => t === "log" ? Math.log10(a) : a, s = (a) => t === "log" ? Math.pow(10, a) : a;
11
+ switch (e) {
17
12
  case "max":
18
- return x(r, e) ?? e(r[0]);
13
+ return w(r) ?? r[0];
19
14
  case "min":
20
- return d(r, e) ?? e(r[0]);
15
+ return M(r) ?? r[0];
21
16
  case "median": {
22
- const t = r.map((a) => Number(a[s])).map(c).sort((a, u) => a - u);
23
- return m(b(t, 0.5));
17
+ const a = r.map(i).sort((o, n) => o - n);
18
+ return s(b(a, 0.5));
24
19
  }
25
20
  case "mean":
26
- return y(r, e) ?? e(r[0]);
21
+ return x(r) ?? r[0];
27
22
  default:
28
- f(o, `Unknown bar height function ${o}`);
23
+ y(e, `Unknown bar height function ${e}`);
29
24
  }
30
25
  }
31
- function G(r, n, s, o, c) {
32
- let m = -1 / 0, e = 1 / 0;
26
+ function C(r, t, e, i, s) {
27
+ let a = -1 / 0, o = 1 / 0;
33
28
  return {
34
29
  type: "bar",
35
- geoms: n.facet.reduce((t, a) => {
36
- const u = h(a);
37
- return t[u] = [], n.primary.forEach((g) => {
38
- n.secondary.forEach((p) => {
39
- const l = s.getRowsByGrouping([...a, g, p]);
30
+ geoms: t.facet.reduce((n, h) => {
31
+ const g = d(h);
32
+ return n[g] = [], t.primary.forEach((c) => {
33
+ t.secondary.forEach((u) => {
34
+ const l = e.getRowsByGrouping([...h, c, u]);
40
35
  if (!l.length)
41
36
  return;
42
- const i = M(l, c.scale, o.value, r.height);
43
- m = Math.max(m, i, 0), e = Math.min(e, i, 0), t[u].push({
44
- key: `bar_${String(g)}_${String(p)}`,
45
- value: i,
46
- primaryGrouping: g,
47
- secondaryGrouping: p,
48
- boundsY: { min: Math.min(0, i), max: Math.max(0, i) }
37
+ const p = Array.from(l).map((f) => e.getColumnValue(i.value, f)), m = S(p, s.scale, r.height);
38
+ a = Math.max(a, m, 0), o = Math.min(o, m, 0), n[g].push({
39
+ key: `bar_${String(c)}_${String(u)}`,
40
+ value: m,
41
+ primaryGrouping: c,
42
+ secondaryGrouping: u,
43
+ boundsY: { min: Math.min(0, m), max: Math.max(0, m) }
49
44
  });
50
45
  });
51
- }), t;
46
+ }), n;
52
47
  }, {}),
53
- meta: { minY: e, maxY: m },
48
+ meta: { minY: o, maxY: a },
54
49
  aes: r.aes
55
50
  };
56
51
  }
57
52
  export {
58
- G as getBarsData
53
+ C as getBarsData
59
54
  };
60
55
  //# sourceMappingURL=bar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bar.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/discrete/layers/bar.ts"],"sourcesContent":["import type {GroupKey} from '../../DataFrame';\nimport type {DataFrame} from '../../DataFrame';\nimport type {BarLayer, DiscreteSettingsImpl} from '../DiscreteSettingsImpl';\nimport type {BarsData} from './types';\nimport {getFacetStringKey} from '../utils/getFacetStringKey';\nimport type {ColumnName, Row} from '../../types';\nimport {exhaustive} from '../../utils';\nimport {max as d3Max, min as d3Min, mean, quantileSorted} from 'd3-array';\n\nfunction calculateBarUpperBound(\n valuesRows: Row[],\n scale: 'linear' | 'log',\n valueColumn: string,\n heightFunc: 'min' | 'max' | 'median' | 'mean'\n):number {\n if (valuesRows.length === 0) {\n throw Error('Unable to create bar on empty data');\n }\n const convertToScale = (v: number) => (scale === 'log' ? Math.log10(v) : v);\n const convertFromScale = (v: number) => (scale === 'log' ? Math.pow(10, v) : v);\n\n const yGetter = (row: Row) => {\n const value = Number(row[valueColumn]);\n if (scale === 'log' && value < 1) {\n throw Error(`Value < 1 in log scale: ${value}`);\n }\n return value;\n };\n\n switch (heightFunc) {\n case 'max':\n return d3Max(valuesRows, yGetter) ?? yGetter(valuesRows[0]);\n case 'min':\n return d3Min(valuesRows, yGetter) ?? yGetter(valuesRows[0]);\n case 'median': {\n const valuesSortedConverted = valuesRows\n .map(row => Number(row[valueColumn]))\n .map(convertToScale)\n .sort((a, b) => a - b);\n return convertFromScale(quantileSorted(valuesSortedConverted, 0.5) as number);\n }\n case 'mean': {\n return mean(valuesRows, yGetter) ?? yGetter(valuesRows[0]);\n }\n default: exhaustive(heightFunc, `Unknown bar height function ${heightFunc}`);\n }\n}\n\nexport type Bar = {\n key: string;\n value: number;\n primaryGrouping: string;\n secondaryGrouping: string;\n boundsY: {\n min: number;\n max: number;\n };\n};\n\nexport function getBarsData(\n layer: BarLayer,\n groupingKeys: {\n facet: GroupKey[][],\n primary: GroupKey[],\n secondary: GroupKey[]\n },\n data: DataFrame,\n y: ColumnName,\n yAxis: DiscreteSettingsImpl['chartSettings']['yAxis']\n): BarsData {\n let maxY = -Infinity;\n let minY = Infinity;\n\n return {\n type: 'bar',\n geoms: groupingKeys.facet.reduce((res: Record<string, Bar[]>, facetKey) => {\n const strFacetKey = getFacetStringKey(facetKey);\n res[strFacetKey] = [];\n groupingKeys.primary.forEach(primaryKey => {\n groupingKeys.secondary.forEach(secondaryKey => {\n const values = data.getRowsByGrouping([...facetKey, primaryKey, secondaryKey]);\n if (!values.length) {\n return;\n }\n const upperBoundValue = calculateBarUpperBound(values, yAxis.scale, y.value, layer.height);\n maxY = Math.max(maxY, upperBoundValue, 0);\n minY = Math.min(minY, upperBoundValue, 0);\n res[strFacetKey].push({\n key: `bar_${String(primaryKey)}_${String(secondaryKey)}`,\n value: upperBoundValue,\n primaryGrouping: primaryKey,\n secondaryGrouping: secondaryKey,\n boundsY: {min: Math.min(0, upperBoundValue), max: Math.max(0, upperBoundValue)},\n } as Bar);\n });\n });\n return res;\n }, {}),\n meta: {minY, maxY},\n aes: layer.aes,\n };\n}\n"],"names":["calculateBarUpperBound","valuesRows","scale","valueColumn","heightFunc","convertToScale","v","convertFromScale","yGetter","row","value","d3Max","d3Min","valuesSortedConverted","a","b","quantileSorted","mean","exhaustive","getBarsData","layer","groupingKeys","data","y","yAxis","maxY","minY","res","facetKey","strFacetKey","getFacetStringKey","primaryKey","secondaryKey","values","upperBoundValue"],"mappings":";;;;;;AASA,SAASA,EACLC,GACAC,GACAC,GACAC,GACK;AACL,MAAIH,EAAW,WAAW;AACtB,UAAM,MAAM,oCAAoC;AAEpD,QAAMI,IAAiB,CAACC,MAAeJ,MAAU,QAAQ,KAAK,MAAMI,CAAC,IAAIA,GACnEC,IAAmB,CAACD,MAAeJ,MAAU,QAAQ,KAAK,IAAI,IAAII,CAAC,IAAIA,GAEvEE,IAAU,CAACC,MAAa;AAC1B,UAAMC,IAAS,OAAOD,EAAIN,CAAW,CAAC;AACtC,QAAID,MAAU,SAASQ,IAAQ;AAC3B,YAAM,MAAM,2BAA2BA,CAAK,EAAE;AAElD,WAAOA;AAAAA,EACX;AAEA,UAAQN,GAAAA;AAAAA,IACJ,KAAK;AACD,aAAOO,EAAMV,GAAYO,CAAO,KAAKA,EAAQP,EAAW,CAAC,CAAC;AAAA,IAC9D,KAAK;AACD,aAAOW,EAAMX,GAAYO,CAAO,KAAKA,EAAQP,EAAW,CAAC,CAAC;AAAA,IAC9D,KAAK,UAAU;AACX,YAAMY,IAAwBZ,EACzB,IAAI,OAAO,OAAOQ,EAAIN,CAAW,CAAC,CAAC,EACnC,IAAIE,CAAc,EAClB,KAAK,CAACS,GAAGC,MAAMD,IAAIC,CAAC;AACzB,aAAOR,EAAiBS,EAAeH,GAAuB,GAAG,CAAW;AAAA,IAChF;AAAA,IACA,KAAK;AACD,aAAOI,EAAKhB,GAAYO,CAAO,KAAKA,EAAQP,EAAW,CAAC,CAAC;AAAA,IAE7D;AAASiB,MAAAA,EAAWd,GAAY,+BAA+BA,CAAU,EAAE;AAAA,EAAA;AAEnF;AAaO,SAASe,EACZC,GACAC,GAKAC,GACAC,GACAC,GACQ;AACR,MAAIC,IAAO,QACPC,IAAO;AAEX,SAAO;AAAA,IACH,MAAM;AAAA,IACN,OAAOL,EAAa,MAAM,OAAO,CAACM,GAA4BC,MAAa;AACvE,YAAMC,IAAcC,EAAkBF,CAAQ;AAC9C,aAAAD,EAAIE,CAAW,IAAI,CAAA,GACnBR,EAAa,QAAQ,QAAQ,CAAAU,MAAc;AACvCV,QAAAA,EAAa,UAAU,QAAQ,CAAAW,MAAgB;AAC3C,gBAAMC,IAASX,EAAK,kBAAkB,CAAC,GAAGM,GAAUG,GAAYC,CAAY,CAAC;AAC7E,cAAI,CAACC,EAAO;AACR;AAEJ,gBAAMC,IAAkBlC,EAAuBiC,GAAQT,EAAM,OAAOD,EAAE,OAAOH,EAAM,MAAM;AACzFK,cAAO,KAAK,IAAIA,GAAMS,GAAiB,CAAC,GACxCR,IAAO,KAAK,IAAIA,GAAMQ,GAAiB,CAAC,GACxCP,EAAIE,CAAW,EAAE,KAAK;AAAA,YAClB,KAAK,OAAO,OAAOE,CAAU,CAAC,IAAI,OAAOC,CAAY,CAAC;AAAA,YACtD,OAAOE;AAAAA,YACP,iBAAiBH;AAAAA,YACjB,mBAAmBC;AAAAA,YACnB,SAAS,EAAC,KAAK,KAAK,IAAI,GAAGE,CAAe,GAAG,KAAK,KAAK,IAAI,GAAGA,CAAe,EAAA;AAAA,UAAA,CACzE;AAAA,QACZ,CAAC;AAAA,MACL,CAAC,GACMP;AAAAA,IACX,GAAG,CAAA,CAAE;AAAA,IACL,MAAM,EAAC,MAAAD,GAAM,MAAAD,EAAAA;AAAAA,IACb,KAAKL,EAAM;AAAA,EAAA;AAEnB;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"bar.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/discrete/layers/bar.ts"],"sourcesContent":["import { max as d3Max, min as d3Min, mean, quantileSorted } from 'd3-array';\nimport type { DataFrame, GroupKey } from '../../DataFrame';\nimport type { ColumnName } from '../../types';\nimport { exhaustive } from '../../utils';\nimport type { BarLayer, DiscreteSettingsImpl } from '../DiscreteSettingsImpl';\nimport { getFacetStringKey } from '../utils/getFacetStringKey';\nimport type { BarsData } from './types';\n\nfunction calculateBarUpperBound(\n values: number[],\n scale: 'linear' | 'log',\n heightFunc: 'min' | 'max' | 'median' | 'mean'\n):number {\n if (values.length === 0) {\n throw Error('Unable to create bar on empty data');\n }\n const convertToScale = (v: number) => (scale === 'log' ? Math.log10(v) : v);\n const convertFromScale = (v: number) => (scale === 'log' ? Math.pow(10, v) : v);\n\n switch (heightFunc) {\n case 'max':\n return d3Max(values) ?? values[0];\n case 'min':\n return d3Min(values) ?? values[0];\n case 'median': {\n const valuesSortedConverted = values\n .map(convertToScale)\n .sort((a, b) => a - b);\n return convertFromScale(quantileSorted(valuesSortedConverted, 0.5) as number);\n }\n case 'mean': {\n return mean(values) ?? values[0];\n }\n default: exhaustive(heightFunc, `Unknown bar height function ${heightFunc}`);\n }\n}\n\nexport type Bar = {\n key: string;\n value: number;\n primaryGrouping: string;\n secondaryGrouping: string;\n boundsY: {\n min: number;\n max: number;\n };\n};\n\nexport function getBarsData(\n layer: BarLayer,\n groupingKeys: {\n facet: GroupKey[][],\n primary: GroupKey[],\n secondary: GroupKey[]\n },\n data: DataFrame,\n y: ColumnName,\n yAxis: DiscreteSettingsImpl['chartSettings']['yAxis']\n): BarsData {\n let maxY = -Infinity;\n let minY = Infinity;\n\n return {\n type: 'bar',\n geoms: groupingKeys.facet.reduce((res: Record<string, Bar[]>, facetKey) => {\n const strFacetKey = getFacetStringKey(facetKey);\n res[strFacetKey] = [];\n groupingKeys.primary.forEach(primaryKey => {\n groupingKeys.secondary.forEach(secondaryKey => {\n const idx = data.getRowsByGrouping([...facetKey, primaryKey, secondaryKey]);\n if (!idx.length) {\n return;\n }\n const values = Array.from(idx).map(i => data.getColumnValue(y.value, i) as number);\n const upperBoundValue = calculateBarUpperBound(values, yAxis.scale, layer.height);\n maxY = Math.max(maxY, upperBoundValue, 0);\n minY = Math.min(minY, upperBoundValue, 0);\n res[strFacetKey].push({\n key: `bar_${String(primaryKey)}_${String(secondaryKey)}`,\n value: upperBoundValue,\n primaryGrouping: primaryKey,\n secondaryGrouping: secondaryKey,\n boundsY: {min: Math.min(0, upperBoundValue), max: Math.max(0, upperBoundValue)},\n } as Bar);\n });\n });\n return res;\n }, {}),\n meta: {minY, maxY},\n aes: layer.aes,\n };\n}\n"],"names":["calculateBarUpperBound","values","scale","heightFunc","convertToScale","v","convertFromScale","d3Max","d3Min","valuesSortedConverted","a","b","quantileSorted","mean","exhaustive","getBarsData","layer","groupingKeys","data","y","yAxis","maxY","minY","res","facetKey","strFacetKey","getFacetStringKey","primaryKey","secondaryKey","idx","i","upperBoundValue"],"mappings":";;;;;;AAQA,SAASA,EACLC,GACAC,GACAC,GACK;AACL,MAAIF,EAAO,WAAW;AAClB,UAAM,MAAM,oCAAoC;AAEpD,QAAMG,IAAiB,CAACC,MAAeH,MAAU,QAAQ,KAAK,MAAMG,CAAC,IAAIA,GACnEC,IAAmB,CAACD,MAAeH,MAAU,QAAQ,KAAK,IAAI,IAAIG,CAAC,IAAIA;AAE7E,UAAQF,GAAAA;AAAAA,IACJ,KAAK;AACD,aAAOI,EAAMN,CAAM,KAAKA,EAAO,CAAC;AAAA,IACpC,KAAK;AACD,aAAOO,EAAMP,CAAM,KAAKA,EAAO,CAAC;AAAA,IACpC,KAAK,UAAU;AACX,YAAMQ,IAAwBR,EACzB,IAAIG,CAAc,EAClB,KAAK,CAACM,GAAGC,MAAMD,IAAIC,CAAC;AACzB,aAAOL,EAAiBM,EAAeH,GAAuB,GAAG,CAAW;AAAA,IAChF;AAAA,IACA,KAAK;AACD,aAAOI,EAAKZ,CAAM,KAAKA,EAAO,CAAC;AAAA,IAEnC;AAASa,MAAAA,EAAWX,GAAY,+BAA+BA,CAAU,EAAE;AAAA,EAAA;AAEnF;AAaO,SAASY,EACZC,GACAC,GAKAC,GACAC,GACAC,GACQ;AACR,MAAIC,IAAO,QACPC,IAAO;AAEX,SAAO;AAAA,IACH,MAAM;AAAA,IACN,OAAOL,EAAa,MAAM,OAAO,CAACM,GAA4BC,MAAa;AACvE,YAAMC,IAAcC,EAAkBF,CAAQ;AAC9C,aAAAD,EAAIE,CAAW,IAAI,CAAA,GACnBR,EAAa,QAAQ,QAAQ,CAAAU,MAAc;AACvCV,QAAAA,EAAa,UAAU,QAAQ,CAAAW,MAAgB;AAC3C,gBAAMC,IAAMX,EAAK,kBAAkB,CAAC,GAAGM,GAAUG,GAAYC,CAAY,CAAC;AAC1E,cAAI,CAACC,EAAI;AACL;AAEJ,gBAAM5B,IAAS,MAAM,KAAK4B,CAAG,EAAE,IAAI,CAAAC,MAAKZ,EAAK,eAAeC,EAAE,OAAOW,CAAC,CAAW,GAC3EC,IAAkB/B,EAAuBC,GAAQmB,EAAM,OAAOJ,EAAM,MAAM;AAChFK,UAAAA,IAAO,KAAK,IAAIA,GAAMU,GAAiB,CAAC,GACxCT,IAAO,KAAK,IAAIA,GAAMS,GAAiB,CAAC,GACxCR,EAAIE,CAAW,EAAE,KAAK;AAAA,YAClB,KAAK,OAAO,OAAOE,CAAU,CAAC,IAAI,OAAOC,CAAY,CAAC;AAAA,YACtD,OAAOG;AAAAA,YACP,iBAAiBJ;AAAAA,YACjB,mBAAmBC;AAAAA,YACnB,SAAS,EAAC,KAAK,KAAK,IAAI,GAAGG,CAAe,GAAG,KAAK,KAAK,IAAI,GAAGA,CAAe,EAAA;AAAA,UAAA,CACzE;AAAA,QACZ,CAAC;AAAA,MACL,CAAC,GACMR;AAAAA,IACX,GAAG,CAAA,CAAE;AAAA,IACL,MAAM,EAAC,MAAAD,GAAM,MAAAD,EAAAA;AAAAA,IACb,KAAKL,EAAM;AAAA,EAAA;AAEnB;","x_google_ignoreList":[0]}