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,107 +1,187 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import type { MarkerOptions } from './MarkerWrapper.svelte';
|
|
4
|
+
import type { CommonStyleProps, Without } from '../utils/types.js';
|
|
5
|
+
import type { SVGAttributes } from 'svelte/elements';
|
|
6
|
+
import type { CurveFactory, CurveFactoryLineOnly, Line } from 'd3-shape';
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
createControlledMotion,
|
|
10
|
+
createMotion,
|
|
11
|
+
extractTweenConfig,
|
|
12
|
+
type MotionProp,
|
|
13
|
+
type ResolvedMotion,
|
|
14
|
+
} from '../utils/motion.svelte.js';
|
|
15
|
+
import { accessor, type Accessor } from '../utils/common.js';
|
|
16
|
+
|
|
17
|
+
export type SplinePropsWithoutHTML = {
|
|
18
|
+
/**
|
|
19
|
+
* Override data instead of using context
|
|
20
|
+
*/
|
|
21
|
+
data?: any;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Pass `<path d={...} />` explicitly instead of calculating
|
|
25
|
+
* from data / context
|
|
26
|
+
*/
|
|
27
|
+
pathData?: string | undefined | null;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Override `x` accessor from Chart context
|
|
31
|
+
*/
|
|
32
|
+
x?: Accessor;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Override `y` accessor from Chart context
|
|
36
|
+
*/
|
|
37
|
+
y?: Accessor;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Whether to animate the drawing of the path over time.
|
|
41
|
+
* Pass either `true` or an object with transition options to
|
|
42
|
+
* enable the transition.
|
|
43
|
+
*
|
|
44
|
+
* Works best with `tweened` disabled.
|
|
45
|
+
*/
|
|
46
|
+
draw?: boolean | Parameters<typeof _drawTransition>[1];
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Curve of spline drawn. Imported via d3-shape.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* import { curveNatural } from 'd3-shape';
|
|
53
|
+
* <Spline curve={curveNatural} />
|
|
54
|
+
*
|
|
55
|
+
* @type {CurveFactory | CurveFactoryLineOnly | undefined}
|
|
56
|
+
*/
|
|
57
|
+
curve?: CurveFactory | CurveFactoryLineOnly;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Function to determine if a point is defined
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* <Spline defined={(d) => d.value !== null} />
|
|
64
|
+
*/
|
|
65
|
+
defined?: Parameters<Line<any>['defined']>[0];
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Marker to attach to both start and end points of the line
|
|
69
|
+
*/
|
|
70
|
+
marker?: MarkerOptions;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Marker to attach to the middle point of the line
|
|
74
|
+
*/
|
|
75
|
+
markerMid?: MarkerOptions;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Marker to attach to the start point of the line
|
|
79
|
+
*/
|
|
80
|
+
markerStart?: MarkerOptions;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Marker to attach to the end point of the line
|
|
84
|
+
*/
|
|
85
|
+
markerEnd?: MarkerOptions;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Add additional content at the start of the line.
|
|
89
|
+
*
|
|
90
|
+
* Receives `{ point: DOMPoint }` as a snippet prop.
|
|
91
|
+
*/
|
|
92
|
+
startContent?: Snippet<[{ point: DOMPoint }]>;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Add additional content at the end of the line.
|
|
96
|
+
*
|
|
97
|
+
* Receives `{ point: DOMPoint }` as a snippet prop.
|
|
98
|
+
*/
|
|
99
|
+
endContent?: Snippet<[{ point: DOMPoint }]>;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* A reference to the `<path>` element.
|
|
103
|
+
*
|
|
104
|
+
* @bindable
|
|
105
|
+
*/
|
|
106
|
+
splineRef?: SVGPathElement;
|
|
107
|
+
|
|
108
|
+
motion?: MotionProp;
|
|
109
|
+
} & CommonStyleProps;
|
|
110
|
+
|
|
111
|
+
export type SplineProps = SplinePropsWithoutHTML &
|
|
112
|
+
Without<SVGAttributes<SVGPathElement>, SplinePropsWithoutHTML>;
|
|
113
|
+
</script>
|
|
114
|
+
|
|
1
115
|
<script lang="ts">
|
|
2
|
-
import { onDestroy, tick, type ComponentProps } from 'svelte';
|
|
3
|
-
import { writable } from 'svelte/store';
|
|
4
|
-
import { tweened as tweenedStore } from 'svelte/motion';
|
|
5
116
|
import { draw as _drawTransition } from 'svelte/transition';
|
|
6
117
|
import { cubicInOut } from 'svelte/easing';
|
|
7
118
|
import { merge } from 'lodash-es';
|
|
8
119
|
|
|
9
120
|
import { line as d3Line, lineRadial } from 'd3-shape';
|
|
10
|
-
import type { CurveFactory, CurveFactoryLineOnly, Line } from 'd3-shape';
|
|
11
|
-
// import { interpolateString } from 'd3-interpolate';
|
|
12
121
|
import { interpolatePath } from 'd3-interpolate-path';
|
|
13
122
|
import { max } from 'd3-array';
|
|
14
123
|
import { cls } from '@layerstack/tailwind';
|
|
15
|
-
import { uniqueId } from '@layerstack/utils';
|
|
16
|
-
import { objectId } from '@layerstack/utils/object';
|
|
17
124
|
|
|
18
|
-
import { chartContext } from './ChartContext.svelte';
|
|
19
125
|
import Group from './Group.svelte';
|
|
20
|
-
import
|
|
21
|
-
|
|
22
|
-
import { motionStore } from '../stores/motionStore.js';
|
|
23
|
-
import { accessor, type Accessor } from '../utils/common.js';
|
|
24
|
-
import { isScaleBand } from '../utils/scales.js';
|
|
126
|
+
import { isScaleBand } from '../utils/scales.svelte.js';
|
|
25
127
|
import { flattenPathData } from '../utils/path.js';
|
|
26
|
-
import {
|
|
128
|
+
import { registerCanvasComponent } from './layout/Canvas.svelte';
|
|
27
129
|
import { renderPathData, type ComputedStylesOptions } from '../utils/canvas.js';
|
|
28
130
|
import { getRenderContext } from './Chart.svelte';
|
|
131
|
+
import MarkerWrapper from './MarkerWrapper.svelte';
|
|
132
|
+
import { getChartContext } from './Chart.svelte';
|
|
133
|
+
import { createKey } from '../utils/key.svelte.js';
|
|
134
|
+
import { createId } from '../utils/createId.js';
|
|
135
|
+
import { layerClass } from '../utils/attributes.js';
|
|
136
|
+
|
|
137
|
+
const ctx = getChartContext();
|
|
138
|
+
|
|
139
|
+
const uid = $props.id();
|
|
140
|
+
|
|
141
|
+
let {
|
|
142
|
+
data,
|
|
143
|
+
pathData,
|
|
144
|
+
x,
|
|
145
|
+
y,
|
|
146
|
+
motion,
|
|
147
|
+
draw,
|
|
148
|
+
curve,
|
|
149
|
+
defined,
|
|
150
|
+
fill,
|
|
151
|
+
stroke,
|
|
152
|
+
strokeWidth,
|
|
153
|
+
fillOpacity,
|
|
154
|
+
class: className,
|
|
155
|
+
marker,
|
|
156
|
+
markerStart: markerStartProp,
|
|
157
|
+
markerMid: markerMidProp,
|
|
158
|
+
markerEnd: markerEndProp,
|
|
159
|
+
startContent,
|
|
160
|
+
endContent,
|
|
161
|
+
opacity,
|
|
162
|
+
splineRef: splineRefProp = $bindable(),
|
|
163
|
+
...restProps
|
|
164
|
+
}: SplineProps = $props();
|
|
165
|
+
|
|
166
|
+
let splineRef = $state<SVGPathElement>();
|
|
167
|
+
|
|
168
|
+
$effect.pre(() => {
|
|
169
|
+
splineRefProp = splineRef;
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
const markerStart = $derived(markerStartProp ?? marker);
|
|
173
|
+
const markerMid = $derived(markerMidProp ?? marker);
|
|
174
|
+
const markerEnd = $derived(markerEndProp ?? marker);
|
|
29
175
|
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
} = chartContext();
|
|
40
|
-
|
|
41
|
-
/** Override data instead of using context */
|
|
42
|
-
export let data: any = undefined;
|
|
43
|
-
|
|
44
|
-
/** Pass `<path d={...} />` explicitly instead of calculating from data / context */
|
|
45
|
-
export let pathData: string | undefined | null = undefined;
|
|
46
|
-
|
|
47
|
-
/** Override `x` accessor from Chart context */
|
|
48
|
-
export let x: Accessor = undefined;
|
|
49
|
-
/** Override `y` accessor from Chart context */
|
|
50
|
-
export let y: Accessor = undefined;
|
|
51
|
-
|
|
52
|
-
/** Interpolate path data using d3-interpolate-path. Works best without `draw` enabled */
|
|
53
|
-
export let tweened: boolean | Parameters<typeof tweenedStore>[1] = undefined;
|
|
54
|
-
/** Draw path over time. Works best without `tweened` enabled */
|
|
55
|
-
export let draw: boolean | Parameters<typeof _drawTransition>[1] = undefined;
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Curve of spline drawn. Imported via d3-shape.
|
|
59
|
-
*
|
|
60
|
-
* @example
|
|
61
|
-
* import { curveNatural } from 'd3-shape';
|
|
62
|
-
* <Spline curve={curveNatrual} />
|
|
63
|
-
*
|
|
64
|
-
* @type {CurveFactory | CurveFactoryLineOnly | undefined}
|
|
65
|
-
*/
|
|
66
|
-
export let curve: CurveFactory | CurveFactoryLineOnly | undefined = undefined;
|
|
67
|
-
export let defined: Parameters<Line<any>['defined']>[0] | undefined = undefined;
|
|
68
|
-
|
|
69
|
-
export let fill: string | undefined = undefined;
|
|
70
|
-
export let fillOpacity: number | undefined = undefined;
|
|
71
|
-
export let stroke: string | undefined = undefined;
|
|
72
|
-
export let strokeWidth: number | undefined = undefined;
|
|
73
|
-
export let opacity: number | undefined = undefined;
|
|
74
|
-
|
|
75
|
-
let className: string | undefined = undefined;
|
|
76
|
-
export { className as class };
|
|
77
|
-
|
|
78
|
-
export let onclick: ((e: MouseEvent) => void) | undefined = undefined;
|
|
79
|
-
export let onpointerenter: ((e: PointerEvent) => void) | undefined = undefined;
|
|
80
|
-
export let onpointermove: ((e: PointerEvent) => void) | undefined = undefined;
|
|
81
|
-
export let onpointerleave: ((e: PointerEvent) => void) | undefined = undefined;
|
|
82
|
-
export let onpointerdown: ((e: PointerEvent) => void) | undefined = undefined;
|
|
83
|
-
export let ontouchmove: ((e: TouchEvent) => void) | undefined = undefined;
|
|
84
|
-
export let onpointerover: ((e: PointerEvent) => void) | undefined = undefined;
|
|
85
|
-
export let onpointerout: ((e: PointerEvent) => void) | undefined = undefined;
|
|
86
|
-
|
|
87
|
-
/** Marker to attach to start, mid, and end points of path */
|
|
88
|
-
export let marker: ComponentProps<Marker>['type'] | ComponentProps<Marker> | undefined =
|
|
89
|
-
undefined;
|
|
90
|
-
/** Marker to attach to start point of path */
|
|
91
|
-
export let markerStart: ComponentProps<Marker>['type'] | ComponentProps<Marker> | undefined =
|
|
92
|
-
marker;
|
|
93
|
-
/** Marker to attach to all mid points of path */
|
|
94
|
-
export let markerMid: ComponentProps<Marker>['type'] | ComponentProps<Marker> | undefined =
|
|
95
|
-
marker;
|
|
96
|
-
/** Marker to attach to end point of path */
|
|
97
|
-
export let markerEnd: ComponentProps<Marker>['type'] | ComponentProps<Marker> | undefined =
|
|
98
|
-
marker;
|
|
99
|
-
|
|
100
|
-
$: markerStartId = markerStart || $$slots['markerStart'] ? uniqueId('marker-') : '';
|
|
101
|
-
$: markerMidId = markerMid || $$slots['markerMid'] ? uniqueId('marker-') : '';
|
|
102
|
-
$: markerEndId = markerEnd || $$slots['markerEnd'] ? uniqueId('marker-') : '';
|
|
103
|
-
|
|
104
|
-
function getScaleValue(data: any, scale: typeof $xScale | typeof $yScale, accessor: Function) {
|
|
176
|
+
const markerStartId = $derived(markerStart ? createId('marker-start', uid) : '');
|
|
177
|
+
const markerMidId = $derived(markerMid ? createId('marker-mid', uid) : '');
|
|
178
|
+
const markerEndId = $derived(markerEnd ? createId('marker-end', uid) : '');
|
|
179
|
+
|
|
180
|
+
function getScaleValue(
|
|
181
|
+
data: any,
|
|
182
|
+
scale: typeof ctx.xScale | typeof ctx.yScale,
|
|
183
|
+
accessor: Function
|
|
184
|
+
) {
|
|
105
185
|
let value = accessor(data);
|
|
106
186
|
|
|
107
187
|
if (Array.isArray(value)) {
|
|
@@ -117,11 +197,20 @@
|
|
|
117
197
|
}
|
|
118
198
|
}
|
|
119
199
|
|
|
120
|
-
|
|
121
|
-
|
|
200
|
+
const xAccessor = $derived(x ? accessor(x) : ctx.x);
|
|
201
|
+
const yAccessor = $derived(y ? accessor(y) : ctx.y);
|
|
122
202
|
|
|
123
|
-
|
|
124
|
-
|
|
203
|
+
const xOffset = $derived(isScaleBand(ctx.xScale) ? ctx.xScale.bandwidth() / 2 : 0);
|
|
204
|
+
const yOffset = $derived(isScaleBand(ctx.yScale) ? ctx.yScale.bandwidth() / 2 : 0);
|
|
205
|
+
|
|
206
|
+
const extractedTween = extractTweenConfig(motion);
|
|
207
|
+
|
|
208
|
+
const tweenedOptions: ResolvedMotion | undefined = extractedTween
|
|
209
|
+
? {
|
|
210
|
+
type: extractedTween.type,
|
|
211
|
+
options: { interpolate: interpolatePath, ...extractedTween.options },
|
|
212
|
+
}
|
|
213
|
+
: undefined;
|
|
125
214
|
|
|
126
215
|
/** Provide initial `0` horizontal baseline and initially hide/untrack scale changes so not reactive (only set on initial mount) */
|
|
127
216
|
function defaultPathData() {
|
|
@@ -130,58 +219,49 @@
|
|
|
130
219
|
return '';
|
|
131
220
|
} else if (pathData) {
|
|
132
221
|
// Flatten all `y` coordinates of pre-defined `pathData`
|
|
133
|
-
return flattenPathData(pathData, Math.min(
|
|
134
|
-
} else if (
|
|
222
|
+
return flattenPathData(pathData, Math.min(ctx.yScale(0) ?? ctx.yRange[0], ctx.yRange[0]));
|
|
223
|
+
} else if (ctx.config.x) {
|
|
135
224
|
// Only use default line if `x` accessor is defined (cartesian chart)
|
|
136
|
-
const path =
|
|
225
|
+
const path = ctx.radial
|
|
137
226
|
? lineRadial()
|
|
138
|
-
.angle((d) =>
|
|
139
|
-
|
|
227
|
+
.angle((d) => ctx.xScale(xAccessor(d)) + 0) // Never apply xOffset (LineChart radar, BarChart radial, ...)?
|
|
228
|
+
|
|
229
|
+
.radius((d) => Math.min(ctx.yScale(0), ctx.yRange[0]))
|
|
140
230
|
: d3Line()
|
|
141
|
-
.x((d) =>
|
|
142
|
-
.y((d) => Math.min(
|
|
231
|
+
.x((d) => ctx.xScale(xAccessor(d)) + xOffset)
|
|
232
|
+
.y((d) => Math.min(ctx.yScale(0), ctx.yRange[0]));
|
|
143
233
|
|
|
144
234
|
path.defined(defined ?? ((d) => xAccessor(d) != null && yAccessor(d) != null));
|
|
145
235
|
|
|
146
236
|
if (curve) path.curve(curve);
|
|
147
237
|
|
|
148
|
-
return path(data ??
|
|
238
|
+
return path(data ?? ctx.data);
|
|
149
239
|
}
|
|
150
240
|
}
|
|
151
241
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
? { interpolate: interpolatePath, ...(typeof tweened === 'object' ? tweened : null) }
|
|
155
|
-
: false;
|
|
156
|
-
$: tweened_d = motionStore(defaultPathData(), { tweened: tweenedOptions });
|
|
157
|
-
$: {
|
|
158
|
-
const path = $radial
|
|
242
|
+
const d = $derived.by(() => {
|
|
243
|
+
const path = ctx.radial
|
|
159
244
|
? lineRadial()
|
|
160
|
-
.angle((d) => getScaleValue(d,
|
|
161
|
-
|
|
245
|
+
.angle((d) => getScaleValue(d, ctx.xScale, xAccessor) + 0) // Never apply xOffset (LineChart radar, BarChart radial, ...)?
|
|
246
|
+
|
|
247
|
+
.radius((d) => getScaleValue(d, ctx.yScale, yAccessor) + yOffset)
|
|
162
248
|
: d3Line()
|
|
163
|
-
.x((d) => getScaleValue(d,
|
|
164
|
-
.y((d) => getScaleValue(d,
|
|
249
|
+
.x((d) => getScaleValue(d, ctx.xScale, xAccessor) + xOffset)
|
|
250
|
+
.y((d) => getScaleValue(d, ctx.yScale, yAccessor) + yOffset);
|
|
165
251
|
|
|
166
252
|
path.defined(defined ?? ((d) => xAccessor(d) != null && yAccessor(d) != null));
|
|
167
|
-
|
|
168
253
|
if (curve) path.curve(curve);
|
|
169
254
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
}
|
|
255
|
+
return pathData ?? path(data ?? ctx.data) ?? '';
|
|
256
|
+
});
|
|
173
257
|
|
|
174
|
-
|
|
258
|
+
const tweenedState = createMotion(defaultPathData(), () => d, tweenedOptions);
|
|
175
259
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
$tweened_d;
|
|
180
|
-
key = Symbol();
|
|
181
|
-
}
|
|
260
|
+
const drawTransition = $derived(draw ? _drawTransition : () => ({}));
|
|
261
|
+
|
|
262
|
+
let key = $state(Symbol());
|
|
182
263
|
|
|
183
|
-
const
|
|
184
|
-
const canvasContext = getCanvasContext();
|
|
264
|
+
const renderCtx = getRenderContext();
|
|
185
265
|
|
|
186
266
|
function render(
|
|
187
267
|
ctx: CanvasRenderingContext2D,
|
|
@@ -189,7 +269,7 @@
|
|
|
189
269
|
) {
|
|
190
270
|
renderPathData(
|
|
191
271
|
ctx,
|
|
192
|
-
|
|
272
|
+
tweenedState.current,
|
|
193
273
|
styleOverrides
|
|
194
274
|
? merge({ styles: { strokeWidth } }, styleOverrides)
|
|
195
275
|
: {
|
|
@@ -200,80 +280,94 @@
|
|
|
200
280
|
}
|
|
201
281
|
|
|
202
282
|
// TODO: Use objectId to work around Svelte 4 reactivity issue (even when memoizing gradients)
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
$: if (renderContext === 'canvas') {
|
|
207
|
-
// Redraw when props change
|
|
208
|
-
$tweened_d && fillKey && fillOpacity && strokeKey && strokeWidth && className;
|
|
209
|
-
canvasContext.invalidate();
|
|
210
|
-
}
|
|
283
|
+
const fillKey = createKey(() => fill);
|
|
284
|
+
const strokeKey = createKey(() => stroke);
|
|
211
285
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
canvasUnregister = canvasContext.register({
|
|
286
|
+
if (renderCtx === 'canvas') {
|
|
287
|
+
registerCanvasComponent({
|
|
215
288
|
name: 'Spline',
|
|
216
289
|
render,
|
|
217
290
|
events: {
|
|
218
|
-
click: onclick,
|
|
219
|
-
pointerenter: onpointerenter,
|
|
220
|
-
pointermove: onpointermove,
|
|
221
|
-
pointerleave: onpointerleave,
|
|
222
|
-
pointerdown: onpointerdown,
|
|
223
|
-
pointerover: onpointerover,
|
|
224
|
-
pointerout: onpointerout,
|
|
225
|
-
touchmove: ontouchmove,
|
|
291
|
+
click: restProps.onclick,
|
|
292
|
+
pointerenter: restProps.onpointerenter,
|
|
293
|
+
pointermove: restProps.onpointermove,
|
|
294
|
+
pointerleave: restProps.onpointerleave,
|
|
295
|
+
pointerdown: restProps.onpointerdown,
|
|
296
|
+
pointerover: restProps.onpointerover,
|
|
297
|
+
pointerout: restProps.onpointerout,
|
|
298
|
+
touchmove: restProps.ontouchmove,
|
|
226
299
|
},
|
|
300
|
+
deps: () => [
|
|
301
|
+
fillKey.current,
|
|
302
|
+
fillOpacity,
|
|
303
|
+
strokeKey.current,
|
|
304
|
+
strokeWidth,
|
|
305
|
+
opacity,
|
|
306
|
+
className,
|
|
307
|
+
tweenedState.current,
|
|
308
|
+
],
|
|
227
309
|
});
|
|
228
310
|
}
|
|
229
311
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
312
|
+
let startPoint = $state<DOMPoint | undefined>();
|
|
313
|
+
|
|
314
|
+
const endPointDuration = $derived.by(() => {
|
|
315
|
+
if (
|
|
316
|
+
typeof draw === 'object' &&
|
|
317
|
+
draw.duration !== undefined &&
|
|
318
|
+
typeof draw.duration !== 'function'
|
|
319
|
+
) {
|
|
320
|
+
return draw.duration;
|
|
233
321
|
}
|
|
322
|
+
return 800;
|
|
234
323
|
});
|
|
235
324
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
tweened: draw
|
|
325
|
+
const endPoint = createControlledMotion<DOMPoint | undefined>(
|
|
326
|
+
undefined,
|
|
327
|
+
draw
|
|
240
328
|
? {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
329
|
+
type: 'tween',
|
|
330
|
+
duration: () => endPointDuration,
|
|
331
|
+
easing: typeof draw === 'object' && draw.easing ? draw.easing : cubicInOut,
|
|
332
|
+
interpolate() {
|
|
244
333
|
return (t: number) => {
|
|
245
|
-
const totalLength =
|
|
246
|
-
const point =
|
|
334
|
+
const totalLength = splineRef?.getTotalLength() ?? 0;
|
|
335
|
+
const point = splineRef?.getPointAtLength(totalLength * t);
|
|
247
336
|
return point;
|
|
248
337
|
};
|
|
249
338
|
},
|
|
250
339
|
}
|
|
251
|
-
:
|
|
340
|
+
: { type: 'none' }
|
|
341
|
+
);
|
|
342
|
+
|
|
343
|
+
$effect(() => {
|
|
344
|
+
if (!startContent && !endContent) return;
|
|
345
|
+
d;
|
|
346
|
+
if (!splineRef || !splineRef.getTotalLength()) return;
|
|
347
|
+
startPoint = splineRef.getPointAtLength(0);
|
|
348
|
+
const totalLength = splineRef.getTotalLength();
|
|
349
|
+
endPoint.target = splineRef.getPointAtLength(totalLength);
|
|
252
350
|
});
|
|
253
351
|
|
|
254
|
-
|
|
255
|
-
if (
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
startPoint.set(pathEl.getPointAtLength(0));
|
|
261
|
-
|
|
262
|
-
const totalLength = pathEl.getTotalLength();
|
|
263
|
-
endPoint.set(pathEl.getPointAtLength(totalLength));
|
|
264
|
-
}
|
|
265
|
-
});
|
|
266
|
-
}
|
|
267
|
-
}
|
|
352
|
+
$effect(() => {
|
|
353
|
+
if (!draw) return;
|
|
354
|
+
// Anytime the path data changes, redraw
|
|
355
|
+
[pathData, data, ctx.data];
|
|
356
|
+
key = Symbol();
|
|
357
|
+
});
|
|
268
358
|
</script>
|
|
269
359
|
|
|
270
|
-
{#if
|
|
360
|
+
{#if renderCtx === 'svg'}
|
|
271
361
|
{#key key}
|
|
272
|
-
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
|
273
362
|
<path
|
|
274
|
-
d={
|
|
275
|
-
{
|
|
276
|
-
class={cls(
|
|
363
|
+
d={tweenedState.current}
|
|
364
|
+
{...restProps}
|
|
365
|
+
class={cls(
|
|
366
|
+
layerClass('spline-path'),
|
|
367
|
+
!fill && 'fill-none',
|
|
368
|
+
!stroke && 'stroke-surface-content',
|
|
369
|
+
className
|
|
370
|
+
)}
|
|
277
371
|
{fill}
|
|
278
372
|
fill-opacity={fillOpacity}
|
|
279
373
|
{stroke}
|
|
@@ -283,52 +377,21 @@
|
|
|
283
377
|
marker-mid={markerMidId ? `url(#${markerMidId})` : undefined}
|
|
284
378
|
marker-end={markerEndId ? `url(#${markerEndId})` : undefined}
|
|
285
379
|
in:drawTransition|global={typeof draw === 'object' ? draw : undefined}
|
|
286
|
-
|
|
287
|
-
on:pointerenter={onpointerenter}
|
|
288
|
-
on:pointermove={onpointermove}
|
|
289
|
-
on:pointerleave={onpointerleave}
|
|
290
|
-
on:pointerdown={onpointerdown}
|
|
291
|
-
on:pointerover={onpointerover}
|
|
292
|
-
on:pointerout={onpointerout}
|
|
293
|
-
on:touchmove={ontouchmove}
|
|
294
|
-
bind:this={pathEl}
|
|
380
|
+
bind:this={splineRef}
|
|
295
381
|
/>
|
|
382
|
+
<MarkerWrapper id={markerStartId} marker={markerStart} />
|
|
383
|
+
<MarkerWrapper id={markerMidId} marker={markerMid} />
|
|
384
|
+
<MarkerWrapper id={markerEndId} marker={markerEnd} />
|
|
296
385
|
|
|
297
|
-
|
|
298
|
-
{
|
|
299
|
-
|
|
300
|
-
id={markerStartId}
|
|
301
|
-
type={typeof markerStart === 'string' ? markerStart : undefined}
|
|
302
|
-
{...typeof markerStart === 'object' ? markerStart : null}
|
|
303
|
-
/>
|
|
304
|
-
{/if}
|
|
305
|
-
</slot>
|
|
306
|
-
|
|
307
|
-
<slot name="markerMid" id={markerMidId}>
|
|
308
|
-
<Marker
|
|
309
|
-
id={markerMidId}
|
|
310
|
-
type={typeof markerMid === 'string' ? markerMid : undefined}
|
|
311
|
-
{...typeof markerMid === 'object' ? markerMid : null}
|
|
312
|
-
/>
|
|
313
|
-
</slot>
|
|
314
|
-
|
|
315
|
-
<slot name="markerEnd" id={markerEndId}>
|
|
316
|
-
<Marker
|
|
317
|
-
id={markerEndId}
|
|
318
|
-
type={typeof markerEnd === 'string' ? markerEnd : undefined}
|
|
319
|
-
{...typeof markerEnd === 'object' ? markerEnd : null}
|
|
320
|
-
/>
|
|
321
|
-
</slot>
|
|
322
|
-
|
|
323
|
-
{#if $$slots.start && $startPoint}
|
|
324
|
-
<Group x={$startPoint.x} y={$startPoint.y}>
|
|
325
|
-
<slot name="start" point={$startPoint} />
|
|
386
|
+
{#if startContent && startPoint}
|
|
387
|
+
<Group x={startPoint.x} y={startPoint.y} class={layerClass('spline-g-start')}>
|
|
388
|
+
{@render startContent({ point: startPoint })}
|
|
326
389
|
</Group>
|
|
327
390
|
{/if}
|
|
328
391
|
|
|
329
|
-
{#if
|
|
330
|
-
<Group x={
|
|
331
|
-
|
|
392
|
+
{#if endContent && endPoint.current}
|
|
393
|
+
<Group x={endPoint.current.x} y={endPoint.current.y} class={layerClass('spline-g-end')}>
|
|
394
|
+
{@render endContent({ point: endPoint.current })}
|
|
332
395
|
</Group>
|
|
333
396
|
{/if}
|
|
334
397
|
{/key}
|