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,161 +1,199 @@
1
- <script lang="ts">
2
- import { onDestroy, type ComponentProps } from 'svelte';
3
- import type { tweened as tweenedStore } from 'svelte/motion';
4
- import { type Area, area as d3Area, areaRadial } from 'd3-shape';
5
- import type { CurveFactory } from 'd3-shape';
6
- import { max, min } from 'd3-array';
7
- import { interpolatePath } from 'd3-interpolate-path';
8
- import { merge } from 'lodash-es';
9
-
10
- import { cls } from '@layerstack/tailwind';
11
- import { objectId } from '@layerstack/utils/object';
12
-
13
- import { motionStore } from '../stores/motionStore.js';
14
-
15
- import { getRenderContext } from './Chart.svelte';
16
- import { chartContext } from './ChartContext.svelte';
17
- import Spline from './Spline.svelte';
1
+ <script lang="ts" module>
2
+ import { type Area as D3Area, area as d3Area, areaRadial } from 'd3-shape';
3
+ import type { SVGAttributes } from 'svelte/elements';
4
+ import type { CommonStyleProps, Without } from '../utils/types.js';
5
+ import type { ComponentProps } from 'svelte';
18
6
  import { accessor, type Accessor } from '../utils/common.js';
19
- import { isScaleBand } from '../utils/scales.js';
20
- import { flattenPathData } from '../utils/path.js';
21
- import { getCanvasContext } from './layout/Canvas.svelte';
22
- import { renderPathData, type ComputedStylesOptions } from '../utils/canvas.js';
23
- const {
24
- data: contextData,
25
- xScale,
26
- yScale,
27
- x: contextX,
28
- y,
29
- yDomain,
30
- yRange,
31
- radial,
32
- config,
33
- } = chartContext();
34
-
35
- /** Override data instead of using context */
36
- export let data: any = undefined;
37
7
 
38
- /** Pass `<path d={...} />` explicitly instead of calculating from data / context */
39
- export let pathData: string | undefined | null = undefined;
8
+ export type AreaPropsWithoutHTML = {
9
+ /** Override data instead of using context */
10
+ data?: any;
40
11
 
41
- /** Override x accessor */
42
- export let x: Accessor = undefined;
12
+ /**
13
+ * Pass `<path d={...} />` explicitly instead of calculating from data / context
14
+ */
15
+ pathData?: string | null;
43
16
 
44
- /** Override y0 accessor. Defaults to max($yRange) */
45
- export let y0: Accessor = undefined;
46
- /** Override y1 accessor. Defaults to y accessor */
47
- export let y1: Accessor = undefined;
17
+ /**
18
+ * Override x accessor
19
+ */
20
+ x?: Accessor;
48
21
 
49
- /** Interpolate path data using d3-interpolate-path */
50
- export let tweened: boolean | Parameters<typeof tweenedStore>[1] = undefined;
22
+ /**
23
+ * Override y0 accessor. Defaults to max($yRange)
24
+ */
25
+ y0?: Accessor;
51
26
 
52
- export let clipPath: string | undefined = undefined;
27
+ /**
28
+ * Override y1 accessor. Defaults to y accessor
29
+ */
30
+ y1?: Accessor;
53
31
 
54
- export let curve: CurveFactory | undefined = undefined;
55
- export let defined: Parameters<Area<any>['defined']>[0] | undefined = undefined;
32
+ /**
33
+ * Whether to tween the interpolated path data using d3-interpolate-path
34
+ */
35
+ motion?: MotionProp;
56
36
 
57
- /** Enable showing line */
58
- export let line: boolean | Partial<ComponentProps<Spline>> = false;
37
+ clipPath?: string;
59
38
 
60
- export let fill: string | undefined = undefined;
61
- export let fillOpacity: number | undefined = undefined;
62
- export let stroke: string | undefined = undefined;
63
- export let strokeWidth: number | undefined = undefined;
64
- export let opacity: number | undefined = undefined;
39
+ curve?: CurveFactory;
65
40
 
66
- let className: string | undefined = undefined;
67
- export { className as class };
41
+ defined?: Parameters<D3Area<any>['defined']>[0];
68
42
 
69
- export let onclick: ((e: MouseEvent) => void) | undefined = undefined;
70
- export let onpointerenter: ((e: PointerEvent) => void) | undefined = undefined;
71
- export let onpointermove: ((e: PointerEvent) => void) | undefined = undefined;
72
- export let onpointerleave: ((e: PointerEvent) => void) | undefined = undefined;
43
+ /**
44
+ * Enable showing line
45
+ *
46
+ * @default false
47
+ */
48
+ line?: boolean | Partial<ComponentProps<typeof Spline>>;
49
+ } & CommonStyleProps;
73
50
 
