@milaboratories/miplots4 1.0.126 → 1.0.128

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 (125) hide show
  1. package/dist/DataFrame.d.ts +7 -5
  2. package/dist/DataFrame.d.ts.map +1 -1
  3. package/dist/DataFrame.js +67 -60
  4. package/dist/DataFrame.js.map +1 -1
  5. package/dist/bubble/components/Chart.d.ts +3 -3
  6. package/dist/bubble/components/Chart.d.ts.map +1 -1
  7. package/dist/bubble/components/Chart.js +23 -23
  8. package/dist/bubble/components/Chart.js.map +1 -1
  9. package/dist/common/Tooltip.d.ts +1 -1
  10. package/dist/common/Tooltip.d.ts.map +1 -1
  11. package/dist/common/Tooltip.js +17 -17
  12. package/dist/common/Tooltip.js.map +1 -1
  13. package/dist/discrete/components/layers/BinnedDotsElement.d.ts +2 -2
  14. package/dist/discrete/components/layers/BinnedDotsElement.d.ts.map +1 -1
  15. package/dist/discrete/components/layers/BinnedDotsElement.js +9 -9
  16. package/dist/discrete/components/layers/BinnedDotsElement.js.map +1 -1
  17. package/dist/discrete/components/layers/BoxElement.d.ts +2 -2
  18. package/dist/discrete/components/layers/BoxElement.d.ts.map +1 -1
  19. package/dist/discrete/components/layers/BoxElement.js +19 -19
  20. package/dist/discrete/components/layers/BoxElement.js.map +1 -1
  21. package/dist/discrete/components/layers/DotsGroupElement.d.ts +3 -3
  22. package/dist/discrete/components/layers/DotsGroupElement.d.ts.map +1 -1
  23. package/dist/discrete/components/layers/DotsGroupElement.js +10 -10
  24. package/dist/discrete/components/layers/DotsGroupElement.js.map +1 -1
  25. package/dist/discrete/components/layers/ErrorBarElement.d.ts +2 -2
  26. package/dist/discrete/components/layers/ErrorBarElement.d.ts.map +1 -1
  27. package/dist/discrete/components/layers/ErrorBarElement.js +15 -15
  28. package/dist/discrete/components/layers/ErrorBarElement.js.map +1 -1
  29. package/dist/discrete/components/layers/LineElement.d.ts +2 -2
  30. package/dist/discrete/components/layers/LineElement.d.ts.map +1 -1
  31. package/dist/discrete/components/layers/LineElement.js +12 -12
  32. package/dist/discrete/components/layers/LineElement.js.map +1 -1
  33. package/dist/discrete/components/layers/LogoElement.d.ts +2 -2
  34. package/dist/discrete/components/layers/LogoElement.d.ts.map +1 -1
  35. package/dist/discrete/components/layers/LogoElement.js +19 -19
  36. package/dist/discrete/components/layers/LogoElement.js.map +1 -1
  37. package/dist/discrete/components/layers/PairedPointsElement.d.ts +2 -2
  38. package/dist/discrete/components/layers/PairedPointsElement.d.ts.map +1 -1
  39. package/dist/discrete/components/layers/PairedPointsElement.js +37 -37
  40. package/dist/discrete/components/layers/PairedPointsElement.js.map +1 -1
  41. package/dist/discrete/components/layers/StackedBarElement.d.ts +3 -3
  42. package/dist/discrete/components/layers/StackedBarElement.d.ts.map +1 -1
  43. package/dist/discrete/components/layers/StackedBarElement.js +18 -18
  44. package/dist/discrete/components/layers/StackedBarElement.js.map +1 -1
  45. package/dist/discrete/components/layers/ViolinElement.d.ts +4 -4
  46. package/dist/discrete/components/layers/ViolinElement.d.ts.map +1 -1
  47. package/dist/discrete/components/layers/ViolinElement.js +7 -7
  48. package/dist/discrete/components/layers/ViolinElement.js.map +1 -1
  49. package/dist/heatmap/components/Annotations/Annotation.d.ts +2 -2
  50. package/dist/heatmap/components/Annotations/Annotation.d.ts.map +1 -1
  51. package/dist/heatmap/components/Annotations/Annotation.js +16 -16
  52. package/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
  53. package/dist/heatmap/components/Chart.d.ts +1 -1
  54. package/dist/heatmap/components/Chart.d.ts.map +1 -1
  55. package/dist/heatmap/components/Chart.js +28 -28
  56. package/dist/heatmap/components/Chart.js.map +1 -1
  57. package/dist/histogram/components/Chart.d.ts +2 -2
  58. package/dist/histogram/components/Chart.d.ts.map +1 -1
  59. package/dist/histogram/components/Chart.js +22 -22
  60. package/dist/histogram/components/Chart.js.map +1 -1
  61. package/dist/scatterplot/components/Chart.d.ts +6 -11
  62. package/dist/scatterplot/components/Chart.d.ts.map +1 -1
  63. package/dist/scatterplot/components/Chart.js +101 -331
  64. package/dist/scatterplot/components/Chart.js.map +1 -1
  65. package/dist/scatterplot/components/ChartAxis.d.ts +20 -0
  66. package/dist/scatterplot/components/ChartAxis.d.ts.map +1 -0
  67. package/dist/scatterplot/components/ChartAxis.js +52 -0
  68. package/dist/scatterplot/components/ChartAxis.js.map +1 -0
  69. package/dist/scatterplot/components/ChartAxisTitles.d.ts +15 -0
  70. package/dist/scatterplot/components/ChartAxisTitles.d.ts.map +1 -0
  71. package/dist/scatterplot/components/ChartAxisTitles.js +56 -0
  72. package/dist/scatterplot/components/ChartAxisTitles.js.map +1 -0
  73. package/dist/scatterplot/components/ChartFacetTitle.d.ts +11 -0
  74. package/dist/scatterplot/components/ChartFacetTitle.d.ts.map +1 -0
  75. package/dist/scatterplot/components/ChartFacetTitle.js +37 -0
  76. package/dist/scatterplot/components/ChartFacetTitle.js.map +1 -0
  77. package/dist/scatterplot/components/ChartLayersData.d.ts +39 -0
  78. package/dist/scatterplot/components/ChartLayersData.d.ts.map +1 -0
  79. package/dist/scatterplot/components/ChartLayersData.js +250 -0
  80. package/dist/scatterplot/components/ChartLayersData.js.map +1 -0
  81. package/dist/scatterplot/components/ChartTooltip.d.ts +18 -0
  82. package/dist/scatterplot/components/ChartTooltip.d.ts.map +1 -0
  83. package/dist/scatterplot/components/ChartTooltip.js +58 -0
  84. package/dist/scatterplot/components/ChartTooltip.js.map +1 -0
  85. package/dist/scatterplot/components/ChartTrendsData.d.ts +11 -0
  86. package/dist/scatterplot/components/ChartTrendsData.d.ts.map +1 -0
  87. package/dist/scatterplot/components/ChartTrendsData.js +65 -0
  88. package/dist/scatterplot/components/ChartTrendsData.js.map +1 -0
  89. package/dist/scatterplot/components/ChartsGroup.d.ts +3 -3
  90. package/dist/scatterplot/components/ChartsGroup.d.ts.map +1 -1
  91. package/dist/scatterplot/components/ChartsGroup.js +81 -73
  92. package/dist/scatterplot/components/ChartsGroup.js.map +1 -1
  93. package/dist/scatterplot/dots.d.ts +0 -2
  94. package/dist/scatterplot/dots.d.ts.map +1 -1
  95. package/dist/scatterplot/dots.js +26 -22
  96. package/dist/scatterplot/dots.js.map +1 -1
  97. package/dist/scatterplot-umap/ChartRenderer.d.ts +3 -9
  98. package/dist/scatterplot-umap/ChartRenderer.d.ts.map +1 -1
  99. package/dist/scatterplot-umap/ChartRenderer.js +183 -186
  100. package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  101. package/dist/scatterplot-umap/components/Lasso.js +97 -97
  102. package/dist/scatterplot-umap/components/Lasso.js.map +1 -1
  103. package/dist/scatterplot-umap/components/LowerSVG.d.ts +1 -5
  104. package/dist/scatterplot-umap/components/LowerSVG.d.ts.map +1 -1
  105. package/dist/scatterplot-umap/components/LowerSVG.js +51 -52
  106. package/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
  107. package/dist/scatterplot-umap/components/SVGLayer.d.ts +1 -1
  108. package/dist/scatterplot-umap/components/SVGLayer.d.ts.map +1 -1
  109. package/dist/scatterplot-umap/components/SVGLayer.js +39 -41
  110. package/dist/scatterplot-umap/components/SVGLayer.js.map +1 -1
  111. package/dist/scatterplot-umap/components/UpperSVG.d.ts +1 -1
  112. package/dist/scatterplot-umap/components/UpperSVG.d.ts.map +1 -1
  113. package/dist/scatterplot-umap/components/UpperSVG.js +18 -18
  114. package/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
  115. package/dist/scatterplot-umap/index.d.ts +2 -6
  116. package/dist/scatterplot-umap/index.d.ts.map +1 -1
  117. package/dist/scatterplot-umap/index.js +62 -66
  118. package/dist/scatterplot-umap/index.js.map +1 -1
  119. package/dist/scatterplot-umap/types.d.ts +0 -4
  120. package/dist/scatterplot-umap/types.d.ts.map +1 -1
  121. package/dist/utils/hooks/useFunction.d.ts +2 -0
  122. package/dist/utils/hooks/useFunction.d.ts.map +1 -0
  123. package/dist/utils/hooks/useFunction.js +9 -0
  124. package/dist/utils/hooks/useFunction.js.map +1 -0
  125. package/package.json +2 -1
