layerchart 2.0.0-next.44 → 2.0.0-next.46

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 (179) hide show
  1. package/LICENSE +1 -1
  2. package/dist/components/AnnotationLine.svelte +1 -1
  3. package/dist/components/AnnotationPoint.svelte +1 -1
  4. package/dist/components/AnnotationRange.svelte +16 -15
  5. package/dist/components/Arc.svelte +10 -10
  6. package/dist/components/Arc.svelte.d.ts +4 -4
  7. package/dist/components/Arc.svelte.test.d.ts +1 -0
  8. package/dist/components/Arc.svelte.test.js +868 -0
  9. package/dist/components/Area.svelte +9 -7
  10. package/dist/components/Axis.svelte +2 -1
  11. package/dist/components/Axis.svelte.d.ts +1 -0
  12. package/dist/components/Bar.svelte +3 -3
  13. package/dist/components/Bars.svelte +1 -1
  14. package/dist/components/Blur.svelte +3 -3
  15. package/dist/components/Bounds.svelte +1 -1
  16. package/dist/components/BrushContext.svelte +1 -1
  17. package/dist/components/Calendar.svelte +2 -2
  18. package/dist/components/Calendar.svelte.d.ts +1 -1
  19. package/dist/components/Chart.svelte +63 -137
  20. package/dist/components/Chart.svelte.d.ts +23 -88
  21. package/dist/components/ChartClipPath.svelte +1 -1
  22. package/dist/components/Circle.svelte +17 -8
  23. package/dist/components/Circle.svelte.d.ts +3 -0
  24. package/dist/components/ClipPath.svelte +4 -4
  25. package/dist/components/Connector.svelte +4 -4
  26. package/dist/components/Connector.svelte.d.ts +3 -3
  27. package/dist/components/Ellipse.svelte +7 -7
  28. package/dist/components/Frame.svelte +1 -1
  29. package/dist/components/GeoContext.svelte +4 -20
  30. package/dist/components/GeoContext.svelte.d.ts +2 -6
  31. package/dist/components/GeoEdgeFade.svelte +1 -1
  32. package/dist/components/GeoPath.svelte +42 -107
  33. package/dist/components/GeoPath.svelte.d.ts +5 -4
  34. package/dist/components/GeoPoint.svelte +5 -5
  35. package/dist/components/GeoSpline.svelte +2 -14
  36. package/dist/components/GeoSpline.svelte.d.ts +1 -1
  37. package/dist/components/GeoTile.svelte +7 -6
  38. package/dist/components/GeoVisible.svelte +1 -1
  39. package/dist/components/Graticule.svelte +4 -7
  40. package/dist/components/Graticule.svelte.d.ts +2 -1
  41. package/dist/components/Grid.svelte +1 -1
  42. package/dist/components/Group.svelte +8 -8
  43. package/dist/components/Highlight.svelte +18 -16
  44. package/dist/components/Hull.svelte +2 -2
  45. package/dist/components/Labels.svelte +1 -1
  46. package/dist/components/Legend.svelte +1 -1
  47. package/dist/components/Line.svelte +9 -7
  48. package/dist/components/LinearGradient.svelte +8 -7
  49. package/dist/components/MonthPath.svelte +5 -11
  50. package/dist/components/MonthPath.svelte.d.ts +2 -2
  51. package/dist/components/Pack.svelte +4 -6
  52. package/dist/components/Pack.svelte.d.ts +2 -4
  53. package/dist/components/Partition.svelte +4 -3
  54. package/dist/components/Partition.svelte.d.ts +2 -1
  55. package/dist/components/Path.svelte +344 -0
  56. package/dist/components/Path.svelte.d.ts +72 -0
  57. package/dist/components/Pattern.svelte +6 -6
  58. package/dist/components/Pie.svelte +2 -2
  59. package/dist/components/Pie.svelte.d.ts +1 -1
  60. package/dist/components/Point.svelte +1 -1
  61. package/dist/components/Points.svelte +1 -1
  62. package/dist/components/Polygon.svelte +8 -6
  63. package/dist/components/RadialGradient.svelte +7 -7
  64. package/dist/components/Rect.svelte +32 -10
  65. package/dist/components/Rect.svelte.d.ts +4 -1
  66. package/dist/components/Rule.svelte +1 -1
  67. package/dist/components/Sankey.svelte +1 -1
  68. package/dist/components/Spline.svelte +13 -337
  69. package/dist/components/Spline.svelte.d.ts +10 -73
  70. package/dist/components/Text.svelte +9 -7
  71. package/dist/components/Threshold.svelte +3 -3
  72. package/dist/components/TransformContext.svelte +10 -143
  73. package/dist/components/TransformControls.svelte +2 -2
  74. package/dist/components/TransformControls.svelte.d.ts +1 -1
  75. package/dist/components/Tree.svelte +4 -3
  76. package/dist/components/Tree.svelte.d.ts +2 -1
  77. package/dist/components/Treemap.svelte +4 -3
  78. package/dist/components/Treemap.svelte.d.ts +2 -1
  79. package/dist/components/Voronoi.svelte +5 -5
  80. package/dist/components/charts/ArcChart.svelte +14 -6
  81. package/dist/components/charts/ArcChart.svelte.d.ts +1 -1
  82. package/dist/components/charts/AreaChart.svelte +12 -6
  83. package/dist/components/charts/BarChart.svelte +12 -6
  84. package/dist/components/charts/DefaultTooltip.svelte +1 -1
  85. package/dist/components/charts/LineChart.svelte +12 -6
  86. package/dist/components/charts/PieChart.svelte +14 -6
  87. package/dist/components/charts/PieChart.svelte.d.ts +1 -1
  88. package/dist/components/charts/ScatterChart.svelte +11 -9
  89. package/dist/components/charts/types.d.ts +7 -6
  90. package/dist/components/index.d.ts +14 -12
  91. package/dist/components/index.js +14 -12
  92. package/dist/components/{layout → layers}/Canvas.svelte +13 -60
  93. package/dist/components/{layout → layers}/Canvas.svelte.d.ts +2 -32
  94. package/dist/components/{layout → layers}/Html.svelte +18 -3
  95. package/dist/components/{layout → layers}/Html.svelte.d.ts +7 -0
  96. package/dist/components/layers/Layer.svelte +85 -0
  97. package/dist/components/{layout → layers}/Layer.svelte.d.ts +7 -3
  98. package/dist/components/{layout → layers}/Svg.svelte +18 -3
  99. package/dist/components/{layout → layers}/Svg.svelte.d.ts +7 -0
  100. package/dist/components/{layout → layers}/WebGL.svelte +1 -1
  101. package/dist/components/{layout → layers}/WebGL.svelte.d.ts +3 -3
  102. package/dist/components/tests/TestHarness.svelte +76 -0
  103. package/dist/components/tests/TestHarness.svelte.d.ts +19 -0
  104. package/dist/components/tooltip/Tooltip.svelte +3 -3
  105. package/dist/components/tooltip/Tooltip.svelte.d.ts +1 -1
  106. package/dist/components/tooltip/TooltipContext.svelte +13 -45
  107. package/dist/components/tooltip/TooltipContext.svelte.d.ts +2 -14
  108. package/dist/components/tooltip/tooltipMetaContext.d.ts +2 -2
  109. package/dist/components/tooltip/tooltipMetaContext.js +2 -2
  110. package/dist/contexts/canvas.d.ts +33 -0
  111. package/dist/contexts/canvas.js +14 -0
  112. package/dist/contexts/chart.d.ts +84 -0
  113. package/dist/contexts/chart.js +10 -0
  114. package/dist/contexts/geo.d.ts +6 -0
  115. package/dist/contexts/geo.js +12 -0
  116. package/dist/contexts/index.d.ts +6 -0
  117. package/dist/contexts/index.js +6 -0
  118. package/dist/contexts/layer.d.ts +3 -0
  119. package/dist/contexts/layer.js +8 -0
  120. package/dist/contexts/settings.d.ts +4 -0
  121. package/dist/contexts/settings.js +10 -0
  122. package/dist/contexts/tooltip.d.ts +15 -0
  123. package/dist/contexts/tooltip.js +8 -0
  124. package/dist/contexts/transform.d.ts +95 -0
  125. package/dist/contexts/transform.js +10 -0
  126. package/dist/index.d.ts +1 -0
  127. package/dist/index.js +1 -0
  128. package/dist/states/settings.svelte.d.ts +12 -0
  129. package/dist/states/settings.svelte.js +10 -0
  130. package/dist/states/transform.svelte.d.ts +9 -0
  131. package/dist/states/transform.svelte.js +31 -0
  132. package/dist/utils/arcText.svelte.d.ts +1 -1
  133. package/dist/utils/canvas.d.ts +7 -3
  134. package/dist/utils/canvas.js +78 -11
  135. package/dist/utils/common.d.ts +8 -1
  136. package/dist/utils/common.js +9 -10
  137. package/dist/utils/index.d.ts +2 -0
  138. package/dist/utils/index.js +2 -0
  139. package/dist/utils/motion.svelte.js +0 -1
  140. package/dist/utils/rect.svelte.d.ts +1 -1
  141. package/dist/utils/rect.svelte.js +17 -9
  142. package/dist/utils/scales.svelte.js +2 -2
  143. package/dist/utils/string.d.ts +3 -1
  144. package/package.json +32 -54
  145. package/README.md +0 -41
  146. package/dist/components/layout/Layer.svelte +0 -41
  147. package/dist/docs/Blockquote.svelte +0 -17
  148. package/dist/docs/Blockquote.svelte.d.ts +0 -5
  149. package/dist/docs/Code.svelte +0 -80
  150. package/dist/docs/Code.svelte.d.ts +0 -14
  151. package/dist/docs/ConnectorSweepMenuField.svelte +0 -17
  152. package/dist/docs/ConnectorSweepMenuField.svelte.d.ts +0 -7
  153. package/dist/docs/ConnectorTypeMenuField.svelte +0 -17
  154. package/dist/docs/ConnectorTypeMenuField.svelte.d.ts +0 -7
  155. package/dist/docs/CurveMenuField.svelte +0 -44
  156. package/dist/docs/CurveMenuField.svelte.d.ts +0 -9
  157. package/dist/docs/GeoDebug.svelte +0 -60
  158. package/dist/docs/GeoDebug.svelte.d.ts +0 -4
  159. package/dist/docs/Header1.svelte +0 -16
  160. package/dist/docs/Header1.svelte.d.ts +0 -5
  161. package/dist/docs/Json.svelte +0 -36
  162. package/dist/docs/Json.svelte.d.ts +0 -10
  163. package/dist/docs/Layout.svelte +0 -21
  164. package/dist/docs/Layout.svelte.d.ts +0 -8
  165. package/dist/docs/Link.svelte +0 -9
  166. package/dist/docs/Link.svelte.d.ts +0 -5
  167. package/dist/docs/PathDataMenuField.svelte +0 -78
  168. package/dist/docs/PathDataMenuField.svelte.d.ts +0 -9
  169. package/dist/docs/Preview.svelte +0 -104
  170. package/dist/docs/Preview.svelte.d.ts +0 -13
  171. package/dist/docs/TilesetField.svelte +0 -136
  172. package/dist/docs/TilesetField.svelte.d.ts +0 -6
  173. package/dist/docs/TransformDebug.svelte +0 -22
  174. package/dist/docs/TransformDebug.svelte.d.ts +0 -20
  175. package/dist/docs/ViewSourceButton.svelte +0 -53
  176. package/dist/docs/ViewSourceButton.svelte.d.ts +0 -11
  177. package/dist/utils/graph/dagre.d.ts +0 -34
  178. /package/dist/{utils → contexts}/legendPayload.d.ts +0 -0
  179. /package/dist/{utils → contexts}/legendPayload.js +0 -0
