From 044eff8e09678da34b8ce650e11e17ae763ddbd8 Mon Sep 17 00:00:00 2001 From: Nikita Rokotyan Date: Wed, 22 Jul 2026 13:35:02 -0700 Subject: [PATCH 1/3] Vue | Crosshair | Timeline | Boxplot: Fix data prop dropped by misplaced @vue-ignore annotation (#855) Since 1.6.5, the Vue wrappers for the three "complex prop" components (Crosshair, Timeline, Boxplot) compiled with no runtime props at all, so their own `data` prop was silently ignored: `props.data` was always undefined and, for example, the crosshair tooltip template received `undefined` unless data was set on the container instead. Root cause: commit d4a22d21 changed the autogen output from an interface-extends pattern to an inline intersection with the ignore annotation in front: defineProps & { data?: Datum[] }>() Babel attaches a leading comment at the start of a type to the whole TSIntersectionType node, and @vue/compiler-sfc checks for @vue-ignore on a node before recursing into its members - so the entire type, including { data?: Datum[] }, resolved to zero props. Fix: reorder the intersection so the annotation attaches only to the config member: defineProps<{ data?: Datum[] } & /** @vue-ignore */ Config>() The compiled components now declare `props: { data: {} }` again, byte-identical to the 1.6.4 output, while config props keep flowing through as fallthrough attrs (which useForwardProps reads from attrs). The emitted d.ts still exposes the full Config & { data } typing. Note: reverting to the 1.6.4 interface-extends form is not possible - current vue-tsc fails it with TS4082 (private name 'Props' in the default export), which is the build error that motivated d4a22d21. The reordered intersection avoids both problems. Co-Authored-By: Claude Fable 5 --- packages/vue/autogen/component.ts | 2 +- packages/vue/src/components/boxplot/index.vue | 57 +++++++++++++++++++ .../vue/src/components/crosshair/index.vue | 7 +-- .../vue/src/components/timeline/index.vue | 8 +-- 4 files changed, 65 insertions(+), 9 deletions(-) create mode 100644 packages/vue/src/components/boxplot/index.vue diff --git a/packages/vue/autogen/component.ts b/packages/vue/autogen/component.ts index eb7b3b42a..ed1aa256c 100644 --- a/packages/vue/autogen/component.ts +++ b/packages/vue/autogen/component.ts @@ -34,7 +34,7 @@ ${isStandAlone ? '' : `import { ${elementSuffix}AccessorKey } from '../../utils/ ${isStandAlone ? '' : `const accessor = inject(${elementSuffix}AccessorKey)\n`} // data and required props ${isComplexPropComponent ? '\n// !!! temporary solution to ignore complex type. related issue: https://github.com/vuejs/core/issues/8412' : ''} ${isComplexPropComponent - ? `const props = defineProps()` + ? `const props = defineProps<{ data?: ${dataType} } & /** @vue-ignore */ ${componentName}ConfigInterface${genericsStr}>()` : `type Props = ${componentName}ConfigInterface${genericsStr}\nconst props = defineProps()`} ${propDefs.length && !isStandAlone ? `${propDefs.join('\n')}` : isStandAlone ? 'const data = computed(() => props.data)' : ''} diff --git a/packages/vue/src/components/boxplot/index.vue b/packages/vue/src/components/boxplot/index.vue new file mode 100644 index 000000000..d4d0fc279 --- /dev/null +++ b/packages/vue/src/components/boxplot/index.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/packages/vue/src/components/crosshair/index.vue b/packages/vue/src/components/crosshair/index.vue index d88039396..a38e530fe 100644 --- a/packages/vue/src/components/crosshair/index.vue +++ b/packages/vue/src/components/crosshair/index.vue @@ -5,12 +5,11 @@ import { onMounted, onUnmounted, computed, ref, watch, nextTick, inject } from ' import { arePropsEqual, useForwardProps } from '../../utils/props' import { crosshairAccessorKey } from '../../utils/context' -const accessor = inject(crosshairAccessorKey) - -// data and required props +// data and required props // !!! temporary solution to ignore complex type. related issue: https://github.com/vuejs/core/issues/8412 -const props = defineProps & { data?: Datum[] }>() +const props = defineProps<{ data?: Datum[] } & /** @vue-ignore */ CrosshairConfigInterface>() +const accessor = inject(crosshairAccessorKey) const data = computed(() => accessor.data.value ?? props.data) // config const config = useForwardProps(props) diff --git a/packages/vue/src/components/timeline/index.vue b/packages/vue/src/components/timeline/index.vue index f6e23f838..8d5fb8815 100644 --- a/packages/vue/src/components/timeline/index.vue +++ b/packages/vue/src/components/timeline/index.vue @@ -6,11 +6,11 @@ import { onMounted, onUnmounted, computed, ref, watch, nextTick, inject } from ' import { arePropsEqual, useForwardProps } from '../../utils/props' import { componentAccessorKey } from '../../utils/context' -const accessor = inject(componentAccessorKey) - -// data and required props +// data and required props // !!! temporary solution to ignore complex type. related issue: https://github.com/vuejs/core/issues/8412 -const props = defineProps & { data?: Datum[] }>() +const props = defineProps<{ data?: Datum[] } & /** @vue-ignore */ TimelineConfigInterface>() + +const accessor = inject(componentAccessorKey) const data = computed(() => accessor.data.value ?? props.data) // config From 892d9c7ed0e776a070800bd8f0b672612741b958 Mon Sep 17 00:00:00 2001 From: Qian Liu Date: Mon, 27 Jul 2026 11:45:34 -0700 Subject: [PATCH 2/3] Misc | Boxplot: Remove index.vue --- packages/vue/src/components/boxplot/index.vue | 57 ------------------- 1 file changed, 57 deletions(-) delete mode 100644 packages/vue/src/components/boxplot/index.vue diff --git a/packages/vue/src/components/boxplot/index.vue b/packages/vue/src/components/boxplot/index.vue deleted file mode 100644 index d4d0fc279..000000000 --- a/packages/vue/src/components/boxplot/index.vue +++ /dev/null @@ -1,57 +0,0 @@ - - - - - From c9cef0785c604e55689b13525c14ecc49a8c1b06 Mon Sep 17 00:00:00 2001 From: Qian Liu Date: Mon, 27 Jul 2026 11:46:41 -0700 Subject: [PATCH 3/3] Release: 1.6.8 --- package.json | 2 +- packages/angular/package.json | 4 ++-- packages/dev/package.json | 2 +- packages/react/package.json | 4 ++-- packages/shared/package.json | 2 +- packages/solid/package.json | 4 ++-- packages/svelte/package.json | 4 ++-- packages/ts/package.json | 2 +- packages/vue/package.json | 4 ++-- packages/website/package.json | 2 +- 10 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index ed2e618f1..a3e602a57 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "unovis", - "version": "1.6.7", + "version": "1.6.8", "packageManager": "pnpm@10.23.0", "license": "Apache-2.0", "private": true, diff --git a/packages/angular/package.json b/packages/angular/package.json index 982d12b9b..8f525674c 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -1,7 +1,7 @@ { "name": "@unovis/angular", "description": "Modular data visualization framework for React, Angular, Svelte, Vue, Solid, and vanilla TypeScript or JavaScript", - "version": "1.6.7", + "version": "1.6.8", "packageManager": "pnpm@10.23.0", "repository": { "type": "git", @@ -47,7 +47,7 @@ "tslib": "^2.3.1" }, "peerDependencies": { - "@unovis/ts": "1.6.7", + "@unovis/ts": "1.6.8", "@angular/common": "12 - 22", "@angular/compiler": "12 - 22", "@angular/core": "12 - 22", diff --git a/packages/dev/package.json b/packages/dev/package.json index f31d180a7..b66051985 100644 --- a/packages/dev/package.json +++ b/packages/dev/package.json @@ -1,6 +1,6 @@ { "name": "@unovis/dev", - "version": "1.6.7", + "version": "1.6.8", "packageManager": "pnpm@10.23.0", "main": "index.js", "license": "Apache-2.0", diff --git a/packages/react/package.json b/packages/react/package.json index b82a2a4da..fa2f2a315 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,7 +1,7 @@ { "name": "@unovis/react", "description": "Modular data visualization framework for React, Angular, Svelte, Vue, Solid, and vanilla TypeScript or JavaScript", - "version": "1.6.7", + "version": "1.6.8", "packageManager": "pnpm@10.23.0", "repository": { "type": "git", @@ -38,7 +38,7 @@ "license:check": "pnpm license-report --config=../../lic-report-config.json > licences.md" }, "peerDependencies": { - "@unovis/ts": "1.6.7", + "@unovis/ts": "1.6.8", "react": ">=16.8.0 || ^17 || ^18 || ^19", "react-dom": ">=16.8.0 || ^17 || ^18 || ^19" }, diff --git a/packages/shared/package.json b/packages/shared/package.json index 99a0f50a2..80cea7d28 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,7 +1,7 @@ { "name": "@unovis/shared", "description": "Modular data visualization framework for React, Angular, Svelte, Vue, Solid, and vanilla TypeScript or JavaScript", - "version": "1.6.7", + "version": "1.6.8", "packageManager": "pnpm@10.23.0", "repository": { "type": "git", diff --git a/packages/solid/package.json b/packages/solid/package.json index 4d2701ded..0fdb50229 100644 --- a/packages/solid/package.json +++ b/packages/solid/package.json @@ -1,7 +1,7 @@ { "name": "@unovis/solid", "description": "Modular data visualization framework for React, Angular, Svelte, Vue, Solid and vanilla TypeScript or JavaScript", - "version": "1.6.7", + "version": "1.6.8", "packageManager": "pnpm@10.23.0", "repository": { "type": "git", @@ -37,7 +37,7 @@ "license:check": "pnpm license-report --config=../../lic-report-config.json > licences.md" }, "peerDependencies": { - "@unovis/ts": "1.6.7", + "@unovis/ts": "1.6.8", "solid-js": "^1.9.0" }, "devDependencies": { diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 310bd452b..d776519c6 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -1,7 +1,7 @@ { "name": "@unovis/svelte", "description": "Modular data visualization framework for React, Angular, Svelte, Vue, Solid, and vanilla TypeScript or JavaScript", - "version": "1.6.7", + "version": "1.6.8", "packageManager": "pnpm@10.23.0", "repository": { "type": "git", @@ -46,7 +46,7 @@ "license:check": "pnpm license-report --config=../../lic-report-config.json > licences.md" }, "peerDependencies": { - "@unovis/ts": "1.6.7", + "@unovis/ts": "1.6.8", "svelte": "^3.48.0 || ^4.0.0 " }, "devDependencies": { diff --git a/packages/ts/package.json b/packages/ts/package.json index 99ad8191e..7597667dd 100644 --- a/packages/ts/package.json +++ b/packages/ts/package.json @@ -1,7 +1,7 @@ { "name": "@unovis/ts", "description": "Modular data visualization framework for React, Angular, Svelte, Vue, Solid, and vanilla TypeScript or JavaScript", - "version": "1.6.7", + "version": "1.6.8", "packageManager": "pnpm@10.23.0", "repository": { "type": "git", diff --git a/packages/vue/package.json b/packages/vue/package.json index a716a7103..f00c7c14d 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,7 +1,7 @@ { "name": "@unovis/vue", "description": "Modular data visualization framework for React, Angular, Svelte, Vue, and vanilla TypeScript or JavaScript", - "version": "1.6.7", + "version": "1.6.8", "packageManager": "pnpm@10.23.0", "repository": { "type": "git", @@ -54,7 +54,7 @@ "license:check": "pnpm license-report --config=../../lic-report-config.json > licences.md" }, "peerDependencies": { - "@unovis/ts": "1.6.7", + "@unovis/ts": "1.6.8", "vue": "^3" }, "devDependencies": { diff --git a/packages/website/package.json b/packages/website/package.json index 0845f404f..c9a7071f0 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -1,7 +1,7 @@ { "name": "@unovis/website", "description": "Modular data visualization framework for React, Angular, Svelte, Vue, Solid, and vanilla TypeScript or JavaScript", - "version": "1.6.7", + "version": "1.6.8", "packageManager": "pnpm@10.23.0", "repository": { "type": "git",