layerchart 2.0.0-next.0 → 2.0.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +25 -24
  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
@@ -1,15 +1,301 @@
1
+ <script lang="ts" module>
2
+ import type { Snippet } from 'svelte';
3
+ import type { SVGAttributes } from 'svelte/elements';
4
+
5
+ import { asAny, type Without } from '../utils/types.js';
6
+ import { extractLayerProps } from '../utils/attributes.js';
7
+ import { createId } from '../utils/createId.js';
8
+
9
+ type PatternLineDef = {
10
+ /**
11
+ * The width of the line
12
+ * @default 1
13
+ */
14
+ width?: string;
15
+
16
+ /**
17
+ * The rotation of the line
18
+ * @default 0
19
+ */
20
+ rotate?: number;
21
+
22
+ /**
23
+ * The color of the line
24
+ * @default 'var(--color-surface-content)'
25
+ */
26
+ color?: string;
27
+
28
+ /**
29
+ * The opacity of the line
30
+ * @default 1
31
+ */
32
+ opacity?: number;
33
+ };
34
+
35
+ type PatternCircleDef = {
36
+ /**
37
+ * The radius of the circle
38
+ * @default 1
39
+ */
40
+ radius?: number;
41
+
42
+ /**
43
+ * Stagger the circle layout
44
+ * @default false
45
+ */
46
+ stagger?: boolean;
47
+
48
+ /**
49
+ * The color of the circle
50
+ * @default 'var(--color-surface-content)'
51
+ */
52
+ color?: string;
53
+
54
+ /**
55
+ * The opacity of the circle
56
+ * @default 1
57
+ */
58
+ opacity?: number;
59
+ };
60
+
61
+ export type PatternPropsWithoutHTML = {
62
+ /**
63
+ * The id of the pattern
64
+ */
65
+ id?: string;
66
+
67
+ /**
68
+ * The size of the pattern (sets `width` and `height` as same value).
69
+ */
70
+ size?: number;
71
+
72
+ /**
73
+ * The width of the pattern for custom patterns (set by `lines`, etc)
74
+ */
75
+ width?: number;
76
+
77
+ /**
78
+ * The height of the pattern for custom patterns (set by `lines`, etc)
79
+ */
80
+ height?: number;
81
+
82
+ /**
83
+ * The number of lines to render
84
+ */
85
+ lines?: boolean | PatternLineDef | PatternLineDef[];
86
+
87
+ /**
88
+ * The number of circles to render
89
+ */
90
+ circles?: boolean | PatternCircleDef | PatternCircleDef[];
91
+
92
+ /**
93
+ * The background color of the pattern
94
+ */
95
+ background?: string;
96
+
97
+ /**
98
+ * Render as a child of the pattern
99
+ */
100
+ patternContent?: Snippet;
101
+
102
+ children?: Snippet<[{ id: string; pattern: string }]>;
103
+ };
104
+
105
+ export type PatternProps = PatternPropsWithoutHTML &
106
+ Without<SVGAttributes<SVGPatternElement>, PatternPropsWithoutHTML>;
107
+
108
+ export type CircleShape = {
109
+ type: 'circle';
110
+ cx: number;
111
+ cy: number;
112
+ r: number;
113
+ fill: string;
114
+ opacity: number;
115
+ };
116
+ export type LineShape = {
117
+ type: 'line';
118
+ path: string;
119
+ stroke: string;
120
+ strokeWidth: string | number;
121
+ opacity: number;
122
+ };
123
+
124
+ export type PatternShape = CircleShape | LineShape;
125
+ </script>
126
+
1
127
  <script lang="ts">
