@milaboratories/miplots4 1.0.162 → 1.0.164
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 +5 -2
- package/dist/_virtual/index10.js.map +1 -1
- package/dist/_virtual/index5.js +2 -5
- 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/fillCellsData.js +49 -46
- package/dist/heatmap/fillCellsData.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 +4 -4
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var g = (e, t, i) =>
|
|
1
|
+
var j = Object.defineProperty;
|
|
2
|
+
var G = (e, t, i) => t in e ? j(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i;
|
|
3
|
+
var g = (e, t, i) => G(e, typeof t != "symbol" ? t + "" : t, i);
|
|
4
4
|
import { j as A } from "../_virtual/jsx-runtime.js";
|
|
5
|
-
import { c as
|
|
6
|
-
import { Error as
|
|
7
|
-
import { DataFrameProvider as
|
|
8
|
-
import { DEFAULT_HEIGHT as w, DEFAULT_WIDTH as N, TITLE_LINE_HEIGHT as
|
|
9
|
-
import { splitTextByWidth as
|
|
10
|
-
import {
|
|
5
|
+
import { c as Y } from "../_virtual/client.js";
|
|
6
|
+
import { Error as O } from "../common/Error.js";
|
|
7
|
+
import { DataFrameProvider as P } from "../common/useDataFrame.js";
|
|
8
|
+
import { DEFAULT_HEIGHT as w, DEFAULT_WIDTH as N, TITLE_LINE_HEIGHT as U, TITLE_MARGIN as V } from "../constants.js";
|
|
9
|
+
import { splitTextByWidth as _ } from "../utils/splitTextByWidth.js";
|
|
10
|
+
import { DEFAULT_COMMON_AES as X, LEGEND_OFFSET as B } from "../scatterplot/constants.js";
|
|
11
11
|
import { getTicksAndFormat as Z } from "../scatterplot/utils/getTicksAndFormat.js";
|
|
12
12
|
import { arrangeLegendParts as k } from "../utils/arrangeLegendParts.js";
|
|
13
13
|
import { getContinuousColorScale as q } from "../utils/getContinuousColorScale.js";
|
|
14
14
|
import { TextMeasurer as J } from "../utils/TextMeasurer/TextMeasurer.js";
|
|
15
15
|
import { ChartsGroup as Q } from "./components/ChartsGroup.js";
|
|
16
|
-
import { MIN_MARGIN as H,
|
|
17
|
-
import
|
|
16
|
+
import { MIN_MARGIN as H, TICK_OFFSET as I, DEFAULT_TICKS_SIZE as R, MIN_PADDING as b, FACET_TITLE_OFFSET as $, FACET_TITLE_LINE as y, TITLE_LINE as K } from "./constants.js";
|
|
17
|
+
import W from "../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/linear.js";
|
|
18
18
|
import F from "../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/symlog.js";
|
|
19
19
|
import tt from "../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/ordinal.js";
|
|
20
20
|
function it(e, t, i, o) {
|
|
@@ -22,12 +22,12 @@ function it(e, t, i, o) {
|
|
|
22
22
|
return e % i === i - 1 && s.push("right"), e % i === 0 && s.push("left"), e < i && s.push("top"), (Math.ceil((e + 1) / i) === o || Math.ceil((e + 1) / i) === o - 1 && e % i > (t - 1) % i) && s.push("bottom"), s;
|
|
23
23
|
}
|
|
24
24
|
function st(e, t, i, o, s, h, d, n) {
|
|
25
|
-
const r = h.includes("left") || !(n != null && n.sharedY), u = h.includes("bottom") || !(n != null && n.sharedX), C = h.includes("bottom") && e.title !== "", a = i.yAxisCaptionsWidth, x = (t.showTicks ?
|
|
25
|
+
const r = h.includes("left") || !(n != null && n.sharedY), u = h.includes("bottom") || !(n != null && n.sharedX), C = h.includes("bottom") && e.title !== "", a = i.yAxisCaptionsWidth + 2 * I, x = (t.showTicks ? R : 0) + (t.hiddenLabels ? 0 : I), p = i.xAxisCaptionsWidth + 2 * I, E = (e.showTicks ? R : 0) + (e.hiddenLabels ? 0 : I), m = C ? K : 0, c = a + x, l = E + p + m, f = Math.max(...o.map((T) => s[T].length));
|
|
26
26
|
return {
|
|
27
|
-
left: r ?
|
|
28
|
-
top:
|
|
29
|
-
bottom: u ?
|
|
30
|
-
right: d ? 0 :
|
|
27
|
+
left: r ? c : b,
|
|
28
|
+
top: f === 0 ? 0 : $ * 2 + f * y,
|
|
29
|
+
bottom: u ? l + 8 : b,
|
|
30
|
+
right: d ? 0 : b
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
33
|
function et(e, t, i) {
|
|
@@ -40,7 +40,7 @@ function ot(e, t) {
|
|
|
40
40
|
const i = Math.floor(e / t), o = e - i * t;
|
|
41
41
|
return [i, o];
|
|
42
42
|
}
|
|
43
|
-
function
|
|
43
|
+
function v(e) {
|
|
44
44
|
return typeof e == "object" && e !== null && "type" in e && "value" in e && e.type === "grouping";
|
|
45
45
|
}
|
|
46
46
|
function nt(e) {
|
|
@@ -53,9 +53,9 @@ function ht(e, t, i, o) {
|
|
|
53
53
|
const { domain: r = o, range: u, type: C = "linear" } = s, a = q(u, r, C);
|
|
54
54
|
return a.clamp(!0), a(d);
|
|
55
55
|
}
|
|
56
|
-
if (
|
|
56
|
+
if (v(s)) {
|
|
57
57
|
const r = s.value, u = t[r];
|
|
58
|
-
return (n = (u == null ? void 0 : u[String(e.getColumnValue(r, h))]) ??
|
|
58
|
+
return (n = (u == null ? void 0 : u[String(e.getColumnValue(r, h))]) ?? X) == null ? void 0 : n[i];
|
|
59
59
|
}
|
|
60
60
|
return s;
|
|
61
61
|
};
|
|
@@ -90,8 +90,8 @@ class wt {
|
|
|
90
90
|
g(this, "columnsCount", 1);
|
|
91
91
|
g(this, "rowsCount", 1);
|
|
92
92
|
g(this, "scales", {
|
|
93
|
-
x: { null:
|
|
94
|
-
y: { null:
|
|
93
|
+
x: { null: W().domain([0, 10]).range([0, N]) },
|
|
94
|
+
y: { null: W().domain([0, 10]).range([w, 0]) }
|
|
95
95
|
});
|
|
96
96
|
g(this, "captionsSizes", {
|
|
97
97
|
xAxisCaptionsWidth: 30,
|
|
@@ -115,7 +115,7 @@ class wt {
|
|
|
115
115
|
});
|
|
116
116
|
}
|
|
117
117
|
init(t) {
|
|
118
|
-
this.parentNode === null && (this.parentNode = t, this.rootNode = document.createElement("div"), this.parentNode.appendChild(this.rootNode), this.reactRoot =
|
|
118
|
+
this.parentNode === null && (this.parentNode = t, this.rootNode = document.createElement("div"), this.parentNode.appendChild(this.rootNode), this.reactRoot = Y.createRoot(this.rootNode));
|
|
119
119
|
}
|
|
120
120
|
updateChartSizes(t) {
|
|
121
121
|
this.chartSizes.chartWidth = t.width, this.chartSizes.chartHeight = t.height;
|
|
@@ -124,24 +124,24 @@ class wt {
|
|
|
124
124
|
const { chartWidth: h, chartHeight: d } = this.chartSizes;
|
|
125
125
|
let n = 0, r = 0;
|
|
126
126
|
this.chartsDimensions = t.reduce((a, x, p) => {
|
|
127
|
-
const [E,
|
|
127
|
+
const [E, m] = ot(p, this.columnsCount), c = it(p, t.length, this.columnsCount, this.rowsCount), l = st(
|
|
128
128
|
o,
|
|
129
129
|
s,
|
|
130
130
|
this.captionsSizes,
|
|
131
131
|
et(t, this.rowsCount, this.columnsCount)[E],
|
|
132
132
|
this.facetTitles,
|
|
133
|
-
|
|
134
|
-
|
|
133
|
+
c,
|
|
134
|
+
m === this.columnsCount - 1,
|
|
135
135
|
i
|
|
136
|
-
),
|
|
136
|
+
), f = h + l.left + l.right, T = d + l.top + l.bottom;
|
|
137
137
|
return a[x] = {
|
|
138
138
|
left: n,
|
|
139
139
|
top: r,
|
|
140
|
-
chartEdgeSides:
|
|
141
|
-
padding:
|
|
140
|
+
chartEdgeSides: c,
|
|
141
|
+
padding: l,
|
|
142
142
|
inner: { width: h, height: d },
|
|
143
|
-
outer: { width:
|
|
144
|
-
}, n +=
|
|
143
|
+
outer: { width: f, height: T }
|
|
144
|
+
}, n += f, m === this.columnsCount - 1 && (n = 0, r += T), a;
|
|
145
145
|
}, {});
|
|
146
146
|
const u = Math.max(
|
|
147
147
|
...t.map((a) => this.chartsDimensions[a].outer.width + this.chartsDimensions[a].left)
|
|
@@ -154,21 +154,21 @@ class wt {
|
|
|
154
154
|
const r = t.length, u = Math.min(i.nRows ?? r, r), C = Math.min(i.nCols ?? r, r);
|
|
155
155
|
this.columnsCount = i.nRows ? Math.ceil(r / u) : C, this.rowsCount = Math.ceil(r / this.columnsCount);
|
|
156
156
|
let [a, x] = [1 / 0, -1 / 0], p = -1 / 0;
|
|
157
|
-
const E = t.reduce((
|
|
158
|
-
const
|
|
159
|
-
return a = Math.min(a,
|
|
157
|
+
const E = t.reduce((m, c) => {
|
|
158
|
+
const l = h[c], { minX: f, maxX: T, maxCount: z, maxCountFromGroups: M } = l;
|
|
159
|
+
return a = Math.min(a, f), x = Math.max(x, T), p = Math.max(p, n === "vertical" ? z : M), m[c] = { minX: f, maxX: T, maxY: n === "vertical" ? z : M }, m;
|
|
160
160
|
}, {});
|
|
161
|
-
t.forEach((
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
}), t.forEach((
|
|
165
|
-
const
|
|
161
|
+
t.forEach((m) => {
|
|
162
|
+
const c = o.scale === "log" ? F() : W(), l = E[m], f = i.sharedX ? a : l.minX, T = i.sharedX ? x : l.maxX;
|
|
163
|
+
c.domain([f, T]).range([0, this.chartSizes.chartWidth]), this.scales.x[m] = c;
|
|
164
|
+
}), t.forEach((m) => {
|
|
165
|
+
const c = s.scale === "log" ? F() : W(), l = E[m], f = 0, T = i.sharedY ? p : l.maxY, z = [this.chartSizes.chartHeight, 0], M = c.copy().domain([f, T]).range([
|
|
166
166
|
this.chartSizes.chartHeight,
|
|
167
167
|
d.innerOffset
|
|
168
168
|
]);
|
|
169
|
-
|
|
169
|
+
c.domain([M.invert(this.chartSizes.chartHeight), M.invert(0)]).range(
|
|
170
170
|
z
|
|
171
|
-
), this.scales.y[
|
|
171
|
+
), this.scales.y[m] = c;
|
|
172
172
|
});
|
|
173
173
|
}
|
|
174
174
|
updateCaptionsSize(t, i) {
|
|
@@ -187,14 +187,14 @@ class wt {
|
|
|
187
187
|
}
|
|
188
188
|
createMainTitle(t, i) {
|
|
189
189
|
const o = this.chartsDimensions[t[0]], s = this.chartsDimensions[t[t.length - 1]];
|
|
190
|
-
this.mainTitle =
|
|
190
|
+
this.mainTitle = _(
|
|
191
191
|
i.name,
|
|
192
192
|
this.chartSizes.chartsWidth - o.padding.left - s.padding.right,
|
|
193
193
|
20
|
|
194
194
|
);
|
|
195
195
|
}
|
|
196
196
|
createFacetTitles(t, i) {
|
|
197
|
-
this.facetTitles = t.reduce((o, s, h) => (i[h].length === 1 && i[h][0] === "null" ? o[s] = [] : o[s] =
|
|
197
|
+
this.facetTitles = t.reduce((o, s, h) => (i[h].length === 1 && i[h][0] === "null" ? o[s] = [] : o[s] = _(i[h].join(", "), this.chartSizes.chartWidth, 14), o), {});
|
|
198
198
|
}
|
|
199
199
|
updateLegendSize(t, i, o, s) {
|
|
200
200
|
if (!t.show) {
|
|
@@ -203,15 +203,18 @@ class wt {
|
|
|
203
203
|
}
|
|
204
204
|
const h = [], d = { width: 0, height: 0, left: 0, top: 0 };
|
|
205
205
|
if (s.forEach((a) => {
|
|
206
|
-
if (
|
|
207
|
-
const x = a.aes.fillColor.value, p = i[o.value], E = o.label ?? o.value,
|
|
208
|
-
|
|
206
|
+
if (v(a.aes.fillColor) && o) {
|
|
207
|
+
const x = a.aes.fillColor.value, p = i[o.value], E = o.label ?? o.value, m = tt().domain(p.values).range(p.values.map((c) => {
|
|
208
|
+
var l;
|
|
209
|
+
return ((l = p.aesMap[c]) == null ? void 0 : l.fillColor) ?? X.fillColor;
|
|
210
|
+
}));
|
|
211
|
+
h.push({ ...d, id: x, type: "discreteColor", title: E, scale: m, values: p.values, labels: p.labels });
|
|
209
212
|
}
|
|
210
213
|
}), !h.length) {
|
|
211
214
|
this.legend = { width: 0, height: 0, items: [] };
|
|
212
215
|
return;
|
|
213
216
|
}
|
|
214
|
-
const n = k(h, this.chartSizes.chartHeight), r = n[n.length - 1], u = r.left + r.width +
|
|
217
|
+
const n = k(h, this.chartSizes.chartHeight), r = n[n.length - 1], u = r.left + r.width + B, C = this.chartSizes.chartHeight;
|
|
215
218
|
this.legend = {
|
|
216
219
|
width: u,
|
|
217
220
|
height: C,
|
|
@@ -219,7 +222,7 @@ class wt {
|
|
|
219
222
|
};
|
|
220
223
|
}
|
|
221
224
|
updateMargins(t) {
|
|
222
|
-
const i =
|
|
225
|
+
const i = U * this.mainTitle.length, o = i > 0 ? i + V * 2 : 0, s = t.outerOffset;
|
|
223
226
|
this.margins = {
|
|
224
227
|
top: Math.max(o, s),
|
|
225
228
|
bottom: s,
|
|
@@ -228,10 +231,10 @@ class wt {
|
|
|
228
231
|
}, this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartsWidth + this.margins.right, this.chartSizes.totalHeight = this.margins.top + this.chartSizes.chartsHeight + this.margins.bottom;
|
|
229
232
|
}
|
|
230
233
|
render(t, i, o, s, h, d, n, r, u, C, a, x, p, E) {
|
|
231
|
-
var
|
|
232
|
-
const { xAxis:
|
|
233
|
-
this.updateChartSizes(
|
|
234
|
-
const
|
|
234
|
+
var D;
|
|
235
|
+
const { xAxis: m, yAxis: c, size: l, title: f } = o;
|
|
236
|
+
this.updateChartSizes(l), this.updateViewport(h, s, m, c, n, l, x), this.updateCaptionsSize(m, c), this.createFacetTitles(h, d), this.updateChartDimensions(h, s, m, c), this.createMainTitle(h, f), this.updateLegendSize(o.legend, r, a, u), this.updateMargins(l);
|
|
237
|
+
const T = h.reduce((L, S) => Math.min(L, n[S].minX), 1 / 0), z = h.reduce((L, S) => Math.max(L, n[S].maxX), -1 / 0), M = /* @__PURE__ */ A.jsx(P, { dataFrame: t, children: /* @__PURE__ */ A.jsx(
|
|
235
238
|
Q,
|
|
236
239
|
{
|
|
237
240
|
settingsId: i,
|
|
@@ -248,7 +251,7 @@ class wt {
|
|
|
248
251
|
captionsSizes: this.captionsSizes,
|
|
249
252
|
histogramDataByFacets: n,
|
|
250
253
|
layers: u,
|
|
251
|
-
aesColorGetter: ht(t, C, "fillColor", [
|
|
254
|
+
aesColorGetter: ht(t, C, "fillColor", [T, z]),
|
|
252
255
|
groupingDirection: p,
|
|
253
256
|
groupingStack: x,
|
|
254
257
|
groupingLabels: a ? r[a.value].labels : {},
|
|
@@ -256,11 +259,11 @@ class wt {
|
|
|
256
259
|
onTooltipHintSwitch: E
|
|
257
260
|
}
|
|
258
261
|
) });
|
|
259
|
-
this.component = M, (
|
|
262
|
+
this.component = M, (D = this.reactRoot) == null || D.render(M);
|
|
260
263
|
}
|
|
261
264
|
renderError(t) {
|
|
262
265
|
var i;
|
|
263
|
-
(i = this.reactRoot) == null || i.render(/* @__PURE__ */ A.jsx(
|
|
266
|
+
(i = this.reactRoot) == null || i.render(/* @__PURE__ */ A.jsx(O, { message: t }));
|
|
264
267
|
}
|
|
265
268
|
}
|
|
266
269
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartRenderer.js","sources":["../../src/histogram/ChartRenderer.tsx"],"sourcesContent":["import type { ScaleLogarithmic, ScaleOrdinal } from 'd3-scale';\nimport { scaleLinear, scaleOrdinal, scaleSymlog } from 'd3-scale';\nimport type { ReactElement } from 'react';\nimport type { Root } from 'react-dom/client';\nimport { createRoot } from 'react-dom/client';\nimport { Error } from '../common/Error';\nimport type { LegendData, LegendItem } from '../common/types';\nimport { DataFrameProvider } from '../common/useDataFrame';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, TITLE_LINE_HEIGHT, TITLE_MARGIN } from '../constants';\nimport type { DataFrame, RowIndex } from '../DataFrame';\nimport { splitTextByWidth } from '../discrete/utils';\nimport { DEFAULT_COMMON_AES, LEGEND_OFFSET } from '../scatterplot/constants';\nimport { getTicksAndFormat } from '../scatterplot/utils/getTicksAndFormat';\nimport type { AesItem, ColumnName, ContinuousAesHistogram, InheritAesHistogram } from '../types';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport { getContinuousColorScale } from '../utils/getContinuousColorScale';\nimport { TextMeasurer } from '../utils/TextMeasurer/TextMeasurer';\nimport { ChartsGroup } from './components/ChartsGroup';\nimport type { CaptionsSizes, ChartDimensionsData, ChartScales, ChartSizes, ChartsScales, HistogramLegendInfo, Margins } from './components/types';\nimport {\n DEFAULT_TICKS_SIZE, FACET_TITLE_LINE, FACET_TITLE_OFFSET,\n MIN_MARGIN,\n MIN_PADDING,\n TICK_OFFSET,\n TITLE_LINE\n} from './constants';\nimport type { GroupedHistogramData } from './getHistogramData';\nimport type { HistogramLayer, HistogramSettingsImpl } from './HistogramSettingsImpl';\n\nfunction getChartEdgeSides(index: number, facetsCount: number, columnsCount: number, rowsCount: number) {\n const chartSides: ('left' | 'right' | 'top' | 'bottom')[] = [];\n if (index % columnsCount === columnsCount - 1) {\n chartSides.push('right');\n }\n if (index % columnsCount === 0) {\n chartSides.push('left');\n }\n if (index < columnsCount) {\n chartSides.push('top');\n }\n if (\n Math.ceil((index + 1) / columnsCount) === rowsCount ||\n (Math.ceil((index + 1) / columnsCount) === rowsCount - 1 &&\n index % columnsCount > (facetsCount - 1) % columnsCount)\n ) {\n chartSides.push('bottom');\n }\n return chartSides;\n}\n\nfunction calculatePaddings(\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'],\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis'],\n captionsSizes: CaptionsSizes,\n currentRowFacetKeys: string[],\n facetTitles: Record<string, string[]>,\n chartEdgeSides: ('left' | 'right' | 'top' | 'bottom')[],\n lastInRow: boolean,\n facetSettings?: HistogramSettingsImpl['facetSettings']\n) {\n const needLeftAxis = chartEdgeSides.includes('left') || !facetSettings?.sharedY;\n const needBottomAxis = chartEdgeSides.includes('bottom') || !facetSettings?.sharedX;\n const needBottomAxisTitle = chartEdgeSides.includes('bottom') && xAxis.title !== '';\n\n const yCaptions = captionsSizes.yAxisCaptionsWidth;\n const yTicks = (yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + (yAxis.hiddenLabels ? 0 : TICK_OFFSET);\n\n const xCaptions = captionsSizes.xAxisCaptionsWidth;\n const xTicks = (xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + (xAxis.hiddenLabels ? 0 : TICK_OFFSET);\n const xAxisTitle = needBottomAxisTitle ? TITLE_LINE : 0;\n\n const leftAxisElements = yCaptions + yTicks;\n const bottomAxisElements = xTicks + xCaptions + xAxisTitle;\n\n const facetTitlesLinesCount = Math.max(...currentRowFacetKeys.map(key => facetTitles[key].length));\n return {\n left: needLeftAxis ? leftAxisElements : MIN_PADDING,\n top: facetTitlesLinesCount === 0 ? 0 : FACET_TITLE_OFFSET * 2 + facetTitlesLinesCount * FACET_TITLE_LINE,\n bottom: needBottomAxis ? bottomAxisElements : MIN_PADDING,\n right: lastInRow ? 0 : MIN_PADDING,\n };\n}\n\n// facet keys grouped by rows\nfunction getFacetRows(facetKeys: string[], nRows: number, nColumns: number): string[][] {\n const result: string[][] = [];\n for (let i = 0; i < nRows; i++) {\n result.push(facetKeys.slice(i * nColumns, i * nColumns + nColumns));\n }\n return result;\n}\n\nfunction getRowColumn(idx: number, columnsCount: number) {\n const row = Math.floor(idx / columnsCount);\n const column = idx - row * columnsCount;\n return [row, column];\n}\n\nfunction isInheritedAes(v: InheritAesHistogram | unknown): v is InheritAesHistogram {\n return typeof v === 'object' && v !== null && 'type' in v && 'value' in v && v.type === 'grouping';\n}\nfunction isContinuousAes(v: ContinuousAesHistogram | unknown): v is ContinuousAesHistogram {\n return typeof v === 'object' && v !== null && 'range' in v;\n}\nfunction createAesGetter(dataFrame: DataFrame, aesData: HistogramSettingsImpl['inheritedAes'], field: keyof AesItem, defaultDomain:number[]) {\n return function (aesItem: string | InheritAesHistogram | ContinuousAesHistogram, idx: RowIndex, height:number) {\n if (isContinuousAes(aesItem)) {\n const {domain = defaultDomain, range, type = 'linear'} = aesItem;\n const scale = getContinuousColorScale(range as string[], domain, type);\n scale.clamp(true);\n return scale(height);\n }\n if (isInheritedAes(aesItem)) {\n const columnId = aesItem.value;\n const mapping = aesData[columnId];\n return (mapping?.[String(dataFrame.getColumnValue(columnId, idx))] ?? DEFAULT_COMMON_AES)?.[field] as string;\n }\n return aesItem;\n };\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n component: ReactElement = (<></>);\n margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n chartsDimensions: Record<string, ChartDimensionsData> = {};\n chartSizes: ChartSizes = {\n chartWidth: DEFAULT_WIDTH, // width of single chart\n chartHeight: DEFAULT_HEIGHT, // height of single chart\n chartsWidth: DEFAULT_WIDTH, // width of all charts in charts row\n chartsHeight: DEFAULT_HEIGHT, // width of all charts in charts column, without axes\n totalWidth: DEFAULT_WIDTH, // width of all charts in charts row, plus left axis, plus legend\n totalHeight: DEFAULT_HEIGHT, // width of all charts in charts height, plus bottom axis, plus top title\n };\n columnsCount = 1;\n rowsCount = 1;\n scales: ChartsScales = {\n x: {null: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH])},\n y: {null: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0])},\n };\n captionsSizes: CaptionsSizes = {\n xAxisCaptionsWidth: 30,\n yAxisCaptionsWidth: 100,\n };\n facetTitles: Record<string, string[]> = {}; // can be multiline\n mainTitle: string[] = []; // can be multiline\n legend: LegendData = {\n width: 0,\n height: 0,\n items: [],\n };\n\n clear() {\n if (this.parentNode && this.rootNode) {\n this.parentNode?.removeChild(this.rootNode);\n this.parentNode = null;\n this.rootNode = null;\n }\n // timeout to avoid trying to unmount during rendering\n setTimeout(() => {\n this.reactRoot?.unmount();\n this.reactRoot = null;\n });\n }\n\n init(node: HTMLElement) {\n if (this.parentNode === null) {\n this.parentNode = node;\n this.rootNode = document.createElement('div');\n this.parentNode.appendChild(this.rootNode);\n this.reactRoot = createRoot(this.rootNode);\n }\n }\n\n updateChartSizes(size: HistogramSettingsImpl['chartSettings']['size']) {\n this.chartSizes.chartWidth = size.width;\n this.chartSizes.chartHeight = size.height;\n }\n\n updateChartDimensions(\n facetKeys: string[],\n facetSettings: HistogramSettingsImpl['facetSettings'],\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'],\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis']\n ) {\n const {chartWidth, chartHeight} = this.chartSizes;\n let currentLeft = 0;\n let currentTop = 0;\n this.chartsDimensions = facetKeys.reduce((res: Record<string, ChartDimensionsData>, key: string, index) => {\n const [currentRow, currentColumn] = getRowColumn(index, this.columnsCount);\n const chartEdgeSides = getChartEdgeSides(index, facetKeys.length, this.columnsCount, this.rowsCount);\n const padding = calculatePaddings(\n xAxis,\n yAxis,\n this.captionsSizes,\n getFacetRows(facetKeys, this.rowsCount, this.columnsCount)[currentRow],\n this.facetTitles,\n chartEdgeSides,\n currentColumn === this.columnsCount - 1,\n facetSettings\n );\n const outerWidth = chartWidth + padding.left + padding.right;\n const outerHeight = chartHeight + padding.top + padding.bottom;\n res[key] = {\n left: currentLeft,\n top: currentTop,\n chartEdgeSides,\n padding,\n inner: {width: chartWidth, height: chartHeight},\n outer: {width: outerWidth, height: outerHeight},\n };\n currentLeft += outerWidth;\n if (currentColumn === this.columnsCount - 1) {\n currentLeft = 0;\n currentTop += outerHeight;\n }\n return res;\n }, {});\n\n const chartsWidth = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.width + this.chartsDimensions[key].left)\n );\n const chartsHeight = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.height + this.chartsDimensions[key].top)\n );\n this.chartSizes.chartsWidth = chartsWidth;\n this.chartSizes.chartsHeight = chartsHeight;\n }\n\n updateViewport(\n facetKeys: string[],\n facetSettings: HistogramSettingsImpl['facetSettings'],\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'],\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis'],\n histogramDataByFacets: Record<string, GroupedHistogramData>,\n size: HistogramSettingsImpl['chartSettings']['size'],\n groupingStack: HistogramSettingsImpl['groupingStack'],\n ) {\n const facetCount = facetKeys.length;\n const maxNRows = Math.min(facetSettings.nRows ?? facetCount, facetCount);\n const maxNCols = Math.min(facetSettings.nCols ?? facetCount, facetCount);\n // Use columns/rows count from settings if some of them defined, else make 1 column\n this.columnsCount = facetSettings.nRows ? Math.ceil(facetCount / maxNRows) : maxNCols;\n this.rowsCount = Math.ceil(facetCount / this.columnsCount);\n\n let [minXAll, maxXAll] = [Infinity, -Infinity];\n let maxYAll = -Infinity;\n const histogramExtentsByKeys = facetKeys.reduce((res: Record<string, Record<string, number>>, key) => {\n const histogramData = histogramDataByFacets[key];\n const {minX, maxX, maxCount, maxCountFromGroups} = histogramData;\n minXAll = Math.min(minXAll, minX);\n maxXAll = Math.max(maxXAll, maxX);\n maxYAll = Math.max(maxYAll, groupingStack === 'vertical' ? maxCount : maxCountFromGroups);\n res[key] = {minX, maxX, maxY: groupingStack === 'vertical' ? maxCount : maxCountFromGroups};\n return res;\n }, {});\n\n facetKeys.forEach(key => {\n const scaleX: ChartScales['x'] = xAxis.scale === 'log' ? scaleSymlog() : scaleLinear();\n\n const extents = histogramExtentsByKeys[key];\n const minX = facetSettings.sharedX ? minXAll : extents.minX;\n const maxX = facetSettings.sharedX ? maxXAll : extents.maxX;\n\n (scaleX.domain([minX, maxX]) as ChartScales['x']).range([0, this.chartSizes.chartWidth]);\n this.scales.x[key] = scaleX;\n });\n facetKeys.forEach(key => {\n const scaleY = yAxis.scale === 'log' ? scaleSymlog() : scaleLinear();\n const extents = histogramExtentsByKeys[key];\n\n const minY = 0;\n const maxY = facetSettings.sharedY ? maxYAll : extents.maxY;\n\n const rangeV = [this.chartSizes.chartHeight, 0];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempY: ChartScales['y'] = (scaleY.copy().domain([minY, maxY]) as ChartScales['y']).range([\n this.chartSizes.chartHeight,\n size.innerOffset,\n ]) as ChartScales['y'];\n (scaleY.domain([tempY.invert(this.chartSizes.chartHeight), tempY.invert(0)]) as ChartScales['y']).range(\n rangeV\n );\n this.scales.y[key] = scaleY;\n });\n }\n\n updateCaptionsSize(\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'],\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis']\n ) {\n const textMeasurer = new TextMeasurer('600 14px Arial');\n\n let maxYTick = 0;\n\n function getMaxTickWidth(ticks: string[]) {\n return Math.max(...ticks.map(key => textMeasurer.getTextWidth(key)));\n }\n\n if (!yAxis.hiddenLabels) {\n Object.values(this.scales.y).forEach(scale => {\n const {ticks, format} = getTicksAndFormat(scale as ScaleLogarithmic<number, number>, false);\n maxYTick = Math.max(maxYTick, getMaxTickWidth(ticks.map(format)));\n });\n }\n this.captionsSizes = {\n xAxisCaptionsWidth: xAxis.hiddenLabels ? 0 : 20,\n yAxisCaptionsWidth: maxYTick,\n };\n }\n\n createMainTitle(facetKeys: string[], title: HistogramSettingsImpl['chartSettings']['title']) {\n const firstChart = this.chartsDimensions[facetKeys[0]];\n const lastChart = this.chartsDimensions[facetKeys[facetKeys.length - 1]];\n\n this.mainTitle = splitTextByWidth(\n title.name,\n this.chartSizes.chartsWidth - firstChart.padding.left - lastChart.padding.right,\n 20\n );\n }\n\n createFacetTitles(facetKeys: string[], facetLabels: string[][]) {\n this.facetTitles = facetKeys.reduce((res: Record<string, string[]>, key, idx) => {\n if (facetLabels[idx].length === 1 && facetLabels[idx][0] === 'null') {\n res[key] = [];\n } else {\n res[key] = splitTextByWidth(facetLabels[idx].join(', '), this.chartSizes.chartWidth, 14);\n }\n return res;\n }, {});\n }\n\n updateLegendSize(\n legend: HistogramSettingsImpl['chartSettings']['legend'],\n legendInfo: HistogramLegendInfo,\n grouping: ColumnName | null,\n layers: HistogramLayer[]\n ) {\n if (!legend.show) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const legendItems: LegendItem[] = [];\n const emptySizes = {width:0, height:0, left:0, top: 0};\n\n layers.forEach(layer => {\n if (isInheritedAes(layer.aes.fillColor) && grouping) {\n const columnId = layer.aes.fillColor.value;\n const info = legendInfo[grouping.value];\n const title = grouping.label ?? grouping.value;\n const scale:ScaleOrdinal<string, string> = scaleOrdinal<string, string>()\n .domain(info.values)\n .range(info.values.map(value => info.aesMap[value].fillColor as string));\n legendItems.push({...emptySizes, id: columnId, type: 'discreteColor', title, scale, values: info.values, labels: info.labels});\n }\n });\n\n if (!legendItems.length) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const items = arrangeLegendParts(legendItems, this.chartSizes.chartHeight);\n\n const lastItem = items[items.length - 1];\n const legendWidth = lastItem.left + lastItem.width + LEGEND_OFFSET;\n const legendHeight = this.chartSizes.chartHeight;\n\n this.legend = {\n width: legendWidth,\n height: legendHeight,\n items,\n };\n }\n\n updateMargins(size:HistogramSettingsImpl['chartSettings']['size']) {\n const titleTextHeight = TITLE_LINE_HEIGHT * this.mainTitle.length;\n const titleHeight = titleTextHeight > 0 ? titleTextHeight + TITLE_MARGIN * 2 : 0;\n\n const minMargin = size.outerOffset;\n\n this.margins = {\n top: Math.max(titleHeight, minMargin),\n bottom: minMargin,\n left: minMargin,\n right: this.legend.width + minMargin,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartsWidth + this.margins.right;\n this.chartSizes.totalHeight = this.margins.top + this.chartSizes.chartsHeight + this.margins.bottom;\n }\n\n render(\n dataFrame: DataFrame,\n settingsId: string,\n chartSettings: HistogramSettingsImpl['chartSettings'],\n facetSettings: HistogramSettingsImpl['facetSettings'],\n facetKeys: string[],\n facetLabels: string[][],\n histogramDataByFacets: Record<string, GroupedHistogramData>,\n legendInfo: HistogramLegendInfo,\n layers: HistogramLayer[],\n inheritedAes: HistogramSettingsImpl['inheritedAes'],\n grouping: ColumnName | null,\n groupingStack: HistogramSettingsImpl['groupingStack'],\n groupingDirection: HistogramSettingsImpl['groupingDirection'],\n onTooltipHintSwitch: (v:boolean) => void,\n ) {\n const {xAxis, yAxis, size, title} = chartSettings;\n this.updateChartSizes(size);\n this.updateViewport(facetKeys, facetSettings, xAxis, yAxis, histogramDataByFacets, size, groupingStack);\n this.updateCaptionsSize(xAxis, yAxis);\n this.createFacetTitles(facetKeys, facetLabels);\n this.updateChartDimensions(facetKeys, facetSettings, xAxis, yAxis);\n this.createMainTitle(facetKeys, title);\n this.updateLegendSize(chartSettings.legend, legendInfo, grouping, layers);\n this.updateMargins(size);\n const minHeight = facetKeys.reduce((v, key) => {\n return Math.min(v, histogramDataByFacets[key].minX);\n }, Infinity);\n const maxHeight = facetKeys.reduce((v, key) => {\n return Math.max(v, histogramDataByFacets[key].maxX);\n }, -Infinity);\n const component = (\n <DataFrameProvider dataFrame={dataFrame}>\n <ChartsGroup\n settingsId={settingsId}\n chartSettings={chartSettings}\n facetKeys={facetKeys}\n facetSettings={facetSettings}\n chartSizes={this.chartSizes}\n chartsDimensions={this.chartsDimensions}\n scales={this.scales}\n columnsCount={this.columnsCount}\n margins={this.margins}\n mainTitle={this.mainTitle}\n facetTitles={this.facetTitles}\n captionsSizes={this.captionsSizes}\n histogramDataByFacets={histogramDataByFacets}\n layers={layers}\n aesColorGetter={createAesGetter(dataFrame, inheritedAes, 'fillColor', [minHeight, maxHeight])}\n groupingDirection={groupingDirection}\n groupingStack={groupingStack}\n groupingLabels={grouping ? legendInfo[grouping.value].labels : {}}\n legend={this.legend}\n onTooltipHintSwitch={onTooltipHintSwitch}\n />\n </DataFrameProvider>\n );\n this.component = component;\n this.reactRoot?.render(component);\n }\n\n renderError(message: string) {\n this.reactRoot?.render(<Error message={message} />);\n }\n}\n\nexport default ChartRenderer;\n"],"names":["getChartEdgeSides","index","facetsCount","columnsCount","rowsCount","chartSides","calculatePaddings","xAxis","yAxis","captionsSizes","currentRowFacetKeys","facetTitles","chartEdgeSides","lastInRow","facetSettings","needLeftAxis","needBottomAxis","needBottomAxisTitle","yCaptions","yTicks","DEFAULT_TICKS_SIZE","TICK_OFFSET","xCaptions","xTicks","xAxisTitle","TITLE_LINE","leftAxisElements","bottomAxisElements","facetTitlesLinesCount","key","MIN_PADDING","FACET_TITLE_OFFSET","FACET_TITLE_LINE","getFacetRows","facetKeys","nRows","nColumns","result","i","getRowColumn","idx","row","column","isInheritedAes","v","isContinuousAes","createAesGetter","dataFrame","aesData","field","defaultDomain","aesItem","height","domain","range","type","scale","getContinuousColorScale","columnId","mapping","_a","DEFAULT_COMMON_AES","ChartRenderer","__publicField","jsx","Fragment","MIN_MARGIN","DEFAULT_WIDTH","DEFAULT_HEIGHT","scaleLinear","node","createRoot","size","chartWidth","chartHeight","currentLeft","currentTop","res","currentRow","currentColumn","padding","outerWidth","outerHeight","chartsWidth","chartsHeight","histogramDataByFacets","groupingStack","facetCount","maxNRows","maxNCols","minXAll","maxXAll","maxYAll","histogramExtentsByKeys","histogramData","minX","maxX","maxCount","maxCountFromGroups","scaleX","scaleSymlog","extents","scaleY","minY","maxY","rangeV","tempY","textMeasurer","TextMeasurer","maxYTick","getMaxTickWidth","ticks","format","getTicksAndFormat","title","firstChart","lastChart","splitTextByWidth","facetLabels","legend","legendInfo","grouping","layers","legendItems","emptySizes","layer","info","scaleOrdinal","value","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","legendHeight","titleTextHeight","TITLE_LINE_HEIGHT","titleHeight","TITLE_MARGIN","minMargin","settingsId","chartSettings","inheritedAes","groupingDirection","onTooltipHintSwitch","minHeight","maxHeight","component","DataFrameProvider","ChartsGroup","message","Error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChartRenderer.js","sources":["../../src/histogram/ChartRenderer.tsx"],"sourcesContent":["import type { ScaleLogarithmic, ScaleOrdinal } from 'd3-scale';\nimport { scaleLinear, scaleOrdinal, scaleSymlog } from 'd3-scale';\nimport type { ReactElement } from 'react';\nimport type { Root } from 'react-dom/client';\nimport { createRoot } from 'react-dom/client';\nimport { Error } from '../common/Error';\nimport type { LegendData, LegendItem } from '../common/types';\nimport { DataFrameProvider } from '../common/useDataFrame';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, TITLE_LINE_HEIGHT, TITLE_MARGIN } from '../constants';\nimport type { DataFrame, RowIndex } from '../DataFrame';\nimport { splitTextByWidth } from '../discrete/utils';\nimport { DEFAULT_COMMON_AES, LEGEND_OFFSET } from '../scatterplot/constants';\nimport { getTicksAndFormat } from '../scatterplot/utils/getTicksAndFormat';\nimport type { AesItem, ColumnName, ContinuousAesHistogram, InheritAesHistogram } from '../types';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport { getContinuousColorScale } from '../utils/getContinuousColorScale';\nimport { TextMeasurer } from '../utils/TextMeasurer/TextMeasurer';\nimport { ChartsGroup } from './components/ChartsGroup';\nimport type { CaptionsSizes, ChartDimensionsData, ChartScales, ChartSizes, ChartsScales, HistogramLegendInfo, Margins } from './components/types';\nimport {\n DEFAULT_TICKS_SIZE, FACET_TITLE_LINE, FACET_TITLE_OFFSET,\n MIN_MARGIN,\n MIN_PADDING,\n TICK_OFFSET,\n TITLE_LINE\n} from './constants';\nimport type { GroupedHistogramData } from './getHistogramData';\nimport type { HistogramLayer, HistogramSettingsImpl } from './HistogramSettingsImpl';\n\nfunction getChartEdgeSides(index: number, facetsCount: number, columnsCount: number, rowsCount: number) {\n const chartSides: ('left' | 'right' | 'top' | 'bottom')[] = [];\n if (index % columnsCount === columnsCount - 1) {\n chartSides.push('right');\n }\n if (index % columnsCount === 0) {\n chartSides.push('left');\n }\n if (index < columnsCount) {\n chartSides.push('top');\n }\n if (\n Math.ceil((index + 1) / columnsCount) === rowsCount ||\n (Math.ceil((index + 1) / columnsCount) === rowsCount - 1 &&\n index % columnsCount > (facetsCount - 1) % columnsCount)\n ) {\n chartSides.push('bottom');\n }\n return chartSides;\n}\n\nfunction calculatePaddings(\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'],\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis'],\n captionsSizes: CaptionsSizes,\n currentRowFacetKeys: string[],\n facetTitles: Record<string, string[]>,\n chartEdgeSides: ('left' | 'right' | 'top' | 'bottom')[],\n lastInRow: boolean,\n facetSettings?: HistogramSettingsImpl['facetSettings']\n) {\n const needLeftAxis = chartEdgeSides.includes('left') || !facetSettings?.sharedY;\n const needBottomAxis = chartEdgeSides.includes('bottom') || !facetSettings?.sharedX;\n const needBottomAxisTitle = chartEdgeSides.includes('bottom') && xAxis.title !== '';\n\n const yCaptions = captionsSizes.yAxisCaptionsWidth + 2 * TICK_OFFSET;\n const yTicks = (yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + (yAxis.hiddenLabels ? 0 : TICK_OFFSET);\n\n const xCaptions = captionsSizes.xAxisCaptionsWidth + 2 * TICK_OFFSET;\n const xTicks = (xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + (xAxis.hiddenLabels ? 0 : TICK_OFFSET);\n const xAxisTitle = needBottomAxisTitle ? TITLE_LINE : 0;\n\n const leftAxisElements = yCaptions + yTicks;\n const bottomAxisElements = xTicks + xCaptions + xAxisTitle;\n\n const facetTitlesLinesCount = Math.max(...currentRowFacetKeys.map(key => facetTitles[key].length));\n return {\n left: needLeftAxis ? leftAxisElements : MIN_PADDING,\n top: facetTitlesLinesCount === 0 ? 0 : FACET_TITLE_OFFSET * 2 + facetTitlesLinesCount * FACET_TITLE_LINE,\n bottom: needBottomAxis ? bottomAxisElements + 8 : MIN_PADDING,\n right: lastInRow ? 0 : MIN_PADDING,\n };\n}\n\n// facet keys grouped by rows\nfunction getFacetRows(facetKeys: string[], nRows: number, nColumns: number): string[][] {\n const result: string[][] = [];\n for (let i = 0; i < nRows; i++) {\n result.push(facetKeys.slice(i * nColumns, i * nColumns + nColumns));\n }\n return result;\n}\n\nfunction getRowColumn(idx: number, columnsCount: number) {\n const row = Math.floor(idx / columnsCount);\n const column = idx - row * columnsCount;\n return [row, column];\n}\n\nfunction isInheritedAes(v: InheritAesHistogram | unknown): v is InheritAesHistogram {\n return typeof v === 'object' && v !== null && 'type' in v && 'value' in v && v.type === 'grouping';\n}\nfunction isContinuousAes(v: ContinuousAesHistogram | unknown): v is ContinuousAesHistogram {\n return typeof v === 'object' && v !== null && 'range' in v;\n}\nfunction createAesGetter(dataFrame: DataFrame, aesData: HistogramSettingsImpl['inheritedAes'], field: keyof AesItem, defaultDomain:number[]) {\n return function (aesItem: string | InheritAesHistogram | ContinuousAesHistogram, idx: RowIndex, height:number) {\n if (isContinuousAes(aesItem)) {\n const {domain = defaultDomain, range, type = 'linear'} = aesItem;\n const scale = getContinuousColorScale(range as string[], domain, type);\n scale.clamp(true);\n return scale(height);\n }\n if (isInheritedAes(aesItem)) {\n const columnId = aesItem.value;\n const mapping = aesData[columnId];\n return (mapping?.[String(dataFrame.getColumnValue(columnId, idx))] ?? DEFAULT_COMMON_AES)?.[field] as string;\n }\n return aesItem;\n };\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n component: ReactElement = (<></>);\n margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n chartsDimensions: Record<string, ChartDimensionsData> = {};\n chartSizes: ChartSizes = {\n chartWidth: DEFAULT_WIDTH, // width of single chart\n chartHeight: DEFAULT_HEIGHT, // height of single chart\n chartsWidth: DEFAULT_WIDTH, // width of all charts in charts row\n chartsHeight: DEFAULT_HEIGHT, // width of all charts in charts column, without axes\n totalWidth: DEFAULT_WIDTH, // width of all charts in charts row, plus left axis, plus legend\n totalHeight: DEFAULT_HEIGHT, // width of all charts in charts height, plus bottom axis, plus top title\n };\n columnsCount = 1;\n rowsCount = 1;\n scales: ChartsScales = {\n x: {null: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH])},\n y: {null: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0])},\n };\n captionsSizes: CaptionsSizes = {\n xAxisCaptionsWidth: 30,\n yAxisCaptionsWidth: 100,\n };\n facetTitles: Record<string, string[]> = {}; // can be multiline\n mainTitle: string[] = []; // can be multiline\n legend: LegendData = {\n width: 0,\n height: 0,\n items: [],\n };\n\n clear() {\n if (this.parentNode && this.rootNode) {\n this.parentNode?.removeChild(this.rootNode);\n this.parentNode = null;\n this.rootNode = null;\n }\n // timeout to avoid trying to unmount during rendering\n setTimeout(() => {\n this.reactRoot?.unmount();\n this.reactRoot = null;\n });\n }\n\n init(node: HTMLElement) {\n if (this.parentNode === null) {\n this.parentNode = node;\n this.rootNode = document.createElement('div');\n this.parentNode.appendChild(this.rootNode);\n this.reactRoot = createRoot(this.rootNode);\n }\n }\n\n updateChartSizes(size: HistogramSettingsImpl['chartSettings']['size']) {\n this.chartSizes.chartWidth = size.width;\n this.chartSizes.chartHeight = size.height;\n }\n\n updateChartDimensions(\n facetKeys: string[],\n facetSettings: HistogramSettingsImpl['facetSettings'],\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'],\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis']\n ) {\n const {chartWidth, chartHeight} = this.chartSizes;\n let currentLeft = 0;\n let currentTop = 0;\n this.chartsDimensions = facetKeys.reduce((res: Record<string, ChartDimensionsData>, key: string, index) => {\n const [currentRow, currentColumn] = getRowColumn(index, this.columnsCount);\n const chartEdgeSides = getChartEdgeSides(index, facetKeys.length, this.columnsCount, this.rowsCount);\n const padding = calculatePaddings(\n xAxis,\n yAxis,\n this.captionsSizes,\n getFacetRows(facetKeys, this.rowsCount, this.columnsCount)[currentRow],\n this.facetTitles,\n chartEdgeSides,\n currentColumn === this.columnsCount - 1,\n facetSettings\n );\n const outerWidth = chartWidth + padding.left + padding.right;\n const outerHeight = chartHeight + padding.top + padding.bottom;\n res[key] = {\n left: currentLeft,\n top: currentTop,\n chartEdgeSides,\n padding,\n inner: {width: chartWidth, height: chartHeight},\n outer: {width: outerWidth, height: outerHeight},\n };\n currentLeft += outerWidth;\n if (currentColumn === this.columnsCount - 1) {\n currentLeft = 0;\n currentTop += outerHeight;\n }\n return res;\n }, {});\n\n const chartsWidth = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.width + this.chartsDimensions[key].left)\n );\n const chartsHeight = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.height + this.chartsDimensions[key].top)\n );\n this.chartSizes.chartsWidth = chartsWidth;\n this.chartSizes.chartsHeight = chartsHeight;\n }\n\n updateViewport(\n facetKeys: string[],\n facetSettings: HistogramSettingsImpl['facetSettings'],\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'],\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis'],\n histogramDataByFacets: Record<string, GroupedHistogramData>,\n size: HistogramSettingsImpl['chartSettings']['size'],\n groupingStack: HistogramSettingsImpl['groupingStack'],\n ) {\n const facetCount = facetKeys.length;\n const maxNRows = Math.min(facetSettings.nRows ?? facetCount, facetCount);\n const maxNCols = Math.min(facetSettings.nCols ?? facetCount, facetCount);\n // Use columns/rows count from settings if some of them defined, else make 1 column\n this.columnsCount = facetSettings.nRows ? Math.ceil(facetCount / maxNRows) : maxNCols;\n this.rowsCount = Math.ceil(facetCount / this.columnsCount);\n\n let [minXAll, maxXAll] = [Infinity, -Infinity];\n let maxYAll = -Infinity;\n const histogramExtentsByKeys = facetKeys.reduce((res: Record<string, Record<string, number>>, key) => {\n const histogramData = histogramDataByFacets[key];\n const {minX, maxX, maxCount, maxCountFromGroups} = histogramData;\n minXAll = Math.min(minXAll, minX);\n maxXAll = Math.max(maxXAll, maxX);\n maxYAll = Math.max(maxYAll, groupingStack === 'vertical' ? maxCount : maxCountFromGroups);\n res[key] = {minX, maxX, maxY: groupingStack === 'vertical' ? maxCount : maxCountFromGroups};\n return res;\n }, {});\n\n facetKeys.forEach(key => {\n const scaleX: ChartScales['x'] = xAxis.scale === 'log' ? scaleSymlog() : scaleLinear();\n\n const extents = histogramExtentsByKeys[key];\n const minX = facetSettings.sharedX ? minXAll : extents.minX;\n const maxX = facetSettings.sharedX ? maxXAll : extents.maxX;\n\n (scaleX.domain([minX, maxX]) as ChartScales['x']).range([0, this.chartSizes.chartWidth]);\n this.scales.x[key] = scaleX;\n });\n facetKeys.forEach(key => {\n const scaleY = yAxis.scale === 'log' ? scaleSymlog() : scaleLinear();\n const extents = histogramExtentsByKeys[key];\n\n const minY = 0;\n const maxY = facetSettings.sharedY ? maxYAll : extents.maxY;\n\n const rangeV = [this.chartSizes.chartHeight, 0];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempY: ChartScales['y'] = (scaleY.copy().domain([minY, maxY]) as ChartScales['y']).range([\n this.chartSizes.chartHeight,\n size.innerOffset,\n ]) as ChartScales['y'];\n (scaleY.domain([tempY.invert(this.chartSizes.chartHeight), tempY.invert(0)]) as ChartScales['y']).range(\n rangeV\n );\n this.scales.y[key] = scaleY;\n });\n }\n\n updateCaptionsSize(\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'],\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis']\n ) {\n const textMeasurer = new TextMeasurer('600 14px Arial');\n\n let maxYTick = 0;\n\n function getMaxTickWidth(ticks: string[]) {\n return Math.max(...ticks.map(key => textMeasurer.getTextWidth(key)));\n }\n\n if (!yAxis.hiddenLabels) {\n Object.values(this.scales.y).forEach(scale => {\n const {ticks, format} = getTicksAndFormat(scale as ScaleLogarithmic<number, number>, false);\n maxYTick = Math.max(maxYTick, getMaxTickWidth(ticks.map(format)));\n });\n }\n this.captionsSizes = {\n xAxisCaptionsWidth: xAxis.hiddenLabels ? 0 : 20,\n yAxisCaptionsWidth: maxYTick,\n };\n }\n\n createMainTitle(facetKeys: string[], title: HistogramSettingsImpl['chartSettings']['title']) {\n const firstChart = this.chartsDimensions[facetKeys[0]];\n const lastChart = this.chartsDimensions[facetKeys[facetKeys.length - 1]];\n\n this.mainTitle = splitTextByWidth(\n title.name,\n this.chartSizes.chartsWidth - firstChart.padding.left - lastChart.padding.right,\n 20\n );\n }\n\n createFacetTitles(facetKeys: string[], facetLabels: string[][]) {\n this.facetTitles = facetKeys.reduce((res: Record<string, string[]>, key, idx) => {\n if (facetLabels[idx].length === 1 && facetLabels[idx][0] === 'null') {\n res[key] = [];\n } else {\n res[key] = splitTextByWidth(facetLabels[idx].join(', '), this.chartSizes.chartWidth, 14);\n }\n return res;\n }, {});\n }\n\n updateLegendSize(\n legend: HistogramSettingsImpl['chartSettings']['legend'],\n legendInfo: HistogramLegendInfo,\n grouping: ColumnName | null,\n layers: HistogramLayer[]\n ) {\n if (!legend.show) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const legendItems: LegendItem[] = [];\n const emptySizes = {width:0, height:0, left:0, top: 0};\n\n layers.forEach(layer => {\n if (isInheritedAes(layer.aes.fillColor) && grouping) {\n const columnId = layer.aes.fillColor.value;\n const info = legendInfo[grouping.value];\n const title = grouping.label ?? grouping.value;\n const scale:ScaleOrdinal<string, string> = scaleOrdinal<string, string>()\n .domain(info.values)\n .range(info.values.map(value => info.aesMap[value]?.fillColor ?? DEFAULT_COMMON_AES.fillColor));\n legendItems.push({...emptySizes, id: columnId, type: 'discreteColor', title, scale, values: info.values, labels: info.labels});\n }\n });\n\n if (!legendItems.length) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const items = arrangeLegendParts(legendItems, this.chartSizes.chartHeight);\n\n const lastItem = items[items.length - 1];\n const legendWidth = lastItem.left + lastItem.width + LEGEND_OFFSET;\n const legendHeight = this.chartSizes.chartHeight;\n\n this.legend = {\n width: legendWidth,\n height: legendHeight,\n items,\n };\n }\n\n updateMargins(size:HistogramSettingsImpl['chartSettings']['size']) {\n const titleTextHeight = TITLE_LINE_HEIGHT * this.mainTitle.length;\n const titleHeight = titleTextHeight > 0 ? titleTextHeight + TITLE_MARGIN * 2 : 0;\n\n const minMargin = size.outerOffset;\n\n this.margins = {\n top: Math.max(titleHeight, minMargin),\n bottom: minMargin,\n left: minMargin,\n right: this.legend.width + minMargin,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartsWidth + this.margins.right;\n this.chartSizes.totalHeight = this.margins.top + this.chartSizes.chartsHeight + this.margins.bottom;\n }\n\n render(\n dataFrame: DataFrame,\n settingsId: string,\n chartSettings: HistogramSettingsImpl['chartSettings'],\n facetSettings: HistogramSettingsImpl['facetSettings'],\n facetKeys: string[],\n facetLabels: string[][],\n histogramDataByFacets: Record<string, GroupedHistogramData>,\n legendInfo: HistogramLegendInfo,\n layers: HistogramLayer[],\n inheritedAes: HistogramSettingsImpl['inheritedAes'],\n grouping: ColumnName | null,\n groupingStack: HistogramSettingsImpl['groupingStack'],\n groupingDirection: HistogramSettingsImpl['groupingDirection'],\n onTooltipHintSwitch: (v:boolean) => void,\n ) {\n const {xAxis, yAxis, size, title} = chartSettings;\n this.updateChartSizes(size);\n this.updateViewport(facetKeys, facetSettings, xAxis, yAxis, histogramDataByFacets, size, groupingStack);\n this.updateCaptionsSize(xAxis, yAxis);\n this.createFacetTitles(facetKeys, facetLabels);\n this.updateChartDimensions(facetKeys, facetSettings, xAxis, yAxis);\n this.createMainTitle(facetKeys, title);\n this.updateLegendSize(chartSettings.legend, legendInfo, grouping, layers);\n this.updateMargins(size);\n const minHeight = facetKeys.reduce((v, key) => {\n return Math.min(v, histogramDataByFacets[key].minX);\n }, Infinity);\n const maxHeight = facetKeys.reduce((v, key) => {\n return Math.max(v, histogramDataByFacets[key].maxX);\n }, -Infinity);\n const component = (\n <DataFrameProvider dataFrame={dataFrame}>\n <ChartsGroup\n settingsId={settingsId}\n chartSettings={chartSettings}\n facetKeys={facetKeys}\n facetSettings={facetSettings}\n chartSizes={this.chartSizes}\n chartsDimensions={this.chartsDimensions}\n scales={this.scales}\n columnsCount={this.columnsCount}\n margins={this.margins}\n mainTitle={this.mainTitle}\n facetTitles={this.facetTitles}\n captionsSizes={this.captionsSizes}\n histogramDataByFacets={histogramDataByFacets}\n layers={layers}\n aesColorGetter={createAesGetter(dataFrame, inheritedAes, 'fillColor', [minHeight, maxHeight])}\n groupingDirection={groupingDirection}\n groupingStack={groupingStack}\n groupingLabels={grouping ? legendInfo[grouping.value].labels : {}}\n legend={this.legend}\n onTooltipHintSwitch={onTooltipHintSwitch}\n />\n </DataFrameProvider>\n );\n this.component = component;\n this.reactRoot?.render(component);\n }\n\n renderError(message: string) {\n this.reactRoot?.render(<Error message={message} />);\n }\n}\n\nexport default ChartRenderer;\n"],"names":["getChartEdgeSides","index","facetsCount","columnsCount","rowsCount","chartSides","calculatePaddings","xAxis","yAxis","captionsSizes","currentRowFacetKeys","facetTitles","chartEdgeSides","lastInRow","facetSettings","needLeftAxis","needBottomAxis","needBottomAxisTitle","yCaptions","TICK_OFFSET","yTicks","DEFAULT_TICKS_SIZE","xCaptions","xTicks","xAxisTitle","TITLE_LINE","leftAxisElements","bottomAxisElements","facetTitlesLinesCount","key","MIN_PADDING","FACET_TITLE_OFFSET","FACET_TITLE_LINE","getFacetRows","facetKeys","nRows","nColumns","result","i","getRowColumn","idx","row","column","isInheritedAes","v","isContinuousAes","createAesGetter","dataFrame","aesData","field","defaultDomain","aesItem","height","domain","range","type","scale","getContinuousColorScale","columnId","mapping","_a","DEFAULT_COMMON_AES","ChartRenderer","__publicField","jsx","Fragment","MIN_MARGIN","DEFAULT_WIDTH","DEFAULT_HEIGHT","scaleLinear","node","createRoot","size","chartWidth","chartHeight","currentLeft","currentTop","res","currentRow","currentColumn","padding","outerWidth","outerHeight","chartsWidth","chartsHeight","histogramDataByFacets","groupingStack","facetCount","maxNRows","maxNCols","minXAll","maxXAll","maxYAll","histogramExtentsByKeys","histogramData","minX","maxX","maxCount","maxCountFromGroups","scaleX","scaleSymlog","extents","scaleY","minY","maxY","rangeV","tempY","textMeasurer","TextMeasurer","maxYTick","getMaxTickWidth","ticks","format","getTicksAndFormat","title","firstChart","lastChart","splitTextByWidth","facetLabels","legend","legendInfo","grouping","layers","legendItems","emptySizes","layer","info","scaleOrdinal","value","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","legendHeight","titleTextHeight","TITLE_LINE_HEIGHT","titleHeight","TITLE_MARGIN","minMargin","settingsId","chartSettings","inheritedAes","groupingDirection","onTooltipHintSwitch","minHeight","maxHeight","component","DataFrameProvider","ChartsGroup","message","Error"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ export declare const MIN_PADDING = 12;
|
|
|
6
6
|
export declare const TITLE_LINE = 20;
|
|
7
7
|
export declare const DEFAULT_TICKS_SIZE = 4;
|
|
8
8
|
export declare const TICK_OFFSET = 6;
|
|
9
|
-
export declare const LEGEND_OFFSET =
|
|
9
|
+
export declare const LEGEND_OFFSET = 20;
|
|
10
10
|
export declare const PADDINGS: {
|
|
11
11
|
TOP: number;
|
|
12
12
|
BOTTOM: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../src/histogram/constants.ts"],"sourcesContent":["export const FACET_TITLE_LINE = 20;\nexport const FACET_TITLE_OFFSET = 6;\nexport const FACET_AXIS_OFFSET = 8;\nexport const MIN_MARGIN = 24;\nexport const MIN_PADDING = 12;\n\nexport const TITLE_LINE = 20;\nexport const DEFAULT_TICKS_SIZE = 4;\nexport const TICK_OFFSET = 6;\n\nexport const LEGEND_OFFSET =
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../src/histogram/constants.ts"],"sourcesContent":["export const FACET_TITLE_LINE = 20;\nexport const FACET_TITLE_OFFSET = 6;\nexport const FACET_AXIS_OFFSET = 8;\nexport const MIN_MARGIN = 24;\nexport const MIN_PADDING = 12;\n\nexport const TITLE_LINE = 20;\nexport const DEFAULT_TICKS_SIZE = 4;\nexport const TICK_OFFSET = 6;\n\nexport const LEGEND_OFFSET = 20;\n\n// inner paddings in chart area\nexport const PADDINGS = {\n TOP: 30,\n BOTTOM: 0,\n LEFT: 10,\n RIGHT: 10\n};\n"],"names":["FACET_TITLE_LINE","FACET_TITLE_OFFSET","MIN_MARGIN","MIN_PADDING","TITLE_LINE","DEFAULT_TICKS_SIZE","TICK_OFFSET","PADDINGS"],"mappings":"AAAO,MAAMA,IAAmB,IACnBC,IAAqB,GAErBC,IAAa,IACbC,IAAc,IAEdC,IAAa,IACbC,IAAqB,GACrBC,IAAc,GAKdC,IAAW;AAAA,EACpB,KAAK;AAIT;"}
|
package/dist/histogram/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
var
|
|
2
|
-
var b = (
|
|
3
|
-
var
|
|
4
|
-
import { l as
|
|
5
|
-
import { s as
|
|
6
|
-
import { AbstractChart as
|
|
1
|
+
var E = Object.defineProperty;
|
|
2
|
+
var b = (c, h, a) => h in c ? E(c, h, { enumerable: !0, configurable: !0, writable: !0, value: a }) : c[h] = a;
|
|
3
|
+
var g = (c, h, a) => b(c, typeof h != "symbol" ? h + "" : h, a);
|
|
4
|
+
import { l as x } from "../_virtual/lodash.js";
|
|
5
|
+
import { s as w } from "../_virtual/server.browser.js";
|
|
6
|
+
import { AbstractChart as A } from "../AbstractChart.js";
|
|
7
7
|
import { getUnknownErrorInfo as p, isErrorInfo as m } from "../types/common.js";
|
|
8
8
|
import "../types/discrete.js";
|
|
9
9
|
import "../types/scatterplot.js";
|
|
@@ -11,32 +11,32 @@ import "../types/heatmap.js";
|
|
|
11
11
|
import "../types/dendro.js";
|
|
12
12
|
import "../types/histogram.js";
|
|
13
13
|
import "../types/bubble.js";
|
|
14
|
-
import { getKeysCombinations as
|
|
15
|
-
import
|
|
16
|
-
import { createHistogramDataByFacets as
|
|
14
|
+
import { getKeysCombinations as S } from "../utils/getKeysCombination.js";
|
|
15
|
+
import B from "./ChartRenderer.js";
|
|
16
|
+
import { createHistogramDataByFacets as O } from "./getHistogramData.js";
|
|
17
17
|
import { HistogramSettingsImpl as f } from "./HistogramSettingsImpl.js";
|
|
18
|
-
import { MAX_FACETS_COUNT as C } from "../constants.js";
|
|
19
|
-
function
|
|
20
|
-
return
|
|
21
|
-
const n =
|
|
18
|
+
import { MAX_FACETS_COUNT as C, MAX_GROUPS_COUNT as y } from "../constants.js";
|
|
19
|
+
function D(c, h, a) {
|
|
20
|
+
return h.reduce((t, e) => {
|
|
21
|
+
const n = c.getColumnCategories(e.value, !1), l = (r) => e.valueLabels ? String(c.getColumnValue(
|
|
22
22
|
e.valueLabels,
|
|
23
|
-
|
|
24
|
-
)) : r,
|
|
23
|
+
c.getColumnCategoryRowIndex(e.value, r)
|
|
24
|
+
)) : r, s = n.reduce((r, o) => (r[o] = l(o), r), {});
|
|
25
25
|
return t[e.value] = {
|
|
26
|
-
values: n.sort((r,
|
|
26
|
+
values: n.sort((r, o) => s[r].localeCompare(s[o], "en", { numeric: !0 })),
|
|
27
27
|
aesMap: a[e.value],
|
|
28
|
-
labels:
|
|
28
|
+
labels: s
|
|
29
29
|
}, t;
|
|
30
30
|
}, {});
|
|
31
31
|
}
|
|
32
|
-
class z extends
|
|
32
|
+
class z extends A {
|
|
33
33
|
constructor(a, t, e) {
|
|
34
34
|
super(a, t);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
g(this, "settings");
|
|
36
|
+
g(this, "chartRenderer", new B());
|
|
37
|
+
g(this, "onTooltipHintSwitch", () => {
|
|
38
38
|
});
|
|
39
|
-
|
|
39
|
+
g(this, "calculatedData", null);
|
|
40
40
|
this.settings = new f(t), e && (this.onTooltipHintSwitch = e[0]);
|
|
41
41
|
}
|
|
42
42
|
mount(a) {
|
|
@@ -61,46 +61,53 @@ class z extends x {
|
|
|
61
61
|
console.warn("no chart state for histogram");
|
|
62
62
|
}
|
|
63
63
|
export() {
|
|
64
|
-
return this._updateChart(),
|
|
64
|
+
return this._updateChart(), w.renderToString(this.chartRenderer.component);
|
|
65
65
|
}
|
|
66
66
|
_needUpdateCalculatedDataBySettings(a, t) {
|
|
67
|
-
var e, n, l,
|
|
68
|
-
return a.valueColumn.value !== t.valueColumn.value || a.facetBy.some((r,
|
|
69
|
-
var
|
|
70
|
-
return r.value !== ((
|
|
71
|
-
}) || ((e = a.grouping) == null ? void 0 : e.value) !== ((n = t.grouping) == null ? void 0 : n.value) || a.layers.length !== t.layers.length || a.layers.some((r,
|
|
72
|
-
var
|
|
73
|
-
return r !== ((
|
|
74
|
-
})) || ((
|
|
75
|
-
var
|
|
76
|
-
return r !== ((
|
|
67
|
+
var e, n, l, s;
|
|
68
|
+
return a.valueColumn.value !== t.valueColumn.value || a.facetBy.some((r, o) => {
|
|
69
|
+
var i;
|
|
70
|
+
return r.value !== ((i = t.facetBy[o]) == null ? void 0 : i.value);
|
|
71
|
+
}) || ((e = a.grouping) == null ? void 0 : e.value) !== ((n = t.grouping) == null ? void 0 : n.value) || a.layers.length !== t.layers.length || a.layers.some((r, o) => r.type !== t.layers[o].type) || a.binsCount !== t.binsCount || a.chartSettings.xAxis.scale !== t.chartSettings.xAxis.scale || ((l = a.groupingOrder) == null ? void 0 : l.some((r, o) => {
|
|
72
|
+
var i;
|
|
73
|
+
return r !== ((i = t.groupingOrder) == null ? void 0 : i[o]);
|
|
74
|
+
})) || ((s = t.groupingOrder) == null ? void 0 : s.some((r, o) => {
|
|
75
|
+
var i;
|
|
76
|
+
return r !== ((i = a.groupingOrder) == null ? void 0 : i[o]);
|
|
77
77
|
}));
|
|
78
78
|
}
|
|
79
79
|
_needUpdateCalculatedDataByData(a, t) {
|
|
80
80
|
const e = Object.keys(a.data), n = Object.keys(t.data);
|
|
81
81
|
return a.id !== t.id || e.length !== n.length || e.some((l) => {
|
|
82
|
-
var
|
|
83
|
-
return a.data[l].length !== ((
|
|
82
|
+
var s;
|
|
83
|
+
return a.data[l].length !== ((s = t.data[l]) == null ? void 0 : s.length);
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
86
|
_updateData() {
|
|
87
|
-
const { valueColumn: a, facetBy: t, grouping: e, binsCount: n, chartSettings: l, inheritedAes:
|
|
88
|
-
if (
|
|
89
|
-
const
|
|
87
|
+
const { valueColumn: a, facetBy: t, grouping: e, binsCount: n, chartSettings: l, inheritedAes: s, groupingOrder: r } = this.settings, o = t.map((u) => this.data.getColumnCategories(u.value)), i = o.length ? S([...o]) : [["null"]];
|
|
88
|
+
if (i.length > C) {
|
|
89
|
+
const u = {
|
|
90
90
|
type: "tooManyFacets",
|
|
91
|
-
info: { count:
|
|
91
|
+
info: { count: i.length, maxCount: C }
|
|
92
|
+
};
|
|
93
|
+
throw Error(u.type, { cause: u });
|
|
94
|
+
}
|
|
95
|
+
const _ = t.map((u) => u.value) ?? null, I = e ? [e.value] : [];
|
|
96
|
+
let d = e ? this.data.getColumnCategories(e.value) : ["null"];
|
|
97
|
+
if (d.length > y) {
|
|
98
|
+
const u = {
|
|
99
|
+
type: "tooManyHistogramGroups",
|
|
100
|
+
info: { count: d.length, maxCount: y }
|
|
92
101
|
};
|
|
93
|
-
throw Error(
|
|
102
|
+
throw Error(u.type, { cause: u });
|
|
94
103
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
r && (g = E.intersection(r, g)), this.data.setGrouping([...y, ...D]);
|
|
98
|
-
const _ = B(this.data, o, g, a, n, l.xAxis.scale);
|
|
104
|
+
r && (d = x.intersection(r, d)), this.data.setGrouping([..._, ...I]);
|
|
105
|
+
const v = O(this.data, i, d, a, n, l.xAxis.scale);
|
|
99
106
|
this.calculatedData = {
|
|
100
|
-
facetKeys:
|
|
101
|
-
facetKeysCombinations:
|
|
102
|
-
histogramDataByFacets:
|
|
103
|
-
legendInfo:
|
|
107
|
+
facetKeys: i.map((u) => u.join(", ")),
|
|
108
|
+
facetKeysCombinations: i,
|
|
109
|
+
histogramDataByFacets: v,
|
|
110
|
+
legendInfo: D(this.data, e ? [e] : [], s)
|
|
104
111
|
};
|
|
105
112
|
}
|
|
106
113
|
_updateAesInData() {
|
|
@@ -109,8 +116,8 @@ class z extends x {
|
|
|
109
116
|
_updateChart() {
|
|
110
117
|
if (!this.calculatedData)
|
|
111
118
|
return;
|
|
112
|
-
const { id: a, chartSettings: t, facetSettings: e, inheritedAes: n, layers: l, grouping:
|
|
113
|
-
this.chartRenderer.render(
|
|
119
|
+
const { id: a, chartSettings: t, facetSettings: e, inheritedAes: n, layers: l, grouping: s, groupingDirection: r, groupingStack: o } = this.settings;
|
|
120
|
+
this.calculatedData.legendInfo = D(this.data, s ? [s] : [], n), this.chartRenderer.render(
|
|
114
121
|
this.data,
|
|
115
122
|
a,
|
|
116
123
|
t,
|
|
@@ -122,8 +129,8 @@ class z extends x {
|
|
|
122
129
|
this.calculatedData.legendInfo,
|
|
123
130
|
l,
|
|
124
131
|
n,
|
|
125
|
-
i,
|
|
126
132
|
s,
|
|
133
|
+
o,
|
|
127
134
|
r,
|
|
128
135
|
this.onTooltipHintSwitch
|
|
129
136
|
);
|