svelteplot 0.10.3 → 0.11.0
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/Mark.svelte +42 -25
- package/dist/Mark.svelte.d.ts +111 -32
- package/dist/Plot.svelte +21 -15
- package/dist/core/Facet.svelte +1 -1
- package/dist/core/FacetAxes.svelte +13 -8
- package/dist/core/FacetGrid.svelte +4 -4
- package/dist/core/Plot.svelte +41 -35
- package/dist/helpers/autoScales.d.ts +3 -3
- package/dist/helpers/autoScales.js +28 -18
- package/dist/helpers/autoTicks.js +2 -0
- package/dist/helpers/callWithProps.d.ts +1 -2
- package/dist/helpers/facets.js +0 -1
- package/dist/helpers/index.js +1 -1
- package/dist/helpers/mergeDeep.d.ts +1 -3
- package/dist/helpers/mergeDeep.js +15 -16
- package/dist/helpers/projection.d.ts +4 -3
- package/dist/helpers/projection.js +17 -5
- package/dist/helpers/reduce.d.ts +4 -4
- package/dist/helpers/reduce.js +6 -4
- package/dist/helpers/regressionLoess.js +2 -1
- package/dist/helpers/resolve.d.ts +6 -3
- package/dist/helpers/resolve.js +25 -16
- package/dist/helpers/scales.d.ts +10 -10
- package/dist/helpers/scales.js +43 -13
- package/dist/helpers/time.d.ts +10 -3
- package/dist/helpers/time.js +2 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/plotDefaults.d.ts +3 -1
- package/dist/hooks/plotDefaults.js +33 -1
- package/dist/hooks/usePlot.svelte.d.ts +10 -25
- package/dist/hooks/usePlot.svelte.js +8 -7
- package/dist/index.d.ts +1 -2
- package/dist/index.js +1 -3
- package/dist/marks/Area.svelte +24 -13
- package/dist/marks/Area.svelte.d.ts +118 -34
- package/dist/marks/AreaX.svelte +42 -8
- package/dist/marks/AreaX.svelte.d.ts +154 -71
- package/dist/marks/AreaY.svelte +42 -8
- package/dist/marks/AreaY.svelte.d.ts +154 -71
- package/dist/marks/Arrow.svelte +42 -23
- package/dist/marks/Arrow.svelte.d.ts +114 -35
- package/dist/marks/AxisX.svelte +43 -28
- package/dist/marks/AxisX.svelte.d.ts +125 -40
- package/dist/marks/AxisY.svelte +43 -26
- package/dist/marks/AxisY.svelte.d.ts +127 -40
- package/dist/marks/BarX.svelte +12 -10
- package/dist/marks/BarX.svelte.d.ts +104 -32
- package/dist/marks/BarY.svelte +11 -10
- package/dist/marks/BarY.svelte.d.ts +106 -34
- package/dist/marks/BollingerX.svelte +4 -7
- package/dist/marks/BollingerX.svelte.d.ts +105 -30
- package/dist/marks/BollingerY.svelte +3 -0
- package/dist/marks/BollingerY.svelte.d.ts +105 -30
- package/dist/marks/BoxX.svelte +3 -3
- package/dist/marks/BoxY.svelte +12 -9
- package/dist/marks/BoxY.svelte.d.ts +128 -53
- package/dist/marks/Brush.svelte +26 -21
- package/dist/marks/Brush.svelte.d.ts +119 -60
- package/dist/marks/Cell.svelte +13 -9
- package/dist/marks/Cell.svelte.d.ts +105 -30
- package/dist/marks/CellX.svelte +2 -1
- package/dist/marks/CellX.svelte.d.ts +105 -32
- package/dist/marks/CellY.svelte +2 -1
- package/dist/marks/CellY.svelte.d.ts +105 -32
- package/dist/marks/ColorLegend.svelte +24 -13
- package/dist/marks/ColorLegend.svelte.d.ts +1 -0
- package/dist/marks/CustomMark.svelte +16 -10
- package/dist/marks/CustomMark.svelte.d.ts +112 -31
- package/dist/marks/CustomMarkHTML.svelte +8 -2
- package/dist/marks/CustomMarkHTML.svelte.d.ts +8 -2
- package/dist/marks/DifferenceY.svelte +31 -20
- package/dist/marks/DifferenceY.svelte.d.ts +134 -55
- package/dist/marks/Dot.svelte +21 -11
- package/dist/marks/Dot.svelte.d.ts +117 -38
- package/dist/marks/DotX.svelte +2 -0
- package/dist/marks/DotX.svelte.d.ts +136 -62
- package/dist/marks/DotY.svelte +1 -0
- package/dist/marks/DotY.svelte.d.ts +135 -62
- package/dist/marks/Frame.svelte +47 -9
- package/dist/marks/Frame.svelte.d.ts +124 -41
- package/dist/marks/Geo.svelte +21 -12
- package/dist/marks/Geo.svelte.d.ts +105 -30
- package/dist/marks/Graticule.svelte +3 -0
- package/dist/marks/Graticule.svelte.d.ts +3 -0
- package/dist/marks/GridX.svelte +31 -16
- package/dist/marks/GridX.svelte.d.ts +108 -32
- package/dist/marks/GridY.svelte +30 -15
- package/dist/marks/GridY.svelte.d.ts +108 -32
- package/dist/marks/HTMLTooltip.svelte +14 -7
- package/dist/marks/HTMLTooltip.svelte.d.ts +7 -0
- package/dist/marks/Image.svelte +50 -25
- package/dist/marks/Image.svelte.d.ts +117 -35
- package/dist/marks/Line.svelte +67 -44
- package/dist/marks/Line.svelte.d.ts +119 -30
- package/dist/marks/LineX.svelte +2 -1
- package/dist/marks/LineX.svelte.d.ts +142 -69
- package/dist/marks/LineY.svelte +2 -1
- package/dist/marks/LineY.svelte.d.ts +142 -69
- package/dist/marks/Link.svelte +70 -46
- package/dist/marks/Link.svelte.d.ts +126 -41
- package/dist/marks/Pointer.svelte +24 -15
- package/dist/marks/Pointer.svelte.d.ts +7 -0
- package/dist/marks/Rect.svelte +13 -5
- package/dist/marks/Rect.svelte.d.ts +116 -35
- package/dist/marks/RectX.svelte +6 -3
- package/dist/marks/RectX.svelte.d.ts +158 -12
- package/dist/marks/RectY.svelte +6 -3
- package/dist/marks/RectY.svelte.d.ts +158 -12
- package/dist/marks/RegressionX.svelte +13 -6
- package/dist/marks/RegressionX.svelte.d.ts +8 -3
- package/dist/marks/RegressionY.svelte +13 -6
- package/dist/marks/RegressionY.svelte.d.ts +8 -3
- package/dist/marks/RuleX.svelte +18 -11
- package/dist/marks/RuleX.svelte.d.ts +112 -32
- package/dist/marks/RuleY.svelte +19 -12
- package/dist/marks/RuleY.svelte.d.ts +114 -34
- package/dist/marks/Spike.svelte +11 -5
- package/dist/marks/Spike.svelte.d.ts +146 -68
- package/dist/marks/Text.svelte +24 -7
- package/dist/marks/Text.svelte.d.ts +253 -75
- package/dist/marks/TickX.svelte +56 -48
- package/dist/marks/TickX.svelte.d.ts +114 -40
- package/dist/marks/TickY.svelte +59 -51
- package/dist/marks/TickY.svelte.d.ts +117 -43
- package/dist/marks/Trail.svelte +25 -13
- package/dist/marks/Trail.svelte.d.ts +116 -33
- package/dist/marks/Vector.svelte +20 -11
- package/dist/marks/Vector.svelte.d.ts +116 -35
- package/dist/marks/WaffleX.svelte +18 -16
- package/dist/marks/WaffleX.svelte.d.ts +131 -57
- package/dist/marks/WaffleY.svelte +16 -15
- package/dist/marks/WaffleY.svelte.d.ts +129 -56
- package/dist/marks/helpers/Anchor.svelte +17 -2
- package/dist/marks/helpers/Anchor.svelte.d.ts +16 -1
- package/dist/marks/helpers/AreaCanvas.svelte +8 -8
- package/dist/marks/helpers/BaseAxisX.svelte +38 -41
- package/dist/marks/helpers/BaseAxisX.svelte.d.ts +11 -17
- package/dist/marks/helpers/BaseAxisY.svelte +35 -35
- package/dist/marks/helpers/BaseAxisY.svelte.d.ts +12 -15
- package/dist/marks/helpers/Box.svelte +35 -28
- package/dist/marks/helpers/Box.svelte.d.ts +122 -50
- package/dist/marks/helpers/DotCanvas.svelte +11 -9
- package/dist/marks/helpers/GeoCanvas.svelte +7 -6
- package/dist/marks/helpers/LineCanvas.svelte +7 -7
- package/dist/marks/helpers/LinearGradientX.svelte +2 -2
- package/dist/marks/helpers/LinearGradientX.svelte.d.ts +1 -1
- package/dist/marks/helpers/LinearGradientY.svelte +2 -2
- package/dist/marks/helpers/LinearGradientY.svelte.d.ts +1 -1
- package/dist/marks/helpers/Marker.svelte +2 -2
- package/dist/marks/helpers/MarkerPath.svelte +15 -12
- package/dist/marks/helpers/MarkerPath.svelte.d.ts +105 -32
- package/dist/marks/helpers/MultilineText.svelte +24 -17
- package/dist/marks/helpers/MultilineText.svelte.d.ts +1 -1
- package/dist/marks/helpers/RectCanvas.svelte +31 -26
- package/dist/marks/helpers/RectPath.svelte +2 -2
- package/dist/marks/helpers/Regression.svelte +176 -86
- package/dist/marks/helpers/Regression.svelte.d.ts +20 -8
- package/dist/marks/helpers/RuleCanvas.svelte +9 -6
- package/dist/marks/helpers/TextCanvas.svelte +13 -9
- package/dist/marks/helpers/TextCanvas.svelte.d.ts +6 -6
- package/dist/marks/helpers/TickCanvas.svelte +6 -5
- package/dist/marks/helpers/TrailCanvas.svelte +16 -18
- package/dist/marks/helpers/TrailCanvas.svelte.d.ts +3 -5
- package/dist/marks/helpers/canvas.js +16 -9
- package/dist/marks/helpers/events.d.ts +2 -2
- package/dist/marks/helpers/events.js +14 -7
- package/dist/marks/helpers/waffle.d.ts +3 -3
- package/dist/marks/helpers/waffle.js +6 -4
- package/dist/regression/polynomial.d.ts +1 -1
- package/dist/regression/polynomial.js +5 -5
- package/dist/regression/utils/determination.d.ts +1 -1
- package/dist/regression/utils/determination.js +1 -1
- package/dist/regression/utils/geometry.d.ts +1 -1
- package/dist/regression/utils/interpose.d.ts +1 -1
- package/dist/regression/utils/interpose.js +1 -1
- package/dist/regression/utils/points.d.ts +1 -1
- package/dist/transforms/bin.d.ts +3 -3
- package/dist/transforms/bin.js +29 -20
- package/dist/transforms/bollinger.d.ts +8 -0
- package/dist/transforms/bollinger.js +9 -1
- package/dist/transforms/centroid.d.ts +4 -0
- package/dist/transforms/centroid.js +4 -0
- package/dist/transforms/density.d.ts +4 -4
- package/dist/transforms/density.js +20 -13
- package/dist/transforms/dodge.d.ts +12 -1
- package/dist/transforms/dodge.js +15 -6
- package/dist/transforms/group.d.ts +141 -4
- package/dist/transforms/group.js +4 -1
- package/dist/transforms/interval.d.ts +204 -60
- package/dist/transforms/jitter.d.ts +421 -4
- package/dist/transforms/jitter.js +10 -1
- package/dist/transforms/map.d.ts +412 -4
- package/dist/transforms/map.js +3 -3
- package/dist/transforms/normalize.d.ts +276 -5
- package/dist/transforms/normalize.js +5 -3
- package/dist/transforms/recordize.d.ts +17 -5
- package/dist/transforms/recordize.js +13 -9
- package/dist/transforms/rename.d.ts +11 -4
- package/dist/transforms/rename.js +7 -2
- package/dist/transforms/select.d.ts +722 -210
- package/dist/transforms/select.js +13 -1
- package/dist/transforms/shift.d.ts +8 -0
- package/dist/transforms/shift.js +20 -6
- package/dist/transforms/sort.d.ts +13 -258
- package/dist/transforms/sort.js +13 -10
- package/dist/transforms/stack.d.ts +58 -9
- package/dist/transforms/stack.js +27 -11
- package/dist/transforms/window.d.ts +221 -66
- package/dist/transforms/window.js +8 -2
- package/dist/types/axes.d.ts +43 -0
- package/dist/types/axes.js +1 -0
- package/dist/types/channel.d.ts +30 -2
- package/dist/types/data.d.ts +14 -1
- package/dist/types/facet.d.ts +5 -0
- package/dist/types/index.d.ts +33 -8
- package/dist/types/index.js +11 -7
- package/dist/types/mark.d.ts +124 -35
- package/dist/types/plot.d.ts +118 -16
- package/dist/types/scale.d.ts +125 -8
- package/package.json +178 -175
- package/dist/helpers/autoTicks.d.ts +0 -12
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
usedScales,
|
|
57
57
|
plot,
|
|
58
58
|
'stroke'
|
|
59
|
-
);
|
|
59
|
+
) as { fill: string; stroke: string } & Record<string, unknown>;
|
|
60
60
|
|
|
61
61
|
const opacity = maybeOpacity(restStyles['opacity']);
|
|
62
62
|
const strokeOpacity = maybeOpacity(restStyles['stroke-opacity']);
|
|
@@ -67,12 +67,12 @@
|
|
|
67
67
|
1.4
|
|
68
68
|
) as number;
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
const lineOpts = mark.options as any;
|
|
71
|
+
if (lineOpts.outlineStroke) {
|
|
71
72
|
// draw stroke outline first
|
|
72
|
-
const outlineStroke = resolveColor(
|
|
73
|
-
const outlineStrokeWidth =
|
|
74
|
-
|
|
75
|
-
const outlineStrokeOpacity = mark.options.outlineStrokeOpacity ?? 1;
|
|
73
|
+
const outlineStroke = resolveColor(lineOpts.outlineStroke, canvas);
|
|
74
|
+
const outlineStrokeWidth = lineOpts.outlineStrokeWidth ?? strokeWidth + 2;
|
|
75
|
+
const outlineStrokeOpacity = lineOpts.outlineStrokeOpacity ?? 1;
|
|
76
76
|
|
|
77
77
|
context.lineWidth = outlineStrokeWidth;
|
|
78
78
|
context.strokeStyle = outlineStroke;
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
context.stroke();
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
stroke = resolveColor(stroke, canvas);
|
|
85
|
+
stroke = resolveColor(stroke, canvas) as string;
|
|
86
86
|
|
|
87
87
|
if (stroke && stroke !== 'none') {
|
|
88
88
|
context.lineWidth = strokeWidth ?? 1.4;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import type { RawValue } from '../../index.js';
|
|
2
|
+
import type { RawValue } from '../../types/index.js';
|
|
3
3
|
import { usePlot } from '../../hooks/usePlot.svelte.js';
|
|
4
4
|
|
|
5
5
|
let {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
const projectedStops = $derived(
|
|
16
16
|
stops
|
|
17
|
-
.map((d) => ({ ...d, px: plot.scales.x
|
|
17
|
+
.map((d) => ({ ...d, px: (plot.scales.x?.fn(d.x as any) ?? 0) / plot.width }))
|
|
18
18
|
.sort((a, b) => a.px - b.px)
|
|
19
19
|
);
|
|
20
20
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import type { RawValue } from '../../index.js';
|
|
2
|
+
import type { RawValue } from '../../types/index.js';
|
|
3
3
|
import { usePlot } from '../../hooks/usePlot.svelte.js';
|
|
4
4
|
|
|
5
5
|
let {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
const projectedStops = $derived(
|
|
16
16
|
stops
|
|
17
|
-
.map((d) => ({ ...d, py: plot.scales.y
|
|
17
|
+
.map((d) => ({ ...d, py: (plot.scales.y?.fn(d.y as any) ?? 0) / plot.height }))
|
|
18
18
|
.sort((a, b) => a.py - b.py)
|
|
19
19
|
);
|
|
20
20
|
</script>
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
<script lang="ts">
|
|
18
18
|
import { getContext } from 'svelte';
|
|
19
|
-
import { getPlotDefaults } from '../../hooks/plotDefaults';
|
|
19
|
+
import { getPlotDefaults } from '../../hooks/plotDefaults.js';
|
|
20
20
|
|
|
21
21
|
type MarkerProps = {
|
|
22
22
|
id: string;
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
width: 6,
|
|
34
34
|
height: 6,
|
|
35
35
|
orient,
|
|
36
|
-
color: 'stroke'
|
|
36
|
+
color: 'stroke' as const
|
|
37
37
|
});
|
|
38
38
|
|
|
39
39
|
const MARKERS: Record<
|
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
* path string
|
|
48
48
|
*/
|
|
49
49
|
d: string;
|
|
50
|
+
dInv?: string;
|
|
50
51
|
style: string;
|
|
51
52
|
startOffset: string;
|
|
52
53
|
textStyle: string;
|
|
@@ -69,7 +70,7 @@
|
|
|
69
70
|
d,
|
|
70
71
|
dInv,
|
|
71
72
|
style,
|
|
72
|
-
class: className =
|
|
73
|
+
class: className = '',
|
|
73
74
|
textStyleClass = null,
|
|
74
75
|
startOffset,
|
|
75
76
|
textStyle,
|
|
@@ -86,14 +87,14 @@
|
|
|
86
87
|
|
|
87
88
|
const points = $derived(text && d != null ? d.split(/[LMC]/).slice(1) : []);
|
|
88
89
|
const hasPath = $derived(points.length > 0);
|
|
89
|
-
const firstPt = $derived(text && hasPath ? points.at(0)
|
|
90
|
-
const lastPt = $derived(text && hasPath ? points.at(-1)
|
|
91
|
-
const leftToRight = $derived(text && hasPath ? firstPt[0] < lastPt.at(-2) : true);
|
|
90
|
+
const firstPt = $derived(text && hasPath ? (points.at(0)?.split(',').map(Number) ?? []) : []);
|
|
91
|
+
const lastPt = $derived(text && hasPath ? (points.at(-1)?.split(',').map(Number) ?? []) : []);
|
|
92
|
+
const leftToRight = $derived(text && hasPath ? firstPt[0] < (lastPt.at(-2) ?? 0) : true);
|
|
92
93
|
|
|
93
94
|
// use reversed path if the path is not left to right
|
|
94
95
|
const textPath = $derived(!text || leftToRight ? d : dInv);
|
|
95
|
-
const strokeWidth_ = $derived(resolveProp(strokeWidth, datum, 1.4));
|
|
96
|
-
const markerScale_ = $derived(resolveProp(markerScale, datum, 1));
|
|
96
|
+
const strokeWidth_ = $derived(resolveProp(strokeWidth, datum, 1.4) ?? 1.4);
|
|
97
|
+
const markerScale_ = $derived(resolveProp(markerScale, datum, 1) ?? 1);
|
|
97
98
|
</script>
|
|
98
99
|
|
|
99
100
|
<g
|
|
@@ -105,14 +106,16 @@
|
|
|
105
106
|
options: mark.options,
|
|
106
107
|
datum: datum
|
|
107
108
|
})}>
|
|
108
|
-
{#each Object.entries( { start: markerStart, mid: markerMid, end: markerEnd, all: marker } ) as [key,
|
|
109
|
+
{#each Object.entries( { start: markerStart, mid: markerMid, end: markerEnd, all: marker } ) as [key, markerValue] (key)}
|
|
109
110
|
{@const markerId = `marker-${key === 'all' ? '' : `${key}-`}${id}`}
|
|
110
|
-
{#if isSnippet(
|
|
111
|
-
{@render
|
|
112
|
-
{:else if
|
|
111
|
+
{#if isSnippet(markerValue)}
|
|
112
|
+
{@render (markerValue as any)(markerId, color)}
|
|
113
|
+
{:else if markerValue}
|
|
113
114
|
<Marker
|
|
114
115
|
id={markerId}
|
|
115
|
-
shape={
|
|
116
|
+
shape={markerValue === true
|
|
117
|
+
? 'circle'
|
|
118
|
+
: ((resolveProp(markerValue, datum) ?? 'circle') as MarkerShape)}
|
|
116
119
|
{color}
|
|
117
120
|
markerScale={markerScale_} />
|
|
118
121
|
{/if}
|
|
@@ -121,7 +124,7 @@
|
|
|
121
124
|
<!-- add invisible path in bg for easier mouse access -->
|
|
122
125
|
<path
|
|
123
126
|
{d}
|
|
124
|
-
style="fill:none;stroke-width: {(
|
|
127
|
+
style="fill:none;stroke-width: {(strokeWidth_ || 1) +
|
|
125
128
|
10}; stroke: transparent; stroke-opacity:0" />
|
|
126
129
|
{/if}
|
|
127
130
|
<path
|
|
@@ -8,10 +8,20 @@ declare function $$render<Datum extends DataRecord>(): {
|
|
|
8
8
|
fy: import("../../types/index.js").ChannelAccessor<Datum>;
|
|
9
9
|
dx: ConstantAccessor<number, Datum>;
|
|
10
10
|
dy: ConstantAccessor<number, Datum>;
|
|
11
|
-
dodgeX: import("../../transforms/dodge").DodgeXOptions;
|
|
12
|
-
dodgeY: import("../../transforms/dodge").DodgeYOptions;
|
|
11
|
+
dodgeX: import("../../transforms/dodge.js").DodgeXOptions;
|
|
12
|
+
dodgeY: import("../../transforms/dodge.js").DodgeYOptions;
|
|
13
13
|
fill: import("../../types/index.js").ChannelAccessor<Datum>;
|
|
14
14
|
fillOpacity: ConstantAccessor<number, Datum>;
|
|
15
|
+
fontFamily: ConstantAccessor<import("csstype").Property.FontFamily, Datum>;
|
|
16
|
+
fontSize: ConstantAccessor<number | "-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "math" | (string & {}) | "large" | "medium" | "small" | "x-large" | "x-small" | "xx-large" | "xx-small" | "xxx-large" | "larger" | "smaller", Datum>;
|
|
17
|
+
fontStyle: ConstantAccessor<import("csstype").Property.FontStyle, Datum>;
|
|
18
|
+
fontVariant: ConstantAccessor<import("csstype").Property.FontVariant, Datum>;
|
|
19
|
+
fontWeight: ConstantAccessor<import("csstype").Property.FontWeight, Datum>;
|
|
20
|
+
letterSpacing: ConstantAccessor<import("csstype").Property.LetterSpacing<0 | (string & {})>, Datum>;
|
|
21
|
+
wordSpacing: ConstantAccessor<import("csstype").Property.WordSpacing<0 | (string & {})>, Datum>;
|
|
22
|
+
textAnchor: ConstantAccessor<import("csstype").Property.TextAnchor, Datum>;
|
|
23
|
+
textTransform: ConstantAccessor<import("csstype").Property.TextTransform, Datum>;
|
|
24
|
+
textDecoration: ConstantAccessor<import("csstype").Property.TextDecoration<0 | (string & {})>, Datum>;
|
|
15
25
|
sort: ((a: import("../../types/index.js").RawValue, b: import("../../types/index.js").RawValue) => number) | {
|
|
16
26
|
channel: string;
|
|
17
27
|
order?: "ascending" | "descending";
|
|
@@ -25,45 +35,107 @@ declare function $$render<Datum extends DataRecord>(): {
|
|
|
25
35
|
opacity: import("../../types/index.js").ChannelAccessor<Datum>;
|
|
26
36
|
strokeDasharray: ConstantAccessor<string, Datum>;
|
|
27
37
|
strokeDashoffset: ConstantAccessor<number, Datum>;
|
|
38
|
+
blend: ConstantAccessor<import("csstype").Property.MixBlendMode, Datum>;
|
|
28
39
|
mixBlendMode: ConstantAccessor<import("csstype").Property.MixBlendMode, Datum>;
|
|
29
40
|
clipPath: string;
|
|
30
41
|
mask: string;
|
|
31
42
|
imageFilter: ConstantAccessor<string, Datum>;
|
|
32
43
|
shapeRendering: ConstantAccessor<import("csstype").Property.ShapeRendering, Datum>;
|
|
33
44
|
paintOrder: ConstantAccessor<string, Datum>;
|
|
34
|
-
onclick:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
45
|
+
onclick: (event: Event & {
|
|
46
|
+
currentTarget: SVGPathElement;
|
|
47
|
+
}, datum: Datum, index: number) => void;
|
|
48
|
+
ondblclick: (event: Event & {
|
|
49
|
+
currentTarget: SVGPathElement;
|
|
50
|
+
}, datum: Datum, index: number) => void;
|
|
51
|
+
onmouseup: (event: Event & {
|
|
52
|
+
currentTarget: SVGPathElement;
|
|
53
|
+
}, datum: Datum, index: number) => void;
|
|
54
|
+
onmousedown: (event: Event & {
|
|
55
|
+
currentTarget: SVGPathElement;
|
|
56
|
+
}, datum: Datum, index: number) => void;
|
|
57
|
+
onmouseenter: (event: Event & {
|
|
58
|
+
currentTarget: SVGPathElement;
|
|
59
|
+
}, datum: Datum, index: number) => void;
|
|
60
|
+
onmousemove: (event: Event & {
|
|
61
|
+
currentTarget: SVGPathElement;
|
|
62
|
+
}, datum: Datum, index: number) => void;
|
|
63
|
+
onmouseleave: (event: Event & {
|
|
64
|
+
currentTarget: SVGPathElement;
|
|
65
|
+
}, datum: Datum, index: number) => void;
|
|
66
|
+
onmouseout: (event: Event & {
|
|
67
|
+
currentTarget: SVGPathElement;
|
|
68
|
+
}, datum: Datum, index: number) => void;
|
|
69
|
+
onmouseover: (event: Event & {
|
|
70
|
+
currentTarget: SVGPathElement;
|
|
71
|
+
}, datum: Datum, index: number) => void;
|
|
72
|
+
onpointercancel: (event: Event & {
|
|
73
|
+
currentTarget: SVGPathElement;
|
|
74
|
+
}, datum: Datum, index: number) => void;
|
|
75
|
+
onpointerdown: (event: Event & {
|
|
76
|
+
currentTarget: SVGPathElement;
|
|
77
|
+
}, datum: Datum, index: number) => void;
|
|
78
|
+
onpointerup: (event: Event & {
|
|
79
|
+
currentTarget: SVGPathElement;
|
|
80
|
+
}, datum: Datum, index: number) => void;
|
|
81
|
+
onpointerenter: (event: Event & {
|
|
82
|
+
currentTarget: SVGPathElement;
|
|
83
|
+
}, datum: Datum, index: number) => void;
|
|
84
|
+
onpointerleave: (event: Event & {
|
|
85
|
+
currentTarget: SVGPathElement;
|
|
86
|
+
}, datum: Datum, index: number) => void;
|
|
87
|
+
onpointermove: (event: Event & {
|
|
88
|
+
currentTarget: SVGPathElement;
|
|
89
|
+
}, datum: Datum, index: number) => void;
|
|
90
|
+
onpointerover: (event: Event & {
|
|
91
|
+
currentTarget: SVGPathElement;
|
|
92
|
+
}, datum: Datum, index: number) => void;
|
|
93
|
+
onpointerout: (event: Event & {
|
|
94
|
+
currentTarget: SVGPathElement;
|
|
95
|
+
}, datum: Datum, index: number) => void;
|
|
96
|
+
ondrag: (event: Event & {
|
|
97
|
+
currentTarget: SVGPathElement;
|
|
98
|
+
}, datum: Datum, index: number) => void;
|
|
99
|
+
ondrop: (event: Event & {
|
|
100
|
+
currentTarget: SVGPathElement;
|
|
101
|
+
}, datum: Datum, index: number) => void;
|
|
102
|
+
ondragstart: (event: Event & {
|
|
103
|
+
currentTarget: SVGPathElement;
|
|
104
|
+
}, datum: Datum, index: number) => void;
|
|
105
|
+
ondragenter: (event: Event & {
|
|
106
|
+
currentTarget: SVGPathElement;
|
|
107
|
+
}, datum: Datum, index: number) => void;
|
|
108
|
+
ondragleave: (event: Event & {
|
|
109
|
+
currentTarget: SVGPathElement;
|
|
110
|
+
}, datum: Datum, index: number) => void;
|
|
111
|
+
ondragover: (event: Event & {
|
|
112
|
+
currentTarget: SVGPathElement;
|
|
113
|
+
}, datum: Datum, index: number) => void;
|
|
114
|
+
ondragend: (event: Event & {
|
|
115
|
+
currentTarget: SVGPathElement;
|
|
116
|
+
}, datum: Datum, index: number) => void;
|
|
117
|
+
ontouchstart: (event: Event & {
|
|
118
|
+
currentTarget: SVGPathElement;
|
|
119
|
+
}, datum: Datum, index: number) => void;
|
|
120
|
+
ontouchmove: (event: Event & {
|
|
121
|
+
currentTarget: SVGPathElement;
|
|
122
|
+
}, datum: Datum, index: number) => void;
|
|
123
|
+
ontouchend: (event: Event & {
|
|
124
|
+
currentTarget: SVGPathElement;
|
|
125
|
+
}, datum: Datum, index: number) => void;
|
|
126
|
+
ontouchcancel: (event: Event & {
|
|
127
|
+
currentTarget: SVGPathElement;
|
|
128
|
+
}, datum: Datum, index: number) => void;
|
|
129
|
+
oncontextmenu: (event: Event & {
|
|
130
|
+
currentTarget: SVGPathElement;
|
|
131
|
+
}, datum: Datum, index: number) => void;
|
|
132
|
+
onwheel: (event: Event & {
|
|
133
|
+
currentTarget: SVGPathElement;
|
|
134
|
+
}, datum: Datum, index: number) => void;
|
|
64
135
|
class: string;
|
|
65
136
|
style: string;
|
|
66
137
|
cursor: ConstantAccessor<import("csstype").Property.Cursor, Datum>;
|
|
138
|
+
title: ConstantAccessor<string, Datum>;
|
|
67
139
|
}> & {
|
|
68
140
|
/**
|
|
69
141
|
* the datum associated with this path, usually the first
|
|
@@ -95,6 +167,7 @@ declare function $$render<Datum extends DataRecord>(): {
|
|
|
95
167
|
* path string
|
|
96
168
|
*/
|
|
97
169
|
d: string;
|
|
170
|
+
dInv?: string;
|
|
98
171
|
style: string;
|
|
99
172
|
startOffset: string;
|
|
100
173
|
textStyle: string;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { resolveProp, resolveStyles } from '../../helpers/resolve';
|
|
2
|
+
import { resolveProp, resolveStyles } from '../../helpers/resolve.js';
|
|
3
3
|
import { type ComponentProps } from 'svelte';
|
|
4
|
-
import type { ScaledDataRecord, UsedScales } from '../../index.js';
|
|
4
|
+
import type { ScaledDataRecord, UsedScales } from '../../types/index.js';
|
|
5
5
|
import type Text from '../Text.svelte';
|
|
6
|
-
import { CSS_VAR } from '../../constants';
|
|
7
|
-
import { maybeFromPixel, maybeFromRem } from '../../helpers/getBaseStyles';
|
|
6
|
+
import { CSS_VAR } from '../../constants.js';
|
|
7
|
+
import { maybeFromPixel, maybeFromRem } from '../../helpers/getBaseStyles.js';
|
|
8
8
|
import { usePlot } from '../../hooks/usePlot.svelte.js';
|
|
9
9
|
|
|
10
10
|
const LINE_ANCHOR = {
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
args.lineAnchor,
|
|
47
47
|
d.datum,
|
|
48
48
|
args.y != null ? 'middle' : isTop ? 'top' : isBottom ? 'bottom' : 'middle'
|
|
49
|
-
)
|
|
49
|
+
) ?? 'middle'
|
|
50
50
|
);
|
|
51
51
|
const textClassName = $derived(resolveProp(args.textClass, d.datum, null));
|
|
52
52
|
const [x, y] = $derived(
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
const [style, styleClass] = $derived(
|
|
74
74
|
resolveStyles(
|
|
75
75
|
plot,
|
|
76
|
-
{ ...d, __tspanIndex: 0 },
|
|
76
|
+
{ ...d, __tspanIndex: 0 } as any,
|
|
77
77
|
{
|
|
78
78
|
fontSize: 12,
|
|
79
79
|
fontWeight: 500,
|
|
@@ -92,20 +92,27 @@
|
|
|
92
92
|
let textElement: SVGTextElement | null = $state(null);
|
|
93
93
|
|
|
94
94
|
const rootFontSize = $derived(
|
|
95
|
-
textElement
|
|
96
|
-
? maybeFromPixel(
|
|
95
|
+
textElement != null && textLines.length > 1
|
|
96
|
+
? maybeFromPixel(
|
|
97
|
+
getComputedStyle(
|
|
98
|
+
(textElement as unknown as SVGTextElement).ownerDocument.documentElement
|
|
99
|
+
).fontSize
|
|
100
|
+
)
|
|
97
101
|
: 14
|
|
98
102
|
);
|
|
99
103
|
|
|
100
104
|
const computedFontSize = $derived(
|
|
101
|
-
textElement &&
|
|
105
|
+
textElement &&
|
|
106
|
+
textLines.length > 1 &&
|
|
107
|
+
typeof fontSize === 'string' &&
|
|
108
|
+
CSS_VAR.test(fontSize)
|
|
102
109
|
? maybeFromRem(
|
|
103
110
|
maybeFromPixel(
|
|
104
111
|
getComputedStyle(textElement).getPropertyValue(
|
|
105
|
-
`--${fontSize.match(CSS_VAR)[1]}`
|
|
112
|
+
`--${String(fontSize).match(CSS_VAR)![1]}`
|
|
106
113
|
)
|
|
107
114
|
),
|
|
108
|
-
rootFontSize
|
|
115
|
+
rootFontSize as number
|
|
109
116
|
)
|
|
110
117
|
: fontSize
|
|
111
118
|
);
|
|
@@ -114,7 +121,7 @@
|
|
|
114
121
|
textLines.length > 1 ? (resolveProp(args.lineHeight, d.datum) ?? 1.2) : 0
|
|
115
122
|
);
|
|
116
123
|
|
|
117
|
-
const rotate = $derived(
|
|
124
|
+
const rotate = $derived(Number(resolveProp(args.rotate, d.datum, 0) ?? 0));
|
|
118
125
|
</script>
|
|
119
126
|
|
|
120
127
|
{#if textLines.length > 1}
|
|
@@ -123,19 +130,19 @@
|
|
|
123
130
|
bind:this={textElement}
|
|
124
131
|
class={[textClassName]}
|
|
125
132
|
dominant-baseline={LINE_ANCHOR[lineAnchor]}
|
|
126
|
-
transform="translate({Math.round(x)},{Math.round(
|
|
127
|
-
y -
|
|
133
|
+
transform="translate({Math.round(x ?? 0)},{Math.round(
|
|
134
|
+
(y ?? 0) -
|
|
128
135
|
(lineAnchor === 'bottom'
|
|
129
136
|
? textLines.length - 1
|
|
130
137
|
: lineAnchor === 'middle'
|
|
131
138
|
? (textLines.length - 1) * 0.5
|
|
132
139
|
: 0) *
|
|
133
|
-
computedFontSize *
|
|
140
|
+
(computedFontSize as number) *
|
|
134
141
|
lineHeight
|
|
135
142
|
)}) rotate({rotate})"
|
|
136
143
|
>{#each textLines as line, l (l)}<tspan
|
|
137
144
|
x="0"
|
|
138
|
-
dy={l ? computedFontSize * lineHeight : 0}
|
|
145
|
+
dy={l ? (computedFontSize as number) * lineHeight : 0}
|
|
139
146
|
class={styleClass}
|
|
140
147
|
{style}>{line}</tspan
|
|
141
148
|
>{/each}{#if title}<title>{title}</title>{/if}</text>
|
|
@@ -144,7 +151,7 @@
|
|
|
144
151
|
<text
|
|
145
152
|
class={[textClassName, styleClass]}
|
|
146
153
|
dominant-baseline={LINE_ANCHOR[lineAnchor]}
|
|
147
|
-
transform="translate({Math.round(x)},{Math.round(y)}) rotate({rotate})"
|
|
154
|
+
transform="translate({Math.round(x ?? 0)},{Math.round(y ?? 0)}) rotate({rotate})"
|
|
148
155
|
{style}
|
|
149
156
|
>{textLines[0]}{#if title}<title>{title}</title>{/if}</text>
|
|
150
157
|
{/if}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ComponentProps } from 'svelte';
|
|
2
|
-
import type { ScaledDataRecord, UsedScales } from '../../index.js';
|
|
2
|
+
import type { ScaledDataRecord, UsedScales } from '../../types/index.js';
|
|
3
3
|
import type Text from '../Text.svelte';
|
|
4
4
|
type $$ComponentProps = {
|
|
5
5
|
textLines: string[];
|
|
@@ -31,7 +31,7 @@ Helper class for rendering Cell, Bar and Rect marks in canvas
|
|
|
31
31
|
} from '../../types/index.js';
|
|
32
32
|
import type { BorderRadius } from '../../types/mark.js';
|
|
33
33
|
import { resolveProp, resolveScaledStyleProps } from '../../helpers/resolve.js';
|
|
34
|
-
import { roundedRect } from '../../helpers/roundedRect';
|
|
34
|
+
import { roundedRect } from '../../helpers/roundedRect.js';
|
|
35
35
|
import type { Attachment } from 'svelte/attachments';
|
|
36
36
|
import { devicePixelRatio } from 'svelte/reactivity/window';
|
|
37
37
|
import CanvasLayer from './CanvasLayer.svelte';
|
|
@@ -70,7 +70,8 @@ Helper class for rendering Cell, Bar and Rect marks in canvas
|
|
|
70
70
|
return value == null ? 1 : +value;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
const render: Attachment = (
|
|
73
|
+
const render: Attachment = (canvasEl: Element) => {
|
|
74
|
+
const canvas = canvasEl as HTMLCanvasElement;
|
|
74
75
|
const context = canvas.getContext('2d');
|
|
75
76
|
|
|
76
77
|
$effect(() => {
|
|
@@ -93,27 +94,31 @@ Helper class for rendering Cell, Bar and Rect marks in canvas
|
|
|
93
94
|
const miny = Math.min(y1, y2);
|
|
94
95
|
const maxy = Math.max(y1, y2);
|
|
95
96
|
|
|
96
|
-
const inset =
|
|
97
|
-
const insetLeft =
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
97
|
+
const inset = resolveProp(options.inset, datum.datum, 0) ?? 0;
|
|
98
|
+
const insetLeft =
|
|
99
|
+
resolveProp(
|
|
100
|
+
options.insetLeft,
|
|
101
|
+
datum.datum,
|
|
102
|
+
useInsetAsFallbackHorizontally ? inset : 0
|
|
103
|
+
) ?? 0;
|
|
104
|
+
const insetRight =
|
|
105
|
+
resolveProp(
|
|
106
|
+
options.insetRight,
|
|
107
|
+
datum.datum,
|
|
108
|
+
useInsetAsFallbackHorizontally ? inset : 0
|
|
109
|
+
) ?? 0;
|
|
110
|
+
const insetTop =
|
|
111
|
+
resolveProp(
|
|
112
|
+
options.insetTop,
|
|
113
|
+
datum.datum,
|
|
114
|
+
useInsetAsFallbackVertically ? inset : 0
|
|
115
|
+
) ?? 0;
|
|
116
|
+
const insetBottom =
|
|
117
|
+
resolveProp(
|
|
118
|
+
options.insetBottom,
|
|
119
|
+
datum.datum,
|
|
120
|
+
useInsetAsFallbackVertically ? inset : 0
|
|
121
|
+
) ?? 0;
|
|
117
122
|
|
|
118
123
|
const rectX = minx + insetLeft;
|
|
119
124
|
const rectY = miny + insetBottom;
|
|
@@ -135,17 +140,17 @@ Helper class for rendering Cell, Bar and Rect marks in canvas
|
|
|
135
140
|
usedScales,
|
|
136
141
|
plot,
|
|
137
142
|
defaultColorProp
|
|
138
|
-
);
|
|
143
|
+
) as { fill: string; stroke: string } & Record<string, unknown>;
|
|
139
144
|
|
|
140
145
|
const opacity = maybeOpacity(restStyles['opacity']);
|
|
141
146
|
const fillOpacity = maybeOpacity(restStyles['fill-opacity']);
|
|
142
147
|
const strokeOpacity = maybeOpacity(restStyles['stroke-opacity']);
|
|
143
148
|
|
|
144
149
|
if (typeof fill === 'string') {
|
|
145
|
-
fill = resolveColor(fill, canvas);
|
|
150
|
+
fill = resolveColor(fill, canvas) as string;
|
|
146
151
|
}
|
|
147
152
|
if (typeof stroke === 'string') {
|
|
148
|
-
stroke = resolveColor(stroke, canvas);
|
|
153
|
+
stroke = resolveColor(stroke, canvas) as string;
|
|
149
154
|
}
|
|
150
155
|
|
|
151
156
|
if (stroke && stroke !== 'none') {
|
|
@@ -26,8 +26,8 @@ Helper component for rendering rectangular marks in SVG
|
|
|
26
26
|
fallbackStyle?: 'fill' | 'stroke';
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
import { resolveProp, resolveStyles } from '../../helpers/resolve';
|
|
30
|
-
import { roundedRect } from '../../helpers/roundedRect';
|
|
29
|
+
import { resolveProp, resolveStyles } from '../../helpers/resolve.js';
|
|
30
|
+
import { roundedRect } from '../../helpers/roundedRect.js';
|
|
31
31
|
import { addEventHandlers } from './events.js';
|
|
32
32
|
import Anchor from './Anchor.svelte';
|
|
33
33
|
import type { BaseMarkProps, BaseRectMarkProps, BorderRadius } from '../../types/mark.js';
|