layerchart 2.0.0-next.1 → 2.0.0-next.2

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 (266) 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 +155 -0
  4. package/dist/components/AnnotationLine.svelte.d.ts +28 -0
  5. package/dist/components/AnnotationPoint.svelte +121 -0
  6. package/dist/components/AnnotationPoint.svelte.d.ts +32 -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 +287 -174
  14. package/dist/components/Axis.svelte.d.ts +116 -0
  15. package/dist/components/Bar.svelte +163 -107
  16. package/dist/components/Bar.svelte.d.ts +48 -0
  17. package/dist/components/Bars.svelte +54 -68
  18. package/dist/components/Bars.svelte.d.ts +27 -0
  19. package/dist/components/Blur.svelte +31 -7
  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 +60 -15
  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 +47 -12
  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 +28 -13
  66. package/dist/components/Graticule.svelte.d.ts +11 -52
  67. package/dist/components/Grid.svelte +226 -114
  68. package/dist/components/Grid.svelte.d.ts +70 -0
  69. package/dist/components/Group.svelte +132 -105
  70. package/dist/components/Group.svelte.d.ts +53 -0
  71. package/dist/components/Highlight.svelte +409 -307
  72. package/dist/components/Highlight.svelte.d.ts +107 -0
  73. package/dist/components/Hull.svelte +96 -45
  74. package/dist/components/Hull.svelte.d.ts +40 -30
  75. package/dist/components/Labels.svelte +125 -46
  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 +143 -70
  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 +105 -62
  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 +437 -176
  118. package/dist/components/Text.svelte.d.ts +130 -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 +106 -75
  131. package/dist/components/Voronoi.svelte.d.ts +40 -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 +450 -393
  135. package/dist/components/charts/AreaChart.svelte.d.ts +61 -0
  136. package/dist/components/charts/BarChart.svelte +454 -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 +369 -314
  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 +334 -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 +55 -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 +321 -155
  156. package/dist/components/layout/Canvas.svelte.d.ts +104 -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 +246 -78
  166. package/dist/components/tooltip/Tooltip.svelte.d.ts +149 -31
  167. package/dist/components/tooltip/TooltipContext.svelte +409 -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.d.ts +18 -14
  184. package/dist/docs/Code.svelte.d.ts +26 -22
  185. package/dist/docs/ConnectorSweepMenuField.svelte +17 -0
  186. package/dist/docs/ConnectorSweepMenuField.svelte.d.ts +7 -0
  187. package/dist/docs/ConnectorTypeMenuField.svelte +17 -0
  188. package/dist/docs/ConnectorTypeMenuField.svelte.d.ts +7 -0
  189. package/dist/docs/CurveMenuField.svelte +14 -3
  190. package/dist/docs/CurveMenuField.svelte.d.ts +9 -18
  191. package/dist/docs/GeoDebug.svelte +47 -42
  192. package/dist/docs/GeoDebug.svelte.d.ts +4 -16
  193. package/dist/docs/Header1.svelte.d.ts +27 -16
  194. package/dist/docs/Json.svelte.d.ts +20 -16
  195. package/dist/docs/Layout.svelte.d.ts +18 -13
  196. package/dist/docs/Link.svelte.d.ts +33 -21
  197. package/dist/docs/PathDataMenuField.svelte +14 -10
  198. package/dist/docs/PathDataMenuField.svelte.d.ts +8 -18
  199. package/dist/docs/Preview.svelte +20 -7
  200. package/dist/docs/Preview.svelte.d.ts +12 -22
  201. package/dist/docs/TilesetField.svelte.d.ts +21 -17
  202. package/dist/docs/TransformDebug.svelte +5 -6
  203. package/dist/docs/TransformDebug.svelte.d.ts +18 -14
  204. package/dist/docs/ViewSourceButton.svelte.d.ts +21 -17
  205. package/dist/types/d3-shape-extentions.d.ts +7 -0
  206. package/dist/utils/afterTick.d.ts +5 -0
  207. package/dist/utils/afterTick.js +8 -0
  208. package/dist/utils/arcText.svelte.d.ts +57 -0
  209. package/dist/utils/arcText.svelte.js +262 -0
  210. package/dist/utils/array.d.ts +9 -1
  211. package/dist/utils/array.js +13 -0
  212. package/dist/utils/attributes.d.ts +29 -0
  213. package/dist/utils/attributes.js +40 -0
  214. package/dist/utils/canvas.js +47 -10
  215. package/dist/utils/chart.d.ts +78 -0
  216. package/dist/utils/chart.js +512 -0
  217. package/dist/utils/color.d.ts +1 -0
  218. package/dist/utils/color.js +8 -0
  219. package/dist/utils/common.d.ts +3 -5
  220. package/dist/utils/common.js +3 -2
  221. package/dist/utils/connectorUtils.d.ts +21 -0
  222. package/dist/utils/connectorUtils.js +111 -0
  223. package/dist/utils/createId.d.ts +7 -0
  224. package/dist/utils/createId.js +9 -0
  225. package/dist/utils/debug.d.ts +1 -0
  226. package/dist/utils/debug.js +84 -0
  227. package/dist/utils/filterObject.d.ts +9 -0
  228. package/dist/utils/filterObject.js +12 -0
  229. package/dist/utils/graph/dagre.d.ts +34 -0
  230. package/dist/utils/graph/dagre.js +78 -0
  231. package/dist/utils/graph/dagre.test.d.ts +1 -0
  232. package/dist/utils/{graph.test.js → graph/dagre.test.js} +19 -33
  233. package/dist/utils/graph/sankey.d.ts +28 -0
  234. package/dist/utils/{graph.js → graph/sankey.js} +13 -41
  235. package/dist/utils/index.d.ts +3 -1
  236. package/dist/utils/index.js +3 -1
  237. package/dist/utils/key.svelte.d.ts +3 -0
  238. package/dist/utils/key.svelte.js +11 -0
  239. package/dist/utils/legendPayload.d.ts +7 -0
  240. package/dist/utils/legendPayload.js +8 -0
  241. package/dist/utils/motion.svelte.d.ts +140 -0
  242. package/dist/utils/motion.svelte.js +180 -0
  243. package/dist/utils/motion.test.d.ts +1 -0
  244. package/dist/utils/motion.test.js +213 -0
  245. package/dist/utils/{rect.d.ts → rect.svelte.d.ts} +7 -4
  246. package/dist/utils/rect.svelte.js +105 -0
  247. package/dist/utils/scales.svelte.d.ts +90 -0
  248. package/dist/utils/{scales.js → scales.svelte.js} +100 -39
  249. package/dist/utils/stack.d.ts +2 -3
  250. package/dist/utils/stack.js +1 -1
  251. package/dist/utils/string.js +87 -0
  252. package/dist/utils/ticks.d.ts +8 -2
  253. package/dist/utils/ticks.js +28 -0
  254. package/dist/utils/ticks.test.d.ts +1 -0
  255. package/dist/utils/ticks.test.js +67 -0
  256. package/dist/utils/types.d.ts +81 -0
  257. package/package.json +21 -19
  258. package/dist/components/ChartContext.svelte +0 -295
  259. package/dist/components/ChartContext.svelte.d.ts +0 -139
  260. package/dist/components/TransformContext.svelte.d.ts +0 -158
  261. package/dist/stores/motionStore.d.ts +0 -30
  262. package/dist/stores/motionStore.js +0 -62
  263. package/dist/utils/graph.d.ts +0 -37
  264. package/dist/utils/rect.js +0 -107
  265. package/dist/utils/scales.d.ts +0 -66
  266. /package/dist/{utils/graph.test.d.ts → components/charts/types.js} +0 -0
