layerchart 2.0.0-next.4 → 2.0.0-next.40

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/dist/components/AnnotationLine.svelte +15 -2
  2. package/dist/components/AnnotationPoint.svelte +29 -11
  3. package/dist/components/AnnotationRange.svelte +18 -4
  4. package/dist/components/Arc.svelte +5 -5
  5. package/dist/components/Area.svelte +10 -2
  6. package/dist/components/Axis.svelte +175 -58
  7. package/dist/components/Axis.svelte.d.ts +23 -6
  8. package/dist/components/Bar.svelte +20 -15
  9. package/dist/components/Bar.svelte.d.ts +2 -2
  10. package/dist/components/Bars.svelte +4 -4
  11. package/dist/components/Blur.svelte +7 -6
  12. package/dist/components/Blur.svelte.d.ts +2 -5
  13. package/dist/components/BrushContext.svelte +45 -45
  14. package/dist/components/Calendar.svelte +31 -10
  15. package/dist/components/Calendar.svelte.d.ts +2 -1
  16. package/dist/components/Chart.svelte +76 -27
  17. package/dist/components/Chart.svelte.d.ts +26 -8
  18. package/dist/components/ChartClipPath.svelte +1 -1
  19. package/dist/components/Circle.svelte +44 -3
  20. package/dist/components/CircleClipPath.svelte +8 -1
  21. package/dist/components/ClipPath.svelte +1 -2
  22. package/dist/components/ColorRamp.svelte +1 -1
  23. package/dist/components/ComputedStyles.svelte +9 -2
  24. package/dist/components/Connector.svelte +3 -3
  25. package/dist/components/Connector.svelte.d.ts +1 -1
  26. package/dist/components/Ellipse.svelte +228 -0
  27. package/dist/components/Ellipse.svelte.d.ts +64 -0
  28. package/dist/components/ForceSimulation.svelte +184 -50
  29. package/dist/components/ForceSimulation.svelte.d.ts +95 -21
  30. package/dist/components/Frame.svelte +1 -1
  31. package/dist/components/GeoCircle.svelte +1 -1
  32. package/dist/components/GeoEdgeFade.svelte +1 -1
  33. package/dist/components/GeoPath.svelte +30 -8
  34. package/dist/components/GeoPoint.svelte +4 -5
  35. package/dist/components/GeoSpline.svelte +5 -5
  36. package/dist/components/GeoSpline.svelte.d.ts +1 -1
  37. package/dist/components/GeoTile.svelte +1 -1
  38. package/dist/components/Graticule.svelte +5 -5
  39. package/dist/components/Grid.svelte +60 -63
  40. package/dist/components/Group.svelte +13 -8
  41. package/dist/components/Group.svelte.d.ts +10 -3
  42. package/dist/components/Highlight.svelte +55 -28
  43. package/dist/components/Highlight.svelte.d.ts +4 -0
  44. package/dist/components/Hull.svelte +12 -5
  45. package/dist/components/Labels.svelte +24 -13
  46. package/dist/components/Labels.svelte.d.ts +12 -5
  47. package/dist/components/Legend.svelte +143 -70
  48. package/dist/components/Legend.svelte.d.ts +12 -8
  49. package/dist/components/Line.svelte +40 -3
  50. package/dist/components/LinearGradient.svelte +35 -4
  51. package/dist/components/Link.svelte +1 -1
  52. package/dist/components/Marker.svelte +37 -26
  53. package/dist/components/MonthPath.svelte +26 -12
  54. package/dist/components/MonthPath.svelte.d.ts +4 -3
  55. package/dist/components/MotionPath.svelte +1 -1
  56. package/dist/components/Pack.svelte.d.ts +10 -3
  57. package/dist/components/Partition.svelte.d.ts +10 -3
  58. package/dist/components/Pattern.svelte +5 -5
  59. package/dist/components/Pie.svelte +1 -2
  60. package/dist/components/Points.svelte +11 -72
  61. package/dist/components/Points.svelte.d.ts +1 -8
  62. package/dist/components/Polygon.svelte +309 -0
  63. package/dist/components/Polygon.svelte.d.ts +115 -0
  64. package/dist/components/RadialGradient.svelte +4 -6
  65. package/dist/components/Rect.svelte +55 -5
  66. package/dist/components/Rect.svelte.d.ts +2 -2
  67. package/dist/components/RectClipPath.svelte +4 -3
  68. package/dist/components/RectClipPath.svelte.d.ts +2 -2
  69. package/dist/components/Rule.svelte +167 -77
  70. package/dist/components/Rule.svelte.d.ts +7 -2
  71. package/dist/components/Spline.svelte +59 -28
  72. package/dist/components/Spline.svelte.d.ts +12 -4
  73. package/dist/components/Text.svelte +121 -73
  74. package/dist/components/Text.svelte.d.ts +6 -0
  75. package/dist/components/TileImage.svelte +19 -4
  76. package/dist/components/TransformContext.svelte +9 -3
  77. package/dist/components/TransformControls.svelte +89 -38
  78. package/dist/components/Tree.svelte.d.ts +10 -3
  79. package/dist/components/Treemap.svelte +63 -26
  80. package/dist/components/Treemap.svelte.d.ts +21 -14
  81. package/dist/components/Voronoi.svelte +12 -13
  82. package/dist/components/charts/ArcChart.svelte +43 -71
  83. package/dist/components/charts/ArcChart.svelte.d.ts +10 -3
  84. package/dist/components/charts/AreaChart.svelte +29 -59
  85. package/dist/components/charts/AreaChart.svelte.d.ts +10 -3
  86. package/dist/components/charts/BarChart.svelte +79 -71
  87. package/dist/components/charts/BarChart.svelte.d.ts +10 -3
  88. package/dist/components/charts/DefaultTooltip.svelte +3 -3
  89. package/dist/components/charts/DefaultTooltip.svelte.d.ts +1 -1
  90. package/dist/components/charts/LineChart.svelte +69 -75
  91. package/dist/components/charts/LineChart.svelte.d.ts +21 -8
  92. package/dist/components/charts/PieChart.svelte +44 -71
  93. package/dist/components/charts/PieChart.svelte.d.ts +10 -3
  94. package/dist/components/charts/ScatterChart.svelte +10 -39
  95. package/dist/components/charts/ScatterChart.svelte.d.ts +10 -3
  96. package/dist/components/charts/utils.svelte.d.ts +1 -19
  97. package/dist/components/charts/utils.svelte.js +7 -35
  98. package/dist/components/index.d.ts +4 -0
  99. package/dist/components/index.js +5 -1
  100. package/dist/components/layout/Canvas.svelte +96 -69
  101. package/dist/components/layout/Canvas.svelte.d.ts +6 -0
  102. package/dist/components/layout/Html.svelte +15 -9
  103. package/dist/components/layout/Layer.svelte +6 -4
  104. package/dist/components/layout/Layer.svelte.d.ts +6 -4
  105. package/dist/components/layout/Svg.svelte +19 -11
  106. package/dist/components/layout/WebGL.svelte +26 -6
  107. package/dist/components/layout/WebGL.svelte.d.ts +5 -2
  108. package/dist/components/tooltip/Tooltip.svelte +65 -27
  109. package/dist/components/tooltip/Tooltip.svelte.d.ts +10 -3
  110. package/dist/components/tooltip/TooltipContext.svelte +167 -54
  111. package/dist/components/tooltip/TooltipContext.svelte.d.ts +19 -5
  112. package/dist/components/tooltip/TooltipHeader.svelte +32 -18
  113. package/dist/components/tooltip/TooltipHeader.svelte.d.ts +3 -3
  114. package/dist/components/tooltip/TooltipItem.svelte +46 -37
  115. package/dist/components/tooltip/TooltipItem.svelte.d.ts +3 -3
  116. package/dist/components/tooltip/TooltipList.svelte +12 -10
  117. package/dist/components/tooltip/TooltipSeparator.svelte +18 -10
  118. package/dist/components/tooltip/tooltipMetaContext.d.ts +2 -2
  119. package/dist/docs/Blockquote.svelte +6 -4
  120. package/dist/docs/Blockquote.svelte.d.ts +4 -19
  121. package/dist/docs/Code.svelte +70 -28
  122. package/dist/docs/Code.svelte.d.ts +9 -24
  123. package/dist/docs/Header1.svelte +4 -2
  124. package/dist/docs/Header1.svelte.d.ts +4 -28
  125. package/dist/docs/Json.svelte +11 -3
  126. package/dist/docs/Json.svelte.d.ts +9 -21
  127. package/dist/docs/Layout.svelte +10 -7
  128. package/dist/docs/Layout.svelte.d.ts +4 -19
  129. package/dist/docs/Link.svelte +7 -3
  130. package/dist/docs/Link.svelte.d.ts +4 -38
  131. package/dist/docs/Preview.svelte +22 -23
  132. package/dist/docs/Preview.svelte.d.ts +5 -6
  133. package/dist/docs/TilesetField.svelte +20 -19
  134. package/dist/docs/TilesetField.svelte.d.ts +5 -22
  135. package/dist/docs/ViewSourceButton.svelte +10 -7
  136. package/dist/docs/ViewSourceButton.svelte.d.ts +7 -21
  137. package/dist/states/series.svelte.d.ts +30 -0
  138. package/dist/states/series.svelte.js +54 -0
  139. package/dist/styles/daisyui-5.css +6 -0
  140. package/dist/styles/shadcn-svelte.css +11 -0
  141. package/dist/styles/skeleton-3.css +15 -0
  142. package/dist/utils/arcText.svelte.js +4 -4
  143. package/dist/utils/array.d.ts +11 -0
  144. package/dist/utils/array.js +23 -0
  145. package/dist/utils/array.test.d.ts +1 -0
  146. package/dist/utils/array.test.js +200 -0
  147. package/dist/utils/attributes.d.ts +3 -13
  148. package/dist/utils/attributes.js +4 -18
  149. package/dist/utils/canvas.d.ts +77 -0
  150. package/dist/utils/canvas.js +105 -41
  151. package/dist/utils/common.d.ts +9 -0
  152. package/dist/utils/common.js +18 -1
  153. package/dist/utils/common.test.js +26 -1
  154. package/dist/utils/genData.d.ts +22 -8
  155. package/dist/utils/genData.js +34 -14
  156. package/dist/utils/graph/dagre.d.ts +4 -4
  157. package/dist/utils/graph/dagre.js +5 -7
  158. package/dist/utils/index.d.ts +1 -0
  159. package/dist/utils/index.js +1 -0
  160. package/dist/utils/math.d.ts +17 -0
  161. package/dist/utils/math.js +17 -0
  162. package/dist/utils/path.d.ts +10 -0
  163. package/dist/utils/path.js +30 -0
  164. package/dist/utils/rect.svelte.d.ts +2 -2
  165. package/dist/utils/rect.svelte.js +73 -1
  166. package/dist/utils/scales.svelte.d.ts +9 -3
  167. package/dist/utils/scales.svelte.js +47 -4
  168. package/dist/utils/shape.d.ts +43 -0
  169. package/dist/utils/shape.js +59 -0
  170. package/dist/utils/stack.js +1 -1
  171. package/dist/utils/string.d.ts +49 -0
  172. package/dist/utils/string.js +4 -2
  173. package/dist/utils/ticks.d.ts +15 -4
  174. package/dist/utils/ticks.js +140 -159
  175. package/dist/utils/ticks.test.js +16 -26
  176. package/dist/utils/treemap.d.ts +1 -1
  177. package/dist/utils/types.d.ts +15 -2
  178. package/package.json +35 -35
  179. package/dist/utils/object.js +0 -2
