@rokkit/chart 1.3.7 → 1.3.9
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/AnimatedPlot.svelte +26 -8
- package/dist/AnimatedPlot.svelte.d.ts +5 -0
- package/dist/Chart.svelte +51 -65
- package/dist/FacetPlot.svelte +1 -1
- package/dist/Plot/Axis.svelte +19 -10
- package/dist/Plot/Root.svelte +67 -46
- package/dist/Plot/Root.svelte.d.ts +29 -2
- package/dist/Plot/Timeline.svelte +39 -13
- package/dist/Plot/index.d.ts +5 -5
- package/dist/Plot/index.js +5 -5
- package/dist/Plot.svelte +95 -178
- package/dist/Plot.svelte.d.ts +4 -0
- package/dist/PlotState.svelte.d.ts +29 -1
- package/dist/PlotState.svelte.js +163 -19
- package/dist/PlotSurface.svelte +162 -0
- package/dist/PlotSurface.svelte.d.ts +25 -0
- package/dist/charts/AreaChart.svelte +12 -2
- package/dist/charts/AreaChart.svelte.d.ts +6 -0
- package/dist/charts/BarChart.svelte +40 -4
- package/dist/charts/BarChart.svelte.d.ts +15 -1
- package/dist/charts/BoxPlot.svelte +7 -3
- package/dist/charts/BoxPlot.svelte.d.ts +2 -0
- package/dist/charts/BubbleChart.svelte +37 -4
- package/dist/charts/BubbleChart.svelte.d.ts +12 -1
- package/dist/charts/LineChart.svelte +4 -2
- package/dist/charts/LineChart.svelte.d.ts +1 -0
- package/dist/charts/PieChart.svelte +5 -3
- package/dist/charts/PieChart.svelte.d.ts +1 -0
- package/dist/charts/ScatterPlot.svelte +35 -4
- package/dist/charts/ScatterPlot.svelte.d.ts +11 -1
- package/dist/charts/ViolinPlot.svelte +7 -3
- package/dist/charts/ViolinPlot.svelte.d.ts +2 -0
- package/dist/examples/BarChartExample.svelte +1 -1
- package/dist/geoms/Arc.svelte +21 -54
- package/dist/geoms/Arc.svelte.d.ts +4 -4
- package/dist/geoms/Area.svelte +45 -44
- package/dist/geoms/Area.svelte.d.ts +8 -1
- package/dist/geoms/Bar.svelte +33 -45
- package/dist/geoms/Bar.svelte.d.ts +9 -0
- package/dist/geoms/Box.svelte +103 -61
- package/dist/geoms/Box.svelte.d.ts +12 -3
- package/dist/geoms/Candlestick.svelte +26 -75
- package/dist/geoms/Candlestick.svelte.d.ts +2 -0
- package/dist/geoms/Heatmap.svelte +21 -66
- package/dist/geoms/Heatmap.svelte.d.ts +2 -0
- package/dist/geoms/Hexbin.svelte +20 -100
- package/dist/geoms/Hexbin.svelte.d.ts +2 -0
- package/dist/geoms/Jitter.svelte +67 -0
- package/dist/geoms/Jitter.svelte.d.ts +17 -0
- package/dist/geoms/Line.svelte +27 -31
- package/dist/geoms/Line.svelte.d.ts +5 -0
- package/dist/geoms/Point.svelte +31 -60
- package/dist/geoms/Point.svelte.d.ts +5 -1
- package/dist/geoms/Ribbon.svelte +30 -124
- package/dist/geoms/Ribbon.svelte.d.ts +2 -0
- package/dist/geoms/Rule.svelte +117 -0
- package/dist/geoms/Rule.svelte.d.ts +19 -0
- package/dist/geoms/Violin.svelte +36 -31
- package/dist/geoms/Violin.svelte.d.ts +10 -3
- package/dist/geoms/Waterfall.svelte +25 -79
- package/dist/geoms/Waterfall.svelte.d.ts +2 -0
- package/dist/geoms/lib/GeomState.svelte.d.ts +51 -0
- package/dist/geoms/lib/GeomState.svelte.js +79 -0
- package/dist/geoms/lib/aesthetics.d.ts +36 -0
- package/dist/geoms/lib/aesthetics.js +45 -0
- package/dist/geoms/lib/areas.d.ts +6 -2
- package/dist/geoms/lib/areas.js +20 -12
- package/dist/geoms/lib/bars.d.ts +18 -3
- package/dist/geoms/lib/bars.js +80 -101
- package/dist/geoms/lib/marks/arc.d.ts +24 -0
- package/dist/geoms/lib/marks/arc.js +28 -0
- package/dist/geoms/lib/marks/area.d.ts +23 -0
- package/dist/geoms/lib/marks/area.js +38 -0
- package/dist/geoms/lib/marks/bar.d.ts +16 -0
- package/dist/geoms/lib/marks/bar.js +43 -0
- package/dist/geoms/lib/marks/box.d.ts +14 -0
- package/dist/geoms/lib/marks/box.js +30 -0
- package/dist/geoms/lib/marks/candlestick.d.ts +27 -0
- package/dist/geoms/lib/marks/candlestick.js +52 -0
- package/dist/geoms/lib/marks/heatmap.d.ts +24 -0
- package/dist/geoms/lib/marks/heatmap.js +41 -0
- package/dist/geoms/lib/marks/hexbin.d.ts +29 -0
- package/dist/geoms/lib/marks/hexbin.js +62 -0
- package/dist/geoms/lib/marks/jitter.d.ts +21 -0
- package/dist/geoms/lib/marks/jitter.js +36 -0
- package/dist/geoms/lib/marks/line.d.ts +26 -0
- package/dist/geoms/lib/marks/line.js +25 -0
- package/dist/geoms/lib/marks/point.d.ts +25 -0
- package/dist/geoms/lib/marks/point.js +58 -0
- package/dist/geoms/lib/marks/ribbon.d.ts +31 -0
- package/dist/geoms/lib/marks/ribbon.js +77 -0
- package/dist/geoms/lib/marks/violin.d.ts +13 -0
- package/dist/geoms/lib/marks/violin.js +31 -0
- package/dist/geoms/lib/marks/waterfall.d.ts +25 -0
- package/dist/geoms/lib/marks/waterfall.js +58 -0
- package/dist/index.d.ts +25 -12
- package/dist/index.js +26 -13
- package/dist/lib/brewing/marks/arcs.js +7 -1
- package/dist/lib/brewing/marks/boxes.d.ts +11 -2
- package/dist/lib/brewing/marks/boxes.js +32 -11
- package/dist/lib/brewing/marks/lines.d.ts +4 -1
- package/dist/lib/brewing/marks/lines.js +18 -15
- package/dist/lib/brewing/marks/swarm.d.ts +32 -0
- package/dist/lib/brewing/marks/swarm.js +125 -0
- package/dist/lib/brewing/marks/violins.d.ts +4 -20
- package/dist/lib/brewing/marks/violins.js +41 -25
- package/dist/lib/brewing/stats.d.ts +3 -1
- package/dist/lib/brewing/stats.js +28 -11
- package/dist/lib/plot/scales.js +12 -7
- package/dist/lib/plot/types.d.ts +9 -1
- package/dist/lib/plot/types.js +3 -1
- package/dist/lib/preset.d.ts +11 -1
- package/dist/lib/preset.js +16 -4
- package/package.json +1 -1
- package/dist/Plot/Arc.svelte +0 -30
- package/dist/Plot/Arc.svelte.d.ts +0 -18
- package/dist/Plot/Area.svelte +0 -54
- package/dist/Plot/Area.svelte.d.ts +0 -14
- package/dist/Plot/Bar.svelte +0 -69
- package/dist/Plot/Bar.svelte.d.ts +0 -11
- package/dist/Plot/Line.svelte +0 -54
- package/dist/Plot/Line.svelte.d.ts +0 -13
- package/dist/Plot/Point.svelte +0 -58
- package/dist/Plot/Point.svelte.d.ts +0 -13
- package/dist/lib/brewer.d.ts +0 -9
- package/dist/lib/brewer.js +0 -25
- package/dist/lib/brewing/BoxBrewer.svelte.d.ts +0 -8
- package/dist/lib/brewing/BoxBrewer.svelte.js +0 -14
- package/dist/lib/brewing/CartesianBrewer.svelte.d.ts +0 -8
- package/dist/lib/brewing/CartesianBrewer.svelte.js +0 -21
- package/dist/lib/brewing/PieBrewer.svelte.d.ts +0 -8
- package/dist/lib/brewing/PieBrewer.svelte.js +0 -14
- package/dist/lib/brewing/QuartileBrewer.svelte.d.ts +0 -9
- package/dist/lib/brewing/QuartileBrewer.svelte.js +0 -51
- package/dist/lib/brewing/ViolinBrewer.svelte.d.ts +0 -8
- package/dist/lib/brewing/ViolinBrewer.svelte.js +0 -14
- package/dist/lib/brewing/axes.svelte.d.ts +0 -66
- package/dist/lib/brewing/axes.svelte.js +0 -270
- package/dist/lib/brewing/bars.svelte.d.ts +0 -56
- package/dist/lib/brewing/bars.svelte.js +0 -201
- package/dist/lib/brewing/brewer.svelte.d.ts +0 -124
- package/dist/lib/brewing/brewer.svelte.js +0 -277
- package/dist/lib/brewing/dimensions.svelte.d.ts +0 -35
- package/dist/lib/brewing/dimensions.svelte.js +0 -56
- package/dist/lib/brewing/index.svelte.d.ts +0 -118
- package/dist/lib/brewing/index.svelte.js +0 -205
- package/dist/lib/brewing/legends.svelte.d.ts +0 -48
- package/dist/lib/brewing/legends.svelte.js +0 -137
- package/dist/lib/brewing/marks/areas.d.ts +0 -31
- package/dist/lib/brewing/marks/areas.js +0 -72
- package/dist/lib/brewing/marks/bars.d.ts +0 -1
- package/dist/lib/brewing/marks/bars.js +0 -49
- package/dist/lib/brewing/scales.svelte.d.ts +0 -24
- package/dist/lib/brewing/scales.svelte.js +0 -82
- package/dist/lib/context.d.ts +0 -13
- package/dist/lib/context.js +0 -131
- package/dist/lib/plot/chartProps.d.ts +0 -177
- package/dist/lib/plot/chartProps.js +0 -76
- package/dist/lib/scales.svelte.d.ts +0 -35
- package/dist/lib/scales.svelte.js +0 -151
- package/dist/lib/ticks.d.ts +0 -36
- package/dist/lib/ticks.js +0 -46
package/dist/Plot.svelte
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
2
|
+
import { getContext } from 'svelte'
|
|
3
3
|
import type { Snippet } from 'svelte'
|
|
4
|
-
import { PlotState } from './PlotState.svelte.js'
|
|
5
4
|
import { defaultPreset } from './lib/preset.js'
|
|
6
5
|
import type { PlotSpec, PlotHelpers } from './lib/plot/types.js'
|
|
6
|
+
import PlotSurface from './PlotSurface.svelte'
|
|
7
7
|
import Axis from './Plot/Axis.svelte'
|
|
8
8
|
import Grid from './Plot/Grid.svelte'
|
|
9
9
|
import Legend from './Plot/Legend.svelte'
|
|
10
10
|
import Tooltip from './Plot/Tooltip.svelte'
|
|
11
|
-
import DefinePatterns from './patterns/DefinePatterns.svelte'
|
|
12
11
|
import Bar from './geoms/Bar.svelte'
|
|
13
12
|
import Line from './geoms/Line.svelte'
|
|
14
13
|
import Area from './geoms/Area.svelte'
|
|
@@ -57,6 +56,10 @@
|
|
|
57
56
|
onselect?: (detail: unknown) => void
|
|
58
57
|
selectable?: boolean
|
|
59
58
|
selected?: Row[]
|
|
59
|
+
/** Animate marks on data/flip changes (opt-out for e.g. AnimatedPlot, which
|
|
60
|
+
* tweens its own frames). Enabled one frame after the width settles so the
|
|
61
|
+
* initial layout paints un-animated. Default `true`. */
|
|
62
|
+
animate?: boolean
|
|
60
63
|
children?: Snippet
|
|
61
64
|
}
|
|
62
65
|
|
|
@@ -66,7 +69,7 @@
|
|
|
66
69
|
helpers = {},
|
|
67
70
|
width = 600,
|
|
68
71
|
height = 400,
|
|
69
|
-
mode =
|
|
72
|
+
mode = undefined,
|
|
70
73
|
grid = true,
|
|
71
74
|
axes = true,
|
|
72
75
|
margin = undefined,
|
|
@@ -88,29 +91,13 @@
|
|
|
88
91
|
onselect = undefined,
|
|
89
92
|
selectable = false,
|
|
90
93
|
selected = $bindable([]),
|
|
94
|
+
animate = true,
|
|
91
95
|
children
|
|
92
96
|
}: Props = $props()
|
|
93
97
|
|
|
94
98
|
const chartPresetCtx = getContext<ChartPresetCtx | undefined>('chart-preset')
|
|
95
99
|
const chartPreset = $derived(chartPresetCtx?.current ?? defaultPreset)
|
|
96
100
|
|
|
97
|
-
// Responsive width: observe container and use actual pixel width for scale calculations
|
|
98
|
-
let svgEl = $state<SVGSVGElement | null>(null)
|
|
99
|
-
let containerEl = $state<HTMLDivElement | null>(null)
|
|
100
|
-
let observedWidth = $state(0)
|
|
101
|
-
|
|
102
|
-
$effect(() => {
|
|
103
|
-
if (!containerEl) return
|
|
104
|
-
const ro = new ResizeObserver((entries) => {
|
|
105
|
-
const w = Math.floor(entries[0].contentRect.width)
|
|
106
|
-
if (w > 0) observedWidth = w
|
|
107
|
-
})
|
|
108
|
-
ro.observe(containerEl)
|
|
109
|
-
return () => ro.disconnect()
|
|
110
|
-
})
|
|
111
|
-
|
|
112
|
-
const effectiveWidth = $derived(observedWidth > 0 ? observedWidth : (spec?.width ?? width))
|
|
113
|
-
const svgHeight = $derived(spec?.height ?? height)
|
|
114
101
|
const gridValue = $derived(spec?.grid ?? grid)
|
|
115
102
|
const showGrid = $derived(gridValue !== false)
|
|
116
103
|
const gridLines = $derived(
|
|
@@ -123,18 +110,22 @@
|
|
|
123
110
|
// Accessible data table — screen reader fallback
|
|
124
111
|
const tableData = $derived(spec?.data ?? data)
|
|
125
112
|
const tableColumns = $derived.by(() => {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
113
|
+
// Dedupe: a channel may repeat (e.g. x === color), and the table's keyed each
|
|
114
|
+
// requires unique column names.
|
|
115
|
+
const cols = [...new Set(
|
|
116
|
+
[spec?.x, spec?.y, spec?.color ?? spec?.fill].filter((c): c is string => Boolean(c))
|
|
117
|
+
)]
|
|
129
118
|
if (cols.length > 0) return cols
|
|
130
119
|
const first = tableData[0]
|
|
131
120
|
return first ? Object.keys(first) : []
|
|
132
121
|
})
|
|
133
122
|
|
|
123
|
+
// Config for the shared PlotSurface (which owns PlotState, the responsive width, context,
|
|
124
|
+
// animation, patterns, and zoom). `width` is the fallback — PlotSurface observes the container.
|
|
134
125
|
function buildPlotConfig() {
|
|
135
126
|
return {
|
|
136
127
|
data: spec?.data ?? data,
|
|
137
|
-
width:
|
|
128
|
+
width: spec?.width ?? width,
|
|
138
129
|
height: spec?.height ?? height,
|
|
139
130
|
mode,
|
|
140
131
|
margin,
|
|
@@ -148,60 +139,14 @@
|
|
|
148
139
|
colorScheme: spec?.colorScheme,
|
|
149
140
|
colorMidpoint: spec?.colorMidpoint,
|
|
150
141
|
orientation: spec?.orientation,
|
|
142
|
+
sort: spec?.sort,
|
|
143
|
+
continuousCategory: spec?.continuousCategory,
|
|
151
144
|
chartPreset,
|
|
152
145
|
onselect,
|
|
153
146
|
selectable
|
|
154
147
|
}
|
|
155
148
|
}
|
|
156
149
|
|
|
157
|
-
// Create PlotState with initial values and provide as context.
|
|
158
|
-
// untrack() suppresses "captures initial value" warnings — intentional:
|
|
159
|
-
// the $effect below handles all subsequent reactive updates.
|
|
160
|
-
const plotState = untrack(() => new PlotState(buildPlotConfig()))
|
|
161
|
-
setContext('plot-state', plotState)
|
|
162
|
-
|
|
163
|
-
// Keep state in sync when reactive config changes
|
|
164
|
-
$effect(() => {
|
|
165
|
-
plotState.update(buildPlotConfig())
|
|
166
|
-
})
|
|
167
|
-
|
|
168
|
-
// external control → state
|
|
169
|
-
$effect(() => {
|
|
170
|
-
plotState.setSelected(selected)
|
|
171
|
-
})
|
|
172
|
-
// clicks (state) → prop, guarded to avoid an update loop
|
|
173
|
-
$effect(() => {
|
|
174
|
-
const rows = plotState.selectedRows
|
|
175
|
-
const same = rows.length === selected.length && rows.every((r, i) => r === selected[i])
|
|
176
|
-
if (!same) selected = rows
|
|
177
|
-
})
|
|
178
|
-
|
|
179
|
-
$effect(() => {
|
|
180
|
-
if (!zoom || !svgEl) return
|
|
181
|
-
// d3-zoom/d3-selection are client-only; load them dynamically so they are
|
|
182
|
-
// not bundled into (and tree-shaken-as-unused from) the SSR/main bundle.
|
|
183
|
-
let cancelled = false
|
|
184
|
-
let detach: (() => void) | undefined
|
|
185
|
-
Promise.all([import('d3-zoom'), import('d3-selection')]).then(
|
|
186
|
-
([{ zoom: d3Zoom }, { select }]) => {
|
|
187
|
-
if (cancelled || !svgEl) return
|
|
188
|
-
const zoomBehavior = d3Zoom<SVGSVGElement, unknown>()
|
|
189
|
-
.scaleExtent([1, 8])
|
|
190
|
-
.on('zoom', (event) => {
|
|
191
|
-
plotState.applyZoom(event.transform)
|
|
192
|
-
})
|
|
193
|
-
const sel = select(svgEl)
|
|
194
|
-
sel.call(zoomBehavior)
|
|
195
|
-
detach = () => sel.on('.zoom', null)
|
|
196
|
-
}
|
|
197
|
-
)
|
|
198
|
-
return () => {
|
|
199
|
-
cancelled = true
|
|
200
|
-
detach?.()
|
|
201
|
-
plotState.resetZoom()
|
|
202
|
-
}
|
|
203
|
-
})
|
|
204
|
-
|
|
205
150
|
// Geoms from spec (spec-driven API)
|
|
206
151
|
const specGeoms = $derived(spec?.geoms ?? [])
|
|
207
152
|
|
|
@@ -229,111 +174,100 @@
|
|
|
229
174
|
}
|
|
230
175
|
</script>
|
|
231
176
|
|
|
232
|
-
<div class="plot-root"
|
|
177
|
+
<div class="plot-root">
|
|
233
178
|
{#if chartTitle}
|
|
234
179
|
<div class="plot-title" data-plot-title>{chartTitle}</div>
|
|
235
180
|
{/if}
|
|
236
181
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
182
|
+
<!-- The shared root shell (PlotState, responsive width, context, animation, patterns, zoom).
|
|
183
|
+
The batteries below (grid/axes/geoms/overlays) render inside its canvas via context. -->
|
|
184
|
+
<PlotSurface
|
|
185
|
+
config={buildPlotConfig()}
|
|
186
|
+
{animate}
|
|
187
|
+
{zoom}
|
|
188
|
+
ariaLabel={chartTitle || 'Chart visualization'}
|
|
189
|
+
summary={chartSummary}
|
|
190
|
+
bind:selected
|
|
245
191
|
>
|
|
246
|
-
|
|
247
|
-
|
|
192
|
+
<!-- Grid (behind everything) -->
|
|
193
|
+
{#if showGrid}
|
|
194
|
+
<Grid lines={gridLines} {xTicks} {yTicks} />
|
|
248
195
|
{/if}
|
|
249
|
-
<!-- SVG pattern defs -->
|
|
250
|
-
<DefinePatterns />
|
|
251
196
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
{#if
|
|
259
|
-
<
|
|
197
|
+
<!-- Declarative children (geom components) -->
|
|
198
|
+
{@render children?.()}
|
|
199
|
+
|
|
200
|
+
<!-- Spec-driven geoms -->
|
|
201
|
+
{#each specGeoms as geomSpec (geomSpec.type)}
|
|
202
|
+
{@const GeomComponent = resolveGeomComponent(geomSpec.type)}
|
|
203
|
+
{#if GeomComponent}
|
|
204
|
+
<GeomComponent
|
|
205
|
+
x={geomSpec.x ?? spec?.x}
|
|
206
|
+
y={geomSpec.y ?? spec?.y}
|
|
207
|
+
color={geomSpec.color ?? spec?.color}
|
|
208
|
+
fill={geomSpec.fill ?? spec?.fill}
|
|
209
|
+
pattern={geomSpec.pattern}
|
|
210
|
+
symbol={geomSpec.symbol}
|
|
211
|
+
stat={geomSpec.stat}
|
|
212
|
+
label={geomSpec.label}
|
|
213
|
+
options={{
|
|
214
|
+
...(spec?.stack !== undefined ? { stack: spec.stack } : {}),
|
|
215
|
+
...(spec?.orientation !== undefined ? { orientation: spec.orientation } : {}),
|
|
216
|
+
...(geomSpec.options ?? {})
|
|
217
|
+
}}
|
|
218
|
+
/>
|
|
260
219
|
{/if}
|
|
220
|
+
{/each}
|
|
261
221
|
|
|
262
|
-
|
|
263
|
-
|
|
222
|
+
<!-- Axes -->
|
|
223
|
+
{#if axes}
|
|
224
|
+
<Axis type="x" label={spec?.labels?.[spec?.x ?? ''] ?? ''} format={xFormat} ticks={xTicks} {minorTicks} />
|
|
225
|
+
<Axis type="y" label={spec?.labels?.[spec?.y ?? ''] ?? ''} format={yFormat} ticks={yTicks} {minorTicks} />
|
|
226
|
+
{/if}
|
|
264
227
|
|
|
265
|
-
|
|
266
|
-
{
|
|
267
|
-
|
|
268
|
-
{#if GeomComponent}
|
|
269
|
-
<GeomComponent
|
|
270
|
-
x={geomSpec.x ?? spec?.x}
|
|
271
|
-
y={geomSpec.y ?? spec?.y}
|
|
272
|
-
color={geomSpec.color ?? spec?.color}
|
|
273
|
-
fill={geomSpec.fill ?? spec?.fill}
|
|
274
|
-
pattern={geomSpec.pattern}
|
|
275
|
-
symbol={geomSpec.symbol}
|
|
276
|
-
stat={geomSpec.stat}
|
|
277
|
-
label={geomSpec.label}
|
|
278
|
-
options={{
|
|
279
|
-
...(spec?.stack !== undefined ? { stack: spec.stack } : {}),
|
|
280
|
-
...(spec?.orientation !== undefined ? { orientation: spec.orientation } : {}),
|
|
281
|
-
...(geomSpec.options ?? {})
|
|
282
|
-
}}
|
|
283
|
-
/>
|
|
284
|
-
{/if}
|
|
285
|
-
{/each}
|
|
228
|
+
{#if trend !== null && trend !== undefined}
|
|
229
|
+
<Trend x={overlayX} y={overlayY} {trend} />
|
|
230
|
+
{/if}
|
|
286
231
|
|
|
287
|
-
|
|
288
|
-
{
|
|
289
|
-
|
|
290
|
-
<Axis type="y" label={spec?.labels?.[spec?.y ?? ''] ?? ''} format={yFormat} ticks={yTicks} {minorTicks} />
|
|
291
|
-
{/if}
|
|
232
|
+
{#if (highlight !== null && highlight !== undefined) || selectable || selected.length}
|
|
233
|
+
<Highlight x={overlayX} y={overlayY} {highlight} {label} />
|
|
234
|
+
{/if}
|
|
292
235
|
|
|
293
|
-
|
|
294
|
-
|
|
236
|
+
<!-- HTML overlays — outside the svg but INSIDE the plot-state context. -->
|
|
237
|
+
{#snippet overlay()}
|
|
238
|
+
{#if showLegend}
|
|
239
|
+
<Legend labels={spec?.labels ?? {}} />
|
|
295
240
|
{/if}
|
|
296
241
|
|
|
297
|
-
{#if
|
|
298
|
-
<
|
|
242
|
+
{#if tooltip}
|
|
243
|
+
<Tooltip {tooltip} />
|
|
299
244
|
{/if}
|
|
300
|
-
</g>
|
|
301
|
-
</svg>
|
|
302
245
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
<th scope="col">{col}</th>
|
|
323
|
-
{/each}
|
|
324
|
-
</tr>
|
|
325
|
-
</thead>
|
|
326
|
-
<tbody>
|
|
327
|
-
{#each tableData as row, i (i)}
|
|
328
|
-
<tr>
|
|
329
|
-
{#each tableColumns as col (col)}
|
|
330
|
-
<td>{row[col] ?? ''}</td>
|
|
246
|
+
{#if tableData.length > 0 && tableColumns.length > 0}
|
|
247
|
+
<table class="plot-sr-table" aria-label={chartTitle || 'Chart data'}>
|
|
248
|
+
{#if chartTitle}
|
|
249
|
+
<caption>{chartTitle}</caption>
|
|
250
|
+
{/if}
|
|
251
|
+
<thead>
|
|
252
|
+
<tr>
|
|
253
|
+
{#each tableColumns as col (col)}
|
|
254
|
+
<th scope="col">{col}</th>
|
|
255
|
+
{/each}
|
|
256
|
+
</tr>
|
|
257
|
+
</thead>
|
|
258
|
+
<tbody>
|
|
259
|
+
{#each tableData as row, i (i)}
|
|
260
|
+
<tr>
|
|
261
|
+
{#each tableColumns as col (col)}
|
|
262
|
+
<td>{row[col] ?? ''}</td>
|
|
263
|
+
{/each}
|
|
264
|
+
</tr>
|
|
331
265
|
{/each}
|
|
332
|
-
</
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
266
|
+
</tbody>
|
|
267
|
+
</table>
|
|
268
|
+
{/if}
|
|
269
|
+
{/snippet}
|
|
270
|
+
</PlotSurface>
|
|
337
271
|
</div>
|
|
338
272
|
|
|
339
273
|
<style>
|
|
@@ -343,23 +277,6 @@
|
|
|
343
277
|
height: auto;
|
|
344
278
|
}
|
|
345
279
|
|
|
346
|
-
[data-plot-root][data-mode='light'] {
|
|
347
|
-
color: rgba(var(--color-surface-700, 59, 65, 77), 1);
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
[data-plot-root][data-mode='dark'] {
|
|
351
|
-
color: rgba(var(--color-surface-200, 224, 224, 224), 1);
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
svg {
|
|
355
|
-
display: block;
|
|
356
|
-
overflow: visible;
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
.plot-canvas {
|
|
360
|
-
pointer-events: all;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
280
|
.plot-title {
|
|
364
281
|
font-size: 14px;
|
|
365
282
|
font-weight: 600;
|
package/dist/Plot.svelte.d.ts
CHANGED
|
@@ -39,6 +39,10 @@ type Props = {
|
|
|
39
39
|
onselect?: (detail: unknown) => void;
|
|
40
40
|
selectable?: boolean;
|
|
41
41
|
selected?: Row[];
|
|
42
|
+
/** Animate marks on data/flip changes (opt-out for e.g. AnimatedPlot, which
|
|
43
|
+
* tweens its own frames). Enabled one frame after the width settles so the
|
|
44
|
+
* initial layout paints un-animated. Default `true`. */
|
|
45
|
+
animate?: boolean;
|
|
42
46
|
children?: Snippet;
|
|
43
47
|
};
|
|
44
48
|
declare const Plot: import("svelte").Component<Props, {}, "selected">;
|
|
@@ -21,6 +21,7 @@ export class PlotState {
|
|
|
21
21
|
patterns: Map<unknown, string> | SvelteMap<any, any>;
|
|
22
22
|
symbols: Map<unknown, string> | SvelteMap<any, any>;
|
|
23
23
|
colorField: any;
|
|
24
|
+
fillField: any;
|
|
24
25
|
patternField: any;
|
|
25
26
|
symbolField: any;
|
|
26
27
|
geomTypes: SvelteSet<any>;
|
|
@@ -41,6 +42,23 @@ export class PlotState {
|
|
|
41
42
|
symbols: any;
|
|
42
43
|
};
|
|
43
44
|
get data(): any[];
|
|
45
|
+
/** @returns {{ x?: string, y?: string, color?: string, fill?: string, pattern?: string, symbol?: string }} */
|
|
46
|
+
get channels(): {
|
|
47
|
+
x?: string;
|
|
48
|
+
y?: string;
|
|
49
|
+
color?: string;
|
|
50
|
+
fill?: string;
|
|
51
|
+
pattern?: string;
|
|
52
|
+
symbol?: string;
|
|
53
|
+
};
|
|
54
|
+
get isFlipped(): boolean;
|
|
55
|
+
get continuousCategory(): boolean;
|
|
56
|
+
place(u: any, v: any): {
|
|
57
|
+
x: any;
|
|
58
|
+
y: any;
|
|
59
|
+
};
|
|
60
|
+
get bandScale(): any;
|
|
61
|
+
get valueScale(): any;
|
|
44
62
|
get margin(): {
|
|
45
63
|
top: number;
|
|
46
64
|
right: number;
|
|
@@ -64,9 +82,19 @@ export class PlotState {
|
|
|
64
82
|
};
|
|
65
83
|
opacity: {
|
|
66
84
|
area: number;
|
|
85
|
+
bar: number;
|
|
86
|
+
line: number;
|
|
87
|
+
point: number;
|
|
88
|
+
arc: number;
|
|
67
89
|
box: number;
|
|
68
90
|
violin: number;
|
|
69
|
-
|
|
91
|
+
jitter: number;
|
|
92
|
+
heatmap: number;
|
|
93
|
+
candlestick: number;
|
|
94
|
+
hexbin: number;
|
|
95
|
+
ribbon: number;
|
|
96
|
+
waterfall: number;
|
|
97
|
+
rule: number;
|
|
70
98
|
};
|
|
71
99
|
patterns: string[];
|
|
72
100
|
symbols: string[];
|