@milaboratories/graph-maker 1.1.174 → 1.1.175
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/GraphMaker/components/LassoControls/index.vue.js +3 -2
- package/dist/GraphMaker/components/LassoControls/index.vue.js.map +1 -1
- package/dist/GraphMaker/index.vue.d.ts.map +1 -1
- package/dist/GraphMaker/index.vue.js +116 -110
- package/dist/GraphMaker/index.vue.js.map +1 -1
- package/dist/GraphMaker/store.d.ts +1 -0
- package/dist/GraphMaker/store.d.ts.map +1 -1
- package/dist/GraphMaker/store.js +30 -29
- package/dist/GraphMaker/store.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/MiPlots.js +4 -4
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js +214 -214
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getClusters.js +20 -163
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getClusters.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getDendrograms.js +47 -35
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getDendrograms.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js +82 -79
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/comlink/dist/esm/comlink.js +259 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/comlink/dist/esm/comlink.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js +52 -50
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/WorkerFactory.js +14 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/WorkerFactory.js.map +1 -0
- package/package.json +2 -2
package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/comlink/dist/esm/comlink.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comlink.js","sources":["../../../../../../../../../node_modules/@milaboratories/miplots4/node_modules/comlink/src/comlink.ts"],"sourcesContent":[null],"names":["proxyMarker","createEndpoint","releaseProxy","finalizer","throwMarker","isObject","val","proxyTransferHandler","obj","port1","port2","expose","port","wrap","throwTransferHandler","value","serialized","transferHandlers","isAllowedOrigin","allowedOrigins","origin","allowedOrigin","ep","callback","ev","id","type","path","argumentList","fromWireValue","returnValue","parent","prop","rawValue","proxy","transfer","wireValue","transferables","toWireValue","closeEndPoint","error","isMessagePort","endpoint","target","pendingListeners","data","resolver","createProxy","throwIfProxyReleased","isReleased","releaseEndpoint","requestResponseMessage","proxyCounter","proxyFinalizers","newCount","registerProxy","unregisterProxy","isProxyReleased","_target","r","p","_thisArg","rawArgumentList","last","processArguments","myFlat","arr","processed","v","transferCache","transfers","name","handler","serializedValue","msg","resolve","generateUUID"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { j as
|
|
1
|
+
import { j as C } from "../node_modules/react/jsx-runtime.js";
|
|
2
2
|
import R from "../node_modules/@d3fc/d3fc-chart/src/cartesian.js";
|
|
3
3
|
import "../node_modules/@d3fc/d3fc-webgl/src/scale/scaleMapper.js";
|
|
4
4
|
import V from "../node_modules/@d3fc/d3fc-webgl/src/style/fillColor.js";
|
|
@@ -11,7 +11,7 @@ import { createRoot as q } from "../node_modules/react-dom/client.js";
|
|
|
11
11
|
import { Error as Q } from "../common/Error.js";
|
|
12
12
|
import { DEFAULT_HEIGHT as w, DEFAULT_WIDTH as E, TITLE_LINE_HEIGHT as Y, MAX_SHOWN_UNIQUE_VALUES_IN_LABELS as J, BLACK as M, TITLE_MARGIN as Z } from "../constants.js";
|
|
13
13
|
import { splitTextByWidth as tt } from "../utils/splitTextByWidth.js";
|
|
14
|
-
import { MIN_MARGIN as L, DEFAULT_DOT_AES as
|
|
14
|
+
import { MIN_MARGIN as L, DEFAULT_DOT_AES as P } from "../scatterplot/constants.js";
|
|
15
15
|
import { createAesGetter as W } from "../scatterplot/utils/createAesGetter.js";
|
|
16
16
|
import { getTicksAndFormat as et } from "../scatterplot/utils/getTicksAndFormat.js";
|
|
17
17
|
import { createLabelPositioner as st } from "../scatterplot/utils/getVisibleLabels.js";
|
|
@@ -28,11 +28,11 @@ import { TextMeasurer as G } from "../utils/TextMeasurer/TextMeasurer.js";
|
|
|
28
28
|
import { SVGLayer as ot } from "./components/SVGLayer.js";
|
|
29
29
|
import { PADDINGS as A, TITLE_LINE as _, LEGEND_OFFSET as rt } from "./constants.js";
|
|
30
30
|
import lt from "../node_modules/@d3fc/d3fc-pointer/src/pointer.js";
|
|
31
|
-
import
|
|
32
|
-
import { DataFrameProvider as
|
|
31
|
+
import ht from "../node_modules/kdbush/index.js";
|
|
32
|
+
import { DataFrameProvider as nt } from "../common/useDataFrame.js";
|
|
33
33
|
import { DataFrame as dt } from "../DataFrame.js";
|
|
34
34
|
import { arrangeLegendParts as ct } from "../utils/arrangeLegendParts.js";
|
|
35
|
-
import { stringToNumberRgba as F, getColorWithFakeOpacity as
|
|
35
|
+
import { stringToNumberRgba as F, getColorWithFakeOpacity as H, GET_BLACK as I } from "./colors.js";
|
|
36
36
|
import T from "../node_modules/d3-scale/src/linear.js";
|
|
37
37
|
import O from "../node_modules/d3-scale/src/log.js";
|
|
38
38
|
import N from "../node_modules/d3-selection/src/select.js";
|
|
@@ -40,7 +40,7 @@ import mt from "../node_modules/d3-scale/src/ordinal.js";
|
|
|
40
40
|
import pt from "../node_modules/d3-scale/src/symlog.js";
|
|
41
41
|
import { sqrt as ut } from "../node_modules/d3-scale/src/pow.js";
|
|
42
42
|
import gt from "../node_modules/d3-polygon/src/contains.js";
|
|
43
|
-
var yt = Object.defineProperty, ft = (v, t, e) => t in v ? yt(v, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : v[t] = e,
|
|
43
|
+
var yt = Object.defineProperty, ft = (v, t, e) => t in v ? yt(v, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : v[t] = e, n = (v, t, e) => ft(v, typeof t != "symbol" ? t + "" : t, e);
|
|
44
44
|
function U(v) {
|
|
45
45
|
return v / 2.35 * (v / 2.35) * 64;
|
|
46
46
|
}
|
|
@@ -48,25 +48,25 @@ function D(v, t, e) {
|
|
|
48
48
|
return e.length === 0 ? !0 : e.some((s) => s.closed && s.points.length > 2 && gt(s.points, [v, t]));
|
|
49
49
|
}
|
|
50
50
|
function B(v, t, e) {
|
|
51
|
-
const s = e.find((a) => a.type === "dots"),
|
|
51
|
+
const s = e.find((a) => a.type === "dots"), h = e.find((a) => a.type === "curve");
|
|
52
52
|
return {
|
|
53
|
-
dotFill: W(v, t, (s == null ? void 0 : s.aes.dotFill) ??
|
|
54
|
-
dotSize: W(v, t, (s == null ? void 0 : s.aes.dotSize) ??
|
|
55
|
-
lineType: W(v, t, (
|
|
53
|
+
dotFill: W(v, t, (s == null ? void 0 : s.aes.dotFill) ?? P.color, "dotFill"),
|
|
54
|
+
dotSize: W(v, t, (s == null ? void 0 : s.aes.dotSize) ?? P.size, "dotSize"),
|
|
55
|
+
lineType: W(v, t, (h == null ? void 0 : h.aes.lineShape) ?? "solid", "lineShape")
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
58
|
class re {
|
|
59
59
|
constructor() {
|
|
60
|
-
|
|
60
|
+
n(this, "reactRoot", null), n(this, "parentNode", null), n(this, "rootNode", null), n(this, "canvasNode", null), n(this, "svgLayerElement", null), n(this, "svgLayerComponent", /* @__PURE__ */ C.jsx(C.Fragment, {})), n(this, "aesGetters", {
|
|
61
61
|
dotSize: () => 2,
|
|
62
62
|
dotFill: () => M,
|
|
63
63
|
lineType: () => "solid"
|
|
64
|
-
}),
|
|
64
|
+
}), n(this, "tools", null), n(this, "margins", {
|
|
65
65
|
top: L,
|
|
66
66
|
bottom: L,
|
|
67
67
|
left: L,
|
|
68
68
|
right: L
|
|
69
|
-
}),
|
|
69
|
+
}), n(this, "chartSizes", {
|
|
70
70
|
chartWidth: E,
|
|
71
71
|
// width of single chart
|
|
72
72
|
chartHeight: w,
|
|
@@ -75,18 +75,18 @@ class re {
|
|
|
75
75
|
// width of all charts in charts row, plus left axis, plus legend
|
|
76
76
|
totalHeight: w
|
|
77
77
|
// width of all charts in charts height, plus bottom axis, plus top title
|
|
78
|
-
}),
|
|
78
|
+
}), n(this, "scales", {
|
|
79
79
|
x: T().domain([0, 10]).range([0, E]),
|
|
80
80
|
y: T().domain([0, 10]).range([w, 0]),
|
|
81
81
|
xOriginal: T().domain([0, 10]).range([0, E]),
|
|
82
82
|
yOriginal: T().domain([0, 10]).range([w, 0])
|
|
83
|
-
}),
|
|
84
|
-
}),
|
|
85
|
-
}),
|
|
86
|
-
}),
|
|
83
|
+
}), n(this, "polygons", []), n(this, "onPolygonUpdateOutside", () => {
|
|
84
|
+
}), n(this, "onTooltipHintSwitch", () => {
|
|
85
|
+
}), n(this, "onLassoControlsStateUpdate", () => {
|
|
86
|
+
}), n(this, "zoomTransform", null), n(this, "zoomStateKey", ""), n(this, "selectedDot", null), n(this, "captionsSizes", {
|
|
87
87
|
xAxisCaptionsWidth: 30,
|
|
88
88
|
yAxisCaptionsWidth: 100
|
|
89
|
-
}),
|
|
89
|
+
}), n(this, "mainTitle", []), n(this, "legend", { width: 0, height: 0, items: [] }), n(this, "notCalculatedProps", {}), n(this, "allDots", []), n(this, "visibleLabels", []), n(this, "dataFrame", new dt("", {})), n(this, "onPolygonUpdate", (t) => {
|
|
90
90
|
this.polygons = t, this.updateByLasso();
|
|
91
91
|
const e = this.allDots.filter((s) => D(s.x, s.y, this.polygons)).map((s) => s.idx);
|
|
92
92
|
this.onPolygonUpdateOutside(e, t);
|
|
@@ -106,7 +106,7 @@ class re {
|
|
|
106
106
|
(t.width !== this.chartSizes.chartWidth || t.height !== this.chartSizes.chartHeight) && (this.chartSizes.chartWidth = t.width, this.chartSizes.chartHeight = t.height, this.scales.x.range([0, this.chartSizes.chartWidth]), this.scales.y.range([this.chartSizes.chartHeight, 0]));
|
|
107
107
|
}
|
|
108
108
|
updateViewport(t, e, s) {
|
|
109
|
-
const
|
|
109
|
+
const h = t.scale === "log" ? O() : T();
|
|
110
110
|
let { minX: a, minY: d, maxX: u, maxY: p } = s;
|
|
111
111
|
if (t.lowerValue !== void 0 && (a = Math.max(a, t.lowerValue)), t.upperValue !== void 0 && (u = Math.min(u, t.upperValue)), e.lowerValue !== void 0 && (d = Math.max(d, e.lowerValue)), e.upperValue !== void 0 && (p = Math.min(p, e.upperValue)), t.symmetricRange !== void 0) {
|
|
112
112
|
const r = t.symmetricRange;
|
|
@@ -122,8 +122,8 @@ class re {
|
|
|
122
122
|
d = r - y, p = r + y;
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
-
const f = [0, this.chartSizes.chartWidth], S =
|
|
126
|
-
|
|
125
|
+
const f = [0, this.chartSizes.chartWidth], S = h.copy().domain([a, u]).range([A.LEFT, this.chartSizes.chartWidth - A.RIGHT]);
|
|
126
|
+
h.domain([S.invert(0), S.invert(this.chartSizes.chartWidth)]).range(f).nice(), this.scales.x = h, this.scales.xOriginal = h.copy();
|
|
127
127
|
const c = e.scale === "log" ? O() : T(), o = [this.chartSizes.chartHeight, 0], g = c.copy().domain([d, p]).range([this.chartSizes.chartHeight - A.BOTTOM, A.TOP]);
|
|
128
128
|
c.domain([g.invert(this.chartSizes.chartHeight), g.invert(0)]).range(o).nice(), this.scales.y = c, this.scales.yOriginal = c.copy();
|
|
129
129
|
}
|
|
@@ -132,7 +132,7 @@ class re {
|
|
|
132
132
|
function e(d) {
|
|
133
133
|
return Math.max(...d.map((u) => t.getTextWidth(u)));
|
|
134
134
|
}
|
|
135
|
-
const { ticks: s, format:
|
|
135
|
+
const { ticks: s, format: h } = et(this.scales.y, !1), a = e(s.map(h));
|
|
136
136
|
this.captionsSizes = {
|
|
137
137
|
xAxisCaptionsWidth: 20,
|
|
138
138
|
yAxisCaptionsWidth: a
|
|
@@ -154,7 +154,7 @@ class re {
|
|
|
154
154
|
right: this.legend.width + L
|
|
155
155
|
}, 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");
|
|
156
156
|
}
|
|
157
|
-
updateLegendSize(t, e, s,
|
|
157
|
+
updateLegendSize(t, e, s, h) {
|
|
158
158
|
if (!t.show) {
|
|
159
159
|
this.legend = { width: 0, height: 0, items: [] };
|
|
160
160
|
return;
|
|
@@ -170,19 +170,19 @@ class re {
|
|
|
170
170
|
}
|
|
171
171
|
const g = {};
|
|
172
172
|
o.values.forEach((m) => {
|
|
173
|
-
g[m] || (g[m] = { ...
|
|
173
|
+
g[m] || (g[m] = { ...P }), o.usedAes.forEach((i) => {
|
|
174
174
|
i === "dotFill" && (g[m].color = o.aesMap(m, i) ?? M), i === "dotSize" && (g[m].size = Number(o.aesMap(m, i) ?? 3));
|
|
175
175
|
});
|
|
176
176
|
});
|
|
177
177
|
const r = c.label ?? c.value, y = mt().domain(o.values).range(o.values.map((m) => g[m]));
|
|
178
178
|
a.push({ ...d, id: c.value, type: "dots", title: r, scale: y, values: o.values, labels: o.labels });
|
|
179
|
-
}),
|
|
179
|
+
}), h.forEach((c) => {
|
|
180
180
|
if (c.type === "dots" && $(c.aes.dotFill)) {
|
|
181
181
|
const { domain: o, range: g, columnName: r, type: y = "linear" } = c.aes.dotFill, m = r.label ?? r.value, i = it(g, o, "linear"), l = (y === "log" ? pt() : T()).domain(o).range([this.chartSizes.chartHeight, 0]), x = at(l, o);
|
|
182
182
|
a.push({ ...d, id: "dotFill", type: "continuous", title: m, scale: i, tickPositionScale: l, values: x });
|
|
183
183
|
}
|
|
184
184
|
if (c.type === "dots" && $(c.aes.dotSize)) {
|
|
185
|
-
const { columnName: o, domain: g, range: r } = c.aes.dotSize, y = o.label ?? o.value, m = ut(g, r), i = m.ticks(3), l = m.tickFormat(3), x = i.reduce((z,
|
|
185
|
+
const { columnName: o, domain: g, range: r } = c.aes.dotSize, y = o.label ?? o.value, m = ut(g, r), i = m.ticks(3), l = m.tickFormat(3), x = i.reduce((z, b) => (z[String(b)] = l(b), z), {});
|
|
186
186
|
a.push({ ...d, id: o.value, type: "size", title: y, scale: m, values: i, labels: x });
|
|
187
187
|
}
|
|
188
188
|
}), !a.length) {
|
|
@@ -196,12 +196,12 @@ class re {
|
|
|
196
196
|
items: u
|
|
197
197
|
};
|
|
198
198
|
}
|
|
199
|
-
initSettings(t, e, s,
|
|
199
|
+
initSettings(t, e, s, h, a, d) {
|
|
200
200
|
const { xAxis: u, yAxis: p, size: f, title: S, legend: c } = e;
|
|
201
|
-
this.updateChartSizes(f), this.updateViewport(u, p, s), this.updateCaptionsSize(), this.updateLegendSize(c,
|
|
201
|
+
this.updateChartSizes(f), this.updateViewport(u, p, s), this.updateCaptionsSize(), this.updateLegendSize(c, h, d, a), this.createMainTitle(S), this.updateMargins(), this.aesGetters = B(this.dataFrame, h, a);
|
|
202
202
|
const o = V().data(t).value((i) => {
|
|
203
203
|
const l = F(this.aesGetters.dotFill(i.idx));
|
|
204
|
-
return l[3] = !i.dimmed && D(i.x, i.y, this.polygons) ? 1 : 0.4,
|
|
204
|
+
return l[3] = !i.dimmed && D(i.x, i.y, this.polygons) ? 1 : 0.4, H(l, l);
|
|
205
205
|
}), g = k().equals((i, l) => i === l).size((i) => U(this.aesGetters.dotSize(i.idx))).crossValue((i) => i.x).mainValue((i) => i.y).decorate((i) => o(i)), r = X().scaleExtent([0.1, 1e3]).filter((i) => i.type === "wheel" || i.metaKey || i.ctrlKey).on("start", () => {
|
|
206
206
|
this.selectedDot = null;
|
|
207
207
|
}).on("zoom", (i) => {
|
|
@@ -234,8 +234,8 @@ class re {
|
|
|
234
234
|
}
|
|
235
235
|
updateAes(t, e) {
|
|
236
236
|
this.tools !== null && (this.aesGetters = B(this.dataFrame, t, e), this.tools.fillColor.value((s) => {
|
|
237
|
-
const
|
|
238
|
-
return a[3] = !s.dimmed && D(s.x, s.y, this.polygons) ? 1 : 0.4,
|
|
237
|
+
const h = this.aesGetters.dotFill ?? I, a = F(h(s.idx));
|
|
238
|
+
return a[3] = !s.dimmed && D(s.x, s.y, this.polygons) ? 1 : 0.4, H(a, a);
|
|
239
239
|
}));
|
|
240
240
|
}
|
|
241
241
|
updatePointSize() {
|
|
@@ -244,23 +244,23 @@ class re {
|
|
|
244
244
|
updateByLasso() {
|
|
245
245
|
var t;
|
|
246
246
|
this.tools !== null && ((t = this.tools) == null || t.fillColor.value((e) => {
|
|
247
|
-
const s = this.aesGetters.dotFill ?? I,
|
|
248
|
-
return
|
|
247
|
+
const s = this.aesGetters.dotFill ?? I, h = F(s(e.idx));
|
|
248
|
+
return h[3] = !e.dimmed && D(e.x, e.y, this.polygons) ? 1 : 0.4, H(h, h);
|
|
249
249
|
}), this.renderWebglLayer());
|
|
250
250
|
}
|
|
251
251
|
createQuadtree(t) {
|
|
252
|
-
const e = new
|
|
252
|
+
const e = new ht(t.length, 512);
|
|
253
253
|
for (let s = 0; s < t.length; s++)
|
|
254
254
|
e.add(t[s].x, t[s].y);
|
|
255
255
|
return e.finish();
|
|
256
256
|
}
|
|
257
257
|
getClosestDot(t, e) {
|
|
258
|
-
var s,
|
|
258
|
+
var s, h;
|
|
259
259
|
const a = (s = this.tools) == null ? void 0 : s.qt;
|
|
260
260
|
if (!a) return null;
|
|
261
|
-
const d = this.allDots, u = this.scales.x.invert(t), p = this.scales.y.invert(e), f = 1 / (((
|
|
262
|
-
const l = d[i], x = this.scales.x(l.x) - t, z = this.scales.y(l.y) - e,
|
|
263
|
-
return (m === null ||
|
|
261
|
+
const d = this.allDots, u = this.scales.x.invert(t), p = this.scales.y.invert(e), f = 1 / (((h = this.zoomTransform) == null ? void 0 : h.k) || 1), S = u - f, c = u + f, o = p - f, g = p + f, r = a.range(S, o, c, g), y = r.reduce((m, i) => {
|
|
262
|
+
const l = d[i], x = this.scales.x(l.x) - t, z = this.scales.y(l.y) - e, b = Math.hypot(x, z);
|
|
263
|
+
return (m === null || b < m.distance) && (m.index = i, m.distance = b), m;
|
|
264
264
|
}, {
|
|
265
265
|
index: -1,
|
|
266
266
|
distance: 1 / 0
|
|
@@ -270,8 +270,10 @@ class re {
|
|
|
270
270
|
updateDots(t) {
|
|
271
271
|
this.tools !== null && (N(this.canvasNode).datum(t), this.tools.fillColor.data(t), this.tools.qt = this.createQuadtree(t), this.allDots = t);
|
|
272
272
|
}
|
|
273
|
-
render(t, e, s,
|
|
274
|
-
|
|
273
|
+
render(t, e, s, h, a, d, u, p, f, S, c, o, g) {
|
|
274
|
+
this.dataFrame = t;
|
|
275
|
+
const r = s.size.width !== this.chartSizes.chartWidth || s.size.height !== this.chartSizes.chartHeight;
|
|
276
|
+
if (this.tools === null)
|
|
275
277
|
this.initSettings(
|
|
276
278
|
a,
|
|
277
279
|
s,
|
|
@@ -281,13 +283,13 @@ class re {
|
|
|
281
283
|
S
|
|
282
284
|
);
|
|
283
285
|
else {
|
|
284
|
-
const { title:
|
|
285
|
-
this.updateChartSizes(
|
|
286
|
+
const { title: y, legend: m, size: i } = s;
|
|
287
|
+
this.updateChartSizes(i), this.updateLegendSize(m, f, S, p), this.createMainTitle(y), this.updateMargins(), this.updateAes(f, p);
|
|
286
288
|
}
|
|
287
|
-
this.onPolygonUpdateOutside = c, this.onTooltipHintSwitch = o, this.onLassoControlsStateUpdate = g, this.allDots !== a
|
|
289
|
+
this.onPolygonUpdateOutside = c, this.onTooltipHintSwitch = o, this.onLassoControlsStateUpdate = g, this.allDots !== a ? (this.updateDots(a), this.visibleLabels = this.computeLabels(a)) : r && (this.visibleLabels = this.computeLabels(a)), this.notCalculatedProps = {
|
|
288
290
|
settingsId: e,
|
|
289
291
|
chartSettings: s,
|
|
290
|
-
keyColumn:
|
|
292
|
+
keyColumn: h,
|
|
291
293
|
dotsByGrouping: u,
|
|
292
294
|
layers: p
|
|
293
295
|
}, this.renderWebglLayer(), this.renderSvgLayer();
|
|
@@ -320,20 +322,20 @@ class re {
|
|
|
320
322
|
onTooltipHintSwitch: this.onTooltipHintSwitch,
|
|
321
323
|
onLassoControlsStateUpdate: this.onLassoControlsStateUpdate
|
|
322
324
|
};
|
|
323
|
-
this.svgLayerComponent = /* @__PURE__ */
|
|
325
|
+
this.svgLayerComponent = /* @__PURE__ */ C.jsx(nt, { dataFrame: this.dataFrame, children: /* @__PURE__ */ C.jsx(ot, { ...e }) }), (t = this.reactRoot) == null || t.render(this.svgLayerComponent);
|
|
324
326
|
}
|
|
325
327
|
renderError(t) {
|
|
326
328
|
var e;
|
|
327
|
-
(e = this.reactRoot) == null || e.render(/* @__PURE__ */
|
|
329
|
+
(e = this.reactRoot) == null || e.render(/* @__PURE__ */ C.jsx(Q, { message: t }));
|
|
328
330
|
}
|
|
329
331
|
computeLabels(t) {
|
|
330
|
-
const e = new G("16px Manrope"), s = st(this.chartSizes.chartWidth, this.chartSizes.chartHeight),
|
|
332
|
+
const e = new G("16px Manrope"), s = st(this.chartSizes.chartWidth, this.chartSizes.chartHeight), h = [];
|
|
331
333
|
for (let a = 0; a < t.length; a++) {
|
|
332
334
|
const d = t[a];
|
|
333
335
|
if (d.label == null)
|
|
334
336
|
continue;
|
|
335
337
|
const u = String(d.label), p = e.getTextMetrics(u), f = this.scales.x(d.x), S = this.scales.y(d.y), c = p.width, o = p.actualBoundingBoxAscent + p.actualBoundingBoxDescent, g = 10, r = s(f, S, c, o, g);
|
|
336
|
-
r &&
|
|
338
|
+
r && h.push({
|
|
337
339
|
x: f,
|
|
338
340
|
y: S,
|
|
339
341
|
dot: d,
|
|
@@ -345,7 +347,7 @@ class re {
|
|
|
345
347
|
yPosition: r[1]
|
|
346
348
|
});
|
|
347
349
|
}
|
|
348
|
-
return
|
|
350
|
+
return h;
|
|
349
351
|
}
|
|
350
352
|
updateLabelsPosition(t) {
|
|
351
353
|
for (let e = 0; e < t.length; e++) {
|
package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartRenderer.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot-umap/ChartRenderer.tsx"],"sourcesContent":["import { chartCartesian } from '@d3fc/d3fc-chart';\nimport type { CartesianChart } from '@d3fc/d3fc-chart/src/cartesian';\nimport type { ScaleLinear } from 'd3-scale';\nimport { scaleLinear, scaleLog, scaleOrdinal, scaleSqrt, scaleSymlog } from 'd3-scale';\nimport { select } from 'd3-selection';\nimport type { D3ZoomEvent, ZoomBehavior, ZoomTransform } from 'd3-zoom';\nimport { zoom } from 'd3-zoom';\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 { DotAesItem, LegendData, LegendItem } from '../common/types';\nimport {\n BLACK,\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n MAX_SHOWN_UNIQUE_VALUES_IN_LABELS,\n TITLE_LINE_HEIGHT,\n TITLE_MARGIN\n} from '../constants';\nimport { splitTextByWidth } from '../discrete/utils';\nimport { DEFAULT_DOT_AES, MIN_MARGIN } from '../scatterplot/constants';\nimport { createAesGetter } from '../scatterplot/utils/createAesGetter';\nimport { getTicksAndFormat } from '../scatterplot/utils/getTicksAndFormat';\nimport type { Label } from '../scatterplot/utils/getVisibleLabels';\nimport { createLabelPositioner } from '../scatterplot/utils/getVisibleLabels';\nimport type { ColumnName, ScatterplotEventHandlers } from '../types';\nimport { isContinuousAes } from '../types';\nimport type { ScatterplotUmapLegendInfo } from '../types/scatterplot-umap';\nimport { getContinuousColorScale } from '../utils/getContinuousColorScale';\nimport { getContinuousLegendTicks } from '../utils/getContinuousLegendTicks';\nimport { TextMeasurer } from '../utils/TextMeasurer/TextMeasurer';\nimport { SVGLayer } from './components/SVGLayer';\nimport { LEGEND_OFFSET, PADDINGS, TITLE_LINE } from './constants';\nimport type { CurveLayer, DotsLayer, ScatterplotUmapLayer, ScatterplotUmapSettingsImpl } from './SettingsImpl';\nimport type {\n AesGetters,\n CaptionsSizes,\n ChartScales, ChartSizes,\n Dot,\n DotsExtents,\n LassoControlsState,\n Margins,\n Polygon,\n SVGLayerProps,\n} from './types';\n// @ts-ignore\nimport { seriesSvgMulti, seriesWebglMulti, seriesWebglPoint } from '@d3fc/d3fc-series';\n// @ts-ignore\nimport { webglFillColor } from '@d3fc/d3fc-webgl';\n// @ts-ignore\nimport { pointer } from '@d3fc/d3fc-pointer';\nimport { polygonContains } from 'd3-polygon';\nimport KDBush from 'kdbush';\nimport { DataFrameProvider } from '../common/useDataFrame';\nimport { DataFrame } from '../DataFrame';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport { GET_BLACK, getColorWithFakeOpacity, stringToNumberRgba } from './colors';\n\nfunction convertDotRToSymbolSize(r:number) {\n return (r / 2.35) * (r / 2.35) * 64;\n}\n\nfunction isDotInsidePolygons(x:number, y:number, polygons: Polygon[]) {\n if (polygons.length === 0) {\n return true;\n }\n return polygons.some((p) => p.closed && p.points.length > 2 && polygonContains(p.points, [x, y]));\n}\n\nfunction getGettersFromLayers(\n dataFrame: DataFrame,\n legendInfo: ScatterplotUmapLegendInfo,\n layers: ScatterplotUmapSettingsImpl['layers'],\n): AesGetters {\n const dotLayer = layers.find(l => l.type === 'dots') as DotsLayer | undefined;\n const curveLayer = layers.find(l => l.type === 'curve') as CurveLayer | undefined;\n return {\n dotFill: createAesGetter(dataFrame, legendInfo, dotLayer?.aes.dotFill ?? DEFAULT_DOT_AES.color, 'dotFill'),\n dotSize: createAesGetter(dataFrame, legendInfo, dotLayer?.aes.dotSize ?? DEFAULT_DOT_AES.size, 'dotSize'),\n lineType: createAesGetter(dataFrame, legendInfo, curveLayer?.aes.lineShape ?? 'solid', 'lineShape')\n };\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n canvasNode: HTMLElement | null = null;\n\n svgLayerElement: SVGElement | null = null;\n svgLayerComponent: ReactElement = (<></>);\n\n aesGetters: AesGetters = {\n dotSize: () => 2,\n dotFill: () => BLACK,\n lineType: () => 'solid'\n };\n\n tools: {\n webglChart: CartesianChart<any, any>;\n qt?: KDBush;\n fillColor: () => {\n value: (setter: (d: Dot) => [number, number, number, number]) => void;\n data: (setter: () => Dot[]) => void;\n };\n pointSeries: () => any;\n zoom: ZoomBehavior<any, any>;\n } | null = null;\n\n margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n chartSizes: ChartSizes = {\n chartWidth: DEFAULT_WIDTH, // width of single chart\n chartHeight: DEFAULT_HEIGHT, // height of single chart\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 scales: ChartScales = {\n x: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH]),\n y: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0]),\n xOriginal: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH]),\n yOriginal: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0]),\n };\n\n polygons:Polygon[] = [];\n onPolygonUpdateOutside: ScatterplotEventHandlers['onPolygonUpdate'] = () => undefined;\n onTooltipHintSwitch: ScatterplotEventHandlers['onTooltipHintSwitch'] = () => undefined;\n onLassoControlsStateUpdate: ScatterplotEventHandlers['onLassoControlsStateUpdate'] = () => undefined;\n\n zoomTransform: ZoomTransform | null = null;\n zoomStateKey = '';\n selectedDot: Dot | null = null;\n captionsSizes: CaptionsSizes = {\n xAxisCaptionsWidth: 30,\n yAxisCaptionsWidth: 100,\n };\n mainTitle: string[] = []; // can be multiline\n legend: LegendData = {width: 0, height: 0, items: []};\n\n notCalculatedProps: Partial<SVGLayerProps> = {};\n\n allDots: Dot[] = [];\n visibleLabels: Label[] = [];\n dataFrame: DataFrame = new DataFrame('', {});\n\n clear() {\n if (this.parentNode && this.rootNode && this.canvasNode) {\n this.parentNode?.removeChild(this.rootNode);\n this.parentNode?.removeChild(this.canvasNode);\n this.parentNode = null;\n this.rootNode = null;\n this.canvasNode = null;\n this.svgLayerElement = null;\n this.tools = 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.canvasNode = document.createElement('div');\n this.parentNode.appendChild(this.rootNode);\n this.parentNode.appendChild(this.canvasNode);\n this.reactRoot = createRoot(this.rootNode);\n }\n }\n\n updateChartSizes(size: ScatterplotUmapSettingsImpl['chartSettings']['size']) {\n if (size.width !== this.chartSizes.chartWidth || size.height !== this.chartSizes.chartHeight) {\n // NB: now chart sizes always change with one multiplier for width/height so qt stays without changes\n this.chartSizes.chartWidth = size.width;\n this.chartSizes.chartHeight = size.height;\n this.scales.x.range([0, this.chartSizes.chartWidth]);\n this.scales.y.range([this.chartSizes.chartHeight, 0]);\n }\n \n }\n\n updateViewport(\n xAxis: ScatterplotUmapSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotUmapSettingsImpl['chartSettings']['yAxis'],\n dotsExtents: DotsExtents\n ) {\n const scaleX = xAxis.scale === 'log' ? scaleLog() : scaleLinear();\n\n let {minX, minY, maxX, maxY} = dotsExtents;\n if (xAxis.lowerValue !== undefined) {\n minX = Math.max(minX, xAxis.lowerValue);\n }\n if (xAxis.upperValue !== undefined) {\n maxX = Math.min(maxX, xAxis.upperValue);\n }\n if (yAxis.lowerValue !== undefined) {\n minY = Math.max(minY, yAxis.lowerValue);\n }\n if (yAxis.upperValue !== undefined) {\n maxY = Math.min(maxY, yAxis.upperValue);\n }\n if (xAxis.symmetricRange !== undefined) {\n const middle = xAxis.symmetricRange;\n if (middle >= minX && middle <= maxX) {\n const halfRange = Math.max(middle - minX, maxX - middle);\n minX = middle - halfRange;\n maxX = middle + halfRange;\n }\n }\n if (typeof yAxis.symmetricRange !== 'undefined') {\n const middle = yAxis.symmetricRange;\n if (middle >= minY && middle <= maxY) {\n const halfRange = Math.max(middle - minY, maxY - middle);\n minY = middle - halfRange;\n maxY = middle + halfRange;\n }\n }\n\n const rangeH = [0, this.chartSizes.chartWidth];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempX = scaleX\n .copy()\n .domain([minX, maxX])\n .range([PADDINGS.LEFT, this.chartSizes.chartWidth - PADDINGS.RIGHT]);\n scaleX\n .domain([tempX.invert(0), tempX.invert(this.chartSizes.chartWidth)])\n .range(rangeH)\n .nice();\n this.scales.x = scaleX;\n this.scales.xOriginal = scaleX.copy();\n\n const scaleY = yAxis.scale === 'log' ? scaleLog() : scaleLinear();\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 = scaleY\n .copy()\n .domain([minY, maxY])\n .range([this.chartSizes.chartHeight - PADDINGS.BOTTOM, PADDINGS.TOP]);\n scaleY\n .domain([tempY.invert(this.chartSizes.chartHeight), tempY.invert(0)])\n .range(rangeV)\n .nice();\n this.scales.y = scaleY;\n this.scales.yOriginal = scaleY.copy();\n }\n\n updateCaptionsSize() {\n const textMeasurer = new TextMeasurer('600 14px Arial');\n\n function getMaxTickWidth(ticks: string[]) {\n return Math.max(...ticks.map(key => textMeasurer.getTextWidth(key)));\n }\n\n const {ticks, format} = getTicksAndFormat(this.scales.y, false);\n const maxYTick = getMaxTickWidth(ticks.map(format));\n\n this.captionsSizes = {\n xAxisCaptionsWidth: 20,\n yAxisCaptionsWidth: maxYTick,\n };\n }\n\n createMainTitle(title: ScatterplotUmapSettingsImpl['chartSettings']['title']) {\n this.mainTitle = splitTextByWidth(\n title.name,\n this.chartSizes.totalWidth - this.margins.left - this.margins.right,\n 20\n );\n }\n\n updateMargins() {\n const titleTextHeight = TITLE_LINE_HEIGHT * this.mainTitle.length;\n const titleHeight = titleTextHeight > 0 ? titleTextHeight + TITLE_MARGIN * 2 : 0;\n this.margins = {\n top: Math.max(titleHeight, MIN_MARGIN),\n bottom: MIN_MARGIN + this.captionsSizes.xAxisCaptionsWidth + TITLE_LINE,\n left: MIN_MARGIN + this.captionsSizes.yAxisCaptionsWidth + TITLE_LINE,\n right: this.legend.width + MIN_MARGIN,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartWidth + this.margins.right;\n this.chartSizes.totalHeight =\n this.margins.top + Math.max(this.chartSizes.chartHeight, this.legend.height) + this.margins.bottom;\n\n select(this.canvasNode)\n .style('width', this.chartSizes.chartWidth + 'px')\n .style('height', this.chartSizes.chartHeight + 'px')\n .style('top', this.margins.top + 'px')\n .style('left', this.margins.left + 'px');\n }\n\n updateLegendSize(\n legend: ScatterplotUmapSettingsImpl['chartSettings']['legend'],\n legendLabels: ScatterplotUmapLegendInfo,\n grouping: ColumnName[],\n layers: ScatterplotUmapLayer[]\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 grouping.forEach(column => {\n const info = legendLabels[column.value];\n if (info.usedAes.length === 0 || !info.aesMap) {\n return;\n }\n if (info.values.length > MAX_SHOWN_UNIQUE_VALUES_IN_LABELS) {\n console.warn(`Too many values for discrete legend (${info.values.length})`);\n return;\n }\n const aesData: Record<string, DotAesItem> = {};\n info.values.forEach(category => {\n if (!aesData[category]) {\n aesData[category] = {...DEFAULT_DOT_AES} as DotAesItem;\n }\n info.usedAes.forEach(key => {\n if (key === 'dotFill') {\n aesData[category].color = (info.aesMap(category, key) ?? BLACK) as string;\n }\n if (key === 'dotSize') {\n aesData[category].size = Number(info.aesMap(category, key) ?? 3);\n }\n });\n });\n\n const title = column.label ?? column.value;\n const scale = scaleOrdinal<DotAesItem>()\n .domain(info.values)\n .range(info.values.map(value => aesData[value]));\n legendItems.push({...emptySizes, id: column.value, type: 'dots', title, scale, values:info.values, labels:info.labels});\n });\n\n layers.forEach(layer => {\n if (layer.type === 'dots' && isContinuousAes(layer.aes.dotFill)) {\n const {domain, range, columnName, type = 'linear'} = layer.aes.dotFill;\n const title = columnName.label ?? columnName.value;\n const colorScale = getContinuousColorScale(range, domain, 'linear') as ScaleLinear<string, string>; // always linear for legend - scale to render gradient, not for dots\n const tickPositionScale = (type === 'log' ? scaleSymlog<string, string>() : scaleLinear<string, string>())\n .domain(domain)\n // @ts-ignore\n .range([this.chartSizes.chartHeight, 0]);\n const values = getContinuousLegendTicks(tickPositionScale, domain as [number, number]);\n legendItems.push({...emptySizes, id: 'dotFill', type: 'continuous', title, scale: colorScale, tickPositionScale, values});\n }\n if (layer.type === 'dots' && isContinuousAes(layer.aes.dotSize)) {\n const {columnName, domain, range} = layer.aes.dotSize;\n const title = columnName.label ?? columnName.value;\n const scale = scaleSqrt(domain, range);\n const values = scale.ticks(3);\n const format = scale.tickFormat(3);\n const labels = values.reduce((res: Record<string, string>, v) => {\n res[String(v)] = format(v);\n return res;\n }, {});\n legendItems.push({...emptySizes, id: columnName.value, type: 'size', title, scale, values, 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 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 initSettings(\n dots: Dot[],\n chartSettings: ScatterplotUmapSettingsImpl['chartSettings'],\n dotExtents: DotsExtents,\n legendInfo: ScatterplotUmapLegendInfo,\n layers: ScatterplotUmapSettingsImpl['layers'],\n grouping: ColumnName[]\n ) {\n const {xAxis, yAxis, size, title, legend} = chartSettings;\n this.updateChartSizes(size);\n this.updateViewport(xAxis, yAxis, dotExtents);\n this.updateCaptionsSize();\n this.updateLegendSize(legend, legendInfo, grouping, layers);\n this.createMainTitle(title);\n this.updateMargins();\n\n this.aesGetters = getGettersFromLayers(this.dataFrame, legendInfo, layers);\n\n const fillColor = webglFillColor()\n .data(dots)\n .value((d: Dot) => {\n const rgba = stringToNumberRgba(this.aesGetters.dotFill(d.idx));\n rgba[3] = !d.dimmed && isDotInsidePolygons(d.x, d.y, this.polygons) ? 1 : 0.4;\n return getColorWithFakeOpacity(rgba, rgba);\n });\n\n const pointSeries = seriesWebglPoint()\n .equals((a: Dot[], b: Dot[]) => a === b)\n .size((d: Dot) => convertDotRToSymbolSize(this.aesGetters.dotSize(d.idx)))\n .crossValue((d: Dot) => d.x)\n .mainValue((d: Dot) => d.y)\n .decorate((program: unknown) => fillColor(program));\n\n const z = zoom()\n .scaleExtent([0.1, 1000])\n .filter((e:MouseEvent) => {\n return e.type === 'wheel' || e.metaKey || e.ctrlKey;\n })\n .on('start', () => {\n this.selectedDot = null;\n })\n .on('zoom', (e: D3ZoomEvent<SVGElement, unknown>) => {\n const transform = e.transform;\n const x = transform.rescaleX(this.scales.xOriginal);\n const y = transform.rescaleY(this.scales.yOriginal);\n this.scales.x.domain(x.domain());\n this.scales.y.domain(y.domain());\n\n this.zoomTransform = transform;\n this.zoomStateKey = `${transform.x}_${transform.y}_${transform.k}`; // need it to update axes\n\n this.updateLabelsPosition(this.visibleLabels);\n this.renderSvgLayer();\n this.renderWebglLayer();\n }).on('end', () => {\n this.visibleLabels = this.computeLabels(this.allDots);\n this.renderSvgLayer();\n });\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const p = pointer().on('point', ([coord]) => {\n let closestDatum;\n if (coord) {\n closestDatum = this.getClosestDot(coord.x, coord.y);\n }\n \n const needRedraw =\n (this.selectedDot && !closestDatum) ||\n (!this.selectedDot && closestDatum) ||\n this.selectedDot?.idx !== closestDatum?.idx;\n\n this.selectedDot = closestDatum ?? null;\n\n if (needRedraw) {\n this.renderSvgLayer();\n }\n });\n\n const webglChart = chartCartesian({\n xScale: this.scales.x,\n yScale: this.scales.y,\n })\n .xAxisHeight(() => '0') // removing build-in axes from chartCartesian\n .yAxisWidth(() => '0') // removing build-in axes from chartCartesian\n .svgPlotArea(seriesSvgMulti())\n .webglPlotArea(\n // only render the point series on the WebGL layer\n seriesWebglMulti()\n .series([pointSeries])\n .mapping((d: unknown) => d)\n )\n .decorate(selection => {\n const s = selection.enter();\n if (s && !this.svgLayerElement) {\n s.style('grid-template-columns', '0 auto 1fr auto 0'); // removing build-in axes from chartCartesian\n s.style('grid-template-rows', '0 auto 1fr auto 0'); // removing build-in axes from chartCartesian\n this.svgLayerElement = s.select('.svg-plot-area.plot-area svg').node() as SVGElement;\n }\n s.select('.svg-plot-area.plot-area').attr('class', 'svg-plot-area plot-area miplots-scatterplot-plot-area')\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .call(z)\n .call(p);\n });\n\n this.tools = {\n webglChart,\n zoom: z,\n fillColor,\n pointSeries,\n };\n\n select(this.canvasNode)\n .datum(dots)\n .style('position', 'absolute')\n .style('width', this.chartSizes.chartWidth + 'px')\n .style('height', this.chartSizes.chartHeight + 'px')\n .style('top', this.margins.top + 'px')\n .style('left', this.margins.left + 'px');\n }\n\n updateAes(\n legendInfo: ScatterplotUmapLegendInfo,\n layers: ScatterplotUmapSettingsImpl['layers']\n ) {\n if (this.tools === null) {\n return;\n }\n this.aesGetters = getGettersFromLayers(this.dataFrame, legendInfo, layers);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.tools.fillColor.value((d: Dot) => {\n const colorGetter = this.aesGetters.dotFill ?? GET_BLACK;\n const rgba = stringToNumberRgba(colorGetter(d.idx));\n rgba[3] = !d.dimmed && isDotInsidePolygons(d.x, d.y, this.polygons) ? 1 : 0.4;\n return getColorWithFakeOpacity(rgba, rgba);\n });\n }\n\n updatePointSize() {\n if (this.tools === null) {\n return;\n }\n // TODO: try remove array copy\n select(this.canvasNode).datum([...this.allDots]);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.tools.pointSeries.size((d: Dot) => convertDotRToSymbolSize(this.aesGetters.dotSize(d.data)));\n }\n\n updateByLasso() {\n if (this.tools === null) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.tools?.fillColor.value((d: Dot) => {\n const colorGetter = this.aesGetters.dotFill ?? GET_BLACK;\n const rgba = stringToNumberRgba(colorGetter(d.idx));\n rgba[3] = !d.dimmed && isDotInsidePolygons(d.x, d.y, this.polygons) ? 1 : 0.4;\n return getColorWithFakeOpacity(rgba, rgba);\n });\n this.renderWebglLayer();\n }\n\n createQuadtree(dots: Dot[]): KDBush {\n const tree = new KDBush(dots.length, 512);\n\n for (let i = 0; i < dots.length; i++) {\n tree.add(dots[i].x, dots[i].y);\n } \n\n return tree.finish();\n }\n\n getClosestDot(_x: number, _y: number): Dot | null {\n const tree = this.tools?.qt;\n if (!tree) return null;\n const dots = this.allDots;\n const x = this.scales.x.invert(_x);\n const y = this.scales.y.invert(_y);\n const radius = 1 / (this.zoomTransform?.k || 1);\n const minX = x - radius;\n const maxX = x + radius;\n const minY = y - radius;\n const maxY = y + radius;\n\n const indexes = tree.range(minX, minY, maxX, maxY);\n const closest = indexes.reduce((closest, idx: number) => {\n const dot = dots[idx];\n const dX = this.scales.x(dot.x) - _x;\n const dY = this.scales.y(dot.y) - _y;\n const distance = Math.hypot(dX, dY);\n if (closest === null || distance < closest.distance) {\n closest.index = idx;\n closest.distance = distance;\n }\n return closest;\n }, {\n index: -1,\n distance: Infinity\n });\n return indexes.length === 0 || closest.index === -1 ? null : dots[closest.index];\n }\n\n updateDots(dots: Dot[]) {\n if (this.tools === null) {\n return;\n }\n select(this.canvasNode).datum(dots);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.tools.fillColor.data(dots);\n this.tools.qt = this.createQuadtree(dots);\n this.allDots = dots;\n }\n\n render(\n dataFrame: DataFrame,\n settingsId: string,\n chartSettings: ScatterplotUmapSettingsImpl['chartSettings'],\n keyColumn: ColumnName | null,\n dots: Dot[],\n dotExtents: DotsExtents,\n dotsByGrouping: Record<string, Dot[]>,\n layers: ScatterplotUmapSettingsImpl['layers'],\n legendInfo: ScatterplotUmapLegendInfo,\n grouping: ColumnName[],\n onPolygonUpdateOutside: ScatterplotEventHandlers['onPolygonUpdate'],\n onTooltipHintSwitch: (v:boolean) => void,\n onLassoControlsStateUpdate: (v:LassoControlsState) => void,\n ) {\n this.dataFrame = dataFrame; \n if (this.tools === null) {\n this.initSettings(\n dots,\n chartSettings,\n dotExtents,\n legendInfo,\n layers,\n grouping\n ); \n } else {\n const {title, legend, size} = chartSettings;\n this.updateChartSizes(size);\n this.updateLegendSize(legend, legendInfo, grouping, layers);\n this.createMainTitle(title);\n this.updateMargins();\n this.updateAes(legendInfo, layers);\n }\n\n this.onPolygonUpdateOutside = onPolygonUpdateOutside;\n this.onTooltipHintSwitch = onTooltipHintSwitch;\n this.onLassoControlsStateUpdate = onLassoControlsStateUpdate;\n\n if (this.allDots !== dots) {\n this.updateDots(dots);\n this.visibleLabels = this.computeLabels(dots);\n }\n\n this.notCalculatedProps = {\n settingsId,\n chartSettings,\n keyColumn,\n dotsByGrouping,\n layers\n };\n\n this.renderWebglLayer();\n this.renderSvgLayer();\n }\n\n renderWebglLayer() {\n if (this.tools?.webglChart) {\n select(this.canvasNode).call(this.tools?.webglChart);\n }\n }\n\n onPolygonUpdate = (p:Polygon[]) => {\n this.polygons = p;\n this.updateByLasso();\n const filteredDotsIndexes = this.allDots\n .filter(d => isDotInsidePolygons(d.x, d.y, this.polygons))\n .map(d => d.idx);\n this.onPolygonUpdateOutside(filteredDotsIndexes, p);\n };\n\n renderSvgLayer() {\n const props = {\n settingsId: this.notCalculatedProps.settingsId,\n chartSettings: this.notCalculatedProps.chartSettings,\n keyColumn: this.notCalculatedProps.keyColumn,\n dotsByGrouping: this.notCalculatedProps.dotsByGrouping,\n layers: this.notCalculatedProps.layers,\n chartSizes: this.chartSizes,\n scales: this.scales,\n margins: this.margins,\n mainTitle: this.mainTitle,\n captionsSizes: this.captionsSizes,\n container: this.svgLayerElement,\n zoomStateKey: this.zoomStateKey,\n selectedDot: this.selectedDot,\n aesGetters: this.aesGetters,\n legendData: this.legend,\n labels: this.visibleLabels,\n defaultPolygons: this.polygons,\n onPolygonUpdate: this.onPolygonUpdate,\n onTooltipHintSwitch: this.onTooltipHintSwitch,\n onLassoControlsStateUpdate: this.onLassoControlsStateUpdate,\n } as SVGLayerProps;\n this.svgLayerComponent = (\n <DataFrameProvider dataFrame={this.dataFrame}>\n <SVGLayer {...props} />\n </DataFrameProvider>\n );\n this.reactRoot?.render(this.svgLayerComponent);\n }\n\n renderError(message: string) {\n this.reactRoot?.render(<Error message={message} />);\n }\n\n private computeLabels(dots: Dot[]) {\n const textMeasurer = new TextMeasurer('16px Manrope');\n const getPosition = createLabelPositioner(this.chartSizes.chartWidth, this.chartSizes.chartHeight);\n const labels = [];\n\n for (let i = 0; i < dots.length; i++) {\n const dot = dots[i];\n if (dot.label == null) {\n continue;\n }\n const name = String(dot.label);\n const metrics = textMeasurer.getTextMetrics(name);\n const x = this.scales.x(dot.x);\n const y = this.scales.y(dot.y);\n const w = metrics.width;\n const h = (metrics.actualBoundingBoxAscent) + (metrics.actualBoundingBoxDescent);\n const p = 10;\n const position = getPosition(x, y, w, h, p);\n if (!position) {\n continue;\n }\n\n labels.push({\n x,\n y,\n dot,\n name,\n width: w,\n height: h,\n padding: p,\n xPosition: position[0],\n yPosition: position[1],\n } satisfies Label);\n }\n\n return labels;\n }\n\n private updateLabelsPosition(labels: Label[]) {\n for (let i = 0; i < labels.length; i++) {\n const label = labels[i];\n label.x = this.scales.x(label.dot.x as number);\n label.y = this.scales.y(label.dot.y as number);\n }\n }\n}\n\nexport default ChartRenderer;\n"],"names":["convertDotRToSymbolSize","r","isDotInsidePolygons","x","y","polygons","p","polygonContains","getGettersFromLayers","dataFrame","legendInfo","layers","dotLayer","l","curveLayer","createAesGetter","DEFAULT_DOT_AES","ChartRenderer","__publicField","jsx","Fragment","BLACK","MIN_MARGIN","DEFAULT_WIDTH","DEFAULT_HEIGHT","scaleLinear","DataFrame","filteredDotsIndexes","d","_a","_b","node","createRoot","size","xAxis","yAxis","dotsExtents","scaleX","scaleLog","minX","minY","maxX","maxY","middle","halfRange","rangeH","tempX","PADDINGS","scaleY","rangeV","tempY","textMeasurer","TextMeasurer","getMaxTickWidth","ticks","key","format","getTicksAndFormat","maxYTick","title","splitTextByWidth","titleTextHeight","TITLE_LINE_HEIGHT","titleHeight","TITLE_MARGIN","TITLE_LINE","select","legend","legendLabels","grouping","legendItems","emptySizes","column","info","MAX_SHOWN_UNIQUE_VALUES_IN_LABELS","aesData","category","scale","scaleOrdinal","value","layer","isContinuousAes","domain","range","columnName","type","colorScale","getContinuousColorScale","tickPositionScale","scaleSymlog","values","getContinuousLegendTicks","scaleSqrt","labels","res","v","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","legendHeight","dots","chartSettings","dotExtents","fillColor","webglFillColor","rgba","stringToNumberRgba","getColorWithFakeOpacity","pointSeries","seriesWebglPoint","a","b","program","z","zoom","e","transform","pointer","coord","closestDatum","needRedraw","webglChart","chartCartesian","seriesSvgMulti","seriesWebglMulti","selection","s","colorGetter","GET_BLACK","tree","KDBush","i","_x","_y","radius","indexes","closest","idx","dot","dX","dY","distance","settingsId","keyColumn","dotsByGrouping","onPolygonUpdateOutside","onTooltipHintSwitch","onLassoControlsStateUpdate","props","DataFrameProvider","SVGLayer","message","Error","getPosition","createLabelPositioner","name","metrics","w","h","position","label"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"ChartRenderer.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot-umap/ChartRenderer.tsx"],"sourcesContent":["import { chartCartesian } from '@d3fc/d3fc-chart';\nimport type { CartesianChart } from '@d3fc/d3fc-chart/src/cartesian';\nimport type { ScaleLinear } from 'd3-scale';\nimport { scaleLinear, scaleLog, scaleOrdinal, scaleSqrt, scaleSymlog } from 'd3-scale';\nimport { select } from 'd3-selection';\nimport type { D3ZoomEvent, ZoomBehavior, ZoomTransform } from 'd3-zoom';\nimport { zoom } from 'd3-zoom';\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 { DotAesItem, LegendData, LegendItem } from '../common/types';\nimport {\n BLACK,\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n MAX_SHOWN_UNIQUE_VALUES_IN_LABELS,\n TITLE_LINE_HEIGHT,\n TITLE_MARGIN\n} from '../constants';\nimport { splitTextByWidth } from '../discrete/utils';\nimport { DEFAULT_DOT_AES, MIN_MARGIN } from '../scatterplot/constants';\nimport { createAesGetter } from '../scatterplot/utils/createAesGetter';\nimport { getTicksAndFormat } from '../scatterplot/utils/getTicksAndFormat';\nimport type { Label } from '../scatterplot/utils/getVisibleLabels';\nimport { createLabelPositioner } from '../scatterplot/utils/getVisibleLabels';\nimport type { ColumnName, ScatterplotEventHandlers } from '../types';\nimport { isContinuousAes } from '../types';\nimport type { ScatterplotUmapLegendInfo } from '../types/scatterplot-umap';\nimport { getContinuousColorScale } from '../utils/getContinuousColorScale';\nimport { getContinuousLegendTicks } from '../utils/getContinuousLegendTicks';\nimport { TextMeasurer } from '../utils/TextMeasurer/TextMeasurer';\nimport { SVGLayer } from './components/SVGLayer';\nimport { LEGEND_OFFSET, PADDINGS, TITLE_LINE } from './constants';\nimport type { CurveLayer, DotsLayer, ScatterplotUmapLayer, ScatterplotUmapSettingsImpl } from './SettingsImpl';\nimport type {\n AesGetters,\n CaptionsSizes,\n ChartScales, ChartSizes,\n Dot,\n DotsExtents,\n LassoControlsState,\n Margins,\n Polygon,\n SVGLayerProps,\n} from './types';\n// @ts-ignore\nimport { seriesSvgMulti, seriesWebglMulti, seriesWebglPoint } from '@d3fc/d3fc-series';\n// @ts-ignore\nimport { webglFillColor } from '@d3fc/d3fc-webgl';\n// @ts-ignore\nimport { pointer } from '@d3fc/d3fc-pointer';\nimport { polygonContains } from 'd3-polygon';\nimport KDBush from 'kdbush';\nimport { DataFrameProvider } from '../common/useDataFrame';\nimport { DataFrame } from '../DataFrame';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport { GET_BLACK, getColorWithFakeOpacity, stringToNumberRgba } from './colors';\n\nfunction convertDotRToSymbolSize(r:number) {\n return (r / 2.35) * (r / 2.35) * 64;\n}\n\nfunction isDotInsidePolygons(x:number, y:number, polygons: Polygon[]) {\n if (polygons.length === 0) {\n return true;\n }\n return polygons.some((p) => p.closed && p.points.length > 2 && polygonContains(p.points, [x, y]));\n}\n\nfunction getGettersFromLayers(\n dataFrame: DataFrame,\n legendInfo: ScatterplotUmapLegendInfo,\n layers: ScatterplotUmapSettingsImpl['layers'],\n): AesGetters {\n const dotLayer = layers.find(l => l.type === 'dots') as DotsLayer | undefined;\n const curveLayer = layers.find(l => l.type === 'curve') as CurveLayer | undefined;\n return {\n dotFill: createAesGetter(dataFrame, legendInfo, dotLayer?.aes.dotFill ?? DEFAULT_DOT_AES.color, 'dotFill'),\n dotSize: createAesGetter(dataFrame, legendInfo, dotLayer?.aes.dotSize ?? DEFAULT_DOT_AES.size, 'dotSize'),\n lineType: createAesGetter(dataFrame, legendInfo, curveLayer?.aes.lineShape ?? 'solid', 'lineShape')\n };\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n canvasNode: HTMLElement | null = null;\n\n svgLayerElement: SVGElement | null = null;\n svgLayerComponent: ReactElement = (<></>);\n\n aesGetters: AesGetters = {\n dotSize: () => 2,\n dotFill: () => BLACK,\n lineType: () => 'solid'\n };\n\n tools: {\n webglChart: CartesianChart<any, any>;\n qt?: KDBush;\n fillColor: () => {\n value: (setter: (d: Dot) => [number, number, number, number]) => void;\n data: (setter: () => Dot[]) => void;\n };\n pointSeries: () => any;\n zoom: ZoomBehavior<any, any>;\n } | null = null;\n\n margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n chartSizes: ChartSizes = {\n chartWidth: DEFAULT_WIDTH, // width of single chart\n chartHeight: DEFAULT_HEIGHT, // height of single chart\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 scales: ChartScales = {\n x: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH]),\n y: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0]),\n xOriginal: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH]),\n yOriginal: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0]),\n };\n\n polygons:Polygon[] = [];\n onPolygonUpdateOutside: ScatterplotEventHandlers['onPolygonUpdate'] = () => undefined;\n onTooltipHintSwitch: ScatterplotEventHandlers['onTooltipHintSwitch'] = () => undefined;\n onLassoControlsStateUpdate: ScatterplotEventHandlers['onLassoControlsStateUpdate'] = () => undefined;\n\n zoomTransform: ZoomTransform | null = null;\n zoomStateKey = '';\n selectedDot: Dot | null = null;\n captionsSizes: CaptionsSizes = {\n xAxisCaptionsWidth: 30,\n yAxisCaptionsWidth: 100,\n };\n mainTitle: string[] = []; // can be multiline\n legend: LegendData = {width: 0, height: 0, items: []};\n\n notCalculatedProps: Partial<SVGLayerProps> = {};\n\n allDots: Dot[] = [];\n visibleLabels: Label[] = [];\n dataFrame: DataFrame = new DataFrame('', {});\n\n clear() {\n if (this.parentNode && this.rootNode && this.canvasNode) {\n this.parentNode?.removeChild(this.rootNode);\n this.parentNode?.removeChild(this.canvasNode);\n this.parentNode = null;\n this.rootNode = null;\n this.canvasNode = null;\n this.svgLayerElement = null;\n this.tools = 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.canvasNode = document.createElement('div');\n this.parentNode.appendChild(this.rootNode);\n this.parentNode.appendChild(this.canvasNode);\n this.reactRoot = createRoot(this.rootNode);\n }\n }\n\n updateChartSizes(size: ScatterplotUmapSettingsImpl['chartSettings']['size']) {\n if (size.width !== this.chartSizes.chartWidth || size.height !== this.chartSizes.chartHeight) {\n // NB: now chart sizes always change with one multiplier for width/height so qt stays without changes\n this.chartSizes.chartWidth = size.width;\n this.chartSizes.chartHeight = size.height;\n this.scales.x.range([0, this.chartSizes.chartWidth]);\n this.scales.y.range([this.chartSizes.chartHeight, 0]);\n }\n \n }\n\n updateViewport(\n xAxis: ScatterplotUmapSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotUmapSettingsImpl['chartSettings']['yAxis'],\n dotsExtents: DotsExtents\n ) {\n const scaleX = xAxis.scale === 'log' ? scaleLog() : scaleLinear();\n\n let {minX, minY, maxX, maxY} = dotsExtents;\n if (xAxis.lowerValue !== undefined) {\n minX = Math.max(minX, xAxis.lowerValue);\n }\n if (xAxis.upperValue !== undefined) {\n maxX = Math.min(maxX, xAxis.upperValue);\n }\n if (yAxis.lowerValue !== undefined) {\n minY = Math.max(minY, yAxis.lowerValue);\n }\n if (yAxis.upperValue !== undefined) {\n maxY = Math.min(maxY, yAxis.upperValue);\n }\n if (xAxis.symmetricRange !== undefined) {\n const middle = xAxis.symmetricRange;\n if (middle >= minX && middle <= maxX) {\n const halfRange = Math.max(middle - minX, maxX - middle);\n minX = middle - halfRange;\n maxX = middle + halfRange;\n }\n }\n if (typeof yAxis.symmetricRange !== 'undefined') {\n const middle = yAxis.symmetricRange;\n if (middle >= minY && middle <= maxY) {\n const halfRange = Math.max(middle - minY, maxY - middle);\n minY = middle - halfRange;\n maxY = middle + halfRange;\n }\n }\n\n const rangeH = [0, this.chartSizes.chartWidth];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempX = scaleX\n .copy()\n .domain([minX, maxX])\n .range([PADDINGS.LEFT, this.chartSizes.chartWidth - PADDINGS.RIGHT]);\n scaleX\n .domain([tempX.invert(0), tempX.invert(this.chartSizes.chartWidth)])\n .range(rangeH)\n .nice();\n this.scales.x = scaleX;\n this.scales.xOriginal = scaleX.copy();\n\n const scaleY = yAxis.scale === 'log' ? scaleLog() : scaleLinear();\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 = scaleY\n .copy()\n .domain([minY, maxY])\n .range([this.chartSizes.chartHeight - PADDINGS.BOTTOM, PADDINGS.TOP]);\n scaleY\n .domain([tempY.invert(this.chartSizes.chartHeight), tempY.invert(0)])\n .range(rangeV)\n .nice();\n this.scales.y = scaleY;\n this.scales.yOriginal = scaleY.copy();\n }\n\n updateCaptionsSize() {\n const textMeasurer = new TextMeasurer('600 14px Arial');\n\n function getMaxTickWidth(ticks: string[]) {\n return Math.max(...ticks.map(key => textMeasurer.getTextWidth(key)));\n }\n\n const {ticks, format} = getTicksAndFormat(this.scales.y, false);\n const maxYTick = getMaxTickWidth(ticks.map(format));\n\n this.captionsSizes = {\n xAxisCaptionsWidth: 20,\n yAxisCaptionsWidth: maxYTick,\n };\n }\n\n createMainTitle(title: ScatterplotUmapSettingsImpl['chartSettings']['title']) {\n this.mainTitle = splitTextByWidth(\n title.name,\n this.chartSizes.totalWidth - this.margins.left - this.margins.right,\n 20\n );\n }\n\n updateMargins() {\n const titleTextHeight = TITLE_LINE_HEIGHT * this.mainTitle.length;\n const titleHeight = titleTextHeight > 0 ? titleTextHeight + TITLE_MARGIN * 2 : 0;\n this.margins = {\n top: Math.max(titleHeight, MIN_MARGIN),\n bottom: MIN_MARGIN + this.captionsSizes.xAxisCaptionsWidth + TITLE_LINE,\n left: MIN_MARGIN + this.captionsSizes.yAxisCaptionsWidth + TITLE_LINE,\n right: this.legend.width + MIN_MARGIN,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartWidth + this.margins.right;\n this.chartSizes.totalHeight =\n this.margins.top + Math.max(this.chartSizes.chartHeight, this.legend.height) + this.margins.bottom;\n\n select(this.canvasNode)\n .style('width', this.chartSizes.chartWidth + 'px')\n .style('height', this.chartSizes.chartHeight + 'px')\n .style('top', this.margins.top + 'px')\n .style('left', this.margins.left + 'px');\n }\n\n updateLegendSize(\n legend: ScatterplotUmapSettingsImpl['chartSettings']['legend'],\n legendLabels: ScatterplotUmapLegendInfo,\n grouping: ColumnName[],\n layers: ScatterplotUmapLayer[]\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 grouping.forEach(column => {\n const info = legendLabels[column.value];\n if (info.usedAes.length === 0 || !info.aesMap) {\n return;\n }\n if (info.values.length > MAX_SHOWN_UNIQUE_VALUES_IN_LABELS) {\n console.warn(`Too many values for discrete legend (${info.values.length})`);\n return;\n }\n const aesData: Record<string, DotAesItem> = {};\n info.values.forEach(category => {\n if (!aesData[category]) {\n aesData[category] = {...DEFAULT_DOT_AES} as DotAesItem;\n }\n info.usedAes.forEach(key => {\n if (key === 'dotFill') {\n aesData[category].color = (info.aesMap(category, key) ?? BLACK) as string;\n }\n if (key === 'dotSize') {\n aesData[category].size = Number(info.aesMap(category, key) ?? 3);\n }\n });\n });\n\n const title = column.label ?? column.value;\n const scale = scaleOrdinal<DotAesItem>()\n .domain(info.values)\n .range(info.values.map(value => aesData[value]));\n legendItems.push({...emptySizes, id: column.value, type: 'dots', title, scale, values:info.values, labels:info.labels});\n });\n\n layers.forEach(layer => {\n if (layer.type === 'dots' && isContinuousAes(layer.aes.dotFill)) {\n const {domain, range, columnName, type = 'linear'} = layer.aes.dotFill;\n const title = columnName.label ?? columnName.value;\n const colorScale = getContinuousColorScale(range, domain, 'linear') as ScaleLinear<string, string>; // always linear for legend - scale to render gradient, not for dots\n const tickPositionScale = (type === 'log' ? scaleSymlog<string, string>() : scaleLinear<string, string>())\n .domain(domain)\n // @ts-ignore\n .range([this.chartSizes.chartHeight, 0]);\n const values = getContinuousLegendTicks(tickPositionScale, domain as [number, number]);\n legendItems.push({...emptySizes, id: 'dotFill', type: 'continuous', title, scale: colorScale, tickPositionScale, values});\n }\n if (layer.type === 'dots' && isContinuousAes(layer.aes.dotSize)) {\n const {columnName, domain, range} = layer.aes.dotSize;\n const title = columnName.label ?? columnName.value;\n const scale = scaleSqrt(domain, range);\n const values = scale.ticks(3);\n const format = scale.tickFormat(3);\n const labels = values.reduce((res: Record<string, string>, v) => {\n res[String(v)] = format(v);\n return res;\n }, {});\n legendItems.push({...emptySizes, id: columnName.value, type: 'size', title, scale, values, 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 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 initSettings(\n dots: Dot[],\n chartSettings: ScatterplotUmapSettingsImpl['chartSettings'],\n dotExtents: DotsExtents,\n legendInfo: ScatterplotUmapLegendInfo,\n layers: ScatterplotUmapSettingsImpl['layers'],\n grouping: ColumnName[]\n ) {\n const {xAxis, yAxis, size, title, legend} = chartSettings;\n this.updateChartSizes(size);\n this.updateViewport(xAxis, yAxis, dotExtents);\n this.updateCaptionsSize();\n this.updateLegendSize(legend, legendInfo, grouping, layers);\n this.createMainTitle(title);\n this.updateMargins();\n\n this.aesGetters = getGettersFromLayers(this.dataFrame, legendInfo, layers);\n\n const fillColor = webglFillColor()\n .data(dots)\n .value((d: Dot) => {\n const rgba = stringToNumberRgba(this.aesGetters.dotFill(d.idx));\n rgba[3] = !d.dimmed && isDotInsidePolygons(d.x, d.y, this.polygons) ? 1 : 0.4;\n return getColorWithFakeOpacity(rgba, rgba);\n });\n\n const pointSeries = seriesWebglPoint()\n .equals((a: Dot[], b: Dot[]) => a === b)\n .size((d: Dot) => convertDotRToSymbolSize(this.aesGetters.dotSize(d.idx)))\n .crossValue((d: Dot) => d.x)\n .mainValue((d: Dot) => d.y)\n .decorate((program: unknown) => fillColor(program));\n\n const z = zoom()\n .scaleExtent([0.1, 1000])\n .filter((e:MouseEvent) => {\n return e.type === 'wheel' || e.metaKey || e.ctrlKey;\n })\n .on('start', () => {\n this.selectedDot = null;\n })\n .on('zoom', (e: D3ZoomEvent<SVGElement, unknown>) => {\n const transform = e.transform;\n const x = transform.rescaleX(this.scales.xOriginal);\n const y = transform.rescaleY(this.scales.yOriginal);\n this.scales.x.domain(x.domain());\n this.scales.y.domain(y.domain());\n\n this.zoomTransform = transform;\n this.zoomStateKey = `${transform.x}_${transform.y}_${transform.k}`; // need it to update axes\n\n this.updateLabelsPosition(this.visibleLabels);\n this.renderSvgLayer();\n this.renderWebglLayer();\n }).on('end', () => {\n this.visibleLabels = this.computeLabels(this.allDots);\n this.renderSvgLayer();\n });\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const p = pointer().on('point', ([coord]) => {\n let closestDatum;\n if (coord) {\n closestDatum = this.getClosestDot(coord.x, coord.y);\n }\n \n const needRedraw =\n (this.selectedDot && !closestDatum) ||\n (!this.selectedDot && closestDatum) ||\n this.selectedDot?.idx !== closestDatum?.idx;\n\n this.selectedDot = closestDatum ?? null;\n\n if (needRedraw) {\n this.renderSvgLayer();\n }\n });\n\n const webglChart = chartCartesian({\n xScale: this.scales.x,\n yScale: this.scales.y,\n })\n .xAxisHeight(() => '0') // removing build-in axes from chartCartesian\n .yAxisWidth(() => '0') // removing build-in axes from chartCartesian\n .svgPlotArea(seriesSvgMulti())\n .webglPlotArea(\n // only render the point series on the WebGL layer\n seriesWebglMulti()\n .series([pointSeries])\n .mapping((d: unknown) => d)\n )\n .decorate(selection => {\n const s = selection.enter();\n if (s && !this.svgLayerElement) {\n s.style('grid-template-columns', '0 auto 1fr auto 0'); // removing build-in axes from chartCartesian\n s.style('grid-template-rows', '0 auto 1fr auto 0'); // removing build-in axes from chartCartesian\n this.svgLayerElement = s.select('.svg-plot-area.plot-area svg').node() as SVGElement;\n }\n s.select('.svg-plot-area.plot-area').attr('class', 'svg-plot-area plot-area miplots-scatterplot-plot-area')\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .call(z)\n .call(p);\n });\n\n this.tools = {\n webglChart,\n zoom: z,\n fillColor,\n pointSeries,\n };\n\n select(this.canvasNode)\n .datum(dots)\n .style('position', 'absolute')\n .style('width', this.chartSizes.chartWidth + 'px')\n .style('height', this.chartSizes.chartHeight + 'px')\n .style('top', this.margins.top + 'px')\n .style('left', this.margins.left + 'px');\n }\n\n updateAes(\n legendInfo: ScatterplotUmapLegendInfo,\n layers: ScatterplotUmapSettingsImpl['layers']\n ) {\n if (this.tools === null) {\n return;\n }\n this.aesGetters = getGettersFromLayers(this.dataFrame, legendInfo, layers);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.tools.fillColor.value((d: Dot) => {\n const colorGetter = this.aesGetters.dotFill ?? GET_BLACK;\n const rgba = stringToNumberRgba(colorGetter(d.idx));\n rgba[3] = !d.dimmed && isDotInsidePolygons(d.x, d.y, this.polygons) ? 1 : 0.4;\n return getColorWithFakeOpacity(rgba, rgba);\n });\n }\n\n updatePointSize() {\n if (this.tools === null) {\n return;\n }\n // TODO: try remove array copy\n select(this.canvasNode).datum([...this.allDots]);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.tools.pointSeries.size((d: Dot) => convertDotRToSymbolSize(this.aesGetters.dotSize(d.data)));\n }\n\n updateByLasso() {\n if (this.tools === null) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.tools?.fillColor.value((d: Dot) => {\n const colorGetter = this.aesGetters.dotFill ?? GET_BLACK;\n const rgba = stringToNumberRgba(colorGetter(d.idx));\n rgba[3] = !d.dimmed && isDotInsidePolygons(d.x, d.y, this.polygons) ? 1 : 0.4;\n return getColorWithFakeOpacity(rgba, rgba);\n });\n this.renderWebglLayer();\n }\n\n createQuadtree(dots: Dot[]): KDBush {\n const tree = new KDBush(dots.length, 512);\n\n for (let i = 0; i < dots.length; i++) {\n tree.add(dots[i].x, dots[i].y);\n } \n\n return tree.finish();\n }\n\n getClosestDot(_x: number, _y: number): Dot | null {\n const tree = this.tools?.qt;\n if (!tree) return null;\n const dots = this.allDots;\n const x = this.scales.x.invert(_x);\n const y = this.scales.y.invert(_y);\n const radius = 1 / (this.zoomTransform?.k || 1);\n const minX = x - radius;\n const maxX = x + radius;\n const minY = y - radius;\n const maxY = y + radius;\n\n const indexes = tree.range(minX, minY, maxX, maxY);\n const closest = indexes.reduce((closest, idx: number) => {\n const dot = dots[idx];\n const dX = this.scales.x(dot.x) - _x;\n const dY = this.scales.y(dot.y) - _y;\n const distance = Math.hypot(dX, dY);\n if (closest === null || distance < closest.distance) {\n closest.index = idx;\n closest.distance = distance;\n }\n return closest;\n }, {\n index: -1,\n distance: Infinity\n });\n return indexes.length === 0 || closest.index === -1 ? null : dots[closest.index];\n }\n\n updateDots(dots: Dot[]) {\n if (this.tools === null) {\n return;\n }\n select(this.canvasNode).datum(dots);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.tools.fillColor.data(dots);\n this.tools.qt = this.createQuadtree(dots);\n this.allDots = dots;\n }\n\n render(\n dataFrame: DataFrame,\n settingsId: string,\n chartSettings: ScatterplotUmapSettingsImpl['chartSettings'],\n keyColumn: ColumnName | null,\n dots: Dot[],\n dotExtents: DotsExtents,\n dotsByGrouping: Record<string, Dot[]>,\n layers: ScatterplotUmapSettingsImpl['layers'],\n legendInfo: ScatterplotUmapLegendInfo,\n grouping: ColumnName[],\n onPolygonUpdateOutside: ScatterplotEventHandlers['onPolygonUpdate'],\n onTooltipHintSwitch: (v:boolean) => void,\n onLassoControlsStateUpdate: (v:LassoControlsState) => void,\n ) {\n this.dataFrame = dataFrame;\n const sizesChanged = chartSettings.size.width !== this.chartSizes.chartWidth || chartSettings.size.height !== this.chartSizes.chartHeight; \n if (this.tools === null) {\n this.initSettings(\n dots,\n chartSettings,\n dotExtents,\n legendInfo,\n layers,\n grouping\n ); \n } else {\n const {title, legend, size} = chartSettings;\n this.updateChartSizes(size);\n this.updateLegendSize(legend, legendInfo, grouping, layers);\n this.createMainTitle(title);\n this.updateMargins();\n this.updateAes(legendInfo, layers);\n }\n\n this.onPolygonUpdateOutside = onPolygonUpdateOutside;\n this.onTooltipHintSwitch = onTooltipHintSwitch;\n this.onLassoControlsStateUpdate = onLassoControlsStateUpdate;\n\n if (this.allDots !== dots) {\n this.updateDots(dots);\n this.visibleLabels = this.computeLabels(dots);\n } else if (sizesChanged) {\n this.visibleLabels = this.computeLabels(dots);\n }\n\n this.notCalculatedProps = {\n settingsId,\n chartSettings,\n keyColumn,\n dotsByGrouping,\n layers\n };\n\n this.renderWebglLayer();\n this.renderSvgLayer();\n }\n\n renderWebglLayer() {\n if (this.tools?.webglChart) {\n select(this.canvasNode).call(this.tools?.webglChart);\n }\n }\n\n onPolygonUpdate = (p:Polygon[]) => {\n this.polygons = p;\n this.updateByLasso();\n const filteredDotsIndexes = this.allDots\n .filter(d => isDotInsidePolygons(d.x, d.y, this.polygons))\n .map(d => d.idx);\n this.onPolygonUpdateOutside(filteredDotsIndexes, p);\n };\n\n renderSvgLayer() {\n const props = {\n settingsId: this.notCalculatedProps.settingsId,\n chartSettings: this.notCalculatedProps.chartSettings,\n keyColumn: this.notCalculatedProps.keyColumn,\n dotsByGrouping: this.notCalculatedProps.dotsByGrouping,\n layers: this.notCalculatedProps.layers,\n chartSizes: this.chartSizes,\n scales: this.scales,\n margins: this.margins,\n mainTitle: this.mainTitle,\n captionsSizes: this.captionsSizes,\n container: this.svgLayerElement,\n zoomStateKey: this.zoomStateKey,\n selectedDot: this.selectedDot,\n aesGetters: this.aesGetters,\n legendData: this.legend,\n labels: this.visibleLabels,\n defaultPolygons: this.polygons,\n onPolygonUpdate: this.onPolygonUpdate,\n onTooltipHintSwitch: this.onTooltipHintSwitch,\n onLassoControlsStateUpdate: this.onLassoControlsStateUpdate,\n } as SVGLayerProps;\n this.svgLayerComponent = (\n <DataFrameProvider dataFrame={this.dataFrame}>\n <SVGLayer {...props} />\n </DataFrameProvider>\n );\n this.reactRoot?.render(this.svgLayerComponent);\n }\n\n renderError(message: string) {\n this.reactRoot?.render(<Error message={message} />);\n }\n\n private computeLabels(dots: Dot[]) {\n const textMeasurer = new TextMeasurer('16px Manrope');\n const getPosition = createLabelPositioner(this.chartSizes.chartWidth, this.chartSizes.chartHeight);\n const labels = [];\n\n for (let i = 0; i < dots.length; i++) {\n const dot = dots[i];\n if (dot.label == null) {\n continue;\n }\n const name = String(dot.label);\n const metrics = textMeasurer.getTextMetrics(name);\n const x = this.scales.x(dot.x);\n const y = this.scales.y(dot.y);\n const w = metrics.width;\n const h = (metrics.actualBoundingBoxAscent) + (metrics.actualBoundingBoxDescent);\n const p = 10;\n const position = getPosition(x, y, w, h, p);\n if (!position) {\n continue;\n }\n\n labels.push({\n x,\n y,\n dot,\n name,\n width: w,\n height: h,\n padding: p,\n xPosition: position[0],\n yPosition: position[1],\n } satisfies Label);\n }\n\n return labels;\n }\n\n private updateLabelsPosition(labels: Label[]) {\n for (let i = 0; i < labels.length; i++) {\n const label = labels[i];\n label.x = this.scales.x(label.dot.x as number);\n label.y = this.scales.y(label.dot.y as number);\n }\n }\n}\n\nexport default ChartRenderer;\n"],"names":["convertDotRToSymbolSize","r","isDotInsidePolygons","x","y","polygons","p","polygonContains","getGettersFromLayers","dataFrame","legendInfo","layers","dotLayer","l","curveLayer","createAesGetter","DEFAULT_DOT_AES","ChartRenderer","__publicField","jsx","Fragment","BLACK","MIN_MARGIN","DEFAULT_WIDTH","DEFAULT_HEIGHT","scaleLinear","DataFrame","filteredDotsIndexes","d","_a","_b","node","createRoot","size","xAxis","yAxis","dotsExtents","scaleX","scaleLog","minX","minY","maxX","maxY","middle","halfRange","rangeH","tempX","PADDINGS","scaleY","rangeV","tempY","textMeasurer","TextMeasurer","getMaxTickWidth","ticks","key","format","getTicksAndFormat","maxYTick","title","splitTextByWidth","titleTextHeight","TITLE_LINE_HEIGHT","titleHeight","TITLE_MARGIN","TITLE_LINE","select","legend","legendLabels","grouping","legendItems","emptySizes","column","info","MAX_SHOWN_UNIQUE_VALUES_IN_LABELS","aesData","category","scale","scaleOrdinal","value","layer","isContinuousAes","domain","range","columnName","type","colorScale","getContinuousColorScale","tickPositionScale","scaleSymlog","values","getContinuousLegendTicks","scaleSqrt","labels","res","v","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","legendHeight","dots","chartSettings","dotExtents","fillColor","webglFillColor","rgba","stringToNumberRgba","getColorWithFakeOpacity","pointSeries","seriesWebglPoint","a","b","program","z","zoom","e","transform","pointer","coord","closestDatum","needRedraw","webglChart","chartCartesian","seriesSvgMulti","seriesWebglMulti","selection","s","colorGetter","GET_BLACK","tree","KDBush","i","_x","_y","radius","indexes","closest","idx","dot","dX","dY","distance","settingsId","keyColumn","dotsByGrouping","onPolygonUpdateOutside","onTooltipHintSwitch","onLassoControlsStateUpdate","sizesChanged","props","DataFrameProvider","SVGLayer","message","Error","getPosition","createLabelPositioner","name","metrics","w","h","position","label"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/types/common.ts"],"sourcesContent":["import { z } from 'zod';\nimport type { LassoControlsState, Polygon } from '../scatterplot-umap/types';\nimport type { CategoricalAesFromColumn, ContinuousAesFromColumn } from './scatterplot';\n\nexport type DataValue = string | number | null;\nexport type Category = string;\nexport const DataValueSchema = z.union([z.string(), z.number(), z.null()]);\n\nexport type Row = Record<string, DataValue>\n\nexport type Color = string;\n\n// numbered according ggplot2 symbols, 19 (third size of black circle) is missed\nexport const POINT_SHAPE = [\n '0',\n '1',\n '2',\n '3',\n '4',\n '5',\n '6',\n '7',\n '8',\n '9',\n '10',\n '11',\n '12',\n '13',\n '14',\n '15',\n '16',\n '17',\n '18',\n '20',\n '21',\n '22',\n '23',\n '24',\n '25',\n] as const;\nexport const PointShapeSchema = z.enum(POINT_SHAPE);\nexport type PointShape = z.infer<typeof PointShapeSchema>;\n\nconst LINE_SHAPE = ['solid', 'dashed', 'dotted', 'dotdash', 'longdash', 'twodash'] as const;\nexport const LineShapeSchema = z.enum(LINE_SHAPE);\nexport type LineShape = z.infer<typeof LineShapeSchema>;\n\nconst FRAME_TYPE = ['left', 'bottom', 'left-bottom', 'full', 'empty'] as const;\nexport const FrameTypeSchema = z.enum(FRAME_TYPE);\nexport type FrameType = z.infer<typeof FrameTypeSchema>;\n\nconst LEGEND_POSITION = ['inside', 'right', 'top', 'bottom'] as const;\nexport const LegendPositionSchema = z.enum(LEGEND_POSITION);\nexport type LegendPosition = z.infer<typeof LegendPositionSchema>;\n\nexport const TITLE_POSITION = ['left', 'center', 'right'] as const;\nexport const TitlePositionSchema = z.enum(TITLE_POSITION);\nexport type TitlePosition = z.infer<typeof TitlePositionSchema>;\n\nexport const ColumnNameSchema = z.object({\n type: z.literal('column'),\n value: z.string(),\n format: z.optional(z.string()), // d3 format\n label: z.optional(z.string()),\n valueLabels: z.optional(z.string())\n});\nexport type ColumnName = z.infer<typeof ColumnNameSchema>\n\nexport type AesItem = {\n fillColor?: Color;\n lineColor?: Color;\n lineWidth?: number;\n lineShape?: LineShape;\n dotShape?: PointShape;\n dotSize?: number;\n dotFill?: Color;\n};\nexport const AesItemSchema = z.object({\n fillColor: z.optional(z.string()),\n lineColor: z.optional(z.string()),\n lineWidth: z.optional(z.number()),\n lineShape: z.optional(LineShapeSchema),\n dotShape: z.optional(PointShapeSchema),\n dotSize: z.optional(z.number()),\n dotFill: z.optional(z.string()),\n});\n\nexport const AesRecordSchema = z.record(AesItemSchema);\nexport type AesRecord = z.infer<typeof AesRecordSchema>;\n\nexport function categoricalAesMappingFromValueSchema<ValueType extends z.ZodTypeAny>(\n valueSchema: ValueType,\n) {\n return z.object({\n columnName: ColumnNameSchema,\n valuesMap: z.record(valueSchema),\n });\n}\nexport function continuousAesMappingFromValueSchema<ValueType extends z.ZodTypeAny>(\n valueSchema: ValueType,\n) {\n return z.object({\n columnName: ColumnNameSchema,\n domain: z.array(z.number()),\n range: z.array(valueSchema),\n type: z.optional(z.union([z.literal('linear'), z.literal('log')]))\n });\n}\n\nexport function isCategoricalAes<InputType extends string | number | PointShape | LineShape>(\n item: InputType | CategoricalAesFromColumn<InputType> | ContinuousAesFromColumn<InputType> | unknown\n): item is CategoricalAesFromColumn<InputType> {\n if (typeof item !== 'object') {\n return false;\n }\n return item !== null && 'valuesMap' in item;\n}\n\nexport function isContinuousAes<InputType extends string | number | PointShape | LineShape>(\n item: InputType | CategoricalAesFromColumn<InputType> | ContinuousAesFromColumn<InputType> | unknown\n): item is ContinuousAesFromColumn<InputType> {\n if (typeof item !== 'object') {\n return false;\n }\n return item !== null && 'domain' in item && 'range' in item;\n}\n\nexport const DiscreteLabelsPositionSchema = z.union([z.literal('center'), z.literal('45deg'), z.literal('90deg')]);\n\nexport const AxisSettingsDiscreteSchema = z.object({\n title: z.optional(z.union([z.string(), ColumnNameSchema])),\n scale: z.optional(z.literal('discrete')),\n keys: z.optional(z.array(z.union([z.string(), z.number()]))),\n labels: z.optional(z.record(z.string())),\n showGrid: z.optional(z.boolean()),\n linesBetweenCategories: z.optional(z.boolean()),\n showTicks: z.optional(z.boolean()),\n labelsPosition: z.optional(DiscreteLabelsPositionSchema),\n hiddenLabels: z.optional(z.boolean())\n});\nexport const AxisSettingsContinuousSchema = z.object({\n title: z.optional(z.union([z.string(), ColumnNameSchema])),\n scale: z.optional(z.union([z.literal('linear'), z.literal('log')])),\n showGrid: z.optional(z.boolean()),\n showTicks: z.optional(z.boolean()),\n significantLines: z.optional(z.array(z.number())),\n significantLinesStyle: z.optional(LineShapeSchema),\n symmetricRange: z.optional(z.number()),\n upperValue: z.optional(z.number()),\n lowerValue: z.optional(z.number()),\n hiddenLabels: z.optional(z.boolean()),\n});\n\nexport const AxisSettingsSchema = z.union([AxisSettingsDiscreteSchema, AxisSettingsContinuousSchema]);\n\nexport type AxisSettings = z.infer<typeof AxisSettingsSchema>\nexport type AxisSettingsDiscrete = z.infer<typeof AxisSettingsDiscreteSchema>;\nexport type AxisSettingsContinuous = z.infer<typeof AxisSettingsContinuousSchema>;\n\nexport type DiscreteLabelsPosition = z.infer<typeof DiscreteLabelsPositionSchema>;\n\nexport interface SettingsInterface {\n type: string;\n}\n\nexport type ClickEventData = {\n x: number;\n y: number;\n info: unknown;\n}\n\nexport type PolygonData = [number, number][];\n\nexport type ChartEventHandlers<T> = T;\nexport type DendroEventHandlers = ChartEventHandlers<[(d:ClickEventData) => void]>\nexport type ScatterplotEventHandlers = ChartEventHandlers<{\n onPolygonUpdate: (d:number[], p: Polygon[]) => void;\n onTooltipHintSwitch: (d:boolean) => void;\n onLassoStateChange: () => void;\n onLassoControlsStateUpdate: (v:LassoControlsState) => void;\n}>\nexport type BubbleEventHandlers = ChartEventHandlers<[(d:boolean) => void]>\nexport type DiscreteEventHandlers = ChartEventHandlers<[(d:boolean) => void]>\nexport type HeatmapEventHandlers = ChartEventHandlers<[(d:boolean) => void]>\nexport type HistogramEventHandlers = ChartEventHandlers<[(d:boolean) => void]>"],"names":["DataValueSchema","z","POINT_SHAPE","PointShapeSchema","LINE_SHAPE","LineShapeSchema","FRAME_TYPE","FrameTypeSchema","LEGEND_POSITION","LegendPositionSchema","TITLE_POSITION","TitlePositionSchema","ColumnNameSchema","AesItemSchema","AesRecordSchema","categoricalAesMappingFromValueSchema","valueSchema","continuousAesMappingFromValueSchema","isCategoricalAes","item","isContinuousAes","DiscreteLabelsPositionSchema","AxisSettingsDiscreteSchema","AxisSettingsContinuousSchema","AxisSettingsSchema"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"common.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/types/common.ts"],"sourcesContent":["import { z } from 'zod';\nimport type { LassoControlsState, Polygon } from '../scatterplot-umap/types';\nimport type { CategoricalAesFromColumn, ContinuousAesFromColumn } from './scatterplot';\n\nexport type DataValue = string | number | null;\nexport type Category = string;\nexport const DataValueSchema = z.union([z.string(), z.number(), z.null()]);\n\nexport type Row = Record<string, DataValue>\n\nexport type Color = string;\n\n// numbered according ggplot2 symbols, 19 (third size of black circle) is missed\nexport const POINT_SHAPE = [\n '0',\n '1',\n '2',\n '3',\n '4',\n '5',\n '6',\n '7',\n '8',\n '9',\n '10',\n '11',\n '12',\n '13',\n '14',\n '15',\n '16',\n '17',\n '18',\n '20',\n '21',\n '22',\n '23',\n '24',\n '25',\n] as const;\nexport const PointShapeSchema = z.enum(POINT_SHAPE);\nexport type PointShape = z.infer<typeof PointShapeSchema>;\n\nconst LINE_SHAPE = ['solid', 'dashed', 'dotted', 'dotdash', 'longdash', 'twodash'] as const;\nexport const LineShapeSchema = z.enum(LINE_SHAPE);\nexport type LineShape = z.infer<typeof LineShapeSchema>;\n\nconst FRAME_TYPE = ['left', 'bottom', 'left-bottom', 'full', 'empty'] as const;\nexport const FrameTypeSchema = z.enum(FRAME_TYPE);\nexport type FrameType = z.infer<typeof FrameTypeSchema>;\n\nconst LEGEND_POSITION = ['inside', 'right', 'top', 'bottom'] as const;\nexport const LegendPositionSchema = z.enum(LEGEND_POSITION);\nexport type LegendPosition = z.infer<typeof LegendPositionSchema>;\n\nexport const TITLE_POSITION = ['left', 'center', 'right'] as const;\nexport const TitlePositionSchema = z.enum(TITLE_POSITION);\nexport type TitlePosition = z.infer<typeof TitlePositionSchema>;\n\nexport const ColumnNameSchema = z.object({\n type: z.literal('column'),\n value: z.string(),\n format: z.optional(z.string()), // d3 format\n label: z.optional(z.string()),\n valueLabels: z.optional(z.string())\n});\nexport type ColumnName = z.infer<typeof ColumnNameSchema>\n\nexport type AesItem = {\n fillColor?: Color;\n lineColor?: Color;\n lineWidth?: number;\n lineShape?: LineShape;\n dotShape?: PointShape;\n dotSize?: number;\n dotFill?: Color;\n};\nexport const AesItemSchema = z.object({\n fillColor: z.optional(z.string()),\n lineColor: z.optional(z.string()),\n lineWidth: z.optional(z.number()),\n lineShape: z.optional(LineShapeSchema),\n dotShape: z.optional(PointShapeSchema),\n dotSize: z.optional(z.number()),\n dotFill: z.optional(z.string()),\n});\n\nexport const AesRecordSchema = z.record(AesItemSchema);\nexport type AesRecord = z.infer<typeof AesRecordSchema>;\n\nexport function categoricalAesMappingFromValueSchema<ValueType extends z.ZodTypeAny>(\n valueSchema: ValueType,\n) {\n return z.object({\n columnName: ColumnNameSchema,\n valuesMap: z.record(valueSchema),\n });\n}\nexport function continuousAesMappingFromValueSchema<ValueType extends z.ZodTypeAny>(\n valueSchema: ValueType,\n) {\n return z.object({\n columnName: ColumnNameSchema,\n domain: z.array(z.number()),\n range: z.array(valueSchema),\n type: z.optional(z.union([z.literal('linear'), z.literal('log')]))\n });\n}\n\nexport function isCategoricalAes<InputType extends string | number | PointShape | LineShape>(\n item: InputType | CategoricalAesFromColumn<InputType> | ContinuousAesFromColumn<InputType> | unknown\n): item is CategoricalAesFromColumn<InputType> {\n if (typeof item !== 'object') {\n return false;\n }\n return item !== null && 'valuesMap' in item;\n}\n\nexport function isContinuousAes<InputType extends string | number | PointShape | LineShape>(\n item: InputType | CategoricalAesFromColumn<InputType> | ContinuousAesFromColumn<InputType> | unknown\n): item is ContinuousAesFromColumn<InputType> {\n if (typeof item !== 'object') {\n return false;\n }\n return item !== null && 'domain' in item && 'range' in item;\n}\n\nexport const DiscreteLabelsPositionSchema = z.union([z.literal('center'), z.literal('45deg'), z.literal('90deg')]);\n\nexport const AxisSettingsDiscreteSchema = z.object({\n title: z.optional(z.union([z.string(), ColumnNameSchema])),\n scale: z.optional(z.literal('discrete')),\n keys: z.optional(z.array(z.union([z.string(), z.number()]))),\n labels: z.optional(z.record(z.string())),\n showGrid: z.optional(z.boolean()),\n linesBetweenCategories: z.optional(z.boolean()),\n showTicks: z.optional(z.boolean()),\n labelsPosition: z.optional(DiscreteLabelsPositionSchema),\n hiddenLabels: z.optional(z.boolean())\n});\nexport const AxisSettingsContinuousSchema = z.object({\n title: z.optional(z.union([z.string(), ColumnNameSchema])),\n scale: z.optional(z.union([z.literal('linear'), z.literal('log')])),\n showGrid: z.optional(z.boolean()),\n showTicks: z.optional(z.boolean()),\n significantLines: z.optional(z.array(z.number())),\n significantLinesStyle: z.optional(LineShapeSchema),\n symmetricRange: z.optional(z.number()),\n upperValue: z.optional(z.number()),\n lowerValue: z.optional(z.number()),\n hiddenLabels: z.optional(z.boolean()),\n});\n\nexport const AxisSettingsSchema = z.union([AxisSettingsDiscreteSchema, AxisSettingsContinuousSchema]);\n\nexport type AxisSettings = z.infer<typeof AxisSettingsSchema>\nexport type AxisSettingsDiscrete = z.infer<typeof AxisSettingsDiscreteSchema>;\nexport type AxisSettingsContinuous = z.infer<typeof AxisSettingsContinuousSchema>;\n\nexport type DiscreteLabelsPosition = z.infer<typeof DiscreteLabelsPositionSchema>;\n\nexport interface SettingsInterface {\n type: string;\n}\n\nexport type ClickEventData = {\n x: number;\n y: number;\n info: unknown;\n}\n\nexport type PolygonData = [number, number][];\n\nexport type ChartEventHandlers<T> = T;\nexport type DendroEventHandlers = ChartEventHandlers<[(d:ClickEventData) => void]>\nexport type ScatterplotEventHandlers = ChartEventHandlers<{\n onPolygonUpdate: (d:number[], p: Polygon[]) => void;\n onTooltipHintSwitch: (d:boolean) => void;\n onLassoStateChange: () => void;\n onLassoControlsStateUpdate: (v:LassoControlsState) => void;\n}>\nexport type HeatmapEventHandlers = ChartEventHandlers<{\n onTooltipHintSwitch: (d:boolean) => void;\n onLoadingChange: (d:boolean) => void;\n}>\n\nexport type BubbleEventHandlers = ChartEventHandlers<[(d:boolean) => void]>\nexport type DiscreteEventHandlers = ChartEventHandlers<[(d:boolean) => void]>\nexport type HistogramEventHandlers = ChartEventHandlers<[(d:boolean) => void]>"],"names":["DataValueSchema","z","POINT_SHAPE","PointShapeSchema","LINE_SHAPE","LineShapeSchema","FRAME_TYPE","FrameTypeSchema","LEGEND_POSITION","LegendPositionSchema","TITLE_POSITION","TitlePositionSchema","ColumnNameSchema","AesItemSchema","AesRecordSchema","categoricalAesMappingFromValueSchema","valueSchema","continuousAesMappingFromValueSchema","isCategoricalAes","item","isContinuousAes","DiscreteLabelsPositionSchema","AxisSettingsDiscreteSchema","AxisSettingsContinuousSchema","AxisSettingsSchema"],"mappings":"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","x_google_ignoreList":[0]}
|