layerchart 2.0.0-next.1 → 2.0.0-next.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) 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 +143 -0
  4. package/dist/components/AnnotationLine.svelte.d.ts +30 -0
  5. package/dist/components/AnnotationPoint.svelte +119 -0
  6. package/dist/components/AnnotationPoint.svelte.d.ts +34 -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 +320 -179
  14. package/dist/components/Axis.svelte.d.ts +127 -0
  15. package/dist/components/Bar.svelte +166 -107
  16. package/dist/components/Bar.svelte.d.ts +51 -0
  17. package/dist/components/Bars.svelte +56 -67
  18. package/dist/components/Bars.svelte.d.ts +27 -0
  19. package/dist/components/Blur.svelte +42 -12
  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 +71 -21
  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 +49 -13
  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 +30 -14
  66. package/dist/components/Graticule.svelte.d.ts +11 -52
  67. package/dist/components/Grid.svelte +230 -117
  68. package/dist/components/Grid.svelte.d.ts +71 -0
  69. package/dist/components/Group.svelte +173 -106
  70. package/dist/components/Group.svelte.d.ts +81 -0
  71. package/dist/components/Highlight.svelte +410 -308
  72. package/dist/components/Highlight.svelte.d.ts +107 -0
  73. package/dist/components/Hull.svelte +97 -46
  74. package/dist/components/Hull.svelte.d.ts +40 -30
  75. package/dist/components/Labels.svelte +127 -47
  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 +148 -77
  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 +107 -63
  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 +463 -197
  118. package/dist/components/Text.svelte.d.ts +136 -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 +153 -103
  131. package/dist/components/Voronoi.svelte.d.ts +42 -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 +444 -393
  135. package/dist/components/charts/AreaChart.svelte.d.ts +61 -0
  136. package/dist/components/charts/BarChart.svelte +463 -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 +366 -315
  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 +332 -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 +59 -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 +347 -171
  156. package/dist/components/layout/Canvas.svelte.d.ts +110 -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 +253 -78
  166. package/dist/components/tooltip/Tooltip.svelte.d.ts +149 -31
  167. package/dist/components/tooltip/TooltipContext.svelte +426 -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 +3 -1
  184. package/dist/docs/Blockquote.svelte.d.ts +5 -16
  185. package/dist/docs/Code.svelte +20 -12
  186. package/dist/docs/Code.svelte.d.ts +12 -22
  187. package/dist/docs/ConnectorSweepMenuField.svelte +17 -0
  188. package/dist/docs/ConnectorSweepMenuField.svelte.d.ts +7 -0
  189. package/dist/docs/ConnectorTypeMenuField.svelte +17 -0
  190. package/dist/docs/ConnectorTypeMenuField.svelte.d.ts +7 -0
  191. package/dist/docs/CurveMenuField.svelte +14 -3
  192. package/dist/docs/CurveMenuField.svelte.d.ts +9 -18
  193. package/dist/docs/GeoDebug.svelte +47 -42
  194. package/dist/docs/GeoDebug.svelte.d.ts +4 -16
  195. package/dist/docs/Header1.svelte +4 -2
  196. package/dist/docs/Header1.svelte.d.ts +5 -18
  197. package/dist/docs/Json.svelte +11 -3
  198. package/dist/docs/Json.svelte.d.ts +9 -17
  199. package/dist/docs/Layout.svelte +10 -7
  200. package/dist/docs/Layout.svelte.d.ts +5 -15
  201. package/dist/docs/Link.svelte +7 -3
  202. package/dist/docs/Link.svelte.d.ts +5 -27
  203. package/dist/docs/PathDataMenuField.svelte +14 -10
  204. package/dist/docs/PathDataMenuField.svelte.d.ts +8 -18
  205. package/dist/docs/Preview.svelte +20 -7
  206. package/dist/docs/Preview.svelte.d.ts +12 -22
  207. package/dist/docs/TilesetField.svelte +20 -19
  208. package/dist/docs/TilesetField.svelte.d.ts +6 -19
  209. package/dist/docs/TransformDebug.svelte +5 -6
  210. package/dist/docs/TransformDebug.svelte.d.ts +18 -14
  211. package/dist/docs/ViewSourceButton.svelte +7 -4
  212. package/dist/docs/ViewSourceButton.svelte.d.ts +8 -18
  213. package/dist/types/d3-shape-extentions.d.ts +7 -0
  214. package/dist/utils/afterTick.d.ts +5 -0
  215. package/dist/utils/afterTick.js +8 -0
  216. package/dist/utils/arcText.svelte.d.ts +57 -0
  217. package/dist/utils/arcText.svelte.js +262 -0
  218. package/dist/utils/array.d.ts +9 -1
  219. package/dist/utils/array.js +13 -0
  220. package/dist/utils/attributes.d.ts +29 -0
  221. package/dist/utils/attributes.js +40 -0
  222. package/dist/utils/canvas.js +47 -10
  223. package/dist/utils/chart.d.ts +78 -0
  224. package/dist/utils/chart.js +512 -0
  225. package/dist/utils/color.d.ts +1 -0
  226. package/dist/utils/color.js +8 -0
  227. package/dist/utils/common.d.ts +3 -5
  228. package/dist/utils/common.js +3 -2
  229. package/dist/utils/connectorUtils.d.ts +21 -0
  230. package/dist/utils/connectorUtils.js +111 -0
  231. package/dist/utils/createId.d.ts +7 -0
  232. package/dist/utils/createId.js +9 -0
  233. package/dist/utils/debug.d.ts +1 -0
  234. package/dist/utils/debug.js +84 -0
  235. package/dist/utils/filterObject.d.ts +9 -0
  236. package/dist/utils/filterObject.js +12 -0
  237. package/dist/utils/graph/dagre.d.ts +34 -0
  238. package/dist/utils/graph/dagre.js +78 -0
  239. package/dist/utils/graph/dagre.test.d.ts +1 -0
  240. package/dist/utils/{graph.test.js → graph/dagre.test.js} +19 -33
  241. package/dist/utils/graph/sankey.d.ts +28 -0
  242. package/dist/utils/{graph.js → graph/sankey.js} +13 -41
  243. package/dist/utils/index.d.ts +3 -1
  244. package/dist/utils/index.js +3 -1
  245. package/dist/utils/key.svelte.d.ts +3 -0
  246. package/dist/utils/key.svelte.js +11 -0
  247. package/dist/utils/legendPayload.d.ts +7 -0
  248. package/dist/utils/legendPayload.js +8 -0
  249. package/dist/utils/motion.svelte.d.ts +140 -0
  250. package/dist/utils/motion.svelte.js +180 -0
  251. package/dist/utils/motion.test.d.ts +1 -0
  252. package/dist/utils/motion.test.js +213 -0
  253. package/dist/utils/{rect.d.ts → rect.svelte.d.ts} +7 -4
  254. package/dist/utils/rect.svelte.js +105 -0
  255. package/dist/utils/scales.svelte.d.ts +91 -0
  256. package/dist/utils/scales.svelte.js +201 -0
  257. package/dist/utils/stack.d.ts +2 -3
  258. package/dist/utils/stack.js +1 -1
  259. package/dist/utils/string.js +87 -0
  260. package/dist/utils/ticks.d.ts +9 -3
  261. package/dist/utils/ticks.js +122 -147
  262. package/dist/utils/ticks.test.d.ts +1 -0
  263. package/dist/utils/ticks.test.js +57 -0
  264. package/dist/utils/types.d.ts +81 -0
  265. package/package.json +28 -24
  266. package/dist/components/ChartContext.svelte +0 -295
  267. package/dist/components/ChartContext.svelte.d.ts +0 -139
  268. package/dist/components/TransformContext.svelte.d.ts +0 -158
  269. package/dist/stores/motionStore.d.ts +0 -30
  270. package/dist/stores/motionStore.js +0 -62
  271. package/dist/utils/graph.d.ts +0 -37
  272. package/dist/utils/rect.js +0 -107
  273. package/dist/utils/scales.d.ts +0 -66
  274. package/dist/utils/scales.js +0 -136
  275. /package/dist/{utils/graph.test.d.ts → components/charts/types.js} +0 -0
