@milaboratories/miplots4 1.0.165 → 1.0.167

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 (60) hide show
  1. package/dist/common/Tooltip.d.ts +2 -1
  2. package/dist/common/Tooltip.js +147 -143
  3. package/dist/common/Tooltip.js.map +1 -1
  4. package/dist/discrete/DiscreteSettingsImpl.d.ts +11 -31
  5. package/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
  6. package/dist/discrete/components/Chart.js +143 -143
  7. package/dist/discrete/components/Chart.js.map +1 -1
  8. package/dist/discrete/index.d.ts +2 -0
  9. package/dist/discrete/index.js +127 -123
  10. package/dist/discrete/index.js.map +1 -1
  11. package/dist/discrete/utils/getFacetLabels.d.ts +3 -0
  12. package/dist/discrete/utils/getFacetLabels.js +16 -0
  13. package/dist/discrete/utils/getFacetLabels.js.map +1 -0
  14. package/dist/heatmap/components/tooltipUtils.js +15 -15
  15. package/dist/heatmap/components/tooltipUtils.js.map +1 -1
  16. package/dist/heatmap/fillCellsData.js +88 -85
  17. package/dist/heatmap/fillCellsData.js.map +1 -1
  18. package/dist/histogram/getHistogramData.js +42 -41
  19. package/dist/histogram/getHistogramData.js.map +1 -1
  20. package/dist/histogram/index.d.ts +1 -0
  21. package/dist/histogram/index.js +59 -57
  22. package/dist/histogram/index.js.map +1 -1
  23. package/dist/scatterplot/components/ChartTooltip.js +34 -33
  24. package/dist/scatterplot/components/ChartTooltip.js.map +1 -1
  25. package/dist/scatterplot/components/ChartsGroup.js +31 -31
  26. package/dist/scatterplot/components/ChartsGroup.js.map +1 -1
  27. package/dist/scatterplot/dots.d.ts +2 -2
  28. package/dist/scatterplot/dots.js +9 -9
  29. package/dist/scatterplot/dots.js.map +1 -1
  30. package/dist/scatterplot/index.d.ts +1 -0
  31. package/dist/scatterplot/index.js +61 -59
  32. package/dist/scatterplot/index.js.map +1 -1
  33. package/dist/scatterplot/utils/sortDotsByGrouping.d.ts +2 -1
  34. package/dist/scatterplot/utils/sortDotsByGrouping.js +22 -11
  35. package/dist/scatterplot/utils/sortDotsByGrouping.js.map +1 -1
  36. package/dist/scatterplot-umap/ChartRenderer.d.ts +1 -1
  37. package/dist/scatterplot-umap/ChartRenderer.js +17 -17
  38. package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  39. package/dist/scatterplot-umap/components/SVGLayer.js +49 -49
  40. package/dist/scatterplot-umap/components/SVGLayer.js.map +1 -1
  41. package/dist/scatterplot-umap/components/UpperSVG.d.ts +1 -1
  42. package/dist/scatterplot-umap/components/UpperSVG.js +39 -38
  43. package/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
  44. package/dist/scatterplot-umap/index.js +87 -77
  45. package/dist/scatterplot-umap/index.js.map +1 -1
  46. package/dist/types/bubble.js +32 -37
  47. package/dist/types/bubble.js.map +1 -1
  48. package/dist/types/common.d.ts +41 -0
  49. package/dist/types/common.js +39 -35
  50. package/dist/types/common.js.map +1 -1
  51. package/dist/types/discrete.d.ts +680 -70
  52. package/dist/types/discrete.js +141 -141
  53. package/dist/types/discrete.js.map +1 -1
  54. package/dist/types/heatmap.js +54 -59
  55. package/dist/types/heatmap.js.map +1 -1
  56. package/dist/types/scatterplot-umap.js +19 -24
  57. package/dist/types/scatterplot-umap.js.map +1 -1
  58. package/dist/types/scatterplot.js +41 -46
  59. package/dist/types/scatterplot.js.map +1 -1
  60. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
- var v = Object.defineProperty;
2
- var O = (l, h, t) => h in l ? v(l, h, { enumerable: !0, configurable: !0, writable: !0, value: t }) : l[h] = t;
3
- var m = (l, h, t) => O(l, typeof h != "symbol" ? h + "" : h, t);
4
- import { s as U } from "../_virtual/server.browser.js";
5
- import { AbstractChart as G } from "../AbstractChart.js";
1
+ var O = Object.defineProperty;
2
+ var U = (c, h, t) => h in c ? O(c, h, { enumerable: !0, configurable: !0, writable: !0, value: t }) : c[h] = t;
3
+ var m = (c, h, t) => U(c, typeof h != "symbol" ? h + "" : h, t);
4
+ import { s as G } from "../_virtual/server.browser.js";
5
+ import { AbstractChart as j } from "../AbstractChart.js";
6
6
  import { getUnknownErrorInfo as _, isErrorInfo as k } from "../types/common.js";
7
7
  import "../types/discrete.js";
8
8
  import "../types/scatterplot.js";
@@ -10,29 +10,30 @@ import "../types/heatmap.js";
10
10
  import "../types/dendro.js";
11
11
  import "../types/histogram.js";
12
12
  import "../types/bubble.js";
13
- import { arraysAreDifferent as b } from "../utils/arraysAreDifferent.js";
13
+ import { arraysAreDifferent as C } from "../utils/arraysAreDifferent.js";
14
14
  import { getKeysCombinations as S } from "../utils/getKeysCombination.js";
15
- import j from "./ChartRenderer.js";
16
- import { getDots as F } from "./dots.js";
17
- import { getLayersData as N } from "./getLayersData.js";
18
- import { getRegressionData as P } from "./linearRegression.js";
15
+ import F from "./ChartRenderer.js";
16
+ import { getDots as N } from "./dots.js";
17
+ import { getLayersData as P } from "./getLayersData.js";
18
+ import { getRegressionData as X } from "./linearRegression.js";
19
19
  import { ScatterplotSettingsImpl as w } from "./ScatterplotSettingsImpl.js";
