diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 6c7e0ea79..193bf2847 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -14,8 +14,8 @@ importers: '@types/react-dom': ^18.0.0 '@visactor/vchart': 1.3.0 '@visactor/vgrammar': ~0.5.7 - '@visactor/vrender': workspace:0.20.5 - '@visactor/vutils': ~0.18.16 + '@visactor/vrender': workspace:0.20.6 + '@visactor/vutils': ~0.18.17 '@vitejs/plugin-react': 3.1.0 axios: ^1.4.0 chalk: ^3.0.0 @@ -38,7 +38,7 @@ importers: '@visactor/vchart': 1.3.0 '@visactor/vgrammar': 0.5.7 '@visactor/vrender': link:../packages/vrender - '@visactor/vutils': 0.18.16 + '@visactor/vutils': 0.18.17 axios: 1.7.4 highlight.js: 11.10.0 lodash: 4.17.21 @@ -71,8 +71,8 @@ importers: '@types/react': ^18.0.0 '@types/react-dom': ^18.0.0 '@types/react-reconciler': ^0.28.2 - '@visactor/vrender': workspace:0.20.5 - '@visactor/vutils': ~0.18.16 + '@visactor/vrender': workspace:0.20.6 + '@visactor/vutils': ~0.18.17 '@vitejs/plugin-react': 3.1.0 cross-env: ^7.0.3 eslint: ~8.18.0 @@ -84,7 +84,7 @@ importers: vite: 3.2.6 dependencies: '@visactor/vrender': link:../vrender - '@visactor/vutils': 0.18.16 + '@visactor/vutils': 0.18.17 react-reconciler: 0.29.2_react@18.3.1 tslib: 2.6.3 devDependencies: @@ -111,9 +111,9 @@ importers: '@rushstack/eslint-patch': ~1.1.4 '@types/react': ^18.0.0 '@types/react-dom': ^18.0.0 - '@visactor/react-vrender': workspace:0.20.5 - '@visactor/vrender': workspace:0.20.5 - '@visactor/vutils': ~0.18.16 + '@visactor/react-vrender': workspace:0.20.6 + '@visactor/vrender': workspace:0.20.6 + '@visactor/vutils': ~0.18.17 '@vitejs/plugin-react': 3.1.0 cross-env: ^7.0.3 eslint: ~8.18.0 @@ -126,7 +126,7 @@ importers: dependencies: '@visactor/react-vrender': link:../react-vrender '@visactor/vrender': link:../vrender - '@visactor/vutils': 0.18.16 + '@visactor/vutils': 0.18.17 react-reconciler: 0.29.2_react@18.3.1 tslib: 2.6.3 devDependencies: @@ -153,9 +153,9 @@ importers: '@types/jest': ^26.0.0 '@types/react': ^18.0.0 '@types/react-dom': ^18.0.0 - '@visactor/vrender-core': workspace:0.20.5 - '@visactor/vrender-kits': workspace:0.20.5 - '@visactor/vutils': ~0.18.16 + '@visactor/vrender-core': workspace:0.20.6 + '@visactor/vrender-kits': workspace:0.20.6 + '@visactor/vutils': ~0.18.17 '@vitejs/plugin-react': 3.1.0 canvas: 2.11.2 cross-env: ^7.0.3 @@ -179,7 +179,7 @@ importers: '@types/jest': 26.0.24 '@types/react': 18.3.3 '@types/react-dom': 18.3.0 - '@visactor/vutils': 0.18.16 + '@visactor/vutils': 0.18.17 '@vitejs/plugin-react': 3.1.0_vite@3.2.6 canvas: 2.11.2 cross-env: 7.0.3 @@ -200,10 +200,10 @@ importers: '@internal/ts-config': workspace:* '@rushstack/eslint-patch': ~1.1.4 '@types/jest': ^26.0.0 - '@visactor/vrender-core': workspace:0.20.5 - '@visactor/vrender-kits': workspace:0.20.5 - '@visactor/vscale': ~0.18.16 - '@visactor/vutils': ~0.18.16 + '@visactor/vrender-core': workspace:0.20.6 + '@visactor/vrender-kits': workspace:0.20.6 + '@visactor/vscale': ~0.18.17 + '@visactor/vutils': ~0.18.17 cross-env: ^7.0.3 eslint: ~8.18.0 jest: ^26.0.0 @@ -215,8 +215,8 @@ importers: dependencies: '@visactor/vrender-core': link:../vrender-core '@visactor/vrender-kits': link:../vrender-kits - '@visactor/vscale': 0.18.16 - '@visactor/vutils': 0.18.16 + '@visactor/vscale': 0.18.17 + '@visactor/vutils': 0.18.17 devDependencies: '@internal/bundler': link:../../tools/bundler '@internal/eslint-config': link:../../share/eslint-config @@ -241,7 +241,7 @@ importers: '@types/jest': ^26.0.0 '@types/react': ^18.0.0 '@types/react-dom': ^18.0.0 - '@visactor/vutils': ~0.18.16 + '@visactor/vutils': ~0.18.17 '@vitejs/plugin-react': 3.1.0 color-convert: 2.0.1 cross-env: ^7.0.3 @@ -255,7 +255,7 @@ importers: typescript: 4.9.5 vite: 3.2.6 dependencies: - '@visactor/vutils': 0.18.16 + '@visactor/vutils': 0.18.17 color-convert: 2.0.1 devDependencies: '@internal/bundler': link:../../tools/bundler @@ -287,8 +287,8 @@ importers: '@types/node-fetch': 2.6.4 '@types/react': ^18.0.0 '@types/react-dom': ^18.0.0 - '@visactor/vrender-core': workspace:0.20.5 - '@visactor/vutils': ~0.18.16 + '@visactor/vrender-core': workspace:0.20.6 + '@visactor/vutils': ~0.18.17 '@vitejs/plugin-react': 3.1.0 canvas: 2.11.2 cross-env: ^7.0.3 @@ -302,7 +302,7 @@ importers: dependencies: '@resvg/resvg-js': 2.4.1 '@visactor/vrender-core': link:../vrender-core - '@visactor/vutils': 0.18.16 + '@visactor/vutils': 0.18.17 roughjs: 4.5.2 devDependencies: '@internal/bundler': link:../../tools/bundler @@ -369,10 +369,10 @@ importers: '@rushstack/eslint-patch': ~1.1.4 '@types/node': '*' '@types/node-fetch': 2.6.4 - '@visactor/vrender': workspace:0.20.5 - '@visactor/vrender-components': workspace:0.20.5 - '@visactor/vrender-core': workspace:0.20.5 - '@visactor/vrender-kits': workspace:0.20.5 + '@visactor/vrender': workspace:0.20.6 + '@visactor/vrender-components': workspace:0.20.6 + '@visactor/vrender-core': workspace:0.20.6 + '@visactor/vrender-kits': workspace:0.20.6 cross-env: ^7.0.3 eslint: ~8.18.0 form-data: ~4.0.0 @@ -3422,10 +3422,10 @@ packages: '@visactor/vutils': 0.15.14 dev: false - /@visactor/vscale/0.18.16: - resolution: {integrity: sha512-iOMo7dHoImlRntHdSLVbx4dgyGQ7SCSeOHoA5Re7rDmC23h8Tsb9n5sP8l6DRYq/Xzuq0yAbR80iizmNZnnlWw==} + /@visactor/vscale/0.18.17: + resolution: {integrity: sha512-jChQ7kq2CN/i+BtQ9wA2B8Xqmlw2xQDARDrmiUszXtuki07zNvq39UiNiQLQQjPq1qXb5hHNY4h4Wsp6fUa/RQ==} dependencies: - '@visactor/vutils': 0.18.16 + '@visactor/vutils': 0.18.17 dev: false /@visactor/vutils/0.13.3: @@ -3444,8 +3444,8 @@ packages: eventemitter3: 4.0.7 dev: false - /@visactor/vutils/0.18.16: - resolution: {integrity: sha512-F2QZVtnc47L1jXyz9o5bEeadIwgdPfoQy6gxE+n6bPJfKZHq3YKp0B5ase9+m2sKNBCrHYc2q9k5lRtp8h/TAQ==} + /@visactor/vutils/0.18.17: + resolution: {integrity: sha512-V9KZTlqyjyKEnKqmH8n2VjxOKlR7bX07R7W8tgEV4andfCYG8ufbx+xniR3jYXxCtca4USAks2KwyJBj2H+Kww==} dependencies: '@turf/helpers': 6.5.0 '@turf/invariant': 6.5.0 diff --git a/common/config/rush/version-policies.json b/common/config/rush/version-policies.json index 4eb52d350..c61eed255 100644 --- a/common/config/rush/version-policies.json +++ b/common/config/rush/version-policies.json @@ -1 +1 @@ -[{"definitionName":"lockStepVersion","policyName":"vrenderMain","version":"0.20.5","nextBump":"patch"}] +[{"definitionName":"lockStepVersion","policyName":"vrenderMain","version":"0.20.6","nextBump":"patch"}] diff --git a/docs/assets/changelog/en/changelog.md b/docs/assets/changelog/en/changelog.md index a3148708c..50e1b941e 100644 --- a/docs/assets/changelog/en/changelog.md +++ b/docs/assets/changelog/en/changelog.md @@ -1,3 +1,25 @@ +# v0.20.5 + +2024-09-20 + + +**🆕 New feature** + +- **@visactor/vrender-core**: poptip suppport multiline text, closed [#1444](https://github.com/VisActor/VRender/issues/1444) +- **@visactor/vrender-core**: fix issue with richtext width on disableAutoWrapLine mode, support clip attr + +**🐛 Bug fix** + +- **@visactor/vrender-components**: update parameters +- **@visactor/vrender-components**: fix maxLineWidth of arc label +- **@visactor/vrender-components**: fix `textStyle` of data-zoom +- **@visactor/vrender-core**: fix error of `bounds-contex` when use `arcTo` in customShape +- **@visactor/vrender-core**: fix path string of arc, fix [#1434](https://github.com/VisActor/VRender/issues/1434) +- **@visactor/vrender-core**: fix error of morphing animation in `multiToOneMorph`, fix [#1439](https://github.com/VisActor/VRender/issues/1439) +- **@visactor/vrender**: add disableFill box color in checkbox and radio [#1437](https://github.com/VisActor/VRender/issues/1437) + +[more detail about v0.20.5](https://github.com/VisActor/VRender/releases/tag/v0.20.5) + # v0.20.4 2024-09-12 diff --git a/docs/assets/changelog/zh/changelog.md b/docs/assets/changelog/zh/changelog.md index f03b1306e..b7a85a3ef 100644 --- a/docs/assets/changelog/zh/changelog.md +++ b/docs/assets/changelog/zh/changelog.md @@ -1,3 +1,25 @@ +# v0.20.5 + +2024-09-20 + + +**🆕 新增功能** + +- **@visactor/vrender-core**: poptip suppport multiline text, closed [#1444](https://github.com/VisActor/VRender/issues/1444) +- **@visactor/vrender-core**: fix issue with richtext width on disableAutoWrapLine mode, support clip attr + +**🐛 功能修复** + +- **@visactor/vrender-components**: update parameters +- **@visactor/vrender-components**: fix maxLineWidth of arc label +- **@visactor/vrender-components**: fix `textStyle` of data-zoom +- **@visactor/vrender-core**: fix error of `bounds-contex` when use `arcTo` in customShape +- **@visactor/vrender-core**: fix path string of arc, fix [#1434](https://github.com/VisActor/VRender/issues/1434) +- **@visactor/vrender-core**: fix error of morphing animation in `multiToOneMorph`, fix [#1439](https://github.com/VisActor/VRender/issues/1439) +- **@visactor/vrender**: add disableFill box color in checkbox and radio [#1437](https://github.com/VisActor/VRender/issues/1437) + +[更多详情请查看 v0.20.5](https://github.com/VisActor/VRender/releases/tag/v0.20.5) + # v0.20.4 2024-09-12 diff --git a/docs/demos/package.json b/docs/demos/package.json index dc9e44eae..ac7701cd5 100644 --- a/docs/demos/package.json +++ b/docs/demos/package.json @@ -12,7 +12,7 @@ "@internal/eslint-config": "workspace:*", "@internal/ts-config": "workspace:*", "@visactor/vrender-kits": "workspace:0.14.8", - "@visactor/vutils": "~0.18.16", + "@visactor/vutils": "~0.18.17", "d3-scale-chromatic": "^3.0.0", "lodash": "4.17.21", "dat.gui": "^0.7.9", diff --git a/docs/package.json b/docs/package.json index a202b8e35..4841cf496 100644 --- a/docs/package.json +++ b/docs/package.json @@ -11,9 +11,9 @@ "dependencies": { "@arco-design/web-react": "2.46.1", "@visactor/vchart": "1.3.0", - "@visactor/vutils": "~0.18.16", + "@visactor/vutils": "~0.18.17", "@visactor/vgrammar": "~0.5.7", - "@visactor/vrender": "workspace:0.20.5", + "@visactor/vrender": "workspace:0.20.6", "markdown-it": "^13.0.0", "highlight.js": "^11.8.0", "axios": "^1.4.0", diff --git a/packages/react-vrender-utils/CHANGELOG.json b/packages/react-vrender-utils/CHANGELOG.json index cd485cded..eec43d858 100644 --- a/packages/react-vrender-utils/CHANGELOG.json +++ b/packages/react-vrender-utils/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@visactor/react-vrender-utils", "entries": [ + { + "version": "0.20.6", + "tag": "@visactor/react-vrender-utils_v0.20.6", + "date": "Thu, 26 Sep 2024 09:28:35 GMT", + "comments": {} + }, { "version": "0.20.5", "tag": "@visactor/react-vrender-utils_v0.20.5", diff --git a/packages/react-vrender-utils/CHANGELOG.md b/packages/react-vrender-utils/CHANGELOG.md index 530a1b144..ff4e572f5 100644 --- a/packages/react-vrender-utils/CHANGELOG.md +++ b/packages/react-vrender-utils/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @visactor/react-vrender-utils -This log was last generated on Fri, 20 Sep 2024 06:37:57 GMT and should not be manually modified. +This log was last generated on Thu, 26 Sep 2024 09:28:36 GMT and should not be manually modified. + +## 0.20.6 +Thu, 26 Sep 2024 09:28:35 GMT + +_Version update only_ ## 0.20.5 Fri, 20 Sep 2024 06:37:57 GMT diff --git a/packages/react-vrender-utils/package.json b/packages/react-vrender-utils/package.json index d9cc637ca..a71eb2493 100644 --- a/packages/react-vrender-utils/package.json +++ b/packages/react-vrender-utils/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/react-vrender-utils", - "version": "0.20.5", + "version": "0.20.6", "description": "", "sideEffects": false, "main": "cjs/index.js", @@ -24,9 +24,9 @@ "react-dom": "^18.2.0" }, "dependencies": { - "@visactor/vrender": "workspace:0.20.5", - "@visactor/react-vrender": "workspace:0.20.5", - "@visactor/vutils": "~0.18.16", + "@visactor/vrender": "workspace:0.20.6", + "@visactor/react-vrender": "workspace:0.20.6", + "@visactor/vutils": "~0.18.17", "react-reconciler": "^0.29.0", "tslib": "^2.3.1" }, diff --git a/packages/react-vrender/CHANGELOG.json b/packages/react-vrender/CHANGELOG.json index 71469b48f..f864b97cb 100644 --- a/packages/react-vrender/CHANGELOG.json +++ b/packages/react-vrender/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@visactor/react-vrender", "entries": [ + { + "version": "0.20.6", + "tag": "@visactor/react-vrender_v0.20.6", + "date": "Thu, 26 Sep 2024 09:28:36 GMT", + "comments": {} + }, { "version": "0.20.5", "tag": "@visactor/react-vrender_v0.20.5", diff --git a/packages/react-vrender/CHANGELOG.md b/packages/react-vrender/CHANGELOG.md index efe1ad0a9..7c84ecfc3 100644 --- a/packages/react-vrender/CHANGELOG.md +++ b/packages/react-vrender/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @visactor/react-vrender -This log was last generated on Fri, 20 Sep 2024 06:37:57 GMT and should not be manually modified. +This log was last generated on Thu, 26 Sep 2024 09:28:36 GMT and should not be manually modified. + +## 0.20.6 +Thu, 26 Sep 2024 09:28:36 GMT + +_Version update only_ ## 0.20.5 Fri, 20 Sep 2024 06:37:57 GMT diff --git a/packages/react-vrender/package.json b/packages/react-vrender/package.json index 144409191..79175e028 100644 --- a/packages/react-vrender/package.json +++ b/packages/react-vrender/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/react-vrender", - "version": "0.20.5", + "version": "0.20.6", "description": "", "sideEffects": false, "main": "cjs/index.js", @@ -23,8 +23,8 @@ "react": "^18.2.0" }, "dependencies": { - "@visactor/vrender": "workspace:0.20.5", - "@visactor/vutils": "~0.18.16", + "@visactor/vrender": "workspace:0.20.6", + "@visactor/vutils": "~0.18.17", "react-reconciler": "^0.29.0", "tslib": "^2.3.1" }, diff --git a/packages/vrender-components/CHANGELOG.json b/packages/vrender-components/CHANGELOG.json index 6512b3ba1..b45966bb6 100644 --- a/packages/vrender-components/CHANGELOG.json +++ b/packages/vrender-components/CHANGELOG.json @@ -1,6 +1,30 @@ { "name": "@visactor/vrender-components", "entries": [ + { + "version": "0.20.6", + "tag": "@visactor/vrender-components_v0.20.6", + "date": "Thu, 26 Sep 2024 09:28:36 GMT", + "comments": { + "none": [ + { + "comment": " feat: support obb text bounds to enhance autoHide effect" + }, + { + "comment": "fix: fix limit width of arc label when has customized align offset\n\n" + }, + { + "comment": "fix: fix error of `alternateColor`\n\n" + }, + { + "comment": "fix: outside label should not apply `smartInvert`\n\n" + }, + { + "comment": "fix: fix `boundsPadding` of legend focus icon\n\n" + } + ] + } + }, { "version": "0.20.5", "tag": "@visactor/vrender-components_v0.20.5", diff --git a/packages/vrender-components/CHANGELOG.md b/packages/vrender-components/CHANGELOG.md index d3ca06ff8..634b5a044 100644 --- a/packages/vrender-components/CHANGELOG.md +++ b/packages/vrender-components/CHANGELOG.md @@ -1,6 +1,25 @@ # Change Log - @visactor/vrender-components -This log was last generated on Fri, 20 Sep 2024 06:37:57 GMT and should not be manually modified. +This log was last generated on Thu, 26 Sep 2024 09:28:36 GMT and should not be manually modified. + +## 0.20.6 +Thu, 26 Sep 2024 09:28:36 GMT + +### Updates + +- feat: support obb text bounds to enhance autoHide effect +- fix: fix limit width of arc label when has customized align offset + + +- fix: fix error of `alternateColor` + + +- fix: outside label should not apply `smartInvert` + + +- fix: fix `boundsPadding` of legend focus icon + + ## 0.20.5 Fri, 20 Sep 2024 06:37:57 GMT diff --git a/packages/vrender-components/package.json b/packages/vrender-components/package.json index 219314acb..9ade3c8e3 100644 --- a/packages/vrender-components/package.json +++ b/packages/vrender-components/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vrender-components", - "version": "0.20.5", + "version": "0.20.6", "description": "components library for dp visualization", "sideEffects": false, "main": "cjs/index.js", @@ -24,17 +24,17 @@ "analysis-core": "cross-env DEBUG='Bundler*' bundle -f umd -a -i core.ts" }, "dependencies": { - "@visactor/vutils": "~0.18.16", - "@visactor/vscale": "~0.18.16", - "@visactor/vrender-core": "workspace:0.20.5", - "@visactor/vrender-kits": "workspace:0.20.5" + "@visactor/vutils": "~0.18.17", + "@visactor/vscale": "~0.18.17", + "@visactor/vrender-core": "workspace:0.20.6", + "@visactor/vrender-kits": "workspace:0.20.6" }, "devDependencies": { "@internal/bundler": "workspace:*", "@internal/eslint-config": "workspace:*", "@internal/ts-config": "workspace:*", "@rushstack/eslint-patch": "~1.1.4", - "@visactor/vscale": "~0.18.16", + "@visactor/vscale": "~0.18.17", "@types/jest": "^26.0.0", "jest": "^26.0.0", "jest-electron": "^0.1.12", diff --git a/packages/vrender-components/src/axis/grid/base.ts b/packages/vrender-components/src/axis/grid/base.ts index db6147d86..d92425013 100644 --- a/packages/vrender-components/src/axis/grid/base.ts +++ b/packages/vrender-components/src/axis/grid/base.ts @@ -1,7 +1,7 @@ /** * @description 网格线 */ -import { isFunction, isArray, merge, PointService, abs, pi } from '@visactor/vutils'; +import { isFunction, isArray, merge, PointService, abs, pi, isNumberClose } from '@visactor/vutils'; import type { IGraphic, IGroup, Path } from '@visactor/vrender-core'; import { graphicCreator } from '@visactor/vrender-core'; import { AbstractComponent } from '../../core/base'; @@ -115,6 +115,7 @@ export abstract class BaseGrid extends AbstractCom abstract isInValidValue(value: number): boolean; abstract getVerticalVector(offset: number, inside: boolean, point: Point): [number, number]; protected abstract getGridAttribute(isSubGrid: boolean): T; + protected abstract getGridPointsByValue(value: number): Point[]; protected render(): void { this._prevInnerView = this._innerView && getElMap(this._innerView); @@ -220,10 +221,28 @@ export abstract class BaseGrid extends AbstractCom ? (alternateColor as string[]) : [alternateColor as string, 'transparent']; const getColor = (index: number) => colors[index % colors.length]; + const originalItems = this.attribute.items; + const firstItem = originalItems[0]; + const lastItem = originalItems[originalItems.length - 1]; + const noZero = !isNumberClose(firstItem.value, 0) && !isNumberClose(lastItem.value, 0); + const noOne = !isNumberClose(firstItem.value, 1) && !isNumberClose(lastItem.value, 1); + const allPoints = []; + const isDesc = firstItem.value > lastItem.value; - // const regions: any[] = []; - for (let index = 0; index < items.length - 1; index++) { - const [prev, curr] = [items[index].points, items[index + 1].points]; + if ((isDesc && noOne) || (!isDesc && noZero)) { + allPoints.push(this.getGridPointsByValue(isDesc ? 1 : 0)); + } + items.forEach((item: any) => { + allPoints.push(item.points as Point[]); + }); + + if ((isDesc && noZero) || (!isDesc && noOne)) { + allPoints.push(this.getGridPointsByValue(isDesc ? 0 : 1)); + } + + for (let index = 0; index < allPoints.length - 1; index++) { + const prev = allPoints[index]; + const curr = allPoints[index + 1]; const path = getRegionPath(prev, curr, gridAttrs); const shape = graphicCreator.path({ path, diff --git a/packages/vrender-components/src/axis/grid/circle.ts b/packages/vrender-components/src/axis/grid/circle.ts index 64790a987..453fdfe4c 100644 --- a/packages/vrender-components/src/axis/grid/circle.ts +++ b/packages/vrender-components/src/axis/grid/circle.ts @@ -20,6 +20,13 @@ export class CircleAxisGrid extends BaseGrid { super(options?.skipDefault ? attributes : merge({}, BaseGrid.defaultAttributes, attributes), options); } + protected getGridPointsByValue(value: number) { + const basePoint = this.getTickCoord(value); + const { radius, innerRadius = 0 } = this.attribute; + + return [basePoint, this.getVerticalCoord(basePoint, radius - innerRadius, true)]; + } + protected getGridAttribute(isSubGrid: boolean) { let gridAttribute; let items: GridItem[] = []; diff --git a/packages/vrender-components/src/axis/grid/line.ts b/packages/vrender-components/src/axis/grid/line.ts index b5559929d..556b85148 100644 --- a/packages/vrender-components/src/axis/grid/line.ts +++ b/packages/vrender-components/src/axis/grid/line.ts @@ -4,7 +4,7 @@ * - `type: 'circle'` 或者 `type: 'polygon'` 用于极坐标半径轴的网格线绘制 */ import type { IPointLike } from '@visactor/vutils'; -import { PointService, merge, polarToCartesian, mixin } from '@visactor/vutils'; +import { PointService, merge, mixin } from '@visactor/vutils'; import { BaseGrid } from './base'; import type { GridItem, @@ -50,6 +50,12 @@ export class LineAxisGrid extends BaseGrid { return gridPoints; } + protected getGridPointsByValue(value: number) { + const basePoint = this.getTickCoord(value); + + return this._getGridPoint(this.attribute.type, basePoint); + } + protected getGridAttribute(isSubGrid: boolean) { const { type: gridType, alignWithLabel = true } = this.attribute; @@ -85,7 +91,7 @@ export class LineAxisGrid extends BaseGrid { gridAttribute = merge({}, this.attribute, this.attribute.subGrid); // 计算 grid Items const subGridItems: GridItem[] = []; - const { count: subCount = 4 } = this.attribute.subGrid || {}; + const { count: subCount = 4 } = gridAttribute; const tickLineCount = this.data.length; // 刻度线的数量大于 2 时,才绘制子刻度 if (tickLineCount >= 2) { @@ -96,17 +102,16 @@ export class LineAxisGrid extends BaseGrid { const next = points[i + 1]; subGridItems.push({ id: `sub-${i}-0`, - points: this._getGridPoint(gridType, this.getTickCoord(pre.value)), + points: this.getGridPointsByValue(pre.value), // TODO: 其实这里也需要,后续需要考虑怎么挂上 data datum: {} }); for (let j = 0; j < subCount; j++) { const percent = (j + 1) / (subCount + 1); const value = (1 - percent) * pre.value + percent * next.value; - const point = this.getTickCoord(value); subGridItems.push({ id: `sub-${i}-${j + 1}`, - points: this._getGridPoint(gridType, point), + points: this.getGridPointsByValue(value), // TODO: 其实这里也需要,后续需要考虑怎么挂上 data datum: {} }); @@ -114,7 +119,7 @@ export class LineAxisGrid extends BaseGrid { if (i === points.length - 2) { subGridItems.push({ id: `sub-${i}-${subCount + 1}`, - points: this._getGridPoint(gridType, this.getTickCoord(next.value)), + points: this.getGridPointsByValue(next.value), // TODO: 其实这里也需要,后续需要考虑怎么挂上 data datum: {} }); diff --git a/packages/vrender-components/src/axis/overlap/auto-hide.ts b/packages/vrender-components/src/axis/overlap/auto-hide.ts index 08ad1ccde..546ca078d 100644 --- a/packages/vrender-components/src/axis/overlap/auto-hide.ts +++ b/packages/vrender-components/src/axis/overlap/auto-hide.ts @@ -5,18 +5,8 @@ import type { IText } from '@visactor/vrender-core'; import type { IBounds } from '@visactor/vutils'; // eslint-disable-next-line no-duplicate-imports -import { isEmpty, isFunction, isRectIntersect, isRotateAABBIntersect, last } from '@visactor/vutils'; +import { isEmpty, isFunction, last } from '@visactor/vutils'; import type { CustomMethod } from '../type'; -import { genRotateBounds } from './util'; - -function itemIntersect(item1: IText, item2: IText) { - return ( - isRectIntersect(item1.AABBBounds, item2.AABBBounds, false) && - (item1.rotatedBounds && item2.rotatedBounds - ? isRotateAABBIntersect(item1.rotatedBounds, item2.rotatedBounds, true) - : true) - ); -} const methods = { parity: function (items: IText[]) { @@ -35,20 +25,14 @@ const methods = { }; function intersect(textA: IText, textB: IText, sep: number) { - const a = textA.AABBBounds; - const b = textB.AABBBounds; - return ( - sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2) && - (textA.rotatedBounds && textB.rotatedBounds - ? sep > - Math.max( - textB.rotatedBounds.x1 - textA.rotatedBounds.x2, - textA.rotatedBounds.x1 - textB.rotatedBounds.x2, - textB.rotatedBounds.y1 - textA.rotatedBounds.y2, - textA.rotatedBounds.y1 - textB.rotatedBounds.y2 - ) - : true) - ); + let a: IBounds = textA.OBBBounds; + let b: IBounds = textB.OBBBounds; + if (a && b && !a.empty() && !b.empty()) { + return a.intersects(b); + } + a = textA.AABBBounds; + b = textB.AABBBounds; + return sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2); } function hasOverlap(items: IText[], pad: number) { @@ -60,8 +44,13 @@ function hasOverlap(items: IText[], pad: number) { } function hasBounds(item: IText) { - const b = item.AABBBounds; - return b.width() > 1 && b.height() > 1; + let bounds; + if (!item.OBBBounds.empty()) { + bounds = item.OBBBounds; + } else { + bounds = item.AABBBounds; + } + return bounds.width() > 1 && bounds.height() > 1; } // reset all items to be fully opaque @@ -106,9 +95,6 @@ export function autoHide(labels: IText[], config: HideConfig) { items = reset(source); - // 计算旋转包围盒 - genRotateBounds(items); - const { method = 'parity', separation: sep = 0 } = config; const reduce = isFunction(method) ? method : methods[method] || methods.parity; diff --git a/packages/vrender-components/src/axis/overlap/util.ts b/packages/vrender-components/src/axis/overlap/util.ts index bd38ffda7..d3326118a 100644 --- a/packages/vrender-components/src/axis/overlap/util.ts +++ b/packages/vrender-components/src/axis/overlap/util.ts @@ -1,12 +1,5 @@ import type { IText } from '@visactor/vrender-core'; -import { isNil, isRectIntersect, isRotateAABBIntersect } from '@visactor/vutils'; - -function rotate(x: number, y: number, deg: number, originX: number, originY: number) { - return { - x: (x - originX) * Math.cos(deg) + (y - originY) * Math.sin(deg) + originX, - y: (x - originX) * Math.sin(deg) + (originY - y) * Math.cos(deg) + originY - }; -} +import { isNil, isRectIntersect, isRotateAABBIntersect, rotatePoint } from '@visactor/vutils'; // 计算水平情况下的包围盒 function genNormalBounds(item: IText) { @@ -30,8 +23,11 @@ export function genRotateBounds(items: IText[]) { } // 计算水平情况下的包围盒 const bounds = genNormalBounds(item); - // 旋转 - const rotatedCenter = rotate(bounds.centerX, bounds.centerY, bounds.angle, item.attribute.x, item.attribute.y); + const rotatedCenter = rotatePoint({ x: item.attribute.x, y: item.attribute.y }, bounds.angle, { + x: bounds.centerX, + y: bounds.centerY + }); + const deltaX = rotatedCenter.x - bounds.centerX; const deltaY = rotatedCenter.y - bounds.centerY; bounds.x1 += deltaX; @@ -45,6 +41,9 @@ export function genRotateBounds(items: IText[]) { } export function itemIntersect(item1: IText, item2: IText) { + if (!item1.OBBBounds?.empty() && !item2.OBBBounds?.empty()) { + return item1.OBBBounds.intersects(item2.OBBBounds); + } return ( isRectIntersect(item1.AABBBounds, item2.AABBBounds, false) && (item1.rotatedBounds && item2.rotatedBounds diff --git a/packages/vrender-components/src/label/arc.ts b/packages/vrender-components/src/label/arc.ts index 666d120bc..b6baa4900 100644 --- a/packages/vrender-components/src/label/arc.ts +++ b/packages/vrender-components/src/label/arc.ts @@ -510,7 +510,10 @@ export class ArcLabel extends LabelBase { const radius = this.computeRadius(radiusRatio, attribute.width, attribute.height); const flag = isQuadrantLeft(quadrant) ? -1 : 1; let cx: number = 0; - let limit = (flag > 0 ? plotLayout.x2 - pointB.x : pointB.x - plotLayout.x1) - this._line2MinLength - spaceWidth; + let limit = + (flag > 0 ? plotLayout.x2 - pointB.x + this._alignOffset : pointB.x - plotLayout.x1 - this._alignOffset) - + this._line2MinLength - + spaceWidth; if (labelLayoutAlign === 'labelLine') { cx = (radius + line1MinLength + this._line2MinLength) * flag + (center as IPoint).x; diff --git a/packages/vrender-components/src/label/base.ts b/packages/vrender-components/src/label/base.ts index f3cc0e0a9..32d42ce2f 100644 --- a/packages/vrender-components/src/label/base.ts +++ b/packages/vrender-components/src/label/base.ts @@ -929,7 +929,6 @@ export class LabelBase extends AbstractComponent { * */ const backgroundColor = baseMark.attribute.fill as IColor; const foregroundColor = label.attribute.fill as IColor; - const baseColor = backgroundColor; const invertColor = labelSmartInvert( foregroundColor, backgroundColor, @@ -940,56 +939,43 @@ export class LabelBase extends AbstractComponent { ); const similarColor = contrastAccessibilityChecker(invertColor, brightColor) ? brightColor : darkColor; - if (outsideEnable) { - const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor); + if (outsideEnable || this._canPlaceInside(label.AABBBounds, baseMark.AABBBounds)) { + // 按照标签展示在柱子内部的情况,执行反色逻辑 + const fill = smartInvertStrategy(fillStrategy, backgroundColor, invertColor, similarColor); fill && label.setAttributes({ fill }); if (label.attribute.lineWidth === 0) { continue; } - const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor); + const stroke = smartInvertStrategy(strokeStrategy, backgroundColor, invertColor, similarColor); stroke && label.setAttributes({ stroke }); - } else { - const isInside = this._canPlaceInside(label.AABBBounds, baseMark.AABBBounds); - if (isInside) { - const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor); - fill && label.setAttributes({ fill }); - - if (label.attribute.lineWidth === 0) { - continue; - } - - const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor); - stroke && label.setAttributes({ stroke }); - } else { - /** 当label无法设置stroke时,不进行反色计算(容易反色为白色与白色背景混合不可见) */ - if (label.attribute.lineWidth === 0) { - continue; - } - - /** 当label设置stroke时,保留stroke设置的颜色,根据stroke对fill做反色 */ - if (label.attribute.stroke) { - label.setAttributes({ - fill: labelSmartInvert( - label.attribute.fill as IColor, - label.attribute.stroke as IColor, - textType, - contrastRatiosThreshold, - alternativeColors, - mode - ) - }); - continue; - } - - /** 当label未设置stroke,且可设置stroke时,正常计算 */ - const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor); - fill && label.setAttributes({ fill }); - - const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor); - stroke && label.setAttributes({ stroke }); + } else if (label.AABBBounds && baseMark.AABBBounds && baseMark.AABBBounds.intersects(label.AABBBounds)) { + // 存在相交的情况 + /** 当label无法设置stroke时,不进行反色计算(容易反色为白色与白色背景混合不可见) */ + if (label.attribute.lineWidth === 0) { + continue; } + /** 当label设置stroke时,保留stroke设置的颜色,根据stroke对fill做反色 */ + if (label.attribute.stroke) { + label.setAttributes({ + fill: labelSmartInvert( + label.attribute.fill as IColor, + label.attribute.stroke as IColor, + textType, + contrastRatiosThreshold, + alternativeColors, + mode + ) + }); + continue; + } + /** 当label未设置stroke,且可设置stroke时,正常计算 */ + const fill = smartInvertStrategy(fillStrategy, backgroundColor, invertColor, similarColor); + fill && label.setAttributes({ fill }); + + const stroke = smartInvertStrategy(strokeStrategy, backgroundColor, invertColor, similarColor); + stroke && label.setAttributes({ stroke }); } } } diff --git a/packages/vrender-components/src/legend/discrete/discrete.ts b/packages/vrender-components/src/legend/discrete/discrete.ts index fd0ba8330..9bec57ce2 100644 --- a/packages/vrender-components/src/legend/discrete/discrete.ts +++ b/packages/vrender-components/src/legend/discrete/discrete.ts @@ -556,10 +556,10 @@ export class DiscreteLegend extends LegendBase { x: 0, y: -focusSize / 2 - 1, strokeBoundsBuffer: 0, + boundsPadding: parsedPadding, ...focusIconStyle, visible: true, - pickMode: 'imprecise', - boundsPadding: parsedPadding + pickMode: 'imprecise' }); this._appendDataToShape(focusShape, LEGEND_ELEMENT_NAME.focus, item, itemGroup); diff --git a/packages/vrender-core/CHANGELOG.json b/packages/vrender-core/CHANGELOG.json index ac17d76bc..9bae4e118 100644 --- a/packages/vrender-core/CHANGELOG.json +++ b/packages/vrender-core/CHANGELOG.json @@ -1,6 +1,39 @@ { "name": "@visactor/vrender-core", "entries": [ + { + "version": "0.20.6", + "tag": "@visactor/vrender-core_v0.20.6", + "date": "Thu, 26 Sep 2024 09:28:36 GMT", + "comments": { + "none": [ + { + "comment": "fix: fix customPath of arc\n\n" + }, + { + "comment": "feat: support obb bounds in text graphic" + }, + { + "comment": "fix: fix limit width of arc label when has customized align offset\n\n" + }, + { + "comment": "fix: fix error of `alternateColor`\n\n" + }, + { + "comment": "fix: fix issue with interactive graphic while parent was removed" + }, + { + "comment": "fix: outside label should not apply `smartInvert`\n\n" + }, + { + "comment": "fix: fix `boundsPadding` of legend focus icon\n\n" + }, + { + "comment": "fix: line segment update animation result error" + } + ] + } + }, { "version": "0.20.5", "tag": "@visactor/vrender-core_v0.20.5", diff --git a/packages/vrender-core/CHANGELOG.md b/packages/vrender-core/CHANGELOG.md index 6a1234e31..c132ba227 100644 --- a/packages/vrender-core/CHANGELOG.md +++ b/packages/vrender-core/CHANGELOG.md @@ -1,6 +1,30 @@ # Change Log - @visactor/vrender-core -This log was last generated on Fri, 20 Sep 2024 06:37:57 GMT and should not be manually modified. +This log was last generated on Thu, 26 Sep 2024 09:28:36 GMT and should not be manually modified. + +## 0.20.6 +Thu, 26 Sep 2024 09:28:36 GMT + +### Updates + +- fix: fix customPath of arc + + +- feat: support obb bounds in text graphic +- fix: fix limit width of arc label when has customized align offset + + +- fix: fix error of `alternateColor` + + +- fix: fix issue with interactive graphic while parent was removed +- fix: outside label should not apply `smartInvert` + + +- fix: fix `boundsPadding` of legend focus icon + + +- fix: line segment update animation result error ## 0.20.5 Fri, 20 Sep 2024 06:37:57 GMT diff --git a/packages/vrender-core/package.json b/packages/vrender-core/package.json index 004aaab06..8a8ac07a4 100644 --- a/packages/vrender-core/package.json +++ b/packages/vrender-core/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vrender-core", - "version": "0.20.5", + "version": "0.20.6", "description": "", "sideEffects": [ "./src/modules.ts", @@ -29,7 +29,7 @@ }, "dependencies": { "color-convert": "2.0.1", - "@visactor/vutils": "~0.18.16" + "@visactor/vutils": "~0.18.17" }, "devDependencies": { "@internal/bundler": "workspace:*", diff --git a/packages/vrender-core/src/animate/custom-animate.ts b/packages/vrender-core/src/animate/custom-animate.ts index 2252d18ec..940b9bb90 100644 --- a/packages/vrender-core/src/animate/custom-animate.ts +++ b/packages/vrender-core/src/animate/custom-animate.ts @@ -841,8 +841,9 @@ export class TagPointsUpdate extends ACustomAnimate<{ points?: IPointLike[]; seg if (this.segmentsCache && this.to.segments) { let start = 0; out.segments = this.to.segments.map((segment, index) => { - const points = this.points.slice(start, this.segmentsCache[start]); - start += this.segmentsCache[start]; + const end = start + this.segmentsCache[index]; + const points = this.points.slice(start, end); + start = end; return { ...segment, points diff --git a/packages/vrender-core/src/graphic/arc.ts b/packages/vrender-core/src/graphic/arc.ts index 58f152508..0de9da3b2 100644 --- a/packages/vrender-core/src/graphic/arc.ts +++ b/packages/vrender-core/src/graphic/arc.ts @@ -346,8 +346,8 @@ export class Arc extends Graphic implements IArc { const attribute = this.attribute; const { startAngle, endAngle } = this.getParsedAngle(); - let innerRadius = attribute.innerRadius - (attribute.innerPadding || 0); - let outerRadius = attribute.outerRadius - (attribute.outerPadding || 0); + let innerRadius = (attribute.innerRadius ?? 0) - (attribute.innerPadding ?? 0); + let outerRadius = (attribute.outerRadius ?? 0) - (attribute.outerPadding ?? 0); const deltaAngle = abs(endAngle - startAngle); const clockwise: boolean = endAngle > startAngle; diff --git a/packages/vrender-core/src/graphic/glyph.ts b/packages/vrender-core/src/graphic/glyph.ts index ae0a8974d..813993805 100644 --- a/packages/vrender-core/src/graphic/glyph.ts +++ b/packages/vrender-core/src/graphic/glyph.ts @@ -176,6 +176,7 @@ export class Glyph extends Graphic implements IGlyph { } protected doUpdateAABBBounds(): AABBBounds { + this.updateAABBBoundsStamp++; this._AABBBounds.clear(); const bounds = this.updateAABBBounds(this.attribute, this.getGraphicTheme(), this._AABBBounds) as AABBBounds; this.clearUpdateBoundTag(); diff --git a/packages/vrender-core/src/graphic/graphic.ts b/packages/vrender-core/src/graphic/graphic.ts index 6c5827b35..7cf3db4a1 100644 --- a/packages/vrender-core/src/graphic/graphic.ts +++ b/packages/vrender-core/src/graphic/graphic.ts @@ -1,5 +1,6 @@ import type { ICustomPath2D } from './../interface/path'; -import type { Dict, IPointLike, IAABBBounds } from '@visactor/vutils'; +import type { Dict, IPointLike, IAABBBounds, IOBBBounds } from '@visactor/vutils'; +import { OBBBounds } from '@visactor/vutils'; import { AABBBounds, Matrix, @@ -220,10 +221,10 @@ export abstract class Graphic = Partial = Partial = Partial = Partial = Partial, @@ -343,6 +371,7 @@ export abstract class Graphic = Partial implements IGroup { } protected doUpdateAABBBounds(): IAABBBounds { + this.updateAABBBoundsStamp++; const bounds = super.doUpdateAABBBounds(); // 更新bounds之后需要设置父节点,否则tag丢失 diff --git a/packages/vrender-core/src/graphic/text.ts b/packages/vrender-core/src/graphic/text.ts index 489c9aeeb..abd45a482 100644 --- a/packages/vrender-core/src/graphic/text.ts +++ b/packages/vrender-core/src/graphic/text.ts @@ -1,5 +1,5 @@ -import type { IAABBBounds } from '@visactor/vutils'; -import { max, isArray, getContextFont, transformBoundsWithMatrix } from '@visactor/vutils'; +import type { IAABBBounds, IOBBBounds } from '@visactor/vutils'; +import { max, isArray, getContextFont, transformBoundsWithMatrix, rotatePoint } from '@visactor/vutils'; import { textDrawOffsetX, textLayoutOffsetY } from '../common/text'; import { CanvasTextLayout } from '../core/contributions/textMeasure/layout'; import { application } from '../application'; @@ -47,6 +47,8 @@ export class Text extends Graphic implements IText { cache: ITextCache; _font: string; + protected declare obbText?: Text; + get font(): string { const textTheme = this.getGraphicTheme(); if (!this._font) { @@ -138,6 +140,30 @@ export class Text extends Graphic implements IText { return getTheme(this).text; } + protected doUpdateOBBBounds(): IOBBBounds { + const graphicTheme = this.getGraphicTheme(); + this._OBBBounds.clear(); + const attribute = this.attribute; + const { angle = graphicTheme.angle } = attribute; + if (!angle) { + const b = this.AABBBounds; + this._OBBBounds.setValue(b.x1, b.y1, b.x2, b.y2); + return this._OBBBounds; + } + if (!this.obbText) { + this.obbText = new Text({}); + } + this.obbText.setAttributes({ ...attribute, angle: 0 }); + const bounds1 = this.obbText.AABBBounds; + const { x, y } = attribute; + const boundsCenter = { x: (bounds1.x1 + bounds1.x2) / 2, y: (bounds1.y1 + bounds1.y2) / 2 }; + const center = rotatePoint(boundsCenter, angle, { x, y }); + this._OBBBounds.copy(bounds1); + this._OBBBounds.translate(center.x - boundsCenter.x, center.y - boundsCenter.y); + this._OBBBounds.angle = angle; + return this._OBBBounds; + } + protected updateAABBBounds( attribute: ITextGraphicAttribute, textTheme: Required, diff --git a/packages/vrender-core/src/interface/graphic.ts b/packages/vrender-core/src/interface/graphic.ts index 9c52f1c57..248a1d001 100644 --- a/packages/vrender-core/src/interface/graphic.ts +++ b/packages/vrender-core/src/interface/graphic.ts @@ -1,4 +1,4 @@ -import type { IAABBBounds, IMatrix, IPointLike, IPoint, BoundsAnchorType } from '@visactor/vutils'; +import type { IAABBBounds, IMatrix, IPointLike, IPoint, BoundsAnchorType, IOBBBounds } from '@visactor/vutils'; import type { IAnimate, IStep, EasingType, IAnimateTarget } from './animate'; import type { IColor } from './color'; import type { IGroup } from './graphic/group'; @@ -415,7 +415,7 @@ export interface IGraphic = Partial { wordBreak: 'break-word', maxLineWidth: 200, // ellipsis: '', - direction: 'vertical', + direction: 'horizontal', + angle: 0.6, stroke: 'green', // wordBreak: 'break-word', // maxLineWidth: 200, @@ -189,20 +190,23 @@ export const page = () => { // scaleY: 2 }); graphics.push(text); + const b = text.OBBBounds; const circle = createCircle({ - x: 500, - y: 200, + x: (b.x1 + b.x2) / 2, + y: (b.y1 + b.y2) / 2, fill: 'black', radius: 2 }); graphics.push(circle); const rect = createRect({ - x: t.AABBBounds.x1, - y: t.AABBBounds.y1, - width: t.AABBBounds.width(), - height: t.AABBBounds.height(), + x: b.x1, + y: b.y1, + width: b.width(), + height: b.height(), stroke: 'red', + anchor: [(b.x1 + b.x2) / 2, (b.y1 + b.y2) / 2], + angle: 0.6, lineWidth: 1 }); graphics.push(rect); diff --git a/packages/vrender/package.json b/packages/vrender/package.json index 6bd2e22a9..43a004506 100644 --- a/packages/vrender/package.json +++ b/packages/vrender/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vrender", - "version": "0.20.5", + "version": "0.20.6", "description": "", "sideEffects": true, "main": "cjs/index.js", @@ -24,15 +24,15 @@ "test-watch": "cross-env DEBUG_MODE=1 jest --watch" }, "dependencies": { - "@visactor/vrender-core": "workspace:0.20.5", - "@visactor/vrender-kits": "workspace:0.20.5" + "@visactor/vrender-core": "workspace:0.20.6", + "@visactor/vrender-kits": "workspace:0.20.6" }, "devDependencies": { "@internal/bundler": "workspace:*", "@internal/eslint-config": "workspace:*", "@internal/ts-config": "workspace:*", "@rushstack/eslint-patch": "~1.1.4", - "@visactor/vutils": "~0.18.16", + "@visactor/vutils": "~0.18.17", "canvas": "2.11.2", "react": "^18.0.0", "react-dom": "^18.0.0", diff --git a/tools/bugserver-trigger/package.json b/tools/bugserver-trigger/package.json index cdcf9fd10..a5f8ab0c4 100644 --- a/tools/bugserver-trigger/package.json +++ b/tools/bugserver-trigger/package.json @@ -8,10 +8,10 @@ "ci": "ts-node --transpileOnly --skipProject ./scripts/trigger-test.ts" }, "dependencies": { - "@visactor/vrender": "workspace:0.20.5", - "@visactor/vrender-core": "workspace:0.20.5", - "@visactor/vrender-kits": "workspace:0.20.5", - "@visactor/vrender-components": "workspace:0.20.5" + "@visactor/vrender": "workspace:0.20.6", + "@visactor/vrender-core": "workspace:0.20.6", + "@visactor/vrender-kits": "workspace:0.20.6", + "@visactor/vrender-components": "workspace:0.20.6" }, "devDependencies": { "@rushstack/eslint-patch": "~1.1.4",