@milaboratories/graph-maker 1.1.142 → 1.1.143

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 (106) hide show
  1. package/dist/GraphMaker/components/ReorderForm.vue.d.ts +15 -0
  2. package/dist/GraphMaker/components/ReorderForm.vue.d.ts.map +1 -0
  3. package/dist/GraphMaker/components/ReorderForm.vue.js +43 -0
  4. package/dist/GraphMaker/components/ReorderForm.vue.js.map +1 -0
  5. package/dist/GraphMaker/components/ReorderForm.vue2.js +5 -0
  6. package/dist/GraphMaker/components/ReorderForm.vue2.js.map +1 -0
  7. package/dist/GraphMaker/constantsCommon.d.ts +15 -0
  8. package/dist/GraphMaker/constantsCommon.d.ts.map +1 -1
  9. package/dist/GraphMaker/constantsCommon.js +11 -8
  10. package/dist/GraphMaker/constantsCommon.js.map +1 -1
  11. package/dist/GraphMaker/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js.map +1 -1
  12. package/dist/GraphMaker/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.d.ts.map +1 -1
  13. package/dist/GraphMaker/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.js +305 -172
  14. package/dist/GraphMaker/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.js.map +1 -1
  15. package/dist/GraphMaker/index.vue.js +33 -33
  16. package/dist/GraphMaker/index.vue.js.map +1 -1
  17. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +3 -3
  18. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts.map +1 -1
  19. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts +9 -9
  20. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts.map +1 -1
  21. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +5 -11
  22. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts.map +1 -1
  23. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +3 -3
  24. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
  25. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.d.ts +1 -1
  26. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts +31 -5
  27. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts.map +1 -1
  28. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js +56 -53
  29. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js.map +1 -1
  30. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts +1 -7
  31. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts.map +1 -1
  32. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js +13 -13
  33. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js.map +1 -1
  34. package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.d.ts +6 -4
  35. package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.d.ts.map +1 -1
  36. package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.js +42 -13
  37. package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.js.map +1 -1
  38. package/dist/GraphMaker/utils/loadUniqueValuesToSave.d.ts.map +1 -1
  39. package/dist/GraphMaker/utils/loadUniqueValuesToSave.js +48 -44
  40. package/dist/GraphMaker/utils/loadUniqueValuesToSave.js.map +1 -1
  41. package/dist/node_modules/@milaboratories/miplots4/dist/{discrete/components → common}/BandAxis.js +3 -3
  42. package/dist/node_modules/@milaboratories/miplots4/dist/common/BandAxis.js.map +1 -0
  43. package/dist/node_modules/@milaboratories/miplots4/dist/common/ContinuousGrid.js.map +1 -1
  44. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/ChartRenderer.js +14 -14
  45. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js +197 -270
  46. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js.map +1 -1
  47. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js +9 -9
  48. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/Chart.js +1 -1
  49. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/Chart.js.map +1 -1
  50. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/Grid.js.map +1 -1
  51. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js +11 -11
  52. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/ChartRenderer.js +1 -1
  53. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-scale/src/band.js +44 -34
  54. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-scale/src/band.js.map +1 -1
  55. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js +272 -195
  56. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js.map +1 -1
  57. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js +23 -23
  58. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
  59. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Chart.js +54 -50
  60. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Chart.js.map +1 -1
  61. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxis.js +32 -28
  62. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxis.js.map +1 -1
  63. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartLayersData.js.map +1 -1
  64. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTooltip.js.map +1 -1
  65. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js +29 -26
  66. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js.map +1 -1
  67. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartsGroup.js +44 -41
  68. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartsGroup.js.map +1 -1
  69. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Grid.js +31 -27
  70. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Grid.js.map +1 -1
  71. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/dots.js.map +1 -1
  72. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js +29 -18
  73. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js.map +1 -1
  74. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js +71 -57
  75. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js.map +1 -1
  76. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/linearRegression.js.map +1 -1
  77. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/isNumericScale.js +11 -0
  78. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/isNumericScale.js.map +1 -0
  79. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js +10 -10
  80. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  81. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
  82. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js +6 -6
  83. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
  84. package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js +35 -25
  85. package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js.map +1 -1
  86. package/dist/node_modules/@milaboratories/miplots4/dist/types/dendro.js +3 -3
  87. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js +37 -37
  88. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js.map +1 -1
  89. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js +6 -6
  90. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js +7 -7
  91. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js.map +1 -1
  92. package/dist/node_modules/@milaboratories/miplots4/dist/utils/createMultilineDiscreteLabels.js +32 -0
  93. package/dist/node_modules/@milaboratories/miplots4/dist/utils/createMultilineDiscreteLabels.js.map +1 -0
  94. package/dist/node_modules/@milaboratories/miplots4/dist/utils/getFacetRowsColumns.js +18 -0
  95. package/dist/node_modules/@milaboratories/miplots4/dist/utils/getFacetRowsColumns.js.map +1 -0
  96. package/dist/node_modules/@milaboratories/miplots4/dist/utils/measureMultilineDiscreteLabels.js +63 -0
  97. package/dist/node_modules/@milaboratories/miplots4/dist/utils/measureMultilineDiscreteLabels.js.map +1 -0
  98. package/dist/node_modules/@milaboratories/miplots4/dist/{discrete/utils → utils}/splitTextByWidth.js +1 -1
  99. package/dist/node_modules/@milaboratories/miplots4/dist/utils/splitTextByWidth.js.map +1 -0
  100. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js +2 -2
  101. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js.map +1 -1
  102. package/package.json +3 -3
  103. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/BandAxis.js.map +0 -1
  104. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/splitTextByWidth.js.map +0 -1
  105. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Axis.js +0 -59
  106. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Axis.js.map +0 -1
@@ -1,39 +1,43 @@
1
- import { j as i } from "../../node_modules/react/jsx-runtime.js";
2
- import { GRID_GRAY as y, BLACK as a } from "../../constants.js";
3
- import { getLineShape as g } from "../../utils/getLineShape.js";
1
+ import { j as t } from "../../node_modules/react/jsx-runtime.js";
2
+ import { GRID_GRAY as f, BLACK as x } from "../../constants.js";
3
+ import { getLineShape as p } from "../../utils/getLineShape.js";
4
4
  import { r as d } from "../../_virtual/index.js";
