layerchart 2.0.0-next.1 → 2.0.0-next.11
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/actions/movable.d.ts +28 -0
- package/dist/actions/movable.js +91 -0
- package/dist/components/AnnotationLine.svelte +143 -0
- package/dist/components/AnnotationLine.svelte.d.ts +30 -0
- package/dist/components/AnnotationPoint.svelte +119 -0
- package/dist/components/AnnotationPoint.svelte.d.ts +34 -0
- package/dist/components/AnnotationRange.svelte +147 -0
- package/dist/components/AnnotationRange.svelte.d.ts +40 -0
- package/dist/components/Arc.svelte +344 -151
- package/dist/components/Arc.svelte.d.ts +138 -0
- package/dist/components/Area.svelte +165 -149
- package/dist/components/Area.svelte.d.ts +45 -0
- package/dist/components/Axis.svelte +320 -179
- package/dist/components/Axis.svelte.d.ts +127 -0
- package/dist/components/Bar.svelte +166 -107
- package/dist/components/Bar.svelte.d.ts +51 -0
- package/dist/components/Bars.svelte +56 -67
- package/dist/components/Bars.svelte.d.ts +27 -0
- package/dist/components/Blur.svelte +42 -12
- package/dist/components/Blur.svelte.d.ts +23 -21
- package/dist/components/Bounds.svelte +49 -19
- package/dist/components/Bounds.svelte.d.ts +24 -50
- package/dist/components/BrushContext.svelte +296 -168
- package/dist/components/BrushContext.svelte.d.ts +97 -65
- package/dist/components/Calendar.svelte +116 -59
- package/dist/components/Calendar.svelte.d.ts +50 -31
- package/dist/components/Chart.svelte +1289 -398
- package/dist/components/Chart.svelte.d.ts +535 -410
- package/dist/components/ChartClipPath.svelte +37 -15
- package/dist/components/ChartClipPath.svelte.d.ts +21 -19
- package/dist/components/Circle.svelte +124 -85
- package/dist/components/Circle.svelte.d.ts +52 -0
- package/dist/components/CircleClipPath.svelte +76 -16
- package/dist/components/CircleClipPath.svelte.d.ts +46 -0
- package/dist/components/ClipPath.svelte +71 -21
- package/dist/components/ClipPath.svelte.d.ts +40 -27
- package/dist/components/ColorRamp.svelte +75 -9
- package/dist/components/ColorRamp.svelte.d.ts +37 -19
- package/dist/components/ComputedStyles.svelte +17 -5
- package/dist/components/ComputedStyles.svelte.d.ts +11 -19
- package/dist/components/Connector.svelte +149 -0
- package/dist/components/Connector.svelte.d.ts +51 -0
- package/dist/components/Dagre.svelte +211 -122
- package/dist/components/Dagre.svelte.d.ts +119 -56
- package/dist/components/ForceSimulation.svelte +215 -90
- package/dist/components/ForceSimulation.svelte.d.ts +82 -35
- package/dist/components/Frame.svelte +33 -13
- package/dist/components/Frame.svelte.d.ts +13 -17
- package/dist/components/GeoCircle.svelte +29 -16
- package/dist/components/GeoCircle.svelte.d.ts +22 -24
- package/dist/components/GeoContext.svelte +113 -72
- package/dist/components/GeoContext.svelte.d.ts +49 -41
- package/dist/components/GeoEdgeFade.svelte +49 -13
- package/dist/components/GeoEdgeFade.svelte.d.ts +17 -19
- package/dist/components/GeoPath.svelte +157 -127
- package/dist/components/GeoPath.svelte.d.ts +48 -36
- package/dist/components/GeoPoint.svelte +52 -20
- package/dist/components/GeoPoint.svelte.d.ts +25 -22
- package/dist/components/GeoSpline.svelte +75 -26
- package/dist/components/GeoSpline.svelte.d.ts +29 -20
- package/dist/components/GeoTile.svelte +100 -49
- package/dist/components/GeoTile.svelte.d.ts +38 -23
- package/dist/components/GeoVisible.svelte +17 -9
- package/dist/components/GeoVisible.svelte.d.ts +10 -18
- package/dist/components/Graticule.svelte +30 -14
- package/dist/components/Graticule.svelte.d.ts +11 -52
- package/dist/components/Grid.svelte +230 -117
- package/dist/components/Grid.svelte.d.ts +71 -0
- package/dist/components/Group.svelte +173 -106
- package/dist/components/Group.svelte.d.ts +81 -0
- package/dist/components/Highlight.svelte +410 -308
- package/dist/components/Highlight.svelte.d.ts +107 -0
- package/dist/components/Hull.svelte +97 -46
- package/dist/components/Hull.svelte.d.ts +40 -30
- package/dist/components/Labels.svelte +127 -47
- package/dist/components/Labels.svelte.d.ts +70 -27
- package/dist/components/Legend.svelte +374 -190
- package/dist/components/Legend.svelte.d.ts +95 -44
- package/dist/components/Line.svelte +163 -125
- package/dist/components/Line.svelte.d.ts +75 -0
- package/dist/components/LinearGradient.svelte +153 -78
- package/dist/components/LinearGradient.svelte.d.ts +66 -31
- package/dist/components/Link.svelte +160 -104
- package/dist/components/Link.svelte.d.ts +54 -0
- package/dist/components/Marker.svelte +100 -39
- package/dist/components/Marker.svelte.d.ts +59 -27
- package/dist/components/MarkerWrapper.svelte +35 -0
- package/dist/components/MarkerWrapper.svelte.d.ts +18 -0
- package/dist/components/MonthPath.svelte +65 -20
- package/dist/components/MonthPath.svelte.d.ts +23 -17
- package/dist/components/MotionPath.svelte +80 -24
- package/dist/components/MotionPath.svelte.d.ts +46 -27
- package/dist/components/Pack.svelte +53 -17
- package/dist/components/Pack.svelte.d.ts +42 -21
- package/dist/components/Partition.svelte +64 -22
- package/dist/components/Partition.svelte.d.ts +49 -26
- package/dist/components/Pattern.svelte +297 -11
- package/dist/components/Pattern.svelte.d.ts +103 -19
- package/dist/components/Pie.svelte +122 -76
- package/dist/components/Pie.svelte.d.ts +65 -51
- package/dist/components/Point.svelte +20 -9
- package/dist/components/Point.svelte.d.ts +16 -20
- package/dist/components/Points.svelte +148 -137
- package/dist/components/Points.svelte.d.ts +45 -34
- package/dist/components/RadialGradient.svelte +148 -77
- package/dist/components/RadialGradient.svelte.d.ts +69 -31
- package/dist/components/Rect.svelte +121 -102
- package/dist/components/Rect.svelte.d.ts +36 -0
- package/dist/components/RectClipPath.svelte +82 -18
- package/dist/components/RectClipPath.svelte.d.ts +55 -0
- package/dist/components/Rule.svelte +107 -63
- package/dist/components/Rule.svelte.d.ts +40 -19
- package/dist/components/Sankey.svelte +132 -55
- package/dist/components/Sankey.svelte.d.ts +61 -31
- package/dist/components/Spline.svelte +281 -218
- package/dist/components/Spline.svelte.d.ts +95 -0
- package/dist/components/Text.svelte +463 -197
- package/dist/components/Text.svelte.d.ts +136 -0
- package/dist/components/Threshold.svelte +48 -16
- package/dist/components/Threshold.svelte.d.ts +29 -31
- package/dist/components/TileImage.svelte +103 -30
- package/dist/components/TileImage.svelte.d.ts +48 -23
- package/dist/components/TransformContext.svelte +365 -171
- package/dist/components/TransformControls.svelte +50 -26
- package/dist/components/TransformControls.svelte.d.ts +27 -19
- package/dist/components/Tree.svelte +74 -33
- package/dist/components/Tree.svelte.d.ts +42 -30
- package/dist/components/Treemap.svelte +119 -42
- package/dist/components/Treemap.svelte.d.ts +75 -27
- package/dist/components/Voronoi.svelte +153 -103
- package/dist/components/Voronoi.svelte.d.ts +42 -41
- package/dist/components/charts/ArcChart.svelte +464 -0
- package/dist/components/charts/ArcChart.svelte.d.ts +90 -0
- package/dist/components/charts/AreaChart.svelte +444 -393
- package/dist/components/charts/AreaChart.svelte.d.ts +61 -0
- package/dist/components/charts/BarChart.svelte +463 -389
- package/dist/components/charts/BarChart.svelte.d.ts +76 -0
- package/dist/components/charts/ChartAnnotations.svelte +37 -0
- package/dist/components/charts/ChartAnnotations.svelte.d.ts +10 -0
- package/dist/components/charts/DefaultTooltip.svelte +60 -0
- package/dist/components/charts/DefaultTooltip.svelte.d.ts +10 -0
- package/dist/components/charts/LineChart.svelte +366 -315
- package/dist/components/charts/LineChart.svelte.d.ts +53 -0
- package/dist/components/charts/PieChart.svelte +458 -316
- package/dist/components/charts/PieChart.svelte.d.ts +137 -353
- package/dist/components/charts/ScatterChart.svelte +332 -296
- package/dist/components/charts/ScatterChart.svelte.d.ts +39 -0
- package/dist/components/charts/index.d.ts +8 -0
- package/dist/components/charts/index.js +7 -0
- package/dist/components/charts/types.d.ts +253 -0
- package/dist/components/charts/utils.svelte.d.ts +30 -0
- package/dist/components/charts/utils.svelte.js +59 -0
- package/dist/components/index.d.ts +76 -4
- package/dist/components/index.js +76 -5
- package/dist/components/layout/Canvas.svelte +347 -171
- package/dist/components/layout/Canvas.svelte.d.ts +110 -55
- package/dist/components/layout/Html.svelte +82 -42
- package/dist/components/layout/Html.svelte.d.ts +39 -28
- package/dist/components/layout/Layer.svelte +39 -0
- package/dist/components/layout/Layer.svelte.d.ts +17 -0
- package/dist/components/layout/Svg.svelte +122 -70
- package/dist/components/layout/Svg.svelte.d.ts +53 -34
- package/dist/components/layout/WebGL.svelte +135 -0
- package/dist/components/layout/WebGL.svelte.d.ts +50 -0
- package/dist/components/tooltip/Tooltip.svelte +253 -78
- package/dist/components/tooltip/Tooltip.svelte.d.ts +149 -31
- package/dist/components/tooltip/TooltipContext.svelte +426 -271
- package/dist/components/tooltip/TooltipContext.svelte.d.ts +86 -55
- package/dist/components/tooltip/TooltipHeader.svelte +100 -11
- package/dist/components/tooltip/TooltipHeader.svelte.d.ts +43 -23
- package/dist/components/tooltip/TooltipItem.svelte +167 -27
- package/dist/components/tooltip/TooltipItem.svelte.d.ts +63 -31
- package/dist/components/tooltip/TooltipList.svelte +22 -3
- package/dist/components/tooltip/TooltipList.svelte.d.ts +6 -17
- package/dist/components/tooltip/TooltipSeparator.svelte +27 -1
- package/dist/components/tooltip/TooltipSeparator.svelte.d.ts +6 -15
- package/dist/components/tooltip/index.d.ts +6 -0
- package/dist/components/tooltip/index.js +6 -0
- package/dist/components/tooltip/tooltipMetaContext.d.ts +79 -0
- package/dist/components/tooltip/tooltipMetaContext.js +139 -0
- package/dist/components/types.d.ts +1 -0
- package/dist/components/types.js +1 -0
- package/dist/docs/Blockquote.svelte +3 -1
- package/dist/docs/Blockquote.svelte.d.ts +5 -16
- package/dist/docs/Code.svelte +20 -12
- package/dist/docs/Code.svelte.d.ts +12 -22
- package/dist/docs/ConnectorSweepMenuField.svelte +17 -0
- package/dist/docs/ConnectorSweepMenuField.svelte.d.ts +7 -0
- package/dist/docs/ConnectorTypeMenuField.svelte +17 -0
- package/dist/docs/ConnectorTypeMenuField.svelte.d.ts +7 -0
- package/dist/docs/CurveMenuField.svelte +14 -3
- package/dist/docs/CurveMenuField.svelte.d.ts +9 -18
- package/dist/docs/GeoDebug.svelte +47 -42
- package/dist/docs/GeoDebug.svelte.d.ts +4 -16
- package/dist/docs/Header1.svelte +4 -2
- package/dist/docs/Header1.svelte.d.ts +5 -18
- package/dist/docs/Json.svelte +11 -3
- package/dist/docs/Json.svelte.d.ts +9 -17
- package/dist/docs/Layout.svelte +10 -7
- package/dist/docs/Layout.svelte.d.ts +5 -15
- package/dist/docs/Link.svelte +7 -3
- package/dist/docs/Link.svelte.d.ts +5 -27
- package/dist/docs/PathDataMenuField.svelte +14 -10
- package/dist/docs/PathDataMenuField.svelte.d.ts +8 -18
- package/dist/docs/Preview.svelte +20 -7
- package/dist/docs/Preview.svelte.d.ts +12 -22
- package/dist/docs/TilesetField.svelte +20 -19
- package/dist/docs/TilesetField.svelte.d.ts +6 -19
- package/dist/docs/TransformDebug.svelte +5 -6
- package/dist/docs/TransformDebug.svelte.d.ts +18 -14
- package/dist/docs/ViewSourceButton.svelte +7 -4
- package/dist/docs/ViewSourceButton.svelte.d.ts +8 -18
- package/dist/types/d3-shape-extentions.d.ts +7 -0
- package/dist/utils/afterTick.d.ts +5 -0
- package/dist/utils/afterTick.js +8 -0
- package/dist/utils/arcText.svelte.d.ts +57 -0
- package/dist/utils/arcText.svelte.js +262 -0
- package/dist/utils/array.d.ts +9 -1
- package/dist/utils/array.js +13 -0
- package/dist/utils/attributes.d.ts +29 -0
- package/dist/utils/attributes.js +40 -0
- package/dist/utils/canvas.js +47 -10
- package/dist/utils/chart.d.ts +78 -0
- package/dist/utils/chart.js +512 -0
- package/dist/utils/color.d.ts +1 -0
- package/dist/utils/color.js +8 -0
- package/dist/utils/common.d.ts +3 -5
- package/dist/utils/common.js +3 -2
- package/dist/utils/connectorUtils.d.ts +21 -0
- package/dist/utils/connectorUtils.js +111 -0
- package/dist/utils/createId.d.ts +7 -0
- package/dist/utils/createId.js +9 -0
- package/dist/utils/debug.d.ts +1 -0
- package/dist/utils/debug.js +84 -0
- package/dist/utils/filterObject.d.ts +9 -0
- package/dist/utils/filterObject.js +12 -0
- package/dist/utils/graph/dagre.d.ts +34 -0
- package/dist/utils/graph/dagre.js +78 -0
- package/dist/utils/graph/dagre.test.d.ts +1 -0
- package/dist/utils/{graph.test.js → graph/dagre.test.js} +19 -33
- package/dist/utils/graph/sankey.d.ts +28 -0
- package/dist/utils/{graph.js → graph/sankey.js} +13 -41
- package/dist/utils/index.d.ts +3 -1
- package/dist/utils/index.js +3 -1
- package/dist/utils/key.svelte.d.ts +3 -0
- package/dist/utils/key.svelte.js +11 -0
- package/dist/utils/legendPayload.d.ts +7 -0
- package/dist/utils/legendPayload.js +8 -0
- package/dist/utils/motion.svelte.d.ts +140 -0
- package/dist/utils/motion.svelte.js +180 -0
- package/dist/utils/motion.test.d.ts +1 -0
- package/dist/utils/motion.test.js +213 -0
- package/dist/utils/{rect.d.ts → rect.svelte.d.ts} +7 -4
- package/dist/utils/rect.svelte.js +105 -0
- package/dist/utils/scales.svelte.d.ts +91 -0
- package/dist/utils/scales.svelte.js +201 -0
- package/dist/utils/stack.d.ts +2 -3
- package/dist/utils/stack.js +1 -1
- package/dist/utils/string.js +87 -0
- package/dist/utils/ticks.d.ts +9 -3
- package/dist/utils/ticks.js +122 -147
- package/dist/utils/ticks.test.d.ts +1 -0
- package/dist/utils/ticks.test.js +57 -0
- package/dist/utils/types.d.ts +81 -0
- package/package.json +28 -24
- package/dist/components/ChartContext.svelte +0 -295
- package/dist/components/ChartContext.svelte.d.ts +0 -139
- package/dist/components/TransformContext.svelte.d.ts +0 -158
- package/dist/stores/motionStore.d.ts +0 -30
- package/dist/stores/motionStore.js +0 -62
- package/dist/utils/graph.d.ts +0 -37
- package/dist/utils/rect.js +0 -107
- package/dist/utils/scales.d.ts +0 -66
- package/dist/utils/scales.js +0 -136
- /package/dist/{utils/graph.test.d.ts → components/charts/types.js} +0 -0
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import {
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { CommonStyleProps, Without } from '../utils/types.js';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
|
+
import type { PointerEventHandler, SVGAttributes } from 'svelte/elements';
|
|
5
|
+
import type { TooltipContextValue } from './tooltip/TooltipContext.svelte';
|
|
6
|
+
import { curveLinearClosed, type CurveFactory, type CurveFactoryLineOnly } from 'd3-shape';
|
|
3
7
|
import {
|
|
4
8
|
geoTransform as d3geoTransform,
|
|
5
9
|
type GeoIdentityTransform,
|
|
@@ -7,124 +11,149 @@
|
|
|
7
11
|
type GeoProjection,
|
|
8
12
|
type GeoTransformPrototype,
|
|
9
13
|
} from 'd3-geo';
|
|
14
|
+
import { renderPathData, type ComputedStylesOptions } from '../utils/canvas.js';
|
|
15
|
+
|
|
16
|
+
export type GeoPathPropsWithoutHTML = {
|
|
17
|
+
/**
|
|
18
|
+
* GeoJSON data to render
|
|
19
|
+
*/
|
|
20
|
+
geojson?: GeoPermissibleObjects | null;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Tooltip context to setup pointer events to show tooltip for related data
|
|
24
|
+
*/
|
|
25
|
+
tooltipContext?: TooltipContextValue | undefined;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Click event handler
|
|
29
|
+
*/
|
|
30
|
+
onclick?:
|
|
31
|
+
| ((e: MouseEvent, geoPath: ReturnType<typeof geoCurvePath> | undefined) => void)
|
|
32
|
+
| undefined;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Curve of path drawn. Imported via d3-shape.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* import { curveCatmullRom } from 'd3-shape';
|
|
39
|
+
* <GeoPath curve={curveCatmullRom} />
|
|
40
|
+
*
|
|
41
|
+
* @default curveLinearClosed
|
|
42
|
+
*/
|
|
43
|
+
curve?: CurveFactory | CurveFactoryLineOnly;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Apply geo transform to projection.
|
|
47
|
+
* Useful to draw straight lines with `geoMercator` projection.
|
|
48
|
+
*
|
|
49
|
+
* @see https://d3js.org/d3-geo/projection#geoTransform
|
|
50
|
+
* @see https://stackoverflow.com/a/56409480/191902
|
|
51
|
+
**/
|
|
52
|
+
geoTransform?: (projection: GeoProjection | GeoIdentityTransform) => GeoTransformPrototype;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* A reference to the underlying `<path>` element
|
|
56
|
+
* @bindable
|
|
57
|
+
*/
|
|
58
|
+
ref?: SVGPathElement;
|
|
59
|
+
|
|
60
|
+
children?: Snippet<[{ geoPath: ReturnType<typeof geoCurvePath> | undefined }]>;
|
|
61
|
+
} & CommonStyleProps;
|
|
62
|
+
|
|
63
|
+
export type GeoPathProps = GeoPathPropsWithoutHTML &
|
|
64
|
+
Without<SVGAttributes<SVGPathElement>, GeoPathPropsWithoutHTML>;
|
|
65
|
+
</script>
|
|
66
|
+
|
|
67
|
+
<script lang="ts">
|
|
10
68
|
import { cls } from '@layerstack/tailwind';
|
|
11
69
|
import { merge } from 'lodash-es';
|
|
12
70
|
|
|
13
71
|
import { getRenderContext } from './Chart.svelte';
|
|
14
|
-
import {
|
|
15
|
-
import { geoContext } from './GeoContext.svelte';
|
|
16
|
-
import type { TooltipContextValue } from './tooltip/TooltipContext.svelte';
|
|
17
|
-
import { curveLinearClosed, type CurveFactory, type CurveFactoryLineOnly } from 'd3-shape';
|
|
72
|
+
import { registerCanvasComponent } from './layout/Canvas.svelte';
|
|
18
73
|
import { geoCurvePath } from '../utils/geo.js';
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
*/
|
|
52
|
-
export let curve: CurveFactory | CurveFactoryLineOnly = curveLinearClosed;
|
|
53
|
-
|
|
54
|
-
let className: string | undefined = undefined;
|
|
55
|
-
export { className as class };
|
|
56
|
-
|
|
57
|
-
const geo = geoContext();
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Apply geo transform to projection. Useful to draw straight lines with `geoMercator` projection.
|
|
61
|
-
* See: https://d3js.org/d3-geo/projection#geoTransform and https://stackoverflow.com/a/56409480/191902
|
|
62
|
-
**/
|
|
63
|
-
export let geoTransform:
|
|
64
|
-
| ((projection: GeoProjection | GeoIdentityTransform) => GeoTransformPrototype)
|
|
65
|
-
| undefined = undefined;
|
|
66
|
-
|
|
67
|
-
$: _projection = geoTransform ? d3geoTransform(geoTransform($geo)) : $geo;
|
|
68
|
-
|
|
69
|
-
$: geoPath = geoCurvePath(_projection, curve);
|
|
70
|
-
$: {
|
|
71
|
-
// Recreate `geoPath()` if `geojson` data changes (fixes ghosting issue when rendering to canvas)
|
|
74
|
+
import { getGeoContext } from './GeoContext.svelte';
|
|
75
|
+
import { createKey } from '../utils/key.svelte.js';
|
|
76
|
+
import { layerClass } from '../utils/attributes.js';
|
|
77
|
+
|
|
78
|
+
let {
|
|
79
|
+
fill,
|
|
80
|
+
stroke,
|
|
81
|
+
strokeWidth,
|
|
82
|
+
opacity,
|
|
83
|
+
geoTransform,
|
|
84
|
+
geojson,
|
|
85
|
+
tooltipContext,
|
|
86
|
+
curve = curveLinearClosed,
|
|
87
|
+
onclick,
|
|
88
|
+
class: className,
|
|
89
|
+
ref: refProp = $bindable(),
|
|
90
|
+
children,
|
|
91
|
+
...restProps
|
|
92
|
+
}: GeoPathProps = $props();
|
|
93
|
+
|
|
94
|
+
let ref = $state<SVGPathElement>();
|
|
95
|
+
$effect.pre(() => {
|
|
96
|
+
refProp = ref;
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
const geo = getGeoContext();
|
|
100
|
+
|
|
101
|
+
const projection = $derived(
|
|
102
|
+
geoTransform && geo.projection ? d3geoTransform(geoTransform(geo.projection)) : geo.projection
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
const geoPath = $derived.by(() => {
|
|
72
106
|
geojson;
|
|
73
|
-
|
|
74
|
-
|
|
107
|
+
if (!projection) return;
|
|
108
|
+
return geoCurvePath(projection, curve);
|
|
109
|
+
});
|
|
75
110
|
|
|
76
|
-
const
|
|
77
|
-
const canvasContext = getCanvasContext();
|
|
111
|
+
const renderCtx = getRenderContext();
|
|
78
112
|
|
|
79
113
|
function render(
|
|
80
114
|
ctx: CanvasRenderingContext2D,
|
|
81
115
|
styleOverrides: ComputedStylesOptions | undefined
|
|
82
116
|
) {
|
|
83
|
-
if (geojson)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
117
|
+
if (!geojson) return;
|
|
118
|
+
const pathData = geoPath?.(geojson);
|
|
119
|
+
renderPathData(
|
|
120
|
+
ctx,
|
|
121
|
+
pathData,
|
|
122
|
+
styleOverrides
|
|
123
|
+
? merge({ styles: { strokeWidth } }, styleOverrides)
|
|
124
|
+
: {
|
|
125
|
+
styles: { fill, stroke, strokeWidth, opacity },
|
|
126
|
+
classes: className,
|
|
127
|
+
}
|
|
128
|
+
);
|
|
96
129
|
}
|
|
97
130
|
|
|
98
131
|
// TODO: Use objectId to work around Svelte 4 reactivity issue (even when memoizing gradients)
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
$: if (renderContext === 'canvas') {
|
|
103
|
-
// Redraw when geojson, projection, or class change
|
|
104
|
-
geojson && _projection && fillKey && strokeKey && strokeWidth && opacity && className;
|
|
105
|
-
canvasContext.invalidate();
|
|
106
|
-
}
|
|
132
|
+
const fillKey = createKey(() => fill);
|
|
133
|
+
const strokeKey = createKey(() => stroke);
|
|
107
134
|
|
|
108
135
|
// Hide `geoPath` and `tooltip` reactivity
|
|
109
136
|
function _onClick(e: MouseEvent) {
|
|
110
137
|
onclick?.(e, geoPath);
|
|
111
138
|
}
|
|
112
|
-
function _onPointerEnter(e: PointerEvent) {
|
|
113
|
-
onpointerenter?.(e);
|
|
114
|
-
tooltip?.show(e, geojson);
|
|
115
|
-
}
|
|
116
|
-
function _onPointerMove(e: PointerEvent) {
|
|
117
|
-
onpointermove?.(e);
|
|
118
|
-
tooltip?.show(e, geojson);
|
|
119
|
-
}
|
|
120
|
-
function _onPointerLeave(e: PointerEvent) {
|
|
121
|
-
onpointerleave?.(e);
|
|
122
|
-
tooltip?.hide();
|
|
123
|
-
}
|
|
124
139
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
140
|
+
const _onPointerEnter: PointerEventHandler<SVGPathElement> = (e) => {
|
|
141
|
+
restProps.onpointerenter?.(e);
|
|
142
|
+
tooltipContext?.show(e, geojson);
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
const _onPointerMove: PointerEventHandler<SVGPathElement> = (e) => {
|
|
146
|
+
restProps.onpointermove?.(e);
|
|
147
|
+
tooltipContext?.show(e, geojson);
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const _onPointerLeave: PointerEventHandler<SVGPathElement> = (e) => {
|
|
151
|
+
restProps.onpointerleave?.(e);
|
|
152
|
+
tooltipContext?.hide();
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
if (renderCtx === 'canvas') {
|
|
156
|
+
registerCanvasComponent({
|
|
128
157
|
name: 'GeoPath',
|
|
129
158
|
render,
|
|
130
159
|
events: {
|
|
@@ -132,36 +161,37 @@
|
|
|
132
161
|
pointerenter: _onPointerEnter,
|
|
133
162
|
pointermove: _onPointerMove,
|
|
134
163
|
pointerleave: _onPointerLeave,
|
|
135
|
-
pointerdown: onpointerdown,
|
|
136
|
-
touchmove: ontouchmove,
|
|
164
|
+
pointerdown: restProps.onpointerdown,
|
|
165
|
+
touchmove: restProps.ontouchmove,
|
|
137
166
|
},
|
|
167
|
+
deps: () => [
|
|
168
|
+
geojson,
|
|
169
|
+
projection,
|
|
170
|
+
fillKey.current,
|
|
171
|
+
strokeKey.current,
|
|
172
|
+
strokeWidth,
|
|
173
|
+
opacity,
|
|
174
|
+
className,
|
|
175
|
+
],
|
|
138
176
|
});
|
|
139
177
|
}
|
|
140
|
-
|
|
141
|
-
onDestroy(() => {
|
|
142
|
-
if (renderContext === 'canvas') {
|
|
143
|
-
canvasUnregister();
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
178
|
</script>
|
|
147
179
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
{/if}
|
|
167
|
-
</slot>
|
|
180
|
+
{#if children}
|
|
181
|
+
{@render children({ geoPath })}
|
|
182
|
+
{:else if renderCtx === 'svg'}
|
|
183
|
+
<path
|
|
184
|
+
bind:this={ref}
|
|
185
|
+
{...restProps}
|
|
186
|
+
d={geojson ? geoPath?.(geojson) : ''}
|
|
187
|
+
{fill}
|
|
188
|
+
{stroke}
|
|
189
|
+
stroke-width={strokeWidth}
|
|
190
|
+
{opacity}
|
|
191
|
+
onclick={_onClick}
|
|
192
|
+
onpointerenter={_onPointerEnter}
|
|
193
|
+
onpointermove={_onPointerMove}
|
|
194
|
+
onpointerleave={_onPointerLeave}
|
|
195
|
+
class={cls(layerClass('geo-path'), fill == null && 'fill-transparent', className)}
|
|
196
|
+
/>
|
|
197
|
+
{/if}
|
|
@@ -1,39 +1,51 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import type { CommonStyleProps, Without } from '../utils/types.js';
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import type { SVGAttributes } from 'svelte/elements';
|
|
3
4
|
import type { TooltipContextValue } from './tooltip/TooltipContext.svelte';
|
|
4
5
|
import { type CurveFactory, type CurveFactoryLineOnly } from 'd3-shape';
|
|
6
|
+
import { type GeoIdentityTransform, type GeoPermissibleObjects, type GeoProjection, type GeoTransformPrototype } from 'd3-geo';
|
|
7
|
+
export type GeoPathPropsWithoutHTML = {
|
|
8
|
+
/**
|
|
9
|
+
* GeoJSON data to render
|
|
10
|
+
*/
|
|
11
|
+
geojson?: GeoPermissibleObjects | null;
|
|
12
|
+
/**
|
|
13
|
+
* Tooltip context to setup pointer events to show tooltip for related data
|
|
14
|
+
*/
|
|
15
|
+
tooltipContext?: TooltipContextValue | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Click event handler
|
|
18
|
+
*/
|
|
19
|
+
onclick?: ((e: MouseEvent, geoPath: ReturnType<typeof geoCurvePath> | undefined) => void) | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Curve of path drawn. Imported via d3-shape.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* import { curveCatmullRom } from 'd3-shape';
|
|
25
|
+
* <GeoPath curve={curveCatmullRom} />
|
|
26
|
+
*
|
|
27
|
+
* @default curveLinearClosed
|
|
28
|
+
*/
|
|
29
|
+
curve?: CurveFactory | CurveFactoryLineOnly;
|
|
30
|
+
/**
|
|
31
|
+
* Apply geo transform to projection.
|
|
32
|
+
* Useful to draw straight lines with `geoMercator` projection.
|
|
33
|
+
*
|
|
34
|
+
* @see https://d3js.org/d3-geo/projection#geoTransform
|
|
35
|
+
* @see https://stackoverflow.com/a/56409480/191902
|
|
36
|
+
**/
|
|
37
|
+
geoTransform?: (projection: GeoProjection | GeoIdentityTransform) => GeoTransformPrototype;
|
|
38
|
+
/**
|
|
39
|
+
* A reference to the underlying `<path>` element
|
|
40
|
+
* @bindable
|
|
41
|
+
*/
|
|
42
|
+
ref?: SVGPathElement;
|
|
43
|
+
children?: Snippet<[{
|
|
44
|
+
geoPath: ReturnType<typeof geoCurvePath> | undefined;
|
|
45
|
+
}]>;
|
|
46
|
+
} & CommonStyleProps;
|
|
47
|
+
export type GeoPathProps = GeoPathPropsWithoutHTML & Without<SVGAttributes<SVGPathElement>, GeoPathPropsWithoutHTML>;
|
|
5
48
|
import { geoCurvePath } from '../utils/geo.js';
|
|
6
|
-
declare const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
geojson?: GeoPermissibleObjects | null | undefined;
|
|
10
|
-
fill?: string | undefined | undefined;
|
|
11
|
-
stroke?: string | undefined | undefined;
|
|
12
|
-
strokeWidth?: number | undefined | undefined;
|
|
13
|
-
opacity?: number | undefined | undefined;
|
|
14
|
-
tooltip?: TooltipContextValue | undefined;
|
|
15
|
-
onclick?: ((e: MouseEvent, geoPath: ReturnType<typeof geoCurvePath>) => void) | undefined | undefined;
|
|
16
|
-
onpointerenter?: ((e: PointerEvent) => void) | undefined | undefined;
|
|
17
|
-
onpointermove?: ((e: PointerEvent) => void) | undefined | undefined;
|
|
18
|
-
onpointerleave?: ((e: PointerEvent) => void) | undefined | undefined;
|
|
19
|
-
onpointerdown?: ((e: PointerEvent) => void) | undefined | undefined;
|
|
20
|
-
ontouchmove?: ((e: TouchEvent) => void) | undefined | undefined;
|
|
21
|
-
curve?: (CurveFactory | CurveFactoryLineOnly) | undefined;
|
|
22
|
-
class?: string | undefined | undefined;
|
|
23
|
-
geoTransform?: ((projection: GeoProjection | GeoIdentityTransform) => GeoTransformPrototype) | undefined | undefined;
|
|
24
|
-
};
|
|
25
|
-
events: {
|
|
26
|
-
[evt: string]: CustomEvent<any>;
|
|
27
|
-
};
|
|
28
|
-
slots: {
|
|
29
|
-
default: {
|
|
30
|
-
geoPath: import("d3-geo").GeoPath<unknown, GeoPermissibleObjects>;
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
export type GeoPathProps = typeof __propDef.props;
|
|
35
|
-
export type GeoPathEvents = typeof __propDef.events;
|
|
36
|
-
export type GeoPathSlots = typeof __propDef.slots;
|
|
37
|
-
export default class GeoPath extends SvelteComponentTyped<GeoPathProps, GeoPathEvents, GeoPathSlots> {
|
|
38
|
-
}
|
|
39
|
-
export {};
|
|
49
|
+
declare const GeoPath: import("svelte").Component<GeoPathProps, {}, "ref">;
|
|
50
|
+
type GeoPath = ReturnType<typeof GeoPath>;
|
|
51
|
+
export default GeoPath;
|
|
@@ -1,42 +1,74 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import {
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import type { SVGAttributes } from 'svelte/elements';
|
|
4
|
+
import Circle, { type CircleProps, type CirclePropsWithoutHTML } from './Circle.svelte';
|
|
5
|
+
import type { Without } from '../utils/types.js';
|
|
6
|
+
|
|
7
|
+
export type GeoPointPropsWithoutHTML = {
|
|
8
|
+
/**
|
|
9
|
+
* Latitude of the point.
|
|
10
|
+
*/
|
|
11
|
+
lat: number;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Longitude of the point.
|
|
15
|
+
*/
|
|
16
|
+
long: number;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* A bindable reference to the underlying element, which
|
|
20
|
+
* can be a `<circle>` or `<g>` element.
|
|
21
|
+
*/
|
|
22
|
+
ref?: Element;
|
|
23
|
+
|
|
24
|
+
children?: Snippet<[{ x: number; y: number }]>;
|
|
25
|
+
};
|
|
3
26
|
|
|
4
|
-
|
|
5
|
-
|
|
27
|
+
export type GeoPointProps = Omit<
|
|
28
|
+
GeoPointPropsWithoutHTML & Without<CircleProps, GeoPointPropsWithoutHTML>,
|
|
29
|
+
'x' | 'y'
|
|
30
|
+
>;
|
|
31
|
+
</script>
|
|
32
|
+
|
|
33
|
+
<script lang="ts">
|
|
6
34
|
import Group from './Group.svelte';
|
|
7
|
-
import { getCanvasContext } from './layout/Canvas.svelte';
|
|
8
35
|
import { getRenderContext } from './Chart.svelte';
|
|
36
|
+
import { getGeoContext } from './GeoContext.svelte';
|
|
37
|
+
import { extractLayerProps } from '../utils/attributes.js';
|
|
38
|
+
|
|
39
|
+
let { lat, long, ref: refProp = $bindable(), children, ...restProps }: GeoPointProps = $props();
|
|
9
40
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
41
|
+
let ref = $state<Element>();
|
|
42
|
+
$effect.pre(() => {
|
|
43
|
+
refProp = ref;
|
|
44
|
+
});
|
|
14
45
|
|
|
15
|
-
const
|
|
46
|
+
const geoCtx = getGeoContext();
|
|
16
47
|
|
|
17
|
-
|
|
48
|
+
const points = $derived(geoCtx.projection?.([long, lat]) ?? [0, 0]);
|
|
49
|
+
const x = $derived(points[0]);
|
|
50
|
+
const y = $derived(points[1]);
|
|
18
51
|
|
|
19
52
|
const renderContext = getRenderContext();
|
|
20
|
-
const canvasContext = getCanvasContext();
|
|
21
53
|
</script>
|
|
22
54
|
|
|
23
55
|
{#if renderContext === 'svg'}
|
|
24
|
-
{#if
|
|
25
|
-
<Group {x} {y} {
|
|
26
|
-
|
|
56
|
+
{#if children}
|
|
57
|
+
<Group {x} {y} {...extractLayerProps(restProps, 'geo-point-group')}>
|
|
58
|
+
{@render children({ x, y })}
|
|
27
59
|
</Group>
|
|
28
60
|
{:else}
|
|
29
|
-
<Circle cx={x} cy={y} {
|
|
61
|
+
<Circle cx={x} cy={y} {...extractLayerProps(restProps, 'geo-point')} />
|
|
30
62
|
{/if}
|
|
31
63
|
{/if}
|
|
32
64
|
|
|
33
65
|
{#if renderContext === 'canvas'}
|
|
34
|
-
{#if
|
|
35
|
-
<!-- TODO: Handle Canvas translation.
|
|
66
|
+
{#if children}
|
|
67
|
+
<!-- TODO: Handle Canvas translation. Consolidate with svg use case above -->
|
|
36
68
|
<!-- <Group {x} {y} {...$$restProps}> -->
|
|
37
|
-
|
|
69
|
+
{@render children({ x, y })}
|
|
38
70
|
<!-- </Group> -->
|
|
39
71
|
{:else}
|
|
40
|
-
<Circle cx={x} cy={y} {
|
|
72
|
+
<Circle cx={x} cy={y} {...extractLayerProps(restProps, 'geo-point')} />
|
|
41
73
|
{/if}
|
|
42
74
|
{/if}
|
|
@@ -1,23 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import { type CircleProps } from './Circle.svelte';
|
|
3
|
+
import type { Without } from '../utils/types.js';
|
|
4
|
+
export type GeoPointPropsWithoutHTML = {
|
|
5
|
+
/**
|
|
6
|
+
* Latitude of the point.
|
|
7
|
+
*/
|
|
8
|
+
lat: number;
|
|
9
|
+
/**
|
|
10
|
+
* Longitude of the point.
|
|
11
|
+
*/
|
|
12
|
+
long: number;
|
|
13
|
+
/**
|
|
14
|
+
* A bindable reference to the underlying element, which
|
|
15
|
+
* can be a `<circle>` or `<g>` element.
|
|
16
|
+
*/
|
|
17
|
+
ref?: Element;
|
|
18
|
+
children?: Snippet<[{
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
}]>;
|
|
17
22
|
};
|
|
18
|
-
export type GeoPointProps =
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
export default
|
|
22
|
-
}
|
|
23
|
-
export {};
|
|
23
|
+
export type GeoPointProps = Omit<GeoPointPropsWithoutHTML & Without<CircleProps, GeoPointPropsWithoutHTML>, 'x' | 'y'>;
|
|
24
|
+
declare const GeoPoint: import("svelte").Component<GeoPointProps, {}, "ref">;
|
|
25
|
+
type GeoPoint = ReturnType<typeof GeoPoint>;
|
|
26
|
+
export default GeoPoint;
|
|
@@ -1,36 +1,85 @@
|
|
|
1
|
-
<script lang="ts">
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import Spline, { type SplineProps } from './Spline.svelte';
|
|
2
3
|
import { curveNatural, type CurveFactory, type CurveFactoryLineOnly } from 'd3-shape';
|
|
3
|
-
import {
|
|
4
|
+
import type { Without } from '../utils/types.js';
|
|
5
|
+
|
|
6
|
+
export type GeoSplinePropsWithoutHTML = {
|
|
7
|
+
/**
|
|
8
|
+
* Link between two points on the globe.
|
|
9
|
+
*/
|
|
10
|
+
link: { source: [number, number]; target: [number, number] };
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The amount of loft to apply to the middle of the curve.
|
|
14
|
+
*
|
|
15
|
+
* @default 1.0
|
|
16
|
+
*/
|
|
17
|
+
loft?: number;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Curve of spline drawn. Imported via d3-shape.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* import { curveNatural } from 'd3-shape';
|
|
24
|
+
* <GeoSpline curve={curveNatural} />
|
|
25
|
+
*
|
|
26
|
+
* @default curveNatural
|
|
27
|
+
*/
|
|
28
|
+
curve?: CurveFactory | CurveFactoryLineOnly;
|
|
29
|
+
};
|
|
4
30
|
|
|
5
|
-
|
|
6
|
-
|
|
31
|
+
export type GeoSplineProps = GeoSplinePropsWithoutHTML &
|
|
32
|
+
Without<SplineProps, GeoSplinePropsWithoutHTML>;
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<script lang="ts">
|
|
36
|
+
import { geoOrthographic, geoInterpolate } from 'd3-geo';
|
|
7
37
|
|
|
8
|
-
|
|
38
|
+
import { getGeoContext } from './GeoContext.svelte';
|
|
39
|
+
import { extractLayerProps } from '../utils/attributes.js';
|
|
9
40
|
|
|
10
|
-
|
|
11
|
-
|
|
41
|
+
let {
|
|
42
|
+
link,
|
|
43
|
+
loft = 1.0,
|
|
44
|
+
curve = curveNatural,
|
|
45
|
+
splineRef: splineRefProp = $bindable(),
|
|
46
|
+
...restProps
|
|
47
|
+
}: GeoSplineProps = $props();
|
|
12
48
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
* import { curveNatural } from 'd3-shape';
|
|
18
|
-
* <GeoSpline curve={curveNatrual} />
|
|
19
|
-
*
|
|
20
|
-
* @type {CurveFactory | CurveFactoryLineOnly | undefined}
|
|
21
|
-
*/
|
|
22
|
-
export let curve: CurveFactory | CurveFactoryLineOnly | undefined = curveNatural;
|
|
49
|
+
let splineRef = $state<SVGPathElement>();
|
|
50
|
+
$effect.pre(() => {
|
|
51
|
+
splineRefProp = splineRef;
|
|
52
|
+
});
|
|
23
53
|
|
|
24
|
-
const
|
|
54
|
+
const geoCtx = getGeoContext();
|
|
25
55
|
|
|
26
|
-
|
|
27
|
-
.
|
|
28
|
-
|
|
29
|
-
|
|
56
|
+
const loftedProjection = $derived(
|
|
57
|
+
geoCtx.projection
|
|
58
|
+
? geoOrthographic()
|
|
59
|
+
.translate(geoCtx.projection.translate())
|
|
60
|
+
.rotate(geoCtx.projection.rotate())
|
|
61
|
+
.scale(geoCtx.projection.scale() * loft)
|
|
62
|
+
: undefined
|
|
63
|
+
);
|
|
30
64
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
65
|
+
const source = $derived(geoCtx.projection ? geoCtx.projection(link.source) : [0, 0]) as [
|
|
66
|
+
number,
|
|
67
|
+
number,
|
|
68
|
+
];
|
|
69
|
+
const target = $derived(geoCtx.projection ? geoCtx.projection(link.target) : [0, 0]) as [
|
|
70
|
+
number,
|
|
71
|
+
number,
|
|
72
|
+
];
|
|
73
|
+
const middle = $derived(
|
|
74
|
+
geoCtx.projection ? loftedProjection!(geoInterpolate(link.source, link.target)(0.5)) : [0, 0]
|
|
75
|
+
) as [number, number];
|
|
34
76
|
</script>
|
|
35
77
|
|
|
36
|
-
<Spline
|
|
78
|
+
<Spline
|
|
79
|
+
bind:splineRef
|
|
80
|
+
data={[source, middle, target]}
|
|
81
|
+
x={(d) => d[0]}
|
|
82
|
+
y={(d) => d[1]}
|
|
83
|
+
{curve}
|
|
84
|
+
{...extractLayerProps(restProps, 'geo-spline')}
|
|
85
|
+
/>
|