@milaboratories/miplots4 1.0.165 → 1.0.167

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.
Files changed (60) hide show
  1. package/dist/common/Tooltip.d.ts +2 -1
  2. package/dist/common/Tooltip.js +147 -143
  3. package/dist/common/Tooltip.js.map +1 -1
  4. package/dist/discrete/DiscreteSettingsImpl.d.ts +11 -31
  5. package/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
  6. package/dist/discrete/components/Chart.js +143 -143
  7. package/dist/discrete/components/Chart.js.map +1 -1
  8. package/dist/discrete/index.d.ts +2 -0
  9. package/dist/discrete/index.js +127 -123
  10. package/dist/discrete/index.js.map +1 -1
  11. package/dist/discrete/utils/getFacetLabels.d.ts +3 -0
  12. package/dist/discrete/utils/getFacetLabels.js +16 -0
  13. package/dist/discrete/utils/getFacetLabels.js.map +1 -0
  14. package/dist/heatmap/components/tooltipUtils.js +15 -15
  15. package/dist/heatmap/components/tooltipUtils.js.map +1 -1
  16. package/dist/heatmap/fillCellsData.js +88 -85
  17. package/dist/heatmap/fillCellsData.js.map +1 -1
  18. package/dist/histogram/getHistogramData.js +42 -41
  19. package/dist/histogram/getHistogramData.js.map +1 -1
  20. package/dist/histogram/index.d.ts +1 -0
  21. package/dist/histogram/index.js +59 -57
  22. package/dist/histogram/index.js.map +1 -1
  23. package/dist/scatterplot/components/ChartTooltip.js +34 -33
  24. package/dist/scatterplot/components/ChartTooltip.js.map +1 -1
  25. package/dist/scatterplot/components/ChartsGroup.js +31 -31
  26. package/dist/scatterplot/components/ChartsGroup.js.map +1 -1
  27. package/dist/scatterplot/dots.d.ts +2 -2
  28. package/dist/scatterplot/dots.js +9 -9
  29. package/dist/scatterplot/dots.js.map +1 -1
  30. package/dist/scatterplot/index.d.ts +1 -0
  31. package/dist/scatterplot/index.js +61 -59
  32. package/dist/scatterplot/index.js.map +1 -1
  33. package/dist/scatterplot/utils/sortDotsByGrouping.d.ts +2 -1
  34. package/dist/scatterplot/utils/sortDotsByGrouping.js +22 -11
  35. package/dist/scatterplot/utils/sortDotsByGrouping.js.map +1 -1
  36. package/dist/scatterplot-umap/ChartRenderer.d.ts +1 -1
  37. package/dist/scatterplot-umap/ChartRenderer.js +17 -17
  38. package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  39. package/dist/scatterplot-umap/components/SVGLayer.js +49 -49
  40. package/dist/scatterplot-umap/components/SVGLayer.js.map +1 -1
  41. package/dist/scatterplot-umap/components/UpperSVG.d.ts +1 -1
  42. package/dist/scatterplot-umap/components/UpperSVG.js +39 -38
  43. package/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
  44. package/dist/scatterplot-umap/index.js +87 -77
  45. package/dist/scatterplot-umap/index.js.map +1 -1
  46. package/dist/types/bubble.js +32 -37
  47. package/dist/types/bubble.js.map +1 -1
  48. package/dist/types/common.d.ts +41 -0
  49. package/dist/types/common.js +39 -35
  50. package/dist/types/common.js.map +1 -1
  51. package/dist/types/discrete.d.ts +680 -70
  52. package/dist/types/discrete.js +141 -141
  53. package/dist/types/discrete.js.map +1 -1
  54. package/dist/types/heatmap.js +54 -59
  55. package/dist/types/heatmap.js.map +1 -1
  56. package/dist/types/scatterplot-umap.js +19 -24
  57. package/dist/types/scatterplot-umap.js.map +1 -1
  58. package/dist/types/scatterplot.js +41 -46
  59. package/dist/types/scatterplot.js.map +1 -1
  60. package/package.json +1 -1
@@ -1,19 +1,29 @@
1
1
  var R = Object.defineProperty;
