layerchart 0.81.3 → 0.90.0
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 +49 -14
- package/dist/components/Area.svelte +35 -11
- package/dist/components/Bar.svelte +15 -10
- package/dist/components/Bars.svelte +3 -3
- package/dist/components/Brush.svelte +20 -21
- package/dist/components/Calendar.svelte +2 -2
- package/dist/components/Chart.svelte +17 -4
- package/dist/components/Chart.svelte.d.ts +21 -10
- package/dist/components/ChartClipPath.svelte +0 -1
- package/dist/components/ChartClipPath.svelte.d.ts +0 -2
- package/dist/components/ChartContext.svelte +4 -11
- package/dist/components/ChartContext.svelte.d.ts +1 -1
- package/dist/components/Circle.svelte +35 -11
- package/dist/components/ClipPath.svelte +1 -1
- package/dist/components/ClipPath.svelte.d.ts +0 -5
- package/dist/components/ForceSimulation.svelte +8 -12
- package/dist/components/ForceSimulation.svelte.d.ts +6 -8
- package/dist/components/Frame.svelte +4 -7
- package/dist/components/Frame.svelte.d.ts +1 -5
- package/dist/components/GeoCircle.svelte +7 -1
- package/dist/components/GeoCircle.svelte.d.ts +6 -7
- package/dist/components/GeoPath.svelte +68 -39
- package/dist/components/GeoPath.svelte.d.ts +6 -12
- package/dist/components/GeoPoint.svelte +3 -24
- package/dist/components/GeoPoint.svelte.d.ts +4 -5
- package/dist/components/Graticule.svelte.d.ts +12 -6
- package/dist/components/Group.svelte +26 -6
- package/dist/components/Highlight.svelte +22 -12
- package/dist/components/Hull.svelte +20 -15
- package/dist/components/Hull.svelte.d.ts +7 -9
- package/dist/components/Legend.svelte +7 -7
- package/dist/components/Legend.svelte.d.ts +3 -3
- package/dist/components/Line.svelte +35 -10
- package/dist/components/Link.svelte +16 -9
- package/dist/components/Points.svelte +24 -57
- package/dist/components/Points.svelte.d.ts +0 -1
- package/dist/components/Rect.svelte +46 -15
- package/dist/components/Sankey.svelte +3 -4
- package/dist/components/Sankey.svelte.d.ts +1 -2
- package/dist/components/Spline.svelte +47 -11
- package/dist/components/Text.svelte +12 -6
- package/dist/components/TransformContext.svelte +8 -10
- package/dist/components/TransformContext.svelte.d.ts +9 -9
- package/dist/components/Voronoi.svelte +62 -40
- package/dist/components/Voronoi.svelte.d.ts +14 -13
- package/dist/components/charts/AreaChart.svelte +23 -15
- package/dist/components/charts/BarChart.svelte +24 -11
- package/dist/components/charts/LineChart.svelte +23 -15
- package/dist/components/charts/PieChart.svelte +22 -15
- package/dist/components/charts/PieChart.svelte.d.ts +29 -7
- package/dist/components/charts/ScatterChart.svelte +13 -7
- package/dist/components/index.d.ts +0 -1
- package/dist/components/index.js +0 -1
- package/dist/components/layout/Canvas.svelte +148 -7
- package/dist/components/layout/Canvas.svelte.d.ts +15 -2
- package/dist/components/tooltip/TooltipContext.svelte +25 -20
- package/dist/components/tooltip/TooltipContext.svelte.d.ts +6 -2
- package/dist/utils/canvas.js +39 -33
- package/dist/utils/color.d.ts +15 -0
- package/dist/utils/color.js +15 -0
- package/package.json +1 -1
- package/dist/components/Brush.svelte.d.ts +0 -65
- package/dist/components/HitCanvas.svelte +0 -118
- package/dist/components/HitCanvas.svelte.d.ts +0 -32
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
import type { spring as springStore, tweened as tweenedStore } from 'svelte/motion';
|
|
4
4
|
import { cls } from '@layerstack/tailwind';
|
|
5
5
|
import { objectId } from '@layerstack/utils/object';
|
|
6
|
+
import { merge } from 'lodash-es';
|
|
6
7
|
|
|
7
8
|
import { motionStore } from '../stores/motionStore.js';
|
|
8
9
|
import { getCanvasContext } from './layout/Canvas.svelte';
|
|
9
10
|
import { circlePath } from '../utils/path.js';
|
|
10
|
-
import { renderPathData } from '../utils/canvas.js';
|
|
11
|
+
import { renderPathData, type ComputedStylesOptions } from '../utils/canvas.js';
|
|
11
12
|
|
|
12
13
|
export let cx: number = 0;
|
|
13
14
|
export let initialCx = cx;
|
|
@@ -29,6 +30,11 @@
|
|
|
29
30
|
let className: string | undefined = undefined;
|
|
30
31
|
export { className as class };
|
|
31
32
|
|
|
33
|
+
export let onclick: ((e: MouseEvent) => void) | undefined = undefined;
|
|
34
|
+
export let onpointerenter: ((e: PointerEvent) => void) | undefined = undefined;
|
|
35
|
+
export let onpointermove: ((e: PointerEvent) => void) | undefined = undefined;
|
|
36
|
+
export let onpointerleave: ((e: PointerEvent) => void) | undefined = undefined;
|
|
37
|
+
|
|
32
38
|
let tweened_cx = motionStore(initialCx, { spring, tweened });
|
|
33
39
|
let tweened_cy = motionStore(initialCy, { spring, tweened });
|
|
34
40
|
let tweened_r = motionStore(initialR, { spring, tweened });
|
|
@@ -42,12 +48,21 @@
|
|
|
42
48
|
const canvasContext = getCanvasContext();
|
|
43
49
|
const renderContext = canvasContext ? 'canvas' : 'svg';
|
|
44
50
|
|
|
45
|
-
function render(
|
|
51
|
+
function render(
|
|
52
|
+
ctx: CanvasRenderingContext2D,
|
|
53
|
+
styleOverrides: ComputedStylesOptions | undefined
|
|
54
|
+
) {
|
|
46
55
|
const pathData = circlePath({ cx: $tweened_cx, cy: $tweened_cy, r: $tweened_r });
|
|
47
|
-
renderPathData(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
56
|
+
renderPathData(
|
|
57
|
+
ctx,
|
|
58
|
+
pathData,
|
|
59
|
+
styleOverrides
|
|
60
|
+
? merge({ styles: { strokeWidth } }, styleOverrides)
|
|
61
|
+
: {
|
|
62
|
+
styles: { fill, fillOpacity, stroke, strokeWidth },
|
|
63
|
+
classes: className,
|
|
64
|
+
}
|
|
65
|
+
);
|
|
51
66
|
}
|
|
52
67
|
|
|
53
68
|
// TODO: Use objectId to work around Svelte 4 reactivity issue (even when memoizing gradients)
|
|
@@ -69,7 +84,16 @@
|
|
|
69
84
|
|
|
70
85
|
let canvasUnregister: ReturnType<typeof canvasContext.register>;
|
|
71
86
|
$: if (renderContext === 'canvas') {
|
|
72
|
-
canvasUnregister = canvasContext.register({
|
|
87
|
+
canvasUnregister = canvasContext.register({
|
|
88
|
+
name: 'Circle',
|
|
89
|
+
render,
|
|
90
|
+
events: {
|
|
91
|
+
click: onclick,
|
|
92
|
+
pointerenter: onpointerenter,
|
|
93
|
+
pointermove: onpointermove,
|
|
94
|
+
pointerleave: onpointerleave,
|
|
95
|
+
},
|
|
96
|
+
});
|
|
73
97
|
}
|
|
74
98
|
|
|
75
99
|
onDestroy(() => {
|
|
@@ -91,9 +115,9 @@
|
|
|
91
115
|
stroke-width={strokeWidth}
|
|
92
116
|
class={cls(fill == null && 'fill-surface-content', className)}
|
|
93
117
|
{...$$restProps}
|
|
94
|
-
on:click
|
|
95
|
-
on:
|
|
96
|
-
on:
|
|
97
|
-
on:pointerleave
|
|
118
|
+
on:click={onclick}
|
|
119
|
+
on:pointerenter={onpointerenter}
|
|
120
|
+
on:pointermove={onpointermove}
|
|
121
|
+
on:pointerleave={onpointerleave}
|
|
98
122
|
/>
|
|
99
123
|
{/if}
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
<slot />
|
|
27
27
|
{:else}
|
|
28
28
|
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
|
29
|
-
<g style:clip-path="url(#{id})"
|
|
29
|
+
<g style:clip-path="url(#{id})">
|
|
30
30
|
<slot {id} url="url(#{id})" {useId} />
|
|
31
31
|
</g>
|
|
32
32
|
{/if}
|
|
@@ -1,18 +1,9 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { createEventDispatcher } from 'svelte';
|
|
3
|
-
|
|
4
2
|
import { forceSimulation, type Force } from 'd3-force';
|
|
5
3
|
import { chartContext } from './ChartContext.svelte';
|
|
6
4
|
|
|
7
5
|
const { data } = chartContext();
|
|
8
6
|
|
|
9
|
-
const dispatch = createEventDispatcher<{
|
|
10
|
-
start: null;
|
|
11
|
-
tick: { alpha: number; alphaTarget: number };
|
|
12
|
-
change: null;
|
|
13
|
-
end: null;
|
|
14
|
-
}>();
|
|
15
|
-
|
|
16
7
|
// MARK: Public Props
|
|
17
8
|
|
|
18
9
|
type Forces = Record<string, Force<any, any>>;
|
|
@@ -35,6 +26,11 @@
|
|
|
35
26
|
/** Clone data since simulation mutates original */
|
|
36
27
|
export const cloneData: boolean = false;
|
|
37
28
|
|
|
29
|
+
export let onstart: (() => void) | undefined = undefined;
|
|
30
|
+
export let ontick: ((e: { alpha: number; alphaTarget: number }) => void) | undefined = undefined;
|
|
31
|
+
// export let onchange: | (() => void) | undefined = undefined;
|
|
32
|
+
export let onend: (() => void) | undefined = undefined;
|
|
33
|
+
|
|
38
34
|
// MARK: Private Props
|
|
39
35
|
|
|
40
36
|
let nodes: any[] = [];
|
|
@@ -248,14 +244,14 @@
|
|
|
248
244
|
}
|
|
249
245
|
|
|
250
246
|
paused = false;
|
|
251
|
-
|
|
247
|
+
onstart?.();
|
|
252
248
|
}
|
|
253
249
|
|
|
254
250
|
function onTick() {
|
|
255
251
|
pullNodesFromSimulation();
|
|
256
252
|
pullAlphaFromSimulation();
|
|
257
253
|
|
|
258
|
-
|
|
254
|
+
ontick?.({
|
|
259
255
|
alpha,
|
|
260
256
|
alphaTarget,
|
|
261
257
|
});
|
|
@@ -268,7 +264,7 @@
|
|
|
268
264
|
}
|
|
269
265
|
|
|
270
266
|
paused = true;
|
|
271
|
-
|
|
267
|
+
onend?.();
|
|
272
268
|
}
|
|
273
269
|
</script>
|
|
274
270
|
|
|
@@ -11,16 +11,14 @@ declare const __propDef: {
|
|
|
11
11
|
/** Stop simulation */ stopped?: boolean;
|
|
12
12
|
/** If true, will only update nodes after simulation has completed */ static?: boolean;
|
|
13
13
|
/** Clone data since simulation mutates original */ cloneData?: boolean;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
start: CustomEvent<null>;
|
|
17
|
-
tick: CustomEvent<{
|
|
14
|
+
onstart?: (() => void) | undefined;
|
|
15
|
+
ontick?: ((e: {
|
|
18
16
|
alpha: number;
|
|
19
17
|
alphaTarget: number;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
}) => void) | undefined;
|
|
19
|
+
onend?: (() => void) | undefined;
|
|
20
|
+
};
|
|
21
|
+
events: {
|
|
24
22
|
[evt: string]: CustomEvent<any>;
|
|
25
23
|
};
|
|
26
24
|
slots: {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { chartContext } from './ChartContext.svelte';
|
|
3
|
+
import Rect from './Rect.svelte';
|
|
3
4
|
|
|
4
5
|
const { width, height, padding } = chartContext();
|
|
5
6
|
|
|
@@ -7,18 +8,14 @@
|
|
|
7
8
|
export let full = false;
|
|
8
9
|
|
|
9
10
|
/** Access underlying `<rect>` element */
|
|
10
|
-
export let
|
|
11
|
+
export let element: SVGRectElement | undefined = undefined;
|
|
11
12
|
</script>
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
<rect
|
|
14
|
+
<Rect
|
|
15
15
|
x={full && $padding?.left ? -$padding.left : 0}
|
|
16
16
|
y={full && $padding?.top ? -$padding.top : 0}
|
|
17
17
|
width={$width + (full ? ($padding?.left ?? 0) + ($padding?.right ?? 0) : 0)}
|
|
18
18
|
height={$height + (full ? ($padding?.top ?? 0) + ($padding?.bottom ?? 0) : 0)}
|
|
19
|
-
|
|
20
|
-
on:pointerdown
|
|
21
|
-
on:dblclick
|
|
22
|
-
bind:this={rectEl}
|
|
19
|
+
bind:element
|
|
23
20
|
{...$$restProps}
|
|
24
21
|
/>
|
|
@@ -3,13 +3,9 @@ declare const __propDef: {
|
|
|
3
3
|
props: {
|
|
4
4
|
[x: string]: any;
|
|
5
5
|
full?: boolean | undefined;
|
|
6
|
-
|
|
6
|
+
element?: SVGRectElement | undefined;
|
|
7
7
|
};
|
|
8
8
|
events: {
|
|
9
|
-
click: MouseEvent;
|
|
10
|
-
pointerdown: PointerEvent;
|
|
11
|
-
dblclick: MouseEvent;
|
|
12
|
-
} & {
|
|
13
9
|
[evt: string]: CustomEvent<any>;
|
|
14
10
|
};
|
|
15
11
|
slots: {};
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { geoCircle } from 'd3-geo';
|
|
3
3
|
|
|
4
4
|
import GeoPath from './GeoPath.svelte';
|
|
5
|
+
import type { ComponentProps } from 'svelte';
|
|
5
6
|
|
|
6
7
|
/** Radius in degrees. Default: 90 */
|
|
7
8
|
export let radius = 90;
|
|
@@ -12,7 +13,12 @@
|
|
|
12
13
|
/** sets the circle precision to the specified angle in degrees */
|
|
13
14
|
export let precision = 6;
|
|
14
15
|
|
|
16
|
+
export let onclick: ComponentProps<typeof GeoPath>['onclick'] = undefined;
|
|
17
|
+
export let onpointerenter: ComponentProps<typeof GeoPath>['onpointerenter'] = undefined;
|
|
18
|
+
export let onpointermove: ComponentProps<typeof GeoPath>['onpointermove'] = undefined;
|
|
19
|
+
export let onpointerleave: ComponentProps<typeof GeoPath>['onpointerleave'] = undefined;
|
|
20
|
+
|
|
15
21
|
$: geojson = geoCircle().radius(radius).center(center).precision(precision)();
|
|
16
22
|
</script>
|
|
17
23
|
|
|
18
|
-
<GeoPath {geojson} {
|
|
24
|
+
<GeoPath {geojson} {onclick} {onpointerenter} {onpointermove} {onpointerleave} {...$$restProps} />
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import GeoPath from './GeoPath.svelte';
|
|
3
|
+
import type { ComponentProps } from 'svelte';
|
|
2
4
|
declare const __propDef: {
|
|
3
5
|
props: {
|
|
4
6
|
[x: string]: any;
|
|
5
7
|
radius?: number | undefined;
|
|
6
8
|
center?: [number, number] | undefined;
|
|
7
9
|
precision?: number | undefined;
|
|
10
|
+
onclick?: ComponentProps<typeof GeoPath>["onclick"] | undefined;
|
|
11
|
+
onpointerenter?: ComponentProps<typeof GeoPath>["onpointerenter"] | undefined;
|
|
12
|
+
onpointermove?: ComponentProps<typeof GeoPath>["onpointermove"] | undefined;
|
|
13
|
+
onpointerleave?: ComponentProps<typeof GeoPath>["onpointerleave"] | undefined;
|
|
8
14
|
};
|
|
9
15
|
events: {
|
|
10
|
-
pointermove: PointerEvent;
|
|
11
|
-
pointerleave: PointerEvent;
|
|
12
|
-
click: CustomEvent<{
|
|
13
|
-
geoPath: ReturnType<typeof import("..").geoCurvePath>;
|
|
14
|
-
event: MouseEvent;
|
|
15
|
-
}>;
|
|
16
|
-
} & {
|
|
17
16
|
[evt: string]: CustomEvent<any>;
|
|
18
17
|
};
|
|
19
18
|
slots: {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
2
|
+
import { onDestroy } from 'svelte';
|
|
3
3
|
import {
|
|
4
4
|
geoTransform as d3geoTransform,
|
|
5
5
|
type GeoIdentityTransform,
|
|
@@ -8,34 +8,36 @@
|
|
|
8
8
|
type GeoTransformPrototype,
|
|
9
9
|
} from 'd3-geo';
|
|
10
10
|
import { cls } from '@layerstack/tailwind';
|
|
11
|
+
import { merge } from 'lodash-es';
|
|
11
12
|
|
|
12
13
|
import { geoContext } from './GeoContext.svelte';
|
|
13
14
|
import type { TooltipContextValue } from './tooltip/TooltipContext.svelte';
|
|
14
15
|
import { curveLinearClosed, type CurveFactory, type CurveFactoryLineOnly } from 'd3-shape';
|
|
15
16
|
import { geoCurvePath } from '../utils/geo.js';
|
|
16
|
-
import { renderPathData } from '../utils/canvas.js';
|
|
17
|
+
import { renderPathData, type ComputedStylesOptions } from '../utils/canvas.js';
|
|
17
18
|
import { getCanvasContext } from './layout/Canvas.svelte';
|
|
18
19
|
import { objectId } from '@layerstack/utils/object';
|
|
19
20
|
|
|
20
21
|
export let geojson: GeoPermissibleObjects | null | undefined = undefined;
|
|
21
22
|
|
|
22
|
-
/** Render to canvas */
|
|
23
|
-
export let render:
|
|
24
|
-
| ((
|
|
25
|
-
ctx: CanvasRenderingContext2D,
|
|
26
|
-
options: { newGeoPath: () => ReturnType<typeof geoCurvePath> }
|
|
27
|
-
) => any)
|
|
28
|
-
| undefined = undefined;
|
|
29
|
-
|
|
30
23
|
export let fill: string | undefined = undefined;
|
|
31
24
|
export let stroke: string | undefined = undefined;
|
|
32
25
|
export let strokeWidth: number | undefined = undefined;
|
|
33
26
|
|
|
34
27
|
/**
|
|
35
|
-
* Tooltip context to setup
|
|
28
|
+
* Tooltip context to setup pointer events to show tooltip for related data
|
|
36
29
|
*/
|
|
37
30
|
export let tooltip: TooltipContextValue | undefined = undefined;
|
|
38
31
|
|
|
32
|
+
export let onclick:
|
|
33
|
+
| ((e: MouseEvent, geoPath: ReturnType<typeof geoCurvePath>) => void)
|
|
34
|
+
| undefined = undefined;
|
|
35
|
+
export let onpointerenter: ((e: PointerEvent) => void) | undefined = undefined;
|
|
36
|
+
export let onpointermove: ((e: PointerEvent) => void) | undefined = undefined;
|
|
37
|
+
export let onpointerleave: ((e: PointerEvent) => void) | undefined = undefined;
|
|
38
|
+
export let onpointerdown: ((e: PointerEvent) => void) | undefined = undefined;
|
|
39
|
+
export let ontouchmove: ((e: TouchEvent) => void) | undefined = undefined;
|
|
40
|
+
|
|
39
41
|
/**
|
|
40
42
|
* Curve of path drawn. Imported via d3-shape.
|
|
41
43
|
*
|
|
@@ -50,10 +52,6 @@
|
|
|
50
52
|
let className: string | undefined = undefined;
|
|
51
53
|
export { className as class };
|
|
52
54
|
|
|
53
|
-
const dispatch = createEventDispatcher<{
|
|
54
|
-
click: { geoPath: ReturnType<typeof geoCurvePath>; event: MouseEvent };
|
|
55
|
-
}>();
|
|
56
|
-
|
|
57
55
|
const geo = geoContext();
|
|
58
56
|
|
|
59
57
|
/**
|
|
@@ -76,17 +74,22 @@
|
|
|
76
74
|
const canvasContext = getCanvasContext();
|
|
77
75
|
const renderContext = canvasContext ? 'canvas' : 'svg';
|
|
78
76
|
|
|
79
|
-
function
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
77
|
+
function render(
|
|
78
|
+
ctx: CanvasRenderingContext2D,
|
|
79
|
+
styleOverrides: ComputedStylesOptions | undefined
|
|
80
|
+
) {
|
|
81
|
+
if (geojson) {
|
|
82
|
+
const pathData = geoPath(geojson);
|
|
83
|
+
renderPathData(
|
|
84
|
+
ctx,
|
|
85
|
+
pathData,
|
|
86
|
+
styleOverrides
|
|
87
|
+
? merge({ styles: { strokeWidth } }, styleOverrides)
|
|
88
|
+
: {
|
|
89
|
+
styles: { fill, stroke, strokeWidth },
|
|
90
|
+
classes: className,
|
|
91
|
+
}
|
|
92
|
+
);
|
|
90
93
|
}
|
|
91
94
|
}
|
|
92
95
|
|
|
@@ -100,9 +103,37 @@
|
|
|
100
103
|
canvasContext.invalidate();
|
|
101
104
|
}
|
|
102
105
|
|
|
106
|
+
// Hide `geoPath` and `tooltip` reactivity
|
|
107
|
+
function _onClick(e: MouseEvent) {
|
|
108
|
+
onclick?.(e, geoPath);
|
|
109
|
+
}
|
|
110
|
+
function _onPointerEnter(e: PointerEvent) {
|
|
111
|
+
onpointerenter?.(e);
|
|
112
|
+
tooltip?.show(e, geojson);
|
|
113
|
+
}
|
|
114
|
+
function _onPointerMove(e: PointerEvent) {
|
|
115
|
+
onpointermove?.(e);
|
|
116
|
+
tooltip?.show(e, geojson);
|
|
117
|
+
}
|
|
118
|
+
function _onPointerLeave(e: PointerEvent) {
|
|
119
|
+
onpointerleave?.(e);
|
|
120
|
+
tooltip?.hide();
|
|
121
|
+
}
|
|
122
|
+
|
|
103
123
|
let canvasUnregister: ReturnType<typeof canvasContext.register>;
|
|
104
124
|
$: if (renderContext === 'canvas') {
|
|
105
|
-
canvasUnregister = canvasContext.register({
|
|
125
|
+
canvasUnregister = canvasContext.register({
|
|
126
|
+
name: 'GeoPath',
|
|
127
|
+
render,
|
|
128
|
+
events: {
|
|
129
|
+
click: _onClick,
|
|
130
|
+
pointerenter: _onPointerEnter,
|
|
131
|
+
pointermove: _onPointerMove,
|
|
132
|
+
pointerleave: _onPointerLeave,
|
|
133
|
+
pointerdown: onpointerdown,
|
|
134
|
+
touchmove: ontouchmove,
|
|
135
|
+
},
|
|
136
|
+
});
|
|
106
137
|
}
|
|
107
138
|
|
|
108
139
|
onDestroy(() => {
|
|
@@ -113,23 +144,21 @@
|
|
|
113
144
|
</script>
|
|
114
145
|
|
|
115
146
|
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
|
116
|
-
{
|
|
117
|
-
|
|
147
|
+
<slot {geoPath}>
|
|
148
|
+
{#if renderContext === 'svg'}
|
|
118
149
|
<path
|
|
119
150
|
{...$$restProps}
|
|
120
151
|
d={geojson ? geoPath(geojson) : ''}
|
|
121
152
|
{fill}
|
|
122
153
|
{stroke}
|
|
123
154
|
stroke-width={strokeWidth}
|
|
124
|
-
on:
|
|
125
|
-
on:pointerenter
|
|
126
|
-
on:pointermove={
|
|
127
|
-
on:
|
|
128
|
-
on:
|
|
129
|
-
on:
|
|
130
|
-
on:pointerdown
|
|
131
|
-
on:click={(event) => dispatch('click', { geoPath, event })}
|
|
155
|
+
on:click={_onClick}
|
|
156
|
+
on:pointerenter={_onPointerEnter}
|
|
157
|
+
on:pointermove={_onPointerMove}
|
|
158
|
+
on:pointerleave={_onPointerLeave}
|
|
159
|
+
on:pointerdown={onpointerdown}
|
|
160
|
+
on:touchmove={ontouchmove}
|
|
132
161
|
class={cls(fill == null && 'fill-transparent', className)}
|
|
133
162
|
/>
|
|
134
|
-
|
|
135
|
-
|
|
163
|
+
{/if}
|
|
164
|
+
</slot>
|
|
@@ -7,27 +7,21 @@ declare const __propDef: {
|
|
|
7
7
|
props: {
|
|
8
8
|
[x: string]: any;
|
|
9
9
|
geojson?: GeoPermissibleObjects | null | undefined;
|
|
10
|
-
render?: ((ctx: CanvasRenderingContext2D, options: {
|
|
11
|
-
newGeoPath: () => ReturnType<typeof geoCurvePath>;
|
|
12
|
-
}) => any) | undefined | undefined;
|
|
13
10
|
fill?: string | undefined | undefined;
|
|
14
11
|
stroke?: string | undefined | undefined;
|
|
15
12
|
strokeWidth?: number | undefined | undefined;
|
|
16
13
|
tooltip?: TooltipContextValue | undefined;
|
|
14
|
+
onclick?: ((e: MouseEvent, geoPath: ReturnType<typeof geoCurvePath>) => void) | undefined | undefined;
|
|
15
|
+
onpointerenter?: ((e: PointerEvent) => void) | undefined | undefined;
|
|
16
|
+
onpointermove?: ((e: PointerEvent) => void) | undefined | undefined;
|
|
17
|
+
onpointerleave?: ((e: PointerEvent) => void) | undefined | undefined;
|
|
18
|
+
onpointerdown?: ((e: PointerEvent) => void) | undefined | undefined;
|
|
19
|
+
ontouchmove?: ((e: TouchEvent) => void) | undefined | undefined;
|
|
17
20
|
curve?: (CurveFactory | CurveFactoryLineOnly) | undefined;
|
|
18
21
|
class?: string | undefined | undefined;
|
|
19
22
|
geoTransform?: ((projection: GeoProjection | GeoIdentityTransform) => GeoTransformPrototype) | undefined | undefined;
|
|
20
23
|
};
|
|
21
24
|
events: {
|
|
22
|
-
pointerenter: PointerEvent;
|
|
23
|
-
pointermove: PointerEvent;
|
|
24
|
-
pointerleave: PointerEvent;
|
|
25
|
-
pointerdown: PointerEvent;
|
|
26
|
-
click: CustomEvent<{
|
|
27
|
-
geoPath: ReturnType<typeof geoCurvePath>;
|
|
28
|
-
event: MouseEvent;
|
|
29
|
-
}>;
|
|
30
|
-
} & {
|
|
31
25
|
[evt: string]: CustomEvent<any>;
|
|
32
26
|
};
|
|
33
27
|
slots: {
|
|
@@ -11,39 +11,18 @@
|
|
|
11
11
|
/** Longitude */
|
|
12
12
|
export let long: number;
|
|
13
13
|
|
|
14
|
-
/** Render to canvas */
|
|
15
|
-
export let render: (
|
|
16
|
-
ctx: CanvasRenderingContext2D,
|
|
17
|
-
coords: { x: number; y: number }
|
|
18
|
-
) => any = () => {};
|
|
19
|
-
|
|
20
14
|
const geo = geoContext();
|
|
21
15
|
|
|
22
16
|
$: [x, y] = $geo([long, lat]) ?? [0, 0];
|
|
23
17
|
|
|
24
18
|
const canvasContext = getCanvasContext();
|
|
25
19
|
const renderContext = canvasContext ? 'canvas' : 'svg';
|
|
26
|
-
|
|
27
|
-
function _render(ctx: CanvasRenderingContext2D) {
|
|
28
|
-
render(ctx, { x, y });
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
let canvasUnregister: ReturnType<typeof canvasContext.register>;
|
|
32
|
-
$: if (renderContext === 'canvas') {
|
|
33
|
-
canvasUnregister = canvasContext.register({ name: 'GeoPoint', render: _render });
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
onDestroy(() => {
|
|
37
|
-
if (renderContext === 'canvas') {
|
|
38
|
-
canvasUnregister();
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
20
|
</script>
|
|
42
21
|
|
|
43
22
|
{#if renderContext === 'svg'}
|
|
44
23
|
{#if $$slots.default}
|
|
45
24
|
<Group {x} {y} {...$$restProps}>
|
|
46
|
-
<slot />
|
|
25
|
+
<slot {x} {y} />
|
|
47
26
|
</Group>
|
|
48
27
|
{:else}
|
|
49
28
|
<Circle cx={x} cy={y} {...$$restProps} />
|
|
@@ -52,9 +31,9 @@
|
|
|
52
31
|
|
|
53
32
|
{#if renderContext === 'canvas'}
|
|
54
33
|
{#if $$slots.default}
|
|
55
|
-
<!-- TODO: Handle Canvas translation. Conslidate with svg use case above
|
|
34
|
+
<!-- TODO: Handle Canvas translation. Conslidate with svg use case above -->
|
|
56
35
|
<!-- <Group {x} {y} {...$$restProps}> -->
|
|
57
|
-
<slot />
|
|
36
|
+
<slot {x} {y} />
|
|
58
37
|
<!-- </Group> -->
|
|
59
38
|
{:else}
|
|
60
39
|
<Circle cx={x} cy={y} {...$$restProps} />
|
|
@@ -4,16 +4,15 @@ declare const __propDef: {
|
|
|
4
4
|
[x: string]: any;
|
|
5
5
|
lat: number;
|
|
6
6
|
long: number;
|
|
7
|
-
render?: ((ctx: CanvasRenderingContext2D, coords: {
|
|
8
|
-
x: number;
|
|
9
|
-
y: number;
|
|
10
|
-
}) => any) | undefined;
|
|
11
7
|
};
|
|
12
8
|
events: {
|
|
13
9
|
[evt: string]: CustomEvent<any>;
|
|
14
10
|
};
|
|
15
11
|
slots: {
|
|
16
|
-
default: {
|
|
12
|
+
default: {
|
|
13
|
+
x: any;
|
|
14
|
+
y: any;
|
|
15
|
+
};
|
|
17
16
|
};
|
|
18
17
|
};
|
|
19
18
|
export type GeoPointProps = typeof __propDef.props;
|
|
@@ -5,13 +5,16 @@ declare const __propDef: {
|
|
|
5
5
|
lines?: boolean | Partial<{
|
|
6
6
|
[x: string]: any;
|
|
7
7
|
geojson?: import("d3-geo").GeoPermissibleObjects | null | undefined;
|
|
8
|
-
render?: ((ctx: CanvasRenderingContext2D, options: {
|
|
9
|
-
newGeoPath: () => ReturnType<typeof import("..").geoCurvePath>;
|
|
10
|
-
}) => any) | undefined | undefined;
|
|
11
8
|
fill?: string | undefined | undefined;
|
|
12
9
|
stroke?: string | undefined | undefined;
|
|
13
10
|
strokeWidth?: number | undefined | undefined;
|
|
14
11
|
tooltip?: import("./tooltip/TooltipContext.svelte").TooltipContextValue | undefined;
|
|
12
|
+
onclick?: ((e: MouseEvent, geoPath: ReturnType<typeof import("..").geoCurvePath>) => void) | undefined | undefined;
|
|
13
|
+
onpointerenter?: ((e: PointerEvent) => void) | undefined | undefined;
|
|
14
|
+
onpointermove?: ((e: PointerEvent) => void) | undefined | undefined;
|
|
15
|
+
onpointerleave?: ((e: PointerEvent) => void) | undefined | undefined;
|
|
16
|
+
onpointerdown?: ((e: PointerEvent) => void) | undefined | undefined;
|
|
17
|
+
ontouchmove?: ((e: TouchEvent) => void) | undefined | undefined;
|
|
15
18
|
curve?: (import("d3-shape").CurveFactory | import("d3-shape").CurveFactoryLineOnly) | undefined;
|
|
16
19
|
class?: string | undefined | undefined;
|
|
17
20
|
geoTransform?: ((projection: import("d3-geo").GeoProjection | import("d3-geo").GeoIdentityTransform) => import("d3-geo").GeoTransformPrototype) | undefined | undefined;
|
|
@@ -19,13 +22,16 @@ declare const __propDef: {
|
|
|
19
22
|
outline?: boolean | Partial<{
|
|
20
23
|
[x: string]: any;
|
|
21
24
|
geojson?: import("d3-geo").GeoPermissibleObjects | null | undefined;
|
|
22
|
-
render?: ((ctx: CanvasRenderingContext2D, options: {
|
|
23
|
-
newGeoPath: () => ReturnType<typeof import("..").geoCurvePath>;
|
|
24
|
-
}) => any) | undefined | undefined;
|
|
25
25
|
fill?: string | undefined | undefined;
|
|
26
26
|
stroke?: string | undefined | undefined;
|
|
27
27
|
strokeWidth?: number | undefined | undefined;
|
|
28
28
|
tooltip?: import("./tooltip/TooltipContext.svelte").TooltipContextValue | undefined;
|
|
29
|
+
onclick?: ((e: MouseEvent, geoPath: ReturnType<typeof import("..").geoCurvePath>) => void) | undefined | undefined;
|
|
30
|
+
onpointerenter?: ((e: PointerEvent) => void) | undefined | undefined;
|
|
31
|
+
onpointermove?: ((e: PointerEvent) => void) | undefined | undefined;
|
|
32
|
+
onpointerleave?: ((e: PointerEvent) => void) | undefined | undefined;
|
|
33
|
+
onpointerdown?: ((e: PointerEvent) => void) | undefined | undefined;
|
|
34
|
+
ontouchmove?: ((e: TouchEvent) => void) | undefined | undefined;
|
|
29
35
|
curve?: (import("d3-shape").CurveFactory | import("d3-shape").CurveFactoryLineOnly) | undefined;
|
|
30
36
|
class?: string | undefined | undefined;
|
|
31
37
|
geoTransform?: ((projection: import("d3-geo").GeoProjection | import("d3-geo").GeoIdentityTransform) => import("d3-geo").GeoTransformPrototype) | undefined | undefined;
|
|
@@ -30,6 +30,13 @@
|
|
|
30
30
|
*/
|
|
31
31
|
export let preventTouchMove = false;
|
|
32
32
|
|
|
33
|
+
export let onclick: ((e: MouseEvent) => void) | undefined = undefined;
|
|
34
|
+
export let ondblclick: ((e: MouseEvent) => void) | undefined = undefined;
|
|
35
|
+
export let onpointerenter: ((e: PointerEvent) => void) | undefined = undefined;
|
|
36
|
+
export let onpointermove: ((e: PointerEvent) => void) | undefined = undefined;
|
|
37
|
+
export let onpointerleave: ((e: PointerEvent) => void) | undefined = undefined;
|
|
38
|
+
export let onpointerdown: ((e: PointerEvent) => void) | undefined = undefined;
|
|
39
|
+
|
|
33
40
|
export let spring: boolean | Parameters<typeof springStore>[1] = undefined;
|
|
34
41
|
export let tweened: boolean | Parameters<typeof tweenedStore>[1] = undefined;
|
|
35
42
|
|
|
@@ -60,7 +67,19 @@
|
|
|
60
67
|
|
|
61
68
|
let canvasUnregister: ReturnType<typeof canvasContext.register>;
|
|
62
69
|
$: if (renderContext === 'canvas') {
|
|
63
|
-
canvasUnregister = canvasContext.register({
|
|
70
|
+
canvasUnregister = canvasContext.register({
|
|
71
|
+
name: 'Group',
|
|
72
|
+
render,
|
|
73
|
+
retainState: true,
|
|
74
|
+
events: {
|
|
75
|
+
click: onclick,
|
|
76
|
+
dblclick: ondblclick,
|
|
77
|
+
pointerenter: onpointerenter,
|
|
78
|
+
pointermove: onpointermove,
|
|
79
|
+
pointerleave: onpointerleave,
|
|
80
|
+
pointerdown: onpointerdown,
|
|
81
|
+
},
|
|
82
|
+
});
|
|
64
83
|
}
|
|
65
84
|
|
|
66
85
|
onDestroy(() => {
|
|
@@ -77,11 +96,12 @@
|
|
|
77
96
|
<g
|
|
78
97
|
{transform}
|
|
79
98
|
{...$$restProps}
|
|
80
|
-
on:click
|
|
81
|
-
on:
|
|
82
|
-
on:pointerenter
|
|
83
|
-
on:pointermove
|
|
84
|
-
on:pointerleave
|
|
99
|
+
on:click={onclick}
|
|
100
|
+
on:dblclick={ondblclick}
|
|
101
|
+
on:pointerenter={onpointerenter}
|
|
102
|
+
on:pointermove={onpointermove}
|
|
103
|
+
on:pointerleave={onpointerleave}
|
|
104
|
+
on:pointerdown={onpointerdown}
|
|
85
105
|
on:touchmove={(e) => {
|
|
86
106
|
if (preventTouchMove) {
|
|
87
107
|
// Prevent touch to not interfer with pointer
|