@@ -0,0 +1,107 @@
1
+ import type { ComponentProps, Snippet } from 'svelte';
2
+ import Circle from './Circle.svelte';
3
+ import Line from './Line.svelte';
4
+ import Bar from './Bar.svelte';
5
+ import Rect from './Rect.svelte';
6
+ import { type Accessor } from '../utils/common.js';
7
+ export type HighlightPointData = {
8
+ x: any;
9
+ y: any;
10
+ };
11
+ export type HighlightPoint = {
12
+ x: number;
13
+ y: number;
14
+ fill: string;
15
+ data: HighlightPointData;
16
+ };
17
+ export type HighlightPropsWithoutHTML = {
18
+ /**
19
+ * Highlight specific data (annotate), especte uses tooltip data
20
+ */
21
+ data?: any;
22
+ /**
23
+ * Override `x` from context
24
+ */
25
+ x?: Accessor;
26
+ /**
27
+ * Override `y` from context
28
+ */
29
+ y?: Accessor;
30
+ axis?: 'x' | 'y' | 'both' | 'none';
31
+ /**
32
+ * Show points and pass props to Circles
33
+ * @default false
34
+ */
35
+ points?: boolean | Partial<ComponentProps<typeof Circle>> | Snippet<[
36
+ {
37
+ points: {
38
+ x: number;
39
+ y: number;
40
+ fill: string;
41
+ data: HighlightPointData;
42
+ }[];
43
+ }
44
+ ]>;
45
+ /**
46
+ * Show lines and pass props to Lines
47
+ * @default false
48
+ */
49
+ lines?: boolean | Partial<ComponentProps<typeof Line>> | Snippet<[
50
+ {
51
+ lines: {
52
+ x1: number;
53
+ y1: number;
54
+ x2: number;
55
+ y2: number;
56
+ }[];
57
+ }
58
+ ]>;
59
+ /**
60
+ * Show area and pass props to Rect
61
+ * @default false
62
+ */
63
+ area?: boolean | Partial<ComponentProps<typeof Rect>> | Snippet<[
64
+ {
65
+ area: {
66
+ x: number;
67
+ y: number;
68
+ width: number;
69
+ height: number;
70
+ };
71
+ }
72
+ ]>;
73
+ /**
74
+ * Show bar and pass props to Rect
75
+ *
76
+ * @default false
77
+ */
78
+ bar?: boolean | Partial<ComponentProps<typeof Bar>> | Snippet;
79
+ /**
80
+ * Set to false to disable spring transitions
81
+ *
82
+ * @default true
83
+ */
84
+ motion?: MotionProp;
85
+ onAreaClick?: (e: MouseEvent, detail: {
86
+ data: any;
87
+ }) => void;
88
+ onBarClick?: (e: MouseEvent, detail: {
89
+ data: any;
90
+ }) => void;
91
+ onPointClick?: (e: MouseEvent, detail: {
92
+ point: HighlightPoint;
93
+ data: any;
94
+ }) => void;
95
+ onPointEnter?: (e: MouseEvent, detail: {
96
+ point: HighlightPoint;
97
+ data: any;
98
+ }) => void;
99
+ onPointLeave?: (e: MouseEvent, detail: {
100
+ point: HighlightPoint;
101
+ data: any;
102
+ }) => void;
103
+ };
104
+ import type { MotionProp } from '../utils/motion.svelte.js';
105
+ declare const Highlight: import("svelte").Component<HighlightPropsWithoutHTML, {}, "">;
106
+ type Highlight = ReturnType<typeof Highlight>;
107
+ export default Highlight;
@@ -1,5 +1,59 @@
1
+ <script lang="ts" module>
2
+ import type { Without } from '../utils/types.js';
3
+ import type { SVGAttributes } from 'svelte/elements';
4
+ import type { ComponentProps } from 'svelte';
5
+
6
+ export type HullPropsWithoutHTML = {
7
+ /**
8
+ * Override data instead of using context
9
+ */
10
+ data?: any;
11
+
12
+ /**
13
+ * The curve factory to use for the hull
14
+ * @default curveLinearClosed
15
+ */
16
+ curve?: ComponentProps<typeof Spline>['curve'];
17
+
18
+ /**
19
+ * Classes to apply to the elements.
20
+ */
21
+ classes?: {
22
+ root?: string;
23
+ path?: string;
24
+ };
25
+
26
+ onpointermove?: (
27
+ e: PointerEvent,
28
+ details: {
29
+ points: [number, number][];
30
+ polygon: Delaunay.Polygon;
31
+ }
32
+ ) => void;
33
+
34
+ onclick?: (
35
+ e: MouseEvent,
36
+ details: {
37
+ points: [number, number][];
38
+ polygon: Delaunay.Polygon;
39
+ }
40
+ ) => void;
41
+
42
+ onpointerleave?: (e: PointerEvent) => void;
43
+
44
+ /**
45
+ * A bindable reference to the wrapping `<g>` element.
46
+ *
47
+ * @bindable
48
+ */
49
+ ref?: SVGGElement;
50
+ };
51
+
52
+ export type HullProps = HullPropsWithoutHTML &
53
+ Without<SVGAttributes<SVGElement>, HullPropsWithoutHTML>;
54
+ </script>
55
+
1
56
  <script lang="ts">