@@ -1,342 +1,112 @@
1
- import { j as t } from "../../node_modules/react/jsx-runtime.js";
2
- import { Tooltip as mt } from "../../common/Tooltip.js";
3
- import { BLACK as X } from "../../constants.js";
4
- import { DEFAULT_TICKS_SIZE as K, FACET_TITLE_LINE as I, MIN_PADDING as N, TITLE_LINE as P } from "../constants.js";
5
- import { getFilteredLabels as U } from "../utils/getVisibleLabels.js";
6
- import { getLineShape as Z } from "../../utils/getLineShape.js";
7
- import { getPointShape as w } from "../../utils/getPointShape.js";
8
- import { Axis as q } from "./Axis.js";
9
- import { Grid as jt } from "./Grid.js";
10
- import { numberFormat as m } from "../../utils/numberFormat.js";
11
- import gt from "../../node_modules/lodash/lodash.js";
12
- import { r as $ } from "../../_virtual/index.js";
13
- import { TextMeasurer as yt } from "../../utils/TextMeasurer.js";
14
- import { r as bt } from "../../node_modules/react-dom/index.js";
15
- import $t from "../../node_modules/d3-shape/src/line.js";
16
- import Et from "../../node_modules/d3-shape/src/curve/basis.js";
17
- const St = new yt("16px Manrope");
18
- function J(n, r) {
19
- return typeof n == "string" ? n : r.length ? r[0].data[n.value] : "";
20
- }
21
- function Lt(n, r, d = []) {
22
- const l = n.data, e = [`x: ${m(n.x)}`, `y: ${m(n.y)}`];
23
- r.label && e.unshift(`${r.label}: ${l[r.label]}`);
24
- for (const c of d)
25
- e.push(`${c.label}: ${l[c.valueLabels ?? c.value]}`);
26
- return e;
27
- }
28
- function vt(n) {
29
- return typeof n.r2 > "u" ? null : /* @__PURE__ */ t.jsxs(t.Fragment, { children: [
30
- /* @__PURE__ */ t.jsx("tspan", { children: "R" }),
31
- /* @__PURE__ */ t.jsx("tspan", { fontSize: "10px", dy: "-8", children: "2" }),
32
- /* @__PURE__ */ t.jsx("tspan", { dy: "8", children: ` = ${m(n.r2)}` })
33
- ] });
34
- }
35
- function kt(n) {
36
- return typeof n.pValue > "u" ? null : /* @__PURE__ */ t.jsx("tspan", { children: `p-value = ${m(n.pValue)}` });
37
- }
38
- function Tt(n) {
39
- if (typeof n.coefficients > "u")
40
- return null;
41
- const { slope: r, slopeError: d, intercept: l, interceptError: e } = n.coefficients;
42
- return /* @__PURE__ */ t.jsx("tspan", { children: /* @__PURE__ */ t.jsx("tspan", { children: `slope = ${m(r)} ± ${m(d)}, intercept = ${m(l)} ± ${m(e)}` }) });
43
- }
44
- function At(n) {
45
- const r = [vt(n), kt(n), Tt(n)].filter(
46
- (d) => d !== null
47
- );
48
- return /* @__PURE__ */ t.jsx(t.Fragment, { children: r.map((d, l) => /* @__PURE__ */ t.jsxs("tspan", { children: [
49
- d,
50
- /* @__PURE__ */ t.jsx("tspan", { children: l < r.length - 1 && ", " })
51
- ] }, l)) });
52
- }
53
- const Y = 3;
54
- function Q(n, r, d, l) {
55
- if (!l)
56
- return [];
57
- const e = [];
58
- for (const c of n) {
59
- const j = c.label;
60
- if (!j)
61
- continue;
62
- const a = St.getTextMetrics(String(j));
63
- e.push({
64
- name: String(j),
65
- width: (a == null ? void 0 : a.width) ?? 0,
66
- height: ((a == null ? void 0 : a.actualBoundingBoxAscent) ?? 0) + ((a == null ? void 0 : a.actualBoundingBoxDescent) ?? 0),
67
- x: r.x(c.x),
68
- y: r.y(c.y),
69
- xPosition: "right",
70
- yPosition: "middle",
71
- bbox: { minX: 0, maxX: 0, minY: 0, maxY: 0 },
72
- dot: c,
73
- padding: d.dotSize(c.data) + Y
74
- });
75
- }
76
- return e;
77
- }
78
- function Dt({
79
- facetKey: n,
80
- width: r,
81
- height: d,
82
- dimensions: l,
83
- scales: e,
84
- xAxis: c,
85
- yAxis: j,
86
- frameType: a,
87
- dotsData: G,
88
- facetSettings: g,
89
- trendsData: _,
90
- keyColumn: tt,
91
- margins: S,
92
- chartSizes: L,
93
- tooltips: v,
94
- tooltipsContainer: et,
95
- captionsSizes: Ct,
96
- facetTitle: F,
97
- onlyPositive: O,
98
- layersData: k,
99
- aesGetters: f,
100
- tooltipsData: p
101
- }) {
102
- const [M, nt] = $.useState(), { padding: s } = l, { dots: y } = G, ot = c.showTicks ? K : 0, rt = j.showTicks ? K : 0, it = J(c.title, y), lt = J(j.title, y), dt = l.chartEdgeSides.includes("left") || !(g != null && g.sharedY), ft = l.chartEdgeSides.includes("bottom") || !(g != null && g.sharedX), xt = l.chartEdgeSides.includes("left"), ct = l.chartEdgeSides.includes("bottom"), st = {
103
- left: S.left + l.left + s.left,
104
- right: L.totalWidth - (S.left + l.left + s.left),
105
- top: S.top + l.top + s.top,
106
- bottom: L.totalHeight - (S.top + l.top + s.top)
107
- }, E = !1, [z, at] = $.useState(
108
- () => Q(
109
- y,
110
- e,
111
- f,
112
- k.find((o) => o.type === "dots")
113
- )
114
- ), [pt, ut] = $.useState(
115
- () => U(z, r, d, Y, Y)
116
- ), [h, R] = $.useState(null);
117
- $.useEffect(() => {
118
- at(
119
- Q(
120
- y,
121
- e,
122
- f,
123
- k.find((o) => o.type === "dots")
124
- )
125
- );
126
- }, [y, e, f, k]), $.useEffect(() => {
127
- const o = U(z, r, d);
128
- ut(o);
129
- }, [z, r, d]);
130
- const ht = M && p.fixed;
131
- return /* @__PURE__ */ t.jsxs("g", { transform: `translate(${l.left + s.left},${l.top + s.top})`, children: [
132
- E,
133
- F.length && /* @__PURE__ */ t.jsxs("g", { children: [
134
- a === "full" && /* @__PURE__ */ t.jsx("rect", { x: "0", y: -s.top, height: s.top, width: r, fill: "#F7F8FA", stroke: X }),
135
- F.map((o, b) => {
136
- const i = F.length, u = (s.top - I * i) / 2;
137
- return /* @__PURE__ */ t.jsx(
138
- "text",
139
- {
140
- fontSize: "14px",
141
- fontWeight: "500",
142
- fill: X,
143
- x: r / 2,
144
- dy: u + I / 2 - s.top,
145
- y: b * I,
146
- textAnchor: "middle",
147
- dominantBaseline: "central",
148
- children: o
149
- },
150
- b
151
- );
152
- })
153
- ] }),
154
- /* @__PURE__ */ t.jsxs("g", { dominantBaseline: "central", textAnchor: "middle", fontWeight: "500", fontSize: "14px", fill: X, children: [
155
- ct && /* @__PURE__ */ t.jsx("text", { x: r / 2, y: d + s.bottom - N - P / 2, children: it }),
1
+ import { j as r } from "../../node_modules/react/jsx-runtime.js";
2
+ import { r as q } from "../../_virtual/index.js";
3
+ import { useFunction as s } from "../../utils/hooks/useFunction.js";
4
+ import { ChartAxis as z } from "./ChartAxis.js";
5
+ import { ChartAxisTitles as B } from "./ChartAxisTitles.js";
6
+ import { ChartFacetTitle as E } from "./ChartFacetTitle.js";
7
+ import { ChartLayersData as G } from "./ChartLayersData.js";
8
+ import { ChartTrendsData as H } from "./ChartTrendsData.js";
9
+ import { Grid as I } from "./Grid.js";
10
+ const _ = q.memo(({
11
+ facetKey: c,
12
+ width: t,
13
+ height: p,
14
+ dimensions: m,
15
+ scales: a,
16
+ xAxis: f,
17
+ yAxis: o,
18
+ frameType: C,
19
+ dotsData: b,
20
+ facetSettings: F,
21
+ trendsData: T,
22
+ captionsSizes: X,
23
+ facetTitle: Y,
24
+ onlyPositive: $,
25
+ layersData: R,
26
+ aesGetters: u,
27
+ onMouseEnterDot: x,
28
+ onMouseLeaveDot: j
29
+ }) => {
30
+ const { padding: g } = m, d = s((l) => {
31
+ x == null || x(l, c);
32
+ }), k = s((l) => {
33
+ j == null || j(l, c);
34
+ });
35
+ return /* @__PURE__ */ r.jsxs("g", { transform: `translate(${m.left + g.left},${m.top + g.top})`, children: [
36
+ !1,
37
+ /* @__PURE__ */ r.jsx(
156
38
  E,
157
- xt && /* @__PURE__ */ t.jsx(
158
- "text",
159
- {
160
- x: -s.left + N + P / 2,
161
- y: d / 2,
162
- transform: `rotate(-90,${-s.left + N + P / 2},${d / 2})`,
163
- children: lt
164
- }
165
- ),
166
- E
167
- ] }),
168
- /* @__PURE__ */ t.jsx(
169
- jt,
170
39
  {
171
- width: r,
172
- height: d,
173
- scaleX: e.x,
174
- scaleY: e.y,
175
- axisX: c,
176
- axisY: j,
177
- frameType: a
40
+ width: t,
41
+ dimensions: m,
42
+ frameType: C,
43
+ facetTitle: Y
44
+ }
45
+ ),
46
+ /* @__PURE__ */ r.jsx(
47
+ B,
48
+ {
49
+ debug: !1,
50
+ width: t,
51
+ height: p,
52
+ dimensions: m,
53
+ xAxis: f,
54
+ yAxis: o,
55
+ dotsData: b
56
+ }
57
+ ),
58
+ /* @__PURE__ */ r.jsx(
59
+ I,
60
+ {
61
+ width: t,
62
+ height: p,
63
+ scaleX: a.x,
64
+ scaleY: a.y,
65
+ axisX: f,
66
+ axisY: o,
67
+ frameType: C
68
+ }
69
+ ),
70
+ /* @__PURE__ */ r.jsx(
71
+ z,
72
+ {
73
+ debug: !1,
74
+ width: t,
75
+ height: p,
76
+ dimensions: m,
77
+ scales: a,
78
+ xAxis: f,
79
+ yAxis: o,
80
+ facetSettings: F,
81
+ captionsSizes: X,
82
+ onlyPositive: $
178
83
  }
179
84
  ),
180
- ft && /* @__PURE__ */ t.jsxs("g", { transform: `translate(0,${d})`, children: [
181
- /* @__PURE__ */ t.jsx(q, { scale: e.x, orient: "bottom", onlyPositive: O.x, tickSize: ot }),
182
- E
183
- ] }),
184
- dt && /* @__PURE__ */ t.jsxs("g", { children: [
185
- /* @__PURE__ */ t.jsx(q, { scale: e.y, orient: "left", onlyPositive: O.y, tickSize: rt }),
186
- E
187
- ] }),
188
- _ && _.map(({ predict: o, getArea: b, data: i, bounded: u, xBounds: x, stats: T }, A) => {
189
- const [C, B] = u ? x : e.x.domain(), V = (B - C) / 15, H = o(C), D = o(B);
190
- if (isNaN(H) || isNaN(D))
191
- return null;
192
- const W = f.trendColor(i);
193
- return /* @__PURE__ */ t.jsxs("g", { children: [
194
- /* @__PURE__ */ t.jsx("text", { y: A * 20 + 20, fill: W, x: r - 8, textAnchor: "end", children: At(T) }),
195
- /* @__PURE__ */ t.jsx(
196
- "path",
197
- {
198
- d: b(e.x, e.y, gt.range(C, B + V / 2, V)),
199
- fill: W,
200
- opacity: 0.2
201
- }
202
- ),
203
- /* @__PURE__ */ t.jsx(
204
- "line",
205
- {
206
- x1: e.x(C),
207
- x2: e.x(B),
208
- y1: e.y(H),
209
- y2: e.y(D),
210
- stroke: W
211
- }
212
- )
213
- ] }, A);
214
- }),
215
- k.map((o, b) => {
216
- if (o.type === "dots")
217
- return /* @__PURE__ */ t.jsxs("g", { children: [
218
- y.map((i) => {
219
- const u = ht && p.selectedData === i, x = /* @__PURE__ */ t.jsx(
220
- "g",
221
- {
222
- transform: `translate(${e.x(i.x)},${e.y(i.y)})`,
223
- opacity: i.dimmed ? 0.3 : 1,
224
- onMouseOver: () => p.onMouseOver(i, n),
225
- onMouseLeave: () => p.onMouseLeave(),
226
- children: w(
227
- f.dotShape(i.data),
228
- f.dotSize(i.data),
229
- f.dotColor(i.data)
230
- )
231
- },
232
- i.id
233
- );
234
- return u ? bt.createPortal(x, M) : x;
235
- }),
236
- pt.map((i) => {
237
- const { name: u, height: x, bbox: T, width: A } = i;
238
- return /* @__PURE__ */ t.jsx("g", { children: /* @__PURE__ */ t.jsxs("g", { transform: `translate(${T.minX},${T.minY})`, children: [
239
- /* @__PURE__ */ t.jsx(
240
- "rect",
241
- {
242
- x: "0",
243
- y: "0",
244
- width: A,
245
- height: x,
246
- fill: "transparent",
247
- stroke: "none",
248
- onMouseOver: () => R(i.dot),
249
- onMouseLeave: () => R(null)
250
- }
251
- ),
252
- /* @__PURE__ */ t.jsx(
253
- "text",
254
- {
255
- x: 0,
256
- y: x / 2,
257
- stroke: "white",
258
- strokeWidth: 2,
259
- paintOrder: "stroke",
260
- style: { pointerEvents: "none" },
261
- fontFamily: "Manrope",
262
- fontSize: "16px",
263
- dominantBaseline: "middle",
264
- children: u
265
- }
266
- )
267
- ] }) }, i.dot.id);
268
- }),
269
- h && /* @__PURE__ */ t.jsxs(
270
- "g",
271
- {
272
- transform: `translate(${e.x(h.x)},${e.y(h.y)})`,
273
- children: [
274
- w(
275
- f.dotShape(h.data),
276
- f.dotSize(h.data) + 1,
277
- "white",
278
- "white"
279
- ),
280
- w(
281
- f.dotShape(h.data),
282
- f.dotSize(h.data),
283
- f.dotColor(h.data)
284
- )
285
- ]
286
- },
287
- "activeDot"
288
- )
289
- ] }, b);
290
- if (o.type === "curve" && !o.info.smoothing)
291
- return o.geoms.map((i, u) => /* @__PURE__ */ t.jsx("g", { children: /* @__PURE__ */ t.jsx(
292
- "polyline",
293
- {
294
- points: i.dots.map((x) => `${e.x(x.x)},${e.y(x.y)}`).join(" "),
295
- fill: "none",
296
- stroke: f.lineColor(i.data),
297
- strokeWidth: o.info.aes.lineWidth,
298
- strokeDasharray: Z(o.info.aes.lineShape)
299
- }
300
- ) }, u));
301
- if (o.type === "curve" && o.info.smoothing)
302
- return o.geoms.map((i, u) => /* @__PURE__ */ t.jsx("g", { children: /* @__PURE__ */ t.jsx(
303
- "path",
304
- {
305
- d: $t().curve(Et).x((x) => e.x(x.x)).y((x) => e.y(x.y))(i.dots) ?? "",
306
- fill: "none",
307
- stroke: f.lineColor(i.data),
308
- strokeWidth: o.info.aes.lineWidth,
309
- strokeDasharray: Z(o.info.aes.lineShape)
310
- }
311
- ) }, u));
312
- }),
313
- v.show && p.selectedData && p.currentFacet === n && /* @__PURE__ */ t.jsx(
314
- mt,
85
+ /* @__PURE__ */ r.jsx(
86
+ H,
315
87
  {
316
- content: Lt(p.selectedData, tt, v == null ? void 0 : v.content),
317
- x: e.x(p.selectedData.x),
318
- y: e.y(p.selectedData.y),
319
- active: !0,
320
- sideDistances: st,
321
- fixed: p.fixed,
322
- onClose: p.onClose,
323
- container: et
88
+ width: t,
89
+ scales: a,
90
+ trendsData: T,
91
+ aesGetters: u
324
92
  }
325
93
  ),
326
- /* @__PURE__ */ t.jsxs("g", { children: [
327
- p.fixed && /* @__PURE__ */ t.jsx("rect", { width: L.chartWidth, height: L.chartHeight, fill: "rgba(255, 255, 255, 0.8)" }),
328
- /* @__PURE__ */ t.jsx(
329
- "g",
330
- {
331
- ref: (o) => {
332
- o && !M && nt(o);
333
- }
334
- }
335
- )
336
- ] })
94
+ /* @__PURE__ */ r.jsx(
95
+ G,
96
+ {
97
+ width: t,
98
+ height: p,
99
+ scales: a,
100
+ dotsData: b,
101
+ layersData: R,
102
+ aesGetters: u,
103
+ onMouseEnterDot: d,
104
+ onMouseLeaveDot: k
105
+ }
106
+ )
337
107
  ] });
338
- }
108
+ });
339
109
  export {
340
- Dt as Chart
110
+ _ as Chart
341
111
  };
342
112
  //# sourceMappingURL=Chart.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.js","sources":["../../../src/scatterplot/components/Chart.tsx"],"sourcesContent":["import type { TooltipsData} from '../../common/Tooltip';\nimport {Tooltip} from '../../common/Tooltip';\nimport {BLACK} from '../../constants';\nimport {FACET_TITLE_LINE, TITLE_LINE} from '../constants';\nimport type {DotsLayerData, ScatterplotLayerData} from '../getLayersData';\nimport type {Label} from '../utils/getVisibleLabels';\nimport {getFilteredLabels} from '../utils/getVisibleLabels';\nimport {getLineShape} from '../../utils/getLineShape';\nimport {getPointShape} from '../../utils/getPointShape';\nimport {Axis} from './Axis';\nimport type {\n AesGetters,\n CaptionsSizes,\n ChartDimensionsData,\n ChartScales,\n ChartSizes,\n Margins,\n} from './types';\nimport {DEFAULT_TICKS_SIZE, MIN_PADDING, TICK_OFFSET} from '../constants';\nimport type {Dot, GroupedDots} from '../dots';\nimport type {TrendsData} from '../linearRegression';\nimport type {ScatterplotSettingsImpl} from '../ScatterplotSettingsImpl';\nimport type {ColumnName} from '../../types';\nimport type {FrameType} from '../../types';\nimport {Grid} from './Grid';\nimport {numberFormat} from '../../utils/numberFormat';\nimport {curveBasis, line} from 'd3-shape';\nimport lodash from 'lodash';\nimport type {ReactElement} from 'react';\nimport React, {useEffect, useState} from 'react';\nimport {TextMeasurer} from '../../utils/TextMeasurer';\nimport {createPortal} from 'react-dom';\n\nconst textMeasurer = new TextMeasurer('16px Manrope');\n\nfunction getTitle(title: string | ColumnName, dots: Dot[]): string {\n if (typeof title === 'string') {\n return title;\n }\n if (!dots.length) {\n return '';\n }\n return dots[0].data[title.value] as string;\n}\n\nfunction getTooltipContent(dot: Dot, keyColumn: ColumnName, columnsList: ColumnName[] = []) {\n const row = dot.data;\n const lines = [`x: ${numberFormat(dot.x)}`, `y: ${numberFormat(dot.y)}`];\n if (keyColumn.label) {\n lines.unshift(`${keyColumn.label}: ${row[keyColumn.label]}`);\n }\n for (const column of columnsList) {\n lines.push(`${column.label}: ${row[column.valueLabels ?? column.value]}`);\n }\n return lines;\n}\n\nfunction formatR2(stats: TrendsData[keyof TrendsData][number]['stats']) {\n if (typeof stats.r2 === 'undefined') {\n return null;\n }\n return (\n <>\n <tspan>R</tspan>\n <tspan fontSize=\"10px\" dy=\"-8\">\n 2\n </tspan>\n <tspan dy=\"8\">{` = ${numberFormat(stats.r2)}`}</tspan>\n </>\n );\n}\n\nfunction formatPValue(stats: TrendsData[keyof TrendsData][number]['stats']) {\n if (typeof stats.pValue === 'undefined') {\n return null;\n }\n return <tspan>{`p-value = ${numberFormat(stats.pValue)}`}</tspan>;\n}\n\nfunction formatCoefficients(stats: TrendsData[keyof TrendsData][number]['stats']) {\n if (typeof stats.coefficients === 'undefined') {\n return null;\n }\n const {slope, slopeError, intercept, interceptError} = stats.coefficients;\n return (\n <tspan>\n <tspan>\n {`slope = ${numberFormat(slope)} ± ${numberFormat(slopeError)}, intercept = ${numberFormat(intercept)} ± ${numberFormat(interceptError)}`}\n </tspan>\n </tspan>\n );\n}\n\nfunction formatStats(stats: TrendsData[keyof TrendsData][number]['stats']) {\n const items = [formatR2(stats), formatPValue(stats), formatCoefficients(stats)].filter(\n value => value !== null\n ) as unknown as ReactElement[];\n return (\n <>\n {items.map((item, idx) => (\n <tspan key={idx}>\n {item}\n <tspan>{idx < items.length - 1 && ', '}</tspan>\n </tspan>\n ))}\n </>\n );\n}\n\nconst LABEL_OFFSET = 3;\n\nfunction getAllPossibleLabels(dots: Dot[], scales: ChartScales, aesGetters: AesGetters, layer?: DotsLayerData) {\n if (!layer) {\n return [];\n }\n const labels: Label[] = [];\n for (const dot of dots) {\n const text = dot.label;\n if (!text) {\n continue;\n }\n const metrics = textMeasurer.getTextMetrics(String(text));\n labels.push({\n name: String(text),\n width: metrics?.width ?? 0,\n height: (metrics?.actualBoundingBoxAscent ?? 0) + (metrics?.actualBoundingBoxDescent ?? 0),\n x: scales.x(dot.x),\n y: scales.y(dot.y),\n xPosition: 'right',\n yPosition: 'middle',\n bbox: {minX: 0, maxX: 0, minY: 0, maxY: 0},\n dot,\n padding: aesGetters.dotSize(dot.data) + LABEL_OFFSET,\n } as Label);\n }\n return labels;\n}\n\ninterface ChartProps {\n facetKey: string;\n width: number;\n height: number;\n dimensions: ChartDimensionsData;\n scales: ChartScales;\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'];\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'];\n frameType: FrameType;\n facetSettings: ScatterplotSettingsImpl['facetSettings'];\n dotsData: GroupedDots[keyof GroupedDots];\n trendsData: TrendsData[keyof TrendsData] | null;\n keyColumn: ColumnName;\n margins: Margins;\n chartSizes: ChartSizes;\n captionsSizes: CaptionsSizes;\n tooltips: ScatterplotSettingsImpl['chartSettings']['tooltips'];\n tooltipsContainer?: Element;\n facetTitle: string[];\n onlyPositive: {x: boolean; y: boolean};\n layersData: ScatterplotLayerData[];\n aesGetters: AesGetters;\n tooltipsData: TooltipsData<Dot>;\n}\n\nexport function Chart({\n facetKey,\n width,\n height,\n dimensions,\n scales,\n xAxis,\n yAxis,\n frameType,\n dotsData,\n facetSettings,\n trendsData,\n keyColumn,\n margins,\n chartSizes,\n tooltips,\n tooltipsContainer,\n captionsSizes,\n facetTitle,\n onlyPositive,\n layersData,\n aesGetters,\n tooltipsData,\n}: ChartProps) {\n const [activeElementContainer, setActiveElementContainer] = useState<SVGGElement>();\n const {padding} = dimensions;\n const {dots} = dotsData;\n const tickSizeX = xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const tickSizeY = yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const xTitle = getTitle(xAxis.title, dots);\n const yTitle = getTitle(yAxis.title, dots);\n const needLeftAxis = dimensions.chartEdgeSides.includes('left') || !facetSettings?.sharedY;\n const needBottomAxis = dimensions.chartEdgeSides.includes('bottom') || !facetSettings?.sharedX;\n\n const needLeftAxisTitle = dimensions.chartEdgeSides.includes('left');\n const needBottomAxisTitle = dimensions.chartEdgeSides.includes('bottom');\n\n const sideDistances = {\n left: margins.left + dimensions.left + padding.left,\n right: chartSizes.totalWidth - (margins.left + dimensions.left + padding.left),\n top: margins.top + dimensions.top + padding.top,\n bottom: chartSizes.totalHeight - (margins.top + dimensions.top + padding.top),\n };\n\n const debug = false;\n const [allLabels, setAllLabels] = useState<Label[]>(() =>\n getAllPossibleLabels(\n dots,\n scales,\n aesGetters,\n layersData.find(layer => layer.type === 'dots') as DotsLayerData | undefined\n )\n );\n const [labels, setLabels] = useState<Label[]>(() =>\n getFilteredLabels(allLabels, width, height, LABEL_OFFSET, LABEL_OFFSET)\n );\n const [activeDot, setActiveDot] = useState<Dot | null>(null);\n\n useEffect(() => {\n setAllLabels(\n getAllPossibleLabels(\n dots,\n scales,\n aesGetters,\n layersData.find(layer => layer.type === 'dots') as DotsLayerData | undefined\n )\n );\n }, [dots, scales, aesGetters, layersData]);\n useEffect(() => {\n const filteredLabels = getFilteredLabels(allLabels, width, height);\n setLabels(filteredLabels);\n }, [allLabels, width, height]);\n\n const dimmedBackground = activeElementContainer && tooltipsData.fixed;\n\n return (\n <g transform={`translate(${dimensions.left + padding.left},${dimensions.top + padding.top})`}>\n {debug && (\n <g fill=\"none\" stroke=\"green\" strokeWidth=\"2px\">\n <rect width={width} height={padding.top} x={0} y={-padding.top} />\n <rect width={width} height={padding.bottom} x={0} y={height} />\n <rect width={padding.left} height={height} x={-padding.left} y={0} />\n <rect width={padding.right} height={height} x={width} y={0} />\n </g>\n )}\n {facetTitle.length && (\n <g>\n {frameType === 'full' && (\n <rect x=\"0\" y={-padding.top} height={padding.top} width={width} fill=\"#F7F8FA\" stroke={BLACK} />\n )}\n {facetTitle.map((titleLine, idx) => {\n const linesCount = facetTitle.length;\n const topOffset = (padding.top - FACET_TITLE_LINE * linesCount) / 2;\n return (\n <text\n key={idx}\n fontSize=\"14px\"\n fontWeight=\"500\"\n fill={BLACK}\n x={width / 2}\n dy={topOffset + FACET_TITLE_LINE / 2 - padding.top}\n y={idx * FACET_TITLE_LINE}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n >\n {titleLine}\n </text>\n );\n })}\n </g>\n )}\n <g dominantBaseline=\"central\" textAnchor=\"middle\" fontWeight=\"500\" fontSize=\"14px\" fill={BLACK}>\n {needBottomAxisTitle && (\n <text x={width / 2} y={height + padding.bottom - MIN_PADDING - TITLE_LINE / 2}>\n {xTitle}\n </text>\n )}\n {debug && needBottomAxisTitle && (\n <rect\n x=\"0\"\n y={height + padding.bottom - MIN_PADDING - TITLE_LINE}\n width={width}\n height={TITLE_LINE}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n {needLeftAxisTitle && (\n <text\n x={-padding.left + MIN_PADDING + TITLE_LINE / 2}\n y={height / 2}\n transform={`rotate(-90,${-padding.left + MIN_PADDING + TITLE_LINE / 2},${height / 2})`}\n >\n {yTitle}\n </text>\n )}\n {debug && needLeftAxisTitle && (\n <rect\n x={-padding.left + MIN_PADDING}\n y=\"0\"\n width={TITLE_LINE}\n height={height}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n <Grid\n width={width}\n height={height}\n scaleX={scales.x}\n scaleY={scales.y}\n axisX={xAxis}\n axisY={yAxis}\n frameType={frameType}\n />\n {needBottomAxis && (\n <g transform={`translate(0,${height})`}>\n <Axis scale={scales.x} orient=\"bottom\" onlyPositive={onlyPositive.x} tickSize={tickSizeX} />\n {debug && (\n <rect\n x=\"0\"\n y={tickSizeX + TICK_OFFSET}\n width={width}\n height={TITLE_LINE}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n )}\n {needLeftAxis && (\n <g>\n <Axis scale={scales.y} orient=\"left\" onlyPositive={onlyPositive.y} tickSize={tickSizeY} />\n {debug && (\n <rect\n x={-tickSizeY - TICK_OFFSET - captionsSizes.yAxisCaptionsWidth}\n y=\"0\"\n width={captionsSizes.yAxisCaptionsWidth}\n height={height}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n )}\n {trendsData &&\n trendsData.map(({predict, getArea, data, bounded, xBounds, stats}, idx) => {\n const [minX, maxX] = bounded ? xBounds : scales.x.domain();\n const step = (maxX - minX) / 15;\n const p1 = predict(minX);\n const p2 = predict(maxX);\n if (isNaN(p1) || isNaN(p2)) {\n return null;\n }\n const fillColor = aesGetters.trendColor(data);\n return (\n <g key={idx}>\n <text y={idx * 20 + 20} fill={fillColor} x={width - 8} textAnchor=\"end\">\n {formatStats(stats)}\n </text>\n <path\n d={getArea(scales.x, scales.y, lodash.range(minX, maxX + step / 2, step))}\n fill={fillColor}\n opacity={0.2}\n />\n <line\n x1={scales.x(minX)}\n x2={scales.x(maxX)}\n y1={scales.y(p1)}\n y2={scales.y(p2)}\n stroke={fillColor}\n />\n </g>\n );\n })}\n {layersData.map((layer, idx) => {\n if (layer.type === 'dots') {\n return (\n <g key={idx}>\n {dots.map(dot => {\n const highlighted = dimmedBackground && tooltipsData.selectedData === dot;\n const dotElement = (\n <g\n key={dot.id}\n transform={`translate(${scales.x(dot.x)},${scales.y(dot.y)})`}\n opacity={dot.dimmed ? 0.3 : 1}\n onMouseOver={() => tooltipsData.onMouseOver(dot, facetKey)}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n >\n {getPointShape(\n aesGetters.dotShape(dot.data),\n aesGetters.dotSize(dot.data),\n aesGetters.dotColor(dot.data)\n )}\n </g>\n );\n return highlighted ? createPortal(dotElement, activeElementContainer) : dotElement;\n })}\n {labels.map(label => {\n const {name, height, bbox, width} = label;\n return (\n <g key={label.dot.id}>\n <g transform={`translate(${bbox.minX},${bbox.minY})`}>\n <rect\n x=\"0\"\n y=\"0\"\n width={width}\n height={height}\n fill=\"transparent\"\n stroke=\"none\"\n onMouseOver={() => setActiveDot(label.dot)}\n onMouseLeave={() => setActiveDot(null)}\n />\n <text\n x={0}\n y={height / 2}\n stroke=\"white\"\n strokeWidth={2}\n paintOrder=\"stroke\"\n style={{pointerEvents: 'none'}}\n fontFamily=\"Manrope\"\n fontSize=\"16px\"\n dominantBaseline=\"middle\"\n >\n {name}\n </text>\n </g>\n </g>\n );\n })}\n {activeDot && (\n <g\n key=\"activeDot\"\n transform={`translate(${scales.x(activeDot.x)},${scales.y(activeDot.y)})`}\n >\n {getPointShape(\n aesGetters.dotShape(activeDot.data),\n aesGetters.dotSize(activeDot.data) + 1,\n 'white',\n 'white'\n )}\n {getPointShape(\n aesGetters.dotShape(activeDot.data),\n aesGetters.dotSize(activeDot.data),\n aesGetters.dotColor(activeDot.data)\n )}\n </g>\n )}\n </g>\n );\n }\n if (layer.type === 'curve' && !layer.info.smoothing) {\n return layer.geoms.map((curve, idx) => (\n <g key={idx}>\n <polyline\n points={curve.dots.map(d => `${scales.x(d.x)},${scales.y(d.y)}`).join(' ')}\n fill=\"none\"\n stroke={aesGetters.lineColor(curve.data)}\n strokeWidth={layer.info.aes.lineWidth}\n strokeDasharray={getLineShape(layer.info.aes.lineShape)}\n />\n </g>\n ));\n }\n if (layer.type === 'curve' && layer.info.smoothing) {\n return layer.geoms.map((curve, idx) => (\n <g key={idx}>\n <path\n d={\n line<Dot>()\n .curve(curveBasis)\n .x((d: Dot) => scales.x(d.x))\n .y((d: Dot) => scales.y(d.y))(curve.dots) ?? ''\n }\n fill=\"none\"\n stroke={aesGetters.lineColor(curve.data)}\n strokeWidth={layer.info.aes.lineWidth}\n strokeDasharray={getLineShape(layer.info.aes.lineShape)}\n />\n </g>\n ));\n }\n })}\n {tooltips.show && tooltipsData.selectedData && tooltipsData.currentFacet === facetKey && (\n <Tooltip\n content={getTooltipContent(tooltipsData.selectedData, keyColumn, tooltips?.content)}\n x={scales.x(tooltipsData.selectedData.x)}\n y={scales.y(tooltipsData.selectedData.y)}\n active\n sideDistances={sideDistances}\n fixed={tooltipsData.fixed}\n onClose={tooltipsData.onClose}\n container={tooltipsContainer}\n />\n )}\n <g>\n {tooltipsData.fixed && <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255, 255, 255, 0.8)\"/>}\n <g ref={node => {\n if (node && !activeElementContainer) {\n setActiveElementContainer(node);\n }\n }}\n />\n </g>\n </g>\n );\n}\n"],"names":["textMeasurer","TextMeasurer","getTitle","title","dots","getTooltipContent","dot","keyColumn","columnsList","row","lines","numberFormat","column","formatR2","stats","jsxs","Fragment","jsx","formatPValue","formatCoefficients","slope","slopeError","intercept","interceptError","formatStats","items","value","item","idx","LABEL_OFFSET","getAllPossibleLabels","scales","aesGetters","layer","labels","text","metrics","Chart","facetKey","width","height","dimensions","xAxis","yAxis","frameType","dotsData","facetSettings","trendsData","margins","chartSizes","tooltips","tooltipsContainer","captionsSizes","facetTitle","onlyPositive","layersData","tooltipsData","activeElementContainer","setActiveElementContainer","useState","padding","tickSizeX","DEFAULT_TICKS_SIZE","tickSizeY","xTitle","yTitle","needLeftAxis","needBottomAxis","needLeftAxisTitle","needBottomAxisTitle","sideDistances","debug","allLabels","setAllLabels","setLabels","getFilteredLabels","activeDot","setActiveDot","useEffect","filteredLabels","dimmedBackground","BLACK","titleLine","linesCount","topOffset","FACET_TITLE_LINE","MIN_PADDING","TITLE_LINE","Grid","Axis","predict","getArea","data","bounded","xBounds","minX","maxX","step","p1","p2","fillColor","lodash","highlighted","dotElement","getPointShape","createPortal","label","name","bbox","curve","d","getLineShape","line","curveBasis","Tooltip","node"],"mappings":"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"}
1
+ {"version":3,"file":"Chart.js","sources":["../../../src/scatterplot/components/Chart.tsx"],"sourcesContent":["import { memo } from 'react';\nimport type { FrameType } from '../../types';\nimport { useFunction } from '../../utils/hooks/useFunction';\nimport type { Dot, GroupedDots } from '../dots';\nimport type { ScatterplotLayerData } from '../getLayersData';\nimport type { TrendsData } from '../linearRegression';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\nimport { ChartAxis } from './ChartAxis';\nimport { ChartAxisTitles } from './ChartAxisTitles';\nimport { ChartFacetTitle } from './ChartFacetTitle';\nimport { ChartLayersData } from './ChartLayersData';\nimport { ChartTrendsData } from './ChartTrendsData';\nimport { Grid } from './Grid';\nimport type {\n AesGetters,\n CaptionsSizes,\n ChartDimensionsData,\n ChartScales\n} from './types';\n\ninterface ChartProps {\n facetKey: string;\n width: number;\n height: number;\n dimensions: ChartDimensionsData;\n scales: ChartScales;\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'];\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'];\n frameType: FrameType;\n facetSettings: ScatterplotSettingsImpl['facetSettings'];\n dotsData: GroupedDots[keyof GroupedDots];\n trendsData: TrendsData[keyof TrendsData] | null;\n captionsSizes: CaptionsSizes;\n facetTitle: string[];\n onlyPositive: {x: boolean; y: boolean};\n layersData: ScatterplotLayerData[];\n aesGetters: AesGetters;\n onMouseEnterDot?: (dot: Dot, facetKey: string) => void;\n onMouseLeaveDot?: (dot: Dot, facetKey: string) => void;\n}\n\nexport const Chart = memo(({\n facetKey,\n width,\n height,\n dimensions,\n scales,\n xAxis,\n yAxis,\n frameType,\n dotsData,\n facetSettings,\n trendsData,\n captionsSizes,\n facetTitle,\n onlyPositive,\n layersData,\n aesGetters,\n onMouseEnterDot,\n onMouseLeaveDot,\n}: ChartProps) => {\n const debug = false;\n\n const {padding} = dimensions;\n \n const handleMouseEnterDot = useFunction((dot: Dot) => {\n onMouseEnterDot?.(dot, facetKey);\n });\n const handleMouseLeaveDot = useFunction((dot: Dot) => {\n onMouseLeaveDot?.(dot, facetKey);\n });\n\n return (\n <g transform={`translate(${dimensions.left + padding.left},${dimensions.top + padding.top})`}>\n {debug && (\n <g fill=\"none\" stroke=\"green\" strokeWidth=\"2px\">\n <rect width={width} height={padding.top} x={0} y={-padding.top} />\n <rect width={width} height={padding.bottom} x={0} y={height} />\n <rect width={padding.left} height={height} x={-padding.left} y={0} />\n <rect width={padding.right} height={height} x={width} y={0} />\n </g>\n )}\n\n <ChartFacetTitle\n width={width}\n dimensions={dimensions}\n frameType={frameType}\n facetTitle={facetTitle}\n />\n \n <ChartAxisTitles\n debug={debug}\n width={width}\n height={height}\n dimensions={dimensions}\n xAxis={xAxis}\n yAxis={yAxis}\n dotsData={dotsData}\n />\n\n <Grid\n width={width}\n height={height}\n scaleX={scales.x}\n scaleY={scales.y}\n axisX={xAxis}\n axisY={yAxis}\n frameType={frameType}\n />\n\n <ChartAxis\n debug={debug}\n width={width}\n height={height}\n dimensions={dimensions}\n scales={scales}\n xAxis={xAxis}\n yAxis={yAxis}\n facetSettings={facetSettings}\n captionsSizes={captionsSizes}\n onlyPositive={onlyPositive}\n />\n\n <ChartTrendsData\n width={width}\n scales={scales}\n trendsData={trendsData}\n aesGetters={aesGetters}\n />\n\n <ChartLayersData\n width={width}\n height={height}\n scales={scales}\n dotsData={dotsData}\n layersData={layersData}\n aesGetters={aesGetters}\n onMouseEnterDot={handleMouseEnterDot}\n onMouseLeaveDot={handleMouseLeaveDot}\n />\n </g>\n );\n});\n"],"names":["Chart","memo","facetKey","width","height","dimensions","scales","xAxis","yAxis","frameType","dotsData","facetSettings","trendsData","captionsSizes","facetTitle","onlyPositive","layersData","aesGetters","onMouseEnterDot","onMouseLeaveDot","padding","handleMouseEnterDot","useFunction","dot","handleMouseLeaveDot","jsxs","jsx","ChartFacetTitle","ChartAxisTitles","Grid","ChartAxis","ChartTrendsData","ChartLayersData"],"mappings":";;;;;;;;;AAyCO,MAAMA,IAAQC,EAAAA,KAAK,CAAC;AAAA,EACvB,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,YAAAC;AAAA,EACA,eAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,iBAAAC;AACJ,MAAkB;AAGd,QAAM,EAAC,SAAAC,MAAWf,GAEZgB,IAAsBC,EAAY,CAACC,MAAa;AAClD,IAAAL,KAAA,QAAAA,EAAkBK,GAAKrB;AAAA,EAC3B,CAAC,GACKsB,IAAsBF,EAAY,CAACC,MAAa;AAClD,IAAAJ,KAAA,QAAAA,EAAkBI,GAAKrB;AAAA,EAC3B,CAAC;AAED,SACIuB,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAW,aAAapB,EAAW,OAAOe,EAAQ,IAAI,IAAIf,EAAW,MAAMe,EAAQ,GAAG,KACpF,UAAA;AAAA,IAAA;AAAA,IASDM,gBAAAA,EAAAA;AAAAA,MAACC;AAAA,MAAA;AAAA,QACG,OAAAxB;AAAA,QACA,YAAAE;AAAA,QACA,WAAAI;AAAA,QACA,YAAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJY,gBAAAA,EAAAA;AAAAA,MAACE;AAAA,MAAA;AAAA,QACG;AAAA,QACA,OAAAzB;AAAA,QACA,QAAAC;AAAA,QACA,YAAAC;AAAA,QACA,OAAAE;AAAA,QACA,OAAAC;AAAA,QACA,UAAAE;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJgB,gBAAAA,EAAAA;AAAAA,MAACG;AAAA,MAAA;AAAA,QACG,OAAA1B;AAAA,QACA,QAAAC;AAAA,QACA,QAAQE,EAAO;AAAA,QACf,QAAQA,EAAO;AAAA,QACf,OAAOC;AAAA,QACP,OAAOC;AAAA,QACP,WAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJiB,gBAAAA,EAAAA;AAAAA,MAACI;AAAA,MAAA;AAAA,QACG;AAAA,QACA,OAAA3B;AAAA,QACA,QAAAC;AAAA,QACA,YAAAC;AAAA,QACA,QAAAC;AAAA,QACA,OAAAC;AAAA,QACA,OAAAC;AAAA,QACA,eAAAG;AAAA,QACA,eAAAE;AAAA,QACA,cAAAE;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJW,gBAAAA,EAAAA;AAAAA,MAACK;AAAA,MAAA;AAAA,QACG,OAAA5B;AAAA,QACA,QAAAG;AAAA,QACA,YAAAM;AAAA,QACA,YAAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJS,gBAAAA,EAAAA;AAAAA,MAACM;AAAA,MAAA;AAAA,QACG,OAAA7B;AAAA,QACA,QAAAC;AAAA,QACA,QAAAE;AAAA,QACA,UAAAI;AAAA,QACA,YAAAM;AAAA,QACA,YAAAC;AAAA,QACA,iBAAiBI;AAAA,QACjB,iBAAiBG;AAAA,MAAA;AAAA,IAAA;AAAA,EACrB,GACJ;AAER,CAAC;"}
@@ -0,0 +1,20 @@
1
+ import { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';
2
+ import { CaptionsSizes, ChartDimensionsData, ChartScales } from './types';
3
+ interface Props {
4
+ debug?: boolean;
5
+ width: number;
6
+ height: number;
7
+ dimensions: ChartDimensionsData;
8
+ scales: ChartScales;
9
+ xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'];
10
+ yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'];
11
+ facetSettings: ScatterplotSettingsImpl['facetSettings'];
12
+ captionsSizes: CaptionsSizes;
13
+ onlyPositive: {
14
+ x: boolean;
15
+ y: boolean;
16
+ };
17
+ }
18
+ export declare const ChartAxis: import('react').MemoExoticComponent<({ debug, width, height, dimensions, scales, xAxis, yAxis, facetSettings, captionsSizes, onlyPositive, }: Props) => import("react/jsx-runtime").JSX.Element>;
19
+ export {};
20
+ //# sourceMappingURL=ChartAxis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartAxis.d.ts","sourceRoot":"","sources":["../../../src/scatterplot/components/ChartAxis.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAE1E,OAAO,KAAK,EACR,aAAa,EACb,mBAAmB,EACnB,WAAW,EACd,MAAM,SAAS,CAAC;AAEjB,UAAU,KAAK;IACX,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,mBAAmB,CAAC;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC;IACzD,KAAK,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC;IACzD,aAAa,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC;IACxD,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE;QAAC,CAAC,EAAE,OAAO,CAAC;QAAC,CAAC,EAAE,OAAO,CAAA;KAAC,CAAC;CAC1C;AAED,eAAO,MAAM,SAAS,gJAWnB,KAAK,6CAyCN,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { j as o } from "../../node_modules/react/jsx-runtime.js";
2
+ import { r as a } from "../../_virtual/index.js";
3
+ import { DEFAULT_TICKS_SIZE as d, TITLE_LINE as y, TICK_OFFSET as n } from "../constants.js";
4
+ import { Axis as h } from "./Axis.js";
5
+ const L = a.memo(({
6
+ debug: s,
7
+ width: k,
8
+ height: i,
9
+ dimensions: x,
10
+ scales: t,
11
+ xAxis: j,
12
+ yAxis: E,
13
+ facetSettings: r,
14
+ captionsSizes: e,
15
+ onlyPositive: l
16
+ }) => {
17
+ const m = j.showTicks ? d : 0, c = E.showTicks ? d : 0, p = x.chartEdgeSides.includes("left") || !(r != null && r.sharedY), T = x.chartEdgeSides.includes("bottom") || !(r != null && r.sharedX);
18
+ return /* @__PURE__ */ o.jsxs(o.Fragment, { children: [
19
+ T && /* @__PURE__ */ o.jsxs("g", { transform: `translate(0,${i})`, children: [
20
+ /* @__PURE__ */ o.jsx(h, { scale: t.x, orient: "bottom", onlyPositive: l.x, tickSize: m }),
21
+ s && /* @__PURE__ */ o.jsx(
22
+ "rect",
23
+ {
24
+ x: "0",
25
+ y: m + n,
26
+ width: k,
27
+ height: y,
28
+ fill: "none",
29
+ stroke: "black"
30
+ }
31
+ )
32
+ ] }),
33
+ p && /* @__PURE__ */ o.jsxs("g", { children: [
34
+ /* @__PURE__ */ o.jsx(h, { scale: t.y, orient: "left", onlyPositive: l.y, tickSize: c }),
35
+ s && /* @__PURE__ */ o.jsx(
36
+ "rect",
37
+ {
38
+ x: -c - n - e.yAxisCaptionsWidth,
39
+ y: "0",
40
+ width: e.yAxisCaptionsWidth,
41
+ height: i,
42
+ fill: "none",
43
+ stroke: "black"
44
+ }
45
+ )
46
+ ] })
47
+ ] });
48
+ });
49
+ export {
50
+ L as ChartAxis
51
+ };
52
+ //# sourceMappingURL=ChartAxis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartAxis.js","sources":["../../../src/scatterplot/components/ChartAxis.tsx"],"sourcesContent":["import { memo } from 'react';\nimport { DEFAULT_TICKS_SIZE, TICK_OFFSET, TITLE_LINE } from '../constants';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\nimport { Axis } from './Axis';\nimport type {\n CaptionsSizes,\n ChartDimensionsData,\n ChartScales\n} from './types';\n\ninterface Props {\n debug?: boolean;\n width: number;\n height: number;\n dimensions: ChartDimensionsData;\n scales: ChartScales;\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'];\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'];\n facetSettings: ScatterplotSettingsImpl['facetSettings'];\n captionsSizes: CaptionsSizes;\n onlyPositive: {x: boolean; y: boolean};\n}\n\nexport const ChartAxis = memo(({\n debug,\n width,\n height,\n dimensions,\n scales,\n xAxis,\n yAxis,\n facetSettings,\n captionsSizes,\n onlyPositive,\n}: Props) => {\n const tickSizeX = xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const tickSizeY = yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const needLeftAxis = dimensions.chartEdgeSides.includes('left') || !facetSettings?.sharedY;\n const needBottomAxis = dimensions.chartEdgeSides.includes('bottom') || !facetSettings?.sharedX;\n\n return (\n <>\n {needBottomAxis && (\n <g transform={`translate(0,${height})`}>\n <Axis scale={scales.x} orient=\"bottom\" onlyPositive={onlyPositive.x} tickSize={tickSizeX} />\n {debug && (\n <rect\n x=\"0\"\n y={tickSizeX + TICK_OFFSET}\n width={width}\n height={TITLE_LINE}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n )}\n\n {needLeftAxis && (\n <g>\n <Axis scale={scales.y} orient=\"left\" onlyPositive={onlyPositive.y} tickSize={tickSizeY} />\n {debug && (\n <rect\n x={-tickSizeY - TICK_OFFSET - captionsSizes.yAxisCaptionsWidth}\n y=\"0\"\n width={captionsSizes.yAxisCaptionsWidth}\n height={height}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n )}\n </>\n );\n});\n"],"names":["ChartAxis","memo","debug","width","height","dimensions","scales","xAxis","yAxis","facetSettings","captionsSizes","onlyPositive","tickSizeX","DEFAULT_TICKS_SIZE","tickSizeY","needLeftAxis","needBottomAxis","jsxs","Fragment","jsx","Axis","TICK_OFFSET","TITLE_LINE"],"mappings":";;;;AAuBO,MAAMA,IAAYC,EAAAA,KAAK,CAAC;AAAA,EAC3B,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,eAAAC;AAAA,EACA,eAAAC;AAAA,EACA,cAAAC;AACJ,MAAa;AACT,QAAMC,IAAYL,EAAM,YAAYM,IAAqB,GACnDC,IAAYN,EAAM,YAAYK,IAAqB,GACnDE,IAAeV,EAAW,eAAe,SAAS,MAAM,KAAK,EAACI,KAAA,QAAAA,EAAe,UAC7EO,IAAiBX,EAAW,eAAe,SAAS,QAAQ,KAAK,EAACI,KAAA,QAAAA,EAAe;AAEvF,SACIQ,gBAAAA,EAAAA,KAAAC,YAAA,EACK,UAAA;AAAA,IAAAF,KACGC,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAW,eAAeb,CAAM,KAC/B,UAAA;AAAA,MAAAe,gBAAAA,EAAAA,IAACC,GAAA,EAAK,OAAOd,EAAO,GAAG,QAAO,UAAS,cAAcK,EAAa,GAAG,UAAUC,EAAA,CAAW;AAAA,MACzFV,KACGiB,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,GAAE;AAAA,UACF,GAAGP,IAAYS;AAAA,UACf,OAAAlB;AAAA,UACA,QAAQmB;AAAA,UACR,MAAK;AAAA,UACL,QAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IACX,GAER;AAAA,IAGHP,4BACI,KAAA,EACG,UAAA;AAAA,MAAAI,gBAAAA,EAAAA,IAACC,GAAA,EAAK,OAAOd,EAAO,GAAG,QAAO,QAAO,cAAcK,EAAa,GAAG,UAAUG,EAAA,CAAW;AAAA,MACvFZ,KACGiB,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,GAAG,CAACL,IAAYO,IAAcX,EAAc;AAAA,UAC5C,GAAE;AAAA,UACF,OAAOA,EAAc;AAAA,UACrB,QAAAN;AAAA,UACA,MAAK;AAAA,UACL,QAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IACX,EAAA,CAER;AAAA,EAAA,GAER;AAER,CAAC;"}
@@ -0,0 +1,15 @@
1
+ import { GroupedDots } from '../dots';
2
+ import { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';
3
+ import { ChartDimensionsData } from './types';
4
+ interface Props {
5
+ debug?: boolean;
6
+ width: number;
7
+ height: number;
8
+ dimensions: ChartDimensionsData;
9
+ xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'];
10
+ yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'];
11
+ dotsData: GroupedDots[keyof GroupedDots];
12
+ }
13
+ export declare const ChartAxisTitles: import('react').MemoExoticComponent<({ debug, width, height, dimensions, xAxis, yAxis, dotsData, }: Props) => false | import("react/jsx-runtime").JSX.Element>;
14
+ export {};
15
+ //# sourceMappingURL=ChartAxisTitles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartAxisTitles.d.ts","sourceRoot":"","sources":["../../../src/scatterplot/components/ChartAxisTitles.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAO,WAAW,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,KAAK,EACR,mBAAmB,EACtB,MAAM,SAAS,CAAC;AAEjB,UAAU,KAAK;IACX,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,mBAAmB,CAAC;IAChC,KAAK,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC;IACzD,KAAK,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC;IACzD,QAAQ,EAAE,WAAW,CAAC,MAAM,WAAW,CAAC,CAAC;CAC5C;AAYD,eAAO,MAAM,eAAe,sGAQzB,KAAK,qDA+CN,CAAC"}