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,46 +1,97 @@
1
- import { SvelteComponentTyped } from "svelte";
2
- import { type FormatType } from '@layerstack/utils';
3
- declare const __propDef: {
4
- props: {
5
- [x: string]: any;
6
- scale?: any;
7
- title?: string | undefined;
8
- width?: number | undefined;
9
- height?: number | undefined;
10
- ticks?: number | undefined;
11
- tickFormat?: FormatType | undefined;
12
- tickValues?: any[] | undefined | undefined;
13
- tickFontSize?: number | undefined;
14
- tickLength?: number | undefined;
15
- placement?: ("bottom" | "left" | "right" | "top" | "center" | "top-left" | "top-right" | "bottom-left" | "bottom-right") | undefined;
16
- orientation?: "horizontal" | "vertical" | undefined;
17
- onclick?: ((e: MouseEvent, detail: any) => any) | undefined | undefined;
18
- onpointerenter?: ((e: MouseEvent, detail: any) => any) | undefined | undefined;
19
- onpointerleave?: ((e: MouseEvent, detail: any) => any) | undefined | undefined;
20
- variant?: "ramp" | "swatches" | undefined;
21
- classes?: {
22
- root?: string;
23
- title?: string;
24
- label?: string;
25
- tick?: string;
26
- swatches?: string;
27
- swatch?: string;
28
- item?: (item: any) => string;
29
- } | undefined;
30
- };
31
- events: {
32
- [evt: string]: CustomEvent<any>;
33
- };
34
- slots: {
35
- default: {
36
- values: any[];
37
- scale: any;
38
- };
1
+ import type { Snippet } from 'svelte';
2
+ import type { Placement } from './types.js';
3
+ import type { Without } from '../utils/types.js';
4
+ export type LegendItem = {
5
+ value: any;
6
+ color: string;
7
+ };
8
+ export type LegendPropsWithoutHTML = {
9
+ scale?: AnyScale;
10
+ /**
11
+ * The title of the legend.
12
+ *
13
+ * @default ''
14
+ */
15
+ title?: string;
16
+ /**
17
+ * The width of the legend.
18
+ *
19
+ * @default 320
20
+ */
21
+ width?: number;
22
+ /**
23
+ * The height of the legend.
24
+ *
25
+ * @default 10
26
+ */
27
+ height?: number;
28
+ /**
29
+ * The number of ticks to show on the scale.
30
+ * @default width / 64
31
+ */
32
+ ticks?: number;
33
+ tickFormat?: FormatType;
34
+ tickValues?: any[];
35
+ /**
36
+ * The font size of the tick labels.
37
+ *
38
+ * @default 10
39
+ */
40
+ tickFontSize?: number;
41
+ /**
42
+ * The length of the tick marks.
43
+ *
44
+ * @default 4
45
+ */
46
+ tickLength?: number;
47
+ /**
48
+ * The placement of the legend.
49
+ */
50
+ placement?: Placement;
51
+ /**
52
+ * The orientation of the legend.
53
+ *
54
+ * @default 'horizontal'
55
+ */
56
+ orientation?: 'horizontal' | 'vertical';
57
+ onclick?: (e: MouseEvent, detail: LegendItem) => any;
58
+ onpointerenter?: (e: MouseEvent, detail: LegendItem) => any;
59
+ onpointerleave?: (e: MouseEvent, detail: LegendItem) => any;
60
+ /**
61
+ * Determine display ramp (individual color swatches or continuous ramp)
62
+ *
63
+ * @default 'ramp'
64
+ */
65
+ variant?: 'ramp' | 'swatches';
66
+ /**
67
+ * Classes to apply to the elements.
68
+ *
69
+ * @default {}
70
+ */
71
+ classes?: {
72
+ root?: string;
73
+ title?: string;
74
+ label?: string;
75
+ tick?: string;
76
+ swatches?: string;
77
+ swatch?: string;
78
+ item?: (item: LegendItem) => string;
39
79
  };
80
+ /**
81
+ * A bindable reference to the wrapping `<div>` element.
82
+ *
83
+ * @bindable
84
+ */
85
+ ref?: HTMLElement;
86
+ children?: Snippet<[{
87
+ values: any[];
88
+ scale: AnyScale | null;
89
+ }]>;
40
90
  };
41
- export type LegendProps = typeof __propDef.props;
42
- export type LegendEvents = typeof __propDef.events;
43
- export type LegendSlots = typeof __propDef.slots;
44
- export default class Legend extends SvelteComponentTyped<LegendProps, LegendEvents, LegendSlots> {
45
- }
46
- export {};
91
+ export type LegendProps = LegendPropsWithoutHTML & Without<HTMLAttributes<HTMLElement>, LegendPropsWithoutHTML>;
92
+ import type { HTMLAttributes } from 'svelte/elements';
93
+ import { type FormatType } from '@layerstack/utils';
94
+ import type { AnyScale } from '../utils/scales.svelte.js';
95
+ declare const Legend: import("svelte").Component<LegendProps, {}, "ref">;
96
+ type Legend = ReturnType<typeof Legend>;
97
+ export default Legend;
@@ -1,79 +1,146 @@
1
+ <script lang="ts" module>
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import { createMotion, type MotionProp } from '../utils/motion.svelte.js';
4
+ import { renderPathData, type ComputedStylesOptions } from '../utils/canvas.js';
5
+ import MarkerWrapper, { type MarkerOptions } from './MarkerWrapper.svelte';
6
+ import type { CommonStyleProps, Without } from '../utils/types.js';
7
+
8
+ export type LinePropsWithoutHTML = {
9
+ /**
10
+ * The x-coordinate of the line's starting point
11
+ *
12
+ * @required
13
+ */
14
+ x1: number;
15
+
16
+ /**
17
+ * The initial x-coordinate of the line's starting point (defaults to x1 if not provided)
18
+ *
19
+ * @default x1
20
+ */
21
+ initialX1?: number;
22
+
23
+ /**
24
+ * The y-coordinate of the line's starting point
25
+ *
26
+ * @required
27
+ */
28
+ y1: number;
29
+
30
+ /**
31
+ * The initial y-coordinate of the line's starting point (defaults to y1 if not provided)
32
+ *
33
+ * @default y1
34
+ */
35
+ initialY1?: number;
36
+
37
+ /**
38
+ * The x-coordinate of the line's ending point
39
+ *
40
+ * @required
41
+ */
42
+ x2: number;
43
+
44
+ /**
45
+ * The initial x-coordinate of the line's ending point (defaults to x2 if not provided)
46
+ *
47
+ * @default x2
48
+ */
49
+ initialX2?: number;
50
+
51
+ /**
52
+ * The y-coordinate of the line's ending point
53
+ *
54
+ * @default y2
55
+ */
56
+ y2: number;
57
+
58
+ /**
59
+ * The initial y-coordinate of the line's ending point (defaults to y2 if not provided)
60
+ *
61
+ * @default y2
62
+ */
63
+ initialY2?: number;
64
+
65
+ /**
66
+ * Marker to attach to both start and end points of the line
67
+ */
68
+ marker?: MarkerOptions;
69
+
70
+ /**
71
+ * Marker to attach to the start point of the line
72
+ */
73
+ markerStart?: MarkerOptions;
74
+
75
+ /**
76
+ * Marker to attach to the mid point of the line
77
+ */
78
+ markerMid?: MarkerOptions;
79
+
80
+ /**
81
+ * Marker to attach to the end point of the line
82
+ */
83
+ markerEnd?: MarkerOptions;
84
+
85
+ motion?: MotionProp;
86
+ } & CommonStyleProps;
87
+
88
+ export type LineProps = LinePropsWithoutHTML &
89
+ Without<SVGAttributes<SVGPathElement>, LinePropsWithoutHTML>;
90
+ </script>
91
+
1
92
  <script lang="ts">
2
- import { onDestroy, tick, type ComponentProps } from 'svelte';
3
- import type { spring as springStore, tweened as tweenedStore } from 'svelte/motion';
4
93
  import { cls } from '@layerstack/tailwind';
5
- import { uniqueId } from '@layerstack/utils';
6
- import { objectId } from '@layerstack/utils/object';
7
94
  import { merge } from 'lodash-es';
8
95
 
9
- import { motionStore } from '../stores/motionStore.js';
10
-
11
- import Marker from './Marker.svelte';
12
- import { renderPathData, type ComputedStylesOptions } from '../utils/canvas.js';
13
- import { getCanvasContext } from './layout/Canvas.svelte';
96
+ import { registerCanvasComponent } from './layout/Canvas.svelte';
14
97
  import { getRenderContext } from './Chart.svelte';
15
98
 
16
- export let x1: number;
17
- export let initialX1 = x1;
18
-
19
- export let y1: number;
20
- export let initialY1 = y1;
21
-
22
- export let x2: number;
23
- export let initialX2 = x2;
24
-
25
- export let y2: number;
26
- export let initialY2 = y2;
27
-
28
- export let fill: string | undefined = undefined;
29
- export let stroke: string | undefined = undefined;
30
- export let strokeWidth: number | undefined = undefined;
31
- export let opacity: number | undefined = undefined;
32
-
33
- let className: string | undefined = undefined;
34
- export { className as class };
35
-
36
- export let onclick: ((e: MouseEvent) => void) | undefined = undefined;
37
- export let onpointerenter: ((e: PointerEvent) => void) | undefined = undefined;
38
- export let onpointermove: ((e: PointerEvent) => void) | undefined = undefined;
39
- export let onpointerleave: ((e: PointerEvent) => void) | undefined = undefined;
40
-
41
- /** Marker to attach to start and end points of path */
42
- export let marker: ComponentProps<Marker>['type'] | ComponentProps<Marker> | undefined =
43
- undefined;
44
- /** Marker to attach to start point of path */
45
- export let markerStart: ComponentProps<Marker>['type'] | ComponentProps<Marker> | undefined =
46
- marker;
47
- /** Marker to attach to end point of path */
48
- export let markerEnd: ComponentProps<Marker>['type'] | ComponentProps<Marker> | undefined =
49
- marker;
50
-
51
- $: markerStartId = markerStart || $$slots['markerStart'] ? uniqueId('marker-') : '';
52
- $: markerEndId = markerEnd || $$slots['markerEnd'] ? uniqueId('marker-') : '';
53
-
54
- export let spring: boolean | Parameters<typeof springStore>[1] = undefined;
55
- export let tweened: boolean | Parameters<typeof tweenedStore>[1] = undefined;
56
-
57
- let tweened_x1 = motionStore(initialX1, { spring, tweened });
58
- let tweened_y1 = motionStore(initialY1, { spring, tweened });
59
- let tweened_x2 = motionStore(initialX2, { spring, tweened });
60
- let tweened_y2 = motionStore(initialY2, { spring, tweened });
61
-
62
- $: tick().then(() => {
63
- tweened_x1.set(x1);
64
- tweened_y1.set(y1);
65
- tweened_x2.set(x2);
66
- tweened_y2.set(y2);
67
- });
68
-
69
- const renderContext = getRenderContext();
70
- const canvasContext = getCanvasContext();
99
+ import { createKey } from '../utils/key.svelte.js';
100
+ import { createId } from '../utils/createId.js';
101
+ import { layerClass } from '../utils/attributes.js';
102
+
103
+ const uid = $props.id();
104
+
105
+ let {
106
+ x1,
107
+ initialX1 = x1,
108
+ y1,
109
+ initialY1 = y1,
110
+ x2,
111
+ initialX2 = x2,
112
+ y2,
113
+ initialY2 = y2,
114
+ class: className,
115
+ strokeWidth,
116
+ opacity,
117
+ fill,
118
+ stroke,
119
+ marker,
120
+ markerEnd,
121
+ markerStart,
122
+ markerMid,
123
+ motion,
124
+ fillOpacity,
125
+ ...restProps
126
+ }: LineProps = $props();
127
+
128
+ const markerStartId = $derived(markerStart || marker ? createId('marker-start', uid) : '');
129
+ const markerMidId = $derived(markerMid || marker ? createId('marker-mid', uid) : '');
130
+ const markerEndId = $derived(markerEnd || marker ? createId('marker-end', uid) : '');
131
+
132
+ const motionX1 = createMotion(initialX1, () => x1, motion);
133
+ const motionY1 = createMotion(initialY1, () => y1, motion);
134
+ const motionX2 = createMotion(initialX2, () => x2, motion);
135
+ const motionY2 = createMotion(initialY2, () => y2, motion);
136
+
137
+ const renderCtx = getRenderContext();
71
138
 
72
139
  function render(
73
140
  ctx: CanvasRenderingContext2D,
74
141
  styleOverrides: ComputedStylesOptions | undefined
75
142
  ) {
76
- const pathData = `M ${$tweened_x1},${$tweened_y1} L ${$tweened_x2},${$tweened_y2}`;
143
+ const pathData = `M ${motionX1.current},${motionY1.current} L ${motionX2.current},${motionY2.current}`;
77
144
  renderPathData(
78
145
  ctx,
79
146
  pathData,
@@ -86,81 +153,52 @@
86
153
  );
87
154
  }
88
155
 
89
- // TODO: Use objectId to work around Svelte 4 reactivity issue (even when memoizing gradients)
90
- $: fillKey = fill && typeof fill === 'object' ? objectId(fill) : fill;
91
- $: strokeKey = stroke && typeof stroke === 'object' ? objectId(stroke) : stroke;
92
-
93
- $: if (renderContext === 'canvas') {
94
- // Redraw when props change
95
- $tweened_x1 &&
96
- $tweened_y1 &&
97
- $tweened_x2 &&
98
- $tweened_y2 &&
99
- fillKey &&
100
- strokeKey &&
101
- strokeWidth &&
102
- opacity &&
103
- className;
104
- canvasContext.invalidate();
105
- }
156
+ const fillKey = createKey(() => fill);
157
+ const strokeKey = createKey(() => stroke);
106
158
 
107
- let canvasUnregister: ReturnType<typeof canvasContext.register>;
108
- $: if (renderContext === 'canvas') {
109
- canvasUnregister = canvasContext.register({
159
+ if (renderCtx === 'canvas') {
160
+ registerCanvasComponent({
110
161
  name: 'Line',
111
162
  render,
112
163
  events: {
113
- click: onclick,
114
- pointerenter: onpointerenter,
115
- pointermove: onpointermove,
116
- pointerleave: onpointerleave,
164
+ click: restProps.onclick,
165
+ pointerenter: restProps.onpointerenter,
166
+ pointermove: restProps.onpointermove,
167
+ pointerleave: restProps.onpointerleave,
117
168
  },
169
+ deps: () => [
170
+ motionX1.current,
171
+ motionY1.current,
172
+ motionX2.current,
173
+ motionY2.current,
174
+ fillKey.current,
175
+ strokeKey.current,
176
+ strokeWidth,
177
+ opacity,
178
+ className,
179
+ ],
118
180
  });
119
181
  }
120
-
121
- onDestroy(() => {
122
- if (renderContext === 'canvas') {
123
- canvasUnregister();
124
- }
125
- });
126
182
  </script>
127
183
 
128
- {#if renderContext === 'svg'}
129
- <!-- svelte-ignore a11y-no-static-element-interactions -->
184
+ {#if renderCtx === 'svg'}
130
185
  <line
131
- x1={$tweened_x1}
132
- y1={$tweened_y1}
133
- x2={$tweened_x2}
134
- y2={$tweened_y2}
186
+ x1={motionX1.current}
187
+ y1={motionY1.current}
188
+ x2={motionX2.current}
189
+ y2={motionY2.current}
135
190
  {fill}
136
191
  {stroke}
192
+ fill-opacity={fillOpacity}
137
193
  stroke-width={strokeWidth}
138
194
  {opacity}
139
195
  marker-start={markerStartId ? `url(#${markerStartId})` : undefined}
196
+ marker-mid={markerMidId ? `url(#${markerMidId})` : undefined}
140
197
  marker-end={markerEndId ? `url(#${markerEndId})` : undefined}
141
- class={cls(stroke === undefined && 'stroke-surface-content', className)}
142
- {...$$restProps}
143
- on:click={onclick}
144
- on:pointerenter={onpointerenter}
145
- on:pointermove={onpointermove}
146
- on:pointerleave={onpointerleave}
198
+ class={cls(layerClass('line'), stroke === undefined && 'stroke-surface-content', className)}
199
+ {...restProps}
147
200
  />
148
-
149
- <slot name="markerStart" id={markerStartId}>
150
- {#if markerStart}
151
- <Marker
152
- id={markerStartId}
153
- type={typeof markerStart === 'string' ? markerStart : undefined}
154
- {...typeof markerStart === 'object' ? markerStart : null}
155
- />
156
- {/if}
157
- </slot>
158
-
159
- <slot name="markerEnd" id={markerEndId}>
160
- <Marker
161
- id={markerEndId}
162
- type={typeof markerEnd === 'string' ? markerEnd : undefined}
163
- {...typeof markerEnd === 'object' ? markerEnd : null}
164
- />
165
- </slot>
201
+ <MarkerWrapper id={markerStartId} marker={markerStart ?? marker} />
202
+ <MarkerWrapper id={markerMidId} marker={markerMid ?? marker} />
203
+ <MarkerWrapper id={markerEndId} marker={markerEnd ?? marker} />
166
204
  {/if}
@@ -0,0 +1,75 @@
1
+ import type { SVGAttributes } from 'svelte/elements';
2
+ import { type MotionProp } from '../utils/motion.svelte.js';
3
+ import { type MarkerOptions } from './MarkerWrapper.svelte';
4
+ import type { CommonStyleProps, Without } from '../utils/types.js';
5
+ export type LinePropsWithoutHTML = {
6
+ /**
7
+ * The x-coordinate of the line's starting point
8
+ *
9
+ * @required
10
+ */
11
+ x1: number;
12
+ /**
13
+ * The initial x-coordinate of the line's starting point (defaults to x1 if not provided)
14
+ *
15
+ * @default x1
16
+ */
17
+ initialX1?: number;
18
+ /**
19
+ * The y-coordinate of the line's starting point
20
+ *
21
+ * @required
22
+ */
23
+ y1: number;
24
+ /**
25
+ * The initial y-coordinate of the line's starting point (defaults to y1 if not provided)
26
+ *
27
+ * @default y1
28
+ */
29
+ initialY1?: number;
30
+ /**
31
+ * The x-coordinate of the line's ending point
32
+ *
33
+ * @required
34
+ */
35
+ x2: number;
36
+ /**
37
+ * The initial x-coordinate of the line's ending point (defaults to x2 if not provided)
38
+ *
39
+ * @default x2
40
+ */
41
+ initialX2?: number;
42
+ /**
43
+ * The y-coordinate of the line's ending point
44
+ *
45
+ * @default y2
46
+ */
47
+ y2: number;
48
+ /**
49
+ * The initial y-coordinate of the line's ending point (defaults to y2 if not provided)
50
+ *
51
+ * @default y2
52
+ */
53
+ initialY2?: number;
54
+ /**
55
+ * Marker to attach to both start and end points of the line
56
+ */
57
+ marker?: MarkerOptions;
58
+ /**
59
+ * Marker to attach to the start point of the line
60
+ */
61
+ markerStart?: MarkerOptions;
62
+ /**
63
+ * Marker to attach to the mid point of the line
64
+ */
65
+ markerMid?: MarkerOptions;
66
+ /**
67
+ * Marker to attach to the end point of the line
68
+ */
69
+ markerEnd?: MarkerOptions;
70
+ motion?: MotionProp;
71
+ } & CommonStyleProps;
72
+ export type LineProps = LinePropsWithoutHTML & Without<SVGAttributes<SVGPathElement>, LinePropsWithoutHTML>;
73
+ declare const Line: import("svelte").Component<LineProps, {}, "">;
74
+ type Line = ReturnType<typeof Line>;
75
+ export default Line;