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,23 +1,45 @@
1
+ <script lang="ts" module>
2
+ import type { Snippet } from 'svelte';
3
+ import type { Without } from '../utils/types.js';
4
+
5
+ export type ChartClipPathPropsWithoutHTML = {
6
+ /**
7
+ * Include padding area (ex. axis)
8
+ *
9
+ * @default false
10
+ */
11
+ full?: boolean;
12
+
13
+ /**
14
+ * Disable clipping (show all)
15
+ *
16
+ * @default false
17
+ */
18
+ disabled?: boolean;
19
+
20
+ children?: Snippet;
21
+ };
22
+
23
+ export type ChartClipPathProps = ChartClipPathPropsWithoutHTML &
24
+ Without<Omit<RectClipPathProps, 'width' | 'height'>, ChartClipPathPropsWithoutHTML>;
25
+ </script>
26
+
1
27
  <script lang="ts">
2
- import { chartContext } from './ChartContext.svelte';
3
- import RectClipPath from './RectClipPath.svelte';
28
+ import { getChartContext } from './Chart.svelte';
4
29
 
5
- const { width, height, padding } = chartContext();
30
+ import RectClipPath, { type RectClipPathProps } from './RectClipPath.svelte';
31
+ import { extractLayerProps } from '../utils/attributes.js';
6
32
 
7
- /** Include padding area (ex. axis) */
8
- export let full = false;
33
+ let { full = false, disabled = false, ...restProps }: ChartClipPathProps = $props();
9
34
 
10
- /** Disable clipping (show all) */
11
- export let disabled: boolean = false;
35
+ const ctx = getChartContext();
12
36
  </script>
13
37
 
14
38
  <RectClipPath
15
- x={full && $padding.left ? -$padding.left : 0}
16
- y={full && $padding.top ? -$padding.top : 0}
17
- width={$width + (full ? ($padding?.left ?? 0) + ($padding?.right ?? 0) : 0)}
18
- height={$height + (full ? ($padding?.top ?? 0) + ($padding?.bottom ?? 0) : 0)}
39
+ x={full && ctx.padding.left ? -ctx.padding.left : 0}
40
+ y={full && ctx.padding.top ? -ctx.padding.top : 0}
19
41
  {disabled}
20
- {...$$restProps}
21
- >
22
- <slot />
23
- </RectClipPath>
42
+ height={ctx.height + (full ? (ctx.padding?.top ?? 0) + (ctx.padding?.bottom ?? 0) : 0)}
43
+ width={ctx.width + (full ? (ctx.padding?.left ?? 0) + (ctx.padding?.right ?? 0) : 0)}
44
+ {...extractLayerProps(restProps, 'chart-clip-path')}
45
+ />
@@ -1,20 +1,22 @@
1
- import { SvelteComponentTyped } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- [x: string]: any;
5
- full?: boolean | undefined;
6
- disabled?: boolean | undefined;
7
- };
8
- events: {
9
- [evt: string]: CustomEvent<any>;
10
- };
11
- slots: {
12
- default: {};
13
- };
1
+ import type { Snippet } from 'svelte';
2
+ import type { Without } from '../utils/types.js';
3
+ export type ChartClipPathPropsWithoutHTML = {
4
+ /**
5
+ * Include padding area (ex. axis)
6
+ *
7
+ * @default false
8
+ */
9
+ full?: boolean;
10
+ /**
11
+ * Disable clipping (show all)
12
+ *
13
+ * @default false
14
+ */
15
+ disabled?: boolean;
16
+ children?: Snippet;
14
17
  };