2
- var A = (c, p, t) => p in c ? R(c, p, { enumerable: !0, configurable: !0, writable: !0, value: t }) : c[p] = t;
3
- var f = (c, p, t) => A(c, typeof p != "symbol" ? p + "" : p, t);
4
- import { AbstractChart as T } from "../AbstractChart.js";
5
- import { createLegendInfo as X, addPalettesToAesMapping as Y } from "../scatterplot/utils/createLegendInfo.js";
6
- import { formatColumnValue as B } from "../scatterplot/utils/formatColumnValue.js";
7
- import { sortDotsByGrouping as I } from "../scatterplot/utils/sortDotsByGrouping.js";
8
- import { arraysAreDifferent as b } from "../utils/arraysAreDifferent.js";
9
- import P from "./ChartRenderer.js";
10
- import { SCATTERPLOT_CONTROLS_EVENTS as m } from "./constants.js";
11
- import { ScatterplotUmapSettingsImpl as w } from "./SettingsImpl.js";
12
- import { format as V } from "../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js";
13
- function Z(c) {
14
- return typeof c == "object" && "type" in c && c.type === "grouping";
2
+ var T = (n, i, t) => i in n ? R(n, i, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[i] = t;
3
+ var f = (n, i, t) => T(n, typeof i != "symbol" ? i + "" : i, t);
4
+ import { AbstractChart as X } from "../AbstractChart.js";
5
+ import { createLegendInfo as Y, addPalettesToAesMapping as B } from "../scatterplot/utils/createLegendInfo.js";
6
+ import { formatColumnValue as I } from "../scatterplot/utils/formatColumnValue.js";
7
+ import { sortDotsByGrouping as P } from "../scatterplot/utils/sortDotsByGrouping.js";
8
+ import { isContinuousAes as D } from "../types/common.js";
9
+ import "../types/discrete.js";
10
+ import "../types/scatterplot.js";
11
+ import "../types/heatmap.js";
12
+ import "../types/dendro.js";
13
+ import "../types/histogram.js";
14
+ import "../types/bubble.js";
15
+ import { arraysAreDifferent as _ } from "../utils/arraysAreDifferent.js";
16
+ import V from "./ChartRenderer.js";
17
+ import { SCATTERPLOT_CONTROLS_EVENTS as p } from "./constants.js";
18
+ import { ScatterplotUmapSettingsImpl as L } from "./SettingsImpl.js";
19
+ import { format as Z } from "../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js";
20
+ function F(n) {
21
+ return typeof n == "object" && "type" in n && n.type === "grouping";
15
22
  }
16
- class H extends T {
23
+ function O(n, i) {
24
+ return typeof n == "number" && typeof i == "number" ? n !== i : !n && i || !i && n ? !0 : D(n) && D(i) ? n.range[0] !== i.range[0] || n.range[1] !== i.range[1] : !1;
25
+ }
26
+ class ot extends X {
17
27
  constructor(t, a, e) {
18
28
  super(t, a);
19
29
  f(this, "settings");
@@ -28,7 +38,7 @@ class H extends T {
28
38
  f(this, "onZoomChange", () => {
29
39
  });
30
40
  f(this, "calculatedData", null);
31
- this.settings = new w(a), this.chartRenderer = new P(), e && (this.onPolygonUpdate = e.onPolygonUpdate, this.onTooltipHintSwitch = e.onTooltipHintSwitch, this.onLassoControlsStateUpdate = e.onLassoControlsStateUpdate, this.onZoomChange = e.onZoomChange);
41
+ this.settings = new L(a), this.chartRenderer = new V(), e && (this.onPolygonUpdate = e.onPolygonUpdate, this.onTooltipHintSwitch = e.onTooltipHintSwitch, this.onLassoControlsStateUpdate = e.onLassoControlsStateUpdate, this.onZoomChange = e.onZoomChange);
32
42
  }
33
43
  mount(t) {
34
44
  try {
@@ -42,94 +52,94 @@ class H extends T {
42
52
  }
43
53
  updateSettingsAndData(t, a) {
44
54
  try {
45
- const e = this.settings, s = this.data;
46
- this.settings = new w(a), this.data = t, this._needUpdateCalculatedDataBySettings(e, this.settings) || this._needUpdateCalculatedDataByData(s, this.data) ? this._updateData() : this._updateAesInData();
47
- const n = e.layers.find((o) => o.type === "dots"), i = this.settings.layers.find((o) => o.type === "dots");
48
- n && i && n.aes.dotSize !== i.aes.dotSize && typeof n.aes.dotSize == "number" && typeof i.aes.dotSize == "number" && this.chartRenderer.updatePointSize(), this._updateChart(), this.hasError = !1;
55
+ const e = this.settings, o = this.data;
56
+ this.settings = new L(a), this.data = t, this._needUpdateCalculatedDataBySettings(e, this.settings) || this._needUpdateCalculatedDataByData(o, this.data) ? this._updateData() : this._updateAesInData();
57
+ const d = e.layers.find((s) => s.type === "dots"), r = this.settings.layers.find((s) => s.type === "dots");
58
+ O(d.aes.dotSize, r.aes.dotSize) && this.calculatedData && this.chartRenderer.updatePointSize(this.calculatedData.legendLabels, this.settings.layers), this._updateChart(), this.hasError = !1;
49
59
  } catch (e) {
50
60
  this.hasError = !0, e instanceof Error && (this.chartRenderer.renderError(e.message), console.error(e));
51
61
  }
52
62
  }
53
63
  updateChartState(t, a) {
54
64
  var e;
55
- if (t === "polygon" && (this.chartRenderer.polygons = a, this._updateChart()), t === m.lassoDelete && document) {
56
- const s = new CustomEvent(m.lassoDelete);
57
- document.dispatchEvent(s);
65
+ if (t === "polygon" && (this.chartRenderer.polygons = a, this._updateChart()), t === p.lassoDelete && document) {
66
+ const o = new CustomEvent(p.lassoDelete);
67
+ document.dispatchEvent(o);
58
68
  }
59
- if (t === m.lassoSelectMode && document) {
60
- const s = new CustomEvent(m.lassoSelectMode, { detail: a });
61
- document.dispatchEvent(s);
69
+ if (t === p.lassoSelectMode && document) {
70
+ const o = new CustomEvent(p.lassoSelectMode, { detail: a });
71
+ document.dispatchEvent(o);
62
72
  }
63
- if (t === m.lassoForward && document) {
64
- const s = new CustomEvent(m.lassoForward);
65
- document.dispatchEvent(s);
73
+ if (t === p.lassoForward && document) {
74
+ const o = new CustomEvent(p.lassoForward);
75
+ document.dispatchEvent(o);
66
76
  }
67
- if (t === m.lassoBack && document) {
68
- const s = new CustomEvent(m.lassoBack);
69
- document.dispatchEvent(s);
77
+ if (t === p.lassoBack && document) {
78
+ const o = new CustomEvent(p.lassoBack);
79
+ document.dispatchEvent(o);
70
80
  }
71
- t === m.resetViewport && (this.chartRenderer.resetZoom(this.settings.chartSettings.xAxis, this.settings.chartSettings.yAxis, (e = this.calculatedData) == null ? void 0 : e.dotsExtents), this.onZoomChange(!1));
81
+ t === p.resetViewport && (this.chartRenderer.resetZoom(this.settings.chartSettings.xAxis, this.settings.chartSettings.yAxis, (e = this.calculatedData) == null ? void 0 : e.dotsExtents), this.onZoomChange(!1));
72
82
  }
73
83
  export() {
74
84
  return console.warn("export not implemented"), "";
75
85
  }
76
86
  _needUpdateCalculatedDataBySettings(t, a) {
77
- var e, s, n, i;
78
- return b(
79
- t.grouping.map((o) => o.columnName.value),
80
- a.grouping.map((o) => o.columnName.value)
81
- ) || t.grouping.some((o, u) => {
87
+ var e, o, d, r;
88
+ return _(
89
+ t.grouping.map((s) => s.columnName.value),
90
+ a.grouping.map((s) => s.columnName.value)
91
+ ) || t.grouping.some((s, m) => {
82
92
  var g;
83
- return b(o.order, (g = a.grouping) == null ? void 0 : g[u].order);
84
- }) || t.layers.length !== a.layers.length || t.layers.some((o, u) => o.type !== a.layers[u].type) || (((e = t.label) == null ? void 0 : e.value) || ((s = a.label) == null ? void 0 : s.value)) && ((n = t.label) == null ? void 0 : n.value) !== ((i = a.label) == null ? void 0 : i.value);
93
+ return _(s.order, (g = a.grouping) == null ? void 0 : g[m].order);
94
+ }) || t.layers.length !== a.layers.length || t.layers.some((s, m) => s.type !== a.layers[m].type) || (((e = t.label) == null ? void 0 : e.value) || ((o = a.label) == null ? void 0 : o.value)) && ((d = t.label) == null ? void 0 : d.value) !== ((r = a.label) == null ? void 0 : r.value);
85
95
  }
86
96
  _needUpdateCalculatedDataByData(t, a) {
87
- const e = Object.keys(t.data), s = Object.keys(a.data);
88
- return t.id !== a.id || e.length !== s.length || e.some((n) => {
89
- var i;
90
- return t.data[n].length !== ((i = a.data[n]) == null ? void 0 : i.length);
97
+ const e = Object.keys(t.data), o = Object.keys(a.data);
98
+ return t.id !== a.id || e.length !== o.length || e.some((d) => {
99
+ var r;
100
+ return t.data[d].length !== ((r = a.data[d]) == null ? void 0 : r.length);
91
101
  });
92
102
  }
93
103
  _updateData() {
94
- var D;
95
- const { x: t, y: a, label: e, highlight: s, grouping: n, layers: i } = this.settings, o = {
104
+ var w;
105
+ const { x: t, y: a, label: e, highlight: o, grouping: d, layers: r } = this.settings, s = {
96
106
  minX: 1 / 0,
97
107
  maxX: -1 / 0,
98
108
  minY: 1 / 0,
99
109
  maxY: -1 / 0
100
- }, u = i.some((r) => r.type === "curve"), g = /* @__PURE__ */ new Set(), h = {}, C = [], _ = e != null && e.format ? V(e.format) : void 0;
101
- for (let r = 0; r < this.data.rowsCount; r++) {
102
- const d = this.data.getColumnValue(t.value, r), l = this.data.getColumnValue(a.value, r);
103
- if (typeof d != "number" || typeof l != "number" || !isFinite(d) || !isFinite(l))
110
+ }, m = r.some((l) => l.type === "curve"), g = /* @__PURE__ */ new Set(), u = {}, C = [], S = e != null && e.format ? Z(e.format) : void 0;
111
+ for (let l = 0; l < this.data.rowsCount; l++) {
112
+ const h = this.data.getColumnValue(t.value, l), c = this.data.getColumnValue(a.value, l);
113
+ if (typeof h != "number" || typeof c != "number" || !isFinite(h) || !isFinite(c))
104
114
  continue;
105
- d < o.minX && (o.minX = d), d > o.maxX && (o.maxX = d), l < o.minY && (o.minY = l), l > o.maxY && (o.maxY = l);
106
- const x = s ? !this.data.getColumnValue(s.value, r) : !1, v = {
107
- x: d,
108
- y: l,
109
- idx: r,
110
- label: B(this.data, r, e, _),
115
+ h < s.minX && (s.minX = h), h > s.maxX && (s.maxX = h), c < s.minY && (s.minY = c), c > s.maxY && (s.maxY = c);
116
+ const x = o ? !this.data.getColumnValue(o.value, l) : !1, v = {
117
+ x: h,
118
+ y: c,
119
+ idx: l,
120
+ label: I(this.data, l, e, S),
111
121
  dimmed: x
112
122
  };
113
- if (u) {
114
- const y = n.map(({ columnName: L }) => this.data.getColumnValue(L.value, r)).join("_");
115
- g.add(y), h[y] || (h[y] = []), h[y].push(v);
123
+ if (m) {
124
+ const y = d.map(({ columnName: A }) => this.data.getColumnValue(A.value, l)).join("_");
125
+ g.add(y), u[y] || (u[y] = []), u[y].push(v);
116
126
  }
117
127
  C.push(v);
118
128
  }
119
129
  const E = [...g];
120
- u && E.forEach((r) => {
121
- h[r].sort((d, l) => d.x - l.x);
122
- }), I(this.data, C, n, s);
123
- const U = X(this.data, n, i), S = ((D = this.calculatedData) == null ? void 0 : D.dotsExtents) ?? null;
124
- if (S) {
125
- const { minX: r, maxX: d, minY: l, maxY: x } = S;
126
- (r !== o.minX || d !== o.maxX || l !== o.minY || x !== o.maxY) && this.onZoomChange(!0);
130
+ m && E.forEach((l) => {
131
+ u[l].sort((h, c) => h.x - c.x);
132
+ }), P(this.data, C, d, o, r.find((l) => l.type === "dots"));
133
+ const U = Y(this.data, d, r), b = ((w = this.calculatedData) == null ? void 0 : w.dotsExtents) ?? null;
134
+ if (b) {
135
+ const { minX: l, maxX: h, minY: c, maxY: x } = b;
136
+ (l !== s.minX || h !== s.maxX || c !== s.minY || x !== s.maxY) && this.onZoomChange(!0);
127
137
  }
128
138
  this.calculatedData = {
129
139
  dots: C,
130
- dotsByGrouping: h,
140
+ dotsByGrouping: u,
131
141
  groupingKeys: E,
132
- dotsExtents: o,
142
+ dotsExtents: s,
133
143
  legendLabels: U
134
144
  };
135
145
  }
@@ -138,19 +148,19 @@ class H extends T {
138
148
  if (!t)
139
149
  return;
140
150
  const { layers: a, grouping: e } = this.settings;
141
- e.forEach(({ columnName: s, inheritedAes: n }) => {
142
- const i = /* @__PURE__ */ new Set(), o = {};
143
- a.forEach((u) => {
144
- u.aes && Object.entries(u.aes).forEach(([g, h]) => {
145
- Z(h) && h.value === s.value && (i.add(g), h.palette && (o[g] = h.palette));
151
+ e.forEach(({ columnName: o, inheritedAes: d }) => {
152
+ const r = /* @__PURE__ */ new Set(), s = {};
153
+ a.forEach((m) => {
154
+ m.aes && Object.entries(m.aes).forEach(([g, u]) => {
155
+ F(u) && u.value === o.value && (r.add(g), u.palette && (s[g] = u.palette));
146
156
  });
147
- }), t.legendLabels[s.value].usedAes = [...i], t.legendLabels[s.value].aesMap = Y(s, o, n);
157
+ }), t.legendLabels[o.value].usedAes = [...r], t.legendLabels[o.value].aesMap = B(o, s, d);
148
158
  });
149
159
  }
150
160
  _updateChart() {
151
161
  if (!this.calculatedData)
152
162
  return;
153
- const { id: t, chartSettings: a, keyColumn: e, layers: s, grouping: n } = this.settings;
163
+ const { id: t, chartSettings: a, keyColumn: e, layers: o, grouping: d } = this.settings;
154
164
  this.chartRenderer.render(
155
165
  this.data,
156
166
  t,
@@ -159,9 +169,9 @@ class H extends T {
159
169
  this.calculatedData.dots,
160
170
  this.calculatedData.dotsExtents,
161
171
  this.calculatedData.dotsByGrouping,
162
- s,
172
+ o,
163
173
  this.calculatedData.legendLabels,
164
- n.map((i) => i.columnName),
174
+ d.map((r) => r.columnName),
165
175
  this.onPolygonUpdate,
166
176
  this.onTooltipHintSwitch,
167
177
  this.onLassoControlsStateUpdate,
@@ -170,6 +180,6 @@ class H extends T {
170
180
  }
171
181
  }
172
182
  export {
173
- H as ChartScatterplotUmap
183
+ ot as ChartScatterplotUmap
174
184
  };
175
185
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/scatterplot-umap/index.ts"],"sourcesContent":["import {format} from 'd3-format';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport { addPalettesToAesMapping, createLegendInfo } from '../scatterplot/utils/createLegendInfo';\nimport {formatColumnValue} from '../scatterplot/utils/formatColumnValue';\nimport {sortDotsByGrouping} from '../scatterplot/utils/sortDotsByGrouping';\nimport type { AesItem, ContinuousAesFromColumn, InheritAesScatterplot, ScatterplotEventHandlers } from '../types';\nimport type { ScatterplotUmapLegendInfo, ScatterplotUmapSettings } from '../types/scatterplot-umap';\nimport {arraysAreDifferent} from '../utils/arraysAreDifferent';\nimport ChartRenderer from './ChartRenderer';\nimport { SCATTERPLOT_CONTROLS_EVENTS } from './constants';\nimport type { DotsLayer } from './SettingsImpl';\nimport { ScatterplotUmapSettingsImpl } from './SettingsImpl';\nimport type { Dot, DotsExtents, LassoControlsState, LassoMode, Polygon } from './types';\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\nexport class ChartScatterplotUmap extends AbstractChart {\n settings: ScatterplotUmapSettingsImpl;\n chartRenderer: ChartRenderer;\n\n onPolygonUpdate: (data: number[], polygons: Polygon[]) => void = () => undefined; // dots indexes from input data\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n onLassoControlsStateUpdate: (v: LassoControlsState) => void = () => undefined;\n onZoomChange: (isZoomChanged: boolean) => void = () => undefined;\n\n calculatedData: {\n dots: Dot[],\n groupingKeys: string[],\n dotsByGrouping: Record<string, Dot[]>,\n dotsExtents: DotsExtents,\n legendLabels: ScatterplotUmapLegendInfo,\n } | null = null;\n\n constructor(data: DataFrame, settings: ScatterplotUmapSettings, eventHandlers?: ScatterplotEventHandlers) {\n super(data, settings);\n\n this.settings = new ScatterplotUmapSettingsImpl(settings);\n this.chartRenderer = new ChartRenderer();\n\n if (eventHandlers) {\n this.onPolygonUpdate = eventHandlers.onPolygonUpdate;\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch;\n this.onLassoControlsStateUpdate = eventHandlers.onLassoControlsStateUpdate;\n this.onZoomChange = eventHandlers.onZoomChange;\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 } catch (err) {\n this.hasError = true;\n console.error(err);\n if (err instanceof Error) {\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: ScatterplotUmapSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new ScatterplotUmapSettingsImpl(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\n // for some reason it's not enough for size updating to do like with fillColor\n const prevLayer = previousSettings.layers.find(l => l.type === 'dots') as DotsLayer;\n const currentLayer = this.settings.layers.find(l => l.type === 'dots') as DotsLayer;\n if (prevLayer && currentLayer && prevLayer.aes.dotSize !== currentLayer.aes.dotSize\n && typeof prevLayer.aes.dotSize === 'number' && typeof currentLayer.aes.dotSize === 'number') {\n this.chartRenderer.updatePointSize();\n }\n this._updateChart();\n this.hasError = false;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(field: string, value: unknown) {\n if (field === 'polygon') {\n this.chartRenderer.polygons = value as Polygon[];\n this._updateChart();\n }\n if (field === SCATTERPLOT_CONTROLS_EVENTS.lassoDelete) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_CONTROLS_EVENTS.lassoDelete);\n document.dispatchEvent(event);\n }}\n if (field === SCATTERPLOT_CONTROLS_EVENTS.lassoSelectMode) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_CONTROLS_EVENTS.lassoSelectMode, {detail: value as LassoMode});\n document.dispatchEvent(event);\n }\n }\n if (field === SCATTERPLOT_CONTROLS_EVENTS.lassoForward) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_CONTROLS_EVENTS.lassoForward);\n document.dispatchEvent(event);\n }\n }\n if (field === SCATTERPLOT_CONTROLS_EVENTS.lassoBack) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_CONTROLS_EVENTS.lassoBack);\n document.dispatchEvent(event);\n }\n }\n if (field === SCATTERPLOT_CONTROLS_EVENTS.resetViewport) {\n this.chartRenderer.resetZoom(this.settings.chartSettings.xAxis, this.settings.chartSettings.yAxis, this.calculatedData?.dotsExtents);\n this.onZoomChange(false);\n }\n }\n\n export(): string {\n console.warn('export not implemented');\n return '';\n // this._updateChart();\n // return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: ScatterplotUmapSettingsImpl, settings: ScatterplotUmapSettingsImpl) {\n return (\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 prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n (prevSettings.label?.value || settings.label?.value) && prevSettings.label?.value !== settings.label?.value\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, label, highlight, grouping, layers} = this.settings;\n\n const dotsExtents = {\n minX: Infinity,\n maxX: -Infinity,\n minY: Infinity,\n maxY: -Infinity,\n };\n\n const hasCurve = layers.some(layer => layer.type === 'curve');\n const groupingKeysSet = new Set<string>();\n const dotsByGrouping:Record<string, Dot[]> = {};\n\n const dots: Dot[] = [];\n const labelFormatter = label?.format ? format(label.format) : undefined;\n\n for (let idx = 0; idx < this.data.rowsCount; idx++) {\n const xv = this.data.getColumnValue(x.value, idx);\n const yv = this.data.getColumnValue(y.value, idx);\n\n if (typeof xv !== 'number' || typeof yv !== 'number') {\n continue;\n }\n if (!isFinite(xv) || !isFinite(yv)) {\n continue;\n }\n\n if (xv < dotsExtents.minX) {\n dotsExtents.minX = xv;\n }\n if (xv > dotsExtents.maxX) {\n dotsExtents.maxX = xv;\n }\n if (yv < dotsExtents.minY) {\n dotsExtents.minY = yv;\n }\n if (yv > dotsExtents.maxY) {\n dotsExtents.maxY = yv;\n }\n\n const dimmed = highlight ? !this.data.getColumnValue(highlight.value, idx) : false;\n const dot: Dot = {\n x: xv,\n y: yv,\n idx,\n label: formatColumnValue(this.data, idx, label, labelFormatter),\n dimmed\n };\n if (hasCurve) {\n const groupingKey = grouping.map(({columnName}) => this.data.getColumnValue(columnName.value, idx)).join('_');\n groupingKeysSet.add(groupingKey);\n if (!dotsByGrouping[groupingKey]) {\n dotsByGrouping[groupingKey] = [];\n }\n dotsByGrouping[groupingKey].push(dot);\n }\n dots.push(dot);\n }\n\n const groupingKeys = [...groupingKeysSet];\n if (hasCurve) {\n groupingKeys.forEach(key => {\n dotsByGrouping[key].sort((a, b) => a.x - b.x);\n });\n }\n sortDotsByGrouping(this.data, dots, grouping, highlight);\n const legendLabels = createLegendInfo(this.data, grouping, layers);\n\n const prevDotExtents = this.calculatedData?.dotsExtents ?? null;\n if (prevDotExtents) {\n const {minX, maxX, minY, maxY} = prevDotExtents;\n if (minX !== dotsExtents.minX || maxX !== dotsExtents.maxX \n || minY !== dotsExtents.minY || maxY !== dotsExtents.maxY) {\n this.onZoomChange(true); // dots viewport is changed but it will not be changed automatically; this call is to undisable reset button\n }\n }\n this.calculatedData = {\n dots,\n dotsByGrouping,\n groupingKeys,\n dotsExtents,\n legendLabels,\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n const {layers, grouping} = this.settings;\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) return;\n \n Object.entries(layer.aes).forEach(([key, value]) => {\n if (!(isInheritMapping(value) && value.value === columnName.value)) return;\n usedAes.add(key as keyof AesItem);\n if (value.palette) {\n usedAesFromPalettes[key as keyof AesItem] = value.palette;\n }\n });\n });\n\n calculated.legendLabels[columnName.value].usedAes = [...usedAes];\n calculated.legendLabels[columnName.value].aesMap = addPalettesToAesMapping(columnName, usedAesFromPalettes, inheritedAes);\n });\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, keyColumn, layers, grouping} = this.settings;\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n keyColumn,\n this.calculatedData.dots,\n this.calculatedData.dotsExtents,\n this.calculatedData.dotsByGrouping,\n layers,\n this.calculatedData.legendLabels,\n grouping.map(v => v.columnName),\n this.onPolygonUpdate,\n this.onTooltipHintSwitch,\n this.onLassoControlsStateUpdate,\n this.onZoomChange\n );\n }\n}\n"],"names":["isInheritMapping","value","ChartScatterplotUmap","AbstractChart","data","settings","eventHandlers","__publicField","ScatterplotUmapSettingsImpl","ChartRenderer","node","err","previousSettings","previousData","prevLayer","l","currentLayer","field","SCATTERPLOT_CONTROLS_EVENTS","event","_a","prevSettings","arraysAreDifferent","v","idx","_b","_c","_d","prevData","prevKeys","keys","key","x","y","label","highlight","grouping","layers","dotsExtents","hasCurve","layer","groupingKeysSet","dotsByGrouping","dots","labelFormatter","format","xv","yv","dimmed","dot","formatColumnValue","groupingKey","columnName","groupingKeys","a","b","sortDotsByGrouping","legendLabels","createLegendInfo","prevDotExtents","minX","maxX","minY","maxY","calculated","inheritedAes","usedAes","usedAesFromPalettes","addPalettesToAesMapping","id","chartSettings","keyColumn"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/scatterplot-umap/index.ts"],"sourcesContent":["import {format} from 'd3-format';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport { addPalettesToAesMapping, createLegendInfo } from '../scatterplot/utils/createLegendInfo';\nimport {formatColumnValue} from '../scatterplot/utils/formatColumnValue';\nimport {sortDotsByGrouping} from '../scatterplot/utils/sortDotsByGrouping';\nimport { type AesItem, type ContinuousAesFromColumn, type InheritAesScatterplot, isContinuousAes, type ScatterplotEventHandlers } from '../types';\nimport type { ScatterplotUmapLegendInfo, ScatterplotUmapSettings } from '../types/scatterplot-umap';\nimport {arraysAreDifferent} from '../utils/arraysAreDifferent';\nimport ChartRenderer from './ChartRenderer';\nimport { SCATTERPLOT_CONTROLS_EVENTS } from './constants';\nimport type { DotsLayer } from './SettingsImpl';\nimport { ScatterplotUmapSettingsImpl } from './SettingsImpl';\nimport type { Dot, DotsExtents, LassoControlsState, LassoMode, Polygon } from './types';\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 dotSizeChanged(prevDotSize?: number | ContinuousAesFromColumn<number>, currentDotSize?: number | ContinuousAesFromColumn<number> ) {\n if (typeof prevDotSize === 'number' && typeof currentDotSize === 'number') {\n return prevDotSize !== currentDotSize;\n }\n if ((!prevDotSize && currentDotSize) || (!currentDotSize && prevDotSize)) {\n return true;\n }\n if (isContinuousAes(prevDotSize) && isContinuousAes(currentDotSize)) {\n return prevDotSize.range[0] !== currentDotSize.range[0] || prevDotSize.range[1] !== currentDotSize.range[1];\n }\n return false;\n}\n\nexport class ChartScatterplotUmap extends AbstractChart {\n settings: ScatterplotUmapSettingsImpl;\n chartRenderer: ChartRenderer;\n\n onPolygonUpdate: (data: number[], polygons: Polygon[]) => void = () => undefined; // dots indexes from input data\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n onLassoControlsStateUpdate: (v: LassoControlsState) => void = () => undefined;\n onZoomChange: (isZoomChanged: boolean) => void = () => undefined;\n\n calculatedData: {\n dots: Dot[],\n groupingKeys: string[],\n dotsByGrouping: Record<string, Dot[]>,\n dotsExtents: DotsExtents,\n legendLabels: ScatterplotUmapLegendInfo,\n } | null = null;\n\n constructor(data: DataFrame, settings: ScatterplotUmapSettings, eventHandlers?: ScatterplotEventHandlers) {\n super(data, settings);\n\n this.settings = new ScatterplotUmapSettingsImpl(settings);\n this.chartRenderer = new ChartRenderer();\n\n if (eventHandlers) {\n this.onPolygonUpdate = eventHandlers.onPolygonUpdate;\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch;\n this.onLassoControlsStateUpdate = eventHandlers.onLassoControlsStateUpdate;\n this.onZoomChange = eventHandlers.onZoomChange;\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 } catch (err) {\n this.hasError = true;\n console.error(err);\n if (err instanceof Error) {\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: ScatterplotUmapSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new ScatterplotUmapSettingsImpl(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\n // for some reason it's not enough for size updating to do like with fillColor\n const prevLayer = previousSettings.layers.find(l => l.type === 'dots') as DotsLayer;\n const currentLayer = this.settings.layers.find(l => l.type === 'dots') as DotsLayer;\n if (dotSizeChanged(prevLayer.aes.dotSize, currentLayer.aes.dotSize) && this.calculatedData) {\n this.chartRenderer.updatePointSize(this.calculatedData.legendLabels, this.settings.layers);\n }\n this._updateChart();\n this.hasError = false;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(field: string, value: unknown) {\n if (field === 'polygon') {\n this.chartRenderer.polygons = value as Polygon[];\n this._updateChart();\n }\n if (field === SCATTERPLOT_CONTROLS_EVENTS.lassoDelete) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_CONTROLS_EVENTS.lassoDelete);\n document.dispatchEvent(event);\n }}\n if (field === SCATTERPLOT_CONTROLS_EVENTS.lassoSelectMode) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_CONTROLS_EVENTS.lassoSelectMode, {detail: value as LassoMode});\n document.dispatchEvent(event);\n }\n }\n if (field === SCATTERPLOT_CONTROLS_EVENTS.lassoForward) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_CONTROLS_EVENTS.lassoForward);\n document.dispatchEvent(event);\n }\n }\n if (field === SCATTERPLOT_CONTROLS_EVENTS.lassoBack) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_CONTROLS_EVENTS.lassoBack);\n document.dispatchEvent(event);\n }\n }\n if (field === SCATTERPLOT_CONTROLS_EVENTS.resetViewport) {\n this.chartRenderer.resetZoom(this.settings.chartSettings.xAxis, this.settings.chartSettings.yAxis, this.calculatedData?.dotsExtents);\n this.onZoomChange(false);\n }\n }\n\n export(): string {\n console.warn('export not implemented');\n return '';\n // this._updateChart();\n // return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: ScatterplotUmapSettingsImpl, settings: ScatterplotUmapSettingsImpl) {\n return (\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 prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n (prevSettings.label?.value || settings.label?.value) && prevSettings.label?.value !== settings.label?.value\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, label, highlight, grouping, layers} = this.settings;\n\n const dotsExtents = {\n minX: Infinity,\n maxX: -Infinity,\n minY: Infinity,\n maxY: -Infinity,\n };\n\n const hasCurve = layers.some(layer => layer.type === 'curve');\n const groupingKeysSet = new Set<string>();\n const dotsByGrouping:Record<string, Dot[]> = {};\n\n const dots: Dot[] = [];\n const labelFormatter = label?.format ? format(label.format) : undefined;\n\n for (let idx = 0; idx < this.data.rowsCount; idx++) {\n const xv = this.data.getColumnValue(x.value, idx);\n const yv = this.data.getColumnValue(y.value, idx);\n\n if (typeof xv !== 'number' || typeof yv !== 'number') {\n continue;\n }\n if (!isFinite(xv) || !isFinite(yv)) {\n continue;\n }\n\n if (xv < dotsExtents.minX) {\n dotsExtents.minX = xv;\n }\n if (xv > dotsExtents.maxX) {\n dotsExtents.maxX = xv;\n }\n if (yv < dotsExtents.minY) {\n dotsExtents.minY = yv;\n }\n if (yv > dotsExtents.maxY) {\n dotsExtents.maxY = yv;\n }\n\n const dimmed = highlight ? !this.data.getColumnValue(highlight.value, idx) : false;\n const dot: Dot = {\n x: xv,\n y: yv,\n idx,\n label: formatColumnValue(this.data, idx, label, labelFormatter),\n dimmed\n };\n if (hasCurve) {\n const groupingKey = grouping.map(({columnName}) => this.data.getColumnValue(columnName.value, idx)).join('_');\n groupingKeysSet.add(groupingKey);\n if (!dotsByGrouping[groupingKey]) {\n dotsByGrouping[groupingKey] = [];\n }\n dotsByGrouping[groupingKey].push(dot);\n }\n dots.push(dot);\n }\n\n const groupingKeys = [...groupingKeysSet];\n if (hasCurve) {\n groupingKeys.forEach(key => {\n dotsByGrouping[key].sort((a, b) => a.x - b.x);\n });\n }\n sortDotsByGrouping(this.data, dots, grouping, highlight, layers.find(l => l.type === 'dots'));\n const legendLabels = createLegendInfo(this.data, grouping, layers);\n\n const prevDotExtents = this.calculatedData?.dotsExtents ?? null;\n if (prevDotExtents) {\n const {minX, maxX, minY, maxY} = prevDotExtents;\n if (minX !== dotsExtents.minX || maxX !== dotsExtents.maxX \n || minY !== dotsExtents.minY || maxY !== dotsExtents.maxY) {\n this.onZoomChange(true); // dots viewport is changed but it will not be changed automatically; this call is to undisable reset button\n }\n }\n this.calculatedData = {\n dots,\n dotsByGrouping,\n groupingKeys,\n dotsExtents,\n legendLabels,\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n const {layers, grouping} = this.settings;\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) return;\n \n Object.entries(layer.aes).forEach(([key, value]) => {\n if (!(isInheritMapping(value) && value.value === columnName.value)) return;\n usedAes.add(key as keyof AesItem);\n if (value.palette) {\n usedAesFromPalettes[key as keyof AesItem] = value.palette;\n }\n });\n });\n\n calculated.legendLabels[columnName.value].usedAes = [...usedAes];\n calculated.legendLabels[columnName.value].aesMap = addPalettesToAesMapping(columnName, usedAesFromPalettes, inheritedAes);\n });\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, keyColumn, layers, grouping} = this.settings;\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n keyColumn,\n this.calculatedData.dots,\n this.calculatedData.dotsExtents,\n this.calculatedData.dotsByGrouping,\n layers,\n this.calculatedData.legendLabels,\n grouping.map(v => v.columnName),\n this.onPolygonUpdate,\n this.onTooltipHintSwitch,\n this.onLassoControlsStateUpdate,\n this.onZoomChange\n );\n }\n}\n"],"names":["isInheritMapping","value","dotSizeChanged","prevDotSize","currentDotSize","isContinuousAes","ChartScatterplotUmap","AbstractChart","data","settings","eventHandlers","__publicField","ScatterplotUmapSettingsImpl","ChartRenderer","node","err","previousSettings","previousData","prevLayer","l","currentLayer","field","SCATTERPLOT_CONTROLS_EVENTS","event","_a","prevSettings","arraysAreDifferent","v","idx","_b","_c","_d","prevData","prevKeys","keys","key","x","y","label","highlight","grouping","layers","dotsExtents","hasCurve","layer","groupingKeysSet","dotsByGrouping","dots","labelFormatter","format","xv","yv","dimmed","dot","formatColumnValue","groupingKey","columnName","groupingKeys","a","b","sortDotsByGrouping","legendLabels","createLegendInfo","prevDotExtents","minX","maxX","minY","maxY","calculated","inheritedAes","usedAes","usedAesFromPalettes","addPalettesToAesMapping","id","chartSettings","keyColumn"],"mappings":"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"}
@@ -1,17 +1,17 @@
1
- import { ColumnNameSchema as t, AggregationMethodSchema as p, FrameTypeSchema as y, LegendPositionSchema as u, TitlePositionSchema as g } from "./common.js";
2
- import { optional as e, union as c, literal as r, boolean as s, string as n, object as o, number as a, null as h, array as i, enum as l, record as d } from "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js";
1
+ import { ColumnNameSchema as i, TooltipSettingsSchema as c, AggregationMethodSchema as y, FrameTypeSchema as g, LegendPositionSchema as u, TitlePositionSchema as h } from "./common.js";
2
+ import { optional as e, union as p, literal as r, boolean as n, string as s, object as o, number as a, null as d, array as t, enum as l, record as T } from "../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js";
3
3
  const m = {
4
- title: e(n()),
5
- showTicks: e(s()),
6
- showTitle: e(s()),
7
- showAxisLabels: e(s()),
8
- axisLabelsAngle: e(c([r(0), r(45), r(90)]))
9
- }, S = o({
4
+ title: e(s()),
5
+ showTicks: e(n()),
6
+ showTitle: e(n()),
7
+ showAxisLabels: e(n()),
8
+ axisLabelsAngle: e(p([r(0), r(45), r(90)]))
9
+ }, x = o({
10
10
  type: r("bubble"),
11
11
  title: o({
12
- name: n(),
13
- show: e(s()),
14
- position: e(g)
12
+ name: s(),
13
+ show: e(n()),
14
+ position: e(h)
15
15
  }),
16
16
  size: e(
17
17
  o({
@@ -22,37 +22,37 @@ const m = {
22
22
  ),
23
23
  legend: e(
24
24
  o({
25
- show: e(s()),
25
+ show: e(n()),
26
26
  position: e(u)
27
27
  })
28
28
  ),
29
- frame: e(o({ type: e(y) })),
29
+ frame: e(o({ type: e(g) })),
30
30
  facetSettings: e(
31
31
  o({
32
32
  nRows: e(a()),
33
33
  nCols: e(a())
34
34
  })
35
35
  ),
36
- valueSize: t,
37
- valueColor: t,
38
- xColumn: t,
39
- yColumn: t,
40
- xGroupBy: e(i(t)),
41
- yGroupBy: e(i(t)),
36
+ valueSize: i,
37
+ valueColor: i,
38
+ xColumn: i,
39
+ yColumn: i,
40
+ xGroupBy: e(t(i)),
41
+ yGroupBy: e(t(i)),
42
42
  keysOrder: e(
43
43
  // x, y, grouping, facet keys in user's order
44
- d(n(), i(n()))
44
+ T(s(), t(s()))
45
45
  ),
46
46
  normalization: e(o({
47
47
  direction: l(["row", "column"]),
48
48
  method: l(["standardScaling", "meanNormalization"]),
49
- colorRange: e(i(a())),
50
- sizeRange: e(i(a()))
49
+ colorRange: e(t(a())),
50
+ sizeRange: e(t(a()))
51
51
  })),
52
52
  aggregation: e(o({
53
- x: e(s()),
54
- y: e(s()),
55
- method: e(p)
53
+ x: e(n()),
54
+ y: e(n()),
55
+ method: e(y)
56
56
  })),
57
57
  xAxis: e(o({
58
58
  ...m,
@@ -64,23 +64,18 @@ const m = {
64
64
  sorting: e(l(["asc", "desc"])),
65
65
  position: e(l(["left", "right"]))
66
66
  })),
67
- facetBy: e(i(t)),
67
+ facetBy: e(t(i)),
68
68
  aes: e(o({
69
- colorsList: e(i(n())),
69
+ colorsList: e(t(s())),
70
70
  minRadius: e(a()),
71
71
  maxRadius: e(a()),
72
- cellStrokeColor: e(n()),
73
- emptyCellColor: e(n())
72
+ cellStrokeColor: e(s()),
73
+ emptyCellColor: e(s())
74
74
  })),
75
- tooltips: e(
76
- o({
77
- show: e(s()),
78
- content: e(i(t))
79
- })
80
- ),
81
- NAValueAs: e(c([a(), h()]))
75
+ tooltips: e(c),
76
+ NAValueAs: e(p([a(), d()]))
82
77
  });
83
78
  export {
84
- S as BubblesSettingsSchema
79
+ x as BubblesSettingsSchema
85
80
  };
86
81
  //# sourceMappingURL=bubble.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bubble.js","sources":["../../src/types/bubble.ts"],"sourcesContent":["import {\n AggregationMethodSchema,\n ColumnNameSchema,\n FrameTypeSchema,\n LegendPositionSchema,\n TitlePositionSchema,\n} from './common';\nimport { z } from 'zod';\n\nconst axisCommonSchema = {\n title: z.optional(z.string()),\n showTicks: z.optional(z.boolean()),\n showTitle: z.optional(z.boolean()),\n showAxisLabels: z.optional(z.boolean()),\n axisLabelsAngle: z.optional(z.union([z.literal(0), z.literal(45), z.literal(90)])),\n};\n\n//const InheritAesSchema = z.object({type: z.literal('grouping'), value: z.string()}); // link to aes mapped to column\n\nexport const BubblesSettingsSchema = z.object({\n type: z.literal('bubble'),\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 cellSize: 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 frame: z.optional(z.object({ type: z.optional(FrameTypeSchema) })),\n facetSettings: z.optional(\n z.object({\n nRows: z.optional(z.number()),\n nCols: z.optional(z.number()),\n })\n ),\n valueSize: ColumnNameSchema,\n valueColor: ColumnNameSchema,\n xColumn: ColumnNameSchema,\n yColumn: ColumnNameSchema,\n xGroupBy: z.optional(z.array(ColumnNameSchema)),\n yGroupBy: z.optional(z.array(ColumnNameSchema)),\n keysOrder: z.optional( // x, y, grouping, facet keys in user's order\n z.record(z.string(), z.array(z.string()))\n ),\n normalization: z.optional(z.object({\n direction: z.enum(['row', 'column']),\n method: z.enum(['standardScaling', 'meanNormalization']),\n colorRange: z.optional(z.array(z.number())),\n sizeRange: z.optional(z.array(z.number())),\n })),\n aggregation: z.optional(z.object({\n x: z.optional(z.boolean()),\n y: z.optional(z.boolean()),\n method: z.optional(AggregationMethodSchema),\n })),\n xAxis: z.optional(z.object({\n ...axisCommonSchema,\n sorting: z.optional(z.enum(['asc', 'desc'])),\n position: z.optional(z.enum(['top', 'bottom'])),\n })),\n yAxis: z.optional(z.object({\n ...axisCommonSchema,\n sorting: z.optional(z.enum(['asc', 'desc'])),\n position: z.optional(z.enum(['left', 'right'])),\n })),\n facetBy: z.optional(z.array(ColumnNameSchema)),\n aes: z.optional(z.object({\n colorsList: z.optional(z.array(z.string())),\n minRadius: z.optional(z.number()),\n maxRadius: z.optional(z.number()),\n cellStrokeColor: z.optional(z.string()),\n emptyCellColor: z.optional(z.string()),\n })),\n tooltips: z.optional(\n z.object({\n show: z.optional(z.boolean()),\n content: z.optional(z.array(ColumnNameSchema)),\n })\n ),\n NAValueAs: z.optional(z.union([z.number(), z.null()])),\n});\n\nexport type BubbleSettings = z.infer<typeof BubblesSettingsSchema>;\n"],"names":["axisCommonSchema","z.optional","z.string","z.boolean","z.union","z.literal","BubblesSettingsSchema","z.object","TitlePositionSchema","z.number","LegendPositionSchema","FrameTypeSchema","ColumnNameSchema","z.array","z.record","z.enum","AggregationMethodSchema","z.null"],"mappings":"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"}
1
+ {"version":3,"file":"bubble.js","sources":["../../src/types/bubble.ts"],"sourcesContent":["import {\n AggregationMethodSchema,\n ColumnNameSchema,\n FrameTypeSchema,\n LegendPositionSchema,\n TitlePositionSchema,\n TooltipSettingsSchema,\n} from './common';\nimport { z } from 'zod';\n\nconst axisCommonSchema = {\n title: z.optional(z.string()),\n showTicks: z.optional(z.boolean()),\n showTitle: z.optional(z.boolean()),\n showAxisLabels: z.optional(z.boolean()),\n axisLabelsAngle: z.optional(z.union([z.literal(0), z.literal(45), z.literal(90)])),\n};\n\n//const InheritAesSchema = z.object({type: z.literal('grouping'), value: z.string()}); // link to aes mapped to column\n\nexport const BubblesSettingsSchema = z.object({\n type: z.literal('bubble'),\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 cellSize: 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 frame: z.optional(z.object({ type: z.optional(FrameTypeSchema) })),\n facetSettings: z.optional(\n z.object({\n nRows: z.optional(z.number()),\n nCols: z.optional(z.number()),\n })\n ),\n valueSize: ColumnNameSchema,\n valueColor: ColumnNameSchema,\n xColumn: ColumnNameSchema,\n yColumn: ColumnNameSchema,\n xGroupBy: z.optional(z.array(ColumnNameSchema)),\n yGroupBy: z.optional(z.array(ColumnNameSchema)),\n keysOrder: z.optional( // x, y, grouping, facet keys in user's order\n z.record(z.string(), z.array(z.string()))\n ),\n normalization: z.optional(z.object({\n direction: z.enum(['row', 'column']),\n method: z.enum(['standardScaling', 'meanNormalization']),\n colorRange: z.optional(z.array(z.number())),\n sizeRange: z.optional(z.array(z.number())),\n })),\n aggregation: z.optional(z.object({\n x: z.optional(z.boolean()),\n y: z.optional(z.boolean()),\n method: z.optional(AggregationMethodSchema),\n })),\n xAxis: z.optional(z.object({\n ...axisCommonSchema,\n sorting: z.optional(z.enum(['asc', 'desc'])),\n position: z.optional(z.enum(['top', 'bottom'])),\n })),\n yAxis: z.optional(z.object({\n ...axisCommonSchema,\n sorting: z.optional(z.enum(['asc', 'desc'])),\n position: z.optional(z.enum(['left', 'right'])),\n })),\n facetBy: z.optional(z.array(ColumnNameSchema)),\n aes: z.optional(z.object({\n colorsList: z.optional(z.array(z.string())),\n minRadius: z.optional(z.number()),\n maxRadius: z.optional(z.number()),\n cellStrokeColor: z.optional(z.string()),\n emptyCellColor: z.optional(z.string()),\n })),\n tooltips: z.optional(TooltipSettingsSchema),\n NAValueAs: z.optional(z.union([z.number(), z.null()])),\n});\n\nexport type BubbleSettings = z.infer<typeof BubblesSettingsSchema>;\n"],"names":["axisCommonSchema","z.optional","z.string","z.boolean","z.union","z.literal","BubblesSettingsSchema","z.object","TitlePositionSchema","z.number","LegendPositionSchema","FrameTypeSchema","ColumnNameSchema","z.array","z.record","z.enum","AggregationMethodSchema","TooltipSettingsSchema","z.null"],"mappings":"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"}
@@ -442,6 +442,47 @@ export type AxisSettings = z.infer<typeof AxisSettingsSchema>;
442
442
  export type AxisSettingsDiscrete = z.infer<typeof AxisSettingsDiscreteSchema>;
443
443
  export type AxisSettingsContinuous = z.infer<typeof AxisSettingsContinuousSchema>;
444
444
  export type DiscreteLabelsPosition = z.infer<typeof DiscreteLabelsPositionSchema>;
445
+ export declare const TooltipSettingsSchema: z.ZodObject<{
446
+ show: z.ZodOptional<z.ZodBoolean>;
447
+ content: z.ZodOptional<z.ZodArray<z.ZodObject<{
448
+ type: z.ZodLiteral<"column">;
449
+ value: z.ZodString;
450
+ format: z.ZodOptional<z.ZodString>;
451
+ label: z.ZodOptional<z.ZodString>;
452
+ valueLabels: z.ZodOptional<z.ZodString>;
453
+ }, "strip", z.ZodTypeAny, {
454
+ type: "column";
455
+ value: string;
456
+ format?: string | undefined;
457
+ label?: string | undefined;
458
+ valueLabels?: string | undefined;
459
+ }, {
460
+ type: "column";
461
+ value: string;
462
+ format?: string | undefined;
463
+ label?: string | undefined;
464
+ valueLabels?: string | undefined;
465
+ }>, "many">>;
466
+ }, "strip", z.ZodTypeAny, {
467
+ show?: boolean | undefined;
468
+ content?: {
469
+ type: "column";
470
+ value: string;
471
+ format?: string | undefined;
472
+ label?: string | undefined;
473
+ valueLabels?: string | undefined;
474
+ }[] | undefined;
475
+ }, {
476
+ show?: boolean | undefined;
477
+ content?: {
478
+ type: "column";
479
+ value: string;
480
+ format?: string | undefined;
481
+ label?: string | undefined;
482
+ valueLabels?: string | undefined;
483
+ }[] | undefined;
484
+ }>;
485
+ export type TooltipSettings = z.infer<typeof TooltipSettingsSchema>;
445
486
  export interface SettingsInterface {
446
487
  type: string;
447
488
  }