2
- // https://developer.mozilla.org/en-US/docs/Web/SVG/Element/pattern
3
- // https://airbnb.io/visx/patterns
4
- // https://github.com/airbnb/visx/tree/master/packages/visx-pattern/src/patterns
5
- export let id: string;
128
+ import { getRenderContext } from './Chart.svelte';
129
+ import { registerCanvasComponent } from './layout/Canvas.svelte';
130
+ import { createPattern } from '../utils/canvas.js';
131
+
132
+ const uid = $props.id();
133
+
134
+ let {
135
+ id = createId('pattern-', uid),
136
+ size = 4,
137
+ width = size,
138
+ height = size,
139
+ lines: linesProp,
140
+ circles: circlesProp,
141
+ background,
142
+ patternContent,
143
+ children,
144
+ ...restProps
145
+ }: PatternProps = $props();
146
+
147
+ const renderCtx = getRenderContext();
148
+
149
+ let canvasPattern = $state<CanvasPattern | null>(null);
150
+
151
+ let shapes = $state<PatternShape[]>([]);
152
+
153
+ if (linesProp) {
154
+ const lineDefs = Array.isArray(linesProp) ? linesProp : linesProp === true ? [{}] : [linesProp];
155
+ for (const line of lineDefs) {
156
+ // const spacing = Math.abs(line.spacing);
157
+ const stroke = line.color ?? 'var(--color-surface-content)';
158
+ const strokeWidth = line.width ?? 1;
159
+ const opacity = line.opacity ?? 1;
6
160
 
7
- export let width: number;
8
- export let height: number;
161
+ let rotate = Math.round(line.rotate ?? 0) % 360;
162
+ if (rotate > 180) rotate = rotate - 360;
163
+ else if (rotate > 90) rotate = rotate - 180;
164
+ else if (rotate < -180) rotate = rotate + 360;
165
+ else if (rotate < -90) rotate = rotate + 180;
166
+
167
+ // Use a <path> instead of a <line> to have corners without gaps (start, main line, end)
168
+ let path = '';
169
+
170
+ if (rotate === 0) {
171
+ path = `
172
+ M 0 0 L ${width} 0
173
+ M 0 ${height} L ${width} ${height}
174
+ `;
175
+ } else if (rotate === 90) {
176
+ path = `
177
+ M 0 0 L 0 ${height}
178
+ M ${width} 0 L ${width} ${height}
179
+ `;
180
+ } else {
181
+ if (rotate > 0) {
182
+ path = `
183
+ M 0 ${-height} L ${width * 2} ${height}
184
+ M ${-width} ${-height} L ${width} ${height}
185
+ M ${-width} 0 L ${width} ${height * 2}
186
+ `;
187
+ } else {
188
+ path = `
189
+ M ${-width} ${height} L ${width} ${-height}
190
+ M ${-width} ${height * 2} L ${width * 2} ${-height}
191
+ M 0 ${height * 2} L ${width * 2} 0
192
+ `;
193
+ }
194
+ }
195
+
196
+ shapes.push({
197
+ type: 'line',
198
+ path,
199
+ stroke,
200
+ strokeWidth,
201
+ opacity,
202
+ });
203
+ }
204
+ }
205
+
206
+ if (circlesProp) {
207
+ const circleDefs = Array.isArray(circlesProp)
208
+ ? circlesProp
209
+ : circlesProp === true
210
+ ? [{}]
211
+ : [circlesProp];
212
+ for (const circle of circleDefs) {
213
+ if (circle.stagger) {
214
+ shapes.push(
215
+ {
216
+ type: 'circle',
217
+ cx: size / 4,
218
+ cy: size / 4,
219
+ r: circle.radius ?? 1,
220
+ fill: circle.color ?? 'var(--color-surface-content)',
221
+ opacity: circle.opacity ?? 1,
222
+ },
223
+ {
224
+ type: 'circle',
225
+ cx: (size * 3) / 4,
226
+ cy: (size * 3) / 4,
227
+ r: circle.radius ?? 1,
228
+ fill: circle.color ?? 'var(--color-surface-content)',
229
+ opacity: circle.opacity ?? 1,
230
+ }
231
+ );
232
+ } else {
233
+ shapes.push({
234
+ type: 'circle',
235
+ cx: size / 2,
236
+ cy: size / 2,
237
+ r: circle.radius ?? 1,
238
+ fill: circle.color ?? 'var(--color-surface-content)',
239
+ opacity: circle.opacity ?? 1,
240
+ });
241
+ }
242
+ }
243
+ }
244
+
245
+ function render(_ctx: CanvasRenderingContext2D) {
246
+ const pattern = createPattern(_ctx, width, height, shapes, background);
247
+ canvasPattern = pattern;
248
+ }
249
+
250
+ if (renderCtx === 'canvas') {
251
+ registerCanvasComponent({
252
+ name: 'Pattern',
253
+ render,
254
+ deps: () => [width, height, shapes, background],
255
+ });
256
+ }
9
257
  </script>
10
258
 