15
- export type ChartClipPathProps = typeof __propDef.props;
16
- export type ChartClipPathEvents = typeof __propDef.events;
17
- export type ChartClipPathSlots = typeof __propDef.slots;
18
- export default class ChartClipPath extends SvelteComponentTyped<ChartClipPathProps, ChartClipPathEvents, ChartClipPathSlots> {
19
- }
20
- export {};
18
+ export type ChartClipPathProps = ChartClipPathPropsWithoutHTML & Without<Omit<RectClipPathProps, 'width' | 'height'>, ChartClipPathPropsWithoutHTML>;
19
+ import { type RectClipPathProps } from './RectClipPath.svelte';
20
+ declare const ChartClipPath: import("svelte").Component<ChartClipPathProps, {}, "">;
21
+ type ChartClipPath = ReturnType<typeof ChartClipPath>;
22
+ export default ChartClipPath;
@@ -1,54 +1,108 @@
1
+ <script lang="ts" module>
2
+ import type { CommonStyleProps, Without } from '../utils/types.js';
3
+
4
+ export type CirclePropsWithoutHTML = {
5
+ /**
6
+ * The center x position of the circle.
7
+ *
8
+ * @default 0
9
+ */
10
+ cx?: number;
11
+
12
+ /**
13
+ * The initial center x position of the circle.
14
+ *
15
+ * @default cx
16
+ */
17
+ initialCx?: number;
18
+
19
+ /**
20
+ * The center y position of the circle.
21
+ *
22
+ * @default 0
23
+ */
24
+ cy?: number;
25
+
26
+ /**
27
+ * The initial center y position of the circle.
28
+ *
29
+ * @default cy
30
+ */
31
+ initialCy?: number;
32
+
33
+ /**
34
+ * The radius of the circle.
35
+ *
36
+ * @default 1
37
+ */
38
+ r?: number;
39
+
40
+ /**
41
+ * The initial radius of the circle.
42
+ *
43
+ * @default r
44
+ */
45
+ initialR?: number;
46
+
47
+ /**
48
+ * A bindable reference to the `<circle>` element
49
+ *
50
+ * @bindable
51
+ */
52
+ ref?: SVGCircleElement;
53
+
54
+ motion?: MotionProp;
55
+ } & CommonStyleProps;
56
+
57
+ export type CircleProps = CirclePropsWithoutHTML &
58
+ Without<SVGAttributes<Element>, CirclePropsWithoutHTML>;
59
+ </script>
60
+
1
61
  <script lang="ts">
2
- import { onDestroy, tick } from 'svelte';
3
- import type { spring as springStore, tweened as tweenedStore } from 'svelte/motion';
4
62
  import { cls } from '@layerstack/tailwind';
5
- import { objectId } from '@layerstack/utils/object';
6
63
  import { merge } from 'lodash-es';
7
64
 
8
65
  import { getRenderContext } from './Chart.svelte';
9
- import { motionStore } from '../stores/motionStore.js';
10
- import { getCanvasContext } from './layout/Canvas.svelte';
66
+ import { createMotion, type MotionProp } from '../utils/motion.svelte.js';
67
+ import { registerCanvasComponent } from './layout/Canvas.svelte';
11
68
  import { renderCircle, type ComputedStylesOptions } from '../utils/canvas.js';
69
+ import type { SVGAttributes } from 'svelte/elements';
70
+ import { createKey } from '../utils/key.svelte.js';
71
+ import { layerClass } from '../utils/attributes.js';
72
+
73
+ let {
74
+ cx = 0,
75
+ initialCx: initialCxProp,
76
+ cy = 0,
77
+ initialCy: initialCyProp,
78
+ r = 1,
79
+ initialR: initialRProp,
80
+ motion,
81
+ fill,
82
+ fillOpacity,
83
+ stroke,
84
+ strokeWidth,
85
+ opacity,
86
+ class: className,
87
+ ref: refProp = $bindable(),
88
+ ...restProps
89
+ }: CircleProps = $props();
90
+
91
+ let ref = $state<SVGCircleElement>();
92
+
93
+ $effect.pre(() => {
94
+ refProp = ref;
95
+ });
12
96
 
