From 1fadddcd1355f35fb26f71df254d965246e931d7 Mon Sep 17 00:00:00 2001
From: fangsmile <892739385@qq.com>
Date: Fri, 27 Mar 2026 19:06:43 +0800
Subject: [PATCH 1/3] feat: compatible react version 19
---
.react19-deps/package-lock.json | 71 ++++
.react19-deps/package.json | 11 +
common/config/rush/common-versions.json | 5 +-
common/config/rush/pnpm-lock.yaml | 270 ++++++-------
common/config/rush/repo-state.json | 2 +-
.../0-VTable-Engineering.md | 382 +++++++++---------
.../0-VTable-Engineering.md | 292 ++++++-------
docs/package.json | 10 +-
.../component-container-react18.png | Bin 0 -> 87761 bytes
.../component-container-react19.png | Bin 0 -> 85717 bytes
.../custom-layout-dom-react18.png | Bin 0 -> 39768 bytes
.../custom-layout-dom-react19.png | Bin 0 -> 39768 bytes
.../custom-layout-dom-site-react18.png | Bin 0 -> 83627 bytes
.../custom-layout-dom-site-react19.png | Bin 0 -> 83627 bytes
.../custom-layout-dom-site1-react18.png | Bin 0 -> 80245 bytes
.../custom-layout-dom-site1-react19.png | Bin 0 -> 77539 bytes
.../custom-layout-pivot-react18.png | Bin 0 -> 116052 bytes
.../custom-layout-pivot-react19.png | Bin 0 -> 113984 bytes
.../event-rebind-react18.png | Bin 0 -> 71458 bytes
.../event-rebind-react19.png | Bin 0 -> 71458 bytes
.../list-component-react18.png | Bin 0 -> 60858 bytes
.../list-component-react19.png | Bin 0 -> 60858 bytes
.../list-custom-layout-react18.png | Bin 0 -> 58196 bytes
.../list-custom-layout-react19.png | Bin 0 -> 58196 bytes
.../list-editor-react18.png | Bin 0 -> 29371 bytes
.../list-editor-react19.png | Bin 0 -> 29371 bytes
.../list-group-react18.png | Bin 0 -> 29947 bytes
.../list-group-react19.png | Bin 0 -> 29947 bytes
.../list-option-record-react18.png | Bin 0 -> 63620 bytes
.../list-option-record-react19.png | Bin 0 -> 61496 bytes
.../list-table-event-react18.png | Bin 0 -> 83623 bytes
.../list-table-event-react19.png | Bin 0 -> 81495 bytes
.../list-table-react18.png | Bin 0 -> 239944 bytes
.../list-table-react19.png | Bin 0 -> 238200 bytes
.../pivot-chart-component-react18.png | Bin 0 -> 114222 bytes
.../pivot-chart-component-react19.png | Bin 0 -> 112147 bytes
.../pivot-chart-react18.png | Bin 0 -> 110414 bytes
.../pivot-chart-react19.png | Bin 0 -> 108292 bytes
.../pivot-chart-site-react18.png | Bin 0 -> 95059 bytes
.../pivot-chart-site-react19.png | Bin 0 -> 93024 bytes
.../user-custom-layout-update-react18.png | Bin 0 -> 60687 bytes
.../user-custom-layout-update-react19.png | Bin 0 -> 60687 bytes
.../demo/scripts/ensure-react19-deps.cjs | 37 ++
packages/react-vtable/demo/src/App.tsx | 143 ++++++-
.../src/component/component-container.tsx | 41 +-
.../component/custom-layout-dom-site-1.tsx | 23 +-
.../demo/src/component/custom-layout-dom.tsx | 20 +-
.../demo/src/list-table/list-table-editor.tsx | 9 +-
.../demo/src/list-table/list-table-group.tsx | 4 +-
.../demo/src/pivot-table/pivot-comonent.tsx | 8 +-
.../demo/src/pivot-table/pivot-table.tsx | 55 +--
.../react-vtable/demo/vite.config.react19.ts | 87 ++++
.../react-vtable/docs/react18-react19-demo.md | 202 +++++++++
packages/react-vtable/package.json | 24 +-
.../src/components/avatar/avatar.tsx | 4 +-
.../src/components/button/button.tsx | 28 +-
.../react-vtable/src/components/link/link.tsx | 28 +-
.../src/components/popover/popover.tsx | 6 +-
.../src/containers/withContainer.tsx | 2 +-
packages/react-vtable/src/context/table.tsx | 1 +
.../src/table-components/base-component.tsx | 7 +-
.../table-components/custom/custom-layout.tsx | 48 ++-
.../src/table-components/custom/reconciler.ts | 151 +++++--
.../react-vtable/src/tables/base-table.tsx | 6 +-
packages/vtable-calendar/package.json | 8 +-
packages/vtable-export/package.json | 8 +-
packages/vtable-gantt/package.json | 8 +-
packages/vtable-plugins/package.json | 8 +-
packages/vtable-search/package.json | 8 +-
packages/vtable-sheet/package.json | 8 +-
packages/vtable/package.json | 8 +-
packages/vtable/src/core/BaseTable.ts | 66 ++-
rush.json | 2 +-
skills/vtable-browser-debugger-skill/SKILL.md | 86 ++++
.../references/react18-react19.md | 206 ++++++++++
.../references/snippets.md | 236 +++++++++++
.../references/vrender-graphics.md | 68 ++++
.../references/vtable-scenegraph.md | 51 +++
78 files changed, 2069 insertions(+), 679 deletions(-)
create mode 100644 .react19-deps/package-lock.json
create mode 100644 .react19-deps/package.json
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/component-container-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/component-container-react19.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/custom-layout-dom-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/custom-layout-dom-react19.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/custom-layout-dom-site-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/custom-layout-dom-site-react19.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/custom-layout-dom-site1-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/custom-layout-dom-site1-react19.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/custom-layout-pivot-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/custom-layout-pivot-react19.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/event-rebind-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/event-rebind-react19.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/list-component-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/list-component-react19.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/list-custom-layout-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/list-custom-layout-react19.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/list-editor-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/list-editor-react19.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/list-group-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/list-group-react19.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/list-option-record-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/list-option-record-react19.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/list-table-event-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/list-table-event-react19.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/list-table-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/list-table-react19.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/pivot-chart-component-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/pivot-chart-component-react19.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/pivot-chart-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/pivot-chart-react19.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/pivot-chart-site-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/pivot-chart-site-react19.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/user-custom-layout-update-react18.png
create mode 100644 packages/react-vtable/demo/demo-page-screenshot/user-custom-layout-update-react19.png
create mode 100644 packages/react-vtable/demo/scripts/ensure-react19-deps.cjs
create mode 100644 packages/react-vtable/demo/vite.config.react19.ts
create mode 100644 packages/react-vtable/docs/react18-react19-demo.md
create mode 100644 skills/vtable-browser-debugger-skill/SKILL.md
create mode 100644 skills/vtable-browser-debugger-skill/references/react18-react19.md
create mode 100644 skills/vtable-browser-debugger-skill/references/snippets.md
create mode 100644 skills/vtable-browser-debugger-skill/references/vrender-graphics.md
create mode 100644 skills/vtable-browser-debugger-skill/references/vtable-scenegraph.md
diff --git a/.react19-deps/package-lock.json b/.react19-deps/package-lock.json
new file mode 100644
index 0000000000..0764855ab5
--- /dev/null
+++ b/.react19-deps/package-lock.json
@@ -0,0 +1,71 @@
+{
+ "name": "react19-deps",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "react19-deps",
+ "dependencies": {
+ "react": "^19.0.0",
+ "react-dom": "^19.0.0",
+ "react-is": "^19.0.0",
+ "react-reconciler": "^0.31.0"
+ }
+ },
+ "node_modules/react": {
+ "version": "19.2.4",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz",
+ "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "19.2.4",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz",
+ "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==",
+ "license": "MIT",
+ "dependencies": {
+ "scheduler": "^0.27.0"
+ },
+ "peerDependencies": {
+ "react": "^19.2.4"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "19.2.4",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.4.tgz",
+ "integrity": "sha512-W+EWGn2v0ApPKgKKCy/7s7WHXkboGcsrXE+2joLyVxkbyVQfO3MUEaUQDHoSmb8TFFrSKYa9mw64WZHNHSDzYA==",
+ "license": "MIT"
+ },
+ "node_modules/react-reconciler": {
+ "version": "0.31.0",
+ "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.31.0.tgz",
+ "integrity": "sha512-7Ob7Z+URmesIsIVRjnLoDGwBEG/tVitidU0nMsqX/eeJaLY89RISO/10ERe0MqmzuKUUB1rmY+h1itMbUHg9BQ==",
+ "license": "MIT",
+ "dependencies": {
+ "scheduler": "^0.25.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "peerDependencies": {
+ "react": "^19.0.0"
+ }
+ },
+ "node_modules/react-reconciler/node_modules/scheduler": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz",
+ "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==",
+ "license": "MIT"
+ },
+ "node_modules/scheduler": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
+ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
+ "license": "MIT"
+ }
+ }
+}
diff --git a/.react19-deps/package.json b/.react19-deps/package.json
new file mode 100644
index 0000000000..774e18e263
--- /dev/null
+++ b/.react19-deps/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "react19-deps",
+ "private": true,
+ "type": "module",
+ "dependencies": {
+ "react": "^19.0.0",
+ "react-dom": "^19.0.0",
+ "react-is": "^19.0.0",
+ "react-reconciler": "^0.31.0"
+ }
+}
\ No newline at end of file
diff --git a/common/config/rush/common-versions.json b/common/config/rush/common-versions.json
index 548de12673..4835de062c 100644
--- a/common/config/rush/common-versions.json
+++ b/common/config/rush/common-versions.json
@@ -23,7 +23,10 @@
* When someone asks for "^1.0.0" make sure they get "1.2.3" when working in this repo,
* instead of the latest version.
*/
- // "some-library": "1.2.3"
+ "react": "18.2.0",
+ "react-dom": "18.2.0",
+ "@types/react": "18.2.79",
+ "@types/react-dom": "18.2.25"
},
/**
diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml
index 62935e6c65..46101a53cb 100644
--- a/common/config/rush/pnpm-lock.yaml
+++ b/common/config/rush/pnpm-lock.yaml
@@ -7,15 +7,15 @@ importers:
../../docs:
specifiers:
- '@arco-design/web-react': 2.60.2
+ '@arco-design/web-react': 2.66.12
'@arco-design/web-vue': ^2.11.0
'@internal/eslint-config': workspace:*
'@internal/ts-config': workspace:*
'@types/buble': ^0.20.5
'@types/highlightjs': ^9.12.0
'@types/markdown-it': ^13.0.0
- '@types/react': ^18.0.0
- '@types/react-dom': ^18.0.0
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@visactor/openinula-vtable': workspace:*
'@visactor/react-vtable': workspace:*
'@visactor/vchart': 2.0.13-alpha.10
@@ -41,15 +41,15 @@ importers:
markdown-it: ^13.0.0
marked: ^0.3.19
openinula: ~0.1.2-SNAPSHOT
- react: ^18.0.0
- react-dom: ^18.0.0
+ react: 18.2.0
+ react-dom: 18.2.0
react-router-dom: 6.9.0
typescript: 4.9.5
vite: 3.2.6
vue: ^3.4.14
yargs: ^17.1.1
dependencies:
- '@arco-design/web-react': 2.60.2_7rrstwx6ew2ekscgqoygqm7g4a
+ '@arco-design/web-react': 2.66.12_w6jczczwnzvypw24vvz4pwmbba
'@arco-design/web-vue': 2.57.0_vue@3.5.27
'@visactor/openinula-vtable': link:../packages/openinula-vtable
'@visactor/react-vtable': link:../packages/react-vtable
@@ -69,9 +69,9 @@ importers:
lodash: 4.17.21
markdown-it: 13.0.2
openinula: 0.1.14
- react: 18.3.1
- react-dom: 18.3.1_react@18.3.1
- react-router-dom: 6.9.0_nnrd3gsncyragczmpvfhocinkq
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ react-router-dom: 6.9.0_biqbaboplfbrettd7655fr4n2y
vue: 3.5.27_typescript@4.9.5
devDependencies:
'@internal/eslint-config': link:../share/eslint-config
@@ -79,8 +79,8 @@ importers:
'@types/buble': 0.20.5
'@types/highlightjs': 9.12.6
'@types/markdown-it': 13.0.9
- '@types/react': 18.3.27
- '@types/react-dom': 18.3.7_@types+react@18.3.27
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@vitejs/plugin-react': 3.1.0_vite@3.2.6
chalk: 3.0.0
chokidar: 3.6.0
@@ -183,7 +183,7 @@ importers:
../../packages/react-vtable:
specifiers:
- '@arco-design/web-react': 2.60.2
+ '@arco-design/web-react': 2.66.12
'@babel/core': 7.20.12
'@babel/preset-env': 7.20.2
'@internal/bundler': workspace:*
@@ -195,10 +195,10 @@ importers:
'@types/mocha': 9.0.0
'@types/node': '*'
'@types/offscreencanvas': 2019.6.4
- '@types/react': ^18.0.0
- '@types/react-dom': ^18.0.0
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@types/react-is': ^17.0.3
- '@types/react-reconciler': 0.28.8
+ '@types/react-reconciler': 0.28.9
'@visactor/vchart': 2.0.13-alpha.10
'@visactor/vtable': workspace:*
'@visactor/vutils': ~1.0.17
@@ -219,10 +219,10 @@ importers:
mocha: 9.1.3
node-fetch: 2.6.7
postcss: 8.4.21
- react: ^18.0.0
- react-dom: ^18.0.0
+ react: 18.2.0
+ react-dom: 18.2.0
react-is: ^18.2.0
- react-reconciler: 0.29.2
+ react-reconciler: 0.29.0
rimraf: 3.0.2
sass: 1.43.5
ts-jest: ^26.0.0
@@ -238,9 +238,9 @@ importers:
'@visactor/vtable': link:../vtable
'@visactor/vutils': 1.0.21
react-is: 18.3.1
- react-reconciler: 0.29.2_react@18.3.1
+ react-reconciler: 0.29.0_react@18.2.0
devDependencies:
- '@arco-design/web-react': 2.60.2_7rrstwx6ew2ekscgqoygqm7g4a
+ '@arco-design/web-react': 2.66.12_w6jczczwnzvypw24vvz4pwmbba
'@babel/core': 7.20.12
'@babel/preset-env': 7.20.2_@babel+core@7.20.12
'@internal/bundler': link:../../tools/bundler
@@ -252,10 +252,10 @@ importers:
'@types/mocha': 9.0.0
'@types/node': 25.0.10
'@types/offscreencanvas': 2019.6.4
- '@types/react': 18.3.27
- '@types/react-dom': 18.3.7_@types+react@18.3.27
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@types/react-is': 17.0.7
- '@types/react-reconciler': 0.28.8
+ '@types/react-reconciler': 0.28.9_@types+react@18.2.79
'@visactor/vchart': 2.0.13-alpha.10
'@vitejs/plugin-react': 3.1.0_vite@3.2.6
axios: 1.13.2
@@ -274,8 +274,8 @@ importers:
mocha: 9.1.3
node-fetch: 2.6.7
postcss: 8.4.21
- react: 18.3.1
- react-dom: 18.3.1_react@18.3.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
rimraf: 3.0.2
sass: 1.43.5
ts-jest: 26.5.6_xuote2qreek47x2di7kesslrai
@@ -303,8 +303,8 @@ importers:
'@types/mocha': 9.0.0
'@types/node': '*'
'@types/offscreencanvas': 2019.6.4
- '@types/react': ^18.0.0
- '@types/react-dom': ^18.0.0
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@visactor/vchart': 2.0.13-alpha.10
'@visactor/vdataset': ~1.0.17
'@visactor/vrender-animate': ~1.0.41
@@ -342,8 +342,8 @@ importers:
node-fetch: 2.6.7
pikaday: 1.8.2
postcss: 8.4.21
- react: ^18.0.0
- react-dom: ^18.0.0
+ react: 18.2.0
+ react-dom: 18.2.0
rimraf: 3.0.2
sass: 1.43.5
ts-jest: ^26.0.0
@@ -382,8 +382,8 @@ importers:
'@types/mocha': 9.0.0
'@types/node': 25.0.10
'@types/offscreencanvas': 2019.6.4
- '@types/react': 18.3.27
- '@types/react-dom': 18.3.7_@types+react@18.3.27
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@visactor/vchart': 2.0.13-alpha.10
'@vitejs/plugin-react': 3.1.0_vite@3.2.6
axios: 1.13.2
@@ -409,8 +409,8 @@ importers:
node-fetch: 2.6.7
pikaday: 1.8.2
postcss: 8.4.21
- react: 18.3.1
- react-dom: 18.3.1_react@18.3.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
rimraf: 3.0.2
sass: 1.43.5
ts-jest: 26.5.6_xuote2qreek47x2di7kesslrai
@@ -436,8 +436,8 @@ importers:
'@types/mocha': 9.0.0
'@types/node': '*'
'@types/offscreencanvas': 2019.6.4
- '@types/react': ^18.0.0
- '@types/react-dom': ^18.0.0
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@types/react-is': ^17.0.3
'@visactor/vtable': workspace:*
'@visactor/vutils': ~1.0.17
@@ -459,8 +459,8 @@ importers:
mocha: 9.1.3
node-fetch: 2.6.7
postcss: 8.4.21
- react: ^18.0.0
- react-dom: ^18.0.0
+ react: 18.2.0
+ react-dom: 18.2.0
rimraf: 3.0.2
rollup-plugin-node-resolve: 5.2.0
sass: 1.43.5
@@ -489,8 +489,8 @@ importers:
'@types/mocha': 9.0.0
'@types/node': 25.0.10
'@types/offscreencanvas': 2019.6.4
- '@types/react': 18.3.27
- '@types/react-dom': 18.3.7_@types+react@18.3.27
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@types/react-is': 17.0.7
'@vitejs/plugin-react': 3.1.0_vite@3.2.6
axios: 1.13.2
@@ -509,8 +509,8 @@ importers:
mocha: 9.1.3
node-fetch: 2.6.7
postcss: 8.4.21
- react: 18.3.1
- react-dom: 18.3.1_react@18.3.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
rimraf: 3.0.2
rollup-plugin-node-resolve: 5.2.0
sass: 1.43.5
@@ -588,8 +588,8 @@ importers:
'@types/mocha': 9.0.0
'@types/node': '*'
'@types/offscreencanvas': 2019.6.4
- '@types/react': ^18.0.0
- '@types/react-dom': ^18.0.0
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@types/react-is': ^17.0.3
'@visactor/vchart': 2.0.13-alpha.10
'@visactor/vtable': workspace:*
@@ -613,8 +613,8 @@ importers:
mocha: 9.1.3
node-fetch: 2.6.7
postcss: 8.4.21
- react: ^18.0.0
- react-dom: ^18.0.0
+ react: 18.2.0
+ react-dom: 18.2.0
rimraf: 3.0.2
rollup-plugin-node-resolve: 5.2.0
sass: 1.43.5
@@ -645,8 +645,8 @@ importers:
'@types/mocha': 9.0.0
'@types/node': 25.0.10
'@types/offscreencanvas': 2019.6.4
- '@types/react': 18.3.27
- '@types/react-dom': 18.3.7_@types+react@18.3.27
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@types/react-is': 17.0.7
'@visactor/vchart': 2.0.13-alpha.10
'@vitejs/plugin-react': 3.1.0_vite@3.2.6
@@ -666,8 +666,8 @@ importers:
mocha: 9.1.3
node-fetch: 2.6.7
postcss: 8.4.21
- react: 18.3.1
- react-dom: 18.3.1_react@18.3.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
rimraf: 3.0.2
rollup-plugin-node-resolve: 5.2.0
sass: 1.43.5
@@ -695,8 +695,8 @@ importers:
'@types/mocha': 9.0.0
'@types/node': '*'
'@types/offscreencanvas': 2019.6.4
- '@types/react': ^18.0.0
- '@types/react-dom': ^18.0.0
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@visactor/vdataset': ~1.0.17
'@visactor/vscale': ~1.0.17
'@visactor/vtable': workspace:*
@@ -727,8 +727,8 @@ importers:
node-fetch: 2.6.7
pikaday: 1.8.2
postcss: 8.4.21
- react: ^18.0.0
- react-dom: ^18.0.0
+ react: 18.2.0
+ react-dom: 18.2.0
rimraf: 3.0.2
sass: 1.43.5
ts-jest: ^26.0.0
@@ -760,8 +760,8 @@ importers:
'@types/mocha': 9.0.0
'@types/node': 25.0.10
'@types/offscreencanvas': 2019.6.4
- '@types/react': 18.3.27
- '@types/react-dom': 18.3.7_@types+react@18.3.27
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@vitejs/plugin-react': 3.1.0_vite@3.2.6
axios: 1.13.2
chai: 4.3.4
@@ -786,8 +786,8 @@ importers:
node-fetch: 2.6.7
pikaday: 1.8.2
postcss: 8.4.21
- react: 18.3.1
- react-dom: 18.3.1_react@18.3.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
rimraf: 3.0.2
sass: 1.43.5
ts-jest: 26.5.6_xuote2qreek47x2di7kesslrai
@@ -815,8 +815,8 @@ importers:
'@types/mocha': 9.0.0
'@types/node': '*'
'@types/offscreencanvas': 2019.6.4
- '@types/react': ^18.0.0
- '@types/react-dom': ^18.0.0
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@types/react-is': ^17.0.3
'@visactor/vchart': 2.0.13-alpha.10
'@visactor/vtable': workspace:*
@@ -844,8 +844,8 @@ importers:
mocha: 9.1.3
node-fetch: 2.6.7
postcss: 8.4.21
- react: ^18.0.0
- react-dom: ^18.0.0
+ react: 18.2.0
+ react-dom: 18.2.0
rimraf: 3.0.2
rollup-plugin-node-resolve: 5.2.0
sass: 1.43.5
@@ -878,8 +878,8 @@ importers:
'@types/mocha': 9.0.0
'@types/node': 25.0.10
'@types/offscreencanvas': 2019.6.4
- '@types/react': 18.3.27
- '@types/react-dom': 18.3.7_@types+react@18.3.27
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@types/react-is': 17.0.7
'@visactor/vchart': 2.0.13-alpha.10
'@visactor/vtable': link:../vtable
@@ -902,8 +902,8 @@ importers:
mocha: 9.1.3
node-fetch: 2.6.7
postcss: 8.4.21
- react: 18.3.1
- react-dom: 18.3.1_react@18.3.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
rimraf: 3.0.2
rollup-plugin-node-resolve: 5.2.0
sass: 1.43.5
@@ -930,8 +930,8 @@ importers:
'@types/mocha': 9.0.0
'@types/node': '*'
'@types/offscreencanvas': 2019.6.4
- '@types/react': ^18.0.0
- '@types/react-dom': ^18.0.0
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@types/react-is': ^17.0.3
'@visactor/vchart': 2.0.13-alpha.10
'@visactor/vtable': workspace:*
@@ -953,8 +953,8 @@ importers:
mocha: 9.1.3
node-fetch: 2.6.7
postcss: 8.4.21
- react: ^18.0.0
- react-dom: ^18.0.0
+ react: 18.2.0
+ react-dom: 18.2.0
rimraf: 3.0.2
rollup-plugin-node-resolve: 5.2.0
sass: 1.43.5
@@ -982,8 +982,8 @@ importers:
'@types/mocha': 9.0.0
'@types/node': 25.0.10
'@types/offscreencanvas': 2019.6.4
- '@types/react': 18.3.27
- '@types/react-dom': 18.3.7_@types+react@18.3.27
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@types/react-is': 17.0.7
'@visactor/vchart': 2.0.13-alpha.10
'@vitejs/plugin-react': 3.1.0_vite@3.2.6
@@ -1003,8 +1003,8 @@ importers:
mocha: 9.1.3
node-fetch: 2.6.7
postcss: 8.4.21
- react: 18.3.1
- react-dom: 18.3.1_react@18.3.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
rimraf: 3.0.2
rollup-plugin-node-resolve: 5.2.0
sass: 1.43.5
@@ -1031,8 +1031,8 @@ importers:
'@types/mocha': 9.0.0
'@types/node': '*'
'@types/offscreencanvas': 2019.6.4
- '@types/react': ^18.0.0
- '@types/react-dom': ^18.0.0
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@visactor/vdataset': ~1.0.17
'@visactor/vscale': ~1.0.17
'@visactor/vtable': workspace:*
@@ -1056,8 +1056,8 @@ importers:
mocha: 9.1.3
node-fetch: 2.6.7
postcss: 8.4.21
- react: ^18.0.0
- react-dom: ^18.0.0
+ react: 18.2.0
+ react-dom: 18.2.0
rimraf: 3.0.2
sass: 1.43.5
ts-jest: ^26.0.0
@@ -1089,8 +1089,8 @@ importers:
'@types/mocha': 9.0.0
'@types/node': 25.0.10
'@types/offscreencanvas': 2019.6.4
- '@types/react': 18.3.27
- '@types/react-dom': 18.3.7_@types+react@18.3.27
+ '@types/react': 18.2.79
+ '@types/react-dom': 18.2.25
'@vitejs/plugin-react': 3.1.0_vite@3.2.6
axios: 1.13.2
chai: 4.3.4
@@ -1107,8 +1107,8 @@ importers:
mocha: 9.1.3
node-fetch: 2.6.7
postcss: 8.4.21
- react: 18.3.1
- react-dom: 18.3.1_react@18.3.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
rimraf: 3.0.2
sass: 1.43.5
ts-jest: 26.5.6_xuote2qreek47x2di7kesslrai
@@ -1460,8 +1460,8 @@ packages:
dependencies:
color: 3.2.1
- /@arco-design/web-react/2.60.2_7rrstwx6ew2ekscgqoygqm7g4a:
- resolution: {integrity: sha512-qWhGSIYxygIIig41BjflNVxw2iujYYzL3hmQc13J+6O09eentajmfKuWNmI19fX2fwZCzeqrCF1wwOod+YUieQ==}
+ /@arco-design/web-react/2.66.12_w6jczczwnzvypw24vvz4pwmbba:
+ resolution: {integrity: sha512-8gZYKPqdPcDrM+5gDdorqBuqX+fw3sUmmtHQy5x967DtWg5izKIwgwcsOQUdgjhmaiLkD//Q5nvkhqpAQmCNZA==}
peerDependencies:
react: '>=16'
react-dom: '>=16'
@@ -1474,13 +1474,13 @@ packages:
dayjs: 1.11.19
lodash: 4.17.21
number-precision: 1.6.0
- react: 18.3.1
- react-dom: 18.3.1_react@18.3.1
- react-focus-lock: 2.13.7_gvpw3nleobtzb6yriethvjsu44
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ react-focus-lock: 2.13.7_7mazomva57u3e4dfbc62fsc6ny
react-is: 18.3.1
- react-transition-group: 4.4.5_nnrd3gsncyragczmpvfhocinkq
+ react-transition-group: 4.4.5_biqbaboplfbrettd7655fr4n2y
resize-observer-polyfill: 1.5.1
- scroll-into-view-if-needed: 2.2.20
+ scroll-into-view-if-needed: 2.2.31
shallowequal: 1.1.0
transitivePeerDependencies:
- '@types/react'
@@ -4029,12 +4029,10 @@ packages:
/@types/prop-types/15.7.15:
resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==}
- /@types/react-dom/18.3.7_@types+react@18.3.27:
- resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==}
- peerDependencies:
- '@types/react': ^18.0.0
+ /@types/react-dom/18.2.25:
+ resolution: {integrity: sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA==}
dependencies:
- '@types/react': 18.3.27
+ '@types/react': 18.2.79
dev: true
/@types/react-is/17.0.7:
@@ -4043,10 +4041,12 @@ packages:
'@types/react': 17.0.90
dev: true
- /@types/react-reconciler/0.28.8:
- resolution: {integrity: sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==}
+ /@types/react-reconciler/0.28.9_@types+react@18.2.79:
+ resolution: {integrity: sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==}
+ peerDependencies:
+ '@types/react': '*'
dependencies:
- '@types/react': 18.3.27
+ '@types/react': 18.2.79
dev: true
/@types/react/17.0.90:
@@ -4057,8 +4057,8 @@ packages:
csstype: 3.2.3
dev: true
- /@types/react/18.3.27:
- resolution: {integrity: sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==}
+ /@types/react/18.2.79:
+ resolution: {integrity: sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==}
dependencies:
'@types/prop-types': 15.7.15
csstype: 3.2.3
@@ -5956,9 +5956,6 @@ packages:
readable-stream: 3.6.2
dev: false
- /compute-scroll-into-view/1.0.11:
- resolution: {integrity: sha512-uUnglJowSe0IPmWOdDtrlHXof5CTIJitfJEyITHBW6zDVOGu9Pjk5puaLM73SLcwak0L4hEjO7Td88/a6P5i7A==}
-
/compute-scroll-into-view/1.0.20:
resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==}
@@ -12146,13 +12143,13 @@ packages:
dependencies:
safe-buffer: 5.2.1
- /react-clientside-effect/1.2.8_react@18.3.1:
+ /react-clientside-effect/1.2.8_react@18.2.0:
resolution: {integrity: sha512-ma2FePH0z3px2+WOu6h+YycZcEvFmmxIlAb62cF52bG86eMySciO/EQZeQMXd07kPCYB0a1dWDT5J+KE9mCDUw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
dependencies:
'@babel/runtime': 7.28.6
- react: 18.3.1
+ react: 18.2.0
/react-device-detect/2.2.3:
resolution: {integrity: sha512-buYY3qrCnQVlIFHrC5UcUoAj7iANs/+srdkwsnNjI7anr3Tt7UY6MqNxtMLlr0tMBied0O49UZVK8XKs3ZIiPw==}
@@ -12163,16 +12160,16 @@ packages:
ua-parser-js: 1.0.41
dev: true
- /react-dom/18.3.1_react@18.3.1:
- resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ /react-dom/18.2.0_react@18.2.0:
+ resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
peerDependencies:
- react: ^18.3.1
+ react: ^18.2.0
dependencies:
loose-envify: 1.4.0
- react: 18.3.1
+ react: 18.2.0
scheduler: 0.23.2
- /react-focus-lock/2.13.7_gvpw3nleobtzb6yriethvjsu44:
+ /react-focus-lock/2.13.7_7mazomva57u3e4dfbc62fsc6ny:
resolution: {integrity: sha512-20lpZHEQrXPb+pp1tzd4ULL6DyO5D2KnR0G69tTDdydrmNhU7pdFmbQUYVyHUgp+xN29IuFR0PVuhOmvaZL9Og==}
peerDependencies:
'@types/react': '*'
@@ -12182,13 +12179,13 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.28.6
- '@types/react': 18.3.27
+ '@types/react': 18.2.79
focus-lock: 1.3.6
prop-types: 15.8.1
- react: 18.3.1
- react-clientside-effect: 1.2.8_react@18.3.1
- use-callback-ref: 1.3.3_gvpw3nleobtzb6yriethvjsu44
- use-sidecar: 1.1.3_gvpw3nleobtzb6yriethvjsu44
+ react: 18.2.0
+ react-clientside-effect: 1.2.8_react@18.2.0
+ use-callback-ref: 1.3.3_7mazomva57u3e4dfbc62fsc6ny
+ use-sidecar: 1.1.3_7mazomva57u3e4dfbc62fsc6ny
/react-is/16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
@@ -12200,14 +12197,14 @@ packages:
/react-is/18.3.1:
resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
- /react-reconciler/0.29.2_react@18.3.1:
- resolution: {integrity: sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==}
+ /react-reconciler/0.29.0_react@18.2.0:
+ resolution: {integrity: sha512-wa0fGj7Zht1EYMRhKWwoo1H9GApxYLBuhoAuXN0TlltESAjDssB+Apf0T/DngVqaMyPypDmabL37vw/2aRM98Q==}
engines: {node: '>=0.10.0'}
peerDependencies:
- react: ^18.3.1
+ react: ^18.2.0
dependencies:
loose-envify: 1.4.0
- react: 18.3.1
+ react: 18.2.0
scheduler: 0.23.2
dev: false
@@ -12216,7 +12213,7 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
- /react-router-dom/6.9.0_nnrd3gsncyragczmpvfhocinkq:
+ /react-router-dom/6.9.0_biqbaboplfbrettd7655fr4n2y:
resolution: {integrity: sha512-/seUAPY01VAuwkGyVBPCn1OXfVbaWGGu4QN9uj0kCPcTyNYgL1ldZpxZUpRU7BLheKQI4Twtl/OW2nHRF1u26Q==}
engines: {node: '>=14'}
peerDependencies:
@@ -12224,22 +12221,22 @@ packages:
react-dom: '>=16.8'
dependencies:
'@remix-run/router': 1.4.0
- react: 18.3.1
- react-dom: 18.3.1_react@18.3.1
- react-router: 6.9.0_react@18.3.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ react-router: 6.9.0_react@18.2.0
dev: false
- /react-router/6.9.0_react@18.3.1:
+ /react-router/6.9.0_react@18.2.0:
resolution: {integrity: sha512-51lKevGNUHrt6kLuX3e/ihrXoXCa9ixY/nVWRLlob4r/l0f45x3SzBvYJe3ctleLUQQ5fVa4RGgJOTH7D9Umhw==}
engines: {node: '>=14'}
peerDependencies:
react: '>=16.8'
dependencies:
'@remix-run/router': 1.4.0
- react: 18.3.1
+ react: 18.2.0
dev: false
- /react-transition-group/4.4.5_nnrd3gsncyragczmpvfhocinkq:
+ /react-transition-group/4.4.5_biqbaboplfbrettd7655fr4n2y:
resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
peerDependencies:
react: '>=16.6.0'
@@ -12249,11 +12246,11 @@ packages:
dom-helpers: 5.2.1
loose-envify: 1.4.0
prop-types: 15.8.1
- react: 18.3.1
- react-dom: 18.3.1_react@18.3.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
- /react/18.3.1:
- resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+ /react/18.2.0:
+ resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
engines: {node: '>=0.10.0'}
dependencies:
loose-envify: 1.4.0
@@ -12884,11 +12881,6 @@ packages:
dependencies:
loose-envify: 1.4.0
- /scroll-into-view-if-needed/2.2.20:
- resolution: {integrity: sha512-P9kYMrhi9f6dvWwTGpO5I3HgjSU/8Mts7xL3lkoH5xlewK7O9Obdc5WmMCzppln7bCVGNmf3qfoZXrpCeyNJXw==}
- dependencies:
- compute-scroll-into-view: 1.0.11
-
/scroll-into-view-if-needed/2.2.31:
resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==}
dependencies:
@@ -14311,7 +14303,7 @@ packages:
requires-port: 1.0.0
dev: true
- /use-callback-ref/1.3.3_gvpw3nleobtzb6yriethvjsu44:
+ /use-callback-ref/1.3.3_7mazomva57u3e4dfbc62fsc6ny:
resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==}
engines: {node: '>=10'}
peerDependencies:
@@ -14321,11 +14313,11 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.3.27
- react: 18.3.1
+ '@types/react': 18.2.79
+ react: 18.2.0
tslib: 2.3.1
- /use-sidecar/1.1.3_gvpw3nleobtzb6yriethvjsu44:
+ /use-sidecar/1.1.3_7mazomva57u3e4dfbc62fsc6ny:
resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==}
engines: {node: '>=10'}
peerDependencies:
@@ -14335,9 +14327,9 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.3.27
+ '@types/react': 18.2.79
detect-node-es: 1.1.0
- react: 18.3.1
+ react: 18.2.0
tslib: 2.3.1
/use/3.1.1:
diff --git a/common/config/rush/repo-state.json b/common/config/rush/repo-state.json
index 0e7b144099..214b8320f8 100644
--- a/common/config/rush/repo-state.json
+++ b/common/config/rush/repo-state.json
@@ -1,4 +1,4 @@
// DO NOT MODIFY THIS FILE MANUALLY BUT DO COMMIT IT. It is generated and used by Rush.
{
- "preferredVersionsHash": "bf21a9e8fbc5a3846fb05b4fa0859e0917b2202f"
+ "preferredVersionsHash": "c6ff351fee32bc5112e0423655f5004c57ab2cd9"
}
diff --git a/docs/assets/contributing/en/source-code-details/0-VTable-Engineering.md b/docs/assets/contributing/en/source-code-details/0-VTable-Engineering.md
index 0c947c9f5d..cbb9189ba0 100644
--- a/docs/assets/contributing/en/source-code-details/0-VTable-Engineering.md
+++ b/docs/assets/contributing/en/source-code-details/0-VTable-Engineering.md
@@ -1,63 +1,63 @@
----
-title: 0 VTable Engineering
-
-
-key words: VisActor,VChart,VTable,VStrory,VMind,VGrammar,VRender,Visualization,Chart,Data,Table,Graph,Gis,LLM
---
-# VTable Engineering Guide Document
-
+title: 0 VTable Engineering
+
+
+key words: VisActor,VChart,VTable,VStrory,VMind,VGrammar,VRender,Visualization,Chart,Data,Table,Graph,Gis,LLM
+---
+# VTable Engineering Guide Document
+
This document provides an engineering guide for the VTable project, including how to obtain the source code, install dependencies, run examples, and an overview of the project structure.
## 1. Obtain the Source Code
-### Clone the repository from GitHub
-
+### Clone the repository from GitHub
+
+
+```
+# 克隆 VTable 仓库
+git clone https://github.com/VisActor/VTable.git
-```
-# 克隆 VTable 仓库
-git clone https://github.com/VisActor/VTable.git
-
-# 进入项目目录
+# 进入项目目录
cd VTable
-
+
```
## 2. Environment Preparation
-### Prerequisites
-
+### Prerequisites
+
-* **Node.js**: Requires Node.js installation, version requirements: `>=14.15.0 <15.0.0 || >=16.13.0 <17.0.0 || >=18.15.0 <19.0.0`
+* **Node.js**: Requires Node.js installation, version requirements: `>=14.15.0 <15.0.0 || >=16.13.0 <17.0.0 || >=18.15.0 <19.0.0 || >=20.0.0 <25.0.0`
* **Rush**: VTable uses Microsoft Rush for project management
-### Install Rush
-
+### Install Rush
+
-```
-# 全局安装 Rush
+```
+# 全局安装 Rush
npm install -g @microsoft/rush
-
+
```
-### Install Project Dependencies
-
+### Install Project Dependencies
+
-```
-# 在 VTable 根目录下执行以下命令,安装所有依赖
+```
+# 在 VTable 根目录下执行以下命令,安装所有依赖
rush update
-
+
```
-## 3. Start Demo
-
+## 3. Start Demo
+
VTable provides rich examples for developers to understand and use.
Execute the following command in the root directory to start the vtable package directory example.
-```
-# 启动 vtable包目录示例
+```
+# 启动 vtable包目录示例
rushx demo
-
+
```
This will start a local development server, usually running at `http://localhost:300*`, which you can access in your browser to view all examples.
@@ -65,252 +65,252 @@ This will start a local development server, usually running at `http://localhost
1. Start VTable core library example
-```
-# 进入 vtable 包目录
-cd packages/vtable
-# 启动示例
+```
+# 进入 vtable 包目录
+cd packages/vtable
+# 启动示例
rushx demo
-
+
```
2. Start React VTable Example
-```
-# 进入 react-vtable 包目录
-cd packages/react-vtable
-
-# 启动示例
+```
+# 进入 react-vtable 包目录
+cd packages/react-vtable
+
+# 启动示例
rushx demo
-
+
```
3. Start Vue VTable Example
-```
-# 进入 vue-vtable 包目录
-cd packages/vue-vtable
-
-# 启动示例
+```
+# 进入 vue-vtable 包目录
+cd packages/vue-vtable
+
+# 启动示例
rushx demo
-
+
```
4. Start Vue VTable Example
-```
-# 进入 vue-vtable 包目录
-cd packages/openinula-vtable
-
-# 启动示例
+```
+# 进入 vue-vtable 包目录
+cd packages/openinula-vtable
+
+# 启动示例
rushx demo
-
+
```
-5. Start Gantt Chart Example
-
+5. Start Gantt Chart Example
+
-```
-# 进入 vtable-gantt 包目录
-cd packages/vtable-gantt
-
-# 启动示例
+```
+# 进入 vtable-gantt 包目录
+cd packages/vtable-gantt
+
+# 启动示例
rushx demo
-
+
```
-6. Start Calendar Component Example
-
+6. Start Calendar Component Example
-```
-# 进入 vtable-calendar 包目录
-cd packages/vtable-calendar
-
-# 启动示例
+
+```
+# 进入 vtable-calendar 包目录
+cd packages/vtable-calendar
+
+# 启动示例
rushx demo
-
+
```
7. Start Plugin Example
-```
-# 进入 vtable-plugins 包目录
-cd packages/vtable-plugins
-
-# 启动示例
+```
+# 进入 vtable-plugins 包目录
+cd packages/vtable-plugins
+
+# 启动示例
rushx demo
-
+
```
-### Start the Documentation Site
-
+### Start the Documentation Site
+
-```
-# 在项目根目录执行
+```
+# 在项目根目录执行
rush docs
-
+
```
This will launch the VTable documentation site, which includes detailed tutorials, API documentation, and examples.
-## 4. Command Description
-
+## 4. Command Description
+
In each package directory, you can execute the following command:
|
-
+
Command
|
-
+
Instructions
|
|
-
+
`rushx demo`
|
-
+
Start local example service
|
|
-
+
`rushx build`
|
-
+
Build Library File
|
|
-
+
`rushx dev`
|
-
+
Development mode build (watch for file changes)
|
|
-
+
`rushx test`
|
-
+
Run unit tests
|
|
-
+
`rushx test-cov`
|
-
+
Run test coverage analysis
|
|
-
+
`rushx eslint`
|
-
+
Execute code style check
|
|
-
+
`rushx compile`
|
-
+
Only perform TypeScript type checking
|
In the project root directory, you can use the following Rush commands:
|
-
+
Command
|
-
+
Instructions
|
|
-
+
`rush start`
|
-
+
Start the demo under the VTable directory of the core package
|
|
-
+
`rush update`
|
-
+
Install or update all dependencies
|
|
-
+
`rush build`
|
-
+
Build all projects
|
|
-
+
`rush rebuild`
|
-
+
Clean and rebuild all projects
|
|
-
+
`rush test`
|
-
+
Run tests for all projects
|
|
-
+
`rush change-all`
|
-
+
Update all changelogs after submitting code
|
|
-
+
`rush docs`
|
-
+
Start the documentation site
|
-## 5. Project Structure Description
-
+## 5. Project Structure Description
+
The VTable project adopts a Monorepo structure managed by Rush, mainly consisting of the following parts:
-### Top-level Directory Structure
-
-
-```
-VTable/
- ├── .github/ # GitHub 相关配置
- ├── .vscode/ # VS Code 配置
- ├── common/ # Rush 配置文件和公共依赖
- ├── docs/ # 文档站点源码
- ├── packages/ # 所有包的源代码
- ├── share/ # 共享配置(ESLint、TypeScript等)
- ├── tools/ # 开发工具和脚本
- ├── types/ # 公共类型定义
- ├── CONTRIBUTING.md # 贡献指南
- ├── README.md # 项目说明
+### Top-level Directory Structure
+
+
+```
+VTable/
+ ├── .github/ # GitHub 相关配置
+ ├── .vscode/ # VS Code 配置
+ ├── common/ # Rush 配置文件和公共依赖
+ ├── docs/ # 文档站点源码
+ ├── packages/ # 所有包的源代码
+ ├── share/ # 共享配置(ESLint、TypeScript等)
+ ├── tools/ # 开发工具和脚本
+ ├── types/ # 公共类型定义
+ ├── CONTRIBUTING.md # 贡献指南
+ ├── README.md # 项目说明
└── rush.json # Rush 配置文件
-
+
```
### packages directory
The packages directory contains all VTable related packages:
-```
-packages/
- ├── vtable/ # VTable 核心库
- ├── react-vtable/ # React 集成
- ├── vue-vtable/ # Vue 集成
- ├── openinula-vtable/ # OpenInula 集成
- ├── vtable-gantt/ # 甘特图组件
- ├── vtable-editors/ # 编辑器组件
- ├── vtable-export/ # 导出工具
- ├── vtable-search/ # 搜索工具
- ├── vtable-calendar/ # 日历组件
+```
+packages/
+ ├── vtable/ # VTable 核心库
+ ├── react-vtable/ # React 集成
+ ├── vue-vtable/ # Vue 集成
+ ├── openinula-vtable/ # OpenInula 集成
+ ├── vtable-gantt/ # 甘特图组件
+ ├── vtable-editors/ # 编辑器组件
+ ├── vtable-export/ # 导出工具
+ ├── vtable-search/ # 搜索工具
+ ├── vtable-calendar/ # 日历组件
└── vtable-plugins/ # 插件集合
-
+
```
-### vtable Package Structure
-
+### vtable Package Structure
+
The core vtable package structure is as follows:
-```
-packages/vtable/
- ├── examples/ # 示例代码
- ├── site-demo/ # 站点示例
- ├── src/ # 源代码
- ├── test/ # 测试代码
- ├── nodejs/ # Node.js 环境相关代码
- ├── package.json # 包配置
+```
+packages/vtable/
+ ├── examples/ # 示例代码
+ ├── site-demo/ # 站点示例
+ ├── src/ # 源代码
+ ├── test/ # 测试代码
+ ├── nodejs/ # Node.js 环境相关代码
+ ├── package.json # 包配置
└── README.md # 说明文档
-
+
```
-## 6. Development Process
-
+## 6. Development Process
+
+
+### Develop New Features or Fix Bugs
-### Develop New Features or Fix Bugs
-
1. **Create a branch**: Create a new feature or fix branch from the main branch develop
@@ -332,28 +332,28 @@ packages/vtable/
具体过程可以参考官网教程:[贡献者指南](https://www.visactor.io/vtable/contributing/)
-### Version Control
-
+### Version Control
+
VTable uses Rush to manage versions, primarily relying on the version strategy (versionPolicyName) defined in the `rush.json` file.
## 7. Frequently Asked Questions and Solutions
-### Dependency Installation Issues
-
+### Dependency Installation Issues
+
If you encounter issues during the `rush update` process, you can try the following methods:
-```
-# 清除 Rush 缓存
-rush purge
-
-# 重新安装所有依赖
+```
+# 清除 Rush 缓存
+rush purge
+
+# 重新安装所有依赖
rush update --full
-
+
```
-### Failed to Start Demo
-
+### Failed to Start Demo
+
If there are issues when starting the example, you can check the following points:
@@ -363,35 +363,35 @@ If there are issues when starting the example, you can check the following point
1. Check console error messages
-```
-# 重新构建并启动示例
-rush build
-cd packages/vtable
+```
+# 重新构建并启动示例
+rush build
+cd packages/vtable
rushx demo
-
+
```
-### Build Failed
-
+### Build Failed
+
If the build process fails, you can try the following methods:
-```
-# 清理构建缓存
-rush clean
-
-# 重新构建
+```
+# 清理构建缓存
+rush clean
+
+# 重新构建
rush build
-
+
```
-## 8. Contributing
-
+## 8. Contributing
+
We welcome all forms of contributions, including but not limited to submitting issues, improving documentation, fixing bugs, or adding new features.
参与贡献前,请务必阅读[贡献者指南](https://www.visactor.io/vtable/contributing/),了解贡献流程和规范。
-## 9. Resource Links
-
+## 9. Resource Links
+
* [VTable 官方网站](https://visactor.io/vtable)
diff --git a/docs/assets/contributing/zh/source-code-details/0-VTable-Engineering.md b/docs/assets/contributing/zh/source-code-details/0-VTable-Engineering.md
index eac9e7b4ba..fa11353505 100644
--- a/docs/assets/contributing/zh/source-code-details/0-VTable-Engineering.md
+++ b/docs/assets/contributing/zh/source-code-details/0-VTable-Engineering.md
@@ -1,7 +1,7 @@
----
+---
title: 0 VTable 工程化
-
-key words: VisActor,VChart,VTable,VStrory,VMind,VGrammar,VRender,Visualization,Chart,Data,Table,Graph,Gis,LLM
+
+key words: VisActor,VChart,VTable,VStrory,VMind,VGrammar,VRender,Visualization,Chart,Data,Table,Graph,Gis,LLM
---
# VTable 工程化指引文档
@@ -11,35 +11,35 @@ key words: VisActor,VChart,VTable,VStrory,VMind,VGrammar,VRender,Visualization,C
### 从 GitHub 克隆代码库
-```
-# 克隆 VTable 仓库
-git clone https://github.com/VisActor/VTable.git
-
-# 进入项目目录
+```
+# 克隆 VTable 仓库
+git clone https://github.com/VisActor/VTable.git
+
+# 进入项目目录
cd VTable
-
+
```
## 2. 环境准备
### 前置要求
-* **Node.js**: 需要安装 Node.js,版本要求:`>=14.15.0 <15.0.0 || >=16.13.0 <17.0.0 || >=18.15.0 <19.0.0`
+* **Node.js**: 需要安装 Node.js,版本要求:`>=14.15.0 <15.0.0 || >=16.13.0 <17.0.0 || >=18.15.0 <19.0.0 || >=20.0.0 <25.0.0`
* **Rush**: VTable 使用 Microsoft Rush 进行项目管理
### 安装 Rush
-```
-# 全局安装 Rush
+```
+# 全局安装 Rush
npm install -g @microsoft/rush
-
+
```
### 安装项目依赖
-```
-# 在 VTable 根目录下执行以下命令,安装所有依赖
+```
+# 在 VTable 根目录下执行以下命令,安装所有依赖
rush update
-
+
```
## 3. 启动 Demo
@@ -47,10 +47,10 @@ VTable 提供了丰富的示例供开发者了解和使用。
在根目录执行以下命令,启动 vtable包目录示例。
-```
-# 启动 vtable包目录示例
+```
+# 启动 vtable包目录示例
rushx demo
-
+
```
这将启动一个本地开发服务器,通常在 `http://localhost:300*` 上运行,你可以在浏览器中访问查看所有示例。
@@ -58,79 +58,79 @@ rushx demo
1. 启动 VTable 核心库示例
-```
-# 进入 vtable 包目录
-cd packages/vtable
-# 启动示例
+```
+# 进入 vtable 包目录
+cd packages/vtable
+# 启动示例
rushx demo
-
+
```
2. 启动 React VTable 示例
-```
-# 进入 react-vtable 包目录
-cd packages/react-vtable
-
-# 启动示例
+```
+# 进入 react-vtable 包目录
+cd packages/react-vtable
+
+# 启动示例
rushx demo
-
+
```
3. 启动 Vue VTable 示例
-```
-# 进入 vue-vtable 包目录
-cd packages/vue-vtable
-
-# 启动示例
+```
+# 进入 vue-vtable 包目录
+cd packages/vue-vtable
+
+# 启动示例
rushx demo
-
+
```
4. 启动 Vue VTable 示例
-```
-# 进入 vue-vtable 包目录
-cd packages/openinula-vtable
-
-# 启动示例
+```
+# 进入 vue-vtable 包目录
+cd packages/openinula-vtable
+
+# 启动示例
rushx demo
-
+
```
5. 启动甘特图示例
-```
-# 进入 vtable-gantt 包目录
-cd packages/vtable-gantt
-
-# 启动示例
+```
+# 进入 vtable-gantt 包目录
+cd packages/vtable-gantt
+
+# 启动示例
rushx demo
-
+
```
6. 启动日历组件示例
-```
-# 进入 vtable-calendar 包目录
-cd packages/vtable-calendar
-
-# 启动示例
+```
+# 进入 vtable-calendar 包目录
+cd packages/vtable-calendar
+
+# 启动示例
rushx demo
-
+
```
7. 启动插件示例
-```
-# 进入 vtable-plugins 包目录
-cd packages/vtable-plugins
-
-# 启动示例
+```
+# 进入 vtable-plugins 包目录
+cd packages/vtable-plugins
+
+# 启动示例
rushx demo
-
+
```
### 启动文档站点
-```
-# 在项目根目录执行
+```
+# 在项目根目录执行
rush docs
-
+
```
这将启动 VTable 的文档站点,包含详细的教程、API 文档和示例。
@@ -139,103 +139,103 @@ rush docs
在各个包目录下,你可以执行以下命令:
|
-
+
命令
|
-
+
说明
|
|
-
+
`rushx demo`
|
-
+
启动本地示例服务
|
|
-
+
`rushx build`
|
-
+
构建库文件
|
|
-
+
`rushx dev`
|
-
+
开发模式构建(监听文件变化)
|
|
-
+
`rushx test`
|
-
+
运行单元测试
|
|
-
+
`rushx test-cov`
|
-
+
运行测试覆盖率分析
|
|
-
+
`rushx eslint`
|
-
+
执行代码风格检查
|
|
-
+
`rushx compile`
|
-
+
仅执行 TypeScript 类型检查
|
在项目根目录,你可以使用以下 Rush 命令:
|
-
+
命令
|
-
+
说明
|
|
-
+
`rush start`
|
-
+
启动核心包VTable目录下的demo
|
|
-
+
`rush update`
|
-
+
安装或更新所有依赖
|
|
-
+
`rush build`
|
-
+
构建所有项目
|
|
-
+
`rush rebuild`
|
-
+
清理并重新构建所有项目
|
|
-
+
`rush test`
|
-
+
运行所有项目的测试
|
|
-
+
`rush change-all`
|
-
+
在提交代码后更新所有变更日志
|
|
-
+
`rush docs`
|
-
+
启动文档站点
|
## 5. 项目结构说明
@@ -244,53 +244,53 @@ VTable 项目采用 Rush 管理的 Monorepo 结构,主要由以下部分组成
### 顶层目录结构
-```
-VTable/
- ├── .github/ # GitHub 相关配置
- ├── .vscode/ # VS Code 配置
- ├── common/ # Rush 配置文件和公共依赖
- ├── docs/ # 文档站点源码
- ├── packages/ # 所有包的源代码
- ├── share/ # 共享配置(ESLint、TypeScript等)
- ├── tools/ # 开发工具和脚本
- ├── types/ # 公共类型定义
- ├── CONTRIBUTING.md # 贡献指南
- ├── README.md # 项目说明
+```
+VTable/
+ ├── .github/ # GitHub 相关配置
+ ├── .vscode/ # VS Code 配置
+ ├── common/ # Rush 配置文件和公共依赖
+ ├── docs/ # 文档站点源码
+ ├── packages/ # 所有包的源代码
+ ├── share/ # 共享配置(ESLint、TypeScript等)
+ ├── tools/ # 开发工具和脚本
+ ├── types/ # 公共类型定义
+ ├── CONTRIBUTING.md # 贡献指南
+ ├── README.md # 项目说明
└── rush.json # Rush 配置文件
-
+
```
### packages 目录
packages 目录包含所有 VTable 相关的包:
-```
-packages/
- ├── vtable/ # VTable 核心库
- ├── react-vtable/ # React 集成
- ├── vue-vtable/ # Vue 集成
- ├── openinula-vtable/ # OpenInula 集成
- ├── vtable-gantt/ # 甘特图组件
- ├── vtable-editors/ # 编辑器组件
- ├── vtable-export/ # 导出工具
- ├── vtable-search/ # 搜索工具
- ├── vtable-calendar/ # 日历组件
+```
+packages/
+ ├── vtable/ # VTable 核心库
+ ├── react-vtable/ # React 集成
+ ├── vue-vtable/ # Vue 集成
+ ├── openinula-vtable/ # OpenInula 集成
+ ├── vtable-gantt/ # 甘特图组件
+ ├── vtable-editors/ # 编辑器组件
+ ├── vtable-export/ # 导出工具
+ ├── vtable-search/ # 搜索工具
+ ├── vtable-calendar/ # 日历组件
└── vtable-plugins/ # 插件集合
-
+
```
### vtable 包结构
核心的 vtable 包结构如下:
-```
-packages/vtable/
- ├── examples/ # 示例代码
- ├── site-demo/ # 站点示例
- ├── src/ # 源代码
- ├── test/ # 测试代码
- ├── nodejs/ # Node.js 环境相关代码
- ├── package.json # 包配置
+```
+packages/vtable/
+ ├── examples/ # 示例代码
+ ├── site-demo/ # 站点示例
+ ├── src/ # 源代码
+ ├── test/ # 测试代码
+ ├── nodejs/ # Node.js 环境相关代码
+ ├── package.json # 包配置
└── README.md # 说明文档
-
+
```
## 6. 开发流程
@@ -326,13 +326,13 @@ VTable 使用 Rush 来管理版本,主要依赖于 `rush.json` 文件中定义
如果在 `rush update` 过程中遇到问题,可以尝试以下方法:
-```
-# 清除 Rush 缓存
-rush purge
-
-# 重新安装所有依赖
+```
+# 清除 Rush 缓存
+rush purge
+
+# 重新安装所有依赖
rush update --full
-
+
```
### 启动 Demo 失败
@@ -344,24 +344,24 @@ rush update --full
1. 检查控制台报错信息
-```
-# 重新构建并启动示例
-rush build
-cd packages/vtable
+```
+# 重新构建并启动示例
+rush build
+cd packages/vtable
rushx demo
-
+
```
### 构建失败
如果构建过程失败,可以尝试以下方法:
-```
-# 清理构建缓存
-rush clean
-
-# 重新构建
+```
+# 清理构建缓存
+rush clean
+
+# 重新构建
rush build
-
+
```
## 8. 参与贡献
diff --git a/docs/package.json b/docs/package.json
index f346c5baef..42bdb73577 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -10,7 +10,7 @@
"start": "npx concurrently --kill-others \"npm:watch\" \"npm:serve\""
},
"dependencies": {
- "@arco-design/web-react": "2.60.2",
+ "@arco-design/web-react": "2.66.12",
"@arco-design/web-vue": "^2.11.0",
"@visactor/vtable": "workspace:*",
"@visactor/vtable-gantt": "workspace:*",
@@ -26,8 +26,8 @@
"markdown-it": "^13.0.0",
"highlight.js": "^11.8.0",
"axios": "^1.4.0",
- "react": "^18.0.0",
- "react-dom": "^18.0.0",
+ "react": "18.2.0",
+ "react-dom": "18.2.0",
"react-router-dom": "6.9.0",
"lodash": "4.17.21",
"openinula": "~0.1.2-SNAPSHOT",
@@ -39,8 +39,8 @@
"@internal/eslint-config": "workspace:*",
"@internal/ts-config": "workspace:*",
"@types/buble": "^0.20.5",
- "@types/react": "^18.0.0",
- "@types/react-dom": "^18.0.0",
+ "@types/react": "18.2.79",
+ "@types/react-dom": "18.2.25",
"@types/markdown-it": "^13.0.0",
"@types/highlightjs": "^9.12.0",
"@vitejs/plugin-react": "3.1.0",
diff --git a/packages/react-vtable/demo/demo-page-screenshot/component-container-react18.png b/packages/react-vtable/demo/demo-page-screenshot/component-container-react18.png
new file mode 100644
index 0000000000000000000000000000000000000000..33df07bef513da4ae79bdfcebe28eebd495a6f12
GIT binary patch
literal 87761
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 |