svelteplot 0.0.1-alpha.9 → 0.1.3-next.12
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/LICENSE.md +5 -0
- package/README.md +3 -35
- package/dist/Mark.svelte +292 -0
- package/dist/Mark.svelte.d.ts +22 -0
- package/dist/Plot.svelte +148 -156
- package/dist/Plot.svelte.d.ts +15 -15
- package/dist/constants.d.ts +15 -0
- package/dist/constants.js +110 -0
- package/dist/core/Facet.svelte +59 -0
- package/dist/core/Facet.svelte.d.ts +18 -0
- package/dist/core/FacetAxes.svelte +66 -0
- package/dist/core/FacetAxes.svelte.d.ts +4 -0
- package/dist/core/FacetGrid.svelte +86 -0
- package/dist/core/FacetGrid.svelte.d.ts +13 -0
- package/dist/core/Plot.svelte +568 -0
- package/dist/core/Plot.svelte.d.ts +14 -0
- package/dist/helpers/arrowPath.d.ts +14 -0
- package/dist/helpers/arrowPath.js +129 -0
- package/dist/helpers/autoProjection.d.ts +19 -0
- package/dist/helpers/autoProjection.js +87 -0
- package/dist/helpers/autoScales.d.ts +23 -0
- package/dist/helpers/autoScales.js +203 -0
- package/dist/helpers/autoTicks.d.ts +3 -0
- package/dist/helpers/autoTicks.js +40 -0
- package/dist/helpers/autoTimeFormat.d.ts +2 -2
- package/dist/helpers/autoTimeFormat.js +34 -5
- package/dist/helpers/callWithProps.d.ts +8 -0
- package/dist/helpers/callWithProps.js +13 -0
- package/dist/helpers/colors.js +17 -2
- package/dist/helpers/curves.d.ts +3 -0
- package/dist/helpers/curves.js +42 -0
- package/dist/helpers/data.d.ts +9 -0
- package/dist/helpers/data.js +16 -0
- package/dist/helpers/facets.d.ts +12 -0
- package/dist/helpers/facets.js +49 -0
- package/dist/helpers/formats.d.ts +3 -0
- package/dist/helpers/formats.js +3 -0
- package/dist/helpers/getBaseStyles.d.ts +7 -2
- package/dist/helpers/getBaseStyles.js +34 -10
- package/dist/helpers/getLogTicks.js +5 -5
- package/dist/helpers/group.d.ts +6 -0
- package/dist/helpers/group.js +53 -0
- package/dist/helpers/index.d.ts +18 -0
- package/dist/helpers/index.js +55 -0
- package/dist/helpers/isRawValue.d.ts +2 -0
- package/dist/helpers/isRawValue.js +5 -0
- package/dist/helpers/isValid.d.ts +6 -0
- package/dist/helpers/isValid.js +6 -0
- package/dist/helpers/math.d.ts +19 -0
- package/dist/helpers/math.js +116 -0
- package/dist/helpers/mergeDeep.d.ts +1 -1
- package/dist/helpers/noise.d.ts +1 -0
- package/dist/helpers/noise.js +72 -0
- package/dist/helpers/projection.d.ts +33 -0
- package/dist/helpers/projection.js +100 -0
- package/dist/helpers/reduce.d.ts +10 -0
- package/dist/helpers/reduce.js +85 -0
- package/dist/helpers/regressionLoess.d.ts +12 -0
- package/dist/helpers/regressionLoess.js +47 -0
- package/dist/helpers/removeIdenticalLines.d.ts +8 -1
- package/dist/helpers/removeIdenticalLines.js +14 -7
- package/dist/helpers/resolve.d.ts +21 -0
- package/dist/helpers/resolve.js +156 -0
- package/dist/helpers/roundedRect.d.ts +9 -0
- package/dist/helpers/roundedRect.js +31 -0
- package/dist/helpers/scales.d.ts +42 -0
- package/dist/helpers/scales.js +311 -0
- package/dist/helpers/time.d.ts +6 -0
- package/dist/helpers/time.js +282 -0
- package/dist/helpers/typeChecks.d.ts +8 -5
- package/dist/helpers/typeChecks.js +27 -6
- package/dist/index.d.ts +49 -1
- package/dist/index.js +53 -2
- package/dist/marks/Area.svelte +146 -0
- package/dist/marks/Area.svelte.d.ts +30 -0
- package/dist/marks/AreaX.svelte +27 -0
- package/dist/marks/AreaX.svelte.d.ts +12 -0
- package/dist/marks/AreaY.svelte +38 -0
- package/dist/marks/AreaY.svelte.d.ts +19 -0
- package/dist/marks/Arrow.svelte +139 -0
- package/dist/marks/Arrow.svelte.d.ts +44 -0
- package/dist/marks/AxisX.svelte +198 -93
- package/dist/marks/AxisX.svelte.d.ts +17 -16
- package/dist/marks/AxisY.svelte +176 -62
- package/dist/marks/AxisY.svelte.d.ts +17 -14
- package/dist/marks/BarX.svelte +93 -0
- package/dist/marks/BarX.svelte.d.ts +4 -0
- package/dist/marks/BarY.svelte +103 -0
- package/dist/marks/BarY.svelte.d.ts +25 -0
- package/dist/marks/BollingerX.svelte +44 -0
- package/dist/marks/BollingerX.svelte.d.ts +18 -0
- package/dist/marks/BollingerY.svelte +39 -0
- package/dist/marks/BollingerY.svelte.d.ts +18 -0
- package/dist/marks/BoxX.svelte +89 -0
- package/dist/marks/BoxX.svelte.d.ts +4 -0
- package/dist/marks/BoxY.svelte +110 -0
- package/dist/marks/BoxY.svelte.d.ts +29 -0
- package/dist/marks/Cell.svelte +110 -0
- package/dist/marks/Cell.svelte.d.ts +16 -0
- package/dist/marks/CellX.svelte +24 -0
- package/dist/marks/CellX.svelte.d.ts +3 -0
- package/dist/marks/CellY.svelte +24 -0
- package/dist/marks/CellY.svelte.d.ts +3 -0
- package/dist/marks/ColorLegend.svelte +148 -27
- package/dist/marks/ColorLegend.svelte.d.ts +12 -13
- package/dist/marks/CustomMark.svelte +43 -0
- package/dist/marks/CustomMark.svelte.d.ts +16 -0
- package/dist/marks/CustomMarkHTML.svelte +103 -0
- package/dist/marks/CustomMarkHTML.svelte.d.ts +17 -0
- package/dist/marks/DifferenceY.svelte +144 -0
- package/dist/marks/DifferenceY.svelte.d.ts +30 -0
- package/dist/marks/Dot.svelte +128 -73
- package/dist/marks/Dot.svelte.d.ts +24 -14
- package/dist/marks/DotX.svelte +15 -3
- package/dist/marks/DotX.svelte.d.ts +8 -16
- package/dist/marks/DotY.svelte +8 -3
- package/dist/marks/DotY.svelte.d.ts +5 -17
- package/dist/marks/Frame.svelte +39 -31
- package/dist/marks/Frame.svelte.d.ts +7 -14
- package/dist/marks/Geo.svelte +102 -0
- package/dist/marks/Geo.svelte.d.ts +10 -0
- package/dist/marks/Graticule.svelte +28 -0
- package/dist/marks/Graticule.svelte.d.ts +9 -0
- package/dist/marks/GridX.svelte +67 -36
- package/dist/marks/GridX.svelte.d.ts +7 -18
- package/dist/marks/GridY.svelte +64 -25
- package/dist/marks/GridY.svelte.d.ts +7 -14
- package/dist/marks/HTMLTooltip.svelte +91 -0
- package/dist/marks/HTMLTooltip.svelte.d.ts +11 -0
- package/dist/marks/Line.svelte +219 -58
- package/dist/marks/Line.svelte.d.ts +30 -14
- package/dist/marks/LineX.svelte +8 -8
- package/dist/marks/LineX.svelte.d.ts +4 -17
- package/dist/marks/LineY.svelte +7 -8
- package/dist/marks/LineY.svelte.d.ts +4 -17
- package/dist/marks/Link.svelte +180 -0
- package/dist/marks/Link.svelte.d.ts +21 -0
- package/dist/marks/Pointer.svelte +126 -0
- package/dist/marks/Pointer.svelte.d.ts +23 -0
- package/dist/marks/Rect.svelte +103 -0
- package/dist/marks/Rect.svelte.d.ts +15 -0
- package/dist/marks/RectX.svelte +33 -0
- package/dist/marks/RectX.svelte.d.ts +15 -0
- package/dist/marks/RectY.svelte +33 -0
- package/dist/marks/RectY.svelte.d.ts +15 -0
- package/dist/marks/RegressionX.svelte +26 -0
- package/dist/marks/RegressionX.svelte.d.ts +4 -0
- package/dist/marks/RegressionY.svelte +26 -0
- package/dist/marks/RegressionY.svelte.d.ts +4 -0
- package/dist/marks/RuleX.svelte +52 -28
- package/dist/marks/RuleX.svelte.d.ts +14 -14
- package/dist/marks/RuleY.svelte +52 -28
- package/dist/marks/RuleY.svelte.d.ts +14 -14
- package/dist/marks/Sphere.svelte +8 -0
- package/dist/marks/Sphere.svelte.d.ts +51 -0
- package/dist/marks/Spike.svelte +15 -0
- package/dist/marks/Spike.svelte.d.ts +4 -0
- package/dist/marks/SymbolLegend.svelte +27 -12
- package/dist/marks/SymbolLegend.svelte.d.ts +8 -14
- package/dist/marks/Text.svelte +189 -0
- package/dist/marks/Text.svelte.d.ts +26 -0
- package/dist/marks/TickX.svelte +89 -0
- package/dist/marks/TickX.svelte.d.ts +22 -0
- package/dist/marks/TickY.svelte +90 -0
- package/dist/marks/TickY.svelte.d.ts +22 -0
- package/dist/marks/Vector.svelte +219 -0
- package/dist/marks/Vector.svelte.d.ts +31 -0
- package/dist/marks/helpers/BaseAxisX.svelte +210 -0
- package/dist/marks/helpers/BaseAxisX.svelte.d.ts +24 -0
- package/dist/marks/helpers/BaseAxisY.svelte +187 -0
- package/dist/marks/helpers/BaseAxisY.svelte.d.ts +23 -0
- package/dist/marks/helpers/CanvasLayer.svelte +38 -0
- package/dist/marks/helpers/CanvasLayer.svelte.d.ts +13 -0
- package/dist/marks/helpers/DotCanvas.svelte +184 -0
- package/dist/marks/helpers/DotCanvas.svelte.d.ts +11 -0
- package/dist/marks/helpers/GeoCanvas.svelte +165 -0
- package/dist/marks/helpers/GeoCanvas.svelte.d.ts +13 -0
- package/dist/marks/helpers/GroupMultiple.svelte +17 -0
- package/dist/marks/helpers/GroupMultiple.svelte.d.ts +9 -0
- package/dist/marks/helpers/Marker.svelte +93 -0
- package/dist/marks/helpers/Marker.svelte.d.ts +10 -0
- package/dist/marks/helpers/MarkerPath.svelte +141 -0
- package/dist/marks/helpers/MarkerPath.svelte.d.ts +44 -0
- package/dist/marks/helpers/Regression.svelte +174 -0
- package/dist/marks/helpers/Regression.svelte.d.ts +26 -0
- package/dist/marks/helpers/events.d.ts +8 -0
- package/dist/marks/helpers/events.js +74 -0
- package/dist/transforms/bin.d.ts +51 -0
- package/dist/transforms/bin.js +171 -0
- package/dist/transforms/bollinger.d.ts +21 -0
- package/dist/transforms/bollinger.js +53 -0
- package/dist/transforms/centroid.d.ts +9 -0
- package/dist/transforms/centroid.js +13 -0
- package/dist/transforms/facet.d.ts +1 -0
- package/dist/transforms/facet.js +1 -0
- package/dist/transforms/filter.d.ts +2 -0
- package/dist/transforms/filter.js +8 -0
- package/dist/transforms/group.d.ts +66 -0
- package/dist/transforms/group.js +109 -0
- package/dist/transforms/interval.d.ts +11 -0
- package/dist/transforms/interval.js +34 -0
- package/dist/transforms/jitter.d.ts +1 -0
- package/dist/transforms/jitter.js +1 -0
- package/dist/transforms/map.d.ts +10 -0
- package/dist/transforms/map.js +89 -0
- package/dist/transforms/normalize.d.ts +9 -0
- package/dist/transforms/normalize.js +86 -0
- package/dist/transforms/recordize.d.ts +15 -0
- package/dist/transforms/recordize.js +78 -0
- package/dist/transforms/rename.d.ts +14 -0
- package/dist/transforms/rename.js +42 -0
- package/dist/transforms/select.d.ts +35 -0
- package/dist/transforms/select.js +55 -0
- package/dist/transforms/shift.d.ts +13 -0
- package/dist/transforms/shift.js +45 -0
- package/dist/transforms/sort.d.ts +28 -0
- package/dist/transforms/sort.js +66 -0
- package/dist/transforms/stack.d.ts +10 -0
- package/dist/transforms/stack.js +110 -0
- package/dist/transforms/window.d.ts +24 -0
- package/dist/transforms/window.js +73 -0
- package/dist/types.d.ts +625 -188
- package/dist/ui/Checkbox.svelte +6 -0
- package/dist/ui/Checkbox.svelte.d.ts +13 -0
- package/dist/ui/RadioInput.svelte +27 -0
- package/dist/ui/RadioInput.svelte.d.ts +9 -0
- package/dist/ui/Select.svelte +27 -0
- package/dist/ui/Select.svelte.d.ts +9 -0
- package/dist/ui/Slider.svelte +47 -0
- package/dist/ui/Slider.svelte.d.ts +11 -0
- package/dist/ui/Spiral.svelte +46 -0
- package/dist/ui/Spiral.svelte.d.ts +15 -0
- package/dist/ui/index.d.ts +4 -0
- package/dist/ui/index.js +4 -0
- package/package.json +81 -42
- package/LICENSE +0 -11
- package/dist/classes/Channel.svelte.js +0 -74
- package/dist/classes/Mark.svelte.js +0 -17
- package/dist/classes/Plot.svelte.js +0 -98
- package/dist/contants.d.ts +0 -3
- package/dist/contants.js +0 -40
- package/dist/helpers/GroupMultiple.svelte +0 -8
- package/dist/helpers/GroupMultiple.svelte.d.ts +0 -19
- package/dist/helpers/createScale.d.ts +0 -5
- package/dist/helpers/createScale.js +0 -57
- package/dist/helpers/resolveChannel.d.ts +0 -2
- package/dist/helpers/resolveChannel.js +0 -28
- package/dist/helpers/wrapArray.d.ts +0 -2
- package/dist/helpers/wrapArray.js +0 -4
- package/dist/marks/BaseMark.svelte +0 -22
- package/dist/marks/BaseMark.svelte.d.ts +0 -19
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getContext } from 'svelte';
|
|
3
|
+
import type { DataRecord, PlotContext, BaseMarkProps } from '../types.js';
|
|
4
|
+
import Mark from '../Mark.svelte';
|
|
5
|
+
import { geoPath } from 'd3-geo';
|
|
6
|
+
import { resolveChannel, resolveProp, resolveScaledStyles } from '../helpers/resolve.js';
|
|
7
|
+
import { getUsedScales } from '../helpers/scales.js';
|
|
8
|
+
import callWithProps from '../helpers/callWithProps.js';
|
|
9
|
+
import { sort } from '../index.js';
|
|
10
|
+
import { testFilter } from '../helpers/index.js';
|
|
11
|
+
import { addEventHandlers } from './helpers/events.js';
|
|
12
|
+
import GeoCanvas from './helpers/GeoCanvas.svelte';
|
|
13
|
+
|
|
14
|
+
const { getPlotState } = getContext<PlotContext>('svelteplot');
|
|
15
|
+
const plot = $derived(getPlotState());
|
|
16
|
+
|
|
17
|
+
type GeoMarkProps = {
|
|
18
|
+
data: DataRecord[];
|
|
19
|
+
geoType?: 'sphere' | 'graticule';
|
|
20
|
+
dragRotate: boolean;
|
|
21
|
+
canvas: boolean;
|
|
22
|
+
} & BaseMarkProps;
|
|
23
|
+
|
|
24
|
+
let {
|
|
25
|
+
data = [{}],
|
|
26
|
+
canvas = false,
|
|
27
|
+
geoType,
|
|
28
|
+
dragRotate,
|
|
29
|
+
class: className = null,
|
|
30
|
+
...options
|
|
31
|
+
}: GeoMarkProps = $props();
|
|
32
|
+
|
|
33
|
+
const path = $derived(
|
|
34
|
+
callWithProps(geoPath, [plot.scales.projection], {
|
|
35
|
+
...(options.r
|
|
36
|
+
? { pointRadius: (d) => plot.scales.r.fn(resolveChannel('r', d, options)) }
|
|
37
|
+
: { pointRadius: 3 })
|
|
38
|
+
})
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
const args = $derived(
|
|
42
|
+
sort({
|
|
43
|
+
data,
|
|
44
|
+
...(options.r ? { sort: { channel: '-r' } } : {}),
|
|
45
|
+
...options
|
|
46
|
+
})
|
|
47
|
+
);
|
|
48
|
+
const preferStroke = new Set(['MultiLineString', 'LineString']);
|
|
49
|
+
|
|
50
|
+
const { getTestFacet } = getContext<FacetContext>('svelteplot/facet');
|
|
51
|
+
const testFacet = $derived(getTestFacet());
|
|
52
|
+
</script>
|
|
53
|
+
|
|
54
|
+
<Mark
|
|
55
|
+
type="geo"
|
|
56
|
+
channels={['fill', 'stroke', 'opacity', 'fillOpacity', 'strokeOpacity', 'r']}
|
|
57
|
+
{...args}>
|
|
58
|
+
{#snippet children({ mark, usedScales })}
|
|
59
|
+
<g
|
|
60
|
+
aria-label="geo"
|
|
61
|
+
class={['geo', geoType && `geo-${geoType}`, className]}
|
|
62
|
+
style="fill:currentColor">
|
|
63
|
+
{#if canvas}
|
|
64
|
+
<GeoCanvas data={args.data} {mark} {plot} {testFacet} {usedScales} {path} />
|
|
65
|
+
{:else}
|
|
66
|
+
{#each args.data as datum}
|
|
67
|
+
{#if testFilter(datum, mark.options) && testFacet(datum, mark.options)}
|
|
68
|
+
{#snippet el(datum)}
|
|
69
|
+
{@const title = resolveProp(args.title, datum, '')}
|
|
70
|
+
{@const geometry = resolveProp(args.geometry, datum, datum)}
|
|
71
|
+
<path
|
|
72
|
+
d={path(geometry)}
|
|
73
|
+
style={resolveScaledStyles(
|
|
74
|
+
datum,
|
|
75
|
+
args,
|
|
76
|
+
usedScales,
|
|
77
|
+
plot,
|
|
78
|
+
preferStroke.has(geometry.type) ? 'stroke' : 'fill'
|
|
79
|
+
)}
|
|
80
|
+
use:addEventHandlers={{
|
|
81
|
+
getPlotState,
|
|
82
|
+
options: args,
|
|
83
|
+
datum
|
|
84
|
+
}}>
|
|
85
|
+
{#if title}<title>{title}</title>{/if}
|
|
86
|
+
</path>
|
|
87
|
+
{/snippet}
|
|
88
|
+
{#if options.href}
|
|
89
|
+
<a
|
|
90
|
+
href={resolveProp(args.href, datum, '')}
|
|
91
|
+
target={resolveProp(args.target, datum, '_self')}>
|
|
92
|
+
{@render el(datum)}
|
|
93
|
+
</a>
|
|
94
|
+
{:else}
|
|
95
|
+
{@render el(datum)}
|
|
96
|
+
{/if}
|
|
97
|
+
{/if}
|
|
98
|
+
{/each}
|
|
99
|
+
{/if}
|
|
100
|
+
</g>
|
|
101
|
+
{/snippet}
|
|
102
|
+
</Mark>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DataRecord, BaseMarkProps } from '../types.js';
|
|
2
|
+
type GeoMarkProps = {
|
|
3
|
+
data: DataRecord[];
|
|
4
|
+
geoType?: 'sphere' | 'graticule';
|
|
5
|
+
dragRotate: boolean;
|
|
6
|
+
canvas: boolean;
|
|
7
|
+
} & BaseMarkProps;
|
|
8
|
+
declare const Geo: import("svelte").Component<GeoMarkProps, {}, "">;
|
|
9
|
+
type Geo = ReturnType<typeof Geo>;
|
|
10
|
+
export default Geo;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Geo from './Geo.svelte';
|
|
3
|
+
import { geoGraticule } from 'd3-geo';
|
|
4
|
+
import type { DefaultOptions, BaseMarkProps } from '../types.js';
|
|
5
|
+
|
|
6
|
+
import { getContext } from 'svelte';
|
|
7
|
+
|
|
8
|
+
const DEFAULTS = {
|
|
9
|
+
graticuleStep: 10,
|
|
10
|
+
...getContext<Partial<DefaultOptions>>('svelteplot/defaults')
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
type GraticuleMarkProps = BaseMarkProps & {
|
|
14
|
+
step?: number;
|
|
15
|
+
stepX?: number;
|
|
16
|
+
stepY?: number;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
let { step = DEFAULTS.graticuleStep, stepX, stepY, ...options }: GraticuleMarkProps = $props();
|
|
20
|
+
|
|
21
|
+
let graticule = $derived.by(() => {
|
|
22
|
+
const graticule = geoGraticule();
|
|
23
|
+
graticule.stepMinor([stepX || step, stepY || step]);
|
|
24
|
+
return graticule;
|
|
25
|
+
});
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<Geo data={[graticule()]} {...options} geoType="graticule" preferStroke />
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { BaseMarkProps } from '../types.js';
|
|
2
|
+
type GraticuleMarkProps = BaseMarkProps & {
|
|
3
|
+
step?: number;
|
|
4
|
+
stepX?: number;
|
|
5
|
+
stepY?: number;
|
|
6
|
+
};
|
|
7
|
+
declare const Graticule: import("svelte").Component<GraticuleMarkProps, {}, "">;
|
|
8
|
+
type Graticule = ReturnType<typeof Graticule>;
|
|
9
|
+
export default Graticule;
|
package/dist/marks/GridX.svelte
CHANGED
|
@@ -1,42 +1,73 @@
|
|
|
1
|
-
<script
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
let
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
);
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getContext } from 'svelte';
|
|
3
|
+
import Mark from '../Mark.svelte';
|
|
4
|
+
import type { PlotContext, BaseMarkProps, RawValue } from '../types.js';
|
|
5
|
+
import { resolveChannel, resolveScaledStyles } from '../helpers/resolve.js';
|
|
6
|
+
import { autoTicks } from '../helpers/autoTicks.js';
|
|
7
|
+
import { getUsedScales } from '../helpers/scales.js';
|
|
8
|
+
import { testFilter } from '../helpers/index.js';
|
|
9
|
+
|
|
10
|
+
type GrixXMarkProps = BaseMarkProps & {
|
|
11
|
+
data?: RawValue[];
|
|
12
|
+
automatic?: boolean;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
let { data = [], automatic = false, ...options }: GrixXMarkProps = $props();
|
|
16
|
+
|
|
17
|
+
const { getPlotState } = getContext<PlotContext>('svelteplot');
|
|
18
|
+
let plot = $derived(getPlotState());
|
|
19
|
+
|
|
20
|
+
let autoTickCount = $derived(
|
|
21
|
+
Math.max(3, Math.round(plot.facetWidth / plot.options.x.tickSpacing))
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
let ticks: RawValue[] = $derived(
|
|
25
|
+
data.length > 0
|
|
26
|
+
? // use custom tick values if user passed any as prop
|
|
27
|
+
data
|
|
28
|
+
: // use custom scale tick values if user passed any as plot scale option
|
|
29
|
+
autoTicks(
|
|
30
|
+
plot.scales.x.type,
|
|
31
|
+
plot.options.x.ticks,
|
|
32
|
+
plot.options.x.interval,
|
|
33
|
+
plot.scales.x.domain,
|
|
34
|
+
plot.scales.x.fn,
|
|
35
|
+
autoTickCount
|
|
36
|
+
)
|
|
37
|
+
);
|
|
19
38
|
</script>
|
|
20
39
|
|
|
21
|
-
<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
40
|
+
<Mark
|
|
41
|
+
type="gridX"
|
|
42
|
+
data={data.length ? data.map((tick) => ({ __x: tick })) : []}
|
|
43
|
+
channels={['y1', 'y2', 'x', 'stroke', 'strokeOpacity']}
|
|
44
|
+
{...{ ...options, x: '__x' }}
|
|
45
|
+
{automatic}>
|
|
46
|
+
{#snippet children({ usedScales })}
|
|
47
|
+
<g class="grid-x">
|
|
48
|
+
{#each ticks as tick}
|
|
49
|
+
{#if testFilter(tick, options)}
|
|
50
|
+
{@const x =
|
|
51
|
+
plot.scales.x.fn(tick) +
|
|
52
|
+
(plot.scales.x.type === 'band' ? plot.scales.x.fn.bandwidth() * 0.5 : 0)}
|
|
53
|
+
{@const y1_ = resolveChannel('y1', tick, options)}
|
|
54
|
+
{@const y2_ = resolveChannel('y2', tick, options)}
|
|
55
|
+
{@const y1 = options.y1 != null ? plot.scales.y.fn(y1_) : 0}
|
|
56
|
+
{@const y2 = options.y2 != null ? plot.scales.y.fn(y2_) : plot.facetHeight}
|
|
57
|
+
<line
|
|
58
|
+
transform="translate({x},{plot.options.marginTop})"
|
|
59
|
+
style={resolveScaledStyles(tick, options, usedScales, plot, 'stroke')}
|
|
60
|
+
{y1}
|
|
61
|
+
{y2} />
|
|
62
|
+
{/if}
|
|
63
|
+
{/each}
|
|
64
|
+
</g>
|
|
65
|
+
{/snippet}
|
|
66
|
+
</Mark>
|
|
37
67
|
|
|
38
68
|
<style>
|
|
39
|
-
|
|
40
|
-
stroke:
|
|
69
|
+
line {
|
|
70
|
+
stroke: currentColor;
|
|
71
|
+
stroke-opacity: 0.2;
|
|
41
72
|
}
|
|
42
73
|
</style>
|
|
@@ -1,19 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
y1?: import("../types.js").ChannelAccessor | undefined;
|
|
6
|
-
y2?: import("../types.js").ChannelAccessor | undefined;
|
|
7
|
-
automatic?: boolean | undefined;
|
|
8
|
-
};
|
|
9
|
-
events: {
|
|
10
|
-
[evt: string]: CustomEvent<any>;
|
|
11
|
-
};
|
|
12
|
-
slots: {};
|
|
1
|
+
import type { BaseMarkProps, RawValue } from '../types.js';
|
|
2
|
+
type GrixXMarkProps = BaseMarkProps & {
|
|
3
|
+
data?: RawValue[];
|
|
4
|
+
automatic?: boolean;
|
|
13
5
|
};
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
export
|
|
17
|
-
export default class GridX extends SvelteComponent<GridXProps, GridXEvents, GridXSlots> {
|
|
18
|
-
}
|
|
19
|
-
export {};
|
|
6
|
+
declare const GridX: import("svelte").Component<GrixXMarkProps, {}, "">;
|
|
7
|
+
type GridX = ReturnType<typeof GridX>;
|
|
8
|
+
export default GridX;
|
package/dist/marks/GridY.svelte
CHANGED
|
@@ -1,31 +1,70 @@
|
|
|
1
|
-
<script
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getContext } from 'svelte';
|
|
3
|
+
import Mark from '../Mark.svelte';
|
|
4
|
+
import type { PlotContext, BaseMarkProps, RawValue, DataRecord } from '../types.js';
|
|
5
|
+
import { resolveChannel, resolveScaledStyles } from '../helpers/resolve.js';
|
|
6
|
+
import { autoTicks } from '../helpers/autoTicks.js';
|
|
7
|
+
import { getUsedScales } from '../helpers/scales.js';
|
|
8
|
+
import { testFilter } from '../helpers/index.js';
|
|
9
|
+
|
|
10
|
+
type GridYMarkProps = BaseMarkProps & { data?: RawValue[]; automatic?: boolean };
|
|
11
|
+
|
|
12
|
+
let { data = [], automatic = false, ...options }: GridYMarkProps = $props();
|
|
13
|
+
|
|
14
|
+
const { getPlotState } = getContext<PlotContext>('svelteplot');
|
|
15
|
+
let plot = $derived(getPlotState());
|
|
16
|
+
|
|
17
|
+
let autoTickCount = $derived(
|
|
18
|
+
Math.max(2, Math.round(plot.facetHeight / plot.options.y.tickSpacing))
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
let ticks: RawValue[] = $derived(
|
|
22
|
+
data.length > 0
|
|
23
|
+
? // use custom tick values if user passed any as prop
|
|
24
|
+
data
|
|
25
|
+
: // use custom scale tick values if user passed any as plot scale option
|
|
26
|
+
autoTicks(
|
|
27
|
+
plot.scales.y.type,
|
|
28
|
+
plot.options.y.ticks,
|
|
29
|
+
plot.options.y.interval,
|
|
30
|
+
plot.scales.y.domain,
|
|
31
|
+
plot.scales.y.fn,
|
|
32
|
+
autoTickCount
|
|
33
|
+
)
|
|
34
|
+
);
|
|
11
35
|
</script>
|
|
12
36
|
|
|
13
|
-
<
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
37
|
+
<Mark
|
|
38
|
+
type="gridY"
|
|
39
|
+
data={data.length ? data.map((tick) => ({ ___orig___: tick })) : []}
|
|
40
|
+
channels={['x1', 'x2', 'y', 'stroke', 'strokeOpacity']}
|
|
41
|
+
{...{ ...options, y: '___orig___' }}
|
|
42
|
+
{automatic}>
|
|
43
|
+
{#snippet children({ usedScales })}
|
|
44
|
+
<g class="grid-y">
|
|
45
|
+
{#each ticks as tick}
|
|
46
|
+
{#if testFilter(tick, options)}
|
|
47
|
+
{@const y =
|
|
48
|
+
plot.scales.y.fn(tick) +
|
|
49
|
+
(plot.scales.y.type === 'band' ? plot.scales.y.fn.bandwidth() * 0.5 : 0)}
|
|
50
|
+
{@const x1_ = resolveChannel('x1', tick, options)}
|
|
51
|
+
{@const x2_ = resolveChannel('x2', tick, options)}
|
|
52
|
+
{@const x1 = options.x1 != null ? plot.scales.x.fn(x1_) : 0}
|
|
53
|
+
{@const x2 = options.x2 != null ? plot.scales.x.fn(x2_) : plot.facetWidth}
|
|
54
|
+
<line
|
|
55
|
+
transform="translate({plot.options.marginLeft},{y})"
|
|
56
|
+
style={resolveScaledStyles(tick, options, usedScales, plot, 'stroke')}
|
|
57
|
+
{x1}
|
|
58
|
+
{x2} />
|
|
59
|
+
{/if}
|
|
60
|
+
{/each}
|
|
61
|
+
</g>
|
|
62
|
+
{/snippet}
|
|
63
|
+
</Mark>
|
|
26
64
|
|
|
27
65
|
<style>
|
|
28
|
-
|
|
29
|
-
stroke:
|
|
66
|
+
line {
|
|
67
|
+
stroke: currentColor;
|
|
68
|
+
stroke-opacity: 0.2;
|
|
30
69
|
}
|
|
31
70
|
</style>
|
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
events: {
|
|
6
|
-
[evt: string]: CustomEvent<any>;
|
|
7
|
-
};
|
|
8
|
-
slots: {};
|
|
1
|
+
import type { BaseMarkProps, RawValue } from '../types.js';
|
|
2
|
+
type GridYMarkProps = BaseMarkProps & {
|
|
3
|
+
data?: RawValue[];
|
|
4
|
+
automatic?: boolean;
|
|
9
5
|
};
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export
|
|
13
|
-
export default class GridY extends SvelteComponent<GridYProps, GridYEvents, GridYSlots> {
|
|
14
|
-
}
|
|
15
|
-
export {};
|
|
6
|
+
declare const GridY: import("svelte").Component<GridYMarkProps, {}, "">;
|
|
7
|
+
type GridY = ReturnType<typeof GridY>;
|
|
8
|
+
export default GridY;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@component
|
|
3
|
+
For showing custom HTML tooltips positioned at x/y coordinates
|
|
4
|
+
-->
|
|
5
|
+
<script module lang="ts">
|
|
6
|
+
import type { ChannelAccessor, DataRow } from '../types.js';
|
|
7
|
+
|
|
8
|
+
export type HTMLTooltipMarkProps = {
|
|
9
|
+
data: DataRow[];
|
|
10
|
+
x?: ChannelAccessor;
|
|
11
|
+
y?: ChannelAccessor;
|
|
12
|
+
r?: ChannelAccessor;
|
|
13
|
+
};
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<script lang="ts">
|
|
17
|
+
import { getContext } from 'svelte';
|
|
18
|
+
import type { PlotContext } from '../types.js';
|
|
19
|
+
|
|
20
|
+
const { getPlotState } = getContext<PlotContext>('svelteplot');
|
|
21
|
+
let plot = $derived(getPlotState());
|
|
22
|
+
|
|
23
|
+
import { resolveChannel } from '../helpers/resolve.js';
|
|
24
|
+
import { quadtree } from 'd3-quadtree';
|
|
25
|
+
import { projectX, projectY } from '../helpers/scales.js';
|
|
26
|
+
|
|
27
|
+
let { data, x, y, r, children }: HTMLTooltipMarkProps = $props();
|
|
28
|
+
|
|
29
|
+
let datum = $state(false);
|
|
30
|
+
let tooltipX = $state();
|
|
31
|
+
let tooltipY = $state();
|
|
32
|
+
|
|
33
|
+
function onMouseMove(evt: MouseEvent) {
|
|
34
|
+
const pt = tree.find(evt.layerX, evt.layerY, 25);
|
|
35
|
+
if (pt) {
|
|
36
|
+
tooltipX = resolveChannel('x', pt, { x, y, r });
|
|
37
|
+
tooltipY = resolveChannel('y', pt, { x, y, r });
|
|
38
|
+
datum = pt;
|
|
39
|
+
} else {
|
|
40
|
+
datum = false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
$effect(() => {
|
|
45
|
+
// plot.body?.addEventListener('mouseenter', onMouseEnter);
|
|
46
|
+
// plot.body?.addEventListener('mouseleave', onMouseLeave);
|
|
47
|
+
plot.body?.addEventListener('mousemove', onMouseMove);
|
|
48
|
+
|
|
49
|
+
return () => {
|
|
50
|
+
// plot.body?.removeEventListener('mouseenter', onMouseEnter);
|
|
51
|
+
// plot.body?.removeEventListener('mouseleave', onMouseLeave);
|
|
52
|
+
plot.body?.removeEventListener('mousemove', onMouseMove);
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
let tree = $derived(
|
|
57
|
+
quadtree()
|
|
58
|
+
.x((d) => projectX('x', plot.scales, resolveChannel('x', d, { x, y, r })))
|
|
59
|
+
.y((d) => projectY('y', plot.scales, resolveChannel('y', d, { x, y, r })))
|
|
60
|
+
.addAll(data)
|
|
61
|
+
);
|
|
62
|
+
</script>
|
|
63
|
+
|
|
64
|
+
<div
|
|
65
|
+
class={['tooltip', { hide: !datum }]}
|
|
66
|
+
style:left="{tooltipX ? projectX('x', plot.scales, tooltipX) : 0}px"
|
|
67
|
+
style:top="{tooltipY ? projectY('y', plot.scales, tooltipY) : 0}px">
|
|
68
|
+
<div class="tooltip-body">
|
|
69
|
+
{@render children({ datum })}
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
<style>
|
|
74
|
+
div.tooltip {
|
|
75
|
+
background: white;
|
|
76
|
+
background: var(--svelteplot-tooltip-bg);
|
|
77
|
+
border: 1px solid #ccc;
|
|
78
|
+
border-color: var(--svelteplot-tooltip-border);
|
|
79
|
+
font-size: 13px;
|
|
80
|
+
padding: 1ex 1em;
|
|
81
|
+
border-radius: 3px;
|
|
82
|
+
box-shadow:
|
|
83
|
+
rgba(50, 50, 93, 0.25) 0px 2px 5px -1px,
|
|
84
|
+
rgba(0, 0, 0, 0.3) 0px 1px 3px -1px;
|
|
85
|
+
position: absolute;
|
|
86
|
+
pointer-events: none;
|
|
87
|
+
}
|
|
88
|
+
.tooltip.hide {
|
|
89
|
+
display: none;
|
|
90
|
+
}
|
|
91
|
+
</style>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ChannelAccessor, DataRow } from '../types.js';
|
|
2
|
+
export type HTMLTooltipMarkProps = {
|
|
3
|
+
data: DataRow[];
|
|
4
|
+
x?: ChannelAccessor;
|
|
5
|
+
y?: ChannelAccessor;
|
|
6
|
+
r?: ChannelAccessor;
|
|
7
|
+
};
|
|
8
|
+
/** For showing custom HTML tooltips positioned at x/y coordinates */
|
|
9
|
+
declare const HtmlTooltip: import("svelte").Component<HTMLTooltipMarkProps, {}, "">;
|
|
10
|
+
type HtmlTooltip = ReturnType<typeof HtmlTooltip>;
|
|
11
|
+
export default HtmlTooltip;
|