@milaboratories/graph-maker 1.1.142 → 1.1.144

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 (147) hide show
  1. package/dist/GraphMaker/components/ReorderForm.vue.d.ts +15 -0
  2. package/dist/GraphMaker/components/ReorderForm.vue.d.ts.map +1 -0
  3. package/dist/GraphMaker/components/ReorderForm.vue.js +43 -0
  4. package/dist/GraphMaker/components/ReorderForm.vue.js.map +1 -0
  5. package/dist/GraphMaker/components/ReorderForm.vue2.js +5 -0
  6. package/dist/GraphMaker/components/ReorderForm.vue2.js.map +1 -0
  7. package/dist/GraphMaker/constantsCommon.d.ts +15 -0
  8. package/dist/GraphMaker/constantsCommon.d.ts.map +1 -1
  9. package/dist/GraphMaker/constantsCommon.js +11 -8
  10. package/dist/GraphMaker/constantsCommon.js.map +1 -1
  11. package/dist/GraphMaker/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js.map +1 -1
  12. package/dist/GraphMaker/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.d.ts.map +1 -1
  13. package/dist/GraphMaker/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.js +305 -172
  14. package/dist/GraphMaker/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.js.map +1 -1
  15. package/dist/GraphMaker/index.vue.d.ts.map +1 -1
  16. package/dist/GraphMaker/index.vue.js +33 -33
  17. package/dist/GraphMaker/index.vue.js.map +1 -1
  18. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +3 -3
  19. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts.map +1 -1
  20. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts +9 -9
  21. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts.map +1 -1
  22. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +5 -11
  23. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts.map +1 -1
  24. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +3 -3
  25. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
  26. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.d.ts +1 -1
  27. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts +31 -5
  28. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts.map +1 -1
  29. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js +56 -53
  30. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js.map +1 -1
  31. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts +1 -7
  32. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts.map +1 -1
  33. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js +13 -13
  34. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js.map +1 -1
  35. package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.d.ts +6 -4
  36. package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.d.ts.map +1 -1
  37. package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.js +42 -13
  38. package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.js.map +1 -1
  39. package/dist/GraphMaker/utils/loadUniqueValuesToSave.d.ts.map +1 -1
  40. package/dist/GraphMaker/utils/loadUniqueValuesToSave.js +48 -44
  41. package/dist/GraphMaker/utils/loadUniqueValuesToSave.js.map +1 -1
  42. package/dist/node_modules/@milaboratories/miplots4/dist/{discrete/components → common}/BandAxis.js +3 -3
  43. package/dist/node_modules/@milaboratories/miplots4/dist/common/BandAxis.js.map +1 -0
  44. package/dist/node_modules/@milaboratories/miplots4/dist/common/ContinuousGrid.js.map +1 -1
  45. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/ChartRenderer.js +14 -14
  46. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js +197 -270
  47. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js.map +1 -1
  48. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js +9 -9
  49. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/Chart.js +1 -1
  50. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/Chart.js.map +1 -1
  51. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/Grid.js.map +1 -1
  52. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js +11 -11
  53. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/ChartRenderer.js +1 -1
  54. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-scale/src/band.js +44 -34
  55. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-scale/src/band.js.map +1 -1
  56. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js +272 -195
  57. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js.map +1 -1
  58. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js +23 -23
  59. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
  60. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Chart.js +54 -50
  61. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Chart.js.map +1 -1
  62. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxis.js +32 -28
  63. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxis.js.map +1 -1
  64. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartLayersData.js.map +1 -1
  65. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTooltip.js.map +1 -1
  66. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js +29 -26
  67. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js.map +1 -1
  68. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartsGroup.js +44 -41
  69. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartsGroup.js.map +1 -1
  70. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Grid.js +31 -27
  71. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Grid.js.map +1 -1
  72. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/dots.js.map +1 -1
  73. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js +29 -18
  74. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js.map +1 -1
  75. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js +71 -57
  76. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js.map +1 -1
  77. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/linearRegression.js.map +1 -1
  78. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/isNumericScale.js +11 -0
  79. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/isNumericScale.js.map +1 -0
  80. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js +10 -10
  81. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  82. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
  83. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js +6 -6
  84. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
  85. package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js +35 -25
  86. package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js.map +1 -1
  87. package/dist/node_modules/@milaboratories/miplots4/dist/types/dendro.js +3 -3
  88. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js +37 -37
  89. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js.map +1 -1
  90. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js +6 -6
  91. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js +7 -7
  92. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js.map +1 -1
  93. package/dist/node_modules/@milaboratories/miplots4/dist/utils/createMultilineDiscreteLabels.js +32 -0
  94. package/dist/node_modules/@milaboratories/miplots4/dist/utils/createMultilineDiscreteLabels.js.map +1 -0
  95. package/dist/node_modules/@milaboratories/miplots4/dist/utils/getFacetRowsColumns.js +18 -0
  96. package/dist/node_modules/@milaboratories/miplots4/dist/utils/getFacetRowsColumns.js.map +1 -0
  97. package/dist/node_modules/@milaboratories/miplots4/dist/utils/measureMultilineDiscreteLabels.js +63 -0
  98. package/dist/node_modules/@milaboratories/miplots4/dist/utils/measureMultilineDiscreteLabels.js.map +1 -0
  99. package/dist/node_modules/@milaboratories/miplots4/dist/{discrete/utils → utils}/splitTextByWidth.js +1 -1
  100. package/dist/node_modules/@milaboratories/miplots4/dist/utils/splitTextByWidth.js.map +1 -0
  101. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js +39 -32
  102. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js.map +1 -1
  103. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ControllerBase.js +68 -62
  104. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ControllerBase.js.map +1 -1
  105. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/dendro.js +5 -5
  106. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/histogram.js +8 -8
  107. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js +3 -3
  108. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js +8 -8
  109. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js.map +1 -1
  110. package/dist/node_modules/@milaboratories/pf-plots/dist/index.js +12 -9
  111. package/dist/node_modules/@milaboratories/pf-plots/dist/index.js.map +1 -1
  112. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-error-like/dist/{index.js → error_like_shape.js} +1 -1
  113. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-error-like/dist/error_like_shape.js.map +1 -0
  114. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js +8 -0
  115. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js.map +1 -0
  116. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/data_types.js +63 -0
  117. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/data_types.js.map +1 -0
  118. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/linker_columns.js +152 -0
  119. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/linker_columns.js.map +1 -0
  120. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js +189 -0
  121. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js.map +1 -0
  122. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/errors.js +18 -0
  123. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/errors.js.map +1 -0
  124. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/json.js +12 -0
  125. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/json.js.map +1 -0
  126. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/plid.js +7 -0
  127. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/plid.js.map +1 -0
  128. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/ref.js +8 -0
  129. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/ref.js.map +1 -0
  130. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/components/PlDataTable.js +13 -0
  131. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/components/PlDataTable.js.map +1 -0
  132. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/render/util/label.js +89 -0
  133. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/render/util/label.js.map +1 -0
  134. package/dist/node_modules/@milaboratories/pf-plots/dist/pframe/ColumnsProvider.js +50 -45
  135. package/dist/node_modules/@milaboratories/pf-plots/dist/pframe/ColumnsProvider.js.map +1 -1
  136. package/dist/node_modules/@milaboratories/pf-plots/dist/utils.js +54 -50
  137. package/dist/node_modules/@milaboratories/pf-plots/dist/utils.js.map +1 -1
  138. package/package.json +4 -4
  139. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/BandAxis.js.map +0 -1
  140. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/splitTextByWidth.js.map +0 -1
  141. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Axis.js +0 -59
  142. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Axis.js.map +0 -1
  143. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-error-like/dist/index.js.map +0 -1
  144. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/index.js +0 -979
  145. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/index.js.map +0 -1
  146. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/index.js +0 -1599
  147. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/index.js.map +0 -1