@@ -1,3 +1,170 @@
1
+ <script lang="ts" module>
2
+ import type { ComponentProps, Snippet } from 'svelte';
3
+ import type { PointerEventHandler, SVGAttributes } from 'svelte/elements';
4
+
5
+ import Spline, { type SplinePropsWithoutHTML } from './Spline.svelte';
6
+ import type { TooltipContextValue } from './tooltip/TooltipContext.svelte';
7
+ import { createMotion, type MotionProp } from '../utils/motion.svelte.js';
8
+ import type { CommonStyleProps, Without } from '../utils/types.js';
9
+
10
+ export type ArcPropsWithoutHTML = {
11
+ value?: number;
12
+ initialValue?: number;
13
+
14
+ /**
15
+ * Domain [min,max] in degrees
16
+ *
17
+ * @default [0, 100];
18
+ */
19
+ domain?: [number, number];
20
+
21
+ /**
22
+ * Range [min,max] in degrees. See also startAngle/endAngle
23
+ *
24
+ * @default [0, 360]
25
+ */
26
+ range?: [number, number];
27
+
28
+ /**
29
+ * Start angle in radians
30
+ */
31
+ startAngle?: number;
32
+
33
+ /**
34
+ * End angle in radians
35
+ */
36
+ endAngle?: number;
37
+
38
+ /**
39
+ * Define innerRadius. Defaults to yRange min
40
+ * • value >= 1: discrete value
41
+ * • value < 1: percent of `outerRadius`
42
+ * • value < 0: offset of `outerRadius`
43
+ */
44
+ innerRadius?: number;
45
+
46
+ /**
47
+ * Define outerRadius. Defaults to smallest width (xRange) or height (yRange) dimension (/2)
48
+ * • value >= 1: discrete value
49
+ * • value < 1: percent of chart width or height (smallest) / 2
50
+ * • value < 0: offset of chart width or height (smallest) / 2
51
+ */
52
+ outerRadius?: number;
53
+
54
+ /**
55
+ * Corner radius of the arc
56
+ *
57
+ * @default 0
58
+ */
59
+ cornerRadius?: number;
60
+
61
+ /**
62
+ * Angle between the arcs
63
+ *
64
+ * @default 0
65
+ */
66
+ padAngle?: number;
67
+
68
+ /**
69
+ * Start angle in radians
70
+ */
71
+ trackStartAngle?: number;
72
+
73
+ /**
74
+ * End angle in radians
75
+ */
76
+ trackEndAngle?: number;
77
+
78
+ /**
79
+ * Define innerRadius. Defaults to yRange min
80
+ * • value >= 1: discrete value
81
+ * • value < 1: percent of `outerRadius`
82
+ * • value < 0: offset of `outerRadius`
83
+ */
84
+ trackInnerRadius?: number;
85
+
86
+ /**
87
+ * Define outerRadius. Defaults to smallest width (xRange) or height (yRange) dimension (/2)
88
+ * • value >= 1: discrete value
89
+ * • value < 1: percent of chart width or height (smallest) / 2
90
+ * • value < 0: offset of chart width or height (smallest) / 2
91
+ */
92
+ trackOuterRadius?: number;
93
+
94
+ /**
95
+ * Corner radius of the arc
96
+ *
97
+ * @default 0
98
+ */
99
+ trackCornerRadius?: number;
100
+
101
+ /**
102
+ * Angle between the arcs
103
+ *
104
+ * @default 0
105
+ */
106
+ trackPadAngle?: number;
107
+
108
+ /**
109
+ * Offset arc from center
110
+ *
111
+ * @default 0
112
+ */
113
+ offset?: number;
114
+
115
+ /**
116
+ * Tooltip context to setup pointer events to show tooltip for related data.
117
+ *
118
+ * **Must set `data` prop as well**
119
+ */
120
+ tooltipContext?: TooltipContextValue;
121
+
122
+ /**
123
+ * Data to set when showing tooltip
124
+ */
125
+ data?: any;
126
+
127
+ /**
128
+ * Pass true to enable the track with default props, or pass an object
129
+ * of props to enable the track.
130
+ */
131
+ track?: boolean | Partial<ComponentProps<typeof Spline>>;
132
+
133
+ /**
134
+ * A reference to the track element
135
+ *
136
+ * @bindable
137
+ */
138
+ trackRef?: SVGPathElement;
139
+
140
+ /**
141
+ * A reference to the arc element
142
+ *
143
+ * @bindable
144
+ */
145
+ ref?: SVGPathElement;
146
+
147
+ children?: Snippet<
148
+ [
149
+ {
150
+ centroid: [number, number];
151
+ boundingBox: DOMRect;
152
+ value: number;
153
+ getTrackTextProps: GetArcTextProps;
154
+ getArcTextProps: GetArcTextProps;
155
+ },
156
+ ]
157
+ >;
158
+
159
+ motion?: MotionProp;
160
+ } & CommonStyleProps;
161
+
162
+ export type ArcProps = ArcPropsWithoutHTML &
163
+ // we omit the spline props to avoid conflicts with attribute names since we are
164
+ // passing them through to `<Spline />`
165
+ Without<SVGAttributes<SVGPathElement>, ArcPropsWithoutHTML & SplinePropsWithoutHTML>;
166
+ </script>
167
+
1
168
  <script lang="ts">
