Skip to content

Commit 0e6865b

Browse files
authored
feat(core): add interpolate option to viewport transforming functions (#1851)
* chore(core): add d3-interpolate to deps Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> * feat(core): add interpolate option to viewport transforming functions Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> * chore(changeset): add * feat(core): add interpolate option to viewport transforming functions Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> --------- Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com>
1 parent f09952d commit 0e6865b

File tree

5 files changed

+25
-10
lines changed

5 files changed

+25
-10
lines changed

.changeset/violet-countries-act.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@vue-flow/core": minor
3+
---
4+
5+
Add interpolate option to viewport transforming functions

packages/core/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
"dependencies": {
7474
"@vueuse/core": "^10.5.0",
7575
"d3-drag": "^3.0.0",
76+
"d3-interpolate": "^3.0.1",
7677
"d3-selection": "^3.0.0",
7778
"d3-zoom": "^3.0.0"
7879
},
@@ -81,6 +82,7 @@
8182
"@tooling/eslint-config": "workspace:*",
8283
"@tooling/tsconfig": "workspace:*",
8384
"@types/d3-drag": "^3.0.7",
85+
"@types/d3-interpolate": "^3.0.4",
8486
"@types/d3-selection": "^3.0.11",
8587
"@types/d3-transition": "^3.0.9",
8688
"@types/d3-zoom": "^3.0.8",

packages/core/src/composables/useViewportHelper.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { interpolate, interpolateZoom } from 'd3-interpolate'
12
import { zoomIdentity } from 'd3-zoom'
23
import { computed } from 'vue'
34
import type { D3Selection, GraphNode, Project, State, TransitionOptions, ViewportFunctions } from '../types'
@@ -48,7 +49,7 @@ export function useViewportHelper(state: State) {
4849
function zoom(scale: number, transitionOptions?: TransitionOptions) {
4950
return new Promise<boolean>((resolve) => {
5051
if (state.d3Selection && state.d3Zoom) {
51-
state.d3Zoom.scaleBy(
52+
state.d3Zoom.interpolate(transitionOptions?.interpolate === 'linear' ? interpolate : interpolateZoom).scaleBy(
5253
getD3Transition(state.d3Selection, transitionOptions?.duration, transitionOptions?.ease, () => {
5354
resolve(true)
5455
}),
@@ -68,7 +69,7 @@ export function useViewportHelper(state: State) {
6869
const nextTransform = zoomIdentity.translate(-clampedX, -clampedY).scale(zoom)
6970

7071
if (state.d3Selection && state.d3Zoom) {
71-
state.d3Zoom.transform(
72+
state.d3Zoom?.interpolate(transitionOptions?.interpolate === 'linear' ? interpolate : interpolateZoom).transform(
7273
getD3Transition(state.d3Selection, transitionOptions?.duration, transitionOptions?.ease, () => {
7374
resolve(true)
7475
}),
@@ -99,7 +100,7 @@ export function useViewportHelper(state: State) {
99100
zoomTo: (zoomLevel, options) => {
100101
return new Promise<boolean>((resolve) => {
101102
if (state.d3Selection && state.d3Zoom) {
102-
state.d3Zoom.scaleTo(
103+
state.d3Zoom.interpolate(options?.interpolate === 'linear' ? interpolate : interpolateZoom).scaleTo(
103104
getD3Transition(state.d3Selection, options?.duration, options?.ease, () => {
104105
resolve(true)
105106
}),

packages/core/src/types/zoom.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export enum PanOnScrollMode {
1919
export interface TransitionOptions {
2020
duration?: number
2121
ease?: (t: number) => number
22+
interpolate?: 'smooth' | 'linear'
2223
}
2324

2425
export type FitViewParams = {

pnpm-lock.yaml

Lines changed: 13 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)