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>
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"@vue-flow/core": minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Add interpolate option to viewport transforming functions
|
||||||
@@ -73,6 +73,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vueuse/core": "^10.5.0",
|
"@vueuse/core": "^10.5.0",
|
||||||
"d3-drag": "^3.0.0",
|
"d3-drag": "^3.0.0",
|
||||||
|
"d3-interpolate": "^3.0.1",
|
||||||
"d3-selection": "^3.0.0",
|
"d3-selection": "^3.0.0",
|
||||||
"d3-zoom": "^3.0.0"
|
"d3-zoom": "^3.0.0"
|
||||||
},
|
},
|
||||||
@@ -81,6 +82,7 @@
|
|||||||
"@tooling/eslint-config": "workspace:*",
|
"@tooling/eslint-config": "workspace:*",
|
||||||
"@tooling/tsconfig": "workspace:*",
|
"@tooling/tsconfig": "workspace:*",
|
||||||
"@types/d3-drag": "^3.0.7",
|
"@types/d3-drag": "^3.0.7",
|
||||||
|
"@types/d3-interpolate": "^3.0.4",
|
||||||
"@types/d3-selection": "^3.0.11",
|
"@types/d3-selection": "^3.0.11",
|
||||||
"@types/d3-transition": "^3.0.9",
|
"@types/d3-transition": "^3.0.9",
|
||||||
"@types/d3-zoom": "^3.0.8",
|
"@types/d3-zoom": "^3.0.8",
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { interpolate, interpolateZoom } from 'd3-interpolate'
|
||||||
import { zoomIdentity } from 'd3-zoom'
|
import { zoomIdentity } from 'd3-zoom'
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
import type { D3Selection, GraphNode, Project, State, TransitionOptions, ViewportFunctions } from '../types'
|
import type { D3Selection, GraphNode, Project, State, TransitionOptions, ViewportFunctions } from '../types'
|
||||||
@@ -48,7 +49,7 @@ export function useViewportHelper(state: State) {
|
|||||||
function zoom(scale: number, transitionOptions?: TransitionOptions) {
|
function zoom(scale: number, transitionOptions?: TransitionOptions) {
|
||||||
return new Promise<boolean>((resolve) => {
|
return new Promise<boolean>((resolve) => {
|
||||||
if (state.d3Selection && state.d3Zoom) {
|
if (state.d3Selection && state.d3Zoom) {
|
||||||
state.d3Zoom.scaleBy(
|
state.d3Zoom.interpolate(transitionOptions?.interpolate === 'linear' ? interpolate : interpolateZoom).scaleBy(
|
||||||
getD3Transition(state.d3Selection, transitionOptions?.duration, transitionOptions?.ease, () => {
|
getD3Transition(state.d3Selection, transitionOptions?.duration, transitionOptions?.ease, () => {
|
||||||
resolve(true)
|
resolve(true)
|
||||||
}),
|
}),
|
||||||
@@ -68,7 +69,7 @@ export function useViewportHelper(state: State) {
|
|||||||
const nextTransform = zoomIdentity.translate(-clampedX, -clampedY).scale(zoom)
|
const nextTransform = zoomIdentity.translate(-clampedX, -clampedY).scale(zoom)
|
||||||
|
|
||||||
if (state.d3Selection && state.d3Zoom) {
|
if (state.d3Selection && state.d3Zoom) {
|
||||||
state.d3Zoom.transform(
|
state.d3Zoom?.interpolate(transitionOptions?.interpolate === 'linear' ? interpolate : interpolateZoom).transform(
|
||||||
getD3Transition(state.d3Selection, transitionOptions?.duration, transitionOptions?.ease, () => {
|
getD3Transition(state.d3Selection, transitionOptions?.duration, transitionOptions?.ease, () => {
|
||||||
resolve(true)
|
resolve(true)
|
||||||
}),
|
}),
|
||||||
@@ -99,7 +100,7 @@ export function useViewportHelper(state: State) {
|
|||||||
zoomTo: (zoomLevel, options) => {
|
zoomTo: (zoomLevel, options) => {
|
||||||
return new Promise<boolean>((resolve) => {
|
return new Promise<boolean>((resolve) => {
|
||||||
if (state.d3Selection && state.d3Zoom) {
|
if (state.d3Selection && state.d3Zoom) {
|
||||||
state.d3Zoom.scaleTo(
|
state.d3Zoom.interpolate(options?.interpolate === 'linear' ? interpolate : interpolateZoom).scaleTo(
|
||||||
getD3Transition(state.d3Selection, options?.duration, options?.ease, () => {
|
getD3Transition(state.d3Selection, options?.duration, options?.ease, () => {
|
||||||
resolve(true)
|
resolve(true)
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ export enum PanOnScrollMode {
|
|||||||
export interface TransitionOptions {
|
export interface TransitionOptions {
|
||||||
duration?: number
|
duration?: number
|
||||||
ease?: (t: number) => number
|
ease?: (t: number) => number
|
||||||
|
interpolate?: 'smooth' | 'linear'
|
||||||
}
|
}
|
||||||
|
|
||||||
export type FitViewParams = {
|
export type FitViewParams = {
|
||||||
|
|||||||
Generated
+13
-7
@@ -293,6 +293,9 @@ importers:
|
|||||||
d3-drag:
|
d3-drag:
|
||||||
specifier: ^3.0.0
|
specifier: ^3.0.0
|
||||||
version: 3.0.0
|
version: 3.0.0
|
||||||
|
d3-interpolate:
|
||||||
|
specifier: ^3.0.1
|
||||||
|
version: 3.0.1
|
||||||
d3-selection:
|
d3-selection:
|
||||||
specifier: ^3.0.0
|
specifier: ^3.0.0
|
||||||
version: 3.0.0
|
version: 3.0.0
|
||||||
@@ -315,6 +318,9 @@ importers:
|
|||||||
'@types/d3-drag':
|
'@types/d3-drag':
|
||||||
specifier: ^3.0.7
|
specifier: ^3.0.7
|
||||||
version: 3.0.7
|
version: 3.0.7
|
||||||
|
'@types/d3-interpolate':
|
||||||
|
specifier: ^3.0.4
|
||||||
|
version: 3.0.4
|
||||||
'@types/d3-selection':
|
'@types/d3-selection':
|
||||||
specifier: ^3.0.11
|
specifier: ^3.0.11
|
||||||
version: 3.0.11
|
version: 3.0.11
|
||||||
@@ -2206,8 +2212,8 @@ packages:
|
|||||||
'@types/d3-drag@3.0.7':
|
'@types/d3-drag@3.0.7':
|
||||||
resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==}
|
resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==}
|
||||||
|
|
||||||
'@types/d3-interpolate@3.0.2':
|
'@types/d3-interpolate@3.0.4':
|
||||||
resolution: {integrity: sha512-zAbCj9lTqW9J9PlF4FwnvEjXZUy75NQqPm7DMHZXuxCFTpuTrdK2NMYGQekf4hlasL78fCYOLu4EE3/tXElwow==}
|
resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==}
|
||||||
|
|
||||||
'@types/d3-selection@3.0.11':
|
'@types/d3-selection@3.0.11':
|
||||||
resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==}
|
resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==}
|
||||||
@@ -9563,7 +9569,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@types/d3-selection': 3.0.11
|
'@types/d3-selection': 3.0.11
|
||||||
|
|
||||||
'@types/d3-interpolate@3.0.2':
|
'@types/d3-interpolate@3.0.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/d3-color': 3.1.1
|
'@types/d3-color': 3.1.1
|
||||||
|
|
||||||
@@ -9577,12 +9583,12 @@ snapshots:
|
|||||||
|
|
||||||
'@types/d3-zoom@3.0.5':
|
'@types/d3-zoom@3.0.5':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/d3-interpolate': 3.0.2
|
'@types/d3-interpolate': 3.0.4
|
||||||
'@types/d3-selection': 3.0.11
|
'@types/d3-selection': 3.0.11
|
||||||
|
|
||||||
'@types/d3-zoom@3.0.8':
|
'@types/d3-zoom@3.0.8':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/d3-interpolate': 3.0.2
|
'@types/d3-interpolate': 3.0.4
|
||||||
'@types/d3-selection': 3.0.11
|
'@types/d3-selection': 3.0.11
|
||||||
|
|
||||||
'@types/estree@1.0.2': {}
|
'@types/estree@1.0.2': {}
|
||||||
@@ -9775,7 +9781,7 @@ snapshots:
|
|||||||
globby: 11.1.0
|
globby: 11.1.0
|
||||||
is-glob: 4.0.3
|
is-glob: 4.0.3
|
||||||
minimatch: 9.0.3
|
minimatch: 9.0.3
|
||||||
semver: 7.6.0
|
semver: 7.6.3
|
||||||
ts-api-utils: 1.0.3(typescript@5.4.5)
|
ts-api-utils: 1.0.3(typescript@5.4.5)
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
typescript: 5.4.5
|
typescript: 5.4.5
|
||||||
@@ -9806,7 +9812,7 @@ snapshots:
|
|||||||
'@typescript-eslint/types': 6.19.0
|
'@typescript-eslint/types': 6.19.0
|
||||||
'@typescript-eslint/typescript-estree': 6.19.0(typescript@5.4.5)
|
'@typescript-eslint/typescript-estree': 6.19.0(typescript@5.4.5)
|
||||||
eslint: 8.51.0
|
eslint: 8.51.0
|
||||||
semver: 7.6.0
|
semver: 7.6.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
- typescript
|
- typescript
|
||||||
|
|||||||
Reference in New Issue
Block a user