2
169
  /*
3
170
  TODO:
@@ -17,84 +184,79 @@
17
184
  // https://svelte.dev/repl/09711e43a1264ba18945d7db7cab9335?version=3.38.2
18
185
  // https://codepen.io/simeydotme/pen/rrOEmO/
19
186
 
20
- import { tick, type ComponentProps } from 'svelte';
21
- import type { spring as springStore, tweened as tweenedStore } from 'svelte/motion';
22
187
  import { arc as d3arc } from 'd3-shape';
23
188
  import { scaleLinear } from 'd3-scale';
24
189
 
25
- import { chartContext } from './ChartContext.svelte';
26
- import { motionStore } from '../stores/motionStore.js';
27
190
  import { degreesToRadians } from '../utils/math.js';
28
- import type { TooltipContextValue } from './tooltip/TooltipContext.svelte';
29
- import Spline from './Spline.svelte';
30
-
31
- export let spring: boolean | Parameters<typeof springStore>[1] = undefined;
32
- export let tweened: boolean | Parameters<typeof tweenedStore>[1] = undefined;
33
-
34
- export let value = 0;
35
- export let initialValue = value;
36
- let tweened_value = motionStore(initialValue, { spring, tweened });
37
-
38
- $: tick().then(() => {
39
- tweened_value.set(value);
191
+ import { getChartContext } from './Chart.svelte';
192
+ import { extractLayerProps, layerClass } from '../utils/attributes.js';
193
+ import { cls } from '@layerstack/tailwind';
194
+ import { max } from 'd3-array';
195
+ import {
196
+ createArcTextProps,
197
+ type ArcTextOptions,
198
+ type ArcTextPosition,
199
+ type GetArcTextProps,
200
+ } from '../utils/arcText.svelte.js';
201
+
202
+ let {
203
+ ref: refProp = $bindable(),
204
+ trackRef: trackRefProp = $bindable(),
205
+ motion,
206
+ value = 0,
207
+ initialValue = 0,
208
+ domain = [0, 100],
209
+ range = [0, 360], // degrees
210
+ startAngle: startAngleProp,
211
+ endAngle: endAngleProp,
212
+ innerRadius: innerRadiusProp,
213
+ outerRadius: outerRadiusProp,
214
+ cornerRadius = 0,
215
+ padAngle = 0,
216
+ trackStartAngle: trackStartAngleProp,
217
+ trackEndAngle: trackEndAngleProp,
218
+ trackInnerRadius: trackInnerRadiusProp,
219
+ trackOuterRadius: trackOuterRadiusProp,
220
+ trackCornerRadius: trackCornerRadiusProp,
221
+ trackPadAngle: trackPadAngleProp,
222
+ fill,
223
+ fillOpacity,
224
+ stroke = 'none',
225
+ strokeWidth,
226
+ opacity,
227
+ data,
228
+ offset = 0,
229
+ onpointerenter = () => {},
230
+ onpointermove = () => {},
231
+ onpointerleave = () => {},
232
+ ontouchmove = () => {},
233
+ tooltipContext,
234
+ track = false,
235
+ children,
236
+ class: className,
237
+ ...restProps
238
+ }: ArcProps = $props();
239
+
240
+ let ref = $state<SVGPathElement>();
241
+ let trackRef = $state<SVGPathElement>();
242
+
243
+ $effect.pre(() => {
244
+ refProp = ref;
40
245
  });
41
246
 
42
- export let domain = [0, 100];
43
-
44
- /**
45
- * Range [min,max] in degrees. See also startAngle/endAngle
46
- */
47
- export let range = [0, 360]; // degrees
48
-
49
- /**
50
- * Start angle in radians
51
- */
52
- export let startAngle: number | undefined = undefined;
53
-
54
- /**
55
- * End angle in radians
56
- */
57
- export let endAngle: number | undefined = undefined;
58
-
59
- /**
60
- * Define innerRadius. Defaults to yRange min
61
- * • value >= 1: discrete value
62
- * • value < 1: percent of `outerRadius`
63
- * • value < 0: offset of `outerRadius`
64
- */
65
- export let innerRadius: number | undefined = undefined;
66
-
67
- /**
68
- * Define outerRadius. Defaults to smallest width (xRange) or height (yRange) dimension (/2)
69
- * • value >= 1: discrete value
70
- * • value < 1: percent of chart width or height (smallest) / 2
71
- * • value < 0: offset of chart width or height (smallest) / 2
72
- */
73
- export let outerRadius: number | undefined = undefined;
74
-
75
- export let cornerRadius = 0;
76
- export let padAngle = 0;
77
- // export let padRadius = 0;
78
-
79
- export let fill: string | undefined = undefined;
80
- export let fillOpacity: number | undefined = undefined;
81
- export let stroke: string | undefined = 'none';
82
- export let strokeWidth: number | undefined = undefined;
83
- export let opacity: number | undefined = undefined;
84
-
85
- let className: string | undefined = undefined;
86
- export { className as class };
247
+ $effect.pre(() => {
248
+ trackRefProp = trackRef;
249
+ });
87
250
 
