@milaboratories/miplots4 1.0.161 → 1.0.163
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.
- package/dist/_virtual/index10.js +2 -5
- package/dist/_virtual/index10.js.map +1 -1
- package/dist/_virtual/index5.js +5 -2
- package/dist/_virtual/index5.js.map +1 -1
- package/dist/_virtual/index6.js +4 -4
- package/dist/_virtual/index7.js +1 -1
- package/dist/_virtual/index8.js +4 -4
- package/dist/_virtual/index9.js +3 -3
- package/dist/common/BandAxis.d.ts +2 -1
- package/dist/common/BandAxis.js +19 -18
- package/dist/common/BandAxis.js.map +1 -1
- package/dist/common/ContinuousAxis.js +20 -20
- package/dist/common/ContinuousAxis.js.map +1 -1
- package/dist/common/Legend.js +3 -3
- package/dist/common/Legend.js.map +1 -1
- package/dist/discrete/DiscreteSettingsImpl.d.ts +6 -4
- package/dist/discrete/DiscreteSettingsImpl.js +9 -9
- package/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
- package/dist/discrete/constants.d.ts +1 -1
- package/dist/discrete/constants.js +1 -1
- package/dist/discrete/constants.js.map +1 -1
- package/dist/discrete/index.js +107 -106
- package/dist/discrete/index.js.map +1 -1
- package/dist/discrete/layers/bar.js +25 -22
- package/dist/discrete/layers/bar.js.map +1 -1
- package/dist/discrete/layers/errorbars.js +57 -48
- package/dist/discrete/layers/errorbars.js.map +1 -1
- package/dist/discrete/layers/lines.js +40 -31
- package/dist/discrete/layers/lines.js.map +1 -1
- package/dist/discrete/layers/stackedBar.js.map +1 -1
- package/dist/discrete/layers/stats/pValueCalculation.js +5 -5
- package/dist/heatmap/components/Captions/AxisCaptions.js +34 -34
- package/dist/heatmap/components/Captions/AxisCaptions.js.map +1 -1
- package/dist/heatmap/fillCellsData.js +49 -46
- package/dist/heatmap/fillCellsData.js.map +1 -1
- package/dist/heatmap/utils/calculateChartSideElementSizes.js +23 -23
- package/dist/heatmap/utils/calculateChartSideElementSizes.js.map +1 -1
- package/dist/histogram/ChartRenderer.js +57 -54
- package/dist/histogram/ChartRenderer.js.map +1 -1
- package/dist/histogram/constants.d.ts +1 -1
- package/dist/histogram/constants.js.map +1 -1
- package/dist/histogram/index.js +58 -51
- package/dist/histogram/index.js.map +1 -1
- package/dist/node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/index.js +1 -1
- package/dist/scatterplot/ChartRenderer.js +89 -89
- package/dist/scatterplot/ChartRenderer.js.map +1 -1
- package/dist/scatterplot/components/ChartAxis.js +30 -30
- package/dist/scatterplot/components/ChartAxis.js.map +1 -1
- package/dist/scatterplot/components/ChartAxisTitles.js +22 -22
- package/dist/scatterplot/components/ChartAxisTitles.js.map +1 -1
- package/dist/scatterplot/constants.d.ts +1 -1
- package/dist/scatterplot/constants.js +1 -1
- package/dist/scatterplot/constants.js.map +1 -1
- package/dist/scatterplot/dots.d.ts +1 -1
- package/dist/scatterplot/dots.js +14 -14
- package/dist/scatterplot/dots.js.map +1 -1
- package/dist/scatterplot/index.js +94 -79
- package/dist/scatterplot/index.js.map +1 -1
- package/dist/scatterplot-umap/ChartRenderer.d.ts +1 -1
- package/dist/scatterplot-umap/ChartRenderer.js +14 -14
- package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
- package/dist/scatterplot-umap/components/LowerSVG.js +38 -38
- package/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
- package/dist/types/bubble.d.ts +5 -5
- package/dist/types/bubble.js +40 -40
- package/dist/types/bubble.js.map +1 -1
- package/dist/types/common.d.ts +25 -2
- package/dist/types/common.js +16 -15
- package/dist/types/common.js.map +1 -1
- package/dist/types/discrete.d.ts +66 -56
- package/dist/types/discrete.js +40 -38
- package/dist/types/discrete.js.map +1 -1
- package/dist/types/heatmap.d.ts +5 -6
- package/dist/types/heatmap.js +29 -29
- package/dist/types/heatmap.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { s as
|
|
5
|
-
import { AbstractChart as
|
|
6
|
-
import { getUnknownErrorInfo as
|
|
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";
|
|
6
|
+
import { getUnknownErrorInfo as _, isErrorInfo as k } from "../types/common.js";
|
|
7
7
|
import "../types/discrete.js";
|
|
8
8
|
import "../types/scatterplot.js";
|
|
9
9
|
import "../types/heatmap.js";
|
|
@@ -11,42 +11,42 @@ import "../types/dendro.js";
|
|
|
11
11
|
import "../types/histogram.js";
|
|
12
12
|
import "../types/bubble.js";
|
|
13
13
|
import { arraysAreDifferent as b } from "../utils/arraysAreDifferent.js";
|
|
14
|
-
import { getKeysCombinations as
|
|
15
|
-
import
|
|
14
|
+
import { getKeysCombinations as S } from "../utils/getKeysCombination.js";
|
|
15
|
+
import j from "./ChartRenderer.js";
|
|
16
16
|
import { getDots as F } from "./dots.js";
|
|
17
|
-
import { getLayersData as
|
|
18
|
-
import { getRegressionData as
|
|
19
|
-
import { ScatterplotSettingsImpl as
|
|
20
|
-
import { createLegendInfo as
|
|
21
|
-
import { MAX_FACETS_COUNT as
|
|
17
|
+
import { getLayersData as N } from "./getLayersData.js";
|
|
18
|
+
import { getRegressionData as P } from "./linearRegression.js";
|
|
19
|
+
import { ScatterplotSettingsImpl as w } from "./ScatterplotSettingsImpl.js";
|
|
20
|
+
import { createLegendInfo as X, addPalettesToAesMapping as H } from "./utils/createLegendInfo.js";
|
|
21
|
+
import { MAX_FACETS_COUNT as I, MAX_GROUPS_COUNT as x } from "../constants.js";
|
|
22
22
|
function V(l) {
|
|
23
23
|
return typeof l == "object" && "type" in l && l.type === "grouping";
|
|
24
24
|
}
|
|
25
|
-
function
|
|
26
|
-
if (
|
|
27
|
-
const e =
|
|
28
|
-
return { keys: e, labels: e.reduce((a,
|
|
29
|
-
const i = (
|
|
30
|
-
return a[
|
|
25
|
+
function R(l, h, t) {
|
|
26
|
+
if (h.scale === "discrete") {
|
|
27
|
+
const e = h.keys ? h.keys : l.getColumnCategories(t.value);
|
|
28
|
+
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;
|
|
31
31
|
}, {}) };
|
|
32
32
|
}
|
|
33
33
|
return { keys: [], labels: {} };
|
|
34
34
|
}
|
|
35
|
-
class
|
|
35
|
+
class ut extends G {
|
|
36
36
|
constructor(t, e, a) {
|
|
37
37
|
super(t, e);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
m(this, "settings");
|
|
39
|
+
m(this, "chartRenderer");
|
|
40
|
+
m(this, "onTooltipHintSwitch", () => {
|
|
41
41
|
});
|
|
42
|
-
|
|
43
|
-
this.chartRenderer = new
|
|
42
|
+
m(this, "calculatedData", null);
|
|
43
|
+
this.chartRenderer = new j(), this.settings = new w(e), a && (this.onTooltipHintSwitch = a.onTooltipHintSwitch);
|
|
44
44
|
}
|
|
45
45
|
mount(t) {
|
|
46
46
|
try {
|
|
47
47
|
this.chartRenderer.init(t), this._updateData(), this._updateChart(), this.hasError = !1, this.errorInfo = null;
|
|
48
48
|
} catch (e) {
|
|
49
|
-
this.hasError = !0, e instanceof Error && (this.errorInfo =
|
|
49
|
+
this.hasError = !0, e instanceof Error && (this.errorInfo = k(e.cause) ? e.cause : _(e), this.chartRenderer.renderError(e.message), console.error(e));
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
unmount() {
|
|
@@ -54,86 +54,101 @@ class ht extends O {
|
|
|
54
54
|
}
|
|
55
55
|
updateSettingsAndData(t, e) {
|
|
56
56
|
try {
|
|
57
|
-
const a = this.settings,
|
|
58
|
-
this.settings = new
|
|
57
|
+
const a = this.settings, s = this.data;
|
|
58
|
+
this.settings = new w(e), this.data = t, this._needUpdateCalculatedDataBySettings(a, this.settings) || this._needUpdateCalculatedDataByData(s, this.data) ? this._updateData() : this._updateAesInData(), this._updateChart(), this.hasError = !1, this.errorInfo = null;
|
|
59
59
|
} catch (a) {
|
|
60
|
-
this.hasError = !0, console.error(a), a instanceof Error && (this.errorInfo =
|
|
60
|
+
this.hasError = !0, console.error(a), a instanceof Error && (this.errorInfo = k(a.cause) ? a.cause : _(a), this.chartRenderer.renderError(a.message), console.error(a));
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
updateChartState(t, e) {
|
|
64
64
|
console.warn("no chart state for scatterplot");
|
|
65
65
|
}
|
|
66
66
|
export() {
|
|
67
|
-
return this._updateChart(),
|
|
67
|
+
return this._updateChart(), U.renderToString(this.chartRenderer.component);
|
|
68
68
|
}
|
|
69
69
|
_needUpdateCalculatedDataBySettings(t, e) {
|
|
70
|
-
var a,
|
|
71
|
-
return t.facetBy.some((
|
|
72
|
-
var
|
|
73
|
-
return
|
|
70
|
+
var a, s, u, i;
|
|
71
|
+
return t.facetBy.some((o, n) => {
|
|
72
|
+
var c;
|
|
73
|
+
return o.value !== ((c = e.facetBy[n]) == null ? void 0 : c.value);
|
|
74
74
|
}) || t.grouping.length !== e.grouping.length || b(
|
|
75
|
-
t.grouping.map((
|
|
76
|
-
e.grouping.map((
|
|
77
|
-
) || t.grouping.some((
|
|
78
|
-
var
|
|
79
|
-
return b(
|
|
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) || ((
|
|
75
|
+
t.grouping.map((o) => o.columnName.value),
|
|
76
|
+
e.grouping.map((o) => o.columnName.value)
|
|
77
|
+
) || 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;
|
|
81
81
|
}
|
|
82
82
|
_needUpdateCalculatedDataByData(t, e) {
|
|
83
|
-
const a = Object.keys(t.data),
|
|
84
|
-
return t.id !== e.id || a.length !==
|
|
83
|
+
const a = Object.keys(t.data), s = Object.keys(e.data);
|
|
84
|
+
return t.id !== e.id || a.length !== s.length || a.some((u) => {
|
|
85
85
|
var i;
|
|
86
|
-
return t.data[
|
|
86
|
+
return t.data[u].length !== ((i = e.data[u]) == null ? void 0 : i.length);
|
|
87
87
|
});
|
|
88
88
|
}
|
|
89
89
|
_updateData() {
|
|
90
|
-
const { x: t, y: e, facetBy: a, grouping:
|
|
91
|
-
this.data.setGrouping([...
|
|
92
|
-
const
|
|
93
|
-
x: this.data.getColumn(t.value).every((
|
|
94
|
-
y: this.data.getColumn(e.value).every((
|
|
95
|
-
},
|
|
96
|
-
if (
|
|
97
|
-
const
|
|
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 = {
|
|
93
|
+
x: this.data.getColumn(t.value).every((r) => r === null || !(Number(r) < 0)),
|
|
94
|
+
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) {
|
|
97
|
+
const r = {
|
|
98
98
|
type: "tooManyFacets",
|
|
99
|
-
info: { count:
|
|
99
|
+
info: { count: f.length, maxCount: I }
|
|
100
100
|
};
|
|
101
|
-
throw Error(
|
|
101
|
+
throw Error(r.type, { cause: r });
|
|
102
102
|
}
|
|
103
|
-
const
|
|
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) {
|
|
105
|
+
const r = {
|
|
106
|
+
type: "tooManyScatterplotGroupsX",
|
|
107
|
+
info: { count: C.keys.length, maxCount: x }
|
|
108
|
+
};
|
|
109
|
+
throw Error(r.type, { cause: r });
|
|
110
|
+
}
|
|
111
|
+
if (A.keys.length > x) {
|
|
112
|
+
const r = {
|
|
113
|
+
type: "tooManyScatterplotGroupsY",
|
|
114
|
+
info: { count: A.keys.length, maxCount: x }
|
|
115
|
+
};
|
|
116
|
+
throw Error(r.type, { cause: r });
|
|
117
|
+
}
|
|
118
|
+
const K = X(this.data, s, i), T = N(this.data, i, f, D, d, E, c.xAxis, C);
|
|
104
119
|
this.calculatedData = {
|
|
105
|
-
onlyPositive:
|
|
120
|
+
onlyPositive: L,
|
|
106
121
|
dotsByFacets: D,
|
|
107
|
-
facetKeys:
|
|
108
|
-
facetKeysCombinations:
|
|
109
|
-
trendsData:
|
|
122
|
+
facetKeys: f,
|
|
123
|
+
facetKeysCombinations: y,
|
|
124
|
+
trendsData: M,
|
|
110
125
|
legendLabels: K,
|
|
111
|
-
layersData:
|
|
112
|
-
discreteAxisDataX:
|
|
113
|
-
discreteAxisDataY:
|
|
126
|
+
layersData: T,
|
|
127
|
+
discreteAxisDataX: C,
|
|
128
|
+
discreteAxisDataY: A
|
|
114
129
|
};
|
|
115
130
|
}
|
|
116
131
|
_updateAesInData() {
|
|
117
132
|
const t = this.calculatedData;
|
|
118
133
|
if (!t)
|
|
119
134
|
return;
|
|
120
|
-
const { grouping: e, trend: a, layers:
|
|
121
|
-
|
|
122
|
-
for (let n = 0; n <
|
|
123
|
-
t.layersData[
|
|
124
|
-
}), e.forEach(({ columnName:
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
g.aes && Object.entries(g.aes).forEach(([
|
|
128
|
-
V(d) && d.value ===
|
|
135
|
+
const { grouping: e, trend: a, layers: s } = this.settings, { facetKeys: u, trendsData: i } = t;
|
|
136
|
+
u.forEach((o) => {
|
|
137
|
+
for (let n = 0; n < s.length; n++)
|
|
138
|
+
t.layersData[o][n].info = s[n];
|
|
139
|
+
}), 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));
|
|
129
144
|
});
|
|
130
|
-
}), t.legendLabels[
|
|
131
|
-
|
|
145
|
+
}), t.legendLabels[o.value].usedAes = [...c], t.legendLabels[o.value].aesMap = H(
|
|
146
|
+
o,
|
|
132
147
|
p,
|
|
133
148
|
n
|
|
134
149
|
);
|
|
135
|
-
}), i && a && Object.keys(i).forEach((
|
|
136
|
-
i[
|
|
150
|
+
}), i && a && Object.keys(i).forEach((o) => {
|
|
151
|
+
i[o].forEach((n) => {
|
|
137
152
|
n.color = a.color, n.bounded = a.bounded;
|
|
138
153
|
});
|
|
139
154
|
});
|
|
@@ -141,7 +156,7 @@ class ht extends O {
|
|
|
141
156
|
_updateChart() {
|
|
142
157
|
if (!this.calculatedData)
|
|
143
158
|
return;
|
|
144
|
-
const { id: t, chartSettings: e, facetSettings: a, grouping:
|
|
159
|
+
const { id: t, chartSettings: e, facetSettings: a, grouping: s, keyColumn: u, layers: i, trend: o } = this.settings;
|
|
145
160
|
this.chartRenderer.render(
|
|
146
161
|
this.data,
|
|
147
162
|
t,
|
|
@@ -152,13 +167,13 @@ class ht extends O {
|
|
|
152
167
|
//for titles, if facet by more than 1 column
|
|
153
168
|
this.calculatedData.dotsByFacets,
|
|
154
169
|
this.calculatedData.trendsData,
|
|
155
|
-
|
|
170
|
+
u,
|
|
156
171
|
this.calculatedData.onlyPositive,
|
|
157
172
|
this.calculatedData.legendLabels,
|
|
158
173
|
this.calculatedData.layersData,
|
|
159
|
-
|
|
174
|
+
s.map((n) => n.columnName),
|
|
160
175
|
i,
|
|
161
|
-
|
|
176
|
+
o,
|
|
162
177
|
this.calculatedData.discreteAxisDataX,
|
|
163
178
|
this.calculatedData.discreteAxisDataY,
|
|
164
179
|
this.onTooltipHintSwitch
|
|
@@ -166,6 +181,6 @@ class ht extends O {
|
|
|
166
181
|
}
|
|
167
182
|
}
|
|
168
183
|
export {
|
|
169
|
-
|
|
184
|
+
ut as ChartScatterplot
|
|
170
185
|
};
|
|
171
186
|
//# 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 {\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 } 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);\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 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","legendLabels","createLegendInfo","layersData","getLayersData","calculated","facetKey","i","inheritedAes","usedAes","usedAesFromPalettes","layer","addPalettesToAesMapping","trendInfo","id","facetSettings","keyColumn"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAgCA,SAASA,EAA8CC,GAA6F;AAChJ,SAAO,OAAOA,KAAU,YAAY,UAAUA,KAASA,EAAM,SAAS;AAC1E;AAEA,SAASC,EAAoBC,GAAiBC,GAAoBC,GAAsC;AACpG,MAAID,EAAK,UAAU,YAAY;AAC3B,UAAME,IAAOF,EAAK,OAAOA,EAAK,OAAOD,EAAK,oBAAoBE,EAAO,KAAK;AAC1E,WAAO,EAAC,MAAAC,GAAM,QAAQA,EAAK,OAAO,CAACC,GAAKC,MAAM;AAE1C,YAAMC,KADYL,EAAK,UAAU,CAAA,GACJI,CAAC,MAAMH,EAAO,cAAcF,EAAK,eAAeE,EAAO,aAAaF,EAAK,0BAA0BE,EAAO,OAAOG,CAAa,CAAC,IAAIA;AAChK,aAAAD,EAAIC,CAAC,IAAI,OAAOC,CAAU,GACnBF;AAAA,IACX,GAAG,CAAA,CAA4B,EAAA;AAAA,EACnC;AACA,SAAO,EAAC,MAAM,IAAI,QAAQ,CAAA,EAAC;AAC/B;AAEO,MAAMG,WAAyBC,EAAc;AAAA,EAiBhD,YAAYR,GAAiBS,GAA+BC,GAAyC;AACjG,UAAMV,GAAMS,CAAQ;AAjBxB,IAAAE,EAAA;AACA,IAAAA,EAAA;AAEA,IAAAA,EAAA,6BAA2C,MAAA;AAAA;AAC3C,IAAAA,EAAA,wBAUW;AAKP,SAAK,gBAAgB,IAAIC,EAAA,GACzB,KAAK,WAAW,IAAIC,EAAwBJ,CAAQ,GAChDC,MACA,KAAK,sBAAsBA,EAAc;AAAA,EAEjD;AAAA,EAEA,MAAMI,GAAmB;AACrB,QAAI;AACA,WAAK,cAAc,KAAKA,CAAI,GAC5B,KAAK,YAAA,GACL,KAAK,aAAA,GACL,KAAK,WAAW,IAChB,KAAK,YAAY;AAAA,IACrB,SAASC,GAAK;AACV,WAAK,WAAW,IACZA,aAAe,UACf,KAAK,YAAYC,EAAYD,EAAI,KAAK,IAAIA,EAAI,QAAQE,EAAoBF,CAAG,GAC7E,KAAK,cAAc,YAAYA,EAAI,OAAiB,GACpD,QAAQ,MAAMA,CAAG;AAAA,IAEzB;AAAA,EACJ;AAAA,EAEA,UAAU;AACN,SAAK,cAAc,MAAA;AAAA,EACvB;AAAA,EAEA,sBAAsBf,GAAiBS,GAA+B;AAClE,QAAI;AACA,YAAMS,IAAmB,KAAK,UACxBC,IAAe,KAAK;AAC1B,WAAK,WAAW,IAAIN,EAAwBJ,CAAQ,GACpD,KAAK,OAAOT,GAER,KAAK,oCAAoCkB,GAAkB,KAAK,QAAQ,KACxE,KAAK,gCAAgCC,GAAc,KAAK,IAAI,IAE5D,KAAK,YAAA,IAEL,KAAK,iBAAA,GAET,KAAK,aAAA,GACL,KAAK,WAAW,IAChB,KAAK,YAAY;AAAA,IACrB,SAASJ,GAAK;AACV,WAAK,WAAW,IAChB,QAAQ,MAAMA,CAAG,GACbA,aAAe,UACf,KAAK,YAAYC,EAAYD,EAAI,KAAK,IAAIA,EAAI,QAAQE,EAAoBF,CAAG,GAC7E,KAAK,cAAc,YAAYA,EAAI,OAAiB,GACpD,QAAQ,MAAMA,CAAG;AAAA,IAEzB;AAAA,EACJ;AAAA,EAEA,iBAAiBK,GAAgBC,GAAiB;AAC9C,YAAQ,KAAK,gCAAgC;AAAA,EACjD;AAAA,EAEA,SAAiB;AACb,gBAAK,aAAA,GACEC,iBAAe,KAAK,cAAc,SAAS;AAAA,EACtD;AAAA,EAEA,oCAAoCC,GAAuCd,GAAmC;;AAC1G,WACIc,EAAa,QAAQ,KAAK,CAACC,GAAIC,MAAA;;AAAQ,aAAAD,EAAG,YAAUE,IAAAjB,EAAS,QAAQgB,CAAG,MAApB,gBAAAC,EAAuB;AAAA,KAAK,KAChFH,EAAa,SAAS,WAAWd,EAAS,SAAS,UACnDkB;AAAA,MACIJ,EAAa,SAAS,IAAI,CAAAlB,MAAKA,EAAE,WAAW,KAAK;AAAA,MACjDI,EAAS,SAAS,IAAI,CAAAJ,MAAKA,EAAE,WAAW,KAAK;AAAA,IAAA,KAEjDkB,EAAa,SAAS,KAAK,CAAClB,GAAGoB,MAAA;;AAAQ,aAAAE,EAAmBtB,EAAE,QAAOqB,IAAAjB,EAAS,aAAT,gBAAAiB,EAAoBD,GAAK,KAAK;AAAA,KAAC,KAClGE,EAAoBJ,EAAa,cAAc,MAA+B,MAAOd,EAAS,cAAc,MAA+B,IAAI,KAC/IkB,EAAoBJ,EAAa,cAAc,MAA+B,MAAOd,EAAS,cAAc,MAA+B,IAAI,QAC9IiB,IAAAH,EAAa,UAAb,gBAAAG,EAAoB,YAASE,IAAAnB,EAAS,UAAT,gBAAAmB,EAAgB,aAAUC,IAAAN,EAAa,UAAb,gBAAAM,EAAoB,aAAUC,IAAArB,EAAS,UAAT,gBAAAqB,EAAgB,UACtGP,EAAa,OAAO,WAAWd,EAAS,OAAO,UAC/Cc,EAAa,OAAO,KAAK,CAACQ,GAAGN,MAAQM,EAAE,SAAStB,EAAS,OAAOgB,CAAG,EAAE,IAAI,KACzE,EAAQF,EAAa,SAAW,EAAQd,EAAS;AAAA,EAEzD;AAAA,EAEA,gCAAgCuB,GAAqBhC,GAAiB;AAClE,UAAMiC,IAAW,OAAO,KAAKD,EAAS,IAAI,GACpC7B,IAAO,OAAO,KAAKH,EAAK,IAAI;AAClC,WACIgC,EAAS,OAAOhC,EAAK,MACrBiC,EAAS,WAAW9B,EAAK,UACzB8B,EAAS,KAAK;;AAAO,aAAAD,EAAS,KAAKE,CAAG,EAAE,aAAWR,IAAA1B,EAAK,KAAKkC,CAAG,MAAb,gBAAAR,EAAgB;AAAA,KAAM;AAAA,EAEjF;AAAA,EAEA,cAAc;AACV,UAAM,EAAC,GAAAS,GAAG,GAAAC,GAAG,SAAAC,GAAS,UAAAC,GAAU,OAAAC,GAAO,QAAAC,GAAQ,OAAAC,GAAO,WAAAC,GAAW,eAAAC,EAAA,IAAiB,KAAK,UACjFC,IAAiBP,EAAQ,IAAI,CAAAnC,MAAU,KAAK,KAAK,oBAAoBA,EAAO,KAAK,CAAC,EAAE,OAAO,CAAAG,MAAKA,EAAE,SAAS,CAAC,GAC5GwC,IAA4BP,EAAS,IAAI,CAAC,EAAC,YAAAQ,EAAA,MAAgB,KAAK,KAAK,oBAAoBA,EAAW,KAAK,CAAC,EAAE,OAAO,CAAAzC,MAAKA,EAAE,SAAS,CAAC,GAEpI0C,IAAwBH,EAAe,SACvCI,EAAoBJ,CAAc,IAClC,CAAC,CAAC,MAAM,CAAC,GACTK,IAA+BJ,EAA0B,SACzDG,EAAoBH,CAAyB,IAC7C,CAAC,CAAC,MAAM,CAAC,GAETK,IAAsBb,EAAQ,IAAI,CAAAnC,MAAUA,EAAO,KAAK,KAAK;AAEnE,SAAK,KAAK,YAAY,CAAC,GAAGgD,CAAmB,CAAC;AAC9C,UAAMC,IAAe;AAAA,MACjB,GAAG,KAAK,KAAK,UAAUhB,EAAE,KAAK,EAAE,MAAM,CAAA9B,MAC3BA,MAAM,QAAQ,EAAE,OAAOA,CAAC,IAAI,EACtC;AAAA,MACD,GAAG,KAAK,KAAK,UAAU+B,EAAE,KAAK,EAAE,MAAM,CAAA/B,MAC3BA,MAAM,QAAQ,EAAE,OAAOA,CAAC,IAAI,EACtC;AAAA,IAAA,GAGC+C,IAAkBd,EAAS,IAAI,CAAAjC,MAAKA,EAAE,UAAU,GAEhDgD,IAAeC,EAAQ,KAAK,MAAMP,GAAuBZ,GAAGC,GAAGK,GAAOC,GAAWJ,CAAQ,GACzFiB,IAAY,OAAO,KAAKF,CAAY;AAE1C,QAAIE,EAAU,SAASC,GAAkB;AACrC,YAAMC,IAA6B;AAAA,QAC/B,MAAM;AAAA,QACN,MAAM,EAAC,OAAOF,EAAU,QAAQ,UAAUC,EAAA;AAAA,MAAgB;AAE9D,YAAM,MAAMC,EAAU,MAAM,EAAC,OAAOA,GAAU;AAAA,IAClD;AAEA,UAAMC,IAAaC,EAAkB,KAAK,MAAMN,GAAcE,GAAWN,GAA8BG,GAAiBb,CAAK,GAEvHqB,IAAoB7D,EAAoB,KAAK,MAAM4C,EAAc,OAAOR,CAAC,GACzE0B,IAAoB9D,EAAoB,KAAK,MAAM4C,EAAc,OAAOP,CAAC,GACzE0B,IAAeC,EAAiB,KAAK,MAAMzB,GAAUE,CAAM,GAC3DwB,IAAaC,EAAc,KAAK,MAAMzB,GAAQe,GAAWF,GAAcJ,GAA8BG,GAAiBT,EAAc,OAAOiB,CAAiB;AAElK,SAAK,iBAAiB;AAAA,MAClB,cAAAT;AAAA,MACA,cAAAE;AAAA,MACA,WAAAE;AAAA,MACA,uBAAAR;AAAA,MACA,YAAAW;AAAA,MACA,cAAAI;AAAA,MACA,YAAAE;AAAA,MACA,mBAAAJ;AAAA,MACA,mBAAAC;AAAA,IAAA;AAAA,EAER;AAAA,EAEA,mBAAmB;AACf,UAAMK,IAAa,KAAK;AACxB,QAAI,CAACA;AACD;AAEJ,UAAM,EAAC,UAAA5B,GAAU,OAAAC,GAAO,QAAAC,EAAA,IAAU,KAAK,UACjC,EAAC,WAAAe,GAAW,YAAAG,EAAA,IAAcQ;AAEhC,IAAAX,EAAU,QAAQ,CAAAY,MAAY;AAC1B,eAASC,IAAI,GAAGA,IAAI5B,EAAO,QAAQ4B;AAC/B,QAAAF,EAAW,WAAWC,CAAQ,EAAEC,CAAC,EAAE,OAAO5B,EAAO4B,CAAC;AAAA,IAE1D,CAAC,GAED9B,EAAS,QAAQ,CAAC,EAAC,YAAAQ,GAAY,cAAAuB,QAAkB;AAC7C,YAAMC,wBAAc,IAAA,GACdC,IAAgE,CAAA;AACtE,MAAA/B,EAAO,QAAQ,CAAAgC,MAAS;AACpB,QAAIA,EAAM,OACN,OAAO,QAAQA,EAAM,GAAG,EAAE,QAAQ,CAAC,CAACtC,GAAKpC,CAAK,MAAM;AAChD,UAAID,EAAiBC,CAAK,KAAKA,EAAM,UAAUgD,EAAW,UACtDwB,EAAQ,IAAIpC,CAAoB,GAC5BpC,EAAM,YACNyE,EAAoBrC,CAAoB,IAAIpC,EAAM;AAAA,QAG9D,CAAC;AAAA,MAET,CAAC,GACDoE,EAAW,aAAapB,EAAW,KAAK,EAAE,UAAU,CAAC,GAAGwB,CAAO,GAC/DJ,EAAW,aAAapB,EAAW,KAAK,EAAE,SAAS2B;AAAA,QAC/C3B;AAAA,QACAyB;AAAA,QACAF;AAAA,MAAA;AAAA,IAER,CAAC,GACGX,KAAcnB,KACd,OAAO,KAAKmB,CAAU,EAAE,QAAQ,CAACxB,MAAQ;AACrC,MAAAwB,EAAWxB,CAAG,EAAE,QAAQ,CAAAwC,MAAa;AACjC,QAAAA,EAAU,QAAQnC,EAAM,OACxBmC,EAAU,UAAUnC,EAAM;AAAA,MAC9B,CAAC;AAAA,IACL,CAAC;AAAA,EAET;AAAA,EAEA,eAAe;AACX,QAAI,CAAC,KAAK;AACN;AAEJ,UAAM,EAAC,IAAAoC,GAAI,eAAAhC,GAAe,eAAAiC,GAAe,UAAAtC,GAAU,WAAAuC,GAAW,QAAArC,GAAQ,OAAAD,MAAS,KAAK;AACpF,SAAK,cAAc;AAAA,MACf,KAAK;AAAA,MACLoC;AAAA,MACAhC;AAAA,MACAiC;AAAA,MACA,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA;AAAA,MACpB,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpBC;AAAA,MACA,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpBvC,EAAS,IAAI,CAAAjC,MAAKA,EAAE,UAAU;AAAA,MAC9BmC;AAAA,MACAD;AAAA,MACA,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpB,KAAK;AAAA,IAAA;AAAA,EAEb;AACJ;"}
|
|
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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"}
|
|
@@ -51,7 +51,7 @@ declare class ChartRenderer {
|
|
|
51
51
|
updateViewport(xAxis: ScatterplotUmapSettingsImpl['chartSettings']['xAxis'], yAxis: ScatterplotUmapSettingsImpl['chartSettings']['yAxis'], dotsExtents: DotsExtents): void;
|
|
52
52
|
updateCaptionsSize(): void;
|
|
53
53
|
createMainTitle(title: ScatterplotUmapSettingsImpl['chartSettings']['title']): void;
|
|
54
|
-
updateMargins(): void;
|
|
54
|
+
updateMargins(xAxis: ScatterplotUmapSettingsImpl['chartSettings']['xAxis'], yAxis: ScatterplotUmapSettingsImpl['chartSettings']['yAxis']): void;
|
|
55
55
|
updateLegendSize(legend: ScatterplotUmapSettingsImpl['chartSettings']['legend'], legendLabels: ScatterplotUmapLegendInfo, grouping: ColumnName[], layers: ScatterplotUmapLayer[]): void;
|
|
56
56
|
initSettings(dots: Dot[], chartSettings: ScatterplotUmapSettingsImpl['chartSettings'], dotExtents: DotsExtents, legendInfo: ScatterplotUmapLegendInfo, layers: ScatterplotUmapSettingsImpl['layers'], grouping: ColumnName[]): void;
|
|
57
57
|
updateAes(legendInfo: ScatterplotUmapLegendInfo, layers: ScatterplotUmapSettingsImpl['layers']): void;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var k = Object.defineProperty;
|
|
2
2
|
var X = (f, t, e) => t in f ? k(f, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : f[t] = e;
|
|
3
3
|
var h = (f, t, e) => X(f, typeof t != "symbol" ? t + "" : t, e);
|
|
4
|
-
import { j as
|
|
4
|
+
import { j as C } from "../_virtual/jsx-runtime.js";
|
|
5
5
|
import K from "../node_modules/.pnpm/@d3fc_d3fc-chart@5.1.9_d3-array@3.2.4_d3-path@3.1.0_d3-scale-chromatic@3.1.0_d3-scale@4.0.2_d_kyhwsugamw24x7v3obvyiw5jfe/node_modules/@d3fc/d3fc-chart/src/cartesian.js";
|
|
6
6
|
import { seriesWebglPoint as Y, seriesSvgMulti as j, seriesWebglMulti as q } from "@d3fc/d3fc-series";
|
|
7
7
|
import $ from "../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/zoom.js";
|
|
@@ -62,7 +62,7 @@ class le {
|
|
|
62
62
|
h(this, "rootNode", null);
|
|
63
63
|
h(this, "canvasNode", null);
|
|
64
64
|
h(this, "svgLayerElement", null);
|
|
65
|
-
h(this, "svgLayerComponent", /* @__PURE__ */
|
|
65
|
+
h(this, "svgLayerComponent", /* @__PURE__ */ C.jsx(C.Fragment, {}));
|
|
66
66
|
h(this, "aesGetters", {
|
|
67
67
|
dotSize: () => 2,
|
|
68
68
|
dotFill: () => A,
|
|
@@ -171,12 +171,12 @@ class le {
|
|
|
171
171
|
20
|
|
172
172
|
);
|
|
173
173
|
}
|
|
174
|
-
updateMargins() {
|
|
175
|
-
const
|
|
174
|
+
updateMargins(t, e) {
|
|
175
|
+
const i = Z * this.mainTitle.length, l = i > 0 ? i + st * 2 : 0;
|
|
176
176
|
this.margins = {
|
|
177
|
-
top: Math.max(
|
|
178
|
-
bottom: L + this.captionsSizes.xAxisCaptionsWidth + _,
|
|
179
|
-
left: L + this.captionsSizes.yAxisCaptionsWidth + _,
|
|
177
|
+
top: Math.max(l, L),
|
|
178
|
+
bottom: L + (t.hiddenLabels ? 0 : this.captionsSizes.xAxisCaptionsWidth) + _,
|
|
179
|
+
left: L + (e.hiddenLabels ? 0 : this.captionsSizes.yAxisCaptionsWidth) + _,
|
|
180
180
|
right: this.legend.width + L
|
|
181
181
|
}, this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartWidth + this.margins.right, this.chartSizes.totalHeight = this.margins.top + Math.max(this.chartSizes.chartHeight, this.legend.height) + this.margins.bottom, N(this.canvasNode).style("width", this.chartSizes.chartWidth + "px").style("height", this.chartSizes.chartHeight + "px").style("top", this.margins.top + "px").style("left", this.margins.left + "px");
|
|
182
182
|
}
|
|
@@ -211,7 +211,7 @@ class le {
|
|
|
211
211
|
a.push({ ...c, id: "dotFill", type: "continuous", title: s, scale: o, tickPositionScale: v, values: z });
|
|
212
212
|
}
|
|
213
213
|
if (m.type === "dots" && R(m.aes.dotSize)) {
|
|
214
|
-
const { columnName: r, domain: n, range: g } = m.aes.dotSize, x = r.label ?? r.value, s = xt(n, g), o = s.ticks(3), v = s.tickFormat(3), z = o.reduce((
|
|
214
|
+
const { columnName: r, domain: n, range: g } = m.aes.dotSize, x = r.label ?? r.value, s = xt(n, g), o = s.ticks(3), v = s.tickFormat(3), z = o.reduce((b, F) => (b[String(F)] = v(F), b), {});
|
|
215
215
|
a.push({ ...c, id: r.value, type: "size", title: x, scale: s, values: o, labels: z });
|
|
216
216
|
}
|
|
217
217
|
}), !a.length) {
|
|
@@ -227,7 +227,7 @@ class le {
|
|
|
227
227
|
}
|
|
228
228
|
initSettings(t, e, i, l, a, c) {
|
|
229
229
|
const { xAxis: d, yAxis: p, size: u, title: y, legend: S } = e;
|
|
230
|
-
this.updateChartSizes(u), this.updateViewport(d, p, i), this.updateCaptionsSize(), this.updateLegendSize(S, l, c, a), this.createMainTitle(y), this.updateMargins(), this.aesGetters = B(this.dataFrame, l, a);
|
|
230
|
+
this.updateChartSizes(u), this.updateViewport(d, p, i), this.updateCaptionsSize(), this.updateLegendSize(S, l, c, a), this.createMainTitle(y), this.updateMargins(d, p), this.aesGetters = B(this.dataFrame, l, a);
|
|
231
231
|
const m = dt().data(t).value((s) => {
|
|
232
232
|
const o = W(this.aesGetters.dotFill(s.idx));
|
|
233
233
|
return o[3] = !s.dimmed && H(s.x, s.y, this.polygons) ? 1 : 0.4, G(o, o);
|
|
@@ -288,8 +288,8 @@ class le {
|
|
|
288
288
|
const i = (n = this.tools) == null ? void 0 : n.qt;
|
|
289
289
|
if (!i) return null;
|
|
290
290
|
const l = this.allDots, a = this.scales.x.invert(t), c = this.scales.y.invert(e), d = 1 / (((g = this.zoomTransform) == null ? void 0 : g.k) || 1), p = a - d, u = a + d, y = c - d, S = c + d, m = i.range(p, y, u, S), r = m.reduce((x, s) => {
|
|
291
|
-
const o = l[s], v = this.scales.x(o.x) - t, z = this.scales.y(o.y) - e,
|
|
292
|
-
return (x === null ||
|
|
291
|
+
const o = l[s], v = this.scales.x(o.x) - t, z = this.scales.y(o.y) - e, b = Math.hypot(v, z);
|
|
292
|
+
return (x === null || b < x.distance) && (x.index = s, x.distance = b), x;
|
|
293
293
|
}, {
|
|
294
294
|
index: -1,
|
|
295
295
|
distance: 1 / 0
|
|
@@ -313,7 +313,7 @@ class le {
|
|
|
313
313
|
);
|
|
314
314
|
else {
|
|
315
315
|
const { title: g, legend: x, size: s } = i;
|
|
316
|
-
this.updateChartSizes(s), this.updateLegendSize(x, u, y, p), this.createMainTitle(g), this.updateMargins(), this.updateAes(u, p);
|
|
316
|
+
this.updateChartSizes(s), this.updateLegendSize(x, u, y, p), this.createMainTitle(g), this.updateMargins(i.xAxis, i.yAxis), this.updateAes(u, p);
|
|
317
317
|
}
|
|
318
318
|
this.onPolygonUpdateOutside = S, this.onTooltipHintSwitch = m, this.onLassoControlsStateUpdate = r, this.allDots !== a ? (this.updateDots(a), this.visibleLabels = this.computeLabels(a)) : n && (this.visibleLabels = this.computeLabels(a)), this.notCalculatedProps = {
|
|
319
319
|
settingsId: e,
|
|
@@ -351,11 +351,11 @@ class le {
|
|
|
351
351
|
onTooltipHintSwitch: this.onTooltipHintSwitch,
|
|
352
352
|
onLassoControlsStateUpdate: this.onLassoControlsStateUpdate
|
|
353
353
|
};
|
|
354
|
-
this.svgLayerComponent = /* @__PURE__ */
|
|
354
|
+
this.svgLayerComponent = /* @__PURE__ */ C.jsx(gt, { dataFrame: this.dataFrame, children: /* @__PURE__ */ C.jsx(ht, { ...t }) }), (e = this.reactRoot) == null || e.render(this.svgLayerComponent);
|
|
355
355
|
}
|
|
356
356
|
renderError(t) {
|
|
357
357
|
var e;
|
|
358
|
-
(e = this.reactRoot) == null || e.render(/* @__PURE__ */
|
|
358
|
+
(e = this.reactRoot) == null || e.render(/* @__PURE__ */ C.jsx(J, { message: t }));
|
|
359
359
|
}
|
|
360
360
|
computeLabels(t) {
|
|
361
361
|
const e = new I("16px Manrope"), i = nt(this.chartSizes.chartWidth, this.chartSizes.chartHeight), l = [];
|