@milaboratories/miplots4 1.0.126 → 1.0.128
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/DataFrame.d.ts +7 -5
- package/dist/DataFrame.d.ts.map +1 -1
- package/dist/DataFrame.js +67 -60
- package/dist/DataFrame.js.map +1 -1
- package/dist/bubble/components/Chart.d.ts +3 -3
- package/dist/bubble/components/Chart.d.ts.map +1 -1
- package/dist/bubble/components/Chart.js +23 -23
- package/dist/bubble/components/Chart.js.map +1 -1
- package/dist/common/Tooltip.d.ts +1 -1
- package/dist/common/Tooltip.d.ts.map +1 -1
- package/dist/common/Tooltip.js +17 -17
- package/dist/common/Tooltip.js.map +1 -1
- package/dist/discrete/components/layers/BinnedDotsElement.d.ts +2 -2
- package/dist/discrete/components/layers/BinnedDotsElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/BinnedDotsElement.js +9 -9
- package/dist/discrete/components/layers/BinnedDotsElement.js.map +1 -1
- package/dist/discrete/components/layers/BoxElement.d.ts +2 -2
- package/dist/discrete/components/layers/BoxElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/BoxElement.js +19 -19
- package/dist/discrete/components/layers/BoxElement.js.map +1 -1
- package/dist/discrete/components/layers/DotsGroupElement.d.ts +3 -3
- package/dist/discrete/components/layers/DotsGroupElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/DotsGroupElement.js +10 -10
- package/dist/discrete/components/layers/DotsGroupElement.js.map +1 -1
- package/dist/discrete/components/layers/ErrorBarElement.d.ts +2 -2
- package/dist/discrete/components/layers/ErrorBarElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/ErrorBarElement.js +15 -15
- package/dist/discrete/components/layers/ErrorBarElement.js.map +1 -1
- package/dist/discrete/components/layers/LineElement.d.ts +2 -2
- package/dist/discrete/components/layers/LineElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/LineElement.js +12 -12
- package/dist/discrete/components/layers/LineElement.js.map +1 -1
- package/dist/discrete/components/layers/LogoElement.d.ts +2 -2
- package/dist/discrete/components/layers/LogoElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/LogoElement.js +19 -19
- package/dist/discrete/components/layers/LogoElement.js.map +1 -1
- package/dist/discrete/components/layers/PairedPointsElement.d.ts +2 -2
- package/dist/discrete/components/layers/PairedPointsElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/PairedPointsElement.js +37 -37
- package/dist/discrete/components/layers/PairedPointsElement.js.map +1 -1
- package/dist/discrete/components/layers/StackedBarElement.d.ts +3 -3
- package/dist/discrete/components/layers/StackedBarElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/StackedBarElement.js +18 -18
- package/dist/discrete/components/layers/StackedBarElement.js.map +1 -1
- package/dist/discrete/components/layers/ViolinElement.d.ts +4 -4
- package/dist/discrete/components/layers/ViolinElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/ViolinElement.js +7 -7
- package/dist/discrete/components/layers/ViolinElement.js.map +1 -1
- package/dist/heatmap/components/Annotations/Annotation.d.ts +2 -2
- package/dist/heatmap/components/Annotations/Annotation.d.ts.map +1 -1
- package/dist/heatmap/components/Annotations/Annotation.js +16 -16
- package/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
- package/dist/heatmap/components/Chart.d.ts +1 -1
- package/dist/heatmap/components/Chart.d.ts.map +1 -1
- package/dist/heatmap/components/Chart.js +28 -28
- package/dist/heatmap/components/Chart.js.map +1 -1
- package/dist/histogram/components/Chart.d.ts +2 -2
- package/dist/histogram/components/Chart.d.ts.map +1 -1
- package/dist/histogram/components/Chart.js +22 -22
- package/dist/histogram/components/Chart.js.map +1 -1
- package/dist/scatterplot/components/Chart.d.ts +6 -11
- package/dist/scatterplot/components/Chart.d.ts.map +1 -1
- package/dist/scatterplot/components/Chart.js +101 -331
- package/dist/scatterplot/components/Chart.js.map +1 -1
- package/dist/scatterplot/components/ChartAxis.d.ts +20 -0
- package/dist/scatterplot/components/ChartAxis.d.ts.map +1 -0
- package/dist/scatterplot/components/ChartAxis.js +52 -0
- package/dist/scatterplot/components/ChartAxis.js.map +1 -0
- package/dist/scatterplot/components/ChartAxisTitles.d.ts +15 -0
- package/dist/scatterplot/components/ChartAxisTitles.d.ts.map +1 -0
- package/dist/scatterplot/components/ChartAxisTitles.js +56 -0
- package/dist/scatterplot/components/ChartAxisTitles.js.map +1 -0
- package/dist/scatterplot/components/ChartFacetTitle.d.ts +11 -0
- package/dist/scatterplot/components/ChartFacetTitle.d.ts.map +1 -0
- package/dist/scatterplot/components/ChartFacetTitle.js +37 -0
- package/dist/scatterplot/components/ChartFacetTitle.js.map +1 -0
- package/dist/scatterplot/components/ChartLayersData.d.ts +39 -0
- package/dist/scatterplot/components/ChartLayersData.d.ts.map +1 -0
- package/dist/scatterplot/components/ChartLayersData.js +250 -0
- package/dist/scatterplot/components/ChartLayersData.js.map +1 -0
- package/dist/scatterplot/components/ChartTooltip.d.ts +18 -0
- package/dist/scatterplot/components/ChartTooltip.d.ts.map +1 -0
- package/dist/scatterplot/components/ChartTooltip.js +58 -0
- package/dist/scatterplot/components/ChartTooltip.js.map +1 -0
- package/dist/scatterplot/components/ChartTrendsData.d.ts +11 -0
- package/dist/scatterplot/components/ChartTrendsData.d.ts.map +1 -0
- package/dist/scatterplot/components/ChartTrendsData.js +65 -0
- package/dist/scatterplot/components/ChartTrendsData.js.map +1 -0
- package/dist/scatterplot/components/ChartsGroup.d.ts +3 -3
- package/dist/scatterplot/components/ChartsGroup.d.ts.map +1 -1
- package/dist/scatterplot/components/ChartsGroup.js +81 -73
- package/dist/scatterplot/components/ChartsGroup.js.map +1 -1
- package/dist/scatterplot/dots.d.ts +0 -2
- package/dist/scatterplot/dots.d.ts.map +1 -1
- package/dist/scatterplot/dots.js +26 -22
- package/dist/scatterplot/dots.js.map +1 -1
- package/dist/scatterplot-umap/ChartRenderer.d.ts +3 -9
- package/dist/scatterplot-umap/ChartRenderer.d.ts.map +1 -1
- package/dist/scatterplot-umap/ChartRenderer.js +183 -186
- package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
- package/dist/scatterplot-umap/components/Lasso.js +97 -97
- package/dist/scatterplot-umap/components/Lasso.js.map +1 -1
- package/dist/scatterplot-umap/components/LowerSVG.d.ts +1 -5
- package/dist/scatterplot-umap/components/LowerSVG.d.ts.map +1 -1
- package/dist/scatterplot-umap/components/LowerSVG.js +51 -52
- package/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
- package/dist/scatterplot-umap/components/SVGLayer.d.ts +1 -1
- package/dist/scatterplot-umap/components/SVGLayer.d.ts.map +1 -1
- package/dist/scatterplot-umap/components/SVGLayer.js +39 -41
- package/dist/scatterplot-umap/components/SVGLayer.js.map +1 -1
- package/dist/scatterplot-umap/components/UpperSVG.d.ts +1 -1
- package/dist/scatterplot-umap/components/UpperSVG.d.ts.map +1 -1
- package/dist/scatterplot-umap/components/UpperSVG.js +18 -18
- package/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
- package/dist/scatterplot-umap/index.d.ts +2 -6
- package/dist/scatterplot-umap/index.d.ts.map +1 -1
- package/dist/scatterplot-umap/index.js +62 -66
- package/dist/scatterplot-umap/index.js.map +1 -1
- package/dist/scatterplot-umap/types.d.ts +0 -4
- package/dist/scatterplot-umap/types.d.ts.map +1 -1
- package/dist/utils/hooks/useFunction.d.ts +2 -0
- package/dist/utils/hooks/useFunction.d.ts.map +1 -0
- package/dist/utils/hooks/useFunction.js +9 -0
- package/dist/utils/hooks/useFunction.js.map +1 -0
- package/package.json +2 -1
package/dist/DataFrame.d.ts
CHANGED
|
@@ -13,14 +13,16 @@ type RowsGroup = Record<GroupKey, {
|
|
|
13
13
|
grouped: RowsGroup;
|
|
14
14
|
}>;
|
|
15
15
|
export declare class DataFrame {
|
|
16
|
-
id: string;
|
|
17
|
-
data: Record<string, DataValue[]>;
|
|
18
|
-
rowsCount: number;
|
|
19
|
-
columnNames: string[];
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly data: Record<string, DataValue[]>;
|
|
18
|
+
readonly rowsCount: number;
|
|
19
|
+
readonly columnNames: string[];
|
|
20
|
+
readonly rows: Row[];
|
|
21
|
+
readonly mapColumnCategories: Map<string, string[]>;
|
|
20
22
|
rowsGrouped?: RowsGroup;
|
|
21
23
|
static from(data: DataSet): DataFrame;
|
|
22
24
|
constructor(id: string, data: Record<string, DataValue[]>);
|
|
23
|
-
|
|
25
|
+
private computeRows;
|
|
24
26
|
getColumn(key: string): DataValue[];
|
|
25
27
|
getColumnCategories(key: string, ignoreNull?: boolean): string[];
|
|
26
28
|
setGrouping(groupingColumnIds: (string | null)[]): void;
|
package/dist/DataFrame.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataFrame.d.ts","sourceRoot":"","sources":["../src/DataFrame.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DataFrame.d.ts","sourceRoot":"","sources":["../src/DataFrame.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACpC,EAAE,EAAE,MAAM,CAAA;CACb,CAAA;AACD,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC;AAChD,eAAO,MAAM,UAAU,eAAsB,CAAC;AAC9C,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,UAAU,CAAC;AAClD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACrC,KAAK,SAAS,GAAG,MAAM,CACnB,QAAQ,EACR;IACI,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,SAAS,CAAC;CACtB,CACJ,CAAC;AAMF,qBAAa,SAAS;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;IAErB,QAAQ,CAAC,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAa;IAEhE,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB,MAAM,CAAC,IAAI,CAAE,IAAI,EAAE,OAAO,GAAE,SAAS;gBAUzB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAQzD,OAAO,CAAC,WAAW;IAenB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE;IAInC,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,MAAM,EAAE;IAgB7D,WAAW,CAAC,iBAAiB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IAgChD,mBAAmB,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAkB3E,iBAAiB,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,GAAG,EAAE;CAiBrD"}
|
package/dist/DataFrame.js
CHANGED
|
@@ -1,97 +1,104 @@
|
|
|
1
1
|
var g = Object.defineProperty;
|
|
2
|
-
var f = (e,
|
|
3
|
-
var u = (e,
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
const
|
|
7
|
-
function
|
|
2
|
+
var f = (e, o, r) => o in e ? g(e, o, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[o] = r;
|
|
3
|
+
var u = (e, o, r) => f(e, typeof o != "symbol" ? o + "" : o, r);
|
|
4
|
+
import { l as c } from "./node_modules/lodash/lodash.js";
|
|
5
|
+
import { exhaustive as d } from "./utils/index.js";
|
|
6
|
+
const m = Symbol("noGrouped");
|
|
7
|
+
function C(e) {
|
|
8
8
|
return "type" in e && e.type === "columns";
|
|
9
9
|
}
|
|
10
|
-
class
|
|
11
|
-
constructor(
|
|
10
|
+
class w {
|
|
11
|
+
constructor(o, r) {
|
|
12
12
|
u(this, "id");
|
|
13
13
|
// input data grouped by columns
|
|
14
14
|
u(this, "data");
|
|
15
15
|
u(this, "rowsCount");
|
|
16
16
|
u(this, "columnNames");
|
|
17
|
+
u(this, "rows");
|
|
18
|
+
u(this, "mapColumnCategories", /* @__PURE__ */ new Map());
|
|
17
19
|
u(this, "rowsGrouped");
|
|
18
|
-
this.id =
|
|
20
|
+
this.id = o, this.data = r, this.columnNames = Object.keys(r), this.rowsCount = this.columnNames.length ? r[this.columnNames[0]].length : 0, this.rows = this.computeRows();
|
|
19
21
|
}
|
|
20
|
-
static from(
|
|
21
|
-
if (
|
|
22
|
-
return
|
|
23
|
-
if (
|
|
24
|
-
return new
|
|
25
|
-
|
|
22
|
+
static from(o) {
|
|
23
|
+
if (o instanceof w)
|
|
24
|
+
return o;
|
|
25
|
+
if (C(o))
|
|
26
|
+
return new w(o.id, o.values);
|
|
27
|
+
d(o, "Unknown input data format");
|
|
26
28
|
}
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
for (let
|
|
30
|
-
|
|
31
|
-
this.columnNames.reduce((s, t) => (s[t] = this.data[t][
|
|
29
|
+
computeRows() {
|
|
30
|
+
const o = [];
|
|
31
|
+
for (let r = 0; r < this.rowsCount; r++)
|
|
32
|
+
o.push(
|
|
33
|
+
this.columnNames.reduce((s, t) => (s[t] = this.data[t][r], s), {})
|
|
32
34
|
);
|
|
33
|
-
return
|
|
35
|
+
return o;
|
|
34
36
|
}
|
|
35
|
-
getColumn(
|
|
36
|
-
return this.data[
|
|
37
|
+
getColumn(o) {
|
|
38
|
+
return this.data[o];
|
|
37
39
|
}
|
|
38
|
-
getColumnCategories(
|
|
39
|
-
if (!this.columnNames.includes(
|
|
40
|
-
throw new Error(`Column ${
|
|
41
|
-
|
|
40
|
+
getColumnCategories(o, r = !0) {
|
|
41
|
+
if (!this.columnNames.includes(o))
|
|
42
|
+
throw new Error(`Column ${o} does not exist`);
|
|
43
|
+
const s = `${o}${r ? "" : "_not_null"}`;
|
|
44
|
+
if (!this.mapColumnCategories.has(s)) {
|
|
45
|
+
let t = this.getColumn(o);
|
|
46
|
+
r && (t = t.filter((n) => n !== null)), this.mapColumnCategories.set(s, c.uniq(t.map(String)));
|
|
47
|
+
}
|
|
48
|
+
return this.mapColumnCategories.get(s) ?? [];
|
|
42
49
|
}
|
|
43
|
-
setGrouping(
|
|
44
|
-
const
|
|
45
|
-
let s = [
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
s.forEach((
|
|
50
|
+
setGrouping(o) {
|
|
51
|
+
const r = { grouped: {}, rows: this.rows };
|
|
52
|
+
let s = [r];
|
|
53
|
+
o.forEach((t) => {
|
|
54
|
+
const n = t === null ? [m] : this.getColumnCategories(t, !1), h = [];
|
|
55
|
+
s.forEach((i) => {
|
|
49
56
|
if (t === null)
|
|
50
|
-
|
|
51
|
-
[
|
|
52
|
-
rows:
|
|
57
|
+
i.grouped = {
|
|
58
|
+
[m]: {
|
|
59
|
+
rows: i.rows,
|
|
53
60
|
grouped: {}
|
|
54
61
|
}
|
|
55
|
-
},
|
|
62
|
+
}, h.push(i.grouped[m]);
|
|
56
63
|
else {
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
rows:
|
|
64
|
+
const a = c.groupBy(i.rows, (l) => String(l[t]));
|
|
65
|
+
i.grouped = n.reduce((l, p) => (l[p] = {
|
|
66
|
+
rows: a[p] ?? [],
|
|
60
67
|
grouped: {}
|
|
61
|
-
},
|
|
68
|
+
}, h.push(l[p]), l), {});
|
|
62
69
|
}
|
|
63
|
-
}), s =
|
|
64
|
-
}), this.rowsGrouped =
|
|
70
|
+
}), s = h;
|
|
71
|
+
}), this.rowsGrouped = r.grouped;
|
|
65
72
|
}
|
|
66
|
-
getColumnByGrouping(
|
|
73
|
+
getColumnByGrouping(o, r) {
|
|
67
74
|
if (!this.rowsGrouped)
|
|
68
75
|
return [];
|
|
69
|
-
if (!
|
|
70
|
-
return this.rows.map((t) => Number(t[
|
|
76
|
+
if (!o.length)
|
|
77
|
+
return this.rows.map((t) => Number(t[r]));
|
|
71
78
|
let s = { grouped: this.rowsGrouped, rows: this.rows };
|
|
72
|
-
return
|
|
73
|
-
const
|
|
74
|
-
if (!
|
|
79
|
+
return o.forEach((t) => {
|
|
80
|
+
const n = s.grouped[t ?? "null"];
|
|
81
|
+
if (!n)
|
|
75
82
|
return [];
|
|
76
|
-
s =
|
|
77
|
-
}), s.rows.map((t) => Number(t[
|
|
83
|
+
s = n;
|
|
84
|
+
}), s.rows.map((t) => Number(t[r]));
|
|
78
85
|
}
|
|
79
|
-
getRowsByGrouping(
|
|
86
|
+
getRowsByGrouping(o) {
|
|
80
87
|
if (!this.rowsGrouped)
|
|
81
88
|
return [];
|
|
82
|
-
if (!
|
|
89
|
+
if (!o.length)
|
|
83
90
|
return this.rows;
|
|
84
|
-
let
|
|
85
|
-
return
|
|
86
|
-
const t =
|
|
91
|
+
let r = { grouped: this.rowsGrouped, rows: this.rows };
|
|
92
|
+
return o.forEach((s) => {
|
|
93
|
+
const t = r.grouped[s];
|
|
87
94
|
if (!t)
|
|
88
95
|
return [];
|
|
89
|
-
|
|
90
|
-
}),
|
|
96
|
+
r = t;
|
|
97
|
+
}), r.rows;
|
|
91
98
|
}
|
|
92
99
|
}
|
|
93
100
|
export {
|
|
94
|
-
|
|
95
|
-
|
|
101
|
+
w as DataFrame,
|
|
102
|
+
m as NO_GROUPED
|
|
96
103
|
};
|
|
97
104
|
//# sourceMappingURL=DataFrame.js.map
|
package/dist/DataFrame.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataFrame.js","sources":["../src/DataFrame.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"DataFrame.js","sources":["../src/DataFrame.ts"],"sourcesContent":["import { groupBy, uniq } from 'lodash';\nimport type { DataValue } from './types';\nimport { exhaustive } from './utils';\n\nexport type DataByColumns = {\n type: 'columns',\n values: Record<string, DataValue[]>,\n id: string\n}\nexport type DataSet = DataFrame | DataByColumns;\nexport const NO_GROUPED = Symbol('noGrouped');\nexport type GroupKey = string | typeof NO_GROUPED;\ntype Row = Record<string, DataValue>;\ntype RowsGroup = Record<\n GroupKey,\n {\n rows: Row[];\n grouped: RowsGroup;\n }\n>;\n\nfunction isDataByColumns (data:DataSet): data is DataByColumns {\n return 'type' in data && data.type === 'columns';\n}\n\nexport class DataFrame {\n readonly id: string;\n // input data grouped by columns\n readonly data: Record<string, DataValue[]>;\n readonly rowsCount: number;\n readonly columnNames: string[];\n readonly rows: Row[];\n\n readonly mapColumnCategories: Map<string, string[]> = new Map();\n\n rowsGrouped?: RowsGroup;\n\n static from (data: DataSet):DataFrame {\n if (data instanceof DataFrame) {\n return data;\n } else if (isDataByColumns(data)) {\n return new DataFrame(data.id, data.values);\n } else {\n exhaustive(data, 'Unknown input data format');\n }\n }\n\n constructor(id: string, data: Record<string, DataValue[]>) {\n this.id = id;\n this.data = data;\n this.columnNames = Object.keys(data);\n this.rowsCount = this.columnNames.length ? data[this.columnNames[0]].length : 0;\n this.rows = this.computeRows();\n }\n\n private computeRows() {\n const rows: Row[] = [];\n\n for (let i = 0; i < this.rowsCount; i++) {\n rows.push(\n this.columnNames.reduce((res: Record<string, DataValue>, key) => {\n res[key] = this.data[key][i];\n return res;\n }, {})\n );\n }\n\n return rows;\n }\n\n getColumn(key: string): DataValue[] {\n return this.data[key];\n }\n\n getColumnCategories(key: string, ignoreNull = true): string[] {\n if (!this.columnNames.includes(key)) {\n throw new Error(`Column ${key} does not exist`);\n }\n\n const fullKey = `${key}${ignoreNull ? '' : '_not_null'}`;\n\n if (!this.mapColumnCategories.has(fullKey)) {\n let columnData = this.getColumn(key);\n if (ignoreNull) columnData = columnData.filter((v) => v !== null);\n this.mapColumnCategories.set(fullKey, uniq(columnData.map(String)));\n }\n\n return this.mapColumnCategories.get(fullKey) ?? [];\n }\n\n setGrouping(groupingColumnIds: (string | null)[]) {\n const root = {grouped: {} as RowsGroup, rows: this.rows};\n let groups: RowsGroup[keyof RowsGroup][] = [root];\n groupingColumnIds.forEach(column => {\n const keys: GroupKey[] = column === null ? [NO_GROUPED] : this.getColumnCategories(column, false);\n const nextGroups: RowsGroup[keyof RowsGroup][] = [];\n groups.forEach(group => {\n if (column === null) {\n group.grouped = {\n [NO_GROUPED]: {\n rows: group.rows,\n grouped: {} as RowsGroup,\n },\n };\n nextGroups.push(group.grouped[NO_GROUPED]);\n } else {\n const groupedBy = groupBy(group.rows, row => String(row[column]));\n group.grouped = keys.reduce((res, key) => {\n res[key] = {\n rows: groupedBy[key as string] ?? [] as Row[],\n grouped: {} as RowsGroup,\n };\n nextGroups.push(res[key]);\n return res;\n }, {} as RowsGroup);\n }\n });\n groups = nextGroups;\n });\n this.rowsGrouped = root.grouped;\n }\n\n getColumnByGrouping(groupingKeys: GroupKey[], keyYColumn: string): number[] {\n if (!this.rowsGrouped) {\n return [];\n }\n if (!groupingKeys.length) {\n return this.rows.map(row => Number(row[keyYColumn]));\n }\n let result: {grouped: RowsGroup; rows: Row[]} = {grouped: this.rowsGrouped, rows: this.rows};\n groupingKeys.forEach(key => {\n const nextGroup = result.grouped[key ?? 'null'];\n if (!nextGroup) {\n return [];\n }\n result = nextGroup;\n });\n return result.rows.map(row => Number(row[keyYColumn]));\n }\n\n getRowsByGrouping(groupingKeys: GroupKey[]): Row[] {\n if (!this.rowsGrouped) {\n return [];\n }\n if (!groupingKeys.length) {\n return this.rows;\n }\n let result: {grouped: RowsGroup; rows: Row[]} = {grouped: this.rowsGrouped, rows: this.rows};\n groupingKeys.forEach(key => {\n const nextGroup = result.grouped[key];\n if (!nextGroup) {\n return [];\n }\n result = nextGroup;\n });\n return result.rows;\n }\n}\n"],"names":["NO_GROUPED","isDataByColumns","data","DataFrame","id","__publicField","exhaustive","rows","i","res","key","ignoreNull","fullKey","columnData","v","uniq","groupingColumnIds","root","groups","column","keys","nextGroups","group","groupedBy","groupBy","row","groupingKeys","keyYColumn","result","nextGroup"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { TooltipsData } from '../../common/Tooltip';
|
|
2
|
-
import { ChartSizes, LabelAngles, Margins, CaptionsSizes, ChartDimensionsData, ChartScales } from './types';
|
|
3
|
-
import { Cell, GroupedCellsData } from '../getCells';
|
|
4
|
-
import { BubbleSettingsImpl } from '../BubbleSettingsImpl';
|
|
5
2
|
import { DataValue } from '../../types';
|
|
3
|
+
import { BubbleSettingsImpl } from '../BubbleSettingsImpl';
|
|
4
|
+
import { Cell, GroupedCellsData } from '../getCells';
|
|
5
|
+
import { CaptionsSizes, ChartDimensionsData, ChartScales, ChartSizes, LabelAngles, Margins } from './types';
|
|
6
6
|
export declare function Chart({ facetKey, dimensions, scales, cells, colorScale, sizeScale, chartSettings, cellsMeta, stepX, stepY, aes, labelAngles, chartSizes, margins, tooltipsContainer, tooltipsData }: {
|
|
7
7
|
facetKey: string;
|
|
8
8
|
chartSizes: ChartSizes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../../src/bubble/components/Chart.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../../src/bubble/components/Chart.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA2BjH,wBAAgB,KAAK,CAAC,EAClB,QAAQ,EACR,UAAU,EACV,MAAM,EACN,KAAK,EACL,UAAU,EACV,SAAS,EACT,aAAa,EACb,SAAS,EACT,KAAK,EACL,KAAK,EACL,GAAG,EACH,WAAW,EACX,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,YAAY,EACf,EAAE;IACC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,mBAAmB,CAAC;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7E,UAAU,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM,CAAC;IACzC,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM,CAAC;IACxC,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACnD,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,CAAA;CACnC,2CAqHA"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { j as n } from "../../node_modules/react/jsx-runtime.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { BLACK as
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
2
|
+
import { r as I } from "../../_virtual/index.js";
|
|
3
|
+
import { r as N } from "../../node_modules/react-dom/index.js";
|
|
4
|
+
import { Tooltip as P } from "../../common/Tooltip.js";
|
|
5
|
+
import { BLACK as R } from "../../constants.js";
|
|
6
|
+
import { FONT_SIZE as Z, FACET_TITLE_OFFSET as q } from "../constants.js";
|
|
7
|
+
import { AxisCaptions as G } from "./AxisCaptions.js";
|
|
8
8
|
function s(e) {
|
|
9
9
|
if (e === null)
|
|
10
10
|
return "null";
|
|
@@ -43,29 +43,29 @@ function te({
|
|
|
43
43
|
tooltipsContainer: S,
|
|
44
44
|
tooltipsData: o
|
|
45
45
|
}) {
|
|
46
|
-
const [V, w] =
|
|
46
|
+
const [V, w] = I.useState(), { xAxis: F, yAxis: k, tooltips: $ } = p, { width: B, height: W } = t.inner, { padding: i, sideElementBBoxes: c } = t, { xLabels: _, yLabels: M } = g, j = r.x.domain(), E = r.y.domain(), O = {
|
|
47
47
|
left: h.left + t.left + i.left,
|
|
48
48
|
right: d.totalWidth - (h.left + t.left + i.left),
|
|
49
49
|
top: h.top + t.top + i.top,
|
|
50
50
|
bottom: d.totalHeight - (h.top + t.top + i.top)
|
|
51
|
-
},
|
|
52
|
-
return /* @__PURE__ */ n.jsxs("g", { transform: `translate(${t.left},${t.top})`, fontSize:
|
|
51
|
+
}, z = !1, v = o.fixed && V;
|
|
52
|
+
return /* @__PURE__ */ n.jsxs("g", { transform: `translate(${t.left},${t.top})`, fontSize: Z, children: [
|
|
53
53
|
/* @__PURE__ */ n.jsxs("g", { transform: `translate(${i.left},${i.top})`, children: [
|
|
54
54
|
c.top.facetTitle.isVisible && /* @__PURE__ */ n.jsx(
|
|
55
55
|
"text",
|
|
56
56
|
{
|
|
57
57
|
x: c.top.facetTitle.x,
|
|
58
|
-
y: c.top.facetTitle.y + c.top.facetTitle.height -
|
|
58
|
+
y: c.top.facetTitle.y + c.top.facetTitle.height - q,
|
|
59
59
|
fontWeight: "500",
|
|
60
60
|
fontSize: "20px",
|
|
61
61
|
children: g.facetKeyValues[e].join(", ")
|
|
62
62
|
}
|
|
63
63
|
),
|
|
64
|
-
|
|
64
|
+
z,
|
|
65
65
|
j.map(
|
|
66
|
-
(f) =>
|
|
66
|
+
(f) => E.map((b) => {
|
|
67
67
|
var L;
|
|
68
|
-
const l = (L = a == null ? void 0 : a[f]) == null ? void 0 : L[b], H =
|
|
68
|
+
const l = (L = a == null ? void 0 : a[f]) == null ? void 0 : L[b], H = v && l && o.selectedData === l, T = l ? /* @__PURE__ */ n.jsx(
|
|
69
69
|
"circle",
|
|
70
70
|
{
|
|
71
71
|
cx: r.x(f) + m / 2,
|
|
@@ -73,30 +73,30 @@ function te({
|
|
|
73
73
|
r: u(l.normalizedSizeValue),
|
|
74
74
|
stroke: y.cellStrokeColor,
|
|
75
75
|
fill: l.colorValue === null ? y.emptyCellColor : x(l.normalizedColorValue),
|
|
76
|
-
onMouseOver: () => o.
|
|
76
|
+
onMouseOver: () => o.onMouseEnter(l, e),
|
|
77
77
|
onMouseLeave: () => o.onMouseLeave()
|
|
78
78
|
},
|
|
79
79
|
l ? l.id : `${f}_${b}`
|
|
80
80
|
) : null;
|
|
81
|
-
return H ?
|
|
81
|
+
return H ? N.createPortal(T, V) : T;
|
|
82
82
|
})
|
|
83
83
|
),
|
|
84
|
-
/* @__PURE__ */ n.jsx("g", { children: p.frame.type === "full" && /* @__PURE__ */ n.jsx("rect", { fill: "none", stroke:
|
|
84
|
+
/* @__PURE__ */ n.jsx("g", { children: p.frame.type === "full" && /* @__PURE__ */ n.jsx("rect", { fill: "none", stroke: R, x: "0", y: "0", width: B, height: W }) }),
|
|
85
85
|
/* @__PURE__ */ n.jsx("g", { fontWeight: "500", children: /* @__PURE__ */ n.jsx(
|
|
86
|
-
|
|
86
|
+
G,
|
|
87
87
|
{
|
|
88
88
|
sideElementBBoxes: c,
|
|
89
89
|
xKeys: j,
|
|
90
|
-
yKeys:
|
|
90
|
+
yKeys: E,
|
|
91
91
|
scales: r,
|
|
92
92
|
xAxis: F,
|
|
93
93
|
yAxis: k,
|
|
94
94
|
stepX: m,
|
|
95
95
|
stepY: C,
|
|
96
96
|
labelAngles: A,
|
|
97
|
-
xLabels:
|
|
98
|
-
yLabels:
|
|
99
|
-
debug:
|
|
97
|
+
xLabels: _,
|
|
98
|
+
yLabels: M,
|
|
99
|
+
debug: z
|
|
100
100
|
}
|
|
101
101
|
) }),
|
|
102
102
|
o.fixed && /* @__PURE__ */ n.jsx("rect", { width: d.chartWidth, height: d.chartHeight, fill: "rgba(255,255,255,0.8)" }),
|
|
@@ -110,14 +110,14 @@ function te({
|
|
|
110
110
|
)
|
|
111
111
|
] }),
|
|
112
112
|
p.tooltips.show && o.selectedData && o.currentFacet === e && /* @__PURE__ */ n.jsx(
|
|
113
|
-
|
|
113
|
+
P,
|
|
114
114
|
{
|
|
115
115
|
content: J(o.selectedData, g, $ == null ? void 0 : $.content),
|
|
116
116
|
x: r.x(String(o.selectedData.x)) + m / 2,
|
|
117
117
|
y: r.y(String(o.selectedData.y)) + C / 2,
|
|
118
118
|
offset: j.length > 1 ? m / 2 : 0,
|
|
119
119
|
active: !0,
|
|
120
|
-
sideDistances:
|
|
120
|
+
sideDistances: O,
|
|
121
121
|
container: S,
|
|
122
122
|
onClose: o.onClose,
|
|
123
123
|
fixed: o.fixed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.js","sources":["../../../src/bubble/components/Chart.tsx"],"sourcesContent":["import type { TooltipsData} from '../../common/Tooltip';\nimport {Tooltip} from '../../common/Tooltip';\nimport {AxisCaptions} from './AxisCaptions';\nimport type {ChartSizes, LabelAngles, Margins} from './types';\nimport type {CaptionsSizes} from './types';\nimport type {Cell, GroupedCellsData} from '../getCells';\nimport type {ChartDimensionsData, ChartScales} from './types';\nimport {FACET_TITLE_OFFSET, FONT_SIZE} from '../constants';\nimport type {BubbleSettingsImpl} from '../BubbleSettingsImpl';\nimport {BLACK} from '../../constants';\nimport type {ColumnName} from '../../types';\nimport type {DataValue} from '../../types';\nimport React, {useState} from 'react';\nimport {createPortal} from 'react-dom';\n\nfunction formatCellValue (v:DataValue):number|string {\n if (v === null) {\n return 'null';\n }\n if (typeof v === 'number') {\n const whole = v > 0 ? Math.floor(v) : Math.ceil(v);\n const decimal = v - whole;\n return whole + Number(decimal.toPrecision(2));\n }\n return v;\n}\nfunction getTooltipContent(cell: Cell, cellsMeta:GroupedCellsData['meta'], columnsList: ColumnName[] = []) {\n const row = cell.data;\n const lines = [\n `X: ${cellsMeta.xLabels[cell.x as string]}`,\n `Y: ${cellsMeta.yLabels[cell.y as string]}`,\n `Value (color): ${formatCellValue(cell.colorValue)}${cell.colorValue !== cell.normalizedColorValue ? ` (${formatCellValue(cell.normalizedColorValue)})`: ''}`,\n `Value (size): ${formatCellValue(cell.sizeValue)}${cell.sizeValue !== cell.normalizedSizeValue ? ` (${formatCellValue(cell.normalizedSizeValue)})`: ''}`,\n ];\n for (const column of columnsList) {\n lines.push(`${column.label}: ${row[column.valueLabels ?? column.value]}`);\n }\n return lines;\n}\n\nexport function Chart({\n facetKey,\n dimensions,\n scales,\n cells,\n colorScale,\n sizeScale,\n chartSettings,\n cellsMeta,\n stepX,\n stepY,\n aes,\n labelAngles,\n chartSizes,\n margins,\n tooltipsContainer,\n tooltipsData\n}: {\n facetKey: string;\n chartSizes: ChartSizes;\n captionsSizes: CaptionsSizes;\n dimensions: ChartDimensionsData;\n scales: ChartScales;\n cells: GroupedCellsData['facets'][keyof GroupedCellsData['facets']]['cells'];\n colorScale: (value: DataValue) => string;\n sizeScale: (value: DataValue) => number;\n chartSettings: BubbleSettingsImpl['chartSettings'];\n cellsMeta: GroupedCellsData['meta'];\n stepX: number;\n stepY: number;\n aes: BubbleSettingsImpl['aes'];\n labelAngles: LabelAngles;\n margins: Margins;\n tooltipsContainer?: Element;\n tooltipsData: TooltipsData<Cell>\n}) {\n const [activeElementContainer, setActiveElementContainer] = useState<SVGGElement>();\n\n const {xAxis, yAxis, tooltips} = chartSettings;\n const {width, height} = dimensions.inner;\n const {padding, sideElementBBoxes} = dimensions;\n const {xLabels, yLabels} = cellsMeta;\n\n const xKeys = scales.x.domain();\n const yKeys = scales.y.domain();\n\n const sideDistances = {\n left: margins.left + dimensions.left + padding.left,\n right: chartSizes.totalWidth - (margins.left + dimensions.left + padding.left),\n top: margins.top + dimensions.top + padding.top,\n bottom: chartSizes.totalHeight - (margins.top + dimensions.top + padding.top),\n };\n\n const debug = false;\n\n const dimmedBackground = tooltipsData.fixed && activeElementContainer;\n return (\n <g transform={`translate(${dimensions.left},${dimensions.top})`} fontSize={FONT_SIZE}>\n <g transform={`translate(${padding.left},${padding.top})`}>\n {/* facet title */}\n {sideElementBBoxes.top.facetTitle.isVisible && (\n <text\n x={sideElementBBoxes.top.facetTitle.x}\n y={\n sideElementBBoxes.top.facetTitle.y +\n sideElementBBoxes.top.facetTitle.height -\n FACET_TITLE_OFFSET\n }\n fontWeight=\"500\"\n fontSize=\"20px\"\n >\n {cellsMeta.facetKeyValues[facetKey].join(', ')}\n </text>\n )}\n {debug && (\n <g fill=\"green\" opacity=\"0.2\">\n <rect\n x={-padding.left}\n y={-padding.top}\n width={dimensions.outer.width}\n height={dimensions.outer.height}\n fill=\"none\"\n stroke=\"red\"\n />\n <rect x={-padding.left} y=\"0\" width={padding.left} height={height} />\n <rect x={width} y=\"0\" width={padding.right} height={height} />\n <rect x=\"0\" y={-padding.top} width={width} height={padding.top} />\n <rect x=\"0\" y={height} width={width} height={padding.bottom} />\n </g>\n )}\n {/* cells */}\n {xKeys.map(xKey =>\n yKeys.map(yKey => {\n const cell = cells?.[xKey]?.[yKey];\n const highlighted = dimmedBackground && cell && tooltipsData.selectedData === cell;\n const cellElement = cell ? (\n <circle\n key={cell ? cell.id : `${xKey}_${yKey}`}\n cx={scales.x(xKey) + stepX / 2}\n cy={scales.y(yKey) + stepY / 2}\n r={sizeScale(cell.normalizedSizeValue as number)}\n stroke={aes.cellStrokeColor}\n fill={cell.colorValue === null ? aes.emptyCellColor : colorScale(cell.normalizedColorValue)}\n onMouseOver={() => tooltipsData.onMouseOver(cell, facetKey)}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n />\n ) : null;\n return highlighted ? createPortal(cellElement, activeElementContainer) : cellElement;\n })\n )}\n <g>\n {chartSettings.frame.type === 'full' && <rect fill=\"none\" stroke={BLACK} x=\"0\" y=\"0\" width={width} height={height} />}\n </g>\n <g fontWeight=\"500\">\n <AxisCaptions\n sideElementBBoxes={sideElementBBoxes}\n xKeys={xKeys}\n yKeys={yKeys}\n scales={scales}\n xAxis={xAxis}\n yAxis={yAxis}\n stepX={stepX}\n stepY={stepY}\n labelAngles={labelAngles}\n xLabels={xLabels}\n yLabels={yLabels}\n debug={debug}\n />\n </g>\n {tooltipsData.fixed && <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255,255,255,0.8)\"/>}\n <g ref={node => {\n if (node && !activeElementContainer) {\n setActiveElementContainer(node);\n }\n }}\n />\n </g>\n {chartSettings.tooltips.show && tooltipsData.selectedData && tooltipsData.currentFacet === facetKey && (\n <Tooltip\n content={getTooltipContent(tooltipsData.selectedData, cellsMeta, tooltips?.content)}\n x={scales.x(String(tooltipsData.selectedData.x)) + stepX / 2}\n y={scales.y(String(tooltipsData.selectedData.y)) + stepY / 2}\n offset={xKeys.length > 1 ? stepX / 2 : 0}\n active\n sideDistances={sideDistances}\n container={tooltipsContainer}\n onClose={tooltipsData.onClose}\n fixed={tooltipsData.fixed}\n />\n )}\n </g>\n );\n}\n"],"names":["formatCellValue","v","whole","decimal","getTooltipContent","cell","cellsMeta","columnsList","row","lines","column","Chart","facetKey","dimensions","scales","cells","colorScale","sizeScale","chartSettings","stepX","stepY","aes","labelAngles","chartSizes","margins","tooltipsContainer","tooltipsData","activeElementContainer","setActiveElementContainer","useState","xAxis","yAxis","tooltips","width","height","padding","sideElementBBoxes","xLabels","yLabels","xKeys","yKeys","sideDistances","debug","dimmedBackground","jsxs","FONT_SIZE","jsx","FACET_TITLE_OFFSET","xKey","yKey","_a","highlighted","cellElement","createPortal","BLACK","AxisCaptions","node","Tooltip"],"mappings":";;;;;;;AAeA,SAASA,EAAiBC,GAA2B;AACjD,MAAIA,MAAM;AACN,WAAO;AAEX,MAAI,OAAOA,KAAM,UAAU;AACvB,UAAMC,IAAQD,IAAI,IAAI,KAAK,MAAMA,CAAC,IAAI,KAAK,KAAKA,CAAC,GAC3CE,IAAUF,IAAIC;AACpB,WAAOA,IAAQ,OAAOC,EAAQ,YAAY,CAAC,CAAC;AAAA,EAChD;AACA,SAAOF;AACX;AACA,SAASG,EAAkBC,GAAYC,GAAoCC,IAA4B,CAAA,GAAI;AACvG,QAAMC,IAAMH,EAAK,MACXI,IAAQ;AAAA,IACV,MAAMH,EAAU,QAAQD,EAAK,CAAW,CAAC;AAAA,IACzC,MAAMC,EAAU,QAAQD,EAAK,CAAW,CAAC;AAAA,IACzC,kBAAkBL,EAAgBK,EAAK,UAAU,CAAC,GAAGA,EAAK,eAAeA,EAAK,uBAAuB,KAAKL,EAAgBK,EAAK,oBAAoB,CAAC,MAAK,EAAE;AAAA,IAC3J,iBAAiBL,EAAgBK,EAAK,SAAS,CAAC,GAAGA,EAAK,cAAcA,EAAK,sBAAsB,KAAKL,EAAgBK,EAAK,mBAAmB,CAAC,MAAK,EAAE;AAAA,EAAA;AAE1J,aAAWK,KAAUH;AACjB,IAAAE,EAAM,KAAK,GAAGC,EAAO,KAAK,KAAKF,EAAIE,EAAO,eAAeA,EAAO,KAAK,CAAC,EAAE;AAE5E,SAAOD;AACX;AAEO,SAASE,GAAM;AAAA,EAClB,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAZ;AAAA,EACA,OAAAa;AAAA,EACA,OAAAC;AAAA,EACA,KAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,cAAAC;AACJ,GAkBG;AACC,QAAM,CAACC,GAAwBC,CAAyB,IAAIC,WAAA,GAEtD,EAAC,OAAAC,GAAO,OAAAC,GAAO,UAAAC,EAAA,IAAYd,GAC3B,EAAC,OAAAe,GAAO,QAAAC,EAAA,IAAUrB,EAAW,OAC7B,EAAC,SAAAsB,GAAS,mBAAAC,EAAA,IAAqBvB,GAC/B,EAAC,SAAAwB,GAAS,SAAAC,EAAA,IAAWhC,GAErBiC,IAAQzB,EAAO,EAAE,OAAA,GACjB0B,IAAQ1B,EAAO,EAAE,OAAA,GAEjB2B,IAAgB;AAAA,IAClB,MAAMjB,EAAQ,OAAOX,EAAW,OAAOsB,EAAQ;AAAA,IAC/C,OAAOZ,EAAW,cAAcC,EAAQ,OAAOX,EAAW,OAAOsB,EAAQ;AAAA,IACzE,KAAKX,EAAQ,MAAMX,EAAW,MAAMsB,EAAQ;AAAA,IAC5C,QAAQZ,EAAW,eAAeC,EAAQ,MAAMX,EAAW,MAAMsB,EAAQ;AAAA,EAAA,GAGvEO,IAAQ,IAERC,IAAmBjB,EAAa,SAASC;AAC/C,SACIiB,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAW,aAAa/B,EAAW,IAAI,IAAIA,EAAW,GAAG,KAAK,UAAUgC,GACvE,UAAA;AAAA,IAAAD,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAW,aAAaT,EAAQ,IAAI,IAAIA,EAAQ,GAAG,KAEjD,UAAA;AAAA,MAAAC,EAAkB,IAAI,WAAW,aAC9BU,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,GAAGV,EAAkB,IAAI,WAAW;AAAA,UACpC,GACIA,EAAkB,IAAI,WAAW,IACjCA,EAAkB,IAAI,WAAW,SACjCW;AAAA,UAEJ,YAAW;AAAA,UACX,UAAS;AAAA,UAER,UAAAzC,EAAU,eAAeM,CAAQ,EAAE,KAAK,IAAI;AAAA,QAAA;AAAA,MAAA;AAAA,MAGpD8B;AAAA,MAiBAH,EAAM;AAAA,QAAI,CAAAS,MACPR,EAAM,IAAI,CAAAS,MAAQ;;AACd,gBAAM5C,KAAO6C,IAAAnC,KAAA,gBAAAA,EAAQiC,OAAR,gBAAAE,EAAgBD,IACvBE,IAAcR,KAAoBtC,KAAQqB,EAAa,iBAAiBrB,GACxE+C,IAAc/C,IAChByC,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cAEG,IAAIhC,EAAO,EAAEkC,CAAI,IAAI7B,IAAQ;AAAA,cAC7B,IAAIL,EAAO,EAAEmC,CAAI,IAAI7B,IAAQ;AAAA,cAC7B,GAAGH,EAAUZ,EAAK,mBAA6B;AAAA,cAC/C,QAAQgB,EAAI;AAAA,cACZ,MAAMhB,EAAK,eAAe,OAAOgB,EAAI,iBAAiBL,EAAWX,EAAK,oBAAoB;AAAA,cAC1F,aAAa,MAAMqB,EAAa,YAAYrB,GAAMO,CAAQ;AAAA,cAC1D,cAAc,MAAMc,EAAa,aAAA;AAAA,YAAa;AAAA,YAPzCrB,IAAOA,EAAK,KAAK,GAAG2C,CAAI,IAAIC,CAAI;AAAA,UAAA,IASzC;AACJ,iBAAOE,IAAcE,EAAAA,aAAaD,GAAazB,CAAsB,IAAIyB;AAAA,QAC7E,CAAC;AAAA,MAAA;AAAA,4BAEJ,KAAA,EACI,UAAAlC,EAAc,MAAM,SAAS,gCAAW,QAAA,EAAK,MAAK,QAAO,QAAQoC,GAAO,GAAE,KAAI,GAAE,KAAI,OAAArB,GAAc,QAAAC,GAAgB,GACvH;AAAA,MACAY,gBAAAA,EAAAA,IAAC,KAAA,EAAE,YAAW,OACV,UAAAA,gBAAAA,EAAAA;AAAAA,QAACS;AAAA,QAAA;AAAA,UACG,mBAAAnB;AAAA,UACA,OAAAG;AAAA,UACA,OAAAC;AAAA,UACA,QAAA1B;AAAA,UACA,OAAAgB;AAAA,UACA,OAAAC;AAAA,UACA,OAAAZ;AAAA,UACA,OAAAC;AAAA,UACA,aAAAE;AAAA,UACA,SAAAe;AAAA,UACA,SAAAC;AAAA,UACA,OAAAI;AAAA,QAAA;AAAA,MAAA,GAER;AAAA,MACChB,EAAa,SAASoB,gBAAAA,EAAAA,IAAC,QAAA,EAAK,OAAOvB,EAAW,YAAY,QAAQA,EAAW,aAAa,MAAK,wBAAA,CAAuB;AAAA,MACvHuB,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UAAE,KAAK,CAAAU,MAAQ;AACZ,YAAIA,KAAQ,CAAC7B,KACTC,EAA0B4B,CAAI;AAAA,UAEtC;AAAA,QAAA;AAAA,MAAA;AAAA,IACA,GACJ;AAAA,IACCtC,EAAc,SAAS,QAAQQ,EAAa,gBAAgBA,EAAa,iBAAiBd,KACvFkC,gBAAAA,EAAAA;AAAAA,MAACW;AAAA,MAAA;AAAA,QACG,SAASrD,EAAkBsB,EAAa,cAAcpB,GAAW0B,KAAA,gBAAAA,EAAU,OAAO;AAAA,QAClF,GAAGlB,EAAO,EAAE,OAAOY,EAAa,aAAa,CAAC,CAAC,IAAIP,IAAQ;AAAA,QAC3D,GAAGL,EAAO,EAAE,OAAOY,EAAa,aAAa,CAAC,CAAC,IAAIN,IAAQ;AAAA,QAC3D,QAAQmB,EAAM,SAAS,IAAIpB,IAAQ,IAAI;AAAA,QACvC,QAAM;AAAA,QACN,eAAAsB;AAAA,QACA,WAAWhB;AAAA,QACX,SAASC,EAAa;AAAA,QACtB,OAAOA,EAAa;AAAA,MAAA;AAAA,IAAA;AAAA,EACxB,GAER;AAER;"}
|
|
1
|
+
{"version":3,"file":"Chart.js","sources":["../../../src/bubble/components/Chart.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { TooltipsData } from '../../common/Tooltip';\nimport { Tooltip } from '../../common/Tooltip';\nimport { BLACK } from '../../constants';\nimport type { ColumnName, DataValue } from '../../types';\nimport type { BubbleSettingsImpl } from '../BubbleSettingsImpl';\nimport { FACET_TITLE_OFFSET, FONT_SIZE } from '../constants';\nimport type { Cell, GroupedCellsData } from '../getCells';\nimport { AxisCaptions } from './AxisCaptions';\nimport type { CaptionsSizes, ChartDimensionsData, ChartScales, ChartSizes, LabelAngles, Margins } from './types';\n\nfunction formatCellValue (v:DataValue):number|string {\n if (v === null) {\n return 'null';\n }\n if (typeof v === 'number') {\n const whole = v > 0 ? Math.floor(v) : Math.ceil(v);\n const decimal = v - whole;\n return whole + Number(decimal.toPrecision(2));\n }\n return v;\n}\nfunction getTooltipContent(cell: Cell, cellsMeta:GroupedCellsData['meta'], columnsList: ColumnName[] = []) {\n const row = cell.data;\n const lines = [\n `X: ${cellsMeta.xLabels[cell.x as string]}`,\n `Y: ${cellsMeta.yLabels[cell.y as string]}`,\n `Value (color): ${formatCellValue(cell.colorValue)}${cell.colorValue !== cell.normalizedColorValue ? ` (${formatCellValue(cell.normalizedColorValue)})`: ''}`,\n `Value (size): ${formatCellValue(cell.sizeValue)}${cell.sizeValue !== cell.normalizedSizeValue ? ` (${formatCellValue(cell.normalizedSizeValue)})`: ''}`,\n ];\n for (const column of columnsList) {\n lines.push(`${column.label}: ${row[column.valueLabels ?? column.value]}`);\n }\n return lines;\n}\n\nexport function Chart({\n facetKey,\n dimensions,\n scales,\n cells,\n colorScale,\n sizeScale,\n chartSettings,\n cellsMeta,\n stepX,\n stepY,\n aes,\n labelAngles,\n chartSizes,\n margins,\n tooltipsContainer,\n tooltipsData\n}: {\n facetKey: string;\n chartSizes: ChartSizes;\n captionsSizes: CaptionsSizes;\n dimensions: ChartDimensionsData;\n scales: ChartScales;\n cells: GroupedCellsData['facets'][keyof GroupedCellsData['facets']]['cells'];\n colorScale: (value: DataValue) => string;\n sizeScale: (value: DataValue) => number;\n chartSettings: BubbleSettingsImpl['chartSettings'];\n cellsMeta: GroupedCellsData['meta'];\n stepX: number;\n stepY: number;\n aes: BubbleSettingsImpl['aes'];\n labelAngles: LabelAngles;\n margins: Margins;\n tooltipsContainer?: Element;\n tooltipsData: TooltipsData<Cell>\n}) {\n const [activeElementContainer, setActiveElementContainer] = useState<SVGGElement>();\n\n const {xAxis, yAxis, tooltips} = chartSettings;\n const {width, height} = dimensions.inner;\n const {padding, sideElementBBoxes} = dimensions;\n const {xLabels, yLabels} = cellsMeta;\n\n const xKeys = scales.x.domain();\n const yKeys = scales.y.domain();\n\n const sideDistances = {\n left: margins.left + dimensions.left + padding.left,\n right: chartSizes.totalWidth - (margins.left + dimensions.left + padding.left),\n top: margins.top + dimensions.top + padding.top,\n bottom: chartSizes.totalHeight - (margins.top + dimensions.top + padding.top),\n };\n\n const debug = false;\n\n const dimmedBackground = tooltipsData.fixed && activeElementContainer;\n return (\n <g transform={`translate(${dimensions.left},${dimensions.top})`} fontSize={FONT_SIZE}>\n <g transform={`translate(${padding.left},${padding.top})`}>\n {/* facet title */}\n {sideElementBBoxes.top.facetTitle.isVisible && (\n <text\n x={sideElementBBoxes.top.facetTitle.x}\n y={\n sideElementBBoxes.top.facetTitle.y +\n sideElementBBoxes.top.facetTitle.height -\n FACET_TITLE_OFFSET\n }\n fontWeight=\"500\"\n fontSize=\"20px\"\n >\n {cellsMeta.facetKeyValues[facetKey].join(', ')}\n </text>\n )}\n {debug && (\n <g fill=\"green\" opacity=\"0.2\">\n <rect\n x={-padding.left}\n y={-padding.top}\n width={dimensions.outer.width}\n height={dimensions.outer.height}\n fill=\"none\"\n stroke=\"red\"\n />\n <rect x={-padding.left} y=\"0\" width={padding.left} height={height} />\n <rect x={width} y=\"0\" width={padding.right} height={height} />\n <rect x=\"0\" y={-padding.top} width={width} height={padding.top} />\n <rect x=\"0\" y={height} width={width} height={padding.bottom} />\n </g>\n )}\n {/* cells */}\n {xKeys.map(xKey =>\n yKeys.map(yKey => {\n const cell = cells?.[xKey]?.[yKey];\n const highlighted = dimmedBackground && cell && tooltipsData.selectedData === cell;\n const cellElement = cell ? (\n <circle\n key={cell ? cell.id : `${xKey}_${yKey}`}\n cx={scales.x(xKey) + stepX / 2}\n cy={scales.y(yKey) + stepY / 2}\n r={sizeScale(cell.normalizedSizeValue as number)}\n stroke={aes.cellStrokeColor}\n fill={cell.colorValue === null ? aes.emptyCellColor : colorScale(cell.normalizedColorValue)}\n onMouseOver={() => tooltipsData.onMouseEnter(cell, facetKey)}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n />\n ) : null;\n return highlighted ? createPortal(cellElement, activeElementContainer) : cellElement;\n })\n )}\n <g>\n {chartSettings.frame.type === 'full' && <rect fill=\"none\" stroke={BLACK} x=\"0\" y=\"0\" width={width} height={height} />}\n </g>\n <g fontWeight=\"500\">\n <AxisCaptions\n sideElementBBoxes={sideElementBBoxes}\n xKeys={xKeys}\n yKeys={yKeys}\n scales={scales}\n xAxis={xAxis}\n yAxis={yAxis}\n stepX={stepX}\n stepY={stepY}\n labelAngles={labelAngles}\n xLabels={xLabels}\n yLabels={yLabels}\n debug={debug}\n />\n </g>\n {tooltipsData.fixed && <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255,255,255,0.8)\"/>}\n <g ref={node => {\n if (node && !activeElementContainer) {\n setActiveElementContainer(node);\n }\n }}\n />\n </g>\n {chartSettings.tooltips.show && tooltipsData.selectedData && tooltipsData.currentFacet === facetKey && (\n <Tooltip\n content={getTooltipContent(tooltipsData.selectedData, cellsMeta, tooltips?.content)}\n x={scales.x(String(tooltipsData.selectedData.x)) + stepX / 2}\n y={scales.y(String(tooltipsData.selectedData.y)) + stepY / 2}\n offset={xKeys.length > 1 ? stepX / 2 : 0}\n active\n sideDistances={sideDistances}\n container={tooltipsContainer}\n onClose={tooltipsData.onClose}\n fixed={tooltipsData.fixed}\n />\n )}\n </g>\n );\n}\n"],"names":["formatCellValue","v","whole","decimal","getTooltipContent","cell","cellsMeta","columnsList","row","lines","column","Chart","facetKey","dimensions","scales","cells","colorScale","sizeScale","chartSettings","stepX","stepY","aes","labelAngles","chartSizes","margins","tooltipsContainer","tooltipsData","activeElementContainer","setActiveElementContainer","useState","xAxis","yAxis","tooltips","width","height","padding","sideElementBBoxes","xLabels","yLabels","xKeys","yKeys","sideDistances","debug","dimmedBackground","jsxs","FONT_SIZE","jsx","FACET_TITLE_OFFSET","xKey","yKey","_a","highlighted","cellElement","createPortal","BLACK","AxisCaptions","node","Tooltip"],"mappings":";;;;;;;AAYA,SAASA,EAAiBC,GAA2B;AACjD,MAAIA,MAAM;AACN,WAAO;AAEX,MAAI,OAAOA,KAAM,UAAU;AACvB,UAAMC,IAAQD,IAAI,IAAI,KAAK,MAAMA,CAAC,IAAI,KAAK,KAAKA,CAAC,GAC3CE,IAAUF,IAAIC;AACpB,WAAOA,IAAQ,OAAOC,EAAQ,YAAY,CAAC,CAAC;AAAA,EAChD;AACA,SAAOF;AACX;AACA,SAASG,EAAkBC,GAAYC,GAAoCC,IAA4B,CAAA,GAAI;AACvG,QAAMC,IAAMH,EAAK,MACXI,IAAQ;AAAA,IACV,MAAMH,EAAU,QAAQD,EAAK,CAAW,CAAC;AAAA,IACzC,MAAMC,EAAU,QAAQD,EAAK,CAAW,CAAC;AAAA,IACzC,kBAAkBL,EAAgBK,EAAK,UAAU,CAAC,GAAGA,EAAK,eAAeA,EAAK,uBAAuB,KAAKL,EAAgBK,EAAK,oBAAoB,CAAC,MAAK,EAAE;AAAA,IAC3J,iBAAiBL,EAAgBK,EAAK,SAAS,CAAC,GAAGA,EAAK,cAAcA,EAAK,sBAAsB,KAAKL,EAAgBK,EAAK,mBAAmB,CAAC,MAAK,EAAE;AAAA,EAAA;AAE1J,aAAWK,KAAUH;AACjB,IAAAE,EAAM,KAAK,GAAGC,EAAO,KAAK,KAAKF,EAAIE,EAAO,eAAeA,EAAO,KAAK,CAAC,EAAE;AAE5E,SAAOD;AACX;AAEO,SAASE,GAAM;AAAA,EAClB,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAZ;AAAA,EACA,OAAAa;AAAA,EACA,OAAAC;AAAA,EACA,KAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,cAAAC;AACJ,GAkBG;AACC,QAAM,CAACC,GAAwBC,CAAyB,IAAIC,WAAA,GAEtD,EAAC,OAAAC,GAAO,OAAAC,GAAO,UAAAC,EAAA,IAAYd,GAC3B,EAAC,OAAAe,GAAO,QAAAC,EAAA,IAAUrB,EAAW,OAC7B,EAAC,SAAAsB,GAAS,mBAAAC,EAAA,IAAqBvB,GAC/B,EAAC,SAAAwB,GAAS,SAAAC,EAAA,IAAWhC,GAErBiC,IAAQzB,EAAO,EAAE,OAAA,GACjB0B,IAAQ1B,EAAO,EAAE,OAAA,GAEjB2B,IAAgB;AAAA,IAClB,MAAMjB,EAAQ,OAAOX,EAAW,OAAOsB,EAAQ;AAAA,IAC/C,OAAOZ,EAAW,cAAcC,EAAQ,OAAOX,EAAW,OAAOsB,EAAQ;AAAA,IACzE,KAAKX,EAAQ,MAAMX,EAAW,MAAMsB,EAAQ;AAAA,IAC5C,QAAQZ,EAAW,eAAeC,EAAQ,MAAMX,EAAW,MAAMsB,EAAQ;AAAA,EAAA,GAGvEO,IAAQ,IAERC,IAAmBjB,EAAa,SAASC;AAC/C,SACIiB,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAW,aAAa/B,EAAW,IAAI,IAAIA,EAAW,GAAG,KAAK,UAAUgC,GACvE,UAAA;AAAA,IAAAD,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAW,aAAaT,EAAQ,IAAI,IAAIA,EAAQ,GAAG,KAEjD,UAAA;AAAA,MAAAC,EAAkB,IAAI,WAAW,aAC9BU,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,GAAGV,EAAkB,IAAI,WAAW;AAAA,UACpC,GACIA,EAAkB,IAAI,WAAW,IACjCA,EAAkB,IAAI,WAAW,SACjCW;AAAA,UAEJ,YAAW;AAAA,UACX,UAAS;AAAA,UAER,UAAAzC,EAAU,eAAeM,CAAQ,EAAE,KAAK,IAAI;AAAA,QAAA;AAAA,MAAA;AAAA,MAGpD8B;AAAA,MAiBAH,EAAM;AAAA,QAAI,CAAAS,MACPR,EAAM,IAAI,CAAAS,MAAQ;;AACd,gBAAM5C,KAAO6C,IAAAnC,KAAA,gBAAAA,EAAQiC,OAAR,gBAAAE,EAAgBD,IACvBE,IAAcR,KAAoBtC,KAAQqB,EAAa,iBAAiBrB,GACxE+C,IAAc/C,IAChByC,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cAEG,IAAIhC,EAAO,EAAEkC,CAAI,IAAI7B,IAAQ;AAAA,cAC7B,IAAIL,EAAO,EAAEmC,CAAI,IAAI7B,IAAQ;AAAA,cAC7B,GAAGH,EAAUZ,EAAK,mBAA6B;AAAA,cAC/C,QAAQgB,EAAI;AAAA,cACZ,MAAMhB,EAAK,eAAe,OAAOgB,EAAI,iBAAiBL,EAAWX,EAAK,oBAAoB;AAAA,cAC1F,aAAa,MAAMqB,EAAa,aAAarB,GAAMO,CAAQ;AAAA,cAC3D,cAAc,MAAMc,EAAa,aAAA;AAAA,YAAa;AAAA,YAPzCrB,IAAOA,EAAK,KAAK,GAAG2C,CAAI,IAAIC,CAAI;AAAA,UAAA,IASzC;AACJ,iBAAOE,IAAcE,EAAAA,aAAaD,GAAazB,CAAsB,IAAIyB;AAAA,QAC7E,CAAC;AAAA,MAAA;AAAA,4BAEJ,KAAA,EACI,UAAAlC,EAAc,MAAM,SAAS,gCAAW,QAAA,EAAK,MAAK,QAAO,QAAQoC,GAAO,GAAE,KAAI,GAAE,KAAI,OAAArB,GAAc,QAAAC,GAAgB,GACvH;AAAA,MACAY,gBAAAA,EAAAA,IAAC,KAAA,EAAE,YAAW,OACV,UAAAA,gBAAAA,EAAAA;AAAAA,QAACS;AAAA,QAAA;AAAA,UACG,mBAAAnB;AAAA,UACA,OAAAG;AAAA,UACA,OAAAC;AAAA,UACA,QAAA1B;AAAA,UACA,OAAAgB;AAAA,UACA,OAAAC;AAAA,UACA,OAAAZ;AAAA,UACA,OAAAC;AAAA,UACA,aAAAE;AAAA,UACA,SAAAe;AAAA,UACA,SAAAC;AAAA,UACA,OAAAI;AAAA,QAAA;AAAA,MAAA,GAER;AAAA,MACChB,EAAa,SAASoB,gBAAAA,EAAAA,IAAC,QAAA,EAAK,OAAOvB,EAAW,YAAY,QAAQA,EAAW,aAAa,MAAK,wBAAA,CAAuB;AAAA,MACvHuB,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UAAE,KAAK,CAAAU,MAAQ;AACZ,YAAIA,KAAQ,CAAC7B,KACTC,EAA0B4B,CAAI;AAAA,UAEtC;AAAA,QAAA;AAAA,MAAA;AAAA,IACA,GACJ;AAAA,IACCtC,EAAc,SAAS,QAAQQ,EAAa,gBAAgBA,EAAa,iBAAiBd,KACvFkC,gBAAAA,EAAAA;AAAAA,MAACW;AAAA,MAAA;AAAA,QACG,SAASrD,EAAkBsB,EAAa,cAAcpB,GAAW0B,KAAA,gBAAAA,EAAU,OAAO;AAAA,QAClF,GAAGlB,EAAO,EAAE,OAAOY,EAAa,aAAa,CAAC,CAAC,IAAIP,IAAQ;AAAA,QAC3D,GAAGL,EAAO,EAAE,OAAOY,EAAa,aAAa,CAAC,CAAC,IAAIN,IAAQ;AAAA,QAC3D,QAAQmB,EAAM,SAAS,IAAIpB,IAAQ,IAAI;AAAA,QACvC,QAAM;AAAA,QACN,eAAAsB;AAAA,QACA,WAAWhB;AAAA,QACX,SAASC,EAAa;AAAA,QACtB,OAAOA,EAAa;AAAA,MAAA;AAAA,IAAA;AAAA,EACxB,GAER;AAER;"}
|
package/dist/common/Tooltip.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export type TooltipsData<T> = {
|
|
|
11
11
|
fixed: boolean;
|
|
12
12
|
selectedData: T | null;
|
|
13
13
|
currentFacet: string;
|
|
14
|
-
|
|
14
|
+
onMouseEnter: (elementData: T, facetKey?: string) => void;
|
|
15
15
|
onMouseLeave: () => void;
|
|
16
16
|
onClose: () => void;
|
|
17
17
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../src/common/Tooltip.tsx"],"names":[],"mappings":"AAOA,KAAK,aAAa,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAkBF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,UAEjD;AACD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,UAAQ,UAGlE;AAyID,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,
|
|
1
|
+
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../src/common/Tooltip.tsx"],"names":[],"mappings":"AAOA,KAAK,aAAa,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAkBF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,UAEjD;AACD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,UAAQ,UAGlE;AAyID,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,CAAC,WAAW,EAAC,CAAC,EAAE,QAAQ,CAAC,EAAC,MAAM,KAAK,IAAI,CAAC;IACxD,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,IAAI,CAAA;CACtB,CAAA;AAED,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,gCAAgC,GAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAsB,GAAG,YAAY,CAAC,CAAC,CAAC,CAsFhI;AAED,wBAAgB,OAAO,CAAC,EACpB,OAAO,EACP,CAAC,EACD,CAAC,EACD,MAAM,EACN,KAAK,EACL,SAAS,EACT,aAAa,EACb,OAAyB,EACzB,MAAwB,EACxB,UAAiB,GACpB,EAAE;IACC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B,kDAoHA"}
|
package/dist/common/Tooltip.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { j as a } from "../node_modules/react/jsx-runtime.js";
|
|
2
|
-
import { BLACK as N } from "../constants.js";
|
|
3
|
-
import { exhaustive as z } from "../utils/index.js";
|
|
4
|
-
import { TextMeasurer as A } from "../utils/TextMeasurer.js";
|
|
5
2
|
import { r as i } from "../_virtual/index.js";
|
|
6
|
-
import { r as
|
|
7
|
-
|
|
3
|
+
import { r as N } from "../node_modules/react-dom/index.js";
|
|
4
|
+
import { BLACK as z } from "../constants.js";
|
|
5
|
+
import { exhaustive as A } from "../utils/index.js";
|
|
6
|
+
import { TextMeasurer as W } from "../utils/TextMeasurer.js";
|
|
7
|
+
const E = 8, S = 12, F = 20, c = 6, u = 5, Z = 8, j = 16, P = 8, w = j * 2 + P + 16, I = "#CFD1DB", O = "#fff", R = "miplots-tooltip";
|
|
8
8
|
function B(n) {
|
|
9
9
|
return n.length * F + 2 * E;
|
|
10
10
|
}
|
|
11
11
|
function G(n, o = !1) {
|
|
12
|
-
const s = new
|
|
12
|
+
const s = new W("600 14px Arial");
|
|
13
13
|
return Math.max(...n.map((t, e) => s.getTextWidth(t) + (e === 0 && o ? w : 0))) + 2 * S;
|
|
14
14
|
}
|
|
15
15
|
function q(n, o, s) {
|
|
@@ -83,7 +83,7 @@ function J(n, o, s, t, e) {
|
|
|
83
83
|
case "bottom":
|
|
84
84
|
return U(n, o, t);
|
|
85
85
|
default:
|
|
86
|
-
|
|
86
|
+
A(s, "Unknown tooltip direction");
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
function Y(n, o, s, t, e, r, l) {
|
|
@@ -138,7 +138,7 @@ function at(n = () => {
|
|
|
138
138
|
currentFacet: h.current,
|
|
139
139
|
fixed: t,
|
|
140
140
|
selectedData: o,
|
|
141
|
-
|
|
141
|
+
onMouseEnter: L,
|
|
142
142
|
onMouseLeave: p,
|
|
143
143
|
onClose: g
|
|
144
144
|
};
|
|
@@ -156,14 +156,14 @@ function $t({
|
|
|
156
156
|
offset: $ = Z,
|
|
157
157
|
horizontal: T = !0
|
|
158
158
|
}) {
|
|
159
|
-
if (!t || !r && r !== null)
|
|
160
|
-
return null;
|
|
161
159
|
const f = G(n, e), L = B(n), p = Y(f, L, o, s, $, l, T), g = et(p, l, o, f), m = nt(p, l, s, L), d = `translate(${f - j - S},${E})`, x = `translate(${f - j * 2 - P - S},${E})`, [v, C] = i.useState(!1), [_, M] = i.useState(!1), [k, V] = i.useState(!1);
|
|
162
160
|
function y() {
|
|
163
161
|
var H;
|
|
164
162
|
(H = window == null ? void 0 : window.navigator) == null || H.clipboard.writeText(n.join(`
|
|
165
163
|
`)), C(!0);
|
|
166
164
|
}
|
|
165
|
+
if (!t || !r && r !== null)
|
|
166
|
+
return null;
|
|
167
167
|
const Q = /* @__PURE__ */ a.jsxs(
|
|
168
168
|
"g",
|
|
169
169
|
{
|
|
@@ -179,7 +179,7 @@ function $t({
|
|
|
179
179
|
{
|
|
180
180
|
transform: tt(p, $),
|
|
181
181
|
d: J(f, L, p, g, m),
|
|
182
|
-
fill:
|
|
182
|
+
fill: z
|
|
183
183
|
}
|
|
184
184
|
),
|
|
185
185
|
/* @__PURE__ */ a.jsxs(
|
|
@@ -190,15 +190,15 @@ function $t({
|
|
|
190
190
|
fill: "white",
|
|
191
191
|
transform: X(p, f, L, $, g, m),
|
|
192
192
|
children: [
|
|
193
|
-
n.map((H,
|
|
193
|
+
n.map((H, b) => /* @__PURE__ */ a.jsx(
|
|
194
194
|
"text",
|
|
195
195
|
{
|
|
196
196
|
x: S,
|
|
197
|
-
y: E + F *
|
|
197
|
+
y: E + F * b + F / 2,
|
|
198
198
|
dominantBaseline: "central",
|
|
199
199
|
children: H
|
|
200
200
|
},
|
|
201
|
-
|
|
201
|
+
b
|
|
202
202
|
)),
|
|
203
203
|
e && /* @__PURE__ */ a.jsxs("g", { transform: d, children: [
|
|
204
204
|
/* @__PURE__ */ a.jsx(
|
|
@@ -207,7 +207,7 @@ function $t({
|
|
|
207
207
|
fillRule: "evenodd",
|
|
208
208
|
clipRule: "evenodd",
|
|
209
209
|
d: "M4.0006 2.93945L8.0006 6.93945L12.0006 2.93945L13.0613 4.00011L9.06126 8.00011L13.0613 12.0001L12.0006 13.0608L8.0006 9.06077L4.0006 13.0608L2.93994 12.0001L6.93994 8.00011L2.93994 4.00011L4.0006 2.93945Z",
|
|
210
|
-
fill: _ ?
|
|
210
|
+
fill: _ ? I : O
|
|
211
211
|
}
|
|
212
212
|
),
|
|
213
213
|
/* @__PURE__ */ a.jsx(
|
|
@@ -231,7 +231,7 @@ function $t({
|
|
|
231
231
|
"path",
|
|
232
232
|
{
|
|
233
233
|
d: "M16.0005 13H14.5005V1.5H3.00049V0H14.5005C15.3289 2.86102e-06 16.0005 0.671575 16.0005 1.5V13ZM1.34717 15.9922C0.641178 15.9205 0.0799799 15.3593 0.00830078 14.6533L0.000488281 14.5V4.5C0.000488281 3.72334 0.590765 3.08461 1.34717 3.00781L1.50049 3H11.5005L11.6538 3.00781C12.4102 3.08461 13.0005 3.72334 13.0005 4.5V14.5L12.9927 14.6533C12.921 15.3593 12.3598 15.9205 11.6538 15.9922L11.5005 16H1.50049L1.34717 15.9922ZM11.5005 4.5H1.50049V14.5H11.5005V4.5Z",
|
|
234
|
-
fill: k ?
|
|
234
|
+
fill: k ? I : O
|
|
235
235
|
}
|
|
236
236
|
) }),
|
|
237
237
|
/* @__PURE__ */ a.jsx("defs", { children: /* @__PURE__ */ a.jsx("clipPath", { id: "clip0_16418_6183", children: /* @__PURE__ */ a.jsx("rect", { width: "16", height: "16", transform: "translate(0.000488281)", fill: "white" }) }) })
|
|
@@ -257,7 +257,7 @@ function $t({
|
|
|
257
257
|
]
|
|
258
258
|
}
|
|
259
259
|
);
|
|
260
|
-
return r === null ? Q :
|
|
260
|
+
return r === null ? Q : N.createPortal(
|
|
261
261
|
Q,
|
|
262
262
|
r
|
|
263
263
|
);
|