@@ -24,13 +24,15 @@
24
24
  | 'marks'
25
25
  | 'onTooltipClick'
26
26
  | 'profile'
27
- | 'renderContext'
27
+ | 'layer'
28
28
  | 'series'
29
29
  | 'tooltip'
30
30
  | 'tooltipContext'
31
31
  | 'cRange'
32
32
  | 'padding'
33
33
  | 'context'
34
+ | 'width'
35
+ | 'height'
34
36
  > & {
35
37
  /**
36
38
  * Key accessor
@@ -181,7 +183,7 @@
181
183
  import Arc from '../Arc.svelte';
182
184
  import Chart from '../Chart.svelte';
183
185
  import Group from '../Group.svelte';
184
- import Layer from '../layout/Layer.svelte';
186
+ import Layer from '../layers/Layer.svelte';
185
187
  import Legend from '../Legend.svelte';
186
188
  import Pie from '../Pie.svelte';
187
189
  import * as Tooltip from '../tooltip/index.js';
@@ -197,6 +199,9 @@
197
199
  import { SeriesState } from '../../states/series.svelte.js';
198
200
  import { createLegendProps } from './utils.svelte.js';
199
201
  import { setTooltipMetaContext } from '../tooltip/tooltipMetaContext.js';
202
+ import { getSettings } from '../../contexts/settings.js';
203
+
204
+ const settings = getSettings();
200
205
 
201
206
  let {
202
207
  data = [],
@@ -219,9 +224,9 @@
219
224
  /** Event dispatched with current tooltip data */
220
225
  onTooltipClick = () => {},
221
226
  props = {},
222
- renderContext = 'svg',
227
+ layer: layerProp,
223
228
  profile = false,
224
- debug = false,
229
+ debug: debugProp,
225
230
  tooltip = true,
226
231
  children: childrenProp,
227
232
  aboveContext,
@@ -235,6 +240,9 @@
235
240
  ...restProps
236
241
  }: PieChartProps<TData> = $props();
