layerchart 2.0.0-next.4 → 2.0.0-next.41
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.
- package/dist/components/AnnotationLine.svelte +15 -2
- package/dist/components/AnnotationPoint.svelte +29 -11
- package/dist/components/AnnotationRange.svelte +18 -4
- package/dist/components/Arc.svelte +5 -5
- package/dist/components/Area.svelte +10 -2
- package/dist/components/Axis.svelte +175 -58
- package/dist/components/Axis.svelte.d.ts +23 -6
- package/dist/components/Bar.svelte +20 -15
- package/dist/components/Bar.svelte.d.ts +2 -2
- package/dist/components/Bars.svelte +4 -4
- package/dist/components/Blur.svelte +7 -6
- package/dist/components/Blur.svelte.d.ts +2 -5
- package/dist/components/BrushContext.svelte +45 -45
- package/dist/components/Calendar.svelte +31 -10
- package/dist/components/Calendar.svelte.d.ts +2 -1
- package/dist/components/Chart.svelte +76 -27
- package/dist/components/Chart.svelte.d.ts +26 -8
- package/dist/components/ChartClipPath.svelte +1 -1
- package/dist/components/Circle.svelte +44 -3
- package/dist/components/CircleClipPath.svelte +8 -1
- package/dist/components/ClipPath.svelte +1 -2
- package/dist/components/ColorRamp.svelte +1 -1
- package/dist/components/ComputedStyles.svelte +9 -2
- package/dist/components/Connector.svelte +3 -3
- package/dist/components/Connector.svelte.d.ts +1 -1
- package/dist/components/Ellipse.svelte +228 -0
- package/dist/components/Ellipse.svelte.d.ts +64 -0
- package/dist/components/ForceSimulation.svelte +184 -50
- package/dist/components/ForceSimulation.svelte.d.ts +95 -21
- package/dist/components/Frame.svelte +1 -1
- package/dist/components/GeoCircle.svelte +1 -1
- package/dist/components/GeoEdgeFade.svelte +1 -1
- package/dist/components/GeoPath.svelte +30 -8
- package/dist/components/GeoPoint.svelte +4 -5
- package/dist/components/GeoSpline.svelte +5 -5
- package/dist/components/GeoSpline.svelte.d.ts +1 -1
- package/dist/components/GeoTile.svelte +1 -1
- package/dist/components/Graticule.svelte +5 -5
- package/dist/components/Grid.svelte +60 -63
- package/dist/components/Group.svelte +13 -8
- package/dist/components/Group.svelte.d.ts +10 -3
- package/dist/components/Highlight.svelte +55 -28
- package/dist/components/Highlight.svelte.d.ts +4 -0
- package/dist/components/Hull.svelte +12 -5
- package/dist/components/Labels.svelte +24 -13
- package/dist/components/Labels.svelte.d.ts +12 -5
- package/dist/components/Legend.svelte +143 -70
- package/dist/components/Legend.svelte.d.ts +12 -8
- package/dist/components/Line.svelte +40 -3
- package/dist/components/LinearGradient.svelte +35 -4
- package/dist/components/Link.svelte +1 -1
- package/dist/components/Marker.svelte +37 -26
- package/dist/components/MonthPath.svelte +26 -12
- package/dist/components/MonthPath.svelte.d.ts +4 -3
- package/dist/components/MotionPath.svelte +1 -1
- package/dist/components/Pack.svelte.d.ts +10 -3
- package/dist/components/Partition.svelte.d.ts +10 -3
- package/dist/components/Pattern.svelte +5 -5
- package/dist/components/Pie.svelte +1 -2
- package/dist/components/Points.svelte +11 -72
- package/dist/components/Points.svelte.d.ts +1 -8
- package/dist/components/Polygon.svelte +309 -0
- package/dist/components/Polygon.svelte.d.ts +115 -0
- package/dist/components/RadialGradient.svelte +4 -6
- package/dist/components/Rect.svelte +55 -5
- package/dist/components/Rect.svelte.d.ts +2 -2
- package/dist/components/RectClipPath.svelte +4 -3
- package/dist/components/RectClipPath.svelte.d.ts +2 -2
- package/dist/components/Rule.svelte +167 -77
- package/dist/components/Rule.svelte.d.ts +7 -2
- package/dist/components/Spline.svelte +59 -28
- package/dist/components/Spline.svelte.d.ts +12 -4
- package/dist/components/Text.svelte +121 -73
- package/dist/components/Text.svelte.d.ts +6 -0
- package/dist/components/TileImage.svelte +19 -4
- package/dist/components/TransformContext.svelte +9 -3
- package/dist/components/TransformControls.svelte +89 -38
- package/dist/components/Tree.svelte.d.ts +10 -3
- package/dist/components/Treemap.svelte +63 -26
- package/dist/components/Treemap.svelte.d.ts +21 -14
- package/dist/components/Voronoi.svelte +12 -13
- package/dist/components/charts/ArcChart.svelte +43 -71
- package/dist/components/charts/ArcChart.svelte.d.ts +10 -3
- package/dist/components/charts/AreaChart.svelte +29 -59
- package/dist/components/charts/AreaChart.svelte.d.ts +10 -3
- package/dist/components/charts/BarChart.svelte +79 -71
- package/dist/components/charts/BarChart.svelte.d.ts +10 -3
- package/dist/components/charts/DefaultTooltip.svelte +3 -3
- package/dist/components/charts/DefaultTooltip.svelte.d.ts +1 -1
- package/dist/components/charts/LineChart.svelte +69 -75
- package/dist/components/charts/LineChart.svelte.d.ts +21 -8
- package/dist/components/charts/PieChart.svelte +44 -71
- package/dist/components/charts/PieChart.svelte.d.ts +10 -3
- package/dist/components/charts/ScatterChart.svelte +10 -39
- package/dist/components/charts/ScatterChart.svelte.d.ts +10 -3
- package/dist/components/charts/utils.svelte.d.ts +1 -19
- package/dist/components/charts/utils.svelte.js +7 -35
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.js +5 -1
- package/dist/components/layout/Canvas.svelte +96 -69
- package/dist/components/layout/Canvas.svelte.d.ts +6 -0
- package/dist/components/layout/Html.svelte +15 -9
- package/dist/components/layout/Layer.svelte +6 -4
- package/dist/components/layout/Layer.svelte.d.ts +6 -4
- package/dist/components/layout/Svg.svelte +19 -11
- package/dist/components/layout/WebGL.svelte +26 -6
- package/dist/components/layout/WebGL.svelte.d.ts +5 -2
- package/dist/components/tooltip/Tooltip.svelte +73 -36
- package/dist/components/tooltip/Tooltip.svelte.d.ts +10 -3
- package/dist/components/tooltip/TooltipContext.svelte +167 -54
- package/dist/components/tooltip/TooltipContext.svelte.d.ts +19 -5
- package/dist/components/tooltip/TooltipHeader.svelte +32 -18
- package/dist/components/tooltip/TooltipHeader.svelte.d.ts +3 -3
- package/dist/components/tooltip/TooltipItem.svelte +46 -37
- package/dist/components/tooltip/TooltipItem.svelte.d.ts +3 -3
- package/dist/components/tooltip/TooltipList.svelte +12 -10
- package/dist/components/tooltip/TooltipSeparator.svelte +18 -10
- package/dist/components/tooltip/tooltipMetaContext.d.ts +2 -2
- package/dist/docs/Blockquote.svelte +6 -4
- package/dist/docs/Blockquote.svelte.d.ts +4 -19
- package/dist/docs/Code.svelte +70 -28
- package/dist/docs/Code.svelte.d.ts +9 -24
- package/dist/docs/Header1.svelte +4 -2
- package/dist/docs/Header1.svelte.d.ts +4 -28
- package/dist/docs/Json.svelte +11 -3
- package/dist/docs/Json.svelte.d.ts +9 -21
- package/dist/docs/Layout.svelte +10 -7
- package/dist/docs/Layout.svelte.d.ts +4 -19
- package/dist/docs/Link.svelte +7 -3
- package/dist/docs/Link.svelte.d.ts +4 -38
- package/dist/docs/Preview.svelte +22 -23
- package/dist/docs/Preview.svelte.d.ts +5 -6
- package/dist/docs/TilesetField.svelte +20 -19
- package/dist/docs/TilesetField.svelte.d.ts +5 -22
- package/dist/docs/ViewSourceButton.svelte +10 -7
- package/dist/docs/ViewSourceButton.svelte.d.ts +7 -21
- package/dist/states/series.svelte.d.ts +30 -0
- package/dist/states/series.svelte.js +54 -0
- package/dist/styles/daisyui-5.css +6 -0
- package/dist/styles/shadcn-svelte.css +11 -0
- package/dist/styles/skeleton-3.css +15 -0
- package/dist/utils/arcText.svelte.js +4 -4
- package/dist/utils/array.d.ts +11 -0
- package/dist/utils/array.js +23 -0
- package/dist/utils/array.test.d.ts +1 -0
- package/dist/utils/array.test.js +200 -0
- package/dist/utils/attributes.d.ts +3 -13
- package/dist/utils/attributes.js +4 -18
- package/dist/utils/canvas.d.ts +77 -0
- package/dist/utils/canvas.js +105 -41
- package/dist/utils/common.d.ts +9 -0
- package/dist/utils/common.js +18 -1
- package/dist/utils/common.test.js +26 -1
- package/dist/utils/genData.d.ts +22 -8
- package/dist/utils/genData.js +34 -14
- package/dist/utils/graph/dagre.d.ts +4 -4
- package/dist/utils/graph/dagre.js +5 -7
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/math.d.ts +17 -0
- package/dist/utils/math.js +17 -0
- package/dist/utils/motion.svelte.js +1 -1
- package/dist/utils/path.d.ts +10 -0
- package/dist/utils/path.js +30 -0
- package/dist/utils/rect.svelte.d.ts +2 -2
- package/dist/utils/rect.svelte.js +73 -1
- package/dist/utils/scales.svelte.d.ts +9 -3
- package/dist/utils/scales.svelte.js +47 -4
- package/dist/utils/shape.d.ts +43 -0
- package/dist/utils/shape.js +59 -0
- package/dist/utils/stack.js +1 -1
- package/dist/utils/string.d.ts +49 -0
- package/dist/utils/string.js +4 -2
- package/dist/utils/ticks.d.ts +15 -4
- package/dist/utils/ticks.js +140 -159
- package/dist/utils/ticks.test.js +16 -26
- package/dist/utils/treemap.d.ts +1 -1
- package/dist/utils/types.d.ts +15 -2
- package/package.json +36 -35
- 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
|
|
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 {
|
|
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
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
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:
|
|
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
|
-
|
|
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={
|
|
399
|
-
?
|
|
366
|
+
cRange={seriesState.allSeriesColors.length
|
|
367
|
+
? seriesState.allSeriesColors
|
|
400
368
|
: c !== key
|
|
401
369
|
? chartData.map((d) => cAccessor(d))
|
|
402
370
|
: [
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
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={{
|
|
378
|
+
padding={{
|
|
379
|
+
bottom: legend === true || getObjectOrNull(legend)?.placement?.includes('bottom') ? 32 : 0,
|
|
380
|
+
}}
|
|
411
381
|
{...restProps}
|
|
412
|
-
tooltip={tooltip === false
|
|
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
|
-
|
|
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():
|
|
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 {
|
|
64
|
+
import { chartDataArray, defaultChartPadding } from '../../utils/common.js';
|
|
66
65
|
import { asAny } from '../../utils/types.js';
|
|
67
|
-
import {
|
|
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: '
|
|
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():
|
|
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
|
-
|
|
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
|
-
|
|
4
|
-
|
|
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
|
-
|
|
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) =>
|
|
49
|
-
|
|
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';
|
package/dist/components/index.js
CHANGED
|
@@ -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 `
|
|
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';
|