@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,22 +1,21 @@
1
1
  import "./node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js";
2
- import { getNormalizedAxesList as x } from "./node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js";
3
- import w from "./_virtual/canonicalize.js";
4
- import { LinkerMap as E } from "./node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/linker_columns.js";
2
+ import { Annotation as g, readAnnotation as x, getNormalizedAxesList as C } from "./node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js";
3
+ import M from "./_virtual/canonicalize.js";
4
+ import { LinkerMap as $ } from "./node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/linker_columns.js";
5
5
  import "./node_modules/@milaboratories/pl-model-common/dist/plid.js";
6
6
  import "./node_modules/@milaboratories/pl-model-common/dist/ref.js";
7
- import { ColumnId as A, AxisId as g, columnOrAxisIdFromString as S, isColumnId as y, isAxisId as C } from "./spec.js";
8
- import { IS_LINKER_COLUMN as M, MULTIPLIES_BY as F, COLUMN_LABEL_KEY as P, IS_VIRTUAL_COLUMN as k, SUBSET_FILTER_KEY as O, AXIS_NATURE_KEY as _, COLUMN_NAME_KEY as R, COLUMN_DOMAIN_KEY as V } from "./constants.js";
9
- function X(t) {
10
- const n = S(t), { name: a, type: o } = n;
11
- return y(n) ? {
7
+ import { ColumnId as A, AxisId as f, columnOrAxisIdFromString as S, isColumnId as v, isAxisId as F } from "./spec.js";
8
+ function J(n) {
9
+ const t = S(n), { name: a, type: o } = t;
10
+ return v(t) ? {
12
11
  kind: "column",
13
12
  name: "",
14
13
  label: " ",
15
- type: n.type,
16
- spec: { axesSpec: [], kind: "PColumn", valueType: n.type, name: a },
14
+ type: t.type,
15
+ spec: { axesSpec: [], kind: "PColumn", valueType: t.type, name: a },
17
16
  annotations: void 0,
18
17
  isSubsetFilter: !1,
19
- isDiscreteFilter: n.type === "String"
18
+ isDiscreteFilter: t.type === "String"
20
19
  } : {
21
20
  kind: "axis",
22
21
  name: "",
@@ -32,259 +31,255 @@ function X(t) {
32
31
  parentSources: []
33
32
  };
34
33
  }
35
- function Z(t) {
34
+ function z(n) {
36
35
  return {
37
- type: t.type,
38
- components: { ...t.components },
39
- dividedAxes: { ...t.dividedAxes }
36
+ type: n.type,
37
+ components: { ...n.components },
38
+ dividedAxes: { ...n.dividedAxes }
40
39
  };
41
40
  }
42
- function L(t, n) {
43
- return n === "Int" || n === "Long" ? Math.floor(t) : t;
41
+ function b(n, t) {
42
+ return t === "Int" || t === "Long" ? Math.floor(n) : n;
44
43
  }
45
- function B(t) {
46
- const { selectedSource: n, type: a, selectedFilterRange: o, selectedFilterValues: i } = t, e = S(n);
44
+ function B(n) {
45
+ const { selectedSource: t, type: a, selectedFilterRange: o, selectedFilterValues: r } = n, e = S(t);
47
46
  if (!e)
48
47
  throw Error("Empty source selected");
49
48
  if (a === "range") {
50
- const r = [];
51
- return (o == null ? void 0 : o.max) !== void 0 && r.push({
49
+ const i = [];
50
+ return (o == null ? void 0 : o.max) !== void 0 && i.push({
52
51
  type: "bySingleColumnV2",
53
- column: C(e) ? { type: "axis", id: e.toPFrameId() } : { type: "column", id: e.name },
52
+ column: F(e) ? { type: "axis", id: e.toPFrameId() } : { type: "column", id: e.name },
54
53
  predicate: {
55
54
  operator: "LessOrEqual",
56
- reference: L(o.max, e.type)
55
+ reference: b(o.max, e.type)
57
56
  }
58
- }), (o == null ? void 0 : o.min) !== void 0 && r.push({
57
+ }), (o == null ? void 0 : o.min) !== void 0 && i.push({
59
58
  type: "bySingleColumnV2",
60
- column: C(e) ? { type: "axis", id: e.toPFrameId() } : { type: "column", id: e.name },
59
+ column: F(e) ? { type: "axis", id: e.toPFrameId() } : { type: "column", id: e.name },
61
60
  predicate: {
62
61
  operator: "GreaterOrEqual",
63
- reference: L(o.min, e.type)
62
+ reference: b(o.min, e.type)
64
63
  }
65
- }), r;
64
+ }), i;
66
65
  } else if (a === "subset")
67
66
  return [
68
67
  {
69
68
  type: "bySingleColumnV2",
70
- column: C(e) ? { type: "axis", id: e.toPFrameId() } : { type: "column", id: e.name },
69
+ column: F(e) ? { type: "axis", id: e.toPFrameId() } : { type: "column", id: e.name },
71
70
  predicate: {
72
71
  operator: "Not",
73
72
  operand: { operator: "IsNA" }
74
73
  }
75
74
  }
76
75
  ];
77
- return typeof i > "u" || !i.length ? [] : [
76
+ return typeof r > "u" || !r.length ? [] : [
78
77
  {
79
78
  type: "bySingleColumnV2",
80
- column: C(e) ? { type: "axis", id: e.toPFrameId() } : {
79
+ column: F(e) ? { type: "axis", id: e.toPFrameId() } : {
81
80
  type: "column",
82
81
  id: e.name
83
82
  },
84
83
  predicate: {
85
84
  operator: "Or",
86
- operands: i.map((r) => ({
85
+ operands: r.map((i) => ({
87
86
  operator: "Equal",
88
- reference: e.type === "String" ? String(r) : Number(r)
87
+ reference: e.type === "String" ? String(i) : Number(i)
89
88
  }))
90
89
  }
91
90
  }
92
91
  ];
93
92
  }
94
- function ee(t) {
95
- const n = [];
96
- for (const a of t)
97
- n.push(...B(a));
98
- return n;
93
+ function K(n) {
94
+ const t = [];
95
+ for (const a of n)
96
+ t.push(...B(a));
97
+ return t;
99
98
  }
100
- function b(t) {
101
- var n, a;
102
- if ("kind" in t && t.kind === "PColumn") {
103
- const e = t.name ?? ((n = t.annotations) == null ? void 0 : n[R]), r = t.domain ?? ((a = t.annotations) == null ? void 0 : a[V]);
104
- return w({ name: e, domain: r });
105
- }
106
- const o = t.name, i = t.domain;
107
- return w({ name: o, domain: i });
99
+ function L(n) {
100
+ const t = n.name, a = n.domain;
101
+ return M({ name: t, domain: a });
108
102
  }
109
- async function N(t, n, a) {
103
+ async function P(n, t, a) {
110
104
  for (const o of a) {
111
- const i = S(o);
112
- if (y(i)) {
113
- const e = await t.pFrameProvider.getColumnSpecById(i), r = ((e == null ? void 0 : e.axesSpec) ?? []).find(
114
- (s) => g.fromAxisSpec(s).toCanonicalString() === n.toCanonicalString()
105
+ const r = S(o);
106
+ if (v(r)) {
107
+ const e = await n.pFrameProvider.getColumnSpecById(r), i = ((e == null ? void 0 : e.axesSpec) ?? []).find(
108
+ (l) => f.fromAxisSpec(l).toCanonicalString() === t.toCanonicalString()
115
109
  );
116
- if (r)
117
- return r;
110
+ if (i)
111
+ return i;
118
112
  }
119
113
  }
120
114
  return null;
121
115
  }
122
- const T = "pl7.app/label";
123
- async function D(t, n, a) {
124
- const o = S(n);
125
- if (y(o))
116
+ const N = "pl7.app/label";
117
+ async function O(n, t, a) {
118
+ const o = S(t);
119
+ if (v(o))
126
120
  return;
127
- async function i(c) {
128
- const u = await N(t, c, a);
129
- return u ? b(u) : null;
121
+ async function r(c) {
122
+ const u = await P(n, c, a);
123
+ return u ? L(u) : null;
130
124
  }
131
- const e = await t.pFrameProvider.getColumnsFull([], !1, void 0, [T]), r = await i(o), s = e.find(({ spec: c }) => c && c.axesSpec.length === 1 && b(c.axesSpec[0]) === r);
132
- return s ? new A({ name: s.columnId, type: s.spec.valueType }) : void 0;
125
+ const e = await n.pFrameProvider.getColumnsFull([], !1, void 0, [N]), i = await r(o), l = e.find(({ spec: c }) => c && c.axesSpec.length === 1 && L(c.axesSpec[0]) === i);
126
+ return l ? new A({ name: l.columnId, type: l.spec.valueType }) : void 0;
133
127
  }
134
- async function U(t, n, a) {
135
- const o = S(n), i = await D(t, n, a);
128
+ async function V(n, t, a) {
129
+ const o = S(t), r = await O(n, t, a);
136
130
  let e;
137
- return y(o) ? e = await t.pFrameProvider.getColumnSpecById(i ?? o) : e = i ? await t.pFrameProvider.getColumnSpecById(i) : await N(t, o, a), e;
131
+ return v(o) ? e = await n.pFrameProvider.getColumnSpecById(r ?? o) : e = r ? await n.pFrameProvider.getColumnSpecById(r) : await P(n, o, a), e;
138
132
  }
139
- async function te(t, n, a) {
140
- var o;
141
- const i = await U(t, n, a);
142
- if (!i)
133
+ async function Q(n, t, a) {
134
+ const o = await V(n, t, a);
135
+ if (!o)
143
136
  return "";
144
- const e = ((o = i.annotations) == null ? void 0 : o[P]) ?? i.name;
145
- return t.labelsModifier(i.name, e);
137
+ const r = x(o, g.Label) ?? o.name;
138
+ return n.labelsModifier(o.name, r);
146
139
  }
147
- function ne(t) {
148
- var n, a;
149
- const o = (a = (n = t.annotations) == null ? void 0 : n[_]) == null ? void 0 : a.toLowerCase();
150
- return !!o && o !== "homogenous" && o !== "homogeneous";
140
+ function U(n) {
141
+ const t = x(n, g.AxisNature);
142
+ return !!t && t !== "homogenous" && t !== "homogeneous";
151
143
  }
152
- function oe(t) {
153
- var n, a;
154
- return !t.name.includes("metadata") && ((n = t.annotations) == null ? void 0 : n[k]) !== "true" && ((a = t.annotations) == null ? void 0 : a[O]) !== "true";
144
+ function X(n) {
145
+ return !n.name.includes("metadata") && !x(n, g.Graph.IsVirtual) && !x(n, g.IsSubset);
155
146
  }
156
- async function ae(t, n) {
147
+ async function Y(n, t) {
157
148
  const a = /* @__PURE__ */ new Set(), o = [];
158
- for (const i of n) {
159
- const e = S(i);
160
- if (y(e)) {
161
- const r = await t.pFrameProvider.getColumnSpecById(e);
162
- if (!r)
149
+ for (const r of t) {
150
+ const e = S(r);
151
+ if (v(e)) {
152
+ const i = await n.pFrameProvider.getColumnSpecById(e);
153
+ if (!i)
163
154
  continue;
164
- r.axesSpec.forEach((s) => {
165
- const c = g.fromAxisSpec(s).toCanonicalString();
166
- a.has(c) || (a.add(c), o.push(s));
155
+ i.axesSpec.forEach((l) => {
156
+ const c = f.fromAxisSpec(l).toCanonicalString();
157
+ a.has(c) || (a.add(c), o.push(l));
167
158
  });
168
159
  }
169
160
  }
170
161
  return o;
171
162
  }
172
- async function re(t) {
173
- const n = await t.pFrameProvider.getColumnsFull(
163
+ async function Z(n) {
164
+ const t = await n.pFrameProvider.getColumnsFull(
174
165
  [],
175
166
  !1,
176
167
  void 0,
177
168
  void 0,
178
- { [M]: "true" }
169
+ { [g.IsLinkerColumn]: "true" }
179
170
  );
180
- return E.fromColumns(n);
171
+ return $.fromColumns(t);
181
172
  }
182
- async function ie(t) {
183
- var n, a, o, i;
184
- const e = await t.pFrameProvider.getColumnsFull(
173
+ async function _(n) {
174
+ var t, a;
175
+ const o = await n.pFrameProvider.getColumnsFull(
185
176
  [],
186
177
  !1,
187
178
  void 0,
188
179
  void 0,
189
180
  void 0,
190
- [F]
181
+ [g.MultipliesBy]
191
182
  ), r = /* @__PURE__ */ new Map();
192
- for (const s of e) {
193
- const c = s.spec.axesSpec, u = (a = (n = s.spec) == null ? void 0 : n.annotations) == null ? void 0 : a[F];
194
- if (c.length !== 2 || !u)
183
+ for (const e of o) {
184
+ const i = e.spec.axesSpec, l = x(e.spec, g.MultipliesBy);
185
+ if (i.length !== 2 || !l)
195
186
  continue;
196
- const l = new A({ name: s.columnId, type: s.spec.valueType }).toCanonicalString();
187
+ const c = new A({ name: e.columnId, type: e.spec.valueType }).toCanonicalString();
197
188
  try {
198
- const [f] = JSON.parse(u), [m, d] = c, p = g.fromAxisSpec(m).toCanonicalString(), v = g.fromAxisSpec(d).toCanonicalString();
199
- m.name === f ? (r.get(v) || r.set(v, /* @__PURE__ */ new Map()), r.get(v).set(p, { parentSource: l, spec: m })) : d.name === f && (r.get(p) || r.set(p, /* @__PURE__ */ new Map()), r.get(p).set(v, { parentSource: l, spec: d }));
189
+ const [u] = JSON.parse(l), [s, d] = i, m = f.fromAxisSpec(s).toCanonicalString(), p = f.fromAxisSpec(d).toCanonicalString();
190
+ s.name === u ? (r.get(p) || r.set(p, /* @__PURE__ */ new Map()), r.get(p).set(m, { parentSource: c, spec: s })) : d.name === u && (r.get(m) || r.set(m, /* @__PURE__ */ new Map()), r.get(m).set(p, { parentSource: c, spec: d }));
200
191
  } catch {
201
- console.error(`Wrong format for annotation ${F}: ${(i = (o = s.spec) == null ? void 0 : o.annotations) == null ? void 0 : i[F]}`);
192
+ console.error(`Wrong format for annotation ${g.MultipliesBy}: ${(a = (t = e.spec) == null ? void 0 : t.annotations) == null ? void 0 : a[g.MultipliesBy]}`);
202
193
  }
203
194
  }
204
195
  return r;
205
196
  }
206
- function K(t, n, a, o) {
207
- var i;
208
- const e = t.toCanonicalString(), r = [...new Set(o.map((l) => g.fromAxisSpec(l).toCanonicalString()))].find((l) => {
209
- var f;
210
- return (f = a.get(l)) == null ? void 0 : f.get(e);
211
- }), s = r ? (i = a.get(r)) == null ? void 0 : i.get(e) : null;
212
- if (s)
213
- return [S(s.parentSource)];
214
- const c = x(o), u = x(
215
- n.getReachableByLinkersAxesFromAxes(c)
216
- ).find((l) => g.fromAxisSpec(l).toCanonicalString() === e);
217
- return u ? n.getLinkerColumnsForAxes({ from: c, to: [u], throwWhenNoLinkExists: !1 }).map((l) => new A({ name: l.columnId, type: l.spec.valueType })) : [];
197
+ function D(n, t, a, o) {
198
+ var r;
199
+ const e = n.toCanonicalString(), i = [...new Set(o.map((s) => f.fromAxisSpec(s).toCanonicalString()))].find((s) => {
200
+ var d;
201
+ return (d = a.get(s)) == null ? void 0 : d.get(e);
202
+ }), l = i ? (r = a.get(i)) == null ? void 0 : r.get(e) : null;
203
+ if (l)
204
+ return [S(l.parentSource)];
205
+ const c = C(o), u = C(
206
+ t.getReachableByLinkersAxesFromAxes(c)
207
+ ).find((s) => f.fromAxisSpec(s).toCanonicalString() === e);
208
+ return u ? t.getLinkerColumnsForAxes({ from: c, to: [u], throwWhenNoLinkExists: !1 }).map((s) => new A({ name: s.columnId, type: s.spec.valueType })) : [];
218
209
  }
219
- async function Y(t, n, a, o, i) {
220
- const e = await n.pFrameProvider.getColumnSpecById(t);
210
+ async function E(n, t, a, o, r) {
211
+ const e = await t.pFrameProvider.getColumnSpecById(n);
221
212
  if (!e)
222
213
  return [];
223
- let r = [];
224
- const s = new Set(i.map((m) => g.fromAxisSpec(m).toCanonicalString())), c = [...s], u = e.axesSpec.filter((m) => {
225
- var d;
226
- const p = g.fromAxisSpec(m).toCanonicalString();
227
- if (s.has(p))
214
+ let i = [];
215
+ const l = new Set(r.map((m) => f.fromAxisSpec(m).toCanonicalString())), c = [...l], u = e.axesSpec.filter((m) => {
216
+ var p;
217
+ const y = f.fromAxisSpec(m).toCanonicalString();
218
+ if (l.has(y))
228
219
  return !1;
229
- const v = c.find(($) => {
230
- var h;
231
- return (h = o.get($)) == null ? void 0 : h.get(p);
232
- }), I = v ? (d = o.get(v)) == null ? void 0 : d.get(p) : null;
233
- return I ? (r.push(S(I.parentSource)), !1) : !0;
234
- }), l = x(i), f = x(u);
235
- return r = r.concat(a.getLinkerColumnsForAxes({ from: l, to: f, throwWhenNoLinkExists: !1 }).map((m) => new A({ name: m.columnId, type: m.spec.valueType }))), r;
220
+ const h = c.find((k) => {
221
+ var I;
222
+ return (I = o.get(k)) == null ? void 0 : I.get(y);
223
+ }), w = h ? (p = o.get(h)) == null ? void 0 : p.get(y) : null;
224
+ return w ? (i.push(S(w.parentSource)), !1) : !0;
225
+ }), s = C(r), d = C(u);
226
+ return i = i.concat(a.getLinkerColumnsForAxes({ from: s, to: d, throwWhenNoLinkExists: !1 }).map((m) => new A({ name: m.columnId, type: m.spec.valueType }))), i;
236
227
  }
237
- async function se(t, n, a, o, i) {
238
- const e = S(i);
239
- return y(e) ? Y(e, t, n, a, o) : K(e, n, a, o);
228
+ async function ee(n, t, a, o, r) {
229
+ const e = S(r);
230
+ return v(e) ? E(e, n, t, a, o) : D(e, t, a, o);
240
231
  }
241
- function le(t, n, a, o) {
242
- const i = new Set(n.map((u) => g.fromAxisSpec(u).toCanonicalString())), e = [...i], r = x(t.axesSpec).filter(
232
+ function ne(n, t, a, o) {
233
+ const r = new Set(t.map((u) => f.fromAxisSpec(u).toCanonicalString())), e = [...r], i = C(n.axesSpec).filter(
243
234
  // axes in data axes list are allowed, check the rest
244
- (u) => !i.has(g.fromAxisSpec(u).toCanonicalString())
245
- ), s = x(n), c = E.getAxesRoots(r);
246
- return a.getNonLinkableAxes(s, c).filter((u) => {
247
- const l = g.fromAxisSpec(u).toCanonicalString();
248
- return !e.some((f) => {
235
+ (u) => !r.has(f.fromAxisSpec(u).toCanonicalString())
236
+ ), l = C(t), c = $.getAxesRoots(i);
237
+ return a.getNonLinkableAxes(l, c).filter((u) => {
238
+ const s = f.fromAxisSpec(u).toCanonicalString();
239
+ return !e.some((d) => {
249
240
  var m;
250
- return ((m = o.get(f)) == null ? void 0 : m.get(l)) !== void 0;
241
+ return ((m = o.get(d)) == null ? void 0 : m.get(s)) !== void 0;
251
242
  });
252
243
  });
253
244
  }
254
- function ce(t, n) {
255
- const a = n.columnsData[Object.keys(n.columnsData)[0]].length, o = new Int32Array(a).fill(0), i = t.filter(
245
+ function te(n, t) {
246
+ const a = t.columnsData[Object.keys(t.columnsData)[0]].length, o = new Int32Array(a).fill(0), r = n.filter(
256
247
  (e) => e.selectedFilterRange && (e.selectedFilterRange.min !== void 0 || e.selectedFilterRange.max !== void 0) || e.selectedFilterValues && e.selectedFilterValues.length || e.type === "subset"
257
248
  );
258
249
  for (let e = 0; e < a; e++) {
259
- let r = i.length === 0;
260
- for (let s = 0; s < i.length; s++) {
261
- const { selectedSource: c, selectedFilterValues: u, selectedFilterRange: l, type: f } = t[s], m = S(c), d = (y(m) ? n.columnsData[c] : n.axesData[c])[e];
262
- if (u !== void 0 && u.length && (r = r || u.includes(String(d))), l !== void 0 && (l.min !== void 0 || l.max !== void 0) && typeof d == "number") {
263
- let p = !0;
264
- l.min !== void 0 && (p = p && d >= l.min), l.max !== void 0 && (p = p && d <= l.max), r = r || p;
250
+ let i = r.length === 0;
251
+ for (let l = 0; l < r.length; l++) {
252
+ const { selectedSource: c, selectedFilterValues: u, selectedFilterRange: s, type: d } = n[l], m = S(c), p = (v(m) ? t.columnsData[c] : t.axesData[c])[e];
253
+ if (u !== void 0 && u.length && (i = i || u.includes(String(p))), s !== void 0 && (s.min !== void 0 || s.max !== void 0) && typeof p == "number") {
254
+ let y = !0;
255
+ s.min !== void 0 && (y = y && p >= s.min), s.max !== void 0 && (y = y && p <= s.max), i = i || y;
265
256
  }
266
- f === "subset" && (r = r || d != null);
257
+ d === "subset" && (i = i || p != null);
267
258
  }
268
- r && (o[e] = 1);
259
+ i && (o[e] = 1);
269
260
  }
270
261
  return o;
271
262
  }
263
+ function oe(n) {
264
+ return n ? x(n, g.Format) ?? ".0%" : ".0%";
265
+ }
272
266
  export {
273
- ne as axisIsNonHomogenous,
274
- ce as createHighlightColumn,
275
- re as createLinkerMap,
276
- ie as createMultipliesByMap,
277
- oe as dataColumnPredicateDefault,
278
- ae as getAxesSpecsFromSources,
279
- te as getColumnOrAxisLabel,
280
- U as getColumnOrAxisSpec,
281
- D as getColumnOrAxisValueLabelsId,
282
- X as getDefaultInfo,
267
+ U as axisIsNonHomogenous,
268
+ te as createHighlightColumn,
269
+ Z as createLinkerMap,
270
+ _ as createMultipliesByMap,
271
+ X as dataColumnPredicateDefault,
272
+ Y as getAxesSpecsFromSources,
273
+ Q as getColumnOrAxisLabel,
274
+ V as getColumnOrAxisSpec,
275
+ O as getColumnOrAxisValueLabelsId,
276
+ J as getDefaultInfo,
283
277
  B as getFilterFromState,
284
- ee as getFiltersFromStates,
285
- b as getGlobalId,
286
- se as getLinkerColumnsForSource,
287
- le as getNotAllowedAxes,
288
- Z as getStateCopy
278
+ K as getFiltersFromStates,
279
+ oe as getFormat,
280
+ L as getGlobalId,
281
+ ee as getLinkerColumnsForSource,
282
+ ne as getNotAllowedAxes,
283
+ z as getStateCopy
289
284
  };
290
285
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../../node_modules/@milaboratories/pf-plots/src/utils.ts"],"sourcesContent":["import { getNormalizedAxesList, LinkerMap, SingleValuePredicateV2, ValueType } from '@milaboratories/pl-model-common';\nimport { TableOuterJoinResult } from './pframe/ColumnsProvider';\nimport type { DataStore, PValue } from './store';\nimport type { ColumnOrAxisIdString } from './spec';\nimport { isAxisId } from './spec';\nimport { AxisId, ColumnId, columnOrAxisIdFromString, isColumnId } from './spec';\nimport type { AxisData, ColumnData, InputState, SelectorStateFilter } from './common';\nimport {\n AXIS_NATURE_KEY,\n COLUMN_DOMAIN_KEY,\n COLUMN_LABEL_KEY,\n COLUMN_NAME_KEY, IS_LINKER_COLUMN,\n IS_VIRTUAL_COLUMN,\n MULTIPLIES_BY,\n SUBSET_FILTER_KEY,\n} from './constants';\nimport {\n AxisSpec,\n type PColumnSpec,\n type PObjectId,\n type PTableRecordSingleValueFilterV2,\n} from '@milaboratories/pl-model-common';\nimport canonicalize from 'canonicalize';\nimport { DemoDataStore } from './demoStore';\n\nexport type OptionsInfo = Map<ColumnOrAxisIdString, ColumnData | AxisData>;\nexport function getDefaultInfo(sourceIdStr: ColumnOrAxisIdString): ColumnData | AxisData {\n const item = columnOrAxisIdFromString(sourceIdStr);\n const { name, type } = item;\n if (isColumnId(item)) {\n return {\n kind: 'column',\n name: '',\n label: ' ',\n type: item.type,\n spec: { axesSpec: [], kind: 'PColumn', valueType: item.type, name },\n annotations: undefined,\n isSubsetFilter: false,\n isDiscreteFilter: item.type === 'String'\n };\n }\n return {\n kind: 'axis',\n name: '',\n label: ' ',\n type: type,\n spec: { type, name },\n mustBeConsumed: false,\n dividable: false,\n annotations: undefined,\n isSubsetFilter: false,\n isDiscreteFilter: type === 'String',\n isNonHomogenous: false,\n parentSources: [],\n };\n}\n\nexport function getStateCopy<State extends InputState>(state: State): State {\n return {\n type: state.type,\n components: { ...state.components },\n dividedAxes: { ...state.dividedAxes },\n } as State;\n}\n\nfunction normalizeFilterReference(v: number, valueType: ValueType): number {\n if (valueType === 'Int' || valueType === 'Long') {\n return Math.floor(v);\n }\n return v;\n}\nexport function getFilterFromState(state: SelectorStateFilter): PTableRecordSingleValueFilterV2[] {\n const { selectedSource, type, selectedFilterRange, selectedFilterValues } = state;\n const id = columnOrAxisIdFromString(selectedSource);\n if (!id) {\n throw Error('Empty source selected');\n }\n if (type === 'range') {\n const rangeFilters: PTableRecordSingleValueFilterV2[] = [];\n if (selectedFilterRange?.max !== undefined) {\n rangeFilters.push({\n type: 'bySingleColumnV2' as const,\n column: isAxisId(id) ? { type: 'axis' as const, id: id.toPFrameId() } : { type: 'column' as const, id: id.name as PObjectId },\n predicate: {\n operator: 'LessOrEqual',\n reference: normalizeFilterReference(selectedFilterRange.max, id.type)\n },\n })\n }\n if (selectedFilterRange?.min !== undefined) {\n rangeFilters.push({\n type: 'bySingleColumnV2' as const,\n column: isAxisId(id) ? { type: 'axis' as const, id: id.toPFrameId() } : { type: 'column' as const, id: id.name as PObjectId },\n predicate: {\n operator: 'GreaterOrEqual',\n reference: normalizeFilterReference(selectedFilterRange.min, id.type)\n },\n })\n }\n return rangeFilters;\n } else if (type === 'subset') {\n return [\n {\n type: 'bySingleColumnV2' as const,\n column: isAxisId(id) ? { type: 'axis' as const, id: id.toPFrameId() } : { type: 'column' as const, id: id.name as PObjectId },\n predicate: {\n operator: 'Not',\n operand: { operator: 'IsNA' }\n },\n },\n ]\n }\n if (typeof selectedFilterValues === 'undefined' || !selectedFilterValues.length) {\n return [];\n }\n return [\n {\n type: 'bySingleColumnV2' as const,\n column: isAxisId(id) ? { type: 'axis' as const, id: id.toPFrameId() } : {\n type: 'column' as const,\n id: id.name as PObjectId,\n },\n predicate: {\n operator: 'Or',\n operands: selectedFilterValues.map((v) => {\n const reference = id.type === 'String'\n ? String(v)\n : (Number(v) as string | number);\n return {\n operator: 'Equal',\n reference\n }\n })\n }\n },\n ];\n}\n\nexport function getFiltersFromStates(states: SelectorStateFilter[]): PTableRecordSingleValueFilterV2[] {\n const result: PTableRecordSingleValueFilterV2[] = [];\n for (const state of states) {\n result.push(...getFilterFromState(state));\n }\n return result;\n}\n\nexport function getGlobalId(spec: PColumnSpec): string;\nexport function getGlobalId(spec: AxisSpec): string;\nexport function getGlobalId(spec: AxisSpec | PColumnSpec): string {\n if ('kind' in spec && spec.kind === 'PColumn') {\n const name = spec.name ?? spec.annotations?.[COLUMN_NAME_KEY];\n const domain = spec.domain ?? spec.annotations?.[COLUMN_DOMAIN_KEY];\n return canonicalize({ name, domain })!;\n }\n const name = spec.name;\n const domain = spec.domain;\n return canonicalize({ name, domain })!;\n}\n\nasync function getAxisSpecFromParents(store: DataStore, axisId: AxisId, parentSources: ColumnOrAxisIdString[]) {\n for (const parentSource of parentSources) {\n const parentId = columnOrAxisIdFromString(parentSource);\n if (isColumnId(parentId)) {\n const columnSpec = await store.pFrameProvider.getColumnSpecById(parentId);\n const spec = (columnSpec?.axesSpec ?? []).find(\n s => AxisId.fromAxisSpec(s).toCanonicalString() === axisId.toCanonicalString(),\n );\n if (spec) {\n return spec;\n }\n }\n }\n return null;\n}\n\nconst LABEL_COLUMN_NAME = 'pl7.app/label';\n\nexport async function getColumnOrAxisValueLabelsId(\n store: DataStore,\n selectedSource: ColumnOrAxisIdString,\n parentSources: ColumnOrAxisIdString[],\n): Promise<ColumnId | undefined> {\n const id = columnOrAxisIdFromString(selectedSource);\n if (isColumnId(id)) {\n return undefined;\n }\n async function getAxisGlobalId(axisId: AxisId) {\n const spec = await getAxisSpecFromParents(store, axisId, parentSources);\n return spec ? getGlobalId(spec) : null;\n }\n const labelColumns = await store.pFrameProvider.getColumnsFull([], false, undefined, [LABEL_COLUMN_NAME]);\n const sourceGlobalId = await getAxisGlobalId(id);\n const labelColumn = labelColumns.find(({ spec }) => {\n return spec && spec.axesSpec.length === 1 && getGlobalId(spec.axesSpec[0]) === sourceGlobalId;\n });\n return labelColumn ? new ColumnId({ name: labelColumn.columnId, type: labelColumn.spec.valueType }) : undefined;\n}\n\nexport async function getColumnOrAxisSpec(\n store: DataStore,\n selectedSource: ColumnOrAxisIdString,\n parentSources: ColumnOrAxisIdString[],\n) {\n const selectedId = columnOrAxisIdFromString(selectedSource);\n const labelsColumn = await getColumnOrAxisValueLabelsId(store, selectedSource, parentSources);\n\n let spec: AxisSpec | PColumnSpec | null;\n if (isColumnId(selectedId)) {\n spec = await store.pFrameProvider.getColumnSpecById(labelsColumn ?? selectedId);\n } else {\n spec = labelsColumn\n ? await store.pFrameProvider.getColumnSpecById(labelsColumn)\n : await getAxisSpecFromParents(store, selectedId, parentSources);\n }\n return spec;\n}\n\nexport async function getColumnOrAxisLabel(\n store: DataStore,\n selectedSource: ColumnOrAxisIdString,\n parentSources: ColumnOrAxisIdString[],\n) {\n const spec = await getColumnOrAxisSpec(store, selectedSource, parentSources);\n if (!spec) {\n return '';\n }\n const label = spec.annotations?.[COLUMN_LABEL_KEY] ?? spec.name;\n return store.labelsModifier(spec.name, label);\n}\n\nexport function axisIsNonHomogenous(spec: AxisSpec) {\n const axisNature = spec.annotations?.[AXIS_NATURE_KEY]?.toLowerCase();\n return Boolean(axisNature) && axisNature !== 'homogenous' && axisNature !== 'homogeneous';\n}\n\nexport function dataColumnPredicateDefault(spec: PColumnSpec) {\n return !spec.name.includes('metadata') && !(spec.annotations?.[IS_VIRTUAL_COLUMN] === 'true') && !(spec.annotations?.[SUBSET_FILTER_KEY] === 'true');\n}\n\nexport async function getAxesSpecsFromSources(store: DataStore, idStrs: ColumnOrAxisIdString[]): Promise<AxisSpec[]> {\n const set = new Set<ColumnOrAxisIdString>();\n const result: AxisSpec[] = [];\n for (const idStr of idStrs) {\n const id = columnOrAxisIdFromString(idStr);\n if (isColumnId(id)) {\n const spec = await store.pFrameProvider.getColumnSpecById(id);\n if (!spec) {\n continue;\n }\n spec.axesSpec.forEach(axisSpec => {\n const id = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n if (!set.has(id)) {\n set.add(id);\n result.push(axisSpec);\n }\n })\n }\n }\n return result;\n}\n\nexport async function createLinkerMap(store: DemoDataStore) {\n const allLinkerColumns = await store.pFrameProvider.getColumnsFull(\n [], false, undefined, undefined,\n { [IS_LINKER_COLUMN]: 'true' },\n );\n\n return LinkerMap.fromColumns(allLinkerColumns);\n}\n\nexport type MultipliesByMap = Map<ColumnOrAxisIdString, Map<ColumnOrAxisIdString, { parentSource: ColumnOrAxisIdString, spec: AxisSpec }>>;\nexport async function createMultipliesByMap(store: DemoDataStore): Promise<MultipliesByMap> {\n const allMultiplyingColumns = await store.pFrameProvider.getColumnsFull(\n [], false, undefined, undefined, undefined, [MULTIPLIES_BY]\n );\n\n const result: MultipliesByMap = new Map();\n\n for (const multiplyingColumn of allMultiplyingColumns) {\n const axes = multiplyingColumn.spec.axesSpec;\n const annotationData = multiplyingColumn.spec?.annotations?.[MULTIPLIES_BY];\n if (axes.length !== 2 || !annotationData) {\n continue;\n }\n const columnIdStr = new ColumnId({ name: multiplyingColumn.columnId, type: multiplyingColumn.spec.valueType }).toCanonicalString();\n try {\n const [multipliesBy] = JSON.parse(annotationData);\n const [axis1, axis2] = axes;\n const id1 = AxisId.fromAxisSpec(axis1).toCanonicalString();\n const id2 = AxisId.fromAxisSpec(axis2).toCanonicalString();\n if (axis1.name === multipliesBy) {\n if (!result.get(id2)) {\n result.set(id2, new Map());\n }\n result.get(id2)!.set(id1, { parentSource: columnIdStr, spec: axis1 })\n } else if (axis2.name === multipliesBy) {\n if (!result.get(id1)) {\n result.set(id1, new Map());\n }\n result.get(id1)!.set(id2, { parentSource: columnIdStr, spec: axis2 });\n }\n } catch (e) {\n console.error(`Wrong format for annotation ${MULTIPLIES_BY}: ${multiplyingColumn.spec?.annotations?.[MULTIPLIES_BY]}`);\n }\n }\n return result;\n}\n\nfunction getLinkerColumnsForAxis(\n secondaryAxisId: AxisId,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n dataInputAxes: AxisSpec[],\n) {\n const axisIdStr = secondaryAxisId.toCanonicalString();\n const dataInputAxesSet = new Set(dataInputAxes.map(axisSpec => AxisId.fromAxisSpec(axisSpec).toCanonicalString()));\n const dataInputAxesIds = [...dataInputAxesSet];\n\n // check multipliesBy columns\n const dataAxesIdWithLink = dataInputAxesIds.find((dataInputId) => multipliesByMap.get(dataInputId)?.get(axisIdStr));\n const linkerEl = dataAxesIdWithLink ? multipliesByMap.get(dataAxesIdWithLink)?.get(axisIdStr) : null;\n if (linkerEl) {\n // we need only 1 multipliesBy column to link single axis\n return [columnOrAxisIdFromString(linkerEl.parentSource)];\n }\n\n const normalizedDataAxes = getNormalizedAxesList(dataInputAxes);\n // else check regular linkers\n const axesAvailableWithLinkers = getNormalizedAxesList(\n linkerMap.getReachableByLinkersAxesFromAxes(normalizedDataAxes)\n );\n const axisSpec = axesAvailableWithLinkers.find((spec) => AxisId.fromAxisSpec(spec).toCanonicalString() === axisIdStr);\n\n if (!axisSpec) {\n return [];\n }\n return linkerMap.getLinkerColumnsForAxes({ from: normalizedDataAxes, to: [axisSpec], throwWhenNoLinkExists: false }).map(v => new ColumnId({ name: v.columnId, type: v.spec.valueType }));\n}\nasync function getLinkerColumnsForColumn(\n secondaryColumnId: ColumnId,\n store: DataStore,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n dataInputAxes: AxisSpec[],\n) {\n const secondaryColumnSpec = await store.pFrameProvider.getColumnSpecById(secondaryColumnId);\n if (!secondaryColumnSpec) {\n return [];\n }\n let linkers: ColumnId[] = [];\n const dataInputAxesSet = new Set(dataInputAxes.map(axisSpec => AxisId.fromAxisSpec(axisSpec).toCanonicalString()));\n const dataInputAxesIds = [...dataInputAxesSet];\n const rightPartAxes = secondaryColumnSpec.axesSpec.filter((axisSpec) => { // right part from column minus 'fixedAxes'\n const axisId = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n if (dataInputAxesSet.has(axisId)) {\n return false;\n }\n const dataAxesIdWithLink = dataInputAxesIds.find((dataInputId) => multipliesByMap.get(dataInputId)?.get(axisId));\n const linkerEl = dataAxesIdWithLink ? multipliesByMap.get(dataAxesIdWithLink)?.get(axisId) : null;\n if (linkerEl) {\n linkers.push(columnOrAxisIdFromString(linkerEl.parentSource));\n return false;\n }\n return true;\n });\n\n const from = getNormalizedAxesList(dataInputAxes);\n const to = getNormalizedAxesList(rightPartAxes);\n\n linkers = linkers.concat(linkerMap.getLinkerColumnsForAxes({ from, to, throwWhenNoLinkExists: false }).map(v => new ColumnId({ name: v.columnId, type: v.spec.valueType })));\n return linkers;\n}\nexport async function getLinkerColumnsForSource(\n store: DataStore,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n dataInputAxes: AxisSpec[],\n secondarySource: ColumnOrAxisIdString,\n): Promise<ColumnId[]> {\n const columnOrAxisId = columnOrAxisIdFromString(secondarySource);\n return isColumnId(columnOrAxisId)\n ? getLinkerColumnsForColumn(columnOrAxisId, store, linkerMap, multipliesByMap, dataInputAxes)\n : getLinkerColumnsForAxis(columnOrAxisId, linkerMap, multipliesByMap, dataInputAxes);\n}\n\nexport function getNotAllowedAxes(\n columnSpec: PColumnSpec,\n dataInputAxesList: AxisSpec[], // axes from data-input\n linkerMap: LinkerMap, // composite linkers, without chains\n multipliesByMap: MultipliesByMap,\n): AxisSpec[] {\n const dataInputAxesSet = new Set(dataInputAxesList.map((v) => AxisId.fromAxisSpec(v).toCanonicalString()))\n const dataInputAxesIds = [...dataInputAxesSet];\n\n // check non-linkable axes only from this column\n const allColumnAxes = getNormalizedAxesList(columnSpec.axesSpec);\n // remove from the column axes - axes from data inputs\n const rightPartAxes = allColumnAxes.filter( // axes in data axes list are allowed, check the rest\n (axisSpec: AxisSpec) => !dataInputAxesSet.has(AxisId.fromAxisSpec(axisSpec).toCanonicalString())\n );\n\n const sourceAxes = getNormalizedAxesList(dataInputAxesList);\n const targetAxes = LinkerMap.getAxesRoots(rightPartAxes);\n\n const nonLinkableByLinkerMap = linkerMap.getNonLinkableAxes(sourceAxes, targetAxes); // rest probably reduced\n const filtered = nonLinkableByLinkerMap.filter((axisSpec) => {\n const freeId = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n return !dataInputAxesIds.some((id) => multipliesByMap.get(id)?.get(freeId) !== undefined);\n });\n return filtered;\n}\n\nexport function createHighlightColumn(highlightSelectedStates: SelectorStateFilter[], data: TableOuterJoinResult) {\n const dataLength = data.columnsData[Object.keys(data.columnsData)[0]].length;\n const highlightColumn = new Int32Array(dataLength).fill(0);\n const notEmptyHighlightStates = highlightSelectedStates.filter(s =>\n s.selectedFilterRange && (s.selectedFilterRange.min !== undefined || s.selectedFilterRange.max !== undefined) ||\n s.selectedFilterValues && s.selectedFilterValues.length ||\n s.type === 'subset'\n )\n for (let rowIdx = 0; rowIdx < dataLength; rowIdx++) {\n let res = notEmptyHighlightStates.length === 0; // fill with 1 if nothing selected in highlighting filters\n for (let i = 0; i < notEmptyHighlightStates.length; i++) {\n const { selectedSource, selectedFilterValues, selectedFilterRange, type } = highlightSelectedStates[i];\n const sourceId = columnOrAxisIdFromString(selectedSource);\n const value = (isColumnId(sourceId) ? data.columnsData[selectedSource] : data.axesData[selectedSource])[rowIdx];\n if (selectedFilterValues !== undefined && selectedFilterValues.length) {\n res = res || selectedFilterValues.includes(String(value));\n }\n if (selectedFilterRange !== undefined && (selectedFilterRange.min !== undefined || selectedFilterRange.max !== undefined) && typeof value === 'number') {\n let rangeResult = true;\n if (selectedFilterRange.min !== undefined) {\n rangeResult = rangeResult && value >= selectedFilterRange.min;\n }\n if (selectedFilterRange.max !== undefined) {\n rangeResult = rangeResult && value <= selectedFilterRange.max;\n }\n res = res || rangeResult;\n }\n if (type === 'subset') {\n res = res || (value !== null && value !== undefined);\n }\n }\n if (res) {\n highlightColumn[rowIdx] = 1;\n }\n }\n return highlightColumn as unknown as PValue[];\n}\n"],"names":["getDefaultInfo","sourceIdStr","item","columnOrAxisIdFromString","name","type","isColumnId","getStateCopy","state","normalizeFilterReference","v","valueType","getFilterFromState","selectedSource","selectedFilterRange","selectedFilterValues","id","rangeFilters","isAxisId","getFiltersFromStates","states","result","getGlobalId","spec","_a","COLUMN_NAME_KEY","domain","_b","COLUMN_DOMAIN_KEY","canonicalize","getAxisSpecFromParents","store","axisId","parentSources","parentSource","parentId","columnSpec","AxisId","LABEL_COLUMN_NAME","getColumnOrAxisValueLabelsId","getAxisGlobalId","labelColumns","sourceGlobalId","labelColumn","ColumnId","getColumnOrAxisSpec","selectedId","labelsColumn","getColumnOrAxisLabel","label","COLUMN_LABEL_KEY","axisIsNonHomogenous","axisNature","AXIS_NATURE_KEY","dataColumnPredicateDefault","IS_VIRTUAL_COLUMN","SUBSET_FILTER_KEY","getAxesSpecsFromSources","idStrs","set","idStr","axisSpec","createLinkerMap","allLinkerColumns","IS_LINKER_COLUMN","LinkerMap","createMultipliesByMap","allMultiplyingColumns","MULTIPLIES_BY","multiplyingColumn","axes","annotationData","columnIdStr","multipliesBy","axis1","axis2","id1","id2","_d","_c","getLinkerColumnsForAxis","secondaryAxisId","linkerMap","multipliesByMap","dataInputAxes","axisIdStr","dataAxesIdWithLink","dataInputId","linkerEl","normalizedDataAxes","getNormalizedAxesList","getLinkerColumnsForColumn","secondaryColumnId","secondaryColumnSpec","linkers","dataInputAxesSet","dataInputAxesIds","rightPartAxes","from","to","u","getLinkerColumnsForSource","secondarySource","columnOrAxisId","getNotAllowedAxes","dataInputAxesList","sourceAxes","targetAxes","freeId","createHighlightColumn","highlightSelectedStates","data","dataLength","highlightColumn","notEmptyHighlightStates","s","rowIdx","res","i","sourceId","value","rangeResult"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../node_modules/@milaboratories/pf-plots/src/utils.ts"],"sourcesContent":["import { Annotation, getNormalizedAxesList, LinkerMap, readAnnotation, SingleValuePredicateV2, ValueType } from '@milaboratories/pl-model-common';\nimport { TableOuterJoinResult } from './pframe/ColumnsProvider';\nimport type { DataStore, PValue } from './store';\nimport type { ColumnOrAxisIdString } from './spec';\nimport { isAxisId } from './spec';\nimport { AxisId, ColumnId, columnOrAxisIdFromString, isColumnId } from './spec';\nimport type { AxisData, ColumnData, InputState, SelectorStateFilter } from './common';\nimport {\n AxisSpec,\n type PColumnSpec,\n type PObjectId,\n type PTableRecordSingleValueFilterV2,\n} from '@milaboratories/pl-model-common';\nimport canonicalize from 'canonicalize';\nimport { DemoDataStore } from './demoStore';\n\nexport type OptionsInfo = Map<ColumnOrAxisIdString, ColumnData | AxisData>;\nexport function getDefaultInfo(sourceIdStr: ColumnOrAxisIdString): ColumnData | AxisData {\n const item = columnOrAxisIdFromString(sourceIdStr);\n const { name, type } = item;\n if (isColumnId(item)) {\n return {\n kind: 'column',\n name: '',\n label: ' ',\n type: item.type,\n spec: { axesSpec: [], kind: 'PColumn', valueType: item.type, name },\n annotations: undefined,\n isSubsetFilter: false,\n isDiscreteFilter: item.type === 'String'\n };\n }\n return {\n kind: 'axis',\n name: '',\n label: ' ',\n type: type,\n spec: { type, name },\n mustBeConsumed: false,\n dividable: false,\n annotations: undefined,\n isSubsetFilter: false,\n isDiscreteFilter: type === 'String',\n isNonHomogenous: false,\n parentSources: [],\n };\n}\n\nexport function getStateCopy<State extends InputState>(state: State): State {\n return {\n type: state.type,\n components: { ...state.components },\n dividedAxes: { ...state.dividedAxes },\n } as State;\n}\n\nfunction normalizeFilterReference(v: number, valueType: ValueType): number {\n if (valueType === 'Int' || valueType === 'Long') {\n return Math.floor(v);\n }\n return v;\n}\nexport function getFilterFromState(state: SelectorStateFilter): PTableRecordSingleValueFilterV2[] {\n const { selectedSource, type, selectedFilterRange, selectedFilterValues } = state;\n const id = columnOrAxisIdFromString(selectedSource);\n if (!id) {\n throw Error('Empty source selected');\n }\n if (type === 'range') {\n const rangeFilters: PTableRecordSingleValueFilterV2[] = [];\n if (selectedFilterRange?.max !== undefined) {\n rangeFilters.push({\n type: 'bySingleColumnV2' as const,\n column: isAxisId(id) ? { type: 'axis' as const, id: id.toPFrameId() } : { type: 'column' as const, id: id.name as PObjectId },\n predicate: {\n operator: 'LessOrEqual',\n reference: normalizeFilterReference(selectedFilterRange.max, id.type)\n },\n })\n }\n if (selectedFilterRange?.min !== undefined) {\n rangeFilters.push({\n type: 'bySingleColumnV2' as const,\n column: isAxisId(id) ? { type: 'axis' as const, id: id.toPFrameId() } : { type: 'column' as const, id: id.name as PObjectId },\n predicate: {\n operator: 'GreaterOrEqual',\n reference: normalizeFilterReference(selectedFilterRange.min, id.type)\n },\n })\n }\n return rangeFilters;\n } else if (type === 'subset') {\n return [\n {\n type: 'bySingleColumnV2' as const,\n column: isAxisId(id) ? { type: 'axis' as const, id: id.toPFrameId() } : { type: 'column' as const, id: id.name as PObjectId },\n predicate: {\n operator: 'Not',\n operand: { operator: 'IsNA' }\n },\n },\n ]\n }\n if (typeof selectedFilterValues === 'undefined' || !selectedFilterValues.length) {\n return [];\n }\n return [\n {\n type: 'bySingleColumnV2' as const,\n column: isAxisId(id) ? { type: 'axis' as const, id: id.toPFrameId() } : {\n type: 'column' as const,\n id: id.name as PObjectId,\n },\n predicate: {\n operator: 'Or',\n operands: selectedFilterValues.map((v) => {\n const reference = id.type === 'String'\n ? String(v)\n : (Number(v) as string | number);\n return {\n operator: 'Equal',\n reference\n }\n })\n }\n },\n ];\n}\n\nexport function getFiltersFromStates(states: SelectorStateFilter[]): PTableRecordSingleValueFilterV2[] {\n const result: PTableRecordSingleValueFilterV2[] = [];\n for (const state of states) {\n result.push(...getFilterFromState(state));\n }\n return result;\n}\n\nexport function getGlobalId(spec: AxisSpec): string {\n const name = spec.name;\n const domain = spec.domain;\n return canonicalize({ name, domain })!;\n}\n\nasync function getAxisSpecFromParents(store: DataStore, axisId: AxisId, parentSources: ColumnOrAxisIdString[]) {\n for (const parentSource of parentSources) {\n const parentId = columnOrAxisIdFromString(parentSource);\n if (isColumnId(parentId)) {\n const columnSpec = await store.pFrameProvider.getColumnSpecById(parentId);\n const spec = (columnSpec?.axesSpec ?? []).find(\n s => AxisId.fromAxisSpec(s).toCanonicalString() === axisId.toCanonicalString(),\n );\n if (spec) {\n return spec;\n }\n }\n }\n return null;\n}\n\nconst LABEL_COLUMN_NAME = 'pl7.app/label';\n\nexport async function getColumnOrAxisValueLabelsId(\n store: DataStore,\n selectedSource: ColumnOrAxisIdString,\n parentSources: ColumnOrAxisIdString[],\n): Promise<ColumnId | undefined> {\n const id = columnOrAxisIdFromString(selectedSource);\n if (isColumnId(id)) {\n return undefined;\n }\n async function getAxisGlobalId(axisId: AxisId) {\n const spec = await getAxisSpecFromParents(store, axisId, parentSources);\n return spec ? getGlobalId(spec) : null;\n }\n const labelColumns = await store.pFrameProvider.getColumnsFull([], false, undefined, [LABEL_COLUMN_NAME]);\n const sourceGlobalId = await getAxisGlobalId(id);\n const labelColumn = labelColumns.find(({ spec }) => {\n return spec && spec.axesSpec.length === 1 && getGlobalId(spec.axesSpec[0]) === sourceGlobalId;\n });\n return labelColumn ? new ColumnId({ name: labelColumn.columnId, type: labelColumn.spec.valueType }) : undefined;\n}\n\nexport async function getColumnOrAxisSpec(\n store: DataStore,\n selectedSource: ColumnOrAxisIdString,\n parentSources: ColumnOrAxisIdString[],\n) {\n const selectedId = columnOrAxisIdFromString(selectedSource);\n const labelsColumn = await getColumnOrAxisValueLabelsId(store, selectedSource, parentSources);\n\n let spec: AxisSpec | PColumnSpec | null;\n if (isColumnId(selectedId)) {\n spec = await store.pFrameProvider.getColumnSpecById(labelsColumn ?? selectedId);\n } else {\n spec = labelsColumn\n ? await store.pFrameProvider.getColumnSpecById(labelsColumn)\n : await getAxisSpecFromParents(store, selectedId, parentSources);\n }\n return spec;\n}\n\nexport async function getColumnOrAxisLabel(\n store: DataStore,\n selectedSource: ColumnOrAxisIdString,\n parentSources: ColumnOrAxisIdString[],\n) {\n const spec = await getColumnOrAxisSpec(store, selectedSource, parentSources);\n if (!spec) {\n return '';\n }\n const label = readAnnotation(spec, Annotation.Label) ?? spec.name;\n return store.labelsModifier(spec.name, label);\n}\n\nexport function axisIsNonHomogenous(spec: AxisSpec) {\n const axisNature = readAnnotation(spec, Annotation.AxisNature);\n return Boolean(axisNature) && axisNature !== 'homogenous' && axisNature !== 'homogeneous';\n}\n\nexport function dataColumnPredicateDefault(spec: PColumnSpec) {\n return !spec.name.includes('metadata') && !readAnnotation(spec, Annotation.Graph.IsVirtual) && !readAnnotation(spec, Annotation.IsSubset)\n}\n\nexport async function getAxesSpecsFromSources(store: DataStore, idStrs: ColumnOrAxisIdString[]): Promise<AxisSpec[]> {\n const set = new Set<ColumnOrAxisIdString>();\n const result: AxisSpec[] = [];\n for (const idStr of idStrs) {\n const id = columnOrAxisIdFromString(idStr);\n if (isColumnId(id)) {\n const spec = await store.pFrameProvider.getColumnSpecById(id);\n if (!spec) {\n continue;\n }\n spec.axesSpec.forEach(axisSpec => {\n const id = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n if (!set.has(id)) {\n set.add(id);\n result.push(axisSpec);\n }\n })\n }\n }\n return result;\n}\n\nexport async function createLinkerMap(store: DemoDataStore) {\n const allLinkerColumns = await store.pFrameProvider.getColumnsFull(\n [], false, undefined, undefined,\n { [Annotation.IsLinkerColumn]: 'true' },\n );\n\n return LinkerMap.fromColumns(allLinkerColumns);\n}\n\nexport type MultipliesByMap = Map<ColumnOrAxisIdString, Map<ColumnOrAxisIdString, { parentSource: ColumnOrAxisIdString, spec: AxisSpec }>>;\nexport async function createMultipliesByMap(store: DemoDataStore): Promise<MultipliesByMap> {\n const allMultiplyingColumns = await store.pFrameProvider.getColumnsFull(\n [], false, undefined, undefined, undefined, [Annotation.MultipliesBy]\n );\n\n const result: MultipliesByMap = new Map();\n\n for (const multiplyingColumn of allMultiplyingColumns) {\n const axes = multiplyingColumn.spec.axesSpec;\n const annotationData = readAnnotation(multiplyingColumn.spec, Annotation.MultipliesBy);\n if (axes.length !== 2 || !annotationData) {\n continue;\n }\n const columnIdStr = new ColumnId({ name: multiplyingColumn.columnId, type: multiplyingColumn.spec.valueType }).toCanonicalString();\n try {\n const [multipliesBy] = JSON.parse(annotationData);\n const [axis1, axis2] = axes;\n const id1 = AxisId.fromAxisSpec(axis1).toCanonicalString();\n const id2 = AxisId.fromAxisSpec(axis2).toCanonicalString();\n if (axis1.name === multipliesBy) {\n if (!result.get(id2)) {\n result.set(id2, new Map());\n }\n result.get(id2)!.set(id1, { parentSource: columnIdStr, spec: axis1 })\n } else if (axis2.name === multipliesBy) {\n if (!result.get(id1)) {\n result.set(id1, new Map());\n }\n result.get(id1)!.set(id2, { parentSource: columnIdStr, spec: axis2 });\n }\n } catch (e) {\n console.error(`Wrong format for annotation ${Annotation.MultipliesBy}: ${multiplyingColumn.spec?.annotations?.[Annotation.MultipliesBy]}`);\n }\n }\n return result;\n}\n\nfunction getLinkerColumnsForAxis(\n secondaryAxisId: AxisId,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n dataInputAxes: AxisSpec[],\n) {\n const axisIdStr = secondaryAxisId.toCanonicalString();\n const dataInputAxesSet = new Set(dataInputAxes.map(axisSpec => AxisId.fromAxisSpec(axisSpec).toCanonicalString()));\n const dataInputAxesIds = [...dataInputAxesSet];\n\n // check multipliesBy columns\n const dataAxesIdWithLink = dataInputAxesIds.find((dataInputId) => multipliesByMap.get(dataInputId)?.get(axisIdStr));\n const linkerEl = dataAxesIdWithLink ? multipliesByMap.get(dataAxesIdWithLink)?.get(axisIdStr) : null;\n if (linkerEl) {\n // we need only 1 multipliesBy column to link single axis\n return [columnOrAxisIdFromString(linkerEl.parentSource)];\n }\n\n const normalizedDataAxes = getNormalizedAxesList(dataInputAxes);\n // else check regular linkers\n const axesAvailableWithLinkers = getNormalizedAxesList(\n linkerMap.getReachableByLinkersAxesFromAxes(normalizedDataAxes)\n );\n const axisSpec = axesAvailableWithLinkers.find((spec) => AxisId.fromAxisSpec(spec).toCanonicalString() === axisIdStr);\n\n if (!axisSpec) {\n return [];\n }\n return linkerMap.getLinkerColumnsForAxes({ from: normalizedDataAxes, to: [axisSpec], throwWhenNoLinkExists: false }).map(v => new ColumnId({ name: v.columnId, type: v.spec.valueType }));\n}\nasync function getLinkerColumnsForColumn(\n secondaryColumnId: ColumnId,\n store: DataStore,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n dataInputAxes: AxisSpec[],\n) {\n const secondaryColumnSpec = await store.pFrameProvider.getColumnSpecById(secondaryColumnId);\n if (!secondaryColumnSpec) {\n return [];\n }\n let linkers: ColumnId[] = [];\n const dataInputAxesSet = new Set(dataInputAxes.map(axisSpec => AxisId.fromAxisSpec(axisSpec).toCanonicalString()));\n const dataInputAxesIds = [...dataInputAxesSet];\n const rightPartAxes = secondaryColumnSpec.axesSpec.filter((axisSpec) => { // right part from column minus 'fixedAxes'\n const axisId = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n if (dataInputAxesSet.has(axisId)) {\n return false;\n }\n const dataAxesIdWithLink = dataInputAxesIds.find((dataInputId) => multipliesByMap.get(dataInputId)?.get(axisId));\n const linkerEl = dataAxesIdWithLink ? multipliesByMap.get(dataAxesIdWithLink)?.get(axisId) : null;\n if (linkerEl) {\n linkers.push(columnOrAxisIdFromString(linkerEl.parentSource));\n return false;\n }\n return true;\n });\n\n const from = getNormalizedAxesList(dataInputAxes);\n const to = getNormalizedAxesList(rightPartAxes);\n\n linkers = linkers.concat(linkerMap.getLinkerColumnsForAxes({ from, to, throwWhenNoLinkExists: false }).map(v => new ColumnId({ name: v.columnId, type: v.spec.valueType })));\n return linkers;\n}\nexport async function getLinkerColumnsForSource(\n store: DataStore,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n dataInputAxes: AxisSpec[],\n secondarySource: ColumnOrAxisIdString,\n): Promise<ColumnId[]> {\n const columnOrAxisId = columnOrAxisIdFromString(secondarySource);\n return isColumnId(columnOrAxisId)\n ? getLinkerColumnsForColumn(columnOrAxisId, store, linkerMap, multipliesByMap, dataInputAxes)\n : getLinkerColumnsForAxis(columnOrAxisId, linkerMap, multipliesByMap, dataInputAxes);\n}\n\nexport function getNotAllowedAxes(\n columnSpec: PColumnSpec,\n dataInputAxesList: AxisSpec[], // axes from data-input\n linkerMap: LinkerMap, // composite linkers, without chains\n multipliesByMap: MultipliesByMap,\n): AxisSpec[] {\n const dataInputAxesSet = new Set(dataInputAxesList.map((v) => AxisId.fromAxisSpec(v).toCanonicalString()))\n const dataInputAxesIds = [...dataInputAxesSet];\n\n // check non-linkable axes only from this column\n const allColumnAxes = getNormalizedAxesList(columnSpec.axesSpec);\n // remove from the column axes - axes from data inputs\n const rightPartAxes = allColumnAxes.filter( // axes in data axes list are allowed, check the rest\n (axisSpec: AxisSpec) => !dataInputAxesSet.has(AxisId.fromAxisSpec(axisSpec).toCanonicalString())\n );\n\n const sourceAxes = getNormalizedAxesList(dataInputAxesList);\n const targetAxes = LinkerMap.getAxesRoots(rightPartAxes);\n\n const nonLinkableByLinkerMap = linkerMap.getNonLinkableAxes(sourceAxes, targetAxes); // rest probably reduced\n const filtered = nonLinkableByLinkerMap.filter((axisSpec) => {\n const freeId = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n return !dataInputAxesIds.some((id) => multipliesByMap.get(id)?.get(freeId) !== undefined);\n });\n return filtered;\n}\n\nexport function createHighlightColumn(highlightSelectedStates: SelectorStateFilter[], data: TableOuterJoinResult) {\n const dataLength = data.columnsData[Object.keys(data.columnsData)[0]].length;\n const highlightColumn = new Int32Array(dataLength).fill(0);\n const notEmptyHighlightStates = highlightSelectedStates.filter(s =>\n s.selectedFilterRange && (s.selectedFilterRange.min !== undefined || s.selectedFilterRange.max !== undefined) ||\n s.selectedFilterValues && s.selectedFilterValues.length ||\n s.type === 'subset'\n )\n for (let rowIdx = 0; rowIdx < dataLength; rowIdx++) {\n let res = notEmptyHighlightStates.length === 0; // fill with 1 if nothing selected in highlighting filters\n for (let i = 0; i < notEmptyHighlightStates.length; i++) {\n const { selectedSource, selectedFilterValues, selectedFilterRange, type } = highlightSelectedStates[i];\n const sourceId = columnOrAxisIdFromString(selectedSource);\n const value = (isColumnId(sourceId) ? data.columnsData[selectedSource] : data.axesData[selectedSource])[rowIdx];\n if (selectedFilterValues !== undefined && selectedFilterValues.length) {\n res = res || selectedFilterValues.includes(String(value));\n }\n if (selectedFilterRange !== undefined && (selectedFilterRange.min !== undefined || selectedFilterRange.max !== undefined) && typeof value === 'number') {\n let rangeResult = true;\n if (selectedFilterRange.min !== undefined) {\n rangeResult = rangeResult && value >= selectedFilterRange.min;\n }\n if (selectedFilterRange.max !== undefined) {\n rangeResult = rangeResult && value <= selectedFilterRange.max;\n }\n res = res || rangeResult;\n }\n if (type === 'subset') {\n res = res || (value !== null && value !== undefined);\n }\n }\n if (res) {\n highlightColumn[rowIdx] = 1;\n }\n }\n return highlightColumn as unknown as PValue[];\n}\n\nexport function getFormat(spec: PColumnSpec | AxisSpec | null): string {\n return spec ? readAnnotation(spec, Annotation.Format) ?? '.0%' : '.0%'\n}"],"names":["getDefaultInfo","sourceIdStr","item","columnOrAxisIdFromString","name","type","isColumnId","getStateCopy","state","normalizeFilterReference","v","valueType","getFilterFromState","selectedSource","selectedFilterRange","selectedFilterValues","id","rangeFilters","isAxisId","getFiltersFromStates","states","result","getGlobalId","spec","domain","canonicalize","getAxisSpecFromParents","store","axisId","parentSources","parentSource","parentId","columnSpec","s","AxisId","LABEL_COLUMN_NAME","getColumnOrAxisValueLabelsId","getAxisGlobalId","labelColumns","sourceGlobalId","labelColumn","ColumnId","getColumnOrAxisSpec","selectedId","labelsColumn","getColumnOrAxisLabel","label","readAnnotation","Annotation","axisIsNonHomogenous","axisNature","dataColumnPredicateDefault","getAxesSpecsFromSources","idStrs","set","idStr","axisSpec","createLinkerMap","allLinkerColumns","LinkerMap","createMultipliesByMap","allMultiplyingColumns","multiplyingColumn","axes","annotationData","columnIdStr","multipliesBy","axis1","axis2","id1","id2","_b","_a","getLinkerColumnsForAxis","secondaryAxisId","linkerMap","multipliesByMap","dataInputAxes","axisIdStr","dataAxesIdWithLink","dataInputId","linkerEl","normalizedDataAxes","getNormalizedAxesList","getLinkerColumnsForColumn","secondaryColumnId","secondaryColumnSpec","linkers","dataInputAxesSet","dataInputAxesIds","rightPartAxes","from","to","u","getLinkerColumnsForSource","secondarySource","columnOrAxisId","getNotAllowedAxes","dataInputAxesList","sourceAxes","targetAxes","freeId","createHighlightColumn","highlightSelectedStates","data","dataLength","highlightColumn","notEmptyHighlightStates","rowIdx","res","i","sourceId","value","rangeResult","getFormat"],"mappings":"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","x_google_ignoreList":[0]}