2
- import { type ComponentProps } from 'svelte';
3
57
  import { min } from 'd3-array';
4
58
  import { Delaunay } from 'd3-delaunay';
5
59
  // @ts-expect-error
@@ -7,59 +61,56 @@
7
61
  import { curveLinearClosed } from 'd3-shape';
8
62
  import { cls } from '@layerstack/tailwind';
9
63
 
10
- import { chartContext } from './ChartContext.svelte';
11
64
  import GeoPath from './GeoPath.svelte';
12
- import { geoContext, type GeoContext } from './GeoContext.svelte';
13
65
  import Spline from './Spline.svelte';
66
+ import { getChartContext } from './Chart.svelte';
67
+ import { getGeoContext } from './GeoContext.svelte';
68
+ import { layerClass } from '../utils/attributes.js';
69
+
70
+ let {
71
+ data,
72
+ curve = curveLinearClosed,
73
+ classes = {},
74
+ onpointermove,
75
+ onclick,
76
+ onpointerleave,
77
+ class: className,
78
+ ref: refProp = $bindable(),
79
+ ...restProps
80
+ }: HullProps = $props();
81
+
82
+ let ref = $state<SVGGElement>();
14
83
 
15
- const { flatData, x: xContext, y: yContext } = chartContext();
16
- const geo = geoContext() as GeoContext | undefined;
17
-
18
- /** Override data instead of using context */
19
- export let data: any = undefined;
20
-
21
- export let curve: ComponentProps<Spline>['curve'] = curveLinearClosed;
22
-
23
- export let classes: {
24
- root?: string;
25
- path?: string;
26
- } = {};
27
-
28
- export let onclick:
29
- | ((e: MouseEvent, details: { points: [number, number][]; polygon: Delaunay.Polygon }) => void)
30
- | undefined = undefined;
31
- export let onpointermove:
32
- | ((
33
- e: PointerEvent,
34
- details: {
35
- points: [number, number][];
36
- polygon: Delaunay.Polygon;
37
- }
38
- ) => void)
39
- | undefined = undefined;
40
- export let onpointerleave: ((e: PointerEvent) => void) | undefined = undefined;
41
-
42
- $: points = (data ?? $flatData).map((d: any) => {
43
- const xValue = $xContext(d);
44
- const yValue = $yContext(d);
45
-
46
- const x = Array.isArray(xValue) ? min(xValue) : xValue;
47
- const y = Array.isArray(yValue) ? min(yValue) : yValue;
48
-
49
- const point = [x, y];
50
- // @ts-expect-error
51
- point.data = d;
52
- return point;
84
+ $effect.pre(() => {
85
+ refProp = ref;
53
86
  });
87
+
88
+ const ctx = getChartContext();
89
+ const geoCtx = getGeoContext();
90
+
91
+ const points = $derived(
92
+ (data ?? ctx.flatData).map((d: any) => {
93
+ const xValue = ctx.x(d);
94
+ const yValue = ctx.y(d);
95
+
96
+ const x = Array.isArray(xValue) ? min(xValue) : xValue;
97
+ const y = Array.isArray(yValue) ? min(yValue) : yValue;
98
+
99
+ const point = [x, y];
100
+ // @ts-expect-error
101
+ point.data = d;
102
+ return point;
103
+ })
104
+ );
54
105
  </script>
55
106
 
56
- <g {...$$restProps} class={cls(classes.root, $$props.class)}>
57
- {#if $geo}
107
+ <g {...restProps} class={cls(layerClass('hull-g'), classes.root, className)} bind:this={ref}>
108
+ {#if geoCtx.projection}
58
109
  {@const polygon = geoVoronoi().hull(points)}
59
110
  <GeoPath
60
111
  geojson={polygon}
61
112
  {curve}
62
- class={cls('fill-transparent', classes.path)}
113
+ class={cls(layerClass('hull-path'), 'fill-transparent', classes.path)}
63
114
  onclick={(e) => onclick?.(e, { points, polygon })}
64
115
  onpointermove={(e) => onpointermove?.(e, { points, polygon })}
65
116
  {onpointerleave}
@@ -72,7 +123,7 @@
72
123
  x={(d) => d[0]}
73
124
  y={(d) => d[1]}
74
125
  {curve}
75
- class={cls('fill-transparent', classes.path)}
126
+ class={cls(layerClass('hull-class'), 'fill-transparent', classes.path)}
76
127
  onclick={(e) => onclick?.(e, { points, polygon })}
77
128
  onpointermove={(e) => onpointermove?.(e, { points, polygon })}
78
129
  {onpointerleave}
@@ -1,32 +1,42 @@
1
- import { SvelteComponentTyped } from "svelte";
2
- import { Delaunay } from 'd3-delaunay';
3
- declare const __propDef: {
4
- props: {
5
- [x: string]: any;
6
- data?: any;
7
- curve?: import("d3-shape").CurveFactory | import("d3-shape").CurveFactoryLineOnly | undefined;
8
- classes?: {
9
- root?: string;
10
- path?: string;
11
- } | undefined;
12
- onclick?: ((e: MouseEvent, details: {
13
- points: [number, number][];
14
- polygon: Delaunay.Polygon;
15
- }) => void) | undefined | undefined;
16
- onpointermove?: ((e: PointerEvent, details: {
17
- points: [number, number][];
18
- polygon: Delaunay.Polygon;
19
- }) => void) | undefined | undefined;
20
- onpointerleave?: ((e: PointerEvent) => void) | undefined | undefined;
21
- };
22
- events: {
23
- [evt: string]: CustomEvent<any>;
1
+ import type { Without } from '../utils/types.js';
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import type { ComponentProps } from 'svelte';
4
+ export type HullPropsWithoutHTML = {
5
+ /**
6
+ * Override data instead of using context
7
+ */
8
+ data?: any;
9
+ /**
10
+ * The curve factory to use for the hull
11
+ * @default curveLinearClosed
12
+ */
13
+ curve?: ComponentProps<typeof Spline>['curve'];
14
+ /**
15
+ * Classes to apply to the elements.
16
+ */
17
+ classes?: {
18
+ root?: string;
19
+ path?: string;
24
20
  };
25
- slots: {};
21
+ onpointermove?: (e: PointerEvent, details: {
22
+ points: [number, number][];
23
+ polygon: Delaunay.Polygon;
24
+ }) => void;
25
+ onclick?: (e: MouseEvent, details: {
26
+ points: [number, number][];
27
+ polygon: Delaunay.Polygon;
28
+ }) => void;
29
+ onpointerleave?: (e: PointerEvent) => void;
30
+ /**
31
+ * A bindable reference to the wrapping `<g>` element.
32
+ *
33
+ * @bindable
34
+ */
35
+ ref?: SVGGElement;
26
36
  };
27
- export type HullProps = typeof __propDef.props;
28
- export type HullEvents = typeof __propDef.events;
29
- export type HullSlots = typeof __propDef.slots;
30
- export default class Hull extends SvelteComponentTyped<HullProps, HullEvents, HullSlots> {
31
- }
32
- export {};
37
+ export type HullProps = HullPropsWithoutHTML & Without<SVGAttributes<SVGElement>, HullPropsWithoutHTML>;
38
+ import { Delaunay } from 'd3-delaunay';
39
+ import Spline from './Spline.svelte';
40
+ declare const Hull: import("svelte").Component<HullProps, {}, "ref">;
41
+ type Hull = ReturnType<typeof Hull>;
42
+ export default Hull;
@@ -1,56 +1,128 @@
1
- <script lang="ts">
2
- import { type ComponentProps } from 'svelte';
1
+ <script lang="ts" module>
2
+ import Text, { type TextProps } from './Text.svelte';
3
+ import { type ComponentProps, type Snippet } from 'svelte';
3
4
  import { format as formatValue, type FormatType } from '@layerstack/utils';
4
- import { cls } from '@layerstack/tailwind';
5
-
6
- import Text from './Text.svelte';
7
- import { isScaleBand } from '../utils/scales.js';
8
- import { chartContext } from './ChartContext.svelte';
5
+ import type { Without } from '../utils/types.js';
9
6
  import Points, { type Point } from './Points.svelte';
10
7
  import { accessor, type Accessor } from '../utils/common.js';
11
8
 
12
- const { xScale, yScale } = chartContext();
9
+ export type LabelsPropsWithoutHTML<T = any> = {
10
+ /**
11
+ * Override data instead of using context
12
+ */
13
+ data?: T;
14
+
15
+ /**
16
+ * Override display value accessor. By default, uses `y` unless yScale is band scale
17
+ */
18
+ value?: Accessor<T>;
19
+
20
+ /**
21
+ * The fill color of the label, which can either be a string or an accessor function
22
+ * that returns a valid `fill` color value.
23
+ *
24
+ * The accessor is useful for dynamic fill colors based on the data the label represents.
25
+ */
26
+ fill?: string | Accessor<T>;
27
+
28
+ /**
29
+ * Override `x` accessor from Chart context
30
+ */
31
+ x?: Accessor<T>;
32
+
33
+ /**
34
+ * Override `y` accessor from Chart context
35
+ */
36
+ y?: Accessor<T>;
37
+
38
+ /**
39
+ * The placement of the label relative to the point
40
+ * @default 'outside'
41
+ */
42
+ placement?: 'inside' | 'outside' | 'center';
43
+
44
+ /**
45
+ * The offset of the label from the point
46
+ *
47
+ * @default placement === 'center' ? 0 : 4
48
+ */
49
+ offset?: number;
13
50
 
14
- /** Override data instead of using context */
15
- export let data: any = undefined;
51
+ /**
52
+ * The format of the label
53
+ */
54
+ format?: FormatType;
16
55
 
17
- /** Override display value accessor. By default, uses `y` unless yScale is band scale */
18
- export let value: Accessor = undefined;
56
+ /**
57
+ * Define unique value for {#each} `(key)` expressions to improve transitions.
58
+ * `index` position used by default
59
+ *
60
+ * @default (d, index) => index
61
+ */
62
+ key?: (d: T, index: number) => any;
19
63
 
20
- /** Override `x` accessor from Chart context */
21
- export let x: Accessor = undefined;
22
- /** Override `y` accessor from Chart context */
23
- export let y: Accessor = undefined;
64
+ children?: Snippet<[{ data: Point; textProps: ComponentProps<typeof Text> }]>;
65
+ };
66
+
67
+ export type LabelsProps<T = any> = LabelsPropsWithoutHTML<T> &
68
+ Without<TextProps, LabelsPropsWithoutHTML<T>>;
69
+ </script>
70
+
71
+ <script lang="ts" generics="TData = any">
72
+ import { cls } from '@layerstack/tailwind';
73
+
74
+ import { isScaleBand } from '../utils/scales.svelte.js';
75
+ import { getChartContext } from './Chart.svelte';
76
+ import { extractLayerProps, layerClass } from '../utils/attributes.js';
24
77
 
25
- export let placement: 'inside' | 'outside' | 'center' = 'outside';
26
- export let offset = placement === 'center' ? 0 : 4;
27
- export let format: FormatType | undefined = undefined;
78
+ const ctx = getChartContext();
28
79
 
29
- /** Define unique value for {#each} `(key)` expressions to improve transitions. `index` position used by default */
30
- export let key: (d: any, index: number) => any = (d, i) => i;
80
+ let {
81
+ data,
82
+ value,
83
+ x,
84
+ y,
85
+ placement = 'outside',
86
+ offset = placement === 'center' ? 0 : 4,
87
+ format,
88
+ key = (_: any, i: number) => i,
89
+ children: childrenProp,
90
+ class: className,
91
+ fill,
92
+ ...restProps
93
+ }: LabelsProps<TData> = $props();
31
94
 
32
- $: getTextProps = (point: Point): ComponentProps<Text> => {
95
+ function getTextProps(point: Point): ComponentProps<typeof Text> {
33
96
  // Used for positioning
34
- const pointValue = isScaleBand($yScale) ? point.xValue : point.yValue;
97
+ const pointValue = isScaleBand(ctx.yScale) ? point.xValue : point.yValue;
98
+
99
+ // extract the true fill value from `fill` which could be an
100
+ // accessor function or string/undefined
101
+ const fillValue = typeof fill === 'function' ? accessor(fill)(point.data) : fill;
35
102
 
36
103
  const displayValue = value
37
104
  ? accessor(value)(point.data)
38
- : isScaleBand($yScale)
105
+ : isScaleBand(ctx.yScale)
39
106
  ? point.xValue
40
107
  : point.yValue;
41
108
 
42
109
  const formattedValue = formatValue(
43
110
  displayValue,
44
111
  format ??
45
- (value ? undefined : isScaleBand($yScale) ? $xScale.tickFormat?.() : $yScale.tickFormat?.())
112
+ (value
113
+ ? undefined
114
+ : isScaleBand(ctx.yScale)
115
+ ? ctx.xScale.tickFormat?.()
116
+ : ctx.yScale.tickFormat?.())
46
117
  );
47
118
 
48
- if (isScaleBand($yScale)) {
119
+ if (isScaleBand(ctx.yScale)) {
49
120
  // Position label left/right on horizontal bars
50
121
  if (pointValue < 0) {
51
122
  // left
52
123
  return {
53
124
  value: formattedValue,
125
+ fill: fillValue,
54
126
  x: point.x + (placement === 'outside' ? -offset : offset),
55
127
  y: point.y,
56
128
  textAnchor: placement === 'outside' ? 'end' : 'start',
@@ -61,6 +133,7 @@
61
133
  // right
62
134
  return {
63
135
  value: formattedValue,
136
+ fill: fillValue,
64
137
  x: point.x + (placement === 'outside' ? offset : -offset),
65
138
  y: point.y,
66
139
  textAnchor: placement === 'outside' ? 'start' : 'end',
@@ -74,6 +147,7 @@
74
147
  // bottom
75
148
  return {
76
149
  value: formattedValue,
150
+ fill: fillValue,
77
151
  x: point.x,
78
152
  y: point.y + (placement === 'outside' ? offset : -offset),
79
153
  capHeight: '.6rem',
@@ -85,6 +159,7 @@
85
159
  // top
86
160
  return {
87
161
  value: formattedValue,
162
+ fill: fillValue,
88
163
  x: point.x,
89
164
  y: point.y + (placement === 'outside' ? -offset : offset),
90
165
  capHeight: '.6rem',
@@ -94,27 +169,31 @@
94
169
  };
95
170
  }
96
171
  }
97
- };
172
+ }
98
173
  </script>
99
174
 
100
- <g class="Labels">
101
- <Points {data} {x} {y} let:points>
102
- {#each points as point, i (key(point.data, i))}
103
- {@const textProps = getTextProps(point)}
104
- <slot data={point} {textProps}>
105
- <Text
106
- {...textProps}
107
- {...$$restProps}
108
- class={cls(
109
- 'text-xs',
110
- placement === 'inside'
111
- ? 'fill-surface-300 stroke-surface-content'
112
- : 'fill-surface-content stroke-surface-100',
113
- textProps.class,
114
- $$props.class
115
- )}
116
- />
117
- </slot>
118
- {/each}
175
+ <g class={layerClass('labels-g')}>
176
+ <Points {data} {x} {y}>
177
+ {#snippet children({ points })}
178
+ {#each points as point, i (key(point.data, i))}
179
+ {@const textProps = extractLayerProps(getTextProps(point), 'labels-text')}
180
+ {#if childrenProp}
181
+ {@render childrenProp({ data: point, textProps })}
182
+ {:else}
183
+ <Text
184
+ {...textProps}
185
+ {...restProps}
186
+ class={cls(
187
+ 'text-xs',
188
+ placement === 'inside'
189
+ ? 'fill-surface-300 stroke-surface-content'
190
+ : 'fill-surface-content stroke-surface-100',
191
+ textProps.class,
192
+ className
193
+ )}
194
+ />
195
+ {/if}
196
+ {/each}
197
+ {/snippet}
119
198
  </Points>
120
199
  </g>
@@ -1,32 +1,75 @@
1
- import { SvelteComponentTyped } from "svelte";
1
+ import Text, { type TextProps } from './Text.svelte';
2
+ import { type ComponentProps, type Snippet } from 'svelte';
2
3
  import { type FormatType } from '@layerstack/utils';
4
+ import type { Without } from '../utils/types.js';
3
5
  import { type Point } from './Points.svelte';
4
6
  import { type Accessor } from '../utils/common.js';
5
- declare const __propDef: {
6
- props: {
7
- [x: string]: any;
8
- data?: any;
9
- value?: Accessor;
10
- x?: Accessor;
11
- y?: Accessor;
12
- placement?: "inside" | "outside" | "center" | undefined;
13
- offset?: number | undefined;
14
- format?: FormatType | undefined;
15
- key?: ((d: any, index: number) => any) | undefined;
16
- };
17
- events: {
18
- [evt: string]: CustomEvent<any>;
19
- };
20
- slots: {
21
- default: {
22
- data: Point;
23
- textProps: any;
24
- };
25
- };
7
+ export type LabelsPropsWithoutHTML<T = any> = {
8
+ /**
9
+ * Override data instead of using context
10
+ */
11
+ data?: T;
12
+ /**
13
+ * Override display value accessor. By default, uses `y` unless yScale is band scale
14
+ */
15
+ value?: Accessor<T>;
16
+ /**
17
+ * The fill color of the label, which can either be a string or an accessor function
18
+ * that returns a valid `fill` color value.
19
+ *
20
+ * The accessor is useful for dynamic fill colors based on the data the label represents.
21
+ */
22
+ fill?: string | Accessor<T>;
23
+ /**
24
+ * Override `x` accessor from Chart context
25
+ */
26
+ x?: Accessor<T>;
27
+ /**
28
+ * Override `y` accessor from Chart context
29
+ */
30
+ y?: Accessor<T>;
31
+ /**
32
+ * The placement of the label relative to the point
33
+ * @default 'outside'
34
+ */
35
+ placement?: 'inside' | 'outside' | 'center';
36
+ /**
37
+ * The offset of the label from the point
38
+ *
39
+ * @default placement === 'center' ? 0 : 4
40
+ */
41
+ offset?: number;
42
+ /**
43
+ * The format of the label
44
+ */
45
+ format?: FormatType;
46
+ /**
47
+ * Define unique value for {#each} `(key)` expressions to improve transitions.
48
+ * `index` position used by default
49
+ *
50
+ * @default (d, index) => index
51
+ */
52
+ key?: (d: T, index: number) => any;
53
+ children?: Snippet<[{
54
+ data: Point;
55
+ textProps: ComponentProps<typeof Text>;
56
+ }]>;
26
57
  };
27
- export type LabelsProps = typeof __propDef.props;
28
- export type LabelsEvents = typeof __propDef.events;
29
- export type LabelsSlots = typeof __propDef.slots;
30
- export default class Labels extends SvelteComponentTyped<LabelsProps, LabelsEvents, LabelsSlots> {
58
+ export type LabelsProps<T = any> = LabelsPropsWithoutHTML<T> & Without<TextProps, LabelsPropsWithoutHTML<T>>;
59
+ declare class __sveltets_Render<TData = any> {
60
+ props(): LabelsProps<TData>;
61
+ events(): {};
62
+ slots(): {};
63
+ bindings(): "";
64
+ exports(): {};
31
65
  }
32
- export {};
66
+ interface $$IsomorphicComponent {
67
+ new <TData = any>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TData>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TData>['props']>, ReturnType<__sveltets_Render<TData>['events']>, ReturnType<__sveltets_Render<TData>['slots']>> & {
68
+ $$bindings?: ReturnType<__sveltets_Render<TData>['bindings']>;
69
+ } & ReturnType<__sveltets_Render<TData>['exports']>;
70
+ <TData = any>(internal: unknown, props: ReturnType<__sveltets_Render<TData>['props']> & {}): ReturnType<__sveltets_Render<TData>['exports']>;
71
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
72
+ }
73
+ declare const Labels: $$IsomorphicComponent;
74
+ type Labels<TData = any> = InstanceType<typeof Labels<TData>>;
75
+ export default Labels;