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,178 +1,291 @@
1
- <script lang="ts">
1
+ <script lang="ts" module>
2
+ import type { Transition, TransitionParams, Without } from '../utils/types.js';
3
+ import { extractTweenConfig, type MotionProp } from '../utils/motion.svelte.js';
2
4
  import type { SVGAttributes } from 'svelte/elements';
5
+
6
+ export type GridPropsWithoutHTML<In extends Transition = Transition> = {
7
+ /**
8
+ * Draw a x-axis lines
9
+ *
10
+ * @default false
11
+ */
12
+ x?: boolean | Pick<SVGAttributes<SVGElement>, 'class' | 'style'>;
13
+
14
+ /**
15
+ * Draw a y-axis lines
16
+ *
17
+ * @default false
18
+ */
19
+ y?: boolean | Pick<SVGAttributes<SVGElement>, 'class' | 'style'>;
20
+
21
+ /**
22
+ * Control the number of x-axis ticks
23
+ */
24
+ xTicks?: TicksConfig;
25
+
26
+ /**
27
+ * Control the number of y-axis ticks
28
+ *
29
+ * @default !isScaleBand(ctx.yScale) ? 4 : undefined
30
+ */
31
+ yTicks?: TicksConfig;
32
+
33
+ /**
34
+ * Line alignment when band scale is used (x or y axis)
35
+ *
36
+ * @default 'center'
37
+ */
38
+ bandAlign?: 'center' | 'between';
39
+
40
+ /**
41
+ * Render `y` lines with circles or linear splines
42
+ *
43
+ * @default 'circle'
44
+ */
45
+ radialY?: 'circle' | 'linear';
46
+
47
+ /**
48
+ * Classes to apply to the rendered elements.
49
+ *
50
+ * @default {}
51
+ */
52
+ classes?: {
53
+ root?: string;
54
+ line?: string;
55
+ };
56
+
57
+ /**
58
+ * Transition function for entering elements
59
+ * @default defaults to fade if motion is tweened
60
+ */
61
+ transitionIn?: In;
62
+
63
+ /**
64
+ * Parameters for the transitionIn function
65
+ * @default { easing: cubicIn }
66
+ */
67
+ transitionInParams?: TransitionParams<In>;
68
+
69
+ /**
70
+ * A reference to the underlying outermost `<g>` element.
71
+ *
72
+ * @bindable
73
+ */
74
+ ref?: SVGGElement;
75
+
76
+ motion?: MotionProp;
77
+ };
78
+
79
+ export type GridProps<In extends Transition = Transition> = Omit<
80
+ GridPropsWithoutHTML<In> & Without<GroupProps, GridPropsWithoutHTML<In>>,
81
+ 'children'
82
+ >;
83
+ </script>
84
+
85
+ <script lang="ts">
3
86
  import { fade } from 'svelte/transition';
4
87
  import { cubicIn } from 'svelte/easing';
5
- import type { spring as springStore, tweened as tweenedStore } from 'svelte/motion';
6
88
 
7
- import { curveLinearClosed } from 'd3-shape';
89
+ import { curveLinearClosed, pointRadial } from 'd3-shape';
8
90
 
9
91
  import { cls } from '@layerstack/tailwind';
10
- import type { TransitionParams } from 'svelte-ux'; // TODO: Replace with `@layerstack/svelte-types` or similar
11
92
 
12
- import { chartContext } from './ChartContext.svelte';
13
- import { isScaleBand, type AnyScale } from '../utils/scales.js';
93
+ import { isScaleBand } from '../utils/scales.svelte.js';
14
94
 
95
+ import Circle from './Circle.svelte';
96
+ import Group, { type GroupProps } from './Group.svelte';
97
+ import Line from './Line.svelte';
15
98
  import Rule from './Rule.svelte';
16
99
  import Spline from './Spline.svelte';
17
- import Circle from './Circle.svelte';
100
+ import { getChartContext } from './Chart.svelte';
101
+ import { extractLayerProps, layerClass } from '../utils/attributes.js';
102
+ import { resolveTickVals, type TicksConfig } from '../utils/ticks.js';
103
+
104
+ const ctx = getChartContext();
105
+
106
+ let {
107
+ x = false,
108
+ y = false,
109
+ xTicks,
110
+ yTicks: yTicksProp,
111
+ bandAlign = 'center',
112
+ radialY = 'circle',
113
+ motion,
114
+ transitionIn: transitionInProp,
115
+ transitionInParams = { easing: cubicIn },
116
+ classes = {},
117
+ class: className,
118
+ ref: refProp = $bindable(),
119
+ ...restProps
120
+ }: GridProps = $props();
18
121
 
