@fundar/data-chart-telling 0.0.36 → 0.0.37
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/index.d.ts +1 -0
- package/dist/layout/coordinates/CameraFit.svelte +111 -0
- package/dist/layout/coordinates/CameraFit.svelte.d.ts +15 -0
- package/dist/layout/coordinates/CoordinatesLayout.svelte +169 -95
- package/dist/layout/coordinates/CoordinatesLayout.svelte.d.ts +1 -1
- package/dist/layout/coordinates/camera.svelte.d.ts +17 -0
- package/dist/layout/coordinates/camera.svelte.js +106 -0
- package/dist/layout/coordinates/resolveCameraTarget.d.ts +14 -0
- package/dist/layout/coordinates/resolveCameraTarget.js +19 -0
- package/dist/layout/coordinates/zoom.svelte.d.ts +11 -15
- package/dist/layout/coordinates/zoom.svelte.js +15 -12
- package/dist/layout/plot/BasePlotLayout.svelte +312 -282
- package/dist/plots/line/Plot.svelte +6 -18
- package/dist/plots/line/ValueLabels.svelte +45 -82
- package/dist/plots/line/ValueLabels.svelte.d.ts +1 -1
- package/dist/types/layout/coordinates.d.ts +11 -5
- package/dist/types/plots/camera.d.ts +42 -0
- package/dist/types/plots/camera.js +1 -0
- package/package.json +1 -1
|
@@ -2,30 +2,33 @@ import { select } from 'd3-selection';
|
|
|
2
2
|
import { zoom as d3zoom, zoomIdentity } from 'd3-zoom';
|
|
3
3
|
/**
|
|
4
4
|
* Wires drag-pan + scroll-zoom onto a DOM node via d3-zoom, exposing the
|
|
5
|
-
* resulting transform as reactive Svelte state
|
|
6
|
-
* SVG `<g transform="translate(x,y) scale(k)">` wrapper
|
|
7
|
-
* underlying `d3-geo` projection is computed once by svelteplot and never
|
|
8
|
-
* recomputed per zoom tick.
|
|
5
|
+
* resulting transform as reactive Svelte state, applied by the caller as an
|
|
6
|
+
* SVG `<g transform="translate(x,y) scale(k)">` wrapper.
|
|
9
7
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
8
|
+
* `panEnabled`/`zoomEnabled` gate drag-translate and wheel/pinch-scale
|
|
9
|
+
* independently, as separate `.filter()`s on the same underlying instance.
|
|
10
|
+
*
|
|
11
|
+
* Limitations: hover/tooltip hit-testing doesn't compensate for an active
|
|
12
|
+
* transform. Touch pinch-to-zoom is gated by `panEnabled`, not `zoomEnabled`
|
|
13
|
+
* (d3-zoom can't distinguish a pinch from a one-finger drag until underway).
|
|
14
14
|
*/
|
|
15
15
|
export function createGeoZoom(args) {
|
|
16
16
|
let transform = $state({ x: 0, y: 0, k: 1 });
|
|
17
17
|
$effect(() => {
|
|
18
18
|
const el = args.node();
|
|
19
|
-
if (!args.
|
|
19
|
+
if ((!args.panEnabled() && !args.zoomEnabled()) || !el)
|
|
20
20
|
return;
|
|
21
21
|
const cfg = args.config();
|
|
22
22
|
const behavior = d3zoom()
|
|
23
23
|
.scaleExtent([cfg?.min ?? 1, cfg?.max ?? 8])
|
|
24
24
|
.filter((event) => {
|
|
25
|
-
|
|
25
|
+
const isWheel = event.type === 'wheel';
|
|
26
|
+
if (isWheel)
|
|
27
|
+
return args.zoomEnabled();
|
|
28
|
+
if (!args.panEnabled() || args.disableDrag?.())
|
|
26
29
|
return false;
|
|
27
30
|
// d3-zoom's own default filter, minus the part this replaces.
|
|
28
|
-
return
|
|
31
|
+
return !event.ctrlKey && !event.button;
|
|
29
32
|
})
|
|
30
33
|
.on('zoom', (event) => {
|
|
31
34
|
transform = { x: event.transform.x, y: event.transform.y, k: event.transform.k };
|
|
@@ -45,6 +48,6 @@ export function createGeoZoom(args) {
|
|
|
45
48
|
return {
|
|
46
49
|
get transform() {
|
|
47
50
|
return transform;
|
|
48
|
-
}
|
|
51
|
+
}
|
|
49
52
|
};
|
|
50
53
|
}
|