237
242
 
243
+ const layer = $derived(layerProp ?? settings.layer);
244
+ const debug = $derived(debugProp ?? settings.debug);
245
+
238
246
  const series = $derived(
239
247
  seriesProp === undefined ? [{ key: 'default', value: value }] : seriesProp
240
248
  );
@@ -404,8 +412,8 @@
404
412
  {@render belowContext?.(snippetProps)}
405
413
 
406
414
  <Layer
407
- type={renderContext}
408
- {...asAny(renderContext === 'canvas' ? props.canvas : props.svg)}
415
+ type={layer}
416
+ {...asAny(layer === 'canvas' ? props.canvas : props.svg)}
409
417
  {center}
410
418
  {debug}
411
419
  >
@@ -6,7 +6,7 @@ export type PieChartExtraSnippetProps<TData> = {
6
6
  getGroupProps: () => ComponentProps<typeof Group>;
7
7
  };
8
8
  export type PieChartPropsObjProp = Pick<SimplifiedChartPropsObject, 'pie' | 'group' | 'arc' | 'legend' | 'canvas' | 'svg' | 'tooltip'>;
9
- export type PieChartProps<TData> = Pick<SimplifiedChartProps<TData, typeof Arc, PieChartExtraSnippetProps<TData>>, 'aboveContext' | 'aboveMarks' | 'belowContext' | 'belowMarks' | 'children' | 'data' | 'debug' | 'legend' | 'marks' | 'onTooltipClick' | 'profile' | 'renderContext' | 'series' | 'tooltip' | 'tooltipContext' | 'cRange' | 'padding' | 'context'> & {
9
+ export type PieChartProps<TData> = Pick<SimplifiedChartProps<TData, typeof Arc, PieChartExtraSnippetProps<TData>>, 'aboveContext' | 'aboveMarks' | 'belowContext' | 'belowMarks' | 'children' | 'data' | 'debug' | 'legend' | 'marks' | 'onTooltipClick' | 'profile' | 'layer' | 'series' | 'tooltip' | 'tooltipContext' | 'cRange' | 'padding' | 'context' | 'width' | 'height'> & {
10
10
  /**
11
11
  * Key accessor
12
12
  *
@@ -55,7 +55,7 @@
55
55
  import Grid from '../Grid.svelte';
56
56
  import Highlight from '../Highlight.svelte';
57
57
  import Labels from '../Labels.svelte';
58
- import Layer from '../layout/Layer.svelte';
58
+ import Layer from '../layers/Layer.svelte';
59
59
  import Legend from '../Legend.svelte';
60
60
  import Points from '../Points.svelte';
61
61
  import Rule from '../Rule.svelte';
@@ -65,6 +65,9 @@
65
65
  import { asAny } from '../../utils/types.js';
66
66
  import { SeriesState } from '../../states/series.svelte.js';
67
67
  import { createLegendProps } from './utils.svelte.js';
68
+ import { getSettings } from '../../contexts/settings.js';
69
+
70
+ const settings = getSettings();
68
71
 
69
72
  let {
70
73
  data = [],
@@ -85,9 +88,9 @@
85
88
  context = $bindable(),
86
89
  onTooltipClick = () => {},
87
90
  props = {},
88
- renderContext = 'svg',
91
+ layer: layerProp,
89
92
  profile = false,
90
- debug = false,
93
+ debug: debugProp,
91
94
  children: childrenProp,
92
95
  aboveContext,
93
96
  belowContext,
@@ -99,6 +102,9 @@
99
102
  ...restProps
100
103
  }: ScatterChartProps<TData> = $props();
101
104
 
105
+ const layer = $derived(layerProp ?? settings.layer);
106
+ const debug = $derived(debugProp ?? settings.debug);
107
+
102
108
  const series: SeriesData<TData, typeof Points>[] = $derived(
103
109
  seriesProp === undefined ? [{ key: 'default', data: chartDataArray(data) }] : seriesProp
104
110
  );
@@ -220,7 +226,7 @@
220
226
  yNice
221
227
  c={yProp}
222
228
  cRange={['var(--color-primary, currentColor)']}
223
- padding={defaultChartPadding(axis, legend)}
229
+ padding={defaultChartPadding({ axis, legend })}
224
230
  {...restProps}
225
231
  tooltip={tooltip === false
226
232
  ? false
@@ -265,11 +271,7 @@
265
271
  {@render childrenProp(snippetProps)}
266
272
  {:else}
267
273
  {@render belowContext?.(snippetProps)}
268
- <Layer
269
- type={renderContext}
270
- {...asAny(renderContext === 'canvas' ? props.canvas : props.svg)}
271
- {debug}
272
- >
274
+ <Layer type={layer} {...asAny(layer === 'canvas' ? props.canvas : props.svg)} {debug}>
273
275
  {#if typeof grid === 'function'}
274
276
  {@render grid(snippetProps)}
275
277
  {:else if grid}
@@ -4,21 +4,22 @@ import type BrushContext from '../BrushContext.svelte';
4
4
  import type { AnyScale } from '../../utils/scales.svelte.js';
5
5
  import type { AnnotationPoint, AnnotationLine, AnnotationRange, Area, Axis, Group, Labels, Legend, Points, Rule, Spline } from '../index.js';
6
6
  import type TooltipContext from '../tooltip/TooltipContext.svelte';
7
- import type { TooltipContextValue } from '../tooltip/TooltipContext.svelte';
7
+ import type { TooltipContextValue } from '../../contexts/tooltip.js';
8
8
  import type Highlight from '../Highlight.svelte';
9
9
  import type Line from '../Line.svelte';
10
- import type Svg from '../layout/Svg.svelte';
10
+ import type Svg from '../layers/Svg.svelte';
11
11
  import type Tooltip from '../tooltip/Tooltip.svelte';
12
12
  import type TooltipHeader from '../tooltip/TooltipHeader.svelte';
13
13
  import type TooltipList from '../tooltip/TooltipList.svelte';
14
14
  import type TooltipItem from '../tooltip/TooltipItem.svelte';
15
15
  import type TooltipSeparator from '../tooltip/TooltipSeparator.svelte';
16
- import type { ChartContextValue, ChartPropsWithoutHTML } from '../Chart.svelte';
16
+ import type { ChartProps } from '../Chart.svelte';
17
+ import type { ChartContextValue } from '../../contexts/chart.js';
17
18
  import type Grid from '../Grid.svelte';
18
19
  import type Bars from '../Bars.svelte';
19
20
  import type Pie from '../Pie.svelte';
20
21
  import type Arc from '../Arc.svelte';
21
- import type Canvas from '../layout/Canvas.svelte';
22
+ import type Canvas from '../layers/Canvas.svelte';
22
23
  import type { Without } from '../../utils/types.js';
23
24
  export type SeriesData<TData, TComponent extends Component> = {
24
25
  key: string;
@@ -198,7 +199,7 @@ export type BaseChartProps<TData, TComponent extends Component, TSnippetProps =
198
199
  *
199
200
  * @default 'svg'
200
201
  */
201
- renderContext?: 'svg' | 'canvas';
202
+ layer?: 'svg' | 'canvas';
202
203
  /**
203
204
  * Whether to log the initial render performance using `console.time`.
204
205
  *
@@ -222,7 +223,7 @@ export type BaseChartProps<TData, TComponent extends Component, TSnippetProps =
222
223
  aboveMarks?: ChartSnippet;
223
224
  marks?: ChartSnippet;
224
225
  };
225
- export type SimplifiedChartProps<TData, TComponent extends Component, TSnippetProps = {}, ChartSnippet = SimplifiedChartSnippet<TData, TComponent, TSnippetProps>> = BaseChartProps<TData, TComponent, TSnippetProps, ChartSnippet> & Without<ChartPropsWithoutHTML<TData>, BaseChartProps<TData, TComponent, TSnippetProps, ChartSnippet>>;
226
+ export type SimplifiedChartProps<TData, TComponent extends Component, TSnippetProps = {}, ChartSnippet = SimplifiedChartSnippet<TData, TComponent, TSnippetProps>> = BaseChartProps<TData, TComponent, TSnippetProps, ChartSnippet> & Without<ChartProps<TData>, BaseChartProps<TData, TComponent, TSnippetProps, ChartSnippet>>;
226
227
  export type ChartAnnotations = Array<({
227
228
  /** Create AnnotationPoint */
228
229
  type: 'point';
@@ -24,9 +24,9 @@ export { default as BrushContext } from './BrushContext.svelte';
24
24
  export * from './BrushContext.svelte';
25
25
  export { default as Calendar } from './Calendar.svelte';
26
26
  export * from './Calendar.svelte';
27
- export { default as Canvas } from './layout/Canvas.svelte';
28
- export * from './layout/Canvas.svelte';
29
- export { default as Chart, getChartContext, getRenderContext } from './Chart.svelte';
27
+ export { default as Canvas } from './layers/Canvas.svelte';
28
+ export * from './layers/Canvas.svelte';
29
+ export { default as Chart } from './Chart.svelte';
30
30
  export * from './Chart.svelte';
31
31
  export { default as ChartClipPath } from './ChartClipPath.svelte';
32
32
  export * from './ChartClipPath.svelte';
@@ -50,7 +50,7 @@ export { default as ForceSimulation } from './ForceSimulation.svelte';
50
50
  export * from './ForceSimulation.svelte';
51
51
  export { default as GeoCircle } from './GeoCircle.svelte';
52
52
  export * from './GeoCircle.svelte';
53
- export { default as GeoContext, getGeoContext } from './GeoContext.svelte';
53
+ export { default as GeoContext } from './GeoContext.svelte';
54
54
  export * from './GeoContext.svelte';
55
55
  export { default as GeoEdgeFade } from './GeoEdgeFade.svelte';
56
56
  export * from './GeoEdgeFade.svelte';
@@ -72,14 +72,14 @@ export { default as Group } from './Group.svelte';
72
72
  export * from './Group.svelte';
73
73
  export { default as Highlight } from './Highlight.svelte';
74
74
  export * from './Highlight.svelte';
75
- export { default as Html } from './layout/Html.svelte';
76
- export * from './layout/Html.svelte';
75
+ export { default as Html } from './layers/Html.svelte';
76
+ export * from './layers/Html.svelte';
77
77
  export { default as Hull } from './Hull.svelte';
78
78
  export * from './Hull.svelte';
79
79
  export { default as Labels } from './Labels.svelte';
80
80
  export * from './Labels.svelte';
81
- export { default as Layer } from './layout/Layer.svelte';
82
- export * from './layout/Layer.svelte';
81
+ export { default as Layer } from './layers/Layer.svelte';
82
+ export * from './layers/Layer.svelte';
83
83
  export { default as Legend } from './Legend.svelte';
84
84
  export * from './Legend.svelte';
85
85
  export { default as Line } from './Line.svelte';
@@ -96,6 +96,8 @@ export { default as Pack } from './Pack.svelte';
96
96
  export * from './Pack.svelte';
97
97
  export { default as Partition } from './Partition.svelte';
98
98
  export * from './Partition.svelte';
99
+ export { default as Path } from './Path.svelte';
100
+ export * from './Path.svelte';
99
101
  export { default as Pattern } from './Pattern.svelte';
100
102
  export * from './Pattern.svelte';
101
103
  export { default as Pie } from './Pie.svelte';
@@ -116,8 +118,8 @@ export { default as Rule } from './Rule.svelte';
116
118
  export * from './Rule.svelte';
117
119
  export { default as Sankey } from './Sankey.svelte';
118
120
  export * from './Sankey.svelte';
119
- export { default as Svg } from './layout/Svg.svelte';
120
- export * from './layout/Svg.svelte';
121
+ export { default as Svg } from './layers/Svg.svelte';
122
+ export * from './layers/Svg.svelte';
121
123
  export { default as Text } from './Text.svelte';
122
124
  export * from './Text.svelte';
123
125
  export { default as Threshold } from './Threshold.svelte';
@@ -134,5 +136,5 @@ export { default as Treemap } from './Treemap.svelte';
134
136
  export * from './Treemap.svelte';
135
137
  export { default as Voronoi } from './Voronoi.svelte';
136
138
  export * from './Voronoi.svelte';
137
- export { default as WebGL } from './layout/WebGL.svelte';
138
- export * from './layout/WebGL.svelte';
139
+ export { default as WebGL } from './layers/WebGL.svelte';
140
+ export * from './layers/WebGL.svelte';
@@ -24,9 +24,9 @@ export { default as BrushContext } from './BrushContext.svelte';
24
24
  export * from './BrushContext.svelte';
25
25
  export { default as Calendar } from './Calendar.svelte';
26
26
  export * from './Calendar.svelte';
27
- export { default as Canvas } from './layout/Canvas.svelte';
28
- export * from './layout/Canvas.svelte';
29
- export { default as Chart, getChartContext, getRenderContext } from './Chart.svelte';
27
+ export { default as Canvas } from './layers/Canvas.svelte';
28
+ export * from './layers/Canvas.svelte';
29
+ export { default as Chart } from './Chart.svelte';
30
30
  export * from './Chart.svelte';
31
31
  export { default as ChartClipPath } from './ChartClipPath.svelte';
32
32
  export * from './ChartClipPath.svelte';
@@ -50,7 +50,7 @@ export { default as ForceSimulation } from './ForceSimulation.svelte';
50
50
  export * from './ForceSimulation.svelte';
51
51
  export { default as GeoCircle } from './GeoCircle.svelte';
52
52
  export * from './GeoCircle.svelte';
53
- export { default as GeoContext, getGeoContext } from './GeoContext.svelte';
53
+ export { default as GeoContext } from './GeoContext.svelte';
54
54
  export * from './GeoContext.svelte';
55
55
  export { default as GeoEdgeFade } from './GeoEdgeFade.svelte';
56
56
  export * from './GeoEdgeFade.svelte';
@@ -72,14 +72,14 @@ export { default as Group } from './Group.svelte';
72
72
  export * from './Group.svelte';
73
73
  export { default as Highlight } from './Highlight.svelte';
74
74
  export * from './Highlight.svelte';
75
- export { default as Html } from './layout/Html.svelte';
76
- export * from './layout/Html.svelte';
75
+ export { default as Html } from './layers/Html.svelte';
76
+ export * from './layers/Html.svelte';
77
77
  export { default as Hull } from './Hull.svelte';
78
78
  export * from './Hull.svelte';
79
79
  export { default as Labels } from './Labels.svelte';
80
80
  export * from './Labels.svelte';
81
- export { default as Layer } from './layout/Layer.svelte';
82
- export * from './layout/Layer.svelte';
81
+ export { default as Layer } from './layers/Layer.svelte';
82
+ export * from './layers/Layer.svelte';
83
83
  export { default as Legend } from './Legend.svelte';
84
84
  export * from './Legend.svelte';
85
85
  export { default as Line } from './Line.svelte';
@@ -96,6 +96,8 @@ export { default as Pack } from './Pack.svelte';
96
96
  export * from './Pack.svelte';
97
97
  export { default as Partition } from './Partition.svelte';
98
98
  export * from './Partition.svelte';
99
+ export { default as Path } from './Path.svelte';
100
+ export * from './Path.svelte';
99
101
  export { default as Pattern } from './Pattern.svelte';
100
102
  export * from './Pattern.svelte';
101
103
  export { default as Pie } from './Pie.svelte';
@@ -116,8 +118,8 @@ export { default as Rule } from './Rule.svelte';
116
118
  export * from './Rule.svelte';
117
119
  export { default as Sankey } from './Sankey.svelte';
118
120
  export * from './Sankey.svelte';
119
- export { default as Svg } from './layout/Svg.svelte';
120
- export * from './layout/Svg.svelte';
121
+ export { default as Svg } from './layers/Svg.svelte';
122
+ export * from './layers/Svg.svelte';
121
123
  export { default as Text } from './Text.svelte';
122
124
  export * from './Text.svelte';
123
125
  export { default as Threshold } from './Threshold.svelte';
@@ -135,5 +137,5 @@ export { default as Treemap } from './Treemap.svelte';
135
137
  export * from './Treemap.svelte';
136
138
  export { default as Voronoi } from './Voronoi.svelte';
137
139
  export * from './Voronoi.svelte';
138
- export { default as WebGL } from './layout/WebGL.svelte';
139
- export * from './layout/WebGL.svelte';
140
+ export { default as WebGL } from './layers/WebGL.svelte';
141
+ export * from './layers/WebGL.svelte';
@@ -86,54 +86,6 @@
86
86
  export type CanvasProps = CanvasPropsWithoutHTML &
87
87
  Without<HTMLCanvasAttributes, CanvasPropsWithoutHTML>;
88
88
 
89
- type ComponentRender<T extends Element = Element> = {
90
- name: string;
91
- render: (ctx: CanvasRenderingContext2D, styleOverrides?: ComputedStylesOptions) => any;
92
- retainState?: boolean;
93
- events?: {
94
- click?: MouseEventHandler<T> | null;
95
- dblclick?: MouseEventHandler<T> | null;
96
- pointerenter?: PointerEventHandler<T> | null;
97
- pointerover?: PointerEventHandler<T> | null;
98
- pointermove?: PointerEventHandler<T> | null;
99
- pointerleave?: PointerEventHandler<T> | null;
100
- pointerout?: PointerEventHandler<T> | null;
101
- pointerdown?: PointerEventHandler<T> | null;
102
- touchmove?: TouchEventHandler<T> | null;
103
- };
104
- /**
105
- * Optional dependencies to track and invalidate the canvas context when they change.
106
- */
107
- deps?: () => any[];
108
- };
109
-
110
- export type CanvasContextValue = {
111
- /**
112
- * Register component to render.
113
- *
114
- * Returns method to unregister on component destroy
115
- */
116
- register<T extends Element>(component: ComponentRender<T>): () => void;
117
- invalidate(): void;
118
- };
119
-
120
- const CanvasContext = new Context<CanvasContextValue>('CanvasContext');
121
-
122
- const defaultCanvasContext: CanvasContextValue = {
123
- register: <T extends Element>(_: ComponentRender<T>) => {
124
- return () => {};
125
- },
126
- invalidate: () => {},
127
- };
128
-
129
- export function getCanvasContext() {
130
- return CanvasContext.getOr(defaultCanvasContext);
131
- }
132
-
133
- function setCanvasContext(context: CanvasContextValue) {
134
- return CanvasContext.set(context);
135
- }
136
-
137
89
  /**
138
90
  * Handles the automatic registration of the component to the canvas context,
139
91
  * with dependency tracking and cleanup on destroy.
@@ -152,19 +104,20 @@
152
104
  import { Logger, localPoint } from '@layerstack/utils';
153
105
  import { MediaQueryPresets } from '@layerstack/svelte-state';
154
106
 
155
- import { setRenderContext } from '../Chart.svelte';
156
- import { getTransformContext } from '../TransformContext.svelte';
157
- import { getPixelColor, scaleCanvas, type ComputedStylesOptions } from '../../utils/canvas.js';
107
+ import { setLayerContext } from '../../contexts/layer.js';
108
+ import { getTransformContext } from '../../contexts/transform.js';
109
+ import { getPixelColor, scaleCanvas } from '../../utils/canvas.js';
158
110
  import { getColorStr, rgbColorGenerator } from '../../utils/color.js';
159
- import { Context, useMutationObserver, watch } from 'runed';
160
- import type {
161
- HTMLCanvasAttributes,
162
- MouseEventHandler,
163
- PointerEventHandler,
164
- TouchEventHandler,
165
- } from 'svelte/elements';
111
+ import { useMutationObserver, watch } from 'runed';
112
+ import type { HTMLCanvasAttributes, PointerEventHandler } from 'svelte/elements';
166
113
  import type { Without } from '../../utils/types.js';
167
- import { getChartContext } from '../Chart.svelte';
114
+ import { getChartContext } from '../../contexts/chart.js';
115
+ import {
116
+ getCanvasContext,
117
+ setCanvasContext,
118
+ type CanvasContextValue,
119
+ type ComponentRender,
120
+ } from '../../contexts/canvas.js';
168
121
 
169
122
  let {
170
123
  ref: refProp = $bindable(),
@@ -445,7 +398,7 @@
445
398
  });
446
399
 
447
400
  setCanvasContext(canvasContext);
448
- setRenderContext('canvas');
401
+ setLayerContext('canvas');
449
402
  </script>
450
403
 
451
404
  <canvas
@@ -75,45 +75,15 @@ export type CanvasPropsWithoutHTML = {
75
75
  ]>;
76
76
  };
77
77
  export type CanvasProps = CanvasPropsWithoutHTML & Without<HTMLCanvasAttributes, CanvasPropsWithoutHTML>;
78
- type ComponentRender<T extends Element = Element> = {
79
- name: string;
80
- render: (ctx: CanvasRenderingContext2D, styleOverrides?: ComputedStylesOptions) => any;
81
- retainState?: boolean;
82
- events?: {
83
- click?: MouseEventHandler<T> | null;
84
- dblclick?: MouseEventHandler<T> | null;
85
- pointerenter?: PointerEventHandler<T> | null;
86
- pointerover?: PointerEventHandler<T> | null;
87
- pointermove?: PointerEventHandler<T> | null;
88
- pointerleave?: PointerEventHandler<T> | null;
89
- pointerout?: PointerEventHandler<T> | null;
90
- pointerdown?: PointerEventHandler<T> | null;
91
- touchmove?: TouchEventHandler<T> | null;
92
- };
93
- /**
94
- * Optional dependencies to track and invalidate the canvas context when they change.
95
- */
96
- deps?: () => any[];
97
- };
98
- export type CanvasContextValue = {
99
- /**
100
- * Register component to render.
101
- *
102
- * Returns method to unregister on component destroy
103
- */
104
- register<T extends Element>(component: ComponentRender<T>): () => void;
105
- invalidate(): void;
106
- };
107
- export declare function getCanvasContext(): CanvasContextValue;
108
78
  /**
109
79
  * Handles the automatic registration of the component to the canvas context,
110
80
  * with dependency tracking and cleanup on destroy.
111
81
  */
112
82
  export declare function registerCanvasComponent<T extends Element>(component: ComponentRender<T>): void;
113
83
  import { type Snippet } from 'svelte';
114
- import { type ComputedStylesOptions } from '../../utils/canvas.js';
115
- import type { HTMLCanvasAttributes, MouseEventHandler, PointerEventHandler, TouchEventHandler } from 'svelte/elements';
84
+ import type { HTMLCanvasAttributes } from 'svelte/elements';
116
85
  import type { Without } from '../../utils/types.js';
86
+ import { type ComponentRender } from '../../contexts/canvas.js';
117
87
  declare const Canvas: import("svelte").Component<CanvasProps, {}, "ref" | "canvasContext">;
118
88
  type Canvas = ReturnType<typeof Canvas>;
119
89
  export default Canvas;
@@ -38,6 +38,14 @@
38
38
  */
39
39
  ignoreTransform?: boolean;
40
40
 
41
+ /**
42
+ * Whether to clip overflow content.
43
+ * When true, sets `overflow: hidden` on the layer.
44
+ *
45
+ * @default false
46
+ */
47
+ clip?: boolean;
48
+
41
49
  children?: Snippet<[{ ref: HTMLElement }]>;
42
50
  };
