@milaboratories/graph-maker 1.1.133 → 1.1.135

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 (25) hide show
  1. package/dist/GraphMaker/components/Chart.vue.d.ts.map +1 -1
  2. package/dist/GraphMaker/components/Chart.vue.js +49 -47
  3. package/dist/GraphMaker/components/Chart.vue.js.map +1 -1
  4. package/dist/GraphMaker/index.vue.js +1 -1
  5. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts.map +1 -1
  6. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js +7 -7
  7. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js.map +1 -1
  8. package/dist/lib.js +1 -1
  9. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js +159 -162
  10. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  11. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/Lasso.js +104 -104
  12. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/Lasso.js.map +1 -1
  13. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js +50 -51
  14. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
  15. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/SVGLayer.js +21 -23
  16. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/SVGLayer.js.map +1 -1
  17. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/index.js +49 -54
  18. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/index.js.map +1 -1
  19. package/dist/node_modules/@milaboratories/pf-plots/dist/index.js +1348 -1163
  20. package/dist/node_modules/@milaboratories/pf-plots/dist/index.js.map +1 -1
  21. package/dist/node_modules/@milaboratories/pl-model-common/dist/index.js +212 -208
  22. package/dist/node_modules/@milaboratories/pl-model-common/dist/index.js.map +1 -1
  23. package/dist/node_modules/@platforma-sdk/model/dist/index.js +242 -241
  24. package/dist/node_modules/@platforma-sdk/model/dist/index.js.map +1 -1
  25. package/package.json +3 -3
