@milaboratories/miplots4 1.0.127 → 1.0.129

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 (52) hide show
  1. package/dist/heatmap/ChartRenderer.d.ts.map +1 -1
  2. package/dist/heatmap/ChartRenderer.js +251 -233
  3. package/dist/heatmap/ChartRenderer.js.map +1 -1
  4. package/dist/heatmap/components/Captions/GroupCaptions.d.ts.map +1 -1
  5. package/dist/heatmap/components/Captions/GroupCaptions.js +45 -36
  6. package/dist/heatmap/components/Captions/GroupCaptions.js.map +1 -1
  7. package/dist/heatmap/components/Chart.d.ts.map +1 -1
  8. package/dist/heatmap/components/Chart.js +71 -69
  9. package/dist/heatmap/components/Chart.js.map +1 -1
  10. package/dist/heatmap/components/Dendrograms.d.ts +3 -1
  11. package/dist/heatmap/components/Dendrograms.d.ts.map +1 -1
  12. package/dist/heatmap/components/Dendrograms.js +54 -48
  13. package/dist/heatmap/components/Dendrograms.js.map +1 -1
  14. package/dist/heatmap/components/types.d.ts +2 -2
  15. package/dist/heatmap/components/types.d.ts.map +1 -1
  16. package/dist/heatmap/getDendrograms.d.ts +2 -2
  17. package/dist/heatmap/getDendrograms.d.ts.map +1 -1
  18. package/dist/heatmap/getDendrograms.js +36 -36
  19. package/dist/heatmap/getDendrograms.js.map +1 -1
  20. package/dist/heatmap/utils/calculateCaptionTails.d.ts +2 -2
  21. package/dist/heatmap/utils/calculateCaptionTails.d.ts.map +1 -1
  22. package/dist/heatmap/utils/calculateCaptionTails.js +89 -54
  23. package/dist/heatmap/utils/calculateCaptionTails.js.map +1 -1
  24. package/dist/heatmap/utils/calculateChartSideElementSizes.js +19 -19
  25. package/dist/heatmap/utils/calculateChartSideElementSizes.js.map +1 -1
  26. package/dist/scatterplot/ChartRenderer.d.ts.map +1 -1
  27. package/dist/scatterplot/ChartRenderer.js +191 -178
  28. package/dist/scatterplot/ChartRenderer.js.map +1 -1
  29. package/dist/scatterplot/components/ChartsGroup.js +3 -3
  30. package/dist/scatterplot/components/ChartsGroup.js.map +1 -1
  31. package/dist/scatterplot-umap/ChartRenderer.d.ts +3 -9
  32. package/dist/scatterplot-umap/ChartRenderer.d.ts.map +1 -1
  33. package/dist/scatterplot-umap/ChartRenderer.js +183 -186
  34. package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  35. package/dist/scatterplot-umap/components/Lasso.d.ts.map +1 -1
  36. package/dist/scatterplot-umap/components/Lasso.js +141 -117
  37. package/dist/scatterplot-umap/components/Lasso.js.map +1 -1
  38. package/dist/scatterplot-umap/components/LowerSVG.d.ts +1 -5
  39. package/dist/scatterplot-umap/components/LowerSVG.d.ts.map +1 -1
  40. package/dist/scatterplot-umap/components/LowerSVG.js +59 -60
  41. package/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
  42. package/dist/scatterplot-umap/components/SVGLayer.d.ts +1 -1
  43. package/dist/scatterplot-umap/components/SVGLayer.d.ts.map +1 -1
  44. package/dist/scatterplot-umap/components/SVGLayer.js +29 -31
  45. package/dist/scatterplot-umap/components/SVGLayer.js.map +1 -1
  46. package/dist/scatterplot-umap/index.d.ts +0 -4
  47. package/dist/scatterplot-umap/index.d.ts.map +1 -1
  48. package/dist/scatterplot-umap/index.js +92 -97
  49. package/dist/scatterplot-umap/index.js.map +1 -1
  50. package/dist/scatterplot-umap/types.d.ts +0 -4
  51. package/dist/scatterplot-umap/types.d.ts.map +1 -1
  52. package/package.json +1 -1