19
- type TicksConfig = number | any[] | ((scale: AnyScale) => any) | null | undefined;
20
-
21
- const { xScale, yScale, radial } = chartContext();
22
-
23
- /** Draw a x-axis lines */
24
- export let x: boolean | Pick<SVGAttributes<SVGElement>, 'class' | 'style'> = false;
25
-
26
- /** Draw a y-axis lines */
27
- export let y: boolean | Pick<SVGAttributes<SVGElement>, 'class' | 'style'> = false;
28
-
29
- /** Control the number of x-axis ticks */
30
- export let xTicks: TicksConfig = undefined;
31
-
32
- /** Control the number of y-axis ticks */
33
- export let yTicks: TicksConfig = !isScaleBand($yScale) ? 4 : undefined;
34
-
35
- /** Line alignment when band scale is used (x or y axis) */
36
- export let bandAlign: 'center' | 'between' = 'center';
37
-
38
- /** Render `y` lines with circles or linear splines */
39
- export let radialY: 'circle' | 'linear' = 'circle';
40
-
41
- export let spring: boolean | Parameters<typeof springStore>[1] = undefined;
42
- export let tweened: boolean | Parameters<typeof tweenedStore>[1] = undefined;
43
-
44
- export let transitionIn = tweened
45
- ? fade
46
- : () => {
47
- return {};
48
- };
49
- export let transitionInParams: TransitionParams = { easing: cubicIn };
50
-
51
- export let classes: {
52
- root?: string;
53
- line?: string;
54
- } = {};
55
-
56
- function getTickVals(scale: AnyScale, ticks: TicksConfig): any[] {
57
- return Array.isArray(ticks)
58
- ? ticks
59
- : typeof ticks === 'function'
60
- ? ticks(scale)
61
- : isScaleBand(scale)
62
- ? ticks
63
- ? scale.domain().filter((v: any, i: number) => i % ticks === 0)
64
- : scale.domain()
65
- : scale.ticks?.(ticks);
66
- }
67
-
68
- $: xTickVals = getTickVals($xScale, xTicks);
69
- $: yTickVals = getTickVals($yScale, yTicks);
70
-
71
- $: xBandOffset = isScaleBand($xScale)
72
- ? bandAlign === 'between'
73
- ? -($xScale.padding() * $xScale.step()) / 2 // before
74
- : $xScale.step() / 2 - ($xScale.padding() * $xScale.step()) / 2 // center
75
- : 0;
76
-
77
- $: yBandOffset = isScaleBand($yScale)
78
- ? bandAlign === 'between'
79
- ? -($yScale.padding() * $yScale.step()) / 2 // before
80
- : $yScale.step() / 2 - ($yScale.padding() * $yScale.step()) / 2 // center
81
- : 0;
122
+ let ref = $state<SVGGElement>();
123
+
124
+ $effect.pre(() => {
125
+ refProp = ref;
126
+ });
127
+
128
+ const yTicks = $derived(yTicksProp ?? (!isScaleBand(ctx.yScale) ? 4 : undefined));
129
+
130
+ const tweenConfig = $derived(extractTweenConfig(motion));
131
+
132
+ const transitionIn = $derived((transitionInProp ?? tweenConfig?.options) ? fade : () => ({}));
133
+
134
+ const xTickVals = $derived(resolveTickVals(ctx.xScale, xTicks));
135
+ const yTickVals = $derived(resolveTickVals(ctx.yScale, yTicks));
136
+
137
+ const xBandOffset = $derived(
138
+ isScaleBand(ctx.xScale)
139
+ ? bandAlign === 'between'
140
+ ? -(ctx.xScale.padding() * ctx.xScale.step()) / 2 // before
141
+ : ctx.xScale.step() / 2 - (ctx.xScale.padding() * ctx.xScale.step()) / 2 // center
142
+ : 0
143
+ );
144
+
145
+ const yBandOffset = $derived(
146
+ isScaleBand(ctx.yScale)
147
+ ? bandAlign === 'between'
148
+ ? -(ctx.yScale.padding() * ctx.yScale.step()) / 2 // before
149
+ : ctx.yScale.step() / 2 - (ctx.yScale.padding() * ctx.yScale.step()) / 2 // center
150
+ : 0
151
+ );
82
152
  </script>
83
153
 
