@milaboratories/graph-maker 1.1.166 → 1.1.168

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 (111) hide show
  1. package/dist/GraphMaker/constantsCommon.d.ts +2 -9
  2. package/dist/GraphMaker/constantsCommon.d.ts.map +1 -1
  3. package/dist/GraphMaker/constantsCommon.js +78 -83
  4. package/dist/GraphMaker/constantsCommon.js.map +1 -1
  5. package/dist/GraphMaker/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js +8 -2
  6. package/dist/GraphMaker/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js.map +1 -1
  7. package/dist/GraphMaker/forms/DataMappingForm/DiscreteForm.vue.js +26 -20
  8. package/dist/GraphMaker/forms/DataMappingForm/DiscreteForm.vue.js.map +1 -1
  9. package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedArea.vue.d.ts.map +1 -1
  10. package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedArea.vue.js +56 -38
  11. package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedArea.vue.js.map +1 -1
  12. package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedBar.vue.d.ts.map +1 -1
  13. package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedBar.vue.js +48 -30
  14. package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedBar.vue.js.map +1 -1
  15. package/dist/GraphMaker/forms/LayersForm/Layer/scatterplot/Scatter.vue.d.ts.map +1 -1
  16. package/dist/GraphMaker/forms/LayersForm/Layer/scatterplot/Scatter.vue.js +37 -31
  17. package/dist/GraphMaker/forms/LayersForm/Layer/scatterplot/Scatter.vue.js.map +1 -1
  18. package/dist/GraphMaker/forms/LayersForm/Layer/scatterplot-umap/Scatter.vue.js +30 -24
  19. package/dist/GraphMaker/forms/LayersForm/Layer/scatterplot-umap/Scatter.vue.js.map +1 -1
  20. package/dist/GraphMaker/forms/StatisticsForm/DiscreteStatisticsForm.vue.js +33 -27
  21. package/dist/GraphMaker/forms/StatisticsForm/DiscreteStatisticsForm.vue.js.map +1 -1
  22. package/dist/GraphMaker/index.vue.js +8 -2
  23. package/dist/GraphMaker/index.vue.js.map +1 -1
  24. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.js +22 -16
  25. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.js.map +1 -1
  26. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +2 -0
  27. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts.map +1 -1
  28. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.js +17 -11
  29. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.js.map +1 -1
  30. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js +26 -20
  31. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js.map +1 -1
  32. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.js +29 -23
  33. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.js.map +1 -1
  34. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts.map +1 -1
  35. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js +83 -68
  36. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js.map +1 -1
  37. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js +25 -19
  38. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js.map +1 -1
  39. package/dist/GraphMaker/utils/createChartSettingsForRender/getLayersDataFromForms.d.ts.map +1 -1
  40. package/dist/GraphMaker/utils/createChartSettingsForRender/getLayersDataFromForms.js +7 -5
  41. package/dist/GraphMaker/utils/createChartSettingsForRender/getLayersDataFromForms.js.map +1 -1
  42. package/dist/GraphMaker/utils/getUsedAesInMapping.js +37 -31
  43. package/dist/GraphMaker/utils/getUsedAesInMapping.js.map +1 -1
  44. package/dist/GraphMaker/utils/loadDefaultSources.d.ts.map +1 -1
  45. package/dist/GraphMaker/utils/loadDefaultSources.js +36 -31
  46. package/dist/GraphMaker/utils/loadDefaultSources.js.map +1 -1
  47. package/dist/_virtual/stringify.js +5 -0
  48. package/dist/_virtual/stringify.js.map +1 -0
  49. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js +8 -8
  50. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
  51. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js +8 -8
  52. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/stackedBar.js +54 -29
  53. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/stackedBar.js.map +1 -1
  54. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-array/src/min.js +12 -6
  55. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-array/src/min.js.map +1 -1
  56. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js +2 -0
  57. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js.map +1 -1
  58. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js +106 -107
  59. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js.map +1 -1
  60. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ControllerBase.js +120 -121
  61. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ControllerBase.js.map +1 -1
  62. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/bubble.js +83 -84
  63. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/bubble.js.map +1 -1
  64. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/dendro.js +4 -4
  65. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/discrete.js +11 -11
  66. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/heatmap.js +123 -124
  67. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/heatmap.js.map +1 -1
  68. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/histogram.js +8 -8
  69. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js +116 -117
  70. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js.map +1 -1
  71. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js +100 -102
  72. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js.map +1 -1
  73. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js +148 -119
  74. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js.map +1 -1
  75. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/components/PlDataTable.js +4 -4
  76. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/render/util/label.js +5 -5
  77. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js +8 -0
  78. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js.map +1 -0
  79. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js +182 -0
  80. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js.map +1 -0
  81. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/errors.js +18 -0
  82. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/errors.js.map +1 -0
  83. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/json.js +12 -0
  84. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/json.js.map +1 -0
  85. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/plid.js +7 -0
  86. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/plid.js.map +1 -0
  87. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/ref.js +8 -0
  88. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/ref.js.map +1 -0
  89. package/dist/node_modules/@milaboratories/pf-plots/dist/pframe/ColumnsProvider.js +105 -111
  90. package/dist/node_modules/@milaboratories/pf-plots/dist/pframe/ColumnsProvider.js.map +1 -1
  91. package/dist/node_modules/@milaboratories/pf-plots/dist/utils.js +158 -163
  92. package/dist/node_modules/@milaboratories/pf-plots/dist/utils.js.map +1 -1
  93. package/dist/node_modules/@milaboratories/pl-error-like/dist/error_like_shape.js +36 -0
  94. package/dist/node_modules/@milaboratories/pl-error-like/dist/error_like_shape.js.map +1 -0
  95. package/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js +8 -0
  96. package/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js.map +1 -0
  97. package/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js +52 -0
  98. package/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js.map +1 -0
  99. package/dist/node_modules/@milaboratories/pl-model-common/dist/plid.js +7 -0
  100. package/dist/node_modules/@milaboratories/pl-model-common/dist/plid.js.map +1 -0
  101. package/dist/node_modules/@milaboratories/pl-model-common/dist/ref.js +8 -0
  102. package/dist/node_modules/@milaboratories/pl-model-common/dist/ref.js.map +1 -0
  103. package/dist/node_modules/@platforma-sdk/model/dist/render/util/label.js +16 -0
  104. package/dist/node_modules/@platforma-sdk/model/dist/render/util/label.js.map +1 -0
  105. package/dist/node_modules/json-stringify-safe/stringify.js +20 -0
  106. package/dist/node_modules/json-stringify-safe/stringify.js.map +1 -0
  107. package/dist/node_modules/zod/lib/index.js +2978 -0
  108. package/dist/node_modules/zod/lib/index.js.map +1 -0
  109. package/package.json +4 -4
  110. package/dist/node_modules/@milaboratories/pf-plots/dist/constants.js +0 -18
  111. package/dist/node_modules/@milaboratories/pf-plots/dist/constants.js.map +0 -1
@@ -1,31 +1,31 @@
1
- import "../node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js";
2
- import { getNormalizedAxesList as E } from "../node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js";
1
+ import "../node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js";
2
+ import { getNormalizedAxesList as N } from "../node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js";
3
3
  import "../_virtual/canonicalize.js";
4
- import { LinkerMap as W } from "../node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/linker_columns.js";
5
- import "../node_modules/@milaboratories/pl-model-common/dist/plid.js";
6
- import "../node_modules/@milaboratories/pl-model-common/dist/ref.js";
4
+ import "../node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/plid.js";
5
+ import "../node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/ref.js";
7
6
  import "../node_modules/@platforma-sdk/model/dist/render/util/label.js";