43
51
 
@@ -46,9 +54,10 @@
46
54
  </script>
47
55
 
48
56
  <script lang="ts">
49
- import { getTransformContext } from '../TransformContext.svelte';
57
+ import { getTransformContext } from '../../contexts/transform.js';
50
58
 
51
- import { getChartContext, setRenderContext } from '../Chart.svelte';
59
+ import { setLayerContext } from '../../contexts/layer.js';
60
+ import { getChartContext } from '../../contexts/chart.js';
52
61
 
53
62
  let {
54
63
  ref: refProp = $bindable(),
@@ -60,6 +69,7 @@
60
69
  'aria-describedby': describedBy,
61
70
  center = false,
62
71
  ignoreTransform = false,
72
+ clip = false,
63
73
  class: className,
64
74
  children,
65
75
  ...restProps
@@ -83,13 +93,14 @@
83
93
  }
84
94
  });
85
95
 
86
- setRenderContext('html');
96
+ setLayerContext('html');
87
97
  </script>
88
98
 
89
99
  <div
90
100
  bind:this={ref}
91
101
  class={['lc-layout-html', className]}
92
102
  class:disablePointerEvents={pointerEvents === false}
103
+ class:clip
93
104
  style:transform
94
105
  style:transform-origin="top left"
95
106
  style:z-index={zIndex}
