@milaboratories/graph-maker 1.1.154 → 1.1.156

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 (64) hide show
  1. package/dist/GraphMaker/constantsCommon.d.ts +2 -0
  2. package/dist/GraphMaker/constantsCommon.d.ts.map +1 -1
  3. package/dist/GraphMaker/constantsCommon.js +29 -27
  4. package/dist/GraphMaker/constantsCommon.js.map +1 -1
  5. package/dist/GraphMaker/forms/AxesSettingsForm/HeatmapAxesSettingsForm.vue.d.ts.map +1 -1
  6. package/dist/GraphMaker/forms/AxesSettingsForm/HeatmapAxesSettingsForm.vue.js +215 -148
  7. package/dist/GraphMaker/forms/AxesSettingsForm/HeatmapAxesSettingsForm.vue.js.map +1 -1
  8. package/dist/GraphMaker/store.d.ts.map +1 -1
  9. package/dist/GraphMaker/store.js +59 -57
  10. package/dist/GraphMaker/store.js.map +1 -1
  11. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts +5 -0
  12. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts.map +1 -1
  13. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +1 -0
  14. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts.map +1 -1
  15. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +5 -0
  16. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
  17. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js +24 -24
  18. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js.map +1 -1
  19. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts +2 -0
  20. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts.map +1 -1
  21. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts +2 -0
  22. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts.map +1 -1
  23. package/dist/node_modules/@milaboratories/miplots4/dist/MiPlots.js +22 -22
  24. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/ChartRenderer.js +160 -156
  25. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/ChartRenderer.js.map +1 -1
  26. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/DendroSettingsImpl.js +31 -27
  27. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/DendroSettingsImpl.js.map +1 -1
  28. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Chart.js +53 -53
  29. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Chart.js.map +1 -1
  30. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHierarchyData.js +30 -24
  31. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHierarchyData.js.map +1 -1
  32. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/index.js +78 -77
  33. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/index.js.map +1 -1
  34. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js +267 -258
  35. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js.map +1 -1
  36. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/HeatmapSettingsImpl.js +59 -54
  37. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
  38. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js +91 -89
  39. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js.map +1 -1
  40. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js +17 -17
  41. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js +98 -87
  42. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js.map +1 -1
  43. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js +98 -76
  44. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js.map +1 -1
  45. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateCaptionTails.js +57 -57
  46. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateCaptionTails.js.map +1 -1
  47. package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js +52 -51
  48. package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js.map +1 -1
  49. package/dist/node_modules/@milaboratories/miplots4/dist/types/dendro.js +13 -8
  50. package/dist/node_modules/@milaboratories/miplots4/dist/types/dendro.js.map +1 -1
  51. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js +5 -5
  52. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js +19 -11
  53. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js.map +1 -1
  54. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js +6 -6
  55. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js.map +1 -1
  56. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ControllerBase.js +94 -91
  57. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ControllerBase.js.map +1 -1
  58. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/heatmap.js +2 -2
  59. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/heatmap.js.map +1 -1
  60. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js +50 -49
  61. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js.map +1 -1
  62. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js +15 -14
  63. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js.map +1 -1
  64. package/package.json +3 -3
@@ -1,14 +1,14 @@
1
1
  import { DISCRETE_VALUES_KEY as E, HIGH_CARDINALITY as D } from "../constants.js";
2
- import { AxisId as b, columnOrAxisIdFromString as A } from "../spec.js";
3
- import { getStateCopy as k, getDefaultInfo as O, dataColumnPredicateDefault as B, createLinkerMap as P, createMultipliesByMap as j, getColumnOrAxisValueLabelsId as M } from "../utils.js";
2
+ import { AxisId as w, columnOrAxisIdFromString as A } from "../spec.js";
3
+ import { getStateCopy as k, getDefaultInfo as O, dataColumnPredicateDefault as B, createLinkerMap as P, createMultipliesByMap as j, getColumnOrAxisValueLabelsId as F } from "../utils.js";
4
4
  import "../node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js";
5
5
  import "../node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js";
6
6
  import "../_virtual/canonicalize.js";
7
7
  import "../node_modules/@milaboratories/pl-model-common/dist/plid.js";
8
8
  import "../node_modules/@milaboratories/pl-model-common/dist/ref.js";
9
- import { deriveLabels as F } from "../node_modules/@platforma-sdk/model/dist/render/util/label.js";
9
+ import { deriveLabels as M } from "../node_modules/@platforma-sdk/model/dist/render/util/label.js";
10
10
  import "../node_modules/@milaboratories/pl-error-like/dist/error_like_shape.js";