@@ -1,16 +1,16 @@
1
- import { AbstractChart as U } from "../AbstractChart.js";
2
- import { createLegendInfo as P, addPalettesToAesMapping as B } from "../scatterplot/utils/createLegendInfo.js";
3
- import { TextMeasurer as A } from "../utils/TextMeasurer.js";
4
- import T from "./ChartRenderer.js";
5
- import { SCATTERPLOT_LASSO_EVENTS as m } from "./constants.js";
6
- import { ScatterplotUmapSettingsImpl as w } from "./SettingsImpl.js";
7
- var R = Object.defineProperty, X = (r, t, a) => t in r ? R(r, t, { enumerable: !0, configurable: !0, writable: !0, value: a }) : r[t] = a, v = (r, t, a) => X(r, typeof t != "symbol" ? t + "" : t, a);
8
- function Y(r) {
1
+ import { AbstractChart as L } from "../AbstractChart.js";
2
+ import { createLegendInfo as U, addPalettesToAesMapping as B } from "../scatterplot/utils/createLegendInfo.js";
3
+ import { TextMeasurer as P } from "../utils/TextMeasurer.js";
4
+ import A from "./ChartRenderer.js";
5
+ import { SCATTERPLOT_LASSO_EVENTS as h } from "./constants.js";
6
+ import { ScatterplotUmapSettingsImpl as E } from "./SettingsImpl.js";
7
+ var T = Object.defineProperty, Y = (r, t, a) => t in r ? T(r, t, { enumerable: !0, configurable: !0, writable: !0, value: a }) : r[t] = a, v = (r, t, a) => Y(r, typeof t != "symbol" ? t + "" : t, a);
8
+ function R(r) {
9
9
  return typeof r == "object" && "type" in r && r.type === "grouping";
10
10
  }
11
- const M = 10;
12
- function O(r) {
13
- const t = [], a = new A("16px Manrope");
11
+ const X = 10;
12
+ function M(r) {
13
+ const t = [], a = new P("16px Manrope");
14
14
  for (const e of r) {
15
15
  const s = e.label;
16
16
  if (!s)
@@ -25,19 +25,19 @@ function O(r) {
25
25
  xPosition: "right",
26
26
  yPosition: "middle",
27
27
  dot: e,
28
- padding: M,
28
+ padding: X,
29
29
  bbox: { minX: 0, maxX: 0, minY: 0, maxY: 0 },
30
30
  outerBBox: { minX: 0, maxX: 0, minY: 0, maxY: 0 }
31
31
  });
32
32
  }
33
33
  return t;
34
34
  }
35
- class $ extends U {
35
+ class H extends L {
36
36
  constructor(t, a, e) {
37
- super(t, a), v(this, "settings"), v(this, "chartRenderer", new T()), v(this, "onPolygonUpdate", () => {
37
+ super(t, a), v(this, "settings"), v(this, "chartRenderer", new A()), v(this, "onPolygonUpdate", () => {
38
38
  }), v(this, "onTooltipHintSwitch", () => {
39
39
  }), v(this, "onLassoControlsStateUpdate", () => {
40
- }), v(this, "calculatedData", null), this.settings = new w(a), e && (this.onPolygonUpdate = e.onPolygonUpdate, this.onTooltipHintSwitch = e.onTooltipHintSwitch, this.onLassoControlsStateUpdate = e.onLassoControlsStateUpdate);
40
+ }), v(this, "calculatedData", null), this.settings = new E(a), e && (this.onPolygonUpdate = e.onPolygonUpdate, this.onTooltipHintSwitch = e.onTooltipHintSwitch, this.onLassoControlsStateUpdate = e.onLassoControlsStateUpdate);
41
41
  }
42
42
  mount(t) {
43
43
  try {
@@ -52,7 +52,7 @@ class $ extends U {
52
52
  updateSettingsAndData(t, a) {
53
53
  try {
54
54
  const e = this.settings, s = this.data;
55
- this.settings = new w(a), this.data = t, this._needUpdateCalculatedDataBySettings(e, this.settings) || this._needUpdateCalculatedDataByData(s, this.data) ? this._updateData() : this._updateAesInData();
55
+ this.settings = new E(a), this.data = t, this._needUpdateCalculatedDataBySettings(e, this.settings) || this._needUpdateCalculatedDataByData(s, this.data) ? this._updateData() : this._updateAesInData();
56
56
  const n = e.layers.find((d) => d.type === "dots"), i = this.settings.layers.find((d) => d.type === "dots");
57
57
  n && i && n.aes.dotSize !== i.aes.dotSize && typeof n.aes.dotSize == "number" && typeof i.aes.dotSize == "number" && this.chartRenderer.updatePointSize(), this._updateChart();
58
58
  } catch (e) {
@@ -60,20 +60,20 @@ class $ extends U {
60
60
  }
61
61
  }
62
62
  updateChartState(t, a) {
63
- if (t === "polygon" && (this.chartRenderer.polygons = a, this._updateChart()), t === m.delete && document) {
64
- const e = new CustomEvent(m.delete);
63
+ if (t === "polygon" && (this.chartRenderer.polygons = a, this._updateChart()), t === h.delete && document) {
64
+ const e = new CustomEvent(h.delete);
65
65
  document.dispatchEvent(e);
66
66
  }
67
- if (t === m.selectMode && document) {
68
- const e = new CustomEvent(m.selectMode, { detail: a });
67
+ if (t === h.selectMode && document) {
68
+ const e = new CustomEvent(h.selectMode, { detail: a });
69
69
  document.dispatchEvent(e);
70
70
  }
71
- if (t === m.forward && document) {
72
- const e = new CustomEvent(m.forward);
71
+ if (t === h.forward && document) {
72
+ const e = new CustomEvent(h.forward);
73
73
  document.dispatchEvent(e);
74
74
  }
75
- if (t === m.back && document) {
76
- const e = new CustomEvent(m.back);
75
+ if (t === h.back && document) {
76
+ const e = new CustomEvent(h.back);
77
77
  document.dispatchEvent(e);
78
78
  }
79
79
  }
@@ -82,9 +82,9 @@ class $ extends U {
82
82
  }
83
83
  _needUpdateCalculatedDataBySettings(t, a) {
84
84
  var e, s, n, i;
85
- return t.grouping.length !== a.grouping.length || t.grouping.some((d, u) => {
86
- var o;
87
- return d.value !== ((o = a.grouping[u]) == null ? void 0 : o.value);
85
+ return t.grouping.length !== a.grouping.length || t.grouping.some((d, o) => {
86
+ var c;
87
+ return d.value !== ((c = a.grouping[o]) == null ? void 0 : c.value);
88
88
  }) || (((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);
89
89
  }
90
90
  _needUpdateCalculatedDataByData(t, a) {
@@ -95,48 +95,44 @@ class $ extends U {
95
95
  });
96
96
  }
97
97
  _updateData() {
98
- const { x: t, y: a, label: e, highlight: s, grouping: n, layers: i, inheritedAes: d } = this.settings, u = {
99
- x: !0,
100
- y: !0
101
- }, o = {
98
+ const { x: t, y: a, label: e, highlight: s, grouping: n, layers: i, inheritedAes: d } = this.settings, o = {
102
99
  minX: 1 / 0,
103
100
  maxX: -1 / 0,
104
101
  minY: 1 / 0,
105
102
  maxY: -1 / 0
106
- }, g = i.some((c) => c.type === "curve"), D = /* @__PURE__ */ new Set(), y = {}, b = this.data.rows.reduce((c, l, f) => {
103
+ }, c = i.some((u) => u.type === "curve"), p = /* @__PURE__ */ new Set(), y = {}, b = this.data.rows.reduce((u, l, f) => {
107
104
  if (l[t.value] === null || l[a.value] === null)
108
- return c;
109
- const h = Number(l[t.value]), p = Number(l[a.value]);
110
- u.x && h !== null && h < 0 && (u.x = !1), u.y && p !== null && p < 0 && (u.y = !1), h !== null && h < o.minX && (o.minX = h), h !== null && h > o.maxX && (o.maxX = h), p !== null && p < o.minY && (o.minY = p), p !== null && p > o.maxY && (o.maxY = p);
111
- const S = (e == null ? void 0 : e.valueLabels) ?? (e == null ? void 0 : e.value), E = {
112
- x: h,
113
- y: p,
105
+ return u;
106
+ const m = Number(l[t.value]), g = Number(l[a.value]);
107
+ m !== null && m < o.minX && (o.minX = m), m !== null && m > o.maxX && (o.maxX = m), g !== null && g < o.minY && (o.minY = g), g !== null && g > o.maxY && (o.maxY = g);
108
+ const S = (e == null ? void 0 : e.valueLabels) ?? (e == null ? void 0 : e.value), D = {
109
+ x: m,
110
+ y: g,
114
111
  id: String(f),
115
112
  idx: f,
116
113
  dimmed: s ? !l[s.value] : !1,
117
114
  label: S && l[S] ? String(l[S]) : null,
118
115
  data: l
119
116
  };
120
- if (g) {
117
+ if (c) {
121
118
  const x = n.map((_) => l[_.value]).join("_");
122
- D.add(x), y[x] || (y[x] = []), y[x].push(E);
119
+ p.add(x), y[x] || (y[x] = []), y[x].push(D);
123
120
  }
124
- return c.push(E), c;
121
+ return u.push(D), u;
125
122
  }, []);
126
- s && b.sort((c, l) => Number(l.dimmed) - Number(c.dimmed));
127
- const C = [...D];
128
- g && C.forEach((c) => {
129
- y[c].sort((l, f) => l.x - f.x);
123
+ s && b.sort((u, l) => Number(l.dimmed) - Number(u.dimmed));
124
+ const C = [...p];
125
+ c && C.forEach((u) => {
126
+ y[u].sort((l, f) => l.x - f.x);
130
127
  });
131
- const L = P(this.data, n, i, d);
128
+ const w = U(this.data, n, i, d);
132
129
  this.calculatedData = {
133
- onlyPositive: u,
134
130
  dots: b,
135
131
  dotsByGrouping: y,
136
132
  groupingKeys: C,
137
- allPossibleLabels: O(b),
133
+ allPossibleLabels: M(b),
138
134
  dotsExtents: o,
139
- legendLabels: L
135
+ legendLabels: w
140
136
  }, this.chartRenderer.updateData(b);
141
137
  }
142
138
  _updateAesInData() {
@@ -146,9 +142,9 @@ class $ extends U {
146
142
  const { layers: a, inheritedAes: e, grouping: s } = this.settings;
147
143
  s.forEach((n) => {
148
144
  const i = /* @__PURE__ */ new Set(), d = {};
149
- a.forEach((u) => {
150
- u.aes && Object.entries(u.aes).forEach(([o, g]) => {
151
- Y(g) && g.value === n.value && (i.add(o), g.palette && (d[o] = g.palette));
145
+ a.forEach((o) => {
146
+ o.aes && Object.entries(o.aes).forEach(([c, p]) => {
147
+ R(p) && p.value === n.value && (i.add(c), p.palette && (d[c] = p.palette));
152
148
  });
153
149
  }), t.legendLabels[n.value].usedAes = [...i], t.legendLabels[n.value].aesMap = B(t.legendLabels[n.value].values, d, e[n.value]);
154
150
  });
@@ -161,7 +157,6 @@ class $ extends U {
161
157
  t,
162
158
  a,
163
159
  e,
164
- this.calculatedData.onlyPositive,
165
160
  this.calculatedData.dots,
166
161
  this.calculatedData.dotsExtents,
167
162
  this.calculatedData.dotsByGrouping,
@@ -176,6 +171,6 @@ class $ extends U {
176
171
  }
177
172
  }
178
173
  export {
179
- $ as ChartScatterplotUmap
174
+ H as ChartScatterplotUmap
180
175
  };
181
176
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/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","s","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":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/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.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","s","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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","x_google_ignoreList":[0]}