@milaboratories/miplots4 1.0.174 → 1.0.175

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 (98) hide show
  1. package/dist/DataFrame.d.ts +1 -1
  2. package/dist/DataFrame.d.ts.map +1 -1
  3. package/dist/DataFrame.js +52 -51
  4. package/dist/DataFrame.js.map +1 -1
  5. package/dist/bubble/BubbleSettingsImpl.d.ts +3 -0
  6. package/dist/bubble/BubbleSettingsImpl.d.ts.map +1 -1
  7. package/dist/bubble/BubbleSettingsImpl.js +16 -16
  8. package/dist/bubble/BubbleSettingsImpl.js.map +1 -1
  9. package/dist/bubble/getGroupedCellsData.d.ts +1 -1
  10. package/dist/bubble/getGroupedCellsData.d.ts.map +1 -1
  11. package/dist/bubble/getGroupedCellsData.js +12 -11
  12. package/dist/bubble/getGroupedCellsData.js.map +1 -1
  13. package/dist/bubble/index.d.ts.map +1 -1
  14. package/dist/bubble/index.js +61 -69
  15. package/dist/bubble/index.js.map +1 -1
  16. package/dist/constants.js +9 -11
  17. package/dist/constants.js.map +1 -1
  18. package/dist/discrete/DiscreteSettingsImpl.d.ts +2 -1
  19. package/dist/discrete/DiscreteSettingsImpl.d.ts.map +1 -1
  20. package/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
  21. package/dist/discrete/index.d.ts.map +1 -1
  22. package/dist/discrete/index.js +137 -157
  23. package/dist/discrete/index.js.map +1 -1
  24. package/dist/heatmap/HeatmapSettingsImpl.d.ts +1 -0
  25. package/dist/heatmap/HeatmapSettingsImpl.d.ts.map +1 -1
  26. package/dist/heatmap/HeatmapSettingsImpl.js +29 -28
  27. package/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
  28. package/dist/heatmap/fillCellsData.d.ts +1 -1
  29. package/dist/heatmap/fillCellsData.d.ts.map +1 -1
  30. package/dist/heatmap/fillCellsData.js +172 -160
  31. package/dist/heatmap/fillCellsData.js.map +1 -1
  32. package/dist/heatmap/getCells.d.ts +1 -1
  33. package/dist/heatmap/getCells.d.ts.map +1 -1
  34. package/dist/heatmap/getCells.js +10 -9
  35. package/dist/heatmap/getCells.js.map +1 -1
  36. package/dist/heatmap/index.d.ts.map +1 -1
  37. package/dist/heatmap/index.js +95 -102
  38. package/dist/heatmap/index.js.map +1 -1
  39. package/dist/histogram/HistogramSettingsImpl.d.ts +1 -0
  40. package/dist/histogram/HistogramSettingsImpl.d.ts.map +1 -1
  41. package/dist/histogram/HistogramSettingsImpl.js +43 -43
  42. package/dist/histogram/HistogramSettingsImpl.js.map +1 -1
  43. package/dist/histogram/getHistogramData.d.ts +2 -2
  44. package/dist/histogram/getHistogramData.d.ts.map +1 -1
  45. package/dist/histogram/getHistogramData.js +47 -46
  46. package/dist/histogram/getHistogramData.js.map +1 -1
  47. package/dist/histogram/index.d.ts +0 -1
  48. package/dist/histogram/index.d.ts.map +1 -1
  49. package/dist/histogram/index.js +88 -89
  50. package/dist/histogram/index.js.map +1 -1
  51. package/dist/index.d.ts +3 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +8 -4
  54. package/dist/index.js.map +1 -1
  55. package/dist/scatterplot/ScatterplotSettingsImpl.d.ts +2 -0
  56. package/dist/scatterplot/ScatterplotSettingsImpl.d.ts.map +1 -1
  57. package/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
  58. package/dist/scatterplot/dots.d.ts +2 -2
  59. package/dist/scatterplot/dots.d.ts.map +1 -1
  60. package/dist/scatterplot/dots.js +17 -16
  61. package/dist/scatterplot/dots.js.map +1 -1
  62. package/dist/scatterplot/index.d.ts +0 -1
  63. package/dist/scatterplot/index.d.ts.map +1 -1
  64. package/dist/scatterplot/index.js +92 -101
  65. package/dist/scatterplot/index.js.map +1 -1
  66. package/dist/scatterplot/utils/createLegendInfo.d.ts.map +1 -1
  67. package/dist/scatterplot/utils/createLegendInfo.js +1 -1
  68. package/dist/scatterplot/utils/createLegendInfo.js.map +1 -1
  69. package/dist/types/bubble.d.ts +5 -0
  70. package/dist/types/bubble.d.ts.map +1 -1
  71. package/dist/types/bubble.js +19 -18
  72. package/dist/types/bubble.js.map +1 -1
  73. package/dist/types/dendro.d.ts +5 -0
  74. package/dist/types/dendro.d.ts.map +1 -1
  75. package/dist/types/dendro.js +10 -9
  76. package/dist/types/dendro.js.map +1 -1
  77. package/dist/types/discrete.d.ts +8 -5
  78. package/dist/types/discrete.d.ts.map +1 -1
  79. package/dist/types/discrete.js +12 -11
  80. package/dist/types/discrete.js.map +1 -1
  81. package/dist/types/heatmap.d.ts +5 -0
  82. package/dist/types/heatmap.d.ts.map +1 -1
  83. package/dist/types/heatmap.js +2 -1
  84. package/dist/types/heatmap.js.map +1 -1
  85. package/dist/types/histogram.d.ts +5 -0
  86. package/dist/types/histogram.d.ts.map +1 -1
  87. package/dist/types/histogram.js +43 -42
  88. package/dist/types/histogram.js.map +1 -1
  89. package/dist/types/scatterplot.d.ts +6 -0
  90. package/dist/types/scatterplot.d.ts.map +1 -1
  91. package/dist/types/scatterplot.js +21 -19
  92. package/dist/types/scatterplot.js.map +1 -1
  93. package/dist/utils/getFacetKeysFromValueLists.d.ts +6 -0
  94. package/dist/utils/getFacetKeysFromValueLists.d.ts.map +1 -0
  95. package/dist/utils/getFacetKeysFromValueLists.js +9 -0
  96. package/dist/utils/getFacetKeysFromValueLists.js.map +1 -0
  97. package/dist/utils/getPointShape.d.ts +1 -1
  98. package/package.json +1 -1
@@ -1,115 +1,114 @@
1
- var x = Object.defineProperty;
2
- var A = (h, d, a) => d in h ? x(h, d, { enumerable: !0, configurable: !0, writable: !0, value: a }) : h[d] = a;
3
- var f = (h, d, a) => A(h, typeof d != "symbol" ? d + "" : d, a);
4
- import { l as w } from "../_virtual/lodash.js";
5
- import { s as L } from "../_virtual/server.browser.js";
6
- import { AbstractChart as B } from "../AbstractChart.js";
7
- import { getUnknownErrorInfo as C, isErrorInfo as y } from "../types/common.js";
1
+ var B = Object.defineProperty;
2
+ var O = (l, u, e) => u in l ? B(l, u, { enumerable: !0, configurable: !0, writable: !0, value: e }) : l[u] = e;
3
+ var y = (l, u, e) => O(l, typeof u != "symbol" ? u + "" : u, e);
4
+ import { l as b } from "../_virtual/lodash.js";
5
+ import { s as R } from "../_virtual/server.browser.js";
6
+ import { AbstractChart as V } from "../AbstractChart.js";
7
+ import { NO_GROUPED as I } from "../DataFrame.js";
8
+ import { getUnknownErrorInfo as E, isErrorInfo as S } from "../types/common.js";
8
9
  import "../types/discrete.js";
9
10
  import "../types/scatterplot.js";
10
11
  import "../types/heatmap.js";
11
12
  import "../types/dendro.js";
12
13
  import "../types/histogram.js";
13
14
  import "../types/bubble.js";