88
- export let track: boolean | Partial<ComponentProps<Spline>> = false;
251
+ const ctx = getChartContext();
89
252
 
90
- export let onclick: ((e: MouseEvent) => void) | undefined = undefined;
91
- export let onpointerenter: ((e: PointerEvent) => void) | undefined = undefined;
92
- export let onpointermove: ((e: PointerEvent) => void) | undefined = undefined;
93
- export let onpointerleave: ((e: PointerEvent) => void) | undefined = undefined;
253
+ const endAngle = $derived(
254
+ endAngleProp ?? degreesToRadians(ctx.config.xRange ? max(ctx.xRange) : max(range))
255
+ );
94
256
 
95
- const { xRange, yRange } = chartContext();
257
+ const motionEndAngle = createMotion(initialValue, () => value, motion);
96
258
 
97
- $: scale = scaleLinear().domain(domain).range(range);
259
+ const scale = $derived(scaleLinear().domain(domain).range(range));
98
260
 
99
261
  function getOuterRadius(outerRadius: number | undefined, chartRadius: number) {
100
262
  if (!outerRadius) {
@@ -114,11 +276,18 @@
114
276
  }
115
277
  }
116
278
 
117
- $: _outerRadius = getOuterRadius(outerRadius, (Math.min($xRange[1], $yRange[0]) ?? 0) / 2);
279
+ const outerRadius = $derived(
280
+ getOuterRadius(outerRadiusProp, (Math.min(ctx.xRange[1], ctx.yRange[0]) ?? 0) / 2)
281
+ );
282
+ const trackOuterRadius = $derived(
283
+ trackOuterRadiusProp
284
+ ? getOuterRadius(trackOuterRadiusProp, (Math.min(ctx.xRange[1], ctx.yRange[0]) ?? 0) / 2)
285
+ : outerRadius
286
+ );
118
287
 