20
- import { createLegendInfo as X, addPalettesToAesMapping as H } from "./utils/createLegendInfo.js";
20
+ import { createLegendInfo as H, addPalettesToAesMapping as V } from "./utils/createLegendInfo.js";
21
21
  import { MAX_FACETS_COUNT as I, MAX_GROUPS_COUNT as x } from "../constants.js";
22
- function V(l) {
23
- return typeof l == "object" && "type" in l && l.type === "grouping";
22
+ import { getFacetLabels as Y } from "../discrete/utils/getFacetLabels.js";
23
+ function q(c) {
24
+ return typeof c == "object" && "type" in c && c.type === "grouping";
24
25
  }
25
- function R(l, h, t) {
26
+ function L(c, h, t) {
26
27
  if (h.scale === "discrete") {
27
- const e = h.keys ? h.keys : l.getColumnCategories(t.value);
28
+ const e = h.keys ? h.keys : c.getColumnCategories(t.value);
28
29
  return { keys: e, labels: e.reduce((a, s) => {
29
- const i = (h.labels ?? {})[s] ?? (t.valueLabels ? l.getColumnValue(t.valueLabels, l.getColumnCategoryRowIndex(t.value, s)) : s);
30
- return a[s] = String(i), a;
30
+ const l = (h.labels ?? {})[s] ?? (t.valueLabels ? c.getColumnValue(t.valueLabels, c.getColumnCategoryRowIndex(t.value, s)) : s);
31
+ return a[s] = String(l), a;
31
32
  }, {}) };
32
33
  }
33
34
  return { keys: [], labels: {} };
34
35
  }
35
- class ut extends G {
36
+ class gt extends j {
36
37
  constructor(t, e, a) {
37
38
  super(t, e);
38
39
  m(this, "settings");
@@ -40,7 +41,7 @@ class ut extends G {
40
41
  m(this, "onTooltipHintSwitch", () => {
41
42
  });
42
43
  m(this, "calculatedData", null);
43
- this.chartRenderer = new j(), this.settings = new w(e), a && (this.onTooltipHintSwitch = a.onTooltipHintSwitch);
44
+ this.chartRenderer = new F(), this.settings = new w(e), a && (this.onTooltipHintSwitch = a.onTooltipHintSwitch);
44
45
  }
45
46
  mount(t) {
46
47
  try {
@@ -64,47 +65,47 @@ class ut extends G {
64
65
  console.warn("no chart state for scatterplot");
65
66
  }
66
67
  export() {
67
- return this._updateChart(), U.renderToString(this.chartRenderer.component);
68
+ return this._updateChart(), G.renderToString(this.chartRenderer.component);
68
69
  }
69
70
  _needUpdateCalculatedDataBySettings(t, e) {
70
- var a, s, u, i;
71
+ var a, s, u, l;
71
72
  return t.facetBy.some((o, n) => {
72
- var c;
73
- return o.value !== ((c = e.facetBy[n]) == null ? void 0 : c.value);
74
- }) || t.grouping.length !== e.grouping.length || b(
73
+ var i;
74
+ return o.value !== ((i = e.facetBy[n]) == null ? void 0 : i.value);
75
+ }) || t.grouping.length !== e.grouping.length || C(
75
76
  t.grouping.map((o) => o.columnName.value),
76
77
  e.grouping.map((o) => o.columnName.value)
77
78
  ) || t.grouping.some((o, n) => {
78
- var c;
79
- return b(o.order, (c = e.grouping) == null ? void 0 : c[n].order);
80
- }) || b(t.chartSettings.xAxis.keys, e.chartSettings.xAxis.keys) || b(t.chartSettings.yAxis.keys, e.chartSettings.yAxis.keys) || (((a = t.label) == null ? void 0 : a.value) || ((s = e.label) == null ? void 0 : s.value)) && ((u = t.label) == null ? void 0 : u.value) !== ((i = e.label) == null ? void 0 : i.value) || t.layers.length !== e.layers.length || t.layers.some((o, n) => o.type !== e.layers[n].type) || !!t.trend != !!e.trend;
79
+ var i;
80
+ return C(o.order, (i = e.grouping) == null ? void 0 : i[n].order);
81
+ }) || C(t.chartSettings.xAxis.keys, e.chartSettings.xAxis.keys) || C(t.chartSettings.yAxis.keys, e.chartSettings.yAxis.keys) || (((a = t.label) == null ? void 0 : a.value) || ((s = e.label) == null ? void 0 : s.value)) && ((u = t.label) == null ? void 0 : u.value) !== ((l = e.label) == null ? void 0 : l.value) || t.layers.length !== e.layers.length || t.layers.some((o, n) => o.type !== e.layers[n].type) || !!t.trend != !!e.trend;
81
82
  }
82
83
  _needUpdateCalculatedDataByData(t, e) {
83
84
  const a = Object.keys(t.data), s = Object.keys(e.data);
84
85
  return t.id !== e.id || a.length !== s.length || a.some((u) => {
85
- var i;
86
- return t.data[u].length !== ((i = e.data[u]) == null ? void 0 : i.length);
86
+ var l;
87
+ return t.data[u].length !== ((l = e.data[u]) == null ? void 0 : l.length);
87
88
  });
88
89
  }
89
90
  _updateData() {
90
- const { x: t, y: e, facetBy: a, grouping: s, trend: u, layers: i, label: o, highlight: n, chartSettings: c } = this.settings, p = a.map((r) => this.data.getColumnCategories(r.value)).filter((r) => r.length > 0), g = s.map(({ columnName: r }) => this.data.getColumnCategories(r.value)).filter((r) => r.length > 0), y = p.length ? S(p) : [["null"]], d = g.length ? S(g) : [["null"]], B = a.map((r) => r.value) ?? null;
91
- this.data.setGrouping([...B]);
92
- const L = {
91
+ const { x: t, y: e, facetBy: a, grouping: s, trend: u, layers: l, label: o, highlight: n, chartSettings: i } = this.settings, y = a.map((r) => this.data.getColumnCategories(r.value)).filter((r) => r.length > 0), f = s.map(({ columnName: r }) => this.data.getColumnCategories(r.value)).filter((r) => r.length > 0), p = y.length ? S(y) : [["null"]], d = f.length ? S(f) : [["null"]], R = a.map((r) => r.value) ?? null;
92
+ this.data.setGrouping([...R]);
93
+ const B = {
93
94
  x: this.data.getColumn(t.value).every((r) => r === null || !(Number(r) < 0)),
94
95
  y: this.data.getColumn(e.value).every((r) => r === null || !(Number(r) < 0))
95
- }, E = s.map((r) => r.columnName), D = F(this.data, y, t, e, o, n, s, c.xAxis, c.yAxis), f = Object.keys(D);
96
- if (f.length > I) {
96
+ }, E = s.map((r) => r.columnName), D = N(this.data, p, t, e, o, n, s, i.xAxis, i.yAxis, l.find((r) => r.type === "dots")), g = Object.keys(D);
97
+ if (g.length > I) {
97
98
  const r = {
98
99
  type: "tooManyFacets",
99
- info: { count: f.length, maxCount: I }
100
+ info: { count: g.length, maxCount: I }
100
101
  };
101
102
  throw Error(r.type, { cause: r });
102
103
  }
103
- const M = P(this.data, D, f, d, E, u), C = R(this.data, c.xAxis, t), A = R(this.data, c.yAxis, e);
104
- if (C.keys.length > x) {
104
+ const M = X(this.data, D, g, d, E, u), b = L(this.data, i.xAxis, t), A = L(this.data, i.yAxis, e);
105
+ if (b.keys.length > x) {
105
106
  const r = {
106
107
  type: "tooManyScatterplotGroupsX",
107
- info: { count: C.keys.length, maxCount: x }
108
+ info: { count: b.keys.length, maxCount: x }
108
109
  };
109
110
  throw Error(r.type, { cause: r });
110
111
  }
@@ -115,16 +116,17 @@ class ut extends G {
115
116
  };
116
117
  throw Error(r.type, { cause: r });
117
118
  }
118
- const K = X(this.data, s, i), T = N(this.data, i, f, D, d, E, c.xAxis, C);
119
+ const K = H(this.data, s, l), T = P(this.data, l, g, D, d, E, i.xAxis, b), v = Y(this.data, a, g, p);
119
120
  this.calculatedData = {
120
- onlyPositive: L,
121
+ onlyPositive: B,
121
122
  dotsByFacets: D,
122
- facetKeys: f,
123
- facetKeysCombinations: y,
123
+ facetKeys: g,
124
+ facetKeysCombinations: p,
125
+ facetLabels: v,
124
126
  trendsData: M,
125
127
  legendLabels: K,
126
128
  layersData: T,
127
- discreteAxisDataX: C,
129
+ discreteAxisDataX: b,
128
130
  discreteAxisDataY: A
129
131
  };
130
132
  }
@@ -132,23 +134,23 @@ class ut extends G {
132
134
  const t = this.calculatedData;
133
135
  if (!t)
134
136
  return;
135
- const { grouping: e, trend: a, layers: s } = this.settings, { facetKeys: u, trendsData: i } = t;
137
+ const { grouping: e, trend: a, layers: s } = this.settings, { facetKeys: u, trendsData: l } = t;
136
138
  u.forEach((o) => {
137
139
  for (let n = 0; n < s.length; n++)
138
140
  t.layersData[o][n].info = s[n];
139
141
  }), e.forEach(({ columnName: o, inheritedAes: n }) => {
140
- const c = /* @__PURE__ */ new Set(), p = {};
141
- s.forEach((g) => {
142
- g.aes && Object.entries(g.aes).forEach(([y, d]) => {
143
- V(d) && d.value === o.value && (c.add(y), d.palette && (p[y] = d.palette));
142
+ const i = /* @__PURE__ */ new Set(), y = {};
143
+ s.forEach((f) => {
144
+ f.aes && Object.entries(f.aes).forEach(([p, d]) => {
145
+ q(d) && d.value === o.value && (i.add(p), d.palette && (y[p] = d.palette));
144
146
  });
145
- }), t.legendLabels[o.value].usedAes = [...c], t.legendLabels[o.value].aesMap = H(
147
+ }), t.legendLabels[o.value].usedAes = [...i], t.legendLabels[o.value].aesMap = V(
146
148
  o,
147
- p,
149
+ y,
148
150
  n
149
151
  );
150
- }), i && a && Object.keys(i).forEach((o) => {
151
- i[o].forEach((n) => {
152
+ }), l && a && Object.keys(l).forEach((o) => {
153
+ l[o].forEach((n) => {
152
154
  n.color = a.color, n.bounded = a.bounded;
153
155
  });
154
156
  });
@@ -156,24 +158,24 @@ class ut extends G {
156
158
  _updateChart() {
157
159
  if (!this.calculatedData)
158
160
  return;
159
- const { id: t, chartSettings: e, facetSettings: a, grouping: s, keyColumn: u, layers: i, trend: o } = this.settings;
161
+ const { facetLabels: t } = this.calculatedData, { id: e, chartSettings: a, facetSettings: s, grouping: u, keyColumn: l, layers: o, trend: n } = this.settings;
160
162
  this.chartRenderer.render(
161
163
  this.data,
162
- t,
163
164
  e,
164
165
  a,
166
+ s,
165
167
  this.calculatedData.facetKeys,
166
- this.calculatedData.facetKeysCombinations,
168
+ this.calculatedData.facetKeys.map((i) => t[i]),
167
169
  //for titles, if facet by more than 1 column
168
170
  this.calculatedData.dotsByFacets,
169
171
  this.calculatedData.trendsData,
170
- u,
172
+ l,
171
173
  this.calculatedData.onlyPositive,
172
174
  this.calculatedData.legendLabels,
173
175
  this.calculatedData.layersData,
174
- s.map((n) => n.columnName),
175
- i,
176
+ u.map((i) => i.columnName),
176
177
  o,
178
+ n,
177
179
  this.calculatedData.discreteAxisDataX,
178
180
  this.calculatedData.discreteAxisDataY,
179
181
  this.onTooltipHintSwitch
@@ -181,6 +183,6 @@ class ut extends G {
181
183
  }
182
184
  }
183
185
  export {
184
- ut as ChartScatterplot
186
+ gt as ChartScatterplot
185
187
  };
186
188
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/scatterplot/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type {\n ErrorInfoScatterplotGroupsX,\n ErrorInfoScatterplotGroupsY} from '../types';\nimport {\n type AesItem,\n type AxisSettings,\n type AxisSettingsDiscrete,\n type Category,\n type ColumnName,\n type ContinuousAesFromColumn,\n type ErrorInfoFacets,\n getUnknownErrorInfo,\n type InheritAesScatterplot,\n isErrorInfo,\n type ScatterplotEventHandlers,\n type ScatterplotLegendInfo,\n type 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';\nimport { MAX_FACETS_COUNT, MAX_GROUPS_COUNT } from '../constants';\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 this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\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 this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n console.error(err);\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\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, chartSettings.xAxis, chartSettings.yAxis);\n const facetKeys = Object.keys(dotsByFacets);\n\n if (facetKeys.length > MAX_FACETS_COUNT) {\n const errorInfo: ErrorInfoFacets = {\n type: 'tooManyFacets',\n info: {count: facetKeys.length, maxCount: MAX_FACETS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n\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\n if (discreteAxisDataX.keys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoScatterplotGroupsX = {\n type: 'tooManyScatterplotGroupsX',\n info: {count: discreteAxisDataX.keys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n if (discreteAxisDataY.keys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoScatterplotGroupsY = {\n type: 'tooManyScatterplotGroupsY',\n info: {count: discreteAxisDataY.keys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\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","isErrorInfo","getUnknownErrorInfo","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","arraysAreDifferent","_b","_c","_d","l","prevData","prevKeys","key","x","y","facetBy","grouping","trend","layers","label","highlight","chartSettings","facetKeysLists","categoryGroupingKeysLists","columnName","facetKeysCombinations","getKeysCombinations","categoryGroupingCombinations","facetGroupingValues","onlyPositive","groupingColumns","dotsByFacets","getDots","facetKeys","MAX_FACETS_COUNT","errorInfo","trendsData","getRegressionData","discreteAxisDataX","discreteAxisDataY","MAX_GROUPS_COUNT","legendLabels","createLegendInfo","layersData","getLayersData","calculated","facetKey","i","inheritedAes","usedAes","usedAesFromPalettes","layer","addPalettesToAesMapping","trendInfo","id","facetSettings","keyColumn"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/scatterplot/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type {\n ErrorInfoScatterplotGroupsX,\n ErrorInfoScatterplotGroupsY} from '../types';\nimport {\n type AesItem,\n type AxisSettings,\n type AxisSettingsDiscrete,\n type Category,\n type ColumnName,\n type ContinuousAesFromColumn,\n type ErrorInfoFacets,\n getUnknownErrorInfo,\n type InheritAesScatterplot,\n isErrorInfo,\n type ScatterplotEventHandlers,\n type ScatterplotLegendInfo,\n type 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';\nimport { MAX_FACETS_COUNT, MAX_GROUPS_COUNT } from '../constants';\nimport { getFacetLabels } from '../discrete/utils/getFacetLabels';\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 facetLabels: Record<string, 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 this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\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 this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n console.error(err);\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\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, chartSettings.xAxis, chartSettings.yAxis, layers.find(l => l.type === 'dots'));\n const facetKeys = Object.keys(dotsByFacets);\n\n if (facetKeys.length > MAX_FACETS_COUNT) {\n const errorInfo: ErrorInfoFacets = {\n type: 'tooManyFacets',\n info: {count: facetKeys.length, maxCount: MAX_FACETS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n\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\n if (discreteAxisDataX.keys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoScatterplotGroupsX = {\n type: 'tooManyScatterplotGroupsX',\n info: {count: discreteAxisDataX.keys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n if (discreteAxisDataY.keys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoScatterplotGroupsY = {\n type: 'tooManyScatterplotGroupsY',\n info: {count: discreteAxisDataY.keys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n const legendLabels = createLegendInfo(this.data, grouping, layers);\n const layersData = getLayersData(this.data, layers, facetKeys, dotsByFacets, categoryGroupingCombinations, groupingColumns, chartSettings.xAxis, discreteAxisDataX);\n const facetLabels = getFacetLabels(this.data, facetBy, facetKeys, facetKeysCombinations);\n\n this.calculatedData = {\n onlyPositive,\n dotsByFacets,\n facetKeys,\n facetKeysCombinations,\n facetLabels,\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 {facetLabels} = this.calculatedData;\n const {id, chartSettings, facetSettings, grouping, keyColumn, layers, trend} = this.settings;\n\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeys.map(v => facetLabels[v]), //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","isErrorInfo","getUnknownErrorInfo","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","arraysAreDifferent","_b","_c","_d","l","prevData","prevKeys","key","x","y","facetBy","grouping","trend","layers","label","highlight","chartSettings","facetKeysLists","categoryGroupingKeysLists","columnName","facetKeysCombinations","getKeysCombinations","categoryGroupingCombinations","facetGroupingValues","onlyPositive","groupingColumns","dotsByFacets","getDots","facetKeys","MAX_FACETS_COUNT","errorInfo","trendsData","getRegressionData","discreteAxisDataX","discreteAxisDataY","MAX_GROUPS_COUNT","legendLabels","createLegendInfo","layersData","getLayersData","facetLabels","getFacetLabels","calculated","facetKey","i","inheritedAes","usedAes","usedAesFromPalettes","layer","addPalettesToAesMapping","trendInfo","id","facetSettings","keyColumn"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { DataFrame } from '../../DataFrame';
2
2
  import { ColumnName, DataValue } from '../../types';
3
3
  import { Dot } from '../dots';
4
+ import { DotsLayer } from '../ScatterplotSettingsImpl';
4
5
  export declare function sortDotsByGrouping(dataFrame: DataFrame, dots: Dot[], grouping: {
5
6
  columnName: ColumnName;
6
7
  order?: DataValue[];
7
- }[], highlight: ColumnName | null): void;
8
+ }[], highlight: ColumnName | null, layer?: DotsLayer): void;
@@ -1,18 +1,29 @@
1
- function v(r, s, i, f) {
2
- const c = i.reduce((t, { columnName: n, order: e }) => (e && (t[n.value] = e.reduce((o, u, l) => (o[u] = e.length - l, o), {})), t), {});
3
- s.sort((t, n) => {
4
- var e, o;
5
- if (f && n.dimmed !== t.dimmed)
6
- return n.dimmed ? 1 : -1;
7
- for (const { columnName: u } of i) {
8
- const l = r.getColumnValue(u.value, t.idx), d = r.getColumnValue(u.value, n.idx), m = (e = c[u.value]) == null ? void 0 : e[l], a = (o = c[u.value]) == null ? void 0 : o[d];
9
- if (m !== a)
10
- return m - a;
1
+ import { isContinuousAes as g } from "../../types/common.js";
2
+ import "../../types/discrete.js";
3
+ import "../../types/scatterplot.js";
4
+ import "../../types/heatmap.js";
5
+ import "../../types/dendro.js";
6
+ import "../../types/histogram.js";
7
+ import "../../types/bubble.js";
8
+ function N(m, p, c, V, r) {
9
+ const a = c.reduce((t, { columnName: e, order: o }) => (o && (t[e.value] = o.reduce((i, u, n) => (i[u] = o.length - n, i), {})), t), {});
10
+ p.sort((t, e) => {
11
+ var o, i;
12
+ if (V && e.dimmed !== t.dimmed)
13
+ return e.dimmed ? 1 : -1;
14
+ if (g(r == null ? void 0 : r.aes.dotFill)) {
15
+ const { range: u, columnName: n } = r.aes.dotFill, s = m.getColumnValue(n.value, t.idx), l = m.getColumnValue(n.value, e.idx);
16
+ return s === null || l === null ? 0 : s > l == u[0] > u[1] ? 1 : -1;
17
+ }
18
+ for (const { columnName: u } of c) {
19
+ const n = m.getColumnValue(u.value, t.idx), s = m.getColumnValue(u.value, e.idx), l = (o = a[u.value]) == null ? void 0 : o[n], f = (i = a[u.value]) == null ? void 0 : i[s];
20
+ if (l !== f)
21
+ return l - f;
11
22
  }
12
23
  return 0;
13
24
  });
14
25
  }
15
26
  export {
16
- v as sortDotsByGrouping
27
+ N as sortDotsByGrouping
17
28
  };
18
29
  //# sourceMappingURL=sortDotsByGrouping.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sortDotsByGrouping.js","sources":["../../../src/scatterplot/utils/sortDotsByGrouping.ts"],"sourcesContent":["import type {DataFrame} from '../../DataFrame';\nimport type {ColumnName, DataValue} from '../../types';\nimport type {Dot} from '../dots';\n\nexport function sortDotsByGrouping(\n dataFrame: DataFrame,\n dots:Dot[],\n grouping: {columnName: ColumnName; order?: DataValue[];}[],\n highlight: ColumnName | null\n) {\n const weightsByColumnByOrder = grouping.reduce((res, {columnName, order}) => {\n if (order) {\n res[columnName.value] = order.reduce((weights, orderEl, idx) => {\n weights[orderEl as string] = order.length - idx;\n return weights;\n }, {} as Record<string, number>);\n }\n return res;\n }, {} as Record<string, Record<string, number>>);\n\n dots.sort((d1, d2) => {\n if (highlight && d2.dimmed !== d1.dimmed) {\n return d2.dimmed ? 1 : -1;\n }\n for (const {columnName} of grouping) {\n const aValue = dataFrame.getColumnValue(columnName.value, d1.idx);\n const bValue = dataFrame.getColumnValue(columnName.value, d2.idx);\n const aWeight = weightsByColumnByOrder[columnName.value]?.[aValue as string];\n const bWeight = weightsByColumnByOrder[columnName.value]?.[bValue as string];\n if (aWeight !== bWeight) {\n return aWeight - bWeight;\n }\n }\n return 0;\n });\n}"],"names":["sortDotsByGrouping","dataFrame","dots","grouping","highlight","weightsByColumnByOrder","res","columnName","order","weights","orderEl","idx","d1","d2","_a","_b","aValue","bValue","aWeight","bWeight"],"mappings":"AAIO,SAASA,EACZC,GACAC,GACAC,GACAC,GACF;AACE,QAAMC,IAAyBF,EAAS,OAAO,CAACG,GAAK,EAAC,YAAAC,GAAY,OAAAC,SAC1DA,MACAF,EAAIC,EAAW,KAAK,IAAIC,EAAM,OAAO,CAACC,GAASC,GAASC,OACpDF,EAAQC,CAAiB,IAAIF,EAAM,SAASG,GACrCF,IACR,CAAA,CAA4B,IAE5BH,IACR,CAAA,CAA4C;AAE/C,EAAAJ,EAAK,KAAK,CAACU,GAAIC,MAAO;AAhBnB,QAAAC,GAAAC;AAiBC,QAAIX,KAAaS,EAAG,WAAWD,EAAG;AAC9B,aAAOC,EAAG,SAAS,IAAI;AAE3B,eAAW,EAAC,YAAAN,EAAA,KAAeJ,GAAU;AACjC,YAAMa,IAASf,EAAU,eAAeM,EAAW,OAAOK,EAAG,GAAG,GAC1DK,IAAShB,EAAU,eAAeM,EAAW,OAAOM,EAAG,GAAG,GAC1DK,KAAUJ,IAAAT,EAAuBE,EAAW,KAAK,MAAvC,gBAAAO,EAA2CE,IACrDG,KAAUJ,IAAAV,EAAuBE,EAAW,KAAK,MAAvC,gBAAAQ,EAA2CE;AAC3D,UAAIC,MAAYC;AACZ,eAAOD,IAAUC;AAAA,IAEzB;AACA,WAAO;AAAA,EACX,CAAC;AACL;"}
1
+ {"version":3,"file":"sortDotsByGrouping.js","sources":["../../../src/scatterplot/utils/sortDotsByGrouping.ts"],"sourcesContent":["import type {DataFrame} from '../../DataFrame';\nimport {type ColumnName, type DataValue, isContinuousAes} from '../../types';\nimport type {Dot} from '../dots';\nimport type { DotsLayer } from '../ScatterplotSettingsImpl';\n\nexport function sortDotsByGrouping(\n dataFrame: DataFrame,\n dots:Dot[],\n grouping: {columnName: ColumnName; order?: DataValue[];}[],\n highlight: ColumnName | null,\n layer?: DotsLayer\n) {\n const weightsByColumnByOrder = grouping.reduce((res, {columnName, order}) => {\n if (order) {\n res[columnName.value] = order.reduce((weights, orderEl, idx) => {\n weights[orderEl as string] = order.length - idx;\n return weights;\n }, {} as Record<string, number>);\n }\n return res;\n }, {} as Record<string, Record<string, number>>);\n\n dots.sort((d1, d2) => {\n if (highlight && d2.dimmed !== d1.dimmed) {\n return d2.dimmed ? 1 : -1;\n }\n if (isContinuousAes(layer?.aes.dotFill)) {\n const {range, columnName} = layer.aes.dotFill;\n const aValue = dataFrame.getColumnValue(columnName.value, d1.idx);\n const bValue = dataFrame.getColumnValue(columnName.value, d2.idx);\n if (aValue === null || bValue === null) {\n return 0;\n }\n return aValue > bValue === range[0] > range[1] ? 1 : -1;\n }\n for (const {columnName} of grouping) {\n const aValue = dataFrame.getColumnValue(columnName.value, d1.idx);\n const bValue = dataFrame.getColumnValue(columnName.value, d2.idx);\n const aWeight = weightsByColumnByOrder[columnName.value]?.[aValue as string];\n const bWeight = weightsByColumnByOrder[columnName.value]?.[bValue as string];\n if (aWeight !== bWeight) {\n return aWeight - bWeight;\n }\n }\n return 0;\n });\n}"],"names":["sortDotsByGrouping","dataFrame","dots","grouping","highlight","layer","weightsByColumnByOrder","res","columnName","order","weights","orderEl","idx","d1","d2","isContinuousAes","range","aValue","bValue","aWeight","_a","bWeight","_b"],"mappings":";;;;;;;AAKO,SAASA,EACZC,GACAC,GACAC,GACAC,GACAC,GACF;AACE,QAAMC,IAAyBH,EAAS,OAAO,CAACI,GAAK,EAAC,YAAAC,GAAY,OAAAC,SAC1DA,MACAF,EAAIC,EAAW,KAAK,IAAIC,EAAM,OAAO,CAACC,GAASC,GAASC,OACpDF,EAAQC,CAAiB,IAAIF,EAAM,SAASG,GACrCF,IACR,CAAA,CAA4B,IAE5BH,IACR,CAAA,CAA4C;AAE/C,EAAAL,EAAK,KAAK,CAACW,GAAIC,MAAO;;AAClB,QAAIV,KAAaU,EAAG,WAAWD,EAAG;AAC9B,aAAOC,EAAG,SAAS,IAAI;AAE3B,QAAIC,EAAgBV,KAAA,gBAAAA,EAAO,IAAI,OAAO,GAAG;AACrC,YAAM,EAAC,OAAAW,GAAO,YAAAR,EAAA,IAAcH,EAAM,IAAI,SAChCY,IAAShB,EAAU,eAAeO,EAAW,OAAOK,EAAG,GAAG,GAC1DK,IAASjB,EAAU,eAAeO,EAAW,OAAOM,EAAG,GAAG;AAChE,aAAIG,MAAW,QAAQC,MAAW,OACvB,IAEJD,IAASC,KAAWF,EAAM,CAAC,IAAIA,EAAM,CAAC,IAAI,IAAI;AAAA,IACzD;AACA,eAAW,EAAC,YAAAR,EAAA,KAAeL,GAAU;AACjC,YAAMc,IAAShB,EAAU,eAAeO,EAAW,OAAOK,EAAG,GAAG,GAC1DK,IAASjB,EAAU,eAAeO,EAAW,OAAOM,EAAG,GAAG,GAC1DK,KAAUC,IAAAd,EAAuBE,EAAW,KAAK,MAAvC,gBAAAY,EAA2CH,IACrDI,KAAUC,IAAAhB,EAAuBE,EAAW,KAAK,MAAvC,gBAAAc,EAA2CJ;AAC3D,UAAIC,MAAYE;AACZ,eAAOF,IAAUE;AAAA,IAEzB;AACA,WAAO;AAAA,EACX,CAAC;AACL;"}
@@ -56,7 +56,7 @@ declare class ChartRenderer {
56
56
  initSettings(dots: Dot[], chartSettings: ScatterplotUmapSettingsImpl['chartSettings'], dotExtents: DotsExtents, legendInfo: ScatterplotUmapLegendInfo, layers: ScatterplotUmapSettingsImpl['layers'], grouping: ColumnName[], onZoomChange: (v: boolean) => void): void;
57
57
  resetZoom(xAxis: ScatterplotUmapSettingsImpl['chartSettings']['xAxis'], yAxis: ScatterplotUmapSettingsImpl['chartSettings']['yAxis'], dotsExtents?: DotsExtents): void;
58
58
  updateAes(legendInfo: ScatterplotUmapLegendInfo, layers: ScatterplotUmapSettingsImpl['layers']): void;
59
- updatePointSize(): void;
59
+ updatePointSize(legendInfo: ScatterplotUmapLegendInfo, layers: ScatterplotUmapSettingsImpl['layers']): void;
60
60
  updateByLasso(): void;
61
61
  createQuadtree(dots: Dot[]): KDBush;
62
62
  getClosestDot(_x: number, _y: number): Dot | null;
@@ -10,7 +10,7 @@ import { c as Z } from "../_virtual/client.js";
10
10
  import { Error as J } from "../common/Error.js";
11
11
  import { BLACK as A, DEFAULT_HEIGHT as E, DEFAULT_WIDTH as w, TITLE_LINE_HEIGHT as tt, MIN_LEGEND_GRADIENT_HEIGHT as et, MAX_LEGEND_GRADIENT_HEIGHT as it, MAX_SHOWN_UNIQUE_VALUES_IN_LABELS as st, TITLE_MARGIN as ot } from "../constants.js";
12
12
  import { splitTextByWidth as at } from "../utils/splitTextByWidth.js";
13
- import { MIN_MARGIN as T, DEFAULT_DOT_AES as P } from "../scatterplot/constants.js";
13
+ import { MIN_MARGIN as T, DEFAULT_DOT_AES as G } from "../scatterplot/constants.js";
14
14
  import { createAesGetter as M } from "../scatterplot/utils/createAesGetter.js";
15
15
  import { getTicksAndFormat as nt } from "../scatterplot/utils/getTicksAndFormat.js";
16
16
  import { createLabelPositioner as rt } from "../scatterplot/utils/getVisibleLabels.js";
@@ -33,9 +33,9 @@ import gt from "../node_modules/.pnpm/kdbush@4.0.2/node_modules/kdbush/index.js"
33
33
  import { DataFrameProvider as ut } from "../common/useDataFrame.js";
34
34
  import { DataFrame as ft } from "../DataFrame.js";
35
35
  import { arrangeLegendParts as yt } from "../utils/arrangeLegendParts.js";
36
- import { stringToNumberRgba as W, getColorWithFakeOpacity as G, GET_BLACK as O } from "./colors.js";
36
+ import { stringToNumberRgba as W, getColorWithFakeOpacity as P, GET_BLACK as U } from "./colors.js";
37
37
  import b from "../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/linear.js";
38
- import U from "../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/log.js";
38
+ import O from "../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/log.js";
39
39
  import C from "../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/select.js";
40
40
  import St from "../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/ordinal.js";
41
41
  import xt from "../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/symlog.js";
@@ -50,8 +50,8 @@ function H(y, t, e) {
50
50
  function B(y, t, e) {
51
51
  const i = e.find((o) => o.type === "dots"), n = e.find((o) => o.type === "curve");
52
52
  return {
53
- dotFill: M(y, t, (i == null ? void 0 : i.aes.dotFill) ?? P.color, "dotFill"),
54
- dotSize: M(y, t, (i == null ? void 0 : i.aes.dotSize) ?? P.size, "dotSize"),
53
+ dotFill: M(y, t, (i == null ? void 0 : i.aes.dotFill) ?? G.color, "dotFill"),
54
+ dotSize: M(y, t, (i == null ? void 0 : i.aes.dotSize) ?? G.size, "dotSize"),
55
55
  lineType: M(y, t, (n == null ? void 0 : n.aes.lineShape) ?? "solid", "lineShape")
56
56
  };
57
57
  }
@@ -132,7 +132,7 @@ class he {
132
132
  (t.width !== this.chartSizes.chartWidth || t.height !== this.chartSizes.chartHeight) && (this.chartSizes.chartWidth = t.width, this.chartSizes.chartHeight = t.height, this.scales.x.range([0, this.chartSizes.chartWidth]), this.scales.y.range([this.chartSizes.chartHeight, 0]));
133
133
  }
134
134
  updateViewport(t, e, i) {
135
- const n = t.scale === "log" ? U() : b();
135
+ const n = t.scale === "log" ? O() : b();
136
136
  let { minX: o, minY: c, maxX: d, maxY: m } = i;
137
137
  if (t.lowerValue !== void 0 && (o = Math.max(o, t.lowerValue)), t.upperValue !== void 0 && (d = Math.min(d, t.upperValue)), e.lowerValue !== void 0 && (c = Math.max(c, e.lowerValue)), e.upperValue !== void 0 && (m = Math.min(m, e.upperValue)), t.symmetricRange !== void 0) {
138
138
  const a = t.symmetricRange;
@@ -150,7 +150,7 @@ class he {
150
150
  }
151
151
  const f = [0, this.chartSizes.chartWidth], S = n.copy().domain([o, d]).range([D.LEFT, this.chartSizes.chartWidth - D.RIGHT]);
152
152
  n.domain([S.invert(0), S.invert(this.chartSizes.chartWidth)]).range(f).nice(), this.scales.x.domain(n.domain()), this.scales.xOriginal.domain(n.domain());
153
- const x = e.scale === "log" ? U() : b(), p = [this.chartSizes.chartHeight, 0], r = x.copy().domain([c, m]).range([this.chartSizes.chartHeight - D.BOTTOM, D.TOP]);
153
+ const x = e.scale === "log" ? O() : b(), p = [this.chartSizes.chartHeight, 0], r = x.copy().domain([c, m]).range([this.chartSizes.chartHeight - D.BOTTOM, D.TOP]);
154
154
  x.domain([r.invert(this.chartSizes.chartHeight), r.invert(0)]).range(p).nice(), this.scales.y.domain(x.domain()), this.scales.yOriginal.domain(x.domain());
155
155
  }
156
156
  updateCaptionsSize() {
@@ -199,7 +199,7 @@ class he {
199
199
  }
200
200
  const a = {};
201
201
  r.values.forEach((g) => {
202
- a[g] || (a[g] = { ...P }), r.usedAes.forEach((s) => {
202
+ a[g] || (a[g] = { ...G }), r.usedAes.forEach((s) => {
203
203
  s === "dotFill" && (a[g].color = r.aesMap(g, s) ?? A), s === "dotSize" && (a[g].size = Number(r.aesMap(g, s) ?? 3));
204
204
  });
205
205
  });
@@ -230,7 +230,7 @@ class he {
230
230
  this.updateChartSizes(S), this.updateViewport(m, f, i), this.updateCaptionsSize(), this.updateLegendSize(p, n, c, o), this.createMainTitle(x), this.updateMargins(m, f), this.aesGetters = B(this.dataFrame, n, o);
231
231
  const r = mt().data(t).value((s) => {
232
232
  const l = W(this.aesGetters.dotFill(s.idx));
233
- return l[3] = !s.dimmed && H(s.x, s.y, this.polygons) ? 1 : 0.4, G(l, l);
233
+ return l[3] = !s.dimmed && H(s.x, s.y, this.polygons) ? 1 : 0.4, P(l, l);
234
234
  }), a = Y().equals((s, l) => s === l).size((s) => V(this.aesGetters.dotSize(s.idx))).crossValue((s) => s.x).mainValue((s) => s.y).decorate((s) => r(s)), u = $().scaleExtent([0.1, 1e3]).filter((s) => s.type === "wheel" || s.metaKey || s.ctrlKey).on("start", () => {
235
235
  this.selectedDot = null;
236
236
  }).on("zoom", (s) => {
@@ -259,7 +259,7 @@ class he {
259
259
  zoom: u,
260
260
  fillColor: r,
261
261
  pointSeries: a
262
- }, C(this.canvasNode).datum(t).style("position", "absolute").style("width", this.chartSizes.chartWidth + "px").style("height", this.chartSizes.chartHeight + "px").style("top", this.margins.top + "px").style("left", this.margins.left + "px");
262
+ }, C(this.canvasNode).datum(t).style("position", "absolute").style("width", this.chartSizes.chartWidth + "px").style("height", this.chartSizes.chartHeight + "px").style("top", this.margins.top + "px").style("left", this.margins.left + "px"), this.onPolygonUpdate(this.polygons);
263
263
  }
264
264
  resetZoom(t, e, i) {
265
265
  var n;
@@ -267,18 +267,18 @@ class he {
267
267
  }
268
268
  updateAes(t, e) {
269
269
  this.tools !== null && (this.aesGetters = B(this.dataFrame, t, e), this.tools.fillColor.value((i) => {
270
- const n = this.aesGetters.dotFill ?? O, o = W(n(i.idx));
271
- return o[3] = !i.dimmed && H(i.x, i.y, this.polygons) ? 1 : 0.4, G(o, o);
270
+ const n = this.aesGetters.dotFill ?? U, o = W(n(i.idx));
271
+ return o[3] = !i.dimmed && H(i.x, i.y, this.polygons) ? 1 : 0.4, P(o, o);
272
272
  }));
273
273
  }
274
- updatePointSize() {
275
- this.tools !== null && (C(this.canvasNode).datum([...this.allDots]), this.tools.pointSeries.size((t) => V(this.aesGetters.dotSize(t.data))));
274
+ updatePointSize(t, e) {
275
+ this.tools !== null && (this.updateAes(t, e), C(this.canvasNode).datum([...this.allDots]), this.tools.pointSeries.size((i) => V(this.aesGetters.dotSize(i.idx))));
276
276
  }
277
277
  updateByLasso() {
278
278
  var t;
279
279
  this.tools !== null && ((t = this.tools) == null || t.fillColor.value((e) => {
280
- const i = this.aesGetters.dotFill ?? O, n = W(i(e.idx));
281
- return n[3] = !e.dimmed && H(e.x, e.y, this.polygons) ? 1 : 0.4, G(n, n);
280
+ const i = this.aesGetters.dotFill ?? U, n = W(i(e.idx));
281
+ return n[3] = !e.dimmed && H(e.x, e.y, this.polygons) ? 1 : 0.4, P(n, n);
282
282
  }), this.renderWebglLayer());
283
283
  }
284
284
  createQuadtree(t) {
@@ -320,7 +320,7 @@ class he {
320
320
  const { title: z, legend: g, size: s } = i;
321
321
  this.updateChartSizes(s), this.updateLegendSize(g, f, S, m), this.createMainTitle(z), this.updateMargins(i.xAxis, i.yAxis), this.updateAes(f, m);
322
322
  }
323
- this.onPolygonUpdateOutside = x, this.onTooltipHintSwitch = p, this.onLassoControlsStateUpdate = r, this.allDots !== o ? (this.updateDots(o), this.visibleLabels = this.computeLabels(o)) : u && (this.visibleLabels = this.computeLabels(o)), this.notCalculatedProps = {
323
+ this.onPolygonUpdateOutside = x, this.onTooltipHintSwitch = p, this.onLassoControlsStateUpdate = r, this.allDots !== o ? (this.updateDots(o), this.visibleLabels = this.computeLabels(o), this.onPolygonUpdate(this.polygons)) : u && (this.visibleLabels = this.computeLabels(o)), this.notCalculatedProps = {
324
324
  settingsId: e,
325
325
  chartSettings: i,
326
326
  keyColumn: n,