layerchart 0.43.3 → 0.43.4
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.
|
@@ -8,10 +8,19 @@ import Bar from './Bar.svelte';
|
|
|
8
8
|
import Rect from './Rect.svelte';
|
|
9
9
|
import { tooltipContext } from './TooltipContext.svelte';
|
|
10
10
|
import { isScaleBand } from '../utils/scales.js';
|
|
11
|
-
|
|
11
|
+
import { accessor } from '../utils/common.js';
|
|
12
|
+
const { data: contextData, flatData, x: xContext, xDomain, xScale, xRange, y: yContext, yDomain, yScale, yRange, rGet, config, } = chartContext();
|
|
12
13
|
const tooltip = tooltipContext();
|
|
13
14
|
/** Highlight specific data (annotate), espect uses tooltip data */
|
|
14
15
|
export let data = undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Override `x` from context
|
|
18
|
+
*/
|
|
19
|
+
export let x = $xContext;
|
|
20
|
+
/**
|
|
21
|
+
* Override `y` from context
|
|
22
|
+
*/
|
|
23
|
+
export let y = $yContext;
|
|
15
24
|
export let axis = undefined;
|
|
16
25
|
/** Show points and pass props to Circles */
|
|
17
26
|
export let points = false;
|
|
@@ -24,6 +33,8 @@ export let bar = false;
|
|
|
24
33
|
/** Set to false to disable spring transitions */
|
|
25
34
|
export let motion = true;
|
|
26
35
|
// TODO: Fix circle points being backwards for stack (see AreaStack)
|
|
36
|
+
const _x = accessor(x);
|
|
37
|
+
const _y = accessor(y);
|
|
27
38
|
let _points = [];
|
|
28
39
|
let _lines = [];
|
|
29
40
|
let _area = {
|
|
@@ -34,10 +45,12 @@ let _area = {
|
|
|
34
45
|
};
|
|
35
46
|
$: highlightData = data ?? $tooltip.data;
|
|
36
47
|
$: if (highlightData) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
48
|
+
const xValue = _x(highlightData);
|
|
49
|
+
const xCoord = Array.isArray(xValue) ? xValue.map((v) => $xScale(v)) : $xScale(xValue);
|
|
50
|
+
const xOffset = isScaleBand($xScale) ? $xScale.bandwidth() / 2 : 0;
|
|
51
|
+
const yValue = _y(highlightData);
|
|
52
|
+
const yCoord = Array.isArray(yValue) ? yValue.map((v) => $yScale(v)) : $yScale(yValue);
|
|
53
|
+
const yOffset = isScaleBand($yScale) ? $yScale.bandwidth() / 2 : 0;
|
|
41
54
|
// Reset lines
|
|
42
55
|
_lines = [];
|
|
43
56
|
const defaultAxis = isScaleBand($yScale) ? 'y' : 'x';
|
|
@@ -79,9 +92,9 @@ $: if (highlightData) {
|
|
|
79
92
|
}
|
|
80
93
|
else {
|
|
81
94
|
// Find width to next data point
|
|
82
|
-
const index = $flatData.findIndex((d) => Number(
|
|
95
|
+
const index = $flatData.findIndex((d) => Number(_x(d)) === Number(_x(highlightData)));
|
|
83
96
|
const isLastPoint = index + 1 === $flatData.length;
|
|
84
|
-
const nextDataPoint = isLastPoint ? max($xDomain) :
|
|
97
|
+
const nextDataPoint = isLastPoint ? max($xDomain) : _x($flatData[index + 1]);
|
|
85
98
|
_area.width = ($xScale(nextDataPoint) ?? 0) - (xCoord ?? 0);
|
|
86
99
|
}
|
|
87
100
|
// If array, use left-most value for top left of rect
|
|
@@ -127,9 +140,9 @@ $: if (highlightData) {
|
|
|
127
140
|
}
|
|
128
141
|
else {
|
|
129
142
|
// Find width to next data point
|
|
130
|
-
const index = $flatData.findIndex((d) => Number(
|
|
143
|
+
const index = $flatData.findIndex((d) => Number(_x(d)) === Number(_x(highlightData)));
|
|
131
144
|
const isLastPoint = index + 1 === $flatData.length;
|
|
132
|
-
const nextDataPoint = isLastPoint ? max($yDomain) :
|
|
145
|
+
const nextDataPoint = isLastPoint ? max($yDomain) : _x($flatData[index + 1]);
|
|
133
146
|
_area.height = ($yScale(nextDataPoint) ?? 0) - (yCoord ?? 0);
|
|
134
147
|
}
|
|
135
148
|
// If array, use left-most value for top left of rect
|
|
@@ -153,7 +166,7 @@ $: if (highlightData) {
|
|
|
153
166
|
const seriesPointsData = $contextData.map((series) => {
|
|
154
167
|
return {
|
|
155
168
|
series,
|
|
156
|
-
point: series.find((d) =>
|
|
169
|
+
point: series.find((d) => _y(d) === _y(highlightSeriesPoint)),
|
|
157
170
|
};
|
|
158
171
|
});
|
|
159
172
|
_points = seriesPointsData.map((seriesPoint, i) => ({
|
|
@@ -169,7 +182,7 @@ $: if (highlightData) {
|
|
|
169
182
|
const $key = $config.x[i];
|
|
170
183
|
return {
|
|
171
184
|
x: xItem + xOffset,
|
|
172
|
-
y:
|
|
185
|
+
y: yCoord + yOffset,
|
|
173
186
|
// TODO: is there a better way to expose the series key/value?
|
|
174
187
|
fill: $config.r ? $rGet({ ...highlightData, $key }) : null,
|
|
175
188
|
};
|
|
@@ -188,7 +201,7 @@ $: if (highlightData) {
|
|
|
188
201
|
const seriesPointsData = $contextData.map((series) => {
|
|
189
202
|
return {
|
|
190
203
|
series,
|
|
191
|
-
point: series.find((d) =>
|
|
204
|
+
point: series.find((d) => _x(d) === _x(highlightSeriesPoint)),
|
|
192
205
|
};
|
|
193
206
|
});
|
|
194
207
|
_points = seriesPointsData.map((seriesPoint, i) => ({
|
|
@@ -203,7 +216,7 @@ $: if (highlightData) {
|
|
|
203
216
|
_points = yCoord.filter(notNull).map((yItem, i) => {
|
|
204
217
|
const $key = $config.y[i];
|
|
205
218
|
return {
|
|
206
|
-
x:
|
|
219
|
+
x: xCoord + xOffset,
|
|
207
220
|
y: yItem + yOffset,
|
|
208
221
|
// TODO: is there a better way to expose the series key/value?
|
|
209
222
|
fill: $config.r ? $rGet({ ...highlightData, $key }) : null,
|
|
@@ -215,7 +228,7 @@ $: if (highlightData) {
|
|
|
215
228
|
_points = [
|
|
216
229
|
{
|
|
217
230
|
x: xCoord + xOffset,
|
|
218
|
-
y:
|
|
231
|
+
y: yCoord + yOffset,
|
|
219
232
|
fill: $config.r ? $rGet(highlightData) : null,
|
|
220
233
|
},
|
|
221
234
|
];
|
|
@@ -292,7 +305,7 @@ $: if (highlightData) {
|
|
|
292
305
|
{...typeof points === 'object' ? points : null}
|
|
293
306
|
class={cls(
|
|
294
307
|
'stroke-[6] stroke-white [paint-order:stroke] drop-shadow',
|
|
295
|
-
!point.fill && 'fill-primary',
|
|
308
|
+
!point.fill && typeof points === 'object' && !points.fill && 'fill-primary',
|
|
296
309
|
typeof points === 'object' ? points.class : null
|
|
297
310
|
)}
|
|
298
311
|
/>
|
|
@@ -4,9 +4,16 @@ import Circle from './Circle.svelte';
|
|
|
4
4
|
import Line from './Line.svelte';
|
|
5
5
|
import Bar from './Bar.svelte';
|
|
6
6
|
import Rect from './Rect.svelte';
|
|
7
|
+
import { type Accessor } from '../utils/common.js';
|
|
7
8
|
declare const __propDef: {
|
|
8
9
|
props: {
|
|
9
10
|
/** Highlight specific data (annotate), espect uses tooltip data */ data?: any;
|
|
11
|
+
/**
|
|
12
|
+
* Override `x` from context
|
|
13
|
+
*/ x?: Accessor;
|
|
14
|
+
/**
|
|
15
|
+
* Override `y` from context
|
|
16
|
+
*/ y?: Accessor;
|
|
10
17
|
axis?: "x" | "y" | "both" | "none" | undefined;
|
|
11
18
|
/** Show points and pass props to Circles */ points?: boolean | Partial<ComponentProps<Circle>>;
|
|
12
19
|
/** Show lines and pass props to Lines */ lines?: boolean | Partial<ComponentProps<Line>>;
|
|
@@ -32,8 +39,8 @@ declare const __propDef: {
|
|
|
32
39
|
bar: boolean | Partial<{
|
|
33
40
|
[x: string]: any;
|
|
34
41
|
bar: Object;
|
|
35
|
-
x?:
|
|
36
|
-
y?:
|
|
42
|
+
x?: Accessor;
|
|
43
|
+
y?: Accessor;
|
|
37
44
|
fill?: string | undefined;
|
|
38
45
|
stroke?: string;
|
|
39
46
|
strokeWidth?: number;
|