11
- <defs>
12
- <pattern {id} {width} {height} patternUnits="userSpaceOnUse" {...$$restProps}>
13
- <slot />
14
- </pattern>
15
- </defs>
259
+ {#if renderCtx === 'canvas'}
260
+ {@render children?.({ id, pattern: asAny(canvasPattern) })}
261
+ {:else if renderCtx === 'svg'}
262
+ <defs>
263
+ <pattern
264
+ {id}
265
+ {width}
266
+ {height}
267
+ patternUnits="userSpaceOnUse"
268
+ {...extractLayerProps(restProps, 'pattern')}
269
+ >
270
+ {#if patternContent}
271
+ {@render patternContent?.()}
272
+ {:else}
273
+ {#if background}
274
+ <rect {width} {height} fill={background} />
275
+ {/if}
276
+
277
+ {#each shapes.filter((shape) => shape.type === 'line') as line}
278
+ <path
279
+ d={line.path}
280
+ stroke={line.stroke}
281
+ stroke-width={line.strokeWidth}
282
+ fill="none"
283
+ opacity={line.opacity}
284
+ />
285
+ {/each}
286
+
287
+ {#each shapes.filter((shape) => shape.type === 'circle') as circle}
288
+ <circle
289
+ cx={circle.cx}
290
+ cy={circle.cy}
291
+ r={circle.r}
292
+ fill={circle.fill}
293
+ opacity={circle.opacity}
294
+ />
295
+ {/each}
296
+ {/if}
297
+ </pattern>
298
+ </defs>
299
+
300
+ {@render children?.({ id, pattern: `url(#${id})` })}
301
+ {/if}
@@ -1,21 +1,105 @@
1
- import { SvelteComponentTyped } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- [x: string]: any;
1
+ import type { Snippet } from 'svelte';
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import { type Without } from '../utils/types.js';
4
+ type PatternLineDef = {
5
+ /**
6
+ * The width of the line
7
+ * @default 1
8
+ */
9
+ width?: string;
10
+ /**
11
+ * The rotation of the line
12
+ * @default 0
13
+ */
14
+ rotate?: number;
15
+ /**
16
+ * The color of the line
17
+ * @default 'var(--color-surface-content)'
18
+ */
19
+ color?: string;
20
+ /**
21
+ * The opacity of the line
22
+ * @default 1
23
+ */
24
+ opacity?: number;
25
+ };
26
+ type PatternCircleDef = {
27
+ /**
28
+ * The radius of the circle
29
+ * @default 1
30
+ */
31
+ radius?: number;
32
+ /**
33
+ * Stagger the circle layout
34
+ * @default false
35
+ */
36
+ stagger?: boolean;
37
+ /**
38
+ * The color of the circle
39
+ * @default 'var(--color-surface-content)'
40
+ */
41
+ color?: string;
42
+ /**
43
+ * The opacity of the circle
44
+ * @default 1
45
+ */
46
+ opacity?: number;
47
+ };
48
+ export type PatternPropsWithoutHTML = {
49
+ /**
50
+ * The id of the pattern
51
+ */
52
+ id?: string;
53
+ /**
54
+ * The size of the pattern (sets `width` and `height` as same value).
55
+ */
56
+ size?: number;
57
+ /**
58
+ * The width of the pattern for custom patterns (set by `lines`, etc)
59
+ */
60
+ width?: number;
61
+ /**
62
+ * The height of the pattern for custom patterns (set by `lines`, etc)
63
+ */
64
+ height?: number;
65
+ /**
66
+ * The number of lines to render
67
+ */
68
+ lines?: boolean | PatternLineDef | PatternLineDef[];
69
+ /**
70
+ * The number of circles to render
71
+ */
72
+ circles?: boolean | PatternCircleDef | PatternCircleDef[];
73
+ /**
74
+ * The background color of the pattern
75
+ */
76
+ background?: string;
77
+ /**
78
+ * Render as a child of the pattern
79
+ */
80
+ patternContent?: Snippet;
81
+ children?: Snippet<[{
5
82
  id: string;
6
- width: number;
7
- height: number;
8
- };
9
- events: {
10
- [evt: string]: CustomEvent<any>;
11
- };
12
- slots: {
13
- default: {};
14
- };
83
+ pattern: string;
84
+ }]>;
85
+ };
86
+ export type PatternProps = PatternPropsWithoutHTML & Without<SVGAttributes<SVGPatternElement>, PatternPropsWithoutHTML>;
87
+ export type CircleShape = {
88
+ type: 'circle';
89
+ cx: number;
90
+ cy: number;
91
+ r: number;
92
+ fill: string;
93
+ opacity: number;
94
+ };
95
+ export type LineShape = {
96
+ type: 'line';
97
+ path: string;
98
+ stroke: string;
99
+ strokeWidth: string | number;
100
+ opacity: number;
15
101
  };
16
- export type PatternProps = typeof __propDef.props;
17
- export type PatternEvents = typeof __propDef.events;
18
- export type PatternSlots = typeof __propDef.slots;
19
- export default class Pattern extends SvelteComponentTyped<PatternProps, PatternEvents, PatternSlots> {
20
- }
21
- export {};
102
+ export type PatternShape = CircleShape | LineShape;
103
+ declare const Pattern: import("svelte").Component<PatternProps, {}, "">;
104
+ type Pattern = ReturnType<typeof Pattern>;
105
+ export default Pattern;
@@ -1,13 +1,87 @@
1
+ <script lang="ts" module>
2
+ import { pie as d3pie, type PieArcDatum } from 'd3-shape';
3
+
4
+ export type PiePropsWithoutHTML = {
5
+ data?: any[];
6
+
7
+ /**
8
+ * Range [min,max] in degrees. See also startAngle/endAngle
9
+ *
10
+ * @default [0, 360]
11
+ */
12
+ range?: [number, number] | number[];
13
+
14
+ /**
15
+ * Start angle in radians
16
+ */
17
+ startAngle?: number;
18
+
19
+ /**
20
+ * End angle in radians
21
+ */
22
+ endAngle?: number;
23
+
24
+ /**
25
+ * Define innerRadius.
26
+ * value >= 1: discrete value
27
+ * value > 0: percent of `outerRadius`
28
+ * value < 0: offset of `outerRadius`
29
+ * default: yRange min
30
+ */
31
+ innerRadius?: number;
32
+
33
+ /**
34
+ * Define outerRadius. Defaults to yRange max/2 (ie. chart height / 2)
35
+ */
36
+ outerRadius?: number;
37
+
38
+ /**
39
+ * Corner radius of the arc
40
+ *
41
+ * @default 0
42
+ */
43
+
44
+ cornerRadius?: number;
45
+
46
+ /**
47
+ * Angle between the arcs
48
+ *
49
+ * @default 0
50
+ */
51
+ padAngle?: number;
52
+
53
+ /**
54
+ * Offset all arcs from center
55
+ *
56
+ * @default 0
57
+ */
58
+ offset?: number;
59
+
60
+ /**
61
+ * Tooltip context to setup pointer events to show tooltip for related data
62
+ */
63
+ tooltipContext?: TooltipContextValue;
64
+
65
+ /**
66
+ * Sort function to sort the arcs
67
+ */
68
+ sort?: ((a: any, b: any) => number) | null;
69
+
70
+ children?: Snippet<[{ arcs: PieArcDatum<any>[] }]>;
71
+
72
+ motion?: MotionProp;
73
+ };
74
+ </script>
75
+
1
76
  <script lang="ts">
2
- import type { spring as springStore, tweened as tweenedStore } from 'svelte/motion';
3
- import { pie as d3pie } from 'd3-shape';
4
77
  import { min, max } from 'd3-array';
5
-
6
78
  import Arc from './Arc.svelte';
7
- import { chartContext } from './ChartContext.svelte';
8
79
  import { degreesToRadians } from '../utils/math.js';
9
- import { motionStore } from '../stores/motionStore.js';
80
+ import { createMotion, type MotionProp } from '../utils/motion.svelte.js';
10
81
  import type { TooltipContextValue } from './tooltip/TooltipContext.svelte';
82
+ import { getChartContext } from './Chart.svelte';
83
+ import type { Snippet } from 'svelte';
84
+ import { layerClass } from '../utils/attributes.js';
11
85
 
12
86
  /*
13
87
  TODO:
@@ -17,84 +91,56 @@
17
91
  - [ ] Hover events / change innerRadius / outerRadius, etc
18
92
  */
19
93
 
20
- export let data: any[] | undefined = undefined; // TODO: Update Type
21
-
22
- /**
23
- * Range [min,max] in degrees. See also startAngle/endAngle
24
- */
25
- export let range = [0, 360]; // degrees
26
-
27
- /**
28
- * Start angle in radians
29
- */
30
- export let startAngle: number | undefined = undefined;
31
-
32
- /**
33
- * End angle in radians
34
- */
35
- export let endAngle: number | undefined = undefined;
36
-
37
- /**
38
- * Define innerRadius.
39
- * value >= 1: discrete value
40
- * value > 0: percent of `outerRadius`
41
- * value < 0: offset of `outerRadius`
42
- * default: yRange min
43
- */
44
- export let innerRadius: number | undefined = undefined;
45
-
46
- /**
47
- * Define outerRadius. Defaults to yRange max/2 (ie. chart height / 2)
48
- */
49
- export let outerRadius: number | undefined = undefined;
50
-
51
- export let cornerRadius = 0;
52
- export let padAngle = 0;
53
-
54
- export let spring: boolean | Parameters<typeof springStore>[1] = undefined;
55
- export let tweened: boolean | Parameters<typeof tweenedStore>[1] = undefined;
56
-
57
- /**
58
- * Offset all arcs from center
59
- */
60
- export let offset = 0;
61
-
62
- /**
63
- * Tooltip context to setup pointer events to show tooltip for related data
64
- */
65
- export let tooltip: TooltipContextValue | undefined = undefined;
66
-
67
- export let sort: ((a: any, b: any) => number) | null | undefined = undefined;
68
-
69
- const { data: contextData, x, y, xRange, c, cScale, config } = chartContext();
70
-
71
- // @ts-expect-error
72
- $: resolved_endAngle = endAngle ?? degreesToRadians($config.xRange ? max($xRange) : max(range));
73
- let tweened_endAngle = motionStore(0, { spring, tweened });
74
- $: tweened_endAngle.set(resolved_endAngle);
75
-
76
- let pie: ReturnType<typeof d3pie<any>>;
77
- $: {
78
- pie = d3pie<any>()
79
- // @ts-expect-error
80
- .startAngle(startAngle ?? degreesToRadians($config.xRange ? min($xRange) : min(range)))
81
- .endAngle($tweened_endAngle)
94
+ let {
95
+ data,
96
+ range = [0, 360],
97
+ startAngle: startAngleProp,
98
+ endAngle: endAngleProp,
99
+ innerRadius,
100
+ outerRadius,
101
+ cornerRadius = 0,
102
+ padAngle = 0,
103
+ motion,
104
+ offset = 0,
105
+ tooltipContext,
106
+ sort,
107
+ children,
108
+ }: PiePropsWithoutHTML = $props();
109
+
110
+ const ctx = getChartContext();
111
+
112
+ const endAngle = $derived(
113
+ endAngleProp ?? degreesToRadians(ctx.config.xRange ? max(ctx.xRange) : max(range))
114
+ );
115
+
116
+ const motionEndAngle = createMotion(0, () => endAngle, motion);
117
+
118
+ const pie = $derived.by(() => {
119
+ let _pie = d3pie<any>()
120
+ .startAngle(
121
+ startAngleProp ?? degreesToRadians(ctx.config.xRange ? min(ctx.xRange) : min(range))
122
+ )
123
+ .endAngle(motionEndAngle.current)
82
124
  .padAngle(padAngle)
83
- .value($x);
125
+ .value(ctx.x);
84
126
 
85
127
  if (sort === null) {
86
- pie = pie.sort(null);
128
+ _pie = _pie.sort(null);
87
129
  } else if (sort) {
88
- pie = pie.sort(sort);
130
+ _pie = _pie.sort(sort);
89
131
  }
90
- }
132
+ return _pie;
133
+ });
91
134
 
92
- $: arcs = pie(data ?? (Array.isArray($contextData) ? $contextData : []));
135
+ const arcs = $derived(pie(data ?? (Array.isArray(ctx.data) ? ctx.data : [])));
93
136
  </script>
94
137
 
95
- <slot {arcs}>
138
+ {#if children}
139
+ {@render children({ arcs })}
140
+ {:else}
96
141
  {#each arcs as arc}
97
142
  <Arc
143
+ class={layerClass('pie-arc')}
98
144
  startAngle={arc.startAngle}
99
145
  endAngle={arc.endAngle}
100
146
  padAngle={arc.padAngle}
@@ -102,9 +148,9 @@
102
148
  {outerRadius}
103
149
  {cornerRadius}
104
150
  {offset}
105
- fill={$config.c ? $cScale?.($c(arc.data)) : null}
151
+ fill={ctx.config.c ? ctx.cScale?.(ctx.c(arc.data)) : null}
106
152
  data={arc.data}
107
- {tooltip}
153
+ {tooltipContext}
108
154
  />
109
155
  {/each}
110
- </slot>
156
+ {/if}