74
- $: xAccessor = x ? accessor(x) : $contextX;
75
- $: y0Accessor = y0 ? accessor(y0) : (d: any) => min($yDomain);
76
- $: y1Accessor = y1 ? accessor(y1) : $y;
51
+ export type AreaProps = AreaPropsWithoutHTML &
52
+ Without<SVGAttributes<SVGPathElement>, AreaPropsWithoutHTML>;
53
+ </script>
77
54
 
78
- $: xOffset = isScaleBand($xScale) ? $xScale.bandwidth() / 2 : 0;
79
- $: yOffset = isScaleBand($yScale) ? $yScale.bandwidth() / 2 : 0;
55
+ <script lang="ts">
56
+ import type { CurveFactory } from 'd3-shape';
57
+ import { max, min } from 'd3-array';
58
+ import { interpolatePath } from 'd3-interpolate-path';
59
+ import { merge } from 'lodash-es';
80
60
 
81
- /** Provide initial `0` horizontal baseline and initially hide/untrack scale changes so not reactive (only set on initial mount) */
61
+ import { getRenderContext } from './Chart.svelte';
62
+ import Spline from './Spline.svelte';
63
+ import { isScaleBand } from '../utils/scales.svelte.js';
64
+ import { flattenPathData } from '../utils/path.js';
65
+ import { registerCanvasComponent } from './layout/Canvas.svelte';
66
+ import { renderPathData, type ComputedStylesOptions } from '../utils/canvas.js';
67
+ import { getChartContext } from './Chart.svelte';
68
+ import {
69
+ createMotion,
70
+ extractTweenConfig,
71
+ type MotionProp,
72
+ type ResolvedMotion,
73
+ } from '../utils/motion.svelte.js';
74
+ import { createKey } from '../utils/key.svelte.js';
75
+ import { extractLayerProps } from '../utils/attributes.js';
76
+
77
+ const ctx = getChartContext();
78
+ const renderCtx = getRenderContext();
79
+
80
+ let {
81
+ clipPath,
82
+ curve,
83
+ data,
84
+ defined,
85
+ fill,
86
+ fillOpacity,
87
+ line = false,
88
+ opacity,
89
+ pathData,
90
+ stroke,
91
+ strokeWidth,
92
+ motion,
93
+ x,
94
+ y0,
95
+ y1,
96
+ ...restProps
97
+ }: AreaProps = $props();
98
+
99
+ const xAccessor = $derived(x ? accessor(x) : ctx.x);
100
+ const y0Accessor = $derived(y0 ? accessor(y0) : (d: any) => min(ctx.yDomain));
101
+ const y1Accessor = $derived(y1 ? accessor(y1) : ctx.y);
102
+
103
+ const xOffset = $derived(isScaleBand(ctx.xScale) ? ctx.xScale.bandwidth() / 2 : 0);
104
+ const yOffset = $derived(isScaleBand(ctx.yScale) ? ctx.yScale.bandwidth() / 2 : 0);
105
+
106
+ const extractedTween = extractTweenConfig(motion);
107
+
108
+ const tweenOptions: ResolvedMotion | undefined = extractedTween
109
+ ? {
110
+ type: extractedTween.type,
111
+ options: {
112
+ interpolate: interpolatePath,
113
+ ...extractedTween.options,
114
+ },
115
+ }
116
+ : undefined;
117
+
118
+ /**
119
+ * Provide initial `0` horizontal baseline and initially hide/untrack scale changes so not
120
+ * reactive (only set on initial mount)
121
+ */
82
122
  function defaultPathData() {
83
- if (!tweenedOptions) {
123
+ if (!tweenOptions) {
84
124
  // If not tweened, return empty string (faster initial render)
85
125
  return '';
86
126
  } else if (pathData) {
87
127
  // Flatten all `y` coordinates of pre-defined `pathData`
88
- return flattenPathData(pathData, Math.min($yScale(0), $yRange[0]));
89
- } else if ($config.x) {
128
+ return flattenPathData(pathData, Math.min(ctx.yScale(0), ctx.yRange[0]));
129
+ } else if (ctx.config.x) {
90
130
  // Only use default line if `x` accessor is defined (cartesian chart)
91
- const path = $radial
131
+ const path = ctx.radial
92
132
  ? areaRadial()
93
- .angle((d) => $xScale(xAccessor(d)))
94
- .innerRadius((d) => Math.min($yScale(0), $yRange[0]))
95
- .outerRadius((d) => Math.min($yScale(0), $yRange[0]))
133
+ .angle((d) => ctx.xScale(xAccessor(d)))
134
+ .innerRadius(() => Math.min(ctx.yScale(0), ctx.yRange[0]))
135
+ .outerRadius(() => Math.min(ctx.yScale(0), ctx.yRange[0]))
96
136
  : d3Area()
97
- .x((d) => $xScale(xAccessor(d)) + xOffset)
98
- .y0((d) => Math.min($yScale(0), $yRange[0]))
99
- .y1((d) => Math.min($yScale(0), $yRange[0]));
137
+ .x((d) => ctx.xScale(xAccessor(d)) + xOffset)
138
+ .y0(() => Math.min(ctx.yScale(0), ctx.yRange[0]))
139
+ .y1(() => Math.min(ctx.yScale(0), ctx.yRange[0]));
100
140
 
101
141
  path.defined(defined ?? ((d) => xAccessor(d) != null && y1Accessor(d) != null));
102
142
 
103
143
  if (curve) path.curve(curve);
104
144
 
105
- return path(data ?? $contextData);
145
+ // TODO: type this appropriately otherwise we will have bugs in the future
146
+ return path(data ?? ctx.data);
106
147
  }
107
148
  }
108
149
 
109
- const tweenedOptions = tweened
110
- ? { interpolate: interpolatePath, ...(typeof tweened === 'object' ? tweened : null) }
111
- : false;
112
- $: tweened_d = motionStore(defaultPathData(), { tweened: tweenedOptions });
113
- $: {
114
- const path = $radial
150
+ const d = $derived.by(() => {
151
+ const _path = ctx.radial
115
152
  ? areaRadial()
116
- .angle((d) => $xScale(xAccessor(d)))
117
- .innerRadius((d) => $yScale(y0Accessor(d)))
118
- .outerRadius((d) => $yScale(y1Accessor(d)))
153
+ .angle((d) => ctx.xScale(xAccessor(d)))
154
+ .innerRadius((d) => ctx.yScale(y0Accessor(d)))
155
+ .outerRadius((d) => ctx.yScale(y1Accessor(d)))
119
156
  : d3Area()
120
- .x((d) => $xScale(xAccessor(d)) + xOffset)
157
+ .x((d) => {
158
+ const v = xAccessor(d);
159
+ return ctx.xScale(v) + xOffset;
160
+ })
121
161
  .y0((d) => {
122
- let value = max<number>($yRange)!;
162
+ let value = max<number>(ctx.yRange)!;
123
163
  if (y0) {
124
- value = $yScale(y0Accessor(d));
125
- } else if (Array.isArray($config.y) && $config.y[0] === 0) {
164
+ value = ctx.yScale(y0Accessor(d));
165
+ } else if (Array.isArray(ctx.config.y) && ctx.config.y[0] === 0) {
126
166
  // Use first value if `y` defined as an array (ex. `<Chart y={[0,1]}>`)
127
167
  // TODO: Would be nice if this also handled multi-series (<Chart y={['apples', 'bananas', 'oranges']}>) as well as delta values (<Chart y={['baseline', 'value']}>)
128
- value = $yScale($y(d)[0]);
168
+ value = ctx.yScale(ctx.y(d)[0]);
129
169
  }
130
170
 
131
171
  return value + yOffset;
132
172
  })
133
173
  .y1((d) => {
134
- let value = max<number>($yRange)!;
174
+ let value = max<number>(ctx.yRange)!;
135
175
  if (y1) {
136
- value = $yScale(y1Accessor(d));
137
- } else if (Array.isArray($config.y) && $config.y[1] === 1) {
176
+ value = ctx.yScale(y1Accessor(d));
177
+ } else if (Array.isArray(ctx.config.y) && ctx.config.y[1] === 1) {
138
178
  // Use second value if `y` defined as an array (ex. `<Chart y={[0,1]}>`)
139
179
  // TODO: Would be nice if this also handled multi-series (<Chart y={['apples', 'bananas', 'oranges']}>) as well as delta values (<Chart y={['baseline', 'value']}>)
140
- value = $yScale($y(d)[1]);
180
+ value = ctx.yScale(ctx.y(d)[1]);
141
181
  } else {
142
182
  // Expect single value defined for `y` (ex. `<Chart y="value">`)
143
- value = $yScale($y(d));
183
+ value = ctx.yScale(ctx.y(d));
144
184
  }
145
185
 
146
186
  return value + yOffset;
147
187
  });
148
188
 
149
- path.defined(defined ?? ((d) => xAccessor(d) != null && y1Accessor(d) != null));
189
+ _path.defined(defined ?? ((d: any) => xAccessor(d) != null && y1Accessor(d) != null));
150
190
 
151
- if (curve) path.curve(curve);
191
+ if (curve) _path.curve(curve);
152
192
 
153
- const d = pathData ?? path(data ?? $contextData);
154
- tweened_d.set(d ?? '');
155
- }
193
+ return pathData ?? _path(data ?? ctx.data) ?? defaultPathData();
194
+ });
156
195
 
157
- const renderContext = getRenderContext();
158
- const canvasContext = getCanvasContext();
196
+ const tweenState = createMotion(defaultPathData(), () => d, tweenOptions);
159
197
 
160
198
  function render(
161
199
  ctx: CanvasRenderingContext2D,
@@ -163,78 +201,56 @@
163
201
  ) {
164
202
  renderPathData(
165
203
  ctx,
166
- $tweened_d,
204
+ tweenState.current,
167
205
  styleOverrides
168
206
  ? merge({ styles: { strokeWidth } }, styleOverrides)
169
207
  : {
170
208
  styles: { fill, fillOpacity, stroke, strokeWidth, opacity },
171
- classes: className,
209
+ classes: restProps.class ?? '',
172
210
  }
173
211
  );
174
212
  }
175
213
 
176
214
  // TODO: Use objectId to work around Svelte 4 reactivity issue (even when memoizing gradients)
177
- $: fillKey = fill && typeof fill === 'object' ? objectId(fill) : fill;
178
- $: strokeKey = stroke && typeof stroke === 'object' ? objectId(stroke) : stroke;
215
+ const fillKey = createKey(() => fill);
216
+ const strokeKey = createKey(() => stroke);
179
217
 
180
- $: if (renderContext === 'canvas') {
181
- // Redraw when props change
182
- fillKey && fillOpacity && strokeKey && strokeWidth && opacity && className;
183
- canvasContext.invalidate();
184
- }
185
-
186
- let canvasUnregister: ReturnType<typeof canvasContext.register>;
187
- $: if (renderContext === 'canvas') {
188
- canvasUnregister = canvasContext.register({
218
+ if (renderCtx === 'canvas') {
219
+ registerCanvasComponent({
189
220
  name: 'Area',
190
221
  render,
191
222
  events: {
192
- click: onclick,
193
- pointerenter: onpointerenter,
194
- pointermove: onpointermove,
195
- pointerleave: onpointerleave,
223
+ click: restProps.onclick,
224
+ pointerenter: restProps.onpointerenter,
225
+ pointermove: restProps.onpointermove,
226
+ pointerleave: restProps.onpointerleave,
196
227
  },
197
- });
198
-
199
- tweened_d.subscribe(() => {
200
- canvasContext.invalidate();
228
+ deps: () => [
229
+ fillKey.current,
230
+ fillOpacity,
231
+ strokeKey.current,
232
+ strokeWidth,
233
+ opacity,
234
+ restProps.class,
235
+ tweenState.current,
236
+ ],
201
237
  });
202
238
  }
203
-
204
- onDestroy(() => {
205
- if (renderContext === 'canvas') {
206
- canvasUnregister();
207
- }
208
- });
209
239
  </script>
210
240
 
211
241
  {#if line}
212
- <Spline
213
- {data}
214
- {x}
215
- y={y1}
216
- {curve}
217
- {defined}
218
- {tweened}
219
- {...typeof line === 'object' ? line : null}
220
- />
242
+ <Spline {data} {x} y={y1} {curve} {defined} {motion} {...extractLayerProps(line, 'area-line')} />
221
243
  {/if}
222
244
 
223
- {#if renderContext === 'svg'}
224
- <!-- svelte-ignore a11y-no-static-element-interactions -->
245
+ {#if renderCtx === 'svg'}
225
246
  <path
226
- d={$tweened_d}
247
+ d={tweenState.current}
227
248
  clip-path={clipPath}
228
249
  {fill}
229
250
  fill-opacity={fillOpacity}
230
251
  {stroke}
231
252
  stroke-width={strokeWidth}
232
253
  {opacity}
233
- {...$$restProps}
234
- class={cls('path-area', className)}
235
- on:click={onclick}
236
- on:pointerenter={onpointerenter}
237
- on:pointermove={onpointermove}
238
- on:pointerleave={onpointerleave}
254
+ {...extractLayerProps(restProps, 'area-path')}
239
255
  />
240
256
  {/if}
@@ -0,0 +1,45 @@
1
+ import { type Area as D3Area } from 'd3-shape';
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import type { CommonStyleProps, Without } from '../utils/types.js';
4
+ import type { ComponentProps } from 'svelte';
5
+ import { type Accessor } from '../utils/common.js';
6
+ export type AreaPropsWithoutHTML = {
7
+ /** Override data instead of using context */
8
+ data?: any;
9
+ /**
10
+ * Pass `<path d={...} />` explicitly instead of calculating from data / context
11
+ */
12
+ pathData?: string | null;
13
+ /**
14
+ * Override x accessor
15
+ */
16
+ x?: Accessor;
17
+ /**
18
+ * Override y0 accessor. Defaults to max($yRange)
19
+ */
20
+ y0?: Accessor;
21
+ /**
22
+ * Override y1 accessor. Defaults to y accessor
23
+ */
24
+ y1?: Accessor;
25
+ /**
26
+ * Whether to tween the interpolated path data using d3-interpolate-path
27
+ */
28
+ motion?: MotionProp;
29
+ clipPath?: string;
30
+ curve?: CurveFactory;
31
+ defined?: Parameters<D3Area<any>['defined']>[0];
32
+ /**
33
+ * Enable showing line
34
+ *
35
+ * @default false
36
+ */
37
+ line?: boolean | Partial<ComponentProps<typeof Spline>>;
38
+ } & CommonStyleProps;
39
+ export type AreaProps = AreaPropsWithoutHTML & Without<SVGAttributes<SVGPathElement>, AreaPropsWithoutHTML>;
40
+ import type { CurveFactory } from 'd3-shape';
41
+ import Spline from './Spline.svelte';
42
+ import { type MotionProp } from '../utils/motion.svelte.js';
43
+ declare const Area: import("svelte").Component<AreaProps, {}, "">;
44
+ type Area = ReturnType<typeof Area>;
45
+ export default Area;