@milaboratories/miplots4 1.0.131 → 1.0.133

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 (83) hide show
  1. package/dist/AbstractChart.d.ts +2 -0
  2. package/dist/AbstractChart.d.ts.map +1 -1
  3. package/dist/AbstractChart.js +5 -4
  4. package/dist/AbstractChart.js.map +1 -1
  5. package/dist/MiPlots.d.ts +1 -0
  6. package/dist/MiPlots.d.ts.map +1 -1
  7. package/dist/MiPlots.js +3 -0
  8. package/dist/MiPlots.js.map +1 -1
  9. package/dist/bubble/index.d.ts.map +1 -1
  10. package/dist/bubble/index.js +22 -22
  11. package/dist/bubble/index.js.map +1 -1
  12. package/dist/common/Error.d.ts +1 -1
  13. package/dist/common/Error.d.ts.map +1 -1
  14. package/dist/common/Error.js +4 -22
  15. package/dist/common/Error.js.map +1 -1
  16. package/dist/dendro/index.d.ts.map +1 -1
  17. package/dist/dendro/index.js +25 -25
  18. package/dist/dendro/index.js.map +1 -1
  19. package/dist/discrete/index.d.ts.map +1 -1
  20. package/dist/discrete/index.js +49 -49
  21. package/dist/discrete/index.js.map +1 -1
  22. package/dist/heatmap/components/Annotations/Annotation.d.ts.map +1 -1
  23. package/dist/heatmap/components/Annotations/Annotation.js +34 -33
  24. package/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
  25. package/dist/heatmap/components/Chart.d.ts.map +1 -1
  26. package/dist/heatmap/components/Chart.js +90 -85
  27. package/dist/heatmap/components/Chart.js.map +1 -1
  28. package/dist/heatmap/components/types.d.ts +2 -1
  29. package/dist/heatmap/components/types.d.ts.map +1 -1
  30. package/dist/heatmap/index.d.ts.map +1 -1
  31. package/dist/heatmap/index.js +18 -18
  32. package/dist/heatmap/index.js.map +1 -1
  33. package/dist/histogram/index.d.ts.map +1 -1
  34. package/dist/histogram/index.js +22 -22
  35. package/dist/histogram/index.js.map +1 -1
  36. package/dist/scatterplot/ScatterplotSettingsImpl.d.ts +6 -3
  37. package/dist/scatterplot/ScatterplotSettingsImpl.d.ts.map +1 -1
  38. package/dist/scatterplot/ScatterplotSettingsImpl.js +56 -57
  39. package/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
  40. package/dist/scatterplot/dots.d.ts +2 -1
  41. package/dist/scatterplot/dots.d.ts.map +1 -1
  42. package/dist/scatterplot/dots.js +24 -27
  43. package/dist/scatterplot/dots.js.map +1 -1
  44. package/dist/scatterplot/getLayersData.d.ts.map +1 -1
  45. package/dist/scatterplot/getLayersData.js +15 -12
  46. package/dist/scatterplot/getLayersData.js.map +1 -1
  47. package/dist/scatterplot/index.d.ts.map +1 -1
  48. package/dist/scatterplot/index.js +66 -72
  49. package/dist/scatterplot/index.js.map +1 -1
  50. package/dist/scatterplot/utils/createLegendInfo.d.ts +3 -3
  51. package/dist/scatterplot/utils/createLegendInfo.d.ts.map +1 -1
  52. package/dist/scatterplot/utils/createLegendInfo.js +44 -39
  53. package/dist/scatterplot/utils/createLegendInfo.js.map +1 -1
  54. package/dist/scatterplot/utils/sortDotsByGrouping.d.ts +8 -0
  55. package/dist/scatterplot/utils/sortDotsByGrouping.d.ts.map +1 -0
  56. package/dist/scatterplot/utils/sortDotsByGrouping.js +18 -0
  57. package/dist/scatterplot/utils/sortDotsByGrouping.js.map +1 -0
  58. package/dist/scatterplot-umap/SettingsImpl.d.ts +6 -3
  59. package/dist/scatterplot-umap/SettingsImpl.d.ts.map +1 -1
  60. package/dist/scatterplot-umap/SettingsImpl.js +38 -39
  61. package/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
  62. package/dist/scatterplot-umap/index.d.ts.map +1 -1
  63. package/dist/scatterplot-umap/index.js +72 -68
  64. package/dist/scatterplot-umap/index.js.map +1 -1
  65. package/dist/types/bubble.d.ts +12 -12
  66. package/dist/types/dendro.d.ts +8 -8
  67. package/dist/types/discrete.d.ts +20 -20
  68. package/dist/types/heatmap.d.ts +28 -28
  69. package/dist/types/histogram.d.ts +22 -22
  70. package/dist/types/scatterplot-umap.d.ts +126 -76
  71. package/dist/types/scatterplot-umap.d.ts.map +1 -1
  72. package/dist/types/scatterplot-umap.js +22 -16
  73. package/dist/types/scatterplot-umap.js.map +1 -1
  74. package/dist/types/scatterplot.d.ts +126 -76
  75. package/dist/types/scatterplot.d.ts.map +1 -1
  76. package/dist/types/scatterplot.js +16 -10
  77. package/dist/types/scatterplot.js.map +1 -1
  78. package/dist/utils/arraysAreDifferent.d.ts +2 -0
  79. package/dist/utils/arraysAreDifferent.d.ts.map +1 -0
  80. package/dist/utils/arraysAreDifferent.js +7 -0
  81. package/dist/utils/arraysAreDifferent.js.map +1 -0
  82. package/dist/utils/getChartEdgeSides.d.ts +1 -1
  83. package/package.json +1 -1
@@ -1,13 +1,13 @@
1
1
  var R = Object.defineProperty;
2
- var K = (l, o, e) => o in l ? R(l, o, { enumerable: !0, configurable: !0, writable: !0, value: e }) : l[o] = e;
3
- var D = (l, o, e) => K(l, typeof o != "symbol" ? o + "" : o, e);
4
- import { l as E } from "../node_modules/lodash/lodash.js";
2
+ var K = (l, n, e) => n in l ? R(l, n, { enumerable: !0, configurable: !0, writable: !0, value: e }) : l[n] = e;
3
+ var D = (l, n, e) => K(l, typeof n != "symbol" ? n + "" : n, e);
4
+ import { l as _ } from "../node_modules/lodash/lodash.js";
5
5
  import { renderToString as x } from "../node_modules/react-dom/server.browser.js";
6
6
  import { AbstractChart as T } from "../AbstractChart.js";
7
7
  import { NO_GROUPED as C } from "../DataFrame.js";
8
8
  import P from "./ChartRenderer.js";
9
9
  import { MAX_GROUPS_COUNT as w, MAX_FACETS_COUNT as U } from "./constants.js";
10
- import { DiscreteSettingsImpl as B, StatLayer as L, BoxLayer as O, ViolinLayer as I, DotLayer as F, LineLayer as V, ErrorBarLayer as $, BarLayer as j, StackedBarLayer as H, BinnedDotsLayer as M, PairedPointsLayer as X, SinaLayer as q, LogoPlotLayer as z } from "./DiscreteSettingsImpl.js";
10
+ import { DiscreteSettingsImpl as E, StatLayer as L, BoxLayer as O, ViolinLayer as I, DotLayer as F, LineLayer as V, ErrorBarLayer as $, BarLayer as j, StackedBarLayer as H, BinnedDotsLayer as M, PairedPointsLayer as X, SinaLayer as q, LogoPlotLayer as z } from "./DiscreteSettingsImpl.js";
11
11
  import { getBoxesData as J } from "./layers/boxes.js";
12
12
  import { getViolinsData as Q } from "./layers/violins.js";
13
13
  import { getSinaData as W } from "./layers/sina.js";
@@ -17,27 +17,27 @@ import { getErrorBarsData as tt } from "./layers/errorbars.js";
17
17
  import { getBarsData as at } from "./layers/bar.js";
18
18
  import { getStackedBarsData as et } from "./layers/stackedBar.js";
19
19
  import { getBinnedDotsData as rt } from "./layers/binnedDots.js";
20
- import { getPairedPointsData as nt } from "./layers/pairedPoints.js";
21
- import { getLogoData as ot } from "./layers/logo.js";
20
+ import { getPairedPointsData as ot } from "./layers/pairedPoints.js";
21
+ import { getLogoData as nt } from "./layers/logo.js";
22
22
  import { getStatsData as st } from "./layers/stats/index.js";
23
- import { getFacetStringKey as v } from "./utils/getFacetStringKey.js";
24
- function S(l, o, e = null) {
25
- const t = o.value, n = l.getColumnCategories(t);
26
- return E.intersection(e ?? n, n).map(String);
23
+ import { getFacetStringKey as B } from "./utils/getFacetStringKey.js";
24
+ function v(l, n, e = null) {
25
+ const t = n.value, o = l.getColumnCategories(t);
26
+ return _.intersection(e ?? o, o).map(String);
27
27
  }
28
- function _(l) {
28
+ function S(l) {
29
29
  if (!l.length)
30
30
  return [];
31
- let o = [[]];
31
+ let n = [[]];
32
32
  return l.forEach((e) => {
33
33
  const t = [];
34
- e.forEach((n) => {
35
- t.push(...o.map((s) => [...s, n]));
36
- }), o = t;
37
- }), o;
34
+ e.forEach((o) => {
35
+ t.push(...n.map((s) => [...s, o]));
36
+ }), n = t;
37
+ }), n;
38
38
  }
