@milaboratories/miplots4 1.0.167 → 1.0.169

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.
@@ -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 d = Object.defineProperty;
2
- var m = (t, e, r) => e in t ? d(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
3
- var o = (t, e, r) => m(t, typeof e != "symbol" ? e + "" : e, r);
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 f, DEFAULT_HEIGHT as s, DEFAULT_WIDTH_SMALL as n, DEFAULT_WIDTH as S, BLACK as i } from "../constants.js";
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: i,
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: i,
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 F {
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 r, h, a, c, p, u;
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: ((r = e == null ? void 0 : e.size) == null ? void 0 : r.width) ?? (this.facetBy.length ? n : S),
64
- height: ((h = e == null ? void 0 : e.size) == null ? void 0 : h.height) ?? (this.facetBy.length ? f : s)
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 && (((u = e.tooltips) == null ? void 0 : u.content) ?? []).length > 0
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 ?? i
99
- } : null, this.layers = e.layers.map((l) => {
100
- if (l.type === "dots")
101
- return new A(l);
102
- if (l.type === "curve")
103
- return new L(l);
104
- w(l, "Unknown layer type");
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
- F as ScatterplotSettingsImpl
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":"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"}
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 O = Object.defineProperty;
2
- var U = (c, h, t) => h in c ? O(c, h, { enumerable: !0, configurable: !0, writable: !0, value: t }) : c[h] = t;
3
- var m = (c, h, t) => U(c, typeof h != "symbol" ? h + "" : h, t);
4
- import { s as G } from "../_virtual/server.browser.js";
5
- import { AbstractChart as j } from "../AbstractChart.js";
6
- import { getUnknownErrorInfo as _, isErrorInfo as k } from "../types/common.js";
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 C } from "../utils/arraysAreDifferent.js";
14
- import { getKeysCombinations as S } from "../utils/getKeysCombination.js";
15
- import F from "./ChartRenderer.js";
16
- import { getDots as N } from "./dots.js";
17
- import { getLayersData as P } from "./getLayersData.js";
18
- import { getRegressionData as X } from "./linearRegression.js";
19
- import { ScatterplotSettingsImpl as w } from "./ScatterplotSettingsImpl.js";
20
- import { createLegendInfo as H, addPalettesToAesMapping as V } from "./utils/createLegendInfo.js";
21
- import { MAX_FACETS_COUNT as I, MAX_GROUPS_COUNT as x } from "../constants.js";
22
- import { getFacetLabels as Y } from "../discrete/utils/getFacetLabels.js";
23
- function q(c) {
24
- return typeof c == "object" && "type" in c && c.type === "grouping";
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 L(c, h, t) {
27
- if (h.scale === "discrete") {
28
- const e = h.keys ? h.keys : c.getColumnCategories(t.value);
29
- return { keys: e, labels: e.reduce((a, s) => {
30
- const l = (h.labels ?? {})[s] ?? (t.valueLabels ? c.getColumnValue(t.valueLabels, c.getColumnCategoryRowIndex(t.value, s)) : s);
31
- return a[s] = String(l), 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 gt extends j {
36
+ class mt extends P {
37
37
  constructor(t, e, a) {
38
38
  super(t, e);
39
- m(this, "settings");
40
- m(this, "chartRenderer");
41
- m(this, "onTooltipHintSwitch", () => {
39
+ C(this, "settings");
40
+ C(this, "chartRenderer");
41
+ C(this, "onTooltipHintSwitch", () => {
42
42
  });
43
- m(this, "calculatedData", null);
44
- this.chartRenderer = new F(), this.settings = new w(e), a && (this.onTooltipHintSwitch = a.onTooltipHintSwitch);
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 = k(e.cause) ? e.cause : _(e), this.chartRenderer.renderError(e.message), console.error(e));
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, s = this.data;
59
- this.settings = new w(e), this.data = t, this._needUpdateCalculatedDataBySettings(a, this.settings) || this._needUpdateCalculatedDataByData(s, this.data) ? this._updateData() : this._updateAesInData(), this._updateChart(), this.hasError = !1, this.errorInfo = null;
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 = k(a.cause) ? a.cause : _(a), this.chartRenderer.renderError(a.message), console.error(a));
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(), G.renderToString(this.chartRenderer.component);
68
+ return this._updateChart(), F.renderToString(this.chartRenderer.component);
69
69
  }
70
70
  _needUpdateCalculatedDataBySettings(t, e) {
71
- var a, s, u, l;
72
- return t.facetBy.some((o, n) => {
73
- var i;
74
- return o.value !== ((i = e.facetBy[n]) == null ? void 0 : i.value);
75
- }) || t.grouping.length !== e.grouping.length || C(
76
- t.grouping.map((o) => o.columnName.value),
77
- e.grouping.map((o) => o.columnName.value)
78
- ) || t.grouping.some((o, n) => {
79
- var i;
80
- return C(o.order, (i = e.grouping) == null ? void 0 : i[n].order);
81
- }) || C(t.chartSettings.xAxis.keys, e.chartSettings.xAxis.keys) || C(t.chartSettings.yAxis.keys, e.chartSettings.yAxis.keys) || (((a = t.label) == null ? void 0 : a.value) || ((s = e.label) == null ? void 0 : s.value)) && ((u = t.label) == null ? void 0 : u.value) !== ((l = e.label) == null ? void 0 : l.value) || t.layers.length !== e.layers.length || t.layers.some((o, n) => o.type !== e.layers[n].type) || !!t.trend != !!e.trend;
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), s = Object.keys(e.data);
85
- return t.id !== e.id || a.length !== s.length || a.some((u) => {
86
- var l;
87
- return t.data[u].length !== ((l = e.data[u]) == null ? void 0 : l.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: s, trend: u, layers: l, label: o, highlight: n, chartSettings: i } = this.settings, y = a.map((r) => this.data.getColumnCategories(r.value)).filter((r) => r.length > 0), f = s.map(({ columnName: r }) => this.data.getColumnCategories(r.value)).filter((r) => r.length > 0), p = y.length ? S(y) : [["null"]], d = f.length ? S(f) : [["null"]], R = a.map((r) => r.value) ?? null;
92
- this.data.setGrouping([...R]);
93
- const B = {
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
- }, E = s.map((r) => r.columnName), D = N(this.data, p, t, e, o, n, s, i.xAxis, i.yAxis, l.find((r) => r.type === "dots")), g = Object.keys(D);
97
- if (g.length > I) {
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: g.length, maxCount: I }
100
+ info: { count: f.length, maxCount: R }
101
101
  };
102
102
  throw Error(r.type, { cause: r });
103
103
  }
104
- const M = X(this.data, D, g, d, E, u), b = L(this.data, i.xAxis, t), A = L(this.data, i.yAxis, e);
105
- if (b.keys.length > x) {
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: b.keys.length, maxCount: x }
108
+ info: { count: x.keys.length, maxCount: E }
109
109
  };
110
110
  throw Error(r.type, { cause: r });
111
111
  }
112
- if (A.keys.length > x) {
112
+ if (_.keys.length > E) {
113
113
  const r = {
114
114
  type: "tooManyScatterplotGroupsY",
115
- info: { count: A.keys.length, maxCount: x }
115
+ info: { count: _.keys.length, maxCount: E }
116
116
  };
117
117
  throw Error(r.type, { cause: r });
118
118
  }
119
- const K = H(this.data, s, l), T = P(this.data, l, g, D, d, E, i.xAxis, b), v = Y(this.data, a, g, p);
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: B,
122
- dotsByFacets: D,
123
- facetKeys: g,
124
- facetKeysCombinations: p,
125
- facetLabels: v,
126
- trendsData: M,
127
- legendLabels: K,
128
- layersData: T,
129
- discreteAxisDataX: b,
130
- discreteAxisDataY: A
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: s } = this.settings, { facetKeys: u, trendsData: l } = t;
138
- u.forEach((o) => {
139
- for (let n = 0; n < s.length; n++)
140
- t.layersData[o][n].info = s[n];
141
- }), e.forEach(({ columnName: o, inheritedAes: n }) => {
142
- const i = /* @__PURE__ */ new Set(), y = {};
143
- s.forEach((f) => {
144
- f.aes && Object.entries(f.aes).forEach(([p, d]) => {
145
- q(d) && d.value === o.value && (i.add(p), d.palette && (y[p] = d.palette));
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[o.value].usedAes = [...i], t.legendLabels[o.value].aesMap = V(
148
- o,
149
- y,
150
- n
147
+ }), t.legendLabels[d.value].usedAes = [...m], t.legendLabels[d.value].aesMap = q(
148
+ d,
149
+ D,
150
+ s
151
151
  );
152
- }), l && a && Object.keys(l).forEach((o) => {
153
- l[o].forEach((n) => {
154
- n.color = a.color, n.bounded = a.bounded;
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: s, grouping: u, keyColumn: l, layers: o, trend: n } = this.settings;
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
- s,
166
+ o,
167
167
  this.calculatedData.facetKeys,
168
- this.calculatedData.facetKeys.map((i) => t[i]),
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
- l,
172
+ i,
173
173
  this.calculatedData.onlyPositive,
174
174
  this.calculatedData.legendLabels,
175
175
  this.calculatedData.layersData,
176
- u.map((i) => i.columnName),
177
- o,
178
- n,
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
- gt as ChartScatterplot
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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"}
@@ -14,10 +14,10 @@ const I = /* @__PURE__ */ (() => {
14
14
  function v(t, f, d) {
15
15
  I.clear();
16
16
  const u = d && Object.keys(d).length > 0, l = f.dotFill, e = l && l.length > 0, n = f.lineColor, C = n && n.length > 0;
17
- return (g, i) => {
17
+ return (h, i) => {
18
18
  var o;
19
- const a = u ? (o = d[g]) == null ? void 0 : o[i] : void 0;
20
- return i === "dotFill" && e ? l[I.getIndex(t, g) % l.length] ?? a : i === "lineColor" && C ? n[I.getIndex(t, g) % n.length] ?? a : a;
19
+ const a = u ? (o = d[h]) == null ? void 0 : o[i] : void 0;
20
+ return i === "dotFill" && e ? l[I.getIndex(t, h) % l.length] ?? a : i === "lineColor" && C ? n[I.getIndex(t, h) % n.length] ?? a : a;
21
21
  };
22
22
  }
23
23
  function A(t) {
@@ -25,14 +25,14 @@ function A(t) {
25
25
  }
26
26
  function F(t, f, d) {
27
27
  return f.reduce((u, l) => {
28
- const e = l.columnName, n = l.order, C = (o) => e.valueLabels ? t.getColumnValueCategory(e.valueLabels, o) : void 0, h = /* @__PURE__ */ new Set(), g = {};
28
+ const e = l.columnName, n = l.order, C = (o) => e.valueLabels ? t.getColumnValueCategory(e.valueLabels, o) : void 0, g = /* @__PURE__ */ new Set(), h = {};
29
29
  d.forEach((o) => {
30
30
  o.aes && Object.entries(o.aes).forEach(([c, r]) => {
31
- A(r) && r.value === e.value && (h.add(c), g[c] = r.palette);
31
+ A(r) && r.value === e.value && (g.add(c), h[c] = r.palette);
32
32
  });
33
33
  });
34
34
  let i = {}, a = [];
35
- if (h.has("dotFill") || h.has("dotShape")) {
35
+ if (g.has("dotFill") || g.has("dotShape") || g.has("lineColor")) {
36
36
  const o = t.getColumnCategories(e.value, !1);
37
37
  if (o.length < x) {
38
38
  i = o.reduce((r, s) => {
@@ -49,8 +49,8 @@ function F(t, f, d) {
49
49
  }
50
50
  return u[e.value] = {
51
51
  values: a,
52
- usedAes: [...h],
53
- aesMap: v(e, g, l.inheritedAes),
52
+ usedAes: [...g],
53
+ aesMap: v(e, h, l.inheritedAes),
54
54
  labels: i
55
55
  }, u;
56
56
  }, {});
@@ -1 +1 @@
1
- {"version":3,"file":"createLegendInfo.js","sources":["../../../src/scatterplot/utils/createLegendInfo.ts"],"sourcesContent":["import { MAX_SHOWN_UNIQUE_VALUES_IN_LABELS } from '../../constants';\nimport type { DataFrame } from '../../DataFrame';\nimport type {AesRecord} from '../../types';\nimport type {\n AesItem,\n Category,\n ColumnName,\n ContinuousAesFromColumn,\n InheritAesScatterplot,\n ScatterplotLayer,\n ScatterplotLegendInfo\n} from '../../types';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\n\nconst categoryIndexer = (() => {\n const map = new Map<string, Map<Category, number>>();\n const clear = () => map.clear();\n const getIndex = (columnName: ColumnName, category: Category): number => {\n let categoryMap = map.get(columnName.value);\n if (categoryMap === undefined) {\n categoryMap = new Map();\n map.set(columnName.value, categoryMap);\n }\n let index = categoryMap.get(category);\n if (index === undefined) {\n index = categoryMap.size;\n categoryMap.set(category, index);\n }\n return index;\n };\n\n return {\n clear,\n getIndex,\n };\n})();\n\nexport function addPalettesToAesMapping(\n columnName: ColumnName,\n usedAesFromPalettes: Partial<Record<keyof AesItem, string[]>>,\n inheritedAes?: AesRecord\n) {\n categoryIndexer.clear();\n const hasInheritedAes = inheritedAes && Object.keys(inheritedAes).length > 0;\n const dotFill = usedAesFromPalettes['dotFill'];\n const hasDotFill = dotFill && dotFill.length > 0;\n const lineColor = usedAesFromPalettes['lineColor'];\n const hasLineColor = lineColor && lineColor.length > 0;\n const getAesField = (category: Category, field: keyof AesItem) => {\n const inheritedResult = hasInheritedAes ? inheritedAes[category]?.[field] : undefined;\n \n if (field === 'dotFill' && hasDotFill) {\n return dotFill[categoryIndexer.getIndex(columnName, category) % dotFill.length] ?? inheritedResult;\n }\n if (field === 'lineColor' && hasLineColor) {\n return lineColor[categoryIndexer.getIndex(columnName, category) % lineColor.length] ?? inheritedResult;\n }\n \n return inheritedResult;\n };\n\n return getAesField;\n}\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}\nexport function createLegendInfo(\n data: DataFrame,\n grouping: ScatterplotSettingsImpl['grouping'],\n layers: ScatterplotLayer[],\n): ScatterplotLegendInfo {\n return grouping.reduce((res: ScatterplotLegendInfo, groupingElement) => {\n // TODO: remove String conversion\n const column = groupingElement.columnName;\n const order = groupingElement.order;\n const getValueLabel = (index: number) => {\n return column.valueLabels\n ? data.getColumnValueCategory(column.valueLabels, index)\n : undefined;\n };\n\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) return;\n \n Object.entries(layer.aes).forEach(([key, value]) => {\n if (!(isInheritMapping(value) && value.value === column.value)) return;\n \n usedAes.add(key as keyof AesItem);\n usedAesFromPalettes[key as keyof AesItem] = value.palette;\n });\n });\n let labels: Record<Category, string> = {};\n let values: Category[] = [];\n if (usedAes.has('dotFill') || usedAes.has('dotShape')) {\n const categories = data.getColumnCategories(column.value, false);\n if (categories.length < MAX_SHOWN_UNIQUE_VALUES_IN_LABELS) {\n labels = categories.reduce((res, category) => {\n const index = data.getColumnCategoryRowIndex(column.value, category);\n res[category] = getValueLabel(index) ?? category;\n return res;\n }, labels);\n const sortWeights = categories.reduce((res, v) => {\n res[v] = order?.indexOf(v) ?? -1;\n return res;\n }, {} as Record<string, number>);\n values = categories.sort((a, b) => {\n if (sortWeights[a] !== sortWeights[b]) {\n return sortWeights[a] - sortWeights[b];\n }\n return labels[a]?.localeCompare(labels[b] ?? '', 'en', {numeric: true}) ?? 0;\n });\n } else {\n values = categories;\n }\n }\n res[column.value] = {\n values,\n usedAes: [...usedAes],\n aesMap: addPalettesToAesMapping(column, usedAesFromPalettes, groupingElement.inheritedAes),\n labels,\n };\n return res;\n }, {});\n}"],"names":["categoryIndexer","map","columnName","category","categoryMap","index","addPalettesToAesMapping","usedAesFromPalettes","inheritedAes","hasInheritedAes","dotFill","hasDotFill","lineColor","hasLineColor","field","inheritedResult","_a","isInheritMapping","value","createLegendInfo","data","grouping","layers","res","groupingElement","column","order","getValueLabel","usedAes","layer","key","labels","values","categories","MAX_SHOWN_UNIQUE_VALUES_IN_LABELS","sortWeights","v","a","b"],"mappings":"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"}
1
+ {"version":3,"file":"createLegendInfo.js","sources":["../../../src/scatterplot/utils/createLegendInfo.ts"],"sourcesContent":["import { MAX_SHOWN_UNIQUE_VALUES_IN_LABELS } from '../../constants';\nimport type { DataFrame } from '../../DataFrame';\nimport type {AesRecord} from '../../types';\nimport type {\n AesItem,\n Category,\n ColumnName,\n ContinuousAesFromColumn,\n InheritAesScatterplot,\n ScatterplotLayer,\n ScatterplotLegendInfo\n} from '../../types';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\n\nconst categoryIndexer = (() => {\n const map = new Map<string, Map<Category, number>>();\n const clear = () => map.clear();\n const getIndex = (columnName: ColumnName, category: Category): number => {\n let categoryMap = map.get(columnName.value);\n if (categoryMap === undefined) {\n categoryMap = new Map();\n map.set(columnName.value, categoryMap);\n }\n let index = categoryMap.get(category);\n if (index === undefined) {\n index = categoryMap.size;\n categoryMap.set(category, index);\n }\n return index;\n };\n\n return {\n clear,\n getIndex,\n };\n})();\n\nexport function addPalettesToAesMapping(\n columnName: ColumnName,\n usedAesFromPalettes: Partial<Record<keyof AesItem, string[]>>,\n inheritedAes?: AesRecord\n) {\n categoryIndexer.clear();\n const hasInheritedAes = inheritedAes && Object.keys(inheritedAes).length > 0;\n const dotFill = usedAesFromPalettes['dotFill'];\n const hasDotFill = dotFill && dotFill.length > 0;\n const lineColor = usedAesFromPalettes['lineColor'];\n const hasLineColor = lineColor && lineColor.length > 0;\n const getAesField = (category: Category, field: keyof AesItem) => {\n const inheritedResult = hasInheritedAes ? inheritedAes[category]?.[field] : undefined;\n \n if (field === 'dotFill' && hasDotFill) {\n return dotFill[categoryIndexer.getIndex(columnName, category) % dotFill.length] ?? inheritedResult;\n }\n if (field === 'lineColor' && hasLineColor) {\n return lineColor[categoryIndexer.getIndex(columnName, category) % lineColor.length] ?? inheritedResult;\n }\n \n return inheritedResult;\n };\n\n return getAesField;\n}\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}\nexport function createLegendInfo(\n data: DataFrame,\n grouping: ScatterplotSettingsImpl['grouping'],\n layers: ScatterplotLayer[],\n): ScatterplotLegendInfo {\n return grouping.reduce((res: ScatterplotLegendInfo, groupingElement) => {\n // TODO: remove String conversion\n const column = groupingElement.columnName;\n const order = groupingElement.order;\n const getValueLabel = (index: number) => {\n return column.valueLabels\n ? data.getColumnValueCategory(column.valueLabels, index)\n : undefined;\n };\n\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) return;\n \n Object.entries(layer.aes).forEach(([key, value]) => {\n if (!(isInheritMapping(value) && value.value === column.value)) return;\n \n usedAes.add(key as keyof AesItem);\n usedAesFromPalettes[key as keyof AesItem] = value.palette;\n });\n });\n let labels: Record<Category, string> = {};\n let values: Category[] = [];\n if (usedAes.has('dotFill') || usedAes.has('dotShape') || usedAes.has('lineColor')) {\n const categories = data.getColumnCategories(column.value, false);\n if (categories.length < MAX_SHOWN_UNIQUE_VALUES_IN_LABELS) {\n labels = categories.reduce((res, category) => {\n const index = data.getColumnCategoryRowIndex(column.value, category);\n res[category] = getValueLabel(index) ?? category;\n return res;\n }, labels);\n const sortWeights = categories.reduce((res, v) => {\n res[v] = order?.indexOf(v) ?? -1;\n return res;\n }, {} as Record<string, number>);\n values = categories.sort((a, b) => {\n if (sortWeights[a] !== sortWeights[b]) {\n return sortWeights[a] - sortWeights[b];\n }\n return labels[a]?.localeCompare(labels[b] ?? '', 'en', {numeric: true}) ?? 0;\n });\n } else {\n values = categories;\n }\n }\n res[column.value] = {\n values,\n usedAes: [...usedAes],\n aesMap: addPalettesToAesMapping(column, usedAesFromPalettes, groupingElement.inheritedAes),\n labels,\n };\n return res;\n }, {});\n}"],"names":["categoryIndexer","map","columnName","category","categoryMap","index","addPalettesToAesMapping","usedAesFromPalettes","inheritedAes","hasInheritedAes","dotFill","hasDotFill","lineColor","hasLineColor","field","inheritedResult","_a","isInheritMapping","value","createLegendInfo","data","grouping","layers","res","groupingElement","column","order","getValueLabel","usedAes","layer","key","labels","values","categories","MAX_SHOWN_UNIQUE_VALUES_IN_LABELS","sortWeights","v","a","b"],"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 m, LineShapeSchema as S, ColumnNameSchema as i, AesRecordSchema as y, DataValueSchema as u, AxisSettingsSchema as h, FrameTypeSchema as g, TooltipSettingsSchema as d, LegendPositionSchema as T, TitlePositionSchema as b } from "./common.js";
2
- import { object as t, optional as e, string as o, literal as c, array as r, union as s, number as a, boolean as n } from "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js";
3
- const p = t({
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: o(),
5
+ value: a(),
6
6
  // link to aes mapped to column
7
- palette: e(r(o()))
7
+ palette: e(i(a()))
8
8
  // if defined we use palette to create mapping without inheritedAes field
9
- }), A = t({
9
+ }), A = o({
10
10
  type: c("dots"),
11
11
  aes: e(
12
- t({
13
- dotFill: e(s([o(), p, l(o())])),
14
- dotShape: e(s([m, p])),
15
- dotSize: e(s([a(), l(a())]))
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 = t({
18
+ }), x = o({
19
19
  type: c("curve"),
20
- smoothing: e(n()),
20
+ smoothing: e(s()),
21
21
  aes: e(
22
- t({
23
- lineWidth: e(a()),
24
- lineShape: e(S),
25
- lineColor: e(s([o(), p, l(o())])),
26
- opacity: e(a())
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 = s([A, x]), L = t({
29
+ }), f = r([A, x]), L = o({
30
30
  type: c("scatterplot"),
31
- title: t({
32
- name: o(),
33
- show: e(n()),
31
+ title: o({
32
+ name: a(),
33
+ show: e(s()),
34
34
  position: e(b)
35
35
  }),
36
36
  size: e(
37
- t({
38
- width: e(a()),
39
- height: e(a())
37
+ o({
38
+ width: e(n()),
39
+ height: e(n())
40
40
  })
41
41
  ),
42
42
  legend: e(
43
- t({
44
- show: e(n()),
43
+ o({
44
+ show: e(s()),
45
45
  position: e(T)
46
46
  })
47
47
  ),
48
- tooltips: e(d),
49
- frame: e(t({ type: e(g) })),
48
+ tooltips: e(g),
49
+ frame: e(o({ type: e(d) })),
50
50
  facetSettings: e(
51
- t({
52
- sharedX: e(n()),
53
- sharedY: e(n()),
54
- nRows: e(a()),
55
- nCols: e(a())
51
+ o({
52
+ sharedX: e(s()),
53
+ sharedY: e(s()),
54
+ nRows: e(n()),
55
+ nCols: e(n())
56
56
  })
57
57
  ),
58
- keyColumn: i,
59
- x: i,
60
- y: i,
61
- xAxis: e(h),
62
- yAxis: e(h),
63
- grouping: e(r(
64
- t({
65
- columnName: i,
66
- order: e(r(u)),
67
- inheritedAes: e(y),
68
- allowNullGroup: e(n())
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
- facetBy: e(r(i)),
72
- label: e(i),
73
- highlight: e(i),
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
- t({
76
- color: e(e(s([o(), p, l(o())]))),
77
- bounded: e(n())
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: r(f)
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.167",
3
+ "version": "1.0.169",
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.1",
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",