11
- var H = Object.defineProperty, V = (h, e, t) => e in h ? H(h, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : h[e] = t, x = (h, e, t) => V(h, typeof e != "symbol" ? e + "" : e, t);
11
+ var V = Object.defineProperty, H = (h, e, t) => e in h ? V(h, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : h[e] = t, x = (h, e, t) => H(h, typeof e != "symbol" ? e + "" : e, t);
12
12
  class W {
13
13
  constructor(e, t) {
14
14
  x(this, "ignoredOptionIdNames", []), x(this, "dataInputs", []), x(this, "dontAllowUnfilteredHighCardinality", !1), x(this, "allowHangingAxes", !1), this.simpleComponentControllers = e, this.filterComponentControllers = t;
@@ -28,17 +28,17 @@ class W {
28
28
  throw Error(`Unknown input name: ${String(e)}`);
29
29
  }
30
30
  changeSelected(e, t, o, r) {
31
- const n = o.components[e].selectorStates, c = n.filter((s) => !r.find((a) => a.selectedSource === s.selectedSource)), u = r.filter((s) => !n.find((a) => a.selectedSource === s.selectedSource));
32
- let p = k(o);
33
- return c.forEach((s) => {
34
- p = this.deleteSelected(e, t, p, s);
35
- }), u.forEach((s) => {
36
- p = this.addSelected(e, p, s);
31
+ const n = o.components[e].selectorStates, a = n.filter((s) => !r.find((l) => l.selectedSource === s.selectedSource)), d = r.filter((s) => !n.find((l) => l.selectedSource === s.selectedSource));
32
+ let m = k(o);
33
+ return a.forEach((s) => {
34
+ m = this.deleteSelected(e, t, m, s);
35
+ }), d.forEach((s) => {
36
+ m = this.addSelected(e, m, s);
37
37
  }), o.components[e].selectorStates = r.map(
38
38
  (s) => o.components[e].selectorStates.find(
39
- (a) => a.selectedSource === s.selectedSource
39
+ (l) => l.selectedSource === s.selectedSource
40
40
  )
41
- ).filter(Boolean), p;
41
+ ).filter(Boolean), m;
42
42
  }
43
43
  switchDividableAxis(e, t) {
44
44
  return k(e);
@@ -77,15 +77,15 @@ class W {
77
77
  t.add(r);
78
78
  for (const o of Object.keys(this.filterComponentControllers))
79
79
  if (this.filterComponentControllers[o].isDimensionsConsumer)
80
- for (const { selectedSource: r, type: n, selectedFilterValues: c } of e.components[o].selectorStates)
81
- n === "equals" && (c == null ? void 0 : c.length) === 1 && t.add(r);
80
+ for (const { selectedSource: r, type: n, selectedFilterValues: a } of e.components[o].selectorStates)
81
+ n === "equals" && (a == null ? void 0 : a.length) === 1 && t.add(r);
82
82
  return t;
83
83
  }
84
84
  async getParentAndHangingAxesByInputs(e, t, o, r) {
85
- const n = { ...this.simpleComponentControllers, ...this.filterComponentControllers }, c = {};
86
- for (const [u, p] of Object.entries(n))
87
- c[u] = await p.getParentAndHangingAxes(e, t, o, r);
88
- return c;
85
+ const n = { ...this.simpleComponentControllers, ...this.filterComponentControllers }, a = {};
86
+ for (const [d, m] of Object.entries(n))
87
+ a[d] = await m.getParentAndHangingAxes(e, t, o, r);
88
+ return a;
89
89
  }
90
90
  /** Depends on chart type. */
91
91
  getMustBeConsumedAxes(e, t) {
@@ -95,37 +95,40 @@ class W {
95
95
  * If some of them is not moved to 'filters', 'tabBy' or 'facetBy' (dimension reducers) chart can't be rendered */
96
96
  markMustBeConsumedAxes(e, t, o, r) {
97
97
  var n;
98
- const c = this.getConsumedOptionsSet(e), u = (s) => {
99
- const a = t.get(s);
100
- a && a.kind === "axis" && (a.mustBeConsumed = !0);
101
- }, p = this.getMustBeConsumedAxes(e, t);
102
- for (const s of p)
103
- c.has(s) || u(s);
104
- this.allowHangingAxes || Object.entries(r).forEach(([s, { hangingAxes: a }]) => {
105
- for (const i of a.keys())
106
- c.has(i) || u(i);
98
+ const a = this.getConsumedOptionsSet(e), d = (s) => {
99
+ const l = t.get(s);
100
+ l && l.kind === "axis" && (l.mustBeConsumed = !0);
101
+ }, m = this.getMustBeConsumedAxes(e, t);
102
+ for (const s of m)
103
+ a.has(s) || d(s);
104
+ this.allowHangingAxes || Object.entries(r).forEach(([s, { hangingAxes: l }]) => {
105
+ for (const i of l.keys())
106
+ a.has(i) || d(i);
107
107
  });
108
108
  for (const s of o) {
109
- const a = t.get(s);
110
- (a == null ? void 0 : a.kind) === "axis" && a.isNonHomogenous && !c.has(s) && u(s);
109
+ const l = t.get(s);
110
+ (l == null ? void 0 : l.kind) === "axis" && l.isNonHomogenous && !a.has(s) && d(s);
111
111
  }
112
112
  if (this.dontAllowUnfilteredHighCardinality) {
113
113
  const s = (i) => {
114
- var m;
115
- return ((m = i == null ? void 0 : i.annotations) == null ? void 0 : m[D]) === "true";
116
- }, a = ((n = e.components.filters) == null ? void 0 : n.selectorStates.reduce((i, m) => {
117
- const l = t.get(m.selectedSource);
118
- return (l == null ? void 0 : l.kind) === "column" && l.spec.axesSpec.filter(s).forEach((d) => i.add(b.fromAxisSpec(d).toCanonicalString())), (l == null ? void 0 : l.kind) === "axis" && s(l.spec) && i.add(b.fromAxisSpec(l.spec).toCanonicalString()), i;
114
+ var c;
115
+ return ((c = i == null ? void 0 : i.annotations) == null ? void 0 : c[D]) === "true";
116
+ }, l = ((n = e.components.filters) == null ? void 0 : n.selectorStates.reduce((i, c) => {
117
+ var p;
118
+ if (((p = c == null ? void 0 : c.selectedFilterValues) == null ? void 0 : p.length) !== 1 && c.type !== "subset")
119
+ return i;
120
+ const u = t.get(c.selectedSource);
121
+ return (u == null ? void 0 : u.kind) === "column" && u.spec.axesSpec.filter(s).forEach((f) => i.add(w.fromAxisSpec(f).toCanonicalString())), (u == null ? void 0 : u.kind) === "axis" && s(u.spec) && i.add(w.fromAxisSpec(u.spec).toCanonicalString()), i;
119
122
  }, /* @__PURE__ */ new Set())) ?? /* @__PURE__ */ new Set();
120
123
  this.dataInputs.forEach((i) => {
121
- for (const { selectedSource: m } of e.components[i].selectorStates) {
122
- const l = t.get(m);
123
- if ((l == null ? void 0 : l.kind) === "column" && l.spec.axesSpec.filter(s).forEach((d) => {
124
- const f = b.fromAxisSpec(d).toCanonicalString();
125
- a.has(f) || u(f);
126
- }), (l == null ? void 0 : l.kind) === "axis" && s(l.spec)) {
127
- const d = b.fromAxisSpec(l.spec).toCanonicalString();
128
- a.has(d) || u(d);
124
+ for (const { selectedSource: c } of e.components[i].selectorStates) {
125
+ const p = t.get(c);
126
+ if ((p == null ? void 0 : p.kind) === "column" && p.spec.axesSpec.filter(s).forEach((u) => {
127
+ const f = w.fromAxisSpec(u).toCanonicalString();
128
+ l.has(f) || d(f);
129
+ }), (p == null ? void 0 : p.kind) === "axis" && s(p.spec)) {
130
+ const u = w.fromAxisSpec(p.spec).toCanonicalString();
131
+ l.has(u) || d(u);
129
132
  }
130
133
  }
131
134
  });
@@ -133,11 +136,11 @@ class W {
133
136
  }
134
137
  setColumnLabels(e, t) {
135
138
  const o = [...e].filter((n) => {
136
- var c;
137
- return ((c = t.get(n)) == null ? void 0 : c.kind) === "column";
138
- }), r = F(o, (n) => t.get(n).spec);
139
- o.forEach((n, c) => {
140
- t.get(n).label = r[c].label;
139
+ var a;
140
+ return ((a = t.get(n)) == null ? void 0 : a.kind) === "column";
141
+ }), r = M(o, (n) => t.get(n).spec);
142
+ o.forEach((n, a) => {
143
+ t.get(n).label = r[a].label;
141
144
  });
142
145
  }
143
146
  /** Calculates information for data-mapping interface:
@@ -145,62 +148,62 @@ class W {
145
148
  * information for every option (label, value type, must be consumed etc),
146
149
  * information about full data-mapping state (ready to data loading and rendering or not, contains inconsistency or not) */
147
150
  async calculateOptions(e, t, o = [], r = B) {
148
- const n = this.createEmptyComponentsGuide(t), c = new Set(this.ignoredOptionIdNames), u = new Set(o), p = await P(e), s = await j(e), a = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Set(), m = await this.getParentAndHangingAxesByInputs(e, t, p, s), l = { ...this.simpleComponentControllers, ...this.filterComponentControllers };
149
- for (const [C, y] of Object.entries(l)) {
151
+ const n = this.createEmptyComponentsGuide(t), a = new Set(this.ignoredOptionIdNames), d = new Set(o), m = await P(e), s = await j(e), l = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Set(), c = await this.getParentAndHangingAxesByInputs(e, t, m, s), p = { ...this.simpleComponentControllers, ...this.filterComponentControllers };
152
+ for (const [C, y] of Object.entries(p)) {
150
153
  const S = await y.getOptions(
151
154
  e,
152
155
  t,
153
- p,
154
- s,
155
156
  m,
156
- r,
157
+ s,
157
158
  c,
158
- u
159
+ r,
160
+ a,
161
+ d
159
162
  );
160
163
  for (const g of S.options)
161
164
  i.add(g.value);
162
165
  for (const g of S.optionsInfo)
163
- a.set(...g);
166
+ l.set(...g);
164
167
  n[C] = S;
165
168
  }
166
- this.markMustBeConsumedAxes(t, a, i, m), this.setColumnLabels(i, a);
167
- const d = this.isConsistent(t, n), f = (C) => a.get(C) ?? O(C);
169
+ this.markMustBeConsumedAxes(t, l, i, c), this.setColumnLabels(i, l);
170
+ const u = this.isConsistent(t, n), f = (C) => l.get(C) ?? O(C);
168
171
  return {
169
172
  components: n,
170
173
  getSourceInfo: f,
171
174
  fullOptionsSet: i,
172
175
  readyData: this.readyDataInputs(t),
173
- ready: this.readyForPlotBuilding(t, d, i, f),
174
- consistent: d
176
+ ready: this.readyForPlotBuilding(t, u, i, f),
177
+ consistent: u
175
178
  };
176
179
  }
177
- async getUniqueSourceValuesWithLabels(e, t, o, r, n, c) {
178
- var u;
179
- const p = (i) => i.sort((m, l) => m.label.localeCompare(l.label, "en", { numeric: !0 })), s = t.getSourceInfo(o), a = (u = s.annotations) == null ? void 0 : u[E];
180
+ async getUniqueSourceValuesWithLabels(e, t, o, r, n, a) {
181
+ var d;
182
+ const m = (i) => i.sort((c, p) => c.label.localeCompare(p.label, "en", { numeric: !0 })), s = t.getSourceInfo(o), l = (d = s.annotations) == null ? void 0 : d[E];
180
183
  try {
181
- const i = a ? JSON.parse(a).map((m) => String(m)) : null;
184
+ const i = l ? JSON.parse(l).map((c) => String(c)) : null;
182
185
  if (i) {
183
- const m = i.map((l) => ({ value: l, label: l }));
184
- return p(m), { values: m, overflow: !1 };
186
+ const c = i.map((p) => ({ value: p, label: p }));
187
+ return m(c), { values: c, overflow: !1 };
185
188
  }
186
189
  } catch {
187
- console.error(`Parsing error: discrete values annotation ${a} in ${o}`);
190
+ console.error(`Parsing error: discrete values annotation ${l} in ${o}`);
188
191
  }
189
192
  if (s.kind === "axis") {
190
- const i = A(o), m = s.parentSources.map(A), l = await M(e, o, s.parentSources);
191
- let d = [];
192
- if (l) {
193
- n && (d = [{
193
+ const i = A(o), c = s.parentSources.map(A), p = await F(e, o, s.parentSources);
194
+ let u = [];
195
+ if (p) {
196
+ n && (u = [{
194
197
  type: "bySingleColumnV2",
195
198
  column: {
196
199
  type: "column",
197
- id: l.name
200
+ id: p.name
198
201
  },
199
202
  predicate: {
200
203
  operator: "StringIContains",
201
204
  substring: n
202
205
  }
203
- }]), c && (d = [{
206
+ }]), a && (u = [{
204
207
  type: "bySingleColumnV2",
205
208
  column: {
206
209
  type: "axis",
@@ -208,16 +211,16 @@ class W {
208
211
  },
209
212
  predicate: {
210
213
  operator: "StringIContains",
211
- substring: c
214
+ substring: a
212
215
  }
213
216
  }]);
214
- const { data: S, axesData: g } = await e.pFrameProvider.getSingleColumnData(l, d), v = g[i.toCanonicalString()], I = [];
215
- for (let w = 0; w < Math.min(v.length, r ?? v.length); w++)
216
- I.push({ value: String(v[w]), label: String(S[w]) });
217
- return p(I), { values: I, overflow: !(r === void 0 || v.length < r) };
217
+ const { data: S, axesData: g } = await e.pFrameProvider.getSingleColumnData(p, u), v = g[i.toCanonicalString()], I = [];
218
+ for (let b = 0; b < Math.min(v.length, r ?? v.length); b++)
219
+ I.push({ value: String(v[b]), label: String(S[b]) });
220
+ return m(I), { values: I, overflow: !(r === void 0 || v.length < r) };
218
221
  }
219
- const f = n ?? c;
220
- f && (d = [{
222
+ const f = n ?? a;
223
+ f && (u = [{
221
224
  type: "bySingleColumnV2",
222
225
  column: {
223
226
  type: "axis",
@@ -228,22 +231,22 @@ class W {
228
231
  substring: f
229
232
  }
230
233
  }]);
231
- const C = await e.pFrameProvider.getAxisUniqueValues(i, [m[0]], r, d), y = C.values.map((S) => ({ value: String(S), label: String(S) }));
232
- return p(y), { values: y, overflow: C.overflow };
234
+ const C = await e.pFrameProvider.getAxisUniqueValues(i, [c[0]], r, u), y = C.values.map((S) => ({ value: String(S), label: String(S) }));
235
+ return m(y), { values: y, overflow: C.overflow };
233
236
  }
234
237
  if (s.kind === "column") {
235
- const i = n ?? c, m = A(o), l = i ? [{
238
+ const i = n ?? a, c = A(o), p = i ? [{
236
239
  type: "bySingleColumnV2",
237
240
  column: {
238
241
  type: "column",
239
- id: m.name
242
+ id: c.name
240
243
  },
241
244
  predicate: {
242
245
  operator: "StringIContains",
243
246
  substring: i
244
247
  }
245
- }] : [], d = await e.pFrameProvider.getColumnUniqueValues(m, r, l), f = d.values.map((C) => ({ value: String(C), label: String(C) }));
246
- return p(f), { values: f, overflow: d.overflow };
248
+ }] : [], u = await e.pFrameProvider.getColumnUniqueValues(c, r, p), f = u.values.map((C) => ({ value: String(C), label: String(C) }));
249
+ return m(f), { values: f, overflow: u.overflow };
247
250
  }
248
251
  return { values: [], overflow: !1 };
249
252
  }
@@ -270,17 +273,17 @@ class W {
270
273
  if (!t || !this.readyDataInputs(e))
271
274
  return !1;
272
275
  let n = !1;
273
- for (const u of o) {
274
- const p = r(u);
275
- if (p && p.kind === "axis" && p.mustBeConsumed) {
276
+ for (const d of o) {
277
+ const m = r(d);
278
+ if (m && m.kind === "axis" && m.mustBeConsumed) {
276
279
  n = !0;
277
280
  break;
278
281
  }
279
282
  }
280
- const c = [];
281
- for (const u of Object.keys(this.simpleComponentControllers))
282
- this.simpleComponentControllers[u].isRequired && c.push(u);
283
- return c.every((u) => e.components[u].selectorStates.length > 0) && !n;
283
+ const a = [];
284
+ for (const d of Object.keys(this.simpleComponentControllers))
285
+ this.simpleComponentControllers[d].isRequired && a.push(d);
286
+ return a.every((d) => e.components[d].selectorStates.length > 0) && !n;
284
287
  }
285
288
  async createDataForPlot(e, t) {
286
289
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"ControllerBase.js","sources":["../../../../../../node_modules/@milaboratories/pf-plots/src/controllers/ControllerBase.ts"],"sourcesContent":["import {\n AxisSpec,\n LinkerMap,\n PColumnSpec,\n PObjectId,\n PTableRecordSingleValueFilterV2\n} from '@milaboratories/pl-model-common';\nimport type {\n AxisData,\n ColumnData,\n ComponentGuideFilter,\n ComponentGuideSimple,\n ComponentsGuide,\n DataByColumns,\n FilterComponentControllers,\n FilterComponents,\n InputGuide,\n InputState,\n SelectorState,\n SelectorStateFilter,\n SelectorStateSimple,\n SimpleComponentControllers,\n SimpleComponents,\n} from '../common';\nimport { DISCRETE_VALUES_KEY, HIGH_CARDINALITY } from '../constants';\nimport { PValue } from '../store';\nimport type { DataStore } from '../store';\nimport type { AxesSet, ColumnOrAxisIdString } from '../spec';\nimport { AxisId, ColumnId, columnOrAxisIdFromString } from '../spec';\nimport {\n createLinkerMap,\n createMultipliesByMap,\n dataColumnPredicateDefault,\n getColumnOrAxisValueLabelsId,\n getDefaultInfo,\n getStateCopy,\n MultipliesByMap,\n OptionsInfo,\n} from '../utils';\nimport { ComponentController } from './ComponentController';\nimport { deriveLabels } from '@platforma-sdk/model';\n\ntype InputOptionsUnion<State extends InputState> = Record<\n SimpleComponents<State> | FilterComponents<State>,\n ComponentGuideSimple | ComponentGuideFilter\n>;\nexport interface Controller<State extends InputState> {\n calculateOptions(\n store: DataStore,\n state: State,\n fixedIds?: string[],\n dataColumnPredicate?: (spec: PColumnSpec) => boolean\n ): Promise<InputGuide<State>>;\n\n getUniqueSourceValuesWithLabels(\n store: DataStore,\n inputGuide: InputGuide<State>,\n selectedSource: ColumnOrAxisIdString,\n limit?: number,\n searchQuery?: string,\n searchQueryByValue?: string,\n ): Promise<{\n values: {\n value: string;\n label: string;\n }[],\n overflow: boolean;\n }>;\n\n getEmptyInputGuide(state: State): InputGuide<State>;\n\n createDataForPlot(store: DataStore, state: State): Promise<PlotDataAndSettings>;\n\n changeSelected(\n inputName: keyof State['components'],\n store: DataStore,\n state: State,\n nextSelectorStates: SelectorStateFilter[] | SelectorStateSimple[]\n ): State;\n}\n\nexport interface PlotDataAndSettings {\n data: {\n byColumns: DataByColumns,\n axesData?: Record<string, PValue[]>\n };\n settings: Record<string, unknown>;\n}\n\nexport abstract class ControllerBase<State extends InputState> implements Controller<State> {\n readonly ignoredOptionIdNames: string[] = [];\n readonly dataInputs: string[] = [];\n readonly dontAllowUnfilteredHighCardinality: boolean = false;\n readonly allowHangingAxes: boolean = false;\n\n protected constructor(\n readonly simpleComponentControllers: SimpleComponentControllers<State>,\n readonly filterComponentControllers: FilterComponentControllers<State>\n ) { }\n\n addSelected(\n inputName: keyof State['components'],\n state: State,\n selectorState: SelectorStateFilter | SelectorStateSimple\n ) {\n if (inputName in this.simpleComponentControllers) {\n return (\n this.simpleComponentControllers[\n inputName as keyof typeof this.simpleComponentControllers\n ] as ComponentController<State, typeof inputName>\n ).addSelected(state, selectorState);\n }\n if (inputName in this.filterComponentControllers) {\n return (\n this.filterComponentControllers[\n inputName as keyof typeof this.filterComponentControllers\n ] as ComponentController<State, typeof inputName>\n ).addSelected(state, selectorState);\n }\n throw Error(`Unknown input name: ${String(inputName)}`);\n }\n\n deleteSelected(\n inputName: keyof State['components'],\n store: DataStore,\n state: State,\n selectorState: SelectorStateFilter | SelectorStateSimple\n ) {\n if (inputName in this.simpleComponentControllers) {\n return (\n this.simpleComponentControllers[\n inputName as keyof typeof this.simpleComponentControllers\n ] as ComponentController<State, typeof inputName>\n ).deleteSelected(state, selectorState.selectedSource);\n }\n if (inputName in this.filterComponentControllers) {\n return (\n this.filterComponentControllers[\n inputName as keyof typeof this.filterComponentControllers\n ] as ComponentController<State, typeof inputName>\n ).deleteSelected(state, selectorState.selectedSource);\n }\n throw Error(`Unknown input name: ${String(inputName)}`);\n }\n\n changeSelected(\n inputName: keyof State['components'],\n store: DataStore,\n state: State,\n nextSelectorStates: SelectorState[]\n ) {\n const currentStates: SelectorState[] = state.components[inputName].selectorStates;\n const deletedStates = currentStates.filter(currentState => {\n return !nextSelectorStates.find(s => s.selectedSource === currentState.selectedSource);\n });\n const addedStates = nextSelectorStates.filter(nextState => {\n return !currentStates.find(s => s.selectedSource === nextState.selectedSource);\n });\n let nextState = getStateCopy(state);\n deletedStates.forEach(selectorState => {\n nextState = this.deleteSelected(inputName, store, nextState, selectorState);\n });\n addedStates.forEach(selectorState => {\n nextState = this.addSelected(inputName, nextState, selectorState);\n });\n // reorder\n state.components[inputName].selectorStates = nextSelectorStates\n .map(st =>\n (state.components[inputName].selectorStates as SelectorState[]).find(\n s => s.selectedSource === st.selectedSource\n )\n )\n .filter(Boolean) as SelectorStateFilter[] | SelectorStateSimple[];\n return nextState;\n }\n\n switchDividableAxis(state: State, axis: AxisId): State {\n // ***\n // logic for axis dividing/collapsing\n // ***\n return getStateCopy(state);\n }\n\n private createEmptyComponentsGuide(state: State): InputOptionsUnion<State> {\n return Object.fromEntries(\n Object.entries(state.components).map(\n ([key, value]): [string, ComponentGuideSimple | ComponentGuideFilter] => {\n return [\n key,\n {\n options: [],\n optionsInfo: new Map(),\n stateConsistency: {},\n required: false,\n multipleSelectors: false,\n },\n ];\n }\n )\n ) as InputOptionsUnion<State>;\n }\n\n getEmptyInputGuide(state: State): InputGuide<State> {\n return {\n components: this.createEmptyComponentsGuide(state) as ComponentsGuide<State['components']>,\n getSourceInfo: (sourceIdStr: ColumnOrAxisIdString) => getDefaultInfo(sourceIdStr),\n fullOptionsSet: new Set(),\n readyData: false,\n ready: false,\n consistent: true,\n };\n }\n\n getConsumedOptionsSet(state: State) {\n const consumedSourcesSet: Set<ColumnOrAxisIdString> = new Set();\n\n for (const componentName of Object.keys(this.simpleComponentControllers) as SimpleComponents<State>[]) {\n if (this.simpleComponentControllers[componentName].isDimensionsConsumer) {\n for (const { selectedSource } of state.components[componentName].selectorStates) {\n consumedSourcesSet.add(selectedSource);\n }\n }\n }\n for (const componentName of Object.keys(this.filterComponentControllers) as FilterComponents<State>[]) {\n if (this.filterComponentControllers[componentName].isDimensionsConsumer) {\n for (const { selectedSource, type, selectedFilterValues } of state.components[componentName].selectorStates as SelectorStateFilter[]) {\n if (type === 'equals' && selectedFilterValues?.length === 1) {\n consumedSourcesSet.add(selectedSource);\n }\n }\n }\n }\n return consumedSourcesSet;\n }\n\n async getParentAndHangingAxesByInputs(store: DataStore, state: State, linkerMap: LinkerMap, multipliesByMap: MultipliesByMap): Promise<Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>> {\n const allControllers = { ...this.simpleComponentControllers, ...this.filterComponentControllers };\n const result: Record<string, { parentsAxes: AxesSet, hangingAxes: AxesSet }> = {};\n for (const [name, componentController] of Object.entries(allControllers)) {\n result[name] = await (\n componentController as ComponentController<State, SimpleComponents<State> | FilterComponents<State>>\n ).getParentAndHangingAxes(store, state, linkerMap, multipliesByMap);\n }\n\n return result as Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>;\n }\n\n /** Depends on chart type. */\n getMustBeConsumedAxes(state: State, optionsInfo: OptionsInfo): Set<ColumnOrAxisIdString> {\n return new Set();\n }\n\n /** Axes that go to the \"Drag to build the chart\" section.\n * If some of them is not moved to 'filters', 'tabBy' or 'facetBy' (dimension reducers) chart can't be rendered */\n markMustBeConsumedAxes(\n state: State,\n optionsInfo: OptionsInfo,\n fullOptionsSet: Set<ColumnOrAxisIdString>,\n parentAndHangingAxes: Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>\n ) {\n // set of columns and axes that selected in dimension-reducing components\n const consumedSourcesSet = this.getConsumedOptionsSet(state);\n\n const markMustBeConsumed = (id: string) => {\n const option = optionsInfo.get(id);\n if (option && option.kind === 'axis') {\n option.mustBeConsumed = true;\n }\n };\n // Depends on chart type: axes from heatmap data column, to make visible what axes should be moved to x/y; hanging axes from X/Y scatterplot\n const mustBeConsumedAxes = this.getMustBeConsumedAxes(state, optionsInfo);\n for (const idStr of mustBeConsumedAxes) {\n if (!consumedSourcesSet.has(idStr)) {\n markMustBeConsumed(idStr);\n }\n }\n\n if (!this.allowHangingAxes) {\n // All 'hanging' axes must be moved to dimension reducers (for example, axes that exist in X/Y/Data source column, but not exist in Grouping)\n Object.entries(parentAndHangingAxes).forEach(([name, { hangingAxes }]) => {\n for (const idStr of hangingAxes.keys()) {\n if (!consumedSourcesSet.has(idStr)) {\n markMustBeConsumed(idStr);\n }\n }\n });\n }\n\n // Mark all non-homogenous axes\n for (const idStr of fullOptionsSet) {\n const info = optionsInfo.get(idStr);\n if (info?.kind === 'axis' && info.isNonHomogenous && !consumedSourcesSet.has(idStr)) {\n markMustBeConsumed(idStr);\n }\n }\n\n if (this.dontAllowUnfilteredHighCardinality) {\n // Axes marked 'high cardinality' should be in the filter. Or some column that has this axis should be in the filter.\n // If not - they are marked 'mustBeConsumed'.\n // But also they can be anywhere else.\n const isHighCardinality = (spec: AxisSpec) => spec?.annotations?.[HIGH_CARDINALITY] === 'true';\n const consumedHighCardinalityAxes =\n state.components['filters']?.selectorStates.reduce((consumed: Set<string>, s) => {\n const info = optionsInfo.get(s.selectedSource);\n if (info?.kind === 'column') {\n const axes = info.spec.axesSpec.filter(isHighCardinality);\n axes.forEach(spec => consumed.add(AxisId.fromAxisSpec(spec).toCanonicalString()));\n }\n if (info?.kind === 'axis' && isHighCardinality(info.spec)) {\n consumed.add(AxisId.fromAxisSpec(info.spec).toCanonicalString());\n }\n return consumed;\n }, new Set<string>()) ?? new Set<string>();\n this.dataInputs.forEach(inputName => {\n for (const { selectedSource } of state.components[inputName].selectorStates) {\n const info = optionsInfo.get(selectedSource);\n if (info?.kind === 'column') {\n const axes = info.spec.axesSpec.filter(isHighCardinality);\n axes.forEach(spec => {\n const idStr = AxisId.fromAxisSpec(spec).toCanonicalString();\n if (!consumedHighCardinalityAxes.has(idStr)) {\n markMustBeConsumed(idStr);\n }\n });\n }\n if (info?.kind === 'axis' && isHighCardinality(info.spec)) {\n const idStr = AxisId.fromAxisSpec(info.spec).toCanonicalString();\n if (!consumedHighCardinalityAxes.has(idStr)) {\n markMustBeConsumed(idStr);\n }\n }\n }\n });\n }\n }\n\n setColumnLabels(optionsSet: Set<ColumnOrAxisIdString>, optionsInfo: OptionsInfo) {\n const columnIds = [...optionsSet].filter((v) => optionsInfo.get(v)?.kind === 'column');\n const labelsMap = deriveLabels(columnIds, (id: string) => (optionsInfo.get(id) as ColumnData).spec);\n columnIds.forEach((id, idx) => {\n optionsInfo.get(id)!.label = labelsMap[idx].label;\n });\n\n }\n\n /** Calculates information for data-mapping interface: \n * options for every input (basket), \n * information for every option (label, value type, must be consumed etc),\n * information about full data-mapping state (ready to data loading and rendering or not, contains inconsistency or not) */\n async calculateOptions(\n store: DataStore,\n state: State,\n fixedIds: string[] = [],\n dataColumnPredicate = dataColumnPredicateDefault\n ): Promise<InputGuide<State>> {\n // creating empty options object corresponding to the provided state\n const resultComponentsGuide: InputOptionsUnion<State> = this.createEmptyComponentsGuide(state);\n\n // for trees block - to ignore treeId and donorId in the interface\n const ignoredNamesSet = new Set<string>(this.ignoredOptionIdNames);\n const fixedSelectedSet = new Set<ColumnOrAxisIdString>(fixedIds);\n\n // Two type of linkers: regular ones and \"multiplying\"\n const linkerMap = await createLinkerMap(store);\n const multipliesByMap = await createMultipliesByMap(store);\n\n const optionsInfo: OptionsInfo = new Map();\n const fullOptionsSet = new Set<ColumnOrAxisIdString>();\n\n const parentAndHangingAxes = await this.getParentAndHangingAxesByInputs(store, state, linkerMap, multipliesByMap);\n\n const allControllers = { ...this.simpleComponentControllers, ...this.filterComponentControllers };\n for (const [name, componentController] of Object.entries(allControllers) as ([keyof InputOptionsUnion<State>, ComponentController<State, SimpleComponents<State> | FilterComponents<State>>][])) {\n const componentGuide = await componentController.getOptions(\n store, state,\n linkerMap, multipliesByMap,\n parentAndHangingAxes,\n dataColumnPredicate,\n ignoredNamesSet, fixedSelectedSet\n );\n for (const item of componentGuide.options) {\n fullOptionsSet.add(item.value);\n }\n for (const v of componentGuide.optionsInfo) {\n optionsInfo.set(...v);\n }\n resultComponentsGuide[name] = componentGuide;\n }\n\n this.markMustBeConsumedAxes(state, optionsInfo, fullOptionsSet, parentAndHangingAxes);\n this.setColumnLabels(fullOptionsSet, optionsInfo);\n\n const consistent = this.isConsistent(state, resultComponentsGuide as ComponentsGuide<State['components']>);\n const getSourceInfo = (sourceIdStr: ColumnOrAxisIdString) => optionsInfo.get(sourceIdStr) ?? getDefaultInfo(sourceIdStr);\n return {\n components: resultComponentsGuide as ComponentsGuide<State['components']>,\n getSourceInfo,\n fullOptionsSet,\n readyData: this.readyDataInputs(state),\n ready: this.readyForPlotBuilding(state, consistent, fullOptionsSet, getSourceInfo),\n consistent,\n };\n }\n\n async getUniqueSourceValuesWithLabels(\n store: DataStore,\n inputGuide: InputGuide<State>,\n selectedSource: ColumnOrAxisIdString,\n limit?: number,\n searchQuery?: string, // search by labels if axis labels exist\n searchQueryValue?: string // search by value, not by label\n ): Promise<{\n values: {\n value: string;\n label: string;\n }[],\n overflow: boolean;\n }> {\n const sortValues = (values: { value: string, label: string }[]) => values.sort((a, b) => a.label.localeCompare(b.label, 'en', { numeric: true }))\n const info = inputGuide.getSourceInfo(selectedSource);\n const discreteValuesStr = info.annotations?.[DISCRETE_VALUES_KEY];\n\n // if column's annotation contains discrete values - take them from it\n try {\n const discreteValues: string[] | null = discreteValuesStr\n ? (JSON.parse(discreteValuesStr) as (string | number)[]).map(v => String(v))\n : null;\n if (discreteValues) {\n const values = discreteValues.map(v => ({ value: v, label: v }));\n sortValues(values);\n return { values, overflow: false };\n }\n } catch (err) {\n console.error(`Parsing error: discrete values annotation ${discreteValuesStr} in ${selectedSource}`)\n }\n\n // consider label column for axis\n if (info.kind === 'axis') {\n const axisId = columnOrAxisIdFromString(selectedSource) as AxisId;\n const parentSources = info.parentSources.map(columnOrAxisIdFromString) as ColumnId[];\n const labelsColumnId = await getColumnOrAxisValueLabelsId(store, selectedSource, info.parentSources);\n let filters: PTableRecordSingleValueFilterV2[] = [];\n if (labelsColumnId) {\n if (searchQuery) {\n filters = [{\n type: 'bySingleColumnV2',\n column: {\n type: 'column',\n id: labelsColumnId.name as PObjectId\n },\n predicate: {\n operator: 'StringIContains',\n substring: searchQuery\n }\n }];\n }\n if (searchQueryValue) {\n filters = [{\n type: 'bySingleColumnV2',\n column: {\n type: 'axis',\n id: axisId.toPFrameId()\n },\n predicate: {\n operator: 'StringIContains',\n substring: searchQueryValue\n }\n }];\n }\n const { data: dataValues, axesData } = await store.pFrameProvider.getSingleColumnData(labelsColumnId, filters);\n const axisKeys = axesData[axisId.toCanonicalString()];\n const values: { value: string, label: string }[] = [];\n for (let i = 0; i < Math.min(axisKeys.length, limit ?? axisKeys.length); i++) {\n values.push({ value: String(axisKeys[i]), label: String(dataValues[i]) });\n }\n sortValues(values);\n return { values, overflow: !(limit === undefined || axisKeys.length < limit) };\n }\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n if (searchInLabelsOrValue) {\n filters = [{\n type: 'bySingleColumnV2',\n column: {\n type: 'axis',\n id: axisId.toPFrameId()\n },\n predicate: {\n operator: 'StringIContains',\n substring: searchInLabelsOrValue\n }\n }];\n }\n const response = await store.pFrameProvider.getAxisUniqueValues(axisId, [parentSources[0]], limit, filters);\n const values = response.values.map(v => ({ value: String(v), label: String(v) }));\n sortValues(values);\n return { values, overflow: response.overflow };\n }\n if (info.kind === 'column') {\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n const columnId = columnOrAxisIdFromString(selectedSource) as ColumnId;\n const filters: PTableRecordSingleValueFilterV2[] = searchInLabelsOrValue ? [{\n type: 'bySingleColumnV2',\n column: {\n type: 'column',\n id: columnId.name as PObjectId\n },\n predicate: {\n operator: 'StringIContains',\n substring: searchInLabelsOrValue\n }\n }] : [];\n const response = await store.pFrameProvider.getColumnUniqueValues(columnId, limit, filters);\n const values = response.values.map(v => ({ value: String(v), label: String(v) }));\n sortValues(values);\n return { values, overflow: response.overflow };\n }\n return { values: [], overflow: false };\n }\n\n checkStateConsistency(\n state: State, componentsGuide: ComponentsGuide<State['components']>\n ): Map<keyof State['components'], Record<string, boolean>> {\n const result: Map<keyof State['components'], Record<string, boolean>> = new Map();\n const allControllers = { ...this.simpleComponentControllers, ...this.filterComponentControllers };\n\n for (const component of Object.keys(allControllers) as SimpleComponents<State>[]) {\n result.set(\n component as keyof State['components'],\n allControllers[component].checkStateConsistency(state, componentsGuide[component].options)\n );\n }\n return result;\n }\n\n isConsistent(state: State, componentsGuide: ComponentsGuide<State['components']>): boolean {\n const consistency = this.checkStateConsistency(state, componentsGuide);\n for (const value of consistency.values()) {\n if (Object.values(value).some(item => !item)) {\n return false;\n }\n }\n return true;\n }\n\n readyDataInputs(state: State): boolean {\n return this.dataInputs.every(name => state.components[name].selectorStates.length > 0);\n }\n\n readyForPlotBuilding(\n state: State,\n consistent: boolean,\n fullOptionsSet: Set<ColumnOrAxisIdString>,\n getSourceInfo: (id: ColumnOrAxisIdString) => ColumnData | AxisData\n ): boolean {\n if (!consistent || !this.readyDataInputs(state)) {\n return false;\n }\n let hasFreeDimensions: boolean = false;\n for (const optionId of fullOptionsSet) {\n const info = getSourceInfo(optionId);\n if (info && info.kind === 'axis' && info.mustBeConsumed) {\n hasFreeDimensions = true;\n break;\n }\n }\n\n const requiredComponents: (keyof State['components'])[] = [];\n for (const componentName of Object.keys(this.simpleComponentControllers) as SimpleComponents<State>[]) {\n if (this.simpleComponentControllers[componentName].isRequired) {\n requiredComponents.push(componentName);\n }\n }\n\n return (\n requiredComponents.every(name => state.components[name].selectorStates.length > 0) &&\n !hasFreeDimensions\n );\n }\n\n abstract createDataByColumns(store: DataStore, state: State): Promise<PlotDataAndSettings['data']>;\n\n abstract createChartSettings(store: DataStore, state: State): Promise<PlotDataAndSettings['settings']>;\n\n async createDataForPlot(store: DataStore, state: State): Promise<PlotDataAndSettings> {\n return {\n data: await this.createDataByColumns(store, state),\n settings: await this.createChartSettings(store, state),\n };\n }\n}\n"],"names":["ControllerBase","simpleComponentControllers","filterComponentControllers","__publicField","inputName","state","selectorState","store","nextSelectorStates","currentStates","deletedStates","currentState","s","addedStates","nextState","c","getStateCopy","st","axis","key","value","sourceIdStr","getDefaultInfo","consumedSourcesSet","componentName","selectedSource","type","selectedFilterValues","linkerMap","multipliesByMap","allControllers","result","name","componentController","optionsInfo","fullOptionsSet","parentAndHangingAxes","markMustBeConsumed","id","option","mustBeConsumedAxes","idStr","hangingAxes","info","isHighCardinality","spec","_a","HIGH_CARDINALITY","consumedHighCardinalityAxes","consumed","AxisId","optionsSet","columnIds","v","labelsMap","deriveLabels","idx","fixedIds","dataColumnPredicate","dataColumnPredicateDefault","resultComponentsGuide","ignoredNamesSet","fixedSelectedSet","createLinkerMap","createMultipliesByMap","componentGuide","item","consistent","getSourceInfo","inputGuide","limit","searchQuery","searchQueryValue","sortValues","values","a","b","discreteValuesStr","DISCRETE_VALUES_KEY","discreteValues","axisId","columnOrAxisIdFromString","parentSources","labelsColumnId","getColumnOrAxisValueLabelsId","filters","dataValues","axesData","axisKeys","i","searchInLabelsOrValue","response","columnId","f","componentsGuide","component","consistency","hasFreeDimensions","optionId","requiredComponents"],"mappings":";;;;;;;;;;;AAyFO,MAAeA,EAAsE;AAAA,EAM9E,YACGC,GACAC,GACX;AAROC,IAAAA,EAAA,8BAAiC,EAAC,GAClCA,EAAA,oBAAuB,EAAC,GACxBA,EAAA,MAAA,sCAA8C,EAAA,GAC9CA,EAAA,MAAA,oBAA4B,EAAA,GAGxB,KAAA,6BAAAF,GACA,KAAA,6BAAAC;AAAAA,EAAA;AAAA,EAGb,YACIE,GACAC,GACAC,GACF;AACM,QAAAF,KAAa,KAAK;AAClB,aACI,KAAK,2BACLA,CACA,EACF,YAAYC,GAAOC,CAAa;AAElC,QAAAF,KAAa,KAAK;AAClB,aACI,KAAK,2BACLA,CACA,EACF,YAAYC,GAAOC,CAAa;AAEtC,UAAM,MAAM,uBAAuB,OAAOF,CAAS,CAAC,EAAE;AAAA,EAAA;AAAA,EAG1D,eACIA,GACAG,GACAF,GACAC,GACF;AACM,QAAAF,KAAa,KAAK;AAClB,aACI,KAAK,2BACLA,CACA,EACF,eAAeC,GAAOC,EAAc,cAAc;AAEpD,QAAAF,KAAa,KAAK;AAClB,aACI,KAAK,2BACLA,CACA,EACF,eAAeC,GAAOC,EAAc,cAAc;AAExD,UAAM,MAAM,uBAAuB,OAAOF,CAAS,CAAC,EAAE;AAAA,EAAA;AAAA,EAG1D,eACIA,GACAG,GACAF,GACAG,GACF;AACE,UAAMC,IAAiCJ,EAAM,WAAWD,CAAS,EAAE,gBAC7DM,IAAgBD,EAAc,OAAO,CAAgBE,MAChD,CAACH,EAAmB,KAAK,OAAKI,EAAE,mBAAmBD,EAAa,cAAc,CACxF,GACKE,IAAcL,EAAmB,OAAO,CAAAM,MACnC,CAACL,EAAc,KAAK,CAAAM,MAAKH,EAAE,mBAAmBE,EAAU,cAAc,CAChF;AACG,QAAAA,IAAYE,EAAaX,CAAK;AAClC,WAAAK,EAAc,QAAQ,CAAiBJ,MAAA;AACnCQ,MAAAA,IAAY,KAAK,eAAeV,GAAWG,GAAOO,GAAWR,CAAa;AAAA,IAAA,CAC7E,GACDO,EAAY,QAAQ,CAAiBP,MAAA;AACjCQ,MAAAA,IAAY,KAAK,YAAYV,GAAWU,GAAWR,CAAa;AAAA,IAAA,CACnE,GAEDD,EAAM,WAAWD,CAAS,EAAE,iBAAiBI,EACxC;AAAA,MAAI,CACAS,MAAAZ,EAAM,WAAWD,CAAS,EAAE,eAAmC;AAAA,QAC5D,CAAAQ,MAAKA,EAAE,mBAAmBK,EAAG;AAAA,MAAA;AAAA,IAAA,EAGpC,OAAO,OAAO,GACZH;AAAAA,EAAA;AAAA,EAGX,oBAAoBT,GAAca,GAAqB;AAInD,WAAOF,EAAaX,CAAK;AAAA,EAAA;AAAA,EAGrB,2BAA2BA,GAAwC;AACvE,WAAO,OAAO;AAAA,MACV,OAAO,QAAQA,EAAM,UAAU,EAAE;AAAA,QAC7B,CAAC,CAACc,GAAKC,CAAK,MACD;AAAA,UACHD;AAAAA,UACA;AAAA,YACI,SAAS,CAAA;AAAA,YACT,iCAAiB,IAAA;AAAA,YACjB,kBAAkB,CAAA;AAAA,YAClB,UAAU;AAAA,YACV,mBAAmB;AAAA,UAAA;AAAA,QAAA;AAAA,MAE3B;AAAA,IACJ;AAAA,EAER;AAAA,EAGJ,mBAAmBd,GAAiC;AACzC,WAAA;AAAA,MACH,YAAY,KAAK,2BAA2BA,CAAK;AAAA,MACjD,eAAe,CAACgB,MAAsCC,EAAeD,CAAW;AAAA,MAChF,oCAAoB,IAAA;AAAA,MACpB,WAAW;AAAA,MACX,OAAO;AAAA,MACP,YAAY;AAAA,IAAA;AAAA,EAChB;AAAA,EAGJ,sBAAsBhB,GAAc;AAC1B,UAAAkB,wBAAoD,IAAA;AAE1D,eAAWC,KAAiB,OAAO,KAAK,KAAK,0BAA0B;AACnE,UAAI,KAAK,2BAA2BA,CAAa,EAAE;AAC/C,mBAAW,EAAE,gBAAAC,EAAAA,KAAoBpB,EAAM,WAAWmB,CAAa,EAAE;AAC7DD,YAAmB,IAAIE,CAAc;AAIjD,eAAWD,KAAiB,OAAO,KAAK,KAAK,0BAA0B;AACnE,UAAI,KAAK,2BAA2BA,CAAa,EAAE;AACpC,mBAAA,EAAE,gBAAAC,GAAgB,MAAAC,GAAM,sBAAAC,EAAAA,KAA0BtB,EAAM,WAAWmB,CAAa,EAAE;AACrFE,UAAAA,MAAS,aAAYC,KAAA,OAAA,SAAAA,EAAsB,YAAW,KACtDJ,EAAmB,IAAIE,CAAc;AAK9C,WAAAF;AAAAA,EAAA;AAAA,EAGX,MAAM,gCAAgChB,GAAkBF,GAAcuB,GAAsBC,GAA8H;AACtN,UAAMC,IAAiB,EAAE,GAAG,KAAK,4BAA4B,GAAG,KAAK,8BAC/DC,IAAyE,CAAA;AAC/E,eAAW,CAACC,GAAMC,CAAmB,KAAK,OAAO,QAAQH,CAAc;AAC5DC,MAAAA,EAAAC,CAAI,IAAI,MACXC,EACF,wBAAwB1B,GAAOF,GAAOuB,GAAWC,CAAe;AAG/D,WAAAE;AAAAA,EAAA;AAAA;AAAA,EAIX,sBAAsB1B,GAAc6B,GAAqD;AACrF,WAAA,oBAAW,IAAA;AAAA,EAAI;AAAA;AAAA;AAAA,EAKnB,uBACI7B,GACA6B,GACAC,GACAC,GACF;;AAEQ,UAAAb,IAAqB,KAAK,sBAAsBlB,CAAK,GAErDgC,IAAqB,CAACC,MAAe;AACjC,YAAAC,IAASL,EAAY,IAAII,CAAE;AAC7BC,MAAAA,KAAUA,EAAO,SAAS,WAC1BA,EAAO,iBAAiB;AAAA,IAEhC,GAEMC,IAAqB,KAAK,sBAAsBnC,GAAO6B,CAAW;AACxE,eAAWO,KAASD;AACXjB,MAAAA,EAAmB,IAAIkB,CAAK,KAC7BJ,EAAmBI,CAAK;AAI3B,SAAK,oBAEC,OAAA,QAAQL,CAAoB,EAAE,QAAQ,CAAC,CAACJ,GAAM,EAAE,aAAAU,EAAAA,CAAa,MAAM;AAC3D,iBAAAD,KAASC,EAAY,KAAA;AACvBnB,QAAAA,EAAmB,IAAIkB,CAAK,KAC7BJ,EAAmBI,CAAK;AAAA,IAEhC,CACH;AAIL,eAAWA,KAASN,GAAgB;AAC1B,YAAAQ,IAAOT,EAAY,IAAIO,CAAK;AAC9B,OAAAE,KAAA,OAAA,SAAAA,EAAM,UAAS,UAAUA,EAAK,mBAAmB,CAACpB,EAAmB,IAAIkB,CAAK,KAC9EJ,EAAmBI,CAAK;AAAA,IAC5B;AAGJ,QAAI,KAAK,oCAAoC;AAIzC,YAAMG,IAAoB,CAACC,MAAA;;AAAmB,iBAAAC,IAAAD,KAAA,OAAA,SAAAA,EAAM,gBAAN,OAAA,SAAAC,EAAoBC,CAAAA,OAAsB;AAAA,MAAA,GAClFC,MACFF,IAAAzC,EAAM,WAAW,YAAjB,OAAA,SAAAyC,EAA6B,eAAe,OAAO,CAACG,GAAuBrC,MAAM;AAC7E,cAAM+B,IAAOT,EAAY,IAAItB,EAAE,cAAc;AACzC,gBAAA+B,KAAA,OAAA,SAAAA,EAAM,UAAS,YACFA,EAAK,KAAK,SAAS,OAAOC,CAAiB,EACnD,QAAQ,CAAQC,MAAAI,EAAS,IAAIC,EAAO,aAAaL,CAAI,EAAE,kBAAA,CAAmB,CAAC,IAEhFF,KAAA,gBAAAA,EAAM,UAAS,UAAUC,EAAkBD,EAAK,IAAI,KACpDM,EAAS,IAAIC,EAAO,aAAaP,EAAK,IAAI,EAAE,mBAAmB,GAE5DM;AAAAA,MAAA,GACJ,oBAAA,KAAA,MAAA,oBAAsB,IAAA;AAC5B,WAAA,WAAW,QAAQ,CAAa7C,MAAA;AACjC,mBAAW,EAAE,gBAAAqB,EAAAA,KAAoBpB,EAAM,WAAWD,CAAS,EAAE,gBAAgB;AACnE,gBAAAuC,IAAOT,EAAY,IAAIT,CAAc;AAU3C,eATIkB,KAAA,OAAA,SAAAA,EAAM,UAAS,YACFA,EAAK,KAAK,SAAS,OAAOC,CAAiB,EACnD,QAAQ,CAAQC,MAAA;AACjB,kBAAMJ,IAAQS,EAAO,aAAaL,CAAI,EAAE,kBAAA;AACnCG,YAAAA,EAA4B,IAAIP,CAAK,KACtCJ,EAAmBI,CAAK;AAAA,UAC5B,CACH,IAEDE,KAAA,OAAA,SAAAA,EAAM,UAAS,UAAUC,EAAkBD,EAAK,IAAI,GAAG;AACvD,kBAAMF,IAAQS,EAAO,aAAaP,EAAK,IAAI,EAAE,kBAAA;AACxCK,YAAAA,EAA4B,IAAIP,CAAK,KACtCJ,EAAmBI,CAAK;AAAA,UAC5B;AAAA,QACJ;AAAA,MACJ,CACH;AAAA,IAAA;AAAA,EACL;AAAA,EAGJ,gBAAgBU,GAAuCjB,GAA0B;AAC7E,UAAMkB,IAAY,CAAC,GAAGD,CAAU,EAAE,OAAO,CAACE,MAAM;;AAAA,eAAAP,IAAAZ,EAAY,IAAImB,CAAC,MAAjB,OAAA,SAAAP,EAAoB,UAAS;AAAA,IAAA,CAAQ,GAC/EQ,IAAYC,EAAaH,GAAW,CAACd,MAAgBJ,EAAY,IAAII,CAAE,EAAiB,IAAI;AACxFc,IAAAA,EAAA,QAAQ,CAACd,GAAIkB,MAAQ;AAC3BtB,QAAY,IAAII,CAAE,EAAG,QAAQgB,EAAUE,CAAG,EAAE;AAAA,IAAA,CAC/C;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQL,MAAM,iBACFjD,GACAF,GACAoD,IAAqB,CAAA,GACrBC,IAAsBC,GACI;AAEpB,UAAAC,IAAkD,KAAK,2BAA2BvD,CAAK,GAGvFwD,IAAkB,IAAI,IAAY,KAAK,oBAAoB,GAC3DC,IAAmB,IAAI,IAA0BL,CAAQ,GAGzD7B,IAAY,MAAMmC,EAAgBxD,CAAK,GACvCsB,IAAkB,MAAMmC,EAAsBzD,CAAK,GAEnD2B,IAAAA,oBAA+B,OAC/BC,IAAAA,oBAAqB,OAErBC,IAAuB,MAAM,KAAK,gCAAgC7B,GAAOF,GAAOuB,GAAWC,CAAe,GAE1GC,IAAiB,EAAE,GAAG,KAAK,4BAA4B,GAAG,KAAK,2BAAA;AACrE,eAAW,CAACE,GAAMC,CAAmB,KAAK,OAAO,QAAQH,CAAc,GAA0H;AACvL,YAAAmC,IAAiB,MAAMhC,EAAoB;AAAA,QAC7C1B;AAAAA,QAAOF;AAAAA,QACPuB;AAAAA,QAAWC;AAAAA,QACXO;AAAAA,QACAsB;AAAAA,QACAG;AAAAA,QAAiBC;AAAAA,MAAA;AAEV,iBAAAI,KAAQD,EAAe;AACf9B,QAAAA,EAAA,IAAI+B,EAAK,KAAK;AAEtB,iBAAAb,KAAKY,EAAe;AACf/B,QAAAA,EAAA,IAAI,GAAGmB,CAAC;AAExBO,MAAAA,EAAsB5B,CAAI,IAAIiC;AAAAA,IAAA;AAGlC,SAAK,uBAAuB5D,GAAO6B,GAAaC,GAAgBC,CAAoB,GAC/E,KAAA,gBAAgBD,GAAgBD,CAAW;AAEhD,UAAMiC,IAAa,KAAK,aAAa9D,GAAOuD,CAA6D,GACnGQ,IAAgB,CAAC/C,MAAsCa,EAAY,IAAIb,CAAW,KAAKC,EAAeD,CAAW;AAChH,WAAA;AAAA,MACH,YAAYuC;AAAAA,MACZ,eAAAQ;AAAAA,MACA,gBAAAjC;AAAAA,MACA,WAAW,KAAK,gBAAgB9B,CAAK;AAAA,MACrC,OAAO,KAAK,qBAAqBA,GAAO8D,GAAYhC,GAAgBiC,CAAa;AAAA,MACjF,YAAAD;AAAAA,IAAA;AAAA,EACJ;AAAA,EAGJ,MAAM,gCACF5D,GACA8D,GACA5C,GACA6C,GACAC,GACAC,GAOD;;AACC,UAAMC,IAAa,CAACC,MAA+CA,EAAO,KAAK,CAACC,GAAGC,MAAMD,EAAE,MAAM,cAAcC,EAAE,OAAO,MAAM,EAAE,SAAS,GAAA,CAAM,CAAC,GAC1IjC,IAAO0B,EAAW,cAAc5C,CAAc,GAC9CoD,KAAoB/B,IAAAH,EAAK,gBAAL,gBAAAG,EAAmBgC,CAAAA;AAGzC,QAAA;AACM,YAAAC,IAAkCF,IACjC,KAAK,MAAMA,CAAiB,EAA0B,IAAI,CAAKxB,MAAA,OAAOA,CAAC,CAAC,IACzE;AACN,UAAI0B,GAAgB;AACV,cAAAL,IAASK,EAAe,IAAI,CAAA1B,OAAM,EAAE,OAAOA,GAAG,OAAOA,EAAAA,EAAI;AAC/D,eAAAoB,EAAWC,CAAM,GACV,EAAE,QAAAA,GAAQ,UAAU,GAAA;AAAA,MAAM;AAAA,IAAA,QAE3B;AACV,cAAQ,MAAM,6CAA6CG,CAAiB,OAAOpD,CAAc,EAAE;AAAA,IAAA;AAInG,QAAAkB,EAAK,SAAS,QAAQ;AAChB,YAAAqC,IAASC,EAAyBxD,CAAc,GAChDyD,IAAgBvC,EAAK,cAAc,IAAIsC,CAAwB,GAC/DE,IAAiB,MAAMC,EAA6B7E,GAAOkB,GAAgBkB,EAAK,aAAa;AACnG,UAAI0C,IAA6C,CAAA;AACjD,UAAIF,GAAgB;AACZZ,QAAAA,MACAc,IAAU,CAAC;AAAA,UACP,MAAM;AAAA,UACN,QAAQ;AAAA,YACJ,MAAM;AAAA,YACN,IAAIF,EAAe;AAAA,UAAA;AAAA,UAEvB,WAAW;AAAA,YACP,UAAU;AAAA,YACV,WAAWZ;AAAAA,UAAA;AAAA,QAAA,CAElB,IAEDC,MACAa,IAAU,CAAC;AAAA,UACP,MAAM;AAAA,UACN,QAAQ;AAAA,YACJ,MAAM;AAAA,YACN,IAAIL,EAAO,WAAA;AAAA,UAAW;AAAA,UAE1B,WAAW;AAAA,YACP,UAAU;AAAA,YACV,WAAWR;AAAAA,UAAA;AAAA,QAAA,CAElB;AAEC,cAAA,EAAE,MAAMc,GAAY,UAAAC,MAAa,MAAMhF,EAAM,eAAe,oBAAoB4E,GAAgBE,CAAO,GACvGG,IAAWD,EAASP,EAAO,mBAAmB,GAC9CN,IAA6C,CAAA;AAC1C,iBAAAe,IAAI,GAAGA,IAAI,KAAK,IAAID,EAAS,QAAQlB,KAASkB,EAAS,MAAM,GAAGC;AACrEf,UAAAA,EAAO,KAAK,EAAE,OAAO,OAAOc,EAASC,CAAC,CAAC,GAAG,OAAO,OAAOH,EAAWG,CAAC,CAAC,EAAA,CAAG;AAE5E,eAAAhB,EAAWC,CAAM,GACV,EAAE,QAAAA,GAAQ,UAAU,EAAEJ,MAAU,UAAakB,EAAS,SAASlB,GAAAA;AAAAA,MAAO;AAEjF,YAAMoB,IAAwBnB,KAAeC;AACzCkB,MAAAA,MACAL,IAAU,CAAC;AAAA,QACP,MAAM;AAAA,QACN,QAAQ;AAAA,UACJ,MAAM;AAAA,UACN,IAAIL,EAAO,WAAA;AAAA,QAAW;AAAA,QAE1B,WAAW;AAAA,UACP,UAAU;AAAA,UACV,WAAWU;AAAAA,QAAA;AAAA,MAAA,CAElB;AAEL,YAAMC,IAAW,MAAMpF,EAAM,eAAe,oBAAoByE,GAAQ,CAACE,EAAc,CAAC,CAAC,GAAGZ,GAAOe,CAAO,GACpGX,IAASiB,EAAS,OAAO,IAAI,CAAA,OAAM,EAAE,OAAO,OAAOtC,CAAC,GAAG,OAAO,OAAOA,CAAC,EAAA,EAAI;AAChF,aAAAoB,EAAWC,CAAM,GACV,EAAE,QAAAA,GAAQ,UAAUiB,EAAS,SAAA;AAAA,IAAS;AAE7C,QAAAhD,EAAK,SAAS,UAAU;AACxB,YAAM+C,IAAwBnB,KAAeC,GACvCoB,IAAWX,EAAyBxD,CAAc,GAClD4D,IAA6CK,IAAwB,CAAC;AAAA,QACxE,MAAM;AAAA,QACN,QAAQ;AAAA,UACJ,MAAM;AAAA,UACN,IAAIE,EAAS;AAAA,QAAA;AAAA,QAEjB,WAAW;AAAA,UACP,UAAU;AAAA,UACV,WAAWF;AAAAA,QAAA;AAAA,MAAA,CAElB,IAAI,CAAA,GACCC,IAAW,MAAMpF,EAAM,eAAe,sBAAsBqF,GAAUtB,GAAOe,CAAO,GACpFX,IAASiB,EAAS,OAAO,IAAI,CAAAE,OAAM,EAAE,OAAO,OAAOxC,CAAC,GAAG,OAAO,OAAOA,CAAC,EAAA,EAAI;AAChF,aAAAoB,EAAWC,CAAM,GACV,EAAE,QAAAA,GAAQ,UAAUiB,EAAS,SAAA;AAAA,IAAS;AAEjD,WAAO,EAAE,QAAQ,IAAI,UAAU,GAAA;AAAA,EAAM;AAAA,EAGzC,sBACItF,GAAcyF,GACyC;AACjD,UAAA/D,IAAAA,oBAAsE,IAAA,GACtED,IAAiB,EAAE,GAAG,KAAK,4BAA4B,GAAG,KAAK,2BAAA;AAErE,eAAWiE,KAAa,OAAO,KAAKjE,CAAc;AACvCC,MAAAA,EAAA;AAAA,QACHgE;AAAAA,QACAjE,EAAeiE,CAAS,EAAE,sBAAsB1F,GAAOyF,EAAgBC,CAAS,EAAE,OAAO;AAAA,MAAA;AAG1F,WAAAhE;AAAAA,EAAA;AAAA,EAGX,aAAa1B,GAAcyF,GAAgE;AACvF,UAAME,IAAc,KAAK,sBAAsB3F,GAAOyF,CAAe;AAC1D,eAAA1E,KAAS4E,EAAY,OAAA;AACxB,UAAA,OAAO,OAAO5E,CAAK,EAAE,KAAK,CAAQ8C,MAAA,CAACA,CAAI;AAChC,eAAA;AAGR,WAAA;AAAA,EAAA;AAAA,EAGX,gBAAgB7D,GAAuB;AAC5B,WAAA,KAAK,WAAW,MAAM,CAAQ2B,MAAA3B,EAAM,WAAW2B,CAAI,EAAE,eAAe,SAAS,CAAC;AAAA,EAAA;AAAA,EAGzF,qBACI3B,GACA8D,GACAhC,GACAiC,GACO;AACP,QAAI,CAACD,KAAc,CAAC,KAAK,gBAAgB9D,CAAK;AACnC,aAAA;AAEX,QAAI4F,IAA6B;AACjC,eAAWC,KAAY/D,GAAgB;AAC7B,YAAAQ,IAAOyB,EAAc8B,CAAQ;AACnC,UAAIvD,KAAQA,EAAK,SAAS,UAAUA,EAAK,gBAAgB;AACjCsD,QAAAA,IAAA;AACpB;AAAA,MAAA;AAAA,IACJ;AAGJ,UAAME,IAAoD,CAAA;AAC1D,eAAW3E,KAAiB,OAAO,KAAK,KAAK,0BAA0B;AAC/D,WAAK,2BAA2BA,CAAa,EAAE,cAC/C2E,EAAmB,KAAK3E,CAAa;AAKzC,WAAA2E,EAAmB,MAAM,CAAAnE,MAAQ3B,EAAM,WAAW2B,CAAI,EAAE,eAAe,SAAS,CAAC,KACjF,CAACiE;AAAAA,EAAA;AAAA,EAQT,MAAM,kBAAkB1F,GAAkBF,GAA4C;AAC3E,WAAA;AAAA,MACH,MAAM,MAAM,KAAK,oBAAoBE,GAAOF,CAAK;AAAA,MACjD,UAAU,MAAM,KAAK,oBAAoBE,GAAOF,CAAK;AAAA,IAAA;AAAA,EACzD;AAER;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"ControllerBase.js","sources":["../../../../../../node_modules/@milaboratories/pf-plots/src/controllers/ControllerBase.ts"],"sourcesContent":["import {\n AxisSpec,\n LinkerMap,\n PColumnSpec,\n PObjectId,\n PTableRecordSingleValueFilterV2\n} from '@milaboratories/pl-model-common';\nimport type {\n AxisData,\n ColumnData,\n ComponentGuideFilter,\n ComponentGuideSimple,\n ComponentsGuide,\n DataByColumns,\n FilterComponentControllers,\n FilterComponents,\n InputGuide,\n InputState,\n SelectorState,\n SelectorStateFilter,\n SelectorStateSimple,\n SimpleComponentControllers,\n SimpleComponents,\n} from '../common';\nimport { DISCRETE_VALUES_KEY, HIGH_CARDINALITY } from '../constants';\nimport { PValue } from '../store';\nimport type { DataStore } from '../store';\nimport type { AxesSet, ColumnOrAxisIdString } from '../spec';\nimport { AxisId, ColumnId, columnOrAxisIdFromString } from '../spec';\nimport {\n createLinkerMap,\n createMultipliesByMap,\n dataColumnPredicateDefault,\n getColumnOrAxisValueLabelsId,\n getDefaultInfo,\n getStateCopy,\n MultipliesByMap,\n OptionsInfo,\n} from '../utils';\nimport { ComponentController } from './ComponentController';\nimport { deriveLabels } from '@platforma-sdk/model';\n\ntype InputOptionsUnion<State extends InputState> = Record<\n SimpleComponents<State> | FilterComponents<State>,\n ComponentGuideSimple | ComponentGuideFilter\n>;\nexport interface Controller<State extends InputState> {\n calculateOptions(\n store: DataStore,\n state: State,\n fixedIds?: string[],\n dataColumnPredicate?: (spec: PColumnSpec) => boolean\n ): Promise<InputGuide<State>>;\n\n getUniqueSourceValuesWithLabels(\n store: DataStore,\n inputGuide: InputGuide<State>,\n selectedSource: ColumnOrAxisIdString,\n limit?: number,\n searchQuery?: string,\n searchQueryByValue?: string,\n ): Promise<{\n values: {\n value: string;\n label: string;\n }[],\n overflow: boolean;\n }>;\n\n getEmptyInputGuide(state: State): InputGuide<State>;\n\n createDataForPlot(store: DataStore, state: State): Promise<PlotDataAndSettings>;\n\n changeSelected(\n inputName: keyof State['components'],\n store: DataStore,\n state: State,\n nextSelectorStates: SelectorStateFilter[] | SelectorStateSimple[]\n ): State;\n}\n\nexport interface PlotDataAndSettings {\n data: {\n byColumns: DataByColumns,\n axesData?: Record<string, PValue[]>\n };\n settings: Record<string, unknown>;\n}\n\nexport abstract class ControllerBase<State extends InputState> implements Controller<State> {\n readonly ignoredOptionIdNames: string[] = [];\n readonly dataInputs: string[] = [];\n readonly dontAllowUnfilteredHighCardinality: boolean = false;\n readonly allowHangingAxes: boolean = false;\n\n protected constructor(\n readonly simpleComponentControllers: SimpleComponentControllers<State>,\n readonly filterComponentControllers: FilterComponentControllers<State>\n ) { }\n\n addSelected(\n inputName: keyof State['components'],\n state: State,\n selectorState: SelectorStateFilter | SelectorStateSimple\n ) {\n if (inputName in this.simpleComponentControllers) {\n return (\n this.simpleComponentControllers[\n inputName as keyof typeof this.simpleComponentControllers\n ] as ComponentController<State, typeof inputName>\n ).addSelected(state, selectorState);\n }\n if (inputName in this.filterComponentControllers) {\n return (\n this.filterComponentControllers[\n inputName as keyof typeof this.filterComponentControllers\n ] as ComponentController<State, typeof inputName>\n ).addSelected(state, selectorState);\n }\n throw Error(`Unknown input name: ${String(inputName)}`);\n }\n\n deleteSelected(\n inputName: keyof State['components'],\n store: DataStore,\n state: State,\n selectorState: SelectorStateFilter | SelectorStateSimple\n ) {\n if (inputName in this.simpleComponentControllers) {\n return (\n this.simpleComponentControllers[\n inputName as keyof typeof this.simpleComponentControllers\n ] as ComponentController<State, typeof inputName>\n ).deleteSelected(state, selectorState.selectedSource);\n }\n if (inputName in this.filterComponentControllers) {\n return (\n this.filterComponentControllers[\n inputName as keyof typeof this.filterComponentControllers\n ] as ComponentController<State, typeof inputName>\n ).deleteSelected(state, selectorState.selectedSource);\n }\n throw Error(`Unknown input name: ${String(inputName)}`);\n }\n\n changeSelected(\n inputName: keyof State['components'],\n store: DataStore,\n state: State,\n nextSelectorStates: SelectorState[]\n ) {\n const currentStates: SelectorState[] = state.components[inputName].selectorStates;\n const deletedStates = currentStates.filter(currentState => {\n return !nextSelectorStates.find(s => s.selectedSource === currentState.selectedSource);\n });\n const addedStates = nextSelectorStates.filter(nextState => {\n return !currentStates.find(s => s.selectedSource === nextState.selectedSource);\n });\n let nextState = getStateCopy(state);\n deletedStates.forEach(selectorState => {\n nextState = this.deleteSelected(inputName, store, nextState, selectorState);\n });\n addedStates.forEach(selectorState => {\n nextState = this.addSelected(inputName, nextState, selectorState);\n });\n // reorder\n state.components[inputName].selectorStates = nextSelectorStates\n .map(st =>\n (state.components[inputName].selectorStates as SelectorState[]).find(\n s => s.selectedSource === st.selectedSource\n )\n )\n .filter(Boolean) as SelectorStateFilter[] | SelectorStateSimple[];\n return nextState;\n }\n\n switchDividableAxis(state: State, axis: AxisId): State {\n // ***\n // logic for axis dividing/collapsing\n // ***\n return getStateCopy(state);\n }\n\n private createEmptyComponentsGuide(state: State): InputOptionsUnion<State> {\n return Object.fromEntries(\n Object.entries(state.components).map(\n ([key, value]): [string, ComponentGuideSimple | ComponentGuideFilter] => {\n return [\n key,\n {\n options: [],\n optionsInfo: new Map(),\n stateConsistency: {},\n required: false,\n multipleSelectors: false,\n },\n ];\n }\n )\n ) as InputOptionsUnion<State>;\n }\n\n getEmptyInputGuide(state: State): InputGuide<State> {\n return {\n components: this.createEmptyComponentsGuide(state) as ComponentsGuide<State['components']>,\n getSourceInfo: (sourceIdStr: ColumnOrAxisIdString) => getDefaultInfo(sourceIdStr),\n fullOptionsSet: new Set(),\n readyData: false,\n ready: false,\n consistent: true,\n };\n }\n\n getConsumedOptionsSet(state: State) {\n const consumedSourcesSet: Set<ColumnOrAxisIdString> = new Set();\n\n for (const componentName of Object.keys(this.simpleComponentControllers) as SimpleComponents<State>[]) {\n if (this.simpleComponentControllers[componentName].isDimensionsConsumer) {\n for (const { selectedSource } of state.components[componentName].selectorStates) {\n consumedSourcesSet.add(selectedSource);\n }\n }\n }\n for (const componentName of Object.keys(this.filterComponentControllers) as FilterComponents<State>[]) {\n if (this.filterComponentControllers[componentName].isDimensionsConsumer) {\n for (const { selectedSource, type, selectedFilterValues } of state.components[componentName].selectorStates as SelectorStateFilter[]) {\n if (type === 'equals' && selectedFilterValues?.length === 1) {\n consumedSourcesSet.add(selectedSource);\n }\n }\n }\n }\n return consumedSourcesSet;\n }\n\n async getParentAndHangingAxesByInputs(store: DataStore, state: State, linkerMap: LinkerMap, multipliesByMap: MultipliesByMap): Promise<Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>> {\n const allControllers = { ...this.simpleComponentControllers, ...this.filterComponentControllers };\n const result: Record<string, { parentsAxes: AxesSet, hangingAxes: AxesSet }> = {};\n for (const [name, componentController] of Object.entries(allControllers)) {\n result[name] = await (\n componentController as ComponentController<State, SimpleComponents<State> | FilterComponents<State>>\n ).getParentAndHangingAxes(store, state, linkerMap, multipliesByMap);\n }\n\n return result as Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>;\n }\n\n /** Depends on chart type. */\n getMustBeConsumedAxes(state: State, optionsInfo: OptionsInfo): Set<ColumnOrAxisIdString> {\n return new Set();\n }\n\n /** Axes that go to the \"Drag to build the chart\" section.\n * If some of them is not moved to 'filters', 'tabBy' or 'facetBy' (dimension reducers) chart can't be rendered */\n markMustBeConsumedAxes(\n state: State,\n optionsInfo: OptionsInfo,\n fullOptionsSet: Set<ColumnOrAxisIdString>,\n parentAndHangingAxes: Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>\n ) {\n // set of columns and axes that selected in dimension-reducing components\n const consumedSourcesSet = this.getConsumedOptionsSet(state);\n\n const markMustBeConsumed = (id: string) => {\n const option = optionsInfo.get(id);\n if (option && option.kind === 'axis') {\n option.mustBeConsumed = true;\n }\n };\n // Depends on chart type: axes from heatmap data column, to make visible what axes should be moved to x/y; hanging axes from X/Y scatterplot\n const mustBeConsumedAxes = this.getMustBeConsumedAxes(state, optionsInfo);\n for (const idStr of mustBeConsumedAxes) {\n if (!consumedSourcesSet.has(idStr)) {\n markMustBeConsumed(idStr);\n }\n }\n\n if (!this.allowHangingAxes) {\n // All 'hanging' axes must be moved to dimension reducers (for example, axes that exist in X/Y/Data source column, but not exist in Grouping)\n Object.entries(parentAndHangingAxes).forEach(([name, { hangingAxes }]) => {\n for (const idStr of hangingAxes.keys()) {\n if (!consumedSourcesSet.has(idStr)) {\n markMustBeConsumed(idStr);\n }\n }\n });\n }\n\n // Mark all non-homogenous axes\n for (const idStr of fullOptionsSet) {\n const info = optionsInfo.get(idStr);\n if (info?.kind === 'axis' && info.isNonHomogenous && !consumedSourcesSet.has(idStr)) {\n markMustBeConsumed(idStr);\n }\n }\n\n if (this.dontAllowUnfilteredHighCardinality) {\n // Axes marked 'high cardinality' should be in the filter. Or some column that has this axis should be in the filter.\n // If not - they are marked 'mustBeConsumed'.\n // But also they can be anywhere else.\n const isHighCardinality = (spec: AxisSpec) => spec?.annotations?.[HIGH_CARDINALITY] === 'true';\n const consumedHighCardinalityAxes =\n state.components['filters']?.selectorStates.reduce((consumed: Set<string>, s) => {\n if ((s as SelectorStateFilter)?.selectedFilterValues?.length !== 1 && (s as SelectorStateFilter).type !== 'subset') {\n return consumed;\n }\n const info = optionsInfo.get(s.selectedSource);\n if (info?.kind === 'column') {\n const axes = info.spec.axesSpec.filter(isHighCardinality);\n axes.forEach(spec => consumed.add(AxisId.fromAxisSpec(spec).toCanonicalString()));\n }\n if (info?.kind === 'axis' && isHighCardinality(info.spec)) {\n consumed.add(AxisId.fromAxisSpec(info.spec).toCanonicalString());\n }\n return consumed;\n }, new Set<string>()) ?? new Set<string>();\n this.dataInputs.forEach(inputName => {\n for (const { selectedSource } of state.components[inputName].selectorStates) {\n const info = optionsInfo.get(selectedSource);\n if (info?.kind === 'column') {\n const axes = info.spec.axesSpec.filter(isHighCardinality);\n axes.forEach(spec => {\n const idStr = AxisId.fromAxisSpec(spec).toCanonicalString();\n if (!consumedHighCardinalityAxes.has(idStr)) {\n markMustBeConsumed(idStr);\n }\n });\n }\n if (info?.kind === 'axis' && isHighCardinality(info.spec)) {\n const idStr = AxisId.fromAxisSpec(info.spec).toCanonicalString();\n if (!consumedHighCardinalityAxes.has(idStr)) {\n markMustBeConsumed(idStr);\n }\n }\n }\n });\n }\n }\n\n setColumnLabels(optionsSet: Set<ColumnOrAxisIdString>, optionsInfo: OptionsInfo) {\n const columnIds = [...optionsSet].filter((v) => optionsInfo.get(v)?.kind === 'column');\n const labelsMap = deriveLabels(columnIds, (id: string) => (optionsInfo.get(id) as ColumnData).spec);\n columnIds.forEach((id, idx) => {\n optionsInfo.get(id)!.label = labelsMap[idx].label;\n });\n\n }\n\n /** Calculates information for data-mapping interface: \n * options for every input (basket), \n * information for every option (label, value type, must be consumed etc),\n * information about full data-mapping state (ready to data loading and rendering or not, contains inconsistency or not) */\n async calculateOptions(\n store: DataStore,\n state: State,\n fixedIds: string[] = [],\n dataColumnPredicate = dataColumnPredicateDefault\n ): Promise<InputGuide<State>> {\n // creating empty options object corresponding to the provided state\n const resultComponentsGuide: InputOptionsUnion<State> = this.createEmptyComponentsGuide(state);\n\n // for trees block - to ignore treeId and donorId in the interface\n const ignoredNamesSet = new Set<string>(this.ignoredOptionIdNames);\n const fixedSelectedSet = new Set<ColumnOrAxisIdString>(fixedIds);\n\n // Two type of linkers: regular ones and \"multiplying\"\n const linkerMap = await createLinkerMap(store);\n const multipliesByMap = await createMultipliesByMap(store);\n\n const optionsInfo: OptionsInfo = new Map();\n const fullOptionsSet = new Set<ColumnOrAxisIdString>();\n\n const parentAndHangingAxes = await this.getParentAndHangingAxesByInputs(store, state, linkerMap, multipliesByMap);\n\n const allControllers = { ...this.simpleComponentControllers, ...this.filterComponentControllers };\n for (const [name, componentController] of Object.entries(allControllers) as ([keyof InputOptionsUnion<State>, ComponentController<State, SimpleComponents<State> | FilterComponents<State>>][])) {\n const componentGuide = await componentController.getOptions(\n store, state,\n linkerMap, multipliesByMap,\n parentAndHangingAxes,\n dataColumnPredicate,\n ignoredNamesSet, fixedSelectedSet\n );\n for (const item of componentGuide.options) {\n fullOptionsSet.add(item.value);\n }\n for (const v of componentGuide.optionsInfo) {\n optionsInfo.set(...v);\n }\n resultComponentsGuide[name] = componentGuide;\n }\n\n this.markMustBeConsumedAxes(state, optionsInfo, fullOptionsSet, parentAndHangingAxes);\n this.setColumnLabels(fullOptionsSet, optionsInfo);\n\n const consistent = this.isConsistent(state, resultComponentsGuide as ComponentsGuide<State['components']>);\n const getSourceInfo = (sourceIdStr: ColumnOrAxisIdString) => optionsInfo.get(sourceIdStr) ?? getDefaultInfo(sourceIdStr);\n return {\n components: resultComponentsGuide as ComponentsGuide<State['components']>,\n getSourceInfo,\n fullOptionsSet,\n readyData: this.readyDataInputs(state),\n ready: this.readyForPlotBuilding(state, consistent, fullOptionsSet, getSourceInfo),\n consistent,\n };\n }\n\n async getUniqueSourceValuesWithLabels(\n store: DataStore,\n inputGuide: InputGuide<State>,\n selectedSource: ColumnOrAxisIdString,\n limit?: number,\n searchQuery?: string, // search by labels if axis labels exist\n searchQueryValue?: string // search by value, not by label\n ): Promise<{\n values: {\n value: string;\n label: string;\n }[],\n overflow: boolean;\n }> {\n const sortValues = (values: { value: string, label: string }[]) => values.sort((a, b) => a.label.localeCompare(b.label, 'en', { numeric: true }))\n const info = inputGuide.getSourceInfo(selectedSource);\n const discreteValuesStr = info.annotations?.[DISCRETE_VALUES_KEY];\n\n // if column's annotation contains discrete values - take them from it\n try {\n const discreteValues: string[] | null = discreteValuesStr\n ? (JSON.parse(discreteValuesStr) as (string | number)[]).map(v => String(v))\n : null;\n if (discreteValues) {\n const values = discreteValues.map(v => ({ value: v, label: v }));\n sortValues(values);\n return { values, overflow: false };\n }\n } catch (err) {\n console.error(`Parsing error: discrete values annotation ${discreteValuesStr} in ${selectedSource}`)\n }\n\n // consider label column for axis\n if (info.kind === 'axis') {\n const axisId = columnOrAxisIdFromString(selectedSource) as AxisId;\n const parentSources = info.parentSources.map(columnOrAxisIdFromString) as ColumnId[];\n const labelsColumnId = await getColumnOrAxisValueLabelsId(store, selectedSource, info.parentSources);\n let filters: PTableRecordSingleValueFilterV2[] = [];\n if (labelsColumnId) {\n if (searchQuery) {\n filters = [{\n type: 'bySingleColumnV2',\n column: {\n type: 'column',\n id: labelsColumnId.name as PObjectId\n },\n predicate: {\n operator: 'StringIContains',\n substring: searchQuery\n }\n }];\n }\n if (searchQueryValue) {\n filters = [{\n type: 'bySingleColumnV2',\n column: {\n type: 'axis',\n id: axisId.toPFrameId()\n },\n predicate: {\n operator: 'StringIContains',\n substring: searchQueryValue\n }\n }];\n }\n const { data: dataValues, axesData } = await store.pFrameProvider.getSingleColumnData(labelsColumnId, filters);\n const axisKeys = axesData[axisId.toCanonicalString()];\n const values: { value: string, label: string }[] = [];\n for (let i = 0; i < Math.min(axisKeys.length, limit ?? axisKeys.length); i++) {\n values.push({ value: String(axisKeys[i]), label: String(dataValues[i]) });\n }\n sortValues(values);\n return { values, overflow: !(limit === undefined || axisKeys.length < limit) };\n }\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n if (searchInLabelsOrValue) {\n filters = [{\n type: 'bySingleColumnV2',\n column: {\n type: 'axis',\n id: axisId.toPFrameId()\n },\n predicate: {\n operator: 'StringIContains',\n substring: searchInLabelsOrValue\n }\n }];\n }\n const response = await store.pFrameProvider.getAxisUniqueValues(axisId, [parentSources[0]], limit, filters);\n const values = response.values.map(v => ({ value: String(v), label: String(v) }));\n sortValues(values);\n return { values, overflow: response.overflow };\n }\n if (info.kind === 'column') {\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n const columnId = columnOrAxisIdFromString(selectedSource) as ColumnId;\n const filters: PTableRecordSingleValueFilterV2[] = searchInLabelsOrValue ? [{\n type: 'bySingleColumnV2',\n column: {\n type: 'column',\n id: columnId.name as PObjectId\n },\n predicate: {\n operator: 'StringIContains',\n substring: searchInLabelsOrValue\n }\n }] : [];\n const response = await store.pFrameProvider.getColumnUniqueValues(columnId, limit, filters);\n const values = response.values.map(v => ({ value: String(v), label: String(v) }));\n sortValues(values);\n return { values, overflow: response.overflow };\n }\n return { values: [], overflow: false };\n }\n\n checkStateConsistency(\n state: State, componentsGuide: ComponentsGuide<State['components']>\n ): Map<keyof State['components'], Record<string, boolean>> {\n const result: Map<keyof State['components'], Record<string, boolean>> = new Map();\n const allControllers = { ...this.simpleComponentControllers, ...this.filterComponentControllers };\n\n for (const component of Object.keys(allControllers) as SimpleComponents<State>[]) {\n result.set(\n component as keyof State['components'],\n allControllers[component].checkStateConsistency(state, componentsGuide[component].options)\n );\n }\n return result;\n }\n\n isConsistent(state: State, componentsGuide: ComponentsGuide<State['components']>): boolean {\n const consistency = this.checkStateConsistency(state, componentsGuide);\n for (const value of consistency.values()) {\n if (Object.values(value).some(item => !item)) {\n return false;\n }\n }\n return true;\n }\n\n readyDataInputs(state: State): boolean {\n return this.dataInputs.every(name => state.components[name].selectorStates.length > 0);\n }\n\n readyForPlotBuilding(\n state: State,\n consistent: boolean,\n fullOptionsSet: Set<ColumnOrAxisIdString>,\n getSourceInfo: (id: ColumnOrAxisIdString) => ColumnData | AxisData\n ): boolean {\n if (!consistent || !this.readyDataInputs(state)) {\n return false;\n }\n let hasFreeDimensions: boolean = false;\n for (const optionId of fullOptionsSet) {\n const info = getSourceInfo(optionId);\n if (info && info.kind === 'axis' && info.mustBeConsumed) {\n hasFreeDimensions = true;\n break;\n }\n }\n\n const requiredComponents: (keyof State['components'])[] = [];\n for (const componentName of Object.keys(this.simpleComponentControllers) as SimpleComponents<State>[]) {\n if (this.simpleComponentControllers[componentName].isRequired) {\n requiredComponents.push(componentName);\n }\n }\n\n return (\n requiredComponents.every(name => state.components[name].selectorStates.length > 0) &&\n !hasFreeDimensions\n );\n }\n\n abstract createDataByColumns(store: DataStore, state: State): Promise<PlotDataAndSettings['data']>;\n\n abstract createChartSettings(store: DataStore, state: State): Promise<PlotDataAndSettings['settings']>;\n\n async createDataForPlot(store: DataStore, state: State): Promise<PlotDataAndSettings> {\n return {\n data: await this.createDataByColumns(store, state),\n settings: await this.createChartSettings(store, state),\n };\n }\n}\n"],"names":["ControllerBase","simpleComponentControllers","filterComponentControllers","__publicField","inputName","state","selectorState","store","nextSelectorStates","currentStates","deletedStates","currentState","s","addedStates","nextState","c","getStateCopy","st","axis","key","value","sourceIdStr","getDefaultInfo","consumedSourcesSet","componentName","selectedSource","type","selectedFilterValues","linkerMap","multipliesByMap","allControllers","result","name","componentController","optionsInfo","fullOptionsSet","parentAndHangingAxes","markMustBeConsumed","id","option","mustBeConsumedAxes","idStr","hangingAxes","info","isHighCardinality","spec","_a","HIGH_CARDINALITY","consumedHighCardinalityAxes","consumed","AxisId","optionsSet","columnIds","v","labelsMap","deriveLabels","idx","fixedIds","dataColumnPredicate","dataColumnPredicateDefault","resultComponentsGuide","ignoredNamesSet","fixedSelectedSet","createLinkerMap","createMultipliesByMap","componentGuide","item","consistent","getSourceInfo","inputGuide","limit","searchQuery","searchQueryValue","sortValues","values","a","b","discreteValuesStr","DISCRETE_VALUES_KEY","discreteValues","axisId","columnOrAxisIdFromString","parentSources","labelsColumnId","getColumnOrAxisValueLabelsId","filters","dataValues","axesData","axisKeys","i","searchInLabelsOrValue","response","columnId","f","componentsGuide","component","consistency","hasFreeDimensions","optionId","requiredComponents"],"mappings":"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","x_google_ignoreList":[0]}
@@ -189,7 +189,7 @@ class oe extends K {
189
189
  filters: new m({
190
190
  componentName: "filters",
191
191
  allowedTypes: ["String", "Int", "Long", "Double", "Long"],
192
- strictlyDependsOnParents: !0,
192
+ strictlyDependsOnParents: !1,
193
193
  parentComponents: ["value"],
194
194
  dependsOn: ["value"],
195
195
  settings: {
@@ -202,7 +202,7 @@ class oe extends K {
202
202
  tabBy: new m({
203
203
  componentName: "tabBy",
204
204
  allowedTypes: ["String", "Int"],
205
- strictlyDependsOnParents: !0,
205
+ strictlyDependsOnParents: !1,
206
206
  parentComponents: ["value"],
207
207
  dependsOn: ["value"],
208
208
  settings: {