@@ -172,11 +172,11 @@
172
172
  </script>
173
173
 
174
174
  <script lang="ts" generics="TData">
175
- import { onMount, type ComponentProps, type Snippet } from 'svelte';
175
+ import { onMount, type ComponentProps } from 'svelte';
176
176
  import { format } from '@layerstack/utils';
177
- import { cls } from '@layerstack/tailwind';
178
- import { SelectionState } from '@layerstack/svelte-state';
179
177
  import type { PieArcDatum } from 'd3-shape';
178
+ import { schemeObservable10 } from 'd3-scale-chromatic';
179
+ import { getObjectOrNull } from '../../utils/common.js';
180
180
 
181
181
  import Arc from '../Arc.svelte';
182
182
  import Chart from '../Chart.svelte';
@@ -194,7 +194,8 @@
194
194
  SimplifiedChartPropsObject,
195
195
  SimplifiedChartSnippet,
196
196
  } from './types.js';
197
- import { HighlightKey } from './utils.svelte.js';
197
+ import { SeriesState } from '../../states/series.svelte.js';
198
+ import { createLegendProps } from './utils.svelte.js';
198
199
  import { setTooltipMetaContext } from '../tooltip/tooltipMetaContext.js';
199
200
 
200
201
  let {
@@ -237,67 +238,37 @@
237
238
  const series = $derived(
238
239
  seriesProp === undefined ? [{ key: 'default', value: value }] : seriesProp
239
240
  );
241
+ const seriesState = new SeriesState(() => series);
240
242
 
241
243
  const keyAccessor = $derived(accessor(key));
242
244
  const labelAccessor = $derived(accessor(label));
243
245
  const valueAccessor = $derived(accessor(value));
244
246
  const cAccessor = $derived(accessor(c));
245
247
 
246
- const allSeriesData = $derived(
247
- series
248
- .flatMap((s) => s.data?.map((d) => ({ seriesKey: s.key, ...d })))
249
- .filter((d) => d) as Array<TData>
250
- );
251
-
252
248
  const chartData = $derived(
253
- allSeriesData.length ? allSeriesData : chartDataArray(data)
249
+ seriesState.allSeriesData.length ? seriesState.allSeriesData : chartDataArray(data)
254
250
  ) as Array<TData>;
255
251
 
256
- const seriesColors = $derived(series.map((s) => s.color).filter((d) => d != null));
257
-
258
- const highlightKey = new HighlightKey<TData, typeof Arc>();
259
- const selectedKeys = new SelectionState();
260
- const selectedSeries = new SelectionState();
261
-
262
252
  const visibleData = $derived(
263
253
  chartData.filter((d) => {
264
254
  const dataKey = keyAccessor(d);
265
- return selectedKeys.isEmpty() || selectedKeys.isSelected(dataKey);
255
+ return seriesState.selectedKeys.isEmpty() || seriesState.selectedKeys.isSelected(dataKey);
266
256
  })
267
257
  );
268
258
 
269
- // TODO: note, I added this because it wasn't consistent with all the other charts
270
- // unsure if it is correct but will validate with Sean
271
- const visibleSeries = $derived(
272
- series.filter((s) => selectedSeries.isEmpty() || selectedSeries.isSelected(s.key))
273
- );
274
-
275
259
  function getLegendProps(): ComponentProps<typeof Legend> {
276
- return {
277
- tickFormat: (tick) => {
278
- const item = chartData.find((d) => keyAccessor(d) === tick);
279
- return item ? (labelAccessor(item) ?? tick) : tick;
280
- },
281
- placement: 'bottom',
282
- variant: 'swatches',
283
- onclick: (e, item) => {
284
- selectedKeys.toggleSelected(item.value);
285
- // TODO: investigate
286
- // selectedSeries.toggleSelected(item.value);
287
- },
288
- onpointerenter: (e, item) => (highlightKey.current = item.value),
289
- onpointerleave: (e) => (highlightKey.current = null),
290
- ...props.legend,
291
- ...(typeof legend === 'object' ? legend : null),
292
- classes: {
293
- item: (item) =>
294
- visibleData.length && !visibleData.some((d) => keyAccessor(d) === item.value)
295
- ? 'opacity-50'
296
- : '',
297
- ...props.legend?.classes,
298
- ...(typeof legend === 'object' ? legend.classes : null),
260
+ return createLegendProps({
261
+ seriesState,
262
+ props: {
263
+ tickFormat: (tick) => {
264
+ // Use data label instead of series label
265
+ const item = chartData.find((d) => keyAccessor(d) === tick);
266
+ return item ? (labelAccessor(item) ?? tick) : tick;
267
+ },
268
+ ...props.legend,
269
+ ...getObjectOrNull(legend),
299
270
  },
300
- };
271
+ });
301
272
  }
302
273
 
303
274
  function getGroupProps(): ComponentProps<typeof Group> {
@@ -338,7 +309,8 @@
338
309
  return {
339
310
  startAngle: arc.startAngle,
340
311
  endAngle: arc.endAngle,
341
- outerRadius: visibleSeries.length > 1 ? seriesIndex * (outerRadius ?? 0) : outerRadius,
312
+ outerRadius:
313
+ seriesState.visibleSeries.length > 1 ? seriesIndex * (outerRadius ?? 0) : outerRadius,
342
314
  innerRadius,
343
315
  cornerRadius,
344
316
  padAngle,
@@ -350,10 +322,7 @@
350
322
  // Workaround for `tooltip={{ mode: 'manual' }}
351
323
  onTooltipClick(e, { data: arc.data });
352
324
  },
353
- class: cls(
354
- 'transition-opacity',
355
- highlightKey.current && highlightKey.current !== keyAccessor(arc.data) && 'opacity-50'
356
- ),
325
+ opacity: seriesState.isHighlighted(keyAccessor(arc.data), true) ? 1 : 0.5,
357
326
  ...props.arc,
358
327
  ...s.props,
359
328
  ...arcDataProps,
@@ -382,7 +351,7 @@
382
351
  return key;
383
352
  },
384
353
  get visibleSeries() {
385
- return visibleSeries;
354
+ return seriesState.visibleSeries;
386
355
  },
387
356
  });