119
288
  function getInnerRadius(innerRadius: number | undefined, outerRadius: number) {
120
289
  if (innerRadius == null) {
121
- return Math.min(...$yRange);
290
+ return Math.min(...ctx.yRange);
122
291
  } else if (innerRadius > 1) {
123
292
  // discrete value
124
293
  return innerRadius;
@@ -133,92 +302,112 @@
133
302
  return innerRadius;
134
303
  }
135
304
  }
136
- $: _innerRadius = getInnerRadius(innerRadius, _outerRadius);
137
-
138
- $: arc = d3arc()
139
- .innerRadius(_innerRadius)
140
- .outerRadius(_outerRadius)
141
- .startAngle(startAngle ?? degreesToRadians(range[0]))
142
- .endAngle(endAngle ?? degreesToRadians(scale($tweened_value)))
143
- .cornerRadius(cornerRadius)
144
- .padAngle(padAngle) as Function;
145
- // .padRadius(padRadius);
146
-
147
- $: trackArc = d3arc()
148
- .innerRadius(_innerRadius)
149
- .outerRadius(_outerRadius)
150
- .startAngle(startAngle ?? degreesToRadians(range[0]))
151
- .endAngle(endAngle ?? degreesToRadians(range[1]))
152
- .cornerRadius(cornerRadius)
153
- .padAngle(padAngle) as Function;
154
- // .padRadius(padRadius);
155
-
156
- // @ts-expect-error
157
- $: trackArcCentroid = trackArc.centroid();
158
- // $: console.log(trackArcCentroid)
159
-
160
- let trackArcEl: SVGPathElement | undefined = undefined;
161
- $: boundingBox = trackArcEl ? trackArcEl.getBBox() : ({} as DOMRect);
162
-
163
- // $: labelArcCenterOffset = {
164
- // x: outerRadius - boundingBox.width / 2,
165
- // // x: 0,
166
- // y: (outerRadius - boundingBox.height / 2) * -1,
167
- // };
168
- // $: console.log(labelArcCenterOffset)
169
-
170
- // $: labelArcBottomOffset = {
171
- // // x: outerRadius - boundingBox.width / 2,
172
- // x: outerRadius - boundingBox.width / 2,
173
- // // x: 0,
174
- // // y: (outerRadius - boundingBox.height) * -1
175
- // y: (outerRadius - boundingBox.height) * -1,
176
- // };
177
- // $: console.log(labelArcBottomOffset)
178
-
179
- /**
180
- * Offset arc from center
181
- */
182
- export let offset = 0;
183
- $: angle = ((startAngle ?? 0) + (endAngle ?? 0)) / 2;
184
- $: xOffset = Math.sin(angle) * offset;
185
- $: yOffset = -Math.cos(angle) * offset;
186
-
187
- /**
188
- * Tooltip context to setup pointer events to show tooltip for related data. Must set `data` prop as well
189
- */
190
- export let tooltip: TooltipContextValue | undefined = undefined;
191
-
192
- /**
193
- * Data to set when showing tooltip
194
- */
195
- export let data: any = undefined;
196
-
197
- function onPointerEnter(e: PointerEvent) {
305
+
306
+ const innerRadius = $derived(getInnerRadius(innerRadiusProp, outerRadius));
307
+ const trackInnerRadius = $derived(
308
+ trackInnerRadiusProp ? getInnerRadius(trackInnerRadiusProp, trackOuterRadius) : innerRadius
309
+ );
310
+
311
+ const startAngle = $derived(startAngleProp ?? degreesToRadians(range[0]));
312
+ const trackStartAngle = $derived(
313
+ trackStartAngleProp ?? startAngleProp ?? degreesToRadians(range[0])
314
+ );
315
+ const trackEndAngle = $derived(trackEndAngleProp ?? endAngleProp ?? degreesToRadians(range[1]));
316
+ const trackCornerRadius = $derived(trackCornerRadiusProp ?? cornerRadius);
317
+ const trackPadAngle = $derived(trackPadAngleProp ?? padAngle);
318
+
319
+ const arcEndAngle = $derived(endAngleProp ?? degreesToRadians(scale(motionEndAngle.current)));
320
+
321
+ const arc = $derived(
322
+ d3arc()
323
+ .innerRadius(innerRadius)
324
+ .outerRadius(outerRadius)
325
+ .startAngle(startAngle)
326
+ .endAngle(arcEndAngle)
327
+ .cornerRadius(cornerRadius)
328
+ .padAngle(padAngle)
329
+ );
330
+
331
+ const trackArc = $derived(
332
+ d3arc()
333
+ .innerRadius(trackInnerRadius)
334
+ .outerRadius(trackOuterRadius)
335
+ .startAngle(trackStartAngle)
336
+ .endAngle(trackEndAngle)
337
+ .cornerRadius(trackCornerRadius)
338
+ .padAngle(trackPadAngle)
339
+ );
340
+
341
+ const angle = $derived(((startAngle ?? 0) + (endAngle ?? 0)) / 2);
342
+ const xOffset = $derived(Math.sin(angle) * offset);
343
+ const yOffset = $derived(-Math.cos(angle) * offset);
344
+
345
+ const trackArcCentroid = $derived.by(() => {
346
+ // @ts-expect-error - this is fine.
347
+ const centroid = trackArc.centroid() as [number, number];
348
+
349
+ return [centroid[0] + xOffset, centroid[1] + yOffset];
350
+ }) as [number, number];
351
+
352
+ const boundingBox = $derived(trackRef ? trackRef.getBBox() : ({} as DOMRect));
353
+
354
+ const onPointerEnter: PointerEventHandler<SVGPathElement> = (e) => {
198
355
  onpointerenter?.(e);
199
- tooltip?.show(e, data);
200
- }
201
- function onPointerMove(e: PointerEvent) {
356
+ tooltipContext?.show(e, data);
357
+ };
358
+
359
+ const onPointerMove: PointerEventHandler<SVGPathElement> = (e) => {
202
360
  onpointermove?.(e);
203
- tooltip?.show(e, data);
204
- }
205
- function onPointerLeave(e: PointerEvent) {
361
+ tooltipContext?.show(e, data);
362
+ };
363
+
364
+ const onPointerLeave: PointerEventHandler<SVGPathElement> = (e) => {
206
365
  onpointerleave?.(e);
207
- tooltip?.hide();
366
+ tooltipContext?.hide();
367
+ };
368
+
369
+ function getTrackTextProps(position: ArcTextPosition, opts: ArcTextOptions = {}) {
370
+ return createArcTextProps(
371
+ {
372
+ startAngle: () => trackStartAngle,
373
+ endAngle: () => trackEndAngle,
374
+ outerRadius: () => trackOuterRadius + (opts.outerPadding ? opts.outerPadding : 0),
375
+ innerRadius: () => trackInnerRadius,
376
+ cornerRadius: () => trackCornerRadius,
377
+ centroid: () => trackArcCentroid,
378
+ },
379
+ opts,
380
+ position
381
+ ).current;
382
+ }
383
+
384
+ function getArcTextProps(position: ArcTextPosition, opts: ArcTextOptions = {}) {
385
+ return createArcTextProps(
386
+ {
387
+ startAngle: () => startAngle,
388
+ endAngle: () => arcEndAngle,
389
+ outerRadius: () => outerRadius + (opts.outerPadding ? opts.outerPadding : 0),
390
+ innerRadius: () => innerRadius,
391
+ cornerRadius: () => cornerRadius,
392
+ centroid: () => trackArcCentroid,
393
+ },
394
+ opts,
395
+ position
396
+ ).current;
208
397
  }
209
398
  </script>
210
399
 
211
400
  {#if track}
212
401
  <Spline
213
402
  pathData={trackArc()}
214
- class="track"
215
403
  stroke="none"
216
- bind:pathEl={trackArcEl}
217
- {...typeof track === 'object' ? track : null}
404
+ bind:splineRef={trackRef}
405
+ {...extractLayerProps(track, 'arc-track')}
218
406
  />
219
407
  {/if}
220
408
 
221
409
  <Spline
410
+ bind:splineRef={ref}
222
411
  pathData={arc()}
223
412
  transform="translate({xOffset}, {yOffset})"
224
413
  {fill}
@@ -226,19 +415,23 @@
226
415
  {stroke}
227
416
  stroke-width={strokeWidth}
228
417
  {opacity}
229
- class={className}
230
- {...$$restProps}
231
- {onclick}
418
+ {...restProps}
419
+ class={cls(layerClass('arc-line'), className)}
232
420
  onpointerenter={onPointerEnter}
233
421
  onpointermove={onPointerMove}
234
422
  onpointerleave={onPointerLeave}
235
423
  ontouchmove={(e) => {
236
- if (tooltip) {
237
- // Prevent touch to not interfer with pointer when using tooltip
238
- e.preventDefault();
239
- }
424
+ ontouchmove?.(e);
425
+ if (!tooltipContext) return;
426
+ // Prevent touch to not interfere with pointer when using tooltip
427
+ e.preventDefault();
240
428
  }}
241
- on:touchmove
242
429
  />
243
430
 
244
- <slot value={$tweened_value} centroid={trackArcCentroid} {boundingBox} />
431
+ {@render children?.({
432
+ centroid: trackArcCentroid,
433
+ boundingBox,
434
+ value: motionEndAngle.current,
435
+ getTrackTextProps: getTrackTextProps,
436
+ getArcTextProps: getArcTextProps,
437
+ })}
@@ -0,0 +1,138 @@
1
+ import type { ComponentProps, Snippet } from 'svelte';
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import Spline, { type SplinePropsWithoutHTML } from './Spline.svelte';
4
+ import type { TooltipContextValue } from './tooltip/TooltipContext.svelte';
5
+ import { type MotionProp } from '../utils/motion.svelte.js';
6
+ import type { CommonStyleProps, Without } from '../utils/types.js';
7
+ export type ArcPropsWithoutHTML = {
8
+ value?: number;
9
+ initialValue?: number;
10
+ /**
11
+ * Domain [min,max] in degrees
12
+ *
13
+ * @default [0, 100];
14
+ */
15
+ domain?: [number, number];
16
+ /**
17
+ * Range [min,max] in degrees. See also startAngle/endAngle
18
+ *
19
+ * @default [0, 360]
20
+ */
21
+ range?: [number, number];
22
+ /**
23
+ * Start angle in radians
24
+ */
25
+ startAngle?: number;
26
+ /**
27
+ * End angle in radians
28
+ */
29
+ endAngle?: number;
30
+ /**
31
+ * Define innerRadius. Defaults to yRange min
32
+ * • value >= 1: discrete value
33
+ * • value < 1: percent of `outerRadius`
34
+ * • value < 0: offset of `outerRadius`
35
+ */
36
+ innerRadius?: number;
37
+ /**
38
+ * Define outerRadius. Defaults to smallest width (xRange) or height (yRange) dimension (/2)
39
+ * • value >= 1: discrete value
40
+ * • value < 1: percent of chart width or height (smallest) / 2
41
+ * • value < 0: offset of chart width or height (smallest) / 2
42
+ */
43
+ outerRadius?: number;
44
+ /**
45
+ * Corner radius of the arc
46
+ *
47
+ * @default 0
48
+ */
49
+ cornerRadius?: number;
50
+ /**
51
+ * Angle between the arcs
52
+ *
53
+ * @default 0
54
+ */
55
+ padAngle?: number;
56
+ /**
57
+ * Start angle in radians
58
+ */
59
+ trackStartAngle?: number;
60
+ /**
61
+ * End angle in radians
62
+ */
63
+ trackEndAngle?: number;
64
+ /**
65
+ * Define innerRadius. Defaults to yRange min
66
+ * • value >= 1: discrete value
67
+ * • value < 1: percent of `outerRadius`
68
+ * • value < 0: offset of `outerRadius`
69
+ */
70
+ trackInnerRadius?: number;
71
+ /**
72
+ * Define outerRadius. Defaults to smallest width (xRange) or height (yRange) dimension (/2)
73
+ * • value >= 1: discrete value
74
+ * • value < 1: percent of chart width or height (smallest) / 2
75
+ * • value < 0: offset of chart width or height (smallest) / 2
76
+ */
77
+ trackOuterRadius?: number;
78
+ /**
79
+ * Corner radius of the arc
80
+ *
81
+ * @default 0
82
+ */
83
+ trackCornerRadius?: number;
84
+ /**
85
+ * Angle between the arcs
86
+ *
87
+ * @default 0
88
+ */
89
+ trackPadAngle?: number;
90
+ /**
91
+ * Offset arc from center
92
+ *
93
+ * @default 0
94
+ */
95
+ offset?: number;
96
+ /**
97
+ * Tooltip context to setup pointer events to show tooltip for related data.
98
+ *
99
+ * **Must set `data` prop as well**
100
+ */
101
+ tooltipContext?: TooltipContextValue;
102
+ /**
103
+ * Data to set when showing tooltip
104
+ */
105
+ data?: any;
106
+ /**
107
+ * Pass true to enable the track with default props, or pass an object
108
+ * of props to enable the track.
109
+ */
110
+ track?: boolean | Partial<ComponentProps<typeof Spline>>;
111
+ /**
112
+ * A reference to the track element
113
+ *
114
+ * @bindable
115
+ */
116
+ trackRef?: SVGPathElement;
117
+ /**
118
+ * A reference to the arc element
119
+ *
120
+ * @bindable
121
+ */
122
+ ref?: SVGPathElement;
123
+ children?: Snippet<[
124
+ {
125
+ centroid: [number, number];
126
+ boundingBox: DOMRect;
127
+ value: number;
128
+ getTrackTextProps: GetArcTextProps;
129
+ getArcTextProps: GetArcTextProps;
130
+ }
131
+ ]>;
132
+ motion?: MotionProp;
133
+ } & CommonStyleProps;
134
+ export type ArcProps = ArcPropsWithoutHTML & Without<SVGAttributes<SVGPathElement>, ArcPropsWithoutHTML & SplinePropsWithoutHTML>;
135
+ import { type GetArcTextProps } from '../utils/arcText.svelte.js';
136
+ declare const Arc: import("svelte").Component<ArcProps, {}, "ref" | "trackRef">;
137
+ type Arc = ReturnType<typeof Arc>;
138
+ export default Arc;