14
- import { getKeysCombinations as O } from "../utils/getKeysCombination.js";
15
- import R from "./ChartRenderer.js";
16
- import { createHistogramDataByFacets as S } from "./getHistogramData.js";
17
- import { HistogramSettingsImpl as D } from "./HistogramSettingsImpl.js";
18
- import { MAX_FACETS_COUNT as b, MAX_GROUPS_COUNT as _ } from "../constants.js";
19
- import { getFacetLabels as K } from "../discrete/utils/getFacetLabels.js";
20
- function I(h, d, a) {
21
- return d.reduce((t, e) => {
22
- const i = e.nullValueLabel ?? "NA", s = h.getColumnCategories(e.value, !1), u = (o) => e.valueLabels ? String(h.getColumnValue(
23
- e.valueLabels,
24
- h.getColumnCategoryRowIndex(e.value, o)
25
- )) : o, n = s.reduce((o, r) => (o[r] = u(r), o[r] === "null" && (o[r] = i), o), {});
26
- return t[e.value] = {
27
- values: s.sort((o, r) => n[o].localeCompare(n[r], "en", { numeric: !0 })),
28
- aesMap: a[e.value],
29
- labels: n
15
+ import { getKeysCombinations as k } from "../utils/getKeysCombination.js";
16
+ import F from "./ChartRenderer.js";
17
+ import { createHistogramDataByFacets as U } from "./getHistogramData.js";
18
+ import { HistogramSettingsImpl as x } from "./HistogramSettingsImpl.js";
19
+ import { getFacetLabels as G } from "../discrete/utils/getFacetLabels.js";
20
+ import { getFacetStringKey as D } from "../discrete/utils/getFacetStringKey.js";
21
+ import { arraysAreDifferent as H } from "../utils/arraysAreDifferent.js";
22
+ function T(l, u, e = null) {
23
+ const t = u.value, a = l.getColumnCategories(t);
24
+ return b.intersection(e ?? a, a).map(String);
25
+ }
26
+ function K(l, u, e) {
27
+ return u.reduce((t, a) => {
28
+ const r = a.nullValueLabel ?? "NA", n = l.getColumnCategories(a.value, !1), d = (s) => a.valueLabels ? String(l.getColumnValue(
29
+ a.valueLabels,
30
+ l.getColumnCategoryRowIndex(a.value, s)
31
+ )) : s, c = n.reduce((s, o) => (s[o] = d(o), s[o] === "null" && (s[o] = r), s), {});
32
+ return t[a.value] = {
33
+ values: n.sort((s, o) => c[s].localeCompare(c[o], "en", { numeric: !0 })),
34
+ aesMap: e[a.value],
35
+ labels: c
30
36
  }, t;
31
37
  }, {});
32
38
  }
33
- class Y extends B {
34
- constructor(a, t, e) {
35
- super(a, t);
36
- f(this, "settings");
37
- f(this, "chartRenderer", new R());
38
- f(this, "onTooltipHintSwitch", () => {
39
+ class nt extends V {
40
+ constructor(e, t, a) {
41
+ super(e, t);
42
+ y(this, "settings");
43
+ y(this, "chartRenderer", new F());
44
+ y(this, "onTooltipHintSwitch", () => {
39
45
  });
40
- f(this, "calculatedData", null);
41
- this.settings = new D(t), e && (this.onTooltipHintSwitch = e[0]);
46
+ y(this, "calculatedData", null);
47
+ this.settings = new x(t), a && (this.onTooltipHintSwitch = a[0]);
42
48
  }
43
- mount(a) {
49
+ mount(e) {
44
50
  try {
45
- this.chartRenderer.init(a), this._updateData(), this._updateChart(), this.hasError = !1, this.errorInfo = null;
51
+ this.chartRenderer.init(e), this._updateData(), this._updateChart(), this.hasError = !1, this.errorInfo = null;
46
52
  } catch (t) {
47
- this.hasError = !0, t instanceof Error && (this.errorInfo = y(t.cause) ? t.cause : C(t), this.chartRenderer.renderError(t.message), console.error(t));
53
+ this.hasError = !0, t instanceof Error && (this.errorInfo = S(t.cause) ? t.cause : E(t), this.chartRenderer.renderError(t.message), console.error(t));
48
54
  }
49
55
  }
50
56
  unmount() {
51
57
  this.chartRenderer.clear();
52
58
  }
53
- updateSettingsAndData(a, t) {
59
+ updateSettingsAndData(e, t) {
54
60
  try {
55
- const e = this.settings, i = this.data;
56
- this.settings = new D(t), this.data = a, this._needUpdateCalculatedDataBySettings(e, this.settings) || this._needUpdateCalculatedDataByData(i, this.data) ? this._updateData() : this._updateAesInData(), this._updateChart(), this.hasError = !1, this.errorInfo = null;
57
- } catch (e) {
58
- this.hasError = !0, e instanceof Error && (this.errorInfo = y(e.cause) ? e.cause : C(e), this.chartRenderer.renderError(e.message), console.error(e));
61
+ const a = this.settings, r = this.data;
62
+ this.settings = new x(t), this.data = e, this._needUpdateCalculatedDataBySettings(a, this.settings) || this._needUpdateCalculatedDataByData(r, this.data) ? this._updateData() : this._updateAesInData(), this._updateChart(), this.hasError = !1, this.errorInfo = null;
63
+ } catch (a) {
64
+ this.hasError = !0, a instanceof Error && (this.errorInfo = S(a.cause) ? a.cause : E(a), this.chartRenderer.renderError(a.message), console.error(a));
59
65
  }
60
66
  }
61
- updateChartState(a, t) {
67
+ updateChartState(e, t) {
62
68
  console.warn("no chart state for histogram");
63
69
  }
64
70
  export() {
65
- return this._updateChart(), L.renderToString(this.chartRenderer.component);
71
+ return this._updateChart(), R.renderToString(this.chartRenderer.component);
66
72
  }
67
- _needUpdateCalculatedDataBySettings(a, t) {
68
- var e, i, s, u, n, o;
69
- return a.valueColumn.value !== t.valueColumn.value || a.facetBy.some((r, g) => {
70
- var l;
71
- return r.value !== ((l = t.facetBy[g]) == null ? void 0 : l.value);
72
- }) || ((e = a.grouping) == null ? void 0 : e.value) !== ((i = t.grouping) == null ? void 0 : i.value) || ((s = a.grouping) == null ? void 0 : s.nullValueLabel) !== ((u = t.grouping) == null ? void 0 : u.nullValueLabel) || a.layers.length !== t.layers.length || a.layers.some((r, g) => r.type !== t.layers[g].type) || a.binsCount !== t.binsCount || a.chartSettings.xAxis.scale !== t.chartSettings.xAxis.scale || ((n = a.groupingOrder) == null ? void 0 : n.some((r, g) => {
73
- var l;
74
- return r !== ((l = t.groupingOrder) == null ? void 0 : l[g]);
75
- })) || ((o = t.groupingOrder) == null ? void 0 : o.some((r, g) => {
76
- var l;
77
- return r !== ((l = a.groupingOrder) == null ? void 0 : l[g]);
73
+ _needUpdateCalculatedDataBySettings(e, t) {
74
+ var a, r, n, d, c, s, o, i;
75
+ return e.valueColumn.value !== t.valueColumn.value || e.facetBy.some((h, p) => {
76
+ var g;
77
+ return h.value !== ((g = t.facetBy[p]) == null ? void 0 : g.value);
78
+ }) || H(((a = e.facetSettings) == null ? void 0 : a.order) ?? [], ((r = t.facetSettings) == null ? void 0 : r.order) ?? []) || ((n = e.grouping) == null ? void 0 : n.value) !== ((d = t.grouping) == null ? void 0 : d.value) || ((c = e.grouping) == null ? void 0 : c.nullValueLabel) !== ((s = t.grouping) == null ? void 0 : s.nullValueLabel) || e.layers.length !== t.layers.length || e.layers.some((h, p) => h.type !== t.layers[p].type) || e.binsCount !== t.binsCount || e.chartSettings.xAxis.scale !== t.chartSettings.xAxis.scale || ((o = e.groupingOrder) == null ? void 0 : o.some((h, p) => {
79
+ var g;
80
+ return h !== ((g = t.groupingOrder) == null ? void 0 : g[p]);
81
+ })) || ((i = t.groupingOrder) == null ? void 0 : i.some((h, p) => {
82
+ var g;
83
+ return h !== ((g = e.groupingOrder) == null ? void 0 : g[p]);
78
84
  }));
79
85
  }
80
- _needUpdateCalculatedDataByData(a, t) {
81
- const e = Object.keys(a.data), i = Object.keys(t.data);
82
- return a.id !== t.id || e.length !== i.length || e.some((s) => {
83
- var u;
84
- return a.data[s].length !== ((u = t.data[s]) == null ? void 0 : u.length);
86
+ _needUpdateCalculatedDataByData(e, t) {
87
+ const a = Object.keys(e.data), r = Object.keys(t.data);
88
+ return e.id !== t.id || a.length !== r.length || a.some((n) => {
89
+ var d;
90
+ return e.data[n].length !== ((d = t.data[n]) == null ? void 0 : d.length);
85
91
  });
86
92
  }
87
93
  _updateData() {
88
- const { valueColumn: a, facetBy: t, grouping: e, binsCount: i, chartSettings: s, inheritedAes: u, groupingOrder: n } = this.settings, o = t.map((c) => this.data.getColumnCategories(c.value)), r = o.length ? O([...o]) : [["null"]];
89
- if (r.length > b) {
90
- const c = {
91
- type: "tooManyFacets",
92
- info: { count: r.length, maxCount: b }
93
- };
94
- throw Error(c.type, { cause: c });
95
- }
96
- const g = t.map((c) => c.value) ?? null, l = e ? [e.value] : [];
97
- let p = e ? this.data.getColumnCategories(e.value, !1) : ["null"];
98
- if (p.length > _) {
99
- const c = {
100
- type: "tooManyHistogramGroups",
101
- info: { count: p.length, maxCount: _ }
102
- };
103
- throw Error(c.type, { cause: c });
94
+ var _;
95
+ const { valueColumn: e, facetBy: t, facetSettings: a, grouping: r, binsCount: n, chartSettings: d, inheritedAes: c, groupingOrder: s } = this.settings, o = t.length ? t.map((m) => m.value) : [null];
96
+ let i = k(
97
+ t.map((m) => T(this.data, m))
98
+ );
99
+ if (i.length === 0 && (i = [[I]]), (_ = a == null ? void 0 : a.order) != null && _.length) {
100
+ const m = i.map(D);
101
+ i = b.intersection(a.order, m).map((f) => i.find((A) => D(A) === f)).filter((f) => f != null);
104
102
  }
105
- n && (p = w.intersection(n, p)), this.data.setGrouping([...g, ...l]);
106
- const E = S(this.data, r, p, a, i, s.xAxis.scale), m = r.map((c) => c.join(", ")), v = K(this.data, t, m, r);
103
+ const h = i.map(D), p = G(this.data, t, h, i), g = t.length ? o.map((m, v) => [...new Set(i.map((f) => f[v]))]) : [void 0], L = [(r == null ? void 0 : r.value) ?? null];
104
+ let C = r ? this.data.getColumnCategories(r.value, !1).map(String) : [I];
105
+ r && s && (C = b.intersection(s, C.map(String))), this.data.setGrouping([...o, ...L], g);
106
+ const w = U(this.data, i, C, e, n, d.xAxis.scale);
107
107
  this.calculatedData = {
108
- facetKeys: m,
109
- facetKeysCombinations: r,
110
- facetLabels: v,
111
- histogramDataByFacets: E,
112
- legendInfo: I(this.data, e ? [e] : [], u)
108
+ facetKeys: h,
109
+ facetLabels: p,
110
+ histogramDataByFacets: w,
111
+ legendInfo: K(this.data, r ? [r] : [], c)
113
112
  };
114
113
  }
115
114
  _updateAesInData() {
@@ -118,27 +117,27 @@ class Y extends B {
118
117
  _updateChart() {
119
118
  if (!this.calculatedData)
120
119
  return;
121
- const { facetLabels: a } = this.calculatedData, { id: t, chartSettings: e, facetSettings: i, inheritedAes: s, layers: u, grouping: n, groupingDirection: o, groupingStack: r, facetBy: g } = this.settings;
122
- this.calculatedData.legendInfo = I(this.data, n ? [n] : [], s), this.chartRenderer.render(
120
+ const { facetLabels: e } = this.calculatedData, { id: t, chartSettings: a, facetSettings: r, inheritedAes: n, layers: d, grouping: c, groupingDirection: s, groupingStack: o, facetBy: i } = this.settings;
121
+ this.calculatedData.legendInfo = K(this.data, c ? [c] : [], n), this.chartRenderer.render(
123
122
  this.data,
124
123
  t,
125
- e,
126
- i,
124
+ a,
125
+ r,
127
126
  this.calculatedData.facetKeys,
128
- this.calculatedData.facetKeys.map((l) => a[l]),
127
+ this.calculatedData.facetKeys.map((h) => e[h]),
129
128
  //for titles, if facet by more than 1 column
130
129
  this.calculatedData.histogramDataByFacets,
131
130
  this.calculatedData.legendInfo,
132
- u,
133
- s,
131
+ d,
134
132
  n,
135
- r,
133
+ c,
136
134
  o,
135
+ s,
137
136
  this.onTooltipHintSwitch
138
137
  );
139
138
  }
140
139
  }
141
140
  export {
142
- Y as ChartHistogram
141
+ nt as ChartHistogram
143
142
  };
144
143
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/histogram/index.ts"],"sourcesContent":["import { intersection } from 'lodash';\nimport { renderToString } from 'react-dom/server.browser';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type { ErrorInfoHistogramGroups} from '../types';\nimport { type Category, type ColumnName, type ErrorInfoFacets, getUnknownErrorInfo, type HistogramEventHandlers, type HistogramSettings, isErrorInfo } from '../types';\nimport { getKeysCombinations } from '../utils/getKeysCombination';\nimport ChartRenderer from './ChartRenderer';\nimport type { HistogramLegendInfo } from './components/types';\nimport type { GroupedHistogramData } from './getHistogramData';\nimport { createHistogramDataByFacets } from './getHistogramData';\nimport { HistogramSettingsImpl } from './HistogramSettingsImpl';\nimport { MAX_FACETS_COUNT, MAX_GROUPS_COUNT } from '../constants';\nimport { getFacetLabels } from '../discrete/utils/getFacetLabels';\n\nfunction getLegendInfo(\n data: DataFrame,\n grouping: ColumnName[],\n inheritedAes: HistogramSettingsImpl['inheritedAes']\n): HistogramLegendInfo {\n return grouping.reduce((res: HistogramLegendInfo, column) => {\n const nullValueLabel = column.nullValueLabel ?? 'NA';\n const categories = data.getColumnCategories(column.value, false);\n const getValueLabel = (category: Category) => (column.valueLabels\n ? String(data.getColumnValue(\n column.valueLabels,\n data.getColumnCategoryRowIndex(column.value, category)\n ))\n : category\n );\n const labels = categories.reduce((res: Record<string, string>, category) => {\n res[category] = getValueLabel(category);\n if (res[category] === 'null') {\n res[category] = nullValueLabel;\n }\n return res;\n }, {});\n res[column.value] = {\n values: categories.sort((a, b) => labels[a].localeCompare(labels[b], 'en', {numeric: true})),\n aesMap: inheritedAes[column.value],\n labels,\n };\n return res;\n }, {});\n}\n\nexport class ChartHistogram extends AbstractChart {\n settings: HistogramSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n facetKeys: string[];\n facetKeysCombinations: string[][];\n histogramDataByFacets: Record<string, GroupedHistogramData>\n legendInfo: HistogramLegendInfo;\n facetLabels: Record<string, string[]>;\n } | null = null;\n\n constructor(data: DataFrame, settings: HistogramSettings, eventHandlers?: HistogramEventHandlers) {\n super(data, settings);\n\n this.settings = new HistogramSettingsImpl(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 this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\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: HistogramSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new HistogramSettingsImpl(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 this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\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 histogram');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: HistogramSettingsImpl, settings: HistogramSettingsImpl) {\n return (\n prevSettings.valueColumn.value !== settings.valueColumn.value ||\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.grouping?.value !== settings.grouping?.value ||\n prevSettings.grouping?.nullValueLabel !== settings.grouping?.nullValueLabel ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n prevSettings.binsCount !== settings.binsCount ||\n prevSettings.chartSettings.xAxis.scale !== settings.chartSettings.xAxis.scale ||\n prevSettings.groupingOrder?.some((key, idx) => key !== settings.groupingOrder?.[idx]) ||\n settings.groupingOrder?.some((key, idx) => key !== prevSettings.groupingOrder?.[idx])\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 {valueColumn, facetBy, grouping, binsCount, chartSettings, inheritedAes, groupingOrder} = this.settings;\n\n const facetKeysLists = facetBy.map(column => this.data.getColumnCategories(column.value));\n const facetKeysCombinations = facetKeysLists.length ? getKeysCombinations([...facetKeysLists]) : [['null']];\n\n if (facetKeysCombinations.length > MAX_FACETS_COUNT) {\n const errorInfo: ErrorInfoFacets = {\n type: 'tooManyFacets',\n info: {count: facetKeysCombinations.length, maxCount: MAX_FACETS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n\n const facetGroupingValues = facetBy.map(column => column.value) ?? null;\n const groupingValues = grouping ? [grouping.value] : [];\n let groupingKeys = grouping ? this.data.getColumnCategories(grouping.value, false) : ['null'];\n if (groupingKeys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoHistogramGroups = {\n type: 'tooManyHistogramGroups',\n info: {count: groupingKeys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n if (groupingOrder) {\n groupingKeys = intersection(groupingOrder, groupingKeys);\n }\n\n this.data.setGrouping([...facetGroupingValues, ...groupingValues]);\n const histogramDataByFacets = createHistogramDataByFacets(this.data, facetKeysCombinations, groupingKeys, valueColumn, binsCount, chartSettings.xAxis.scale);\n\n const facetKeys = facetKeysCombinations.map(v => v.join(', '));\n const facetLabels = getFacetLabels(this.data, facetBy, facetKeys, facetKeysCombinations);\n this.calculatedData = {\n facetKeys,\n facetKeysCombinations,\n facetLabels,\n histogramDataByFacets,\n legendInfo: getLegendInfo(this.data, grouping ? [grouping] : [], inheritedAes)\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {facetLabels} = this.calculatedData;\n const {id, chartSettings, facetSettings, inheritedAes, layers, grouping, groupingDirection, groupingStack, facetBy} = this.settings;\n this.calculatedData.legendInfo = getLegendInfo(this.data, grouping ? [grouping] : [], inheritedAes);\n\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeys.map(key => facetLabels[key]),\n //for titles, if facet by more than 1 column\n this.calculatedData.histogramDataByFacets,\n this.calculatedData.legendInfo,\n layers,\n inheritedAes,\n grouping,\n groupingStack,\n groupingDirection,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["getLegendInfo","data","grouping","inheritedAes","res","column","nullValueLabel","categories","getValueLabel","category","labels","a","b","ChartHistogram","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","HistogramSettingsImpl","node","err","isErrorInfo","getUnknownErrorInfo","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","_b","_c","_d","l","_e","key","_f","prevData","prevKeys","keys","valueColumn","facetBy","binsCount","chartSettings","groupingOrder","facetKeysLists","facetKeysCombinations","getKeysCombinations","MAX_FACETS_COUNT","errorInfo","facetGroupingValues","groupingValues","groupingKeys","MAX_GROUPS_COUNT","intersection","histogramDataByFacets","createHistogramDataByFacets","facetKeys","v","facetLabels","getFacetLabels","id","facetSettings","layers","groupingDirection","groupingStack"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/histogram/index.ts"],"sourcesContent":["import { intersection } from 'lodash';\nimport { renderToString } from 'react-dom/server.browser';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame} from '../DataFrame';\nimport { type GroupKey, NO_GROUPED } from '../DataFrame';\nimport type { DataValue} from '../types';\nimport { type Category, type ColumnName, getUnknownErrorInfo, type HistogramEventHandlers, type HistogramSettings, isErrorInfo } from '../types';\nimport { getKeysCombinations } from '../utils/getKeysCombination';\nimport ChartRenderer from './ChartRenderer';\nimport type { HistogramLegendInfo } from './components/types';\nimport type { GroupedHistogramData } from './getHistogramData';\nimport { createHistogramDataByFacets } from './getHistogramData';\nimport { HistogramSettingsImpl } from './HistogramSettingsImpl';\nimport { getFacetLabels } from '../discrete/utils/getFacetLabels';\nimport { getFacetStringKey } from '../discrete/utils/getFacetStringKey';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\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\nfunction getLegendInfo(\n data: DataFrame,\n grouping: ColumnName[],\n inheritedAes: HistogramSettingsImpl['inheritedAes']\n): HistogramLegendInfo {\n return grouping.reduce((res: HistogramLegendInfo, column) => {\n const nullValueLabel = column.nullValueLabel ?? 'NA';\n const categories = data.getColumnCategories(column.value, false);\n const getValueLabel = (category: Category) => (column.valueLabels\n ? String(data.getColumnValue(\n column.valueLabels,\n data.getColumnCategoryRowIndex(column.value, category)\n ))\n : category\n );\n const labels = categories.reduce((res: Record<string, string>, category) => {\n res[category] = getValueLabel(category);\n if (res[category] === 'null') {\n res[category] = nullValueLabel;\n }\n return res;\n }, {});\n res[column.value] = {\n values: categories.sort((a, b) => labels[a].localeCompare(labels[b], 'en', {numeric: true})),\n aesMap: inheritedAes[column.value],\n labels,\n };\n return res;\n }, {});\n}\n\nexport class ChartHistogram extends AbstractChart {\n settings: HistogramSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n facetKeys: string[];\n histogramDataByFacets: Record<string, GroupedHistogramData>\n legendInfo: HistogramLegendInfo;\n facetLabels: Record<string, string[]>;\n } | null = null;\n\n constructor(data: DataFrame, settings: HistogramSettings, eventHandlers?: HistogramEventHandlers) {\n super(data, settings);\n\n this.settings = new HistogramSettingsImpl(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 this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\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: HistogramSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new HistogramSettingsImpl(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 this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\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 histogram');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: HistogramSettingsImpl, settings: HistogramSettingsImpl) {\n return (\n prevSettings.valueColumn.value !== settings.valueColumn.value ||\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n arraysAreDifferent(prevSettings.facetSettings?.order ?? [], settings.facetSettings?.order ?? []) ||\n prevSettings.grouping?.value !== settings.grouping?.value ||\n prevSettings.grouping?.nullValueLabel !== settings.grouping?.nullValueLabel ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n prevSettings.binsCount !== settings.binsCount ||\n prevSettings.chartSettings.xAxis.scale !== settings.chartSettings.xAxis.scale ||\n prevSettings.groupingOrder?.some((key, idx) => key !== settings.groupingOrder?.[idx]) ||\n settings.groupingOrder?.some((key, idx) => key !== prevSettings.groupingOrder?.[idx])\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 {valueColumn, facetBy, facetSettings, grouping, binsCount, chartSettings, inheritedAes, groupingOrder} = this.settings;\n\n const facetGroupingValues = facetBy.length ? facetBy.map(column => column.value) : [null];\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 let facetKeyLists: (GroupKey)[][] = getKeysCombinations(\n facetBy.map(column => getGroupingKeys(this.data, column))\n );\n if (facetKeyLists.length === 0) {\n facetKeyLists = [[NO_GROUPED]];\n }\n if (facetSettings?.order?.length) {\n const allFacetKeys = facetKeyLists.map(getFacetStringKey);\n const keyOrder = intersection(facetSettings.order, allFacetKeys);\n facetKeyLists = keyOrder\n .map((keyStr) => facetKeyLists.find((fkl) => getFacetStringKey(fkl) === keyStr))\n .filter((x): x is GroupKey[] => x != null);\n }\n const facetKeys = facetKeyLists.map(getFacetStringKey);\n const facetLabels = getFacetLabels(this.data, facetBy, facetKeys, facetKeyLists);\n const facetGroupingKeys = facetBy.length\n ? facetGroupingValues.map((_, idx) => [...new Set(facetKeyLists.map(fkl => fkl[idx]))])\n : [undefined];\n const groupingValues = [grouping?.value ?? null];\n \n let groupingKeys: GroupKey[] = grouping ? this.data.getColumnCategories(grouping.value, false).map(String) : [NO_GROUPED];\n if (grouping && groupingOrder) {\n groupingKeys = intersection(groupingOrder, groupingKeys.map(String));\n }\n\n this.data.setGrouping([...facetGroupingValues, ...groupingValues], facetGroupingKeys);\n const histogramDataByFacets = createHistogramDataByFacets(this.data, facetKeyLists, groupingKeys, valueColumn, binsCount, chartSettings.xAxis.scale);\n\n this.calculatedData = {\n facetKeys,\n facetLabels,\n histogramDataByFacets,\n legendInfo: getLegendInfo(this.data, grouping ? [grouping] : [], inheritedAes)\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {facetLabels} = this.calculatedData;\n const {id, chartSettings, facetSettings, inheritedAes, layers, grouping, groupingDirection, groupingStack, facetBy} = this.settings;\n this.calculatedData.legendInfo = getLegendInfo(this.data, grouping ? [grouping] : [], inheritedAes);\n\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeys.map(key => facetLabels[key]),\n //for titles, if facet by more than 1 column\n this.calculatedData.histogramDataByFacets,\n this.calculatedData.legendInfo,\n layers,\n inheritedAes,\n grouping,\n groupingStack,\n groupingDirection,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["getGroupingKeys","data","column","order","groupingColumn","availableKeys","intersection","getLegendInfo","grouping","inheritedAes","res","nullValueLabel","categories","getValueLabel","category","labels","a","b","ChartHistogram","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","HistogramSettingsImpl","node","err","isErrorInfo","getUnknownErrorInfo","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","arraysAreDifferent","_b","_c","_d","_e","_f","l","_g","key","_h","prevData","prevKeys","keys","valueColumn","facetBy","facetSettings","binsCount","chartSettings","groupingOrder","facetGroupingValues","facetKeyLists","getKeysCombinations","NO_GROUPED","allFacetKeys","getFacetStringKey","keyStr","fkl","x","facetKeys","facetLabels","getFacetLabels","facetGroupingKeys","_","groupingValues","groupingKeys","histogramDataByFacets","createHistogramDataByFacets","id","layers","groupingDirection","groupingStack"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,5 +4,7 @@ import { MiPlots } from './MiPlots';
4
4
  import { BubbleSettings, DendroSettings, DiscreteSettings, ErrorInfo, ErrorInfoUnknown, HeatmapSettings, HistogramSettings, ScatterplotSettings, ScatterplotUmapSettings, Settings, AxisSettingsContinuous, AxisSettingsDiscrete } from './types';
5
5
  import { LassoControlsState, Polygon } from './scatterplot-umap/types';
6
6
  import { SCATTERPLOT_CONTROLS_EVENTS } from './scatterplot-umap/constants';
7
- export { BubbleSettings, ChartInterface, DataByColumns, DendroSettings, DiscreteSettings, HeatmapSettings, HistogramSettings, MiPlots, ScatterplotSettings, ScatterplotUmapSettings, Settings, AxisSettingsDiscrete, AxisSettingsContinuous, SCATTERPLOT_CONTROLS_EVENTS, LassoControlsState, Polygon, ErrorInfo, ErrorInfoUnknown };
7
+ import { getFacetKeysFromValueLists } from './utils/getFacetKeysFromValueLists';
8
+ import { getKeysCombinations } from './utils/getKeysCombination';
9
+ export { BubbleSettings, ChartInterface, DataByColumns, DendroSettings, DiscreteSettings, getFacetKeysFromValueLists, getKeysCombinations, HeatmapSettings, HistogramSettings, MiPlots, ScatterplotSettings, ScatterplotUmapSettings, Settings, AxisSettingsDiscrete, AxisSettingsContinuous, SCATTERPLOT_CONTROLS_EVENTS, LassoControlsState, Polygon, ErrorInfo, ErrorInfoUnknown };
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACzM,OAAO,KAAK,EAAC,kBAAkB,EAAE,OAAO,EAAC,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAC,2BAA2B,EAAC,MAAM,8BAA8B,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE5E,OAAO,EACH,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAChG,iBAAiB,EAAE,OAAO,EAAE,mBAAmB,EAC/C,uBAAuB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,sBAAsB,EAC/E,2BAA2B,EAAE,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EACxF,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACzM,OAAO,KAAK,EAAC,kBAAkB,EAAE,OAAO,EAAC,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAC,2BAA2B,EAAC,MAAM,8BAA8B,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EACH,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,mBAAmB,EAChI,eAAe,EAAE,iBAAiB,EAAE,OAAO,EAAE,mBAAmB,EAChE,uBAAuB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,sBAAsB,EAC/E,2BAA2B,EAAE,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EACxF,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,11 @@
1
- import { MiPlots as r } from "./MiPlots.js";
2
- import { SCATTERPLOT_CONTROLS_EVENTS as E } from "./scatterplot-umap/constants.js";
1
+ import { MiPlots as t } from "./MiPlots.js";
2
+ import { SCATTERPLOT_CONTROLS_EVENTS as m } from "./scatterplot-umap/constants.js";
3
+ import { getFacetKeysFromValueLists as T } from "./utils/getFacetKeysFromValueLists.js";
4
+ import { getKeysCombinations as i } from "./utils/getKeysCombination.js";
3
5
  export {
4
- r as MiPlots,
5
- E as SCATTERPLOT_CONTROLS_EVENTS
6
+ t as MiPlots,
7
+ m as SCATTERPLOT_CONTROLS_EVENTS,
8
+ T as getFacetKeysFromValueLists,
9
+ i as getKeysCombinations
6
10
  };
7
11
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -33,6 +33,8 @@ export declare class ScatterplotSettingsImpl implements SettingsInterface {
33
33
  readonly facetSettings: {
34
34
  sharedX: boolean;
35
35
  sharedY: boolean;
36
+ /** Ordered list of facet keys; only these facets are shown, in this order */
37
+ order?: string[];
36
38
  nRows?: number;
37
39
  nCols?: number;
38
40
  titlePosition: 'left' | 'center' | 'right';
@@ -1 +1 @@
1
- {"version":3,"file":"ScatterplotSettingsImpl.d.ts","sourceRoot":"","sources":["../../src/scatterplot/ScatterplotSettingsImpl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScatterplotSettingsImpl.d.ts","sourceRoot":"","sources":["../../src/scatterplot/ScatterplotSettingsImpl.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ScatterplotSettingsImpl.js","sources":["../../src/scatterplot/ScatterplotSettingsImpl.ts"],"sourcesContent":["import lodash from 'lodash';\nimport {BLACK, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL} from '../constants';\nimport type {\n AxisSettingsContinuous,\n AxisSettingsDiscrete,\n ColumnName,\n ContinuousAesFromColumn,\n DataValue,\n FrameType,\n InheritAesScatterplot,\n LegendPosition,\n LineShape,\n CurveLayer as OuterCurveLayer,\n DotsLayer as OuterDotsLayer,\n PointShape,\n ScatterplotSettings,\n SettingsInterface,\n TitlePosition,\n} from '../types';\nimport {type AesRecord, ScatterplotSettingsSchema} from '../types';\nimport {exhaustive} from '../utils';\n\nexport class DotsLayer {\n readonly type = 'dots';\n readonly aes: {\n dotFill: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n dotShape: PointShape | InheritAesScatterplot;\n dotSize: number | ContinuousAesFromColumn<number>;\n opacity: number;\n } = {\n dotFill: BLACK,\n dotShape: '21',\n dotSize: 3,\n opacity: 1,\n };\n\n constructor(layer: OuterDotsLayer) {\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport class CurveLayer {\n readonly type = 'curve';\n readonly smoothing: boolean;\n readonly aes: {\n lineColor: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n lineWidth: number;\n lineShape: LineShape;\n opacity: number;\n } = {\n lineColor: BLACK,\n lineWidth: 1,\n lineShape: 'solid',\n opacity: 1,\n };\n\n constructor(layer: OuterCurveLayer) {\n this.smoothing = layer.smoothing ?? false;\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport type ScatterplotLayer = DotsLayer | CurveLayer;\n\nexport type ScatterplotAxisSettings =\n AxisSettingsDiscrete & {title: string | ColumnName}\n | AxisSettingsContinuous & {title: string | ColumnName}\n\nexport class ScatterplotSettingsImpl implements SettingsInterface {\n readonly id: string;\n readonly type = 'scatterplot';\n readonly keyColumn: ColumnName;\n readonly facetSettings: {\n sharedX: boolean;\n sharedY: boolean;\n nRows?: number;\n nCols?: number;\n titlePosition: 'left' | 'center' | 'right';\n };\n readonly x: ColumnName;\n readonly y: ColumnName;\n readonly facetBy: ColumnName[];\n readonly grouping: {\n columnName: ColumnName;\n order?: DataValue[];\n inheritedAes?: AesRecord;\n }[];\n readonly dotSize: {\n columnName: ColumnName;\n inheritedAes?: AesRecord;\n }[];\n readonly dotShape: {\n columnName: ColumnName;\n inheritedAes?: AesRecord;\n }[];\n readonly label: ColumnName | null;\n readonly highlight: ColumnName | null;\n readonly chartSettings: {\n readonly size: {width: number; height: number};\n readonly title: {name: string; show: boolean; position: TitlePosition};\n readonly yAxis: ScatterplotAxisSettings;\n readonly xAxis: ScatterplotAxisSettings;\n readonly frame: {type: FrameType};\n readonly legend: {show: boolean; position: LegendPosition};\n readonly tooltips: {show: boolean; content?: ColumnName[]};\n };\n\n readonly trend: {\n bounded: boolean;\n color: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n } | null;\n\n readonly layers: ScatterplotLayer[];\n\n constructor(settings: ScatterplotSettings) {\n ScatterplotSettingsSchema.parse(settings);\n this.id = lodash.uniqueId('settings');\n this.keyColumn = settings.keyColumn;\n this.facetSettings = {sharedX: true, sharedY: true, titlePosition: 'left', ...settings.facetSettings};\n this.x = settings.x;\n this.y = settings.y;\n this.facetBy = settings.facetBy ?? [];\n this.grouping = settings.grouping ?? [];\n this.dotSize = settings.dotSize ?? [];\n this.dotShape = settings.dotShape ?? [];\n this.label = settings.label ?? null;\n this.highlight = settings.highlight ?? null;\n this.chartSettings = {\n size: {\n width: settings?.size?.width ?? (this.facetBy.length ? DEFAULT_WIDTH_SMALL : DEFAULT_WIDTH),\n height: settings?.size?.height ?? (this.facetBy.length ? DEFAULT_HEIGHT_SMALL : DEFAULT_HEIGHT),\n },\n title: {\n position: 'center',\n show: true,\n ...settings.title,\n name: settings.title?.name ?? 'Chart',\n },\n yAxis: {\n title: settings.y.label ?? settings.y.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.yAxis,\n },\n xAxis: {\n title: settings.x.label ?? settings.x.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.xAxis,\n },\n frame: {type: settings.frame?.type ?? 'full'},\n legend: {\n show: true,\n position: 'right',\n ...settings.legend,\n },\n tooltips: {\n ...settings.tooltips,\n show: !(settings.tooltips?.show === false) && (settings.tooltips?.content ?? []).length > 0,\n },\n };\n\n this.trend = settings?.trend && this.chartSettings.xAxis.scale !== 'discrete' && this.chartSettings.yAxis.scale !== 'discrete'\n ? {\n bounded: settings.trend.bounded ?? false,\n color: settings.trend.color ?? BLACK,\n }\n : null;\n\n this.layers = settings.layers\n .map(layer => {\n if (layer.type === 'dots') {\n return new DotsLayer(layer);\n }\n if (layer.type === 'curve') {\n return new CurveLayer(layer);\n }\n exhaustive(layer, 'Unknown layer type');\n })\n .filter(Boolean) as ScatterplotLayer[];\n }\n}\n"],"names":["DotsLayer","layer","__publicField","BLACK","CurveLayer","ScatterplotSettingsImpl","settings","ScatterplotSettingsSchema","lodash","_a","DEFAULT_WIDTH_SMALL","DEFAULT_WIDTH","_b","DEFAULT_HEIGHT_SMALL","DEFAULT_HEIGHT","_c","_d","_e","_f","exhaustive"],"mappings":"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"}
1
+ {"version":3,"file":"ScatterplotSettingsImpl.js","sources":["../../src/scatterplot/ScatterplotSettingsImpl.ts"],"sourcesContent":["import lodash from 'lodash';\nimport {BLACK, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL} from '../constants';\nimport type {\n AxisSettingsContinuous,\n AxisSettingsDiscrete,\n ColumnName,\n ContinuousAesFromColumn,\n DataValue,\n FrameType,\n InheritAesScatterplot,\n LegendPosition,\n LineShape,\n CurveLayer as OuterCurveLayer,\n DotsLayer as OuterDotsLayer,\n PointShape,\n ScatterplotSettings,\n SettingsInterface,\n TitlePosition,\n} from '../types';\nimport {type AesRecord, ScatterplotSettingsSchema} from '../types';\nimport {exhaustive} from '../utils';\n\nexport class DotsLayer {\n readonly type = 'dots';\n readonly aes: {\n dotFill: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n dotShape: PointShape | InheritAesScatterplot;\n dotSize: number | ContinuousAesFromColumn<number>;\n opacity: number;\n } = {\n dotFill: BLACK,\n dotShape: '21',\n dotSize: 3,\n opacity: 1,\n };\n\n constructor(layer: OuterDotsLayer) {\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport class CurveLayer {\n readonly type = 'curve';\n readonly smoothing: boolean;\n readonly aes: {\n lineColor: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n lineWidth: number;\n lineShape: LineShape;\n opacity: number;\n } = {\n lineColor: BLACK,\n lineWidth: 1,\n lineShape: 'solid',\n opacity: 1,\n };\n\n constructor(layer: OuterCurveLayer) {\n this.smoothing = layer.smoothing ?? false;\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport type ScatterplotLayer = DotsLayer | CurveLayer;\n\nexport type ScatterplotAxisSettings =\n AxisSettingsDiscrete & {title: string | ColumnName}\n | AxisSettingsContinuous & {title: string | ColumnName}\n\nexport class ScatterplotSettingsImpl implements SettingsInterface {\n readonly id: string;\n readonly type = 'scatterplot';\n readonly keyColumn: ColumnName;\n readonly facetSettings: {\n sharedX: boolean;\n sharedY: boolean;\n /** Ordered list of facet keys; only these facets are shown, in this order */\n order?: string[];\n nRows?: number;\n nCols?: number;\n titlePosition: 'left' | 'center' | 'right';\n };\n readonly x: ColumnName;\n readonly y: ColumnName;\n readonly facetBy: ColumnName[];\n readonly grouping: {\n columnName: ColumnName;\n order?: DataValue[];\n inheritedAes?: AesRecord;\n }[];\n readonly dotSize: {\n columnName: ColumnName;\n inheritedAes?: AesRecord;\n }[];\n readonly dotShape: {\n columnName: ColumnName;\n inheritedAes?: AesRecord;\n }[];\n readonly label: ColumnName | null;\n readonly highlight: ColumnName | null;\n readonly chartSettings: {\n readonly size: {width: number; height: number};\n readonly title: {name: string; show: boolean; position: TitlePosition};\n readonly yAxis: ScatterplotAxisSettings;\n readonly xAxis: ScatterplotAxisSettings;\n readonly frame: {type: FrameType};\n readonly legend: {show: boolean; position: LegendPosition};\n readonly tooltips: {show: boolean; content?: ColumnName[]};\n };\n\n readonly trend: {\n bounded: boolean;\n color: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n } | null;\n\n readonly layers: ScatterplotLayer[];\n\n constructor(settings: ScatterplotSettings) {\n ScatterplotSettingsSchema.parse(settings);\n this.id = lodash.uniqueId('settings');\n this.keyColumn = settings.keyColumn;\n this.facetSettings = {sharedX: true, sharedY: true, titlePosition: 'left', ...settings.facetSettings};\n this.x = settings.x;\n this.y = settings.y;\n this.facetBy = settings.facetBy ?? [];\n this.grouping = settings.grouping ?? [];\n this.dotSize = settings.dotSize ?? [];\n this.dotShape = settings.dotShape ?? [];\n this.label = settings.label ?? null;\n this.highlight = settings.highlight ?? null;\n this.chartSettings = {\n size: {\n width: settings?.size?.width ?? (this.facetBy.length ? DEFAULT_WIDTH_SMALL : DEFAULT_WIDTH),\n height: settings?.size?.height ?? (this.facetBy.length ? DEFAULT_HEIGHT_SMALL : DEFAULT_HEIGHT),\n },\n title: {\n position: 'center',\n show: true,\n ...settings.title,\n name: settings.title?.name ?? 'Chart',\n },\n yAxis: {\n title: settings.y.label ?? settings.y.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.yAxis,\n },\n xAxis: {\n title: settings.x.label ?? settings.x.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.xAxis,\n },\n frame: {type: settings.frame?.type ?? 'full'},\n legend: {\n show: true,\n position: 'right',\n ...settings.legend,\n },\n tooltips: {\n ...settings.tooltips,\n show: !(settings.tooltips?.show === false) && (settings.tooltips?.content ?? []).length > 0,\n },\n };\n\n this.trend = settings?.trend && this.chartSettings.xAxis.scale !== 'discrete' && this.chartSettings.yAxis.scale !== 'discrete'\n ? {\n bounded: settings.trend.bounded ?? false,\n color: settings.trend.color ?? BLACK,\n }\n : null;\n\n this.layers = settings.layers\n .map(layer => {\n if (layer.type === 'dots') {\n return new DotsLayer(layer);\n }\n if (layer.type === 'curve') {\n return new CurveLayer(layer);\n }\n exhaustive(layer, 'Unknown layer type');\n })\n .filter(Boolean) as ScatterplotLayer[];\n }\n}\n"],"names":["DotsLayer","layer","__publicField","BLACK","CurveLayer","ScatterplotSettingsImpl","settings","ScatterplotSettingsSchema","lodash","_a","DEFAULT_WIDTH_SMALL","DEFAULT_WIDTH","_b","DEFAULT_HEIGHT_SMALL","DEFAULT_HEIGHT","_c","_d","_e","_f","exhaustive"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { DataFrame } from '../DataFrame';
1
+ import { DataFrame, GroupKey } from '../DataFrame';
2
2
  import { ColumnName, DataValue } from '../types';
3
3
  import { DotsLayer, ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';
4
4
  export type Dot = {
@@ -15,5 +15,5 @@ export type GroupedDots = Record<string, {
15
15
  maxY: number;
16
16
  dots: Dot[];
17
17
  }>;
18
- export declare function getDots(data: DataFrame, facetKeysCombinations: string[][], x: ColumnName, y: ColumnName, label: ColumnName | null, highlight: ColumnName | null, grouping: ScatterplotSettingsImpl['grouping'], xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'], yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'], dotsLayer?: DotsLayer): GroupedDots;
18
+ export declare function getDots(data: DataFrame, facetKeysCombinations: GroupKey[][], x: ColumnName, y: ColumnName, label: ColumnName | null, highlight: ColumnName | null, grouping: ScatterplotSettingsImpl['grouping'], xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'], yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'], dotsLayer?: DotsLayer): GroupedDots;
19
19
  //# sourceMappingURL=dots.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dots.d.ts","sourceRoot":"","sources":["../../src/scatterplot/dots.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAIpF,MAAM,MAAM,GAAG,GAAG;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,MAAM,CAC5B,MAAM,EACN;IACI,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;CACf,CACJ,CAAC;AAEF,wBAAgB,OAAO,CACnB,IAAI,EAAE,SAAS,EACf,qBAAqB,EAAE,MAAM,EAAE,EAAE,EACjC,CAAC,EAAE,UAAU,EACb,CAAC,EAAE,UAAU,EACb,KAAK,EAAE,UAAU,GAAG,IAAI,EACxB,SAAS,EAAE,UAAU,GAAG,IAAI,EAC5B,QAAQ,EAAE,uBAAuB,CAAC,UAAU,CAAC,EAC7C,KAAK,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACxD,KAAK,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACxD,SAAS,CAAC,EAAE,SAAS,GACtB,WAAW,CAqDb"}
1
+ {"version":3,"file":"dots.d.ts","sourceRoot":"","sources":["../../src/scatterplot/dots.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAKpF,MAAM,MAAM,GAAG,GAAG;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,MAAM,CAC5B,MAAM,EACN;IACI,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;CACf,CACJ,CAAC;AAEF,wBAAgB,OAAO,CACnB,IAAI,EAAE,SAAS,EACf,qBAAqB,EAAE,QAAQ,EAAE,EAAE,EACnC,CAAC,EAAE,UAAU,EACb,CAAC,EAAE,UAAU,EACb,KAAK,EAAE,UAAU,GAAG,IAAI,EACxB,SAAS,EAAE,UAAU,GAAG,IAAI,EAC5B,QAAQ,EAAE,uBAAuB,CAAC,UAAU,CAAC,EAC7C,KAAK,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACxD,KAAK,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACxD,SAAS,CAAC,EAAE,SAAS,GACtB,WAAW,CAoDb"}
@@ -1,23 +1,24 @@
1
- import { formatColumnValue as F } from "./utils/formatColumnValue.js";
2
- import { sortDotsByGrouping as G } from "./utils/sortDotsByGrouping.js";
3
- import { format as X } from "../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js";
4
- function h(t, x, v, I, o, m, g, C, M, V) {
5
- const l = {}, d = o != null && o.format ? X(o.format) : void 0;
6
- for (const p of x) {
1
+ import { formatColumnValue as d } from "./utils/formatColumnValue.js";
2
+ import { sortDotsByGrouping as w } from "./utils/sortDotsByGrouping.js";
3
+ import { getFacetStringKey as X } from "../discrete/utils/getFacetStringKey.js";
4
+ import { format as Y } from "../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js";
5
+ function R(t, x, g, v, o, m, C, I, F, M) {
6
+ const l = {}, V = o != null && o.format ? Y(o.format) : void 0;
7
+ for (const y of x) {
7
8
  const r = [];
8
9
  let s = 1 / 0, u = 1 / 0, f = -1 / 0, c = -1 / 0;
9
- const w = p.concat([""]), y = t.getRowsByGrouping(w);
10
- for (let a = 0; a < y.length; a++) {
11
- const n = y[a], e = t.getColumnValue(v.value, n), i = t.getColumnValue(I.value, n);
12
- C.scale !== "discrete" && (typeof e != "number" || !isFinite(e)) || M.scale !== "discrete" && (typeof i != "number" || !isFinite(i)) || (s = Math.min(s, e), u = Math.min(u, i), f = Math.max(f, e), c = Math.max(c, i), r.push({
13
- x: e,
10
+ const p = t.getRowsByGrouping(y);
11
+ for (let a = 0; a < p.length; a++) {
12
+ const e = p[a], n = t.getColumnValue(g.value, e), i = t.getColumnValue(v.value, e);
13
+ I.scale !== "discrete" && (typeof n != "number" || !isFinite(n)) || F.scale !== "discrete" && (typeof i != "number" || !isFinite(i)) || (s = Math.min(s, n), u = Math.min(u, i), f = Math.max(f, n), c = Math.max(c, i), r.push({
14
+ x: n,
14
15
  y: i,
15
- label: F(t, n, o, d),
16
- dimmed: m ? !t.getColumnValue(m.value, n) : !1,
17
- idx: n
16
+ label: d(t, e, o, V),
17
+ dimmed: m ? !t.getColumnValue(m.value, e) : !1,
18
+ idx: e
18
19
  }));
19
20
  }
20
- G(t, r, g, m, V), l[p.join("_")] = {
21
+ w(t, r, C, m, M), l[X(y)] = {
21
22
  minX: s,
22
23
  maxX: f,
23
24
  minY: u,
@@ -28,6 +29,6 @@ function h(t, x, v, I, o, m, g, C, M, V) {
28
29
  return l;
29
30
  }
30
31
  export {
31
- h as getDots
32
+ R as getDots
32
33
  };
33
34
  //# sourceMappingURL=dots.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dots.js","sources":["../../src/scatterplot/dots.ts"],"sourcesContent":["import {format} from 'd3-format';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue } from '../types';\nimport type { DotsLayer, ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport {formatColumnValue} from './utils/formatColumnValue';\nimport {sortDotsByGrouping} from './utils/sortDotsByGrouping';\n\nexport type Dot = {\n idx: number;\n x: string | number;\n y: string | number;\n label: DataValue | null;\n dimmed: boolean;\n};\n\nexport type GroupedDots = Record<\n string,\n {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n dots: Dot[];\n }\n>;\n\nexport function getDots(\n data: DataFrame,\n facetKeysCombinations: string[][],\n x: ColumnName,\n y: ColumnName,\n label: ColumnName | null,\n highlight: ColumnName | null,\n grouping: ScatterplotSettingsImpl['grouping'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n dotsLayer?: DotsLayer\n): GroupedDots {\n const result: GroupedDots = {};\n\n const labelFormatter = label?.format ? format(label.format) : undefined;\n\n for (const facetKeys of facetKeysCombinations) {\n const dots: Dot[] = [];\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n const templateGroupPath = facetKeys.concat(['']);\n const rows = data.getRowsByGrouping(templateGroupPath);\n\n for (let i = 0; i < rows.length; i++) {\n const rowIdx = rows[i];\n const valueX = data.getColumnValue(x.value, rowIdx) as number;\n const valueY = data.getColumnValue(y.value, rowIdx) as number;\n\n if (xAxis.scale !== 'discrete' && (typeof valueX !== 'number' || !isFinite(valueX))) {\n continue;\n }\n if (yAxis.scale !== 'discrete' && (typeof valueY !== 'number' || !isFinite(valueY))) {\n continue;\n }\n\n minX = Math.min(minX, valueX);\n minY = Math.min(minY, valueY);\n maxX = Math.max(maxX, valueX);\n maxY = Math.max(maxY, valueY);\n\n dots.push({\n x: valueX,\n y: valueY,\n label: formatColumnValue(data, rowIdx, label, labelFormatter),\n dimmed: highlight ? !data.getColumnValue(highlight.value, rowIdx) : false,\n idx: rowIdx\n });\n }\n\n sortDotsByGrouping(data, dots, grouping, highlight, dotsLayer);\n\n result[facetKeys.join('_')] = {\n minX,\n maxX,\n minY,\n maxY,\n dots,\n };\n }\n\n return result;\n}\n"],"names":["getDots","data","facetKeysCombinations","x","y","label","highlight","grouping","xAxis","yAxis","dotsLayer","result","labelFormatter","format","facetKeys","dots","minX","minY","maxX","maxY","templateGroupPath","rows","i","rowIdx","valueX","valueY","formatColumnValue","sortDotsByGrouping"],"mappings":";;;AA0BO,SAASA,EACZC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACW;AACX,QAAMC,IAAsB,CAAA,GAEtBC,IAAiBP,KAAA,QAAAA,EAAO,SAASQ,EAAOR,EAAM,MAAM,IAAI;AAE9D,aAAWS,KAAaZ,GAAuB;AAC3C,UAAMa,IAAc,CAAA;AACpB,QAAIC,IAAO,OACPC,IAAO,OACPC,IAAO,QACPC,IAAO;AAEX,UAAMC,IAAoBN,EAAU,OAAO,CAAC,EAAE,CAAC,GACzCO,IAAOpB,EAAK,kBAAkBmB,CAAiB;AAErD,aAASE,IAAI,GAAGA,IAAID,EAAK,QAAQC,KAAK;AAClC,YAAMC,IAASF,EAAKC,CAAC,GACfE,IAASvB,EAAK,eAAeE,EAAE,OAAOoB,CAAM,GAC5CE,IAASxB,EAAK,eAAeG,EAAE,OAAOmB,CAAM;AAElD,MAAIf,EAAM,UAAU,eAAe,OAAOgB,KAAW,YAAY,CAAC,SAASA,CAAM,MAG7Ef,EAAM,UAAU,eAAe,OAAOgB,KAAW,YAAY,CAAC,SAASA,CAAM,OAIjFT,IAAO,KAAK,IAAIA,GAAMQ,CAAM,GAC5BP,IAAO,KAAK,IAAIA,GAAMQ,CAAM,GAC5BP,IAAO,KAAK,IAAIA,GAAMM,CAAM,GAC5BL,IAAO,KAAK,IAAIA,GAAMM,CAAM,GAE5BV,EAAK,KAAK;AAAA,QACN,GAAGS;AAAA,QACH,GAAGC;AAAA,QACH,OAAOC,EAAkBzB,GAAMsB,GAAQlB,GAAOO,CAAc;AAAA,QAC5D,QAAQN,IAAY,CAACL,EAAK,eAAeK,EAAU,OAAOiB,CAAM,IAAI;AAAA,QACpE,KAAKA;AAAA,MAAA,CACR;AAAA,IACL;AAEA,IAAAI,EAAmB1B,GAAMc,GAAMR,GAAUD,GAAWI,CAAS,GAE7DC,EAAOG,EAAU,KAAK,GAAG,CAAC,IAAI;AAAA,MAC1B,MAAAE;AAAA,MACA,MAAAE;AAAA,MACA,MAAAD;AAAA,MACA,MAAAE;AAAA,MACA,MAAAJ;AAAA,IAAA;AAAA,EAER;AAEA,SAAOJ;AACX;"}
1
+ {"version":3,"file":"dots.js","sources":["../../src/scatterplot/dots.ts"],"sourcesContent":["import {format} from 'd3-format';\nimport type { DataFrame, GroupKey } from '../DataFrame';\nimport type { ColumnName, DataValue } from '../types';\nimport type { DotsLayer, ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport {formatColumnValue} from './utils/formatColumnValue';\nimport {sortDotsByGrouping} from './utils/sortDotsByGrouping';\nimport { getFacetStringKey } from '../discrete/utils/getFacetStringKey';\n\nexport type Dot = {\n idx: number;\n x: string | number;\n y: string | number;\n label: DataValue | null;\n dimmed: boolean;\n};\n\nexport type GroupedDots = Record<\n string,\n {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n dots: Dot[];\n }\n>;\n\nexport function getDots(\n data: DataFrame,\n facetKeysCombinations: GroupKey[][],\n x: ColumnName,\n y: ColumnName,\n label: ColumnName | null,\n highlight: ColumnName | null,\n grouping: ScatterplotSettingsImpl['grouping'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n dotsLayer?: DotsLayer\n): GroupedDots {\n const result: GroupedDots = {};\n\n const labelFormatter = label?.format ? format(label.format) : undefined;\n\n for (const facetKeysCombination of facetKeysCombinations) {\n const dots: Dot[] = [];\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n const rows = data.getRowsByGrouping(facetKeysCombination);\n\n for (let i = 0; i < rows.length; i++) {\n const rowIdx = rows[i];\n const valueX = data.getColumnValue(x.value, rowIdx) as number;\n const valueY = data.getColumnValue(y.value, rowIdx) as number;\n\n if (xAxis.scale !== 'discrete' && (typeof valueX !== 'number' || !isFinite(valueX))) {\n continue;\n }\n if (yAxis.scale !== 'discrete' && (typeof valueY !== 'number' || !isFinite(valueY))) {\n continue;\n }\n\n minX = Math.min(minX, valueX);\n minY = Math.min(minY, valueY);\n maxX = Math.max(maxX, valueX);\n maxY = Math.max(maxY, valueY);\n\n dots.push({\n x: valueX,\n y: valueY,\n label: formatColumnValue(data, rowIdx, label, labelFormatter),\n dimmed: highlight ? !data.getColumnValue(highlight.value, rowIdx) : false,\n idx: rowIdx\n });\n }\n\n sortDotsByGrouping(data, dots, grouping, highlight, dotsLayer);\n\n result[getFacetStringKey(facetKeysCombination)] = {\n minX,\n maxX,\n minY,\n maxY,\n dots,\n };\n }\n\n return result;\n}\n"],"names":["getDots","data","facetKeysCombinations","x","y","label","highlight","grouping","xAxis","yAxis","dotsLayer","result","labelFormatter","format","facetKeysCombination","dots","minX","minY","maxX","maxY","rows","i","rowIdx","valueX","valueY","formatColumnValue","sortDotsByGrouping","getFacetStringKey"],"mappings":";;;;AA2BO,SAASA,EACZC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACW;AACX,QAAMC,IAAsB,CAAA,GAEtBC,IAAiBP,KAAA,QAAAA,EAAO,SAASQ,EAAOR,EAAM,MAAM,IAAI;AAE9D,aAAWS,KAAwBZ,GAAuB;AACtD,UAAMa,IAAc,CAAA;AACpB,QAAIC,IAAO,OACPC,IAAO,OACPC,IAAO,QACPC,IAAO;AAEX,UAAMC,IAAOnB,EAAK,kBAAkBa,CAAoB;AAExD,aAASO,IAAI,GAAGA,IAAID,EAAK,QAAQC,KAAK;AAClC,YAAMC,IAASF,EAAKC,CAAC,GACfE,IAAStB,EAAK,eAAeE,EAAE,OAAOmB,CAAM,GAC5CE,IAASvB,EAAK,eAAeG,EAAE,OAAOkB,CAAM;AAElD,MAAId,EAAM,UAAU,eAAe,OAAOe,KAAW,YAAY,CAAC,SAASA,CAAM,MAG7Ed,EAAM,UAAU,eAAe,OAAOe,KAAW,YAAY,CAAC,SAASA,CAAM,OAIjFR,IAAO,KAAK,IAAIA,GAAMO,CAAM,GAC5BN,IAAO,KAAK,IAAIA,GAAMO,CAAM,GAC5BN,IAAO,KAAK,IAAIA,GAAMK,CAAM,GAC5BJ,IAAO,KAAK,IAAIA,GAAMK,CAAM,GAE5BT,EAAK,KAAK;AAAA,QACN,GAAGQ;AAAA,QACH,GAAGC;AAAA,QACH,OAAOC,EAAkBxB,GAAMqB,GAAQjB,GAAOO,CAAc;AAAA,QAC5D,QAAQN,IAAY,CAACL,EAAK,eAAeK,EAAU,OAAOgB,CAAM,IAAI;AAAA,QACpE,KAAKA;AAAA,MAAA,CACR;AAAA,IACL;AAEA,IAAAI,EAAmBzB,GAAMc,GAAMR,GAAUD,GAAWI,CAAS,GAE7DC,EAAOgB,EAAkBb,CAAoB,CAAC,IAAI;AAAA,MAC9C,MAAAE;AAAA,MACA,MAAAE;AAAA,MACA,MAAAD;AAAA,MACA,MAAAE;AAAA,MACA,MAAAJ;AAAA,IAAA;AAAA,EAER;AAEA,SAAOJ;AACX;"}
@@ -18,7 +18,6 @@ export declare class ChartScatterplot extends AbstractChart {
18
18
  };
19
19
  dotsByFacets: GroupedDots;
20
20
  facetKeys: string[];
21
- facetKeysCombinations: string[][];
22
21
  facetLabels: Record<string, string[]>;
23
22
  trendsData: TrendsData | null;
24
23
  legendLabels: ScatterplotLegendInfo;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scatterplot/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAI9C,OAAO,EAWH,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EAC3B,MAAM,UAAU,CAAC;AAGlB,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAwB3D,qBAAa,gBAAiB,SAAQ,aAAa;IAC/C,QAAQ,EAAE,uBAAuB,CAAC;IAClC,aAAa,EAAE,aAAa,CAAC;IAE7B,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAmB;IAC3D,cAAc,EAAE;QACZ,YAAY,EAAE;YAAC,CAAC,EAAE,OAAO,CAAC;YAAC,CAAC,EAAE,OAAO,CAAA;SAAC,CAAC;QACvC,YAAY,EAAE,WAAW,CAAC;QAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,qBAAqB,EAAE,MAAM,EAAE,EAAE,CAAC;QAClC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;QAC9B,YAAY,EAAE,qBAAqB,CAAC;QACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACnD,iBAAiB,EAAE,gBAAgB,CAAC;QACpC,iBAAiB,EAAE,gBAAgB,CAAC;KACvC,GAAG,IAAI,CAAQ;gBAEJ,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,EAAE,aAAa,CAAC,EAAC,wBAAwB;IAUnG,KAAK,CAAC,IAAI,EAAE,WAAW;IAiBvB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB;IA4BpE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAIhD,MAAM,IAAI,MAAM;IAKhB,mCAAmC,CAAC,YAAY,EAAE,uBAAuB,EAAE,QAAQ,EAAE,uBAAuB;IAsB5G,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAUpE,WAAW;IA2EX,gBAAgB;IAgDhB,YAAY;CA4Bf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scatterplot/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,KAAK,SAAS,EAA6B,MAAM,cAAc,CAAC;AAEzE,OAAO,EAUH,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EAC3B,MAAM,UAAU,CAAC;AAIlB,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AA6B3D,qBAAa,gBAAiB,SAAQ,aAAa;IAC/C,QAAQ,EAAE,uBAAuB,CAAC;IAClC,aAAa,EAAE,aAAa,CAAC;IAE7B,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAmB;IAC3D,cAAc,EAAE;QACZ,YAAY,EAAE;YAAC,CAAC,EAAE,OAAO,CAAC;YAAC,CAAC,EAAE,OAAO,CAAA;SAAC,CAAC;QACvC,YAAY,EAAE,WAAW,CAAC;QAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;QAC9B,YAAY,EAAE,qBAAqB,CAAC;QACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACnD,iBAAiB,EAAE,gBAAgB,CAAC;QACpC,iBAAiB,EAAE,gBAAgB,CAAC;KACvC,GAAG,IAAI,CAAQ;gBAEJ,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,EAAE,aAAa,CAAC,EAAC,wBAAwB;IAUnG,KAAK,CAAC,IAAI,EAAE,WAAW;IAiBvB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB;IA4BpE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAIhD,MAAM,IAAI,MAAM;IAKhB,mCAAmC,CAAC,YAAY,EAAE,uBAAuB,EAAE,QAAQ,EAAE,uBAAuB;IAwB5G,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAUpE,WAAW;IA8DX,gBAAgB;IAgDhB,YAAY;CA4Bf"}