13
- export let cx: number = 0;
14
- export let initialCx = cx;
15
-
16
- export let cy: number = 0;
17
- export let initialCy = cy;
18
-
19
- export let r: number = 1;
20
- export let initialR = r;
21
-
22
- export let spring: boolean | Parameters<typeof springStore>[1] = undefined;
23
- export let tweened: boolean | Parameters<typeof tweenedStore>[1] = undefined;
24
-
25
- export let fill: string | undefined = undefined;
26
- export let fillOpacity: number | undefined = undefined;
27
- export let stroke: string | undefined = undefined;
28
- export let strokeWidth: number | undefined = undefined;
29
- export let opacity: number | undefined = undefined;
30
-
31
- let className: string | undefined = undefined;
32
- export { className as class };
33
-
34
- export let onclick: ((e: MouseEvent) => void) | undefined = undefined;
35
- export let onpointerdown: ((e: PointerEvent) => void) | undefined = undefined;
36
- export let onpointerenter: ((e: PointerEvent) => void) | undefined = undefined;
37
- export let onpointermove: ((e: PointerEvent) => void) | undefined = undefined;
38
- export let onpointerleave: ((e: PointerEvent) => void) | undefined = undefined;
39
-
40
- let tweened_cx = motionStore(initialCx, { spring, tweened });
41
- let tweened_cy = motionStore(initialCy, { spring, tweened });
42
- let tweened_r = motionStore(initialR, { spring, tweened });
97
+ const initialCx = initialCxProp ?? cx;
98
+ const initialCy = initialCyProp ?? cy;
99
+ const initialR = initialRProp ?? r;
43
100
 
44
- $: tick().then(() => {
45
- tweened_cx.set(cx);
46
- tweened_cy.set(cy);
47
- tweened_r.set(r);
48
- });
101
+ const renderCtx = getRenderContext();
49
102
 
50
- const renderContext = getRenderContext();
51
- const canvasContext = getCanvasContext();
103
+ const motionCx = createMotion(initialCx, () => cx, motion);
104
+ const motionCy = createMotion(initialCy, () => cy, motion);
105
+ const motionR = createMotion(initialR, () => r, motion);
52
106
 
