@milaboratories/miplots4 1.0.167 → 1.0.168
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.d.ts +8 -0
- package/dist/scatterplot/ScatterplotSettingsImpl.js +22 -20
- package/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
- package/dist/scatterplot/index.js +96 -96
- package/dist/scatterplot/index.js.map +1 -1
- package/dist/types/scatterplot.d.ts +176 -0
- package/dist/types/scatterplot.js +63 -51
- package/dist/types/scatterplot.js.map +1 -1
- package/package.json +2 -2
|
@@ -45,6 +45,14 @@ export declare class ScatterplotSettingsImpl implements SettingsInterface {
|
|
|
45
45
|
order?: DataValue[];
|
|
46
46
|
inheritedAes?: AesRecord;
|
|
47
47
|
}[];
|
|
48
|
+
readonly dotSize: {
|
|
49
|
+
columnName: ColumnName;
|
|
50
|
+
inheritedAes?: AesRecord;
|
|
51
|
+
}[];
|
|
52
|
+
readonly dotShape: {
|
|
53
|
+
columnName: ColumnName;
|
|
54
|
+
inheritedAes?: AesRecord;
|
|
55
|
+
}[];
|
|
48
56
|
readonly label: ColumnName | null;
|
|
49
57
|
readonly highlight: ColumnName | null;
|
|
50
58
|
readonly chartSettings: {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
var
|
|
2
|
-
var m = (t, e,
|
|
3
|
-
var o = (t, e,
|
|
1
|
+
var u = Object.defineProperty;
|
|
2
|
+
var m = (t, e, i) => e in t ? u(t, e, { enumerable: !0, configurable: !0, writable: !0, value: i }) : t[e] = i;
|
|
3
|
+
var o = (t, e, i) => m(t, typeof e != "symbol" ? e + "" : e, i);
|
|
4
4
|
import y from "../_virtual/lodash.js";
|
|
5
|
-
import { DEFAULT_HEIGHT_SMALL as
|
|
5
|
+
import { DEFAULT_HEIGHT_SMALL as S, DEFAULT_HEIGHT as f, DEFAULT_WIDTH_SMALL as s, DEFAULT_WIDTH as n, BLACK as h } from "../constants.js";
|
|
6
6
|
import "../types/common.js";
|
|
7
7
|
import "../types/discrete.js";
|
|
8
8
|
import { ScatterplotSettingsSchema as x } from "../types/scatterplot.js";
|
|
@@ -15,7 +15,7 @@ class A {
|
|
|
15
15
|
constructor(e) {
|
|
16
16
|
o(this, "type", "dots");
|
|
17
17
|
o(this, "aes", {
|
|
18
|
-
dotFill:
|
|
18
|
+
dotFill: h,
|
|
19
19
|
dotShape: "21",
|
|
20
20
|
dotSize: 3,
|
|
21
21
|
opacity: 1
|
|
@@ -31,7 +31,7 @@ class L {
|
|
|
31
31
|
o(this, "type", "curve");
|
|
32
32
|
o(this, "smoothing");
|
|
33
33
|
o(this, "aes", {
|
|
34
|
-
lineColor:
|
|
34
|
+
lineColor: h,
|
|
35
35
|
lineWidth: 1,
|
|
36
36
|
lineShape: "solid",
|
|
37
37
|
opacity: 1
|
|
@@ -42,7 +42,7 @@ class L {
|
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
class
|
|
45
|
+
class _ {
|
|
46
46
|
constructor(e) {
|
|
47
47
|
o(this, "id");
|
|
48
48
|
o(this, "type", "scatterplot");
|
|
@@ -52,16 +52,18 @@ class F {
|
|
|
52
52
|
o(this, "y");
|
|
53
53
|
o(this, "facetBy");
|
|
54
54
|
o(this, "grouping");
|
|
55
|
+
o(this, "dotSize");
|
|
56
|
+
o(this, "dotShape");
|
|
55
57
|
o(this, "label");
|
|
56
58
|
o(this, "highlight");
|
|
57
59
|
o(this, "chartSettings");
|
|
58
60
|
o(this, "trend");
|
|
59
61
|
o(this, "layers");
|
|
60
|
-
var
|
|
61
|
-
x.parse(e), this.id = y.uniqueId("settings"), this.keyColumn = e.keyColumn, this.facetSettings = { sharedX: !0, sharedY: !0, titlePosition: "left", ...e.facetSettings }, this.x = e.x, this.y = e.y, this.facetBy = e.facetBy ?? [], this.grouping = e.grouping ?? [], this.label = e.label ?? null, this.highlight = e.highlight ?? null, this.chartSettings = {
|
|
62
|
+
var i, l, a, c, p, d;
|
|
63
|
+
x.parse(e), this.id = y.uniqueId("settings"), this.keyColumn = e.keyColumn, this.facetSettings = { sharedX: !0, sharedY: !0, titlePosition: "left", ...e.facetSettings }, this.x = e.x, this.y = e.y, this.facetBy = e.facetBy ?? [], this.grouping = e.grouping ?? [], this.dotSize = e.dotSize ?? [], this.dotShape = e.dotShape ?? [], this.label = e.label ?? null, this.highlight = e.highlight ?? null, this.chartSettings = {
|
|
62
64
|
size: {
|
|
63
|
-
width: ((
|
|
64
|
-
height: ((
|
|
65
|
+
width: ((i = e == null ? void 0 : e.size) == null ? void 0 : i.width) ?? (this.facetBy.length ? s : n),
|
|
66
|
+
height: ((l = e == null ? void 0 : e.size) == null ? void 0 : l.height) ?? (this.facetBy.length ? S : f)
|
|
65
67
|
},
|
|
66
68
|
title: {
|
|
67
69
|
position: "center",
|
|
@@ -91,23 +93,23 @@ class F {
|
|
|
91
93
|
},
|
|
92
94
|
tooltips: {
|
|
93
95
|
...e.tooltips,
|
|
94
|
-
show: ((p = e.tooltips) == null ? void 0 : p.show) !== !1 && (((
|
|
96
|
+
show: ((p = e.tooltips) == null ? void 0 : p.show) !== !1 && (((d = e.tooltips) == null ? void 0 : d.content) ?? []).length > 0
|
|
95
97
|
}
|
|
96
98
|
}, this.trend = e != null && e.trend && this.chartSettings.xAxis.scale !== "discrete" && this.chartSettings.yAxis.scale !== "discrete" ? {
|
|
97
99
|
bounded: e.trend.bounded ?? !1,
|
|
98
|
-
color: e.trend.color ??
|
|
99
|
-
} : null, this.layers = e.layers.map((
|
|
100
|
-
if (
|
|
101
|
-
return new A(
|
|
102
|
-
if (
|
|
103
|
-
return new L(
|
|
104
|
-
w(
|
|
100
|
+
color: e.trend.color ?? h
|
|
101
|
+
} : null, this.layers = e.layers.map((r) => {
|
|
102
|
+
if (r.type === "dots")
|
|
103
|
+
return new A(r);
|
|
104
|
+
if (r.type === "curve")
|
|
105
|
+
return new L(r);
|
|
106
|
+
w(r, "Unknown layer type");
|
|
105
107
|
}).filter(Boolean);
|
|
106
108
|
}
|
|
107
109
|
}
|
|
108
110
|
export {
|
|
109
111
|
L as CurveLayer,
|
|
110
112
|
A as DotsLayer,
|
|
111
|
-
|
|
113
|
+
_ as ScatterplotSettingsImpl
|
|
112
114
|
};
|
|
113
115
|
//# sourceMappingURL=ScatterplotSettingsImpl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScatterplotSettingsImpl.js","sources":["../../src/scatterplot/ScatterplotSettingsImpl.ts"],"sourcesContent":["import lodash from 'lodash';\nimport {BLACK, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL} from '../constants';\nimport type {\n AxisSettingsContinuous,\n AxisSettingsDiscrete,\n ColumnName,\n ContinuousAesFromColumn,\n DataValue,\n FrameType,\n InheritAesScatterplot,\n LegendPosition,\n LineShape,\n CurveLayer as OuterCurveLayer,\n DotsLayer as OuterDotsLayer,\n PointShape,\n ScatterplotSettings,\n SettingsInterface,\n TitlePosition,\n} from '../types';\nimport {type AesRecord, ScatterplotSettingsSchema} from '../types';\nimport {exhaustive} from '../utils';\n\nexport class DotsLayer {\n readonly type = 'dots';\n readonly aes: {\n dotFill: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n dotShape: PointShape | InheritAesScatterplot;\n dotSize: number | ContinuousAesFromColumn<number>;\n opacity: number;\n } = {\n dotFill: BLACK,\n dotShape: '21',\n dotSize: 3,\n opacity: 1,\n };\n\n constructor(layer: OuterDotsLayer) {\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport class CurveLayer {\n readonly type = 'curve';\n readonly smoothing: boolean;\n readonly aes: {\n lineColor: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n lineWidth: number;\n lineShape: LineShape;\n opacity: number;\n } = {\n lineColor: BLACK,\n lineWidth: 1,\n lineShape: 'solid',\n opacity: 1,\n };\n\n constructor(layer: OuterCurveLayer) {\n this.smoothing = layer.smoothing ?? false;\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport type ScatterplotLayer = DotsLayer | CurveLayer;\n\nexport type ScatterplotAxisSettings =\n AxisSettingsDiscrete & {title: string | ColumnName}\n | AxisSettingsContinuous & {title: string | ColumnName}\n\nexport class ScatterplotSettingsImpl implements SettingsInterface {\n readonly id: string;\n readonly type = 'scatterplot';\n readonly keyColumn: ColumnName;\n readonly facetSettings: {\n sharedX: boolean;\n sharedY: boolean;\n nRows?: number;\n nCols?: number;\n titlePosition: 'left' | 'center' | 'right';\n };\n readonly x: ColumnName;\n readonly y: ColumnName;\n readonly facetBy: ColumnName[];\n readonly grouping: {\n columnName: ColumnName;\n order?: DataValue[];\n inheritedAes?: AesRecord;\n }[];\n readonly label: ColumnName | null;\n readonly highlight: ColumnName | null;\n readonly chartSettings: {\n readonly size: {width: number; height: number};\n readonly title: {name: string; show: boolean; position: TitlePosition};\n readonly yAxis: ScatterplotAxisSettings;\n readonly xAxis: ScatterplotAxisSettings;\n readonly frame: {type: FrameType};\n readonly legend: {show: boolean; position: LegendPosition};\n readonly tooltips: {show: boolean; content?: ColumnName[]};\n };\n\n readonly trend: {\n bounded: boolean;\n color: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n } | null;\n\n readonly layers: ScatterplotLayer[];\n\n constructor(settings: ScatterplotSettings) {\n ScatterplotSettingsSchema.parse(settings);\n this.id = lodash.uniqueId('settings');\n this.keyColumn = settings.keyColumn;\n this.facetSettings = {sharedX: true, sharedY: true, titlePosition: 'left', ...settings.facetSettings};\n this.x = settings.x;\n this.y = settings.y;\n this.facetBy = settings.facetBy ?? [];\n this.grouping = settings.grouping ?? [];\n this.label = settings.label ?? null;\n this.highlight = settings.highlight ?? null;\n this.chartSettings = {\n size: {\n width: settings?.size?.width ?? (this.facetBy.length ? DEFAULT_WIDTH_SMALL : DEFAULT_WIDTH),\n height: settings?.size?.height ?? (this.facetBy.length ? DEFAULT_HEIGHT_SMALL : DEFAULT_HEIGHT),\n },\n title: {\n position: 'center',\n show: true,\n ...settings.title,\n name: settings.title?.name ?? 'Chart',\n },\n yAxis: {\n title: settings.y.label ?? settings.y.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.yAxis,\n },\n xAxis: {\n title: settings.x.label ?? settings.x.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.xAxis,\n },\n frame: {type: settings.frame?.type ?? 'full'},\n legend: {\n show: true,\n position: 'right',\n ...settings.legend,\n },\n tooltips: {\n ...settings.tooltips,\n show: !(settings.tooltips?.show === false) && (settings.tooltips?.content ?? []).length > 0,\n },\n };\n\n this.trend = settings?.trend && this.chartSettings.xAxis.scale !== 'discrete' && this.chartSettings.yAxis.scale !== 'discrete'\n ? {\n bounded: settings.trend.bounded ?? false,\n color: settings.trend.color ?? BLACK,\n }\n : null;\n\n this.layers = settings.layers\n .map(layer => {\n if (layer.type === 'dots') {\n return new DotsLayer(layer);\n }\n if (layer.type === 'curve') {\n return new CurveLayer(layer);\n }\n exhaustive(layer, 'Unknown layer type');\n })\n .filter(Boolean) as ScatterplotLayer[];\n }\n}\n"],"names":["DotsLayer","layer","__publicField","BLACK","CurveLayer","ScatterplotSettingsImpl","settings","ScatterplotSettingsSchema","lodash","_a","DEFAULT_WIDTH_SMALL","DEFAULT_WIDTH","_b","DEFAULT_HEIGHT_SMALL","DEFAULT_HEIGHT","_c","_d","_e","_f","exhaustive"],"mappings":";;;;;;;;;;;;;AAsBO,MAAMA,EAAU;AAAA,EAcnB,YAAYC,GAAuB;AAb1B,IAAAC,EAAA,cAAO;AACP,IAAAA,EAAA,aAKL;AAAA,MACA,SAASC;AAAA,MACT,UAAU;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,IAAA;AAIT,SAAK,MAAM;AAAA,MACP,GAAG,KAAK;AAAA,MACR,GAAGF,EAAM;AAAA,IAAA;AAAA,EAEjB;AACJ;AAEO,MAAMG,EAAW;AAAA,EAepB,YAAYH,GAAwB;AAd3B,IAAAC,EAAA,cAAO;AACP,IAAAA,EAAA;AACA,IAAAA,EAAA,aAKL;AAAA,MACA,WAAWC;AAAA,MACX,WAAW;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,IAAA;AAIT,SAAK,YAAYF,EAAM,aAAa,IACpC,KAAK,MAAM;AAAA,MACP,GAAG,KAAK;AAAA,MACR,GAAGA,EAAM;AAAA,IAAA;AAAA,EAEjB;AACJ;AAQO,MAAMI,EAAqD;AAAA,
|
|
1
|
+
{"version":3,"file":"ScatterplotSettingsImpl.js","sources":["../../src/scatterplot/ScatterplotSettingsImpl.ts"],"sourcesContent":["import lodash from 'lodash';\nimport {BLACK, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL} from '../constants';\nimport type {\n AxisSettingsContinuous,\n AxisSettingsDiscrete,\n ColumnName,\n ContinuousAesFromColumn,\n DataValue,\n FrameType,\n InheritAesScatterplot,\n LegendPosition,\n LineShape,\n CurveLayer as OuterCurveLayer,\n DotsLayer as OuterDotsLayer,\n PointShape,\n ScatterplotSettings,\n SettingsInterface,\n TitlePosition,\n} from '../types';\nimport {type AesRecord, ScatterplotSettingsSchema} from '../types';\nimport {exhaustive} from '../utils';\n\nexport class DotsLayer {\n readonly type = 'dots';\n readonly aes: {\n dotFill: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n dotShape: PointShape | InheritAesScatterplot;\n dotSize: number | ContinuousAesFromColumn<number>;\n opacity: number;\n } = {\n dotFill: BLACK,\n dotShape: '21',\n dotSize: 3,\n opacity: 1,\n };\n\n constructor(layer: OuterDotsLayer) {\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport class CurveLayer {\n readonly type = 'curve';\n readonly smoothing: boolean;\n readonly aes: {\n lineColor: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n lineWidth: number;\n lineShape: LineShape;\n opacity: number;\n } = {\n lineColor: BLACK,\n lineWidth: 1,\n lineShape: 'solid',\n opacity: 1,\n };\n\n constructor(layer: OuterCurveLayer) {\n this.smoothing = layer.smoothing ?? false;\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport type ScatterplotLayer = DotsLayer | CurveLayer;\n\nexport type ScatterplotAxisSettings =\n AxisSettingsDiscrete & {title: string | ColumnName}\n | AxisSettingsContinuous & {title: string | ColumnName}\n\nexport class ScatterplotSettingsImpl implements SettingsInterface {\n readonly id: string;\n readonly type = 'scatterplot';\n readonly keyColumn: ColumnName;\n readonly facetSettings: {\n sharedX: boolean;\n sharedY: boolean;\n nRows?: number;\n nCols?: number;\n titlePosition: 'left' | 'center' | 'right';\n };\n readonly x: ColumnName;\n readonly y: ColumnName;\n readonly facetBy: ColumnName[];\n readonly grouping: {\n columnName: ColumnName;\n order?: DataValue[];\n inheritedAes?: AesRecord;\n }[];\n readonly dotSize: {\n columnName: ColumnName;\n inheritedAes?: AesRecord;\n }[];\n readonly dotShape: {\n columnName: ColumnName;\n inheritedAes?: AesRecord;\n }[];\n readonly label: ColumnName | null;\n readonly highlight: ColumnName | null;\n readonly chartSettings: {\n readonly size: {width: number; height: number};\n readonly title: {name: string; show: boolean; position: TitlePosition};\n readonly yAxis: ScatterplotAxisSettings;\n readonly xAxis: ScatterplotAxisSettings;\n readonly frame: {type: FrameType};\n readonly legend: {show: boolean; position: LegendPosition};\n readonly tooltips: {show: boolean; content?: ColumnName[]};\n };\n\n readonly trend: {\n bounded: boolean;\n color: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n } | null;\n\n readonly layers: ScatterplotLayer[];\n\n constructor(settings: ScatterplotSettings) {\n ScatterplotSettingsSchema.parse(settings);\n this.id = lodash.uniqueId('settings');\n this.keyColumn = settings.keyColumn;\n this.facetSettings = {sharedX: true, sharedY: true, titlePosition: 'left', ...settings.facetSettings};\n this.x = settings.x;\n this.y = settings.y;\n this.facetBy = settings.facetBy ?? [];\n this.grouping = settings.grouping ?? [];\n this.dotSize = settings.dotSize ?? [];\n this.dotShape = settings.dotShape ?? [];\n this.label = settings.label ?? null;\n this.highlight = settings.highlight ?? null;\n this.chartSettings = {\n size: {\n width: settings?.size?.width ?? (this.facetBy.length ? DEFAULT_WIDTH_SMALL : DEFAULT_WIDTH),\n height: settings?.size?.height ?? (this.facetBy.length ? DEFAULT_HEIGHT_SMALL : DEFAULT_HEIGHT),\n },\n title: {\n position: 'center',\n show: true,\n ...settings.title,\n name: settings.title?.name ?? 'Chart',\n },\n yAxis: {\n title: settings.y.label ?? settings.y.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.yAxis,\n },\n xAxis: {\n title: settings.x.label ?? settings.x.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.xAxis,\n },\n frame: {type: settings.frame?.type ?? 'full'},\n legend: {\n show: true,\n position: 'right',\n ...settings.legend,\n },\n tooltips: {\n ...settings.tooltips,\n show: !(settings.tooltips?.show === false) && (settings.tooltips?.content ?? []).length > 0,\n },\n };\n\n this.trend = settings?.trend && this.chartSettings.xAxis.scale !== 'discrete' && this.chartSettings.yAxis.scale !== 'discrete'\n ? {\n bounded: settings.trend.bounded ?? false,\n color: settings.trend.color ?? BLACK,\n }\n : null;\n\n this.layers = settings.layers\n .map(layer => {\n if (layer.type === 'dots') {\n return new DotsLayer(layer);\n }\n if (layer.type === 'curve') {\n return new CurveLayer(layer);\n }\n exhaustive(layer, 'Unknown layer type');\n })\n .filter(Boolean) as ScatterplotLayer[];\n }\n}\n"],"names":["DotsLayer","layer","__publicField","BLACK","CurveLayer","ScatterplotSettingsImpl","settings","ScatterplotSettingsSchema","lodash","_a","DEFAULT_WIDTH_SMALL","DEFAULT_WIDTH","_b","DEFAULT_HEIGHT_SMALL","DEFAULT_HEIGHT","_c","_d","_e","_f","exhaustive"],"mappings":"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"}
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { s as
|
|
5
|
-
import { AbstractChart as
|
|
6
|
-
import { getUnknownErrorInfo as
|
|
1
|
+
var N = Object.defineProperty;
|
|
2
|
+
var j = (l, c, t) => c in l ? N(l, c, { enumerable: !0, configurable: !0, writable: !0, value: t }) : l[c] = t;
|
|
3
|
+
var C = (l, c, t) => j(l, typeof c != "symbol" ? c + "" : c, t);
|
|
4
|
+
import { s as F } from "../_virtual/server.browser.js";
|
|
5
|
+
import { AbstractChart as P } from "../AbstractChart.js";
|
|
6
|
+
import { getUnknownErrorInfo as w, isErrorInfo as I } from "../types/common.js";
|
|
7
7
|
import "../types/discrete.js";
|
|
8
8
|
import "../types/scatterplot.js";
|
|
9
9
|
import "../types/heatmap.js";
|
|
10
10
|
import "../types/dendro.js";
|
|
11
11
|
import "../types/histogram.js";
|
|
12
12
|
import "../types/bubble.js";
|
|
13
|
-
import { arraysAreDifferent as
|
|
14
|
-
import { getKeysCombinations as
|
|
15
|
-
import
|
|
16
|
-
import { getDots as
|
|
17
|
-
import { getLayersData as
|
|
18
|
-
import { getRegressionData as
|
|
19
|
-
import { ScatterplotSettingsImpl as
|
|
20
|
-
import { createLegendInfo as
|
|
21
|
-
import { MAX_FACETS_COUNT as
|
|
22
|
-
import { getFacetLabels as
|
|
23
|
-
function
|
|
24
|
-
return typeof
|
|
13
|
+
import { arraysAreDifferent as S } from "../utils/arraysAreDifferent.js";
|
|
14
|
+
import { getKeysCombinations as L } from "../utils/getKeysCombination.js";
|
|
15
|
+
import X from "./ChartRenderer.js";
|
|
16
|
+
import { getDots as z } from "./dots.js";
|
|
17
|
+
import { getLayersData as H } from "./getLayersData.js";
|
|
18
|
+
import { getRegressionData as V } from "./linearRegression.js";
|
|
19
|
+
import { ScatterplotSettingsImpl as M } from "./ScatterplotSettingsImpl.js";
|
|
20
|
+
import { createLegendInfo as Y, addPalettesToAesMapping as q } from "./utils/createLegendInfo.js";
|
|
21
|
+
import { MAX_FACETS_COUNT as R, MAX_GROUPS_COUNT as E } from "../constants.js";
|
|
22
|
+
import { getFacetLabels as J } from "../discrete/utils/getFacetLabels.js";
|
|
23
|
+
function Q(l) {
|
|
24
|
+
return typeof l == "object" && "type" in l && l.type === "grouping";
|
|
25
25
|
}
|
|
26
|
-
function
|
|
27
|
-
if (
|
|
28
|
-
const e =
|
|
29
|
-
return { keys: e, labels: e.reduce((a,
|
|
30
|
-
const
|
|
31
|
-
return a[
|
|
26
|
+
function B(l, c, t) {
|
|
27
|
+
if (c.scale === "discrete") {
|
|
28
|
+
const e = c.keys ? c.keys : l.getColumnCategories(t.value);
|
|
29
|
+
return { keys: e, labels: e.reduce((a, o) => {
|
|
30
|
+
const h = (c.labels ?? {})[o] ?? (t.valueLabels ? l.getColumnValue(t.valueLabels, l.getColumnCategoryRowIndex(t.value, o)) : o);
|
|
31
|
+
return a[o] = String(h), a;
|
|
32
32
|
}, {}) };
|
|
33
33
|
}
|
|
34
34
|
return { keys: [], labels: {} };
|
|
35
35
|
}
|
|
36
|
-
class
|
|
36
|
+
class mt extends P {
|
|
37
37
|
constructor(t, e, a) {
|
|
38
38
|
super(t, e);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
C(this, "settings");
|
|
40
|
+
C(this, "chartRenderer");
|
|
41
|
+
C(this, "onTooltipHintSwitch", () => {
|
|
42
42
|
});
|
|
43
|
-
|
|
44
|
-
this.chartRenderer = new
|
|
43
|
+
C(this, "calculatedData", null);
|
|
44
|
+
this.chartRenderer = new X(), this.settings = new M(e), a && (this.onTooltipHintSwitch = a.onTooltipHintSwitch);
|
|
45
45
|
}
|
|
46
46
|
mount(t) {
|
|
47
47
|
try {
|
|
48
48
|
this.chartRenderer.init(t), this._updateData(), this._updateChart(), this.hasError = !1, this.errorInfo = null;
|
|
49
49
|
} catch (e) {
|
|
50
|
-
this.hasError = !0, e instanceof Error && (this.errorInfo =
|
|
50
|
+
this.hasError = !0, e instanceof Error && (this.errorInfo = I(e.cause) ? e.cause : w(e), this.chartRenderer.renderError(e.message), console.error(e));
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
unmount() {
|
|
@@ -55,127 +55,127 @@ class gt extends j {
|
|
|
55
55
|
}
|
|
56
56
|
updateSettingsAndData(t, e) {
|
|
57
57
|
try {
|
|
58
|
-
const a = this.settings,
|
|
59
|
-
this.settings = new
|
|
58
|
+
const a = this.settings, o = this.data;
|
|
59
|
+
this.settings = new M(e), this.data = t, this._needUpdateCalculatedDataBySettings(a, this.settings) || this._needUpdateCalculatedDataByData(o, this.data) ? this._updateData() : this._updateAesInData(), this._updateChart(), this.hasError = !1, this.errorInfo = null;
|
|
60
60
|
} catch (a) {
|
|
61
|
-
this.hasError = !0, console.error(a), a instanceof Error && (this.errorInfo =
|
|
61
|
+
this.hasError = !0, console.error(a), a instanceof Error && (this.errorInfo = I(a.cause) ? a.cause : w(a), this.chartRenderer.renderError(a.message), console.error(a));
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
updateChartState(t, e) {
|
|
65
65
|
console.warn("no chart state for scatterplot");
|
|
66
66
|
}
|
|
67
67
|
export() {
|
|
68
|
-
return this._updateChart(),
|
|
68
|
+
return this._updateChart(), F.renderToString(this.chartRenderer.component);
|
|
69
69
|
}
|
|
70
70
|
_needUpdateCalculatedDataBySettings(t, e) {
|
|
71
|
-
var a,
|
|
72
|
-
return t.facetBy.some((
|
|
73
|
-
var
|
|
74
|
-
return
|
|
75
|
-
}) || t.grouping.length !== e.grouping.length ||
|
|
76
|
-
t.grouping.map((
|
|
77
|
-
e.grouping.map((
|
|
78
|
-
) || t.grouping.some((
|
|
79
|
-
var
|
|
80
|
-
return
|
|
81
|
-
}) ||
|
|
71
|
+
var a, o, u, h;
|
|
72
|
+
return t.facetBy.some((n, i) => {
|
|
73
|
+
var p;
|
|
74
|
+
return n.value !== ((p = e.facetBy[i]) == null ? void 0 : p.value);
|
|
75
|
+
}) || t.grouping.length !== e.grouping.length || S(
|
|
76
|
+
t.grouping.map((n) => n.columnName.value),
|
|
77
|
+
e.grouping.map((n) => n.columnName.value)
|
|
78
|
+
) || t.grouping.some((n, i) => {
|
|
79
|
+
var p;
|
|
80
|
+
return S(n.order, (p = e.grouping) == null ? void 0 : p[i].order);
|
|
81
|
+
}) || S(t.chartSettings.xAxis.keys, e.chartSettings.xAxis.keys) || S(t.chartSettings.yAxis.keys, e.chartSettings.yAxis.keys) || (((a = t.label) == null ? void 0 : a.value) || ((o = e.label) == null ? void 0 : o.value)) && ((u = t.label) == null ? void 0 : u.value) !== ((h = e.label) == null ? void 0 : h.value) || t.layers.length !== e.layers.length || t.layers.some((n, i) => n.type !== e.layers[i].type) || !!t.trend != !!e.trend;
|
|
82
82
|
}
|
|
83
83
|
_needUpdateCalculatedDataByData(t, e) {
|
|
84
|
-
const a = Object.keys(t.data),
|
|
85
|
-
return t.id !== e.id || a.length !==
|
|
86
|
-
var
|
|
87
|
-
return t.data[u].length !== ((
|
|
84
|
+
const a = Object.keys(t.data), o = Object.keys(e.data);
|
|
85
|
+
return t.id !== e.id || a.length !== o.length || a.some((u) => {
|
|
86
|
+
var h;
|
|
87
|
+
return t.data[u].length !== ((h = e.data[u]) == null ? void 0 : h.length);
|
|
88
88
|
});
|
|
89
89
|
}
|
|
90
90
|
_updateData() {
|
|
91
|
-
const { x: t, y: e, facetBy: a, grouping:
|
|
92
|
-
this.data.setGrouping([...
|
|
93
|
-
const
|
|
91
|
+
const { x: t, y: e, facetBy: a, grouping: o, dotSize: u, dotShape: h, trend: n, layers: i, label: p, highlight: d, chartSettings: s } = this.settings, m = a.map((r) => this.data.getColumnCategories(r.value)).filter((r) => r.length > 0), D = o.map(({ columnName: r }) => this.data.getColumnCategories(r.value)).filter((r) => r.length > 0), g = m.length ? L(m) : [["null"]], b = D.length ? L(D) : [["null"]], y = a.map((r) => r.value) ?? null;
|
|
92
|
+
this.data.setGrouping([...y]);
|
|
93
|
+
const K = {
|
|
94
94
|
x: this.data.getColumn(t.value).every((r) => r === null || !(Number(r) < 0)),
|
|
95
95
|
y: this.data.getColumn(e.value).every((r) => r === null || !(Number(r) < 0))
|
|
96
|
-
},
|
|
97
|
-
if (
|
|
96
|
+
}, k = o.map((r) => r.columnName), A = z(this.data, g, t, e, p, d, o, s.xAxis, s.yAxis, i.find((r) => r.type === "dots")), f = Object.keys(A);
|
|
97
|
+
if (f.length > R) {
|
|
98
98
|
const r = {
|
|
99
99
|
type: "tooManyFacets",
|
|
100
|
-
info: { count:
|
|
100
|
+
info: { count: f.length, maxCount: R }
|
|
101
101
|
};
|
|
102
102
|
throw Error(r.type, { cause: r });
|
|
103
103
|
}
|
|
104
|
-
const
|
|
105
|
-
if (
|
|
104
|
+
const T = V(this.data, A, f, b, k, n), x = B(this.data, s.xAxis, t), _ = B(this.data, s.yAxis, e);
|
|
105
|
+
if (x.keys.length > E) {
|
|
106
106
|
const r = {
|
|
107
107
|
type: "tooManyScatterplotGroupsX",
|
|
108
|
-
info: { count:
|
|
108
|
+
info: { count: x.keys.length, maxCount: E }
|
|
109
109
|
};
|
|
110
110
|
throw Error(r.type, { cause: r });
|
|
111
111
|
}
|
|
112
|
-
if (
|
|
112
|
+
if (_.keys.length > E) {
|
|
113
113
|
const r = {
|
|
114
114
|
type: "tooManyScatterplotGroupsY",
|
|
115
|
-
info: { count:
|
|
115
|
+
info: { count: _.keys.length, maxCount: E }
|
|
116
116
|
};
|
|
117
117
|
throw Error(r.type, { cause: r });
|
|
118
118
|
}
|
|
119
|
-
const
|
|
119
|
+
const v = [...o, ...u, ...h], O = Y(this.data, v, i), U = H(this.data, i, f, A, b, k, s.xAxis, x), G = J(this.data, a, f, g);
|
|
120
120
|
this.calculatedData = {
|
|
121
|
-
onlyPositive:
|
|
122
|
-
dotsByFacets:
|
|
123
|
-
facetKeys:
|
|
124
|
-
facetKeysCombinations:
|
|
125
|
-
facetLabels:
|
|
126
|
-
trendsData:
|
|
127
|
-
legendLabels:
|
|
128
|
-
layersData:
|
|
129
|
-
discreteAxisDataX:
|
|
130
|
-
discreteAxisDataY:
|
|
121
|
+
onlyPositive: K,
|
|
122
|
+
dotsByFacets: A,
|
|
123
|
+
facetKeys: f,
|
|
124
|
+
facetKeysCombinations: g,
|
|
125
|
+
facetLabels: G,
|
|
126
|
+
trendsData: T,
|
|
127
|
+
legendLabels: O,
|
|
128
|
+
layersData: U,
|
|
129
|
+
discreteAxisDataX: x,
|
|
130
|
+
discreteAxisDataY: _
|
|
131
131
|
};
|
|
132
132
|
}
|
|
133
133
|
_updateAesInData() {
|
|
134
134
|
const t = this.calculatedData;
|
|
135
135
|
if (!t)
|
|
136
136
|
return;
|
|
137
|
-
const { grouping: e, trend: a, layers:
|
|
138
|
-
|
|
139
|
-
for (let
|
|
140
|
-
t.layersData[
|
|
141
|
-
}), e.forEach(({ columnName:
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
137
|
+
const { grouping: e, trend: a, layers: o, dotSize: u, dotShape: h } = this.settings, { facetKeys: n, trendsData: i } = t;
|
|
138
|
+
n.forEach((d) => {
|
|
139
|
+
for (let s = 0; s < o.length; s++)
|
|
140
|
+
t.layersData[d][s].info = o[s];
|
|
141
|
+
}), [...e, ...u, ...h].forEach(({ columnName: d, inheritedAes: s }) => {
|
|
142
|
+
const m = /* @__PURE__ */ new Set(), D = {};
|
|
143
|
+
o.forEach((g) => {
|
|
144
|
+
g.aes && Object.entries(g.aes).forEach(([b, y]) => {
|
|
145
|
+
Q(y) && y.value === d.value && (m.add(b), y.palette && (D[b] = y.palette));
|
|
146
146
|
});
|
|
147
|
-
}), t.legendLabels[
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
147
|
+
}), t.legendLabels[d.value].usedAes = [...m], t.legendLabels[d.value].aesMap = q(
|
|
148
|
+
d,
|
|
149
|
+
D,
|
|
150
|
+
s
|
|
151
151
|
);
|
|
152
|
-
}),
|
|
153
|
-
|
|
154
|
-
|
|
152
|
+
}), i && a && Object.keys(i).forEach((d) => {
|
|
153
|
+
i[d].forEach((s) => {
|
|
154
|
+
s.color = a.color, s.bounded = a.bounded;
|
|
155
155
|
});
|
|
156
156
|
});
|
|
157
157
|
}
|
|
158
158
|
_updateChart() {
|
|
159
159
|
if (!this.calculatedData)
|
|
160
160
|
return;
|
|
161
|
-
const { facetLabels: t } = this.calculatedData, { id: e, chartSettings: a, facetSettings:
|
|
161
|
+
const { facetLabels: t } = this.calculatedData, { id: e, chartSettings: a, facetSettings: o, grouping: u, dotSize: h, dotShape: n, keyColumn: i, layers: p, trend: d } = this.settings;
|
|
162
162
|
this.chartRenderer.render(
|
|
163
163
|
this.data,
|
|
164
164
|
e,
|
|
165
165
|
a,
|
|
166
|
-
|
|
166
|
+
o,
|
|
167
167
|
this.calculatedData.facetKeys,
|
|
168
|
-
this.calculatedData.facetKeys.map((
|
|
168
|
+
this.calculatedData.facetKeys.map((s) => t[s]),
|
|
169
169
|
//for titles, if facet by more than 1 column
|
|
170
170
|
this.calculatedData.dotsByFacets,
|
|
171
171
|
this.calculatedData.trendsData,
|
|
172
|
-
|
|
172
|
+
i,
|
|
173
173
|
this.calculatedData.onlyPositive,
|
|
174
174
|
this.calculatedData.legendLabels,
|
|
175
175
|
this.calculatedData.layersData,
|
|
176
|
-
u.map((
|
|
177
|
-
|
|
178
|
-
|
|
176
|
+
[...u.map((s) => s.columnName), ...h.map((s) => s.columnName), ...n.map((s) => s.columnName)],
|
|
177
|
+
p,
|
|
178
|
+
d,
|
|
179
179
|
this.calculatedData.discreteAxisDataX,
|
|
180
180
|
this.calculatedData.discreteAxisDataY,
|
|
181
181
|
this.onTooltipHintSwitch
|
|
@@ -183,6 +183,6 @@ class gt extends j {
|
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
185
|
export {
|
|
186
|
-
|
|
186
|
+
mt as ChartScatterplot
|
|
187
187
|
};
|
|
188
188
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/scatterplot/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type {\n ErrorInfoScatterplotGroupsX,\n ErrorInfoScatterplotGroupsY} from '../types';\nimport {\n type AesItem,\n type AxisSettings,\n type AxisSettingsDiscrete,\n type Category,\n type ColumnName,\n type ContinuousAesFromColumn,\n type ErrorInfoFacets,\n getUnknownErrorInfo,\n type InheritAesScatterplot,\n isErrorInfo,\n type ScatterplotEventHandlers,\n type ScatterplotLegendInfo,\n type ScatterplotSettings,\n} from '../types';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\nimport { getKeysCombinations } from '../utils/getKeysCombination';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedDots } from './dots';\nimport { getDots } from './dots';\nimport type { ScatterplotLayerData } from './getLayersData';\nimport { getLayersData } from './getLayersData';\nimport type { TrendsData } from './linearRegression';\nimport { getRegressionData } from './linearRegression';\nimport { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport { addPalettesToAesMapping, createLegendInfo } from './utils/createLegendInfo';\nimport type { DiscreteAxisData } from './components/types';\nimport { MAX_FACETS_COUNT, MAX_GROUPS_COUNT } from '../constants';\nimport { getFacetLabels } from '../discrete/utils/getFacetLabels';\n\nfunction isInheritMapping<T extends (string | number)>(value:T | InheritAesScatterplot | ContinuousAesFromColumn<T>):value is InheritAesScatterplot {\n return typeof value === 'object' && 'type' in value && value.type === 'grouping';\n}\n\nfunction getDiscreteAxisData(data: DataFrame, axis: AxisSettings, column: ColumnName): DiscreteAxisData {\n if (axis.scale === 'discrete') {\n const keys = axis.keys ? axis.keys : data.getColumnCategories(column.value);\n return {keys, labels: keys.reduce((res, v) => {\n const labelsMap = axis.labels ?? {};\n const labelValue = labelsMap[v] ?? (column.valueLabels ? data.getColumnValue(column.valueLabels, data.getColumnCategoryRowIndex(column.value, v as Category)) : v);\n res[v] = String(labelValue);\n return res;\n }, {} as Record<string, string>)};\n }\n return {keys: [], labels: {}};\n}\n\nexport class ChartScatterplot extends AbstractChart {\n settings: ScatterplotSettingsImpl;\n chartRenderer: ChartRenderer;\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n onlyPositive: {x: boolean; y: boolean};\n dotsByFacets: GroupedDots;\n facetKeys: string[];\n facetKeysCombinations: string[][];\n facetLabels: Record<string, string[]>;\n trendsData: TrendsData | null;\n legendLabels: ScatterplotLegendInfo;\n layersData: Record<string, ScatterplotLayerData[]>;\n discreteAxisDataX: DiscreteAxisData;\n discreteAxisDataY: DiscreteAxisData;\n } | null = null;\n\n constructor(data: DataFrame, settings: ScatterplotSettings, eventHandlers?:ScatterplotEventHandlers) {\n super(data, settings);\n\n this.chartRenderer = new ChartRenderer();\n this.settings = new ScatterplotSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: ScatterplotSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new ScatterplotSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n console.error(err);\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for scatterplot');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: ScatterplotSettingsImpl, settings: ScatterplotSettingsImpl) {\n return (\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.grouping.length !== settings.grouping.length ||\n arraysAreDifferent(\n prevSettings.grouping.map(v => v.columnName.value),\n settings.grouping.map(v => v.columnName.value),\n ) ||\n prevSettings.grouping.some((v, idx) => arraysAreDifferent(v.order, settings.grouping?.[idx].order)) ||\n arraysAreDifferent((prevSettings.chartSettings.xAxis as AxisSettingsDiscrete).keys, (settings.chartSettings.xAxis as AxisSettingsDiscrete).keys) ||\n arraysAreDifferent((prevSettings.chartSettings.yAxis as AxisSettingsDiscrete).keys, (settings.chartSettings.yAxis as AxisSettingsDiscrete).keys) ||\n (prevSettings.label?.value || settings.label?.value) && prevSettings.label?.value !== settings.label?.value ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n Boolean(prevSettings.trend) !== Boolean(settings.trend)\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {x, y, facetBy, grouping, trend, layers, label, highlight, chartSettings} = this.settings;\n const facetKeysLists = facetBy.map(column => this.data.getColumnCategories(column.value)).filter(v => v.length > 0);\n const categoryGroupingKeysLists = grouping.map(({columnName}) => this.data.getColumnCategories(columnName.value)).filter(v => v.length > 0);\n\n const facetKeysCombinations = facetKeysLists.length\n ? getKeysCombinations(facetKeysLists)\n : [['null']];\n const categoryGroupingCombinations = categoryGroupingKeysLists.length\n ? getKeysCombinations(categoryGroupingKeysLists)\n : [['null']];\n\n const facetGroupingValues = facetBy.map(column => column.value) ?? null;\n\n this.data.setGrouping([...facetGroupingValues]);\n const onlyPositive = {\n x: this.data.getColumn(x.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n y: this.data.getColumn(y.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n };\n\n const groupingColumns = grouping.map(v => v.columnName);\n\n const dotsByFacets = getDots(this.data, facetKeysCombinations, x, y, label, highlight, grouping, chartSettings.xAxis, chartSettings.yAxis, layers.find(l => l.type === 'dots'));\n const facetKeys = Object.keys(dotsByFacets);\n\n if (facetKeys.length > MAX_FACETS_COUNT) {\n const errorInfo: ErrorInfoFacets = {\n type: 'tooManyFacets',\n info: {count: facetKeys.length, maxCount: MAX_FACETS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n\n const trendsData = getRegressionData(this.data, dotsByFacets, facetKeys, categoryGroupingCombinations, groupingColumns, trend);\n\n const discreteAxisDataX = getDiscreteAxisData(this.data, chartSettings.xAxis, x);\n const discreteAxisDataY = getDiscreteAxisData(this.data, chartSettings.yAxis, y);\n\n if (discreteAxisDataX.keys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoScatterplotGroupsX = {\n type: 'tooManyScatterplotGroupsX',\n info: {count: discreteAxisDataX.keys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n if (discreteAxisDataY.keys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoScatterplotGroupsY = {\n type: 'tooManyScatterplotGroupsY',\n info: {count: discreteAxisDataY.keys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n const legendLabels = createLegendInfo(this.data, grouping, layers);\n const layersData = getLayersData(this.data, layers, facetKeys, dotsByFacets, categoryGroupingCombinations, groupingColumns, chartSettings.xAxis, discreteAxisDataX);\n const facetLabels = getFacetLabels(this.data, facetBy, facetKeys, facetKeysCombinations);\n\n this.calculatedData = {\n onlyPositive,\n dotsByFacets,\n facetKeys,\n facetKeysCombinations,\n facetLabels,\n trendsData,\n legendLabels,\n layersData,\n discreteAxisDataX,\n discreteAxisDataY\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n const {grouping, trend, layers} = this.settings;\n const {facetKeys, trendsData} = calculated;\n\n facetKeys.forEach(facetKey => {\n for (let i = 0; i < layers.length; i++) {\n calculated.layersData[facetKey][i].info = layers[i];\n }\n });\n\n grouping.forEach(({columnName, inheritedAes}) => {\n const usedAes = new Set<keyof AesItem>();\n const usedAesFromPalettes: Partial<Record<keyof AesItem, string[]>> = {}; // if there is palette in mapping then\n layers.forEach(layer => {\n if (layer.aes) {\n Object.entries(layer.aes).forEach(([key, value]) => {\n if (isInheritMapping(value) && value.value === columnName.value) {\n usedAes.add(key as keyof AesItem);\n if (value.palette) {\n usedAesFromPalettes[key as keyof AesItem] = value.palette;\n }\n }\n });\n }\n });\n calculated.legendLabels[columnName.value].usedAes = [...usedAes];\n calculated.legendLabels[columnName.value].aesMap = addPalettesToAesMapping(\n columnName,\n usedAesFromPalettes,\n inheritedAes\n );\n });\n if (trendsData && trend) {\n Object.keys(trendsData).forEach((key) => {\n trendsData[key].forEach(trendInfo => {\n trendInfo.color = trend.color;\n trendInfo.bounded = trend.bounded;\n });\n });\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {facetLabels} = this.calculatedData;\n const {id, chartSettings, facetSettings, grouping, keyColumn, layers, trend} = this.settings;\n\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeys.map(v => facetLabels[v]), //for titles, if facet by more than 1 column\n this.calculatedData.dotsByFacets,\n this.calculatedData.trendsData,\n keyColumn,\n this.calculatedData.onlyPositive,\n this.calculatedData.legendLabels,\n this.calculatedData.layersData,\n grouping.map(v => v.columnName),\n layers,\n trend,\n this.calculatedData.discreteAxisDataX,\n this.calculatedData.discreteAxisDataY,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["isInheritMapping","value","getDiscreteAxisData","data","axis","column","keys","res","v","labelValue","ChartScatterplot","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","ScatterplotSettingsImpl","node","err","isErrorInfo","getUnknownErrorInfo","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","arraysAreDifferent","_b","_c","_d","l","prevData","prevKeys","key","x","y","facetBy","grouping","trend","layers","label","highlight","chartSettings","facetKeysLists","categoryGroupingKeysLists","columnName","facetKeysCombinations","getKeysCombinations","categoryGroupingCombinations","facetGroupingValues","onlyPositive","groupingColumns","dotsByFacets","getDots","facetKeys","MAX_FACETS_COUNT","errorInfo","trendsData","getRegressionData","discreteAxisDataX","discreteAxisDataY","MAX_GROUPS_COUNT","legendLabels","createLegendInfo","layersData","getLayersData","facetLabels","getFacetLabels","calculated","facetKey","i","inheritedAes","usedAes","usedAesFromPalettes","layer","addPalettesToAesMapping","trendInfo","id","facetSettings","keyColumn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/scatterplot/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type {\n ErrorInfoScatterplotGroupsX,\n ErrorInfoScatterplotGroupsY} from '../types';\nimport {\n type AesItem,\n type AxisSettings,\n type AxisSettingsDiscrete,\n type Category,\n type ColumnName,\n type ContinuousAesFromColumn,\n type ErrorInfoFacets,\n getUnknownErrorInfo,\n type InheritAesScatterplot,\n isErrorInfo,\n type ScatterplotEventHandlers,\n type ScatterplotLegendInfo,\n type ScatterplotSettings,\n} from '../types';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\nimport { getKeysCombinations } from '../utils/getKeysCombination';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedDots } from './dots';\nimport { getDots } from './dots';\nimport type { ScatterplotLayerData } from './getLayersData';\nimport { getLayersData } from './getLayersData';\nimport type { TrendsData } from './linearRegression';\nimport { getRegressionData } from './linearRegression';\nimport { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport { addPalettesToAesMapping, createLegendInfo } from './utils/createLegendInfo';\nimport type { DiscreteAxisData } from './components/types';\nimport { MAX_FACETS_COUNT, MAX_GROUPS_COUNT } from '../constants';\nimport { getFacetLabels } from '../discrete/utils/getFacetLabels';\n\nfunction isInheritMapping<T extends (string | number)>(value:T | InheritAesScatterplot | ContinuousAesFromColumn<T>):value is InheritAesScatterplot {\n return typeof value === 'object' && 'type' in value && value.type === 'grouping';\n}\n\nfunction getDiscreteAxisData(data: DataFrame, axis: AxisSettings, column: ColumnName): DiscreteAxisData {\n if (axis.scale === 'discrete') {\n const keys = axis.keys ? axis.keys : data.getColumnCategories(column.value);\n return {keys, labels: keys.reduce((res, v) => {\n const labelsMap = axis.labels ?? {};\n const labelValue = labelsMap[v] ?? (column.valueLabels ? data.getColumnValue(column.valueLabels, data.getColumnCategoryRowIndex(column.value, v as Category)) : v);\n res[v] = String(labelValue);\n return res;\n }, {} as Record<string, string>)};\n }\n return {keys: [], labels: {}};\n}\n\nexport class ChartScatterplot extends AbstractChart {\n settings: ScatterplotSettingsImpl;\n chartRenderer: ChartRenderer;\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n onlyPositive: {x: boolean; y: boolean};\n dotsByFacets: GroupedDots;\n facetKeys: string[];\n facetKeysCombinations: string[][];\n facetLabels: Record<string, string[]>;\n trendsData: TrendsData | null;\n legendLabels: ScatterplotLegendInfo;\n layersData: Record<string, ScatterplotLayerData[]>;\n discreteAxisDataX: DiscreteAxisData;\n discreteAxisDataY: DiscreteAxisData;\n } | null = null;\n\n constructor(data: DataFrame, settings: ScatterplotSettings, eventHandlers?:ScatterplotEventHandlers) {\n super(data, settings);\n\n this.chartRenderer = new ChartRenderer();\n this.settings = new ScatterplotSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: ScatterplotSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new ScatterplotSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n console.error(err);\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for scatterplot');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: ScatterplotSettingsImpl, settings: ScatterplotSettingsImpl) {\n return (\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.grouping.length !== settings.grouping.length ||\n arraysAreDifferent(\n prevSettings.grouping.map(v => v.columnName.value),\n settings.grouping.map(v => v.columnName.value),\n ) ||\n prevSettings.grouping.some((v, idx) => arraysAreDifferent(v.order, settings.grouping?.[idx].order)) ||\n arraysAreDifferent((prevSettings.chartSettings.xAxis as AxisSettingsDiscrete).keys, (settings.chartSettings.xAxis as AxisSettingsDiscrete).keys) ||\n arraysAreDifferent((prevSettings.chartSettings.yAxis as AxisSettingsDiscrete).keys, (settings.chartSettings.yAxis as AxisSettingsDiscrete).keys) ||\n (prevSettings.label?.value || settings.label?.value) && prevSettings.label?.value !== settings.label?.value ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n Boolean(prevSettings.trend) !== Boolean(settings.trend)\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {x, y, facetBy, grouping, dotSize, dotShape, trend, layers, label, highlight, chartSettings} = this.settings;\n const facetKeysLists = facetBy.map(column => this.data.getColumnCategories(column.value)).filter(v => v.length > 0);\n const categoryGroupingKeysLists = grouping.map(({columnName}) => this.data.getColumnCategories(columnName.value)).filter(v => v.length > 0);\n\n const facetKeysCombinations = facetKeysLists.length\n ? getKeysCombinations(facetKeysLists)\n : [['null']];\n const categoryGroupingCombinations = categoryGroupingKeysLists.length\n ? getKeysCombinations(categoryGroupingKeysLists)\n : [['null']];\n\n const facetGroupingValues = facetBy.map(column => column.value) ?? null;\n\n this.data.setGrouping([...facetGroupingValues]);\n const onlyPositive = {\n x: this.data.getColumn(x.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n y: this.data.getColumn(y.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n };\n\n const groupingColumns = grouping.map(v => v.columnName);\n\n const dotsByFacets = getDots(this.data, facetKeysCombinations, x, y, label, highlight, grouping, chartSettings.xAxis, chartSettings.yAxis, layers.find(l => l.type === 'dots'));\n const facetKeys = Object.keys(dotsByFacets);\n\n if (facetKeys.length > MAX_FACETS_COUNT) {\n const errorInfo: ErrorInfoFacets = {\n type: 'tooManyFacets',\n info: {count: facetKeys.length, maxCount: MAX_FACETS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n\n const trendsData = getRegressionData(this.data, dotsByFacets, facetKeys, categoryGroupingCombinations, groupingColumns, trend);\n\n const discreteAxisDataX = getDiscreteAxisData(this.data, chartSettings.xAxis, x);\n const discreteAxisDataY = getDiscreteAxisData(this.data, chartSettings.yAxis, y);\n\n if (discreteAxisDataX.keys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoScatterplotGroupsX = {\n type: 'tooManyScatterplotGroupsX',\n info: {count: discreteAxisDataX.keys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n if (discreteAxisDataY.keys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoScatterplotGroupsY = {\n type: 'tooManyScatterplotGroupsY',\n info: {count: discreteAxisDataY.keys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n const allAesMappings = [...grouping, ...dotSize, ...dotShape];\n const legendLabels = createLegendInfo(this.data, allAesMappings, layers);\n const layersData = getLayersData(this.data, layers, facetKeys, dotsByFacets, categoryGroupingCombinations, groupingColumns, chartSettings.xAxis, discreteAxisDataX);\n const facetLabels = getFacetLabels(this.data, facetBy, facetKeys, facetKeysCombinations);\n\n this.calculatedData = {\n onlyPositive,\n dotsByFacets,\n facetKeys,\n facetKeysCombinations,\n facetLabels,\n trendsData,\n legendLabels,\n layersData,\n discreteAxisDataX,\n discreteAxisDataY\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n const {grouping, trend, layers, dotSize, dotShape} = this.settings;\n const {facetKeys, trendsData} = calculated;\n\n facetKeys.forEach(facetKey => {\n for (let i = 0; i < layers.length; i++) {\n calculated.layersData[facetKey][i].info = layers[i];\n }\n });\n\n const allAesMappings = [...grouping, ...dotSize, ...dotShape];\n\n allAesMappings.forEach(({columnName, inheritedAes}) => {\n const usedAes = new Set<keyof AesItem>();\n const usedAesFromPalettes: Partial<Record<keyof AesItem, string[]>> = {}; // if there is palette in mapping then\n layers.forEach(layer => {\n if (layer.aes) {\n Object.entries(layer.aes).forEach(([key, value]) => {\n if (isInheritMapping(value) && value.value === columnName.value) {\n usedAes.add(key as keyof AesItem);\n if (value.palette) {\n usedAesFromPalettes[key as keyof AesItem] = value.palette;\n }\n }\n });\n }\n });\n calculated.legendLabels[columnName.value].usedAes = [...usedAes];\n calculated.legendLabels[columnName.value].aesMap = addPalettesToAesMapping(\n columnName,\n usedAesFromPalettes,\n inheritedAes\n );\n });\n if (trendsData && trend) {\n Object.keys(trendsData).forEach((key) => {\n trendsData[key].forEach(trendInfo => {\n trendInfo.color = trend.color;\n trendInfo.bounded = trend.bounded;\n });\n });\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {facetLabels} = this.calculatedData;\n const {id, chartSettings, facetSettings, grouping, dotSize, dotShape, keyColumn, layers, trend} = this.settings;\n\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeys.map(v => facetLabels[v]), //for titles, if facet by more than 1 column\n this.calculatedData.dotsByFacets,\n this.calculatedData.trendsData,\n keyColumn,\n this.calculatedData.onlyPositive,\n this.calculatedData.legendLabels,\n this.calculatedData.layersData,\n [...grouping.map(v => v.columnName), ...dotSize.map(v => v.columnName), ...dotShape.map(v => v.columnName)],\n layers,\n trend,\n this.calculatedData.discreteAxisDataX,\n this.calculatedData.discreteAxisDataY,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["isInheritMapping","value","getDiscreteAxisData","data","axis","column","keys","res","v","labelValue","ChartScatterplot","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","ScatterplotSettingsImpl","node","err","isErrorInfo","getUnknownErrorInfo","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","arraysAreDifferent","_b","_c","_d","l","prevData","prevKeys","key","x","y","facetBy","grouping","dotSize","dotShape","trend","layers","label","highlight","chartSettings","facetKeysLists","categoryGroupingKeysLists","columnName","facetKeysCombinations","getKeysCombinations","categoryGroupingCombinations","facetGroupingValues","onlyPositive","groupingColumns","dotsByFacets","getDots","facetKeys","MAX_FACETS_COUNT","errorInfo","trendsData","getRegressionData","discreteAxisDataX","discreteAxisDataY","MAX_GROUPS_COUNT","allAesMappings","legendLabels","createLegendInfo","layersData","getLayersData","facetLabels","getFacetLabels","calculated","facetKey","i","inheritedAes","usedAes","usedAesFromPalettes","layer","addPalettesToAesMapping","trendInfo","id","facetSettings","keyColumn"],"mappings":"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"}
|
|
@@ -1347,6 +1347,126 @@ export declare const ScatterplotSettingsSchema: z.ZodObject<{
|
|
|
1347
1347
|
}> | undefined;
|
|
1348
1348
|
allowNullGroup?: boolean | undefined;
|
|
1349
1349
|
}>, "many">>;
|
|
1350
|
+
dotSize: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
1351
|
+
columnName: z.ZodObject<{
|
|
1352
|
+
type: z.ZodLiteral<"column">;
|
|
1353
|
+
value: z.ZodString;
|
|
1354
|
+
format: z.ZodOptional<z.ZodString>;
|
|
1355
|
+
label: z.ZodOptional<z.ZodString>;
|
|
1356
|
+
valueLabels: z.ZodOptional<z.ZodString>;
|
|
1357
|
+
}, "strip", z.ZodTypeAny, {
|
|
1358
|
+
type: "column";
|
|
1359
|
+
value: string;
|
|
1360
|
+
format?: string | undefined;
|
|
1361
|
+
label?: string | undefined;
|
|
1362
|
+
valueLabels?: string | undefined;
|
|
1363
|
+
}, {
|
|
1364
|
+
type: "column";
|
|
1365
|
+
value: string;
|
|
1366
|
+
format?: string | undefined;
|
|
1367
|
+
label?: string | undefined;
|
|
1368
|
+
valueLabels?: string | undefined;
|
|
1369
|
+
}>;
|
|
1370
|
+
}, "strip", z.ZodTypeAny, {
|
|
1371
|
+
columnName: {
|
|
1372
|
+
type: "column";
|
|
1373
|
+
value: string;
|
|
1374
|
+
format?: string | undefined;
|
|
1375
|
+
label?: string | undefined;
|
|
1376
|
+
valueLabels?: string | undefined;
|
|
1377
|
+
};
|
|
1378
|
+
}, {
|
|
1379
|
+
columnName: {
|
|
1380
|
+
type: "column";
|
|
1381
|
+
value: string;
|
|
1382
|
+
format?: string | undefined;
|
|
1383
|
+
label?: string | undefined;
|
|
1384
|
+
valueLabels?: string | undefined;
|
|
1385
|
+
};
|
|
1386
|
+
}>, "many">>;
|
|
1387
|
+
dotShape: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
1388
|
+
columnName: z.ZodObject<{
|
|
1389
|
+
type: z.ZodLiteral<"column">;
|
|
1390
|
+
value: z.ZodString;
|
|
1391
|
+
format: z.ZodOptional<z.ZodString>;
|
|
1392
|
+
label: z.ZodOptional<z.ZodString>;
|
|
1393
|
+
valueLabels: z.ZodOptional<z.ZodString>;
|
|
1394
|
+
}, "strip", z.ZodTypeAny, {
|
|
1395
|
+
type: "column";
|
|
1396
|
+
value: string;
|
|
1397
|
+
format?: string | undefined;
|
|
1398
|
+
label?: string | undefined;
|
|
1399
|
+
valueLabels?: string | undefined;
|
|
1400
|
+
}, {
|
|
1401
|
+
type: "column";
|
|
1402
|
+
value: string;
|
|
1403
|
+
format?: string | undefined;
|
|
1404
|
+
label?: string | undefined;
|
|
1405
|
+
valueLabels?: string | undefined;
|
|
1406
|
+
}>;
|
|
1407
|
+
order: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodNull]>, "many">>;
|
|
1408
|
+
inheritedAes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
1409
|
+
fillColor: z.ZodOptional<z.ZodString>;
|
|
1410
|
+
lineColor: z.ZodOptional<z.ZodString>;
|
|
1411
|
+
lineWidth: z.ZodOptional<z.ZodNumber>;
|
|
1412
|
+
lineShape: z.ZodOptional<z.ZodEnum<["solid", "dashed", "dotted", "dotdash", "longdash", "twodash"]>>;
|
|
1413
|
+
dotShape: z.ZodOptional<z.ZodEnum<["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "20", "21", "22", "23", "24", "25"]>>;
|
|
1414
|
+
dotSize: z.ZodOptional<z.ZodNumber>;
|
|
1415
|
+
dotFill: z.ZodOptional<z.ZodString>;
|
|
1416
|
+
}, "strip", z.ZodTypeAny, {
|
|
1417
|
+
dotFill?: string | undefined;
|
|
1418
|
+
dotShape?: "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "20" | "21" | "22" | "23" | "24" | "25" | undefined;
|
|
1419
|
+
dotSize?: number | undefined;
|
|
1420
|
+
lineWidth?: number | undefined;
|
|
1421
|
+
lineShape?: "solid" | "dashed" | "dotted" | "dotdash" | "longdash" | "twodash" | undefined;
|
|
1422
|
+
lineColor?: string | undefined;
|
|
1423
|
+
fillColor?: string | undefined;
|
|
1424
|
+
}, {
|
|
1425
|
+
dotFill?: string | undefined;
|
|
1426
|
+
dotShape?: "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "20" | "21" | "22" | "23" | "24" | "25" | undefined;
|
|
1427
|
+
dotSize?: number | undefined;
|
|
1428
|
+
lineWidth?: number | undefined;
|
|
1429
|
+
lineShape?: "solid" | "dashed" | "dotted" | "dotdash" | "longdash" | "twodash" | undefined;
|
|
1430
|
+
lineColor?: string | undefined;
|
|
1431
|
+
fillColor?: string | undefined;
|
|
1432
|
+
}>>>;
|
|
1433
|
+
}, "strip", z.ZodTypeAny, {
|
|
1434
|
+
columnName: {
|
|
1435
|
+
type: "column";
|
|
1436
|
+
value: string;
|
|
1437
|
+
format?: string | undefined;
|
|
1438
|
+
label?: string | undefined;
|
|
1439
|
+
valueLabels?: string | undefined;
|
|
1440
|
+
};
|
|
1441
|
+
order?: (string | number | null)[] | undefined;
|
|
1442
|
+
inheritedAes?: Record<string, {
|
|
1443
|
+
dotFill?: string | undefined;
|
|
1444
|
+
dotShape?: "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "20" | "21" | "22" | "23" | "24" | "25" | undefined;
|
|
1445
|
+
dotSize?: number | undefined;
|
|
1446
|
+
lineWidth?: number | undefined;
|
|
1447
|
+
lineShape?: "solid" | "dashed" | "dotted" | "dotdash" | "longdash" | "twodash" | undefined;
|
|
1448
|
+
lineColor?: string | undefined;
|
|
1449
|
+
fillColor?: string | undefined;
|
|
1450
|
+
}> | undefined;
|
|
1451
|
+
}, {
|
|
1452
|
+
columnName: {
|
|
1453
|
+
type: "column";
|
|
1454
|
+
value: string;
|
|
1455
|
+
format?: string | undefined;
|
|
1456
|
+
label?: string | undefined;
|
|
1457
|
+
valueLabels?: string | undefined;
|
|
1458
|
+
};
|
|
1459
|
+
order?: (string | number | null)[] | undefined;
|
|
1460
|
+
inheritedAes?: Record<string, {
|
|
1461
|
+
dotFill?: string | undefined;
|
|
1462
|
+
dotShape?: "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "20" | "21" | "22" | "23" | "24" | "25" | undefined;
|
|
1463
|
+
dotSize?: number | undefined;
|
|
1464
|
+
lineWidth?: number | undefined;
|
|
1465
|
+
lineShape?: "solid" | "dashed" | "dotted" | "dotdash" | "longdash" | "twodash" | undefined;
|
|
1466
|
+
lineColor?: string | undefined;
|
|
1467
|
+
fillColor?: string | undefined;
|
|
1468
|
+
}> | undefined;
|
|
1469
|
+
}>, "many">>;
|
|
1350
1470
|
facetBy: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
1351
1471
|
type: z.ZodLiteral<"column">;
|
|
1352
1472
|
value: z.ZodString;
|
|
@@ -2040,6 +2160,34 @@ export declare const ScatterplotSettingsSchema: z.ZodObject<{
|
|
|
2040
2160
|
}> | undefined;
|
|
2041
2161
|
allowNullGroup?: boolean | undefined;
|
|
2042
2162
|
}[] | undefined;
|
|
2163
|
+
dotShape?: {
|
|
2164
|
+
columnName: {
|
|
2165
|
+
type: "column";
|
|
2166
|
+
value: string;
|
|
2167
|
+
format?: string | undefined;
|
|
2168
|
+
label?: string | undefined;
|
|
2169
|
+
valueLabels?: string | undefined;
|
|
2170
|
+
};
|
|
2171
|
+
order?: (string | number | null)[] | undefined;
|
|
2172
|
+
inheritedAes?: Record<string, {
|
|
2173
|
+
dotFill?: string | undefined;
|
|
2174
|
+
dotShape?: "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "20" | "21" | "22" | "23" | "24" | "25" | undefined;
|
|
2175
|
+
dotSize?: number | undefined;
|
|
2176
|
+
lineWidth?: number | undefined;
|
|
2177
|
+
lineShape?: "solid" | "dashed" | "dotted" | "dotdash" | "longdash" | "twodash" | undefined;
|
|
2178
|
+
lineColor?: string | undefined;
|
|
2179
|
+
fillColor?: string | undefined;
|
|
2180
|
+
}> | undefined;
|
|
2181
|
+
}[] | undefined;
|
|
2182
|
+
dotSize?: {
|
|
2183
|
+
columnName: {
|
|
2184
|
+
type: "column";
|
|
2185
|
+
value: string;
|
|
2186
|
+
format?: string | undefined;
|
|
2187
|
+
label?: string | undefined;
|
|
2188
|
+
valueLabels?: string | undefined;
|
|
2189
|
+
};
|
|
2190
|
+
}[] | undefined;
|
|
2043
2191
|
legend?: {
|
|
2044
2192
|
show?: boolean | undefined;
|
|
2045
2193
|
position?: "right" | "inside" | "top" | "bottom" | undefined;
|
|
@@ -2285,6 +2433,34 @@ export declare const ScatterplotSettingsSchema: z.ZodObject<{
|
|
|
2285
2433
|
}> | undefined;
|
|
2286
2434
|
allowNullGroup?: boolean | undefined;
|
|
2287
2435
|
}[] | undefined;
|
|
2436
|
+
dotShape?: {
|
|
2437
|
+
columnName: {
|
|
2438
|
+
type: "column";
|
|
2439
|
+
value: string;
|
|
2440
|
+
format?: string | undefined;
|
|
2441
|
+
label?: string | undefined;
|
|
2442
|
+
valueLabels?: string | undefined;
|
|
2443
|
+
};
|
|
2444
|
+
order?: (string | number | null)[] | undefined;
|
|
2445
|
+
inheritedAes?: Record<string, {
|
|
2446
|
+
dotFill?: string | undefined;
|
|
2447
|
+
dotShape?: "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "20" | "21" | "22" | "23" | "24" | "25" | undefined;
|
|
2448
|
+
dotSize?: number | undefined;
|
|
2449
|
+
lineWidth?: number | undefined;
|
|
2450
|
+
lineShape?: "solid" | "dashed" | "dotted" | "dotdash" | "longdash" | "twodash" | undefined;
|
|
2451
|
+
lineColor?: string | undefined;
|
|
2452
|
+
fillColor?: string | undefined;
|
|
2453
|
+
}> | undefined;
|
|
2454
|
+
}[] | undefined;
|
|
2455
|
+
dotSize?: {
|
|
2456
|
+
columnName: {
|
|
2457
|
+
type: "column";
|
|
2458
|
+
value: string;
|
|
2459
|
+
format?: string | undefined;
|
|
2460
|
+
label?: string | undefined;
|
|
2461
|
+
valueLabels?: string | undefined;
|
|
2462
|
+
};
|
|
2463
|
+
}[] | undefined;
|
|
2288
2464
|
legend?: {
|
|
2289
2465
|
show?: boolean | undefined;
|
|
2290
2466
|
position?: "right" | "inside" | "top" | "bottom" | undefined;
|
|
@@ -1,84 +1,96 @@
|
|
|
1
|
-
import { continuousAesMappingFromValueSchema as l, PointShapeSchema as
|
|
2
|
-
import { object as
|
|
3
|
-
const p =
|
|
1
|
+
import { continuousAesMappingFromValueSchema as l, PointShapeSchema as y, LineShapeSchema as u, ColumnNameSchema as t, AesRecordSchema as h, DataValueSchema as m, AxisSettingsSchema as S, FrameTypeSchema as d, TooltipSettingsSchema as g, LegendPositionSchema as T, TitlePositionSchema as b } from "./common.js";
|
|
2
|
+
import { object as o, optional as e, string as a, literal as c, array as i, union as r, number as n, boolean as s } from "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js";
|
|
3
|
+
const p = o({
|
|
4
4
|
type: c("grouping"),
|
|
5
|
-
value:
|
|
5
|
+
value: a(),
|
|
6
6
|
// link to aes mapped to column
|
|
7
|
-
palette: e(
|
|
7
|
+
palette: e(i(a()))
|
|
8
8
|
// if defined we use palette to create mapping without inheritedAes field
|
|
9
|
-
}), A =
|
|
9
|
+
}), A = o({
|
|
10
10
|
type: c("dots"),
|
|
11
11
|
aes: e(
|
|
12
|
-
|
|
13
|
-
dotFill: e(
|
|
14
|
-
dotShape: e(
|
|
15
|
-
dotSize: e(
|
|
12
|
+
o({
|
|
13
|
+
dotFill: e(r([a(), p, l(a())])),
|
|
14
|
+
dotShape: e(r([y, p])),
|
|
15
|
+
dotSize: e(r([n(), l(n())]))
|
|
16
16
|
})
|
|
17
17
|
)
|
|
18
|
-
}), x =
|
|
18
|
+
}), x = o({
|
|
19
19
|
type: c("curve"),
|
|
20
|
-
smoothing: e(
|
|
20
|
+
smoothing: e(s()),
|
|
21
21
|
aes: e(
|
|
22
|
-
|
|
23
|
-
lineWidth: e(
|
|
24
|
-
lineShape: e(
|
|
25
|
-
lineColor: e(
|
|
26
|
-
opacity: e(
|
|
22
|
+
o({
|
|
23
|
+
lineWidth: e(n()),
|
|
24
|
+
lineShape: e(u),
|
|
25
|
+
lineColor: e(r([a(), p, l(a())])),
|
|
26
|
+
opacity: e(n())
|
|
27
27
|
})
|
|
28
28
|
)
|
|
29
|
-
}), f =
|
|
29
|
+
}), f = r([A, x]), L = o({
|
|
30
30
|
type: c("scatterplot"),
|
|
31
|
-
title:
|
|
32
|
-
name:
|
|
33
|
-
show: e(
|
|
31
|
+
title: o({
|
|
32
|
+
name: a(),
|
|
33
|
+
show: e(s()),
|
|
34
34
|
position: e(b)
|
|
35
35
|
}),
|
|
36
36
|
size: e(
|
|
37
|
-
|
|
38
|
-
width: e(
|
|
39
|
-
height: e(
|
|
37
|
+
o({
|
|
38
|
+
width: e(n()),
|
|
39
|
+
height: e(n())
|
|
40
40
|
})
|
|
41
41
|
),
|
|
42
42
|
legend: e(
|
|
43
|
-
|
|
44
|
-
show: e(
|
|
43
|
+
o({
|
|
44
|
+
show: e(s()),
|
|
45
45
|
position: e(T)
|
|
46
46
|
})
|
|
47
47
|
),
|
|
48
|
-
tooltips: e(
|
|
49
|
-
frame: e(
|
|
48
|
+
tooltips: e(g),
|
|
49
|
+
frame: e(o({ type: e(d) })),
|
|
50
50
|
facetSettings: e(
|
|
51
|
-
|
|
52
|
-
sharedX: e(
|
|
53
|
-
sharedY: e(
|
|
54
|
-
nRows: e(
|
|
55
|
-
nCols: e(
|
|
51
|
+
o({
|
|
52
|
+
sharedX: e(s()),
|
|
53
|
+
sharedY: e(s()),
|
|
54
|
+
nRows: e(n()),
|
|
55
|
+
nCols: e(n())
|
|
56
56
|
})
|
|
57
57
|
),
|
|
58
|
-
keyColumn:
|
|
59
|
-
x:
|
|
60
|
-
y:
|
|
61
|
-
xAxis: e(
|
|
62
|
-
yAxis: e(
|
|
63
|
-
grouping: e(
|
|
64
|
-
|
|
65
|
-
columnName:
|
|
66
|
-
order: e(
|
|
67
|
-
inheritedAes: e(
|
|
68
|
-
allowNullGroup: e(
|
|
58
|
+
keyColumn: t,
|
|
59
|
+
x: t,
|
|
60
|
+
y: t,
|
|
61
|
+
xAxis: e(S),
|
|
62
|
+
yAxis: e(S),
|
|
63
|
+
grouping: e(i(
|
|
64
|
+
o({
|
|
65
|
+
columnName: t,
|
|
66
|
+
order: e(i(m)),
|
|
67
|
+
inheritedAes: e(h),
|
|
68
|
+
allowNullGroup: e(s())
|
|
69
69
|
})
|
|
70
70
|
)),
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
dotSize: e(i(
|
|
72
|
+
o({
|
|
73
|
+
columnName: t
|
|
74
|
+
})
|
|
75
|
+
)),
|
|
76
|
+
dotShape: e(i(
|
|
77
|
+
o({
|
|
78
|
+
columnName: t,
|
|
79
|
+
order: e(i(m)),
|
|
80
|
+
inheritedAes: e(h)
|
|
81
|
+
})
|
|
82
|
+
)),
|
|
83
|
+
facetBy: e(i(t)),
|
|
84
|
+
label: e(t),
|
|
85
|
+
highlight: e(t),
|
|
74
86
|
trend: e(
|
|
75
|
-
|
|
76
|
-
color: e(e(
|
|
77
|
-
bounded: e(
|
|
87
|
+
o({
|
|
88
|
+
color: e(e(r([a(), p, l(a())]))),
|
|
89
|
+
bounded: e(s())
|
|
78
90
|
// if true: line and area bounded with min and max X value; else line bounded by chart bounds
|
|
79
91
|
})
|
|
80
92
|
),
|
|
81
|
-
layers:
|
|
93
|
+
layers: i(f)
|
|
82
94
|
});
|
|
83
95
|
export {
|
|
84
96
|
L as ScatterplotSettingsSchema
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scatterplot.js","sources":["../../src/types/scatterplot.ts"],"sourcesContent":["import { z } from 'zod';\nimport type { AesItem, categoricalAesMappingFromValueSchema, Category, DataValue } from './common';\nimport {\n AesRecordSchema, AxisSettingsSchema,\n ColumnNameSchema,\n continuousAesMappingFromValueSchema, DataValueSchema,\n FrameTypeSchema,\n LegendPositionSchema,\n LineShapeSchema,\n PointShapeSchema,\n TitlePositionSchema,\n TooltipSettingsSchema,\n} from './common';\n\ntype catAesFromColumn<ValueType extends z.ZodType> = ReturnType<typeof categoricalAesMappingFromValueSchema<ValueType>>;\ntype contAesFromColumn<ValueType extends z.ZodType> = ReturnType<typeof continuousAesMappingFromValueSchema<ValueType>>;\n\nexport type CategoricalAesFromColumn<ValueType> = z.infer<catAesFromColumn<z.ZodType<ValueType>>>;\nexport type ContinuousAesFromColumn<ValueType> = z.infer<contAesFromColumn<z.ZodType<ValueType>>>;\n\nconst InheritAesSchema = z.object({\n type: z.literal('grouping'),\n value: z.string(), // link to aes mapped to column\n palette: z.optional(z.array(z.string())) // if defined we use palette to create mapping without inheritedAes field\n});\nexport type InheritAesScatterplot = z.infer<typeof InheritAesSchema>;\n\nconst DotsLayerSchema = z.object({\n type: z.literal('dots'),\n aes: z.optional(\n z.object({\n dotFill: z.optional(z.union([z.string(), InheritAesSchema, continuousAesMappingFromValueSchema(z.string())])),\n dotShape: z.optional(z.union([PointShapeSchema, InheritAesSchema])),\n dotSize: z.optional(z.union([z.number(), continuousAesMappingFromValueSchema(z.number())])),\n })\n ),\n});\nconst CurveLayerSchema = z.object({\n type: z.literal('curve'),\n smoothing: z.optional(z.boolean()),\n aes: z.optional(\n z.object({\n lineWidth: z.optional(z.number()),\n lineShape: z.optional(LineShapeSchema),\n lineColor: z.optional(z.union([z.string(), InheritAesSchema, continuousAesMappingFromValueSchema(z.string())])),\n opacity: z.optional(z.number()),\n })\n ),\n});\nconst ScatterplotLayerSchema = z.union([DotsLayerSchema, CurveLayerSchema]);\n\nexport type DotsLayer = z.infer<typeof DotsLayerSchema>;\nexport type CurveLayer = z.infer<typeof CurveLayerSchema>;\nexport type ScatterplotLayer = z.infer<typeof ScatterplotLayerSchema>;\n\nexport const ScatterplotSettingsSchema = z.object({\n type: z.literal('scatterplot'),\n title: z.object({\n name: z.string(),\n show: z.optional(z.boolean()),\n position: z.optional(TitlePositionSchema),\n }),\n size: z.optional(\n z.object({\n width: z.optional(z.number()),\n height: z.optional(z.number()),\n })\n ),\n legend: z.optional(\n z.object({\n show: z.optional(z.boolean()),\n position: z.optional(LegendPositionSchema),\n })\n ),\n tooltips: z.optional(TooltipSettingsSchema),\n frame: z.optional(z.object({type: z.optional(FrameTypeSchema)})),\n facetSettings: z.optional(\n z.object({\n sharedX: z.optional(z.boolean()),\n sharedY: z.optional(z.boolean()),\n nRows: z.optional(z.number()),\n nCols: z.optional(z.number()),\n })\n ),\n keyColumn: ColumnNameSchema,\n x: ColumnNameSchema,\n y: ColumnNameSchema,\n xAxis: z.optional(AxisSettingsSchema),\n yAxis: z.optional(AxisSettingsSchema),\n grouping: z.optional(z.array(\n z.object({\n columnName: ColumnNameSchema,\n order: z.optional(z.array(DataValueSchema)),\n inheritedAes: z.optional(AesRecordSchema),\n allowNullGroup: z.optional(z.boolean())\n })\n )),\n facetBy: z.optional(z.array(ColumnNameSchema)),\n label: z.optional(ColumnNameSchema),\n highlight: z.optional(ColumnNameSchema),\n trend: z.optional(\n z.object({\n color: z.optional(z.optional(z.union([z.string(), InheritAesSchema, continuousAesMappingFromValueSchema(z.string())]))),\n bounded: z.optional(z.boolean()), // if true: line and area bounded with min and max X value; else line bounded by chart bounds\n })\n ),\n layers: z.array(ScatterplotLayerSchema),\n});\n\nexport type ScatterplotSettings = z.infer<typeof ScatterplotSettingsSchema>;\n\nexport type ScatterplotLegendInfo = Record<\n string,\n {\n values: Category[];\n usedAes: (keyof AesItem)[];\n aesMap: (value: Category, field: keyof AesItem) => undefined | DataValue;\n labels: Record<Category, string>;\n }\n>;\n"],"names":["InheritAesSchema","z.object","z.literal","z.string","z.optional","z.array","DotsLayerSchema","z.union","continuousAesMappingFromValueSchema","PointShapeSchema","z.number","CurveLayerSchema","z.boolean","LineShapeSchema","ScatterplotLayerSchema","ScatterplotSettingsSchema","TitlePositionSchema","LegendPositionSchema","TooltipSettingsSchema","FrameTypeSchema","ColumnNameSchema","AxisSettingsSchema","DataValueSchema","AesRecordSchema"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scatterplot.js","sources":["../../src/types/scatterplot.ts"],"sourcesContent":["import { z } from 'zod';\nimport type { AesItem, categoricalAesMappingFromValueSchema, Category, DataValue } from './common';\nimport {\n AesRecordSchema, AxisSettingsSchema,\n ColumnNameSchema,\n continuousAesMappingFromValueSchema, DataValueSchema,\n FrameTypeSchema,\n LegendPositionSchema,\n LineShapeSchema,\n PointShapeSchema,\n TitlePositionSchema,\n TooltipSettingsSchema,\n} from './common';\n\ntype catAesFromColumn<ValueType extends z.ZodType> = ReturnType<typeof categoricalAesMappingFromValueSchema<ValueType>>;\ntype contAesFromColumn<ValueType extends z.ZodType> = ReturnType<typeof continuousAesMappingFromValueSchema<ValueType>>;\n\nexport type CategoricalAesFromColumn<ValueType> = z.infer<catAesFromColumn<z.ZodType<ValueType>>>;\nexport type ContinuousAesFromColumn<ValueType> = z.infer<contAesFromColumn<z.ZodType<ValueType>>>;\n\nconst InheritAesSchema = z.object({\n type: z.literal('grouping'),\n value: z.string(), // link to aes mapped to column\n palette: z.optional(z.array(z.string())) // if defined we use palette to create mapping without inheritedAes field\n});\nexport type InheritAesScatterplot = z.infer<typeof InheritAesSchema>;\n\nconst DotsLayerSchema = z.object({\n type: z.literal('dots'),\n aes: z.optional(\n z.object({\n dotFill: z.optional(z.union([z.string(), InheritAesSchema, continuousAesMappingFromValueSchema(z.string())])),\n dotShape: z.optional(z.union([PointShapeSchema, InheritAesSchema])),\n dotSize: z.optional(z.union([z.number(), continuousAesMappingFromValueSchema(z.number())])),\n })\n ),\n});\nconst CurveLayerSchema = z.object({\n type: z.literal('curve'),\n smoothing: z.optional(z.boolean()),\n aes: z.optional(\n z.object({\n lineWidth: z.optional(z.number()),\n lineShape: z.optional(LineShapeSchema),\n lineColor: z.optional(z.union([z.string(), InheritAesSchema, continuousAesMappingFromValueSchema(z.string())])),\n opacity: z.optional(z.number()),\n })\n ),\n});\nconst ScatterplotLayerSchema = z.union([DotsLayerSchema, CurveLayerSchema]);\n\nexport type DotsLayer = z.infer<typeof DotsLayerSchema>;\nexport type CurveLayer = z.infer<typeof CurveLayerSchema>;\nexport type ScatterplotLayer = z.infer<typeof ScatterplotLayerSchema>;\n\nexport const ScatterplotSettingsSchema = z.object({\n type: z.literal('scatterplot'),\n title: z.object({\n name: z.string(),\n show: z.optional(z.boolean()),\n position: z.optional(TitlePositionSchema),\n }),\n size: z.optional(\n z.object({\n width: z.optional(z.number()),\n height: z.optional(z.number()),\n })\n ),\n legend: z.optional(\n z.object({\n show: z.optional(z.boolean()),\n position: z.optional(LegendPositionSchema),\n })\n ),\n tooltips: z.optional(TooltipSettingsSchema),\n frame: z.optional(z.object({type: z.optional(FrameTypeSchema)})),\n facetSettings: z.optional(\n z.object({\n sharedX: z.optional(z.boolean()),\n sharedY: z.optional(z.boolean()),\n nRows: z.optional(z.number()),\n nCols: z.optional(z.number()),\n })\n ),\n keyColumn: ColumnNameSchema,\n x: ColumnNameSchema,\n y: ColumnNameSchema,\n xAxis: z.optional(AxisSettingsSchema),\n yAxis: z.optional(AxisSettingsSchema),\n grouping: z.optional(z.array(\n z.object({\n columnName: ColumnNameSchema,\n order: z.optional(z.array(DataValueSchema)),\n inheritedAes: z.optional(AesRecordSchema),\n allowNullGroup: z.optional(z.boolean())\n })\n )),\n dotSize: z.optional(z.array(\n z.object({\n columnName: ColumnNameSchema,\n })\n )),\n dotShape: z.optional(z.array(\n z.object({\n columnName: ColumnNameSchema,\n order: z.optional(z.array(DataValueSchema)),\n inheritedAes: z.optional(AesRecordSchema),\n })\n )),\n facetBy: z.optional(z.array(ColumnNameSchema)),\n label: z.optional(ColumnNameSchema),\n highlight: z.optional(ColumnNameSchema),\n trend: z.optional(\n z.object({\n color: z.optional(z.optional(z.union([z.string(), InheritAesSchema, continuousAesMappingFromValueSchema(z.string())]))),\n bounded: z.optional(z.boolean()), // if true: line and area bounded with min and max X value; else line bounded by chart bounds\n })\n ),\n layers: z.array(ScatterplotLayerSchema),\n});\n\nexport type ScatterplotSettings = z.infer<typeof ScatterplotSettingsSchema>;\n\nexport type ScatterplotLegendInfo = Record<\n string,\n {\n values: Category[];\n usedAes: (keyof AesItem)[];\n aesMap: (value: Category, field: keyof AesItem) => undefined | DataValue;\n labels: Record<Category, string>;\n }\n>;\n"],"names":["InheritAesSchema","z.object","z.literal","z.string","z.optional","z.array","DotsLayerSchema","z.union","continuousAesMappingFromValueSchema","PointShapeSchema","z.number","CurveLayerSchema","z.boolean","LineShapeSchema","ScatterplotLayerSchema","ScatterplotSettingsSchema","TitlePositionSchema","LegendPositionSchema","TooltipSettingsSchema","FrameTypeSchema","ColumnNameSchema","AxisSettingsSchema","DataValueSchema","AesRecordSchema"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milaboratories/miplots4",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.168",
|
|
4
4
|
"description": "Data visualization library",
|
|
5
5
|
"author": "erohinaelena",
|
|
6
6
|
"license": "ISC",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"@types/react-dom": "^18.3.0",
|
|
69
69
|
"@milaboratories/build-configs": "^1.0.5",
|
|
70
70
|
"@milaboratories/ts-configs": "^1.2.0",
|
|
71
|
-
"@milaboratories/ts-builder": "^1.2.
|
|
71
|
+
"@milaboratories/ts-builder": "^1.2.4",
|
|
72
72
|
"eslint-config-prettier": "^10.1.5",
|
|
73
73
|
"eslint-plugin-import-helpers": "^2.0.1",
|
|
74
74
|
"@typescript-eslint/eslint-plugin": "^8.48.0",
|