8
- import { isLabelColumn as U } from "../node_modules/@platforma-sdk/model/dist/components/PlDataTable.js";
7
+ import { isLabelColumn as M } from "../node_modules/@platforma-sdk/model/dist/components/PlDataTable.js";
9
8
  import "../node_modules/@milaboratories/pl-error-like/dist/error_like_shape.js";
10
- import { DISCRETE_FILTER_KEY as F, SUBSET_FILTER_KEY as L, COLUMN_LABEL_KEY as j, IS_LINKER_COLUMN as z } from "../constants.js";
11
- import { columnOrAxisIdFromString as B, isColumnId as T, AxisId as N, ColumnId as H } from "../spec.js";
12
- import { getStateCopy as $, getNotAllowedAxes as Y, axisIsNonHomogenous as Z, getColumnOrAxisLabel as V } from "../utils.js";
13
- var G = Object.defineProperty, J = (d, e, t) => e in d ? G(d, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : d[e] = t, S = (d, e, t) => J(d, typeof e != "symbol" ? e + "" : e, t);
14
- const Q = (d) => {
15
- var e;
16
- return ((e = d == null ? void 0 : d.annotations) == null ? void 0 : e[z]) === "true";
17
- }, q = class M {
9
+ import { columnOrAxisIdFromString as O, isColumnId as P, AxisId as k, ColumnId as W } from "../spec.js";
10
+ import "../node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js";
11
+ import { readAnnotation as A, Annotation as x } from "../node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js";
12
+ import { LinkerMap as j } from "../node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/linker_columns.js";
13
+ import "../node_modules/@milaboratories/pl-model-common/dist/plid.js";
14
+ import "../node_modules/@milaboratories/pl-model-common/dist/ref.js";
15
+ import { getStateCopy as F, getNotAllowedAxes as z, axisIsNonHomogenous as H, getColumnOrAxisLabel as E } from "../utils.js";
16
+ var K = Object.defineProperty, R = (y, t, e) => t in y ? K(y, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : y[t] = e, g = (y, t, e) => R(y, typeof t != "symbol" ? t + "" : t, e);
17
+ const Q = (y) => A(y, x.IsLinkerColumn) === "true", B = class L {
18
18
  constructor({
19
- componentName: e,
20
- allowedTypes: t,
19
+ componentName: t,
20
+ allowedTypes: e,
21
21
  settings: n,
22
22
  strictlyDependsOnParents: s,
23
23
  dependsOn: i = [],
24
- parentComponents: l = [],
25
- annotations: p = {},
24
+ parentComponents: p = [],
25
+ annotations: m = {},
26
26
  checkSourceBySpec: o
27
27
  }) {
28
- S(this, "componentName"), S(this, "allowedTypes"), S(this, "settings"), S(this, "dependsOn"), S(this, "parentComponents"), S(this, "strictlyDependsOnParents"), S(this, "annotations"), S(this, "checkSourceBySpec"), this.componentName = e, this.allowedTypes = [...t], this.settings = { ...M.DefaultSettings, ...n }, this.dependsOn = [...i], this.parentComponents = [...l], this.strictlyDependsOnParents = s ?? !0, this.annotations = { ...p }, o && (this.checkSourceBySpec = o);
28
+ g(this, "componentName"), g(this, "allowedTypes"), g(this, "settings"), g(this, "dependsOn"), g(this, "parentComponents"), g(this, "strictlyDependsOnParents"), g(this, "annotations"), g(this, "checkSourceBySpec"), this.componentName = t, this.allowedTypes = [...e], this.settings = { ...L.DefaultSettings, ...n }, this.dependsOn = [...i], this.parentComponents = [...p], this.strictlyDependsOnParents = s ?? !0, this.annotations = { ...m }, o && (this.checkSourceBySpec = o);
29
29
  }
30
30
  get isRequired() {
31
31
  return this.settings.required;
@@ -33,73 +33,73 @@ const Q = (d) => {
33
33
  get isDimensionsConsumer() {
34
34
  return this.settings.dimensionConsumer;
35
35
  }
36
- addSelected(e, t) {
37
- const n = $(e);
38
- return n.components[this.componentName].selectorStates.push(t), n;
36
+ addSelected(t, e) {
37
+ const n = F(t);
38
+ return n.components[this.componentName].selectorStates.push(e), n;
39
39
  }
40
- deleteSelected(e, t) {
41
- const n = $(e);
42
- return n.components[this.componentName].selectorStates = n.components[this.componentName].selectorStates.filter((s) => s.selectedSource !== t), n;
40
+ deleteSelected(t, e) {
41
+ const n = F(t);
42
+ return n.components[this.componentName].selectorStates = n.components[this.componentName].selectorStates.filter((s) => s.selectedSource !== e), n;
43
43
  }
44
- getParentSelectedSources(e) {
45
- return this.parentComponents.reduce((t, n) => {
46
- const s = e.components[n].selectorStates.map(
47
- (i) => B(i.selectedSource)
44
+ getParentSelectedSources(t) {
45
+ return this.parentComponents.reduce((e, n) => {
46
+ const s = t.components[n].selectorStates.map(
47
+ (i) => O(i.selectedSource)
48
48
  );
49
- return t.push(...s), t;
49
+ return e.push(...s), e;
50
50
  }, []);
51
51
  }
52
- async getParentsAxes(e, t) {
53
- const n = this.getParentSelectedSources(t), s = /* @__PURE__ */ new Map();
52
+ async getParentsAxes(t, e) {
53
+ const n = this.getParentSelectedSources(e), s = /* @__PURE__ */ new Map();
54
54
  for (const i of n)
55
- if (T(i)) {
56
- const l = await e.pFrameProvider.getColumnSpecById(i);
57
- for (const p of (l == null ? void 0 : l.axesSpec) ?? []) {
58
- const o = N.fromAxisSpec(p).toCanonicalString();
59
- s.has(o) || s.set(o, { parentSource: i.toCanonicalString(), spec: p });
55
+ if (P(i)) {
56
+ const p = await t.pFrameProvider.getColumnSpecById(i);
57
+ for (const m of (p == null ? void 0 : p.axesSpec) ?? []) {
58
+ const o = k.fromAxisSpec(m).toCanonicalString();
59
+ s.has(o) || s.set(o, { parentSource: i.toCanonicalString(), spec: m });
60
60
  }
61
61
  }
62
62
  return s;
63
63
  }
64
- async getParentAndHangingAxes(e, t, n, s) {
65
- const i = await this.getParentsAxes(e, t), l = /* @__PURE__ */ new Map();
64
+ async getParentAndHangingAxes(t, e, n, s) {
65
+ const i = await this.getParentsAxes(t, e), p = /* @__PURE__ */ new Map();
66
66
  if (!this.settings.isDataComponent) {
67
- const p = t.components[this.componentName].selectorStates.map((o) => o.selectedSource);
68
- for (const o of p) {
69
- const u = B(o);
70
- if (!T(u))
67
+ const m = e.components[this.componentName].selectorStates.map((o) => o.selectedSource);
68
+ for (const o of m) {
69
+ const u = O(o);
70
+ if (!P(u))
71
71
  continue;
72
- const m = await e.pFrameProvider.getColumnSpecById(u);
73
- if (!m)
72
+ const l = await t.pFrameProvider.getColumnSpecById(u);
73
+ if (!l)
74
74
  continue;
75
- const g = Y(m, Array.from(i.values()).map((a) => a.spec), n, s);
76
- for (const a of g)
77
- l.set(N.fromAxisSpec(a).toCanonicalString(), { parentSource: o, spec: a });
75
+ const h = z(l, Array.from(i.values()).map((a) => a.spec), n, s);
76
+ for (const a of h)
77
+ p.set(k.fromAxisSpec(a).toCanonicalString(), { parentSource: o, spec: a });
78
78
  }
79
79
  }
80
- return { parentsAxes: i, hangingAxes: l };
80
+ return { parentsAxes: i, hangingAxes: p };
81
81
  }
82
82
  /** Get axes to check available columns compatibility: all parents axes + available with these parent axes linker axes */
83
- getColumnSourceAxes(e, t, n) {
84
- const s = /* @__PURE__ */ new Map(), { parentsAxes: i } = e[this.componentName];
83
+ getColumnSourceAxes(t, e, n) {
84
+ const s = /* @__PURE__ */ new Map(), { parentsAxes: i } = t[this.componentName];
85
85
  for (const o of i)
86
86
  s.set(...o);
87
87
  if (this.settings.isDataComponent)
88
88
  return s;
89
- const l = E(Array.from(i.values()).map((o) => o.spec)), p = E(t.getReachableByLinkersAxesFromAxes(l));
90
- for (const o of p) {
91
- const u = W.getLinkerKeyFromAxisSpec(o), m = t.data.get(u), g = Array.from((m == null ? void 0 : m.linkWith.keys()) ?? []), a = m == null ? void 0 : m.linkWith.get(g[0]);
89
+ const p = N(Array.from(i.values()).map((o) => o.spec)), m = N(e.getReachableByLinkersAxesFromAxes(p));
90
+ for (const o of m) {
91
+ const u = j.getLinkerKeyFromAxisSpec(o), l = e.data.get(u), h = Array.from((l == null ? void 0 : l.linkWith.keys()) ?? []), a = l == null ? void 0 : l.linkWith.get(h[0]);
92
92
  if (a) {
93
- const C = N.fromAxisSpec(o).toCanonicalString(), x = new H({ name: a.columnId, type: a.spec.valueType }).toCanonicalString();
94
- s.set(C, { parentSource: x, spec: o });
93
+ const S = k.fromAxisSpec(o).toCanonicalString(), d = new W({ name: a.columnId, type: a.spec.valueType }).toCanonicalString();
94
+ s.set(S, { parentSource: d, spec: o });
95
95
  }
96
96
  }
97
97
  for (const [o] of i) {
98
- const u = n.get(o), m = Array.from((u == null ? void 0 : u.keys()) ?? []);
99
- if (u && m.length)
100
- for (const g of m) {
101
- const a = u.get(g), C = N.fromAxisSpec(a.spec).toCanonicalString();
102
- s.set(C, { parentSource: a.parentSource, spec: a.spec });
98
+ const u = n.get(o), l = Array.from((u == null ? void 0 : u.keys()) ?? []);
99
+ if (u && l.length)
100
+ for (const h of l) {
101
+ const a = u.get(h), S = k.fromAxisSpec(a.spec).toCanonicalString();
102
+ s.set(S, { parentSource: a.parentSource, spec: a.spec });
103
103
  }
104
104
  }
105
105
  return s;
@@ -107,85 +107,84 @@ const Q = (d) => {
107
107
  /** Allowed: all axes from parent (data) inputs + hanging axes from another (not data) inputs + axes from linkers;
108
108
  * these are all axes that can be in a compatible columns + hanging axes.
109
109
  */
110
- getAllowedAxes(e, t, n) {
111
- const s = this.getColumnSourceAxes(e, t, n);
112
- for (const [i, l] of Object.entries(e))
110
+ getAllowedAxes(t, e, n) {
111
+ const s = this.getColumnSourceAxes(t, e, n);
112
+ for (const [i, p] of Object.entries(t))
113
113
  if (!(i === this.componentName && !this.settings.multipleSelectors))
114
- for (const p of l.hangingAxes)
115
- s.set(...p);
114
+ for (const m of p.hangingAxes)
115
+ s.set(...m);
116
116
  return s;
117
117
  }
118
- checkStateConsistency(e, t) {
119
- return e.components[this.componentName].selectorStates.reduce((n, s) => (n[s.selectedSource] = t.some((i) => i.value === s.selectedSource), n), {});
118
+ checkStateConsistency(t, e) {
119
+ return t.components[this.componentName].selectorStates.reduce((n, s) => (n[s.selectedSource] = e.some((i) => i.value === s.selectedSource), n), {});
120
120
  }
121
- async getOptions(e, t, n, s, i, l, p = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Set()) {
122
- var u, m, g, a, C;
123
- const x = this.settings.multipleSelectors, b = this.settings.required, v = /* @__PURE__ */ new Map();
124
- if (this.dependsOn.length && this.dependsOn.some((f) => t.components[f].selectorStates.length === 0))
125
- return { multipleSelectors: x, required: b, stateConsistency: this.checkStateConsistency(t, []), options: [], optionsInfo: v };
126
- if (this.strictlyDependsOnParents && !this.settings.isDataComponent && this.parentComponents.some((f) => t.components[f].selectorStates.length === 0))
127
- return { multipleSelectors: x, required: b, stateConsistency: this.checkStateConsistency(t, []), options: [], optionsInfo: v };
128
- const O = [];
121
+ async getOptions(t, e, n, s, i, p, m = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Set()) {
122
+ const u = this.settings.multipleSelectors, l = this.settings.required, h = /* @__PURE__ */ new Map();
123
+ if (this.dependsOn.length && this.dependsOn.some((S) => e.components[S].selectorStates.length === 0))
124
+ return { multipleSelectors: u, required: l, stateConsistency: this.checkStateConsistency(e, []), options: [], optionsInfo: h };
125
+ if (this.strictlyDependsOnParents && !this.settings.isDataComponent && this.parentComponents.some((S) => e.components[S].selectorStates.length === 0))
126
+ return { multipleSelectors: u, required: l, stateConsistency: this.checkStateConsistency(e, []), options: [], optionsInfo: h };
127
+ const a = [];
129
128
  if (this.settings.axesAllowed) {
130
- const f = this.getAllowedAxes(i, n, s);
131
- for (const [y, { spec: c, parentSource: A }] of f.entries()) {
132
- const w = B(y), r = Z(c), I = this.allowedTypes.includes(c.type), k = Object.entries(this.annotations).every(
133
- ([_, K]) => {
134
- var P;
135
- return ((P = c.annotations) == null ? void 0 : P[_]) === K;
129
+ const S = this.getAllowedAxes(i, n, s);
130
+ for (const [d, { spec: c, parentSource: C }] of S.entries()) {
131
+ const w = O(d), r = H(c), D = this.allowedTypes.includes(c.type), v = Object.entries(this.annotations).every(
132
+ ([q, $]) => {
133
+ var I;
134
+ return ((I = c.annotations) == null ? void 0 : I[q]) === $;
136
135
  }
137
- ), D = this.checkSourceBySpec ? this.checkSourceBySpec(c, t) : !0, h = !this.settings.homogeneous || !r, R = p.has(w.name) || o.has(y);
138
- v.set(y, {
136
+ ), b = this.checkSourceBySpec ? this.checkSourceBySpec(c, e) : !0, f = !this.settings.homogeneous || !r, T = m.has(w.name) || o.has(d);
137
+ h.set(d, {
139
138
  kind: "axis",
140
139
  name: c.name,
141
- label: await V(e, y, [A]),
140
+ label: await E(t, d, [C]),
142
141
  type: c.type,
143
142
  mustBeConsumed: !1,
144
143
  dividable: !1,
145
144
  spec: c,
146
145
  annotations: c.annotations,
147
146
  isNonHomogenous: r,
148
- isSubsetFilter: ((u = c.annotations) == null ? void 0 : u[L]) === "true",
149
- isDiscreteFilter: c.type === "String" || ((m = c.annotations) == null ? void 0 : m[F]) === "true",
150
- parentSources: [A]
151
- }), I && k && D && h && !R && O.push({ value: y });
147
+ isSubsetFilter: A(c, x.IsSubset),
148
+ isDiscreteFilter: c.type === "String" || A(c, x.IsDiscreteFilter) === "true",
149
+ parentSources: [C]
150
+ }), D && v && b && f && !T && a.push({ value: d });
152
151
  }
153
152
  }
154
153
  if (this.settings.columnsAllowed) {
155
- const f = await e.pFrameProvider.getColumns([], !1, this.allowedTypes, void 0, this.annotations), y = !this.settings.columnsWithExtraAxesAllowed && this.strictlyDependsOnParents, c = this.getColumnSourceAxes(i, n, s);
156
- for (const A of f) {
157
- const w = A.toCanonicalString(), r = await e.pFrameProvider.getColumnSpecById(A);
154
+ const S = await t.pFrameProvider.getColumns([], !1, this.allowedTypes, void 0, this.annotations), d = !this.settings.columnsWithExtraAxesAllowed && this.strictlyDependsOnParents, c = this.getColumnSourceAxes(i, n, s);
155
+ for (const C of S) {
156
+ const w = C.toCanonicalString(), r = await t.pFrameProvider.getColumnSpecById(C);
158
157
  if (!r)
159
158
  continue;
160
- const I = i[this.componentName].parentsAxes, k = r.axesSpec.map((h) => N.fromAxisSpec(h).toCanonicalString());
159
+ const D = i[this.componentName].parentsAxes, v = r.axesSpec.map((f) => k.fromAxisSpec(f).toCanonicalString());
161
160
  if (
162
161
  // do not add to available options label columns, or columns that are not fit by custom spec condition, or columns that are not fit by condition for data inputs
163
- U(r) || Q(r) || this.checkSourceBySpec && !this.checkSourceBySpec(r, t) || this.settings.isDataComponent && !l(r) || y && c.size && k.some((h) => !c.has(h)) || I.size && !(k.some((h) => I.has(h)) || k.every((h) => c.has(h)))
162
+ M(r) || Q(r) || this.checkSourceBySpec && !this.checkSourceBySpec(r, e) || this.settings.isDataComponent && !p(r) || d && c.size && v.some((f) => !c.has(f)) || D.size && !(v.some((f) => D.has(f)) || v.every((f) => c.has(f)))
164
163
  )
165
164
  continue;
166
- const D = {
165
+ const b = {
167
166
  kind: "column",
168
167
  name: r.name,
169
- label: ((g = r.annotations) == null ? void 0 : g[j]) ?? r.name,
168
+ label: A(r, x.Label) ?? r.name,
170
169
  type: r.valueType,
171
170
  spec: r,
172
171
  annotations: r.annotations,
173
- isSubsetFilter: ((a = r.annotations) == null ? void 0 : a[L]) === "true",
174
- isDiscreteFilter: r.valueType === "String" || ((C = r.annotations) == null ? void 0 : C[F]) === "true"
172
+ isSubsetFilter: A(r, x.IsSubset) === "true",
173
+ isDiscreteFilter: r.valueType === "String" || A(r, x.IsDiscreteFilter) === "true"
175
174
  };
176
- v.set(w, D), p.has(A.name) || o.has(w) || O.push({ value: w });
175
+ h.set(w, b), m.has(C.name) || o.has(w) || a.push({ value: w });
177
176
  }
178
177
  }
179
178
  return {
180
- multipleSelectors: x,
181
- required: b,
182
- stateConsistency: this.checkStateConsistency(t, O),
183
- options: O,
184
- optionsInfo: v
179
+ multipleSelectors: u,
180
+ required: l,
181
+ stateConsistency: this.checkStateConsistency(e, a),
182
+ options: a,
183
+ optionsInfo: h
185
184
  };
186
185
  }
187
186
  };
188
- S(q, "DefaultSettings", {
187
+ g(B, "DefaultSettings", {
189
188
  isDataComponent: !1,
190
189
  multipleSelectors: !1,
191
190
  required: !1,
@@ -195,8 +194,8 @@ S(q, "DefaultSettings", {
195
194
  columnsWithExtraAxesAllowed: !0,
196
195
  dimensionConsumer: !1
197
196
  });
198
- let me = q;
197
+ let ae = B;
199
198
  export {
200
- me as ComponentController
199
+ ae as ComponentController
201
200
  };
202
201
  //# sourceMappingURL=ComponentController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentController.js","sources":["../../../../../../node_modules/@milaboratories/pf-plots/src/controllers/ComponentController.ts"],"sourcesContent":["import { getNormalizedAxesList, isLabelColumn } from '@platforma-sdk/model';\nimport type {\n ColumnData,\n ComponentGuideSimple,\n ComponentState,\n InputState,\n SelectorState,\n SelectorStateFilter,\n SelectorStateSimple,\n SourceOption,\n} from '../common';\nimport {\n COLUMN_LABEL_KEY,\n DISCRETE_FILTER_KEY,\n IS_LINKER_COLUMN,\n SUBSET_FILTER_KEY,\n} from '../constants';\nimport type { DataStore } from '../store';\nimport { AxesSet, ColumnId, ColumnOrAxisIdString } from '../spec';\nimport { AxisId, columnOrAxisIdFromString, isColumnId } from '../spec';\nimport { AxisSpec, LinkerMap, PColumnSpec, ValueType } from '@milaboratories/pl-model-common';\nimport { axisIsNonHomogenous, getColumnOrAxisLabel, getNotAllowedAxes, getStateCopy, MultipliesByMap } from '../utils';\n\nconst isLinkerColumn = (columnSpec: PColumnSpec) => columnSpec?.annotations?.[IS_LINKER_COLUMN] === 'true';\n\ninterface ComponentControllerSettings {\n isDataComponent: boolean; // X, Y, Data source etc.\n multipleSelectors: boolean; // more than 1 selected column in input\n required: boolean;\n homogeneous: boolean;\n axesAllowed: boolean;\n columnsAllowed: boolean;\n columnsWithExtraAxesAllowed: boolean; // can contain column with extra axes with fixed values\n dimensionConsumer: boolean; // remove extra dimension from data-mapping after selecting a heterogeneous axis\n}\n\ninterface FieldControllerOptions<State extends InputState, Field extends keyof State['components']> {\n componentName: Field;\n allowedTypes: ValueType[];\n checkSourceBySpec?: (spec: AxisSpec | PColumnSpec, state: State) => boolean; // for more complicated logic than type is in allowed types and annotation exists\n annotations?: Record<string, string>;\n parentComponents?: (keyof State['components'])[];\n dependsOn?: (keyof State['components'])[];\n strictlyDependsOnParents?: boolean;\n ignoredOptionIds?: string[];\n settings: Partial<ComponentControllerSettings>;\n}\n\nexport class ComponentController<State extends InputState, Field extends keyof State['components']> {\n private static DefaultSettings: ComponentControllerSettings = {\n isDataComponent: false,\n multipleSelectors: false,\n required: false,\n homogeneous: false,\n axesAllowed: false,\n columnsAllowed: true,\n columnsWithExtraAxesAllowed: true,\n dimensionConsumer: false,\n };\n\n readonly componentName: Field;\n readonly allowedTypes: ValueType[];\n readonly settings: ComponentControllerSettings;\n private readonly dependsOn: (keyof State['components'])[];\n private readonly parentComponents: (keyof State['components'])[];\n private readonly strictlyDependsOnParents: boolean;\n private readonly annotations: Record<string, string>;\n private readonly checkSourceBySpec?: (spec: AxisSpec | PColumnSpec, state: State) => boolean;\n\n constructor({\n componentName,\n allowedTypes,\n settings,\n strictlyDependsOnParents,\n dependsOn = [],\n parentComponents = [],\n annotations = {},\n checkSourceBySpec,\n }: FieldControllerOptions<State, Field>) {\n this.componentName = componentName;\n this.allowedTypes = [...allowedTypes];\n this.settings = { ...ComponentController.DefaultSettings, ...settings };\n this.dependsOn = [...dependsOn];\n this.parentComponents = [...parentComponents]; // corresponding data components for meta or X for Y in scatterplot\n this.strictlyDependsOnParents = strictlyDependsOnParents ?? true; // meta-inputs are strictly-depending on parents, X by Y (Y by X) - don't\n this.annotations = { ...annotations };\n if (checkSourceBySpec) {\n this.checkSourceBySpec = checkSourceBySpec;\n }\n }\n\n get isRequired(): boolean {\n return this.settings.required;\n }\n\n get isDimensionsConsumer(): boolean {\n return this.settings.dimensionConsumer;\n }\n\n addSelected(state: State, selectorState: SelectorStateSimple | SelectorStateFilter) {\n const nextState = getStateCopy(state);\n nextState.components[this.componentName].selectorStates.push(selectorState as SelectorStateFilter);\n\n // ***\n // here should be logic for possibly parent qualifications updating\n // ***\n\n return nextState;\n }\n\n deleteSelected(state: State, selectedSourceStr: ColumnOrAxisIdString) {\n const nextState = getStateCopy(state);\n // ***\n // here should be logic for removing unnecessary qualifications (it can appear when some sources are deleted)\n // ***\n nextState.components[this.componentName].selectorStates = (\n nextState.components[this.componentName].selectorStates as SelectorState[]\n ).filter(item => item.selectedSource !== selectedSourceStr);\n return nextState;\n }\n\n getParentSelectedSources(state: State): (ColumnId | AxisId)[] {\n const selectedSources = this.parentComponents.reduce((res: (ColumnId | AxisId)[], item) => {\n const selectedHere = state.components[item].selectorStates.map(s =>\n columnOrAxisIdFromString(s.selectedSource)\n );\n res.push(...selectedHere);\n return res;\n }, []);\n\n // ***\n // consider parent qualifications without selected here\n // ***\n return selectedSources;\n }\n\n async getParentsAxes(store: DataStore, state: State) {\n const parentSelectedSources = this.getParentSelectedSources(state);\n const parentAxes = new Map<ColumnOrAxisIdString, { parentSource: ColumnOrAxisIdString, spec: AxisSpec }>();\n for (const source of parentSelectedSources) {\n if (isColumnId(source)) {\n const columnSpec = await store.pFrameProvider.getColumnSpecById(source);\n for (const spec of columnSpec?.axesSpec ?? []) {\n const id = AxisId.fromAxisSpec(spec);\n const idStr = id.toCanonicalString();\n if (parentAxes.has(idStr)) {\n continue;\n }\n parentAxes.set(idStr, { parentSource: source.toCanonicalString(), spec });\n }\n }\n }\n\n return parentAxes;\n }\n\n async getParentAndHangingAxes(store: DataStore, state: State, linkerMap: LinkerMap, multipliesByMap: MultipliesByMap): Promise<{\n parentsAxes: AxesSet,\n hangingAxes: AxesSet,\n }> {\n const parentsAxes = await this.getParentsAxes(store, state);\n const hangingAxes: AxesSet = new Map();\n\n if (!this.settings.isDataComponent) {\n const thisState: ComponentState = state.components[this.componentName];\n const selectedHereSources = thisState.selectorStates.map((v) => v.selectedSource);\n for (const source of selectedHereSources) {\n const id = columnOrAxisIdFromString(source);\n if (!isColumnId(id)) {\n continue;\n }\n const columnSpec = await store.pFrameProvider.getColumnSpecById(id);\n if (!columnSpec) {\n continue;\n }\n const extraAxesSpecs = getNotAllowedAxes(columnSpec, Array.from(parentsAxes.values()).map(v => v.spec), linkerMap, multipliesByMap);\n\n for (const spec of extraAxesSpecs) {\n hangingAxes.set(AxisId.fromAxisSpec(spec).toCanonicalString(), { parentSource: source, spec });\n }\n }\n }\n\n return { parentsAxes, hangingAxes };\n }\n\n /** Get axes to check available columns compatibility: all parents axes + available with these parent axes linker axes */\n getColumnSourceAxes(\n allParentsAndHangingAxes: Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n ): AxesSet {\n const result = new Map();\n const { parentsAxes } = allParentsAndHangingAxes[this.componentName];\n\n for (const v of parentsAxes) {\n result.set(...v);\n }\n\n if (this.settings.isDataComponent) {\n return result;\n }\n\n // normalized list concider axes parents (not component parents)\n const normalizedAxes = getNormalizedAxesList(Array.from(parentsAxes.values()).map((v) => v.spec));\n const axesAvailableWithLinkers = getNormalizedAxesList(linkerMap.getReachableByLinkersAxesFromAxes(normalizedAxes));\n\n for (const axisSpec of axesAvailableWithLinkers) {\n const key = LinkerMap.getLinkerKeyFromAxisSpec(axisSpec);\n const linkerRecord = linkerMap.data.get(key);\n const linked = Array.from(linkerRecord?.linkWith.keys() ?? []);\n const linkerColumn = linkerRecord?.linkWith.get(linked[0]);\n\n if (linkerColumn) {\n const axisId = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n const linkerColumnId = new ColumnId({ name: linkerColumn.columnId, type: linkerColumn.spec.valueType }).toCanonicalString();\n result.set(axisId, { parentSource: linkerColumnId, spec: axisSpec });\n }\n }\n\n for (const [id] of parentsAxes) {\n const multipliesByNode = multipliesByMap.get(id);\n const multipliesByKeys = Array.from(multipliesByNode?.keys() ?? []);\n if (multipliesByNode && multipliesByKeys.length) {\n for (const key of multipliesByKeys) {\n const el = multipliesByNode.get(key)!;\n const axisId = AxisId.fromAxisSpec(el.spec).toCanonicalString()\n result.set(axisId, { parentSource: el.parentSource, spec: el.spec });\n }\n }\n }\n\n return result;\n }\n\n /** Allowed: all axes from parent (data) inputs + hanging axes from another (not data) inputs + axes from linkers;\n * these are all axes that can be in a compatible columns + hanging axes.\n */\n getAllowedAxes(\n allParentsAndHangingAxes: Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n ): AxesSet {\n const result = this.getColumnSourceAxes(allParentsAndHangingAxes, linkerMap, multipliesByMap);\n\n for (const [input, data] of Object.entries(allParentsAndHangingAxes)) {\n if (input === this.componentName && !this.settings.multipleSelectors) {\n continue;\n }\n for (const v of data.hangingAxes) {\n result.set(...v);\n }\n }\n return result;\n }\n\n checkStateConsistency(state: State, options: SourceOption[]) {\n const thisState: ComponentState = state.components[this.componentName];\n\n return thisState.selectorStates.reduce((res, v) => {\n res[v.selectedSource] = options.some(op => op.value === v.selectedSource);\n return res;\n }, {} as Record<string, boolean>);\n }\n\n\n async getOptions(\n store: DataStore,\n state: State,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n allParentAndHangingAxes: Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>, // hanging axes from all the inputs\n dataColumnPredicate: (spec: PColumnSpec) => boolean,\n ignoredNamesSet: Set<string> = new Set(),\n fixedSelectedSet: Set<ColumnOrAxisIdString> = new Set()\n ): Promise<ComponentGuideSimple> {\n const multipleSelectors = this.settings.multipleSelectors;\n const required = this.settings.required;\n const optionsInfo = new Map();\n\n if (this.dependsOn.length && this.dependsOn.some(dep => state.components[dep].selectorStates.length === 0)) {\n return { multipleSelectors, required, stateConsistency: this.checkStateConsistency(state, []), options: [], optionsInfo };\n }\n\n if (\n this.strictlyDependsOnParents &&\n !this.settings.isDataComponent &&\n this.parentComponents.some(name => state.components[name].selectorStates.length === 0)\n ) {\n return { multipleSelectors, required, stateConsistency: this.checkStateConsistency(state, []), options: [], optionsInfo };\n }\n\n const options: SourceOption[] = [];\n if (this.settings.axesAllowed) {\n const allowedAxes = this.getAllowedAxes(allParentAndHangingAxes, linkerMap, multipliesByMap);\n for (const [idStr, { spec, parentSource }] of allowedAxes.entries()) {\n const id = columnOrAxisIdFromString(idStr) as AxisId;\n\n const isNonHomogenous = axisIsNonHomogenous(spec);\n\n const typeOK = this.allowedTypes.includes(spec.type);\n const annotationsOK = Object.entries(this.annotations).every(\n ([k, v]) => spec.annotations?.[k] === v\n );\n const checkBySpecOK = this.checkSourceBySpec ? this.checkSourceBySpec(spec, state) : true;\n const axisNatureOK = !this.settings.homogeneous || !isNonHomogenous;\n const ignored = ignoredNamesSet.has(id.name) || fixedSelectedSet.has(idStr);\n\n optionsInfo.set(idStr, {\n kind: 'axis',\n name: spec.name,\n label: await getColumnOrAxisLabel(store, idStr, [parentSource]),\n type: spec.type,\n mustBeConsumed: false,\n dividable: false,\n spec,\n annotations: spec.annotations,\n isNonHomogenous,\n isSubsetFilter: spec.annotations?.[SUBSET_FILTER_KEY] === 'true',\n isDiscreteFilter: spec.type === 'String' || spec.annotations?.[DISCRETE_FILTER_KEY] === 'true',\n parentSources: [parentSource],\n });\n\n if (typeOK && annotationsOK && checkBySpecOK && axisNatureOK && !ignored) {\n options.push({ value: idStr });\n }\n }\n }\n\n if (this.settings.columnsAllowed) {\n const allowedColumns = await store.pFrameProvider.getColumns([], false, this.allowedTypes, undefined, this.annotations);\n const strictlyCompatible = !this.settings.columnsWithExtraAxesAllowed && this.strictlyDependsOnParents;\n const columnSourceAxes = this.getColumnSourceAxes(allParentAndHangingAxes, linkerMap, multipliesByMap);\n\n for (const columnId of allowedColumns) {\n const columnIdString = columnId.toCanonicalString();\n\n const columnSpec = await store.pFrameProvider.getColumnSpecById(columnId);\n if (!columnSpec) {\n continue;\n }\n const parentsAxes = allParentAndHangingAxes[this.componentName].parentsAxes;\n const columnAxesIds = columnSpec.axesSpec.map((spec) => AxisId.fromAxisSpec(spec).toCanonicalString());\n if (\n // do not add to available options label columns, or columns that are not fit by custom spec condition, or columns that are not fit by condition for data inputs\n isLabelColumn(columnSpec) || isLinkerColumn(columnSpec) ||\n (this.checkSourceBySpec && !this.checkSourceBySpec(columnSpec, state)) ||\n (this.settings.isDataComponent && !dataColumnPredicate(columnSpec)) ||\n strictlyCompatible && columnSourceAxes.size && columnAxesIds.some((id) => !columnSourceAxes.has(id)) ||\n parentsAxes.size && !(columnAxesIds.some((id) => parentsAxes.has(id)) || columnAxesIds.every((id) => columnSourceAxes.has(id)))\n ) {\n continue;\n }\n\n const columnInfo: ColumnData = {\n kind: 'column',\n name: columnSpec.name,\n label: columnSpec.annotations?.[COLUMN_LABEL_KEY] ?? columnSpec.name,\n type: columnSpec.valueType,\n spec: columnSpec,\n annotations: columnSpec.annotations,\n isSubsetFilter: columnSpec.annotations?.[SUBSET_FILTER_KEY] === 'true',\n isDiscreteFilter:\n columnSpec.valueType === 'String' ||\n columnSpec.annotations?.[DISCRETE_FILTER_KEY] === 'true'\n };\n optionsInfo.set(columnIdString, columnInfo);\n\n const ignored = ignoredNamesSet.has(columnId.name) || fixedSelectedSet.has(columnIdString);\n if (!ignored) {\n options.push({ value: columnIdString });\n }\n }\n }\n return {\n multipleSelectors,\n required,\n stateConsistency: this.checkStateConsistency(state, options),\n options,\n optionsInfo\n };\n }\n}\n"],"names":["isLinkerColumn","columnSpec","_a","IS_LINKER_COLUMN","_ComponentController","componentName","allowedTypes","settings","strictlyDependsOnParents","dependsOn","parentComponents","annotations","checkSourceBySpec","__publicField","state","selectorState","nextState","getStateCopy","selectedSourceStr","item","res","selectedHere","s","columnOrAxisIdFromString","store","parentSelectedSources","parentAxes","source","isColumnId","spec","idStr","AxisId","linkerMap","multipliesByMap","parentsAxes","hangingAxes","selectedHereSources","v","id","extraAxesSpecs","getNotAllowedAxes","allParentsAndHangingAxes","result","normalizedAxes","getNormalizedAxesList","axesAvailableWithLinkers","axisSpec","key","LinkerMap","linkerRecord","linked","linkerColumn","axisId","linkerColumnId","ColumnId","multipliesByNode","multipliesByKeys","el","input","data","options","op","allParentAndHangingAxes","dataColumnPredicate","ignoredNamesSet","fixedSelectedSet","multipleSelectors","required","optionsInfo","dep","name","allowedAxes","parentSource","isNonHomogenous","axisIsNonHomogenous","typeOK","annotationsOK","k","checkBySpecOK","axisNatureOK","ignored","getColumnOrAxisLabel","SUBSET_FILTER_KEY","_b","DISCRETE_FILTER_KEY","allowedColumns","strictlyCompatible","columnSourceAxes","columnId","columnIdString","columnAxesIds","isLabelColumn","columnInfo","_c","COLUMN_LABEL_KEY","_d","_e","ComponentController"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"ComponentController.js","sources":["../../../../../../node_modules/@milaboratories/pf-plots/src/controllers/ComponentController.ts"],"sourcesContent":["import { getNormalizedAxesList, isLabelColumn } from '@platforma-sdk/model';\nimport type {\n ColumnData,\n ComponentGuideSimple,\n ComponentState,\n InputState,\n SelectorState,\n SelectorStateFilter,\n SelectorStateSimple,\n SourceOption,\n} from '../common';\nimport type { DataStore } from '../store';\nimport { AxesSet, ColumnId, ColumnOrAxisIdString } from '../spec';\nimport { AxisId, columnOrAxisIdFromString, isColumnId } from '../spec';\nimport { Annotation, AxisSpec, LinkerMap, PColumnSpec, readAnnotation, ValueType } from '@milaboratories/pl-model-common';\nimport { axisIsNonHomogenous, getColumnOrAxisLabel, getNotAllowedAxes, getStateCopy, MultipliesByMap } from '../utils';\n\nconst isLinkerColumn = (columnSpec: PColumnSpec) => readAnnotation(columnSpec, Annotation.IsLinkerColumn) === 'true';\n\ninterface ComponentControllerSettings {\n isDataComponent: boolean; // X, Y, Data source etc.\n multipleSelectors: boolean; // more than 1 selected column in input\n required: boolean;\n homogeneous: boolean;\n axesAllowed: boolean;\n columnsAllowed: boolean;\n columnsWithExtraAxesAllowed: boolean; // can contain column with extra axes with fixed values\n dimensionConsumer: boolean; // remove extra dimension from data-mapping after selecting a heterogeneous axis\n}\n\ninterface FieldControllerOptions<State extends InputState, Field extends keyof State['components']> {\n componentName: Field;\n allowedTypes: ValueType[];\n checkSourceBySpec?: (spec: AxisSpec | PColumnSpec, state: State) => boolean; // for more complicated logic than type is in allowed types and annotation exists\n annotations?: Record<string, string>;\n parentComponents?: (keyof State['components'])[];\n dependsOn?: (keyof State['components'])[];\n strictlyDependsOnParents?: boolean;\n ignoredOptionIds?: string[];\n settings: Partial<ComponentControllerSettings>;\n}\n\nexport class ComponentController<State extends InputState, Field extends keyof State['components']> {\n private static DefaultSettings: ComponentControllerSettings = {\n isDataComponent: false,\n multipleSelectors: false,\n required: false,\n homogeneous: false,\n axesAllowed: false,\n columnsAllowed: true,\n columnsWithExtraAxesAllowed: true,\n dimensionConsumer: false,\n };\n\n readonly componentName: Field;\n readonly allowedTypes: ValueType[];\n readonly settings: ComponentControllerSettings;\n private readonly dependsOn: (keyof State['components'])[];\n private readonly parentComponents: (keyof State['components'])[];\n private readonly strictlyDependsOnParents: boolean;\n private readonly annotations: Record<string, string>;\n private readonly checkSourceBySpec?: (spec: AxisSpec | PColumnSpec, state: State) => boolean;\n\n constructor({\n componentName,\n allowedTypes,\n settings,\n strictlyDependsOnParents,\n dependsOn = [],\n parentComponents = [],\n annotations = {},\n checkSourceBySpec,\n }: FieldControllerOptions<State, Field>) {\n this.componentName = componentName;\n this.allowedTypes = [...allowedTypes];\n this.settings = { ...ComponentController.DefaultSettings, ...settings };\n this.dependsOn = [...dependsOn];\n this.parentComponents = [...parentComponents]; // corresponding data components for meta or X for Y in scatterplot\n this.strictlyDependsOnParents = strictlyDependsOnParents ?? true; // meta-inputs are strictly-depending on parents, X by Y (Y by X) - don't\n this.annotations = { ...annotations };\n if (checkSourceBySpec) {\n this.checkSourceBySpec = checkSourceBySpec;\n }\n }\n\n get isRequired(): boolean {\n return this.settings.required;\n }\n\n get isDimensionsConsumer(): boolean {\n return this.settings.dimensionConsumer;\n }\n\n addSelected(state: State, selectorState: SelectorStateSimple | SelectorStateFilter) {\n const nextState = getStateCopy(state);\n nextState.components[this.componentName].selectorStates.push(selectorState as SelectorStateFilter);\n\n // ***\n // here should be logic for possibly parent qualifications updating\n // ***\n\n return nextState;\n }\n\n deleteSelected(state: State, selectedSourceStr: ColumnOrAxisIdString) {\n const nextState = getStateCopy(state);\n // ***\n // here should be logic for removing unnecessary qualifications (it can appear when some sources are deleted)\n // ***\n nextState.components[this.componentName].selectorStates = (\n nextState.components[this.componentName].selectorStates as SelectorState[]\n ).filter(item => item.selectedSource !== selectedSourceStr);\n return nextState;\n }\n\n getParentSelectedSources(state: State): (ColumnId | AxisId)[] {\n const selectedSources = this.parentComponents.reduce((res: (ColumnId | AxisId)[], item) => {\n const selectedHere = state.components[item].selectorStates.map(s =>\n columnOrAxisIdFromString(s.selectedSource)\n );\n res.push(...selectedHere);\n return res;\n }, []);\n\n // ***\n // consider parent qualifications without selected here\n // ***\n return selectedSources;\n }\n\n async getParentsAxes(store: DataStore, state: State) {\n const parentSelectedSources = this.getParentSelectedSources(state);\n const parentAxes = new Map<ColumnOrAxisIdString, { parentSource: ColumnOrAxisIdString, spec: AxisSpec }>();\n for (const source of parentSelectedSources) {\n if (isColumnId(source)) {\n const columnSpec = await store.pFrameProvider.getColumnSpecById(source);\n for (const spec of columnSpec?.axesSpec ?? []) {\n const id = AxisId.fromAxisSpec(spec);\n const idStr = id.toCanonicalString();\n if (parentAxes.has(idStr)) {\n continue;\n }\n parentAxes.set(idStr, { parentSource: source.toCanonicalString(), spec });\n }\n }\n }\n\n return parentAxes;\n }\n\n async getParentAndHangingAxes(store: DataStore, state: State, linkerMap: LinkerMap, multipliesByMap: MultipliesByMap): Promise<{\n parentsAxes: AxesSet,\n hangingAxes: AxesSet,\n }> {\n const parentsAxes = await this.getParentsAxes(store, state);\n const hangingAxes: AxesSet = new Map();\n\n if (!this.settings.isDataComponent) {\n const thisState: ComponentState = state.components[this.componentName];\n const selectedHereSources = thisState.selectorStates.map((v) => v.selectedSource);\n for (const source of selectedHereSources) {\n const id = columnOrAxisIdFromString(source);\n if (!isColumnId(id)) {\n continue;\n }\n const columnSpec = await store.pFrameProvider.getColumnSpecById(id);\n if (!columnSpec) {\n continue;\n }\n const extraAxesSpecs = getNotAllowedAxes(columnSpec, Array.from(parentsAxes.values()).map(v => v.spec), linkerMap, multipliesByMap);\n\n for (const spec of extraAxesSpecs) {\n hangingAxes.set(AxisId.fromAxisSpec(spec).toCanonicalString(), { parentSource: source, spec });\n }\n }\n }\n\n return { parentsAxes, hangingAxes };\n }\n\n /** Get axes to check available columns compatibility: all parents axes + available with these parent axes linker axes */\n getColumnSourceAxes(\n allParentsAndHangingAxes: Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n ): AxesSet {\n const result = new Map();\n const { parentsAxes } = allParentsAndHangingAxes[this.componentName];\n\n for (const v of parentsAxes) {\n result.set(...v);\n }\n\n if (this.settings.isDataComponent) {\n return result;\n }\n\n // normalized list concider axes parents (not component parents)\n const normalizedAxes = getNormalizedAxesList(Array.from(parentsAxes.values()).map((v) => v.spec));\n const axesAvailableWithLinkers = getNormalizedAxesList(linkerMap.getReachableByLinkersAxesFromAxes(normalizedAxes));\n\n for (const axisSpec of axesAvailableWithLinkers) {\n const key = LinkerMap.getLinkerKeyFromAxisSpec(axisSpec);\n const linkerRecord = linkerMap.data.get(key);\n const linked = Array.from(linkerRecord?.linkWith.keys() ?? []);\n const linkerColumn = linkerRecord?.linkWith.get(linked[0]);\n\n if (linkerColumn) {\n const axisId = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n const linkerColumnId = new ColumnId({ name: linkerColumn.columnId, type: linkerColumn.spec.valueType }).toCanonicalString();\n result.set(axisId, { parentSource: linkerColumnId, spec: axisSpec });\n }\n }\n\n for (const [id] of parentsAxes) {\n const multipliesByNode = multipliesByMap.get(id);\n const multipliesByKeys = Array.from(multipliesByNode?.keys() ?? []);\n if (multipliesByNode && multipliesByKeys.length) {\n for (const key of multipliesByKeys) {\n const el = multipliesByNode.get(key)!;\n const axisId = AxisId.fromAxisSpec(el.spec).toCanonicalString()\n result.set(axisId, { parentSource: el.parentSource, spec: el.spec });\n }\n }\n }\n\n return result;\n }\n\n /** Allowed: all axes from parent (data) inputs + hanging axes from another (not data) inputs + axes from linkers;\n * these are all axes that can be in a compatible columns + hanging axes.\n */\n getAllowedAxes(\n allParentsAndHangingAxes: Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n ): AxesSet {\n const result = this.getColumnSourceAxes(allParentsAndHangingAxes, linkerMap, multipliesByMap);\n\n for (const [input, data] of Object.entries(allParentsAndHangingAxes)) {\n if (input === this.componentName && !this.settings.multipleSelectors) {\n continue;\n }\n for (const v of data.hangingAxes) {\n result.set(...v);\n }\n }\n return result;\n }\n\n checkStateConsistency(state: State, options: SourceOption[]) {\n const thisState: ComponentState = state.components[this.componentName];\n\n return thisState.selectorStates.reduce((res, v) => {\n res[v.selectedSource] = options.some(op => op.value === v.selectedSource);\n return res;\n }, {} as Record<string, boolean>);\n }\n\n\n async getOptions(\n store: DataStore,\n state: State,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n allParentAndHangingAxes: Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>, // hanging axes from all the inputs\n dataColumnPredicate: (spec: PColumnSpec) => boolean,\n ignoredNamesSet: Set<string> = new Set(),\n fixedSelectedSet: Set<ColumnOrAxisIdString> = new Set()\n ): Promise<ComponentGuideSimple> {\n const multipleSelectors = this.settings.multipleSelectors;\n const required = this.settings.required;\n const optionsInfo = new Map();\n\n if (this.dependsOn.length && this.dependsOn.some(dep => state.components[dep].selectorStates.length === 0)) {\n return { multipleSelectors, required, stateConsistency: this.checkStateConsistency(state, []), options: [], optionsInfo };\n }\n\n if (\n this.strictlyDependsOnParents &&\n !this.settings.isDataComponent &&\n this.parentComponents.some(name => state.components[name].selectorStates.length === 0)\n ) {\n return { multipleSelectors, required, stateConsistency: this.checkStateConsistency(state, []), options: [], optionsInfo };\n }\n\n const options: SourceOption[] = [];\n if (this.settings.axesAllowed) {\n const allowedAxes = this.getAllowedAxes(allParentAndHangingAxes, linkerMap, multipliesByMap);\n for (const [idStr, { spec, parentSource }] of allowedAxes.entries()) {\n const id = columnOrAxisIdFromString(idStr) as AxisId;\n\n const isNonHomogenous = axisIsNonHomogenous(spec);\n\n const typeOK = this.allowedTypes.includes(spec.type);\n const annotationsOK = Object.entries(this.annotations).every(\n ([k, v]) => spec.annotations?.[k] === v\n );\n const checkBySpecOK = this.checkSourceBySpec ? this.checkSourceBySpec(spec, state) : true;\n const axisNatureOK = !this.settings.homogeneous || !isNonHomogenous;\n const ignored = ignoredNamesSet.has(id.name) || fixedSelectedSet.has(idStr);\n\n optionsInfo.set(idStr, {\n kind: 'axis',\n name: spec.name,\n label: await getColumnOrAxisLabel(store, idStr, [parentSource]),\n type: spec.type,\n mustBeConsumed: false,\n dividable: false,\n spec,\n annotations: spec.annotations,\n isNonHomogenous,\n isSubsetFilter: readAnnotation(spec, Annotation.IsSubset),\n isDiscreteFilter: spec.type === 'String' || readAnnotation(spec, Annotation.IsDiscreteFilter) === 'true',\n parentSources: [parentSource],\n });\n\n if (typeOK && annotationsOK && checkBySpecOK && axisNatureOK && !ignored) {\n options.push({ value: idStr });\n }\n }\n }\n\n if (this.settings.columnsAllowed) {\n const allowedColumns = await store.pFrameProvider.getColumns([], false, this.allowedTypes, undefined, this.annotations);\n const strictlyCompatible = !this.settings.columnsWithExtraAxesAllowed && this.strictlyDependsOnParents;\n const columnSourceAxes = this.getColumnSourceAxes(allParentAndHangingAxes, linkerMap, multipliesByMap);\n\n for (const columnId of allowedColumns) {\n const columnIdString = columnId.toCanonicalString();\n\n const columnSpec = await store.pFrameProvider.getColumnSpecById(columnId);\n if (!columnSpec) {\n continue;\n }\n const parentsAxes = allParentAndHangingAxes[this.componentName].parentsAxes;\n const columnAxesIds = columnSpec.axesSpec.map((spec) => AxisId.fromAxisSpec(spec).toCanonicalString());\n if (\n // do not add to available options label columns, or columns that are not fit by custom spec condition, or columns that are not fit by condition for data inputs\n isLabelColumn(columnSpec) || isLinkerColumn(columnSpec) ||\n (this.checkSourceBySpec && !this.checkSourceBySpec(columnSpec, state)) ||\n (this.settings.isDataComponent && !dataColumnPredicate(columnSpec)) ||\n strictlyCompatible && columnSourceAxes.size && columnAxesIds.some((id) => !columnSourceAxes.has(id)) ||\n parentsAxes.size && !(columnAxesIds.some((id) => parentsAxes.has(id)) || columnAxesIds.every((id) => columnSourceAxes.has(id)))\n ) {\n continue;\n }\n\n const columnInfo: ColumnData = {\n kind: 'column',\n name: columnSpec.name,\n label: readAnnotation(columnSpec, Annotation.Label) ?? columnSpec.name,\n type: columnSpec.valueType,\n spec: columnSpec,\n annotations: columnSpec.annotations,\n isSubsetFilter: readAnnotation(columnSpec, Annotation.IsSubset) === 'true',\n isDiscreteFilter: columnSpec.valueType === 'String' || readAnnotation(columnSpec, Annotation.IsDiscreteFilter) === 'true'\n };\n optionsInfo.set(columnIdString, columnInfo);\n\n const ignored = ignoredNamesSet.has(columnId.name) || fixedSelectedSet.has(columnIdString);\n if (!ignored) {\n options.push({ value: columnIdString });\n }\n }\n }\n return {\n multipleSelectors,\n required,\n stateConsistency: this.checkStateConsistency(state, options),\n options,\n optionsInfo\n };\n }\n}\n"],"names":["isLinkerColumn","columnSpec","readAnnotation","Annotation","_ComponentController","componentName","allowedTypes","settings","strictlyDependsOnParents","dependsOn","parentComponents","annotations","checkSourceBySpec","__publicField","state","selectorState","nextState","getStateCopy","selectedSourceStr","item","res","selectedHere","s","columnOrAxisIdFromString","store","parentSelectedSources","parentAxes","source","isColumnId","spec","idStr","AxisId","linkerMap","multipliesByMap","parentsAxes","hangingAxes","selectedHereSources","v","id","extraAxesSpecs","getNotAllowedAxes","allParentsAndHangingAxes","result","normalizedAxes","getNormalizedAxesList","axesAvailableWithLinkers","axisSpec","key","LinkerMap","linkerRecord","linked","linkerColumn","axisId","linkerColumnId","ColumnId","multipliesByNode","multipliesByKeys","el","input","data","options","op","allParentAndHangingAxes","dataColumnPredicate","ignoredNamesSet","fixedSelectedSet","multipleSelectors","required","optionsInfo","dep","name","allowedAxes","parentSource","isNonHomogenous","axisIsNonHomogenous","typeOK","annotationsOK","k","_a","checkBySpecOK","axisNatureOK","ignored","getColumnOrAxisLabel","allowedColumns","strictlyCompatible","columnSourceAxes","columnId","columnIdString","columnAxesIds","isLabelColumn","columnInfo","ComponentController"],"mappings":"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","x_google_ignoreList":[0]}