53
107
  function render(
54
108
  ctx: CanvasRenderingContext2D,
@@ -56,7 +110,7 @@
56
110
  ) {
57
111
  renderCircle(
58
112
  ctx,
59
- { cx: $tweened_cx, cy: $tweened_cy, r: $tweened_r },
113
+ { cx: motionCx.current, cy: motionCy.current, r: motionR.current },
60
114
  styleOverrides
61
115
  ? merge({ styles: { strokeWidth } }, styleOverrides)
62
116
  : {
@@ -67,62 +121,47 @@
67
121
  }
68
122
 
69
123
  // TODO: Use objectId to work around Svelte 4 reactivity issue (even when memoizing gradients)
70
- $: fillKey = fill && typeof fill === 'object' ? objectId(fill) : fill;
71
- $: strokeKey = stroke && typeof stroke === 'object' ? objectId(stroke) : stroke;
72
-
73
- $: if (renderContext === 'canvas') {
74
- // Redraw when props changes
75
- $tweened_cx &&
76
- $tweened_cy &&
77
- $tweened_r &&
78
- fillKey &&
79
- fillOpacity &&
80
- strokeKey &&
81
- strokeWidth &&
82
- opacity &&
83
- className;
84
- canvasContext.invalidate();
85
- }
124
+ const fillKey = createKey(() => fill);
125
+ const strokeKey = createKey(() => stroke);
86
126
 
87
- let canvasUnregister: ReturnType<typeof canvasContext.register>;
88
- $: if (renderContext === 'canvas') {
89
- canvasUnregister = canvasContext.register({
127
+ if (renderCtx === 'canvas') {
128
+ registerCanvasComponent({
90
129
  name: 'Circle',
91
130
  render,
92
131
  events: {
93
- click: onclick,
94
- pointerdown: onpointerdown,
95
- pointerenter: onpointerenter,
96
- pointermove: onpointermove,
97
- pointerleave: onpointerleave,
132
+ click: restProps.onclick,
133
+ pointerdown: restProps.onpointerdown,
134
+ pointerenter: restProps.onpointerenter,
135
+ pointermove: restProps.onpointermove,
136
+ pointerleave: restProps.onpointerleave,
98
137
  },
138
+ deps: () => [
139
+ motionCx.current,
140
+ motionCy.current,
141
+ motionR.current,
142
+ fillKey.current,
143
+ fillOpacity,
144
+ strokeKey.current,
145
+ strokeWidth,
146
+ opacity,
147
+ className,
148
+ ],
99
149
  });
100
150
  }
101
-
102
- onDestroy(() => {
103
- if (renderContext === 'canvas') {
104
- canvasUnregister();
105
- }
106
- });
107
151
  </script>
108
152
 
109
- {#if renderContext === 'svg'}
110
- <!-- svelte-ignore a11y-no-static-element-interactions -->
153
+ {#if renderCtx === 'svg'}
111
154
  <circle
112
- cx={$tweened_cx}
113
- cy={$tweened_cy}
114
- r={$tweened_r}
155
+ bind:this={ref}
156
+ cx={motionCx.current}
157
+ cy={motionCy.current}
158
+ r={motionR.current}
115
159
  {fill}
116
160
  fill-opacity={fillOpacity}
117
161
  {stroke}
118
162
  stroke-width={strokeWidth}
119
163
  {opacity}
120
- class={cls(fill == null && 'fill-surface-content', className)}
121
- {...$$restProps}
122
- on:click={onclick}
123
- on:pointerdown={onpointerdown}
124
- on:pointerenter={onpointerenter}
125
- on:pointermove={onpointermove}
126
- on:pointerleave={onpointerleave}
164
+ class={cls(layerClass('circle'), fill == null && 'fill-surface-content', className)}
165
+ {...restProps}
127
166
  />
128
167
  {/if}
@@ -0,0 +1,52 @@
1
+ import type { CommonStyleProps, Without } from '../utils/types.js';
2
+ export type CirclePropsWithoutHTML = {
3
+ /**
4
+ * The center x position of the circle.
5
+ *
6
+ * @default 0
7
+ */
8
+ cx?: number;
9
+ /**
10
+ * The initial center x position of the circle.
11
+ *
12
+ * @default cx
13
+ */
14
+ initialCx?: number;
15
+ /**
16
+ * The center y position of the circle.
17
+ *
18
+ * @default 0
19
+ */
20
+ cy?: number;
21
+ /**
22
+ * The initial center y position of the circle.
23
+ *
24
+ * @default cy
25
+ */
26
+ initialCy?: number;
27
+ /**
28
+ * The radius of the circle.
29
+ *
30
+ * @default 1
31
+ */
32
+ r?: number;
33
+ /**
34
+ * The initial radius of the circle.
35
+ *
36
+ * @default r
37
+ */
38
+ initialR?: number;
39
+ /**
40
+ * A bindable reference to the `<circle>` element
41
+ *
42
+ * @bindable
43
+ */
44
+ ref?: SVGCircleElement;
45
+ motion?: MotionProp;
46
+ } & CommonStyleProps;
47
+ export type CircleProps = CirclePropsWithoutHTML & Without<SVGAttributes<Element>, CirclePropsWithoutHTML>;
48
+ import { type MotionProp } from '../utils/motion.svelte.js';
49
+ import type { SVGAttributes } from 'svelte/elements';
50
+ declare const Circle: import("svelte").Component<CircleProps, {}, "ref">;
51
+ type Circle = ReturnType<typeof Circle>;
52
+ export default Circle;
@@ -1,25 +1,85 @@
1
- <script lang="ts">
2
- import type { spring as springStore, tweened as tweenedStore } from 'svelte/motion';
1
+ <script lang="ts" module>
2
+ import type { MotionProp } from '../utils/motion.svelte.js';
3
+ import ClipPath, { type ClipPathPropsWithoutHTML } from './ClipPath.svelte';
4
+
5
+ export type CircleClipPathPropsWithoutHTML = {
6
+ /**
7
+ * A unique id for the clipPath.
8
+ */
9
+ id?: string;
10
+
11
+ /**
12
+ * The center x position of the circle.
13
+ *
14
+ * @default 0
15
+ */
16
+ cx?: number;
17
+
18
+ /**
19
+ * The center y position of the circle.
20
+ *
21
+ * @default 0
22
+ */
23
+ cy?: number;
24
+
25
+ /**
26
+ * The radius of the circle.
27
+ *
28
+ * @required
29
+ */
30
+ r: number;
31
+
32
+ /**
33
+ * Whether to disable clipping (show all).
34
+ *
35
+ * @default false
36
+ */
37
+ disabled?: boolean;
3
38
 
4
- import { uniqueId } from '@layerstack/utils';
39
+ /**
40
+ * A bindable reference to the underlying `<circle>` element'
41
+ *
42
+ * @bindable
43
+ */
44
+ ref?: SVGCircleElement;
5
45
 
6
- import ClipPath from './ClipPath.svelte';
46
+ /**
47
+ * The children snippet to render content inside the clipPath.
48
+ */
49
+ children?: ClipPathPropsWithoutHTML['children'];
50
+
51
+ motion?: MotionProp;
52
+ };
53
+ </script>
54
+
55
+ <script lang="ts">
7
56
  import Circle from './Circle.svelte';
57
+ import { createId } from '../utils/createId.js';
58
+ import { extractLayerProps } from '../utils/attributes.js';
59
+
60
+ const uid = $props.id();
8
61
 
9
- /** Unique id for clipPath */
10
- export let id: string = uniqueId('clipPath-');
62
+ let {
63
+ id = createId('clipPath-', uid),
64
+ cx = 0,
65
+ cy = 0,
66
+ r,
67
+ motion,
68
+ disabled = false,
69
+ ref: refProp = $bindable(),
70
+ children,
71
+ ...restProps
72
+ }: CircleClipPathPropsWithoutHTML = $props();
11
73
 
12
- export let cx: number = 0;
13
- export let cy: number = 0;
14
- export let r: number;
15
- export let spring: boolean | Parameters<typeof springStore>[1] = undefined;
16
- export let tweened: boolean | Parameters<typeof tweenedStore>[1] = undefined;
74
+ let ref = $state<SVGCircleElement>();
17
75
 
18
- /** Disable clipping (show all) */
19
- export let disabled: boolean = false;
76
+ $effect.pre(() => {
77
+ refProp = ref;
78
+ });
20
79
  </script>
21
80
 
22
- <ClipPath {id} {disabled} let:url>
23
- <Circle slot="clip" {cx} {cy} {r} {spring} {tweened} {...$$restProps} />
24
- <slot {id} {url} />
81
+ <ClipPath {id} {disabled} {children}>
82
+ {#snippet clip()}
83
+ <Circle {cx} {cy} {r} {motion} {...extractLayerProps(restProps, 'clip-path-circle')} bind:ref />
84
+ {/snippet}
25
85
  </ClipPath>
@@ -0,0 +1,46 @@
1
+ import type { MotionProp } from '../utils/motion.svelte.js';
2
+ import { type ClipPathPropsWithoutHTML } from './ClipPath.svelte';
3
+ export type CircleClipPathPropsWithoutHTML = {
4
+ /**
5
+ * A unique id for the clipPath.
6
+ */
7
+ id?: string;
8
+ /**
9
+ * The center x position of the circle.
10
+ *
11
+ * @default 0
12
+ */
13
+ cx?: number;
14
+ /**
15
+ * The center y position of the circle.
16
+ *
17
+ * @default 0
18
+ */
19
+ cy?: number;
20
+ /**
21
+ * The radius of the circle.
22
+ *
23
+ * @required
24
+ */
25
+ r: number;
26
+ /**
27
+ * Whether to disable clipping (show all).
28
+ *
29
+ * @default false
30
+ */
31
+ disabled?: boolean;
32
+ /**
33
+ * A bindable reference to the underlying `<circle>` element'
34
+ *
35
+ * @bindable
36
+ */
37
+ ref?: SVGCircleElement;
38
+ /**
39
+ * The children snippet to render content inside the clipPath.
40
+ */
41
+ children?: ClipPathPropsWithoutHTML['children'];
42
+ motion?: MotionProp;
43
+ };
44
+ declare const CircleClipPath: import("svelte").Component<CircleClipPathPropsWithoutHTML, {}, "ref">;
45
+ type CircleClipPath = ReturnType<typeof CircleClipPath>;
46
+ export default CircleClipPath;
@@ -1,33 +1,83 @@
1
+ <script lang="ts" module>
2
+ import { createId } from '../utils/createId.js';
3
+ import type { Without } from '../utils/types.js';
4
+ import { layerClass } from '../utils/attributes.js';
5
+ import type { Snippet } from 'svelte';
6
+ import type { SVGAttributes } from 'svelte/elements';
7
+ import { getRenderContext } from './Chart.svelte';
8
+
9
+ export type ClipPathPropsWithoutHTML = {
10
+ /**
11
+ * A unique id for the clipPath.
12
+ *
13
+ */
14
+ id?: string;
15
+
16
+ /**
17
+ * Use existing path or shape (by id) for clipPath
18
+ *
19
+ */
20
+ useId?: string;
21
+
22
+ /**
23
+ * Whether to disable clipping (show all).
24
+ *
25
+ * @default false
26
+ */
27
+ disabled?: boolean;
28
+
29
+ /**
30
+ * A snippet to insert content into the clipPath.
31
+ * Provides the id for the clipPath as a snippet prop.
32
+ */
33
+ clip?: Snippet<[{ id: string }]>;
34
+
35
+ /**
36
+ * Children to render in the `<g>` element that links to the clipPath (if not disabled).
37
+ * Provides the id, url, and useId for the clipPath as snippet props.
38
+ */
39
+ children?: Snippet<[{ id: string; url: string; useId?: string }]>;
40
+ };
41
+
42
+ export type ClipPathProps = ClipPathPropsWithoutHTML &
43
+ Without<SVGAttributes<SVGClipPathElement>, ClipPathPropsWithoutHTML>;
44
+ </script>
45
+
1
46
  <script lang="ts">
2
- import { uniqueId } from '@layerstack/utils';
47
+ const uid = $props.id();
3
48
 
4
- /** Unique id for clipPath */
5
- export let id: string = uniqueId('clipPath-');
49
+ let {
50
+ id = createId('clipPath-', uid),
51
+ useId,
52
+ disabled = false,
53
+ children,
54
+ clip,
55
+ ...restProps
56
+ }: ClipPathPropsWithoutHTML = $props();
6
57
 
7
- /** Use existing path or shape (by id) for clipPath */
8
- export let useId: string | undefined = undefined;
58
+ const url = $derived(`url(#${id})`);
9
59
 
10
- /** Disable clipping (show all) */
11
- export let disabled: boolean = false;
60
+ const renderContext = getRenderContext();
12
61
  </script>
13
62
 
14
- <defs>
15
- <clipPath {id} {...$$restProps}>
16
- <slot name="clip" {id} />
63
+ {#if renderContext === 'svg'}
64
+ <defs>
65
+ <clipPath {id} {...restProps}>
66
+ {@render clip?.({ id })}
17
67
 
18
- {#if useId}
19
- <use href="#{useId}" />
20
- {/if}
21
- </clipPath>
22
- </defs>
68
+ {#if useId}
69
+ <use href="#{useId}" />
70
+ {/if}
71
+ </clipPath>
72
+ </defs>
73
+ {/if}
23
74
 
24
- {#if $$slots.default}
25
- {#if disabled}
26
- <slot />
75
+ {#if children}
76
+ {#if disabled || renderContext !== 'svg'}
77
+ {@render children({ id, url, useId })}
27
78
  {:else}
28
- <!-- svelte-ignore a11y-no-static-element-interactions -->
29
- <g style:clip-path="url(#{id})">
30
- <slot {id} url="url(#{id})" {useId} />
79
+ <g style:clip-path={url} class={layerClass('clip-path-g')}>
80
+ {@render children({ id, url, useId })}
31
81
  </g>
32
82
  {/if}
33
83
  {/if}