388
357
  </script>
@@ -392,24 +361,27 @@
392
361
  bind:context
393
362
  data={visibleData}
394
363
  x={value}
395
- y={key}
396
364
  c={key}
397
365
  cDomain={chartData.map(keyAccessor)}
398
- cRange={seriesColors.length
399
- ? seriesColors
366
+ cRange={seriesState.allSeriesColors.length
367
+ ? seriesState.allSeriesColors
400
368
  : c !== key
401
369
  ? chartData.map((d) => cAccessor(d))
402
370
  : [
403
- 'var(--color-primary)',
404
- 'var(--color-secondary)',
405
- 'var(--color-info)',
406
- 'var(--color-success)',
407
- 'var(--color-warning)',
408
- 'var(--color-danger)',
371
+ `var(--color-primary, ${schemeObservable10[0]})`,
372
+ `var(--color-secondary, ${schemeObservable10[1]})`,
373
+ `var(--color-info, ${schemeObservable10[2]})`,
374
+ `var(--color-success, ${schemeObservable10[3]})`,
375
+ `var(--color-warning, ${schemeObservable10[4]})`,
376
+ `var(--color-danger, ${schemeObservable10[5]})`,
409
377
  ]}
410
- padding={{ bottom: legend === true ? 32 : 0 }}
378
+ padding={{
379
+ bottom: legend === true || getObjectOrNull(legend)?.placement?.includes('bottom') ? 32 : 0,
380
+ }}
411
381
  {...restProps}
412
- tooltip={tooltip === false ? false : props.tooltip?.context}
382
+ tooltip={tooltip === false
383
+ ? false
384
+ : { ...props.tooltip?.context, ...(typeof tooltip === 'object' ? tooltip : null) }}
413
385
  >
414
386
  {#snippet children({ context })}
415
387
  {@const snippetProps = {
@@ -419,10 +391,10 @@
419
391
  color: cAccessor,
420
392
  context,
421
393
  series,
422
- visibleSeries,
394
+ visibleSeries: seriesState.visibleSeries,
423
395
  visibleData,
424
- highlightKey: highlightKey.current,
425
- setHighlightKey: highlightKey.set,
396
+ highlightKey: seriesState.highlightKey.current,
397
+ setHighlightKey: seriesState.highlightKey.set,
426
398
  getLegendProps,
427
399
  getGroupProps,
428
400
  }}
@@ -443,7 +415,8 @@
443
415
  {@render marks(snippetProps)}
444
416
  {:else}
445
417
  <Group {...getGroupProps()}>
446
- {#each visibleSeries as s, seriesIdx (s.key)}
418
+ <!-- Use `series` instead of `visibleSeries` since data is filtered (legend) instead of series -->
419
+ {#each series as s, seriesIdx (s.key)}
447
420
  {#if typeof pie === 'function'}
448
421
  {@render pie({
449
422
  ...snippetProps,
@@ -495,8 +468,8 @@
495
468
  value={valueAccessor(data)}
496
469
  color={context.cScale?.(context.c(data))}
497
470
  {format}
498
- onpointerenter={() => (highlightKey.current = keyAccessor(data))}
499
- onpointerleave={() => (highlightKey.current = null)}
471
+ onpointerenter={() => (seriesState.highlightKey.current = keyAccessor(data))}
472
+ onpointerleave={() => (seriesState.highlightKey.current = null)}
500
473
  {...props.tooltip?.item}
501
474
  />
502
475
  </Tooltip.List>
@@ -126,10 +126,17 @@ import Group from '../Group.svelte';
126
126
  import Pie from '../Pie.svelte';
127
127
  import { type Accessor } from '../../utils/common.js';
128
128
  import type { SeriesData, SimplifiedChartProps, SimplifiedChartPropsObject, SimplifiedChartSnippet } from './types.js';
129
+ declare function $$render<TData>(): {
130
+ props: PieChartProps<TData>;
131
+ exports: {};
132
+ bindings: "context";
133
+ slots: {};
134
+ events: {};
135
+ };
129
136
  declare class __sveltets_Render<TData> {
130
- props(): PieChartProps<TData>;
131
- events(): {};
132
- slots(): {};
137
+ props(): ReturnType<typeof $$render<TData>>['props'];
138
+ events(): ReturnType<typeof $$render<TData>>['events'];
139
+ slots(): ReturnType<typeof $$render<TData>>['slots'];
133
140
  bindings(): "context";
134
141
  exports(): {};
135
142
  }
@@ -44,7 +44,6 @@
44
44
  </script>
45
45
 
46
46
  <script lang="ts" generics="TData">
47
- import { scaleLinear, scaleTime } from 'd3-scale';
48
47
  import { format } from '@layerstack/utils';
49
48
  import { cls } from '@layerstack/tailwind';
50
49
 
@@ -62,9 +61,10 @@
62
61
  import Rule from '../Rule.svelte';
63
62
  import * as Tooltip from '../tooltip/index.js';
64
63
 
65
- import { accessor, chartDataArray, defaultChartPadding } from '../../utils/common.js';
64
+ import { chartDataArray, defaultChartPadding } from '../../utils/common.js';
66
65
  import { asAny } from '../../utils/types.js';
67
- import { createLegendProps, SeriesState } from './utils.svelte.js';
66
+ import { SeriesState } from '../../states/series.svelte.js';
67
+ import { createLegendProps } from './utils.svelte.js';
68
68
 
69
69
  let {
70
70
  data = [],
@@ -88,8 +88,6 @@
88
88
  renderContext = 'svg',
89
89
  profile = false,
90
90
  debug = false,
91
- xScale: xScaleProp,
92
- yScale: yScaleProp,
93
91
  children: childrenProp,
94
92
  aboveContext,
95
93
  belowContext,
@@ -107,18 +105,6 @@
107
105
 
108
106
  const seriesState = new SeriesState(() => series);
109
107
 
110
- // Default xScale based on first data's `x` value
111
- const xScale = $derived(
112
- xScaleProp ??
113
- (accessor(xProp)(chartDataArray(data)[0]) instanceof Date ? scaleTime() : scaleLinear())
114
- );
115
-
116
- // Default yScale based on first data's `y` value
117
- const yScale = $derived(
118
- yScaleProp ??
119
- (accessor(yProp)(chartDataArray(data)[0]) instanceof Date ? scaleTime() : scaleLinear())
120
- );
121
-
122
108
  const chartData = $derived(
123
109
  seriesState.visibleSeries
124
110
  .flatMap((s) => s.data?.map((d) => ({ seriesKey: s.key, ...d })))
@@ -132,16 +118,10 @@
132
118
  return {
133
119
  data: s.data,
134
120
  fill: s.color,
121
+ opacity: seriesState.isHighlighted(s.key, true) ? 1 : 0.1,
135
122
  ...props.points,
136
123
  ...s.props,
137
- class: cls(
138
- 'transition-opacity',
139
- seriesState.highlightKey.current &&
140
- seriesState.highlightKey.current !== s.key &&
141
- 'opacity-10',
142
- props.points?.class,
143
- s.props?.class
144
- ),
124
+ class: cls(props.points?.class, s.props?.class),
145
125
  };
146
126
  }
147
127
 
@@ -151,16 +131,10 @@
151
131
  ): ComponentProps<typeof Labels<TData>> {
152
132
  return {
153
133
  data: s.data,
134
+ opacity: seriesState.isHighlighted(s.key, true) ? 1 : 0.1,
154
135
  ...props.labels,
155
136
  ...(typeof labels === 'object' ? labels : null),
156
- class: cls(
157
- 'stroke-surface-200 transition-opacity',
158
- seriesState.highlightKey.current &&
159
- seriesState.highlightKey.current !== s.key &&
160
- 'opacity-10',
161
- props.labels?.class,
162
- typeof labels === 'object' && labels.class
163
- ),
137
+ class: cls(props.labels?.class, typeof labels === 'object' && labels.class),
164
138
  };
165
139
  }
166
140
 
@@ -205,14 +179,12 @@
205
179
  if (axisDirection === 'y') {
206
180
  return {
207
181
  placement: 'left',
208
- format: (value) => format(value, undefined, { variant: 'short' }),
209
182
  ...(typeof axis === 'object' ? axis : null),
210
183
  ...props.yAxis,
211
184
  };
212
185
  }
213
186
  return {
214
187
  placement: 'bottom',
215
- format: (value) => format(value, undefined, { variant: 'short' }),
216
188
  ...(typeof axis === 'object' ? axis : null),
217
189
  ...props.xAxis,
218
190
  };
@@ -243,22 +215,21 @@
243
215
  data={chartData}
244
216
  x={xProp}
245
217
  {xDomain}
246
- {xScale}
247
218
  y={yProp}
248
219
  {yDomain}
249
- {yScale}
250
220
  yNice
251
221
  c={yProp}
252
- cRange={['var(--color-primary)']}
222
+ cRange={['var(--color-primary, currentColor)']}
253
223
  padding={defaultChartPadding(axis, legend)}
254
224
  {...restProps}
255
225
  tooltip={tooltip === false
256
226
  ? false
257
227
  : {
258
- mode: 'voronoi',
228
+ mode: 'quadtree',
259
229
  onclick: onTooltipClick,
260
230
  debug,
261
231
  ...props.tooltip?.context,
232
+ ...(typeof tooltip === 'object' ? tooltip : null),
262
233
  }}
263
234
  brush={brush && (brush === true || brush.mode == undefined || brush.mode === 'integrated')
264
235
  ? {
@@ -20,10 +20,17 @@ import Highlight from '../Highlight.svelte';
20
20
  import Labels from '../Labels.svelte';
21
21
  import Points from '../Points.svelte';
22
22
  import Rule from '../Rule.svelte';
23
+ declare function $$render<TData>(): {
24
+ props: ScatterChartProps<TData>;
25
+ exports: {};
26
+ bindings: "context";
27
+ slots: {};
28
+ events: {};
29
+ };
23
30
  declare class __sveltets_Render<TData> {
24
- props(): ScatterChartProps<TData>;
25
- events(): {};
26
- slots(): {};
31
+ props(): ReturnType<typeof $$render<TData>>['props'];
32
+ events(): ReturnType<typeof $$render<TData>>['events'];
33
+ slots(): ReturnType<typeof $$render<TData>>['slots'];
27
34
  bindings(): "context";
28
35
  exports(): {};
29
36
  }
@@ -1,24 +1,6 @@
1
1
  import type { Component, ComponentProps } from 'svelte';
2
- import { SelectionState } from '@layerstack/svelte-state';
3
- import type { SeriesData } from './types.js';
4
2
  import type Legend from '../Legend.svelte';
5
- export declare class HighlightKey<TData, SeriesComponent extends Component> {
6
- current: string | null;
7
- set: (seriesKey: typeof this.current) => void;
8
- }
9
- export declare class SeriesState<TData, TComponent extends Component> {
10
- #private;
11
- selectedSeries: SelectionState<unknown>;
12
- selectedKeys: SelectionState<unknown>;
13
- highlightKey: HighlightKey<TData, TComponent>;
14
- constructor(getSeries: () => SeriesData<TData, TComponent>[]);
15
- get series(): SeriesData<TData, TComponent>[];
16
- get isDefaultSeries(): boolean;
17
- get allSeriesData(): Array<TData & {
18
- seriesKey: string;
19
- }>;
20
- get visibleSeries(): SeriesData<TData, TComponent>[];
21
- }
3
+ import type { SeriesState } from '../../states/series.svelte.js';
22
4
  type CreateLegendPropsOptions<TData, TComponent extends Component> = {
23
5
  seriesState: SeriesState<TData, TComponent>;
24
6
  props: Partial<ComponentProps<typeof Legend>>;
@@ -1,34 +1,6 @@
1
- import { SelectionState } from '@layerstack/svelte-state';
2
1
  import { scaleOrdinal } from 'd3-scale';
3
- export class HighlightKey {
4
- current = $state(null);
5
- set = (seriesKey) => {
6
- this.current = seriesKey;
7
- };
8
- }
9
- export class SeriesState {
10
- #series = $state.raw([]);
11
- selectedSeries = new SelectionState();
12
- selectedKeys = new SelectionState();
13
- highlightKey = new HighlightKey();
14
- constructor(getSeries) {
15
- this.#series = getSeries();
16
- }
17
- get series() {
18
- return this.#series;
19
- }
20
- get isDefaultSeries() {
21
- return this.#series.length === 1 && this.#series[0].key === 'default';
22
- }
23
- get allSeriesData() {
24
- return this.#series
25
- .flatMap((s) => s.data?.map((d) => ({ seriesKey: s.key, ...d })))
26
- .filter((d) => d);
27
- }
28
- get visibleSeries() {
29
- return this.#series.filter((s) => this.selectedSeries.isEmpty() || this.selectedSeries.isSelected(s.key));
30
- }
31
- }
2
+ import { cls } from '@layerstack/tailwind';
3
+ import { resolveMaybeFn } from '../../utils/common.js';
32
4
  /**
33
5
  * A prop builder for the legend component shared between the simplified charts.
34
6
  */
@@ -40,15 +12,15 @@ export function createLegendProps(opts) {
40
12
  tickFormat: (key) => opts.seriesState.series.find((s) => s.key === key)?.label ?? key,
41
13
  placement: 'bottom',
42
14
  variant: 'swatches',
43
- onclick: (_, item) => opts.seriesState.selectedSeries.toggleSelected(item.value),
15
+ selected: opts.seriesState.selectedKeys.current,
16
+ onclick: (_, item) => opts.seriesState.selectedKeys.toggle(item.value),
44
17
  onpointerenter: (_, item) => (opts.seriesState.highlightKey.current = item.value),
45
18
  onpointerleave: () => (opts.seriesState.highlightKey.current = null),
46
19
  ...opts.props,
47
20
  classes: {
48
- item: (item) => opts.seriesState.visibleSeries.length &&
49
- !opts.seriesState.visibleSeries.some((s) => s.key === item.value)
50
- ? 'opacity-50'
51
- : '',
21
+ item: (item) => {
22
+ return cls(resolveMaybeFn(opts.props?.classes?.item, item));
23
+ },
52
24
  ...opts.props?.classes,
53
25
  },
54
26
  };
@@ -42,6 +42,8 @@ export { default as Connector } from './Connector.svelte';
42
42
  export * from './Connector.svelte';
43
43
  export { default as Dagre } from './Dagre.svelte';
44
44
  export * from './Dagre.svelte';
45
+ export { default as Ellipse } from './Ellipse.svelte';
46
+ export * from './Ellipse.svelte';
45
47
  export { default as Frame } from './Frame.svelte';
46
48
  export * from './Frame.svelte';
47
49
  export { default as ForceSimulation } from './ForceSimulation.svelte';
@@ -102,6 +104,8 @@ export { default as Point } from './Point.svelte';
102
104
  export * from './Point.svelte';
103
105
  export { default as Points } from './Points.svelte';
104
106
  export * from './Points.svelte';
107
+ export { default as Polygon } from './Polygon.svelte';
108
+ export * from './Polygon.svelte';
105
109
  export { default as RadialGradient } from './RadialGradient.svelte';
106
110
  export * from './RadialGradient.svelte';
107
111
  export { default as Rect } from './Rect.svelte';
@@ -42,6 +42,8 @@ export { default as Connector } from './Connector.svelte';
42
42
  export * from './Connector.svelte';
43
43
  export { default as Dagre } from './Dagre.svelte';
44
44
  export * from './Dagre.svelte';
45
+ export { default as Ellipse } from './Ellipse.svelte';
46
+ export * from './Ellipse.svelte';
45
47
  export { default as Frame } from './Frame.svelte';
46
48
  export * from './Frame.svelte';
47
49
  export { default as ForceSimulation } from './ForceSimulation.svelte';
@@ -102,6 +104,8 @@ export { default as Point } from './Point.svelte';
102
104
  export * from './Point.svelte';
103
105
  export { default as Points } from './Points.svelte';
104
106
  export * from './Points.svelte';
107
+ export { default as Polygon } from './Polygon.svelte';
108
+ export * from './Polygon.svelte';
105
109
  export { default as RadialGradient } from './RadialGradient.svelte';
106
110
  export * from './RadialGradient.svelte';
107
111
  export { default as Rect } from './Rect.svelte';
@@ -124,7 +128,7 @@ export * as Tooltip from './tooltip/index.js';
124
128
  export * from './tooltip/TooltipContext.svelte';
125
129
  export { default as TransformContext } from './TransformContext.svelte';
126
130
  export * from './TransformContext.svelte';
127
- // export { default as TransformControls } from './TransformControls.svelte'; // TODO: Restore once no longer using `svelet-ux` or `@mdi/js` (as they are dev dependencies)
131
+ // export { default as TransformControls } from './TransformControls.svelte'; // TODO: Restore once no longer using `svelte-ux` or `~icons` (as they are dev dependencies)
128
132
  export { default as Tree } from './Tree.svelte';
129
133
  export * from './Tree.svelte';
130
134
  export { default as Treemap } from './Treemap.svelte';