layerchart 0.53.0 → 0.54.1
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.
- package/dist/components/Arc.svelte +170 -144
- package/dist/components/Area.svelte +96 -67
- package/dist/components/Area.svelte.d.ts +1 -0
- package/dist/components/Axis.svelte +241 -234
- package/dist/components/Axis.svelte.d.ts +2 -1
- package/dist/components/Bar.svelte +72 -45
- package/dist/components/Bars.svelte +46 -34
- package/dist/components/Bars.svelte.d.ts +1 -0
- package/dist/components/Blur.svelte +5 -3
- package/dist/components/Bounds.svelte +37 -21
- package/dist/components/Brush.svelte +181 -110
- package/dist/components/Calendar.svelte +51 -38
- package/dist/components/Chart.svelte +296 -73
- package/dist/components/Chart.svelte.d.ts +42 -25
- package/dist/components/ChartClipPath.svelte +8 -5
- package/dist/components/ChartContext.svelte +243 -93
- package/dist/components/ChartContext.svelte.d.ts +15 -23
- package/dist/components/Circle.svelte +25 -16
- package/dist/components/CircleClipPath.svelte +16 -10
- package/dist/components/ClipPath.svelte +11 -7
- package/dist/components/ColorRamp.svelte +12 -10
- package/dist/components/ForceSimulation.svelte +185 -116
- package/dist/components/Frame.svelte +10 -6
- package/dist/components/GeoCircle.svelte +15 -9
- package/dist/components/GeoContext.svelte +109 -62
- package/dist/components/GeoEdgeFade.svelte +20 -14
- package/dist/components/GeoPath.svelte +107 -69
- package/dist/components/GeoPoint.svelte +32 -18
- package/dist/components/GeoSpline.svelte +30 -22
- package/dist/components/GeoTile.svelte +40 -30
- package/dist/components/GeoVisible.svelte +10 -7
- package/dist/components/Graticule.svelte +14 -8
- package/dist/components/Grid.svelte +178 -0
- package/dist/components/Grid.svelte.d.ts +35 -0
- package/dist/components/Group.svelte +43 -31
- package/dist/components/Highlight.svelte +284 -243
- package/dist/components/HitCanvas.svelte +75 -42
- package/dist/components/Hull.svelte +40 -20
- package/dist/components/Labels.svelte +84 -63
- package/dist/components/Labels.svelte.d.ts +2 -0
- package/dist/components/Legend.svelte +106 -75
- package/dist/components/Legend.svelte.d.ts +1 -1
- package/dist/components/Line.svelte +29 -19
- package/dist/components/LinearGradient.svelte +21 -15
- package/dist/components/Link.svelte +44 -22
- package/dist/components/MonthPath.svelte +23 -16
- package/dist/components/MotionPath.svelte +34 -25
- package/dist/components/Pack.svelte +21 -14
- package/dist/components/Partition.svelte +35 -20
- package/dist/components/Pattern.svelte +8 -6
- package/dist/components/Pie.svelte +76 -57
- package/dist/components/Point.svelte +11 -7
- package/dist/components/Points.svelte +178 -143
- package/dist/components/RadialGradient.svelte +25 -18
- package/dist/components/Rect.svelte +33 -19
- package/dist/components/RectClipPath.svelte +16 -11
- package/dist/components/Rule.svelte +66 -42
- package/dist/components/Rule.svelte.d.ts +2 -0
- package/dist/components/Sankey.svelte +55 -30
- package/dist/components/Spline.svelte +118 -96
- package/dist/components/Text.svelte +137 -104
- package/dist/components/Threshold.svelte +18 -7
- package/dist/components/TileImage.svelte +56 -50
- package/dist/components/TransformContext.svelte +238 -136
- package/dist/components/TransformControls.svelte +57 -29
- package/dist/components/TransformControls.svelte.d.ts +1 -1
- package/dist/components/Tree.svelte +33 -23
- package/dist/components/Treemap.svelte +69 -41
- package/dist/components/Voronoi.svelte +55 -28
- package/dist/components/charts/AreaChart.svelte +162 -87
- package/dist/components/charts/AreaChart.svelte.d.ts +41 -3
- package/dist/components/charts/BarChart.svelte +207 -108
- package/dist/components/charts/BarChart.svelte.d.ts +41 -3
- package/dist/components/charts/LineChart.svelte +119 -47
- package/dist/components/charts/LineChart.svelte.d.ts +41 -3
- package/dist/components/charts/PieChart.svelte +117 -53
- package/dist/components/charts/PieChart.svelte.d.ts +17 -2
- package/dist/components/charts/ScatterChart.svelte +92 -42
- package/dist/components/charts/ScatterChart.svelte.d.ts +39 -3
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/layout/Canvas.svelte +63 -43
- package/dist/components/layout/Html.svelte +28 -18
- package/dist/components/layout/Svg.svelte +47 -32
- package/dist/components/tooltip/Tooltip.svelte +143 -82
- package/dist/components/tooltip/Tooltip.svelte.d.ts +1 -1
- package/dist/components/tooltip/TooltipContext.svelte +315 -248
- package/dist/components/tooltip/TooltipContext.svelte.d.ts +7 -0
- package/dist/components/tooltip/TooltipHeader.svelte +9 -3
- package/dist/components/tooltip/TooltipItem.svelte +17 -9
- package/dist/components/tooltip/TooltipList.svelte +2 -1
- package/dist/components/tooltip/TooltipSeparator.svelte +3 -2
- package/dist/docs/Blockquote.svelte +4 -3
- package/dist/docs/Code.svelte +15 -8
- package/dist/docs/CurveMenuField.svelte +17 -12
- package/dist/docs/GeoDebug.svelte +13 -9
- package/dist/docs/Header1.svelte +2 -1
- package/dist/docs/Json.svelte +6 -4
- package/dist/docs/Layout.svelte +6 -6
- package/dist/docs/PathDataMenuField.svelte +52 -44
- package/dist/docs/Preview.svelte +48 -29
- package/dist/docs/TilesetField.svelte +80 -62
- package/dist/docs/TransformDebug.svelte +8 -5
- package/dist/docs/ViewSourceButton.svelte +13 -9
- package/dist/stores/motionStore.d.ts +1 -1
- package/dist/utils/scales.d.ts +4 -4
- package/package.json +29 -30
|
@@ -1,30 +1,79 @@
|
|
|
1
|
-
<script generics="TData">
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
1
|
+
<script lang="ts" generics="TData">
|
|
2
|
+
import { type ComponentProps } from 'svelte';
|
|
3
|
+
import { scaleLinear, scaleOrdinal, scaleTime } from 'd3-scale';
|
|
4
|
+
import { format } from '@layerstack/utils';
|
|
5
|
+
|
|
6
|
+
import Axis from '../Axis.svelte';
|
|
7
|
+
import Chart from '../Chart.svelte';
|
|
8
|
+
import Grid from '../Grid.svelte';
|
|
9
|
+
import Highlight from '../Highlight.svelte';
|
|
10
|
+
import Labels from '../Labels.svelte';
|
|
11
|
+
import Legend from '../Legend.svelte';
|
|
12
|
+
import Points from '../Points.svelte';
|
|
13
|
+
import Rule from '../Rule.svelte';
|
|
14
|
+
import Svg from '../layout/Svg.svelte';
|
|
15
|
+
import * as Tooltip from '../tooltip/index.js';
|
|
16
|
+
|
|
17
|
+
import { accessor, chartDataArray, type Accessor } from '../../utils/common.js';
|
|
18
|
+
|
|
19
|
+
interface $$Props extends ComponentProps<Chart<TData>> {
|
|
20
|
+
axis?: typeof axis;
|
|
21
|
+
grid?: typeof grid;
|
|
22
|
+
labels?: typeof labels;
|
|
23
|
+
legend?: typeof legend;
|
|
24
|
+
props?: typeof props;
|
|
25
|
+
series?: typeof series;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export let data: $$Props['data'] = [];
|
|
29
|
+
export let x: Accessor<TData> = undefined;
|
|
30
|
+
export let y: Accessor<TData> = undefined;
|
|
31
|
+
|
|
32
|
+
export let series: {
|
|
33
|
+
key: string;
|
|
34
|
+
label?: string;
|
|
35
|
+
data: TData[];
|
|
36
|
+
color?: string;
|
|
37
|
+
props?: Partial<ComponentProps<Points>>;
|
|
38
|
+
}[] = [{ key: 'default', data: chartDataArray(data), color: 'hsl(var(--color-primary))' }];
|
|
39
|
+
$: isDefaultSeries = series.length === 1 && series[0].key === 'default';
|
|
40
|
+
|
|
41
|
+
export let axis: ComponentProps<Axis> | 'x' | 'y' | boolean = true;
|
|
42
|
+
export let grid: ComponentProps<Grid> | boolean = true;
|
|
43
|
+
export let labels: ComponentProps<Labels> | boolean = false;
|
|
44
|
+
export let legend: ComponentProps<Legend> | boolean = false;
|
|
45
|
+
export let rule: ComponentProps<Rule> | boolean = true;
|
|
46
|
+
|
|
47
|
+
export let props: {
|
|
48
|
+
xAxis?: Partial<ComponentProps<Axis>>;
|
|
49
|
+
yAxis?: Partial<ComponentProps<Axis>>;
|
|
50
|
+
grid?: Partial<ComponentProps<Grid>>;
|
|
51
|
+
points?: Partial<ComponentProps<Points>>;
|
|
52
|
+
highlight?: Partial<ComponentProps<Highlight>>;
|
|
53
|
+
labels?: Partial<ComponentProps<Labels>>;
|
|
54
|
+
legend?: Partial<ComponentProps<Legend>>;
|
|
55
|
+
rule?: Partial<ComponentProps<Rule>>;
|
|
56
|
+
} = {};
|
|
57
|
+
|
|
58
|
+
// Default xScale based on first data's `x` value
|
|
59
|
+
$: xScale = accessor(x)(chartDataArray(data)[0]) instanceof Date ? scaleTime() : scaleLinear();
|
|
60
|
+
|
|
61
|
+
let chartData = series
|
|
26
62
|
.flatMap((s) => s.data?.map((d) => ({ seriesKey: s.key, ...d })))
|
|
27
|
-
.filter((d) => d)
|
|
63
|
+
.filter((d) => d) as Array<TData>;
|
|
64
|
+
|
|
65
|
+
function getPointsProps(s: (typeof series)[number], i: number) {
|
|
66
|
+
const pointsProps: ComponentProps<Points> = {
|
|
67
|
+
data: s.data,
|
|
68
|
+
stroke: s.color,
|
|
69
|
+
fill: s.color,
|
|
70
|
+
'fill-opacity': 0.3,
|
|
71
|
+
...props.points,
|
|
72
|
+
...s.props,
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
return pointsProps;
|
|
76
|
+
}
|
|
28
77
|
</script>
|
|
29
78
|
|
|
30
79
|
<Chart
|
|
@@ -45,6 +94,8 @@ let chartData = series
|
|
|
45
94
|
let:xScale
|
|
46
95
|
let:y
|
|
47
96
|
let:yScale
|
|
97
|
+
let:c
|
|
98
|
+
let:cScale
|
|
48
99
|
let:r
|
|
49
100
|
let:width
|
|
50
101
|
let:height
|
|
@@ -52,19 +103,24 @@ let chartData = series
|
|
|
52
103
|
let:tooltip
|
|
53
104
|
let:config
|
|
54
105
|
>
|
|
55
|
-
{@const slotProps = { x, xScale, y, yScale, width, height, padding, tooltip, series }}
|
|
106
|
+
{@const slotProps = { x, xScale, y, yScale, c, cScale, width, height, padding, tooltip, series }}
|
|
56
107
|
{@const activeSeries = tooltip.data
|
|
57
108
|
? (series.find((s) => s.key === tooltip.data.seriesKey) ?? series[0])
|
|
58
109
|
: null}
|
|
59
110
|
|
|
60
111
|
<slot {...slotProps}>
|
|
61
112
|
<Svg>
|
|
113
|
+
<slot name="grid" {...slotProps}>
|
|
114
|
+
{#if grid}
|
|
115
|
+
<Grid x y {...typeof grid === 'object' ? grid : null} {...props.grid} />
|
|
116
|
+
{/if}
|
|
117
|
+
</slot>
|
|
118
|
+
|
|
62
119
|
<slot name="axis" {...slotProps}>
|
|
63
120
|
{#if axis}
|
|
64
121
|
{#if axis !== 'x'}
|
|
65
122
|
<Axis
|
|
66
123
|
placement="left"
|
|
67
|
-
grid
|
|
68
124
|
format={(value) => format(value, undefined, { variant: 'short' })}
|
|
69
125
|
{...typeof axis === 'object' ? axis : null}
|
|
70
126
|
{...props.yAxis}
|
|
@@ -74,7 +130,6 @@ let chartData = series
|
|
|
74
130
|
{#if axis !== 'y'}
|
|
75
131
|
<Axis
|
|
76
132
|
placement="bottom"
|
|
77
|
-
grid
|
|
78
133
|
format={(value) => format(value, undefined, { variant: 'short' })}
|
|
79
134
|
{...typeof axis === 'object' ? axis : null}
|
|
80
135
|
{...props.xAxis}
|
|
@@ -90,15 +145,8 @@ let chartData = series
|
|
|
90
145
|
<slot name="below-marks" {...slotProps} />
|
|
91
146
|
|
|
92
147
|
<slot name="marks" {...slotProps}>
|
|
93
|
-
{#each series as s}
|
|
94
|
-
<Points
|
|
95
|
-
data={s.data}
|
|
96
|
-
stroke={s.color}
|
|
97
|
-
fill={s.color}
|
|
98
|
-
fill-opacity={0.3}
|
|
99
|
-
{...props.points}
|
|
100
|
-
{...s.props}
|
|
101
|
-
/>
|
|
148
|
+
{#each series as s, i}
|
|
149
|
+
<Points {...getPointsProps(s, i)} />
|
|
102
150
|
{/each}
|
|
103
151
|
</slot>
|
|
104
152
|
|
|
@@ -120,10 +168,12 @@ let chartData = series
|
|
|
120
168
|
<slot name="legend" {...slotProps}>
|
|
121
169
|
{#if legend}
|
|
122
170
|
<Legend
|
|
123
|
-
scale={
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
171
|
+
scale={isDefaultSeries
|
|
172
|
+
? undefined
|
|
173
|
+
: scaleOrdinal(
|
|
174
|
+
series.map((s) => s.label ?? s.key),
|
|
175
|
+
series.map((s) => s.color)
|
|
176
|
+
)}
|
|
127
177
|
placement="bottom"
|
|
128
178
|
variant="swatches"
|
|
129
179
|
{...props.legend}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
2
|
import { type ComponentProps } from 'svelte';
|
|
3
3
|
import Axis from '../Axis.svelte';
|
|
4
|
+
import Grid from '../Grid.svelte';
|
|
4
5
|
import Highlight from '../Highlight.svelte';
|
|
5
6
|
import Labels from '../Labels.svelte';
|
|
6
7
|
import Legend from '../Legend.svelte';
|
|
@@ -75,7 +76,7 @@ declare class __sveltets_Render<TData> {
|
|
|
75
76
|
width: number;
|
|
76
77
|
height: number;
|
|
77
78
|
}) => number[] | string[]) | undefined;
|
|
78
|
-
cRange?: string[];
|
|
79
|
+
cRange?: string[] | readonly string[];
|
|
79
80
|
xReverse?: boolean;
|
|
80
81
|
yReverse?: boolean;
|
|
81
82
|
zReverse?: boolean;
|
|
@@ -130,6 +131,13 @@ declare class __sveltets_Render<TData> {
|
|
|
130
131
|
onClick?: ({ data }: {
|
|
131
132
|
data: any;
|
|
132
133
|
}) => any;
|
|
134
|
+
tooltip?: import("svelte/store").Writable<{
|
|
135
|
+
y: number;
|
|
136
|
+
x: number;
|
|
137
|
+
data: any;
|
|
138
|
+
show: (e: PointerEvent, tooltipData?: any) => void;
|
|
139
|
+
hide: () => void;
|
|
140
|
+
}>;
|
|
133
141
|
}> | undefined;
|
|
134
142
|
transform?: Partial<{
|
|
135
143
|
mode?: "canvas" | "manual" | "none";
|
|
@@ -178,6 +186,14 @@ declare class __sveltets_Render<TData> {
|
|
|
178
186
|
setScale?: (value: number, options?: import("../../stores/motionStore").MotionOptions) => void;
|
|
179
187
|
}> | undefined;
|
|
180
188
|
transformContext?: import("..").TransformContext;
|
|
189
|
+
geoProjection?: import("svelte/store").Writable<import("d3-geo").GeoProjection> | undefined;
|
|
190
|
+
tooltipContext?: import("svelte/store").Writable<{
|
|
191
|
+
y: number;
|
|
192
|
+
x: number;
|
|
193
|
+
data: any;
|
|
194
|
+
show: (e: PointerEvent, tooltipData?: any) => void;
|
|
195
|
+
hide: () => void;
|
|
196
|
+
}> | undefined;
|
|
181
197
|
} & {
|
|
182
198
|
axis?: boolean | "x" | "y" | {
|
|
183
199
|
[x: string]: any;
|
|
@@ -185,7 +201,7 @@ declare class __sveltets_Render<TData> {
|
|
|
185
201
|
label?: string | undefined;
|
|
186
202
|
labelPlacement?: ("start" | "middle" | "end") | undefined;
|
|
187
203
|
labelProps?: Partial<ComponentProps<import("..").Text>> | undefined;
|
|
188
|
-
rule?: (boolean |
|
|
204
|
+
rule?: (boolean | Partial<ComponentProps<Rule>>) | undefined;
|
|
189
205
|
grid?: (boolean | Pick<import("svelte/elements").SVGAttributes<SVGElement>, "class" | "style">) | undefined;
|
|
190
206
|
ticks?: number | any[] | ((scale: import("../../utils/scales").AnyScale) => any) | null | undefined;
|
|
191
207
|
tickLength?: number | undefined;
|
|
@@ -201,8 +217,26 @@ declare class __sveltets_Render<TData> {
|
|
|
201
217
|
label?: string;
|
|
202
218
|
} | undefined;
|
|
203
219
|
};
|
|
220
|
+
grid?: boolean | {
|
|
221
|
+
[x: string]: any;
|
|
222
|
+
x?: (boolean | Pick<import("svelte/elements").SVGAttributes<SVGElement>, "class" | "style">) | undefined;
|
|
223
|
+
y?: (boolean | Pick<import("svelte/elements").SVGAttributes<SVGElement>, "class" | "style">) | undefined;
|
|
224
|
+
xTicks?: number | any[] | ((scale: import("../../utils/scales").AnyScale) => any) | null | undefined;
|
|
225
|
+
yTicks?: number | any[] | ((scale: import("../../utils/scales").AnyScale) => any) | null | undefined;
|
|
226
|
+
bandAlign?: ("center" | "between") | undefined;
|
|
227
|
+
radialY?: ("circle" | "linear") | undefined;
|
|
228
|
+
spring?: boolean | Parameters<typeof import("svelte/motion").spring>[1];
|
|
229
|
+
tweened?: boolean | Parameters<typeof import("svelte/motion").tweened>[1];
|
|
230
|
+
transitionIn?: (typeof import("svelte/transition").fade | (() => {})) | undefined;
|
|
231
|
+
transitionInParams?: import("svelte-ux").TransitionParams | undefined;
|
|
232
|
+
classes?: {
|
|
233
|
+
root?: string;
|
|
234
|
+
line?: string;
|
|
235
|
+
} | undefined;
|
|
236
|
+
};
|
|
204
237
|
labels?: boolean | {
|
|
205
238
|
[x: string]: any;
|
|
239
|
+
value?: Accessor;
|
|
206
240
|
placement?: ("inside" | "outside" | "center") | undefined;
|
|
207
241
|
offset?: number | undefined;
|
|
208
242
|
format?: import("@layerstack/utils").FormatType | undefined;
|
|
@@ -218,7 +252,7 @@ declare class __sveltets_Render<TData> {
|
|
|
218
252
|
tickValues?: any[] | undefined;
|
|
219
253
|
tickFontSize?: number | undefined;
|
|
220
254
|
tickLength?: number | undefined;
|
|
221
|
-
placement?: ("
|
|
255
|
+
placement?: ("center" | "left" | "right" | "bottom" | "top" | "top-left" | "top-right" | "bottom-left" | "bottom-right") | undefined;
|
|
222
256
|
orientation?: ("horizontal" | "vertical") | undefined;
|
|
223
257
|
variant?: ("ramp" | "swatches") | undefined;
|
|
224
258
|
classes?: {
|
|
@@ -233,6 +267,7 @@ declare class __sveltets_Render<TData> {
|
|
|
233
267
|
props?: {
|
|
234
268
|
xAxis?: Partial<ComponentProps<Axis>>;
|
|
235
269
|
yAxis?: Partial<ComponentProps<Axis>>;
|
|
270
|
+
grid?: Partial<ComponentProps<Grid>>;
|
|
236
271
|
points?: Partial<ComponentProps<Points>>;
|
|
237
272
|
highlight?: Partial<ComponentProps<Highlight>>;
|
|
238
273
|
labels?: Partial<ComponentProps<Labels>>;
|
|
@@ -252,6 +287,7 @@ declare class __sveltets_Render<TData> {
|
|
|
252
287
|
};
|
|
253
288
|
slots(): {
|
|
254
289
|
default: any;
|
|
290
|
+
grid: any;
|
|
255
291
|
axis: any;
|
|
256
292
|
'below-marks': any;
|
|
257
293
|
marks: any;
|
|
@@ -27,6 +27,7 @@ export { default as GeoSpline } from './GeoSpline.svelte';
|
|
|
27
27
|
export { default as GeoTile } from './GeoTile.svelte';
|
|
28
28
|
export { default as GeoVisible } from './GeoVisible.svelte';
|
|
29
29
|
export { default as Graticule } from './Graticule.svelte';
|
|
30
|
+
export { default as Grid } from './Grid.svelte';
|
|
30
31
|
export { default as Group } from './Group.svelte';
|
|
31
32
|
export { default as Highlight } from './Highlight.svelte';
|
|
32
33
|
export { default as HitCanvas } from './HitCanvas.svelte';
|
package/dist/components/index.js
CHANGED
|
@@ -28,6 +28,7 @@ export { default as GeoSpline } from './GeoSpline.svelte';
|
|
|
28
28
|
export { default as GeoTile } from './GeoTile.svelte';
|
|
29
29
|
export { default as GeoVisible } from './GeoVisible.svelte';
|
|
30
30
|
export { default as Graticule } from './Graticule.svelte';
|
|
31
|
+
export { default as Grid } from './Grid.svelte';
|
|
31
32
|
export { default as Group } from './Group.svelte';
|
|
32
33
|
export { default as Highlight } from './Highlight.svelte';
|
|
33
34
|
export { default as HitCanvas } from './HitCanvas.svelte';
|
|
@@ -1,53 +1,73 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
export let
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
export let
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
export let
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { onMount, setContext } from 'svelte';
|
|
3
|
+
import { writable } from 'svelte/store';
|
|
4
|
+
import { scaleCanvas } from 'layercake';
|
|
5
|
+
import { cls } from '@layerstack/tailwind';
|
|
6
|
+
|
|
7
|
+
import { chartContext } from '../ChartContext.svelte';
|
|
8
|
+
import { transformContext } from '../TransformContext.svelte';
|
|
9
|
+
|
|
10
|
+
const { width, height, containerWidth, containerHeight, padding } = chartContext();
|
|
11
|
+
|
|
12
|
+
/** The `<canvas>` tag. Useful for bindings. */
|
|
13
|
+
export let element: HTMLCanvasElement | undefined = undefined;
|
|
14
|
+
|
|
15
|
+
/** The `<canvas>`'s 2d context. Useful for bindings. */
|
|
16
|
+
// @ts-expect-error: set during onMount()
|
|
17
|
+
export let context: CanvasRenderingContext2D = undefined;
|
|
18
|
+
|
|
19
|
+
/** Force the use of a software (instead of hardware accelerated) 2D canvas and can save memory when calling getImageData() frequently.
|
|
20
|
+
* see: https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext#willreadfrequently */
|
|
21
|
+
export let willReadFrequently = false;
|
|
22
|
+
|
|
23
|
+
/** The layer's z-index. */
|
|
24
|
+
export let zIndex = undefined;
|
|
25
|
+
|
|
26
|
+
/** Set this to `false` to set `pointer-events: none;` on the entire layer. */
|
|
27
|
+
export let pointerEvents: boolean | undefined = undefined;
|
|
28
|
+
|
|
29
|
+
/** Text to display if the browser won't render a canvas tag. You can also set arbitrary HTML via the "fallback" slot but this is fine if you just need text. If you use the "fallback" slot, this prop is ignored. */
|
|
30
|
+
export let fallback = '';
|
|
31
|
+
|
|
32
|
+
/** A string passed to the `aria-label` on the `<canvas>` tag. */
|
|
33
|
+
export let label: string | undefined = undefined;
|
|
34
|
+
|
|
35
|
+
/** A string passed to the `aria-labelledby` on the `<canvas>` tag. */
|
|
36
|
+
export let labelledBy: string | undefined = undefined;
|
|
37
|
+
|
|
38
|
+
/** A string passed to `aria-describedby` property on the `<canvas>` tag. */
|
|
39
|
+
export let describedBy: string | undefined = undefined;
|
|
40
|
+
|
|
41
|
+
const ctx = writable({});
|
|
42
|
+
|
|
43
|
+
onMount(() => {
|
|
44
|
+
context = element?.getContext('2d', { willReadFrequently }) as CanvasRenderingContext2D;
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
const { mode, scale, translate } = transformContext();
|
|
48
|
+
|
|
49
|
+
$: if (context) {
|
|
34
50
|
scaleCanvas(context, $containerWidth, $containerHeight);
|
|
35
51
|
context.clearRect(0, 0, $containerWidth, $containerHeight);
|
|
52
|
+
|
|
36
53
|
context.translate($padding.left ?? 0, $padding.top ?? 0);
|
|
54
|
+
|
|
37
55
|
if (mode === 'canvas') {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
56
|
+
const center = { x: $width / 2, y: $height / 2 };
|
|
57
|
+
const newTranslate = {
|
|
58
|
+
x: $translate.x * $scale + center.x - center.x * $scale,
|
|
59
|
+
y: $translate.y * $scale + center.y - center.y * $scale,
|
|
60
|
+
};
|
|
61
|
+
context.translate(newTranslate.x, newTranslate.y);
|
|
62
|
+
context.scale($scale, $scale);
|
|
45
63
|
}
|
|
64
|
+
|
|
46
65
|
// Force children to re-draw
|
|
47
66
|
$ctx = context;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
$: ctx.set(context);
|
|
70
|
+
setContext('canvas', { ctx });
|
|
51
71
|
</script>
|
|
52
72
|
|
|
53
73
|
<canvas
|
|
@@ -1,21 +1,31 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
/** The layer's
|
|
6
|
-
export let
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
export let
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cls } from '@layerstack/tailwind';
|
|
3
|
+
import { chartContext } from '../ChartContext.svelte';
|
|
4
|
+
|
|
5
|
+
/** The layer's outermost `<div>` tag. Useful for bindings. */
|
|
6
|
+
export let element: HTMLDivElement | undefined = undefined;
|
|
7
|
+
|
|
8
|
+
/** The layer's z-index. */
|
|
9
|
+
export let zIndex = undefined;
|
|
10
|
+
|
|
11
|
+
/** Set this to `false` to set `pointer-events: none;` on the entire layer. */
|
|
12
|
+
export let pointerEvents: boolean | undefined = undefined;
|
|
13
|
+
|
|
14
|
+
/** A string passed to the `aria-role` on the `<div>` tag. This is `undefined` by default but will be set by default to `'figure'` if `label`, `labelledby` or `describedby` is set. That default will be overridden by whatever is passed in. */
|
|
15
|
+
export let role: string | undefined = undefined;
|
|
16
|
+
|
|
17
|
+
/** A string passed to the `aria-label` property on the `<div>` tag. */
|
|
18
|
+
export let label: string | undefined = undefined;
|
|
19
|
+
|
|
20
|
+
/** A string passed to the `aria-labelledby property` on the `<div>` tag. */
|
|
21
|
+
export let labelledBy: string | undefined = undefined;
|
|
22
|
+
|
|
23
|
+
/** A string passed to the `aria-describedby` property on the `<div>` tag. */
|
|
24
|
+
export let describedBy: string | undefined = undefined;
|
|
25
|
+
|
|
26
|
+
const { padding } = chartContext();
|
|
27
|
+
|
|
28
|
+
$: roleVal = role || (label || labelledBy || describedBy ? 'figure' : undefined);
|
|
19
29
|
</script>
|
|
20
30
|
|
|
21
31
|
<div
|
|
@@ -1,41 +1,56 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
export let
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
export let
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cls } from '@layerstack/tailwind';
|
|
3
|
+
|
|
4
|
+
import { chartContext } from '../ChartContext.svelte';
|
|
5
|
+
import { transformContext } from '../TransformContext.svelte';
|
|
6
|
+
|
|
7
|
+
/** The layer's `<svg>` tag. Useful for bindings. */
|
|
8
|
+
export let element: SVGElement | undefined = undefined;
|
|
9
|
+
|
|
10
|
+
/** The layer's `<g>` tag. Useful for bindings. */
|
|
11
|
+
export let innerElement: SVGGElement | undefined = undefined;
|
|
12
|
+
|
|
13
|
+
/** The layer's z-index. */
|
|
14
|
+
export let zIndex = undefined;
|
|
15
|
+
|
|
16
|
+
/** Set this to `false` to set `pointer-events: none;` on the entire layer. */
|
|
17
|
+
export let pointerEvents: boolean | undefined = undefined;
|
|
18
|
+
|
|
19
|
+
/** A string passed to the `viewBox` property on the `<svg>` tag. */
|
|
20
|
+
export let viewBox: string | undefined = undefined;
|
|
21
|
+
|
|
22
|
+
/** A string passed to the `aria-label` property on the `<svg>` tag. */
|
|
23
|
+
export let label: string | undefined = undefined;
|
|
24
|
+
|
|
25
|
+
/** A string passed to the `aria-labelledby property` on the `<svg>` tag. */
|
|
26
|
+
export let labelledBy: string | undefined = undefined;
|
|
27
|
+
|
|
28
|
+
/** A string passed to the `aria-describedby` property on the `<svg>` tag. */
|
|
29
|
+
export let describedBy: string | undefined = undefined;
|
|
30
|
+
|
|
31
|
+
/** Shorthand to set the contents of `<title></title>` for accessibility. You can also set arbitrary HTML via the "title" slot but this is a convenient shorthand. If you use the "title" slot, this prop is ignored. */
|
|
32
|
+
export let title: string | undefined = undefined;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Translate children to center, useful for radial layouts
|
|
36
|
+
*/
|
|
37
|
+
export let center: boolean | 'x' | 'y' = false;
|
|
38
|
+
|
|
39
|
+
const { containerWidth, containerHeight, width, height, padding } = chartContext();
|
|
40
|
+
|
|
41
|
+
const { mode, scale, translate } = transformContext();
|
|
42
|
+
|
|
43
|
+
$: transform = center
|
|
29
44
|
? `translate(${center === 'x' || center === true ? $width / 2 : 0}, ${center === 'y' || center === true ? $height / 2 : 0})`
|
|
30
45
|
: '';
|
|
31
|
-
$: if (mode === 'canvas') {
|
|
46
|
+
$: if (mode === 'canvas') {
|
|
32
47
|
const center = { x: $width / 2, y: $height / 2 };
|
|
33
48
|
const newTranslate = {
|
|
34
|
-
|
|
35
|
-
|
|
49
|
+
x: $translate.x * $scale + center.x - center.x * $scale,
|
|
50
|
+
y: $translate.y * $scale + center.y - center.y * $scale,
|
|
36
51
|
};
|
|
37
52
|
transform = `translate(${newTranslate.x},${newTranslate.y}) scale(${$scale})`;
|
|
38
|
-
}
|
|
53
|
+
}
|
|
39
54
|
</script>
|
|
40
55
|
|
|
41
56
|
<!-- svelte-ignore a11y-click-events-have-key-events -->
|