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.
Files changed (266) hide show
  1. package/dist/actions/movable.d.ts +28 -0
  2. package/dist/actions/movable.js +91 -0
  3. package/dist/components/AnnotationLine.svelte +155 -0
  4. package/dist/components/AnnotationLine.svelte.d.ts +28 -0
  5. package/dist/components/AnnotationPoint.svelte +121 -0
  6. package/dist/components/AnnotationPoint.svelte.d.ts +32 -0
  7. package/dist/components/AnnotationRange.svelte +147 -0
  8. package/dist/components/AnnotationRange.svelte.d.ts +40 -0
  9. package/dist/components/Arc.svelte +344 -151
  10. package/dist/components/Arc.svelte.d.ts +138 -0
  11. package/dist/components/Area.svelte +165 -149
  12. package/dist/components/Area.svelte.d.ts +45 -0
  13. package/dist/components/Axis.svelte +287 -174
  14. package/dist/components/Axis.svelte.d.ts +116 -0
  15. package/dist/components/Bar.svelte +163 -107
  16. package/dist/components/Bar.svelte.d.ts +48 -0
  17. package/dist/components/Bars.svelte +54 -68
  18. package/dist/components/Bars.svelte.d.ts +27 -0
  19. package/dist/components/Blur.svelte +31 -7
  20. package/dist/components/Blur.svelte.d.ts +23 -21
  21. package/dist/components/Bounds.svelte +49 -19
  22. package/dist/components/Bounds.svelte.d.ts +24 -50
  23. package/dist/components/BrushContext.svelte +296 -168
  24. package/dist/components/BrushContext.svelte.d.ts +97 -65
  25. package/dist/components/Calendar.svelte +116 -59
  26. package/dist/components/Calendar.svelte.d.ts +50 -31
  27. package/dist/components/Chart.svelte +1289 -398
  28. package/dist/components/Chart.svelte.d.ts +535 -410
  29. package/dist/components/ChartClipPath.svelte +37 -15
  30. package/dist/components/ChartClipPath.svelte.d.ts +21 -19
  31. package/dist/components/Circle.svelte +124 -85
  32. package/dist/components/Circle.svelte.d.ts +52 -0
  33. package/dist/components/CircleClipPath.svelte +76 -16
  34. package/dist/components/CircleClipPath.svelte.d.ts +46 -0
  35. package/dist/components/ClipPath.svelte +60 -15
  36. package/dist/components/ClipPath.svelte.d.ts +40 -27
  37. package/dist/components/ColorRamp.svelte +75 -9
  38. package/dist/components/ColorRamp.svelte.d.ts +37 -19
  39. package/dist/components/ComputedStyles.svelte +17 -5
  40. package/dist/components/ComputedStyles.svelte.d.ts +11 -19
  41. package/dist/components/Connector.svelte +149 -0
  42. package/dist/components/Connector.svelte.d.ts +51 -0
  43. package/dist/components/Dagre.svelte +211 -122
  44. package/dist/components/Dagre.svelte.d.ts +119 -56
  45. package/dist/components/ForceSimulation.svelte +215 -90
  46. package/dist/components/ForceSimulation.svelte.d.ts +82 -35
  47. package/dist/components/Frame.svelte +33 -13
  48. package/dist/components/Frame.svelte.d.ts +13 -17
  49. package/dist/components/GeoCircle.svelte +29 -16
  50. package/dist/components/GeoCircle.svelte.d.ts +22 -24
  51. package/dist/components/GeoContext.svelte +113 -72
  52. package/dist/components/GeoContext.svelte.d.ts +49 -41
  53. package/dist/components/GeoEdgeFade.svelte +47 -12
  54. package/dist/components/GeoEdgeFade.svelte.d.ts +17 -19
  55. package/dist/components/GeoPath.svelte +157 -127
  56. package/dist/components/GeoPath.svelte.d.ts +48 -36
  57. package/dist/components/GeoPoint.svelte +52 -20
  58. package/dist/components/GeoPoint.svelte.d.ts +25 -22
  59. package/dist/components/GeoSpline.svelte +75 -26
  60. package/dist/components/GeoSpline.svelte.d.ts +29 -20
  61. package/dist/components/GeoTile.svelte +100 -49
  62. package/dist/components/GeoTile.svelte.d.ts +38 -23
  63. package/dist/components/GeoVisible.svelte +17 -9
  64. package/dist/components/GeoVisible.svelte.d.ts +10 -18
  65. package/dist/components/Graticule.svelte +28 -13
  66. package/dist/components/Graticule.svelte.d.ts +11 -52
  67. package/dist/components/Grid.svelte +226 -114
  68. package/dist/components/Grid.svelte.d.ts +70 -0
  69. package/dist/components/Group.svelte +132 -105
  70. package/dist/components/Group.svelte.d.ts +53 -0
  71. package/dist/components/Highlight.svelte +409 -307
  72. package/dist/components/Highlight.svelte.d.ts +107 -0
  73. package/dist/components/Hull.svelte +96 -45
  74. package/dist/components/Hull.svelte.d.ts +40 -30
  75. package/dist/components/Labels.svelte +125 -46
  76. package/dist/components/Labels.svelte.d.ts +70 -27
  77. package/dist/components/Legend.svelte +374 -190
  78. package/dist/components/Legend.svelte.d.ts +95 -44
  79. package/dist/components/Line.svelte +163 -125
  80. package/dist/components/Line.svelte.d.ts +75 -0
  81. package/dist/components/LinearGradient.svelte +153 -78
  82. package/dist/components/LinearGradient.svelte.d.ts +66 -31
  83. package/dist/components/Link.svelte +160 -104
  84. package/dist/components/Link.svelte.d.ts +54 -0
  85. package/dist/components/Marker.svelte +100 -39
  86. package/dist/components/Marker.svelte.d.ts +59 -27
  87. package/dist/components/MarkerWrapper.svelte +35 -0
  88. package/dist/components/MarkerWrapper.svelte.d.ts +18 -0
  89. package/dist/components/MonthPath.svelte +65 -20
  90. package/dist/components/MonthPath.svelte.d.ts +23 -17
  91. package/dist/components/MotionPath.svelte +80 -24
  92. package/dist/components/MotionPath.svelte.d.ts +46 -27
  93. package/dist/components/Pack.svelte +53 -17
  94. package/dist/components/Pack.svelte.d.ts +42 -21
  95. package/dist/components/Partition.svelte +64 -22
  96. package/dist/components/Partition.svelte.d.ts +49 -26
  97. package/dist/components/Pattern.svelte +297 -11
  98. package/dist/components/Pattern.svelte.d.ts +103 -19
  99. package/dist/components/Pie.svelte +122 -76
  100. package/dist/components/Pie.svelte.d.ts +65 -51
  101. package/dist/components/Point.svelte +20 -9
  102. package/dist/components/Point.svelte.d.ts +16 -20
  103. package/dist/components/Points.svelte +148 -137
  104. package/dist/components/Points.svelte.d.ts +45 -34
  105. package/dist/components/RadialGradient.svelte +143 -70
  106. package/dist/components/RadialGradient.svelte.d.ts +69 -31
  107. package/dist/components/Rect.svelte +121 -102
  108. package/dist/components/Rect.svelte.d.ts +36 -0
  109. package/dist/components/RectClipPath.svelte +82 -18
  110. package/dist/components/RectClipPath.svelte.d.ts +55 -0
  111. package/dist/components/Rule.svelte +105 -62
  112. package/dist/components/Rule.svelte.d.ts +40 -19
  113. package/dist/components/Sankey.svelte +132 -55
  114. package/dist/components/Sankey.svelte.d.ts +61 -31
  115. package/dist/components/Spline.svelte +281 -218
  116. package/dist/components/Spline.svelte.d.ts +95 -0
  117. package/dist/components/Text.svelte +437 -176
  118. package/dist/components/Text.svelte.d.ts +130 -0
  119. package/dist/components/Threshold.svelte +48 -16
  120. package/dist/components/Threshold.svelte.d.ts +29 -31
  121. package/dist/components/TileImage.svelte +103 -30
  122. package/dist/components/TileImage.svelte.d.ts +48 -23
  123. package/dist/components/TransformContext.svelte +365 -171
  124. package/dist/components/TransformControls.svelte +50 -26
  125. package/dist/components/TransformControls.svelte.d.ts +27 -19
  126. package/dist/components/Tree.svelte +74 -33
  127. package/dist/components/Tree.svelte.d.ts +42 -30
  128. package/dist/components/Treemap.svelte +119 -42
  129. package/dist/components/Treemap.svelte.d.ts +75 -27
  130. package/dist/components/Voronoi.svelte +106 -75
  131. package/dist/components/Voronoi.svelte.d.ts +40 -41
  132. package/dist/components/charts/ArcChart.svelte +464 -0
  133. package/dist/components/charts/ArcChart.svelte.d.ts +90 -0
  134. package/dist/components/charts/AreaChart.svelte +450 -393
  135. package/dist/components/charts/AreaChart.svelte.d.ts +61 -0
  136. package/dist/components/charts/BarChart.svelte +454 -389
  137. package/dist/components/charts/BarChart.svelte.d.ts +76 -0
  138. package/dist/components/charts/ChartAnnotations.svelte +37 -0
  139. package/dist/components/charts/ChartAnnotations.svelte.d.ts +10 -0
  140. package/dist/components/charts/DefaultTooltip.svelte +60 -0
  141. package/dist/components/charts/DefaultTooltip.svelte.d.ts +10 -0
  142. package/dist/components/charts/LineChart.svelte +369 -314
  143. package/dist/components/charts/LineChart.svelte.d.ts +53 -0
  144. package/dist/components/charts/PieChart.svelte +458 -316
  145. package/dist/components/charts/PieChart.svelte.d.ts +137 -353
  146. package/dist/components/charts/ScatterChart.svelte +334 -296
  147. package/dist/components/charts/ScatterChart.svelte.d.ts +39 -0
  148. package/dist/components/charts/index.d.ts +8 -0
  149. package/dist/components/charts/index.js +7 -0
  150. package/dist/components/charts/types.d.ts +253 -0
  151. package/dist/components/charts/utils.svelte.d.ts +30 -0
  152. package/dist/components/charts/utils.svelte.js +55 -0
  153. package/dist/components/index.d.ts +76 -4
  154. package/dist/components/index.js +76 -5
  155. package/dist/components/layout/Canvas.svelte +321 -155
  156. package/dist/components/layout/Canvas.svelte.d.ts +104 -55
  157. package/dist/components/layout/Html.svelte +82 -42
  158. package/dist/components/layout/Html.svelte.d.ts +39 -28
  159. package/dist/components/layout/Layer.svelte +39 -0
  160. package/dist/components/layout/Layer.svelte.d.ts +17 -0
  161. package/dist/components/layout/Svg.svelte +122 -70
  162. package/dist/components/layout/Svg.svelte.d.ts +53 -34
  163. package/dist/components/layout/WebGL.svelte +135 -0
  164. package/dist/components/layout/WebGL.svelte.d.ts +50 -0
  165. package/dist/components/tooltip/Tooltip.svelte +246 -78
  166. package/dist/components/tooltip/Tooltip.svelte.d.ts +149 -31
  167. package/dist/components/tooltip/TooltipContext.svelte +409 -271
  168. package/dist/components/tooltip/TooltipContext.svelte.d.ts +86 -55
  169. package/dist/components/tooltip/TooltipHeader.svelte +100 -11
  170. package/dist/components/tooltip/TooltipHeader.svelte.d.ts +43 -23
  171. package/dist/components/tooltip/TooltipItem.svelte +167 -27
  172. package/dist/components/tooltip/TooltipItem.svelte.d.ts +63 -31
  173. package/dist/components/tooltip/TooltipList.svelte +22 -3
  174. package/dist/components/tooltip/TooltipList.svelte.d.ts +6 -17
  175. package/dist/components/tooltip/TooltipSeparator.svelte +27 -1
  176. package/dist/components/tooltip/TooltipSeparator.svelte.d.ts +6 -15
  177. package/dist/components/tooltip/index.d.ts +6 -0
  178. package/dist/components/tooltip/index.js +6 -0
  179. package/dist/components/tooltip/tooltipMetaContext.d.ts +79 -0
  180. package/dist/components/tooltip/tooltipMetaContext.js +139 -0
  181. package/dist/components/types.d.ts +1 -0
  182. package/dist/components/types.js +1 -0
  183. package/dist/docs/Blockquote.svelte.d.ts +18 -14
  184. package/dist/docs/Code.svelte.d.ts +26 -22
  185. package/dist/docs/ConnectorSweepMenuField.svelte +17 -0
  186. package/dist/docs/ConnectorSweepMenuField.svelte.d.ts +7 -0
  187. package/dist/docs/ConnectorTypeMenuField.svelte +17 -0
  188. package/dist/docs/ConnectorTypeMenuField.svelte.d.ts +7 -0
  189. package/dist/docs/CurveMenuField.svelte +14 -3
  190. package/dist/docs/CurveMenuField.svelte.d.ts +9 -18
  191. package/dist/docs/GeoDebug.svelte +47 -42
  192. package/dist/docs/GeoDebug.svelte.d.ts +4 -16
  193. package/dist/docs/Header1.svelte.d.ts +27 -16
  194. package/dist/docs/Json.svelte.d.ts +20 -16
  195. package/dist/docs/Layout.svelte.d.ts +18 -13
  196. package/dist/docs/Link.svelte.d.ts +33 -21
  197. package/dist/docs/PathDataMenuField.svelte +14 -10
  198. package/dist/docs/PathDataMenuField.svelte.d.ts +8 -18
  199. package/dist/docs/Preview.svelte +20 -7
  200. package/dist/docs/Preview.svelte.d.ts +12 -22
  201. package/dist/docs/TilesetField.svelte.d.ts +21 -17
  202. package/dist/docs/TransformDebug.svelte +5 -6
  203. package/dist/docs/TransformDebug.svelte.d.ts +18 -14
  204. package/dist/docs/ViewSourceButton.svelte.d.ts +21 -17
  205. package/dist/types/d3-shape-extentions.d.ts +7 -0
  206. package/dist/utils/afterTick.d.ts +5 -0
  207. package/dist/utils/afterTick.js +8 -0
  208. package/dist/utils/arcText.svelte.d.ts +57 -0
  209. package/dist/utils/arcText.svelte.js +262 -0
  210. package/dist/utils/array.d.ts +9 -1
  211. package/dist/utils/array.js +13 -0
  212. package/dist/utils/attributes.d.ts +29 -0
  213. package/dist/utils/attributes.js +40 -0
  214. package/dist/utils/canvas.js +47 -10
  215. package/dist/utils/chart.d.ts +78 -0
  216. package/dist/utils/chart.js +512 -0
  217. package/dist/utils/color.d.ts +1 -0
  218. package/dist/utils/color.js +8 -0
  219. package/dist/utils/common.d.ts +3 -5
  220. package/dist/utils/common.js +3 -2
  221. package/dist/utils/connectorUtils.d.ts +21 -0
  222. package/dist/utils/connectorUtils.js +111 -0
  223. package/dist/utils/createId.d.ts +7 -0
  224. package/dist/utils/createId.js +9 -0
  225. package/dist/utils/debug.d.ts +1 -0
  226. package/dist/utils/debug.js +84 -0
  227. package/dist/utils/filterObject.d.ts +9 -0
  228. package/dist/utils/filterObject.js +12 -0
  229. package/dist/utils/graph/dagre.d.ts +34 -0
  230. package/dist/utils/graph/dagre.js +78 -0
  231. package/dist/utils/graph/dagre.test.d.ts +1 -0
  232. package/dist/utils/{graph.test.js → graph/dagre.test.js} +19 -33
  233. package/dist/utils/graph/sankey.d.ts +28 -0
  234. package/dist/utils/{graph.js → graph/sankey.js} +13 -41
  235. package/dist/utils/index.d.ts +3 -1
  236. package/dist/utils/index.js +3 -1
  237. package/dist/utils/key.svelte.d.ts +3 -0
  238. package/dist/utils/key.svelte.js +11 -0
  239. package/dist/utils/legendPayload.d.ts +7 -0
  240. package/dist/utils/legendPayload.js +8 -0
  241. package/dist/utils/motion.svelte.d.ts +140 -0
  242. package/dist/utils/motion.svelte.js +180 -0
  243. package/dist/utils/motion.test.d.ts +1 -0
  244. package/dist/utils/motion.test.js +213 -0
  245. package/dist/utils/{rect.d.ts → rect.svelte.d.ts} +7 -4
  246. package/dist/utils/rect.svelte.js +105 -0
  247. package/dist/utils/scales.svelte.d.ts +90 -0
  248. package/dist/utils/{scales.js → scales.svelte.js} +100 -39
  249. package/dist/utils/stack.d.ts +2 -3
  250. package/dist/utils/stack.js +1 -1
  251. package/dist/utils/string.js +87 -0
  252. package/dist/utils/ticks.d.ts +8 -2
  253. package/dist/utils/ticks.js +28 -0
  254. package/dist/utils/ticks.test.d.ts +1 -0
  255. package/dist/utils/ticks.test.js +67 -0
  256. package/dist/utils/types.d.ts +81 -0
  257. package/package.json +21 -19
  258. package/dist/components/ChartContext.svelte +0 -295
  259. package/dist/components/ChartContext.svelte.d.ts +0 -139
  260. package/dist/components/TransformContext.svelte.d.ts +0 -158
  261. package/dist/stores/motionStore.d.ts +0 -30
  262. package/dist/stores/motionStore.js +0 -62
  263. package/dist/utils/graph.d.ts +0 -37
  264. package/dist/utils/rect.js +0 -107
  265. package/dist/utils/scales.d.ts +0 -66
  266. /package/dist/{utils/graph.test.d.ts → components/charts/types.js} +0 -0