@@ -1,9 +1,15 @@
1
- import { deriveLabels as P } from "../node_modules/@platforma-sdk/model/dist/index.js";
1
+ import "../node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js";
2
+ import "../node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js";
3
+ import "../_virtual/canonicalize.js";
4
+ import "../node_modules/@milaboratories/pl-model-common/dist/plid.js";
5
+ import "../node_modules/@milaboratories/pl-model-common/dist/ref.js";
6
+ import { deriveLabels as P } from "../node_modules/@platforma-sdk/model/dist/render/util/label.js";
7
+ import "../node_modules/@milaboratories/pl-error-like/dist/error_like_shape.js";
2
8
  import { DISCRETE_VALUES_KEY as M, HIGH_CARDINALITY as V } from "../constants.js";
3
9
  import { columnOrAxisIdFromString as k, isColumnId as L, AxisId as A, ColumnId as T } from "../spec.js";
4
- import { getStateCopy as D, addSourceInfoToMap as U, getDefaultInfo as j, dataColumnPredicateDefault as q, createLinkerMap as $, getColumnOrAxisValueLabelsId as G } from "../utils.js";
5
- var N = Object.defineProperty, H = (b, e, t) => e in b ? N(b, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : b[e] = t, F = (b, e, t) => H(b, typeof e != "symbol" ? e + "" : e, t);
6
- class z {
10
+ import { getStateCopy as D, addSourceInfoToMap as U, getDefaultInfo as j, dataColumnPredicateDefault as $, createLinkerMap as q, getColumnOrAxisValueLabelsId as G } from "../utils.js";
11
+ var H = Object.defineProperty, N = (b, e, t) => e in b ? H(b, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : b[e] = t, F = (b, e, t) => N(b, typeof e != "symbol" ? e + "" : e, t);
12
+ class ee {
7
13
  constructor(e, t) {
8
14
  F(this, "ignoredOptionIdNames", []), F(this, "dataInputs", []), F(this, "dontAllowUnfilteredHighCardinality", !1), this.simpleComponentControllers = e, this.filterComponentControllers = t;
9
15
  }
@@ -36,17 +42,17 @@ class z {
36
42
  throw Error(`Unknown input name: ${String(e)}`);
37
43
  }
38
44
  changeSelected(e, t, n, o) {
39
- const s = n.components[e].selectorStates, l = s.filter((r) => !o.find((d) => d.selectedSource === r.selectedSource)), C = o.filter((r) => !s.find((d) => d.selectedSource === r.selectedSource));
40
- let i = D(n);
45
+ const s = n.components[e].selectorStates, l = s.filter((r) => !o.find((p) => p.selectedSource === r.selectedSource)), C = o.filter((r) => !s.find((p) => p.selectedSource === r.selectedSource));
46
+ let a = D(n);
41
47
  return l.forEach((r) => {
42
- i = this.deleteSelected(e, t, i, r);
48
+ a = this.deleteSelected(e, t, a, r);
43
49
  }), C.forEach((r) => {
44
- i = this.addSelected(e, i, r);
50
+ a = this.addSelected(e, a, r);
45
51
  }), n.components[e].selectorStates = o.map(
46
52
  (r) => n.components[e].selectorStates.find(
47
- (d) => d.selectedSource === r.selectedSource
53
+ (p) => p.selectedSource === r.selectedSource
48
54
  )
49
- ).filter(Boolean), i;
55
+ ).filter(Boolean), a;
50
56
  }
51
57
  switchDividableAxis(e, t) {
52
58
  return D(e);
@@ -72,28 +78,28 @@ class z {
72
78
  }
73
79
  async getSelectedSourcesInfo(e, t, n, o) {
74
80
  const s = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Set(), C = [];
75
- for (const i of this.dataInputs)
76
- for (const r of t.components[i].selectorStates) {
77
- const d = k(r.selectedSource);
78
- if (L(d)) {
79
- const a = await e.pFrameProvider.getColumnSpecById(d);
80
- a && a.axesSpec.forEach((c) => {
81
- const p = A.fromAxisSpec(c).toCanonicalString();
82
- l.has(p) || (l.add(p), C.push(c));
81
+ for (const a of this.dataInputs)
82
+ for (const r of t.components[a].selectorStates) {
83
+ const p = k(r.selectedSource);
84
+ if (L(p)) {
85
+ const i = await e.pFrameProvider.getColumnSpecById(p);
86
+ i && i.axesSpec.forEach((c) => {
87
+ const d = A.fromAxisSpec(c).toCanonicalString();
88
+ l.has(d) || (l.add(d), C.push(c));
83
89
  });
84
90
  }
85
91
  }
86
- for (const [i, { selectorStates: r }] of Object.entries(t.components)) {
87
- const d = (this.simpleComponentControllers[i] ?? this.filterComponentControllers[i]).settings.columnsWithExtraAxesAllowed;
88
- for (const { selectedSource: a } of r)
92
+ for (const [a, { selectorStates: r }] of Object.entries(t.components)) {
93
+ const p = (this.simpleComponentControllers[a] ?? this.filterComponentControllers[a]).settings.columnsWithExtraAxesAllowed;
94
+ for (const { selectedSource: i } of r)
89
95
  await U(
90
96
  e,
91
- a,
92
- n[a],
97
+ i,
98
+ n[i],
93
99
  s,
94
100
  C,
95
101
  l,
96
- d,
102
+ p,
97
103
  o
98
104
  );
99
105
  }
@@ -130,29 +136,29 @@ class z {
130
136
  return o[l] = s.label, o;
131
137
  }, {});
132
138
  }
133
- async calculateOptions(e, t, n = [], o = q) {
139
+ async calculateOptions(e, t, n = [], o = $) {
134
140
  var s;
135
- const l = this.createEmptyComponentsGuide(t), C = this.getConsumedOptionsSet(t), i = new Set(this.ignoredOptionIdNames), r = new Set(n), d = await $(e), a = await this.getLabelsMap(e, t), c = await this.getSelectedSourcesInfo(e, t, a, d), p = /* @__PURE__ */ new Map(), g = { ...this.simpleComponentControllers, ...this.filterComponentControllers }, h = /* @__PURE__ */ new Set();
141
+ const l = this.createEmptyComponentsGuide(t), C = this.getConsumedOptionsSet(t), a = new Set(this.ignoredOptionIdNames), r = new Set(n), p = await q(e), i = await this.getLabelsMap(e, t), c = await this.getSelectedSourcesInfo(e, t, i, p), d = /* @__PURE__ */ new Map(), g = { ...this.simpleComponentControllers, ...this.filterComponentControllers }, h = /* @__PURE__ */ new Set();
136
142
  for (const [u, f] of Object.entries(g)) {
137
143
  const m = await f.getOptions(
138
144
  e,
139
145
  t,
140
- a,
146
+ i,
141
147
  C,
142
- d,
148
+ p,
143
149
  o,
144
- i,
150
+ a,
145
151
  r
146
152
  );
147
153
  this.dataInputs.includes(u) || m.options.forEach((v) => {
148
154
  h.add(v.value);
149
155
  });
150
156
  for (const [v, S] of m.optionsInfo)
151
- p.set(v, S);
157
+ d.set(v, S);
152
158
  l[u] = m;
153
159
  }
154
160
  const y = (u) => {
155
- const f = p.get(u);
161
+ const f = d.get(u);
156
162
  f && f.kind === "axis" && (f.mustBeConsumed = !0);
157
163
  const m = c.get(u);
158
164
  m && m.kind === "axis" && (m.mustBeConsumed = !0);
@@ -188,9 +194,9 @@ class z {
188
194
  x.add(v);
189
195
  });
190
196
  }
191
- const B = await this.isConsistent(e, t, d), I = (u) => {
197
+ const B = await this.isConsistent(e, t, p), I = (u) => {
192
198
  const f = k(u).toCanonicalString() ?? u;
193
- return p.get(f) ?? c.get(f) ?? j(u);
199
+ return d.get(f) ?? c.get(f) ?? j(u);
194
200
  };
195
201
  return {
196
202
  components: l,
@@ -204,25 +210,25 @@ class z {
204
210
  }
205
211
  async getUniqueSourceValuesWithLabels(e, t, n, o, s, l) {
206
212
  var C;
207
- const i = (a) => a.sort((c, p) => c.label.localeCompare(p.label, "en", { numeric: !0 })), r = t.getSourceInfo(n), d = (C = r.annotations) == null ? void 0 : C[M];
213
+ const a = (i) => i.sort((c, d) => c.label.localeCompare(d.label, "en", { numeric: !0 })), r = t.getSourceInfo(n), p = (C = r.annotations) == null ? void 0 : C[M];
208
214
  try {
209
- const a = d ? JSON.parse(d).map((c) => String(c)) : null;
210
- if (a) {
211
- const c = a.map((p) => ({ value: p, label: p }));
212
- return i(c), { values: c, overflow: !1 };
215
+ const i = p ? JSON.parse(p).map((c) => String(c)) : null;
216
+ if (i) {
217
+ const c = i.map((d) => ({ value: d, label: d }));
218
+ return a(c), { values: c, overflow: !1 };
213
219
  }
214
220
  } catch {
215
- console.error(`Parsing error: discrete values annotation ${d} in ${n}`);
221
+ console.error(`Parsing error: discrete values annotation ${p} in ${n}`);
216
222
  }
217
223
  if (r.kind === "axis") {
218
- const a = k(n), c = r.parentSources.map(k), p = await G(e, n, r.parentSources);
224
+ const i = k(n), c = r.parentSources.map(k), d = await G(e, n, r.parentSources);
219
225
  let g = [];
220
- if (p) {
226
+ if (d) {
221
227
  s && (g = [{
222
228
  type: "bySingleColumnV2",
223
229
  column: {
224
230
  type: "column",
225
- id: p.name
231
+ id: d.name
226
232
  },
227
233
  predicate: {
228
234
  operator: "StringIContains",
@@ -232,35 +238,35 @@ class z {
232
238
  type: "bySingleColumnV2",
233
239
  column: {
234
240
  type: "axis",
235
- id: a.toPFrameId()
241
+ id: i.toPFrameId()
236
242
  },
237
243
  predicate: {
238
244
  operator: "StringIContains",
239
245
  substring: l
240
246
  }
241
247
  }]);
242
- const { data: x, axesData: B } = await e.pFrameProvider.getSingleColumnData(p, g), I = B[a.toCanonicalString()], u = [];
248
+ const { data: x, axesData: B } = await e.pFrameProvider.getSingleColumnData(d, g), I = B[i.toCanonicalString()], u = [];
243
249
  for (let f = 0; f < Math.min(I.length, o ?? I.length); f++)
244
250
  u.push({ value: String(I[f]), label: String(x[f]) });
245
- return i(u), { values: u, overflow: !(o === void 0 || I.length < o) };
251
+ return a(u), { values: u, overflow: !(o === void 0 || I.length < o) };
246
252
  }
247
253
  const h = s ?? l;
248
254
  h && (g = [{
249
255
  type: "bySingleColumnV2",
250
256
  column: {
251
257
  type: "axis",
252
- id: a.toPFrameId()
258
+ id: i.toPFrameId()
253
259
  },
254
260
  predicate: {
255
261
  operator: "StringIContains",
256
262
  substring: h
257
263
  }
258
264
  }]);
259
- const y = await e.pFrameProvider.getAxisUniqueValues(a, [c[0]], o, g), E = y.values.map((x) => ({ value: String(x), label: String(x) }));
260
- return i(E), { values: E, overflow: y.overflow };
265
+ const y = await e.pFrameProvider.getAxisUniqueValues(i, [c[0]], o, g), E = y.values.map((x) => ({ value: String(x), label: String(x) }));
266
+ return a(E), { values: E, overflow: y.overflow };
261
267
  }
262
268
  if (r.kind === "column") {
263
- const a = s ?? l, c = k(n), p = a ? [{
269
+ const i = s ?? l, c = k(n), d = i ? [{
264
270
  type: "bySingleColumnV2",
265
271
  column: {
266
272
  type: "column",
@@ -268,10 +274,10 @@ class z {
268
274
  },
269
275
  predicate: {
270
276
  operator: "StringIContains",
271
- substring: a
277
+ substring: i
272
278
  }
273
- }] : [], g = await e.pFrameProvider.getColumnUniqueValues(c, o, p), h = g.values.map((y) => ({ value: String(y), label: String(y) }));
274
- return i(h), { values: h, overflow: g.overflow };
279
+ }] : [], g = await e.pFrameProvider.getColumnUniqueValues(c, o, d), h = g.values.map((y) => ({ value: String(y), label: String(y) }));
280
+ return a(h), { values: h, overflow: g.overflow };
275
281
  }
276
282
  return { values: [], overflow: !1 };
277
283
  }
@@ -303,21 +309,21 @@ class z {
303
309
  if (!n || !this.readyDataInputs(t))
304
310
  return !1;
305
311
  let l = !1;
306
- for (const i of o) {
307
- const r = s(i);
312
+ for (const a of o) {
313
+ const r = s(a);
308
314
  if (r && r.kind === "axis" && r.mustBeConsumed) {
309
315
  l = !0;
310
316
  break;
311
317
  }
312
318
  }
313
319
  let C = !1;
314
- for (const { selectorStates: i } of Object.values(t.components)) {
315
- for (const { selectedSource: r, fixedAxes: d } of i) {
316
- const a = s(r);
317
- if (a && a.kind === "column" && a.axesToBeFixed.some(
320
+ for (const { selectorStates: a } of Object.values(t.components)) {
321
+ for (const { selectedSource: r, fixedAxes: p } of a) {
322
+ const i = s(r);
323
+ if (i && i.kind === "column" && i.axesToBeFixed.some(
318
324
  (c) => {
319
- var p;
320
- return ((p = (d ?? []).find((g) => g.axisSource === c)) == null ? void 0 : p.axisValue) === void 0;
325
+ var d;
326
+ return ((d = (p ?? []).find((g) => g.axisSource === c)) == null ? void 0 : d.axisValue) === void 0;
321
327
  }
322
328
  )) {
323
329
  C = !0;
@@ -327,7 +333,7 @@ class z {
327
333
  if (C)
328
334
  break;
329
335
  }
330
- return this.requiredComponents.every((i) => t.components[i].selectorStates.length > 0) && !l && !C;
336
+ return this.requiredComponents.every((a) => t.components[a].selectorStates.length > 0) && !l && !C;
331
337
  }
332
338
  async createDataForPlot(e, t) {
333
339
  return {
@@ -337,6 +343,6 @@ class z {
337
343
  }
338
344
  }
339
345
  export {
340
- z as ControllerBase
346
+ ee as ControllerBase
341
347
  };
342
348
  //# sourceMappingURL=ControllerBase.js.map
@@ -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 {deriveLabels} from '@platforma-sdk/model';\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 { ColumnOrAxisIdString } from '../spec';\nimport { AxisId, ColumnId, columnOrAxisIdFromString, isColumnId } from '../spec';\nimport {\n addSourceInfoToMap,\n createLinkerMap,\n dataColumnPredicateDefault,\n getColumnOrAxisValueLabelsId,\n getDefaultInfo,\n getStateCopy,\n} from '../utils';\nimport { ComponentController } from './ComponentController';\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\n protected constructor(\n readonly simpleComponentControllers: SimpleComponentControllers<State>,\n readonly filterComponentControllers: FilterComponentControllers<State>\n ) {}\n\n get requiredComponents(): (keyof State['components'])[] {\n const components: (keyof State['components'])[] = [];\n for (const componentName of Object.keys(this.simpleComponentControllers) as SimpleComponents<State>[]) {\n if (this.simpleComponentControllers[componentName].isRequired) {\n components.push(componentName);\n }\n }\n return components;\n }\n\n get dimensionsConsumerComponents(): (keyof State['components'])[] {\n const components: (keyof State['components'])[] = [];\n for (const componentName of Object.keys(this.simpleComponentControllers) as SimpleComponents<State>[]) {\n if (this.simpleComponentControllers[componentName].isDimensionsConsumer) {\n components.push(componentName);\n }\n }\n for (const componentName of Object.keys(this.filterComponentControllers) as FilterComponents<State>[]) {\n if (this.filterComponentControllers[componentName].isDimensionsConsumer) {\n components.push(componentName);\n }\n }\n return components;\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 async getMustBeConsumedAxes(store: DataStore, state: State): Promise<Set<ColumnOrAxisIdString>> {\n return Promise.resolve(new Set());\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 async getSelectedSourcesInfo(\n store: DataStore,\n state: State,\n labelsMap: Record<string, string>,\n linkerMap: LinkerMap\n ): Promise<Map<ColumnOrAxisIdString, AxisData | ColumnData>> {\n const result: Map<ColumnOrAxisIdString, AxisData> = new Map();\n\n const dataAxes = new Set<string>();\n const dataAxesList: AxisSpec[] = [];\n for (const inputName of this.dataInputs) {\n for (const selectorState of state.components[inputName].selectorStates) {\n const id = columnOrAxisIdFromString(selectorState.selectedSource);\n if (isColumnId(id)) {\n const columnSpec = await store.pFrameProvider.getColumnSpecById(id);\n if (columnSpec) {\n columnSpec.axesSpec.forEach(axisSpec => {\n const idStr = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n if (!dataAxes.has(idStr)) {\n dataAxes.add(idStr);\n dataAxesList.push(axisSpec);\n }\n });\n }\n }\n }\n }\n for (const [inputName , {selectorStates}] of Object.entries(state.components)) {\n const component = this.simpleComponentControllers[inputName as keyof typeof this.simpleComponentControllers]\n ?? this.filterComponentControllers[inputName as keyof typeof this.filterComponentControllers] as ComponentController<State, typeof inputName>;\n const fixedAxesAllowed = component.settings.columnsWithExtraAxesAllowed;\n for (const {selectedSource} of selectorStates) {\n await addSourceInfoToMap(\n store,\n selectedSource,\n labelsMap[selectedSource],\n result,\n dataAxesList,\n dataAxes,\n fixedAxesAllowed,\n linkerMap\n );\n }\n }\n return result;\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 freeOptionsSet: new Set(),\n axesToBeFixedSet: 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 for (const componentName of this.dimensionsConsumerComponents) {\n for (const {selectedSource} of state.components[componentName].selectorStates) {\n consumedSourcesSet.add(selectedSource);\n }\n }\n return consumedSourcesSet;\n }\n\n async getLabelsMap(store: DataStore, state: State) {\n const availableColumns = await store.pFrameProvider.getColumnsFull(\n this.dataInputs.reduce((res: (ColumnId | AxisId)[], inputName) => {\n const componentState = state.components[inputName];\n const sources = componentState.selectorStates.map(st => columnOrAxisIdFromString(st.selectedSource));\n return res.concat(sources);\n }, []),\n false\n );\n return deriveLabels(availableColumns, el => el.spec).reduce((res: Record<string, string>, el) => {\n const id = new ColumnId({name: el.value.columnId, type: el.value.spec.valueType}).toCanonicalString();\n res[id] = el.label;\n return res;\n }, {});\n }\n\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 // set of columns and axes that selected in consumer-dimensions components\n const consumedSourcesSet = this.getConsumedOptionsSet(state);\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 const linkerMap = await createLinkerMap(store)\n\n const labelsMap = await this.getLabelsMap(store, state); // improved labels with name separation for different columns with the same name; for axes - name from spec or labels column\n const selectedColumnsOrAxesInfo = await this.getSelectedSourcesInfo(store, state, labelsMap, linkerMap);\n const optionsInfo: Map<ColumnOrAxisIdString, ColumnData | AxisData> = new Map();\n\n const allControllers = {...this.simpleComponentControllers, ...this.filterComponentControllers};\n const freeOptionsSet = new Set<ColumnOrAxisIdString>();\n for (const [name, componentController] of Object.entries(allControllers)) {\n const options = await (\n componentController as ComponentController<State, SimpleComponents<State> | FilterComponents<State>>\n ).getOptions(\n store,\n state,\n labelsMap,\n consumedSourcesSet,\n linkerMap,\n dataColumnPredicate,\n ignoredNamesSet,\n fixedSelectedSet\n );\n if (!this.dataInputs.includes(name as string)) {\n options.options.forEach(item => {\n freeOptionsSet.add(item.value);\n });\n }\n for (const [key, v] of options.optionsInfo) {\n optionsInfo.set(key, v);\n }\n resultComponentsGuide[name as keyof InputOptionsUnion<State>] =\n options as (typeof resultComponentsGuide)[keyof InputOptionsUnion<State>];\n }\n\n const markMustBeConsumed = (id: string) => {\n const option = optionsInfo.get(id);\n if (option && option.kind === 'axis') {\n option.mustBeConsumed = true;\n }\n const selected = selectedColumnsOrAxesInfo.get(id);\n if (selected && selected.kind === 'axis') {\n selected.mustBeConsumed = true;\n }\n };\n // axes from heatmap data column, to make visible what axes should be; hanging axes from scatterplot\n const mustBeConsumedAxes = await this.getMustBeConsumedAxes(store, state);\n for (const id of mustBeConsumedAxes) {\n markMustBeConsumed(id);\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 = selectedColumnsOrAxesInfo.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 = selectedColumnsOrAxesInfo.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 (!freeOptionsSet.has(idStr) && !consumedHighCardinalityAxes.has(idStr)) {\n // return axis to the list of free axis if it is selected somewhere, but nothing with this axis is in the filters\n freeOptionsSet.add(idStr);\n }\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 (!freeOptionsSet.has(idStr)) {\n freeOptionsSet.add(idStr);\n }\n if (!consumedHighCardinalityAxes.has(idStr)) {\n markMustBeConsumed(idStr);\n }\n }\n }\n });\n }\n\n const axesToBeFixedSet = new Set<ColumnOrAxisIdString>();\n for (const {selectorStates} of Object.values(state.components)) {\n for (const {selectedSource} of selectorStates) {\n const info = selectedColumnsOrAxesInfo.get(selectedSource);\n if (info && info.kind === 'column') {\n info.axesToBeFixed.forEach(axisIdStr => {\n axesToBeFixedSet.add(axisIdStr);\n });\n }\n }\n }\n\n const consistent = await this.isConsistent(store, state, linkerMap);\n const getSourceInfo = (sourceIdStr: ColumnOrAxisIdString) => {\n const id = columnOrAxisIdFromString(sourceIdStr).toCanonicalString() ?? sourceIdStr;\n return optionsInfo.get(id) ?? selectedColumnsOrAxesInfo.get(id) ?? getDefaultInfo(sourceIdStr);\n };\n return {\n components: resultComponentsGuide as ComponentsGuide<State['components']>,\n getSourceInfo,\n freeOptionsSet,\n axesToBeFixedSet,\n readyData: this.readyDataInputs(state),\n ready: this.readyForPlotBuilding(store, state, consistent, freeOptionsSet, 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 async checkStateConsistency(\n store: DataStore,\n state: State,\n linkerMap: LinkerMap\n ): Promise<Map<keyof State['components'], Record<string, boolean>>> {\n const result: Map<keyof State['components'], Record<string, boolean>> = new Map();\n for (const component of Object.keys(this.simpleComponentControllers) as SimpleComponents<State>[]) {\n result.set(\n component as keyof State['components'],\n await this.simpleComponentControllers[component].checkStateConsistency(store, state, linkerMap)\n );\n }\n for (const component of Object.keys(this.filterComponentControllers) as FilterComponents<State>[]) {\n result.set(\n component as keyof State['components'],\n await this.filterComponentControllers[component].checkStateConsistency(store, state, linkerMap)\n );\n }\n return result;\n }\n\n async isConsistent(store: DataStore, state: State, linkerMap: LinkerMap): Promise<boolean> {\n const consistency = await this.checkStateConsistency(store, state, linkerMap);\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 store: DataStore,\n state: State,\n consistent: boolean,\n freeOptionsSet: 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 freeOptionsSet) {\n const info = getSourceInfo(optionId);\n if (info && info.kind === 'axis' && info.mustBeConsumed) {\n hasFreeDimensions = true;\n break;\n }\n }\n let hasNotSelectedAxisToBeFixed: boolean = false;\n for (const {selectorStates} of Object.values(state.components)) {\n for (const {selectedSource, fixedAxes} of selectorStates) {\n const info = getSourceInfo(selectedSource);\n if (\n info &&\n info.kind === 'column' &&\n info.axesToBeFixed.some(\n id => (fixedAxes ?? []).find(el => el.axisSource === id)?.axisValue === undefined\n )\n ) {\n hasNotSelectedAxisToBeFixed = true;\n break;\n }\n }\n if (hasNotSelectedAxisToBeFixed) {\n break;\n }\n }\n return (\n this.requiredComponents.every(name => state.components[name].selectorStates.length > 0) &&\n !hasFreeDimensions &&\n !hasNotSelectedAxisToBeFixed\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","components","componentName","inputName","state","selectorState","store","nextSelectorStates","currentStates","deletedStates","currentState","s","addedStates","nextState","h","getStateCopy","st","axis","key","value","labelsMap","linkerMap","result","dataAxes","dataAxesList","id","columnOrAxisIdFromString","isColumnId","columnSpec","axisSpec","idStr","AxisId","selectorStates","fixedAxesAllowed","selectedSource","addSourceInfoToMap","sourceIdStr","getDefaultInfo","consumedSourcesSet","availableColumns","res","sources","a","deriveLabels","el","ColumnId","fixedIds","dataColumnPredicate","dataColumnPredicateDefault","resultComponentsGuide","ignoredNamesSet","fixedSelectedSet","createLinkerMap","selectedColumnsOrAxesInfo","optionsInfo","allControllers","freeOptionsSet","name","componentController","options","item","v","markMustBeConsumed","option","selected","mustBeConsumedAxes","isHighCardinality","spec","_a","HIGH_CARDINALITY","consumedHighCardinalityAxes","consumed","info","axesToBeFixedSet","axisIdStr","consistent","getSourceInfo","inputGuide","limit","searchQuery","searchQueryValue","sortValues","values","b","discreteValuesStr","DISCRETE_VALUES_KEY","discreteValues","axisId","parentSources","labelsColumnId","getColumnOrAxisValueLabelsId","filters","dataValues","axesData","axisKeys","i","searchInLabelsOrValue","response","w","columnId","component","consistency","hasFreeDimensions","optionId","hasNotSelectedAxisToBeFixed","fixedAxes","S"],"mappings":"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","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 {deriveLabels} from '@platforma-sdk/model';\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 { ColumnOrAxisIdString } from '../spec';\nimport { AxisId, ColumnId, columnOrAxisIdFromString, isColumnId } from '../spec';\nimport {\n addSourceInfoToMap,\n createLinkerMap,\n dataColumnPredicateDefault,\n getColumnOrAxisValueLabelsId,\n getDefaultInfo,\n getStateCopy,\n} from '../utils';\nimport { ComponentController } from './ComponentController';\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\n protected constructor(\n readonly simpleComponentControllers: SimpleComponentControllers<State>,\n readonly filterComponentControllers: FilterComponentControllers<State>\n ) {}\n\n get requiredComponents(): (keyof State['components'])[] {\n const components: (keyof State['components'])[] = [];\n for (const componentName of Object.keys(this.simpleComponentControllers) as SimpleComponents<State>[]) {\n if (this.simpleComponentControllers[componentName].isRequired) {\n components.push(componentName);\n }\n }\n return components;\n }\n\n get dimensionsConsumerComponents(): (keyof State['components'])[] {\n const components: (keyof State['components'])[] = [];\n for (const componentName of Object.keys(this.simpleComponentControllers) as SimpleComponents<State>[]) {\n if (this.simpleComponentControllers[componentName].isDimensionsConsumer) {\n components.push(componentName);\n }\n }\n for (const componentName of Object.keys(this.filterComponentControllers) as FilterComponents<State>[]) {\n if (this.filterComponentControllers[componentName].isDimensionsConsumer) {\n components.push(componentName);\n }\n }\n return components;\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 async getMustBeConsumedAxes(store: DataStore, state: State): Promise<Set<ColumnOrAxisIdString>> {\n return Promise.resolve(new Set());\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 async getSelectedSourcesInfo(\n store: DataStore,\n state: State,\n labelsMap: Record<string, string>,\n linkerMap: LinkerMap\n ): Promise<Map<ColumnOrAxisIdString, AxisData | ColumnData>> {\n const result: Map<ColumnOrAxisIdString, AxisData> = new Map();\n\n const dataAxes = new Set<string>();\n const dataAxesList: AxisSpec[] = [];\n for (const inputName of this.dataInputs) {\n for (const selectorState of state.components[inputName].selectorStates) {\n const id = columnOrAxisIdFromString(selectorState.selectedSource);\n if (isColumnId(id)) {\n const columnSpec = await store.pFrameProvider.getColumnSpecById(id);\n if (columnSpec) {\n columnSpec.axesSpec.forEach(axisSpec => {\n const idStr = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n if (!dataAxes.has(idStr)) {\n dataAxes.add(idStr);\n dataAxesList.push(axisSpec);\n }\n });\n }\n }\n }\n }\n for (const [inputName , {selectorStates}] of Object.entries(state.components)) {\n const component = this.simpleComponentControllers[inputName as keyof typeof this.simpleComponentControllers]\n ?? this.filterComponentControllers[inputName as keyof typeof this.filterComponentControllers] as ComponentController<State, typeof inputName>;\n const fixedAxesAllowed = component.settings.columnsWithExtraAxesAllowed;\n for (const {selectedSource} of selectorStates) {\n await addSourceInfoToMap(\n store,\n selectedSource,\n labelsMap[selectedSource],\n result,\n dataAxesList,\n dataAxes,\n fixedAxesAllowed,\n linkerMap\n );\n }\n }\n return result;\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 freeOptionsSet: new Set(),\n axesToBeFixedSet: 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 for (const componentName of this.dimensionsConsumerComponents) {\n for (const {selectedSource} of state.components[componentName].selectorStates) {\n consumedSourcesSet.add(selectedSource);\n }\n }\n return consumedSourcesSet;\n }\n\n async getLabelsMap(store: DataStore, state: State) {\n const availableColumns = await store.pFrameProvider.getColumnsFull(\n this.dataInputs.reduce((res: (ColumnId | AxisId)[], inputName) => {\n const componentState = state.components[inputName];\n const sources = componentState.selectorStates.map(st => columnOrAxisIdFromString(st.selectedSource));\n return res.concat(sources);\n }, []),\n false\n );\n return deriveLabels(availableColumns, el => el.spec).reduce((res: Record<string, string>, el) => {\n const id = new ColumnId({name: el.value.columnId, type: el.value.spec.valueType}).toCanonicalString();\n res[id] = el.label;\n return res;\n }, {});\n }\n\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 // set of columns and axes that selected in consumer-dimensions components\n const consumedSourcesSet = this.getConsumedOptionsSet(state);\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 const linkerMap = await createLinkerMap(store)\n\n const labelsMap = await this.getLabelsMap(store, state); // improved labels with name separation for different columns with the same name; for axes - name from spec or labels column\n const selectedColumnsOrAxesInfo = await this.getSelectedSourcesInfo(store, state, labelsMap, linkerMap);\n const optionsInfo: Map<ColumnOrAxisIdString, ColumnData | AxisData> = new Map();\n\n const allControllers = {...this.simpleComponentControllers, ...this.filterComponentControllers};\n const freeOptionsSet = new Set<ColumnOrAxisIdString>();\n for (const [name, componentController] of Object.entries(allControllers)) {\n const options = await (\n componentController as ComponentController<State, SimpleComponents<State> | FilterComponents<State>>\n ).getOptions(\n store,\n state,\n labelsMap,\n consumedSourcesSet,\n linkerMap,\n dataColumnPredicate,\n ignoredNamesSet,\n fixedSelectedSet\n );\n if (!this.dataInputs.includes(name as string)) {\n options.options.forEach(item => {\n freeOptionsSet.add(item.value);\n });\n }\n for (const [key, v] of options.optionsInfo) {\n optionsInfo.set(key, v);\n }\n resultComponentsGuide[name as keyof InputOptionsUnion<State>] =\n options as (typeof resultComponentsGuide)[keyof InputOptionsUnion<State>];\n }\n\n const markMustBeConsumed = (id: string) => {\n const option = optionsInfo.get(id);\n if (option && option.kind === 'axis') {\n option.mustBeConsumed = true;\n }\n const selected = selectedColumnsOrAxesInfo.get(id);\n if (selected && selected.kind === 'axis') {\n selected.mustBeConsumed = true;\n }\n };\n // axes from heatmap data column, to make visible what axes should be; hanging axes from scatterplot\n const mustBeConsumedAxes = await this.getMustBeConsumedAxes(store, state);\n for (const id of mustBeConsumedAxes) {\n markMustBeConsumed(id);\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 = selectedColumnsOrAxesInfo.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 = selectedColumnsOrAxesInfo.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 (!freeOptionsSet.has(idStr) && !consumedHighCardinalityAxes.has(idStr)) {\n // return axis to the list of free axis if it is selected somewhere, but nothing with this axis is in the filters\n freeOptionsSet.add(idStr);\n }\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 (!freeOptionsSet.has(idStr)) {\n freeOptionsSet.add(idStr);\n }\n if (!consumedHighCardinalityAxes.has(idStr)) {\n markMustBeConsumed(idStr);\n }\n }\n }\n });\n }\n\n const axesToBeFixedSet = new Set<ColumnOrAxisIdString>();\n for (const {selectorStates} of Object.values(state.components)) {\n for (const {selectedSource} of selectorStates) {\n const info = selectedColumnsOrAxesInfo.get(selectedSource);\n if (info && info.kind === 'column') {\n info.axesToBeFixed.forEach(axisIdStr => {\n axesToBeFixedSet.add(axisIdStr);\n });\n }\n }\n }\n\n const consistent = await this.isConsistent(store, state, linkerMap);\n const getSourceInfo = (sourceIdStr: ColumnOrAxisIdString) => {\n const id = columnOrAxisIdFromString(sourceIdStr).toCanonicalString() ?? sourceIdStr;\n return optionsInfo.get(id) ?? selectedColumnsOrAxesInfo.get(id) ?? getDefaultInfo(sourceIdStr);\n };\n return {\n components: resultComponentsGuide as ComponentsGuide<State['components']>,\n getSourceInfo,\n freeOptionsSet,\n axesToBeFixedSet,\n readyData: this.readyDataInputs(state),\n ready: this.readyForPlotBuilding(store, state, consistent, freeOptionsSet, 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 async checkStateConsistency(\n store: DataStore,\n state: State,\n linkerMap: LinkerMap\n ): Promise<Map<keyof State['components'], Record<string, boolean>>> {\n const result: Map<keyof State['components'], Record<string, boolean>> = new Map();\n for (const component of Object.keys(this.simpleComponentControllers) as SimpleComponents<State>[]) {\n result.set(\n component as keyof State['components'],\n await this.simpleComponentControllers[component].checkStateConsistency(store, state, linkerMap)\n );\n }\n for (const component of Object.keys(this.filterComponentControllers) as FilterComponents<State>[]) {\n result.set(\n component as keyof State['components'],\n await this.filterComponentControllers[component].checkStateConsistency(store, state, linkerMap)\n );\n }\n return result;\n }\n\n async isConsistent(store: DataStore, state: State, linkerMap: LinkerMap): Promise<boolean> {\n const consistency = await this.checkStateConsistency(store, state, linkerMap);\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 store: DataStore,\n state: State,\n consistent: boolean,\n freeOptionsSet: 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 freeOptionsSet) {\n const info = getSourceInfo(optionId);\n if (info && info.kind === 'axis' && info.mustBeConsumed) {\n hasFreeDimensions = true;\n break;\n }\n }\n let hasNotSelectedAxisToBeFixed: boolean = false;\n for (const {selectorStates} of Object.values(state.components)) {\n for (const {selectedSource, fixedAxes} of selectorStates) {\n const info = getSourceInfo(selectedSource);\n if (\n info &&\n info.kind === 'column' &&\n info.axesToBeFixed.some(\n id => (fixedAxes ?? []).find(el => el.axisSource === id)?.axisValue === undefined\n )\n ) {\n hasNotSelectedAxisToBeFixed = true;\n break;\n }\n }\n if (hasNotSelectedAxisToBeFixed) {\n break;\n }\n }\n return (\n this.requiredComponents.every(name => state.components[name].selectorStates.length > 0) &&\n !hasFreeDimensions &&\n !hasNotSelectedAxisToBeFixed\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","components","componentName","inputName","state","selectorState","store","nextSelectorStates","currentStates","deletedStates","currentState","s","addedStates","nextState","h","getStateCopy","st","axis","key","value","labelsMap","linkerMap","result","dataAxes","dataAxesList","id","columnOrAxisIdFromString","isColumnId","columnSpec","axisSpec","idStr","AxisId","selectorStates","fixedAxesAllowed","selectedSource","addSourceInfoToMap","sourceIdStr","getDefaultInfo","consumedSourcesSet","availableColumns","res","sources","a","deriveLabels","el","ColumnId","fixedIds","dataColumnPredicate","dataColumnPredicateDefault","resultComponentsGuide","ignoredNamesSet","fixedSelectedSet","createLinkerMap","selectedColumnsOrAxesInfo","optionsInfo","allControllers","freeOptionsSet","name","componentController","options","item","v","markMustBeConsumed","option","selected","mustBeConsumedAxes","isHighCardinality","spec","_a","HIGH_CARDINALITY","consumedHighCardinalityAxes","consumed","info","axesToBeFixedSet","axisIdStr","consistent","getSourceInfo","inputGuide","limit","searchQuery","searchQueryValue","sortValues","values","b","discreteValuesStr","DISCRETE_VALUES_KEY","discreteValues","axisId","parentSources","labelsColumnId","getColumnOrAxisValueLabelsId","filters","dataValues","axesData","axisKeys","i","searchInLabelsOrValue","response","w","columnId","component","consistency","hasFreeDimensions","optionId","hasNotSelectedAxisToBeFixed","fixedAxes","S"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,8 +1,8 @@
1
1
  import q from "../../_virtual/canonicalize.js";
2
- import { ControllerBase as G } from "../ControllerBase.js";
2
+ import { ControllerBase as $ } from "../ControllerBase.js";
3
3
  import { ComponentController as r } from "../ComponentController.js";
4
4
  import { columnOrAxisIdFromString as c, isColumnId as h } from "../../spec.js";
5
- import { createLinkerMap as V, getFiltersFromStates as B, getAxesSpecsFromSources as $, getLinkerColumnsForSource as z, getColumnOrAxisValueLabelsId as N, getColumnOrAxisLabel as x } from "../../utils.js";
5
+ import { createLinkerMap as G, getFiltersFromStates as B, getAxesSpecsFromSources as V, getLinkerColumnsForSource as z, getColumnOrAxisValueLabelsId as N, getColumnOrAxisLabel as x } from "../../utils.js";
6
6
  var k = Object.defineProperty, M = (O, t, e) => t in O ? k(O, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : O[t] = e, j = (O, t, e) => M(O, t + "", e);
7
7
  const F = "pl7.app/dendrogram/nodeId", W = "id", K = {
8
8
  type: "dendro",
@@ -25,7 +25,7 @@ const F = "pl7.app/dendrogram/nodeId", W = "id", K = {
25
25
  },
26
26
  dividedAxes: {}
27
27
  };
28
- class Q extends G {
28
+ class Q extends $ {
29
29
  constructor() {
30
30
  super(
31
31
  {
@@ -219,13 +219,13 @@ class Q extends G {
219
219
  const d = {}, S = (A = e.components.value.selectorStates[0]) == null ? void 0 : A.selectedSource, w = c(S);
220
220
  if (!S || !h(w))
221
221
  throw Error("Value column is not valid");
222
- const b = await V(t), g = B([
222
+ const b = await G(t), g = B([
223
223
  ...e.components.filters.selectorStates,
224
224
  ...e.components.tabBy.selectorStates
225
225
  ]), y = [
226
226
  ...e.components.filters.selectorStates.map((n) => c(n.selectedSource)),
227
227
  ...e.components.tabBy.selectorStates.map((n) => c(n.selectedSource))
228
- ].filter(h), u = [S], T = await $(t, u), D = [], i = [], p = [], f = [e.components.value], v = [
228
+ ].filter(h), u = [S], T = await V(t, u), D = [], i = [], p = [], f = [e.components.value], v = [
229
229
  e.components.tableContent,
230
230
  // next components can content data mapped on tree
231
231
  e.components.labels,
@@ -1,10 +1,10 @@
1
1
  import E from "../../_virtual/canonicalize.js";
2
- import { ControllerBase as N } from "../ControllerBase.js";
2
+ import { ControllerBase as V } from "../ControllerBase.js";
3
3
  import { ComponentController as d } from "../ComponentController.js";
4
4
  import { columnOrAxisIdFromString as w, isColumnId as y } from "../../spec.js";
5
- import { checkSourceBySpecForFilters as V, createLinkerMap as T, getFiltersFromStates as k, getAxesSpecsFromSources as P, getLinkerColumnsForSource as I, getColumnOrAxisValueLabelsId as b, getColumnOrAxisLabel as F } from "../../utils.js";
6
- var H = Object.defineProperty, U = (l, e, t) => e in l ? H(l, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : l[e] = t, j = (l, e, t) => U(l, e + "", t);
7
- const $ = {
5
+ import { checkSourceBySpecForFilters as N, createLinkerMap as T, getFiltersFromStates as k, getAxesSpecsFromSources as P, getLinkerColumnsForSource as I, getColumnOrAxisValueLabelsId as b, getColumnOrAxisLabel as F } from "../../utils.js";
6
+ var H = Object.defineProperty, U = (l, e, t) => e in l ? H(l, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : l[e] = t, $ = (l, e, t) => U(l, e + "", t);
7
+ const W = {
8
8
  type: "histogram",
9
9
  components: {
10
10
  value: { type: "simple", selectorStates: [] },
@@ -15,7 +15,7 @@ const $ = {
15
15
  },
16
16
  dividedAxes: {}
17
17
  };
18
- class G extends N {
18
+ class G extends V {
19
19
  constructor() {
20
20
  super(
21
21
  {
@@ -63,7 +63,7 @@ class G extends N {
63
63
  dimensionConsumer: !0,
64
64
  multipleSelectors: !0
65
65
  },
66
- checkSourceBySpec: V
66
+ checkSourceBySpec: N
67
67
  }),
68
68
  tabBy: new d({
69
69
  componentName: "tabBy",
@@ -77,7 +77,7 @@ class G extends N {
77
77
  }
78
78
  })
79
79
  }
80
- ), j(this, "dataInputs", ["value"]);
80
+ ), $(this, "dataInputs", ["value"]);
81
81
  }
82
82
  async createDataByColumns(e, t) {
83
83
  var i;
@@ -165,6 +165,6 @@ class G extends N {
165
165
  }
166
166
  export {
167
167
  G as HistogramStateController,
168
- $ as InitialHistogramState
168
+ W as InitialHistogramState
169
169
  };
170
170
  //# sourceMappingURL=histogram.js.map
@@ -4,7 +4,7 @@ import { FORMAT as T } from "../../constants.js";
4
4
  import { ControllerBase as X } from "../ControllerBase.js";
5
5
  import { ComponentController as c } from "../ComponentController.js";
6
6
  import { columnOrAxisIdFromString as S, AxisId as N, isColumnId as C } from "../../spec.js";
7
- import { checkSourceBySpecForFilters as k, createLinkerMap as Y, getFiltersFromStates as j, getAxesSpecsFromSources as $, getLinkerColumnsForSource as E, getColumnOrAxisValueLabelsId as O, createHighlightColumn as H, getColumnOrAxisLabel as D, getColumnOrAxisSpec as z } from "../../utils.js";
7
+ import { checkSourceBySpecForFilters as k, createLinkerMap as Y, getFiltersFromStates as $, getAxesSpecsFromSources as j, getLinkerColumnsForSource as E, getColumnOrAxisValueLabelsId as O, createHighlightColumn as H, getColumnOrAxisLabel as D, getColumnOrAxisSpec as z } from "../../utils.js";
8
8
  var J = Object.defineProperty, Q = (h, t, e) => t in h ? J(h, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : h[t] = e, R = (h, t, e) => Q(h, t + "", e);
9
9
  const oe = {
10
10
  type: "scatterplot-umap",
@@ -173,10 +173,10 @@ class ne extends X {
173
173
  }, d = await Y(t), n = [
174
174
  ...e.components.filters.selectorStates,
175
175
  ...e.components.tabBy.selectorStates
176
- ], w = j(n), I = n.map((i) => S(i.selectedSource)).filter(C), b = [a, r].filter(C).map((i) => i.toCanonicalString());
176
+ ], w = $(n), I = n.map((i) => S(i.selectedSource)).filter(C), b = [a, r].filter(C).map((i) => i.toCanonicalString());
177
177
  if (b.length === 0)
178
178
  throw Error("One of X and Y should be a column");
179
- const B = await $(t, b), P = [a, r, ...I], f = [], F = [[], []], A = [], v = [];
179
+ const B = await j(t, b), P = [a, r, ...I], f = [], F = [[], []], A = [], v = [];
180
180
  for (const { selectedSource: i, fixedAxes: s } of n)
181
181
  v.push(...await E(
182
182
  t,