@@ -115,6 +126,10 @@
115
126
  &.disablePointerEvents {
116
127
  pointer-events: none;
117
128
  }
129
+
130
+ &.clip {
131
+ overflow: hidden;
132
+ }
118
133
  }
119
134
  }
120
135
  </style>
@@ -30,6 +30,13 @@ type HTMLPropsWithoutHTML = {
30
30
  * Ignore TransformContext. Useful to add static elements such as legends.
31
31
  */
32
32
  ignoreTransform?: boolean;
33
+ /**
34
+ * Whether to clip overflow content.
35
+ * When true, sets `overflow: hidden` on the layer.
36
+ *
37
+ * @default false
38
+ */
39
+ clip?: boolean;
33
40
  children?: Snippet<[{
34
41
  ref: HTMLElement;
35
42
  }]>;
@@ -0,0 +1,85 @@
1
+ <script lang="ts" module>
2
+ import type { ComponentProps, Snippet } from 'svelte';
3
+
4
+ export type CanvasLayerProps = {
5
+ type: 'canvas';
6
+ } & Omit<ComponentProps<typeof Canvas>, 'type' | 'onpointermove'>;
7
+
8
+ export type HtmlLayerProps = {
9
+ type: 'html';
10
+ } & Omit<ComponentProps<typeof Html>, 'type' | 'onpointermove'>;
11
+
12
+ export type SvgLayerProps = {
13
+ type: 'svg';
14
+ } & Omit<ComponentProps<typeof Svg>, 'type' | 'onpointermove'>;
15
+
16
+ export type DefaultLayerProps = {
17
+ type?: undefined;
18
+ children: Snippet;
19
+ };
20
+
21
+ export type LayerProps = (
22
+ | CanvasLayerProps
23
+ | HtmlLayerProps
24
+ | SvgLayerProps
25
+ | DefaultLayerProps
26
+ ) & {
27
+ onpointermove?: (e: PointerEvent) => void;
28
+ };
29
+ </script>
30
+
31
+ <script lang="ts">
32
+ import Canvas, { type CanvasProps } from './Canvas.svelte';
33
+ import Svg, { type SVGProps } from './Svg.svelte';
34
+ import Html, { type HTMLProps } from './Html.svelte';
35
+ import Frame from '../Frame.svelte';
36
+ import { getSettings } from '../../contexts/settings.js';
37
+
38
+ let { type, children, ...restProps }: LayerProps = $props();
39
+
40
+ let settings = getSettings();
41
+ let layer = $derived(type ?? settings.layer);
42
+ </script>
43
+
44
+ {#if layer === 'canvas'}
45
+ <Canvas {...restProps as CanvasProps}>
46
+ {#snippet children(props)}
47
+ {#if settings.debug}
48
+ <Frame class="lc-debug-frame" />
49
+ <Frame class="lc-debug-frame" full />
50
+ {/if}
51
+
52
+ {@render children?.(props)}
53
+ {/snippet}
54
+ </Canvas>
55
+ {:else if layer === 'svg'}
56
+ <Svg {...restProps as SVGProps}>
57
+ {#snippet children(props)}
58
+ {#if settings.debug}
59
+ <Frame class="lc-debug-frame" />
60
+ <Frame class="lc-debug-frame" full />
61
+ {/if}
62
+
63
+ {@render children?.(props)}
64
+ {/snippet}
65
+ </Svg>
66
+ {:else if layer === 'html'}
67
+ <Html {...restProps as HTMLProps}>
68
+ {#snippet children(props)}
69
+ {#if settings.debug}
70
+ <Frame class="lc-debug-frame" />
71
+ <Frame class="lc-debug-frame" full />
72
+ {/if}
73
+
74
+ {@render children?.(props)}
75
+ {/snippet}
76
+ </Html>
77
+ {/if}
78
+
79
+ <style>
80
+ @layer component {
81
+ :global(:where(.lc-debug-frame)) {
82
+ --fill-color: color-mix(in oklab, var(--color-danger) 10%, transparent);
83
+ }
84
+ }
85
+ </style>
@@ -1,4 +1,4 @@
1
- import type { ComponentProps } from 'svelte';
1
+ import type { ComponentProps, Snippet } from 'svelte';
2
2
  export type CanvasLayerProps = {
3
3
  type: 'canvas';
4
4
  } & Omit<ComponentProps<typeof Canvas>, 'type' | 'onpointermove'>;
@@ -8,12 +8,16 @@ export type HtmlLayerProps = {
8
8
  export type SvgLayerProps = {
9
9
  type: 'svg';
10
10
  } & Omit<ComponentProps<typeof Svg>, 'type' | 'onpointermove'>;
11
- export type LayerProps = (CanvasLayerProps | HtmlLayerProps | SvgLayerProps) & {
11
+ export type DefaultLayerProps = {
12
+ type?: undefined;
13
+ children: Snippet;
14
+ };
15
+ export type LayerProps = (CanvasLayerProps | HtmlLayerProps | SvgLayerProps | DefaultLayerProps) & {
12
16
  onpointermove?: (e: PointerEvent) => void;
13
17
  };
14
18
  import Canvas from './Canvas.svelte';
15
- import Html from './Html.svelte';
16
19
  import Svg from './Svg.svelte';
20
+ import Html from './Html.svelte';
17
21
  declare const Layer: import("svelte").Component<LayerProps, {}, "">;
18
22
  type Layer = ReturnType<typeof Layer>;
19
23
  export default Layer;