5
- const G = 1;
6
- function D({ scaleX: l, scaleY: o, width: r, height: n, axisX: x, axisY: c, frameType: t, updatingKey: j = "" }) {
7
- const [p, u] = d.useState(l.ticks()), [k, _] = d.useState(o.ticks()), { significantLines: h = [] } = x, { significantLines: m = [] } = c;
5
+ import { isNumericScale as h, isContinuousAxis as g } from "../utils/isNumericScale.js";
6
+ const L = 1;
7
+ function c(n, a) {
8
+ return h(n) ? n.ticks().filter((i) => !a.includes(i)) : n.domain();
9
+ }
10
+ function Y({ scaleX: n, scaleY: a, width: i, height: o, axisX: l, axisY: y, frameType: e, updatingKey: j = "" }) {
11
+ const { significantLines: m = [] } = l, { significantLines: u = [] } = y, [G, _] = d.useState(() => c(n, m)), [k, w] = d.useState(() => c(a, u));
8
12
  return d.useEffect(() => {
9
- const e = l.ticks().filter((f) => !h.includes(f)), s = o.ticks().filter((f) => !m.includes(f));
10
- u(e), _(s);
11
- }, [l, o, j]), /* @__PURE__ */ i.jsxs("g", { stroke: y, children: [
12
- x.showGrid && p.map((e) => {
13
- const s = l(e);
14
- return /* @__PURE__ */ i.jsx("line", { x1: s, x2: s, y1: 0, y2: n }, `x_${s}_${n}`);
13
+ const r = c(n, m), s = c(a, u);
14
+ _(r), w(s);
15
+ }, [n, a, j]), /* @__PURE__ */ t.jsxs("g", { stroke: f, children: [
16
+ l.showGrid && G.map((r) => {
17
+ const s = n(r);
18
+ return /* @__PURE__ */ t.jsx("line", { x1: s, x2: s, y1: 0, y2: o }, `x_${s}_${o}`);
15
19
  }),
16
- c.showGrid && k.map((e) => {
17
- const s = o(e);
18
- return /* @__PURE__ */ i.jsx("line", { x1: 0, x2: r, y1: s, y2: s }, `y_${s}_${r}`);
20
+ y.showGrid && k.map((r) => {
21
+ const s = a(r);
22
+ return /* @__PURE__ */ t.jsx("line", { x1: 0, x2: i, y1: s, y2: s }, `y_${s}_${i}`);
19
23
  }),
20
- /* @__PURE__ */ i.jsx("g", { strokeDasharray: g(x.significantLinesStyle), stroke: a, children: h.map((e) => {
21
- const s = l(e);
22
- return /* @__PURE__ */ i.jsx("line", { x1: s, x2: s, y1: 0, y2: n }, `significant_${s}_${n}`);
24
+ h(n) && g(l) && /* @__PURE__ */ t.jsx("g", { strokeDasharray: p(l.significantLinesStyle), stroke: x, children: m.map((r) => {
25
+ const s = n(r);
26
+ return /* @__PURE__ */ t.jsx("line", { x1: s, x2: s, y1: 0, y2: o }, `significant_${s}_${o}`);
23
27
  }) }),
24
- /* @__PURE__ */ i.jsx("g", { strokeDasharray: g(c.significantLinesStyle), stroke: a, children: m.map((e) => {
25
- const s = o(e);
26
- return /* @__PURE__ */ i.jsx("line", { x1: 0, x2: r, y1: s, y2: s }, `significant_${s}_${r}`);
28
+ h(a) && g(y) && /* @__PURE__ */ t.jsx("g", { strokeDasharray: p(y.significantLinesStyle), stroke: x, children: u.map((r) => {
29
+ const s = a(r);
30
+ return /* @__PURE__ */ t.jsx("line", { x1: 0, x2: i, y1: s, y2: s }, `significant_${s}_${i}`);
27
31
  }) }),
28
- t !== "empty" && /* @__PURE__ */ i.jsxs("g", { strokeWidth: G, children: [
29
- (x.showGrid || t !== "left") && /* @__PURE__ */ i.jsx("line", { stroke: t === "left" ? y : a, x1: "0", x2: r, y1: n, y2: n }),
30
- (x.showGrid || t !== "bottom") && /* @__PURE__ */ i.jsx("line", { stroke: t === "bottom" ? y : a, x1: "0", x2: "0", y1: "0", y2: n }),
31
- (x.showGrid || t === "full") && /* @__PURE__ */ i.jsx("line", { stroke: t === "full" ? a : y, x1: r, x2: r, y1: "0", y2: n }),
32
- (c.showGrid || t === "full") && /* @__PURE__ */ i.jsx("line", { stroke: t === "full" ? a : y, x1: "0", x2: r, y1: "0", y2: "0" })
32
+ e !== "empty" && /* @__PURE__ */ t.jsxs("g", { strokeWidth: L, children: [
33
+ (l.showGrid || e !== "left") && /* @__PURE__ */ t.jsx("line", { stroke: e === "left" ? f : x, x1: "0", x2: i, y1: o, y2: o }),
34
+ (l.showGrid || e !== "bottom") && /* @__PURE__ */ t.jsx("line", { stroke: e === "bottom" ? f : x, x1: "0", x2: "0", y1: "0", y2: o }),
35
+ (l.showGrid || e === "full") && /* @__PURE__ */ t.jsx("line", { stroke: e === "full" ? x : f, x1: i, x2: i, y1: "0", y2: o }),
36
+ (y.showGrid || e === "full") && /* @__PURE__ */ t.jsx("line", { stroke: e === "full" ? x : f, x1: "0", x2: i, y1: "0", y2: "0" })
33
37
  ] })
34
38
  ] });
35
39
  }
36
40
  export {
37
- D as Grid
41
+ Y as Grid
38
42
  };
39
43
  //# sourceMappingURL=Grid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Grid.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/components/Grid.tsx"],"sourcesContent":["import {BLACK, GRID_GRAY} from '../../constants';\nimport type {AxisSettings, FrameType} from '../../types';\nimport {getLineShape} from '../../utils/getLineShape';\nimport type {ScaleLinear, ScaleLogarithmic} from 'd3-scale';\nimport React from 'react';\nimport {useEffect, useState} from 'react';\n\nconst GRID_FRAME_WIDTH = 1;\n\ninterface GridProps {\n scaleY: ScaleLinear<number, number> | ScaleLogarithmic<number, number>;\n scaleX: ScaleLinear<number, number> | ScaleLogarithmic<number, number>;\n width: number;\n height: number;\n axisX: AxisSettings;\n axisY: AxisSettings;\n frameType: FrameType;\n updatingKey?: string;\n}\n\nexport function Grid({scaleX, scaleY, width, height, axisX, axisY, frameType, updatingKey = ''}: GridProps) {\n const [ticksX, setTicksX] = useState<number[]>(scaleX.ticks());\n const [ticksY, setTicksY] = useState<number[]>(scaleY.ticks());\n\n const {significantLines: significantLinesX = []} = axisX;\n const {significantLines: significantLinesY = []} = axisY;\n\n useEffect(() => {\n const ticksX = scaleX.ticks().filter(t => !significantLinesX.includes(t));\n const ticksY = scaleY.ticks().filter(t => !significantLinesY.includes(t));\n setTicksX(ticksX);\n setTicksY(ticksY);\n }, [scaleX, scaleY, updatingKey]);\n\n return (\n <g stroke={GRID_GRAY}>\n {axisX.showGrid &&\n ticksX.map((tick) => {\n const x = scaleX(tick);\n return (\n <line key={`x_${x}_${height}`} x1={x} x2={x} y1={0} y2={height} />\n );\n })}\n {axisY.showGrid &&\n ticksY.map(tick => {\n const y = scaleY(tick);\n return (\n <line key={`y_${y}_${width}`} x1={0} x2={width} y1={y} y2={y} />\n );\n })}\n <g strokeDasharray={getLineShape(axisX.significantLinesStyle)} stroke={BLACK}>\n {significantLinesX.map(v => {\n const x = scaleX(v);\n return (\n <line key={`significant_${x}_${height}`} x1={x} x2={x} y1={0} y2={height} />\n );\n })}\n </g>\n <g strokeDasharray={getLineShape(axisY.significantLinesStyle)} stroke={BLACK}>\n {significantLinesY.map(v => {\n const y = scaleY(v);\n return (\n <line key={`significant_${y}_${width}`} x1={0} x2={width} y1={y} y2={y} />\n );\n })}\n </g>\n {frameType !== 'empty' && (\n <g strokeWidth={GRID_FRAME_WIDTH}>\n {(axisX.showGrid || frameType !== 'left') && <line stroke={frameType === 'left' ? GRID_GRAY : BLACK} x1=\"0\" x2={width} y1={height} y2={height} />}\n {(axisX.showGrid || frameType !== 'bottom') && <line stroke={frameType === 'bottom' ? GRID_GRAY : BLACK} x1=\"0\" x2=\"0\" y1=\"0\" y2={height} />}\n {(axisX.showGrid || frameType === 'full') && <line stroke={frameType === 'full' ? BLACK : GRID_GRAY} x1={width} x2={width} y1=\"0\" y2={height} />}\n {(axisY.showGrid || frameType === 'full') && <line stroke={frameType === 'full' ? BLACK : GRID_GRAY} x1=\"0\" x2={width} y1=\"0\" y2=\"0\" />}\n </g>\n )}\n </g>\n );\n}\n"],"names":["GRID_FRAME_WIDTH","Grid","scaleX","scaleY","width","height","axisX","axisY","frameType","updatingKey","ticksX","setTicksX","useState","ticksY","setTicksY","significantLinesX","significantLinesY","useEffect","y","t","jsxs","GRID_GRAY","tick","x","jsx","getLineShape","BLACK","v"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"Grid.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/components/Grid.tsx"],"sourcesContent":["import { BLACK, GRID_GRAY } from '../../constants';\nimport type { AxisSettings, AxisSettingsContinuous, FrameType } from '../../types';\nimport { getLineShape } from '../../utils/getLineShape';\nimport React from 'react';\nimport { useEffect, useState } from 'react';\nimport type { ChartScales } from './types';\nimport { isContinuousAxis, isNumericScale } from '../utils/isNumericScale';\n\ntype PointValue = { valueOf(): number; } & string;\n\nconst GRID_FRAME_WIDTH = 1;\n\ninterface GridProps {\n scaleY: ChartScales['y'];\n scaleX: ChartScales['x'];\n width: number;\n height: number;\n axisX: AxisSettings;\n axisY: AxisSettings;\n frameType: FrameType;\n updatingKey?: string;\n}\n\nfunction getTicks(scale: ChartScales['x' | 'y'], significantLines: number[]): (string | number)[] {\n if (isNumericScale(scale)) {\n return scale.ticks().filter(t => !significantLines.includes(t));\n }\n return scale.domain();\n}\n\nexport function Grid({ scaleX, scaleY, width, height, axisX, axisY, frameType, updatingKey = '' }: GridProps) {\n const { significantLines: significantLinesX = [] } = axisX as AxisSettingsContinuous;\n const { significantLines: significantLinesY = [] } = axisY as AxisSettingsContinuous;\n\n const [ticksX, setTicksX] = useState<(string | number)[]>(() => getTicks(scaleX, significantLinesX));\n const [ticksY, setTicksY] = useState<(string | number)[]>(() => getTicks(scaleY, significantLinesY));\n\n useEffect(() => {\n const ticksX = getTicks(scaleX, significantLinesX);\n const ticksY = getTicks(scaleY, significantLinesY);\n setTicksX(ticksX);\n setTicksY(ticksY);\n }, [scaleX, scaleY, updatingKey]);\n\n return (\n <g stroke={GRID_GRAY}>\n {axisX.showGrid &&\n ticksX.map((tick) => {\n const x = scaleX(tick as PointValue);\n return (\n <line key={`x_${x}_${height}`} x1={x} x2={x} y1={0} y2={height} />\n );\n })}\n {axisY.showGrid &&\n ticksY.map(tick => {\n const y = scaleY(tick as PointValue);\n return (\n <line key={`y_${y}_${width}`} x1={0} x2={width} y1={y} y2={y} />\n );\n })}\n {isNumericScale(scaleX) && isContinuousAxis(axisX) && (\n <g strokeDasharray={getLineShape(axisX.significantLinesStyle)} stroke={BLACK}>\n {significantLinesX.map(v => {\n const x = scaleX(v);\n return (\n <line key={`significant_${x}_${height}`} x1={x} x2={x} y1={0} y2={height} />\n );\n })}\n </g>\n )}\n {isNumericScale(scaleY) && isContinuousAxis(axisY) && (\n <g strokeDasharray={getLineShape(axisY.significantLinesStyle)} stroke={BLACK}>\n {significantLinesY.map(v => {\n const y = scaleY(v);\n return (\n <line key={`significant_${y}_${width}`} x1={0} x2={width} y1={y} y2={y} />\n );\n })}\n </g>\n )}\n {frameType !== 'empty' && (\n <g strokeWidth={GRID_FRAME_WIDTH}>\n {(axisX.showGrid || frameType !== 'left') && <line stroke={frameType === 'left' ? GRID_GRAY : BLACK} x1=\"0\" x2={width} y1={height} y2={height} />}\n {(axisX.showGrid || frameType !== 'bottom') && <line stroke={frameType === 'bottom' ? GRID_GRAY : BLACK} x1=\"0\" x2=\"0\" y1=\"0\" y2={height} />}\n {(axisX.showGrid || frameType === 'full') && <line stroke={frameType === 'full' ? BLACK : GRID_GRAY} x1={width} x2={width} y1=\"0\" y2={height} />}\n {(axisY.showGrid || frameType === 'full') && <line stroke={frameType === 'full' ? BLACK : GRID_GRAY} x1=\"0\" x2={width} y1=\"0\" y2=\"0\" />}\n </g>\n )}\n </g>\n );\n}\n"],"names":["GRID_FRAME_WIDTH","getTicks","scale","significantLines","isNumericScale","t","Grid","scaleX","scaleY","width","height","axisX","axisY","frameType","updatingKey","significantLinesX","significantLinesY","ticksX","setTicksX","useState","ticksY","setTicksY","useEffect","jsxs","GRID_GRAY","tick","x","jsx","y","isContinuousAxis","getLineShape","BLACK","v"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +1 @@
1
- {"version":3,"file":"dots.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/dots.ts"],"sourcesContent":["import {format} from 'd3-format';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue } from '../types';\nimport type { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport {formatColumnValue} from './utils/formatColumnValue';\nimport {sortDotsByGrouping} from './utils/sortDotsByGrouping';\n\nexport type Dot = {\n idx: number;\n x: number;\n y: number;\n label: DataValue | null;\n dimmed: boolean;\n};\n\nexport type GroupedDots = Record<\n string,\n {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n dots: Dot[];\n }\n>;\n\nexport function getDots(\n data: DataFrame,\n facetKeysCombinations: string[][],\n x: ColumnName,\n y: ColumnName,\n label: ColumnName | null,\n highlight: ColumnName | null,\n grouping: ScatterplotSettingsImpl['grouping']\n): GroupedDots {\n const result: GroupedDots = {};\n\n const labelFormatter = label?.format ? format(label.format) : undefined;\n\n for (const facetKeys of facetKeysCombinations) {\n const dots: Dot[] = [];\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n const templateGroupPath = facetKeys.concat(['']);\n const rows = data.getRowsByGrouping(templateGroupPath);\n\n for (let i = 0; i < rows.length; i++) {\n const rowIdx = rows[i];\n const valueX = data.getColumnValue(x.value, rowIdx) as number;\n const valueY = data.getColumnValue(y.value, rowIdx) as number;\n\n if (valueX === null && valueY === null) continue;\n\n minX = Math.min(minX, valueX);\n minY = Math.min(minY, valueY);\n maxX = Math.max(maxX, valueX);\n maxY = Math.max(maxY, valueY);\n\n dots.push({\n x: valueX,\n y: valueY,\n label: formatColumnValue(data, rowIdx, label, labelFormatter),\n dimmed: highlight ? !data.getColumnValue(highlight.value, rowIdx) : false,\n idx: rowIdx\n });\n }\n\n sortDotsByGrouping(data, dots, grouping, highlight);\n\n result[facetKeys.join('_')] = {\n minX,\n maxX,\n minY,\n maxY,\n dots,\n };\n }\n\n return result;\n}\n"],"names":["getDots","data","facetKeysCombinations","x","y","label","highlight","grouping","result","labelFormatter","format","facetKeys","dots","minX","minY","maxX","maxY","templateGroupPath","rows","i","rowIdx","valueX","valueY","formatColumnValue","sortDotsByGrouping"],"mappings":";;;AA0BO,SAASA,EACZC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACW;AACX,QAAMC,IAAsB,CAAA,GAEtBC,IAAiBJ,KAAA,QAAAA,EAAO,SAASK,EAAOL,EAAM,MAAM,IAAI;AAE9D,aAAWM,KAAaT,GAAuB;AAC3C,UAAMU,IAAc,CAAA;AACpB,QAAIC,IAAO,OACPC,IAAO,OACPC,IAAO,QACPC,IAAO;AAEX,UAAMC,IAAoBN,EAAU,OAAO,CAAC,EAAE,CAAC,GACzCO,IAAOjB,EAAK,kBAAkBgB,CAAiB;AAErD,aAASE,IAAI,GAAGA,IAAID,EAAK,QAAQC,KAAK;AAClC,YAAMC,IAASF,EAAKC,CAAC,GACfE,IAASpB,EAAK,eAAeE,EAAE,OAAOiB,CAAM,GAC5CE,IAASrB,EAAK,eAAeG,EAAE,OAAOgB,CAAM;AAE9CC,MAAAA,MAAW,QAAQC,MAAW,SAElCT,IAAO,KAAK,IAAIA,GAAMQ,CAAM,GAC5BP,IAAO,KAAK,IAAIA,GAAMQ,CAAM,GAC5BP,IAAO,KAAK,IAAIA,GAAMM,CAAM,GAC5BL,IAAO,KAAK,IAAIA,GAAMM,CAAM,GAE5BV,EAAK,KAAK;AAAA,QACN,GAAGS;AAAAA,QACH,GAAGC;AAAAA,QACH,OAAOC,EAAkBtB,GAAMmB,GAAQf,GAAOI,CAAc;AAAA,QAC5D,QAAQH,IAAY,CAACL,EAAK,eAAeK,EAAU,OAAOc,CAAM,IAAI;AAAA,QACpE,KAAKA;AAAAA,MAAA,CACR;AAAA,IACL;AAEAI,IAAAA,EAAmBvB,GAAMW,GAAML,GAAUD,CAAS,GAElDE,EAAOG,EAAU,KAAK,GAAG,CAAC,IAAI;AAAA,MAC1B,MAAAE;AAAAA,MACA,MAAAE;AAAAA,MACA,MAAAD;AAAAA,MACA,MAAAE;AAAAA,MACA,MAAAJ;AAAAA,IAAA;AAAA,EAER;AAEA,SAAOJ;AACX;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"dots.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/dots.ts"],"sourcesContent":["import {format} from 'd3-format';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue } from '../types';\nimport type { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport {formatColumnValue} from './utils/formatColumnValue';\nimport {sortDotsByGrouping} from './utils/sortDotsByGrouping';\n\nexport type Dot = {\n idx: number;\n x: string | number;\n y: string | number;\n label: DataValue | null;\n dimmed: boolean;\n};\n\nexport type GroupedDots = Record<\n string,\n {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n dots: Dot[];\n }\n>;\n\nexport function getDots(\n data: DataFrame,\n facetKeysCombinations: string[][],\n x: ColumnName,\n y: ColumnName,\n label: ColumnName | null,\n highlight: ColumnName | null,\n grouping: ScatterplotSettingsImpl['grouping']\n): GroupedDots {\n const result: GroupedDots = {};\n\n const labelFormatter = label?.format ? format(label.format) : undefined;\n\n for (const facetKeys of facetKeysCombinations) {\n const dots: Dot[] = [];\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n const templateGroupPath = facetKeys.concat(['']);\n const rows = data.getRowsByGrouping(templateGroupPath);\n\n for (let i = 0; i < rows.length; i++) {\n const rowIdx = rows[i];\n const valueX = data.getColumnValue(x.value, rowIdx) as number;\n const valueY = data.getColumnValue(y.value, rowIdx) as number;\n\n if (valueX === null && valueY === null) continue;\n\n minX = Math.min(minX, valueX);\n minY = Math.min(minY, valueY);\n maxX = Math.max(maxX, valueX);\n maxY = Math.max(maxY, valueY);\n\n dots.push({\n x: valueX,\n y: valueY,\n label: formatColumnValue(data, rowIdx, label, labelFormatter),\n dimmed: highlight ? !data.getColumnValue(highlight.value, rowIdx) : false,\n idx: rowIdx\n });\n }\n\n sortDotsByGrouping(data, dots, grouping, highlight);\n\n result[facetKeys.join('_')] = {\n minX,\n maxX,\n minY,\n maxY,\n dots,\n };\n }\n\n return result;\n}\n"],"names":["getDots","data","facetKeysCombinations","x","y","label","highlight","grouping","result","labelFormatter","format","facetKeys","dots","minX","minY","maxX","maxY","templateGroupPath","rows","i","rowIdx","valueX","valueY","formatColumnValue","sortDotsByGrouping"],"mappings":";;;AA0BO,SAASA,EACZC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACW;AACX,QAAMC,IAAsB,CAAA,GAEtBC,IAAiBJ,KAAA,QAAAA,EAAO,SAASK,EAAOL,EAAM,MAAM,IAAI;AAE9D,aAAWM,KAAaT,GAAuB;AAC3C,UAAMU,IAAc,CAAA;AACpB,QAAIC,IAAO,OACPC,IAAO,OACPC,IAAO,QACPC,IAAO;AAEX,UAAMC,IAAoBN,EAAU,OAAO,CAAC,EAAE,CAAC,GACzCO,IAAOjB,EAAK,kBAAkBgB,CAAiB;AAErD,aAASE,IAAI,GAAGA,IAAID,EAAK,QAAQC,KAAK;AAClC,YAAMC,IAASF,EAAKC,CAAC,GACfE,IAASpB,EAAK,eAAeE,EAAE,OAAOiB,CAAM,GAC5CE,IAASrB,EAAK,eAAeG,EAAE,OAAOgB,CAAM;AAE9CC,MAAAA,MAAW,QAAQC,MAAW,SAElCT,IAAO,KAAK,IAAIA,GAAMQ,CAAM,GAC5BP,IAAO,KAAK,IAAIA,GAAMQ,CAAM,GAC5BP,IAAO,KAAK,IAAIA,GAAMM,CAAM,GAC5BL,IAAO,KAAK,IAAIA,GAAMM,CAAM,GAE5BV,EAAK,KAAK;AAAA,QACN,GAAGS;AAAAA,QACH,GAAGC;AAAAA,QACH,OAAOC,EAAkBtB,GAAMmB,GAAQf,GAAOI,CAAc;AAAA,QAC5D,QAAQH,IAAY,CAACL,EAAK,eAAeK,EAAU,OAAOc,CAAM,IAAI;AAAA,QACpE,KAAKA;AAAAA,MAAA,CACR;AAAA,IACL;AAEAI,IAAAA,EAAmBvB,GAAMW,GAAML,GAAUD,CAAS,GAElDE,EAAOG,EAAU,KAAK,GAAG,CAAC,IAAI;AAAA,MAC1B,MAAAE;AAAAA,MACA,MAAAE;AAAAA,MACA,MAAAD;AAAAA,MACA,MAAAE;AAAAA,MACA,MAAAJ;AAAAA,IAAA;AAAA,EAER;AAEA,SAAOJ;AACX;","x_google_ignoreList":[0]}
@@ -1,30 +1,41 @@
1
- import { exhaustive as m } from "../utils/index.js";
2
- function v(i, p, l, f, y, c) {
3
- return l.reduce((n, s) => {
4
- const u = f[s].dots;
5
- return n[s] = p.map((e) => {
6
- if (e.type === "curve")
1
+ import { exhaustive as g } from "../utils/index.js";
2
+ function v(n, a, i) {
3
+ if (a.scale !== "discrete")
4
+ n.sort((t, e) => t.x - e.x);
5
+ else {
6
+ const t = i.keys.reduce((e, o, r) => (e[o] = i.keys.length - r, e), {});
7
+ n.sort((e, o) => {
8
+ const r = t[e.x], u = t[o.x];
9
+ return r !== u ? r - u : 0;
10
+ }), n.sort();
11
+ }
12
+ }
13
+ function k(n, a, i, t, e, o, r, u) {
14
+ return i.reduce((l, f) => {
15
+ const y = t[f].dots;
16
+ return l[f] = a.map((s) => {
17
+ if (s.type === "curve")
7
18
  return {
8
19
  type: "curve",
9
- info: e,
10
- geoms: y.map((t) => {
11
- const a = u.filter(
12
- (r) => c.every((o, d) => String(i.getColumnValue(o.value, r.idx)) === t[d])
20
+ info: s,
21
+ geoms: e.map((c) => {
22
+ const d = y.filter(
23
+ (p) => o.every((m, x) => String(n.getColumnValue(m.value, p.idx)) === c[x])
13
24
  );
14
- return a.sort((r, o) => r.x - o.x), { dots: a };
15
- }).filter((t) => t.dots.length > 0)
25
+ return v(d, r, u), { dots: d };
26
+ }).filter((c) => c.dots.length > 0)
16
27
  };
17
- if (e.type === "dots")
28
+ if (s.type === "dots")
18
29
  return {
19
30
  type: "dots",
20
- info: e,
21
- geoms: u
31
+ info: s,
32
+ geoms: y
22
33
  };
23
- m(e, "Unknown scatterplot layer type");
24
- }), n;
34
+ g(s, "Unknown scatterplot layer type");
35
+ }), l;
25
36
  }, {});
26
37
  }
27
38
  export {
28
- v as getLayersData
39
+ k as getLayersData
29
40
  };
30
41
  //# sourceMappingURL=getLayersData.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getLayersData.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/getLayersData.ts"],"sourcesContent":["import type { DataFrame } from '../DataFrame';\nimport type { ColumnName, ScatterplotLayer } from '../types';\nimport { exhaustive } from '../utils';\nimport type { Dot, GroupedDots } from './dots';\nimport type { CurveLayer, DotsLayer } from './ScatterplotSettingsImpl';\n\nexport type DotsLayerData = {\n type: 'dots',\n info: DotsLayer,\n geoms: Dot[]\n}\n\nexport type CurveData = {\n dots: Dot[],\n}\nexport type CurveLayerData = {\n type: 'curve',\n info: CurveLayer,\n geoms: CurveData[]\n}\n\nexport type ScatterplotLayerData = DotsLayerData | CurveLayerData;\n\nexport function getLayersData(\n dataFrame: DataFrame,\n layers: ScatterplotLayer[],\n facetKeys: string[],\n dotsByFacets: GroupedDots,\n categoryGroupingCombinations: string[][],\n grouping: ColumnName[]\n): Record<string, ScatterplotLayerData[]> {\n return facetKeys.reduce((res:Record<string, ScatterplotLayerData[]>, key) => {\n const facetDots = dotsByFacets[key].dots;\n res[key] = layers.map(layer => {\n if (layer.type === 'curve') {\n return {\n type: 'curve',\n info: layer,\n geoms: categoryGroupingCombinations.map(values => {\n const dots = facetDots.filter(dot =>\n grouping.every((column, idx) => String(dataFrame.getColumnValue(column.value, dot.idx)) === values[idx])\n );\n dots.sort((d1, d2) => d1.x - d2.x);\n return {dots};\n }).filter(item => item.dots.length > 0)\n } as CurveLayerData;\n }\n if (layer.type === 'dots') {\n return {\n type: 'dots',\n info: layer,\n geoms: facetDots,\n } as DotsLayerData;\n }\n exhaustive(layer, 'Unknown scatterplot layer type');\n });\n return res;\n }, {});\n}\n"],"names":["getLayersData","dataFrame","layers","facetKeys","dotsByFacets","categoryGroupingCombinations","grouping","res","key","facetDots","layer","values","dots","column","idx","dot","d1","d2","item","exhaustive"],"mappings":";AAuBO,SAASA,EACZC,GACAC,GACAC,GACAC,GACAC,GACAC,GACsC;AACtC,SAAOH,EAAU,OAAO,CAACI,GAA4CC,MAAQ;AACzE,UAAMC,IAAYL,EAAaI,CAAG,EAAE;AACpC,WAAAD,EAAIC,CAAG,IAAIN,EAAO,IAAI,CAAAQ,MAAS;AAC3B,UAAIA,EAAM,SAAS;AACf,eAAO;AAAA,UACH,MAAM;AAAA,UACN,MAAMA;AAAAA,UACN,OAAOL,EAA6B,IAAI,CAAAM,MAAU;AAC9C,kBAAMC,IAAOH,EAAU;AAAA,cAAO,OAC1BH,EAAS,MAAM,CAACO,GAAQC,MAAQ,OAAOb,EAAU,eAAeY,EAAO,OAAOE,EAAI,GAAG,CAAC,MAAMJ,EAAOG,CAAG,CAAC;AAAA,YAAA;AAE3G,mBAAAF,EAAK,KAAK,CAACI,GAAIC,MAAOD,EAAG,IAAIC,EAAG,CAAC,GAC1B,EAAC,MAAAL,EAAAA;AAAAA,UACZ,CAAC,EAAE,OAAO,OAAQM,EAAK,KAAK,SAAS,CAAC;AAAA,QAAA;AAG9C,UAAIR,EAAM,SAAS;AACf,eAAO;AAAA,UACH,MAAM;AAAA,UACN,MAAMA;AAAAA,UACN,OAAOD;AAAAA,QAAA;AAGfU,MAAAA,EAAWT,GAAO,gCAAgC;AAAA,IACtD,CAAC,GACMH;AAAAA,EACX,GAAG,CAAA,CAAE;AACT;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"getLayersData.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/getLayersData.ts"],"sourcesContent":["import type { DataFrame } from '../DataFrame';\nimport type { ColumnName, ScatterplotLayer } from '../types';\nimport { exhaustive } from '../utils';\nimport type { DiscreteAxisData } from './components/types';\nimport type { Dot, GroupedDots } from './dots';\nimport type { CurveLayer, DotsLayer, ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\n\nexport type DotsLayerData = {\n type: 'dots',\n info: DotsLayer,\n geoms: Dot[]\n}\n\nexport type CurveData = {\n dots: Dot[],\n}\nexport type CurveLayerData = {\n type: 'curve',\n info: CurveLayer,\n geoms: CurveData[]\n}\n\nexport type ScatterplotLayerData = DotsLayerData | CurveLayerData;\n\nfunction sortDotsForCurve(dots:Dot[], axisX: ScatterplotSettingsImpl['chartSettings']['xAxis'], discreteAxisDataX: DiscreteAxisData) {\n if (axisX.scale !== 'discrete') {\n dots.sort((d1, d2) => (d1.x as number) - (d2.x as number));\n } else {\n const weightsByColumnByOrder = discreteAxisDataX.keys.reduce((res, key, idx) => {\n res[key] = discreteAxisDataX.keys.length - idx;\n return res;\n }, {} as Record<string, number>);\n\n dots.sort((d1, d2) => {\n const aWeight = weightsByColumnByOrder[d1.x];\n const bWeight = weightsByColumnByOrder[d2.x];\n if (aWeight !== bWeight) {\n return aWeight - bWeight;\n }\n return 0;\n });\n dots.sort();\n }\n}\nexport function getLayersData(\n dataFrame: DataFrame,\n layers: ScatterplotLayer[],\n facetKeys: string[],\n dotsByFacets: GroupedDots,\n categoryGroupingCombinations: string[][],\n grouping: ColumnName[],\n axisX: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n discreteAxisDataX: DiscreteAxisData,\n): Record<string, ScatterplotLayerData[]> {\n return facetKeys.reduce((res:Record<string, ScatterplotLayerData[]>, key) => {\n const facetDots = dotsByFacets[key].dots;\n res[key] = layers.map(layer => {\n if (layer.type === 'curve') {\n return {\n type: 'curve',\n info: layer,\n geoms: categoryGroupingCombinations.map(values => {\n const dots = facetDots.filter(dot =>\n grouping.every((column, idx) => String(dataFrame.getColumnValue(column.value, dot.idx)) === values[idx])\n );\n sortDotsForCurve(dots, axisX, discreteAxisDataX);\n return {dots};\n }).filter(item => item.dots.length > 0)\n } as CurveLayerData;\n }\n if (layer.type === 'dots') {\n return {\n type: 'dots',\n info: layer,\n geoms: facetDots,\n } as DotsLayerData;\n }\n exhaustive(layer, 'Unknown scatterplot layer type');\n });\n return res;\n }, {});\n}\n"],"names":["sortDotsForCurve","dots","axisX","discreteAxisDataX","d1","d2","weightsByColumnByOrder","res","key","idx","aWeight","bWeight","getLayersData","dataFrame","layers","facetKeys","dotsByFacets","categoryGroupingCombinations","grouping","facetDots","layer","values","column","dot","item","exhaustive"],"mappings":";AAwBA,SAASA,EAAiBC,GAAYC,GAA0DC,GAAqC;AACjI,MAAID,EAAM,UAAU;AAChBD,IAAAA,EAAK,KAAK,CAACG,GAAIC,MAAQD,EAAG,IAAgBC,EAAG,CAAY;AAAA,OACtD;AACH,UAAMC,IAAyBH,EAAkB,KAAK,OAAO,CAACI,GAAKC,GAAKC,OACpEF,EAAIC,CAAG,IAAIL,EAAkB,KAAK,SAASM,GACpCF,IACR,EAA4B;AAE/BN,IAAAA,EAAK,KAAK,CAACG,GAAIC,MAAO;AAClB,YAAMK,IAAUJ,EAAuBF,EAAG,CAAC,GACrCO,IAAUL,EAAuBD,EAAG,CAAC;AAC3C,aAAIK,MAAYC,IACLD,IAAUC,IAEd;AAAA,IACX,CAAC,GACDV,EAAK,KAAA;AAAA,EACT;AACJ;AACO,SAASW,EACZC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAhB,GACAC,GACsC;AACtC,SAAOY,EAAU,OAAO,CAACR,GAA4CC,MAAQ;AACzE,UAAMW,IAAYH,EAAaR,CAAG,EAAE;AACpC,WAAAD,EAAIC,CAAG,IAAIM,EAAO,IAAI,CAAAM,MAAS;AAC3B,UAAIA,EAAM,SAAS;AACf,eAAO;AAAA,UACH,MAAM;AAAA,UACN,MAAMA;AAAAA,UACN,OAAOH,EAA6B,IAAI,CAAAI,MAAU;AAC9C,kBAAMpB,IAAOkB,EAAU;AAAA,cAAO,OAC1BD,EAAS,MAAM,CAACI,GAAQb,MAAQ,OAAOI,EAAU,eAAeS,EAAO,OAAOC,EAAI,GAAG,CAAC,MAAMF,EAAOZ,CAAG,CAAC;AAAA,YAAA;AAE3G,mBAAAT,EAAiBC,GAAMC,GAAOC,CAAiB,GACxC,EAAC,MAAAF,EAAAA;AAAAA,UACZ,CAAC,EAAE,OAAO,OAAQuB,EAAK,KAAK,SAAS,CAAC;AAAA,QAAA;AAG9C,UAAIJ,EAAM,SAAS;AACf,eAAO;AAAA,UACH,MAAM;AAAA,UACN,MAAMA;AAAAA,UACN,OAAOD;AAAAA,QAAA;AAGfM,MAAAA,EAAWL,GAAO,gCAAgC;AAAA,IACtD,CAAC,GACMb;AAAAA,EACX,GAAG,CAAA,CAAE;AACT;","x_google_ignoreList":[0]}
@@ -1,21 +1,31 @@
1
1
  import { renderToString as B } from "../node_modules/react-dom/server.browser.js";
2
- import { AbstractChart as R } from "../AbstractChart.js";
3
- import { arraysAreDifferent as D } from "../utils/arraysAreDifferent.js";
4
- import { getKeysCombinations as b } from "../utils/getKeysCombination.js";
5
- import A from "./ChartRenderer.js";
6
- import { getDots as N } from "./dots.js";
7
- import { getLayersData as j } from "./getLayersData.js";
8
- import { getRegressionData as K } from "./linearRegression.js";
9
- import { ScatterplotSettingsImpl as C } from "./ScatterplotSettingsImpl.js";
10
- import { createLegendInfo as L, addPalettesToAesMapping as O } from "./utils/createLegendInfo.js";
11
- var T = Object.defineProperty, k = (u, t, e) => t in u ? T(u, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : u[t] = e, y = (u, t, e) => k(u, typeof t != "symbol" ? t + "" : t, e);
12
- function x(u) {
2
+ import { AbstractChart as L } from "../AbstractChart.js";
3
+ import { arraysAreDifferent as y } from "../utils/arraysAreDifferent.js";
4
+ import { getKeysCombinations as C } from "../utils/getKeysCombination.js";
5
+ import N from "./ChartRenderer.js";
6
+ import { getDots as j } from "./dots.js";
7
+ import { getLayersData as K } from "./getLayersData.js";
8
+ import { getRegressionData as $ } from "./linearRegression.js";
9
+ import { ScatterplotSettingsImpl as S } from "./ScatterplotSettingsImpl.js";
10
+ import { createLegendInfo as O, addPalettesToAesMapping as T } from "./utils/createLegendInfo.js";
11
+ var F = Object.defineProperty, I = (u, t, e) => t in u ? F(u, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : u[t] = e, f = (u, t, e) => I(u, typeof t != "symbol" ? t + "" : t, e);
12
+ function H(u) {
13
13
  return typeof u == "object" && "type" in u && u.type === "grouping";
14
14
  }
15
- class q extends R {
15
+ function x(u, t, e) {
16
+ if (t.scale === "discrete") {
17
+ const a = t.keys ? t.keys : u.getColumnCategories(e.value);
18
+ return { keys: a, labels: a.reduce((s, l) => {
19
+ const o = (t.labels ?? {})[l] ?? (e.valueLabels ? u.getColumnValue(e.valueLabels, u.getColumnCategoryRowIndex(e.value, l)) : l);
20
+ return s[l] = String(o), s;
21
+ }, {}) };
22
+ }
23
+ return { keys: [], labels: {} };
24
+ }
25
+ class Q extends L {
16
26
  constructor(t, e, a) {
17
- super(t, e), y(this, "settings"), y(this, "chartRenderer"), y(this, "onTooltipHintSwitch", () => {
18
- }), y(this, "calculatedData", null), this.chartRenderer = new A(), this.settings = new C(e), a && (this.onTooltipHintSwitch = a.onTooltipHintSwitch);
27
+ super(t, e), f(this, "settings"), f(this, "chartRenderer"), f(this, "onTooltipHintSwitch", () => {
28
+ }), f(this, "calculatedData", null), this.chartRenderer = new N(), this.settings = new S(e), a && (this.onTooltipHintSwitch = a.onTooltipHintSwitch);
19
29
  }
20
30
  mount(t) {
21
31
  try {
@@ -29,8 +39,8 @@ class q extends R {
29
39
  }
30
40
  updateSettingsAndData(t, e) {
31
41
  try {
32
- const a = this.settings, n = this.data;
33
- this.settings = new C(e), this.data = t, this._needUpdateCalculatedDataBySettings(a, this.settings) || this._needUpdateCalculatedDataByData(n, this.data) ? this._updateData() : this._updateAesInData(), this._updateChart(), this.hasError = !1;
42
+ const a = this.settings, s = this.data;
43
+ this.settings = new S(e), this.data = t, this._needUpdateCalculatedDataBySettings(a, this.settings) || this._needUpdateCalculatedDataByData(s, this.data) ? this._updateData() : this._updateAesInData(), this._updateChart(), this.hasError = !1;
34
44
  } catch (a) {
35
45
  this.hasError = !0, console.error(a), a instanceof Error && (this.chartRenderer.renderError(a.message), console.error(a));
36
46
  }
@@ -42,71 +52,73 @@ class q extends R {
42
52
  return this._updateChart(), B(this.chartRenderer.component);
43
53
  }
44
54
  _needUpdateCalculatedDataBySettings(t, e) {
45
- var a, n, i, o;
46
- return t.facetBy.some((r, s) => {
47
- var c;
48
- return r.value !== ((c = e.facetBy[s]) == null ? void 0 : c.value);
49
- }) || t.grouping.length !== e.grouping.length || D(
55
+ var a, s, l, o;
56
+ return t.facetBy.some((r, i) => {
57
+ var h;
58
+ return r.value !== ((h = e.facetBy[i]) == null ? void 0 : h.value);
59
+ }) || t.grouping.length !== e.grouping.length || y(
50
60
  t.grouping.map((r) => r.columnName.value),
51
61
  e.grouping.map((r) => r.columnName.value)
52
- ) || t.grouping.some((r, s) => {
53
- var c;
54
- return D(r.order, (c = e.grouping) == null ? void 0 : c[s].order);
55
- }) || (((a = t.label) == null ? void 0 : a.value) || ((n = e.label) == null ? void 0 : n.value)) && ((i = t.label) == null ? void 0 : i.value) !== ((o = e.label) == null ? void 0 : o.value) || t.layers.length !== e.layers.length || t.layers.some((r, s) => r.type !== e.layers[s].type) || !!t.trend != !!e.trend;
62
+ ) || t.grouping.some((r, i) => {
63
+ var h;
64
+ return y(r.order, (h = e.grouping) == null ? void 0 : h[i].order);
65
+ }) || y(t.chartSettings.xAxis.keys, e.chartSettings.xAxis.keys) || y(t.chartSettings.yAxis.keys, e.chartSettings.yAxis.keys) || (((a = t.label) == null ? void 0 : a.value) || ((s = e.label) == null ? void 0 : s.value)) && ((l = t.label) == null ? void 0 : l.value) !== ((o = e.label) == null ? void 0 : o.value) || t.layers.length !== e.layers.length || t.layers.some((r, i) => r.type !== e.layers[i].type) || !!t.trend != !!e.trend;
56
66
  }
57
67
  _needUpdateCalculatedDataByData(t, e) {
58
- const a = Object.keys(t.data), n = Object.keys(e.data);
59
- return t.id !== e.id || a.length !== n.length || a.some((i) => {
68
+ const a = Object.keys(t.data), s = Object.keys(e.data);
69
+ return t.id !== e.id || a.length !== s.length || a.some((l) => {
60
70
  var o;
61
- return t.data[i].length !== ((o = e.data[i]) == null ? void 0 : o.length);
71
+ return t.data[l].length !== ((o = e.data[l]) == null ? void 0 : o.length);
62
72
  });
63
73
  }
64
74
  _updateData() {
65
- const { x: t, y: e, facetBy: a, grouping: n, trend: i, layers: o, label: r, highlight: s } = this.settings, c = a.map((l) => this.data.getColumnCategories(l.value)).filter((l) => l.length > 0), d = n.map(({ columnName: l }) => this.data.getColumnCategories(l.value)).filter((l) => l.length > 0), g = c.length ? b(c) : [["null"]], p = d.length ? b(d) : [["null"]], h = a.map((l) => l.value) ?? null;
66
- this.data.setGrouping([...h]);
67
- const S = {
68
- x: this.data.getColumn(t.value).every((l) => l === null || !(Number(l) < 0)),
69
- y: this.data.getColumn(e.value).every((l) => l === null || !(Number(l) < 0))
70
- }, v = n.map((l) => l.columnName), m = N(this.data, g, t, e, r, s, n), f = Object.keys(m), E = K(this.data, m, f, p, v, i), _ = L(this.data, n, o), w = j(this.data, o, f, m, p, v);
75
+ const { x: t, y: e, facetBy: a, grouping: s, trend: l, layers: o, label: r, highlight: i, chartSettings: h } = this.settings, d = a.map((n) => this.data.getColumnCategories(n.value)).filter((n) => n.length > 0), g = s.map(({ columnName: n }) => this.data.getColumnCategories(n.value)).filter((n) => n.length > 0), p = d.length ? C(d) : [["null"]], c = g.length ? C(g) : [["null"]], A = a.map((n) => n.value) ?? null;
76
+ this.data.setGrouping([...A]);
77
+ const E = {
78
+ x: this.data.getColumn(t.value).every((n) => n === null || !(Number(n) < 0)),
79
+ y: this.data.getColumn(e.value).every((n) => n === null || !(Number(n) < 0))
80
+ }, D = s.map((n) => n.columnName), m = j(this.data, p, t, e, r, i, s), v = Object.keys(m), k = $(this.data, m, v, c, D, l), b = x(this.data, h.xAxis, t), _ = x(this.data, h.yAxis, e), w = O(this.data, s, o), R = K(this.data, o, v, m, c, D, h.xAxis, b);
71
81
  this.calculatedData = {
72
- onlyPositive: S,
82
+ onlyPositive: E,
73
83
  dotsByFacets: m,
74
- facetKeys: f,
75
- facetKeysCombinations: g,
76
- trendsData: E,
77
- legendLabels: _,
78
- layersData: w
84
+ facetKeys: v,
85
+ facetKeysCombinations: p,
86
+ trendsData: k,
87
+ legendLabels: w,
88
+ layersData: R,
89
+ discreteAxisDataX: b,
90
+ discreteAxisDataY: _
79
91
  };
80
92
  }
81
93
  _updateAesInData() {
82
94
  const t = this.calculatedData;
83
95
  if (!t)
84
96
  return;
85
- const { grouping: e, trend: a, layers: n } = this.settings, { facetKeys: i, trendsData: o } = t;
86
- i.forEach((r) => {
87
- for (let s = 0; s < n.length; s++)
88
- t.layersData[r][s].info = n[s];
89
- }), e.forEach(({ columnName: r, inheritedAes: s }) => {
90
- const c = /* @__PURE__ */ new Set(), d = {};
91
- n.forEach((g) => {
92
- g.aes && Object.entries(g.aes).forEach(([p, h]) => {
93
- x(h) && h.value === r.value && (c.add(p), h.palette && (d[p] = h.palette));
97
+ const { grouping: e, trend: a, layers: s } = this.settings, { facetKeys: l, trendsData: o } = t;
98
+ l.forEach((r) => {
99
+ for (let i = 0; i < s.length; i++)
100
+ t.layersData[r][i].info = s[i];
101
+ }), e.forEach(({ columnName: r, inheritedAes: i }) => {
102
+ const h = /* @__PURE__ */ new Set(), d = {};
103
+ s.forEach((g) => {
104
+ g.aes && Object.entries(g.aes).forEach(([p, c]) => {
105
+ H(c) && c.value === r.value && (h.add(p), c.palette && (d[p] = c.palette));
94
106
  });
95
- }), t.legendLabels[r.value].usedAes = [...c], t.legendLabels[r.value].aesMap = O(
107
+ }), t.legendLabels[r.value].usedAes = [...h], t.legendLabels[r.value].aesMap = T(
96
108
  r,
97
109
  d,
98
- s
110
+ i
99
111
  );
100
112
  }), o && a && Object.keys(o).forEach((r) => {
101
- o[r].forEach((s) => {
102
- s.color = a.color, s.bounded = a.bounded;
113
+ o[r].forEach((i) => {
114
+ i.color = a.color, i.bounded = a.bounded;
103
115
  });
104
116
  });
105
117
  }
106
118
  _updateChart() {
107
119
  if (!this.calculatedData)
108
120
  return;
109
- const { id: t, chartSettings: e, facetSettings: a, grouping: n, keyColumn: i, layers: o, trend: r } = this.settings;
121
+ const { id: t, chartSettings: e, facetSettings: a, grouping: s, keyColumn: l, layers: o, trend: r } = this.settings;
110
122
  this.chartRenderer.render(
111
123
  this.data,
112
124
  t,
@@ -117,18 +129,20 @@ class q extends R {
117
129
  //for titles, if facet by more than 1 column
118
130
  this.calculatedData.dotsByFacets,
119
131
  this.calculatedData.trendsData,
120
- i,
132
+ l,
121
133
  this.calculatedData.onlyPositive,
122
134
  this.calculatedData.legendLabels,
123
135
  this.calculatedData.layersData,
124
- n.map((s) => s.columnName),
136
+ s.map((i) => i.columnName),
125
137
  o,
126
138
  r,
139
+ this.calculatedData.discreteAxisDataX,
140
+ this.calculatedData.discreteAxisDataY,
127
141
  this.onTooltipHintSwitch
128
142
  );
129
143
  }
130
144
  }
131
145
  export {
132
- q as ChartScatterplot
146
+ Q as ChartScatterplot
133
147
  };
134
148
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type {\n AesItem,\n ContinuousAesFromColumn,\n InheritAesScatterplot,\n ScatterplotEventHandlers,\n ScatterplotLegendInfo,\n ScatterplotSettings,\n} from '../types';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\nimport { getKeysCombinations } from '../utils/getKeysCombination';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedDots } from './dots';\nimport { getDots } from './dots';\nimport type { ScatterplotLayerData } from './getLayersData';\nimport { getLayersData } from './getLayersData';\nimport type { TrendsData } from './linearRegression';\nimport { getRegressionData } from './linearRegression';\nimport { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport { addPalettesToAesMapping, createLegendInfo } from './utils/createLegendInfo';\n\nfunction isInheritMapping<T extends (string | number)>(value:T | InheritAesScatterplot | ContinuousAesFromColumn<T>):value is InheritAesScatterplot {\n return typeof value === 'object' && 'type' in value && value.type === 'grouping';\n}\n\nexport class ChartScatterplot extends AbstractChart {\n settings: ScatterplotSettingsImpl;\n chartRenderer: ChartRenderer;\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n onlyPositive: {x: boolean; y: boolean};\n dotsByFacets: GroupedDots;\n facetKeys: string[];\n facetKeysCombinations: string[][];\n trendsData: TrendsData | null;\n legendLabels: ScatterplotLegendInfo;\n layersData: Record<string, ScatterplotLayerData[]>;\n } | null = null;\n\n constructor(data: DataFrame, settings: ScatterplotSettings, eventHandlers?:ScatterplotEventHandlers) {\n super(data, settings);\n\n this.chartRenderer = new ChartRenderer();\n this.settings = new ScatterplotSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch;\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 console.error(err);\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: ScatterplotSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new ScatterplotSettingsImpl(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 console.error(err);\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 scatterplot');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: ScatterplotSettingsImpl, settings: ScatterplotSettingsImpl) {\n return (\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.grouping.length !== settings.grouping.length ||\n arraysAreDifferent(\n prevSettings.grouping.map(v => v.columnName.value),\n settings.grouping.map(v => v.columnName.value),\n ) ||\n prevSettings.grouping.some((v, idx) => arraysAreDifferent(v.order, settings.grouping?.[idx].order)) ||\n (prevSettings.label?.value || settings.label?.value) && prevSettings.label?.value !== settings.label?.value ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n Boolean(prevSettings.trend) !== Boolean(settings.trend)\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 {x, y, facetBy, grouping, trend, layers, label, highlight} = this.settings;\n const facetKeysLists = facetBy.map(column => this.data.getColumnCategories(column.value)).filter(v => v.length > 0);\n const categoryGroupingKeysLists = grouping.map(({columnName}) => this.data.getColumnCategories(columnName.value)).filter(v => v.length > 0);\n\n const facetKeysCombinations = facetKeysLists.length\n ? getKeysCombinations(facetKeysLists)\n : [['null']];\n const categoryGroupingCombinations = categoryGroupingKeysLists.length\n ? getKeysCombinations(categoryGroupingKeysLists)\n : [['null']];\n\n const facetGroupingValues = facetBy.map(column => column.value) ?? null;\n\n this.data.setGrouping([...facetGroupingValues]);\n const onlyPositive = {\n x: this.data.getColumn(x.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n y: this.data.getColumn(y.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n };\n\n const groupingColumns = grouping.map(v => v.columnName);\n\n const dotsByFacets = getDots(this.data, facetKeysCombinations, x, y, label, highlight, grouping);\n const facetKeys = Object.keys(dotsByFacets);\n const trendsData = getRegressionData(this.data, dotsByFacets, facetKeys, categoryGroupingCombinations, groupingColumns, trend);\n\n const legendLabels = createLegendInfo(this.data, grouping, layers);\n const layersData = getLayersData(this.data, layers, facetKeys, dotsByFacets, categoryGroupingCombinations, groupingColumns);\n\n this.calculatedData = {\n onlyPositive,\n dotsByFacets,\n facetKeys,\n facetKeysCombinations,\n trendsData,\n legendLabels,\n layersData,\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n const {grouping, trend, layers} = this.settings;\n const {facetKeys, trendsData} = calculated;\n\n facetKeys.forEach(facetKey => {\n for (let i = 0; i < layers.length; i++) {\n calculated.layersData[facetKey][i].info = layers[i];\n }\n });\n\n grouping.forEach(({columnName, inheritedAes}) => {\n const usedAes = new Set<keyof AesItem>();\n const usedAesFromPalettes: Partial<Record<keyof AesItem, string[]>> = {}; // if there is palette in mapping then\n layers.forEach(layer => {\n if (layer.aes) {\n Object.entries(layer.aes).forEach(([key, value]) => {\n if (isInheritMapping(value) && value.value === columnName.value) {\n usedAes.add(key as keyof AesItem);\n if (value.palette) {\n usedAesFromPalettes[key as keyof AesItem] = value.palette;\n }\n }\n });\n }\n });\n calculated.legendLabels[columnName.value].usedAes = [...usedAes];\n calculated.legendLabels[columnName.value].aesMap = addPalettesToAesMapping(\n columnName,\n usedAesFromPalettes,\n inheritedAes\n );\n });\n if (trendsData && trend) {\n Object.keys(trendsData).forEach((key) => {\n trendsData[key].forEach(trendInfo => {\n trendInfo.color = trend.color;\n trendInfo.bounded = trend.bounded;\n });\n });\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, facetSettings, grouping, keyColumn, layers, trend} = this.settings;\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeysCombinations, //for titles, if facet by more than 1 column\n this.calculatedData.dotsByFacets,\n this.calculatedData.trendsData,\n keyColumn,\n this.calculatedData.onlyPositive,\n this.calculatedData.legendLabels,\n this.calculatedData.layersData,\n grouping.map(v => v.columnName),\n layers,\n trend,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["isInheritMapping","value","ChartScatterplot","AbstractChart","data","settings","eventHandlers","__publicField","ChartRenderer","ScatterplotSettingsImpl","node","err","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","arraysAreDifferent","v","_b","_c","_d","l","prevData","prevKeys","keys","key","x","y","facetBy","grouping","trend","layers","label","highlight","facetKeysLists","column","categoryGroupingKeysLists","columnName","facetKeysCombinations","getKeysCombinations","categoryGroupingCombinations","facetGroupingValues","onlyPositive","groupingColumns","dotsByFacets","getDots","facetKeys","trendsData","getRegressionData","legendLabels","createLegendInfo","layersData","getLayersData","calculated","facetKey","i","inheritedAes","usedAes","usedAesFromPalettes","layer","addPalettesToAesMapping","trendInfo","id","chartSettings","facetSettings","keyColumn"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type {\n AesItem,\n AxisSettings,\n AxisSettingsDiscrete,\n Category,\n ColumnName,\n ContinuousAesFromColumn,\n InheritAesScatterplot,\n ScatterplotEventHandlers,\n ScatterplotLegendInfo,\n ScatterplotSettings,\n} from '../types';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\nimport { getKeysCombinations } from '../utils/getKeysCombination';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedDots } from './dots';\nimport { getDots } from './dots';\nimport type { ScatterplotLayerData } from './getLayersData';\nimport { getLayersData } from './getLayersData';\nimport type { TrendsData } from './linearRegression';\nimport { getRegressionData } from './linearRegression';\nimport { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport { addPalettesToAesMapping, createLegendInfo } from './utils/createLegendInfo';\nimport type { DiscreteAxisData } from './components/types';\n\nfunction isInheritMapping<T extends (string | number)>(value:T | InheritAesScatterplot | ContinuousAesFromColumn<T>):value is InheritAesScatterplot {\n return typeof value === 'object' && 'type' in value && value.type === 'grouping';\n}\n\nfunction getDiscreteAxisData(data: DataFrame, axis: AxisSettings, column: ColumnName): DiscreteAxisData {\n if (axis.scale === 'discrete') {\n const keys = axis.keys ? axis.keys : data.getColumnCategories(column.value);\n return {keys, labels: keys.reduce((res, v) => {\n const labelsMap = axis.labels ?? {};\n const labelValue = labelsMap[v] ?? (column.valueLabels ? data.getColumnValue(column.valueLabels, data.getColumnCategoryRowIndex(column.value, v as Category)) : v);\n res[v] = String(labelValue);\n return res;\n }, {} as Record<string, string>)};\n }\n return {keys: [], labels: {}};\n}\n\nexport class ChartScatterplot extends AbstractChart {\n settings: ScatterplotSettingsImpl;\n chartRenderer: ChartRenderer;\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n onlyPositive: {x: boolean; y: boolean};\n dotsByFacets: GroupedDots;\n facetKeys: string[];\n facetKeysCombinations: string[][];\n trendsData: TrendsData | null;\n legendLabels: ScatterplotLegendInfo;\n layersData: Record<string, ScatterplotLayerData[]>;\n discreteAxisDataX: DiscreteAxisData;\n discreteAxisDataY: DiscreteAxisData;\n } | null = null;\n\n constructor(data: DataFrame, settings: ScatterplotSettings, eventHandlers?:ScatterplotEventHandlers) {\n super(data, settings);\n\n this.chartRenderer = new ChartRenderer();\n this.settings = new ScatterplotSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch;\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 console.error(err);\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: ScatterplotSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new ScatterplotSettingsImpl(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 console.error(err);\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 scatterplot');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: ScatterplotSettingsImpl, settings: ScatterplotSettingsImpl) {\n return (\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.grouping.length !== settings.grouping.length ||\n arraysAreDifferent(\n prevSettings.grouping.map(v => v.columnName.value),\n settings.grouping.map(v => v.columnName.value),\n ) ||\n prevSettings.grouping.some((v, idx) => arraysAreDifferent(v.order, settings.grouping?.[idx].order)) ||\n arraysAreDifferent((prevSettings.chartSettings.xAxis as AxisSettingsDiscrete).keys, (settings.chartSettings.xAxis as AxisSettingsDiscrete).keys) ||\n arraysAreDifferent((prevSettings.chartSettings.yAxis as AxisSettingsDiscrete).keys, (settings.chartSettings.yAxis as AxisSettingsDiscrete).keys) ||\n (prevSettings.label?.value || settings.label?.value) && prevSettings.label?.value !== settings.label?.value ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n Boolean(prevSettings.trend) !== Boolean(settings.trend)\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 {x, y, facetBy, grouping, trend, layers, label, highlight, chartSettings} = this.settings;\n const facetKeysLists = facetBy.map(column => this.data.getColumnCategories(column.value)).filter(v => v.length > 0);\n const categoryGroupingKeysLists = grouping.map(({columnName}) => this.data.getColumnCategories(columnName.value)).filter(v => v.length > 0);\n\n const facetKeysCombinations = facetKeysLists.length\n ? getKeysCombinations(facetKeysLists)\n : [['null']];\n const categoryGroupingCombinations = categoryGroupingKeysLists.length\n ? getKeysCombinations(categoryGroupingKeysLists)\n : [['null']];\n\n const facetGroupingValues = facetBy.map(column => column.value) ?? null;\n\n this.data.setGrouping([...facetGroupingValues]);\n const onlyPositive = {\n x: this.data.getColumn(x.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n y: this.data.getColumn(y.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n };\n\n const groupingColumns = grouping.map(v => v.columnName);\n\n const dotsByFacets = getDots(this.data, facetKeysCombinations, x, y, label, highlight, grouping);\n const facetKeys = Object.keys(dotsByFacets);\n const trendsData = getRegressionData(this.data, dotsByFacets, facetKeys, categoryGroupingCombinations, groupingColumns, trend);\n\n const discreteAxisDataX = getDiscreteAxisData(this.data, chartSettings.xAxis, x);\n const discreteAxisDataY = getDiscreteAxisData(this.data, chartSettings.yAxis, y);\n const legendLabels = createLegendInfo(this.data, grouping, layers);\n const layersData = getLayersData(this.data, layers, facetKeys, dotsByFacets, categoryGroupingCombinations, groupingColumns, chartSettings.xAxis, discreteAxisDataX);\n\n this.calculatedData = {\n onlyPositive,\n dotsByFacets,\n facetKeys,\n facetKeysCombinations,\n trendsData,\n legendLabels,\n layersData,\n discreteAxisDataX,\n discreteAxisDataY\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n const {grouping, trend, layers} = this.settings;\n const {facetKeys, trendsData} = calculated;\n\n facetKeys.forEach(facetKey => {\n for (let i = 0; i < layers.length; i++) {\n calculated.layersData[facetKey][i].info = layers[i];\n }\n });\n\n grouping.forEach(({columnName, inheritedAes}) => {\n const usedAes = new Set<keyof AesItem>();\n const usedAesFromPalettes: Partial<Record<keyof AesItem, string[]>> = {}; // if there is palette in mapping then\n layers.forEach(layer => {\n if (layer.aes) {\n Object.entries(layer.aes).forEach(([key, value]) => {\n if (isInheritMapping(value) && value.value === columnName.value) {\n usedAes.add(key as keyof AesItem);\n if (value.palette) {\n usedAesFromPalettes[key as keyof AesItem] = value.palette;\n }\n }\n });\n }\n });\n calculated.legendLabels[columnName.value].usedAes = [...usedAes];\n calculated.legendLabels[columnName.value].aesMap = addPalettesToAesMapping(\n columnName,\n usedAesFromPalettes,\n inheritedAes\n );\n });\n if (trendsData && trend) {\n Object.keys(trendsData).forEach((key) => {\n trendsData[key].forEach(trendInfo => {\n trendInfo.color = trend.color;\n trendInfo.bounded = trend.bounded;\n });\n });\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, facetSettings, grouping, keyColumn, layers, trend} = this.settings;\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeysCombinations, //for titles, if facet by more than 1 column\n this.calculatedData.dotsByFacets,\n this.calculatedData.trendsData,\n keyColumn,\n this.calculatedData.onlyPositive,\n this.calculatedData.legendLabels,\n this.calculatedData.layersData,\n grouping.map(v => v.columnName),\n layers,\n trend,\n this.calculatedData.discreteAxisDataX,\n this.calculatedData.discreteAxisDataY,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["isInheritMapping","value","getDiscreteAxisData","data","axis","column","keys","res","v","labelValue","ChartScatterplot","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","ScatterplotSettingsImpl","node","err","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","arraysAreDifferent","_b","_c","_d","l","prevData","prevKeys","h","key","x","y","facetBy","grouping","trend","layers","label","highlight","chartSettings","facetKeysLists","categoryGroupingKeysLists","columnName","facetKeysCombinations","getKeysCombinations","categoryGroupingCombinations","facetGroupingValues","onlyPositive","groupingColumns","dotsByFacets","getDots","facetKeys","trendsData","getRegressionData","discreteAxisDataX","discreteAxisDataY","legendLabels","createLegendInfo","layersData","getLayersData","calculated","facetKey","i","inheritedAes","usedAes","usedAesFromPalettes","layer","addPalettesToAesMapping","trendInfo","id","facetSettings","keyColumn"],"mappings":"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","x_google_ignoreList":[0]}