From 08e88cda6d4d746e8c30c7d84142fa08ebdecfc3 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:41:18 +0100 Subject: [PATCH 01/25] fix(core): add default handler when no handlers exist --- packages/core/src/utils/createExtendedEventHook.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/core/src/utils/createExtendedEventHook.ts b/packages/core/src/utils/createExtendedEventHook.ts index 44b1767d0..b88e54be7 100644 --- a/packages/core/src/utils/createExtendedEventHook.ts +++ b/packages/core/src/utils/createExtendedEventHook.ts @@ -33,7 +33,14 @@ export function createExtendedEventHook(defaultHandler?: (param: T) => } fns.add(fn) - const offFn = () => off(fn) + + const offFn = () => { + off(fn) + + if (defaultHandler && hasDefaultHandler) { + fns.add(defaultHandler) + } + } tryOnScopeDispose(offFn) From be15b5acbcb6ccd06107a5dc195cc9e0c35b211c Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:42:23 +0100 Subject: [PATCH 02/25] chore(changeset): add --- .changeset/gorgeous-hounds-fix.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/gorgeous-hounds-fix.md diff --git a/.changeset/gorgeous-hounds-fix.md b/.changeset/gorgeous-hounds-fix.md new file mode 100644 index 000000000..f9172889a --- /dev/null +++ b/.changeset/gorgeous-hounds-fix.md @@ -0,0 +1,5 @@ +--- +"@vue-flow/core": patch +--- + +Add default event handler when no handlers for a given event exist anymore From b1293b12cf68253db31801918040d97784d39a7b Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:55:34 +0100 Subject: [PATCH 03/25] fix(core): add fallback for connection-line type --- packages/core/src/components/ConnectionLine/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/components/ConnectionLine/index.ts b/packages/core/src/components/ConnectionLine/index.ts index 89bc8763c..56aa13963 100644 --- a/packages/core/src/components/ConnectionLine/index.ts +++ b/packages/core/src/components/ConnectionLine/index.ts @@ -91,7 +91,7 @@ const ConnectionLine = defineComponent({ return null } - const type = connectionLineType.value ?? connectionLineOptions.value.type + const type = connectionLineType.value ?? connectionLineOptions.value.type ?? ConnectionLineType.Bezier let dAttr = '' From 8f2513e41ffb01fdcf417a94a9d71936a831291f Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:55:53 +0100 Subject: [PATCH 04/25] fix(core): merge connection line styles --- packages/core/src/components/ConnectionLine/index.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/core/src/components/ConnectionLine/index.ts b/packages/core/src/components/ConnectionLine/index.ts index 56aa13963..c08637e22 100644 --- a/packages/core/src/components/ConnectionLine/index.ts +++ b/packages/core/src/components/ConnectionLine/index.ts @@ -145,7 +145,10 @@ const ConnectionLine = defineComponent({ : h('path', { 'd': dAttr, 'class': [connectionLineOptions.value.class, connectionStatus, 'vue-flow__connection-path'], - 'style': connectionLineStyle.value || connectionLineOptions.value.style, + 'style': { + ...connectionLineStyle.value, + ...connectionLineOptions.value.style, + }, 'marker-end': `url(#${getMarkerId(connectionLineOptions.value.markerEnd)})`, 'marker-start': `url(#${getMarkerId(connectionLineOptions.value.markerStart)})`, }), From d46ac3a52c55e96d2e1994a60407767cdd945118 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:56:30 +0100 Subject: [PATCH 05/25] chore(changeset): add --- .changeset/quick-hounds-wonder.md | 5 +++++ .changeset/wicked-ants-switch.md | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 .changeset/quick-hounds-wonder.md create mode 100644 .changeset/wicked-ants-switch.md diff --git a/.changeset/quick-hounds-wonder.md b/.changeset/quick-hounds-wonder.md new file mode 100644 index 000000000..5d246ad8b --- /dev/null +++ b/.changeset/quick-hounds-wonder.md @@ -0,0 +1,5 @@ +--- +"@vue-flow/core": patch +--- + +Merge connection line styles with options diff --git a/.changeset/wicked-ants-switch.md b/.changeset/wicked-ants-switch.md new file mode 100644 index 000000000..678840ad6 --- /dev/null +++ b/.changeset/wicked-ants-switch.md @@ -0,0 +1,5 @@ +--- +"@vue-flow/core": patch +--- + +Add fallback for connection line type (bezier as default) From 6d81959c4b4a64e2cc350ab30a0e504a8cf31c06 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:57:05 +0100 Subject: [PATCH 06/25] feat(core,handle): expose handler functions --- packages/core/src/components/Handle/Handle.vue | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/core/src/components/Handle/Handle.vue b/packages/core/src/components/Handle/Handle.vue index 5f59fbadf..e234dcc87 100644 --- a/packages/core/src/components/Handle/Handle.vue +++ b/packages/core/src/components/Handle/Handle.vue @@ -156,6 +156,11 @@ function onClick(event: MouseEvent) { handleClick(event) } } + +defineExpose({ + handleClick, + handlePointerDown, +}) From a9bb8d84dd42d3c1b21883d8bcdf17b0536e605d Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 11 Jan 2024 13:18:06 +0100 Subject: [PATCH 09/25] feat(core): add `useConnection` composable --- .../core/src/composables/useConnection.ts | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 packages/core/src/composables/useConnection.ts diff --git a/packages/core/src/composables/useConnection.ts b/packages/core/src/composables/useConnection.ts new file mode 100644 index 000000000..0b3a26f31 --- /dev/null +++ b/packages/core/src/composables/useConnection.ts @@ -0,0 +1,35 @@ +import type { VueFlowStore } from '../types' +import { useVueFlow } from './useVueFlow' + +export interface UseConnectionReturn { + startHandle: VueFlowStore['connectionStartHandle'] + endHandle: VueFlowStore['connectionEndHandle'] + status: VueFlowStore['connectionStatus'] + position: VueFlowStore['connectionPosition'] +} + +/** + * Hook for accessing the ongoing connection. + * + * @returns ongoing connection: startHandle, endHandle, status, position + */ +export function useConnection(): { + startHandle: VueFlowStore['connectionStartHandle'] + endHandle: VueFlowStore['connectionEndHandle'] + status: VueFlowStore['connectionStatus'] + position: VueFlowStore['connectionPosition'] | null +} { + const { + connectionStartHandle: startHandle, + connectionEndHandle: endHandle, + connectionStatus: status, + connectionPosition: position, + } = useVueFlow() + + return { + startHandle, + endHandle, + status, + position, + } +} From dd4cbe0c92121fc6039e5f43bdc6e5d1663b8069 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 11 Jan 2024 13:18:39 +0100 Subject: [PATCH 10/25] chore(changeset): add --- .changeset/swift-rockets-trade.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/swift-rockets-trade.md diff --git a/.changeset/swift-rockets-trade.md b/.changeset/swift-rockets-trade.md new file mode 100644 index 000000000..3c1daf54f --- /dev/null +++ b/.changeset/swift-rockets-trade.md @@ -0,0 +1,5 @@ +--- +"@vue-flow/core": minor +--- + +Add `useConnection` composable for easy access of current connection params From 64b8d9b8392d01bbe464c7af7de640744adcb3ed Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Mon, 15 Jan 2024 21:34:11 +0100 Subject: [PATCH 11/25] fix(core,connection-line): pass flow id to `getMarkerId` in connection line --- packages/core/src/components/ConnectionLine/index.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/core/src/components/ConnectionLine/index.ts b/packages/core/src/components/ConnectionLine/index.ts index c08637e22..b0615e9f1 100644 --- a/packages/core/src/components/ConnectionLine/index.ts +++ b/packages/core/src/components/ConnectionLine/index.ts @@ -19,6 +19,7 @@ const ConnectionLine = defineComponent({ compatConfig: { MODE: 3 }, setup() { const { + id, connectionMode, connectionStartHandle, connectionEndHandle, @@ -138,8 +139,8 @@ const ConnectionLine = defineComponent({ sourceHandle: fromHandle, targetNode, targetHandle: toHandle, - markerEnd: `url(#${getMarkerId(connectionLineOptions.value.markerEnd)})`, - markerStart: `url(#${getMarkerId(connectionLineOptions.value.markerStart)})`, + markerEnd: `url(#${getMarkerId(connectionLineOptions.value.markerEnd, id)})`, + markerStart: `url(#${getMarkerId(connectionLineOptions.value.markerStart, id)})`, connectionStatus: connectionStatus.value, }) : h('path', { @@ -149,8 +150,8 @@ const ConnectionLine = defineComponent({ ...connectionLineStyle.value, ...connectionLineOptions.value.style, }, - 'marker-end': `url(#${getMarkerId(connectionLineOptions.value.markerEnd)})`, - 'marker-start': `url(#${getMarkerId(connectionLineOptions.value.markerStart)})`, + 'marker-end': `url(#${getMarkerId(connectionLineOptions.value.markerEnd, id)})`, + 'marker-start': `url(#${getMarkerId(connectionLineOptions.value.markerStart, id)})`, }), ), ) From b5e77a43da76db0ee4cbc16d205e90ef84f2ed62 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Mon, 15 Jan 2024 21:34:37 +0100 Subject: [PATCH 12/25] chore(changeset): add --- .changeset/beige-trees-design.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/beige-trees-design.md diff --git a/.changeset/beige-trees-design.md b/.changeset/beige-trees-design.md new file mode 100644 index 000000000..1b71d5bb6 --- /dev/null +++ b/.changeset/beige-trees-design.md @@ -0,0 +1,5 @@ +--- +"@vue-flow/core": patch +--- + +Pass vueflow id to `getMarkerId` in connection line component From 640b9858a9f370749b03bd24ef55c74f8f1764dd Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Fri, 17 Feb 2023 16:58:06 +0100 Subject: [PATCH 13/25] refactor(core)!: update handle styles Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> --- packages/core/src/style.css | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/packages/core/src/style.css b/packages/core/src/style.css index 7f05e1e87..481a7b283 100644 --- a/packages/core/src/style.css +++ b/packages/core/src/style.css @@ -188,28 +188,27 @@ } &-bottom { - top: auto; left: 50%; - bottom: -4px; - transform: translate(-50%, 0); + bottom: 0; + transform: translate(-50%, 50%); } &-top { left: 50%; - top: -4px; - transform: translate(-50%, 0); + top: 0; + transform: translate(-50%, -50%); } &-left { top: 50%; - left: -4px; - transform: translate(0, -50%); + left: 0; + transform: translate(-50%, -50%); } &-right { - right: -4px; top: 50%; - transform: translate(0, -50%); + right: 0; + transform: translate(50%, -50%); } } From 106fc5c7d77900b5d572b26e7e557e5982b37e30 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Sun, 21 Jan 2024 12:32:53 +0100 Subject: [PATCH 14/25] revert(minimap): inherit attrs --- packages/minimap/src/MiniMap.vue | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/minimap/src/MiniMap.vue b/packages/minimap/src/MiniMap.vue index 26280d5e8..7992740b5 100644 --- a/packages/minimap/src/MiniMap.vue +++ b/packages/minimap/src/MiniMap.vue @@ -206,7 +206,6 @@ function onNodeMouseLeave(event: MouseEvent, node: GraphNode) { export default { name: 'MiniMap', compatConfig: { MODE: 3 }, - inheritAttrs: false, } @@ -214,7 +213,6 @@ export default { Date: Sun, 21 Jan 2024 12:34:19 +0100 Subject: [PATCH 15/25] chore(changeset): add --- .changeset/lazy-cherries-sparkle.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/lazy-cherries-sparkle.md diff --git a/.changeset/lazy-cherries-sparkle.md b/.changeset/lazy-cherries-sparkle.md new file mode 100644 index 000000000..34bd64dbb --- /dev/null +++ b/.changeset/lazy-cherries-sparkle.md @@ -0,0 +1,5 @@ +--- +"@vue-flow/minimap": minor +--- + +Inherit attrs in minimap From e5b16d4bad2077e9e11351424c53628274384ca9 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Sun, 21 Jan 2024 13:15:22 +0100 Subject: [PATCH 16/25] chore(tooling,deps-dev): update antfu eslint conf --- pnpm-lock.yaml | 495 ++++++++++++++++------------- tooling/eslint-config/index.js | 6 + tooling/eslint-config/package.json | 2 +- 3 files changed, 280 insertions(+), 223 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3a9d17aca..ae6e07b72 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -501,8 +501,8 @@ importers: tooling/eslint-config: devDependencies: '@antfu/eslint-config': - specifier: ^0.38.6 - version: 0.38.6(eslint@8.51.0)(typescript@4.9.5) + specifier: ^0.43.1 + version: 0.43.1(eslint@8.51.0)(typescript@4.9.5) eslint: specifier: ^8.51.0 version: 8.51.0 @@ -724,23 +724,25 @@ packages: '@jridgewell/trace-mapping': 0.3.19 dev: true - /@antfu/eslint-config-basic@0.38.6(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint@8.51.0)(typescript@4.9.5): - resolution: {integrity: sha512-g5hxtS98MsQ6plCQ1rPx/K9+7ZZmUgdsWx84PJCwbaSuSklP1jZjuhMcjOPn/LW5t9QAPeb74T9+QsK3+IyNKQ==} + /@antfu/eslint-config-basic@0.43.1(@typescript-eslint/eslint-plugin@6.19.0)(@typescript-eslint/parser@6.19.0)(eslint@8.51.0)(typescript@4.9.5): + resolution: {integrity: sha512-SW6hmGmqI985fsCJ+oivo4MbiMmRMgCJ0Ne8j/hwCB6O6Mc0m5bDqYeKn5HqFhvZhG84GEg5jPDKNiHrBYnQjw==} peerDependencies: eslint: '>=7.4.0' dependencies: + '@stylistic/eslint-plugin-js': 0.0.4 eslint: 8.51.0 - eslint-plugin-antfu: 0.38.6(eslint@8.51.0)(typescript@4.9.5) + eslint-plugin-antfu: 0.43.1(eslint@8.51.0)(typescript@4.9.5) eslint-plugin-eslint-comments: 3.2.0(eslint@8.51.0) eslint-plugin-html: 7.1.0 - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0)(eslint@8.51.0) + eslint-plugin-import: /eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.19.0)(eslint@8.51.0) + eslint-plugin-jsdoc: 46.10.1(eslint@8.51.0) eslint-plugin-jsonc: 2.9.0(eslint@8.51.0) eslint-plugin-markdown: 3.0.1(eslint@8.51.0) - eslint-plugin-n: 15.7.0(eslint@8.51.0) + eslint-plugin-n: 16.6.2(eslint@8.51.0) eslint-plugin-no-only-tests: 3.1.0 eslint-plugin-promise: 6.1.1(eslint@8.51.0) - eslint-plugin-unicorn: 46.0.1(eslint@8.51.0) - eslint-plugin-unused-imports: 2.0.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.51.0) + eslint-plugin-unicorn: 48.0.1(eslint@8.51.0) + eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.51.0) eslint-plugin-yml: 1.9.0(eslint@8.51.0) jsonc-eslint-parser: 2.3.0 yaml-eslint-parser: 1.2.2 @@ -753,17 +755,18 @@ packages: - typescript dev: true - /@antfu/eslint-config-ts@0.38.6(eslint@8.51.0)(typescript@4.9.5): - resolution: {integrity: sha512-a7PY1xpJwjZwIciu8gboLJ2yYxB1HMCKKshuKvH8vcGv+af5X9wk0eLN3Paa72yytSZZ2fqxfD0AwXTW0n+oiA==} + /@antfu/eslint-config-ts@0.43.1(eslint@8.51.0)(typescript@4.9.5): + resolution: {integrity: sha512-s3zItBSopYbM/3eii/JKas1PmWR+wCPRNS89qUi4zxPvpuIgN5mahkBvbsCiWacrNFtLxe1zGgo5qijBhVfuvA==} peerDependencies: eslint: '>=7.4.0' typescript: '>=3.9' dependencies: - '@antfu/eslint-config-basic': 0.38.6(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint@8.51.0)(typescript@4.9.5) - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.51.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.62.0(eslint@8.51.0)(typescript@4.9.5) + '@antfu/eslint-config-basic': 0.43.1(@typescript-eslint/eslint-plugin@6.19.0)(@typescript-eslint/parser@6.19.0)(eslint@8.51.0)(typescript@4.9.5) + '@stylistic/eslint-plugin-ts': 0.0.4(eslint@8.51.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.51.0)(typescript@4.9.5) + '@typescript-eslint/parser': 6.19.0(eslint@8.51.0)(typescript@4.9.5) eslint: 8.51.0 - eslint-plugin-jest: 27.4.2(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.51.0)(typescript@4.9.5) + eslint-plugin-jest: 27.4.2(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.51.0)(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -772,13 +775,13 @@ packages: - supports-color dev: true - /@antfu/eslint-config-vue@0.38.6(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint@8.51.0)(typescript@4.9.5): - resolution: {integrity: sha512-mC+MA7/WFXGIPR4RbdvaSWXjYJvBiloDzPaOILgbfPxWqROi5KzgMAYbRfHkXz0TaG2P1+wFiuf41unc3rq3ew==} + /@antfu/eslint-config-vue@0.43.1(@typescript-eslint/eslint-plugin@6.19.0)(@typescript-eslint/parser@6.19.0)(eslint@8.51.0)(typescript@4.9.5): + resolution: {integrity: sha512-HxOfe8Vl+DPrzssbs5LHRDCnBtCy1LSA1DIeV71IC+iTpzoASFahSsVX5qckYu1InFgUm93XOhHCWm34LzPsvg==} peerDependencies: eslint: '>=7.4.0' dependencies: - '@antfu/eslint-config-basic': 0.38.6(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint@8.51.0)(typescript@4.9.5) - '@antfu/eslint-config-ts': 0.38.6(eslint@8.51.0)(typescript@4.9.5) + '@antfu/eslint-config-basic': 0.43.1(@typescript-eslint/eslint-plugin@6.19.0)(@typescript-eslint/parser@6.19.0)(eslint@8.51.0)(typescript@4.9.5) + '@antfu/eslint-config-ts': 0.43.1(eslint@8.51.0)(typescript@4.9.5) eslint: 8.51.0 eslint-plugin-vue: 9.17.0(eslint@8.51.0) local-pkg: 0.4.3 @@ -792,22 +795,22 @@ packages: - typescript dev: true - /@antfu/eslint-config@0.38.6(eslint@8.51.0)(typescript@4.9.5): - resolution: {integrity: sha512-QH9RwKLgumLjkVfKNIrxtISlp6VqfduXVIS2uNlOfrj1hSSObOMzj0olcsKR2pzgTMQ6d5Uu9nrxvKjs/oO6fg==} + /@antfu/eslint-config@0.43.1(eslint@8.51.0)(typescript@4.9.5): + resolution: {integrity: sha512-kTOJeCqhotaiQ/Rv6JxgfAX+SxUq2GII4ZIvTa3GWBUXhFMBvehdUNtxcmO8/HxwxYKkm34/qeF+v7osBsMF1w==} peerDependencies: eslint: '>=7.4.0' dependencies: - '@antfu/eslint-config-vue': 0.38.6(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint@8.51.0)(typescript@4.9.5) - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.51.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.62.0(eslint@8.51.0)(typescript@4.9.5) + '@antfu/eslint-config-vue': 0.43.1(@typescript-eslint/eslint-plugin@6.19.0)(@typescript-eslint/parser@6.19.0)(eslint@8.51.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.51.0)(typescript@4.9.5) + '@typescript-eslint/parser': 6.19.0(eslint@8.51.0)(typescript@4.9.5) eslint: 8.51.0 eslint-plugin-eslint-comments: 3.2.0(eslint@8.51.0) eslint-plugin-html: 7.1.0 - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0)(eslint@8.51.0) + eslint-plugin-import: /eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.19.0)(eslint@8.51.0) eslint-plugin-jsonc: 2.9.0(eslint@8.51.0) - eslint-plugin-n: 15.7.0(eslint@8.51.0) + eslint-plugin-n: 16.6.2(eslint@8.51.0) eslint-plugin-promise: 6.1.1(eslint@8.51.0) - eslint-plugin-unicorn: 46.0.1(eslint@8.51.0) + eslint-plugin-unicorn: 48.0.1(eslint@8.51.0) eslint-plugin-vue: 9.17.0(eslint@8.51.0) eslint-plugin-yml: 1.9.0(eslint@8.51.0) jsonc-eslint-parser: 2.3.0 @@ -1431,6 +1434,15 @@ packages: - '@algolia/client-search' dev: true + /@es-joy/jsdoccomment@0.41.0: + resolution: {integrity: sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==} + engines: {node: '>=16'} + dependencies: + comment-parser: 1.4.1 + esquery: 1.5.0 + jsdoc-type-pratt-parser: 4.0.0 + dev: true + /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -2681,6 +2693,34 @@ packages: resolution: {integrity: sha512-3m6C7f8pnR5KXys/Hqx2x6ylnpqOak6HtnZI6T5keEO0yT+E4Spkw37VEbdwuC+2oxmjdgq6YZEgiKX7hM1GmQ==} dev: false + /@stylistic/eslint-plugin-js@0.0.4: + resolution: {integrity: sha512-W1rq2xxlFNhgZZJO+L59wtvlDI0xARYxx0WD8EeWNBO7NDybUSYSozCIcY9XvxQbTAsEXBjwqokeYm0crt7RxQ==} + dependencies: + acorn: 8.11.2 + escape-string-regexp: 4.0.0 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esutils: 2.0.3 + graphemer: 1.4.0 + dev: true + + /@stylistic/eslint-plugin-ts@0.0.4(eslint@8.51.0)(typescript@4.9.5): + resolution: {integrity: sha512-sWL4Km5j8S+TLyzya/3adxMWGkCm3lVasJIVQqhxVfwnlGkpMI0GgYVIu/ubdKPS+dSvqjUHpsXgqWfMRF2+cQ==} + peerDependencies: + eslint: '*' + typescript: '*' + dependencies: + '@stylistic/eslint-plugin-js': 0.0.4 + '@typescript-eslint/scope-manager': 6.19.0 + '@typescript-eslint/type-utils': 6.19.0(eslint@8.51.0)(typescript@4.9.5) + '@typescript-eslint/utils': 6.19.0(eslint@8.51.0)(typescript@4.9.5) + eslint: 8.51.0 + graphemer: 1.4.0 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + /@trysound/sax@0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -2803,10 +2843,6 @@ packages: resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} dev: true - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true - /@types/linkify-it@3.0.3: resolution: {integrity: sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==} dev: true @@ -2929,47 +2965,49 @@ packages: dev: true optional: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.51.0)(typescript@4.9.5): - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/eslint-plugin@6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.51.0)(typescript@4.9.5): + resolution: {integrity: sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@eslint-community/regexpp': 4.9.1 - '@typescript-eslint/parser': 5.62.0(eslint@8.51.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.51.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.51.0)(typescript@4.9.5) + '@typescript-eslint/parser': 6.19.0(eslint@8.51.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 6.19.0 + '@typescript-eslint/type-utils': 6.19.0(eslint@8.51.0)(typescript@4.9.5) + '@typescript-eslint/utils': 6.19.0(eslint@8.51.0)(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 6.19.0 debug: 4.3.4(supports-color@8.1.1) eslint: 8.51.0 graphemer: 1.4.0 ignore: 5.2.4 - natural-compare-lite: 1.4.0 + natural-compare: 1.4.0 semver: 7.5.4 - tsutils: 3.21.0(typescript@4.9.5) + ts-api-utils: 1.0.3(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.51.0)(typescript@4.9.5): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/parser@6.19.0(eslint@8.51.0)(typescript@4.9.5): + resolution: {integrity: sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 6.19.0 + '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/typescript-estree': 6.19.0(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 6.19.0 debug: 4.3.4(supports-color@8.1.1) eslint: 8.51.0 typescript: 4.9.5 @@ -2985,21 +3023,29 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.51.0)(typescript@4.9.5): - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/scope-manager@6.19.0: + resolution: {integrity: sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/visitor-keys': 6.19.0 + dev: true + + /@typescript-eslint/type-utils@6.19.0(eslint@8.51.0)(typescript@4.9.5): + resolution: {integrity: sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: '*' + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.51.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 6.19.0(typescript@4.9.5) + '@typescript-eslint/utils': 6.19.0(eslint@8.51.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) eslint: 8.51.0 - tsutils: 3.21.0(typescript@4.9.5) + ts-api-utils: 1.0.3(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color @@ -3010,6 +3056,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@typescript-eslint/types@6.19.0: + resolution: {integrity: sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + /@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3031,6 +3082,28 @@ packages: - supports-color dev: true + /@typescript-eslint/typescript-estree@6.19.0(typescript@4.9.5): + resolution: {integrity: sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/visitor-keys': 6.19.0 + debug: 4.3.4(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/utils@5.62.0(eslint@8.51.0)(typescript@4.9.5): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3051,6 +3124,25 @@ packages: - typescript dev: true + /@typescript-eslint/utils@6.19.0(eslint@8.51.0)(typescript@4.9.5): + resolution: {integrity: sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@types/json-schema': 7.0.13 + '@types/semver': 7.5.3 + '@typescript-eslint/scope-manager': 6.19.0 + '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/typescript-estree': 6.19.0(typescript@4.9.5) + eslint: 8.51.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@typescript-eslint/visitor-keys@5.62.0: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3059,6 +3151,14 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@typescript-eslint/visitor-keys@6.19.0: + resolution: {integrity: sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.19.0 + eslint-visitor-keys: 3.4.3 + dev: true + /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true @@ -3779,6 +3879,11 @@ packages: zip-stream: 5.0.1 dev: true + /are-docs-informative@0.0.2: + resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} + engines: {node: '>=14'} + dev: true + /are-we-there-yet@2.0.0: resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} engines: {node: '>=10'} @@ -3808,33 +3913,11 @@ packages: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 - is-string: 1.0.7 - dev: true - /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true - /array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.1 - dev: true - /array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} @@ -3845,16 +3928,6 @@ packages: es-shim-unscopables: 1.0.0 dev: true - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 - dev: true - /arraybuffer.prototype.slice@1.0.2: resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} engines: {node: '>= 0.4'} @@ -4479,6 +4552,11 @@ packages: engines: {node: '>= 12'} dev: true + /comment-parser@1.4.1: + resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} + engines: {node: '>= 12.0.0'} + dev: true + /common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} @@ -5586,6 +5664,15 @@ packages: engines: {node: '>=12'} dev: true + /eslint-compat-utils@0.1.2(eslint@8.51.0): + resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + eslint: 8.51.0 + dev: true + /eslint-config-prettier@8.10.0(eslint@8.51.0): resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true @@ -5614,7 +5701,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.51.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.51.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -5635,7 +5722,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.51.0)(typescript@4.9.5) + '@typescript-eslint/parser': 6.19.0(eslint@8.51.0)(typescript@4.9.5) debug: 3.2.7(supports-color@8.1.1) eslint: 8.51.0 eslint-import-resolver-node: 0.3.9 @@ -5643,10 +5730,10 @@ packages: - supports-color dev: true - /eslint-plugin-antfu@0.38.6(eslint@8.51.0)(typescript@4.9.5): - resolution: {integrity: sha512-oQImiNKe+iGwoznuydq70s6oJHpaUE/hCHFeu4v7oy/hfAw7oBuCNi6TCZtQ/MUr+4XyQwq9sdC3fsLZC+DF1g==} + /eslint-plugin-antfu@0.43.1(eslint@8.51.0)(typescript@4.9.5): + resolution: {integrity: sha512-Nak+Qpy5qEK10dCXtVaabPTUmLBPLhsVKAFXAtxYGYRlY/SuuZUBhW2YIsLsixNROiICGuov8sN+eNOCC7Wb5g==} dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.51.0)(typescript@4.9.5) + '@typescript-eslint/utils': 6.19.0(eslint@8.51.0)(typescript@4.9.5) transitivePeerDependencies: - eslint - supports-color @@ -5662,15 +5749,16 @@ packages: globals: 13.23.0 dev: true - /eslint-plugin-es@4.1.0(eslint@8.51.0): - resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} - engines: {node: '>=8.10.0'} + /eslint-plugin-es-x@7.5.0(eslint@8.51.0): + resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - eslint: '>=4.19.1' + eslint: '>=8' dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/regexpp': 4.9.1 eslint: 8.51.0 - eslint-utils: 2.1.0 - regexpp: 3.2.0 + eslint-compat-utils: 0.1.2(eslint@8.51.0) dev: true /eslint-plugin-eslint-comments@3.2.0(eslint@8.51.0): @@ -5690,42 +5778,30 @@ packages: htmlparser2: 8.0.2 dev: true - /eslint-plugin-import@2.28.1(@typescript-eslint/parser@5.62.0)(eslint@8.51.0): - resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} - engines: {node: '>=4'} + /eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.19.0)(eslint@8.51.0): + resolution: {integrity: sha512-a4oVt0j3ixNhGhvV4XF6NS7OWRFK2rrJ0Q5C4S2dSRb8FxZi31J0uUd5WJLL58wnVJ/OiQ1BxiXnFA4dWQO1Cg==} + engines: {node: '>=12'} peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint: ^7.2.0 || ^8 dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.51.0)(typescript@4.9.5) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 debug: 3.2.7(supports-color@8.1.1) doctrine: 2.1.0 eslint: 8.51.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.51.0) - has: 1.0.4 - is-core-module: 2.13.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.51.0) + get-tsconfig: 4.7.2 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 - semver: 6.3.1 - tsconfig-paths: 3.14.2 + resolve: 1.22.6 + semver: 7.5.4 transitivePeerDependencies: + - '@typescript-eslint/parser' - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color dev: true - /eslint-plugin-jest@27.4.2(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.51.0)(typescript@4.9.5): + /eslint-plugin-jest@27.4.2(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.51.0)(typescript@4.9.5): resolution: {integrity: sha512-3Nfvv3wbq2+PZlRTf2oaAWXWwbdBejFRBR2O8tAO67o+P8zno+QGbcDYaAXODlreXVg+9gvWhKKmG2rgfb8GEg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -5738,7 +5814,7 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.51.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.51.0)(typescript@4.9.5) '@typescript-eslint/utils': 5.62.0(eslint@8.51.0)(typescript@4.9.5) eslint: 8.51.0 transitivePeerDependencies: @@ -5746,6 +5822,26 @@ packages: - typescript dev: true + /eslint-plugin-jsdoc@46.10.1(eslint@8.51.0): + resolution: {integrity: sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==} + engines: {node: '>=16'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + dependencies: + '@es-joy/jsdoccomment': 0.41.0 + are-docs-informative: 0.0.2 + comment-parser: 1.4.1 + debug: 4.3.4(supports-color@8.1.1) + escape-string-regexp: 4.0.0 + eslint: 8.51.0 + esquery: 1.5.0 + is-builtin-module: 3.2.1 + semver: 7.5.4 + spdx-expression-parse: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-jsonc@2.9.0(eslint@8.51.0): resolution: {integrity: sha512-RK+LeONVukbLwT2+t7/OY54NJRccTXh/QbnXzPuTLpFMVZhPuq1C9E07+qWenGx7rrQl0kAalAWl7EmB+RjpGA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5770,17 +5866,20 @@ packages: - supports-color dev: true - /eslint-plugin-n@15.7.0(eslint@8.51.0): - resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} - engines: {node: '>=12.22.0'} + /eslint-plugin-n@16.6.2(eslint@8.51.0): + resolution: {integrity: sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==} + engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) builtins: 5.0.1 eslint: 8.51.0 - eslint-plugin-es: 4.1.0(eslint@8.51.0) - eslint-utils: 3.0.0(eslint@8.51.0) + eslint-plugin-es-x: 7.5.0(eslint@8.51.0) + get-tsconfig: 4.7.2 + globals: 13.24.0 ignore: 5.2.4 + is-builtin-module: 3.2.1 is-core-module: 2.13.0 minimatch: 3.1.2 resolve: 1.22.6 @@ -5827,11 +5926,11 @@ packages: eslint: 8.51.0 dev: true - /eslint-plugin-unicorn@46.0.1(eslint@8.51.0): - resolution: {integrity: sha512-setGhMTiLAddg1asdwjZ3hekIN5zLznNa5zll7pBPwFOka6greCKDQydfqy4fqyUhndi74wpDzClSQMEcmOaew==} - engines: {node: '>=14.18'} + /eslint-plugin-unicorn@48.0.1(eslint@8.51.0): + resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} + engines: {node: '>=16'} peerDependencies: - eslint: '>=8.28.0' + eslint: '>=8.44.0' dependencies: '@babel/helper-validator-identifier': 7.22.20 '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) @@ -5846,23 +5945,22 @@ packages: pluralize: 8.0.0 read-pkg-up: 7.0.1 regexp-tree: 0.1.27 - regjsparser: 0.9.1 - safe-regex: 2.1.1 + regjsparser: 0.10.0 semver: 7.5.4 strip-indent: 3.0.0 dev: true - /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.51.0): - resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} + /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.51.0): + resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 + '@typescript-eslint/eslint-plugin': ^6.0.0 eslint: ^8.0.0 peerDependenciesMeta: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.51.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.51.0)(typescript@4.9.5) eslint: 8.51.0 eslint-rule-composer: 0.3.0 dev: true @@ -5921,33 +6019,6 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} - dependencies: - eslint-visitor-keys: 1.3.0 - dev: true - - /eslint-utils@3.0.0(eslint@8.51.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.51.0 - eslint-visitor-keys: 2.1.0 - dev: true - - /eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - dev: true - - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6528,6 +6599,12 @@ packages: get-intrinsic: 1.2.1 dev: true + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + /getos@3.2.1: resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==} dependencies: @@ -6628,6 +6705,13 @@ packages: type-fest: 0.20.2 dev: true + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} @@ -7406,6 +7490,11 @@ packages: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} dev: true + /jsdoc-type-pratt-parser@4.0.0: + resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} + engines: {node: '>=12.0.0'} + dev: true + /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -7451,13 +7540,6 @@ packages: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: true - /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -7468,7 +7550,7 @@ packages: resolution: {integrity: sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.10.0 + acorn: 8.11.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 semver: 7.5.4 @@ -8120,10 +8202,6 @@ packages: resolution: {integrity: sha512-lHwIAJbmLSjF9VDRm9GoVOy9AGp3aIvkjv+Kvz9h16QR3uSVYH78PNQUnT2U4X53mhlnV2M7wrhibQ3GHicDmg==} dev: true - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true - /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true @@ -8468,33 +8546,6 @@ packages: object-keys: 1.1.1 dev: true - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - dev: true - - /object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 - dev: true - - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - dev: true - /ofetch@1.3.3: resolution: {integrity: sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==} dependencies: @@ -9534,17 +9585,12 @@ packages: set-function-name: 2.0.1 dev: true - /regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true - /register-service-worker@1.7.2: resolution: {integrity: sha512-CiD3ZSanZqcMPRhtfct5K9f7i3OLCcBBWsJjLh1gW9RO/nS94sVzY59iS+fgYBOBqaBpf4EzfqUF3j9IG+xo8A==} dev: true - /regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + /regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} hasBin: true dependencies: jsesc: 0.5.0 @@ -9589,6 +9635,10 @@ packages: engines: {node: '>=8'} dev: true + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve@1.22.6: resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} hasBin: true @@ -9719,12 +9769,6 @@ packages: is-regex: 1.1.4 dev: true - /safe-regex@2.1.1: - resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} - dependencies: - regexp-tree: 0.1.27 - dev: true - /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true @@ -10025,6 +10069,13 @@ packages: spdx-license-ids: 3.0.16 dev: true + /spdx-expression-parse@4.0.0: + resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.16 + dev: true + /spdx-license-ids@3.0.16: resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} dev: true @@ -10377,13 +10428,13 @@ packages: engines: {node: '>=8'} dev: true - /tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + /ts-api-utils@1.0.3(typescript@4.9.5): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 + typescript: 4.9.5 dev: true /tslib@1.14.1: diff --git a/tooling/eslint-config/index.js b/tooling/eslint-config/index.js index 94095f4e1..9c54cee0a 100644 --- a/tooling/eslint-config/index.js +++ b/tooling/eslint-config/index.js @@ -20,5 +20,11 @@ module.exports = { ], 'antfu/if-newline': 0, 'antfu/generic-spacing': 0, + + // stylistic + '@stylistic/ts/member-delimiter-style': 'off', + '@stylistic/ts/brace-style': 'off', + '@stylistic/js/operator-linebreak': 'off', + '@stylistic/ts/indent': 'off', }, } diff --git a/tooling/eslint-config/package.json b/tooling/eslint-config/package.json index 9bc0a9462..7a64bc54a 100644 --- a/tooling/eslint-config/package.json +++ b/tooling/eslint-config/package.json @@ -5,7 +5,7 @@ "license": "MIT", "main": "index.js", "devDependencies": { - "@antfu/eslint-config": "^0.38.6", + "@antfu/eslint-config": "^0.43.1", "eslint": "^8.51.0", "eslint-config-prettier": "^8.10.0", "eslint-config-turbo": "^1.11.2", From 771c1f9cd6c995b59dd166ad334021cbada62d51 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Sun, 21 Jan 2024 13:15:53 +0100 Subject: [PATCH 17/25] chore(core): lint files --- .../core/src/components/Edges/EdgeWrapper.ts | 105 +++++++++--------- .../core/src/components/Nodes/NodeWrapper.ts | 2 +- packages/core/src/env.d.ts | 2 +- packages/core/src/store/actions.ts | 2 +- packages/core/src/store/state.ts | 2 +- packages/core/src/types/components.ts | 2 +- packages/core/src/types/edge.ts | 4 +- packages/core/src/types/hooks.ts | 14 +-- packages/core/src/types/node.ts | 6 +- packages/core/src/utils/graph.ts | 2 +- packages/core/src/utils/handle.ts | 2 +- 11 files changed, 74 insertions(+), 69 deletions(-) diff --git a/packages/core/src/components/Edges/EdgeWrapper.ts b/packages/core/src/components/Edges/EdgeWrapper.ts index 4a398c2f6..f75c28bd6 100644 --- a/packages/core/src/components/Edges/EdgeWrapper.ts +++ b/packages/core/src/components/Edges/EdgeWrapper.ts @@ -17,7 +17,7 @@ import EdgeAnchor from './EdgeAnchor' interface Props { id: string - type: EdgeComponent | Function | Object | false + type: EdgeComponent | ((...args: any[]) => any) | object | false name: string selectable?: boolean focusable?: boolean @@ -49,7 +49,7 @@ const EdgeWrapper = defineComponent({ const hooks = useEdgeHooks(props.edge, emits) - const edge = $(useVModel(props, 'edge')) + const edge = useVModel(props, 'edge') const mouseOver = ref(false) @@ -66,8 +66,8 @@ const EdgeWrapper = defineComponent({ provide(EdgeId, props.id) provide(EdgeRef, edgeEl) - const edgeClass = computed(() => (edge.class instanceof Function ? edge.class(edge) : edge.class)) - const edgeStyle = computed(() => (edge.style instanceof Function ? edge.style(edge) : edge.style)) + const edgeClass = computed(() => (edge.value.class instanceof Function ? edge.value.class(edge.value) : edge.value.class)) + const edgeStyle = computed(() => (edge.value.style instanceof Function ? edge.value.style(edge.value) : edge.value.style)) const { handlePointerDown } = useHandle({ nodeId, @@ -80,23 +80,25 @@ const EdgeWrapper = defineComponent({ }) return () => { - const sourceNode = findNode(edge.source) - const targetNode = findNode(edge.target) + const sourceNode = findNode(edge.value.source) + const targetNode = findNode(edge.value.target) if (!sourceNode && !targetNode) { - flowHooks.value.error.trigger(new VueFlowError(ErrorCode.EDGE_SOURCE_TARGET_MISSING, edge.id, edge.source, edge.target)) + flowHooks.value.error.trigger( + new VueFlowError(ErrorCode.EDGE_SOURCE_TARGET_MISSING, edge.value.id, edge.value.source, edge.value.target), + ) return null } if (!sourceNode) { - flowHooks.value.error.trigger(new VueFlowError(ErrorCode.EDGE_SOURCE_MISSING, edge.id, edge.source)) + flowHooks.value.error.trigger(new VueFlowError(ErrorCode.EDGE_SOURCE_MISSING, edge.value.id, edge.value.source)) return null } if (!targetNode) { - flowHooks.value.error.trigger(new VueFlowError(ErrorCode.EDGE_TARGET_MISSING, edge.id, edge.target)) + flowHooks.value.error.trigger(new VueFlowError(ErrorCode.EDGE_TARGET_MISSING, edge.value.id, edge.value.target)) return null } @@ -112,7 +114,7 @@ const EdgeWrapper = defineComponent({ sourceNodeHandles = [...(sourceNode.handleBounds.source || []), ...(sourceNode.handleBounds.target || [])] } - const sourceHandle = getHandle(sourceNodeHandles, edge.sourceHandle) + const sourceHandle = getHandle(sourceNodeHandles, edge.value.sourceHandle) let targetNodeHandles if (connectionMode.value === ConnectionMode.Strict) { @@ -121,7 +123,7 @@ const EdgeWrapper = defineComponent({ targetNodeHandles = [...(targetNode.handleBounds.target || []), ...(targetNode.handleBounds.source || [])] } - const targetHandle = getHandle(targetNodeHandles, edge.targetHandle) + const targetHandle = getHandle(targetNodeHandles, edge.value.targetHandle) const sourcePosition = sourceHandle ? sourceHandle.position : Position.Bottom @@ -136,10 +138,10 @@ const EdgeWrapper = defineComponent({ targetPosition, ) - edge.sourceX = sourceX - edge.sourceY = sourceY - edge.targetX = targetX - edge.targetY = targetY + edge.value.sourceX = sourceX + edge.value.sourceY = sourceY + edge.value.targetX = targetX + edge.value.targetY = targetY return h( 'g', @@ -154,8 +156,8 @@ const EdgeWrapper = defineComponent({ edgeClass.value, { updating: mouseOver.value, - selected: edge.selected, - animated: edge.animated, + selected: edge.value.selected, + animated: edge.value.animated, inactive: !props.selectable, }, ], @@ -167,7 +169,10 @@ const EdgeWrapper = defineComponent({ 'onMouseleave': onEdgeMouseLeave, 'onKeyDown': props.focusable ? onKeyDown : undefined, 'tabIndex': props.focusable ? 0 : undefined, - 'aria-label': edge.ariaLabel === null ? undefined : edge.ariaLabel || `Edge from ${edge.source} to ${edge.target}`, + 'aria-label': + edge.value.ariaLabel === null + ? undefined + : edge.value.ariaLabel || `Edge from ${edge.value.source} to ${edge.value.target}`, 'aria-describedby': props.focusable ? `${ARIA_EDGE_DESC_KEY}-${vueFlowId}` : undefined, 'role': props.focusable ? 'button' : 'img', }, @@ -178,32 +183,32 @@ const EdgeWrapper = defineComponent({ id: props.id, sourceNode, targetNode, - source: edge.source, - target: edge.target, - type: edge.type, + source: edge.value.source, + target: edge.value.target, + type: edge.value.type, updatable: props.updatable, - selected: edge.selected, - animated: edge.animated, - label: edge.label, - labelStyle: edge.labelStyle, - labelShowBg: edge.labelShowBg, - labelBgStyle: edge.labelBgStyle, - labelBgPadding: edge.labelBgPadding, - labelBgBorderRadius: edge.labelBgBorderRadius, - data: edge.data, - events: { ...edge.events, ...hooks.on }, + selected: edge.value.selected, + animated: edge.value.animated, + label: edge.value.label, + labelStyle: edge.value.labelStyle, + labelShowBg: edge.value.labelShowBg, + labelBgStyle: edge.value.labelBgStyle, + labelBgPadding: edge.value.labelBgPadding, + labelBgBorderRadius: edge.value.labelBgBorderRadius, + data: edge.value.data, + events: { ...edge.value.events, ...hooks.on }, style: edgeStyle.value, - markerStart: `url(#${getMarkerId(edge.markerStart, vueFlowId)})`, - markerEnd: `url(#${getMarkerId(edge.markerEnd, vueFlowId)})`, + markerStart: `url(#${getMarkerId(edge.value.markerStart, vueFlowId)})`, + markerEnd: `url(#${getMarkerId(edge.value.markerEnd, vueFlowId)})`, sourcePosition, targetPosition, sourceX, sourceY, targetX, targetY, - sourceHandleId: edge.sourceHandle, - targetHandleId: edge.targetHandle, - interactionWidth: edge.interactionWidth, + sourceHandleId: edge.value.sourceHandle, + targetHandleId: edge.value.targetHandle, + interactionWidth: edge.value.interactionWidth, }), [ props.updatable === 'source' || props.updatable === true @@ -260,11 +265,11 @@ const EdgeWrapper = defineComponent({ } function onEdgeUpdate(event: MouseTouchEvent, connection: Connection) { - hooks.emit.update({ event, edge, connection }) + hooks.emit.update({ event, edge: edge.value, connection }) } function onEdgeUpdateEnd(event: MouseTouchEvent) { - hooks.emit.updateEnd({ event, edge }) + hooks.emit.updateEnd({ event, edge: edge.value }) updating.value = false } @@ -275,28 +280,28 @@ const EdgeWrapper = defineComponent({ updating.value = true - nodeId.value = isSourceHandle ? edge.target : edge.source - handleId.value = (isSourceHandle ? edge.targetHandle : edge.sourceHandle) ?? '' + nodeId.value = isSourceHandle ? edge.value.target : edge.value.source + handleId.value = (isSourceHandle ? edge.value.targetHandle : edge.value.sourceHandle) ?? '' edgeUpdaterType.value = isSourceHandle ? 'target' : 'source' - hooks.emit.updateStart({ event, edge }) + hooks.emit.updateStart({ event, edge: edge.value }) handlePointerDown(event) } function onEdgeClick(event: MouseEvent) { - const data = { event, edge } + const data = { event, edge: edge.value } if (props.selectable) { nodesSelectionActive.value = false - if (edge.selected && multiSelectionActive.value) { - removeSelectedEdges([edge]) + if (edge.value.selected && multiSelectionActive.value) { + removeSelectedEdges([edge.value]) edgeEl.value?.blur() } else { - addSelectedEdges([edge]) + addSelectedEdges([edge.value]) } } @@ -304,23 +309,23 @@ const EdgeWrapper = defineComponent({ } function onEdgeContextMenu(event: MouseEvent) { - hooks.emit.contextMenu({ event, edge }) + hooks.emit.contextMenu({ event, edge: edge.value }) } function onDoubleClick(event: MouseEvent) { - hooks.emit.doubleClick({ event, edge }) + hooks.emit.doubleClick({ event, edge: edge.value }) } function onEdgeMouseEnter(event: MouseEvent) { - hooks.emit.mouseEnter({ event, edge }) + hooks.emit.mouseEnter({ event, edge: edge.value }) } function onEdgeMouseMove(event: MouseEvent) { - hooks.emit.mouseMove({ event, edge }) + hooks.emit.mouseMove({ event, edge: edge.value }) } function onEdgeMouseLeave(event: MouseEvent) { - hooks.emit.mouseLeave({ event, edge }) + hooks.emit.mouseLeave({ event, edge: edge.value }) } function onEdgeUpdaterSourceMouseDown(event: MouseEvent) { diff --git a/packages/core/src/components/Nodes/NodeWrapper.ts b/packages/core/src/components/Nodes/NodeWrapper.ts index 7bee292ad..2ec9345d4 100644 --- a/packages/core/src/components/Nodes/NodeWrapper.ts +++ b/packages/core/src/components/Nodes/NodeWrapper.ts @@ -18,7 +18,7 @@ interface Props { selectable: boolean connectable: HandleConnectable focusable: boolean - type: NodeComponent | Function | Object | false + type: NodeComponent | ((...args: any[]) => any) | object | false name: string node: GraphNode resizeObserver: ResizeObserver diff --git a/packages/core/src/env.d.ts b/packages/core/src/env.d.ts index 6cd694c58..a9323d7a9 100644 --- a/packages/core/src/env.d.ts +++ b/packages/core/src/env.d.ts @@ -4,6 +4,6 @@ declare module '*.vue' { import type { DefineComponent } from 'vue' - const component: DefineComponent<{}, {}, any> + const component: DefineComponent export default component } diff --git a/packages/core/src/store/actions.ts b/packages/core/src/store/actions.ts index 2065d248e..0fac18851 100644 --- a/packages/core/src/store/actions.ts +++ b/packages/core/src/store/actions.ts @@ -643,7 +643,7 @@ export function useActions( } const endConnection: Actions['endConnection'] = (event, isClick) => { - state.connectionPosition = { x: NaN, y: NaN } + state.connectionPosition = { x: Number.NaN, y: Number.NaN } state.connectionEndHandle = null state.connectionStatus = null diff --git a/packages/core/src/store/state.ts b/packages/core/src/store/state.ts index bdfdaa029..c636c6b75 100644 --- a/packages/core/src/store/state.ts +++ b/packages/core/src/store/state.ts @@ -91,7 +91,7 @@ function defaultState(): State { connectionStartHandle: null, connectionEndHandle: null, connectionClickStartHandle: null, - connectionPosition: { x: NaN, y: NaN }, + connectionPosition: { x: Number.NaN, y: Number.NaN }, connectionRadius: 20, connectOnClick: true, connectionStatus: null, diff --git a/packages/core/src/types/components.ts b/packages/core/src/types/components.ts index 05a1c5f7a..257df6de8 100644 --- a/packages/core/src/types/components.ts +++ b/packages/core/src/types/components.ts @@ -30,7 +30,7 @@ export type DefaultNodeTypes = { [key in 'input' | 'output' | 'default']: NodeCo export interface EdgeTextProps { x: number y: number - label?: string | VNode | Object + label?: string | VNode | object labelStyle?: CSSProperties labelShowBg?: boolean labelBgStyle?: CSSProperties diff --git a/packages/core/src/types/edge.ts b/packages/core/src/types/edge.ts index 6389dae45..5d1a97e36 100644 --- a/packages/core/src/types/edge.ts +++ b/packages/core/src/types/edge.ts @@ -164,7 +164,7 @@ export type GraphEdge< } & EdgePositions /** these props are passed to edge components */ -export interface EdgeProps +export interface EdgeProps extends EdgeLabelOptions, EdgePositions { id: string @@ -173,7 +173,7 @@ export interface EdgeProps | Object + label?: string | VNode | Component | object style?: CSSProperties selected?: boolean sourcePosition: Position diff --git a/packages/core/src/types/hooks.ts b/packages/core/src/types/hooks.ts index 982ca8f6a..555f0b915 100644 --- a/packages/core/src/types/hooks.ts +++ b/packages/core/src/types/hooks.ts @@ -112,11 +112,11 @@ export type FlowHooksEmit = Readonly<{ */ export type CustomEvent = (...args: Args) => Return -type CustomEventHandlers = { +type CustomEventHandlers = { [key in keyof CustomEvents]: CustomEvents[key] } -export type NodeEventsHandler = { +export type NodeEventsHandler = { doubleClick: (event: NodeMouseEvent) => void | { off: () => void } click: (event: NodeMouseEvent) => void | { off: () => void } mouseEnter: (event: NodeMouseEvent) => void | { off: () => void } @@ -128,15 +128,15 @@ export type NodeEventsHandler = { dragStop: (event: NodeDragEvent) => void | { off: () => void } } & CustomEventHandlers -export type NodeEventsOn = { +export type NodeEventsOn = { [key in keyof NodeEventsHandler]: EventHookOn any ? Event : never> } & CustomEventHandlers -export type NodeEventsEmit = { +export type NodeEventsEmit = { [key in keyof NodeEventsHandler]: EventHookTrigger any ? Event : never> } & CustomEventHandlers -export type EdgeEventsHandler = { +export type EdgeEventsHandler = { doubleClick: (event: EdgeMouseEvent) => void | { off: () => void } click: (event: EdgeMouseEvent) => void | { off: () => void } mouseEnter: (event: EdgeMouseEvent) => void | { off: () => void } @@ -148,10 +148,10 @@ export type EdgeEventsHandler = { updateEnd: (event: EdgeMouseEvent) => void | { off: () => void } } & CustomEventHandlers -export type EdgeEventsOn = { +export type EdgeEventsOn = { [key in keyof EdgeEventsHandler]: EventHookOn any ? Event : never> } & CustomEventHandlers -export type EdgeEventsEmit = { +export type EdgeEventsEmit = { [key in keyof EdgeEventsHandler]: EventHookTrigger any ? Event : never> } & CustomEventHandlers diff --git a/packages/core/src/types/node.ts b/packages/core/src/types/node.ts index 047b480ae..02d925170 100644 --- a/packages/core/src/types/node.ts +++ b/packages/core/src/types/node.ts @@ -4,7 +4,7 @@ import type { NodeComponent } from './components' import type { HandleConnectable, HandleElement, ValidConnectionFunc } from './handle' import type { CustomEvent, NodeEventsHandler, NodeEventsOn } from './hooks' -/** Defined as [[x-from, y-from], [x-to, y-to]] **/ +/** Defined as [[x-from, y-from], [x-to, y-to]] */ export type CoordinateExtent = [extentFrom: [fromX: number, fromY: number], extentTo: [toX: number, toY: number]] export interface CoordinateExtentRange { @@ -119,7 +119,7 @@ export interface GraphNode< } /** these props are passed to node components */ -export interface NodeProps { +export interface NodeProps { /** unique node id */ id: string /** node type */ @@ -137,7 +137,7 @@ export interface NodeProps { const distance = Math.sqrt((handle.x - pos.x) ** 2 + (handle.y - pos.y) ** 2) From 0df7a74950550ee0b5b414d91a1a7e5dc9c81faf Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Sun, 21 Jan 2024 13:16:12 +0100 Subject: [PATCH 18/25] fix(core,key-filter): return false from bool key filter --- packages/core/src/composables/useKeyPress.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/core/src/composables/useKeyPress.ts b/packages/core/src/composables/useKeyPress.ts index d527cbdb5..bec004d51 100644 --- a/packages/core/src/composables/useKeyPress.ts +++ b/packages/core/src/composables/useKeyPress.ts @@ -158,13 +158,10 @@ export function useKeyPress(keyFilter: MaybeRefOrGetter, onCha // if the keyFilter is a boolean, we just set the isPressed value to that boolean if (typeof keyFilter === 'boolean') { - if (keyFilter) { - isPressed.value = keyFilter - return () => true - } else { - reset() - return () => false - } + reset() + isPressed.value = keyFilter + + return () => false } if (Array.isArray(keyFilter) || typeof keyFilter === 'string') { From b71754fe10a3f7a13132ed1f6058385da267ed88 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Sun, 21 Jan 2024 13:16:45 +0100 Subject: [PATCH 19/25] chore(changeset): add --- .changeset/smooth-steaks-doubt.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/smooth-steaks-doubt.md diff --git a/.changeset/smooth-steaks-doubt.md b/.changeset/smooth-steaks-doubt.md new file mode 100644 index 000000000..b0b74ca68 --- /dev/null +++ b/.changeset/smooth-steaks-doubt.md @@ -0,0 +1,5 @@ +--- +"@vue-flow/core": patch +--- + +Return false for boolean key filter and set the `isPressed` ref to whatever the keyFilter would be (true/false) From 4944a578ee185509be7bbe9245cef463825d0fc5 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Sun, 21 Jan 2024 13:34:30 +0100 Subject: [PATCH 20/25] chore(tooling,core): cleanup --- packages/core/src/env.d.ts | 2 +- tooling/eslint-config/index.js | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/core/src/env.d.ts b/packages/core/src/env.d.ts index a9323d7a9..6cd694c58 100644 --- a/packages/core/src/env.d.ts +++ b/packages/core/src/env.d.ts @@ -4,6 +4,6 @@ declare module '*.vue' { import type { DefineComponent } from 'vue' - const component: DefineComponent + const component: DefineComponent<{}, {}, any> export default component } diff --git a/tooling/eslint-config/index.js b/tooling/eslint-config/index.js index 9c54cee0a..41d8170e2 100644 --- a/tooling/eslint-config/index.js +++ b/tooling/eslint-config/index.js @@ -21,6 +21,10 @@ module.exports = { 'antfu/if-newline': 0, 'antfu/generic-spacing': 0, + // typescript + '@typescript-eslint/no-empty-interface': 'off', + '@typescript-eslint/ban-types': 'off', + // stylistic '@stylistic/ts/member-delimiter-style': 'off', '@stylistic/ts/brace-style': 'off', From ff7ffb1b664a8cb92b33f7f3de46e56487b9cc32 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Sun, 21 Jan 2024 13:34:50 +0100 Subject: [PATCH 21/25] fix(core,viewport): allow panning on scroll when selection is active --- .../core/src/container/Viewport/Viewport.vue | 235 +++++++++--------- 1 file changed, 122 insertions(+), 113 deletions(-) diff --git a/packages/core/src/container/Viewport/Viewport.vue b/packages/core/src/container/Viewport/Viewport.vue index 82c967eae..558e5afcb 100644 --- a/packages/core/src/container/Viewport/Viewport.vue +++ b/packages/core/src/container/Viewport/Viewport.vue @@ -2,7 +2,7 @@ import type { D3ZoomEvent, ZoomTransform } from 'd3-zoom' import { zoom, zoomIdentity } from 'd3-zoom' import { pointer, select } from 'd3-selection' -import { onMounted, ref, watchEffect } from 'vue' +import { onMounted, ref, watch } from 'vue' import { toRef, useEventListener, useResizeObserver } from '@vueuse/core' import type { CoordinateExtent, D3ZoomHandler, FlowOptions, ViewportTransform } from '../../types' import { PanOnScrollMode } from '../../types' @@ -66,7 +66,9 @@ const selectionKeyPressed = useKeyPress(selectionKeyCode) const zoomKeyPressed = useKeyPress(zoomActivationKeyCode) -const shouldPanOnDrag = toRef(() => !selectionKeyPressed.value && (panKeyPressed.value || panOnDrag.value)) +const shouldPanOnDrag = toRef(() => panKeyPressed.value || panOnDrag.value) + +const shouldPanOnScroll = toRef(() => panKeyPressed.value || panOnScroll.value) const isSelecting = toRef(() => selectionKeyPressed.value || (selectionKeyCode.value === true && shouldPanOnDrag.value !== true)) @@ -168,7 +170,7 @@ onMounted(() => { } // if all interactions are disabled, we prevent all zoom events - if (!shouldPanOnDrag.value && !zoomScroll && !panOnScroll.value && !zoomOnDoubleClick.value && !zoomOnPinch.value) { + if (!shouldPanOnDrag.value && !zoomScroll && !shouldPanOnScroll.value && !zoomOnDoubleClick.value && !zoomOnPinch.value) { return false } @@ -190,7 +192,7 @@ onMounted(() => { // if the target element is inside an element with the nopan class, we prevent panning if ( isWrappedWithClass(event, noPanClassName.value) && - (event.type !== 'wheel' || (panOnScroll.value && event.type === 'wheel' && !zoomKeyPressed.value)) + (event.type !== 'wheel' || (shouldPanOnScroll.value && event.type === 'wheel' && !zoomKeyPressed.value)) ) { return false } @@ -200,7 +202,7 @@ onMounted(() => { } // when there is no scroll handling enabled, we prevent all wheel events - if (!zoomScroll && !panOnScroll.value && !pinchZoom && event.type === 'wheel') { + if (!zoomScroll && !shouldPanOnScroll.value && !pinchZoom && event.type === 'wheel') { return false } @@ -226,112 +228,119 @@ onMounted(() => { return (!event.ctrlKey || event.type === 'wheel') && buttonAllowed }) - watchEffect(() => { - if (selectionKeyPressed.value && userSelectionActive.value && !isZoomingOrPanning.value) { - d3Zoom.on('zoom', null) - } else if (!selectionKeyPressed.value && !userSelectionActive.value) { - d3Zoom.on('zoom', (event: D3ZoomEvent) => { - viewport.value = { x: event.transform.x, y: event.transform.y, zoom: event.transform.k } - - const flowTransform = eventToFlowTransform(event.transform) - - zoomedWithRightMouseButton = isRightClickPan(shouldPanOnDrag.value, mouseButton ?? 0) - - emits.viewportChange(flowTransform) - emits.move({ event, flowTransform }) - }) - } - }) + watch( + [userSelectionActive, panOnDrag], + () => { + if (userSelectionActive.value && !isZoomingOrPanning.value) { + d3Zoom.on('zoom', null) + } else if (!userSelectionActive.value) { + d3Zoom.on('zoom', (event: D3ZoomEvent) => { + viewport.value = { x: event.transform.x, y: event.transform.y, zoom: event.transform.k } + + const flowTransform = eventToFlowTransform(event.transform) + + zoomedWithRightMouseButton = isRightClickPan(shouldPanOnDrag.value, mouseButton ?? 0) + + emits.viewportChange(flowTransform) + emits.move({ event, flowTransform }) + }) + } + }, + { immediate: true }, + ) - watchEffect(() => { - if (panKeyPressed.value || (panOnScroll.value && !zoomKeyPressed.value && !userSelectionActive.value)) { - d3Selection.on( - 'wheel.zoom', - (event: WheelEvent) => { - if (isWrappedWithClass(event, noWheelClassName.value)) { - return false - } - - event.preventDefault() - event.stopImmediatePropagation() - - const currentZoom = d3Selection.property('__zoom').k || 1 - const _isMacOs = isMacOs() - - // macOS sets ctrlKey=true for pinch gesture on a trackpad - if (event.ctrlKey && zoomOnPinch && _isMacOs) { - const point = pointer(event) - const pinchDelta = wheelDelta(event) - const zoom = currentZoom * 2 ** pinchDelta - // @ts-expect-error d3-zoom types are not up to date - d3Zoom.scaleTo(d3Selection, zoom, point, event) - - return - } - - // increase scroll speed in firefox - // firefox: deltaMode === 1; chrome: deltaMode === 0 - const deltaNormalize = event.deltaMode === 1 ? 20 : 1 - - let deltaX = panOnScrollMode.value === PanOnScrollMode.Vertical ? 0 : event.deltaX * deltaNormalize - let deltaY = panOnScrollMode.value === PanOnScrollMode.Horizontal ? 0 : event.deltaY * deltaNormalize - - // this enables vertical scrolling with shift + scroll on windows - if (!_isMacOs && event.shiftKey && panOnScrollMode.value !== PanOnScrollMode.Vertical && !deltaX && deltaY) { - deltaX = deltaY - deltaY = 0 - } - - d3Zoom.translateBy( - d3Selection, - -(deltaX / currentZoom) * panOnScrollSpeed.value, - -(deltaY / currentZoom) * panOnScrollSpeed.value, - ) - - const nextViewport = eventToFlowTransform(d3Selection.property('__zoom')) - - if (panScrollTimeout) { - clearTimeout(panScrollTimeout) - } - - // for pan on scroll we need to handle the event calls on our own - // we can't use the start, zoom and end events from d3-zoom - // because start and move gets called on every scroll event and not once at the beginning - if (!isPanScrolling.value) { - isPanScrolling.value = true - - emits.moveStart({ event, flowTransform: nextViewport }) - emits.viewportChangeStart(nextViewport) - } else { - emits.move({ event, flowTransform: nextViewport }) - emits.viewportChange(nextViewport) - - panScrollTimeout = setTimeout(() => { - emits.moveEnd({ event, flowTransform: nextViewport }) - emits.viewportChangeEnd(nextViewport) - - isPanScrolling.value = false - }, 150) - } - }, - { passive: false }, - ) - } else if (typeof d3ZoomHandler !== 'undefined') { - d3Selection.on( - 'wheel.zoom', - function (event: WheelEvent, d) { - if (!preventScrolling.value || isWrappedWithClass(event, noWheelClassName.value)) { - return null - } - - event.preventDefault() - // eslint-disable-next-line @typescript-eslint/no-invalid-this - d3ZoomHandler.call(this, event, d) - }, - { passive: false }, - ) - } - }) + watch( + [userSelectionActive, panOnScroll, panOnScrollMode, zoomKeyPressed, zoomOnPinch, preventScrolling, noWheelClassName], + () => { + if (shouldPanOnScroll.value && !zoomKeyPressed.value && !userSelectionActive.value) { + d3Selection.on( + 'wheel.zoom', + (event: WheelEvent) => { + if (isWrappedWithClass(event, noWheelClassName.value)) { + return false + } + + event.preventDefault() + event.stopImmediatePropagation() + + const currentZoom = d3Selection.property('__zoom').k || 1 + const _isMacOs = isMacOs() + + // macOS sets ctrlKey=true for pinch gesture on a trackpad + if (event.ctrlKey && zoomOnPinch.value && _isMacOs) { + const point = pointer(event) + const pinchDelta = wheelDelta(event) + const zoom = currentZoom * 2 ** pinchDelta + // @ts-expect-error d3-zoom types are not up to date + d3Zoom.scaleTo(d3Selection, zoom, point, event) + + return + } + + // increase scroll speed in firefox + // firefox: deltaMode === 1; chrome: deltaMode === 0 + const deltaNormalize = event.deltaMode === 1 ? 20 : 1 + + let deltaX = panOnScrollMode.value === PanOnScrollMode.Vertical ? 0 : event.deltaX * deltaNormalize + let deltaY = panOnScrollMode.value === PanOnScrollMode.Horizontal ? 0 : event.deltaY * deltaNormalize + + // this enables vertical scrolling with shift + scroll on windows + if (!_isMacOs && event.shiftKey && panOnScrollMode.value !== PanOnScrollMode.Vertical && !deltaX && deltaY) { + deltaX = deltaY + deltaY = 0 + } + + d3Zoom.translateBy( + d3Selection, + -(deltaX / currentZoom) * panOnScrollSpeed.value, + -(deltaY / currentZoom) * panOnScrollSpeed.value, + ) + + const nextViewport = eventToFlowTransform(d3Selection.property('__zoom')) + + if (panScrollTimeout) { + clearTimeout(panScrollTimeout) + } + + // for pan on scroll we need to handle the event calls on our own + // we can't use the start, zoom and end events from d3-zoom + // because start and move gets called on every scroll event and not once at the beginning + if (!isPanScrolling.value) { + isPanScrolling.value = true + + emits.moveStart({ event, flowTransform: nextViewport }) + emits.viewportChangeStart(nextViewport) + } else { + emits.move({ event, flowTransform: nextViewport }) + emits.viewportChange(nextViewport) + + panScrollTimeout = setTimeout(() => { + emits.moveEnd({ event, flowTransform: nextViewport }) + emits.viewportChangeEnd(nextViewport) + + isPanScrolling.value = false + }, 150) + } + }, + { passive: false }, + ) + } else if (typeof d3ZoomHandler !== 'undefined') { + d3Selection.on( + 'wheel.zoom', + function (this: any, event: WheelEvent, d: any) { + if (!preventScrolling.value || isWrappedWithClass(event, noWheelClassName.value)) { + return null + } + + event.preventDefault() + d3ZoomHandler.call(this, event, d) + }, + { passive: false }, + ) + } + }, + { immediate: true }, + ) }) function isRightClickPan(pan: FlowOptions['panOnDrag'], usedButton: number) { @@ -346,9 +355,9 @@ function wheelDelta(event: any) { function viewChanged(prevViewport: ViewportTransform, eventTransform: ZoomTransform) { return ( - (prevViewport.x !== eventTransform.x && !isNaN(eventTransform.x)) || - (prevViewport.y !== eventTransform.y && !isNaN(eventTransform.y)) || - (prevViewport.zoom !== eventTransform.k && !isNaN(eventTransform.k)) + (prevViewport.x !== eventTransform.x && !Number.isNaN(eventTransform.x)) || + (prevViewport.y !== eventTransform.y && !Number.isNaN(eventTransform.y)) || + (prevViewport.zoom !== eventTransform.k && !Number.isNaN(eventTransform.k)) ) } From f3c786f3c9e4445a401e063306e8d1985b3eaf5e Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Sun, 21 Jan 2024 13:35:09 +0100 Subject: [PATCH 22/25] chore(changeset): add --- .changeset/grumpy-elephants-burn.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/grumpy-elephants-burn.md diff --git a/.changeset/grumpy-elephants-burn.md b/.changeset/grumpy-elephants-burn.md new file mode 100644 index 000000000..d40487653 --- /dev/null +++ b/.changeset/grumpy-elephants-burn.md @@ -0,0 +1,5 @@ +--- +"@vue-flow/core": patch +--- + +Allow panning on scroll when selection is active From 13236fdb62a0b5ea7e24df174bb2d843e53b7aef Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Sun, 21 Jan 2024 13:35:28 +0100 Subject: [PATCH 23/25] fix(core,store): await fitView before emitting pane-ready --- packages/core/src/store/actions.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core/src/store/actions.ts b/packages/core/src/store/actions.ts index 0fac18851..e0662f844 100644 --- a/packages/core/src/store/actions.ts +++ b/packages/core/src/store/actions.ts @@ -962,10 +962,10 @@ export function useActions( } until(() => viewportHelper.value.initialized) - .toBe(true, { flush: 'pre' }) - .then(() => { + .toBe(true) + .then(async () => { if (state.fitViewOnInit) { - viewportHelper.value.fitView() + await viewportHelper.value.fitView() } state.hooks.paneReady.trigger({ From 4109cf1027455fbb308cdc4262e401e904ad07e2 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Sun, 21 Jan 2024 13:35:51 +0100 Subject: [PATCH 24/25] chore(changeset): add --- .changeset/warm-spiders-drum.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/warm-spiders-drum.md diff --git a/.changeset/warm-spiders-drum.md b/.changeset/warm-spiders-drum.md new file mode 100644 index 000000000..27af96e32 --- /dev/null +++ b/.changeset/warm-spiders-drum.md @@ -0,0 +1,5 @@ +--- +"@vue-flow/core": patch +--- + +Await fitView before emitting pane-ready From fca5421f5ecb981617d902bfe18353792cb8d4ed Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 21 Jan 2024 12:41:48 +0000 Subject: [PATCH 25/25] chore: bump versions --- .changeset/beige-trees-design.md | 5 ----- .changeset/gorgeous-hounds-fix.md | 5 ----- .changeset/grumpy-elephants-burn.md | 5 ----- .changeset/khaki-worms-hug.md | 5 ----- .changeset/lazy-cherries-sparkle.md | 5 ----- .changeset/quick-hounds-wonder.md | 5 ----- .changeset/smooth-steaks-doubt.md | 5 ----- .changeset/swift-rockets-trade.md | 5 ----- .changeset/warm-spiders-drum.md | 5 ----- .changeset/wicked-ants-switch.md | 5 ----- packages/core/CHANGELOG.md | 24 ++++++++++++++++++++++++ packages/core/package.json | 2 +- packages/minimap/CHANGELOG.md | 6 ++++++ packages/minimap/package.json | 2 +- 14 files changed, 32 insertions(+), 52 deletions(-) delete mode 100644 .changeset/beige-trees-design.md delete mode 100644 .changeset/gorgeous-hounds-fix.md delete mode 100644 .changeset/grumpy-elephants-burn.md delete mode 100644 .changeset/khaki-worms-hug.md delete mode 100644 .changeset/lazy-cherries-sparkle.md delete mode 100644 .changeset/quick-hounds-wonder.md delete mode 100644 .changeset/smooth-steaks-doubt.md delete mode 100644 .changeset/swift-rockets-trade.md delete mode 100644 .changeset/warm-spiders-drum.md delete mode 100644 .changeset/wicked-ants-switch.md diff --git a/.changeset/beige-trees-design.md b/.changeset/beige-trees-design.md deleted file mode 100644 index 1b71d5bb6..000000000 --- a/.changeset/beige-trees-design.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@vue-flow/core": patch ---- - -Pass vueflow id to `getMarkerId` in connection line component diff --git a/.changeset/gorgeous-hounds-fix.md b/.changeset/gorgeous-hounds-fix.md deleted file mode 100644 index f9172889a..000000000 --- a/.changeset/gorgeous-hounds-fix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@vue-flow/core": patch ---- - -Add default event handler when no handlers for a given event exist anymore diff --git a/.changeset/grumpy-elephants-burn.md b/.changeset/grumpy-elephants-burn.md deleted file mode 100644 index d40487653..000000000 --- a/.changeset/grumpy-elephants-burn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@vue-flow/core": patch ---- - -Allow panning on scroll when selection is active diff --git a/.changeset/khaki-worms-hug.md b/.changeset/khaki-worms-hug.md deleted file mode 100644 index 87c2f99f2..000000000 --- a/.changeset/khaki-worms-hug.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@vue-flow/core": minor ---- - -Expose handleClick and handlePointerDown from handle components diff --git a/.changeset/lazy-cherries-sparkle.md b/.changeset/lazy-cherries-sparkle.md deleted file mode 100644 index 34bd64dbb..000000000 --- a/.changeset/lazy-cherries-sparkle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@vue-flow/minimap": minor ---- - -Inherit attrs in minimap diff --git a/.changeset/quick-hounds-wonder.md b/.changeset/quick-hounds-wonder.md deleted file mode 100644 index 5d246ad8b..000000000 --- a/.changeset/quick-hounds-wonder.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@vue-flow/core": patch ---- - -Merge connection line styles with options diff --git a/.changeset/smooth-steaks-doubt.md b/.changeset/smooth-steaks-doubt.md deleted file mode 100644 index b0b74ca68..000000000 --- a/.changeset/smooth-steaks-doubt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@vue-flow/core": patch ---- - -Return false for boolean key filter and set the `isPressed` ref to whatever the keyFilter would be (true/false) diff --git a/.changeset/swift-rockets-trade.md b/.changeset/swift-rockets-trade.md deleted file mode 100644 index 3c1daf54f..000000000 --- a/.changeset/swift-rockets-trade.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@vue-flow/core": minor ---- - -Add `useConnection` composable for easy access of current connection params diff --git a/.changeset/warm-spiders-drum.md b/.changeset/warm-spiders-drum.md deleted file mode 100644 index 27af96e32..000000000 --- a/.changeset/warm-spiders-drum.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@vue-flow/core": patch ---- - -Await fitView before emitting pane-ready diff --git a/.changeset/wicked-ants-switch.md b/.changeset/wicked-ants-switch.md deleted file mode 100644 index 678840ad6..000000000 --- a/.changeset/wicked-ants-switch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@vue-flow/core": patch ---- - -Add fallback for connection line type (bezier as default) diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 19f6b0ba2..101a8a4d0 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,29 @@ # @vue-flow/core +## 1.29.0 + +### Minor Changes + +- [#1237](https://github.com/bcakmakoglu/vue-flow/pull/1237) [`16c7d32`](https://github.com/bcakmakoglu/vue-flow/commit/16c7d32746d72dd413e866c5c19461a5bee227ca) Thanks [@bcakmakoglu](https://github.com/bcakmakoglu)! - Expose handleClick and handlePointerDown from handle components + +- [#1238](https://github.com/bcakmakoglu/vue-flow/pull/1238) [`dd4cbe0`](https://github.com/bcakmakoglu/vue-flow/commit/dd4cbe0c92121fc6039e5f43bdc6e5d1663b8069) Thanks [@bcakmakoglu](https://github.com/bcakmakoglu)! - Add `useConnection` composable for easy access of current connection params + +### Patch Changes + +- [#1243](https://github.com/bcakmakoglu/vue-flow/pull/1243) [`b5e77a4`](https://github.com/bcakmakoglu/vue-flow/commit/b5e77a43da76db0ee4cbc16d205e90ef84f2ed62) Thanks [@bcakmakoglu](https://github.com/bcakmakoglu)! - Pass vueflow id to `getMarkerId` in connection line component + +- [#1236](https://github.com/bcakmakoglu/vue-flow/pull/1236) [`be15b5a`](https://github.com/bcakmakoglu/vue-flow/commit/be15b5acbcb6ccd06107a5dc195cc9e0c35b211c) Thanks [@github-actions](https://github.com/apps/github-actions)! - Add default event handler when no handlers for a given event exist anymore + +- [#1250](https://github.com/bcakmakoglu/vue-flow/pull/1250) [`f3c786f`](https://github.com/bcakmakoglu/vue-flow/commit/f3c786f3c9e4445a401e063306e8d1985b3eaf5e) Thanks [@bcakmakoglu](https://github.com/bcakmakoglu)! - Allow panning on scroll when selection is active + +- [#1236](https://github.com/bcakmakoglu/vue-flow/pull/1236) [`d46ac3a`](https://github.com/bcakmakoglu/vue-flow/commit/d46ac3a52c55e96d2e1994a60407767cdd945118) Thanks [@github-actions](https://github.com/apps/github-actions)! - Merge connection line styles with options + +- [#1250](https://github.com/bcakmakoglu/vue-flow/pull/1250) [`b71754f`](https://github.com/bcakmakoglu/vue-flow/commit/b71754fe10a3f7a13132ed1f6058385da267ed88) Thanks [@bcakmakoglu](https://github.com/bcakmakoglu)! - Return false for boolean key filter and set the `isPressed` ref to whatever the keyFilter would be (true/false) + +- [#1250](https://github.com/bcakmakoglu/vue-flow/pull/1250) [`4109cf1`](https://github.com/bcakmakoglu/vue-flow/commit/4109cf1027455fbb308cdc4262e401e904ad07e2) Thanks [@bcakmakoglu](https://github.com/bcakmakoglu)! - Await fitView before emitting pane-ready + +- [#1236](https://github.com/bcakmakoglu/vue-flow/pull/1236) [`d46ac3a`](https://github.com/bcakmakoglu/vue-flow/commit/d46ac3a52c55e96d2e1994a60407767cdd945118) Thanks [@github-actions](https://github.com/apps/github-actions)! - Add fallback for connection line type (bezier as default) + ## 1.28.0 ### Minor Changes diff --git a/packages/core/package.json b/packages/core/package.json index 4cd3d06fc..c962caa4b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@vue-flow/core", - "version": "1.28.0", + "version": "1.29.0", "private": false, "license": "MIT", "author": "Burak Cakmakoglu<78412429+bcakmakoglu@users.noreply.github.com>", diff --git a/packages/minimap/CHANGELOG.md b/packages/minimap/CHANGELOG.md index 793373631..b8b1a668e 100644 --- a/packages/minimap/CHANGELOG.md +++ b/packages/minimap/CHANGELOG.md @@ -1,5 +1,11 @@ # @vue-flow/minimap +## 1.4.0 + +### Minor Changes + +- [#1249](https://github.com/bcakmakoglu/vue-flow/pull/1249) [`a8bdb93`](https://github.com/bcakmakoglu/vue-flow/commit/a8bdb931771c47ecf985e3d0340a5c456efd1a31) Thanks [@bcakmakoglu](https://github.com/bcakmakoglu)! - Inherit attrs in minimap + ## 1.3.0 ### Minor Changes diff --git a/packages/minimap/package.json b/packages/minimap/package.json index 21ca52a28..49f40f07f 100644 --- a/packages/minimap/package.json +++ b/packages/minimap/package.json @@ -1,6 +1,6 @@ { "name": "@vue-flow/minimap", - "version": "1.3.0", + "version": "1.4.0", "private": false, "license": "MIT", "author": "Burak Cakmakoglu<78412429+bcakmakoglu@users.noreply.github.com>",