layerchart 2.0.0-next.1 → 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 +21 -19
- 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,168 +1,364 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
export type PieChartExtraSnippetProps<TData> = {
|
|
3
|
+
key: Accessor<TData>;
|
|
4
|
+
label: Accessor<TData>;
|
|
5
|
+
value: Accessor<TData>;
|
|
6
|
+
visibleData: TData[];
|
|
7
|
+
getGroupProps: () => ComponentProps<typeof Group>;
|
|
8
|
+
};
|
|
9
|
+
export type PieChartPropsObjProp = Pick<
|
|
10
|
+
SimplifiedChartPropsObject,
|
|
11
|
+
'pie' | 'group' | 'arc' | 'legend' | 'canvas' | 'svg' | 'tooltip'
|
|
12
|
+
>;
|
|
13
|
+
|
|
14
|
+
export type PieChartProps<TData> = Pick<
|
|
15
|
+
SimplifiedChartProps<TData, typeof Arc, PieChartExtraSnippetProps<TData>>,
|
|
16
|
+
| 'aboveContext'
|
|
17
|
+
| 'aboveMarks'
|
|
18
|
+
| 'belowContext'
|
|
19
|
+
| 'belowMarks'
|
|
20
|
+
| 'children'
|
|
21
|
+
| 'data'
|
|
22
|
+
| 'debug'
|
|
23
|
+
| 'legend'
|
|
24
|
+
| 'marks'
|
|
25
|
+
| 'onTooltipClick'
|
|
26
|
+
| 'profile'
|
|
27
|
+
| 'renderContext'
|
|
28
|
+
| 'series'
|
|
29
|
+
| 'tooltip'
|
|
30
|
+
| 'tooltipContext'
|
|
31
|
+
| 'cRange'
|
|
32
|
+
| 'padding'
|
|
33
|
+
| 'context'
|
|
34
|
+
> & {
|
|
35
|
+
/**
|
|
36
|
+
* Key accessor
|
|
37
|
+
*
|
|
38
|
+
* @default 'key'
|
|
39
|
+
*/
|
|
40
|
+
key?: Accessor<TData>;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Label accessor
|
|
44
|
+
*
|
|
45
|
+
* @default 'label'
|
|
46
|
+
*/
|
|
47
|
+
label?: Accessor<TData>;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Value accessor
|
|
51
|
+
*
|
|
52
|
+
* @default 'value'
|
|
53
|
+
*/
|
|
54
|
+
value?: Accessor<TData>;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Color accessor
|
|
58
|
+
*
|
|
59
|
+
* @default key
|
|
60
|
+
*/
|
|
61
|
+
c?: Accessor<TData>;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Maximum possible value, useful when `data` is single item
|
|
65
|
+
*/
|
|
66
|
+
maxValue?: number;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Range [min, max] in degrees.
|
|
70
|
+
*
|
|
71
|
+
* See also `startAngle`/`endAngle`
|
|
72
|
+
*
|
|
73
|
+
* @default [0, 360]
|
|
74
|
+
*/
|
|
75
|
+
range?: [number, number];
|
|
76
|
+
|
|
77
|
+
props?: PieChartPropsObjProp;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Inner radius of the arc.
|
|
81
|
+
* value >= 1: discrete value
|
|
82
|
+
* value > 0: percent of `outerRadius`
|
|
83
|
+
* value < 0: offset of `outerRadius`
|
|
84
|
+
*/
|
|
85
|
+
innerRadius?: number;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Outer radius of the arc.
|
|
89
|
+
*/
|
|
90
|
+
outerRadius?: number;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Corner radius of the arc
|
|
94
|
+
*
|
|
95
|
+
* @default 0
|
|
96
|
+
*/
|
|
97
|
+
cornerRadius?: number;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Angle between the arcs
|
|
101
|
+
*
|
|
102
|
+
* @default 0
|
|
103
|
+
*/
|
|
104
|
+
padAngle?: number;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Placement of the PieChart
|
|
108
|
+
*
|
|
109
|
+
* @default 'center'
|
|
110
|
+
*/
|
|
111
|
+
placement?: 'left' | 'center' | 'right';
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Center the chart.
|
|
115
|
+
*
|
|
116
|
+
* Override and use `props.group` for more control.
|
|
117
|
+
*
|
|
118
|
+
* @default placement === 'center'
|
|
119
|
+
*/
|
|
120
|
+
center?: boolean;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Replace the default rendering of the `<Pie>` component internally with your own.
|
|
124
|
+
*
|
|
125
|
+
* Use the `props` snippet prop to access the default props.
|
|
126
|
+
*/
|
|
127
|
+
pie?: SimplifiedChartSnippet<
|
|
128
|
+
TData,
|
|
129
|
+
typeof Arc,
|
|
130
|
+
PieChartExtraSnippetProps<TData> & {
|
|
131
|
+
/**
|
|
132
|
+
* Default props to apply to the Pie component.
|
|
133
|
+
*/
|
|
134
|
+
props: ComponentProps<typeof Pie>;
|
|
135
|
+
/**
|
|
136
|
+
* The index of the pie series currently being iterated over.
|
|
137
|
+
*/
|
|
138
|
+
index: number;
|
|
139
|
+
}
|
|
140
|
+
>;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Replace the default rendering of the `<Arc>` component internally with your own.
|
|
144
|
+
*
|
|
145
|
+
* Use the `props` snippet prop to access the default props.
|
|
146
|
+
*/
|
|
147
|
+
arc?: SimplifiedChartSnippet<
|
|
148
|
+
TData,
|
|
149
|
+
typeof Arc,
|
|
150
|
+
PieChartExtraSnippetProps<TData> & {
|
|
151
|
+
props: ComponentProps<typeof Arc>;
|
|
152
|
+
/**
|
|
153
|
+
* The index of the arc currently being iterated over
|
|
154
|
+
*/
|
|
155
|
+
index: number;
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* The index of the series currently being iterated over.
|
|
159
|
+
*/
|
|
160
|
+
seriesIndex: number;
|
|
161
|
+
}
|
|
162
|
+
>;
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* A callback function triggered when the arc is clicked.
|
|
166
|
+
*/
|
|
167
|
+
onArcClick?: (
|
|
168
|
+
e: MouseEvent,
|
|
169
|
+
detail: { data: any; series: SeriesData<TData, typeof Arc> }
|
|
170
|
+
) => void;
|
|
171
|
+
};
|
|
172
|
+
</script>
|
|
173
|
+
|
|
1
174
|
<script lang="ts" generics="TData">
|
|
2
|
-
import { onMount, type ComponentProps } from 'svelte';
|
|
3
|
-
import { sum } from 'd3-array';
|
|
175
|
+
import { onMount, type ComponentProps, type Snippet } from 'svelte';
|
|
4
176
|
import { format } from '@layerstack/utils';
|
|
5
177
|
import { cls } from '@layerstack/tailwind';
|
|
6
|
-
import {
|
|
178
|
+
import { SelectionState } from '@layerstack/svelte-state';
|
|
179
|
+
import type { PieArcDatum } from 'd3-shape';
|
|
7
180
|
|
|
8
181
|
import Arc from '../Arc.svelte';
|
|
9
|
-
import Canvas from '../layout/Canvas.svelte';
|
|
10
182
|
import Chart from '../Chart.svelte';
|
|
11
183
|
import Group from '../Group.svelte';
|
|
184
|
+
import Layer from '../layout/Layer.svelte';
|
|
12
185
|
import Legend from '../Legend.svelte';
|
|
13
186
|
import Pie from '../Pie.svelte';
|
|
14
|
-
import Svg from '../layout/Svg.svelte';
|
|
15
187
|
import * as Tooltip from '../tooltip/index.js';
|
|
16
188
|
|
|
17
189
|
import { accessor, chartDataArray, type Accessor } from '../../utils/common.js';
|
|
18
190
|
import { asAny } from '../../utils/types.js';
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
191
|
+
import type {
|
|
192
|
+
SeriesData,
|
|
193
|
+
SimplifiedChartProps,
|
|
194
|
+
SimplifiedChartPropsObject,
|
|
195
|
+
SimplifiedChartSnippet,
|
|
196
|
+
} from './types.js';
|
|
197
|
+
import { HighlightKey } from './utils.svelte.js';
|
|
198
|
+
import { setTooltipMetaContext } from '../tooltip/tooltipMetaContext.js';
|
|
199
|
+
|
|
200
|
+
let {
|
|
201
|
+
data = [],
|
|
202
|
+
key = 'key',
|
|
203
|
+
label = 'label',
|
|
204
|
+
value = 'value',
|
|
205
|
+
range = [0, 360],
|
|
206
|
+
c = key,
|
|
207
|
+
innerRadius,
|
|
208
|
+
outerRadius,
|
|
209
|
+
cornerRadius = 0,
|
|
210
|
+
padAngle = 0,
|
|
211
|
+
placement = 'center',
|
|
212
|
+
maxValue,
|
|
213
|
+
center = placement === 'center',
|
|
214
|
+
series: seriesProp,
|
|
215
|
+
legend = false,
|
|
216
|
+
onArcClick = () => {},
|
|
217
|
+
// TODO: Not usable with manual tooltip / arc path. Use `onArcClick`?
|
|
218
|
+
/** Event dispatched with current tooltip data */
|
|
219
|
+
onTooltipClick = () => {},
|
|
220
|
+
props = {},
|
|
221
|
+
renderContext = 'svg',
|
|
222
|
+
profile = false,
|
|
223
|
+
debug = false,
|
|
224
|
+
tooltip = true,
|
|
225
|
+
children: childrenProp,
|
|
226
|
+
aboveContext,
|
|
227
|
+
belowContext,
|
|
228
|
+
belowMarks,
|
|
229
|
+
aboveMarks,
|
|
230
|
+
marks,
|
|
231
|
+
pie,
|
|
232
|
+
arc,
|
|
233
|
+
context = $bindable(),
|
|
234
|
+
...restProps
|
|
235
|
+
}: PieChartProps<TData> = $props();
|
|
236
|
+
|
|
237
|
+
const series = $derived(
|
|
238
|
+
seriesProp === undefined ? [{ key: 'default', value: value }] : seriesProp
|
|
239
|
+
);
|
|
240
|
+
|
|
241
|
+
const keyAccessor = $derived(accessor(key));
|
|
242
|
+
const labelAccessor = $derived(accessor(label));
|
|
243
|
+
const valueAccessor = $derived(accessor(value));
|
|
244
|
+
const cAccessor = $derived(accessor(c));
|
|
245
|
+
|
|
246
|
+
const allSeriesData = $derived(
|
|
247
|
+
series
|
|
248
|
+
.flatMap((s) => s.data?.map((d) => ({ seriesKey: s.key, ...d })))
|
|
249
|
+
.filter((d) => d) as Array<TData>
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
const chartData = $derived(
|
|
253
|
+
allSeriesData.length ? allSeriesData : chartDataArray(data)
|
|
254
|
+
) as Array<TData>;
|
|
255
|
+
|
|
256
|
+
const seriesColors = $derived(series.map((s) => s.color).filter((d) => d != null));
|
|
257
|
+
|
|
258
|
+
const highlightKey = new HighlightKey<TData, typeof Arc>();
|
|
259
|
+
const selectedKeys = new SelectionState();
|
|
260
|
+
const selectedSeries = new SelectionState();
|
|
261
|
+
|
|
262
|
+
const visibleData = $derived(
|
|
263
|
+
chartData.filter((d) => {
|
|
264
|
+
const dataKey = keyAccessor(d);
|
|
265
|
+
return selectedKeys.isEmpty() || selectedKeys.isSelected(dataKey);
|
|
266
|
+
})
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
// TODO: note, I added this because it wasn't consistent with all the other charts
|
|
270
|
+
// unsure if it is correct but will validate with Sean
|
|
271
|
+
const visibleSeries = $derived(
|
|
272
|
+
series.filter((s) => selectedSeries.isEmpty() || selectedSeries.isSelected(s.key))
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
function getLegendProps(): ComponentProps<typeof Legend> {
|
|
276
|
+
return {
|
|
277
|
+
tickFormat: (tick) => {
|
|
278
|
+
const item = chartData.find((d) => keyAccessor(d) === tick);
|
|
279
|
+
return item ? (labelAccessor(item) ?? tick) : tick;
|
|
280
|
+
},
|
|
281
|
+
placement: 'bottom',
|
|
282
|
+
variant: 'swatches',
|
|
283
|
+
onclick: (e, item) => {
|
|
284
|
+
selectedKeys.toggleSelected(item.value);
|
|
285
|
+
// TODO: investigate
|
|
286
|
+
// selectedSeries.toggleSelected(item.value);
|
|
287
|
+
},
|
|
288
|
+
onpointerenter: (e, item) => (highlightKey.current = item.value),
|
|
289
|
+
onpointerleave: (e) => (highlightKey.current = null),
|
|
290
|
+
...props.legend,
|
|
291
|
+
...(typeof legend === 'object' ? legend : null),
|
|
292
|
+
classes: {
|
|
293
|
+
item: (item) =>
|
|
294
|
+
visibleData.length && !visibleData.some((d) => keyAccessor(d) === item.value)
|
|
295
|
+
? 'opacity-50'
|
|
296
|
+
: '',
|
|
297
|
+
...props.legend?.classes,
|
|
298
|
+
...(typeof legend === 'object' ? legend.classes : null),
|
|
299
|
+
},
|
|
300
|
+
};
|
|
40
301
|
}
|
|
41
302
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
export let value: Accessor<TData> = 'value';
|
|
54
|
-
$: valueAccessor = accessor(value);
|
|
55
|
-
|
|
56
|
-
/** Color accessor*/
|
|
57
|
-
export let c: Accessor<TData> = key;
|
|
58
|
-
$: cAccessor = accessor(c);
|
|
59
|
-
|
|
60
|
-
/** Maximum possible value, useful when `data` is single item */
|
|
61
|
-
export let maxValue: number | undefined = undefined;
|
|
62
|
-
|
|
63
|
-
export let series: {
|
|
64
|
-
key: string | number;
|
|
65
|
-
label?: string;
|
|
66
|
-
value?: Accessor<TData>;
|
|
67
|
-
/** Provider series data, else uses chart data (with value/key accessor) */
|
|
68
|
-
data?: TData[];
|
|
69
|
-
/** Maximum possible value, useful when `data` is single item */
|
|
70
|
-
maxValue?: number;
|
|
71
|
-
color?: string;
|
|
72
|
-
props?: Partial<ComponentProps<Arc>>;
|
|
73
|
-
}[] = [{ key: 'default', value: value /*, color: 'var(--color-primary)'*/ }];
|
|
74
|
-
|
|
75
|
-
export let legend: ComponentProps<Legend> | boolean = false;
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Range [min,max] in degrees. See also startAngle/endAngle
|
|
79
|
-
*/
|
|
80
|
-
export let range = [0, 360];
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Define innerRadius.
|
|
84
|
-
* value >= 1: discrete value
|
|
85
|
-
* value > 0: percent of `outerRadius`
|
|
86
|
-
* value < 0: offset of `outerRadius`
|
|
87
|
-
* default: yRange min
|
|
88
|
-
*/
|
|
89
|
-
export let innerRadius: number | undefined = undefined;
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Define outerRadius. Defaults to yRange max/2 (ie. chart height / 2)
|
|
93
|
-
*/
|
|
94
|
-
export let outerRadius: number | undefined = undefined;
|
|
95
|
-
|
|
96
|
-
export let cornerRadius = 0;
|
|
97
|
-
export let padAngle = 0;
|
|
98
|
-
|
|
99
|
-
/** Placement of PieChart (default: 'center') */
|
|
100
|
-
export let placement: 'left' | 'center' | 'right' = 'center';
|
|
101
|
-
|
|
102
|
-
/** Center chart. Override and use `props.group` for more control */
|
|
103
|
-
export let center = placement === 'center';
|
|
104
|
-
|
|
105
|
-
/** Expose tooltip context for external access */
|
|
106
|
-
export let tooltipContext: ComponentProps<Tooltip.Context>['tooltip'] = undefined;
|
|
107
|
-
|
|
108
|
-
// TODO: Not usable with manual tooltip / arc path. Use `onarcclick`?
|
|
109
|
-
/** Event dispatched with current tooltip data */
|
|
110
|
-
export let ontooltipclick: (e: MouseEvent, detail: { data: any }) => void = () => {};
|
|
111
|
-
|
|
112
|
-
/** Event dispatched when individual Arc is clicked (useful with multiple series) */
|
|
113
|
-
export let onarcclick: (
|
|
114
|
-
e: MouseEvent,
|
|
115
|
-
detail: { data: any; series: (typeof series)[number] }
|
|
116
|
-
) => void = () => {};
|
|
117
|
-
|
|
118
|
-
export let props: {
|
|
119
|
-
pie?: Partial<ComponentProps<Pie>>;
|
|
120
|
-
group?: Partial<ComponentProps<Group>>;
|
|
121
|
-
arc?: Partial<ComponentProps<Arc>>;
|
|
122
|
-
legend?: Partial<ComponentProps<Legend>>;
|
|
123
|
-
canvas?: Partial<ComponentProps<Canvas>>;
|
|
124
|
-
svg?: Partial<ComponentProps<Svg>>;
|
|
125
|
-
tooltip?: {
|
|
126
|
-
context?: Partial<ComponentProps<Tooltip.Context>>;
|
|
127
|
-
root?: Partial<ComponentProps<Tooltip.Root>>;
|
|
128
|
-
header?: Partial<ComponentProps<Tooltip.Header>>;
|
|
129
|
-
list?: Partial<ComponentProps<Tooltip.List>>;
|
|
130
|
-
item?: Partial<ComponentProps<Tooltip.Item>>;
|
|
131
|
-
separator?: Partial<ComponentProps<Tooltip.Separator>>;
|
|
303
|
+
function getGroupProps(): ComponentProps<typeof Group> {
|
|
304
|
+
if (!context) return {};
|
|
305
|
+
return {
|
|
306
|
+
x:
|
|
307
|
+
placement === 'left'
|
|
308
|
+
? context.height / 2
|
|
309
|
+
: placement === 'right'
|
|
310
|
+
? context.width - context.height / 2
|
|
311
|
+
: undefined,
|
|
312
|
+
center: ['left', 'right'].includes(placement) ? 'y' : undefined,
|
|
313
|
+
...props.group,
|
|
132
314
|
};
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
export let renderContext: 'svg' | 'canvas' = 'svg';
|
|
136
|
-
|
|
137
|
-
/** Log initial render performance using `console.time` */
|
|
138
|
-
export let profile = false;
|
|
139
|
-
|
|
140
|
-
/** Enable debug mode */
|
|
141
|
-
export let debug = false;
|
|
142
|
-
|
|
143
|
-
$: allSeriesData = series
|
|
144
|
-
.flatMap((s) => s.data?.map((d) => ({ seriesKey: s.key, ...d })))
|
|
145
|
-
.filter((d) => d) as Array<TData>;
|
|
146
|
-
|
|
147
|
-
$: chartData = (allSeriesData.length ? allSeriesData : chartDataArray(data)) as Array<TData>;
|
|
148
|
-
|
|
149
|
-
$: seriesColors = series.map((s) => s.color).filter((d) => d != null);
|
|
150
|
-
|
|
151
|
-
let highlightKey: (typeof series)[number]['key'] | null = null;
|
|
315
|
+
}
|
|
152
316
|
|
|
153
|
-
function
|
|
154
|
-
|
|
317
|
+
function getPieProps(s: SeriesData<TData, typeof Arc>, i: number): ComponentProps<typeof Pie> {
|
|
318
|
+
return {
|
|
319
|
+
data: s.data,
|
|
320
|
+
range,
|
|
321
|
+
innerRadius,
|
|
322
|
+
outerRadius,
|
|
323
|
+
cornerRadius,
|
|
324
|
+
padAngle,
|
|
325
|
+
...props.pie,
|
|
326
|
+
};
|
|
155
327
|
}
|
|
156
328
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
329
|
+
function getArcProps(
|
|
330
|
+
s: SeriesData<TData, typeof Arc>,
|
|
331
|
+
seriesIndex: number,
|
|
332
|
+
arc: PieArcDatum<any>,
|
|
333
|
+
arcIndex: number
|
|
334
|
+
): ComponentProps<typeof Arc> {
|
|
335
|
+
if (!context) return {};
|
|
336
|
+
const arcDataProps =
|
|
337
|
+
'props' in arc.data && typeof arc.data.props === 'object' ? arc.data.props : {};
|
|
338
|
+
return {
|
|
339
|
+
startAngle: arc.startAngle,
|
|
340
|
+
endAngle: arc.endAngle,
|
|
341
|
+
outerRadius: visibleSeries.length > 1 ? seriesIndex * (outerRadius ?? 0) : outerRadius,
|
|
342
|
+
innerRadius,
|
|
343
|
+
cornerRadius,
|
|
344
|
+
padAngle,
|
|
345
|
+
fill: context.cScale?.(context.c(arc.data)),
|
|
346
|
+
data: arc.data,
|
|
347
|
+
tooltipContext: context.tooltip,
|
|
348
|
+
onclick: (e) => {
|
|
349
|
+
onArcClick(e, { data: arc.data, series: s });
|
|
350
|
+
// Workaround for `tooltip={{ mode: 'manual' }}
|
|
351
|
+
onTooltipClick(e, { data: arc.data });
|
|
352
|
+
},
|
|
353
|
+
class: cls(
|
|
354
|
+
'transition-opacity',
|
|
355
|
+
highlightKey.current && highlightKey.current !== keyAccessor(arc.data) && 'opacity-50'
|
|
356
|
+
),
|
|
357
|
+
...props.arc,
|
|
358
|
+
...s.props,
|
|
359
|
+
...arcDataProps,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
166
362
|
|
|
167
363
|
if (profile) {
|
|
168
364
|
console.time('PieChart render');
|
|
@@ -170,13 +366,34 @@
|
|
|
170
366
|
console.timeEnd('PieChart render');
|
|
171
367
|
});
|
|
172
368
|
}
|
|
369
|
+
|
|
370
|
+
setTooltipMetaContext({
|
|
371
|
+
type: 'pie',
|
|
372
|
+
get color() {
|
|
373
|
+
return c;
|
|
374
|
+
},
|
|
375
|
+
get value() {
|
|
376
|
+
return value;
|
|
377
|
+
},
|
|
378
|
+
get label() {
|
|
379
|
+
return label;
|
|
380
|
+
},
|
|
381
|
+
get key() {
|
|
382
|
+
return key;
|
|
383
|
+
},
|
|
384
|
+
get visibleSeries() {
|
|
385
|
+
return visibleSeries;
|
|
386
|
+
},
|
|
387
|
+
});
|
|
173
388
|
</script>
|
|
174
389
|
|
|
390
|
+
<!-- svelte-ignore ownership_invalid_binding -->
|
|
175
391
|
<Chart
|
|
392
|
+
bind:context
|
|
176
393
|
data={visibleData}
|
|
177
394
|
x={value}
|
|
178
395
|
y={key}
|
|
179
|
-
{
|
|
396
|
+
c={key}
|
|
180
397
|
cDomain={chartData.map(keyAccessor)}
|
|
181
398
|
cRange={seriesColors.length
|
|
182
399
|
? seriesColors
|
|
@@ -191,176 +408,101 @@
|
|
|
191
408
|
'var(--color-danger)',
|
|
192
409
|
]}
|
|
193
410
|
padding={{ bottom: legend === true ? 32 : 0 }}
|
|
194
|
-
{
|
|
195
|
-
tooltip={props.tooltip?.context}
|
|
196
|
-
bind:tooltipContext
|
|
197
|
-
let:x
|
|
198
|
-
let:xScale
|
|
199
|
-
let:y
|
|
200
|
-
let:c
|
|
201
|
-
let:cScale
|
|
202
|
-
let:yScale
|
|
203
|
-
let:width
|
|
204
|
-
let:height
|
|
205
|
-
let:padding
|
|
206
|
-
let:tooltip
|
|
411
|
+
{...restProps}
|
|
412
|
+
tooltip={tooltip === false ? false : props.tooltip?.context}
|
|
207
413
|
>
|
|
208
|
-
{
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
414
|
+
{#snippet children({ context })}
|
|
415
|
+
{@const snippetProps = {
|
|
416
|
+
label: labelAccessor,
|
|
417
|
+
key: keyAccessor,
|
|
418
|
+
value: valueAccessor,
|
|
419
|
+
color: cAccessor,
|
|
420
|
+
context,
|
|
421
|
+
series,
|
|
422
|
+
visibleSeries,
|
|
423
|
+
visibleData,
|
|
424
|
+
highlightKey: highlightKey.current,
|
|
425
|
+
setHighlightKey: highlightKey.set,
|
|
426
|
+
getLegendProps,
|
|
427
|
+
getGroupProps,
|
|
428
|
+
}}
|
|
429
|
+
{#if childrenProp}
|
|
430
|
+
{@render childrenProp(snippetProps)}
|
|
431
|
+
{:else}
|
|
432
|
+
{@render belowContext?.(snippetProps)}
|
|
433
|
+
|
|
434
|
+
<Layer
|
|
435
|
+
type={renderContext}
|
|
436
|
+
{...asAny(renderContext === 'canvas' ? props.canvas : props.svg)}
|
|
437
|
+
{center}
|
|
438
|
+
{debug}
|
|
439
|
+
>
|
|
440
|
+
{@render belowMarks?.(snippetProps)}
|
|
441
|
+
|
|
442
|
+
{#if typeof marks === 'function'}
|
|
443
|
+
{@render marks(snippetProps)}
|
|
444
|
+
{:else}
|
|
445
|
+
<Group {...getGroupProps()}>
|
|
446
|
+
{#each visibleSeries as s, seriesIdx (s.key)}
|
|
447
|
+
{#if typeof pie === 'function'}
|
|
448
|
+
{@render pie({
|
|
449
|
+
...snippetProps,
|
|
450
|
+
props: getPieProps(s, seriesIdx),
|
|
451
|
+
index: seriesIdx,
|
|
452
|
+
})}
|
|
453
|
+
{:else}
|
|
454
|
+
<Pie {...getPieProps(s, seriesIdx)}>
|
|
455
|
+
{#snippet children({ arcs })}
|
|
456
|
+
{#each arcs as arcData, arcIdx (`${seriesIdx}-${arcIdx}`)}
|
|
457
|
+
{@const arcProps = getArcProps(s, seriesIdx, arcData, arcIdx)}
|
|
458
|
+
{#if typeof arc === 'function'}
|
|
459
|
+
{@render arc({
|
|
460
|
+
...snippetProps,
|
|
461
|
+
props: arcProps,
|
|
462
|
+
index: arcIdx,
|
|
463
|
+
seriesIndex: seriesIdx,
|
|
464
|
+
})}
|
|
465
|
+
{:else}
|
|
466
|
+
<Arc {...arcProps} />
|
|
467
|
+
{/if}
|
|
468
|
+
{/each}
|
|
469
|
+
{/snippet}
|
|
470
|
+
</Pie>
|
|
471
|
+
{/if}
|
|
472
|
+
{/each}
|
|
473
|
+
</Group>
|
|
474
|
+
{/if}
|
|
475
|
+
|
|
476
|
+
{@render aboveMarks?.(snippetProps)}
|
|
477
|
+
</Layer>
|
|
478
|
+
|
|
479
|
+
{@render aboveContext?.(snippetProps)}
|
|
480
|
+
|
|
481
|
+
{#if typeof legend === 'function'}
|
|
482
|
+
{@render legend(snippetProps)}
|
|
483
|
+
{:else if legend}
|
|
484
|
+
<Legend {...getLegendProps()} />
|
|
485
|
+
{/if}
|
|
486
|
+
|
|
487
|
+
{#if typeof tooltip === 'function'}
|
|
488
|
+
{@render tooltip(snippetProps)}
|
|
489
|
+
{:else if tooltip}
|
|
490
|
+
<Tooltip.Root {context} {...props.tooltip?.root}>
|
|
491
|
+
{#snippet children({ data })}
|
|
492
|
+
<Tooltip.List {...props.tooltip?.list}>
|
|
493
|
+
<Tooltip.Item
|
|
494
|
+
label={labelAccessor(data) || keyAccessor(data)}
|
|
495
|
+
value={valueAccessor(data)}
|
|
496
|
+
color={context.cScale?.(context.c(data))}
|
|
497
|
+
{format}
|
|
498
|
+
onpointerenter={() => (highlightKey.current = keyAccessor(data))}
|
|
499
|
+
onpointerleave={() => (highlightKey.current = null)}
|
|
500
|
+
{...props.tooltip?.item}
|
|
277
501
|
/>
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
{range}
|
|
282
|
-
{innerRadius}
|
|
283
|
-
{outerRadius}
|
|
284
|
-
{cornerRadius}
|
|
285
|
-
{padAngle}
|
|
286
|
-
{...props.pie}
|
|
287
|
-
let:arcs
|
|
288
|
-
>
|
|
289
|
-
{#each arcs as arc}
|
|
290
|
-
<Arc
|
|
291
|
-
startAngle={arc.startAngle}
|
|
292
|
-
endAngle={arc.endAngle}
|
|
293
|
-
outerRadius={series.length > 1 ? i * (outerRadius ?? 0) : outerRadius}
|
|
294
|
-
{innerRadius}
|
|
295
|
-
{cornerRadius}
|
|
296
|
-
{padAngle}
|
|
297
|
-
fill={cScale?.(c(arc.data))}
|
|
298
|
-
data={arc.data}
|
|
299
|
-
{tooltip}
|
|
300
|
-
onclick={(e) => {
|
|
301
|
-
onarcclick(e, { data: arc.data, series: s });
|
|
302
|
-
// Workaround for `tooltip={{ mode: 'manual' }}
|
|
303
|
-
ontooltipclick(e, { data: arc.data });
|
|
304
|
-
}}
|
|
305
|
-
class={cls(
|
|
306
|
-
'transition-opacity',
|
|
307
|
-
highlightKey && highlightKey !== keyAccessor(arc.data) && 'opacity-50'
|
|
308
|
-
)}
|
|
309
|
-
{...props.arc}
|
|
310
|
-
{...s.props}
|
|
311
|
-
/>
|
|
312
|
-
{/each}
|
|
313
|
-
</Pie>
|
|
314
|
-
{/if}
|
|
315
|
-
{/each}
|
|
316
|
-
</Group>
|
|
317
|
-
</slot>
|
|
318
|
-
|
|
319
|
-
<slot name="aboveMarks" {...slotProps} />
|
|
320
|
-
</svelte:component>
|
|
321
|
-
|
|
322
|
-
<slot name="aboveContext" {...slotProps} />
|
|
323
|
-
|
|
324
|
-
<slot name="legend" {...slotProps}>
|
|
325
|
-
{#if legend}
|
|
326
|
-
<Legend
|
|
327
|
-
tickFormat={(tick) => {
|
|
328
|
-
const item = chartData.find((d) => keyAccessor(d) === tick);
|
|
329
|
-
return item ? (labelAccessor(item) ?? tick) : tick;
|
|
330
|
-
}}
|
|
331
|
-
placement="bottom"
|
|
332
|
-
variant="swatches"
|
|
333
|
-
onclick={(e, item) => $selectedKeys.toggleSelected(item.value)}
|
|
334
|
-
onpointerenter={(e, item) => (highlightKey = item.value)}
|
|
335
|
-
onpointerleave={(e) => (highlightKey = null)}
|
|
336
|
-
{...props.legend}
|
|
337
|
-
{...typeof legend === 'object' ? legend : null}
|
|
338
|
-
classes={{
|
|
339
|
-
item: (item) =>
|
|
340
|
-
visibleData.length && !visibleData.some((d) => keyAccessor(d) === item.value)
|
|
341
|
-
? 'opacity-50'
|
|
342
|
-
: '',
|
|
343
|
-
...props.legend?.classes,
|
|
344
|
-
...(typeof legend === 'object' ? legend.classes : null),
|
|
345
|
-
}}
|
|
346
|
-
/>
|
|
502
|
+
</Tooltip.List>
|
|
503
|
+
{/snippet}
|
|
504
|
+
</Tooltip.Root>
|
|
347
505
|
{/if}
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
<slot name="tooltip" {...slotProps}>
|
|
351
|
-
<Tooltip.Root {...props.tooltip?.root} let:data>
|
|
352
|
-
<Tooltip.List {...props.tooltip?.list}>
|
|
353
|
-
<Tooltip.Item
|
|
354
|
-
label={labelAccessor(data) || keyAccessor(data)}
|
|
355
|
-
value={valueAccessor(data)}
|
|
356
|
-
color={cScale?.(c(data))}
|
|
357
|
-
{format}
|
|
358
|
-
onpointerenter={() => (highlightKey = keyAccessor(data))}
|
|
359
|
-
onpointerleave={() => (highlightKey = null)}
|
|
360
|
-
{...props.tooltip?.item}
|
|
361
|
-
/>
|
|
362
|
-
</Tooltip.List>
|
|
363
|
-
</Tooltip.Root>
|
|
364
|
-
</slot>
|
|
365
|
-
</slot>
|
|
506
|
+
{/if}
|
|
507
|
+
{/snippet}
|
|
366
508
|
</Chart>
|