84
- <g class={cls('Grid', classes.root, $$props.class)}>
154
+ <Group bind:ref class={cls(layerClass('grid'), classes.root, className)} {...restProps}>
85
155
  {#if x}
86
- {@const splineProps = typeof x === 'object' ? x : null}
87
- <g in:transitionIn={transitionInParams}>
156
+ {@const splineProps = extractLayerProps(x, 'grid-x-line')}
157
+
158
+ <Group {transitionIn} {transitionInParams} class={layerClass('grid-x')}>
88
159
  {#each xTickVals as x (x)}
89
- {#if $radial}
90
- <Spline
91
- data={yTickVals.map((y) => ({ x, y }))}
92
- x="x"
93
- y="y"
94
- xOffset={xBandOffset}
95
- curve={curveLinearClosed}
96
- {tweened}
97
- {spring}
160
+ {#if ctx.radial}
161
+ {@const [x1, y1] = pointRadial(ctx.xScale(x), ctx.yRange[0])}
162
+ {@const [x2, y2] = pointRadial(ctx.xScale(x), ctx.yRange[1])}
163
+ <Line
164
+ {x1}
165
+ {y1}
166
+ {x2}
167
+ {y2}
168
+ motion={tweenConfig}
98
169
  {...splineProps}
99
- class={cls('stroke-surface-content/10', classes.line, splineProps?.class)}
170
+ class={cls(
171
+ layerClass('grid-x-radial-line'),
172
+ 'stroke-surface-content/10',
173
+ classes.line,
174
+ splineProps?.class
175
+ )}
100
176
  />
101
177
  {:else}
102
178
  <Rule
103
179
  {x}
104
180
  xOffset={xBandOffset}
105
- {tweened}
106
- {spring}
181
+ {motion}
107
182
  {...splineProps}
108
- class={cls('stroke-surface-content/10', classes.line, splineProps?.class)}
183
+ class={cls(
184
+ layerClass('grid-x-rule'),
185
+ 'stroke-surface-content/10',
186
+ classes.line,
187
+ splineProps?.class
188
+ )}
109
189
  />
110
190
  {/if}
111
191
  {/each}
112
192
 
113
193
  <!-- Add extra rule after last band -->
114
- {#if isScaleBand($xScale) && bandAlign === 'between' && !$radial && xTickVals.length}
194
+ {#if isScaleBand(ctx.xScale) && bandAlign === 'between' && !ctx.radial && xTickVals.length}
115
195
  <Rule
116
196
  x={xTickVals[xTickVals.length - 1]}
117
- xOffset={xBandOffset + $xScale.step()}
118
- {tweened}
119
- {spring}
197
+ xOffset={ctx.xScale.step() + xBandOffset}
198
+ {motion}
120
199
  {...splineProps}
121
- class={cls('stroke-surface-content/10', classes.line, splineProps?.class)}
200
+ class={cls(
201
+ layerClass('grid-x-end-rule'),
202
+ 'stroke-surface-content/10',
203
+ classes.line,
204
+ splineProps?.class
205
+ )}
122
206
  />
123
207
  {/if}
124
- </g>
208
+ </Group>
125
209
  {/if}
126
210
 
127
211
  {#if y}
128
- {@const splineProps = typeof y === 'object' ? y : null}
129
- <g in:transitionIn={transitionInParams}>
212
+ {@const splineProps = extractLayerProps(y, 'grid-y-line')}
213
+ <Group {transitionIn} {transitionInParams} class={layerClass('grid-y')}>
130
214
  {#each yTickVals as y (y)}
131
- {#if $radial}
215
+ {#if ctx.radial}
132
216
  {#if radialY === 'circle'}
133
217
  <Circle
134
- r={$yScale(y)}
135
- {tweened}
136
- {spring}
218
+ r={ctx.yScale(y) + yBandOffset}
219
+ {motion}
137
220
  {...splineProps}
138
- class={cls('fill-none stroke-surface-content/10', classes.line, splineProps?.class)}
221
+ class={cls(
222
+ layerClass('grid-y-radial-circle'),
223
+ 'fill-none stroke-surface-content/10',
224
+ classes.line,
225
+ splineProps?.class
226
+ )}
139
227
  />
140
228
  {:else}
141
229
  <Spline
142
230
  data={xTickVals.map((x) => ({ x, y }))}
143
231
  x="x"
144
232
  y="y"
145
- yOffset={yBandOffset}
146
- {tweened}
147
- {spring}
233
+ motion={tweenConfig}
148
234
  curve={curveLinearClosed}
149
235
  {...splineProps}
150
- class={cls('stroke-surface-content/10', classes.line, splineProps?.class)}
236
+ class={cls(
237
+ layerClass('grid-y-radial-line'),
238
+ 'stroke-surface-content/10',
239
+ classes.line,
240
+ splineProps?.class
241
+ )}
151
242
  />
152
243
  {/if}
153
244
  {:else}
154
245
  <Rule
155
246
  {y}
156
247
  yOffset={yBandOffset}
157
- {tweened}
158
- {spring}
248
+ {motion}
159
249
  {...splineProps}
160
- class={cls('stroke-surface-content/10', classes.line, splineProps?.class)}
250
+ class={cls(
251
+ layerClass('grid-y-rule'),
252
+ 'stroke-surface-content/10',
253
+ classes.line,
254
+ splineProps?.class
255
+ )}
161
256
  />
162
257
  {/if}
163
258
  {/each}
164
259
 
165
260
  <!-- Add extra rule after last band -->
166
- {#if isScaleBand($yScale) && bandAlign === 'between' && !$radial && yTickVals.length}
167
- <Rule
168
- y={yTickVals[yTickVals.length - 1]}
169
- yOffset={yBandOffset + $yScale.step()}
170
- {tweened}
171
- {spring}
172
- {...splineProps}
173
- class={cls('stroke-surface-content/10', classes.line, splineProps?.class)}
174
- />
261
+ {#if isScaleBand(ctx.yScale) && bandAlign === 'between' && yTickVals.length}
262
+ {#if ctx.radial}
263
+ <Circle
264
+ r={ctx.yScale(yTickVals[yTickVals.length - 1])! + ctx.yScale.step() + yBandOffset}
265
+ {motion}
266
+ {...splineProps}
267
+ class={cls(
268
+ layerClass('grid-y-radial-circle'),
269
+ 'fill-none stroke-surface-content/10',
270
+ classes.line,
271
+ splineProps?.class
272
+ )}
273
+ />
274
+ {:else}
275
+ <Rule
276
+ y={yTickVals[yTickVals.length - 1]}
277
+ yOffset={ctx.yScale.step() + yBandOffset}
278
+ {motion}
279
+ {...splineProps}
280
+ class={cls(
281
+ layerClass('grid-y-end-rule'),
282
+ 'stroke-surface-content/10',
283
+ classes.line,
284
+ splineProps?.class
285
+ )}
286
+ />
287
+ {/if}
175
288
  {/if}
176
- </g>
289
+ </Group>
177
290
  {/if}
178
- </g>
291
+ </Group>
@@ -0,0 +1,71 @@
1
+ import type { Transition, TransitionParams, Without } from '../utils/types.js';
2
+ import { type MotionProp } from '../utils/motion.svelte.js';
3
+ import type { SVGAttributes } from 'svelte/elements';
4
+ export type GridPropsWithoutHTML<In extends Transition = Transition> = {
5
+ /**
6
+ * Draw a x-axis lines
7
+ *
8
+ * @default false
9
+ */
10
+ x?: boolean | Pick<SVGAttributes<SVGElement>, 'class' | 'style'>;
11
+ /**
12
+ * Draw a y-axis lines
13
+ *
14
+ * @default false
15
+ */
16
+ y?: boolean | Pick<SVGAttributes<SVGElement>, 'class' | 'style'>;
17
+ /**
18
+ * Control the number of x-axis ticks
19
+ */
20
+ xTicks?: TicksConfig;
21
+ /**
22
+ * Control the number of y-axis ticks
23
+ *
24
+ * @default !isScaleBand(ctx.yScale) ? 4 : undefined
25
+ */
26
+ yTicks?: TicksConfig;
27
+ /**
28
+ * Line alignment when band scale is used (x or y axis)
29
+ *
30
+ * @default 'center'
31
+ */
32
+ bandAlign?: 'center' | 'between';
33
+ /**
34
+ * Render `y` lines with circles or linear splines
35
+ *
36
+ * @default 'circle'
37
+ */
38
+ radialY?: 'circle' | 'linear';
39
+ /**
40
+ * Classes to apply to the rendered elements.
41
+ *
42
+ * @default {}
43
+ */
44
+ classes?: {
45
+ root?: string;
46
+ line?: string;
47
+ };
48
+ /**
49
+ * Transition function for entering elements
50
+ * @default defaults to fade if motion is tweened
51
+ */
52
+ transitionIn?: In;
53
+ /**
54
+ * Parameters for the transitionIn function
55
+ * @default { easing: cubicIn }
56
+ */
57
+ transitionInParams?: TransitionParams<In>;
58
+ /**
59
+ * A reference to the underlying outermost `<g>` element.
60
+ *
61
+ * @bindable
62
+ */
63
+ ref?: SVGGElement;
64
+ motion?: MotionProp;
65
+ };
66
+ export type GridProps<In extends Transition = Transition> = Omit<GridPropsWithoutHTML<In> & Without<GroupProps, GridPropsWithoutHTML<In>>, 'children'>;
67
+ import { type GroupProps } from './Group.svelte';
68
+ import { type TicksConfig } from '../utils/ticks.js';
69
+ declare const Grid: import("svelte").Component<GridProps<Transition>, {}, "ref">;
70
+ type Grid = ReturnType<typeof Grid>;
71
+ export default Grid;