@@ -13,10 +13,6 @@ export declare class ChartScatterplotUmap extends AbstractChart {
13
13
  onTooltipHintSwitch: (v: boolean) => void;
14
14
  onLassoControlsStateUpdate: (v: LassoControlsState) => void;
15
15
  calculatedData: {
16
- onlyPositive: {
17
- x: boolean;
18
- y: boolean;
19
- };
20
16
  dots: Dot[];
21
17
  groupingKeys: string[];
22
18
  dotsByGrouping: Record<string, Dot[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scatterplot-umap/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,KAAK,EAA2D,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAClH,OAAO,KAAK,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpG,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,kBAAkB,EAAa,OAAO,EAAE,MAAM,SAAS,CAAC;AAiCxF,qBAAa,oBAAqB,SAAQ,aAAa;IACnD,QAAQ,EAAE,2BAA2B,CAAC;IACtC,aAAa,gBAAuB;IAEpC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAmB;IACjF,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAmB;IAC3D,0BAA0B,EAAE,CAAC,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAmB;IAE9E,cAAc,EAAE;QACZ,YAAY,EAAE;YAAC,CAAC,EAAE,OAAO,CAAC;YAAC,CAAC,EAAE,OAAO,CAAA;SAAC,CAAC;QACvC,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACtC,iBAAiB,EAAE,KAAK,EAAE,CAAC;QAC3B,WAAW,EAAE,WAAW,CAAC;QACzB,YAAY,EAAE,yBAAyB,CAAA;KAC1C,GAAG,IAAI,CAAQ;gBAEJ,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAE,aAAa,CAAC,EAAE,wBAAwB;IAWxG,KAAK,CAAC,IAAI,EAAE,WAAW;IAYvB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB;IA8BxE,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IA8B9C,MAAM,IAAI,MAAM;IAOhB,mCAAmC,CAAC,YAAY,EAAE,2BAA2B,EAAE,QAAQ,EAAE,2BAA2B;IAQpH,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAUpE,WAAW;IA8FX,gBAAgB;IA0BhB,YAAY;CAsBf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scatterplot-umap/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,KAAK,EAA2D,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAClH,OAAO,KAAK,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpG,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,kBAAkB,EAAa,OAAO,EAAE,MAAM,SAAS,CAAC;AAiCxF,qBAAa,oBAAqB,SAAQ,aAAa;IACnD,QAAQ,EAAE,2BAA2B,CAAC;IACtC,aAAa,gBAAuB;IAEpC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAmB;IACjF,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAmB;IAC3D,0BAA0B,EAAE,CAAC,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAmB;IAE9E,cAAc,EAAE;QACZ,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACtC,iBAAiB,EAAE,KAAK,EAAE,CAAC;QAC3B,WAAW,EAAE,WAAW,CAAC;QACzB,YAAY,EAAE,yBAAyB,CAAA;KAC1C,GAAG,IAAI,CAAQ;gBAEJ,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAE,aAAa,CAAC,EAAE,wBAAwB;IAWxG,KAAK,CAAC,IAAI,EAAE,WAAW;IAYvB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB;IA8BxE,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IA8B9C,MAAM,IAAI,MAAM;IAOhB,mCAAmC,CAAC,YAAY,EAAE,2BAA2B,EAAE,QAAQ,EAAE,2BAA2B;IAUpH,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAUpE,WAAW;IAkFX,gBAAgB;IA0BhB,YAAY;CAqBf"}
@@ -1,25 +1,25 @@
1
1
  var U = Object.defineProperty;
2
- var B = (l, d, e) => d in l ? U(l, d, { enumerable: !0, configurable: !0, writable: !0, value: e }) : l[d] = e;
3
- var y = (l, d, e) => B(l, typeof d != "symbol" ? d + "" : d, e);
4
- import { AbstractChart as w } from "../AbstractChart.js";
5
- import { createLegendInfo as T, addPalettesToAesMapping as R } from "../scatterplot/utils/createLegendInfo.js";
6
- import { TextMeasurer as X } from "../utils/TextMeasurer.js";
7
- import Y from "./ChartRenderer.js";
8
- import { SCATTERPLOT_LASSO_EVENTS as m } from "./constants.js";
9
- import { ScatterplotUmapSettingsImpl as _ } from "./SettingsImpl.js";
10
- function I(l) {
2
+ var B = (l, u, t) => u in l ? U(l, u, { enumerable: !0, configurable: !0, writable: !0, value: t }) : l[u] = t;
3
+ var y = (l, u, t) => B(l, typeof u != "symbol" ? u + "" : u, t);
4
+ import { AbstractChart as P } from "../AbstractChart.js";
5
+ import { createLegendInfo as w, addPalettesToAesMapping as T } from "../scatterplot/utils/createLegendInfo.js";
6
+ import { TextMeasurer as R } from "../utils/TextMeasurer.js";
7
+ import X from "./ChartRenderer.js";
8
+ import { SCATTERPLOT_LASSO_EVENTS as p } from "./constants.js";
9
+ import { ScatterplotUmapSettingsImpl as L } from "./SettingsImpl.js";
10
+ function Y(l) {
11
11
  return typeof l == "object" && "type" in l && l.type === "grouping";
12
12
  }
13
- const M = 10;
14
- function O(l) {
15
- const d = [], e = new X("16px Manrope");
13
+ const I = 10;
14
+ function M(l) {
15
+ const u = [], t = new R("16px Manrope");
16
16
  for (const a of l) {
17
- const t = a.label;
18
- if (!t)
17
+ const e = a.label;
18
+ if (!e)
19
19
  continue;
20
- const n = e.getTextMetrics(String(t));
21
- d.push({
22
- name: String(t),
20
+ const n = t.getTextMetrics(String(e));
21
+ u.push({
22
+ name: String(e),
23
23
  width: (n == null ? void 0 : n.width) ?? 0,
24
24
  height: ((n == null ? void 0 : n.actualBoundingBoxAscent) ?? 0) + ((n == null ? void 0 : n.actualBoundingBoxDescent) ?? 0),
25
25
  x: 0,
@@ -27,18 +27,18 @@ function O(l) {
27
27
  xPosition: "right",
28
28
  yPosition: "middle",
29
29
  dot: a,
30
- padding: M,
30
+ padding: I,
31
31
  bbox: { minX: 0, maxX: 0, minY: 0, maxY: 0 },
32
32
  outerBBox: { minX: 0, maxX: 0, minY: 0, maxY: 0 }
33
33
  });
34
34
  }
35
- return d;
35
+ return u;
36
36
  }
37
- class H extends w {
38
- constructor(e, a, t) {
39
- super(e, a);
37
+ class G extends P {
38
+ constructor(t, a, e) {
39
+ super(t, a);
40
40
  y(this, "settings");
41
- y(this, "chartRenderer", new Y());
41
+ y(this, "chartRenderer", new X());
42
42
  y(this, "onPolygonUpdate", () => {
43
43
  });
44
44
  // dots indexes from input data
@@ -47,11 +47,11 @@ class H extends w {
47
47
  y(this, "onLassoControlsStateUpdate", () => {
48
48
  });
49
49
  y(this, "calculatedData", null);
50
- this.settings = new _(a), t && (this.onPolygonUpdate = t.onPolygonUpdate, this.onTooltipHintSwitch = t.onTooltipHintSwitch, this.onLassoControlsStateUpdate = t.onLassoControlsStateUpdate);
50
+ this.settings = new L(a), e && (this.onPolygonUpdate = e.onPolygonUpdate, this.onTooltipHintSwitch = e.onTooltipHintSwitch, this.onLassoControlsStateUpdate = e.onLassoControlsStateUpdate);
51
51
  }
52
- mount(e) {
52
+ mount(t) {
53
53
  try {
54
- this.chartRenderer.init(e), this._updateData(), this._updateChart();
54
+ this.chartRenderer.init(t), this._updateData(), this._updateChart();
55
55
  } catch (a) {
56
56
  a instanceof Error && this.chartRenderer.renderError(a.message);
57
57
  }
@@ -59,119 +59,114 @@ class H extends w {
59
59
  unmount() {
60
60
  this.chartRenderer.clear();
61
61
  }
62
- updateSettingsAndData(e, a) {
62
+ updateSettingsAndData(t, a) {
63
63
  try {
64
- const t = this.settings, n = this.data;
65
- this.settings = new _(a), this.data = e, this._needUpdateCalculatedDataBySettings(t, this.settings) || this._needUpdateCalculatedDataByData(n, this.data) ? this._updateData() : this._updateAesInData();
66
- const s = t.layers.find((u) => u.type === "dots"), i = this.settings.layers.find((u) => u.type === "dots");
64
+ const e = this.settings, n = this.data;
65
+ this.settings = new L(a), this.data = t, this._needUpdateCalculatedDataBySettings(e, this.settings) || this._needUpdateCalculatedDataByData(n, this.data) ? this._updateData() : this._updateAesInData();
66
+ const s = e.layers.find((d) => d.type === "dots"), i = this.settings.layers.find((d) => d.type === "dots");
67
67
  s && i && s.aes.dotSize !== i.aes.dotSize && typeof s.aes.dotSize == "number" && typeof i.aes.dotSize == "number" && this.chartRenderer.updatePointSize(), this._updateChart();
68
- } catch (t) {
69
- t instanceof Error && this.chartRenderer.renderError(t.message);
68
+ } catch (e) {
69
+ e instanceof Error && this.chartRenderer.renderError(e.message);
70
70
  }
71
71
  }
72
- updateChartState(e, a) {
73
- if (e === "polygon" && (this.chartRenderer.polygons = a, this._updateChart()), e === m.delete && document) {
74
- const t = new CustomEvent(m.delete);
75
- document.dispatchEvent(t);
72
+ updateChartState(t, a) {
73
+ if (t === "polygon" && (this.chartRenderer.polygons = a, this._updateChart()), t === p.delete && document) {
74
+ const e = new CustomEvent(p.delete);
75
+ document.dispatchEvent(e);
76
76
  }
77
- if (e === m.selectMode && document) {
78
- const t = new CustomEvent(m.selectMode, { detail: a });
79
- document.dispatchEvent(t);
77
+ if (t === p.selectMode && document) {
78
+ const e = new CustomEvent(p.selectMode, { detail: a });
79
+ document.dispatchEvent(e);
80
80
  }
81
- if (e === m.forward && document) {
82
- const t = new CustomEvent(m.forward);
83
- document.dispatchEvent(t);
81
+ if (t === p.forward && document) {
82
+ const e = new CustomEvent(p.forward);
83
+ document.dispatchEvent(e);
84
84
  }
85
- if (e === m.back && document) {
86
- const t = new CustomEvent(m.back);
87
- document.dispatchEvent(t);
85
+ if (t === p.back && document) {
86
+ const e = new CustomEvent(p.back);
87
+ document.dispatchEvent(e);
88
88
  }
89
89
  }
90
90
  export() {
91
91
  return console.warn("export not implemented"), "";
92
92
  }
93
- _needUpdateCalculatedDataBySettings(e, a) {
94
- var t, n, s, i;
95
- return e.grouping.length !== a.grouping.length || e.grouping.some((u, c) => {
96
- var o;
97
- return u.value !== ((o = a.grouping[c]) == null ? void 0 : o.value);
98
- }) || (((t = e.label) == null ? void 0 : t.value) || ((n = a.label) == null ? void 0 : n.value)) && ((s = e.label) == null ? void 0 : s.value) !== ((i = a.label) == null ? void 0 : i.value);
93
+ _needUpdateCalculatedDataBySettings(t, a) {
94
+ var e, n, s, i;
95
+ return t.grouping.length !== a.grouping.length || t.grouping.some((d, o) => {
96
+ var h;
97
+ return d.value !== ((h = a.grouping[o]) == null ? void 0 : h.value);
98
+ }) || t.layers.length !== a.layers.length || t.layers.some((d, o) => d.type !== a.layers[o].type) || (((e = t.label) == null ? void 0 : e.value) || ((n = a.label) == null ? void 0 : n.value)) && ((s = t.label) == null ? void 0 : s.value) !== ((i = a.label) == null ? void 0 : i.value);
99
99
  }
100
- _needUpdateCalculatedDataByData(e, a) {
101
- const t = Object.keys(e.data), n = Object.keys(a.data);
102
- return e.id !== a.id || t.length !== n.length || t.some((s) => {
100
+ _needUpdateCalculatedDataByData(t, a) {
101
+ const e = Object.keys(t.data), n = Object.keys(a.data);
102
+ return t.id !== a.id || e.length !== n.length || e.some((s) => {
103
103
  var i;
104
- return e.data[s].length !== ((i = a.data[s]) == null ? void 0 : i.length);
104
+ return t.data[s].length !== ((i = a.data[s]) == null ? void 0 : i.length);
105
105
  });
106
106
  }
107
107
  _updateData() {
108
- const { x: e, y: a, label: t, highlight: n, grouping: s, layers: i, inheritedAes: u } = this.settings, c = {
109
- x: !0,
110
- y: !0
111
- }, o = {
108
+ const { x: t, y: a, label: e, highlight: n, grouping: s, layers: i, inheritedAes: d } = this.settings, o = {
112
109
  minX: 1 / 0,
113
110
  maxX: -1 / 0,
114
111
  minY: 1 / 0,
115
112
  maxY: -1 / 0
116
- }, f = i.some((h) => h.type === "curve"), D = /* @__PURE__ */ new Set(), x = {}, b = this.data.rows.reduce((h, r, v) => {
117
- if (r[e.value] === null || r[a.value] === null)
118
- return h;
119
- const p = Number(r[e.value]), g = Number(r[a.value]);
120
- c.x && p !== null && p < 0 && (c.x = !1), c.y && g !== null && g < 0 && (c.y = !1), p !== null && p < o.minX && (o.minX = p), p !== null && p > o.maxX && (o.maxX = p), g !== null && g < o.minY && (o.minY = g), g !== null && g > o.maxY && (o.maxY = g);
121
- const C = (t == null ? void 0 : t.valueLabels) ?? (t == null ? void 0 : t.value), L = {
122
- x: p,
123
- y: g,
124
- id: String(v),
125
- idx: v,
113
+ }, h = i.some((c) => c.type === "curve"), g = /* @__PURE__ */ new Set(), b = {}, x = this.data.rows.reduce((c, r, S) => {
114
+ if (r[t.value] === null || r[a.value] === null)
115
+ return c;
116
+ const m = Number(r[t.value]), f = Number(r[a.value]);
117
+ m !== null && m < o.minX && (o.minX = m), m !== null && m > o.maxX && (o.maxX = m), f !== null && f < o.minY && (o.minY = f), f !== null && f > o.maxY && (o.maxY = f);
118
+ const C = (e == null ? void 0 : e.valueLabels) ?? (e == null ? void 0 : e.value), D = {
119
+ x: m,
120
+ y: f,
121
+ id: String(S),
122
+ idx: S,
126
123
  dimmed: n ? !r[n.value] : !1,
127
124
  label: C && r[C] ? String(r[C]) : null,
128
125
  data: r
129
126
  };
130
- if (f) {
131
- const S = s.map((P) => r[P.value]).join("_");
132
- D.add(S), x[S] || (x[S] = []), x[S].push(L);
127
+ if (h) {
128
+ const v = s.map((A) => r[A.value]).join("_");
129
+ g.add(v), b[v] || (b[v] = []), b[v].push(D);
133
130
  }
134
- return h.push(L), h;
131
+ return c.push(D), c;
135
132
  }, []);
136
- n && b.sort((h, r) => Number(r.dimmed) - Number(h.dimmed));
137
- const E = [...D];
138
- f && E.forEach((h) => {
139
- x[h].sort((r, v) => r.x - v.x);
133
+ n && x.sort((c, r) => Number(r.dimmed) - Number(c.dimmed));
134
+ const E = [...g];
135
+ h && E.forEach((c) => {
136
+ b[c].sort((r, S) => r.x - S.x);
140
137
  });
141
- const A = T(this.data, s, i, u);
138
+ const _ = w(this.data, s, i, d);
142
139
  this.calculatedData = {
143
- onlyPositive: c,
144
- dots: b,
145
- dotsByGrouping: x,
140
+ dots: x,
141
+ dotsByGrouping: b,
146
142
  groupingKeys: E,
147
- allPossibleLabels: O(b),
143
+ allPossibleLabels: M(x),
148
144
  dotsExtents: o,
149
- legendLabels: A
150
- }, this.chartRenderer.updateData(b);
145
+ legendLabels: _
146
+ }, this.chartRenderer.updateData(x);
151
147
  }
152
148
  _updateAesInData() {
153
- const e = this.calculatedData;
154
- if (!e)
149
+ const t = this.calculatedData;
150
+ if (!t)
155
151
  return;
156
- const { layers: a, inheritedAes: t, grouping: n } = this.settings;
152
+ const { layers: a, inheritedAes: e, grouping: n } = this.settings;
157
153
  n.forEach((s) => {
158
- const i = /* @__PURE__ */ new Set(), u = {};
159
- a.forEach((c) => {
160
- c.aes && Object.entries(c.aes).forEach(([o, f]) => {
161
- I(f) && f.value === s.value && (i.add(o), f.palette && (u[o] = f.palette));
154
+ const i = /* @__PURE__ */ new Set(), d = {};
155
+ a.forEach((o) => {
156
+ o.aes && Object.entries(o.aes).forEach(([h, g]) => {
157
+ Y(g) && g.value === s.value && (i.add(h), g.palette && (d[h] = g.palette));
162
158
  });
163
- }), e.legendLabels[s.value].usedAes = [...i], e.legendLabels[s.value].aesMap = R(e.legendLabels[s.value].values, u, t[s.value]);
159
+ }), t.legendLabels[s.value].usedAes = [...i], t.legendLabels[s.value].aesMap = T(t.legendLabels[s.value].values, d, e[s.value]);
164
160
  });
165
161
  }
166
162
  _updateChart() {
167
163
  if (!this.calculatedData)
168
164
  return;
169
- const { id: e, chartSettings: a, keyColumn: t, layers: n, grouping: s } = this.settings;
165
+ const { id: t, chartSettings: a, keyColumn: e, layers: n, grouping: s } = this.settings;
170
166
  this.chartRenderer.render(
171
- e,
172
- a,
173
167
  t,
174
- this.calculatedData.onlyPositive,
168
+ a,
169
+ e,
175
170
  this.calculatedData.dots,
176
171
  this.calculatedData.dotsExtents,
177
172
  this.calculatedData.dotsByGrouping,
@@ -186,6 +181,6 @@ class H extends w {
186
181
  }
187
182
  }
188
183
  export {
189
- H as ChartScatterplotUmap
184
+ G as ChartScatterplotUmap
190
185
  };
191
186
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/scatterplot-umap/index.ts"],"sourcesContent":["import { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport { addPalettesToAesMapping, createLegendInfo } from '../scatterplot/utils/createLegendInfo';\nimport type { Label } from '../scatterplot/utils/getVisibleLabels';\nimport type { AesItem, ContinuousAesFromColumn, InheritAesScatterplot, ScatterplotEventHandlers } from '../types';\nimport type { ScatterplotUmapLegendInfo, ScatterplotUmapSettings } from '../types/scatterplot-umap';\nimport { TextMeasurer } from '../utils/TextMeasurer';\nimport ChartRenderer from './ChartRenderer';\nimport { SCATTERPLOT_LASSO_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\nconst LABEL_OFFSET = 10;\nfunction getAllPossibleLabels(dots: Dot[]) {\n const labels: Label[] = [];\n const textMeasurer = new TextMeasurer('16px Manrope');\n for (const dot of dots) {\n const text = dot.label;\n if (!text) {\n continue;\n }\n const metrics = textMeasurer.getTextMetrics(String(text));\n labels.push({\n name: String(text),\n width: metrics?.width ?? 0,\n height: (metrics?.actualBoundingBoxAscent ?? 0) + (metrics?.actualBoundingBoxDescent ?? 0),\n x: 0,\n y: 0,\n xPosition: 'right',\n yPosition: 'middle',\n dot,\n padding: LABEL_OFFSET,\n bbox: {minX: 0, maxX: 0, minY: 0, maxY: 0},\n outerBBox: {minX: 0, maxX: 0, minY: 0, maxY: 0},\n } as Label);\n }\n return labels;\n}\n\nexport class ChartScatterplotUmap extends AbstractChart {\n settings: ScatterplotUmapSettingsImpl;\n chartRenderer = new 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\n calculatedData: {\n onlyPositive: {x: boolean; y: boolean};\n dots: Dot[],\n groupingKeys: string[],\n dotsByGrouping: Record<string, Dot[]>,\n allPossibleLabels: Label[],\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 if (eventHandlers) {\n this.onPolygonUpdate = eventHandlers.onPolygonUpdate;\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch;\n this.onLassoControlsStateUpdate = eventHandlers.onLassoControlsStateUpdate;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\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 } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\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_LASSO_EVENTS.delete) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_LASSO_EVENTS.delete);\n document.dispatchEvent(event);\n }}\n if (field === SCATTERPLOT_LASSO_EVENTS.selectMode) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_LASSO_EVENTS.selectMode, {detail: value as LassoMode});\n document.dispatchEvent(event);\n }\n }\n if (field === SCATTERPLOT_LASSO_EVENTS.forward) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_LASSO_EVENTS.forward);\n document.dispatchEvent(event);\n }\n }\n if (field === SCATTERPLOT_LASSO_EVENTS.back) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_LASSO_EVENTS.back);\n document.dispatchEvent(event);\n }\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 prevSettings.grouping.length !== settings.grouping.length ||\n prevSettings.grouping.some((el, idx) => el.value !== settings.grouping[idx]?.value) ||\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, inheritedAes} = this.settings;\n\n const onlyPositive = {\n x: true,\n y: true,\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 = this.data.rows.reduce((res:Dot[], row, idx) => {\n if (row[x.value] === null || row[y.value] === null) {\n return res;\n }\n const xv = Number(row[x.value]);\n const yv = Number(row[y.value]);\n if (onlyPositive.x && xv !== null && xv < 0) {\n onlyPositive.x = false;\n }\n if (onlyPositive.y && yv !== null && yv < 0) {\n onlyPositive.y = false;\n }\n if (xv !== null && xv < dotsExtents.minX) {\n dotsExtents.minX = xv;\n }\n if (xv !== null && xv > dotsExtents.maxX) {\n dotsExtents.maxX = xv;\n }\n if (yv !== null && yv < dotsExtents.minY) {\n dotsExtents.minY = yv;\n }\n if (yv !== null && yv > dotsExtents.maxY) {\n dotsExtents.maxY = yv;\n }\n const labelKey = label?.valueLabels ?? label?.value;\n const dot = {\n x: xv,\n y: yv,\n id: String(idx),\n idx: idx,\n dimmed: highlight ? !row[highlight.value] : false,\n label: labelKey && row[labelKey] ? String(row[labelKey]) : null,\n data: row\n };\n if (hasCurve) {\n const groupingKey = grouping.map(column => row[column.value]).join('_');\n groupingKeysSet.add(groupingKey);\n if (!dotsByGrouping[groupingKey]) {\n dotsByGrouping[groupingKey] = [];\n }\n dotsByGrouping[groupingKey].push(dot);\n\n }\n res.push(dot);\n return res;\n }, []);\n\n if (highlight) {\n dots.sort((d1, d2) => {\n return Number(d2.dimmed) - Number(d1.dimmed);\n });\n }\n // console.info('only positive Y:', onlyPositive.y);\n // console.info('only positive X:', onlyPositive.x);\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 const legendLabels = createLegendInfo(this.data, grouping, layers, inheritedAes);\n\n this.calculatedData = {\n onlyPositive,\n dots,\n dotsByGrouping,\n groupingKeys,\n allPossibleLabels: getAllPossibleLabels(dots),\n dotsExtents,\n legendLabels,\n };\n\n this.chartRenderer.updateData(dots);\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n const {layers, inheritedAes, grouping} = this.settings;\n grouping.forEach(column => {\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 === column.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[column.value].usedAes = [...usedAes];\n calculated.legendLabels[column.value].aesMap = addPalettesToAesMapping(calculated.legendLabels[column.value].values, usedAesFromPalettes, inheritedAes[column.value]);\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 id,\n chartSettings,\n keyColumn,\n this.calculatedData.onlyPositive,\n this.calculatedData.dots,\n this.calculatedData.dotsExtents,\n this.calculatedData.dotsByGrouping,\n layers,\n this.calculatedData.legendLabels,\n grouping,\n this.calculatedData.allPossibleLabels,\n this.onPolygonUpdate,\n this.onTooltipHintSwitch,\n this.onLassoControlsStateUpdate\n );\n }\n}\n"],"names":["isInheritMapping","value","LABEL_OFFSET","getAllPossibleLabels","dots","labels","textMeasurer","TextMeasurer","dot","text","metrics","ChartScatterplotUmap","AbstractChart","data","settings","eventHandlers","__publicField","ChartRenderer","ScatterplotUmapSettingsImpl","node","err","previousSettings","previousData","prevLayer","l","currentLayer","field","SCATTERPLOT_LASSO_EVENTS","event","prevSettings","el","idx","_a","_b","_c","_d","prevData","prevKeys","keys","key","x","y","label","highlight","grouping","layers","inheritedAes","onlyPositive","dotsExtents","hasCurve","layer","groupingKeysSet","dotsByGrouping","res","row","xv","yv","labelKey","groupingKey","column","d1","d2","groupingKeys","a","b","legendLabels","createLegendInfo","calculated","usedAes","usedAesFromPalettes","addPalettesToAesMapping","id","chartSettings","keyColumn"],"mappings":";;;;;;;;;AAaA,SAASA,EAA8CC,GAA6F;AAChJ,SAAO,OAAOA,KAAU,YAAY,UAAUA,KAASA,EAAM,SAAS;AAC1E;AAEA,MAAMC,IAAe;AACrB,SAASC,EAAqBC,GAAa;AACvC,QAAMC,IAAkB,CAAA,GAClBC,IAAe,IAAIC,EAAa,cAAc;AACpD,aAAWC,KAAOJ,GAAM;AACpB,UAAMK,IAAOD,EAAI;AACjB,QAAI,CAACC;AACD;AAEJ,UAAMC,IAAUJ,EAAa,eAAe,OAAOG,CAAI,CAAC;AACxD,IAAAJ,EAAO,KAAK;AAAA,MACR,MAAM,OAAOI,CAAI;AAAA,MACjB,QAAOC,KAAA,gBAAAA,EAAS,UAAS;AAAA,MACzB,UAASA,KAAA,gBAAAA,EAAS,4BAA2B,OAAMA,KAAA,gBAAAA,EAAS,6BAA4B;AAAA,MACxF,GAAG;AAAA,MACH,GAAG;AAAA,MACH,WAAW;AAAA,MACX,WAAW;AAAA,MACX,KAAAF;AAAA,MACA,SAASN;AAAA,MACT,MAAM,EAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EAAA;AAAA,MACxC,WAAW,EAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EAAA;AAAA,IAAC,CACxC;AAAA,EACd;AACA,SAAOG;AACX;AAEO,MAAMM,UAA6BC,EAAc;AAAA,EAkBpD,YAAYC,GAAiBC,GAAmCC,GAA0C;AACtG,UAAMF,GAAMC,CAAQ;AAlBxB,IAAAE,EAAA;AACA,IAAAA,EAAA,uBAAgB,IAAIC,EAAA;AAEpB,IAAAD,EAAA,yBAAiE,MAAA;AAAA;AACjE;AAAA,IAAAA,EAAA,6BAA2C,MAAA;AAAA;AAC3C,IAAAA,EAAA,oCAA8D,MAAA;AAAA;AAE9D,IAAAA,EAAA,wBAQW;AAKP,SAAK,WAAW,IAAIE,EAA4BJ,CAAQ,GACpDC,MACA,KAAK,kBAAkBA,EAAc,iBACrC,KAAK,sBAAsBA,EAAc,qBACzC,KAAK,6BAA6BA,EAAc;AAAA,EAExD;AAAA,EAEA,MAAMI,GAAmB;AACrB,QAAI;AACA,WAAK,cAAc,KAAKA,CAAI,GAC5B,KAAK,YAAA,GACL,KAAK,aAAA;AAAA,IACT,SAASC,GAAK;AACV,MAAIA,aAAe,SACf,KAAK,cAAc,YAAYA,EAAI,OAAiB;AAAA,IAE5D;AAAA,EACJ;AAAA,EAEA,UAAU;AACN,SAAK,cAAc,MAAA;AAAA,EACvB;AAAA,EAEA,sBAAsBP,GAAiBC,GAAmC;AACtE,QAAI;AACA,YAAMO,IAAmB,KAAK,UACxBC,IAAe,KAAK;AAC1B,WAAK,WAAW,IAAIJ,EAA4BJ,CAAQ,GACxD,KAAK,OAAOD,GAER,KAAK,oCAAoCQ,GAAkB,KAAK,QAAQ,KACxE,KAAK,gCAAgCC,GAAc,KAAK,IAAI,IAE5D,KAAK,YAAA,IAEL,KAAK,iBAAA;AAIT,YAAMC,IAAYF,EAAiB,OAAO,KAAK,CAAAG,MAAKA,EAAE,SAAS,MAAM,GAC/DC,IAAe,KAAK,SAAS,OAAO,KAAK,CAAAD,MAAKA,EAAE,SAAS,MAAM;AACrE,MAAID,KAAaE,KAAgBF,EAAU,IAAI,YAAYE,EAAa,IAAI,WACrE,OAAOF,EAAU,IAAI,WAAY,YAAY,OAAOE,EAAa,IAAI,WAAY,YACpF,KAAK,cAAc,gBAAA,GAEvB,KAAK,aAAA;AAAA,IACT,SAASL,GAAK;AACV,MAAIA,aAAe,SACf,KAAK,cAAc,YAAYA,EAAI,OAAiB;AAAA,IAE5D;AAAA,EACJ;AAAA,EAEA,iBAAiBM,GAAezB,GAAgB;AAK5C,QAJIyB,MAAU,cACV,KAAK,cAAc,WAAWzB,GAC9B,KAAK,aAAA,IAELyB,MAAUC,EAAyB,UAC/B,UAAU;AACV,YAAMC,IAAQ,IAAI,YAAYD,EAAyB,MAAM;AAC7D,eAAS,cAAcC,CAAK;AAAA,IAChC;AACJ,QAAIF,MAAUC,EAAyB,cAC/B,UAAU;AACV,YAAMC,IAAQ,IAAI,YAAYD,EAAyB,YAAY,EAAC,QAAQ1B,GAAmB;AAC/F,eAAS,cAAc2B,CAAK;AAAA,IAChC;AAEJ,QAAIF,MAAUC,EAAyB,WAC/B,UAAU;AACV,YAAMC,IAAQ,IAAI,YAAYD,EAAyB,OAAO;AAC9D,eAAS,cAAcC,CAAK;AAAA,IAChC;AAEJ,QAAIF,MAAUC,EAAyB,QAC/B,UAAU;AACV,YAAMC,IAAQ,IAAI,YAAYD,EAAyB,IAAI;AAC3D,eAAS,cAAcC,CAAK;AAAA,IAChC;AAAA,EAER;AAAA,EAEA,SAAiB;AACb,mBAAQ,KAAK,wBAAwB,GAC9B;AAAA,EAGX;AAAA,EAEA,oCAAoCC,GAA2Cf,GAAuC;;AAClH,WACIe,EAAa,SAAS,WAAWf,EAAS,SAAS,UACnDe,EAAa,SAAS,KAAK,CAACC,GAAIC,MAAA;;AAAQ,aAAAD,EAAG,YAAUE,IAAAlB,EAAS,SAASiB,CAAG,MAArB,gBAAAC,EAAwB;AAAA,KAAK,QACjFA,IAAAH,EAAa,UAAb,gBAAAG,EAAoB,YAASC,IAAAnB,EAAS,UAAT,gBAAAmB,EAAgB,aAAUC,IAAAL,EAAa,UAAb,gBAAAK,EAAoB,aAAUC,IAAArB,EAAS,UAAT,gBAAAqB,EAAgB;AAAA,EAE9G;AAAA,EAEA,gCAAgCC,GAAqBvB,GAAiB;AAClE,UAAMwB,IAAW,OAAO,KAAKD,EAAS,IAAI,GACpCE,IAAO,OAAO,KAAKzB,EAAK,IAAI;AAClC,WACIuB,EAAS,OAAOvB,EAAK,MACrBwB,EAAS,WAAWC,EAAK,UACzBD,EAAS,KAAK;;AAAO,aAAAD,EAAS,KAAKG,CAAG,EAAE,aAAWP,IAAAnB,EAAK,KAAK0B,CAAG,MAAb,gBAAAP,EAAgB;AAAA,KAAM;AAAA,EAEjF;AAAA,EAEA,cAAc;AACV,UAAM,EAAC,GAAAQ,GAAG,GAAAC,GAAG,OAAAC,GAAO,WAAAC,GAAW,UAAAC,GAAU,QAAAC,GAAQ,cAAAC,MAAgB,KAAK,UAEhEC,IAAe;AAAA,MACjB,GAAG;AAAA,MACH,GAAG;AAAA,IAAA,GAEDC,IAAc;AAAA,MAChB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IAAA,GAGJC,IAAWJ,EAAO,KAAK,CAAAK,MAASA,EAAM,SAAS,OAAO,GACtDC,wBAAsB,IAAA,GACtBC,IAAuC,CAAA,GAEvChD,IAAO,KAAK,KAAK,KAAK,OAAO,CAACiD,GAAWC,GAAKvB,MAAQ;AACxD,UAAIuB,EAAId,EAAE,KAAK,MAAM,QAAQc,EAAIb,EAAE,KAAK,MAAM;AAC1C,eAAOY;AAEX,YAAME,IAAK,OAAOD,EAAId,EAAE,KAAK,CAAC,GACxBgB,IAAK,OAAOF,EAAIb,EAAE,KAAK,CAAC;AAC9B,MAAIM,EAAa,KAAKQ,MAAO,QAAQA,IAAK,MACtCR,EAAa,IAAI,KAEjBA,EAAa,KAAKS,MAAO,QAAQA,IAAK,MACtCT,EAAa,IAAI,KAEjBQ,MAAO,QAAQA,IAAKP,EAAY,SAChCA,EAAY,OAAOO,IAEnBA,MAAO,QAAQA,IAAKP,EAAY,SAChCA,EAAY,OAAOO,IAEnBC,MAAO,QAAQA,IAAKR,EAAY,SAChCA,EAAY,OAAOQ,IAEnBA,MAAO,QAAQA,IAAKR,EAAY,SAChCA,EAAY,OAAOQ;AAEvB,YAAMC,KAAWf,KAAA,gBAAAA,EAAO,iBAAeA,KAAA,gBAAAA,EAAO,QACxClC,IAAM;AAAA,QACR,GAAG+C;AAAA,QACH,GAAGC;AAAA,QACH,IAAI,OAAOzB,CAAG;AAAA,QACd,KAAAA;AAAA,QACA,QAAQY,IAAY,CAACW,EAAIX,EAAU,KAAK,IAAI;AAAA,QAC5C,OAAOc,KAAYH,EAAIG,CAAQ,IAAI,OAAOH,EAAIG,CAAQ,CAAC,IAAI;AAAA,QAC3D,MAAMH;AAAA,MAAA;AAEV,UAAIL,GAAU;AACV,cAAMS,IAAcd,EAAS,IAAI,CAAAe,MAAUL,EAAIK,EAAO,KAAK,CAAC,EAAE,KAAK,GAAG;AACtE,QAAAR,EAAgB,IAAIO,CAAW,GAC1BN,EAAeM,CAAW,MAC3BN,EAAeM,CAAW,IAAI,CAAA,IAElCN,EAAeM,CAAW,EAAE,KAAKlD,CAAG;AAAA,MAExC;AACA,aAAA6C,EAAI,KAAK7C,CAAG,GACL6C;AAAA,IACX,GAAG,CAAA,CAAE;AAEL,IAAIV,KACAvC,EAAK,KAAK,CAACwD,GAAIC,MACJ,OAAOA,EAAG,MAAM,IAAI,OAAOD,EAAG,MAAM,CAC9C;AAKL,UAAME,IAAe,CAAC,GAAGX,CAAe;AACxC,IAAIF,KACAa,EAAa,QAAQ,CAAAvB,MAAO;AACxB,MAAAa,EAAeb,CAAG,EAAE,KAAK,CAACwB,GAAGC,MAAMD,EAAE,IAAIC,EAAE,CAAC;AAAA,IAChD,CAAC;AAEL,UAAMC,IAAeC,EAAiB,KAAK,MAAMtB,GAAUC,GAAQC,CAAY;AAE/E,SAAK,iBAAiB;AAAA,MAClB,cAAAC;AAAA,MACA,MAAA3C;AAAA,MACA,gBAAAgD;AAAA,MACA,cAAAU;AAAA,MACA,mBAAmB3D,EAAqBC,CAAI;AAAA,MAC5C,aAAA4C;AAAA,MACA,cAAAiB;AAAA,IAAA,GAGJ,KAAK,cAAc,WAAW7D,CAAI;AAAA,EACtC;AAAA,EAEA,mBAAmB;AACf,UAAM+D,IAAa,KAAK;AACxB,QAAI,CAACA;AACD;AAEJ,UAAM,EAAC,QAAAtB,GAAQ,cAAAC,GAAc,UAAAF,EAAA,IAAY,KAAK;AAC9C,IAAAA,EAAS,QAAQ,CAAAe,MAAU;AACvB,YAAMS,wBAAc,IAAA,GACdC,IAA+D,CAAA;AACrE,MAAAxB,EAAO,QAAQ,CAAAK,MAAS;AACpB,QAAIA,EAAM,OACN,OAAO,QAAQA,EAAM,GAAG,EAAE,QAAQ,CAAC,CAACX,GAAKtC,CAAK,MAAM;AAChD,UAAID,EAAiBC,CAAK,KAAKA,EAAM,UAAU0D,EAAO,UAClDS,EAAQ,IAAI7B,CAAoB,GAC5BtC,EAAM,YACNoE,EAAoB9B,CAAoB,IAAItC,EAAM;AAAA,QAG9D,CAAC;AAAA,MAET,CAAC,GACDkE,EAAW,aAAaR,EAAO,KAAK,EAAE,UAAU,CAAC,GAAGS,CAAO,GAC3DD,EAAW,aAAaR,EAAO,KAAK,EAAE,SAASW,EAAwBH,EAAW,aAAaR,EAAO,KAAK,EAAE,QAAQU,GAAqBvB,EAAaa,EAAO,KAAK,CAAC;AAAA,IACxK,CAAC;AAAA,EACL;AAAA,EAEA,eAAe;AACX,QAAI,CAAC,KAAK;AACN;AAEJ,UAAM,EAAC,IAAAY,GAAI,eAAAC,GAAe,WAAAC,GAAW,QAAA5B,GAAQ,UAAAD,EAAA,IAAY,KAAK;AAC9D,SAAK,cAAc;AAAA,MACf2B;AAAA,MACAC;AAAA,MACAC;AAAA,MACA,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpB5B;AAAA,MACA,KAAK,eAAe;AAAA,MACpBD;AAAA,MACA,KAAK,eAAe;AAAA,MACpB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IAAA;AAAA,EAEb;AACJ;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/scatterplot-umap/index.ts"],"sourcesContent":["import { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport { addPalettesToAesMapping, createLegendInfo } from '../scatterplot/utils/createLegendInfo';\nimport type { Label } from '../scatterplot/utils/getVisibleLabels';\nimport type { AesItem, ContinuousAesFromColumn, InheritAesScatterplot, ScatterplotEventHandlers } from '../types';\nimport type { ScatterplotUmapLegendInfo, ScatterplotUmapSettings } from '../types/scatterplot-umap';\nimport { TextMeasurer } from '../utils/TextMeasurer';\nimport ChartRenderer from './ChartRenderer';\nimport { SCATTERPLOT_LASSO_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\nconst LABEL_OFFSET = 10;\nfunction getAllPossibleLabels(dots: Dot[]) {\n const labels: Label[] = [];\n const textMeasurer = new TextMeasurer('16px Manrope');\n for (const dot of dots) {\n const text = dot.label;\n if (!text) {\n continue;\n }\n const metrics = textMeasurer.getTextMetrics(String(text));\n labels.push({\n name: String(text),\n width: metrics?.width ?? 0,\n height: (metrics?.actualBoundingBoxAscent ?? 0) + (metrics?.actualBoundingBoxDescent ?? 0),\n x: 0,\n y: 0,\n xPosition: 'right',\n yPosition: 'middle',\n dot,\n padding: LABEL_OFFSET,\n bbox: {minX: 0, maxX: 0, minY: 0, maxY: 0},\n outerBBox: {minX: 0, maxX: 0, minY: 0, maxY: 0},\n } as Label);\n }\n return labels;\n}\n\nexport class ChartScatterplotUmap extends AbstractChart {\n settings: ScatterplotUmapSettingsImpl;\n chartRenderer = new 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\n calculatedData: {\n dots: Dot[],\n groupingKeys: string[],\n dotsByGrouping: Record<string, Dot[]>,\n allPossibleLabels: Label[],\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 if (eventHandlers) {\n this.onPolygonUpdate = eventHandlers.onPolygonUpdate;\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch;\n this.onLassoControlsStateUpdate = eventHandlers.onLassoControlsStateUpdate;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\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 } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\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_LASSO_EVENTS.delete) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_LASSO_EVENTS.delete);\n document.dispatchEvent(event);\n }}\n if (field === SCATTERPLOT_LASSO_EVENTS.selectMode) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_LASSO_EVENTS.selectMode, {detail: value as LassoMode});\n document.dispatchEvent(event);\n }\n }\n if (field === SCATTERPLOT_LASSO_EVENTS.forward) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_LASSO_EVENTS.forward);\n document.dispatchEvent(event);\n }\n }\n if (field === SCATTERPLOT_LASSO_EVENTS.back) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_LASSO_EVENTS.back);\n document.dispatchEvent(event);\n }\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 prevSettings.grouping.length !== settings.grouping.length ||\n prevSettings.grouping.some((el, idx) => el.value !== settings.grouping[idx]?.value) ||\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, inheritedAes} = 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 = this.data.rows.reduce((res:Dot[], row, idx) => {\n if (row[x.value] === null || row[y.value] === null) {\n return res;\n }\n const xv = Number(row[x.value]);\n const yv = Number(row[y.value]);\n\n if (xv !== null && xv < dotsExtents.minX) {\n dotsExtents.minX = xv;\n }\n if (xv !== null && xv > dotsExtents.maxX) {\n dotsExtents.maxX = xv;\n }\n if (yv !== null && yv < dotsExtents.minY) {\n dotsExtents.minY = yv;\n }\n if (yv !== null && yv > dotsExtents.maxY) {\n dotsExtents.maxY = yv;\n }\n const labelKey = label?.valueLabels ?? label?.value;\n const dot = {\n x: xv,\n y: yv,\n id: String(idx),\n idx: idx,\n dimmed: highlight ? !row[highlight.value] : false,\n label: labelKey && row[labelKey] ? String(row[labelKey]) : null,\n data: row\n };\n if (hasCurve) {\n const groupingKey = grouping.map(column => row[column.value]).join('_');\n groupingKeysSet.add(groupingKey);\n if (!dotsByGrouping[groupingKey]) {\n dotsByGrouping[groupingKey] = [];\n }\n dotsByGrouping[groupingKey].push(dot);\n\n }\n res.push(dot);\n return res;\n }, []);\n\n if (highlight) {\n dots.sort((d1, d2) => {\n return Number(d2.dimmed) - Number(d1.dimmed);\n });\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 const legendLabels = createLegendInfo(this.data, grouping, layers, inheritedAes);\n\n this.calculatedData = {\n dots,\n dotsByGrouping,\n groupingKeys,\n allPossibleLabels: getAllPossibleLabels(dots),\n dotsExtents,\n legendLabels,\n };\n\n this.chartRenderer.updateData(dots);\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n const {layers, inheritedAes, grouping} = this.settings;\n grouping.forEach(column => {\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 === column.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[column.value].usedAes = [...usedAes];\n calculated.legendLabels[column.value].aesMap = addPalettesToAesMapping(calculated.legendLabels[column.value].values, usedAesFromPalettes, inheritedAes[column.value]);\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 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,\n this.calculatedData.allPossibleLabels,\n this.onPolygonUpdate,\n this.onTooltipHintSwitch,\n this.onLassoControlsStateUpdate\n );\n }\n}\n"],"names":["isInheritMapping","value","LABEL_OFFSET","getAllPossibleLabels","dots","labels","textMeasurer","TextMeasurer","dot","text","metrics","ChartScatterplotUmap","AbstractChart","data","settings","eventHandlers","__publicField","ChartRenderer","ScatterplotUmapSettingsImpl","node","err","previousSettings","previousData","prevLayer","l","currentLayer","field","SCATTERPLOT_LASSO_EVENTS","event","prevSettings","el","idx","_a","_b","_c","_d","prevData","prevKeys","keys","key","x","y","label","highlight","grouping","layers","inheritedAes","dotsExtents","hasCurve","layer","groupingKeysSet","dotsByGrouping","res","row","xv","yv","labelKey","groupingKey","column","d1","d2","groupingKeys","a","b","legendLabels","createLegendInfo","calculated","usedAes","usedAesFromPalettes","addPalettesToAesMapping","id","chartSettings","keyColumn"],"mappings":"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"}
@@ -55,10 +55,6 @@ export interface SVGLayerProps {
55
55
  chartSettings: ScatterplotUmapSettingsImpl['chartSettings'];
56
56
  chartSizes: ChartSizes;
57
57
  captionsSizes: CaptionsSizes;
58
- onlyPositive: {
59
- x: boolean;
60
- y: boolean;
61
- };
62
58
  selectedDot?: DotInfo | null;
63
59
  container: SVGElement | null;
64
60
  zoomStateKey: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scatterplot-umap/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scatterplot-umap/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/miplots4",
3
- "version": "1.0.127",
3
+ "version": "1.0.129",
4
4
  "description": "Data visualization library",
5
5
  "author": "erohinaelena",
6
6
  "license": "ISC",