@milaboratories/miplots4 1.0.130 → 1.0.131
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/scatterplot/ScatterplotSettingsImpl.js +28 -28
- package/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
- package/dist/scatterplot/components/ChartTooltip.d.ts.map +1 -1
- package/dist/scatterplot/components/ChartTooltip.js +42 -40
- package/dist/scatterplot/components/ChartTooltip.js.map +1 -1
- package/dist/scatterplot/dots.d.ts.map +1 -1
- package/dist/scatterplot/dots.js +24 -22
- package/dist/scatterplot/dots.js.map +1 -1
- package/dist/scatterplot/utils/formatColumnValue.d.ts +5 -0
- package/dist/scatterplot/utils/formatColumnValue.d.ts.map +1 -0
- package/dist/scatterplot/utils/formatColumnValue.js +11 -0
- package/dist/scatterplot/utils/formatColumnValue.js.map +1 -0
- package/dist/scatterplot-umap/SettingsImpl.js +25 -25
- package/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
- package/dist/scatterplot-umap/components/LowerSVG.d.ts.map +1 -1
- package/dist/scatterplot-umap/components/LowerSVG.js +88 -86
- package/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
- package/dist/scatterplot-umap/index.d.ts.map +1 -1
- package/dist/scatterplot-umap/index.js +79 -77
- package/dist/scatterplot-umap/index.js.map +1 -1
- package/dist/types/bubble.d.ts +32 -0
- package/dist/types/bubble.d.ts.map +1 -1
- package/dist/types/common.d.ts +18 -0
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/common.js +2 -0
- package/dist/types/common.js.map +1 -1
- package/dist/types/dendro.d.ts +103 -0
- package/dist/types/dendro.d.ts.map +1 -1
- package/dist/types/discrete.d.ts +85 -8
- package/dist/types/discrete.d.ts.map +1 -1
- package/dist/types/heatmap.d.ts +159 -0
- package/dist/types/heatmap.d.ts.map +1 -1
- package/dist/types/histogram.d.ts +22 -0
- package/dist/types/histogram.d.ts.map +1 -1
- package/dist/types/scatterplot-umap.d.ts +138 -0
- package/dist/types/scatterplot-umap.d.ts.map +1 -1
- package/dist/types/scatterplot.d.ts +152 -0
- package/dist/types/scatterplot.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,45 +1,47 @@
|
|
|
1
|
-
import { j as
|
|
2
|
-
import
|
|
3
|
-
import { ChartsTitle as
|
|
4
|
-
import { ContinuousGrid as
|
|
1
|
+
import { j as o } from "../../node_modules/react/jsx-runtime.js";
|
|
2
|
+
import N, { r as g } from "../../_virtual/index.js";
|
|
3
|
+
import { ChartsTitle as O } from "../../common/ChartsTitle.js";
|
|
4
|
+
import { ContinuousGrid as R } from "../../common/ContinuousGrid.js";
|
|
5
5
|
import M from "../../common/fonts.js";
|
|
6
6
|
import { Legend as U } from "../../common/Legend.js";
|
|
7
|
-
import { Tooltip as
|
|
8
|
-
import { useDataFrame as
|
|
9
|
-
import { BLACK as
|
|
10
|
-
import { Axis as
|
|
11
|
-
import {
|
|
12
|
-
import { DEFAULT_TICKS_SIZE as
|
|
7
|
+
import { Tooltip as V } from "../../common/Tooltip.js";
|
|
8
|
+
import { useDataFrame as Z } from "../../common/useDataFrame.js";
|
|
9
|
+
import { BLACK as q } from "../../constants.js";
|
|
10
|
+
import { Axis as E } from "../../scatterplot/components/Axis.js";
|
|
11
|
+
import { formatColumnValue as G } from "../../scatterplot/utils/formatColumnValue.js";
|
|
12
|
+
import { DEFAULT_TICKS_SIZE as H, TITLE_LINE as u, LEGEND_OFFSET as J } from "../constants.js";
|
|
13
13
|
import Q from "../../node_modules/d3-shape/src/line.js";
|
|
14
14
|
import S from "../../node_modules/d3-shape/src/curve/basis.js";
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
for (const
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
import { format as z } from "../../node_modules/d3-format/src/defaultLocale.js";
|
|
16
|
+
function tt(i, d, m = []) {
|
|
17
|
+
const a = [];
|
|
18
|
+
for (const e of m) {
|
|
19
|
+
const t = e != null && e.format ? z(e.format) : void 0;
|
|
20
|
+
a.push(`${e.label}: ${G(i, d.idx, e, t)}`);
|
|
21
|
+
}
|
|
22
|
+
return a;
|
|
21
23
|
}
|
|
22
|
-
function
|
|
23
|
-
return typeof
|
|
24
|
+
function F(i) {
|
|
25
|
+
return typeof i == "string" ? i : i.label ?? i.value;
|
|
24
26
|
}
|
|
25
|
-
const
|
|
26
|
-
function
|
|
27
|
-
scales:
|
|
28
|
-
chartSettings:
|
|
29
|
-
mainTitle:
|
|
30
|
-
keyColumn:
|
|
31
|
-
margins:
|
|
27
|
+
const L = Q().curve(S);
|
|
28
|
+
function ot({
|
|
29
|
+
scales: i,
|
|
30
|
+
chartSettings: d,
|
|
31
|
+
mainTitle: m,
|
|
32
|
+
keyColumn: a,
|
|
33
|
+
margins: e,
|
|
32
34
|
chartSizes: t,
|
|
33
35
|
container: j,
|
|
34
36
|
zoomStateKey: y,
|
|
35
|
-
legendData:
|
|
36
|
-
dotsByGrouping:
|
|
37
|
-
layers:
|
|
38
|
-
aesGetters:
|
|
39
|
-
tooltipData:
|
|
37
|
+
legendData: P,
|
|
38
|
+
dotsByGrouping: b,
|
|
39
|
+
layers: A,
|
|
40
|
+
aesGetters: x,
|
|
41
|
+
tooltipData: h
|
|
40
42
|
}) {
|
|
41
|
-
var
|
|
42
|
-
const
|
|
43
|
+
var v;
|
|
44
|
+
const D = Z(), { title: w, xAxis: p, yAxis: c, frame: B, legend: I } = d, _ = p.showTicks ? H : 0, X = c.showTicks ? H : 0, T = p.title, W = c.title, Y = {
|
|
43
45
|
left: 0,
|
|
44
46
|
right: t.chartWidth,
|
|
45
47
|
top: 0,
|
|
@@ -47,20 +49,20 @@ function tt({
|
|
|
47
49
|
};
|
|
48
50
|
if (!j)
|
|
49
51
|
return null;
|
|
50
|
-
const
|
|
51
|
-
function
|
|
52
|
-
const f = Object.entries(
|
|
53
|
-
key:
|
|
54
|
-
d:
|
|
52
|
+
const n = A.find((r) => r.type === "curve"), [k, K] = g.useState([]);
|
|
53
|
+
function $() {
|
|
54
|
+
const f = Object.entries(b).map(([s, l]) => ({
|
|
55
|
+
key: s,
|
|
56
|
+
d: n != null && n.smoothing ? L(l) ?? "" : l.map((C) => `${i.x(C.x)},${i.y(C.y)}`).join(" "),
|
|
55
57
|
dot: l[0]
|
|
56
58
|
}));
|
|
57
|
-
|
|
59
|
+
K(f);
|
|
58
60
|
}
|
|
59
61
|
return g.useEffect(() => {
|
|
60
|
-
|
|
62
|
+
n && (L.x((r) => i.x(r.x)).y((r) => i.y(r.y)), $());
|
|
61
63
|
}, [y, t.chartWidth, t.chartHeight]), g.useEffect(() => {
|
|
62
|
-
|
|
63
|
-
}, [
|
|
64
|
+
n && $();
|
|
65
|
+
}, [n == null ? void 0 : n.smoothing]), /* @__PURE__ */ o.jsxs(
|
|
64
66
|
"svg",
|
|
65
67
|
{
|
|
66
68
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -69,103 +71,103 @@ function tt({
|
|
|
69
71
|
height: t.totalHeight,
|
|
70
72
|
style: { pointerEvents: "none" },
|
|
71
73
|
children: [
|
|
72
|
-
/* @__PURE__ */
|
|
73
|
-
/* @__PURE__ */
|
|
74
|
-
/* @__PURE__ */
|
|
75
|
-
/* @__PURE__ */
|
|
76
|
-
|
|
74
|
+
/* @__PURE__ */ o.jsx("defs", { children: M }),
|
|
75
|
+
/* @__PURE__ */ o.jsxs("g", { transform: `translate(${e.left},${e.top})`, fontFamily: "Manrope", children: [
|
|
76
|
+
/* @__PURE__ */ o.jsx("clipPath", { id: "viewportClipPath", children: /* @__PURE__ */ o.jsx("rect", { x: "0", y: "0", width: t.chartWidth, height: t.chartHeight }) }),
|
|
77
|
+
/* @__PURE__ */ o.jsx(
|
|
78
|
+
O,
|
|
77
79
|
{
|
|
78
|
-
title:
|
|
80
|
+
title: m,
|
|
79
81
|
show: w.show,
|
|
80
82
|
position: w.position,
|
|
81
|
-
leftPadding:
|
|
82
|
-
rightPadding:
|
|
83
|
+
leftPadding: e.left,
|
|
84
|
+
rightPadding: e.right,
|
|
83
85
|
chartsWidth: t.chartWidth
|
|
84
86
|
}
|
|
85
87
|
),
|
|
86
|
-
/* @__PURE__ */
|
|
87
|
-
|
|
88
|
+
/* @__PURE__ */ o.jsxs("g", { dominantBaseline: "central", textAnchor: "middle", fontWeight: "500", fontSize: "14px", fill: q, children: [
|
|
89
|
+
T && /* @__PURE__ */ o.jsx(
|
|
88
90
|
"text",
|
|
89
91
|
{
|
|
90
92
|
x: t.chartWidth / 2,
|
|
91
|
-
y: t.chartHeight +
|
|
92
|
-
children:
|
|
93
|
+
y: t.chartHeight + e.bottom - u / 2,
|
|
94
|
+
children: F(T)
|
|
93
95
|
}
|
|
94
96
|
),
|
|
95
|
-
|
|
97
|
+
W && /* @__PURE__ */ o.jsx(
|
|
96
98
|
"text",
|
|
97
99
|
{
|
|
98
|
-
x: -
|
|
100
|
+
x: -e.left + u / 2,
|
|
99
101
|
y: t.chartHeight / 2,
|
|
100
|
-
transform: `rotate(-90,${-
|
|
101
|
-
children:
|
|
102
|
+
transform: `rotate(-90,${-e.left + u / 2},${t.chartHeight / 2})`,
|
|
103
|
+
children: F(W)
|
|
102
104
|
}
|
|
103
105
|
)
|
|
104
106
|
] }),
|
|
105
|
-
/* @__PURE__ */
|
|
106
|
-
|
|
107
|
+
/* @__PURE__ */ o.jsx(
|
|
108
|
+
R,
|
|
107
109
|
{
|
|
108
110
|
width: t.chartWidth,
|
|
109
111
|
height: t.chartHeight,
|
|
110
|
-
scaleX:
|
|
111
|
-
scaleY:
|
|
112
|
+
scaleX: i.x,
|
|
113
|
+
scaleY: i.y,
|
|
112
114
|
axisX: p,
|
|
113
|
-
axisY:
|
|
115
|
+
axisY: c,
|
|
114
116
|
updatingKey: y,
|
|
115
|
-
frameType:
|
|
117
|
+
frameType: B.type
|
|
116
118
|
}
|
|
117
119
|
),
|
|
118
|
-
/* @__PURE__ */
|
|
119
|
-
/* @__PURE__ */
|
|
120
|
-
|
|
120
|
+
/* @__PURE__ */ o.jsx("g", { transform: `translate(0,${t.chartHeight})`, children: /* @__PURE__ */ o.jsx(E, { scale: i.x, orient: "bottom", tickSize: _ }) }),
|
|
121
|
+
/* @__PURE__ */ o.jsx("g", { children: /* @__PURE__ */ o.jsx(E, { scale: i.y, orient: "left", tickSize: X }) }),
|
|
122
|
+
n && n.smoothing && /* @__PURE__ */ o.jsx("g", { clipPath: "url(#viewportClipPath)", children: k.map(({ key: r, d: f, dot: s }) => {
|
|
121
123
|
var l;
|
|
122
|
-
return /* @__PURE__ */
|
|
124
|
+
return /* @__PURE__ */ o.jsx(
|
|
123
125
|
"path",
|
|
124
126
|
{
|
|
125
127
|
d: f,
|
|
126
128
|
fill: "none",
|
|
127
|
-
stroke:
|
|
128
|
-
strokeWidth: (l =
|
|
129
|
-
strokeDasharray:
|
|
129
|
+
stroke: x.dotFill(s.idx),
|
|
130
|
+
strokeWidth: (l = n.aes) == null ? void 0 : l.lineWidth,
|
|
131
|
+
strokeDasharray: x.lineType(s.idx)
|
|
130
132
|
},
|
|
131
133
|
r
|
|
132
134
|
);
|
|
133
135
|
}) }),
|
|
134
|
-
|
|
136
|
+
n && !n.smoothing && /* @__PURE__ */ o.jsx("g", { clipPath: "url(#viewportClipPath)", children: k.map(({ key: r, d: f, dot: s }) => {
|
|
135
137
|
var l;
|
|
136
|
-
return /* @__PURE__ */
|
|
138
|
+
return /* @__PURE__ */ o.jsx(
|
|
137
139
|
"polyline",
|
|
138
140
|
{
|
|
139
141
|
points: f,
|
|
140
142
|
fill: "none",
|
|
141
|
-
stroke:
|
|
142
|
-
strokeWidth: (l =
|
|
143
|
-
strokeDasharray:
|
|
143
|
+
stroke: x.dotFill(s.idx),
|
|
144
|
+
strokeWidth: (l = n.aes) == null ? void 0 : l.lineWidth,
|
|
145
|
+
strokeDasharray: x.lineType(s.idx)
|
|
144
146
|
},
|
|
145
147
|
r
|
|
146
148
|
);
|
|
147
149
|
}) }),
|
|
148
|
-
d.selectedData && /* @__PURE__ */
|
|
149
|
-
|
|
150
|
+
d.tooltips.show && h.selectedData && /* @__PURE__ */ o.jsx(
|
|
151
|
+
V,
|
|
150
152
|
{
|
|
151
|
-
content:
|
|
152
|
-
x:
|
|
153
|
-
y:
|
|
153
|
+
content: tt(D, h.selectedData, (v = d.tooltips) == null ? void 0 : v.content),
|
|
154
|
+
x: i.x(h.selectedData.x),
|
|
155
|
+
y: i.y(h.selectedData.y),
|
|
154
156
|
active: !0,
|
|
155
|
-
fixed:
|
|
156
|
-
sideDistances:
|
|
157
|
+
fixed: h.fixed,
|
|
158
|
+
sideDistances: Y,
|
|
157
159
|
container: j,
|
|
158
|
-
onClose:
|
|
160
|
+
onClose: h.onClose
|
|
159
161
|
}
|
|
160
162
|
),
|
|
161
|
-
|
|
163
|
+
I.show && /* @__PURE__ */ o.jsx("g", { transform: `translate(${t.chartWidth + J},0)`, children: /* @__PURE__ */ o.jsx(U, { legendData: P }) })
|
|
162
164
|
] })
|
|
163
165
|
]
|
|
164
166
|
}
|
|
165
167
|
);
|
|
166
168
|
}
|
|
167
|
-
const
|
|
169
|
+
const ut = N.memo(ot);
|
|
168
170
|
export {
|
|
169
|
-
|
|
171
|
+
ut as default
|
|
170
172
|
};
|
|
171
173
|
//# sourceMappingURL=LowerSVG.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LowerSVG.js","sources":["../../../src/scatterplot-umap/components/LowerSVG.tsx"],"sourcesContent":["import { curveBasis, line } from 'd3-shape';\nimport React, { useEffect, useState } from 'react';\nimport { ChartsTitle } from '../../common/ChartsTitle';\nimport { ContinuousGrid } from '../../common/ContinuousGrid';\nimport fonts from '../../common/fonts';\nimport { Legend } from '../../common/Legend';\nimport type { TooltipsData } from '../../common/Tooltip';\nimport { Tooltip } from '../../common/Tooltip';\nimport type { LegendData } from '../../common/types';\nimport { useDataFrame } from '../../common/useDataFrame';\nimport { BLACK } from '../../constants';\nimport type { DataFrame } from '../../DataFrame';\nimport { Axis } from '../../scatterplot/components/Axis';\nimport type { ColumnName } from '../../types';\nimport type { CurveUmapLayer } from '../../types/scatterplot-umap';\nimport { numberFormat } from '../../utils/numberFormat';\nimport { DEFAULT_TICKS_SIZE, LEGEND_OFFSET, TITLE_LINE } from '../constants';\nimport type { ScatterplotUmapSettingsImpl } from '../SettingsImpl';\nimport type { CaptionsSizes, ChartScales, ChartSizes, Dot, DotInfo, Margins, SVGLayerProps } from '../types';\n\nfunction getTooltipContent(dataFrame: DataFrame, dot: DotInfo, keyColumn: ColumnName | null, columnsList: ColumnName[] = []) {\n const lines = [`x: ${numberFormat(dot.x)}`, `y: ${numberFormat(dot.y)}`];\n if (keyColumn?.label) {\n lines.unshift(`${keyColumn.label}: ${dataFrame.getColumnValue(keyColumn.label, dot.idx)}`);\n }\n for (const column of columnsList) {\n lines.push(`${column.label}: ${dataFrame.getColumnValue(column.valueLabels ?? column.value, dot.idx)}`);\n }\n return lines;\n}\n\nfunction getTitle(title: string | ColumnName): string {\n if (typeof title === 'string') {\n return title;\n }\n return title.label ?? title.value;\n}\n\nconst lineGenerator = line<Dot>().curve(curveBasis);\n\nfunction LowerSvg({\n scales,\n chartSettings,\n mainTitle,\n keyColumn,\n margins,\n chartSizes,\n container,\n zoomStateKey,\n legendData,\n dotsByGrouping,\n layers,\n aesGetters,\n tooltipData\n}: {\n aesGetters: SVGLayerProps['aesGetters'];\n scales: ChartScales;\n chartSettings: ScatterplotUmapSettingsImpl['chartSettings'];\n mainTitle: string[];\n keyColumn: ColumnName | null;\n margins: Margins;\n chartSizes: ChartSizes;\n captionsSizes: CaptionsSizes;\n selectedDot?: DotInfo | null;\n container: SVGElement | null;\n zoomStateKey: string;\n legendData: LegendData;\n dotsByGrouping: Record<string, Dot[]>;\n layers: ScatterplotUmapSettingsImpl['layers'];\n tooltipData: TooltipsData<DotInfo>;\n}) {\n const dataFrame = useDataFrame();\n const {title, xAxis, yAxis, frame, legend} = chartSettings;\n const tickSizeX = xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const tickSizeY = yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const xTitle = xAxis.title;\n const yTitle = yAxis.title;\n const needLeftAxis = true;\n const needBottomAxis = true;\n\n const sideDistances = {\n left: 0,\n right: chartSizes.chartWidth,\n top: 0,\n bottom: chartSizes.chartHeight,\n };\n\n if (!container) {\n return null;\n }\n\n const curveLayer = layers.find(layer => layer.type === 'curve') as CurveUmapLayer | undefined;\n const [lines, setLines] = useState<{key: string, d:string, dot: Dot}[]>([]);\n\n function updateLines() {\n const data = Object.entries(dotsByGrouping);\n const nextLines = data.map(([key, dots]) => ({\n key,\n d: curveLayer?.smoothing ? lineGenerator(dots) ?? '' : dots.map(d => `${scales.x(d.x)},${scales.y(d.y)}`).join(' '),\n dot: dots[0]\n }));\n setLines(nextLines);\n }\n useEffect(() => {\n if (!curveLayer) {\n return;\n }\n lineGenerator\n .x((d: Dot) => scales.x(d.x))\n .y((d: Dot) => scales.y(d.y));\n updateLines();\n }, [zoomStateKey, chartSizes.chartWidth, chartSizes.chartHeight]);\n\n useEffect(() => {\n if (!curveLayer) {\n return;\n }\n updateLines();\n }, [curveLayer?.smoothing]);\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`0 0 ${chartSizes.totalWidth} ${chartSizes.totalHeight}`}\n width={chartSizes.totalWidth}\n height={chartSizes.totalHeight}\n style={{pointerEvents: 'none'}}\n >\n <defs>{fonts}</defs>\n <g transform={`translate(${margins.left},${margins.top})`} fontFamily=\"Manrope\">\n <clipPath id=\"viewportClipPath\">\n <rect x=\"0\" y=\"0\" width={chartSizes.chartWidth} height={chartSizes.chartHeight}/>\n </clipPath>\n <ChartsTitle\n title={mainTitle}\n show={title.show}\n position={title.position}\n leftPadding={margins.left}\n rightPadding={margins.right}\n chartsWidth={chartSizes.chartWidth}\n />\n <g dominantBaseline=\"central\" textAnchor=\"middle\" fontWeight=\"500\" fontSize=\"14px\" fill={BLACK}>\n {xTitle && (\n <text\n x={chartSizes.chartWidth / 2}\n y={chartSizes.chartHeight + margins.bottom - TITLE_LINE / 2}\n >\n {getTitle(xTitle)}\n </text>\n )}\n {yTitle && (\n <text\n x={-margins.left + TITLE_LINE / 2}\n y={chartSizes.chartHeight / 2}\n transform={`rotate(-90,${-margins.left + TITLE_LINE / 2},${\n chartSizes.chartHeight / 2\n })`}\n >\n {getTitle(yTitle)}\n </text>\n )}\n </g>\n <ContinuousGrid\n width={chartSizes.chartWidth}\n height={chartSizes.chartHeight}\n scaleX={scales.x}\n scaleY={scales.y}\n axisX={xAxis}\n axisY={yAxis}\n updatingKey={zoomStateKey}\n frameType={frame.type}\n />\n {needBottomAxis && (\n <g transform={`translate(0,${chartSizes.chartHeight})`}>\n <Axis scale={scales.x} orient=\"bottom\" tickSize={tickSizeX} />\n </g>\n )}\n {needLeftAxis && (\n <g>\n <Axis scale={scales.y} orient=\"left\" tickSize={tickSizeY} />\n </g>\n )}\n {curveLayer && curveLayer.smoothing && (\n <g clipPath=\"url(#viewportClipPath)\">\n {lines.map(({key, d, dot}) => (\n <path\n key={key}\n d={d}\n fill=\"none\"\n stroke={aesGetters.dotFill(dot.idx)}\n strokeWidth={curveLayer.aes?.lineWidth}\n strokeDasharray={aesGetters.lineType(dot.idx)}\n />\n ))}\n </g>\n )}\n {curveLayer && !curveLayer.smoothing && (\n <g clipPath=\"url(#viewportClipPath)\">\n {lines.map(({key, d, dot}) => (\n <polyline\n key={key}\n points={d}\n fill=\"none\"\n stroke={aesGetters.dotFill(dot.idx)}\n strokeWidth={curveLayer.aes?.lineWidth}\n strokeDasharray={aesGetters.lineType(dot.idx)}\n />\n ))}\n </g>\n )}\n {tooltipData.selectedData && (\n <Tooltip\n content={getTooltipContent(dataFrame, tooltipData.selectedData, keyColumn, chartSettings.tooltips?.content)}\n x={scales.x(tooltipData.selectedData.x)}\n y={scales.y(tooltipData.selectedData.y)}\n active={true}\n fixed={tooltipData.fixed}\n sideDistances={sideDistances}\n container={container}\n onClose={tooltipData.onClose}\n />\n )}\n {legend.show && (\n <g transform={`translate(${chartSizes.chartWidth + LEGEND_OFFSET},0)`}>\n <Legend legendData={legendData} />\n </g>\n )}\n </g>\n </svg>\n );\n}\n\nexport default React.memo(LowerSvg);\n"],"names":["getTooltipContent","dataFrame","dot","keyColumn","columnsList","lines","numberFormat","column","getTitle","title","lineGenerator","line","curveBasis","LowerSvg","scales","chartSettings","mainTitle","margins","chartSizes","container","zoomStateKey","legendData","dotsByGrouping","layers","aesGetters","tooltipData","useDataFrame","xAxis","yAxis","frame","legend","tickSizeX","DEFAULT_TICKS_SIZE","tickSizeY","xTitle","yTitle","sideDistances","curveLayer","layer","setLines","useState","updateLines","nextLines","key","dots","d","useEffect","jsxs","jsx","fonts","ChartsTitle","BLACK","TITLE_LINE","ContinuousGrid","Axis","_a","Tooltip","LEGEND_OFFSET","Legend","LowerSvg$1","React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LowerSVG.js","sources":["../../../src/scatterplot-umap/components/LowerSVG.tsx"],"sourcesContent":["import {format} from 'd3-format';\nimport { curveBasis, line } from 'd3-shape';\nimport React, { useEffect, useState } from 'react';\nimport { ChartsTitle } from '../../common/ChartsTitle';\nimport { ContinuousGrid } from '../../common/ContinuousGrid';\nimport fonts from '../../common/fonts';\nimport { Legend } from '../../common/Legend';\nimport type { TooltipsData } from '../../common/Tooltip';\nimport { Tooltip } from '../../common/Tooltip';\nimport type { LegendData } from '../../common/types';\nimport { useDataFrame } from '../../common/useDataFrame';\nimport { BLACK } from '../../constants';\nimport type { DataFrame } from '../../DataFrame';\nimport { Axis } from '../../scatterplot/components/Axis';\nimport {formatColumnValue} from '../../scatterplot/utils/formatColumnValue';\nimport type { ColumnName } from '../../types';\nimport type { CurveUmapLayer } from '../../types/scatterplot-umap';\nimport { DEFAULT_TICKS_SIZE, LEGEND_OFFSET, TITLE_LINE } from '../constants';\nimport type { ScatterplotUmapSettingsImpl } from '../SettingsImpl';\nimport type { CaptionsSizes, ChartScales, ChartSizes, Dot, DotInfo, Margins, SVGLayerProps } from '../types';\n\nfunction getTooltipContent(dataFrame: DataFrame, dot: DotInfo, columnsList: ColumnName[] = [], ) {\n const lines: string[] = [];\n for (const column of columnsList) {\n const columnFormatter = column?.format ? format(column.format) : undefined;\n lines.push(`${column.label}: ${formatColumnValue(dataFrame, dot.idx, column, columnFormatter)}`);\n }\n return lines;\n}\n\nfunction getTitle(title: string | ColumnName): string {\n if (typeof title === 'string') {\n return title;\n }\n return title.label ?? title.value;\n}\n\nconst lineGenerator = line<Dot>().curve(curveBasis);\n\nfunction LowerSvg({\n scales,\n chartSettings,\n mainTitle,\n keyColumn,\n margins,\n chartSizes,\n container,\n zoomStateKey,\n legendData,\n dotsByGrouping,\n layers,\n aesGetters,\n tooltipData\n}: {\n aesGetters: SVGLayerProps['aesGetters'];\n scales: ChartScales;\n chartSettings: ScatterplotUmapSettingsImpl['chartSettings'];\n mainTitle: string[];\n keyColumn: ColumnName | null;\n margins: Margins;\n chartSizes: ChartSizes;\n captionsSizes: CaptionsSizes;\n selectedDot?: DotInfo | null;\n container: SVGElement | null;\n zoomStateKey: string;\n legendData: LegendData;\n dotsByGrouping: Record<string, Dot[]>;\n layers: ScatterplotUmapSettingsImpl['layers'];\n tooltipData: TooltipsData<DotInfo>;\n}) {\n const dataFrame = useDataFrame();\n const {title, xAxis, yAxis, frame, legend} = chartSettings;\n const tickSizeX = xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const tickSizeY = yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const xTitle = xAxis.title;\n const yTitle = yAxis.title;\n const needLeftAxis = true;\n const needBottomAxis = true;\n\n const sideDistances = {\n left: 0,\n right: chartSizes.chartWidth,\n top: 0,\n bottom: chartSizes.chartHeight,\n };\n\n if (!container) {\n return null;\n }\n\n const curveLayer = layers.find(layer => layer.type === 'curve') as CurveUmapLayer | undefined;\n const [lines, setLines] = useState<{key: string, d:string, dot: Dot}[]>([]);\n\n function updateLines() {\n const data = Object.entries(dotsByGrouping);\n const nextLines = data.map(([key, dots]) => ({\n key,\n d: curveLayer?.smoothing ? lineGenerator(dots) ?? '' : dots.map(d => `${scales.x(d.x)},${scales.y(d.y)}`).join(' '),\n dot: dots[0]\n }));\n setLines(nextLines);\n }\n useEffect(() => {\n if (!curveLayer) {\n return;\n }\n lineGenerator\n .x((d: Dot) => scales.x(d.x))\n .y((d: Dot) => scales.y(d.y));\n updateLines();\n }, [zoomStateKey, chartSizes.chartWidth, chartSizes.chartHeight]);\n\n useEffect(() => {\n if (!curveLayer) {\n return;\n }\n updateLines();\n }, [curveLayer?.smoothing]);\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`0 0 ${chartSizes.totalWidth} ${chartSizes.totalHeight}`}\n width={chartSizes.totalWidth}\n height={chartSizes.totalHeight}\n style={{pointerEvents: 'none'}}\n >\n <defs>{fonts}</defs>\n <g transform={`translate(${margins.left},${margins.top})`} fontFamily=\"Manrope\">\n <clipPath id=\"viewportClipPath\">\n <rect x=\"0\" y=\"0\" width={chartSizes.chartWidth} height={chartSizes.chartHeight}/>\n </clipPath>\n <ChartsTitle\n title={mainTitle}\n show={title.show}\n position={title.position}\n leftPadding={margins.left}\n rightPadding={margins.right}\n chartsWidth={chartSizes.chartWidth}\n />\n <g dominantBaseline=\"central\" textAnchor=\"middle\" fontWeight=\"500\" fontSize=\"14px\" fill={BLACK}>\n {xTitle && (\n <text\n x={chartSizes.chartWidth / 2}\n y={chartSizes.chartHeight + margins.bottom - TITLE_LINE / 2}\n >\n {getTitle(xTitle)}\n </text>\n )}\n {yTitle && (\n <text\n x={-margins.left + TITLE_LINE / 2}\n y={chartSizes.chartHeight / 2}\n transform={`rotate(-90,${-margins.left + TITLE_LINE / 2},${\n chartSizes.chartHeight / 2\n })`}\n >\n {getTitle(yTitle)}\n </text>\n )}\n </g>\n <ContinuousGrid\n width={chartSizes.chartWidth}\n height={chartSizes.chartHeight}\n scaleX={scales.x}\n scaleY={scales.y}\n axisX={xAxis}\n axisY={yAxis}\n updatingKey={zoomStateKey}\n frameType={frame.type}\n />\n {needBottomAxis && (\n <g transform={`translate(0,${chartSizes.chartHeight})`}>\n <Axis scale={scales.x} orient=\"bottom\" tickSize={tickSizeX} />\n </g>\n )}\n {needLeftAxis && (\n <g>\n <Axis scale={scales.y} orient=\"left\" tickSize={tickSizeY} />\n </g>\n )}\n {curveLayer && curveLayer.smoothing && (\n <g clipPath=\"url(#viewportClipPath)\">\n {lines.map(({key, d, dot}) => (\n <path\n key={key}\n d={d}\n fill=\"none\"\n stroke={aesGetters.dotFill(dot.idx)}\n strokeWidth={curveLayer.aes?.lineWidth}\n strokeDasharray={aesGetters.lineType(dot.idx)}\n />\n ))}\n </g>\n )}\n {curveLayer && !curveLayer.smoothing && (\n <g clipPath=\"url(#viewportClipPath)\">\n {lines.map(({key, d, dot}) => (\n <polyline\n key={key}\n points={d}\n fill=\"none\"\n stroke={aesGetters.dotFill(dot.idx)}\n strokeWidth={curveLayer.aes?.lineWidth}\n strokeDasharray={aesGetters.lineType(dot.idx)}\n />\n ))}\n </g>\n )}\n {chartSettings.tooltips.show && tooltipData.selectedData && (\n <Tooltip\n content={getTooltipContent(dataFrame, tooltipData.selectedData, chartSettings.tooltips?.content)}\n x={scales.x(tooltipData.selectedData.x)}\n y={scales.y(tooltipData.selectedData.y)}\n active={true}\n fixed={tooltipData.fixed}\n sideDistances={sideDistances}\n container={container}\n onClose={tooltipData.onClose}\n />\n )}\n {legend.show && (\n <g transform={`translate(${chartSizes.chartWidth + LEGEND_OFFSET},0)`}>\n <Legend legendData={legendData} />\n </g>\n )}\n </g>\n </svg>\n );\n}\n\nexport default React.memo(LowerSvg);\n"],"names":["getTooltipContent","dataFrame","dot","columnsList","lines","column","columnFormatter","format","formatColumnValue","getTitle","title","lineGenerator","line","curveBasis","LowerSvg","scales","chartSettings","mainTitle","keyColumn","margins","chartSizes","container","zoomStateKey","legendData","dotsByGrouping","layers","aesGetters","tooltipData","useDataFrame","xAxis","yAxis","frame","legend","tickSizeX","DEFAULT_TICKS_SIZE","tickSizeY","xTitle","yTitle","sideDistances","curveLayer","layer","setLines","useState","updateLines","nextLines","key","dots","d","useEffect","jsxs","jsx","fonts","ChartsTitle","BLACK","TITLE_LINE","ContinuousGrid","Axis","_a","Tooltip","LEGEND_OFFSET","Legend","LowerSvg$1","React"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scatterplot-umap/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scatterplot-umap/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,KAAK,EAA2D,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAClH,OAAO,KAAK,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpG,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,kBAAkB,EAAa,OAAO,EAAE,MAAM,SAAS,CAAC;AAMxF,qBAAa,oBAAqB,SAAQ,aAAa;IACnD,QAAQ,EAAE,2BAA2B,CAAC;IACtC,aAAa,EAAE,aAAa,CAAC;IAE7B,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAmB;IACjF,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAmB;IAC3D,0BAA0B,EAAE,CAAC,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAmB;IAE9E,cAAc,EAAE;QACZ,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACtC,WAAW,EAAE,WAAW,CAAC;QACzB,YAAY,EAAE,yBAAyB,CAAA;KAC1C,GAAG,IAAI,CAAQ;gBAEJ,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAE,aAAa,CAAC,EAAE,wBAAwB;IAaxG,KAAK,CAAC,IAAI,EAAE,WAAW;IAcvB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB;IA+BxE,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IA8B9C,MAAM,IAAI,MAAM;IAOhB,mCAAmC,CAAC,YAAY,EAAE,2BAA2B,EAAE,QAAQ,EAAE,2BAA2B;IAUpH,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAUpE,WAAW;IAmFX,gBAAgB;IA0BhB,YAAY;CAqBf"}
|
|
@@ -1,32 +1,34 @@
|
|
|
1
1
|
var U = Object.defineProperty;
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { AbstractChart as
|
|
5
|
-
import { createLegendInfo as
|
|
2
|
+
var L = (c, u, t) => u in c ? U(c, u, { enumerable: !0, configurable: !0, writable: !0, value: t }) : c[u] = t;
|
|
3
|
+
var g = (c, u, t) => L(c, typeof u != "symbol" ? u + "" : u, t);
|
|
4
|
+
import { AbstractChart as A } from "../AbstractChart.js";
|
|
5
|
+
import { createLegendInfo as R, addPalettesToAesMapping as I } from "../scatterplot/utils/createLegendInfo.js";
|
|
6
|
+
import { formatColumnValue as T } from "../scatterplot/utils/formatColumnValue.js";
|
|
6
7
|
import P from "./ChartRenderer.js";
|
|
7
8
|
import { SCATTERPLOT_LASSO_EVENTS as m } from "./constants.js";
|
|
8
|
-
import { ScatterplotUmapSettingsImpl as
|
|
9
|
-
|
|
9
|
+
import { ScatterplotUmapSettingsImpl as b } from "./SettingsImpl.js";
|
|
10
|
+
import { format as B } from "../node_modules/d3-format/src/defaultLocale.js";
|
|
11
|
+
function V(c) {
|
|
10
12
|
return typeof c == "object" && "type" in c && c.type === "grouping";
|
|
11
13
|
}
|
|
12
|
-
class
|
|
13
|
-
constructor(
|
|
14
|
-
super(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
class F extends A {
|
|
15
|
+
constructor(t, a, e) {
|
|
16
|
+
super(t, a);
|
|
17
|
+
g(this, "settings");
|
|
18
|
+
g(this, "chartRenderer");
|
|
19
|
+
g(this, "onPolygonUpdate", () => {
|
|
18
20
|
});
|
|
19
21
|
// dots indexes from input data
|
|
20
|
-
|
|
22
|
+
g(this, "onTooltipHintSwitch", () => {
|
|
21
23
|
});
|
|
22
|
-
|
|
24
|
+
g(this, "onLassoControlsStateUpdate", () => {
|
|
23
25
|
});
|
|
24
|
-
|
|
25
|
-
this.settings = new
|
|
26
|
+
g(this, "calculatedData", null);
|
|
27
|
+
this.settings = new b(a), this.chartRenderer = new P(), e && (this.onPolygonUpdate = e.onPolygonUpdate, this.onTooltipHintSwitch = e.onTooltipHintSwitch, this.onLassoControlsStateUpdate = e.onLassoControlsStateUpdate);
|
|
26
28
|
}
|
|
27
|
-
mount(
|
|
29
|
+
mount(t) {
|
|
28
30
|
try {
|
|
29
|
-
this.chartRenderer.init(
|
|
31
|
+
this.chartRenderer.init(t), this._updateData(), this._updateChart();
|
|
30
32
|
} catch (a) {
|
|
31
33
|
console.error(a), a instanceof Error && (this.chartRenderer.renderError(a.message), console.error(a));
|
|
32
34
|
}
|
|
@@ -34,113 +36,113 @@ class M extends R {
|
|
|
34
36
|
unmount() {
|
|
35
37
|
this.chartRenderer.clear();
|
|
36
38
|
}
|
|
37
|
-
updateSettingsAndData(
|
|
39
|
+
updateSettingsAndData(t, a) {
|
|
38
40
|
try {
|
|
39
|
-
const
|
|
40
|
-
this.settings = new
|
|
41
|
-
const n =
|
|
42
|
-
n &&
|
|
43
|
-
} catch (
|
|
44
|
-
|
|
41
|
+
const e = this.settings, i = this.data;
|
|
42
|
+
this.settings = new b(a), this.data = t, this._needUpdateCalculatedDataBySettings(e, this.settings) || this._needUpdateCalculatedDataByData(i, this.data) ? this._updateData() : this._updateAesInData();
|
|
43
|
+
const n = e.layers.find((d) => d.type === "dots"), s = this.settings.layers.find((d) => d.type === "dots");
|
|
44
|
+
n && s && n.aes.dotSize !== s.aes.dotSize && typeof n.aes.dotSize == "number" && typeof s.aes.dotSize == "number" && this.chartRenderer.updatePointSize(), this._updateChart();
|
|
45
|
+
} catch (e) {
|
|
46
|
+
e instanceof Error && (this.chartRenderer.renderError(e.message), console.error(e));
|
|
45
47
|
}
|
|
46
48
|
}
|
|
47
|
-
updateChartState(
|
|
48
|
-
if (
|
|
49
|
-
const
|
|
50
|
-
document.dispatchEvent(
|
|
49
|
+
updateChartState(t, a) {
|
|
50
|
+
if (t === "polygon" && (this.chartRenderer.polygons = a, this._updateChart()), t === m.delete && document) {
|
|
51
|
+
const e = new CustomEvent(m.delete);
|
|
52
|
+
document.dispatchEvent(e);
|
|
51
53
|
}
|
|
52
|
-
if (
|
|
53
|
-
const
|
|
54
|
-
document.dispatchEvent(
|
|
54
|
+
if (t === m.selectMode && document) {
|
|
55
|
+
const e = new CustomEvent(m.selectMode, { detail: a });
|
|
56
|
+
document.dispatchEvent(e);
|
|
55
57
|
}
|
|
56
|
-
if (
|
|
57
|
-
const
|
|
58
|
-
document.dispatchEvent(
|
|
58
|
+
if (t === m.forward && document) {
|
|
59
|
+
const e = new CustomEvent(m.forward);
|
|
60
|
+
document.dispatchEvent(e);
|
|
59
61
|
}
|
|
60
|
-
if (
|
|
61
|
-
const
|
|
62
|
-
document.dispatchEvent(
|
|
62
|
+
if (t === m.back && document) {
|
|
63
|
+
const e = new CustomEvent(m.back);
|
|
64
|
+
document.dispatchEvent(e);
|
|
63
65
|
}
|
|
64
66
|
}
|
|
65
67
|
export() {
|
|
66
68
|
return console.warn("export not implemented"), "";
|
|
67
69
|
}
|
|
68
|
-
_needUpdateCalculatedDataBySettings(
|
|
69
|
-
var
|
|
70
|
-
return
|
|
70
|
+
_needUpdateCalculatedDataBySettings(t, a) {
|
|
71
|
+
var e, i, n, s;
|
|
72
|
+
return t.grouping.length !== a.grouping.length || t.grouping.some((d, o) => {
|
|
71
73
|
var h;
|
|
72
|
-
return d.value !== ((h = a.grouping[
|
|
73
|
-
}) ||
|
|
74
|
+
return d.value !== ((h = a.grouping[o]) == null ? void 0 : h.value);
|
|
75
|
+
}) || t.layers.length !== a.layers.length || t.layers.some((d, o) => d.type !== a.layers[o].type) || (((e = t.label) == null ? void 0 : e.value) || ((i = a.label) == null ? void 0 : i.value)) && ((n = t.label) == null ? void 0 : n.value) !== ((s = a.label) == null ? void 0 : s.value);
|
|
74
76
|
}
|
|
75
|
-
_needUpdateCalculatedDataByData(
|
|
76
|
-
const
|
|
77
|
-
return
|
|
78
|
-
var
|
|
79
|
-
return
|
|
77
|
+
_needUpdateCalculatedDataByData(t, a) {
|
|
78
|
+
const e = Object.keys(t.data), i = Object.keys(a.data);
|
|
79
|
+
return t.id !== a.id || e.length !== i.length || e.some((n) => {
|
|
80
|
+
var s;
|
|
81
|
+
return t.data[n].length !== ((s = a.data[n]) == null ? void 0 : s.length);
|
|
80
82
|
});
|
|
81
83
|
}
|
|
82
84
|
_updateData() {
|
|
83
|
-
const { x:
|
|
85
|
+
const { x: t, y: a, label: e, highlight: i, grouping: n, layers: s, inheritedAes: d } = this.settings, o = {
|
|
84
86
|
minX: 1 / 0,
|
|
85
87
|
maxX: -1 / 0,
|
|
86
88
|
minY: 1 / 0,
|
|
87
89
|
maxY: -1 / 0
|
|
88
|
-
}, h =
|
|
90
|
+
}, h = s.some((r) => r.type === "curve"), f = /* @__PURE__ */ new Set(), y = {}, S = [], D = e != null && e.format ? B(e.format) : void 0;
|
|
89
91
|
for (let r = 0; r < this.data.rowsCount; r++) {
|
|
90
|
-
const l = this.data.getColumnValue(
|
|
92
|
+
const l = this.data.getColumnValue(t.value, r), p = this.data.getColumnValue(a.value, r);
|
|
91
93
|
if (typeof l != "number" || typeof p != "number")
|
|
92
94
|
continue;
|
|
93
|
-
l <
|
|
94
|
-
const w =
|
|
95
|
+
l < o.minX && (o.minX = l), l > o.maxX && (o.maxX = l), p < o.minY && (o.minY = p), p > o.maxY && (o.maxY = p);
|
|
96
|
+
const w = i ? !this.data.getColumnValue(i.value, r) : !1, E = {
|
|
95
97
|
x: l,
|
|
96
98
|
y: p,
|
|
97
99
|
idx: r,
|
|
98
|
-
label:
|
|
99
|
-
dimmed:
|
|
100
|
+
label: T(this.data, r, e, D),
|
|
101
|
+
dimmed: w
|
|
100
102
|
};
|
|
101
103
|
if (h) {
|
|
102
|
-
const C = n.map((
|
|
103
|
-
|
|
104
|
+
const C = n.map((_) => this.data.getColumnValue(_.value, r)).join("_");
|
|
105
|
+
f.add(C), y[C] || (y[C] = []), y[C].push(E);
|
|
104
106
|
}
|
|
105
|
-
|
|
107
|
+
S.push(E);
|
|
106
108
|
}
|
|
107
|
-
i &&
|
|
108
|
-
const
|
|
109
|
-
h &&
|
|
109
|
+
i && S.sort((r, l) => l.dimmed === r.dimmed ? 0 : l.dimmed ? 1 : -1);
|
|
110
|
+
const v = [...f];
|
|
111
|
+
h && v.forEach((r) => {
|
|
110
112
|
y[r].sort((l, p) => l.x - p.x);
|
|
111
113
|
});
|
|
112
|
-
const x =
|
|
114
|
+
const x = R(this.data, n, s, d);
|
|
113
115
|
this.calculatedData = {
|
|
114
|
-
dots:
|
|
116
|
+
dots: S,
|
|
115
117
|
dotsByGrouping: y,
|
|
116
|
-
groupingKeys:
|
|
117
|
-
dotsExtents:
|
|
118
|
+
groupingKeys: v,
|
|
119
|
+
dotsExtents: o,
|
|
118
120
|
legendLabels: x
|
|
119
121
|
};
|
|
120
122
|
}
|
|
121
123
|
_updateAesInData() {
|
|
122
|
-
const
|
|
123
|
-
if (!
|
|
124
|
+
const t = this.calculatedData;
|
|
125
|
+
if (!t)
|
|
124
126
|
return;
|
|
125
|
-
const { layers: a, inheritedAes:
|
|
127
|
+
const { layers: a, inheritedAes: e, grouping: i } = this.settings;
|
|
126
128
|
i.forEach((n) => {
|
|
127
|
-
const
|
|
128
|
-
a.forEach((
|
|
129
|
-
|
|
130
|
-
|
|
129
|
+
const s = /* @__PURE__ */ new Set(), d = {};
|
|
130
|
+
a.forEach((o) => {
|
|
131
|
+
o.aes && Object.entries(o.aes).forEach(([h, f]) => {
|
|
132
|
+
V(f) && f.value === n.value && (s.add(h), f.palette && (d[h] = f.palette));
|
|
131
133
|
});
|
|
132
|
-
}),
|
|
134
|
+
}), t.legendLabels[n.value].usedAes = [...s], t.legendLabels[n.value].aesMap = I(n, d, e[n.value]);
|
|
133
135
|
});
|
|
134
136
|
}
|
|
135
137
|
_updateChart() {
|
|
136
138
|
if (!this.calculatedData)
|
|
137
139
|
return;
|
|
138
|
-
const { id:
|
|
140
|
+
const { id: t, chartSettings: a, keyColumn: e, layers: i, grouping: n } = this.settings;
|
|
139
141
|
this.chartRenderer.render(
|
|
140
142
|
this.data,
|
|
141
|
-
e,
|
|
142
|
-
a,
|
|
143
143
|
t,
|
|
144
|
+
a,
|
|
145
|
+
e,
|
|
144
146
|
this.calculatedData.dots,
|
|
145
147
|
this.calculatedData.dotsExtents,
|
|
146
148
|
this.calculatedData.dotsByGrouping,
|
|
@@ -154,6 +156,6 @@ class M extends R {
|
|
|
154
156
|
}
|
|
155
157
|
}
|
|
156
158
|
export {
|
|
157
|
-
|
|
159
|
+
F as ChartScatterplotUmap
|
|
158
160
|
};
|
|
159
161
|
//# sourceMappingURL=index.js.map
|