@@ -0,0 +1,464 @@
1
+ <script lang="ts" module>
2
+ export type ArcChartExtraSnippetProps<TData> = {
3
+ key: Accessor<TData>;
4
+ label: Accessor<TData>;
5
+ value: Accessor<TData>;
6
+ visibleData: TData[];
7
+ getGroupProps: () => ComponentProps<typeof Group>;
8
+ getArcProps: (s: SeriesData<TData, typeof Arc>, i: number) => ComponentProps<typeof Arc>;
9
+ };
10
+ export type ArcChartPropsObjProp = Pick<
11
+ SimplifiedChartPropsObject,
12
+ 'pie' | 'group' | 'arc' | 'legend' | 'canvas' | 'svg' | 'tooltip'
13
+ >;
14
+
15
+ export type ArcChartProps<TData> = Pick<
16
+ SimplifiedChartProps<TData, typeof Arc, ArcChartExtraSnippetProps<TData>>,
17
+ | 'aboveContext'
18
+ | 'aboveMarks'
19
+ | 'belowContext'
20
+ | 'belowMarks'
21
+ | 'children'
22
+ | 'data'
23
+ | 'debug'
24
+ | 'legend'
25
+ | 'marks'
26
+ | 'onTooltipClick'
27
+ | 'profile'
28
+ | 'renderContext'
29
+ | 'series'
30
+ | 'tooltip'
31
+ | 'cRange'
32
+ | 'padding'
33
+ | 'context'
34
+ > &
35
+ Pick<
36
+ ArcPropsWithoutHTML,
37
+ | 'cornerRadius'
38
+ | 'trackCornerRadius'
39
+ | 'padAngle'
40
+ | 'trackPadAngle'
41
+ | 'trackStartAngle'
42
+ | 'trackEndAngle'
43
+ | 'trackInnerRadius'
44
+ | 'trackOuterRadius'
45
+ | 'innerRadius'
46
+ | 'outerRadius'
47
+ | 'range'
48
+ > & {
49
+ /**
50
+ * Key accessor
51
+ *
52
+ * @default 'key'
53
+ */
54
+ key?: Accessor<TData>;
55
+
56
+ /**
57
+ * Label accessor
58
+ *
59
+ * @default 'label'
60
+ */
61
+ label?: Accessor<TData>;
62
+
63
+ /**
64
+ * Value accessor
65
+ *
66
+ * @default 'value'
67
+ */
68
+ value?: Accessor<TData>;
69
+
70
+ /**
71
+ * Color accessor
72
+ *
73
+ * @default key
74
+ */
75
+ c?: Accessor<TData>;
76
+
77
+ /**
78
+ * Maximum possible value, useful when `data` is single item
79
+ */
80
+ maxValue?: number;
81
+
82
+ props?: ArcChartPropsObjProp;
83
+
84
+ /**
85
+ * Placement of the ArcChart
86
+ *
87
+ * @default 'center'
88
+ */
89
+ placement?: 'left' | 'center' | 'right';
90
+
91
+ /**
92
+ * Center the chart.
93
+ *
94
+ * Override and use `props.group` for more control.
95
+ *
96
+ * @default placement === 'center'
97
+ */
98
+ center?: boolean;
99
+
100
+ /**
101
+ * A callback function triggered when the arc is clicked.
102
+ */
103
+ onArcClick?: (
104
+ e: MouseEvent,
105
+ detail: { data: any; series: SeriesData<TData, typeof Arc> }
106
+ ) => void;
107
+
108
+ arc?: SimplifiedChartSnippet<
109
+ TData,
110
+ typeof Arc,
111
+ ArcChartExtraSnippetProps<TData> & {
112
+ props: ComponentProps<typeof Arc>;
113
+ /**
114
+ * The index of the series currently being iterated over.
115
+ */
116
+ seriesIndex: number;
117
+ }
118
+ >;
119
+ };
120
+ </script>
121
+
122
+ <script lang="ts" generics="TData">
123
+ import { onMount, type ComponentProps } from 'svelte';
124
+ import { sum } from 'd3-array';
125
+ import { format } from '@layerstack/utils';
126
+ import { cls } from '@layerstack/tailwind';
127
+ import { SelectionState } from '@layerstack/svelte-state';
128
+
129
+ import Arc, { type ArcPropsWithoutHTML } from '../Arc.svelte';
130
+ import Chart from '../Chart.svelte';
131
+ import Group from '../Group.svelte';
132
+ import Layer from '../layout/Layer.svelte';
133
+ import Legend from '../Legend.svelte';
134
+ import * as Tooltip from '../tooltip/index.js';
135
+
136
+ import { accessor, chartDataArray, type Accessor } from '../../utils/common.js';
137
+ import { asAny } from '../../utils/types.js';
138
+ import type {
139
+ SeriesData,
140
+ SimplifiedChartProps,
141
+ SimplifiedChartPropsObject,
142
+ SimplifiedChartSnippet,
143
+ } from './types.js';
144
+ import { HighlightKey } from './utils.svelte.js';
145
+ import { setTooltipMetaContext } from '../tooltip/tooltipMetaContext.js';
146
+ import { getColorIfDefined } from '../../utils/color.js';
147
+
148
+ let {
149
+ data = [],
150
+ key = 'key',
151
+ label = 'label',
152
+ value = 'value',
153
+ range = [0, 360],
154
+ c: cProp,
155
+ innerRadius = 0,
156
+ outerRadius = 0,
157
+ cornerRadius = 0,
158
+ padAngle = 0,
159
+ placement = 'center',
160
+ maxValue,
161
+ center: centerProp,
162
+ series: seriesProp,
163
+ legend = false,
164
+ onArcClick = () => {},
165
+ // TODO: Not usable with manual tooltip / arc path. Use `onArcClick`?
166
+ /** Event dispatched with current tooltip data */
167
+ onTooltipClick = () => {},
168
+ props = {},
169
+ renderContext = 'svg',
170
+ profile = false,
171
+ debug = false,
172
+ tooltip = true,
173
+ children: childrenProp,
174
+ aboveContext,
175
+ belowContext,
176
+ belowMarks,
177
+ aboveMarks,
178
+ marks,
179
+ arc,
180
+ context = $bindable(),
181
+ trackCornerRadius,
182
+ trackPadAngle,
183
+ trackStartAngle,
184
+ trackEndAngle,
185
+ trackInnerRadius,
186
+ trackOuterRadius,
187
+ ...restProps
188
+ }: ArcChartProps<TData> = $props();
189
+
190
+ const center = $derived(centerProp ?? placement === 'center');
191
+
192
+ const c = $derived(cProp ?? key);
193
+
194
+ const keyAccessor = $derived(accessor(key));
195
+ const labelAccessor = $derived(accessor(label));
196
+ const valueAccessor = $derived(accessor(value));
197
+ const cAccessor = $derived(accessor(c));
198
+
199
+ const _series = $derived(
200
+ seriesProp === undefined
201
+ ? [
202
+ {
203
+ key: 'default',
204
+ value: value,
205
+ },
206
+ ]
207
+ : seriesProp
208
+ );
209
+ const isDefaultSeries = $derived(_series.length === 1 && _series[0].key === 'default');
210
+
211
+ const series: SeriesData<TData, typeof Arc>[] = $derived.by(() => {
212
+ if (!isDefaultSeries) return _series;
213
+ // build series from data
214
+ return data.map((d) => {
215
+ return {
216
+ key: keyAccessor(d),
217
+ value: valueAccessor(d),
218
+ label: labelAccessor(d),
219
+ color: getColorIfDefined(d),
220
+ maxValue: maxValue,
221
+ data: [d],
222
+ };
223
+ });
224
+ });
225
+
226
+ const selectedSeries = new SelectionState();
227
+
228
+ const visibleSeries = $derived(
229
+ series.filter((s) => selectedSeries.isEmpty() || selectedSeries.isSelected(s.key))
230
+ );
231
+
232
+ const allSeriesData = $derived(
233
+ visibleSeries
234
+ .flatMap((s) =>
235
+ s.data?.map((d) => {
236
+ return { seriesKey: s.key, ...d };
237
+ })
238
+ )
239
+ .filter((d) => d) as Array<TData & { stackData?: any }>
240
+ );
241
+
242
+ const chartData = $derived(
243
+ allSeriesData.length ? allSeriesData : chartDataArray(data)
244
+ ) as Array<TData>;
245
+
246
+ const seriesColors = $derived(series.map((s) => s.color).filter((d) => d != null));
247
+
248
+ const highlightKey = new HighlightKey<TData, typeof Arc>();
249
+ const selectedKeys = new SelectionState();
250
+
251
+ const visibleData = $derived(
252
+ chartData.filter((d) => {
253
+ const dataKey = keyAccessor(d);
254
+ return selectedKeys.isEmpty() || selectedKeys.isSelected(dataKey);
255
+ })
256
+ );
257
+
258
+ function getLegendProps(): ComponentProps<typeof Legend> {
259
+ return {
260
+ tickFormat: (tick) => {
261
+ const item = chartData.find((d) => keyAccessor(d) === tick);
262
+ return item ? (labelAccessor(item) ?? tick) : tick;
263
+ },
264
+ placement: 'bottom',
265
+ variant: 'swatches',
266
+ onclick: (e, item) => {
267
+ selectedKeys.toggleSelected(item.value);
268
+ selectedSeries.toggleSelected(item.value);
269
+ },
270
+ onpointerenter: (e, item) => (highlightKey.current = item.value),
271
+ onpointerleave: (e) => (highlightKey.current = null),
272
+ ...props.legend,
273
+ ...(typeof legend === 'object' ? legend : null),
274
+ classes: {
275
+ item: (item) =>
276
+ visibleData.length && !visibleData.some((d) => keyAccessor(d) === item.value)
277
+ ? 'opacity-50'
278
+ : '',
279
+ ...props.legend?.classes,
280
+ ...(typeof legend === 'object' ? legend.classes : null),
281
+ },
282
+ };
283
+ }
284
+
285
+ function getGroupProps(): ComponentProps<typeof Group> {
286
+ if (!context) return {};
287
+ return {
288
+ x:
289
+ placement === 'left'
290
+ ? context.height / 2
291
+ : placement === 'right'
292
+ ? context.width - context.height / 2
293
+ : undefined,
294
+ center: ['left', 'right'].includes(placement) ? 'y' : undefined,
295
+ ...props.group,
296
+ };
297
+ }
298
+
299
+ function getArcProps(s: SeriesData<TData, typeof Arc>, i: number): ComponentProps<typeof Arc> {
300
+ if (!context) return {};
301
+ const d = s.data?.[0] || chartData[0];
302
+ const multiSeries = data.length > 1 || series.length > 1;
303
+ return {
304
+ value: valueAccessor(d),
305
+ domain: [0, s.maxValue ?? maxValue ?? sum(chartData, valueAccessor)],
306
+ range,
307
+ innerRadius,
308
+ outerRadius: multiSeries && (outerRadius ?? 0) < 0 ? i * (outerRadius ?? 0) : outerRadius,
309
+ cornerRadius,
310
+ padAngle,
311
+ trackCornerRadius,
312
+ trackPadAngle,
313
+ trackStartAngle,
314
+ trackEndAngle,
315
+ trackInnerRadius,
316
+ trackOuterRadius:
317
+ multiSeries && (trackOuterRadius ?? 0) < 0 ? i * (trackOuterRadius ?? 0) : trackOuterRadius,
318
+ fill: s.color ?? context.cScale?.(context.c(d)),
319
+ track: { fill: s.color ?? context.cScale?.(context.c(d)), fillOpacity: 0.1 },
320
+ tooltipContext: context.tooltip,
321
+ data: d,
322
+ onclick: (e) => {
323
+ onArcClick(e, { data: d, series: s });
324
+ // Workaround for `tooltip={{ mode: 'manual' }}
325
+ onTooltipClick(e, { data: d });
326
+ },
327
+ ...props.arc,
328
+ ...s.props,
329
+ class: cls(
330
+ 'transition-opacity',
331
+ highlightKey.current && highlightKey.current !== keyAccessor(d) && 'opacity-50',
332
+ props.arc?.class,
333
+ s.props?.class
334
+ ),
335
+ };
336
+ }
337
+
338
+ if (profile) {
339
+ console.time('ArcChart render');
340
+ onMount(() => {
341
+ console.timeEnd('ArcChart render');
342
+ });
343
+ }
344
+
345
+ setTooltipMetaContext({
346
+ type: 'arc',
347
+ get color() {
348
+ return c;
349
+ },
350
+ get value() {
351
+ return value;
352
+ },
353
+ get label() {
354
+ return label;
355
+ },
356
+ get key() {
357
+ return key;
358
+ },
359
+ get visibleSeries() {
360
+ return visibleSeries;
361
+ },
362
+ });
363
+ </script>
364
+
365
+ <!-- svelte-ignore ownership_invalid_binding -->
366
+ <Chart
367
+ bind:context
368
+ data={visibleData}
369
+ x={value}
370
+ y={key}
371
+ {c}
372
+ cDomain={chartData.map(keyAccessor)}
373
+ cRange={seriesColors.length
374
+ ? seriesColors
375
+ : c !== key
376
+ ? chartData.map((d) => cAccessor(d))
377
+ : [
378
+ 'var(--color-primary)',
379
+ 'var(--color-secondary)',
380
+ 'var(--color-info)',
381
+ 'var(--color-success)',
382
+ 'var(--color-warning)',
383
+ 'var(--color-danger)',
384
+ ]}
385
+ padding={{ bottom: legend === true ? 32 : 0 }}
386
+ {...restProps}
387
+ tooltip={tooltip === false ? false : props.tooltip?.context}
388
+ >
389
+ {#snippet children({ context })}
390
+ {@const snippetProps = {
391
+ label: labelAccessor,
392
+ key: keyAccessor,
393
+ value: valueAccessor,
394
+ color: cAccessor,
395
+ context,
396
+ series,
397
+ visibleSeries,
398
+ visibleData,
399
+ highlightKey: highlightKey.current,
400
+ setHighlightKey: highlightKey.set,
401
+ getLegendProps,
402
+ getGroupProps,
403
+ getArcProps,
404
+ }}
405
+ {#if childrenProp}
406
+ {@render childrenProp(snippetProps)}
407
+ {:else}
408
+ {@render belowContext?.(snippetProps)}
409
+
410
+ <Layer
411
+ type={renderContext}
412
+ {...asAny(renderContext === 'canvas' ? props.canvas : props.svg)}
413
+ {center}
414
+ {debug}
415
+ >
416
+ {@render belowMarks?.(snippetProps)}
417
+
418
+ {#if typeof marks === 'function'}
419
+ {@render marks(snippetProps)}
420
+ {:else}
421
+ <Group {...getGroupProps()}>
422
+ {#each series as s, i (s.key)}
423
+ {#if typeof arc === 'function'}
424
+ {@render arc({ ...snippetProps, seriesIndex: i, props: getArcProps(s, i) })}
425
+ {:else}
426
+ <Arc {...getArcProps(s, i)} />
427
+ {/if}
428
+ {/each}
429
+ </Group>
430
+ {/if}
431
+
432
+ {@render aboveMarks?.(snippetProps)}
433
+ </Layer>
434
+
435
+ {@render aboveContext?.(snippetProps)}
436
+
437
+ {#if typeof legend === 'function'}
438
+ {@render legend(snippetProps)}
439
+ {:else if legend}
440
+ <Legend {...getLegendProps()} />
441
+ {/if}
442
+
443
+ {#if typeof tooltip === 'function'}
444
+ {@render tooltip(snippetProps)}
445
+ {:else if tooltip}
446
+ <Tooltip.Root {context} {...props.tooltip?.root}>
447
+ {#snippet children({ data })}
448
+ <Tooltip.List {...props.tooltip?.list}>
449
+ <Tooltip.Item
450
+ label={labelAccessor(data) || keyAccessor(data)}
451
+ value={valueAccessor(data)}
452
+ color={context.cScale?.(context.c(data))}
453
+ {format}
454
+ onpointerenter={() => (highlightKey.current = keyAccessor(data))}
455
+ onpointerleave={() => (highlightKey.current = null)}
456
+ {...props.tooltip?.item}
457
+ />
458
+ </Tooltip.List>
459
+ {/snippet}
460
+ </Tooltip.Root>
461
+ {/if}
462
+ {/if}
463
+ {/snippet}
464
+ </Chart>
@@ -0,0 +1,90 @@
1
+ export type ArcChartExtraSnippetProps<TData> = {
2
+ key: Accessor<TData>;
3
+ label: Accessor<TData>;
4
+ value: Accessor<TData>;
5
+ visibleData: TData[];
6
+ getGroupProps: () => ComponentProps<typeof Group>;
7
+ getArcProps: (s: SeriesData<TData, typeof Arc>, i: number) => ComponentProps<typeof Arc>;
8
+ };
9
+ export type ArcChartPropsObjProp = Pick<SimplifiedChartPropsObject, 'pie' | 'group' | 'arc' | 'legend' | 'canvas' | 'svg' | 'tooltip'>;
10
+ export type ArcChartProps<TData> = Pick<SimplifiedChartProps<TData, typeof Arc, ArcChartExtraSnippetProps<TData>>, 'aboveContext' | 'aboveMarks' | 'belowContext' | 'belowMarks' | 'children' | 'data' | 'debug' | 'legend' | 'marks' | 'onTooltipClick' | 'profile' | 'renderContext' | 'series' | 'tooltip' | 'cRange' | 'padding' | 'context'> & Pick<ArcPropsWithoutHTML, 'cornerRadius' | 'trackCornerRadius' | 'padAngle' | 'trackPadAngle' | 'trackStartAngle' | 'trackEndAngle' | 'trackInnerRadius' | 'trackOuterRadius' | 'innerRadius' | 'outerRadius' | 'range'> & {
11
+ /**
12
+ * Key accessor
13
+ *
14
+ * @default 'key'
15
+ */
16
+ key?: Accessor<TData>;
17
+ /**
18
+ * Label accessor
19
+ *
20
+ * @default 'label'
21
+ */
22
+ label?: Accessor<TData>;
23
+ /**
24
+ * Value accessor
25
+ *
26
+ * @default 'value'
27
+ */
28
+ value?: Accessor<TData>;
29
+ /**
30
+ * Color accessor
31
+ *
32
+ * @default key
33
+ */
34
+ c?: Accessor<TData>;
35
+ /**
36
+ * Maximum possible value, useful when `data` is single item
37
+ */
38
+ maxValue?: number;
39
+ props?: ArcChartPropsObjProp;
40
+ /**
41
+ * Placement of the ArcChart
42
+ *
43
+ * @default 'center'
44
+ */
45
+ placement?: 'left' | 'center' | 'right';
46
+ /**
47
+ * Center the chart.
48
+ *
49
+ * Override and use `props.group` for more control.
50
+ *
51
+ * @default placement === 'center'
52
+ */
53
+ center?: boolean;
54
+ /**
55
+ * A callback function triggered when the arc is clicked.
56
+ */
57
+ onArcClick?: (e: MouseEvent, detail: {
58
+ data: any;
59
+ series: SeriesData<TData, typeof Arc>;
60
+ }) => void;
61
+ arc?: SimplifiedChartSnippet<TData, typeof Arc, ArcChartExtraSnippetProps<TData> & {
62
+ props: ComponentProps<typeof Arc>;
63
+ /**
64
+ * The index of the series currently being iterated over.
65
+ */
66
+ seriesIndex: number;
67
+ }>;
68
+ };
69
+ import { type ComponentProps } from 'svelte';
70
+ import Arc, { type ArcPropsWithoutHTML } from '../Arc.svelte';
71
+ import Group from '../Group.svelte';
72
+ import { type Accessor } from '../../utils/common.js';
73
+ import type { SeriesData, SimplifiedChartProps, SimplifiedChartPropsObject, SimplifiedChartSnippet } from './types.js';
74
+ declare class __sveltets_Render<TData> {
75
+ props(): ArcChartProps<TData>;
76
+ events(): {};
77
+ slots(): {};
78
+ bindings(): "context";
79
+ exports(): {};
80
+ }
81
+ interface $$IsomorphicComponent {
82
+ new <TData>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TData>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TData>['props']>, ReturnType<__sveltets_Render<TData>['events']>, ReturnType<__sveltets_Render<TData>['slots']>> & {
83
+ $$bindings?: ReturnType<__sveltets_Render<TData>['bindings']>;
84
+ } & ReturnType<__sveltets_Render<TData>['exports']>;
85
+ <TData>(internal: unknown, props: ReturnType<__sveltets_Render<TData>['props']> & {}): ReturnType<__sveltets_Render<TData>['exports']>;
86
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
87
+ }
88
+ declare const ArcChart: $$IsomorphicComponent;
89
+ type ArcChart<TData> = InstanceType<typeof ArcChart<TData>>;
90
+ export default ArcChart;