layerchart 2.0.0-next.0 → 2.0.0-next.2
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 +155 -0
- package/dist/components/AnnotationLine.svelte.d.ts +28 -0
- package/dist/components/AnnotationPoint.svelte +121 -0
- package/dist/components/AnnotationPoint.svelte.d.ts +32 -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 +287 -174
- package/dist/components/Axis.svelte.d.ts +116 -0
- package/dist/components/Bar.svelte +163 -107
- package/dist/components/Bar.svelte.d.ts +48 -0
- package/dist/components/Bars.svelte +54 -68
- package/dist/components/Bars.svelte.d.ts +27 -0
- package/dist/components/Blur.svelte +31 -7
- 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 +60 -15
- 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 +47 -12
- 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 +28 -13
- package/dist/components/Graticule.svelte.d.ts +11 -52
- package/dist/components/Grid.svelte +226 -114
- package/dist/components/Grid.svelte.d.ts +70 -0
- package/dist/components/Group.svelte +132 -105
- package/dist/components/Group.svelte.d.ts +53 -0
- package/dist/components/Highlight.svelte +409 -307
- package/dist/components/Highlight.svelte.d.ts +107 -0
- package/dist/components/Hull.svelte +96 -45
- package/dist/components/Hull.svelte.d.ts +40 -30
- package/dist/components/Labels.svelte +125 -46
- 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 +143 -70
- 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 +105 -62
- 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 +437 -176
- package/dist/components/Text.svelte.d.ts +130 -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 +106 -75
- package/dist/components/Voronoi.svelte.d.ts +40 -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 +450 -393
- package/dist/components/charts/AreaChart.svelte.d.ts +61 -0
- package/dist/components/charts/BarChart.svelte +454 -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 +369 -314
- 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 +334 -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 +55 -0
- package/dist/components/index.d.ts +76 -4
- package/dist/components/index.js +76 -5
- package/dist/components/layout/Canvas.svelte +321 -155
- package/dist/components/layout/Canvas.svelte.d.ts +104 -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 +246 -78
- package/dist/components/tooltip/Tooltip.svelte.d.ts +149 -31
- package/dist/components/tooltip/TooltipContext.svelte +409 -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.d.ts +18 -14
- package/dist/docs/Code.svelte.d.ts +26 -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.d.ts +27 -16
- package/dist/docs/Json.svelte.d.ts +20 -16
- package/dist/docs/Layout.svelte.d.ts +18 -13
- package/dist/docs/Link.svelte.d.ts +33 -21
- 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.d.ts +21 -17
- package/dist/docs/TransformDebug.svelte +5 -6
- package/dist/docs/TransformDebug.svelte.d.ts +18 -14
- package/dist/docs/ViewSourceButton.svelte.d.ts +21 -17
- 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 +90 -0
- package/dist/utils/{scales.js → scales.svelte.js} +100 -39
- 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 +8 -2
- package/dist/utils/ticks.js +28 -0
- package/dist/utils/ticks.test.d.ts +1 -0
- package/dist/utils/ticks.test.js +67 -0
- package/dist/utils/types.d.ts +81 -0
- package/package.json +25 -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/graph.test.d.ts → components/charts/types.js} +0 -0
|
@@ -1,161 +1,199 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import type {
|
|
4
|
-
import
|
|
5
|
-
import type {
|
|
6
|
-
import { max, min } from 'd3-array';
|
|
7
|
-
import { interpolatePath } from 'd3-interpolate-path';
|
|
8
|
-
import { merge } from 'lodash-es';
|
|
9
|
-
|
|
10
|
-
import { cls } from '@layerstack/tailwind';
|
|
11
|
-
import { objectId } from '@layerstack/utils/object';
|
|
12
|
-
|
|
13
|
-
import { motionStore } from '../stores/motionStore.js';
|
|
14
|
-
|
|
15
|
-
import { getRenderContext } from './Chart.svelte';
|
|
16
|
-
import { chartContext } from './ChartContext.svelte';
|
|
17
|
-
import Spline from './Spline.svelte';
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import { type Area as D3Area, area as d3Area, areaRadial } from 'd3-shape';
|
|
3
|
+
import type { SVGAttributes } from 'svelte/elements';
|
|
4
|
+
import type { CommonStyleProps, Without } from '../utils/types.js';
|
|
5
|
+
import type { ComponentProps } from 'svelte';
|
|
18
6
|
import { accessor, type Accessor } from '../utils/common.js';
|
|
19
|
-
import { isScaleBand } from '../utils/scales.js';
|
|
20
|
-
import { flattenPathData } from '../utils/path.js';
|
|
21
|
-
import { getCanvasContext } from './layout/Canvas.svelte';
|
|
22
|
-
import { renderPathData, type ComputedStylesOptions } from '../utils/canvas.js';
|
|
23
|
-
const {
|
|
24
|
-
data: contextData,
|
|
25
|
-
xScale,
|
|
26
|
-
yScale,
|
|
27
|
-
x: contextX,
|
|
28
|
-
y,
|
|
29
|
-
yDomain,
|
|
30
|
-
yRange,
|
|
31
|
-
radial,
|
|
32
|
-
config,
|
|
33
|
-
} = chartContext();
|
|
34
|
-
|
|
35
|
-
/** Override data instead of using context */
|
|
36
|
-
export let data: any = undefined;
|
|
37
7
|
|
|
38
|
-
|
|
39
|
-
|
|
8
|
+
export type AreaPropsWithoutHTML = {
|
|
9
|
+
/** Override data instead of using context */
|
|
10
|
+
data?: any;
|
|
40
11
|
|
|
41
|
-
|
|
42
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Pass `<path d={...} />` explicitly instead of calculating from data / context
|
|
14
|
+
*/
|
|
15
|
+
pathData?: string | null;
|
|
43
16
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Override x accessor
|
|
19
|
+
*/
|
|
20
|
+
x?: Accessor;
|
|
48
21
|
|
|
49
|
-
|
|
50
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Override y0 accessor. Defaults to max($yRange)
|
|
24
|
+
*/
|
|
25
|
+
y0?: Accessor;
|
|
51
26
|
|
|
52
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Override y1 accessor. Defaults to y accessor
|
|
29
|
+
*/
|
|
30
|
+
y1?: Accessor;
|
|
53
31
|
|
|
54
|
-
|
|
55
|
-
|
|
32
|
+
/**
|
|
33
|
+
* Whether to tween the interpolated path data using d3-interpolate-path
|
|
34
|
+
*/
|
|
35
|
+
motion?: MotionProp;
|
|
56
36
|
|
|
57
|
-
|
|
58
|
-
export let line: boolean | Partial<ComponentProps<Spline>> = false;
|
|
37
|
+
clipPath?: string;
|
|
59
38
|
|
|
60
|
-
|
|
61
|
-
export let fillOpacity: number | undefined = undefined;
|
|
62
|
-
export let stroke: string | undefined = undefined;
|
|
63
|
-
export let strokeWidth: number | undefined = undefined;
|
|
64
|
-
export let opacity: number | undefined = undefined;
|
|
39
|
+
curve?: CurveFactory;
|
|
65
40
|
|
|
66
|
-
|
|
67
|
-
export { className as class };
|
|
41
|
+
defined?: Parameters<D3Area<any>['defined']>[0];
|
|
68
42
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
43
|
+
/**
|
|
44
|
+
* Enable showing line
|
|
45
|
+
*
|
|
46
|
+
* @default false
|
|
47
|
+
*/
|
|
48
|
+
line?: boolean | Partial<ComponentProps<typeof Spline>>;
|
|
49
|
+
} & CommonStyleProps;
|
|
73
50
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
51
|
+
export type AreaProps = AreaPropsWithoutHTML &
|
|
52
|
+
Without<SVGAttributes<SVGPathElement>, AreaPropsWithoutHTML>;
|
|
53
|
+
</script>
|
|
77
54
|
|
|
78
|
-
|
|
79
|
-
|
|
55
|
+
<script lang="ts">
|
|
56
|
+
import type { CurveFactory } from 'd3-shape';
|
|
57
|
+
import { max, min } from 'd3-array';
|
|
58
|
+
import { interpolatePath } from 'd3-interpolate-path';
|
|
59
|
+
import { merge } from 'lodash-es';
|
|
80
60
|
|
|
81
|
-
|
|
61
|
+
import { getRenderContext } from './Chart.svelte';
|
|
62
|
+
import Spline from './Spline.svelte';
|
|
63
|
+
import { isScaleBand } from '../utils/scales.svelte.js';
|
|
64
|
+
import { flattenPathData } from '../utils/path.js';
|
|
65
|
+
import { registerCanvasComponent } from './layout/Canvas.svelte';
|
|
66
|
+
import { renderPathData, type ComputedStylesOptions } from '../utils/canvas.js';
|
|
67
|
+
import { getChartContext } from './Chart.svelte';
|
|
68
|
+
import {
|
|
69
|
+
createMotion,
|
|
70
|
+
extractTweenConfig,
|
|
71
|
+
type MotionProp,
|
|
72
|
+
type ResolvedMotion,
|
|
73
|
+
} from '../utils/motion.svelte.js';
|
|
74
|
+
import { createKey } from '../utils/key.svelte.js';
|
|
75
|
+
import { extractLayerProps } from '../utils/attributes.js';
|
|
76
|
+
|
|
77
|
+
const ctx = getChartContext();
|
|
78
|
+
const renderCtx = getRenderContext();
|
|
79
|
+
|
|
80
|
+
let {
|
|
81
|
+
clipPath,
|
|
82
|
+
curve,
|
|
83
|
+
data,
|
|
84
|
+
defined,
|
|
85
|
+
fill,
|
|
86
|
+
fillOpacity,
|
|
87
|
+
line = false,
|
|
88
|
+
opacity,
|
|
89
|
+
pathData,
|
|
90
|
+
stroke,
|
|
91
|
+
strokeWidth,
|
|
92
|
+
motion,
|
|
93
|
+
x,
|
|
94
|
+
y0,
|
|
95
|
+
y1,
|
|
96
|
+
...restProps
|
|
97
|
+
}: AreaProps = $props();
|
|
98
|
+
|
|
99
|
+
const xAccessor = $derived(x ? accessor(x) : ctx.x);
|
|
100
|
+
const y0Accessor = $derived(y0 ? accessor(y0) : (d: any) => min(ctx.yDomain));
|
|
101
|
+
const y1Accessor = $derived(y1 ? accessor(y1) : ctx.y);
|
|
102
|
+
|
|
103
|
+
const xOffset = $derived(isScaleBand(ctx.xScale) ? ctx.xScale.bandwidth() / 2 : 0);
|
|
104
|
+
const yOffset = $derived(isScaleBand(ctx.yScale) ? ctx.yScale.bandwidth() / 2 : 0);
|
|
105
|
+
|
|
106
|
+
const extractedTween = extractTweenConfig(motion);
|
|
107
|
+
|
|
108
|
+
const tweenOptions: ResolvedMotion | undefined = extractedTween
|
|
109
|
+
? {
|
|
110
|
+
type: extractedTween.type,
|
|
111
|
+
options: {
|
|
112
|
+
interpolate: interpolatePath,
|
|
113
|
+
...extractedTween.options,
|
|
114
|
+
},
|
|
115
|
+
}
|
|
116
|
+
: undefined;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Provide initial `0` horizontal baseline and initially hide/untrack scale changes so not
|
|
120
|
+
* reactive (only set on initial mount)
|
|
121
|
+
*/
|
|
82
122
|
function defaultPathData() {
|
|
83
|
-
if (!
|
|
123
|
+
if (!tweenOptions) {
|
|
84
124
|
// If not tweened, return empty string (faster initial render)
|
|
85
125
|
return '';
|
|
86
126
|
} else if (pathData) {
|
|
87
127
|
// Flatten all `y` coordinates of pre-defined `pathData`
|
|
88
|
-
return flattenPathData(pathData, Math.min(
|
|
89
|
-
} else if (
|
|
128
|
+
return flattenPathData(pathData, Math.min(ctx.yScale(0), ctx.yRange[0]));
|
|
129
|
+
} else if (ctx.config.x) {
|
|
90
130
|
// Only use default line if `x` accessor is defined (cartesian chart)
|
|
91
|
-
const path =
|
|
131
|
+
const path = ctx.radial
|
|
92
132
|
? areaRadial()
|
|
93
|
-
.angle((d) =>
|
|
94
|
-
.innerRadius((
|
|
95
|
-
.outerRadius((
|
|
133
|
+
.angle((d) => ctx.xScale(xAccessor(d)))
|
|
134
|
+
.innerRadius(() => Math.min(ctx.yScale(0), ctx.yRange[0]))
|
|
135
|
+
.outerRadius(() => Math.min(ctx.yScale(0), ctx.yRange[0]))
|
|
96
136
|
: d3Area()
|
|
97
|
-
.x((d) =>
|
|
98
|
-
.y0((
|
|
99
|
-
.y1((
|
|
137
|
+
.x((d) => ctx.xScale(xAccessor(d)) + xOffset)
|
|
138
|
+
.y0(() => Math.min(ctx.yScale(0), ctx.yRange[0]))
|
|
139
|
+
.y1(() => Math.min(ctx.yScale(0), ctx.yRange[0]));
|
|
100
140
|
|
|
101
141
|
path.defined(defined ?? ((d) => xAccessor(d) != null && y1Accessor(d) != null));
|
|
102
142
|
|
|
103
143
|
if (curve) path.curve(curve);
|
|
104
144
|
|
|
105
|
-
|
|
145
|
+
// TODO: type this appropriately otherwise we will have bugs in the future
|
|
146
|
+
return path(data ?? ctx.data);
|
|
106
147
|
}
|
|
107
148
|
}
|
|
108
149
|
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
: false;
|
|
112
|
-
$: tweened_d = motionStore(defaultPathData(), { tweened: tweenedOptions });
|
|
113
|
-
$: {
|
|
114
|
-
const path = $radial
|
|
150
|
+
const d = $derived.by(() => {
|
|
151
|
+
const _path = ctx.radial
|
|
115
152
|
? areaRadial()
|
|
116
|
-
.angle((d) =>
|
|
117
|
-
.innerRadius((d) =>
|
|
118
|
-
.outerRadius((d) =>
|
|
153
|
+
.angle((d) => ctx.xScale(xAccessor(d)))
|
|
154
|
+
.innerRadius((d) => ctx.yScale(y0Accessor(d)))
|
|
155
|
+
.outerRadius((d) => ctx.yScale(y1Accessor(d)))
|
|
119
156
|
: d3Area()
|
|
120
|
-
.x((d) =>
|
|
157
|
+
.x((d) => {
|
|
158
|
+
const v = xAccessor(d);
|
|
159
|
+
return ctx.xScale(v) + xOffset;
|
|
160
|
+
})
|
|
121
161
|
.y0((d) => {
|
|
122
|
-
let value = max<number>(
|
|
162
|
+
let value = max<number>(ctx.yRange)!;
|
|
123
163
|
if (y0) {
|
|
124
|
-
value =
|
|
125
|
-
} else if (Array.isArray(
|
|
164
|
+
value = ctx.yScale(y0Accessor(d));
|
|
165
|
+
} else if (Array.isArray(ctx.config.y) && ctx.config.y[0] === 0) {
|
|
126
166
|
// Use first value if `y` defined as an array (ex. `<Chart y={[0,1]}>`)
|
|
127
167
|
// TODO: Would be nice if this also handled multi-series (<Chart y={['apples', 'bananas', 'oranges']}>) as well as delta values (<Chart y={['baseline', 'value']}>)
|
|
128
|
-
value =
|
|
168
|
+
value = ctx.yScale(ctx.y(d)[0]);
|
|
129
169
|
}
|
|
130
170
|
|
|
131
171
|
return value + yOffset;
|
|
132
172
|
})
|
|
133
173
|
.y1((d) => {
|
|
134
|
-
let value = max<number>(
|
|
174
|
+
let value = max<number>(ctx.yRange)!;
|
|
135
175
|
if (y1) {
|
|
136
|
-
value =
|
|
137
|
-
} else if (Array.isArray(
|
|
176
|
+
value = ctx.yScale(y1Accessor(d));
|
|
177
|
+
} else if (Array.isArray(ctx.config.y) && ctx.config.y[1] === 1) {
|
|
138
178
|
// Use second value if `y` defined as an array (ex. `<Chart y={[0,1]}>`)
|
|
139
179
|
// TODO: Would be nice if this also handled multi-series (<Chart y={['apples', 'bananas', 'oranges']}>) as well as delta values (<Chart y={['baseline', 'value']}>)
|
|
140
|
-
value =
|
|
180
|
+
value = ctx.yScale(ctx.y(d)[1]);
|
|
141
181
|
} else {
|
|
142
182
|
// Expect single value defined for `y` (ex. `<Chart y="value">`)
|
|
143
|
-
value =
|
|
183
|
+
value = ctx.yScale(ctx.y(d));
|
|
144
184
|
}
|
|
145
185
|
|
|
146
186
|
return value + yOffset;
|
|
147
187
|
});
|
|
148
188
|
|
|
149
|
-
|
|
189
|
+
_path.defined(defined ?? ((d: any) => xAccessor(d) != null && y1Accessor(d) != null));
|
|
150
190
|
|
|
151
|
-
if (curve)
|
|
191
|
+
if (curve) _path.curve(curve);
|
|
152
192
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}
|
|
193
|
+
return pathData ?? _path(data ?? ctx.data) ?? defaultPathData();
|
|
194
|
+
});
|
|
156
195
|
|
|
157
|
-
const
|
|
158
|
-
const canvasContext = getCanvasContext();
|
|
196
|
+
const tweenState = createMotion(defaultPathData(), () => d, tweenOptions);
|
|
159
197
|
|
|
160
198
|
function render(
|
|
161
199
|
ctx: CanvasRenderingContext2D,
|
|
@@ -163,78 +201,56 @@
|
|
|
163
201
|
) {
|
|
164
202
|
renderPathData(
|
|
165
203
|
ctx,
|
|
166
|
-
|
|
204
|
+
tweenState.current,
|
|
167
205
|
styleOverrides
|
|
168
206
|
? merge({ styles: { strokeWidth } }, styleOverrides)
|
|
169
207
|
: {
|
|
170
208
|
styles: { fill, fillOpacity, stroke, strokeWidth, opacity },
|
|
171
|
-
classes:
|
|
209
|
+
classes: restProps.class ?? '',
|
|
172
210
|
}
|
|
173
211
|
);
|
|
174
212
|
}
|
|
175
213
|
|
|
176
214
|
// TODO: Use objectId to work around Svelte 4 reactivity issue (even when memoizing gradients)
|
|
177
|
-
|
|
178
|
-
|
|
215
|
+
const fillKey = createKey(() => fill);
|
|
216
|
+
const strokeKey = createKey(() => stroke);
|
|
179
217
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
fillKey && fillOpacity && strokeKey && strokeWidth && opacity && className;
|
|
183
|
-
canvasContext.invalidate();
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
let canvasUnregister: ReturnType<typeof canvasContext.register>;
|
|
187
|
-
$: if (renderContext === 'canvas') {
|
|
188
|
-
canvasUnregister = canvasContext.register({
|
|
218
|
+
if (renderCtx === 'canvas') {
|
|
219
|
+
registerCanvasComponent({
|
|
189
220
|
name: 'Area',
|
|
190
221
|
render,
|
|
191
222
|
events: {
|
|
192
|
-
click: onclick,
|
|
193
|
-
pointerenter: onpointerenter,
|
|
194
|
-
pointermove: onpointermove,
|
|
195
|
-
pointerleave: onpointerleave,
|
|
223
|
+
click: restProps.onclick,
|
|
224
|
+
pointerenter: restProps.onpointerenter,
|
|
225
|
+
pointermove: restProps.onpointermove,
|
|
226
|
+
pointerleave: restProps.onpointerleave,
|
|
196
227
|
},
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
228
|
+
deps: () => [
|
|
229
|
+
fillKey.current,
|
|
230
|
+
fillOpacity,
|
|
231
|
+
strokeKey.current,
|
|
232
|
+
strokeWidth,
|
|
233
|
+
opacity,
|
|
234
|
+
restProps.class,
|
|
235
|
+
tweenState.current,
|
|
236
|
+
],
|
|
201
237
|
});
|
|
202
238
|
}
|
|
203
|
-
|
|
204
|
-
onDestroy(() => {
|
|
205
|
-
if (renderContext === 'canvas') {
|
|
206
|
-
canvasUnregister();
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
239
|
</script>
|
|
210
240
|
|
|
211
241
|
{#if line}
|
|
212
|
-
<Spline
|
|
213
|
-
{data}
|
|
214
|
-
{x}
|
|
215
|
-
y={y1}
|
|
216
|
-
{curve}
|
|
217
|
-
{defined}
|
|
218
|
-
{tweened}
|
|
219
|
-
{...typeof line === 'object' ? line : null}
|
|
220
|
-
/>
|
|
242
|
+
<Spline {data} {x} y={y1} {curve} {defined} {motion} {...extractLayerProps(line, 'area-line')} />
|
|
221
243
|
{/if}
|
|
222
244
|
|
|
223
|
-
{#if
|
|
224
|
-
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
|
245
|
+
{#if renderCtx === 'svg'}
|
|
225
246
|
<path
|
|
226
|
-
d={
|
|
247
|
+
d={tweenState.current}
|
|
227
248
|
clip-path={clipPath}
|
|
228
249
|
{fill}
|
|
229
250
|
fill-opacity={fillOpacity}
|
|
230
251
|
{stroke}
|
|
231
252
|
stroke-width={strokeWidth}
|
|
232
253
|
{opacity}
|
|
233
|
-
{
|
|
234
|
-
class={cls('path-area', className)}
|
|
235
|
-
on:click={onclick}
|
|
236
|
-
on:pointerenter={onpointerenter}
|
|
237
|
-
on:pointermove={onpointermove}
|
|
238
|
-
on:pointerleave={onpointerleave}
|
|
254
|
+
{...extractLayerProps(restProps, 'area-path')}
|
|
239
255
|
/>
|
|
240
256
|
{/if}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type Area as D3Area } from 'd3-shape';
|
|
2
|
+
import type { SVGAttributes } from 'svelte/elements';
|
|
3
|
+
import type { CommonStyleProps, Without } from '../utils/types.js';
|
|
4
|
+
import type { ComponentProps } from 'svelte';
|
|
5
|
+
import { type Accessor } from '../utils/common.js';
|
|
6
|
+
export type AreaPropsWithoutHTML = {
|
|
7
|
+
/** Override data instead of using context */
|
|
8
|
+
data?: any;
|
|
9
|
+
/**
|
|
10
|
+
* Pass `<path d={...} />` explicitly instead of calculating from data / context
|
|
11
|
+
*/
|
|
12
|
+
pathData?: string | null;
|
|
13
|
+
/**
|
|
14
|
+
* Override x accessor
|
|
15
|
+
*/
|
|
16
|
+
x?: Accessor;
|
|
17
|
+
/**
|
|
18
|
+
* Override y0 accessor. Defaults to max($yRange)
|
|
19
|
+
*/
|
|
20
|
+
y0?: Accessor;
|
|
21
|
+
/**
|
|
22
|
+
* Override y1 accessor. Defaults to y accessor
|
|
23
|
+
*/
|
|
24
|
+
y1?: Accessor;
|
|
25
|
+
/**
|
|
26
|
+
* Whether to tween the interpolated path data using d3-interpolate-path
|
|
27
|
+
*/
|
|
28
|
+
motion?: MotionProp;
|
|
29
|
+
clipPath?: string;
|
|
30
|
+
curve?: CurveFactory;
|
|
31
|
+
defined?: Parameters<D3Area<any>['defined']>[0];
|
|
32
|
+
/**
|
|
33
|
+
* Enable showing line
|
|
34
|
+
*
|
|
35
|
+
* @default false
|
|
36
|
+
*/
|
|
37
|
+
line?: boolean | Partial<ComponentProps<typeof Spline>>;
|
|
38
|
+
} & CommonStyleProps;
|
|
39
|
+
export type AreaProps = AreaPropsWithoutHTML & Without<SVGAttributes<SVGPathElement>, AreaPropsWithoutHTML>;
|
|
40
|
+
import type { CurveFactory } from 'd3-shape';
|
|
41
|
+
import Spline from './Spline.svelte';
|
|
42
|
+
import { type MotionProp } from '../utils/motion.svelte.js';
|
|
43
|
+
declare const Area: import("svelte").Component<AreaProps, {}, "">;
|
|
44
|
+
type Area = ReturnType<typeof Area>;
|
|
45
|
+
export default Area;
|