39
- function G(l, o) {
40
- if (!o)
39
+ function G(l, n) {
40
+ if (!n)
41
41
  return {
42
42
  keys: ["null"],
43
43
  value: null,
@@ -45,35 +45,35 @@ function G(l, o) {
45
45
  valueLabels: { null: "" },
46
46
  inheritedAes: null
47
47
  };
48
- const e = o.columnName.value, t = o.columnName.valueLabels, n = l.getColumnCategories(e, !1), s = (r) => t ? String(
48
+ const e = n.columnName.value, t = n.columnName.valueLabels, o = l.getColumnCategories(e, !1), s = (r) => t ? String(
49
49
  l.getColumnValue(
50
50
  t,
51
51
  l.getColumnCategoryRowIndex(e, r)
52
52
  )
53
- ) : r, i = l.getColumnCategories(e, !o.allowNullGroup);
53
+ ) : r, i = l.getColumnCategories(e, !n.allowNullGroup);
54
54
  return {
55
- keys: o.order === void 0 ? i : E.intersection(o.order.map(String), i),
55
+ keys: n.order === void 0 ? i : _.intersection(n.order.map(String), i),
56
56
  value: e,
57
- label: o.columnName.label ?? e,
58
- valueLabels: n.reduce((r, u) => (r[u] = s(u), r), {}),
59
- inheritedAes: o.inheritedAes ?? null
57
+ label: n.columnName.label ?? e,
58
+ valueLabels: o.reduce((r, u) => (r[u] = s(u), r), {}),
59
+ inheritedAes: n.inheritedAes ?? null
60
60
  };
61
61
  }
62
62
  class bt extends T {
63
- constructor(e, t, n) {
63
+ constructor(e, t, o) {
64
64
  super(e, t);
65
65
  D(this, "settings");
66
66
  D(this, "chartRenderer", new P());
67
67
  D(this, "onTooltipHintSwitch", () => {
68
68
  });
69
69
  D(this, "calculatedData", null);
70
- this.settings = new B(t), n && (this.onTooltipHintSwitch = n[0]);
70
+ this.settings = new E(t), o && (this.onTooltipHintSwitch = o[0]);
71
71
  }
72
72
  mount(e) {
73
73
  try {
74
- this.chartRenderer.init(e), this._updateData(), this._updateChart();
74
+ this.chartRenderer.init(e), this._updateData(), this._updateChart(), this.hasError = !1;
75
75
  } catch (t) {
76
- t instanceof Error && (this.chartRenderer.renderError(t.message), console.error(t));
76
+ this.hasError = !0, t instanceof Error && (this.chartRenderer.renderError(t.message), console.error(t));
77
77
  }
78
78
  }
79
79
  unmount() {
@@ -81,10 +81,10 @@ class bt extends T {
81
81
  }
82
82
  updateSettingsAndData(e, t) {
83
83
  try {
84
- const n = this.settings, s = this.data;
85
- this.settings = new B(t), this.data = e, this._needUpdateCalculatedDataBySettings(n, this.settings) || this._needUpdateCalculatedDataByData(s, this.data) ? this._updateData() : this._updateAesInData(), this._updateChart();
86
- } catch (n) {
87
- n instanceof Error && (this.chartRenderer.renderError(n.message), console.error(n));
84
+ const o = this.settings, s = this.data;
85
+ this.settings = new E(t), this.data = e, this._needUpdateCalculatedDataBySettings(o, this.settings) || this._needUpdateCalculatedDataByData(s, this.data) ? this._updateData() : this._updateAesInData(), this._updateChart(), this.hasError = !1;
86
+ } catch (o) {
87
+ this.hasError = !0, o instanceof Error && (this.chartRenderer.renderError(o.message), console.error(o));
88
88
  }
89
89
  }
90
90
  updateChartState(e, t) {
@@ -94,29 +94,29 @@ class bt extends T {
94
94
  return this._updateChart(), x(this.chartRenderer.component);
95
95
  }
96
96
  _needUpdateCalculatedDataBySettings(e, t) {
97
- var n, s, i, c, r, u, d, m;
98
- return e.chartSettings.yAxis.scale !== t.chartSettings.yAxis.scale || (((n = e.primaryGrouping) == null ? void 0 : n.columnName.value) ?? "") !== (((s = t.primaryGrouping) == null ? void 0 : s.columnName.value) ?? "") || (((i = e.secondaryGrouping) == null ? void 0 : i.columnName.value) ?? "") !== (((c = t.secondaryGrouping) == null ? void 0 : c.columnName.value) ?? "") || (((r = e.primaryGrouping) == null ? void 0 : r.allowNullGroup) ?? "") !== (((u = t.primaryGrouping) == null ? void 0 : u.allowNullGroup) ?? "") || (((d = e.secondaryGrouping) == null ? void 0 : d.allowNullGroup) ?? "") !== (((m = t.secondaryGrouping) == null ? void 0 : m.allowNullGroup) ?? "") || e.facetBy.some((y, f) => {
97
+ var o, s, i, c, r, u, d, m;
98
+ return e.chartSettings.yAxis.scale !== t.chartSettings.yAxis.scale || (((o = e.primaryGrouping) == null ? void 0 : o.columnName.value) ?? "") !== (((s = t.primaryGrouping) == null ? void 0 : s.columnName.value) ?? "") || (((i = e.secondaryGrouping) == null ? void 0 : i.columnName.value) ?? "") !== (((c = t.secondaryGrouping) == null ? void 0 : c.columnName.value) ?? "") || (((r = e.primaryGrouping) == null ? void 0 : r.allowNullGroup) ?? "") !== (((u = t.primaryGrouping) == null ? void 0 : u.allowNullGroup) ?? "") || (((d = e.secondaryGrouping) == null ? void 0 : d.allowNullGroup) ?? "") !== (((m = t.secondaryGrouping) == null ? void 0 : m.allowNullGroup) ?? "") || e.facetBy.some((y, f) => {
99
99
  var p;
100
100
  return y.value !== ((p = t.facetBy[f]) == null ? void 0 : p.value);
101
101
  }) || e.layers.length !== t.layers.length || e.layers.some((y, f) => !y.isEqualForCalculation(t.layers[f]));
102
102
  }
103
103
  _needUpdateCalculatedDataByData(e, t) {
104
- const n = Object.keys(e.data), s = Object.keys(t.data);
105
- return e.id !== t.id || n.length !== s.length || n.some((i) => {
104
+ const o = Object.keys(e.data), s = Object.keys(t.data);
105
+ return e.id !== t.id || o.length !== s.length || o.some((i) => {
106
106
  var c;
107
107
  return e.data[i].length !== ((c = t.data[i]) == null ? void 0 : c.length);
108
108
  });
109
109
  }
110
110
  _updateData() {
111
- const { chartSettings: e, y: t, keyColumn: n, facetBy: s, layers: i, facetSettings: c } = this.settings, { yAxis: r } = e, u = this.data.getColumn(t.value).every((a) => a === null || !(Number(a) < 0)), d = G(this.data, this.settings.primaryGrouping), m = G(this.data, this.settings.secondaryGrouping), y = s.map((a) => a.value), f = i.some((a) => a.type === "logo" || a.type === "bar");
111
+ const { chartSettings: e, y: t, keyColumn: o, facetBy: s, layers: i, facetSettings: c } = this.settings, { yAxis: r } = e, u = this.data.getColumn(t.value).every((a) => a === null || !(Number(a) < 0)), d = G(this.data, this.settings.primaryGrouping), m = G(this.data, this.settings.secondaryGrouping), y = s.map((a) => a.value), f = i.some((a) => a.type === "logo" || a.type === "bar");
112
112
  if (!f && d.keys.length > w)
113
113
  throw Error(`Too many primary groups (${d.keys.length})`);
114
114
  if (!f && m.keys.length > w)
115
115
  throw Error(`Too many secondary groups (${m.keys.length})`);
116
- const p = s.length ? _(
116
+ const p = s.length ? S(
117
117
  s.map((a) => {
118
118
  var g;
119
- return S(this.data, a, (g = c == null ? void 0 : c.order) == null ? void 0 : g[a.value]);
119
+ return v(this.data, a, (g = c == null ? void 0 : c.order) == null ? void 0 : g[a.value]);
120
120
  })
121
121
  ) : [[C]];
122
122
  if (p.length > U)
@@ -126,15 +126,15 @@ class bt extends T {
126
126
  facet: p,
127
127
  primary: d.value !== null ? d.keys : [C],
128
128
  secondary: m.value !== null ? m.keys : [C]
129
- }, b = h.facet.reduce((a, g) => (a[v(g)] = h.primary.filter(
129
+ }, b = h.facet.reduce((a, g) => (a[B(g)] = h.primary.filter(
130
130
  (A) => this.data.getRowsByGrouping([...g, A]).length > 0
131
131
  ).map(String), a), {}), N = i.filter((a) => !(a instanceof L)).map((a) => {
132
132
  if (a instanceof O)
133
- return J(a, h, this.data, t, n, r);
133
+ return J(a, h, this.data, t, o, r);
134
134
  if (a instanceof I)
135
135
  return Q(a, h, this.data, t, r);
136
136
  if (a instanceof F)
137
- return Y(a, h, this.data, t, r, n);
137
+ return Y(a, h, this.data, t, r, o);
138
138
  if (a instanceof V)
139
139
  return Z(a, h, this.data, t, r);
140
140
  if (a instanceof $)
@@ -146,11 +146,11 @@ class bt extends T {
146
146
  if (a instanceof M)
147
147
  return rt(a, h, this.data, t, r);
148
148
  if (a instanceof X)
149
- return nt(a, h, this.data, t, r);
149
+ return ot(a, h, this.data, t, r);
150
150
  if (a instanceof q)
151
151
  return W(a, h, this.data, t, r);
152
152
  if (a instanceof z)
153
- return ot(a, h, this.data, t);
153
+ return nt(a, h, this.data, t);
154
154
  throw new Error("Unknown layer type");
155
155
  }), k = i.filter((a) => a instanceof L).map((a) => {
156
156
  if (d.value === null)
@@ -170,22 +170,22 @@ class bt extends T {
170
170
  _updateAesInData() {
171
171
  if (this.calculatedData === null)
172
172
  return;
173
- const { layers: e, facetBy: t, primaryGrouping: n, secondaryGrouping: s, facetSettings: i } = this.settings, c = e.filter((r) => !(r instanceof L));
173
+ const { layers: e, facetBy: t, primaryGrouping: o, secondaryGrouping: s, facetSettings: i } = this.settings, c = e.filter((r) => !(r instanceof L));
174
174
  for (let r = 0; r < c.length; r++) {
175
175
  const u = c[r];
176
176
  "aes" in u && (this.calculatedData.layersData[r].aes = u.aes);
177
177
  }
178
- this.calculatedData.primaryGrouping = G(this.data, n), this.calculatedData.secondaryGrouping = G(this.data, s), this.calculatedData.facetKeyLists = t.length ? _(
178
+ this.calculatedData.primaryGrouping = G(this.data, o), this.calculatedData.secondaryGrouping = G(this.data, s), this.calculatedData.facetKeyLists = t.length ? S(
179
179
  t.map((r) => {
180
180
  var u;
181
- return S(this.data, r, (u = i == null ? void 0 : i.order) == null ? void 0 : u[r.value]);
181
+ return v(this.data, r, (u = i == null ? void 0 : i.order) == null ? void 0 : u[r.value]);
182
182
  })
183
183
  ) : [[C]];
184
184
  }
185
185
  _updateChart() {
186
186
  if (!this.calculatedData)
187
187
  return;
188
- const { id: e, chartSettings: t, keyColumn: n, facetSettings: s } = this.settings, i = this.calculatedData.facetKeyLists.map(v), c = this.calculatedData.facetKeyLists.map((r) => r.map((u) => u === C ? "null" : u));
188
+ const { id: e, chartSettings: t, keyColumn: o, facetSettings: s } = this.settings, i = this.calculatedData.facetKeyLists.map(B), c = this.calculatedData.facetKeyLists.map((r) => r.map((u) => u === C ? "null" : u));
189
189
  this.chartRenderer.render(
190
190
  this.data,
191
191
  e,
@@ -197,7 +197,7 @@ class bt extends T {
197
197
  c,
198
198
  this.calculatedData.layersData,
199
199
  this.calculatedData.statsLayersData,
200
- n,
200
+ o,
201
201
  this.calculatedData.nonEmptyGroupsByFacets,
202
202
  this.calculatedData.onlyPositive,
203
203
  this.onTooltipHintSwitch
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/discrete/index.ts"],"sourcesContent":["import { intersection } from 'lodash';\nimport { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame, GroupKey } from '../DataFrame';\nimport { NO_GROUPED } from '../DataFrame';\nimport type { Category, ColumnName, DataValue, DiscreteEventHandlers, DiscreteSettings, GroupingData } from '../types';\nimport ChartRenderer from './ChartRenderer';\nimport { MAX_FACETS_COUNT, MAX_GROUPS_COUNT } from './constants';\nimport {\n BarLayer,\n BinnedDotsLayer,\n BoxLayer,\n DiscreteSettingsImpl,\n DotLayer,\n ErrorBarLayer,\n LineLayer,\n LogoPlotLayer,\n PairedPointsLayer,\n SinaLayer,\n StackedBarLayer,\n StatLayer,\n ViolinLayer,\n} from './DiscreteSettingsImpl';\nimport {\n getBarsData,\n getBinnedDotsData,\n getBoxesData,\n getDotsData,\n getErrorBarsData,\n getLinesData,\n getPairedPointsData,\n getSinaData,\n getStackedBarsData,\n getStatsData,\n getViolinsData,\n} from './layers';\nimport { getLogoData } from './layers/logo';\nimport type { LayerData, StatsData } from './layers/types';\nimport { getFacetStringKey } from './utils/getFacetStringKey';\n\nfunction getGroupingKeys(data: DataFrame, column: ColumnName, order: DataValue[] | null = null) {\n const groupingColumn = column.value;\n const availableKeys = data.getColumnCategories(groupingColumn);\n return intersection(order ?? availableKeys, availableKeys).map(String);\n}\n\n// all combinations with 1 key from each list\nfunction getKeysCombinations(keysLists: string[][]) {\n if (!keysLists.length) {\n return [];\n }\n let result: string[][] = [[]];\n keysLists.forEach(keys => {\n const nextResult: string[][] = [];\n keys.forEach(key => {\n nextResult.push(...result.map(resultItem => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\n\nfunction getGroupingData(\n data: DataFrame,\n grouping: DiscreteSettingsImpl['primaryGrouping' | 'secondaryGrouping']\n): GroupingData {\n if (!grouping) {\n return {\n keys: ['null'],\n value: null,\n label: '',\n valueLabels: {null: ''},\n inheritedAes: null,\n };\n }\n\n const groupingColumnId = grouping.columnName.value;\n const groupingColumnLabelId = grouping.columnName.valueLabels;\n const categories = data.getColumnCategories(groupingColumnId, false);\n const getValueLabel = (category: Category) => {\n return groupingColumnLabelId \n ? String(\n data.getColumnValue(\n groupingColumnLabelId,\n data.getColumnCategoryRowIndex(groupingColumnId, category)\n )\n )\n : category;\n };\n \n const keys = data.getColumnCategories(groupingColumnId, !grouping.allowNullGroup);\n const orderedKeys = grouping.order === undefined ? keys : intersection(grouping.order.map(String), keys);\n\n return {\n keys: orderedKeys,\n value: groupingColumnId,\n label: grouping.columnName.label ?? groupingColumnId,\n valueLabels: categories.reduce((res: Record<string, string>, category: Category) => {\n res[category] = getValueLabel(category);\n return res;\n }, {}),\n inheritedAes: grouping.inheritedAes ?? null,\n };\n}\n\nexport class ChartDiscrete extends AbstractChart {\n settings: DiscreteSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n layersData: LayerData[];\n statsLayersData: StatsData[];\n primaryGrouping: GroupingData;\n secondaryGrouping: GroupingData;\n facetKeyLists: GroupKey[][];\n nonEmptyGroupsByFacets: Record<string, string[]>;\n onlyPositive: boolean;\n } | null = null;\n\n constructor(data: DataFrame, settings: DiscreteSettings, eventHandlers?: DiscreteEventHandlers) {\n super(data, settings);\n\n this.settings = new DiscreteSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers[0];\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: DiscreteSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new DiscreteSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for discrete');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: DiscreteSettingsImpl, settings: DiscreteSettingsImpl) {\n return (\n prevSettings.chartSettings.yAxis.scale !== settings.chartSettings.yAxis.scale ||\n (prevSettings.primaryGrouping?.columnName.value ?? '') !==\n (settings.primaryGrouping?.columnName.value ?? '') ||\n (prevSettings.secondaryGrouping?.columnName.value ?? '') !==\n (settings.secondaryGrouping?.columnName.value ?? '') ||\n (prevSettings.primaryGrouping?.allowNullGroup ?? '') !==\n (settings.primaryGrouping?.allowNullGroup ?? '') ||\n (prevSettings.secondaryGrouping?.allowNullGroup ?? '') !==\n (settings.secondaryGrouping?.allowNullGroup ?? '') ||\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => !l.isEqualForCalculation(settings.layers[idx] as typeof l))\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {chartSettings, y, keyColumn, facetBy, layers, facetSettings} = this.settings;\n const {yAxis} = chartSettings;\n\n const onlyPositive = this.data.getColumn(y.value).every(v => {\n return v === null || !(Number(v) < 0);\n });\n // console.info('only positive Y:', onlyPositive);\n\n const primaryGrouping = getGroupingData(this.data, this.settings.primaryGrouping);\n const secondaryGrouping = getGroupingData(this.data, this.settings.secondaryGrouping);\n const facetGroupingValues = facetBy.map(column => column.value);\n const hasLogoOrBarLayer = layers.some(l => l.type === 'logo' || l.type === 'bar');\n\n if (!hasLogoOrBarLayer && primaryGrouping.keys.length > MAX_GROUPS_COUNT) {\n throw Error(`Too many primary groups (${primaryGrouping.keys.length})`);\n }\n if (!hasLogoOrBarLayer && secondaryGrouping.keys.length > MAX_GROUPS_COUNT) {\n throw Error(`Too many secondary groups (${secondaryGrouping.keys.length})`);\n }\n\n // if facet created by more than 1 data column facet key contains all of them, and all keys are used in data grouping;\n // after data preparing we need only complex keys from concatenated strings\n const facetKeyLists:(GroupKey)[][] = facetBy.length\n ? getKeysCombinations(\n facetBy.map(column => getGroupingKeys(this.data, column, facetSettings?.order?.[column.value]))\n )\n : [[NO_GROUPED]];\n\n if (facetKeyLists.length > MAX_FACETS_COUNT) {\n throw Error(`Too many facets (${facetKeyLists.length})`);\n }\n this.data.setGrouping([...facetGroupingValues, primaryGrouping.value, secondaryGrouping.value]);\n const groupingKeys = {\n facet: facetKeyLists,\n primary: (primaryGrouping.value !== null ? primaryGrouping.keys : [NO_GROUPED]) as GroupKey[],\n secondary: (secondaryGrouping.value !== null ? secondaryGrouping.keys : [NO_GROUPED]) as GroupKey[],\n };\n\n const nonEmptyGroupsByFacets = groupingKeys.facet.reduce((res: Record<string, string[]>, facetKey) => {\n res[getFacetStringKey(facetKey)] = groupingKeys.primary.filter(\n primaryKey => this.data.getRowsByGrouping([...facetKey, primaryKey]).length > 0\n ).map(String);\n return res;\n }, {});\n\n const layersData = layers\n .filter(layer => !(layer instanceof StatLayer))\n .map(layer => {\n if (layer instanceof BoxLayer) {\n return getBoxesData(layer, groupingKeys, this.data, y, keyColumn, yAxis);\n }\n if (layer instanceof ViolinLayer) {\n return getViolinsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof DotLayer) {\n return getDotsData(layer, groupingKeys, this.data, y, yAxis, keyColumn);\n }\n if (layer instanceof LineLayer) {\n return getLinesData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof ErrorBarLayer) {\n return getErrorBarsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof BarLayer) {\n return getBarsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof StackedBarLayer) {\n return getStackedBarsData(layer, groupingKeys, this.data, y);\n }\n if (layer instanceof BinnedDotsLayer) {\n return getBinnedDotsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof PairedPointsLayer) {\n return getPairedPointsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof SinaLayer) {\n return getSinaData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof LogoPlotLayer) {\n return getLogoData(layer, groupingKeys, this.data, y);\n }\n throw new Error('Unknown layer type');\n });\n const statsLayersData = layers\n .filter(layer => layer instanceof StatLayer)\n .map(layer => {\n if (primaryGrouping.value === null) {\n throw new Error('Cannot calculate p-value without data grouping');\n }\n return getStatsData(layer as StatLayer, groupingKeys.facet, groupingKeys.primary, y, this.data);\n });\n this.calculatedData = {\n layersData,\n statsLayersData,\n primaryGrouping,\n secondaryGrouping,\n facetKeyLists,\n nonEmptyGroupsByFacets,\n onlyPositive,\n };\n }\n\n _updateAesInData() {\n if (this.calculatedData === null) {\n return;\n }\n const {layers, facetBy, primaryGrouping, secondaryGrouping, facetSettings} = this.settings;\n\n // updating aes in layers (except for stat layers with p-value), layers data is not recalculating\n const noStatLayers = layers.filter(layer => !(layer instanceof StatLayer));\n for (let i = 0; i < noStatLayers.length; i++) {\n const layer = noStatLayers[i];\n if ('aes' in layer) {\n this.calculatedData.layersData[i].aes = layer.aes;\n }\n }\n\n // updating grouping to update linked aes\n this.calculatedData.primaryGrouping = getGroupingData(this.data, primaryGrouping);\n this.calculatedData.secondaryGrouping = getGroupingData(this.data, secondaryGrouping);\n\n // updating for possibly changed facetSettings.order\n this.calculatedData.facetKeyLists = facetBy.length\n ? getKeysCombinations(\n facetBy.map(column => getGroupingKeys(this.data, column, facetSettings?.order?.[column.value]))\n )\n : [[NO_GROUPED]];\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, keyColumn, facetSettings} = this.settings;\n\n const facetKeys = this.calculatedData.facetKeyLists.map(getFacetStringKey);\n const facetLabels = this.calculatedData.facetKeyLists.map(v => v.map(v => v === NO_GROUPED ? 'null' : v)) as string[][];\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n this.calculatedData.primaryGrouping,\n this.calculatedData.secondaryGrouping,\n facetSettings,\n facetKeys,\n facetLabels,\n this.calculatedData.layersData,\n this.calculatedData.statsLayersData,\n keyColumn,\n this.calculatedData.nonEmptyGroupsByFacets,\n this.calculatedData.onlyPositive,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["getGroupingKeys","data","column","order","groupingColumn","availableKeys","intersection","getKeysCombinations","keysLists","result","keys","nextResult","key","resultItem","getGroupingData","grouping","groupingColumnId","groupingColumnLabelId","categories","getValueLabel","category","res","ChartDiscrete","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","DiscreteSettingsImpl","node","err","previousSettings","previousData","_field","_value","renderToString","prevSettings","_a","_b","_c","_d","_e","_f","_g","_h","el","idx","l","prevData","prevKeys","chartSettings","y","keyColumn","facetBy","layers","facetSettings","yAxis","onlyPositive","v","primaryGrouping","secondaryGrouping","facetGroupingValues","hasLogoOrBarLayer","MAX_GROUPS_COUNT","facetKeyLists","NO_GROUPED","MAX_FACETS_COUNT","groupingKeys","nonEmptyGroupsByFacets","facetKey","getFacetStringKey","primaryKey","layersData","layer","StatLayer","BoxLayer","getBoxesData","ViolinLayer","getViolinsData","DotLayer","getDotsData","LineLayer","getLinesData","ErrorBarLayer","getErrorBarsData","BarLayer","getBarsData","StackedBarLayer","getStackedBarsData","BinnedDotsLayer","getBinnedDotsData","PairedPointsLayer","getPairedPointsData","SinaLayer","getSinaData","LogoPlotLayer","getLogoData","statsLayersData","getStatsData","noStatLayers","i","id","facetKeys","facetLabels"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAwCA,SAASA,EAAgBC,GAAiBC,GAAoBC,IAA4B,MAAM;AAC5F,QAAMC,IAAiBF,EAAO,OACxBG,IAAgBJ,EAAK,oBAAoBG,CAAc;AAC7D,SAAOE,EAAAA,aAAaH,KAASE,GAAeA,CAAa,EAAE,IAAI,MAAM;AACzE;AAGA,SAASE,EAAoBC,GAAuB;AAChD,MAAI,CAACA,EAAU;AACX,WAAO,CAAA;AAEX,MAAIC,IAAqB,CAAC,EAAE;AAC5B,SAAAD,EAAU,QAAQ,CAAAE,MAAQ;AACtB,UAAMC,IAAyB,CAAA;AAC/B,IAAAD,EAAK,QAAQ,CAAAE,MAAO;AAChB,MAAAD,EAAW,KAAK,GAAGF,EAAO,IAAI,CAAAI,MAAc,CAAC,GAAGA,GAAYD,CAAG,CAAC,CAAC;AAAA,IACrE,CAAC,GACDH,IAASE;AAAA,EACb,CAAC,GACMF;AACX;AAEA,SAASK,EACLb,GACAc,GACY;AACZ,MAAI,CAACA;AACD,WAAO;AAAA,MACH,MAAM,CAAC,MAAM;AAAA,MACb,OAAO;AAAA,MACP,OAAO;AAAA,MACP,aAAa,EAAC,MAAM,GAAA;AAAA,MACpB,cAAc;AAAA,IAAA;AAItB,QAAMC,IAAmBD,EAAS,WAAW,OACvCE,IAAwBF,EAAS,WAAW,aAC5CG,IAAajB,EAAK,oBAAoBe,GAAkB,EAAK,GAC7DG,IAAgB,CAACC,MACZH,IACD;AAAA,IACEhB,EAAK;AAAA,MACDgB;AAAA,MACAhB,EAAK,0BAA0Be,GAAkBI,CAAQ;AAAA,IAAA;AAAA,EAC7D,IAEFA,GAGJV,IAAOT,EAAK,oBAAoBe,GAAkB,CAACD,EAAS,cAAc;AAGhF,SAAO;AAAA,IACH,MAHgBA,EAAS,UAAU,SAAYL,IAAOJ,eAAaS,EAAS,MAAM,IAAI,MAAM,GAAGL,CAAI;AAAA,IAInG,OAAOM;AAAA,IACP,OAAOD,EAAS,WAAW,SAASC;AAAA,IACpC,aAAaE,EAAW,OAAO,CAACG,GAA6BD,OACzDC,EAAID,CAAQ,IAAID,EAAcC,CAAQ,GAC/BC,IACR,CAAA,CAAE;AAAA,IACL,cAAcN,EAAS,gBAAgB;AAAA,EAAA;AAE/C;AAEO,MAAMO,WAAsBC,EAAc;AAAA,EAe7C,YAAYtB,GAAiBuB,GAA4BC,GAAuC;AAC5F,UAAMxB,GAAMuB,CAAQ;AAfxB,IAAAE,EAAA;AACA,IAAAA,EAAA,uBAAgB,IAAIC,EAAA;AAEpB,IAAAD,EAAA,6BAA2C,MAAA;AAAA;AAC3C,IAAAA,EAAA,wBAQW;AAKP,SAAK,WAAW,IAAIE,EAAqBJ,CAAQ,GAC7CC,MACA,KAAK,sBAAsBA,EAAc,CAAC;AAAA,EAElD;AAAA,EAEA,MAAMI,GAAmB;AACrB,QAAI;AACA,WAAK,cAAc,KAAKA,CAAI,GAC5B,KAAK,YAAA,GACL,KAAK,aAAA;AAAA,IACR,SAASC,GAAK;AACX,MAAIA,aAAe,UACf,KAAK,cAAc,YAAYA,EAAI,OAAiB,GACpD,QAAQ,MAAMA,CAAG;AAAA,IAEzB;AAAA,EACJ;AAAA,EAEA,UAAU;AACN,SAAK,cAAc,MAAA;AAAA,EACvB;AAAA,EAEA,sBAAsB7B,GAAiBuB,GAA4B;AAC/D,QAAI;AACA,YAAMO,IAAmB,KAAK,UACxBC,IAAe,KAAK;AAC1B,WAAK,WAAW,IAAIJ,EAAqBJ,CAAQ,GACjD,KAAK,OAAOvB,GAER,KAAK,oCAAoC8B,GAAkB,KAAK,QAAQ,KACxE,KAAK,gCAAgCC,GAAc,KAAK,IAAI,IAE5D,KAAK,YAAA,IAEL,KAAK,iBAAA,GAET,KAAK,aAAA;AAAA,IACT,SAASF,GAAK;AACV,MAAIA,aAAe,UACf,KAAK,cAAc,YAAYA,EAAI,OAAiB,GACpD,QAAQ,MAAMA,CAAG;AAAA,IAEzB;AAAA,EACJ;AAAA,EAEA,iBAAiBG,GAAgBC,GAAiB;AAC9C,YAAQ,KAAK,6BAA6B;AAAA,EAC9C;AAAA,EAEA,SAAiB;AACb,gBAAK,aAAA,GACEC,EAAe,KAAK,cAAc,SAAS;AAAA,EACtD;AAAA,EAEA,oCAAoCC,GAAoCZ,GAAgC;;AACpG,WACIY,EAAa,cAAc,MAAM,UAAUZ,EAAS,cAAc,MAAM,YACvEa,IAAAD,EAAa,oBAAb,gBAAAC,EAA8B,WAAW,UAAS,WAC9CC,IAAAd,EAAS,oBAAT,gBAAAc,EAA0B,WAAW,UAAS,UAClDC,IAAAH,EAAa,sBAAb,gBAAAG,EAAgC,WAAW,UAAS,WAChDC,IAAAhB,EAAS,sBAAT,gBAAAgB,EAA4B,WAAW,UAAS,UACpDC,IAAAL,EAAa,oBAAb,gBAAAK,EAA8B,mBAAkB,WAC5CC,IAAAlB,EAAS,oBAAT,gBAAAkB,EAA0B,mBAAkB,UAChDC,IAAAP,EAAa,sBAAb,gBAAAO,EAAgC,mBAAkB,WAC9CC,IAAApB,EAAS,sBAAT,gBAAAoB,EAA4B,mBAAkB,OACnDR,EAAa,QAAQ,KAAK,CAACS,GAAIC,MAAA;;AAAQ,aAAAD,EAAG,YAAUR,IAAAb,EAAS,QAAQsB,CAAG,MAApB,gBAAAT,EAAuB;AAAA,KAAK,KAChFD,EAAa,OAAO,WAAWZ,EAAS,OAAO,UAC/CY,EAAa,OAAO,KAAK,CAACW,GAAGD,MAAQ,CAACC,EAAE,sBAAsBvB,EAAS,OAAOsB,CAAG,CAAa,CAAC;AAAA,EAEvG;AAAA,EAEA,gCAAgCE,GAAqB/C,GAAiB;AAClE,UAAMgD,IAAW,OAAO,KAAKD,EAAS,IAAI,GACpCtC,IAAO,OAAO,KAAKT,EAAK,IAAI;AAClC,WACI+C,EAAS,OAAO/C,EAAK,MACrBgD,EAAS,WAAWvC,EAAK,UACzBuC,EAAS,KAAK;;AAAO,aAAAD,EAAS,KAAKpC,CAAG,EAAE,aAAWyB,IAAApC,EAAK,KAAKW,CAAG,MAAb,gBAAAyB,EAAgB;AAAA,KAAM;AAAA,EAEjF;AAAA,EAEA,cAAc;AACV,UAAM,EAAC,eAAAa,GAAe,GAAAC,GAAG,WAAAC,GAAW,SAAAC,GAAS,QAAAC,GAAQ,eAAAC,MAAiB,KAAK,UACrE,EAAC,OAAAC,MAASN,GAEVO,IAAe,KAAK,KAAK,UAAUN,EAAE,KAAK,EAAE,MAAM,CAAAO,MAC7CA,MAAM,QAAQ,EAAE,OAAOA,CAAC,IAAI,EACtC,GAGKC,IAAkB7C,EAAgB,KAAK,MAAM,KAAK,SAAS,eAAe,GAC1E8C,IAAoB9C,EAAgB,KAAK,MAAM,KAAK,SAAS,iBAAiB,GAC9E+C,IAAsBR,EAAQ,IAAI,CAAAnD,MAAUA,EAAO,KAAK,GACxD4D,IAAoBR,EAAO,KAAK,CAAAP,MAAKA,EAAE,SAAS,UAAUA,EAAE,SAAS,KAAK;AAEhF,QAAI,CAACe,KAAqBH,EAAgB,KAAK,SAASI;AACpD,YAAM,MAAM,4BAA4BJ,EAAgB,KAAK,MAAM,GAAG;AAE1E,QAAI,CAACG,KAAqBF,EAAkB,KAAK,SAASG;AACtD,YAAM,MAAM,8BAA8BH,EAAkB,KAAK,MAAM,GAAG;AAK9E,UAAMI,IAA+BX,EAAQ,SACvC9C;AAAA,MACI8C,EAAQ,IAAI,CAAAnD,MAAA;;AAAU,eAAAF,EAAgB,KAAK,MAAME,IAAQmC,IAAAkB,KAAA,gBAAAA,EAAe,UAAf,gBAAAlB,EAAuBnC,EAAO,MAAM;AAAA,OAAC;AAAA,IAAA,IAElG,CAAC,CAAC+D,CAAU,CAAC;AAEnB,QAAID,EAAc,SAASE;AACvB,YAAM,MAAM,oBAAoBF,EAAc,MAAM,GAAG;AAE3D,SAAK,KAAK,YAAY,CAAC,GAAGH,GAAqBF,EAAgB,OAAOC,EAAkB,KAAK,CAAC;AAC9F,UAAMO,IAAe;AAAA,MACjB,OAAOH;AAAA,MACP,SAAUL,EAAgB,UAAU,OAAOA,EAAgB,OAAO,CAACM,CAAU;AAAA,MAC7E,WAAYL,EAAkB,UAAU,OAAOA,EAAkB,OAAO,CAACK,CAAU;AAAA,IAAA,GAGjFG,IAAyBD,EAAa,MAAM,OAAO,CAAC9C,GAA+BgD,OACrFhD,EAAIiD,EAAkBD,CAAQ,CAAC,IAAIF,EAAa,QAAQ;AAAA,MACpD,CAAAI,MAAc,KAAK,KAAK,kBAAkB,CAAC,GAAGF,GAAUE,CAAU,CAAC,EAAE,SAAS;AAAA,IAAA,EAChF,IAAI,MAAM,GACLlD,IACR,CAAA,CAAE,GAECmD,IAAalB,EACd,OAAO,CAAAmB,MAAS,EAAEA,aAAiBC,EAAU,EAC7C,IAAI,CAAAD,MAAS;AACV,UAAIA,aAAiBE;AACjB,eAAOC,EAAaH,GAAON,GAAc,KAAK,MAAMhB,GAAGC,GAAWI,CAAK;AAE3E,UAAIiB,aAAiBI;AACjB,eAAOC,EAAeL,GAAON,GAAc,KAAK,MAAMhB,GAAGK,CAAK;AAElE,UAAIiB,aAAiBM;AACjB,eAAOC,EAAYP,GAAON,GAAc,KAAK,MAAMhB,GAAGK,GAAOJ,CAAS;AAE1E,UAAIqB,aAAiBQ;AACjB,eAAOC,EAAaT,GAAON,GAAc,KAAK,MAAMhB,GAAGK,CAAK;AAEhE,UAAIiB,aAAiBU;AACjB,eAAOC,GAAiBX,GAAON,GAAc,KAAK,MAAMhB,GAAGK,CAAK;AAEpE,UAAIiB,aAAiBY;AACjB,eAAOC,GAAYb,GAAON,GAAc,KAAK,MAAMhB,GAAGK,CAAK;AAE/D,UAAIiB,aAAiBc;AACjB,eAAOC,GAAmBf,GAAON,GAAc,KAAK,MAAMhB,CAAC;AAE/D,UAAIsB,aAAiBgB;AACjB,eAAOC,GAAkBjB,GAAON,GAAc,KAAK,MAAMhB,GAAGK,CAAK;AAErE,UAAIiB,aAAiBkB;AACjB,eAAOC,GAAoBnB,GAAON,GAAc,KAAK,MAAMhB,GAAGK,CAAK;AAEvE,UAAIiB,aAAiBoB;AACjB,eAAOC,EAAYrB,GAAON,GAAc,KAAK,MAAMhB,GAAGK,CAAK;AAE/D,UAAIiB,aAAiBsB;AACjB,eAAOC,GAAYvB,GAAON,GAAc,KAAK,MAAMhB,CAAC;AAExD,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACxC,CAAC,GACC8C,IAAkB3C,EACnB,OAAO,CAAAmB,MAASA,aAAiBC,CAAS,EAC1C,IAAI,CAAAD,MAAS;AACV,UAAId,EAAgB,UAAU;AAC1B,cAAM,IAAI,MAAM,gDAAgD;AAEpE,aAAOuC,GAAazB,GAAoBN,EAAa,OAAOA,EAAa,SAAShB,GAAG,KAAK,IAAI;AAAA,IAClG,CAAC;AACL,SAAK,iBAAiB;AAAA,MAClB,YAAAqB;AAAA,MACA,iBAAAyB;AAAA,MACA,iBAAAtC;AAAA,MACA,mBAAAC;AAAA,MACA,eAAAI;AAAA,MACA,wBAAAI;AAAA,MACA,cAAAX;AAAA,IAAA;AAAA,EAER;AAAA,EAEA,mBAAmB;AACf,QAAI,KAAK,mBAAmB;AACxB;AAEJ,UAAM,EAAC,QAAAH,GAAQ,SAAAD,GAAS,iBAAAM,GAAiB,mBAAAC,GAAmB,eAAAL,EAAA,IAAiB,KAAK,UAG5E4C,IAAe7C,EAAO,OAAO,CAAAmB,MAAS,EAAEA,aAAiBC,EAAU;AACzE,aAAS0B,IAAI,GAAGA,IAAID,EAAa,QAAQC,KAAK;AAC1C,YAAM3B,IAAQ0B,EAAaC,CAAC;AAC5B,MAAI,SAAS3B,MACT,KAAK,eAAe,WAAW2B,CAAC,EAAE,MAAM3B,EAAM;AAAA,IAEtD;AAGA,SAAK,eAAe,kBAAkB3D,EAAgB,KAAK,MAAM6C,CAAe,GAChF,KAAK,eAAe,oBAAoB7C,EAAgB,KAAK,MAAM8C,CAAiB,GAGpF,KAAK,eAAe,gBAAgBP,EAAQ,SACtC9C;AAAA,MACI8C,EAAQ,IAAI,CAAAnD,MAAA;;AAAU,eAAAF,EAAgB,KAAK,MAAME,IAAQmC,IAAAkB,KAAA,gBAAAA,EAAe,UAAf,gBAAAlB,EAAuBnC,EAAO,MAAM;AAAA,OAAC;AAAA,IAAA,IAElG,CAAC,CAAC+D,CAAU,CAAC;AAAA,EACvB;AAAA,EAEA,eAAe;AACX,QAAI,CAAC,KAAK;AACN;AAEJ,UAAM,EAAC,IAAAoC,GAAI,eAAAnD,GAAe,WAAAE,GAAW,eAAAG,EAAA,IAAiB,KAAK,UAErD+C,IAAY,KAAK,eAAe,cAAc,IAAIhC,CAAiB,GACnEiC,IAAc,KAAK,eAAe,cAAc,IAAI,CAAA7C,MAAKA,EAAE,IAAI,CAAAA,MAAKA,MAAMO,IAAa,SAASP,CAAC,CAAC;AACxG,SAAK,cAAc;AAAA,MACf,KAAK;AAAA,MACL2C;AAAA,MACAnD;AAAA,MACA,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpBK;AAAA,MACA+C;AAAA,MACAC;AAAA,MACA,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpBnD;AAAA,MACA,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpB,KAAK;AAAA,IAAA;AAAA,EAEb;AACJ;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/discrete/index.ts"],"sourcesContent":["import { intersection } from 'lodash';\nimport { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame, GroupKey } from '../DataFrame';\nimport { NO_GROUPED } from '../DataFrame';\nimport type { Category, ColumnName, DataValue, DiscreteEventHandlers, DiscreteSettings, GroupingData } from '../types';\nimport ChartRenderer from './ChartRenderer';\nimport { MAX_FACETS_COUNT, MAX_GROUPS_COUNT } from './constants';\nimport {\n BarLayer,\n BinnedDotsLayer,\n BoxLayer,\n DiscreteSettingsImpl,\n DotLayer,\n ErrorBarLayer,\n LineLayer,\n LogoPlotLayer,\n PairedPointsLayer,\n SinaLayer,\n StackedBarLayer,\n StatLayer,\n ViolinLayer,\n} from './DiscreteSettingsImpl';\nimport {\n getBarsData,\n getBinnedDotsData,\n getBoxesData,\n getDotsData,\n getErrorBarsData,\n getLinesData,\n getPairedPointsData,\n getSinaData,\n getStackedBarsData,\n getStatsData,\n getViolinsData,\n} from './layers';\nimport { getLogoData } from './layers/logo';\nimport type { LayerData, StatsData } from './layers/types';\nimport { getFacetStringKey } from './utils/getFacetStringKey';\n\nfunction getGroupingKeys(data: DataFrame, column: ColumnName, order: DataValue[] | null = null) {\n const groupingColumn = column.value;\n const availableKeys = data.getColumnCategories(groupingColumn);\n return intersection(order ?? availableKeys, availableKeys).map(String);\n}\n\n// all combinations with 1 key from each list\nfunction getKeysCombinations(keysLists: string[][]) {\n if (!keysLists.length) {\n return [];\n }\n let result: string[][] = [[]];\n keysLists.forEach(keys => {\n const nextResult: string[][] = [];\n keys.forEach(key => {\n nextResult.push(...result.map(resultItem => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\n\nfunction getGroupingData(\n data: DataFrame,\n grouping: DiscreteSettingsImpl['primaryGrouping' | 'secondaryGrouping']\n): GroupingData {\n if (!grouping) {\n return {\n keys: ['null'],\n value: null,\n label: '',\n valueLabels: {null: ''},\n inheritedAes: null,\n };\n }\n\n const groupingColumnId = grouping.columnName.value;\n const groupingColumnLabelId = grouping.columnName.valueLabels;\n const categories = data.getColumnCategories(groupingColumnId, false);\n const getValueLabel = (category: Category) => {\n return groupingColumnLabelId \n ? String(\n data.getColumnValue(\n groupingColumnLabelId,\n data.getColumnCategoryRowIndex(groupingColumnId, category)\n )\n )\n : category;\n };\n \n const keys = data.getColumnCategories(groupingColumnId, !grouping.allowNullGroup);\n const orderedKeys = grouping.order === undefined ? keys : intersection(grouping.order.map(String), keys);\n\n return {\n keys: orderedKeys,\n value: groupingColumnId,\n label: grouping.columnName.label ?? groupingColumnId,\n valueLabels: categories.reduce((res: Record<string, string>, category: Category) => {\n res[category] = getValueLabel(category);\n return res;\n }, {}),\n inheritedAes: grouping.inheritedAes ?? null,\n };\n}\n\nexport class ChartDiscrete extends AbstractChart {\n settings: DiscreteSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n layersData: LayerData[];\n statsLayersData: StatsData[];\n primaryGrouping: GroupingData;\n secondaryGrouping: GroupingData;\n facetKeyLists: GroupKey[][];\n nonEmptyGroupsByFacets: Record<string, string[]>;\n onlyPositive: boolean;\n } | null = null;\n\n constructor(data: DataFrame, settings: DiscreteSettings, eventHandlers?: DiscreteEventHandlers) {\n super(data, settings);\n\n this.settings = new DiscreteSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers[0];\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n this.hasError = false;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: DiscreteSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new DiscreteSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n this.hasError = false;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for discrete');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: DiscreteSettingsImpl, settings: DiscreteSettingsImpl) {\n return (\n prevSettings.chartSettings.yAxis.scale !== settings.chartSettings.yAxis.scale ||\n (prevSettings.primaryGrouping?.columnName.value ?? '') !==\n (settings.primaryGrouping?.columnName.value ?? '') ||\n (prevSettings.secondaryGrouping?.columnName.value ?? '') !==\n (settings.secondaryGrouping?.columnName.value ?? '') ||\n (prevSettings.primaryGrouping?.allowNullGroup ?? '') !==\n (settings.primaryGrouping?.allowNullGroup ?? '') ||\n (prevSettings.secondaryGrouping?.allowNullGroup ?? '') !==\n (settings.secondaryGrouping?.allowNullGroup ?? '') ||\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => !l.isEqualForCalculation(settings.layers[idx] as typeof l))\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {chartSettings, y, keyColumn, facetBy, layers, facetSettings} = this.settings;\n const {yAxis} = chartSettings;\n\n const onlyPositive = this.data.getColumn(y.value).every(v => {\n return v === null || !(Number(v) < 0);\n });\n // console.info('only positive Y:', onlyPositive);\n\n const primaryGrouping = getGroupingData(this.data, this.settings.primaryGrouping);\n const secondaryGrouping = getGroupingData(this.data, this.settings.secondaryGrouping);\n const facetGroupingValues = facetBy.map(column => column.value);\n const hasLogoOrBarLayer = layers.some(l => l.type === 'logo' || l.type === 'bar');\n\n if (!hasLogoOrBarLayer && primaryGrouping.keys.length > MAX_GROUPS_COUNT) {\n throw Error(`Too many primary groups (${primaryGrouping.keys.length})`);\n }\n if (!hasLogoOrBarLayer && secondaryGrouping.keys.length > MAX_GROUPS_COUNT) {\n throw Error(`Too many secondary groups (${secondaryGrouping.keys.length})`);\n }\n\n // if facet created by more than 1 data column facet key contains all of them, and all keys are used in data grouping;\n // after data preparing we need only complex keys from concatenated strings\n const facetKeyLists:(GroupKey)[][] = facetBy.length\n ? getKeysCombinations(\n facetBy.map(column => getGroupingKeys(this.data, column, facetSettings?.order?.[column.value]))\n )\n : [[NO_GROUPED]];\n\n if (facetKeyLists.length > MAX_FACETS_COUNT) {\n throw Error(`Too many facets (${facetKeyLists.length})`);\n }\n this.data.setGrouping([...facetGroupingValues, primaryGrouping.value, secondaryGrouping.value]);\n const groupingKeys = {\n facet: facetKeyLists,\n primary: (primaryGrouping.value !== null ? primaryGrouping.keys : [NO_GROUPED]) as GroupKey[],\n secondary: (secondaryGrouping.value !== null ? secondaryGrouping.keys : [NO_GROUPED]) as GroupKey[],\n };\n\n const nonEmptyGroupsByFacets = groupingKeys.facet.reduce((res: Record<string, string[]>, facetKey) => {\n res[getFacetStringKey(facetKey)] = groupingKeys.primary.filter(\n primaryKey => this.data.getRowsByGrouping([...facetKey, primaryKey]).length > 0\n ).map(String);\n return res;\n }, {});\n\n const layersData = layers\n .filter(layer => !(layer instanceof StatLayer))\n .map(layer => {\n if (layer instanceof BoxLayer) {\n return getBoxesData(layer, groupingKeys, this.data, y, keyColumn, yAxis);\n }\n if (layer instanceof ViolinLayer) {\n return getViolinsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof DotLayer) {\n return getDotsData(layer, groupingKeys, this.data, y, yAxis, keyColumn);\n }\n if (layer instanceof LineLayer) {\n return getLinesData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof ErrorBarLayer) {\n return getErrorBarsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof BarLayer) {\n return getBarsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof StackedBarLayer) {\n return getStackedBarsData(layer, groupingKeys, this.data, y);\n }\n if (layer instanceof BinnedDotsLayer) {\n return getBinnedDotsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof PairedPointsLayer) {\n return getPairedPointsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof SinaLayer) {\n return getSinaData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof LogoPlotLayer) {\n return getLogoData(layer, groupingKeys, this.data, y);\n }\n throw new Error('Unknown layer type');\n });\n const statsLayersData = layers\n .filter(layer => layer instanceof StatLayer)\n .map(layer => {\n if (primaryGrouping.value === null) {\n throw new Error('Cannot calculate p-value without data grouping');\n }\n return getStatsData(layer as StatLayer, groupingKeys.facet, groupingKeys.primary, y, this.data);\n });\n this.calculatedData = {\n layersData,\n statsLayersData,\n primaryGrouping,\n secondaryGrouping,\n facetKeyLists,\n nonEmptyGroupsByFacets,\n onlyPositive,\n };\n }\n\n _updateAesInData() {\n if (this.calculatedData === null) {\n return;\n }\n const {layers, facetBy, primaryGrouping, secondaryGrouping, facetSettings} = this.settings;\n\n // updating aes in layers (except for stat layers with p-value), layers data is not recalculating\n const noStatLayers = layers.filter(layer => !(layer instanceof StatLayer));\n for (let i = 0; i < noStatLayers.length; i++) {\n const layer = noStatLayers[i];\n if ('aes' in layer) {\n this.calculatedData.layersData[i].aes = layer.aes;\n }\n }\n\n // updating grouping to update linked aes\n this.calculatedData.primaryGrouping = getGroupingData(this.data, primaryGrouping);\n this.calculatedData.secondaryGrouping = getGroupingData(this.data, secondaryGrouping);\n\n // updating for possibly changed facetSettings.order\n this.calculatedData.facetKeyLists = facetBy.length\n ? getKeysCombinations(\n facetBy.map(column => getGroupingKeys(this.data, column, facetSettings?.order?.[column.value]))\n )\n : [[NO_GROUPED]];\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, keyColumn, facetSettings} = this.settings;\n\n const facetKeys = this.calculatedData.facetKeyLists.map(getFacetStringKey);\n const facetLabels = this.calculatedData.facetKeyLists.map(v => v.map(v => v === NO_GROUPED ? 'null' : v)) as string[][];\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n this.calculatedData.primaryGrouping,\n this.calculatedData.secondaryGrouping,\n facetSettings,\n facetKeys,\n facetLabels,\n this.calculatedData.layersData,\n this.calculatedData.statsLayersData,\n keyColumn,\n this.calculatedData.nonEmptyGroupsByFacets,\n this.calculatedData.onlyPositive,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["getGroupingKeys","data","column","order","groupingColumn","availableKeys","intersection","getKeysCombinations","keysLists","result","keys","nextResult","key","resultItem","getGroupingData","grouping","groupingColumnId","groupingColumnLabelId","categories","getValueLabel","category","res","ChartDiscrete","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","DiscreteSettingsImpl","node","err","previousSettings","previousData","_field","_value","renderToString","prevSettings","_a","_b","_c","_d","_e","_f","_g","_h","el","idx","l","prevData","prevKeys","chartSettings","y","keyColumn","facetBy","layers","facetSettings","yAxis","onlyPositive","v","primaryGrouping","secondaryGrouping","facetGroupingValues","hasLogoOrBarLayer","MAX_GROUPS_COUNT","facetKeyLists","NO_GROUPED","MAX_FACETS_COUNT","groupingKeys","nonEmptyGroupsByFacets","facetKey","getFacetStringKey","primaryKey","layersData","layer","StatLayer","BoxLayer","getBoxesData","ViolinLayer","getViolinsData","DotLayer","getDotsData","LineLayer","getLinesData","ErrorBarLayer","getErrorBarsData","BarLayer","getBarsData","StackedBarLayer","getStackedBarsData","BinnedDotsLayer","getBinnedDotsData","PairedPointsLayer","getPairedPointsData","SinaLayer","getSinaData","LogoPlotLayer","getLogoData","statsLayersData","getStatsData","noStatLayers","i","id","facetKeys","facetLabels"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Annotation.d.ts","sourceRoot":"","sources":["../../../../src/heatmap/components/Annotations/Annotation.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAqB1F,UAAU,eAAe;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChC,UAAU,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC1C,GAAG,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChC,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC;IACrD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7F,aAAa,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7F,YAAY,EAAE,YAAY,CAAC,IAAI,GAAG,qBAAqB,CAAC,CAAC;IACzD,sBAAsB,CAAC,EAAE,OAAO,CAAC;CACpC;AAMD,wBAAgB,UAAU,CAAC,EACvB,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,KAAK,EACL,KAAK,EACL,CAAC,EACD,CAAC,EACD,UAAU,EACV,SAAS,EACT,KAAK,EACL,MAAM,EACN,UAAU,EACV,GAAG,EACH,KAAK,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,sBAAsB,EACzB,EAAE,eAAe,2CA6IjB"}
1
+ {"version":3,"file":"Annotation.d.ts","sourceRoot":"","sources":["../../../../src/heatmap/components/Annotations/Annotation.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAqB1F,UAAU,eAAe;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChC,UAAU,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC1C,GAAG,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChC,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC;IACrD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7F,aAAa,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7F,YAAY,EAAE,YAAY,CAAC,IAAI,GAAG,qBAAqB,CAAC,CAAC;IACzD,sBAAsB,CAAC,EAAE,OAAO,CAAC;CACpC;AAMD,wBAAgB,UAAU,CAAC,EACvB,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,KAAK,EACL,KAAK,EACL,CAAC,EACD,CAAC,EACD,UAAU,EACV,SAAS,EACT,KAAK,EACL,MAAM,EACN,UAAU,EACV,GAAG,EACH,KAAK,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,sBAAsB,EACzB,EAAE,eAAe,2CA8IjB"}
@@ -1,13 +1,13 @@
1
- import { j as u } from "../../../node_modules/react/jsx-runtime.js";
1
+ import { j as h } from "../../../node_modules/react/jsx-runtime.js";
2
2
  import { r as S } from "../../../node_modules/react-dom/index.js";
3
3
  import { BLACK as O } from "../../../constants.js";
4
4
  import { ANNOTATION_WIDTH as s } from "../../constants.js";
5
- function q(g, f, r, x, m) {
5
+ function q(g, f, r, m, x) {
6
6
  if (g) {
7
- const k = s / 2, C = r === "top" ? -5 : m + 5;
8
- return { x: k, y: C, rotate: f === "left" ? -90 : 90, anchor: f === "left" && r === "top" ? "start" : "end" };
7
+ const k = s / 2, v = r === "top" ? -5 : x + 5;
8
+ return { x: k, y: v, rotate: f === "left" ? -90 : 90, anchor: f === "left" && r === "top" ? "start" : "end" };
9
9
  }
10
- const c = r === "right" ? x + 5 : -5, i = s / 2;
10
+ const c = r === "right" ? m + 5 : -5, i = s / 2;
11
11
  return { x: c, y: i, rotate: 0, anchor: r === "right" ? "start" : "end" };
12
12
  }
13
13
  function J(g) {
@@ -17,13 +17,13 @@ function Z({
17
17
  facetKey: g,
18
18
  data: f,
19
19
  scales: r,
20
- stepX: x,
21
- stepY: m,
20
+ stepX: m,
21
+ stepY: x,
22
22
  x: c,
23
23
  y: i,
24
- annotation: v,
24
+ annotation: C,
25
25
  showTitle: k,
26
- width: C,
26
+ width: v,
27
27
  height: w,
28
28
  colorScale: d,
29
29
  aes: X,
@@ -32,47 +32,48 @@ function Z({
32
32
  yGroupKeys: _,
33
33
  xKeysByGroups: a,
34
34
  yKeysByGroups: $,
35
- tooltipsData: h,
35
+ tooltipsData: l,
36
36
  activeElementContainer: E
37
37
  }) {
38
- const { position: p, titlePosition: Y, valueColumn: j } = v, o = p === "left" || p === "right", z = (o ? r.y : r.x).domain(), A = q(o, p, Y, C, w), F = h.fixed && E;
39
- return /* @__PURE__ */ u.jsxs("g", { children: [
38
+ const { position: p, titlePosition: Y, valueColumn: j } = C, o = p === "left" || p === "right", z = (o ? r.y : r.x).domain(), A = q(o, p, Y, v, w), F = l.fixed && E;
39
+ return /* @__PURE__ */ h.jsxs("g", { children: [
40
40
  z.map((n) => {
41
- const t = f == null ? void 0 : f[n], l = d.type === "continuous" ? d.scale(Number(t)) : d.scale(String(t)), e = c + (o ? 0 : r.x(n)), I = i + (o ? r.y(n) : 0), M = o ? s : x, N = o ? m : s, W = o ? null : n, H = o ? n : null, R = F && J(h.selectedData) && h.selectedData.xKey === W && h.selectedData.yKey === H && g === h.currentFacet, L = /* @__PURE__ */ u.jsx(
41
+ const t = f == null ? void 0 : f[n], u = d.type === "continuous" ? d.scale(Number(t)) : d.scale(String(t)), e = c + (o ? 0 : r.x(n)), I = i + (o ? r.y(n) : 0), M = o ? s : m, N = o ? x : s, W = o ? null : n, H = o ? n : null, R = F && J(l.selectedData) && l.selectedData.xKey === W && l.selectedData.yKey === H && g === l.currentFacet, L = /* @__PURE__ */ h.jsx(
42
42
  "rect",
43
43
  {
44
44
  x: e,
45
45
  y: I,
46
46
  width: M,
47
47
  height: N,
48
- fill: l,
48
+ fill: u,
49
49
  stroke: X.cellStrokeColor,
50
- onMouseEnter: () => h.onMouseEnter({
50
+ onMouseEnter: () => l.onMouseEnter({
51
51
  isAnnotation: !0,
52
52
  x: e + M,
53
53
  y: I + N / 2,
54
54
  xKey: W,
55
55
  yKey: H,
56
56
  value: t,
57
- title: j.label ?? j.value
57
+ title: j.label ?? j.value,
58
+ column: C.valueColumn
58
59
  }, g),
59
- onMouseLeave: () => h.onMouseLeave()
60
+ onMouseLeave: () => l.onMouseLeave()
60
61
  },
61
62
  n
62
63
  );
63
64
  return R ? S.createPortal(L, E) : L;
64
65
  }),
65
- h.fixed && !o && T.map((n) => {
66
+ l.fixed && !o && T.map((n) => {
66
67
  const t = a[n].length;
67
68
  if (t === 0)
68
69
  return null;
69
- const l = t * x, e = r.x(a[n][0]);
70
- return /* @__PURE__ */ u.jsx(
70
+ const u = t * m, e = r.x(a[n][0]);
71
+ return /* @__PURE__ */ h.jsx(
71
72
  "rect",
72
73
  {
73
74
  x: e + c,
74
75
  y: i,
75
- width: l,
76
+ width: u,
76
77
  height: s,
77
78
  stroke: "none",
78
79
  fill: "rgba(255, 255, 255, 0.8)"
@@ -80,18 +81,18 @@ function Z({
80
81
  `${e}_${i}`
81
82
  );
82
83
  }),
83
- h.fixed && o && _.map((n) => {
84
+ l.fixed && o && _.map((n) => {
84
85
  const t = $[n].length;
85
86
  if (t === 0)
86
87
  return null;
87
- const l = t * m, e = r.y($[n][0]);
88
- return /* @__PURE__ */ u.jsx(
88
+ const u = t * x, e = r.y($[n][0]);
89
+ return /* @__PURE__ */ h.jsx(
89
90
  "rect",
90
91
  {
91
92
  x: c,
92
93
  y: e + i,
93
94
  width: s,
94
- height: l,
95
+ height: u,
95
96
  stroke: "none",
96
97
  fill: "rgba(255, 255, 255, 0.8)"
97
98
  },
@@ -102,13 +103,13 @@ function Z({
102
103
  const t = a[n].length;
103
104
  if (t === 0)
104
105
  return null;
105
- const l = t * x, e = r.x(a[n][0]);
106
- return /* @__PURE__ */ u.jsx(
106
+ const u = t * m, e = r.x(a[n][0]);
107
+ return /* @__PURE__ */ h.jsx(
107
108
  "rect",
108
109
  {
109
110
  x: e + c,
110
111
  y: i,
111
- width: l,
112
+ width: u,
112
113
  height: s,
113
114
  stroke: O,
114
115
  fill: "none"
@@ -120,27 +121,27 @@ function Z({
120
121
  const t = $[n].length;
121
122
  if (t === 0)
122
123
  return null;
123
- const l = t * m, e = r.y($[n][0]);
124
- return /* @__PURE__ */ u.jsx(
124
+ const u = t * x, e = r.y($[n][0]);
125
+ return /* @__PURE__ */ h.jsx(
125
126
  "rect",
126
127
  {
127
128
  x: c,
128
129
  y: e + i,
129
130
  width: s,
130
- height: l,
131
+ height: u,
131
132
  stroke: O,
132
133
  fill: "none"
133
134
  },
134
135
  `${c}_${e}`
135
136
  );
136
137
  }),
137
- k && /* @__PURE__ */ u.jsx(
138
+ k && /* @__PURE__ */ h.jsx(
138
139
  "g",
139
140
  {
140
141
  fontWeight: "500",
141
142
  fontSize: "14px",
142
143
  transform: `translate(${c + A.x},${i + A.y}) rotate(${A.rotate})`,
143
- children: /* @__PURE__ */ u.jsx("text", { textAnchor: A.anchor, dominantBaseline: "central", children: j.label ?? j.value })
144
+ children: /* @__PURE__ */ h.jsx("text", { textAnchor: A.anchor, dominantBaseline: "central", children: j.label ?? j.value })
144
145
  }
145
146
  )
146
147
  ] });
@@ -1 +1 @@
1
- {"version":3,"file":"Annotation.js","sources":["../../../../src/heatmap/components/Annotations/Annotation.tsx"],"sourcesContent":["import { createPortal } from 'react-dom';\nimport type { TooltipsData } from '../../../common/Tooltip';\nimport { BLACK } from '../../../constants';\nimport type { DataValue } from '../../../types';\nimport { ANNOTATION_WIDTH } from '../../constants';\nimport type { Cell, GroupedCellsData } from '../../getCells';\nimport type { HeatmapSettingsImpl } from '../../HeatmapSettingsImpl';\nimport type { AnnotationColorScales, AnnotationTooltipData, ChartScales } from '../types';\n\nfunction getTextPosition(\n vertical: boolean,\n annotationPosition: string,\n titlePosition: string,\n width: number,\n height: number\n) {\n if (vertical) {\n const x = ANNOTATION_WIDTH / 2;\n const y = titlePosition === 'top' ? -5 : height + 5;\n const rotate = annotationPosition === 'left' ? -90 : 90;\n const anchor = annotationPosition === 'left' && titlePosition === 'top' ? 'start' : 'end';\n return {x, y, rotate, anchor};\n }\n const x = titlePosition === 'right' ? width + 5 : -5;\n const y = ANNOTATION_WIDTH / 2;\n const anchor = titlePosition === 'right' ? 'start' : 'end';\n return {x, y, rotate: 0, anchor};\n}\ninterface AnnotationProps {\n facetKey: string;\n scales: ChartScales;\n data: Record<string, DataValue>;\n annotation: HeatmapSettingsImpl['annotations'][0];\n stepX: number;\n stepY: number;\n vertical?: boolean;\n x: number;\n y: number;\n width: number;\n height: number;\n showTitle: boolean;\n colorScale: AnnotationColorScales[string];\n aes: HeatmapSettingsImpl['aes'];\n frame: HeatmapSettingsImpl['chartSettings']['frame'];\n xGroupKeys: string[];\n yGroupKeys: string[];\n xKeysByGroups: GroupedCellsData['facets'][keyof GroupedCellsData['facets']]['xKeysByGroups'];\n yKeysByGroups: GroupedCellsData['facets'][keyof GroupedCellsData['facets']]['yKeysByGroups'];\n tooltipsData: TooltipsData<Cell | AnnotationTooltipData>;\n activeElementContainer?: Element;\n}\n\nfunction isAnnotationTooltip(d:Cell|AnnotationTooltipData|null):d is AnnotationTooltipData {\n return d !== null && ('isAnnotation' in d);\n}\n\nexport function Annotation({\n facetKey,\n data,\n scales,\n stepX,\n stepY,\n x,\n y,\n annotation,\n showTitle,\n width,\n height,\n colorScale,\n aes,\n frame,\n xGroupKeys,\n yGroupKeys,\n xKeysByGroups,\n yKeysByGroups,\n tooltipsData,\n activeElementContainer\n}: AnnotationProps) {\n const {position, titlePosition, valueColumn} = annotation;\n const vertical = position === 'left' || position === 'right';\n const keys = (vertical ? scales.y : scales.x).domain();\n const textPosition = getTextPosition(vertical, position, titlePosition, width, height);\n const isDimmedBackground = tooltipsData.fixed && activeElementContainer;\n\n return (\n <g>\n {keys.map(key => {\n const value = data?.[key];\n const fillColor = colorScale.type === 'continuous'\n ? colorScale.scale(Number(value))\n : colorScale.scale(String(value));\n const xInner= x + (vertical ? 0 : scales.x(key));\n const yInner= y + (vertical ? scales.y(key) : 0);\n const width = vertical ? ANNOTATION_WIDTH : stepX;\n const height = vertical ? stepY : ANNOTATION_WIDTH;\n const xKey = vertical ? null : key;\n const yKey = vertical ? key : null;\n const highlighted = isDimmedBackground\n && isAnnotationTooltip(tooltipsData.selectedData)\n && tooltipsData.selectedData.xKey === xKey\n && tooltipsData.selectedData.yKey === yKey\n && facetKey === tooltipsData.currentFacet;\n const cellElement = (\n <rect\n key={key}\n x={xInner}\n y={yInner}\n width={width}\n height={height}\n fill={fillColor}\n stroke={aes.cellStrokeColor}\n onMouseEnter={() => tooltipsData.onMouseEnter({\n isAnnotation: true,\n x: xInner + width,\n y: yInner + height / 2,\n xKey,\n yKey,\n value,\n title: valueColumn.label ?? valueColumn.value\n } satisfies AnnotationTooltipData, facetKey)}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n />\n );\n return highlighted ? createPortal(cellElement, activeElementContainer) : cellElement;\n })}\n {tooltipsData.fixed && !vertical && xGroupKeys.map(xGroupKey => {\n const keysCountX = xKeysByGroups[xGroupKey].length;\n if (keysCountX === 0) {\n return null;\n }\n const groupWidth = keysCountX * stepX;\n const groupX = scales.x(xKeysByGroups[xGroupKey][0]);\n return (\n <rect\n key={`${groupX}_${y}`}\n x={groupX + x}\n y={y}\n width={groupWidth}\n height={ANNOTATION_WIDTH}\n stroke=\"none\"\n fill=\"rgba(255, 255, 255, 0.8)\"\n />\n );\n })}\n {tooltipsData.fixed && vertical && yGroupKeys.map(yGroupKey => {\n const keysCountY = yKeysByGroups[yGroupKey].length;\n if (keysCountY === 0) {\n return null;\n }\n const groupHeight = keysCountY * stepY;\n const groupY = scales.y(yKeysByGroups[yGroupKey][0]);\n return (\n <rect\n key={`${x}_${groupY}`}\n x={x}\n y={groupY + y}\n width={ANNOTATION_WIDTH}\n height={groupHeight}\n stroke=\"none\"\n fill=\"rgba(255, 255, 255, 0.8)\"\n />\n );\n })}\n {frame.type === 'groups' &&\n !vertical &&\n xGroupKeys.map(xGroupKey => {\n const keysCountX = xKeysByGroups[xGroupKey].length;\n if (keysCountX === 0) {\n return null;\n }\n const groupWidth = keysCountX * stepX;\n const groupX = scales.x(xKeysByGroups[xGroupKey][0]);\n return (\n <rect\n key={`${groupX}_${y}`}\n x={groupX + x}\n y={y}\n width={groupWidth}\n height={ANNOTATION_WIDTH}\n stroke={BLACK}\n fill=\"none\"\n />\n );\n })}\n {frame.type === 'groups' &&\n vertical &&\n yGroupKeys.map(yGroupKey => {\n const keysCountY = yKeysByGroups[yGroupKey].length;\n if (keysCountY === 0) {\n return null;\n }\n const groupHeight = keysCountY * stepY;\n const groupY = scales.y(yKeysByGroups[yGroupKey][0]);\n return (\n <rect\n key={`${x}_${groupY}`}\n x={x}\n y={groupY + y}\n width={ANNOTATION_WIDTH}\n height={groupHeight}\n stroke={BLACK}\n fill=\"none\"\n />\n );\n })}\n {showTitle && (\n <g\n fontWeight=\"500\"\n fontSize=\"14px\"\n transform={`translate(${x + textPosition.x},${y + textPosition.y}) rotate(${textPosition.rotate})`}\n >\n <text textAnchor={textPosition.anchor} dominantBaseline=\"central\">\n {valueColumn.label ?? valueColumn.value}\n </text>\n </g>\n )}\n </g>\n );\n}\n"],"names":["getTextPosition","vertical","annotationPosition","titlePosition","width","height","x","ANNOTATION_WIDTH","y","anchor","isAnnotationTooltip","d","Annotation","facetKey","data","scales","stepX","stepY","annotation","showTitle","colorScale","aes","frame","xGroupKeys","yGroupKeys","xKeysByGroups","yKeysByGroups","tooltipsData","activeElementContainer","position","valueColumn","keys","textPosition","isDimmedBackground","key","value","fillColor","xInner","yInner","xKey","yKey","highlighted","cellElement","jsx","createPortal","xGroupKey","keysCountX","groupWidth","groupX","yGroupKey","keysCountY","groupHeight","groupY","BLACK"],"mappings":"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"}
1
+ {"version":3,"file":"Annotation.js","sources":["../../../../src/heatmap/components/Annotations/Annotation.tsx"],"sourcesContent":["import { createPortal } from 'react-dom';\nimport type { TooltipsData } from '../../../common/Tooltip';\nimport { BLACK } from '../../../constants';\nimport type { DataValue } from '../../../types';\nimport { ANNOTATION_WIDTH } from '../../constants';\nimport type { Cell, GroupedCellsData } from '../../getCells';\nimport type { HeatmapSettingsImpl } from '../../HeatmapSettingsImpl';\nimport type { AnnotationColorScales, AnnotationTooltipData, ChartScales } from '../types';\n\nfunction getTextPosition(\n vertical: boolean,\n annotationPosition: string,\n titlePosition: string,\n width: number,\n height: number\n) {\n if (vertical) {\n const x = ANNOTATION_WIDTH / 2;\n const y = titlePosition === 'top' ? -5 : height + 5;\n const rotate = annotationPosition === 'left' ? -90 : 90;\n const anchor = annotationPosition === 'left' && titlePosition === 'top' ? 'start' : 'end';\n return {x, y, rotate, anchor};\n }\n const x = titlePosition === 'right' ? width + 5 : -5;\n const y = ANNOTATION_WIDTH / 2;\n const anchor = titlePosition === 'right' ? 'start' : 'end';\n return {x, y, rotate: 0, anchor};\n}\ninterface AnnotationProps {\n facetKey: string;\n scales: ChartScales;\n data: Record<string, DataValue>;\n annotation: HeatmapSettingsImpl['annotations'][0];\n stepX: number;\n stepY: number;\n vertical?: boolean;\n x: number;\n y: number;\n width: number;\n height: number;\n showTitle: boolean;\n colorScale: AnnotationColorScales[string];\n aes: HeatmapSettingsImpl['aes'];\n frame: HeatmapSettingsImpl['chartSettings']['frame'];\n xGroupKeys: string[];\n yGroupKeys: string[];\n xKeysByGroups: GroupedCellsData['facets'][keyof GroupedCellsData['facets']]['xKeysByGroups'];\n yKeysByGroups: GroupedCellsData['facets'][keyof GroupedCellsData['facets']]['yKeysByGroups'];\n tooltipsData: TooltipsData<Cell | AnnotationTooltipData>;\n activeElementContainer?: Element;\n}\n\nfunction isAnnotationTooltip(d:Cell|AnnotationTooltipData|null):d is AnnotationTooltipData {\n return d !== null && ('isAnnotation' in d);\n}\n\nexport function Annotation({\n facetKey,\n data,\n scales,\n stepX,\n stepY,\n x,\n y,\n annotation,\n showTitle,\n width,\n height,\n colorScale,\n aes,\n frame,\n xGroupKeys,\n yGroupKeys,\n xKeysByGroups,\n yKeysByGroups,\n tooltipsData,\n activeElementContainer\n}: AnnotationProps) {\n const {position, titlePosition, valueColumn} = annotation;\n const vertical = position === 'left' || position === 'right';\n const keys = (vertical ? scales.y : scales.x).domain();\n const textPosition = getTextPosition(vertical, position, titlePosition, width, height);\n const isDimmedBackground = tooltipsData.fixed && activeElementContainer;\n\n return (\n <g>\n {keys.map(key => {\n const value = data?.[key];\n const fillColor = colorScale.type === 'continuous'\n ? colorScale.scale(Number(value))\n : colorScale.scale(String(value));\n const xInner= x + (vertical ? 0 : scales.x(key));\n const yInner= y + (vertical ? scales.y(key) : 0);\n const width = vertical ? ANNOTATION_WIDTH : stepX;\n const height = vertical ? stepY : ANNOTATION_WIDTH;\n const xKey = vertical ? null : key;\n const yKey = vertical ? key : null;\n const highlighted = isDimmedBackground\n && isAnnotationTooltip(tooltipsData.selectedData)\n && tooltipsData.selectedData.xKey === xKey\n && tooltipsData.selectedData.yKey === yKey\n && facetKey === tooltipsData.currentFacet;\n const cellElement = (\n <rect\n key={key}\n x={xInner}\n y={yInner}\n width={width}\n height={height}\n fill={fillColor}\n stroke={aes.cellStrokeColor}\n onMouseEnter={() => tooltipsData.onMouseEnter({\n isAnnotation: true,\n x: xInner + width,\n y: yInner + height / 2,\n xKey,\n yKey,\n value,\n title: valueColumn.label ?? valueColumn.value,\n column: annotation.valueColumn\n } satisfies AnnotationTooltipData, facetKey)}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n />\n );\n return highlighted ? createPortal(cellElement, activeElementContainer) : cellElement;\n })}\n {tooltipsData.fixed && !vertical && xGroupKeys.map(xGroupKey => {\n const keysCountX = xKeysByGroups[xGroupKey].length;\n if (keysCountX === 0) {\n return null;\n }\n const groupWidth = keysCountX * stepX;\n const groupX = scales.x(xKeysByGroups[xGroupKey][0]);\n return (\n <rect\n key={`${groupX}_${y}`}\n x={groupX + x}\n y={y}\n width={groupWidth}\n height={ANNOTATION_WIDTH}\n stroke=\"none\"\n fill=\"rgba(255, 255, 255, 0.8)\"\n />\n );\n })}\n {tooltipsData.fixed && vertical && yGroupKeys.map(yGroupKey => {\n const keysCountY = yKeysByGroups[yGroupKey].length;\n if (keysCountY === 0) {\n return null;\n }\n const groupHeight = keysCountY * stepY;\n const groupY = scales.y(yKeysByGroups[yGroupKey][0]);\n return (\n <rect\n key={`${x}_${groupY}`}\n x={x}\n y={groupY + y}\n width={ANNOTATION_WIDTH}\n height={groupHeight}\n stroke=\"none\"\n fill=\"rgba(255, 255, 255, 0.8)\"\n />\n );\n })}\n {frame.type === 'groups' &&\n !vertical &&\n xGroupKeys.map(xGroupKey => {\n const keysCountX = xKeysByGroups[xGroupKey].length;\n if (keysCountX === 0) {\n return null;\n }\n const groupWidth = keysCountX * stepX;\n const groupX = scales.x(xKeysByGroups[xGroupKey][0]);\n return (\n <rect\n key={`${groupX}_${y}`}\n x={groupX + x}\n y={y}\n width={groupWidth}\n height={ANNOTATION_WIDTH}\n stroke={BLACK}\n fill=\"none\"\n />\n );\n })}\n {frame.type === 'groups' &&\n vertical &&\n yGroupKeys.map(yGroupKey => {\n const keysCountY = yKeysByGroups[yGroupKey].length;\n if (keysCountY === 0) {\n return null;\n }\n const groupHeight = keysCountY * stepY;\n const groupY = scales.y(yKeysByGroups[yGroupKey][0]);\n return (\n <rect\n key={`${x}_${groupY}`}\n x={x}\n y={groupY + y}\n width={ANNOTATION_WIDTH}\n height={groupHeight}\n stroke={BLACK}\n fill=\"none\"\n />\n );\n })}\n {showTitle && (\n <g\n fontWeight=\"500\"\n fontSize=\"14px\"\n transform={`translate(${x + textPosition.x},${y + textPosition.y}) rotate(${textPosition.rotate})`}\n >\n <text textAnchor={textPosition.anchor} dominantBaseline=\"central\">\n {valueColumn.label ?? valueColumn.value}\n </text>\n </g>\n )}\n </g>\n );\n}\n"],"names":["getTextPosition","vertical","annotationPosition","titlePosition","width","height","x","ANNOTATION_WIDTH","y","anchor","isAnnotationTooltip","d","Annotation","facetKey","data","scales","stepX","stepY","annotation","showTitle","colorScale","aes","frame","xGroupKeys","yGroupKeys","xKeysByGroups","yKeysByGroups","tooltipsData","activeElementContainer","position","valueColumn","keys","textPosition","isDimmedBackground","key","value","fillColor","xInner","yInner","xKey","yKey","highlighted","cellElement","jsx","createPortal","xGroupKey","keysCountX","groupWidth","groupX","yGroupKey","keysCountY","groupHeight","groupY","BLACK"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../../src/heatmap/components/Chart.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMzD,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAKlE,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA4CtM,wBAAgB,KAAK,CAAC,SAAS,EAAE,EAC7B,WAAW,EACX,QAAQ,EACR,UAAU,EACV,MAAM,EACN,KAAK,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,EACb,SAAS,EACT,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,GAAG,EACH,WAAW,EACX,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,YAAY,GACf,EAAE;IACC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,mBAAmB,CAAC;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7E,aAAa,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7F,aAAa,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7F,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM,CAAC;IACzC,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACpD,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAChD,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChC,WAAW,EAAE,gBAAgB,CAAC;IAC9B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,YAAY,CAAC,IAAI,GAAC,qBAAqB,CAAC,CAAC;CAC1D,2CAmLA"}
1
+ {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../../src/heatmap/components/Chart.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMzD,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAKlE,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAgDtM,wBAAgB,KAAK,CAAC,SAAS,EAAE,EAC7B,WAAW,EACX,QAAQ,EACR,UAAU,EACV,MAAM,EACN,KAAK,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,EACb,SAAS,EACT,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,GAAG,EACH,WAAW,EACX,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,YAAY,GACf,EAAE;IACC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,mBAAmB,CAAC;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7E,aAAa,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7F,aAAa,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7F,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM,CAAC;IACzC,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACpD,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAChD,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChC,WAAW,EAAE,gBAAgB,CAAC;IAC9B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,YAAY,CAAC,IAAI,GAAC,qBAAqB,CAAC,CAAC;CAC1D,2CAmLA"}