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
@@ -0,0 +1,28 @@
1
+ import type { Action } from 'svelte/action';
2
+ type MovableOptions = {
3
+ /**
4
+ * Number of pixels to step
5
+ */
6
+ step?: number;
7
+ /**
8
+ * Percentage of parent element's pixels to step
9
+ */
10
+ stepPercent?: number;
11
+ axis?: 'x' | 'y' | 'xy';
12
+ onMoveStart?: (event: CustomEvent<{
13
+ x: number;
14
+ y: number;
15
+ }>) => void;
16
+ onMove?: (event: CustomEvent<{
17
+ x: number;
18
+ y: number;
19
+ dx: number;
20
+ dy: number;
21
+ }>) => void;
22
+ onMoveEnd?: (event: CustomEvent<{
23
+ x: number;
24
+ y: number;
25
+ }>) => void;
26
+ };
27
+ export declare const movable: Action<HTMLElement | SVGElement, MovableOptions | undefined>;
28
+ export {};
@@ -0,0 +1,91 @@
1
+ export const movable = (node, options = {}) => {
2
+ let lastX = 0;
3
+ let lastY = 0;
4
+ let moved = false;
5
+ function onMouseDown(event) {
6
+ lastX = event.clientX;
7
+ lastY = event.clientY;
8
+ moved = false;
9
+ options?.onMoveStart?.(new CustomEvent('movestart', { detail: { x: lastX, y: lastY } }));
10
+ window.addEventListener('mousemove', onMouseMove);
11
+ window.addEventListener('mouseup', onMouseUp);
12
+ }
13
+ node.addEventListener('mousedown', onMouseDown);
14
+ function onMouseMove(event) {
15
+ moved = true;
16
+ // TODO: Handle page scroll? clientX/Y is based on viewport (apply to parent?)
17
+ let dx = event.clientX - lastX;
18
+ let dy = event.clientY - lastY;
19
+ const xEnabled = options?.axis?.includes('x') ?? true;
20
+ const yEnabled = options?.axis?.includes('y') ?? true;
21
+ if (options.step) {
22
+ if (Math.abs(dx) >= options.step) {
23
+ const overStep = dx % options.step;
24
+ dx = dx - overStep;
25
+ lastX = event.clientX - overStep;
26
+ }
27
+ else {
28
+ dx = 0;
29
+ }
30
+ if (Math.abs(dy) >= options.step) {
31
+ const overStep = dy % options.step;
32
+ dy = dy - overStep;
33
+ lastY = event.clientY - overStep;
34
+ }
35
+ else {
36
+ dy = 0;
37
+ }
38
+ }
39
+ else if (options.stepPercent) {
40
+ const parentWidth = node.parentElement?.offsetWidth ?? 0;
41
+ const parentHeight = node.parentElement?.offsetHeight ?? 0;
42
+ if (Math.abs(dx / parentWidth) >= options.stepPercent) {
43
+ const overStep = dx % (parentWidth * options.stepPercent);
44
+ dx = dx - overStep;
45
+ lastX = event.clientX - overStep;
46
+ }
47
+ else {
48
+ dx = 0;
49
+ }
50
+ if (Math.abs(dy / parentHeight) >= options.stepPercent) {
51
+ const overStep = dy % (parentHeight * options.stepPercent);
52
+ dy = dy - overStep;
53
+ lastY = event.clientY - overStep;
54
+ }
55
+ else {
56
+ dy = 0;
57
+ }
58
+ }
59
+ else {
60
+ lastX = event.clientX;
61
+ lastY = event.clientY;
62
+ }
63
+ if ((xEnabled && dx) || (yEnabled && dy)) {
64
+ options.onMove?.(new CustomEvent('move', {
65
+ detail: { x: lastX, y: lastX, dx: xEnabled ? dx : 0, dy: yEnabled ? dy : 0 },
66
+ }));
67
+ }
68
+ else {
69
+ // Not enough change
70
+ }
71
+ }
72
+ function onMouseUp(event) {
73
+ lastX = event.clientX;
74
+ lastY = event.clientY;
75
+ options.onMoveEnd?.(new CustomEvent('moveend', { detail: { x: lastX, y: lastY } }));
76
+ window.removeEventListener('mousemove', onMouseMove);
77
+ window.removeEventListener('mouseup', onMouseUp);
78
+ }
79
+ function onClick(event) {
80
+ if (moved) {
81
+ event.stopImmediatePropagation();
82
+ }
83
+ }
84
+ node.addEventListener('click', onClick);
85
+ return {
86
+ destroy() {
87
+ node.removeEventListener('mousedown', onMouseDown);
88
+ node.removeEventListener('click', onClick);
89
+ },
90
+ };
91
+ };
@@ -0,0 +1,143 @@
1
+ <script lang="ts" module>
2
+ import type { ComponentProps } from 'svelte';
3
+ import type { SVGAttributes } from 'svelte/elements';
4
+ import type { CommonStyleProps, Without } from '../utils/types.js';
5
+ import type { SingleDomainType } from '../utils/scales.svelte.js';
6
+
7
+ export type AnnotationLinePropsWithoutHTML = {
8
+ /** x value of the point */
9
+ x?: SingleDomainType;
10
+
11
+ /** y value of the point */
12
+ y?: SingleDomainType;
13
+
14
+ /** Label to display for line*/
15
+ label?: string;
16
+
17
+ /** Placement of the label */
18
+ labelPlacement?: Placement;
19
+
20
+ /** X offset of the label */
21
+ labelXOffset?: number;
22
+
23
+ /** Y offset of the label */
24
+ labelYOffset?: number;
25
+
26
+ /** Classes for inner elements */
27
+ props?: {
28
+ label?: Partial<ComponentProps<typeof Text>>;
29
+ line?: Partial<ComponentProps<typeof Line>>;
30
+ };
31
+ } & CommonStyleProps;
32
+
33
+ export type AnnotationLineProps = AnnotationLinePropsWithoutHTML &
34
+ Without<SVGAttributes<Element>, AnnotationLinePropsWithoutHTML>;
35
+ </script>
36
+
37
+ <script lang="ts">
38
+ import { getChartContext } from './Chart.svelte';
39
+ import Line from './Line.svelte';
40
+ import Text from './Text.svelte';
41
+ import type { Placement } from './types.js';
42
+
43
+ import { cls } from '@layerstack/tailwind';
44
+
45
+ const {
46
+ x,
47
+ y,
48
+ label,
49
+ labelPlacement = 'top-right',
50
+ labelXOffset = 0,
51
+ labelYOffset = 0,
52
+ props,
53
+ }: AnnotationLineProps = $props();
54
+
55
+ const ctx = getChartContext();
56
+
57
+ const isVertical = $derived(x != null);
58
+
59
+ const line = $derived({
60
+ x1: x ? ctx.xScale(x) : ctx.xRange[0],
61
+ y1: y && !x ? ctx.yScale(y) : ctx.yRange[0],
62
+ x2: x ? ctx.xScale(x) : ctx.xRange[1],
63
+ y2: y ? ctx.yScale(y) : ctx.yRange[1],
64
+ });
65
+
66
+ const labelProps = $derived<ComponentProps<typeof Text>>(
67
+ isVertical
68
+ ? {
69
+ x: line.x1 + (labelPlacement.includes('left') ? -labelXOffset : labelXOffset),
70
+ y:
71
+ (labelPlacement.includes('top')
72
+ ? line.y2
73
+ : labelPlacement.includes('bottom')
74
+ ? line.y1
75
+ : (line.y1 - line.y2) / 2) +
76
+ (['top', 'bottom-left', 'bottom-right'].includes(labelPlacement)
77
+ ? -labelYOffset
78
+ : labelYOffset),
79
+ dy: -2, // adjust for smaller font size
80
+ textAnchor: labelPlacement.includes('left')
81
+ ? 'end'
82
+ : labelPlacement.includes('right')
83
+ ? 'start'
84
+ : 'middle',
85
+ verticalAnchor:
86
+ labelPlacement === 'top'
87
+ ? 'end' // place above line
88
+ : labelPlacement === 'bottom'
89
+ ? 'start' // place below line
90
+ : labelPlacement.includes('top')
91
+ ? 'start'
92
+ : labelPlacement.includes('bottom')
93
+ ? 'end'
94
+ : 'middle',
95
+ }
96
+ : {
97
+ x:
98
+ (labelPlacement.includes('left')
99
+ ? line.x1
100
+ : labelPlacement.includes('right')
101
+ ? line.x2
102
+ : (line.x2 - line.x1) / 2) +
103
+ (['left', 'top-right', 'bottom-right'].includes(labelPlacement)
104
+ ? -labelXOffset
105
+ : labelXOffset),
106
+ y: line.y1 + (labelPlacement.includes('top') ? -labelYOffset : labelYOffset),
107
+ dy: -2, // adjust for smaller font size
108
+ textAnchor:
109
+ labelPlacement === 'left'
110
+ ? 'end' // place beside line
111
+ : labelPlacement === 'right'
112
+ ? 'start' // place beside line
113
+ : labelPlacement.includes('left')
114
+ ? 'start'
115
+ : labelPlacement.includes('right')
116
+ ? 'end'
117
+ : 'middle',
118
+ verticalAnchor: labelPlacement.includes('top')
119
+ ? 'end'
120
+ : labelPlacement.includes('bottom')
121
+ ? 'start'
122
+ : 'middle',
123
+ }
124
+ );
125
+ </script>
126
+
127
+ <Line
128
+ x1={line.x1}
129
+ y1={line.y1}
130
+ x2={line.x2}
131
+ y2={line.y2}
132
+ {...props?.line}
133
+ class={cls('stroke-surface-content', props?.line?.class)}
134
+ />
135
+
136
+ {#if label}
137
+ <Text
138
+ value={label}
139
+ {...labelProps}
140
+ {...props?.label}
141
+ class={cls('text-xs pointer-events-none', props?.label?.class)}
142
+ />
143
+ {/if}
@@ -0,0 +1,30 @@
1
+ import type { ComponentProps } from 'svelte';
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import type { CommonStyleProps, Without } from '../utils/types.js';
4
+ import type { SingleDomainType } from '../utils/scales.svelte.js';
5
+ export type AnnotationLinePropsWithoutHTML = {
6
+ /** x value of the point */
7
+ x?: SingleDomainType;
8
+ /** y value of the point */
9
+ y?: SingleDomainType;
10
+ /** Label to display for line*/
11
+ label?: string;
12
+ /** Placement of the label */
13
+ labelPlacement?: Placement;
14
+ /** X offset of the label */
15
+ labelXOffset?: number;
16
+ /** Y offset of the label */
17
+ labelYOffset?: number;
18
+ /** Classes for inner elements */
19
+ props?: {
20
+ label?: Partial<ComponentProps<typeof Text>>;
21
+ line?: Partial<ComponentProps<typeof Line>>;
22
+ };
23
+ } & CommonStyleProps;
24
+ export type AnnotationLineProps = AnnotationLinePropsWithoutHTML & Without<SVGAttributes<Element>, AnnotationLinePropsWithoutHTML>;
25
+ import Line from './Line.svelte';
26
+ import Text from './Text.svelte';
27
+ import type { Placement } from './types.js';
28
+ declare const AnnotationLine: import("svelte").Component<AnnotationLineProps, {}, "">;
29
+ type AnnotationLine = ReturnType<typeof AnnotationLine>;
30
+ export default AnnotationLine;
@@ -0,0 +1,119 @@
1
+ <script lang="ts" module>
2
+ import type { ComponentProps } from 'svelte';
3
+ import type { SVGAttributes } from 'svelte/elements';
4
+ import type { CommonStyleProps, Without } from '../utils/types.js';
5
+ import { isScaleBand, type SingleDomainType } from '../utils/scales.svelte.js';
6
+
7
+ export type AnnotationPointPropsWithoutHTML = {
8
+ /** x value of the point */
9
+ x?: SingleDomainType;
10
+
11
+ /** y value of the point */
12
+ y?: SingleDomainType;
13
+
14
+ /** Radius of the circle */
15
+ r?: number;
16
+
17
+ /** Label to display on circle*/
18
+ label?: string;
19
+
20
+ /** Placement of the label */
21
+ labelPlacement?: Placement;
22
+
23
+ /** X offset of the label */
24
+ labelXOffset?: number;
25
+
26
+ /** Y offset of the label */
27
+ labelYOffset?: number;
28
+
29
+ /** Details (description, etc) useful to display in tooltip */
30
+ details?: any;
31
+
32
+ /** Classes for inner elements */
33
+ props?: {
34
+ label?: Partial<ComponentProps<typeof Text>>;
35
+ circle?: Partial<ComponentProps<typeof Circle>>;
36
+ };
37
+ } & CommonStyleProps;
38
+
39
+ export type AnnotationPointProps = AnnotationPointPropsWithoutHTML &
40
+ Without<SVGAttributes<Element>, AnnotationPointPropsWithoutHTML>;
41
+ </script>
42
+
43
+ <script lang="ts">
44
+ import { getChartContext } from './Chart.svelte';
45
+ import Circle from './Circle.svelte';
46
+ import Text from './Text.svelte';
47
+ import type { Placement } from './types.js';
48
+
49
+ import { cls } from '@layerstack/tailwind';
50
+
51
+ const {
52
+ x,
53
+ y,
54
+ r = 4,
55
+ label,
56
+ labelPlacement = 'center',
57
+ labelXOffset = 0,
58
+ labelYOffset = 0,
59
+ details,
60
+ props,
61
+ }: AnnotationPointProps = $props();
62
+
63
+ const ctx = getChartContext();
64
+
65
+ const point = $derived({
66
+ x: x ? ctx.xScale(x) + (isScaleBand(ctx.xScale) ? ctx.xScale.bandwidth() / 2 : 0) : 0,
67
+ y: y ? ctx.yScale(y) + (isScaleBand(ctx.yScale) ? ctx.yScale.bandwidth() / 2 : 0) : ctx.height,
68
+ });
69
+
70
+ const labelProps = $derived<ComponentProps<typeof Text>>({
71
+ x:
72
+ point.x +
73
+ ((['top', 'center', 'bottom'].includes(labelPlacement) ? 0 : r) + labelXOffset) *
74
+ (labelPlacement.includes('left') ? -1 : 1),
75
+ y:
76
+ point.y +
77
+ ((['left', 'center', 'right'].includes(labelPlacement) ? 0 : r) + labelYOffset) *
78
+ (labelPlacement.includes('top') ? -1 : 1),
79
+ dy: -2, // adjust for smaler font size
80
+ textAnchor: labelPlacement.includes('left')
81
+ ? 'end'
82
+ : labelPlacement.includes('right')
83
+ ? 'start'
84
+ : 'middle',
85
+ verticalAnchor: labelPlacement.includes('top')
86
+ ? 'end'
87
+ : labelPlacement.includes('bottom')
88
+ ? 'start'
89
+ : 'middle',
90
+ });
91
+ </script>
92
+
93
+ <Circle
94
+ cx={point.x}
95
+ cy={point.y}
96
+ {r}
97
+ onpointermove={(e) => {
98
+ if (details) {
99
+ e.stopPropagation();
100
+ ctx.tooltip.show(e, { annotation: { label, details } });
101
+ }
102
+ }}
103
+ onpointerleave={() => {
104
+ if (details) {
105
+ ctx.tooltip.hide();
106
+ }
107
+ }}
108
+ {...props?.circle}
109
+ class={cls('stroke-surface-100', props?.circle?.class)}
110
+ />
111
+
112
+ {#if label}
113
+ <Text
114
+ value={label}
115
+ {...labelProps}
116
+ {...props?.label}
117
+ class={cls('text-xs pointer-events-none', props?.label?.class)}
118
+ />
119
+ {/if}
@@ -0,0 +1,34 @@
1
+ import type { ComponentProps } from 'svelte';
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import type { CommonStyleProps, Without } from '../utils/types.js';
4
+ import { type SingleDomainType } from '../utils/scales.svelte.js';
5
+ export type AnnotationPointPropsWithoutHTML = {
6
+ /** x value of the point */
7
+ x?: SingleDomainType;
8
+ /** y value of the point */
9
+ y?: SingleDomainType;
10
+ /** Radius of the circle */
11
+ r?: number;
12
+ /** Label to display on circle*/
13
+ label?: string;
14
+ /** Placement of the label */
15
+ labelPlacement?: Placement;
16
+ /** X offset of the label */
17
+ labelXOffset?: number;
18
+ /** Y offset of the label */
19
+ labelYOffset?: number;
20
+ /** Details (description, etc) useful to display in tooltip */
21
+ details?: any;
22
+ /** Classes for inner elements */
23
+ props?: {
24
+ label?: Partial<ComponentProps<typeof Text>>;
25
+ circle?: Partial<ComponentProps<typeof Circle>>;
26
+ };
27
+ } & CommonStyleProps;
28
+ export type AnnotationPointProps = AnnotationPointPropsWithoutHTML & Without<SVGAttributes<Element>, AnnotationPointPropsWithoutHTML>;
29
+ import Circle from './Circle.svelte';
30
+ import Text from './Text.svelte';
31
+ import type { Placement } from './types.js';
32
+ declare const AnnotationPoint: import("svelte").Component<AnnotationPointProps, {}, "">;
33
+ type AnnotationPoint = ReturnType<typeof AnnotationPoint>;
34
+ export default AnnotationPoint;
@@ -0,0 +1,147 @@
1
+ <script lang="ts" module>
2
+ import type { ComponentProps } from 'svelte';
3
+ import type { SVGAttributes } from 'svelte/elements';
4
+ import type { CommonStyleProps, Without } from '../utils/types.js';
5
+ import { isScaleBand, type SingleDomainType } from '../utils/scales.svelte.js';
6
+
7
+ export type AnnotationRangePropsWithoutHTML = {
8
+ /** x values of the range */
9
+ x?: [SingleDomainType, SingleDomainType] | SingleDomainType[];
10
+
11
+ /** y values of the range */
12
+ y?: [SingleDomainType, SingleDomainType] | SingleDomainType[];
13
+
14
+ /** Label to display for line*/
15
+ label?: string;
16
+
17
+ /** Placement of the label */
18
+ labelPlacement?: Placement;
19
+
20
+ /** X offset of the label */
21
+ labelXOffset?: number;
22
+
23
+ /** Y offset of the label */
24
+ labelYOffset?: number;
25
+
26
+ /** Add Rect with fill */
27
+ fill?: string;
28
+
29
+ /** Add Rect with class*/
30
+ class?: string;
31
+
32
+ /** Add Rect with gradient */
33
+ gradient?: ComponentProps<typeof LinearGradient>;
34
+
35
+ /** Add Rect with pattern */
36
+ pattern?: ComponentProps<typeof Pattern>;
37
+
38
+ /** Classes for inner elements */
39
+ props?: {
40
+ label?: Partial<ComponentProps<typeof Text>>;
41
+ rect?: Partial<ComponentProps<typeof Rect>>;
42
+ };
43
+ } & CommonStyleProps;
44
+
45
+ export type AnnotationRangeProps = AnnotationRangePropsWithoutHTML &
46
+ Without<SVGAttributes<Element>, AnnotationRangePropsWithoutHTML>;
47
+ </script>
48
+
49
+ <script lang="ts">
50
+ import { getChartContext } from './Chart.svelte';
51
+ import LinearGradient from './LinearGradient.svelte';
52
+ import Pattern from './Pattern.svelte';
53
+ import Rect from './Rect.svelte';
54
+ import Text from './Text.svelte';
55
+ import type { Placement } from './types.js';
56
+
57
+ import { cls } from '@layerstack/tailwind';
58
+
59
+ const {
60
+ x,
61
+ y,
62
+ fill,
63
+ class: className,
64
+ gradient,
65
+ pattern,
66
+ label,
67
+ labelPlacement = 'center',
68
+ labelXOffset = 0,
69
+ labelYOffset = 0,
70
+ props,
71
+ }: AnnotationRangeProps = $props();
72
+
73
+ const ctx = getChartContext();
74
+
75
+ const rect = $derived<ComponentProps<typeof Rect>>({
76
+ x: x
77
+ ? ctx.xScale(x[0] ?? ctx.xDomain[0]) -
78
+ (isScaleBand(ctx.xScale) ? (ctx.xScale.padding() * ctx.xScale.step()) / 2 : 0)
79
+ : ctx.xRange[0],
80
+ y: y ? ctx.yScale(y[1] ?? ctx.yDomain[1]) : ctx.yRange[1],
81
+ width: x
82
+ ? ctx.xScale(x[1] ?? ctx.xDomain[1]) -
83
+ ctx.xScale(x[0] ?? ctx.xDomain[0]) +
84
+ (isScaleBand(ctx.xScale) ? ctx.xScale.step() : 0)
85
+ : ctx.width,
86
+ height: y
87
+ ? ctx.yScale(y[0] ?? ctx.yDomain[0]) - ctx.yScale(y[1] ?? ctx.yDomain[1])
88
+ : ctx.height,
89
+ });
90
+
91
+ const labelProps = $derived<ComponentProps<typeof Text>>({
92
+ x:
93
+ ((labelPlacement.includes('left')
94
+ ? rect.x
95
+ : labelPlacement.includes('right')
96
+ ? (rect.x ?? 0) + rect.width
97
+ : (rect.x ?? 0) + rect.width / 2) ?? 0) +
98
+ (labelPlacement.includes('right') ? -labelXOffset : labelXOffset),
99
+ y:
100
+ ((labelPlacement.includes('top')
101
+ ? rect.y
102
+ : labelPlacement.includes('bottom')
103
+ ? (rect.y ?? 0) + rect.height
104
+ : (rect.y ?? 0) + rect.height / 2) ?? 0) +
105
+ (labelPlacement.includes('bottom') ? -labelYOffset : labelYOffset),
106
+ dy: -2, // adjust for smaler font size
107
+ textAnchor: labelPlacement.includes('left')
108
+ ? 'start'
109
+ : labelPlacement.includes('right')
110
+ ? 'end'
111
+ : 'middle',
112
+ verticalAnchor: labelPlacement.includes('top')
113
+ ? 'start'
114
+ : labelPlacement.includes('bottom')
115
+ ? 'end'
116
+ : 'middle',
117
+ });
118
+ </script>
119
+
120
+ {#if fill || className}
121
+ <Rect {...rect} {...props?.rect} {fill} class={cls(props?.rect?.class, className)} />
122
+ {/if}
123
+
124
+ {#if gradient}
125
+ <LinearGradient {...gradient}>
126
+ {#snippet children({ gradient })}
127
+ <Rect {...rect} {...props?.rect} fill={gradient} />
128
+ {/snippet}
129
+ </LinearGradient>
130
+ {/if}
131
+
132
+ {#if pattern}
133
+ <Pattern {...pattern}>
134
+ {#snippet children({ pattern })}
135
+ <Rect {...rect} {...props?.rect} fill={pattern} />
136
+ {/snippet}
137
+ </Pattern>
138
+ {/if}
139
+
140
+ {#if label}
141
+ <Text
142
+ value={label}
143
+ {...labelProps}
144
+ {...props?.label}
145
+ class={cls('text-xs pointer-events-none', props?.label?.class)}
146
+ />
147
+ {/if}
@@ -0,0 +1,40 @@
1
+ import type { ComponentProps } from 'svelte';
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import type { CommonStyleProps, Without } from '../utils/types.js';
4
+ import { type SingleDomainType } from '../utils/scales.svelte.js';
5
+ export type AnnotationRangePropsWithoutHTML = {
6
+ /** x values of the range */
7
+ x?: [SingleDomainType, SingleDomainType] | SingleDomainType[];
8
+ /** y values of the range */
9
+ y?: [SingleDomainType, SingleDomainType] | SingleDomainType[];
10
+ /** Label to display for line*/
11
+ label?: string;
12
+ /** Placement of the label */
13
+ labelPlacement?: Placement;
14
+ /** X offset of the label */
15
+ labelXOffset?: number;
16
+ /** Y offset of the label */
17
+ labelYOffset?: number;
18
+ /** Add Rect with fill */
19
+ fill?: string;
20
+ /** Add Rect with class*/
21
+ class?: string;
22
+ /** Add Rect with gradient */
23
+ gradient?: ComponentProps<typeof LinearGradient>;
24
+ /** Add Rect with pattern */
25
+ pattern?: ComponentProps<typeof Pattern>;
26
+ /** Classes for inner elements */
27
+ props?: {
28
+ label?: Partial<ComponentProps<typeof Text>>;
29
+ rect?: Partial<ComponentProps<typeof Rect>>;
30
+ };
31
+ } & CommonStyleProps;
32
+ export type AnnotationRangeProps = AnnotationRangePropsWithoutHTML & Without<SVGAttributes<Element>, AnnotationRangePropsWithoutHTML>;
33
+ import LinearGradient from './LinearGradient.svelte';
34
+ import Pattern from './Pattern.svelte';
35
+ import Rect from './Rect.svelte';
36
+ import Text from './Text.svelte';
37
+ import type { Placement } from './types.js';
38
+ declare const AnnotationRange: import("svelte").Component<AnnotationRangeProps, {}, "">;
39
+ type AnnotationRange = ReturnType<typeof AnnotationRange>;
40
+ export default AnnotationRange;