From c5edd88f789ae22f7472c6c3e9e9bf0c143433f5 Mon Sep 17 00:00:00 2001 From: Howard Zhang Date: Wed, 20 Mar 2024 21:58:07 +0800 Subject: [PATCH] feat: init openinula-vchart --- .github/labeler.yml | 4 + .github/workflows/hotfix-release.yml | 5 + .github/workflows/release.yml | 5 + common/config/rush/command-line.json | 7 + common/config/rush/pnpm-lock.yaml | 1211 ++++++++++------- packages/openinula-vchart/.eslintrc.cjs | 17 + packages/openinula-vchart/CHANGELOG.json | 232 ++++ packages/openinula-vchart/CHANGELOG.md | 110 ++ packages/openinula-vchart/README.md | 54 + packages/openinula-vchart/bundler.config.js | 19 + packages/openinula-vchart/demo/index.html | 13 + .../openinula-vchart/demo/public/vite.svg | 1 + packages/openinula-vchart/demo/src/App.css | 42 + packages/openinula-vchart/demo/src/App.tsx | 345 +++++ .../demo/src/assets/react.svg | 1 + packages/openinula-vchart/demo/src/index.css | 69 + packages/openinula-vchart/demo/src/main.tsx | 10 + packages/openinula-vchart/demo/src/util.ts | 43 + .../openinula-vchart/demo/src/vite-env.d.ts | 1 + packages/openinula-vchart/demo/tsconfig.json | 21 + .../openinula-vchart/demo/tsconfig.node.json | 12 + packages/openinula-vchart/demo/vite.config.ts | 36 + ...53\351\200\237\345\274\200\345\247\213.md" | 68 + .../docs/2.1 API\350\256\276\350\256\241.md" | 103 ++ ...76\350\241\250\346\240\207\347\255\276.md" | 46 + ...25\345\214\226\346\240\207\347\255\276.md" | 213 +++ ...13\344\273\266\344\272\244\344\272\222.md" | 127 ++ ...73\351\242\230\346\240\267\345\274\217.md" | 81 ++ packages/openinula-vchart/docs/5. FAQ.md | 7 + ...64\346\226\260\346\227\245\345\277\227.md" | 7 + packages/openinula-vchart/docs/README.md | 15 + packages/openinula-vchart/package.json | 81 ++ packages/openinula-vchart/rollup.config.js | 65 + packages/openinula-vchart/src/VChart.tsx | 9 + .../openinula-vchart/src/VChartSimple.tsx | 6 + .../openinula-vchart/src/charts/AreaChart.tsx | 13 + .../openinula-vchart/src/charts/BarChart.tsx | 15 + .../openinula-vchart/src/charts/BaseChart.tsx | 291 ++++ .../src/charts/BoxPlotChart.tsx | 16 + .../src/charts/CircularProgressChart.tsx | 15 + .../src/charts/CommonChart.tsx | 13 + .../src/charts/FunnelChart.tsx | 13 + .../src/charts/HistogramChart.tsx | 16 + .../openinula-vchart/src/charts/LineChart.tsx | 13 + .../src/charts/LinearProgressChart.tsx | 15 + .../openinula-vchart/src/charts/MapChart.tsx | 13 + .../openinula-vchart/src/charts/PieChart.tsx | 13 + .../src/charts/RadarChart.tsx | 13 + .../src/charts/RangeColumnChart.tsx | 16 + .../openinula-vchart/src/charts/RoseChart.tsx | 13 + .../src/charts/ScatterChart.tsx | 16 + .../src/charts/SequenceChart.tsx | 16 + .../src/charts/WordCloudChart.tsx | 16 + packages/openinula-vchart/src/charts/index.ts | 24 + .../openinula-vchart/src/components/Axis.tsx | 6 + .../src/components/BaseComponent.tsx | 62 + .../openinula-vchart/src/components/Brush.tsx | 7 + .../src/components/Crosshair.tsx | 6 + .../src/components/DataZoom.tsx | 6 + .../src/components/Indicator.tsx | 6 + .../src/components/Legend.tsx | 7 + .../openinula-vchart/src/components/Mark.tsx | 6 + .../src/components/MarkArea.tsx | 6 + .../src/components/MarkLine.tsx | 6 + .../src/components/MarkPoint.tsx | 6 + .../src/components/Player.tsx | 7 + .../src/components/Region.tsx | 8 + .../src/components/ScrollBar.tsx | 7 + .../openinula-vchart/src/components/Title.tsx | 6 + .../openinula-vchart/src/components/index.ts | 15 + .../src/components/tooltip/Tooltip.tsx | 4 + .../src/components/tooltip/constant.ts | 3 + .../src/components/tooltip/index.ts | 3 + .../src/components/tooltip/interface.ts | 30 + .../src/components/tooltip/util.tsx | 69 + packages/openinula-vchart/src/constants.ts | 1 + .../src/containers/withContainer.tsx | 45 + .../openinula-vchart/src/context/chart.tsx | 24 + .../openinula-vchart/src/context/stage.tsx | 15 + .../openinula-vchart/src/context/view.tsx | 15 + packages/openinula-vchart/src/eventsUtils.ts | 264 ++++ packages/openinula-vchart/src/global.d.ts | 1 + packages/openinula-vchart/src/index.ts | 50 + packages/openinula-vchart/src/series/Area.tsx | 5 + packages/openinula-vchart/src/series/Bar.tsx | 7 + .../src/series/BaseSeries.tsx | 101 ++ .../openinula-vchart/src/series/BoxPlot.tsx | 6 + .../src/series/CircularProgress.tsx | 10 + packages/openinula-vchart/src/series/Dot.tsx | 6 + .../openinula-vchart/src/series/Funnel.tsx | 6 + packages/openinula-vchart/src/series/Line.tsx | 6 + .../src/series/LinearProgress.tsx | 6 + packages/openinula-vchart/src/series/Link.tsx | 6 + packages/openinula-vchart/src/series/Map.tsx | 6 + packages/openinula-vchart/src/series/Pie.tsx | 6 + .../openinula-vchart/src/series/Radar.tsx | 6 + .../src/series/RangeColumn.tsx | 6 + packages/openinula-vchart/src/series/Rose.tsx | 6 + .../openinula-vchart/src/series/Scatter.tsx | 6 + .../openinula-vchart/src/series/Series.tsx | 40 + .../openinula-vchart/src/series/WordCloud.tsx | 6 + packages/openinula-vchart/src/series/index.ts | 18 + packages/openinula-vchart/src/util.ts | 99 ++ .../openinula-vchart/tsconfig.eslint.json | 10 + packages/openinula-vchart/tsconfig.json | 25 + .../runtime/browser/test-page/zuma.ts | 155 +++ rush.json | 7 + 107 files changed, 4366 insertions(+), 526 deletions(-) create mode 100644 packages/openinula-vchart/.eslintrc.cjs create mode 100644 packages/openinula-vchart/CHANGELOG.json create mode 100644 packages/openinula-vchart/CHANGELOG.md create mode 100644 packages/openinula-vchart/README.md create mode 100644 packages/openinula-vchart/bundler.config.js create mode 100644 packages/openinula-vchart/demo/index.html create mode 100644 packages/openinula-vchart/demo/public/vite.svg create mode 100644 packages/openinula-vchart/demo/src/App.css create mode 100644 packages/openinula-vchart/demo/src/App.tsx create mode 100644 packages/openinula-vchart/demo/src/assets/react.svg create mode 100644 packages/openinula-vchart/demo/src/index.css create mode 100644 packages/openinula-vchart/demo/src/main.tsx create mode 100644 packages/openinula-vchart/demo/src/util.ts create mode 100644 packages/openinula-vchart/demo/src/vite-env.d.ts create mode 100644 packages/openinula-vchart/demo/tsconfig.json create mode 100644 packages/openinula-vchart/demo/tsconfig.node.json create mode 100644 packages/openinula-vchart/demo/vite.config.ts create mode 100644 "packages/openinula-vchart/docs/1. \345\277\253\351\200\237\345\274\200\345\247\213.md" create mode 100644 "packages/openinula-vchart/docs/2.1 API\350\256\276\350\256\241.md" create mode 100644 "packages/openinula-vchart/docs/2.2 \347\273\237\344\270\200\345\233\276\350\241\250\346\240\207\347\255\276.md" create mode 100644 "packages/openinula-vchart/docs/2.3 \350\257\255\346\263\225\345\214\226\346\240\207\347\255\276.md" create mode 100644 "packages/openinula-vchart/docs/3. \344\272\213\344\273\266\344\272\244\344\272\222.md" create mode 100644 "packages/openinula-vchart/docs/4. \344\270\273\351\242\230\346\240\267\345\274\217.md" create mode 100644 packages/openinula-vchart/docs/5. FAQ.md create mode 100644 "packages/openinula-vchart/docs/6. \346\233\264\346\226\260\346\227\245\345\277\227.md" create mode 100644 packages/openinula-vchart/docs/README.md create mode 100644 packages/openinula-vchart/package.json create mode 100644 packages/openinula-vchart/rollup.config.js create mode 100644 packages/openinula-vchart/src/VChart.tsx create mode 100644 packages/openinula-vchart/src/VChartSimple.tsx create mode 100644 packages/openinula-vchart/src/charts/AreaChart.tsx create mode 100644 packages/openinula-vchart/src/charts/BarChart.tsx create mode 100644 packages/openinula-vchart/src/charts/BaseChart.tsx create mode 100644 packages/openinula-vchart/src/charts/BoxPlotChart.tsx create mode 100644 packages/openinula-vchart/src/charts/CircularProgressChart.tsx create mode 100644 packages/openinula-vchart/src/charts/CommonChart.tsx create mode 100644 packages/openinula-vchart/src/charts/FunnelChart.tsx create mode 100644 packages/openinula-vchart/src/charts/HistogramChart.tsx create mode 100644 packages/openinula-vchart/src/charts/LineChart.tsx create mode 100644 packages/openinula-vchart/src/charts/LinearProgressChart.tsx create mode 100644 packages/openinula-vchart/src/charts/MapChart.tsx create mode 100644 packages/openinula-vchart/src/charts/PieChart.tsx create mode 100644 packages/openinula-vchart/src/charts/RadarChart.tsx create mode 100644 packages/openinula-vchart/src/charts/RangeColumnChart.tsx create mode 100644 packages/openinula-vchart/src/charts/RoseChart.tsx create mode 100644 packages/openinula-vchart/src/charts/ScatterChart.tsx create mode 100644 packages/openinula-vchart/src/charts/SequenceChart.tsx create mode 100644 packages/openinula-vchart/src/charts/WordCloudChart.tsx create mode 100644 packages/openinula-vchart/src/charts/index.ts create mode 100644 packages/openinula-vchart/src/components/Axis.tsx create mode 100644 packages/openinula-vchart/src/components/BaseComponent.tsx create mode 100644 packages/openinula-vchart/src/components/Brush.tsx create mode 100644 packages/openinula-vchart/src/components/Crosshair.tsx create mode 100644 packages/openinula-vchart/src/components/DataZoom.tsx create mode 100644 packages/openinula-vchart/src/components/Indicator.tsx create mode 100644 packages/openinula-vchart/src/components/Legend.tsx create mode 100644 packages/openinula-vchart/src/components/Mark.tsx create mode 100644 packages/openinula-vchart/src/components/MarkArea.tsx create mode 100644 packages/openinula-vchart/src/components/MarkLine.tsx create mode 100644 packages/openinula-vchart/src/components/MarkPoint.tsx create mode 100644 packages/openinula-vchart/src/components/Player.tsx create mode 100644 packages/openinula-vchart/src/components/Region.tsx create mode 100644 packages/openinula-vchart/src/components/ScrollBar.tsx create mode 100644 packages/openinula-vchart/src/components/Title.tsx create mode 100644 packages/openinula-vchart/src/components/index.ts create mode 100644 packages/openinula-vchart/src/components/tooltip/Tooltip.tsx create mode 100644 packages/openinula-vchart/src/components/tooltip/constant.ts create mode 100644 packages/openinula-vchart/src/components/tooltip/index.ts create mode 100644 packages/openinula-vchart/src/components/tooltip/interface.ts create mode 100644 packages/openinula-vchart/src/components/tooltip/util.tsx create mode 100644 packages/openinula-vchart/src/constants.ts create mode 100644 packages/openinula-vchart/src/containers/withContainer.tsx create mode 100644 packages/openinula-vchart/src/context/chart.tsx create mode 100644 packages/openinula-vchart/src/context/stage.tsx create mode 100644 packages/openinula-vchart/src/context/view.tsx create mode 100644 packages/openinula-vchart/src/eventsUtils.ts create mode 100644 packages/openinula-vchart/src/global.d.ts create mode 100644 packages/openinula-vchart/src/index.ts create mode 100644 packages/openinula-vchart/src/series/Area.tsx create mode 100644 packages/openinula-vchart/src/series/Bar.tsx create mode 100644 packages/openinula-vchart/src/series/BaseSeries.tsx create mode 100644 packages/openinula-vchart/src/series/BoxPlot.tsx create mode 100644 packages/openinula-vchart/src/series/CircularProgress.tsx create mode 100644 packages/openinula-vchart/src/series/Dot.tsx create mode 100644 packages/openinula-vchart/src/series/Funnel.tsx create mode 100644 packages/openinula-vchart/src/series/Line.tsx create mode 100644 packages/openinula-vchart/src/series/LinearProgress.tsx create mode 100644 packages/openinula-vchart/src/series/Link.tsx create mode 100644 packages/openinula-vchart/src/series/Map.tsx create mode 100644 packages/openinula-vchart/src/series/Pie.tsx create mode 100644 packages/openinula-vchart/src/series/Radar.tsx create mode 100644 packages/openinula-vchart/src/series/RangeColumn.tsx create mode 100644 packages/openinula-vchart/src/series/Rose.tsx create mode 100644 packages/openinula-vchart/src/series/Scatter.tsx create mode 100644 packages/openinula-vchart/src/series/Series.tsx create mode 100644 packages/openinula-vchart/src/series/WordCloud.tsx create mode 100644 packages/openinula-vchart/src/series/index.ts create mode 100644 packages/openinula-vchart/src/util.ts create mode 100644 packages/openinula-vchart/tsconfig.eslint.json create mode 100644 packages/openinula-vchart/tsconfig.json create mode 100644 packages/vchart/__tests__/runtime/browser/test-page/zuma.ts diff --git a/.github/labeler.yml b/.github/labeler.yml index c5bd8ebb10..0884ee4ccb 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -14,6 +14,10 @@ lark-vchart: react-vchart: - packages/react-vchart/** +# Add 'openinula-vchart' label to any change within the 'openinula-vchart' package +openinula-vchart: + - packages/openinula-vchart/** + # Add 'taro-vchart' label to any change within the 'taro-vchart' package taro-vchart: - packages/taro-vchart/** diff --git a/.github/workflows/hotfix-release.yml b/.github/workflows/hotfix-release.yml index f4b25297c7..21ee9dcad9 100644 --- a/.github/workflows/hotfix-release.yml +++ b/.github/workflows/hotfix-release.yml @@ -64,6 +64,11 @@ jobs: NODE_OPTIONS: '--max_old_space_size=4096' run: node common/scripts/install-run-rush.js build --only @visactor/react-vchart + - name: Build openinula-vchart + env: + NODE_OPTIONS: '--max_old_space_size=4096' + run: node common/scripts/install-run-rush.js build --only @visactor/openinula-vchart + - name: Build taro-vchart env: NODE_OPTIONS: '--max_old_space_size=4096' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dbbeeefa0a..c552849cf2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -71,6 +71,11 @@ jobs: NODE_OPTIONS: '--max_old_space_size=4096' run: node common/scripts/install-run-rush.js build --only @visactor/react-vchart + - name: Build openinula-vchart + env: + NODE_OPTIONS: '--max_old_space_size=4096' + run: node common/scripts/install-run-rush.js build --only @visactor/openinula-vchart + - name: Build taro-vchart env: NODE_OPTIONS: '--max_old_space_size=4096' diff --git a/common/config/rush/command-line.json b/common/config/rush/command-line.json index c6187b4c0a..225e0cbe5f 100644 --- a/common/config/rush/command-line.json +++ b/common/config/rush/command-line.json @@ -97,6 +97,13 @@ "description": "Run this command to start react-vchart development server", "shellCommand": "rush run -p @visactor/react-vchart -s start" }, + { + "commandKind": "global", + "name": "openinula", + "summary": "Start the development server of openinula-vchart demo", + "description": "Run this command to start openinula-vchart development server", + "shellCommand": "rush run -p @visactor/openinula-vchart -s start" + }, { "name": "change-all", "commandKind": "global", diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 4fca1e4f95..f5c451493b 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -43,7 +43,7 @@ importers: vite: 3.2.6 yargs: ^17.1.1 dependencies: - '@arco-design/web-react': 2.46.1_sa4xzwsa7zx3f3ottdvkii7pwu + '@arco-design/web-react': 2.46.1_zvnqmnfwsl5op5apqvyrtfutqa '@visactor/vchart': link:../packages/vchart '@visactor/vchart-theme': 1.6.9 '@visactor/vgrammar': 0.12.4 @@ -51,7 +51,7 @@ importers: '@visactor/vrender': 0.18.5 '@visactor/vrender-kits': 0.18.5 '@visactor/vutils': 0.18.1 - axios: 1.6.7 + axios: 1.6.8 highlight.js: 11.9.0 markdown-it: 13.0.2 react: 18.2.0 @@ -63,8 +63,8 @@ importers: '@internal/ts-config': link:../share/ts-config '@types/highlightjs': 9.12.6 '@types/markdown-it': 13.0.7 - '@types/react': 18.2.64 - '@types/react-dom': 18.2.21 + '@types/react': 18.2.67 + '@types/react-dom': 18.2.22 '@vitejs/plugin-react': 3.1.0_vite@3.2.6 canvas: 2.11.2 chalk: 3.0.0 @@ -114,6 +114,67 @@ importers: rollup-plugin-copy: 3.4.0 rollup-plugin-terser: 7.0.2_rollup@3.20.5 + ../../packages/openinula-vchart: + specifiers: + '@internal/bundler': workspace:* + '@internal/eslint-config': workspace:* + '@internal/ts-config': workspace:* + '@rollup/plugin-typescript': 11.1.0 + '@rushstack/eslint-patch': ~1.1.4 + '@types/jest': ^26.0.0 + '@types/node': '*' + '@types/offscreencanvas': 2019.6.4 + '@visactor/vchart': workspace:1.10.1 + '@visactor/vgrammar-core': 0.12.4 + '@visactor/vrender-core': 0.18.5 + '@visactor/vrender-kits': 0.18.5 + '@visactor/vutils': ~0.18.1 + '@vitejs/plugin-react': 3.1.0 + eslint: ~8.18.0 + eslint-config-prettier: 8.5.0 + eslint-plugin-import: ^2.27.5 + eslint-plugin-jsx-a11y: ^6.7.1 + eslint-plugin-prettier: ^4.2.1 + eslint-plugin-react: 7.30.1 + jest: ^26.0.0 + openinula: '>=0.1.2-SNAPSHOT' + react-is: ^18.2.0 + rollup: 3.20.5 + ts-jest: ^26.0.0 + tslib: 2.3.1 + typescript: 4.9.5 + vite: 3.2.6 + dependencies: + '@visactor/vchart': link:../vchart + '@visactor/vgrammar-core': 0.12.4 + '@visactor/vrender-core': 0.18.5 + '@visactor/vrender-kits': 0.18.5 + '@visactor/vutils': 0.18.1 + react-is: 18.2.0 + devDependencies: + '@internal/bundler': link:../../tools/bundler + '@internal/eslint-config': link:../../share/eslint-config + '@internal/ts-config': link:../../share/ts-config + '@rollup/plugin-typescript': 11.1.0_3riap2emcx3rezd3j6fqob2ipq + '@rushstack/eslint-patch': 1.1.4 + '@types/jest': 26.0.24 + '@types/node': 20.11.30 + '@types/offscreencanvas': 2019.6.4 + '@vitejs/plugin-react': 3.1.0_vite@3.2.6 + eslint: 8.18.0 + eslint-config-prettier: 8.5.0_eslint@8.18.0 + eslint-plugin-import: 2.29.1_eslint@8.18.0 + eslint-plugin-jsx-a11y: 6.8.0_eslint@8.18.0 + eslint-plugin-prettier: 4.2.1_ohknqdiadpdc4n44qqsbqlxxwa + eslint-plugin-react: 7.30.1_eslint@8.18.0 + jest: 26.6.3 + openinula: 0.1.2-SNAPSHOT + rollup: 3.20.5 + ts-jest: 26.5.6_xuote2qreek47x2di7kesslrai + tslib: 2.3.1 + typescript: 4.9.5 + vite: 3.2.6_@types+node@20.11.30 + ../../packages/react-vchart: specifiers: '@internal/bundler': workspace:* @@ -162,10 +223,10 @@ importers: '@rollup/plugin-typescript': 11.1.0_3riap2emcx3rezd3j6fqob2ipq '@rushstack/eslint-patch': 1.1.4 '@types/jest': 26.0.24 - '@types/node': 20.11.25 + '@types/node': 20.11.30 '@types/offscreencanvas': 2019.6.4 - '@types/react': 18.2.64 - '@types/react-dom': 18.2.21 + '@types/react': 18.2.67 + '@types/react-dom': 18.2.22 '@types/react-is': 17.0.7 '@vitejs/plugin-react': 3.1.0_vite@3.2.6 eslint: 8.18.0 @@ -181,7 +242,7 @@ importers: ts-jest: 26.5.6_xuote2qreek47x2di7kesslrai tslib: 2.3.1 typescript: 4.9.5 - vite: 3.2.6_@types+node@20.11.25 + vite: 3.2.6_@types+node@20.11.30 ../../packages/taro-vchart: specifiers: @@ -249,7 +310,7 @@ importers: '@tarojs/runtime': 3.3.17 '@tarojs/taro': 3.3.17 '@tarojs/webpack-runner': 3.3.17 - '@types/react': 18.2.64 + '@types/react': 18.2.67 '@types/webpack-env': 1.18.4 '@typescript-eslint/eslint-plugin': 5.30.0_cow5zg7tx6c3eisi5a4ud5kwia '@typescript-eslint/parser': 5.30.0_vwud3sodsb5zxmzckoj7rdwdbq @@ -356,7 +417,7 @@ importers: '@rushstack/eslint-patch': 1.1.4 '@size-limit/file': 9.0.0_size-limit@9.0.0 '@types/jest': 26.0.24 - '@types/node': 20.11.25 + '@types/node': 20.11.30 '@types/offscreencanvas': 2019.6.4 canvas: 2.11.2 d3-array: 1.2.4 @@ -384,11 +445,11 @@ importers: size-limit: 9.0.0 ts-jest: 26.5.6_xuote2qreek47x2di7kesslrai ts-loader: 8.0.2_typescript@4.9.5 - ts-node: 10.9.0_tdjpgkcfglun4nq6ehgeprtpni + ts-node: 10.9.0_aldj6v7e223tfnp6svpe7ijn3i tslib: 2.3.1 tslint: 5.12.1_typescript@4.9.5 typescript: 4.9.5 - vite: 3.2.6_@types+node@20.11.25 + vite: 3.2.6_@types+node@20.11.30 ../../packages/vchart-schema: specifiers: @@ -467,7 +528,7 @@ importers: '@internal/ts-config': link:../../share/ts-config '@rushstack/eslint-patch': 1.1.4 '@types/jest': 26.0.24 - '@types/node': 20.11.25 + '@types/node': 20.11.30 '@types/offscreencanvas': 2019.6.4 eslint: 8.18.0 husky: 7.0.4 @@ -479,11 +540,11 @@ importers: react-device-detect: 2.2.3 ts-jest: 26.5.6_xuote2qreek47x2di7kesslrai ts-loader: 8.0.2_typescript@4.9.5 - ts-node: 10.9.0_tdjpgkcfglun4nq6ehgeprtpni + ts-node: 10.9.0_aldj6v7e223tfnp6svpe7ijn3i tslib: 2.3.1 tslint: 5.12.1_typescript@4.9.5 typescript: 4.9.5 - vite: 3.2.6_@types+node@20.11.25 + vite: 3.2.6_@types+node@20.11.30 ../../packages/wx-vchart: specifiers: @@ -681,7 +742,7 @@ importers: '@types/merge2': 1.4.0 '@types/minimist': 1.2.2 '@types/ms': 0.7.31 - '@types/node': 20.11.25 + '@types/node': 20.11.30 '@types/semver': 7.3.12 '@types/terser': 3.12.0 '@types/through2': 2.0.38 @@ -690,7 +751,7 @@ importers: '@types/yargs-parser': 21.0.0 eslint: 8.18.0 rimraf: 3.0.2 - ts-node: 10.9.0_tdjpgkcfglun4nq6ehgeprtpni + ts-node: 10.9.0_aldj6v7e223tfnp6svpe7ijn3i typescript: 4.9.5 vitest: 0.30.1_less@4.1.3+terser@5.17.1 @@ -730,7 +791,7 @@ importers: '@internal/ts-config': link:../../share/ts-config '@rushstack/eslint-patch': 1.1.4 '@types/jest': 26.0.24 - '@types/node': 20.11.25 + '@types/node': 20.11.30 '@typescript-eslint/eslint-plugin': 5.30.0_cow5zg7tx6c3eisi5a4ud5kwia '@typescript-eslint/parser': 5.30.0_vwud3sodsb5zxmzckoj7rdwdbq cross-env: 7.0.3 @@ -738,10 +799,10 @@ importers: jest: 26.6.3_ts-node@10.9.0 prettier: 2.6.1 ts-jest: 26.5.6_xuote2qreek47x2di7kesslrai - ts-node: 10.9.0_tdjpgkcfglun4nq6ehgeprtpni + ts-node: 10.9.0_aldj6v7e223tfnp6svpe7ijn3i tslint-config-prettier: 1.18.0 typescript: 4.9.5 - vite: 3.2.6_@types+node@20.11.25 + vite: 3.2.6_@types+node@20.11.30 ../../tools/typescript-json-schema: specifiers: @@ -764,15 +825,15 @@ importers: yargs: ^17.1.1 dependencies: '@types/json-schema': 7.0.15 - '@types/node': 20.11.25 + '@types/node': 20.11.30 glob: 7.2.3 path-equal: 1.2.5 safe-stable-stringify: 2.4.3 - ts-node: 10.9.0_tdjpgkcfglun4nq6ehgeprtpni + ts-node: 10.9.0_aldj6v7e223tfnp6svpe7ijn3i typescript: 4.9.5 yargs: 17.7.2 devDependencies: - '@types/chai': 4.3.12 + '@types/chai': 4.3.13 '@types/glob': 7.2.0 '@types/mocha': 9.1.1 ajv: 8.12.0 @@ -801,7 +862,7 @@ packages: color: 3.2.1 dev: false - /@arco-design/web-react/2.46.1_sa4xzwsa7zx3f3ottdvkii7pwu: + /@arco-design/web-react/2.46.1_zvnqmnfwsl5op5apqvyrtfutqa: resolution: {integrity: sha512-XjG44rODJklDu++OApvxjt/TbRrgkNqVq6grt/H+9skysm46jFn2SwhuSljBHmjo11LtIeB1m/OMPMaFtafeYg==} peerDependencies: react: '>=16' @@ -817,7 +878,7 @@ packages: number-precision: 1.6.0 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - react-focus-lock: 2.11.2_uo4fmizy6e3vavmbwiahqshsb4 + react-focus-lock: 2.11.2_plwvpmfwkh5xonezcq2rvxtefq react-transition-group: 4.4.5_biqbaboplfbrettd7655fr4n2y resize-observer-polyfill: 1.5.1 scroll-into-view-if-needed: 2.2.20 @@ -832,15 +893,15 @@ packages: '@babel/highlight': 7.0.0-beta.44 dev: true - /@babel/code-frame/7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + /@babel/code-frame/7.24.2: + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 + '@babel/highlight': 7.24.2 + picocolors: 1.0.0 - /@babel/compat-data/7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + /@babel/compat-data/7.24.1: + resolution: {integrity: sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==} engines: {node: '>=6.9.0'} /@babel/core/7.20.12: @@ -848,14 +909,14 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 '@babel/generator': 7.21.1 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-module-transforms': 7.23.3_@babel+core@7.20.12 - '@babel/helpers': 7.24.0 - '@babel/parser': 7.24.0 + '@babel/helpers': 7.24.1 + '@babel/parser': 7.24.1 '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 convert-source-map: 1.9.0 debug: 4.3.4 @@ -884,8 +945,8 @@ packages: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - /@babel/generator/7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + /@babel/generator/7.24.1: + resolution: {integrity: sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 @@ -909,14 +970,14 @@ packages: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.23.5 + '@babel/compat-data': 7.24.1 '@babel/helper-validator-option': 7.23.5 browserslist: 4.23.0 lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-create-class-features-plugin/7.24.0_@babel+core@7.20.12: - resolution: {integrity: sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==} + /@babel/helper-create-class-features-plugin/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -927,7 +988,7 @@ packages: '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20_@babel+core@7.20.12 + '@babel/helper-replace-supers': 7.24.1_@babel+core@7.20.12 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 @@ -1000,6 +1061,13 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 + dev: true + + /@babel/helper-module-imports/7.24.3: + resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 /@babel/helper-module-transforms/7.23.3_@babel+core@7.20.12: resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} @@ -1009,7 +1077,7 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.3 '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 @@ -1035,8 +1103,8 @@ packages: '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 - /@babel/helper-replace-supers/7.22.20_@babel+core@7.20.12: - resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + /@babel/helper-replace-supers/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -1070,8 +1138,8 @@ packages: dependencies: '@babel/types': 7.24.0 - /@babel/helper-string-parser/7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + /@babel/helper-string-parser/7.24.1: + resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} /@babel/helper-validator-identifier/7.22.20: @@ -1090,12 +1158,12 @@ packages: '@babel/template': 7.24.0 '@babel/types': 7.24.0 - /@babel/helpers/7.24.0: - resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} + /@babel/helpers/7.24.1: + resolution: {integrity: sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color @@ -1108,21 +1176,22 @@ packages: js-tokens: 3.0.2 dev: true - /@babel/highlight/7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + /@babel/highlight/7.24.2: + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.0.0 - /@babel/parser/7.24.0: - resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} + /@babel/parser/7.24.1: + resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} engines: {node: '>=6.0.0'} hasBin: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -1130,8 +1199,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 @@ -1139,7 +1208,7 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.4_@babel+core@7.20.12 + '@babel/plugin-transform-optional-chaining': 7.24.1_@babel+core@7.20.12 /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.20.12: resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} @@ -1161,7 +1230,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.24.0_@babel+core@7.20.12 + '@babel/helper-create-class-features-plugin': 7.24.1_@babel+core@7.20.12 '@babel/helper-plugin-utils': 7.24.0 dev: true @@ -1173,7 +1242,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.24.0_@babel+core@7.20.12 + '@babel/helper-create-class-features-plugin': 7.24.1_@babel+core@7.20.12 '@babel/helper-plugin-utils': 7.24.0 /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.20.12: @@ -1184,7 +1253,7 @@ packages: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.24.0_@babel+core@7.20.12 + '@babel/helper-create-class-features-plugin': 7.24.1_@babel+core@7.20.12 '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12 @@ -1194,9 +1263,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.24.0_@babel+core@7.20.12 + '@babel/helper-create-class-features-plugin': 7.24.1_@babel+core@7.20.12 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-decorators': 7.24.0_@babel+core@7.20.12 + '@babel/plugin-syntax-decorators': 7.24.1_@babel+core@7.20.12 dev: true /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.20.12: @@ -1218,7 +1287,7 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-export-default-from': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-syntax-export-default-from': 7.24.1_@babel+core@7.20.12 /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.20.12: resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} @@ -1282,12 +1351,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.23.5 + '@babel/compat-data': 7.24.1 '@babel/core': 7.20.12 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-transform-parameters': 7.24.1_@babel+core@7.20.12 dev: true /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.20.12: @@ -1297,12 +1366,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.23.5 + '@babel/compat-data': 7.24.1 '@babel/core': 7.20.12 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-transform-parameters': 7.24.1_@babel+core@7.20.12 /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.20.12: resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} @@ -1335,7 +1404,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.24.0_@babel+core@7.20.12 + '@babel/helper-create-class-features-plugin': 7.24.1_@babel+core@7.20.12 '@babel/helper-plugin-utils': 7.24.0 /@babel/plugin-proposal-private-property-in-object/7.21.11_@babel+core@7.20.12: @@ -1347,7 +1416,7 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.0_@babel+core@7.20.12 + '@babel/helper-create-class-features-plugin': 7.24.1_@babel+core@7.20.12 '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12 @@ -1396,8 +1465,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-decorators/7.24.0_@babel+core@7.20.12: - resolution: {integrity: sha512-MXW3pQCu9gUiVGzqkGqsgiINDVYXoAnrY8FYF/rmb+OfufNF0zHMpHPN4ulRrinxYT8Vk/aZJxYqOKsDECjKAw==} + /@babel/plugin-syntax-decorators/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1414,8 +1483,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-export-default-from/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-KeENO5ck1IeZ/l2lFZNy+mpobV3D2Zy5C1YFnWm+YuY5mQiAWc4yAp13dqgguwsBsFVLh4LPCEqCa5qW13N+hw==} + /@babel/plugin-syntax-export-default-from/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-cNXSxv9eTkGUtd0PsNMK8Yx5xeScxfpWOUAxE+ZPAXXEcAMOC3fk7LRdXq5fvpra2pLx2p1YtkAhpUbB2SwaRA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1431,8 +1500,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-flow/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} + /@babel/plugin-syntax-flow/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1441,8 +1510,8 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-import-assertions/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} + /@babel/plugin-syntax-import-assertions/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1467,8 +1536,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-jsx/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + /@babel/plugin-syntax-jsx/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1542,8 +1611,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-typescript/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + /@babel/plugin-syntax-typescript/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1551,8 +1620,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-arrow-functions/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} + /@babel/plugin-transform-arrow-functions/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1560,19 +1629,19 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-async-to-generator/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} + /@babel/plugin-transform-async-to-generator/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-remap-async-to-generator': 7.22.20_@babel+core@7.20.12 - /@babel/plugin-transform-block-scoped-functions/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} + /@babel/plugin-transform-block-scoped-functions/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1580,8 +1649,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-block-scoping/7.23.4_@babel+core@7.20.12: - resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} + /@babel/plugin-transform-block-scoping/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1589,8 +1658,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-classes/7.23.8_@babel+core@7.20.12: - resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} + /@babel/plugin-transform-classes/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1601,12 +1670,12 @@ packages: '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.22.20_@babel+core@7.20.12 + '@babel/helper-replace-supers': 7.24.1_@babel+core@7.20.12 '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 - /@babel/plugin-transform-computed-properties/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} + /@babel/plugin-transform-computed-properties/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1615,8 +1684,8 @@ packages: '@babel/helper-plugin-utils': 7.24.0 '@babel/template': 7.24.0 - /@babel/plugin-transform-destructuring/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + /@babel/plugin-transform-destructuring/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1624,8 +1693,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-dotall-regex/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} + /@babel/plugin-transform-dotall-regex/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1634,8 +1703,8 @@ packages: '@babel/helper-create-regexp-features-plugin': 7.22.15_@babel+core@7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-duplicate-keys/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} + /@babel/plugin-transform-duplicate-keys/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1643,8 +1712,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-exponentiation-operator/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} + /@babel/plugin-transform-exponentiation-operator/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1653,19 +1722,19 @@ packages: '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-flow-strip-types/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} + /@babel/plugin-transform-flow-strip-types/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-flow': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-syntax-flow': 7.24.1_@babel+core@7.20.12 dev: true - /@babel/plugin-transform-for-of/7.23.6_@babel+core@7.20.12: - resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} + /@babel/plugin-transform-for-of/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1674,8 +1743,8 @@ packages: '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - /@babel/plugin-transform-function-name/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} + /@babel/plugin-transform-function-name/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1685,8 +1754,8 @@ packages: '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-literals/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} + /@babel/plugin-transform-literals/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1694,8 +1763,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-member-expression-literals/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} + /@babel/plugin-transform-member-expression-literals/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1703,8 +1772,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-modules-amd/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} + /@babel/plugin-transform-modules-amd/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1713,8 +1782,8 @@ packages: '@babel/helper-module-transforms': 7.23.3_@babel+core@7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-modules-commonjs/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + /@babel/plugin-transform-modules-commonjs/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1724,8 +1793,8 @@ packages: '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-simple-access': 7.22.5 - /@babel/plugin-transform-modules-systemjs/7.23.9_@babel+core@7.20.12: - resolution: {integrity: sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==} + /@babel/plugin-transform-modules-systemjs/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1736,8 +1805,8 @@ packages: '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-identifier': 7.22.20 - /@babel/plugin-transform-modules-umd/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} + /@babel/plugin-transform-modules-umd/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1756,8 +1825,8 @@ packages: '@babel/helper-create-regexp-features-plugin': 7.22.15_@babel+core@7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-new-target/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} + /@babel/plugin-transform-new-target/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1765,8 +1834,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-object-assign/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-TPJ6O7gVC2rlQH2hvQGRH273G1xdoloCj9Pc07Q7JbIZYDi+Sv5gaE2fu+r5E7qK4zyt6vj0FbZaZTRU5C3OMA==} + /@babel/plugin-transform-object-assign/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-I1kctor9iKtupb7jv7FyjApHCuKLBKCblVAeHVK9PB6FW7GI0ac6RtobC3MwwJy8CZ1JxuhQmnbrsqI5G8hAIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1775,18 +1844,18 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-object-super/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + /@babel/plugin-transform-object-super/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.22.20_@babel+core@7.20.12 + '@babel/helper-replace-supers': 7.24.1_@babel+core@7.20.12 - /@babel/plugin-transform-optional-chaining/7.23.4_@babel+core@7.20.12: - resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} + /@babel/plugin-transform-optional-chaining/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1796,8 +1865,8 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 - /@babel/plugin-transform-parameters/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + /@babel/plugin-transform-parameters/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1805,8 +1874,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-property-literals/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + /@babel/plugin-transform-property-literals/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1814,8 +1883,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-react-display-name/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} + /@babel/plugin-transform-react-display-name/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1832,8 +1901,8 @@ packages: '@babel/core': 7.20.12 '@babel/plugin-transform-react-jsx': 7.23.4_@babel+core@7.20.12 - /@babel/plugin-transform-react-jsx-self/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} + /@babel/plugin-transform-react-jsx-self/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1842,8 +1911,8 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-react-jsx-source/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} + /@babel/plugin-transform-react-jsx-source/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1860,13 +1929,13 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-jsx': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-syntax-jsx': 7.24.1_@babel+core@7.20.12 '@babel/types': 7.24.0 - /@babel/plugin-transform-react-pure-annotations/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==} + /@babel/plugin-transform-react-pure-annotations/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1875,8 +1944,8 @@ packages: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-regenerator/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} + /@babel/plugin-transform-regenerator/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1885,8 +1954,8 @@ packages: '@babel/helper-plugin-utils': 7.24.0 regenerator-transform: 0.15.2 - /@babel/plugin-transform-reserved-words/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} + /@babel/plugin-transform-reserved-words/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1900,14 +1969,14 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 resolve: 1.22.8 semver: 5.7.2 dev: true - /@babel/plugin-transform-shorthand-properties/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} + /@babel/plugin-transform-shorthand-properties/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1915,8 +1984,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-spread/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} + /@babel/plugin-transform-spread/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1925,8 +1994,8 @@ packages: '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - /@babel/plugin-transform-sticky-regex/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} + /@babel/plugin-transform-sticky-regex/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1934,8 +2003,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-template-literals/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} + /@babel/plugin-transform-template-literals/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1943,8 +2012,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-typeof-symbol/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} + /@babel/plugin-transform-typeof-symbol/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1952,20 +2021,20 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-typescript/7.23.6_@babel+core@7.20.12: - resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} + /@babel/plugin-transform-typescript/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-liYSESjX2fZ7JyBFkYG78nfvHlMKE6IpNdTVnxmlYUR+j5ZLsitFbaAE+eJSK2zPPkNWNw4mXL51rQ8WrvdK0w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.0_@babel+core@7.20.12 + '@babel/helper-create-class-features-plugin': 7.24.1_@babel+core@7.20.12 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-typescript': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-syntax-typescript': 7.24.1_@babel+core@7.20.12 - /@babel/plugin-transform-unicode-escapes/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} + /@babel/plugin-transform-unicode-escapes/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1973,8 +2042,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-unicode-regex/7.23.3_@babel+core@7.20.12: - resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} + /@babel/plugin-transform-unicode-regex/7.24.1_@babel+core@7.20.12: + resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1989,13 +2058,13 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.23.5 + '@babel/compat-data': 7.24.1 '@babel/core': 7.20.12 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1_@babel+core@7.20.12 '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.20.12 '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12 '@babel/plugin-proposal-class-static-block': 7.21.0_@babel+core@7.20.12 @@ -2016,7 +2085,7 @@ packages: '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12 '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-import-assertions': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-syntax-import-assertions': 7.24.1_@babel+core@7.20.12 '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 @@ -2026,44 +2095,44 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12 '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12 - '@babel/plugin-transform-arrow-functions': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-async-to-generator': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoped-functions': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoping': 7.23.4_@babel+core@7.20.12 - '@babel/plugin-transform-classes': 7.23.8_@babel+core@7.20.12 - '@babel/plugin-transform-computed-properties': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-destructuring': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-dotall-regex': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-duplicate-keys': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-exponentiation-operator': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-for-of': 7.23.6_@babel+core@7.20.12 - '@babel/plugin-transform-function-name': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-literals': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-member-expression-literals': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-modules-amd': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-modules-commonjs': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-modules-systemjs': 7.23.9_@babel+core@7.20.12 - '@babel/plugin-transform-modules-umd': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-transform-arrow-functions': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-async-to-generator': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-block-scoped-functions': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-block-scoping': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-classes': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-computed-properties': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-destructuring': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-dotall-regex': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-duplicate-keys': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-exponentiation-operator': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-for-of': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-function-name': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-literals': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-member-expression-literals': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-modules-amd': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-modules-commonjs': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-modules-systemjs': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-modules-umd': 7.24.1_@babel+core@7.20.12 '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5_@babel+core@7.20.12 - '@babel/plugin-transform-new-target': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-object-super': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-property-literals': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-regenerator': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-reserved-words': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-shorthand-properties': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-spread': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-sticky-regex': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-template-literals': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-typeof-symbol': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-unicode-escapes': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-unicode-regex': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-transform-new-target': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-object-super': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-parameters': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-property-literals': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-regenerator': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-reserved-words': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-shorthand-properties': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-spread': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-sticky-regex': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-template-literals': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-typeof-symbol': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-unicode-escapes': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-unicode-regex': 7.24.1_@babel+core@7.20.12 '@babel/preset-modules': 0.1.6_@babel+core@7.20.12 '@babel/types': 7.24.0 babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.12 babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.12 babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.12 - core-js-compat: 3.36.0 + core-js-compat: 3.36.1 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -2076,7 +2145,7 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-dotall-regex': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-transform-dotall-regex': 7.24.1_@babel+core@7.20.12 '@babel/types': 7.24.0 esutils: 2.0.3 @@ -2087,10 +2156,10 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-react-display-name': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-transform-react-display-name': 7.24.1_@babel+core@7.20.12 '@babel/plugin-transform-react-jsx': 7.23.4_@babel+core@7.20.12 '@babel/plugin-transform-react-jsx-development': 7.22.5_@babel+core@7.20.12 - '@babel/plugin-transform-react-pure-annotations': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-transform-react-pure-annotations': 7.24.1_@babel+core@7.20.12 dev: true /@babel/preset-react/7.18.6_@babel+core@7.20.12: @@ -2102,10 +2171,10 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-react-display-name': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-transform-react-display-name': 7.24.1_@babel+core@7.20.12 '@babel/plugin-transform-react-jsx': 7.23.4_@babel+core@7.20.12 '@babel/plugin-transform-react-jsx-development': 7.22.5_@babel+core@7.20.12 - '@babel/plugin-transform-react-pure-annotations': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-transform-react-pure-annotations': 7.24.1_@babel+core@7.20.12 dev: false /@babel/preset-typescript/7.12.17_@babel+core@7.20.12: @@ -2116,7 +2185,7 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-typescript': 7.23.6_@babel+core@7.20.12 + '@babel/plugin-transform-typescript': 7.24.1_@babel+core@7.20.12 dev: true /@babel/preset-typescript/7.18.6_@babel+core@7.20.12: @@ -2128,7 +2197,7 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-typescript': 7.23.6_@babel+core@7.20.12 + '@babel/plugin-transform-typescript': 7.24.1_@babel+core@7.20.12 dev: false /@babel/register/7.14.5_@babel+core@7.20.12: @@ -2148,11 +2217,11 @@ packages: /@babel/regjsgen/0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - /@babel/runtime-corejs3/7.24.0: - resolution: {integrity: sha512-HxiRMOncx3ly6f3fcZ1GVKf+/EROcI9qwPgmij8Czqy6Okm/0T37T4y2ZIlLUuEUFjtM7NRsfdCO8Y3tAiJZew==} + /@babel/runtime-corejs3/7.24.1: + resolution: {integrity: sha512-T9ko/35G+Bkl+win48GduaPlhSlOjjE5s1TeiEcD+QpxlLQnoEfb/nO/T+TQqkm+ipFwORn+rB8w14iJ/uD0bg==} engines: {node: '>=6.9.0'} dependencies: - core-js-pure: 3.36.0 + core-js-pure: 3.36.1 regenerator-runtime: 0.14.1 dev: true @@ -2162,8 +2231,8 @@ packages: dependencies: regenerator-runtime: 0.13.11 - /@babel/runtime/7.24.0: - resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} + /@babel/runtime/7.24.1: + resolution: {integrity: sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 @@ -2182,8 +2251,8 @@ packages: resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.24.0 + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.1 '@babel/types': 7.24.0 /@babel/traverse/7.0.0-beta.44: @@ -2201,17 +2270,17 @@ packages: lodash: 4.17.21 dev: true - /@babel/traverse/7.24.0: - resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} + /@babel/traverse/7.24.1: + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.1 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.1 '@babel/types': 7.24.0 debug: 4.3.4 globals: 11.12.0 @@ -2230,7 +2299,7 @@ packages: resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.23.4 + '@babel/helper-string-parser': 7.24.1 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 @@ -2446,7 +2515,7 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 chalk: 4.1.2 jest-message-util: 26.6.2 jest-util: 26.6.2 @@ -2462,7 +2531,7 @@ packages: '@jest/test-result': 26.6.2 '@jest/transform': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 ansi-escapes: 4.3.2 chalk: 4.1.2 exit: 0.1.2 @@ -2502,7 +2571,7 @@ packages: '@jest/test-result': 26.6.2 '@jest/transform': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 ansi-escapes: 4.3.2 chalk: 4.1.2 exit: 0.1.2 @@ -2542,7 +2611,7 @@ packages: '@jest/test-result': 26.6.2 '@jest/transform': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 ansi-escapes: 4.3.2 chalk: 4.1.2 exit: 0.1.2 @@ -2591,7 +2660,7 @@ packages: dependencies: '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 jest-mock: 26.6.2 dev: true @@ -2610,7 +2679,7 @@ packages: dependencies: '@jest/types': 26.6.2 '@sinonjs/fake-timers': 6.0.1 - '@types/node': 20.11.25 + '@types/node': 20.11.30 jest-message-util: 26.6.2 jest-mock: 26.6.2 jest-util: 26.6.2 @@ -2821,7 +2890,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.25 + '@types/node': 20.11.30 '@types/yargs': 15.0.19 chalk: 4.1.2 dev: true @@ -2842,8 +2911,8 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - /@jridgewell/source-map/0.3.5: - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + /@jridgewell/source-map/0.3.6: + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} dependencies: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 @@ -2867,14 +2936,14 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true dependencies: - detect-libc: 2.0.2 + detect-libc: 2.0.3 https-proxy-agent: 5.0.1 make-dir: 3.1.0 node-fetch: 2.6.7 nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 - semver: 7.5.4 + semver: 7.6.0 tar: 6.2.0 transitivePeerDependencies: - encoding @@ -2916,7 +2985,7 @@ packages: resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} dependencies: '@gar/promisify': 1.1.3 - semver: 7.5.4 + semver: 7.6.0 dev: true /@npmcli/move-file/1.1.2: @@ -3123,7 +3192,7 @@ packages: optional: true dependencies: '@babel/core': 7.20.12 - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.3 '@rollup/pluginutils': 5.1.0_rollup@3.20.5 '@types/babel__core': 7.20.0 rollup: 3.20.5 @@ -3143,7 +3212,7 @@ packages: optional: true dependencies: '@babel/core': 7.20.12 - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.3 '@rollup/pluginutils': 5.1.0_rollup@3.20.5 rollup: 3.20.5 dev: true @@ -3759,7 +3828,7 @@ packages: /@tarojs/taroize/3.3.17: resolution: {integrity: sha512-h2wZ5ztwuK7mLEWs8GZdyWGNa/vOff6QFhO/7alcBzdARH2A5HJ1QQ8ZSvDmCsa6EM46tAjkDNi6pZ6lTBR7FA==} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 babel-core: 6.26.3 babel-generator: 6.26.1 babel-template: 6.26.0 @@ -3775,7 +3844,7 @@ packages: /@tarojs/transformer-wx/2.2.22: resolution: {integrity: sha512-JZxD8vWLQfoydKR6uJMlo6dw5Rp5jCJeR6Gh4aerBqakCjAtfrAPV5g1XAIHeLVHJwvCtaP8bYXlJYIPChwJHg==} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 babel-core: 6.26.3 babel-eslint: 8.2.6 babel-helper-evaluate-path: 0.5.0 @@ -3943,7 +4012,7 @@ packages: /@types/babel__core/7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.1 '@babel/types': 7.24.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 @@ -3957,7 +4026,7 @@ packages: /@types/babel__template/7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.1 '@babel/types': 7.24.0 /@types/babel__traverse/7.20.5: @@ -3972,17 +4041,17 @@ packages: /@types/chai-subset/1.3.5: resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==} dependencies: - '@types/chai': 4.3.12 + '@types/chai': 4.3.13 dev: true - /@types/chai/4.3.12: - resolution: {integrity: sha512-zNKDHG/1yxm8Il6uCCVsm+dRdEsJlFoDu73X17y09bId6UwoYww+vFBsAcRzl8knM1sab3Dp1VRikFQwDOtDDw==} + /@types/chai/4.3.13: + resolution: {integrity: sha512-+LxQEbg4BDUf88utmhpUpTyYn1zHao443aGnXIAQak9ZMt9Rtsic0Oig0OS1xyIqdDXc5uMekoC6NaiUlkT/qA==} dev: true /@types/clean-css/4.2.6: resolution: {integrity: sha512-Ze1tf+LnGPmG6hBFMi0B4TEB0mhF7EiMM5oyjLDNPE9hxrPU0W+5+bHvO+eFPA+bt0iC1zkQMoU/iGdRVjcRbw==} dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 source-map: 0.6.1 dev: true @@ -4001,19 +4070,19 @@ packages: /@types/fs-extra/8.1.5: resolution: {integrity: sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==} dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 dev: true /@types/fs-extra/9.0.13: resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 dev: true /@types/glob-stream/8.0.2: resolution: {integrity: sha512-kyuRfGE+yiSJWzSO3t74rXxdZNdYfLcllO0IUha4eX1fl40pm9L02Q/TEc3mykTLjoWz4STBNwYnUWdFu3I0DA==} dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 '@types/picomatch': 2.3.3 '@types/streamx': 2.9.5 dev: true @@ -4021,26 +4090,26 @@ packages: /@types/glob-watcher/5.0.2: resolution: {integrity: sha512-MZeh2nIzibl/euv5UV0femkGzcKTSE4G2+zv48d6ymeitWwCx52+4X+FqzML9oH2mQnPs+N/JHp3CsBPj1x1Ug==} dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 dev: true /@types/glob/7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 dev: true /@types/graceful-fs/4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 dev: true /@types/gulp-if/0.0.34: resolution: {integrity: sha512-r2A04hHDC+ZWMRAm+3q6/UeC3ggvl+TZm9P1+2umnp4q9bOlBmUQnR178Io3c0DkZPQAwup8VNtOvmvaWCpP5w==} dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 '@types/vinyl': 2.0.7 dev: true @@ -4054,7 +4123,7 @@ packages: /@types/gulp-sourcemaps/0.0.35: resolution: {integrity: sha512-vUBuizwA4CAV3Mke0DJYHQxyN4YOB1aAql284qAO7Et7fe0hmnPi/R9Fhu2UhxMuSxAwFktsJUOQk5dJHOU1eA==} dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 '@types/vinyl': 2.0.7 dev: true @@ -4145,7 +4214,7 @@ packages: /@types/merge2/1.4.0: resolution: {integrity: sha512-MRHDvln2ldZELrUC8n1PGaQzZ33aNh8uDcsGehREW0zR1Fr818a4/JTZjO9eloHPPxnpUp8fz/YFTRc5CWm7Xw==} dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 dev: true /@types/minimatch/3.0.5: @@ -4180,8 +4249,8 @@ packages: resolution: {integrity: sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==} dev: true - /@types/node/20.11.25: - resolution: {integrity: sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==} + /@types/node/20.11.30: + resolution: {integrity: sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==} dependencies: undici-types: 5.26.5 @@ -4208,28 +4277,28 @@ packages: /@types/prop-types/15.7.11: resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} - /@types/react-dom/18.2.21: - resolution: {integrity: sha512-gnvBA/21SA4xxqNXEwNiVcP0xSGHh/gi1VhWv9Bl46a0ItbTT5nFY+G9VSQpaG/8N/qdJpJ+vftQ4zflTtnjLw==} + /@types/react-dom/18.2.22: + resolution: {integrity: sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==} dependencies: - '@types/react': 18.2.64 + '@types/react': 18.2.67 dev: true /@types/react-is/17.0.7: resolution: {integrity: sha512-WrTEiT+c6rgq36QApoy0063uAOdltCrhF0QMXLIgYPaTvIdQhAB8hPb5oGGqX18xToElNILS9UprwU6GyINcJg==} dependencies: - '@types/react': 17.0.76 + '@types/react': 17.0.79 dev: true - /@types/react/17.0.76: - resolution: {integrity: sha512-w9Aq+qeszGYoQM0hgFcdsAODGJdogadBDiitPm+zjBFJ0mLymvn2qSXsDaLJUndFRqqXk1FQfa9avHUBk1JhJQ==} + /@types/react/17.0.79: + resolution: {integrity: sha512-gavKA8AwJAML9zWHuiQRASjrrPJHbT/zrUDHiUGUf+l5a3pkEd6atvjjq+8y2vfRHBJLQJjFpxSa9I8qe9zHAw==} dependencies: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.8 csstype: 3.1.3 dev: true - /@types/react/18.2.64: - resolution: {integrity: sha512-MlmPvHgjj2p3vZaxbQgFUQFvD8QiZwACfGqEdDSWou5yISWxDQ4/74nCAwsUiX7UFLKZz3BbVSPj+YxeoGGCfg==} + /@types/react/18.2.67: + resolution: {integrity: sha512-vkIE2vTIMHQ/xL0rgmuoECBCkZFZeHr49HeWSc24AptMbNRo7pwSBvj73rlJJs9fGKj0koS+V7kQB1jHS0uCgw==} dependencies: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.8 @@ -4239,7 +4308,7 @@ packages: resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} dependencies: '@types/caseless': 0.12.5 - '@types/node': 20.11.25 + '@types/node': 20.11.30 '@types/tough-cookie': 4.0.5 form-data: 2.5.1 dev: true @@ -4272,7 +4341,7 @@ packages: /@types/streamx/2.9.5: resolution: {integrity: sha512-IHYsa6jYrck8VEdSwpY141FTTf6D7boPeMq9jy4qazNrFMA4VbRz/sw5LSsfR7jwdDcx0QKWkUexZvsWBC2eIQ==} dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 dev: true /@types/terser/3.12.0: @@ -4285,7 +4354,7 @@ packages: /@types/through2/2.0.38: resolution: {integrity: sha512-YFu+nHmjxMurkH1BSzA0Z1WrKDAY8jUKPZctNQn7mc+/KKtp2XxnclHFXxdB1m7Iqnzb5aywgP8TMK283LezGQ==} dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 dev: true /@types/tough-cookie/4.0.5: @@ -4299,7 +4368,7 @@ packages: /@types/undertaker/1.2.8: resolution: {integrity: sha512-gW3PRqCHYpo45XFQHJBhch7L6hytPsIe0QeLujlnFsjHPnXLhJcPdN6a9368d7aIQgH2I/dUTPFBlGeSNA3qOg==} dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 '@types/undertaker-registry': 1.0.4 async-done: 1.3.2 dev: true @@ -4312,7 +4381,7 @@ packages: resolution: {integrity: sha512-ckYz9giHgV6U10RFuf9WsDQ3X86EFougapxHmmoxLK7e6ICQqO8CE+4V/3lBN148V5N1pb4nQMmMjyScleVsig==} dependencies: '@types/glob-stream': 8.0.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 '@types/vinyl': 2.0.7 dev: true @@ -4320,7 +4389,7 @@ packages: resolution: {integrity: sha512-4UqPv+2567NhMQuMLdKAyK4yzrfCqwaTt6bLhHEs8PFcxbHILsrxaY63n4wgE/BRLDWDQeI+WcTmkXKExh9hQg==} dependencies: '@types/expect': 1.20.4 - '@types/node': 20.11.25 + '@types/node': 20.11.30 /@types/webpack-env/1.18.4: resolution: {integrity: sha512-I6e+9+HtWADAWeeJWDFQtdk4EVSAbj6Rtz4q8fJ7mSr1M0jzlFcs8/HZ+Xb5SHzVm1dxH7aUiI+A8kA8Gcrm0A==} @@ -4362,7 +4431,7 @@ packages: functional-red-black-tree: 1.0.1 ignore: 5.3.1 regexpp: 3.2.0 - semver: 7.5.4 + semver: 7.6.0 tsutils: 3.21.0_typescript@4.9.5 typescript: 4.9.5 transitivePeerDependencies: @@ -4483,7 +4552,7 @@ packages: debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 + semver: 7.6.0 tsutils: 3.21.0_typescript@4.9.5 typescript: 4.9.5 transitivePeerDependencies: @@ -4504,7 +4573,7 @@ packages: debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 + semver: 7.6.0 tsutils: 3.21.0_typescript@4.9.5 typescript: 4.9.5 transitivePeerDependencies: @@ -4695,7 +4764,7 @@ packages: '@visactor/chart-advisor': 0.1.10 '@visactor/vdataset': 0.17.5 '@visactor/vutils': 0.17.5 - axios: 1.6.7 + axios: 1.6.8 dayjs: 1.11.10 exceljs: 4.4.0 js-yaml: 4.1.0 @@ -4773,11 +4842,11 @@ packages: vite: ^4.1.0-beta.0 dependencies: '@babel/core': 7.20.12 - '@babel/plugin-transform-react-jsx-self': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-react-jsx-source': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-transform-react-jsx-self': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-react-jsx-source': 7.24.1_@babel+core@7.20.12 magic-string: 0.27.0 react-refresh: 0.14.0 - vite: 3.2.6_@types+node@20.11.25 + vite: 3.2.6 transitivePeerDependencies: - supports-color dev: true @@ -4825,12 +4894,12 @@ packages: resolution: {integrity: sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==} dev: true - /@vue/babel-helper-vue-transform-on/1.2.1: - resolution: {integrity: sha512-jtEXim+pfyHWwvheYwUwSXm43KwQo8nhOBDyjrUITV6X2tB7lJm6n/+4sqR8137UVZZul5hBzWHdZ2uStYpyRQ==} + /@vue/babel-helper-vue-transform-on/1.2.2: + resolution: {integrity: sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==} dev: true - /@vue/babel-plugin-jsx/1.2.1_@babel+core@7.20.12: - resolution: {integrity: sha512-Yy9qGktktXhB39QE99So/BO2Uwm/ZG+gpL9vMg51ijRRbINvgbuhyJEi4WYmGRMx/MSTfK0xjgZ3/MyY+iLCEg==} + /@vue/babel-plugin-jsx/1.2.2_@babel+core@7.20.12: + resolution: {integrity: sha512-nYTkZUVTu4nhP199UoORePsql0l+wj7v/oyQjtThUVhJl1U+6qHuoVhIvR3bf7eVKjbCK+Cs2AWd7mi9Mpz9rA==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: @@ -4840,12 +4909,12 @@ packages: '@babel/core': 7.20.12 '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-jsx': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-syntax-jsx': 7.24.1_@babel+core@7.20.12 '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 - '@vue/babel-helper-vue-transform-on': 1.2.1 - '@vue/babel-plugin-resolve-type': 1.2.1_@babel+core@7.20.12 + '@vue/babel-helper-vue-transform-on': 1.2.2 + '@vue/babel-plugin-resolve-type': 1.2.2_@babel+core@7.20.12 camelcase: 6.3.0 html-tags: 3.3.1 svg-tags: 1.0.0 @@ -4853,16 +4922,16 @@ packages: - supports-color dev: true - /@vue/babel-plugin-resolve-type/1.2.1_@babel+core@7.20.12: - resolution: {integrity: sha512-IOtnI7pHunUzHS/y+EG/yPABIAp0VN8QhQ0UCS09jeMVxgAnI9qdOzO85RXdQGxq+aWCdv8/+k3W0aYO6j/8fQ==} + /@vue/babel-plugin-resolve-type/1.2.2_@babel+core@7.20.12: + resolution: {integrity: sha512-EntyroPwNg5IPVdUJupqs0CFzuf6lUrVvCspmv2J1FITLeGnUCuoGNNk78dgCusxEiYj6RMkTJflGSxk5aIC4A==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 '@babel/core': 7.20.12 '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.24.0 - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.1 '@vue/compiler-sfc': 3.4.21 dev: true @@ -4872,8 +4941,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-module-imports': 7.22.15 - '@babel/plugin-syntax-jsx': 7.23.3_@babel+core@7.20.12 + '@babel/helper-module-imports': 7.24.3 + '@babel/plugin-syntax-jsx': 7.24.1_@babel+core@7.20.12 '@vue/babel-helper-vue-jsx-merge-props': 1.4.0 html-tags: 2.0.0 lodash.kebabcase: 4.1.1 @@ -4906,7 +4975,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/plugin-syntax-jsx': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-syntax-jsx': 7.24.1_@babel+core@7.20.12 dev: true /@vue/babel-sugar-composition-api-render-instance/1.4.0_@babel+core@7.20.12: @@ -4915,7 +4984,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/plugin-syntax-jsx': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-syntax-jsx': 7.24.1_@babel+core@7.20.12 dev: true /@vue/babel-sugar-functional-vue/1.4.0_@babel+core@7.20.12: @@ -4924,7 +4993,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/plugin-syntax-jsx': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-syntax-jsx': 7.24.1_@babel+core@7.20.12 dev: true /@vue/babel-sugar-inject-h/1.4.0_@babel+core@7.20.12: @@ -4933,7 +5002,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/plugin-syntax-jsx': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-syntax-jsx': 7.24.1_@babel+core@7.20.12 dev: true /@vue/babel-sugar-v-model/1.4.0_@babel+core@7.20.12: @@ -4942,7 +5011,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/plugin-syntax-jsx': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-syntax-jsx': 7.24.1_@babel+core@7.20.12 '@vue/babel-helper-vue-jsx-merge-props': 1.4.0 '@vue/babel-plugin-transform-vue-jsx': 1.4.0_@babel+core@7.20.12 camelcase: 5.3.1 @@ -4956,7 +5025,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/plugin-syntax-jsx': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-syntax-jsx': 7.24.1_@babel+core@7.20.12 '@vue/babel-plugin-transform-vue-jsx': 1.4.0_@babel+core@7.20.12 camelcase: 5.3.1 dev: true @@ -4964,11 +5033,11 @@ packages: /@vue/compiler-core/3.4.21: resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} dependencies: - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.1 '@vue/shared': 3.4.21 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true /@vue/compiler-dom/3.4.21: @@ -4981,15 +5050,15 @@ packages: /@vue/compiler-sfc/3.4.21: resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} dependencies: - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.1 '@vue/compiler-core': 3.4.21 '@vue/compiler-dom': 3.4.21 '@vue/compiler-ssr': 3.4.21 '@vue/shared': 3.4.21 estree-walker: 2.0.2 magic-string: 0.30.8 - postcss: 8.4.35 - source-map-js: 1.0.2 + postcss: 8.4.37 + source-map-js: 1.2.0 dev: true /@vue/compiler-ssr/3.4.21: @@ -5725,25 +5794,15 @@ packages: resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} engines: {node: '>=0.10.0'} - /array.prototype.filter/1.0.3: - resolution: {integrity: sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==} + /array.prototype.findlastindex/1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 - es-array-method-boxes-properly: 1.0.0 - is-string: 1.0.7 - dev: true - - /array.prototype.findlastindex/1.2.4: - resolution: {integrity: sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.2 es-errors: 1.3.0 + es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 dev: true @@ -5771,7 +5830,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.2 es-array-method-boxes-properly: 1.0.0 is-string: 1.0.7 dev: true @@ -5883,12 +5942,6 @@ packages: /async/3.2.5: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - /asynciterator.prototype/1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} - dependencies: - has-symbols: 1.0.3 - dev: true - /asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -5905,7 +5958,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001597 + caniuse-lite: 1.0.30001599 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -5918,7 +5971,7 @@ packages: hasBin: true dependencies: browserslist: 3.2.8 - caniuse-lite: 1.0.30001597 + caniuse-lite: 1.0.30001599 normalize-range: 0.1.2 num2fraction: 1.2.2 postcss: 6.0.23 @@ -5931,7 +5984,7 @@ packages: hasBin: true dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001597 + caniuse-lite: 1.0.30001599 chalk: 2.4.2 normalize-range: 0.1.2 num2fraction: 1.2.2 @@ -5944,7 +5997,7 @@ packages: hasBin: true dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001597 + caniuse-lite: 1.0.30001599 normalize-range: 0.1.2 num2fraction: 1.2.2 picocolors: 0.2.1 @@ -5971,10 +6024,10 @@ packages: engines: {node: '>=4'} dev: true - /axios/1.6.7: - resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} + /axios/1.6.8: + resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} dependencies: - follow-redirects: 1.15.5 + follow-redirects: 1.15.6 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -6060,9 +6113,9 @@ packages: peerDependencies: eslint: '>= 4.12.1' dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.1 + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 eslint: 6.8.0 eslint-visitor-keys: 1.3.0 @@ -6078,9 +6131,9 @@ packages: peerDependencies: eslint: '>= 4.12.1' dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.1 + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 eslint: 8.18.0 eslint-visitor-keys: 1.3.0 @@ -6234,7 +6287,7 @@ packages: /babel-plugin-import/1.13.6: resolution: {integrity: sha512-N7FYnGh0DFsvDRkAPsvFq/metVfVD7P2h1rokOPpEH4cZbdRHCW+2jbXt0nnuqowkm/xhh2ww1anIdEpfYa7ZA==} dependencies: - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.3 dev: false /babel-plugin-istanbul/5.2.0: @@ -6302,7 +6355,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.23.5 + '@babel/compat-data': 7.24.1 '@babel/core': 7.20.12 '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 semver: 6.3.1 @@ -6316,7 +6369,7 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 - core-js-compat: 3.36.0 + core-js-compat: 3.36.1 transitivePeerDependencies: - supports-color @@ -6493,16 +6546,16 @@ packages: '@babel/core': 7.20.12 '@babel/plugin-proposal-class-properties': 7.10.4_@babel+core@7.20.12 '@babel/plugin-proposal-decorators': 7.10.5_@babel+core@7.20.12 - '@babel/plugin-syntax-jsx': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-syntax-jsx': 7.24.1_@babel+core@7.20.12 '@babel/plugin-transform-runtime': 7.11.0_@babel+core@7.20.12 '@babel/preset-env': 7.20.2_@babel+core@7.20.12 '@babel/preset-react': 7.12.13_@babel+core@7.20.12 '@babel/preset-typescript': 7.12.17_@babel+core@7.20.12 '@babel/runtime': 7.17.0 - '@babel/runtime-corejs3': 7.24.0 + '@babel/runtime-corejs3': 7.24.1 '@tarojs/helper': 3.3.17 '@tarojs/taro-h5': 3.3.17 - '@vue/babel-plugin-jsx': 1.2.1_@babel+core@7.20.12 + '@vue/babel-plugin-jsx': 1.2.2_@babel+core@7.20.12 '@vue/babel-preset-jsx': 1.4.0_@babel+core@7.20.12 babel-plugin-dynamic-import-node: 2.3.3 babel-plugin-global-define: 1.0.3 @@ -6510,7 +6563,7 @@ packages: babel-plugin-transform-imports-api: 1.0.0 babel-plugin-transform-react-jsx-to-rn-stylesheet: 3.3.17 babel-plugin-transform-taroapi: 3.3.17 - core-js: 3.36.0 + core-js: 3.36.1 metro-react-native-babel-preset: 0.66.2_@babel+core@7.20.12 react-refresh: 0.9.0 transitivePeerDependencies: @@ -6664,8 +6717,8 @@ packages: resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==} engines: {node: '>=0.10.0'} - /binary-extensions/2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + /binary-extensions/2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} dev: true @@ -6893,8 +6946,8 @@ packages: resolution: {integrity: sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==} hasBin: true dependencies: - caniuse-lite: 1.0.30001597 - electron-to-chromium: 1.4.699 + caniuse-lite: 1.0.30001599 + electron-to-chromium: 1.4.711 dev: true /browserslist/4.23.0: @@ -6902,8 +6955,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001597 - electron-to-chromium: 1.4.699 + caniuse-lite: 1.0.30001599 + electron-to-chromium: 1.4.711 node-releases: 2.0.14 update-browserslist-db: 1.0.13_browserslist@4.23.0 @@ -7207,8 +7260,8 @@ packages: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} dev: true - /caniuse-lite/1.0.30001597: - resolution: {integrity: sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==} + /caniuse-lite/1.0.30001599: + resolution: {integrity: sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA==} /canvas/2.11.2: resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} @@ -8002,13 +8055,13 @@ packages: webpack-log: 2.0.0 dev: true - /core-js-compat/3.36.0: - resolution: {integrity: sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==} + /core-js-compat/3.36.1: + resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} dependencies: browserslist: 4.23.0 - /core-js-pure/3.36.0: - resolution: {integrity: sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ==} + /core-js-pure/3.36.1: + resolution: {integrity: sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA==} requiresBuild: true dev: true @@ -8018,8 +8071,8 @@ packages: requiresBuild: true dev: true - /core-js/3.36.0: - resolution: {integrity: sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==} + /core-js/3.36.1: + resolution: {integrity: sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==} requiresBuild: true dev: true @@ -8458,6 +8511,30 @@ packages: whatwg-url: 8.7.0 dev: true + /data-view-buffer/1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + /data-view-byte-length/1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + /data-view-byte-offset/1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + /date-time/3.1.0: resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} engines: {node: '>=6'} @@ -8778,8 +8855,8 @@ packages: engines: {node: '>=6'} hasBin: true dependencies: - '@babel/parser': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/parser': 7.24.1 + '@babel/traverse': 7.24.1 builtin-modules: 3.3.0 deprecate: 1.1.1 deps-regex: 0.1.4 @@ -8844,8 +8921,8 @@ packages: repeating: 2.0.1 dev: true - /detect-libc/2.0.2: - resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + /detect-libc/2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} dev: true @@ -9161,8 +9238,8 @@ packages: jake: 10.8.7 dev: true - /electron-to-chromium/1.4.699: - resolution: {integrity: sha512-I7q3BbQi6e4tJJN5CRcyvxhK0iJb34TV8eJQcgh+fR2fQ8miMgZcEInckCo1U9exDHbfz7DLDnFn8oqH/VcRKw==} + /electron-to-chromium/1.4.711: + resolution: {integrity: sha512-hRg81qzvUEibX2lDxnFlVCHACa+LtrCPIsWAxo161LDYIB3jauf57RGsMZV9mvGwE98yGH06icj3zBEoOkxd/w==} /electron/11.5.0: resolution: {integrity: sha512-WjNDd6lGpxyiNjE3LhnFCAk/D9GIj1rU3GSDealVShhkkkPR3Vh4q8ErXGDl1OAO/faomVa10KoFPUN/pLbNxg==} @@ -9328,8 +9405,59 @@ packages: regexp.prototype.flags: 1.5.2 safe-array-concat: 1.1.2 safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.5 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + + /es-abstract/1.23.2: + resolution: {integrity: sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 string.prototype.trimstart: 1.0.7 typed-array-buffer: 1.0.2 typed-array-byte-length: 1.0.1 @@ -9352,14 +9480,13 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - /es-iterator-helpers/1.0.17: - resolution: {integrity: sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==} + /es-iterator-helpers/1.0.18: + resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} engines: {node: '>= 0.4'} dependencies: - asynciterator.prototype: 1.0.0 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.2 es-errors: 1.3.0 es-set-tostringtag: 2.0.3 function-bind: 1.1.2 @@ -9373,6 +9500,12 @@ packages: safe-array-concat: 1.1.2 dev: true + /es-object-atoms/1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + /es-set-tostringtag/2.0.3: resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} @@ -9763,7 +9896,7 @@ packages: eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 dependencies: array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.4 + array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 @@ -9775,9 +9908,9 @@ packages: is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.2 - object.values: 1.1.7 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 dev: true @@ -9789,7 +9922,7 @@ packages: eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 dependencies: array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.4 + array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 @@ -9801,9 +9934,9 @@ packages: is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.2 - object.values: 1.1.7 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 dev: true @@ -9814,7 +9947,7 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 aria-query: 5.3.0 array-includes: 3.1.7 array.prototype.flatmap: 1.3.2 @@ -9823,14 +9956,14 @@ packages: axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.17 + es-iterator-helpers: 1.0.18 eslint: 8.18.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 + object.entries: 1.1.8 + object.fromentries: 2.0.8 dev: true /eslint-plugin-prettier/4.2.1_ohknqdiadpdc4n44qqsbqlxxwa: @@ -9901,14 +10034,14 @@ packages: estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 + object.entries: 1.1.8 + object.fromentries: 2.0.8 object.hasown: 1.1.3 - object.values: 1.1.7 + object.values: 1.2.0 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.11 dev: true /eslint-plugin-react/7.30.1_eslint@8.18.0: @@ -9924,14 +10057,14 @@ packages: estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 + object.entries: 1.1.8 + object.fromentries: 2.0.8 object.hasown: 1.1.3 - object.values: 1.1.7 + object.values: 1.2.0 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.11 /eslint-plugin-taro/2.2.22_qnj6j5lts2zfavoiwthslq75pu: resolution: {integrity: sha512-1tc6iXXkBnHMydXKhHGO2WqeNGyZ4E8vc4sl+N8371M6iS4qdPUNottDpwfSDvAQo5DmEo/nJ0QD2ls0mIdZaQ==} @@ -10033,7 +10166,7 @@ packages: engines: {node: ^6.14.0 || ^8.10.0 || >=9.10.0} hasBin: true dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 ajv: 6.12.6 chalk: 2.4.2 cross-spawn: 6.0.5 @@ -10078,7 +10211,7 @@ packages: engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} hasBin: true dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 ajv: 6.12.6 chalk: 2.4.2 cross-spawn: 6.0.5 @@ -11005,8 +11138,8 @@ packages: tslib: 2.3.1 dev: false - /follow-redirects/1.15.5: - resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + /follow-redirects/1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -11015,8 +11148,8 @@ packages: optional: true dev: false - /follow-redirects/1.15.5_debug@4.3.4: - resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + /follow-redirects/1.15.6_debug@4.3.4: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -11833,7 +11966,7 @@ packages: resolution: {integrity: sha512-SVSF7ikuWKhpAW4l4wapAqPPSToJoiNKsbDoUnRrSgwZHH7lH8pbPeQj1aOVYQrbZKhfSVBxVW+Py7vtulRktw==} engines: {node: '>=10'} dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 '@types/vinyl': 2.0.7 istextorbinary: 3.3.0 replacestream: 4.0.3 @@ -12289,7 +12422,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.5_debug@4.3.4 + follow-redirects: 1.15.6_debug@4.3.4 requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -12701,7 +12834,7 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 dev: true /is-boolean-object/1.1.2: @@ -12754,6 +12887,12 @@ packages: dependencies: hasown: 2.0.2 + /is-data-view/1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 + /is-date-object/1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} @@ -13247,9 +13386,9 @@ packages: engines: {node: '>=6'} dependencies: '@babel/generator': 7.21.1 - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.1 '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 istanbul-lib-coverage: 2.0.5 semver: 6.3.1 @@ -13274,7 +13413,7 @@ packages: engines: {node: '>=8'} dependencies: '@babel/core': 7.20.12 - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.1 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -13332,7 +13471,7 @@ packages: define-properties: 1.2.1 get-intrinsic: 1.2.4 has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.5 + reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 dev: true @@ -13532,7 +13671,7 @@ packages: jest-validate: 26.6.2 micromatch: 4.0.5 pretty-format: 26.6.2 - ts-node: 10.9.0_tdjpgkcfglun4nq6ehgeprtpni + ts-node: 10.9.0_aldj6v7e223tfnp6svpe7ijn3i transitivePeerDependencies: - bufferutil - canvas @@ -13567,7 +13706,7 @@ packages: jest-validate: 26.6.2 micromatch: 4.0.5 pretty-format: 26.6.2 - ts-node: 10.9.0_tdjpgkcfglun4nq6ehgeprtpni + ts-node: 10.9.0_aldj6v7e223tfnp6svpe7ijn3i transitivePeerDependencies: - bufferutil - canvas @@ -13672,7 +13811,7 @@ packages: '@jest/environment': 26.6.2 '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 jest-mock: 26.6.2 jest-util: 26.6.2 jsdom: 16.7.0 @@ -13690,7 +13829,7 @@ packages: '@jest/environment': 26.6.2 '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 jest-mock: 26.6.2 jest-util: 26.6.2 jsdom: 16.7.0_canvas@2.11.2 @@ -13721,7 +13860,7 @@ packages: '@jest/environment': 26.6.2 '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 jest-mock: 26.6.2 jest-util: 26.6.2 dev: true @@ -13761,7 +13900,7 @@ packages: dependencies: '@jest/types': 26.6.2 '@types/graceful-fs': 4.1.9 - '@types/node': 20.11.25 + '@types/node': 20.11.30 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -13780,7 +13919,7 @@ packages: resolution: {integrity: sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==} engines: {node: '>= 6'} dependencies: - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@jest/environment': 24.9.0 '@jest/test-result': 24.9.0 '@jest/types': 24.9.0 @@ -13804,12 +13943,12 @@ packages: resolution: {integrity: sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==} engines: {node: '>= 10.14.2'} dependencies: - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@jest/environment': 26.6.2 '@jest/source-map': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 chalk: 4.1.2 co: 4.6.0 expect: 26.6.2 @@ -13834,12 +13973,12 @@ packages: resolution: {integrity: sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==} engines: {node: '>= 10.14.2'} dependencies: - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@jest/environment': 26.6.2 '@jest/source-map': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 chalk: 4.1.2 co: 4.6.0 expect: 26.6.2 @@ -13864,12 +14003,12 @@ packages: resolution: {integrity: sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==} engines: {node: '>= 10.14.2'} dependencies: - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@jest/environment': 26.6.2 '@jest/source-map': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 chalk: 4.1.2 co: 4.6.0 expect: 26.6.2 @@ -13930,7 +14069,7 @@ packages: resolution: {integrity: sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==} engines: {node: '>= 6'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 '@jest/test-result': 24.9.0 '@jest/types': 24.9.0 '@types/stack-utils': 1.0.1 @@ -13944,7 +14083,7 @@ packages: resolution: {integrity: sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==} engines: {node: '>= 10.14.2'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 '@jest/types': 26.6.2 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -13967,7 +14106,7 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 dev: true /jest-pnp-resolver/1.2.3_jest-resolve@24.9.0: @@ -14073,7 +14212,7 @@ packages: '@jest/environment': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 chalk: 4.1.2 emittery: 0.7.2 exit: 0.1.2 @@ -14105,7 +14244,7 @@ packages: '@jest/environment': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 chalk: 4.1.2 emittery: 0.7.2 exit: 0.1.2 @@ -14137,7 +14276,7 @@ packages: '@jest/environment': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 chalk: 4.1.2 emittery: 0.7.2 exit: 0.1.2 @@ -14322,7 +14461,7 @@ packages: resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} engines: {node: '>= 10.14.2'} dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 graceful-fs: 4.2.11 dev: true @@ -14390,7 +14529,7 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 chalk: 4.1.2 graceful-fs: 4.2.11 is-ci: 2.0.0 @@ -14427,7 +14566,7 @@ packages: dependencies: '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 20.11.25 + '@types/node': 20.11.30 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 26.6.2 @@ -14446,7 +14585,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -14810,7 +14949,7 @@ packages: array-includes: 3.1.7 array.prototype.flat: 1.3.2 object.assign: 4.1.5 - object.values: 1.1.7 + object.values: 1.2.0 /jszip/3.10.1: resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} @@ -15445,7 +15584,7 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - semver: 7.5.4 + semver: 7.6.0 dev: true /make-error/1.3.6: @@ -15755,36 +15894,36 @@ packages: '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.20.12 '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.20.12 '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-export-default-from': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-syntax-flow': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-syntax-export-default-from': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-syntax-flow': 7.24.1_@babel+core@7.20.12 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-transform-arrow-functions': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-async-to-generator': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoping': 7.23.4_@babel+core@7.20.12 - '@babel/plugin-transform-classes': 7.23.8_@babel+core@7.20.12 - '@babel/plugin-transform-computed-properties': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-destructuring': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-exponentiation-operator': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-flow-strip-types': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-for-of': 7.23.6_@babel+core@7.20.12 - '@babel/plugin-transform-function-name': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-literals': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-modules-commonjs': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-object-assign': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-react-display-name': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-transform-arrow-functions': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-async-to-generator': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-block-scoping': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-classes': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-computed-properties': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-destructuring': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-exponentiation-operator': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-flow-strip-types': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-for-of': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-function-name': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-literals': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-modules-commonjs': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-object-assign': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-parameters': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-react-display-name': 7.24.1_@babel+core@7.20.12 '@babel/plugin-transform-react-jsx': 7.23.4_@babel+core@7.20.12 - '@babel/plugin-transform-react-jsx-self': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-react-jsx-source': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-regenerator': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-transform-react-jsx-self': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-react-jsx-source': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-regenerator': 7.24.1_@babel+core@7.20.12 '@babel/plugin-transform-runtime': 7.11.0_@babel+core@7.20.12 - '@babel/plugin-transform-shorthand-properties': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-spread': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-sticky-regex': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-template-literals': 7.23.3_@babel+core@7.20.12 - '@babel/plugin-transform-typescript': 7.23.6_@babel+core@7.20.12 - '@babel/plugin-transform-unicode-regex': 7.23.3_@babel+core@7.20.12 + '@babel/plugin-transform-shorthand-properties': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-spread': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-sticky-regex': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-template-literals': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-typescript': 7.24.1_@babel+core@7.20.12 + '@babel/plugin-transform-unicode-regex': 7.24.1_@babel+core@7.20.12 '@babel/template': 7.24.0 react-refresh: 0.4.3 dev: true @@ -16097,7 +16236,7 @@ packages: acorn: 8.11.3 pathe: 1.1.2 pkg-types: 1.0.3 - ufo: 1.4.0 + ufo: 1.5.3 dev: true /mobile-detect/1.4.5: @@ -16596,41 +16735,43 @@ packages: isobject: 3.0.1 dev: false - /object.entries/1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + /object.entries/1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-object-atoms: 1.0.0 - /object.fromentries/2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + /object.fromentries/2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.2 + es-object-atoms: 1.0.0 - /object.getownpropertydescriptors/2.1.7: - resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} + /object.getownpropertydescriptors/2.1.8: + resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} engines: {node: '>= 0.8'} dependencies: array.prototype.reduce: 1.0.6 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.2 + es-object-atoms: 1.0.0 + gopd: 1.0.1 safe-array-concat: 1.1.2 dev: true - /object.groupby/1.0.2: - resolution: {integrity: sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==} + /object.groupby/1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} dependencies: - array.prototype.filter: 1.0.3 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 - es-errors: 1.3.0 + es-abstract: 1.23.2 dev: true /object.hasown/1.1.3: @@ -16669,13 +16810,13 @@ packages: make-iterator: 1.0.1 dev: false - /object.values/1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + /object.values/1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-object-atoms: 1.0.0 /obuf/1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} @@ -16739,6 +16880,11 @@ packages: is-wsl: 2.2.0 dev: true + /openinula/0.1.2-SNAPSHOT: + resolution: {integrity: sha512-dAw3TIvyPgAgYgYevKeYHo3EvONvSyhLY3xt5YUTUFIQ60aR4Sjgc0/pbIPn1k+4M3E9iQl+x2Fx1fAjUvh7Ug==} + engines: {node: '>=0.10.0'} + dev: true + /opn/5.5.0: resolution: {integrity: sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==} engines: {node: '>=4'} @@ -17088,7 +17234,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -17533,7 +17679,7 @@ packages: dependencies: icss-utils: 4.1.1 postcss: 7.0.39 - postcss-selector-parser: 6.0.15 + postcss-selector-parser: 6.0.16 postcss-value-parser: 4.2.0 dev: true @@ -17561,7 +17707,7 @@ packages: engines: {node: '>= 6'} dependencies: postcss: 7.0.39 - postcss-selector-parser: 6.0.15 + postcss-selector-parser: 6.0.16 dev: true /postcss-modules-values/1.3.0: @@ -17671,8 +17817,8 @@ packages: uniq: 1.0.1 dev: true - /postcss-selector-parser/6.0.15: - resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} + /postcss-selector-parser/6.0.16: + resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 @@ -17779,15 +17925,15 @@ packages: dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.0.2 + source-map-js: 1.2.0 - /postcss/8.4.35: - resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} + /postcss/8.4.37: + resolution: {integrity: sha512-7iB/v/r7Woof0glKLH8b1SPHrsX7uhdO+Geb41QpF/+mWZHU3uxxSlN+UXGVit1PawOYDToO+AbZzhBzWRDwbQ==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true /preferred-pm/1.0.1: @@ -18177,7 +18323,7 @@ packages: react: 18.2.0 scheduler: 0.23.0 - /react-focus-lock/2.11.2_uo4fmizy6e3vavmbwiahqshsb4: + /react-focus-lock/2.11.2_plwvpmfwkh5xonezcq2rvxtefq: resolution: {integrity: sha512-DDTbEiov0+RthESPVSTIdAWPPKic+op3sCcP+icbMRobvQNt7LuAlJ3KoarqQv5sCgKArru3kXmlmFTa27/CdQ==} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -18187,13 +18333,13 @@ packages: optional: true dependencies: '@babel/runtime': 7.17.0 - '@types/react': 18.2.64 + '@types/react': 18.2.67 focus-lock: 1.3.4 prop-types: 15.8.1 react: 18.2.0 react-clientside-effect: 1.2.6_react@18.2.0 - use-callback-ref: 1.3.1_uo4fmizy6e3vavmbwiahqshsb4 - use-sidecar: 1.1.2_uo4fmizy6e3vavmbwiahqshsb4 + use-callback-ref: 1.3.2_plwvpmfwkh5xonezcq2rvxtefq + use-sidecar: 1.1.2_plwvpmfwkh5xonezcq2rvxtefq dev: false /react-is/16.13.1: @@ -18447,13 +18593,13 @@ packages: resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==} dev: true - /reflect.getprototypeof/1.0.5: - resolution: {integrity: sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==} + /reflect.getprototypeof/1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.2 es-errors: 1.3.0 get-intrinsic: 1.2.4 globalthis: 1.0.3 @@ -19070,7 +19216,7 @@ packages: peerDependencies: rollup: ^2.0.0 dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 jest-worker: 26.6.2 rollup: 3.20.5 serialize-javascript: 4.0.0 @@ -19407,6 +19553,14 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: true + + /semver/7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 /send/0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} @@ -19804,8 +19958,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /source-map-js/1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + /source-map-js/1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} /source-map-resolve/0.5.3: @@ -20134,33 +20288,38 @@ packages: resolution: {integrity: sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==} dev: true - /string.prototype.matchall/4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + /string.prototype.matchall/4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.2 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 + gopd: 1.0.1 has-symbols: 1.0.3 internal-slot: 1.0.7 regexp.prototype.flags: 1.5.2 set-function-name: 2.0.2 side-channel: 1.0.6 - /string.prototype.trim/1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + /string.prototype.trim/1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.2 + es-object-atoms: 1.0.0 - /string.prototype.trimend/1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + /string.prototype.trimend/1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-object-atoms: 1.0.0 /string.prototype.trimstart/1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} @@ -20373,7 +20532,7 @@ packages: postcss-safe-parser: 4.0.2 postcss-sass: 0.4.4 postcss-scss: 2.1.1 - postcss-selector-parser: 6.0.15 + postcss-selector-parser: 6.0.16 postcss-syntax: 0.36.2_postcss@7.0.39 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 @@ -20754,7 +20913,7 @@ packages: engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': 0.3.5 + '@jridgewell/source-map': 0.3.6 acorn: 8.11.3 commander: 2.20.3 source-map-support: 0.5.21 @@ -21156,7 +21315,7 @@ packages: typescript: 4.9.5 dev: true - /ts-node/10.9.0_tdjpgkcfglun4nq6ehgeprtpni: + /ts-node/10.9.0_aldj6v7e223tfnp6svpe7ijn3i: resolution: {integrity: sha512-bunW18GUyaCSYRev4DPf4SQpom3pWH29wKl0sDk5zE7ze19RImEVhCW7K4v3hHKkUyfWotU08ToE2RS+Y49aug==} hasBin: true peerDependencies: @@ -21175,7 +21334,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.11.25 + '@types/node': 20.11.30 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 @@ -21406,8 +21565,8 @@ packages: resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} dev: false - /ufo/1.4.0: - resolution: {integrity: sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==} + /ufo/1.5.3: + resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} dev: true /uglify-js/3.17.4: @@ -21753,8 +21912,8 @@ packages: qs: 6.12.0 dev: true - /use-callback-ref/1.3.1_uo4fmizy6e3vavmbwiahqshsb4: - resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} + /use-callback-ref/1.3.2_plwvpmfwkh5xonezcq2rvxtefq: + resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} engines: {node: '>=10'} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -21763,12 +21922,12 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.64 + '@types/react': 18.2.67 react: 18.2.0 tslib: 2.3.1 dev: false - /use-sidecar/1.1.2_uo4fmizy6e3vavmbwiahqshsb4: + /use-sidecar/1.1.2_plwvpmfwkh5xonezcq2rvxtefq: resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: @@ -21778,7 +21937,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.64 + '@types/react': 18.2.67 detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.3.1 @@ -21795,7 +21954,7 @@ packages: resolution: {integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==} dependencies: define-properties: 1.2.1 - object.getownpropertydescriptors: 2.1.7 + object.getownpropertydescriptors: 2.1.8 dev: true /util.promisify/1.1.2: @@ -21806,7 +21965,7 @@ packages: for-each: 0.3.3 has-proto: 1.0.3 has-symbols: 1.0.3 - object.getownpropertydescriptors: 2.1.7 + object.getownpropertydescriptors: 2.1.8 safe-array-concat: 1.1.2 dev: true @@ -21978,7 +22137,7 @@ packages: remove-trailing-separator: 1.1.0 replace-ext: 1.0.1 - /vite-node/0.30.1_62t4yg6sxmieyhtjclyfpxhydu: + /vite-node/0.30.1_awqanvtyflyg5rtwnggeskxy7m: resolution: {integrity: sha512-vTikpU/J7e6LU/8iM3dzBo8ZhEiKZEKRznEMm+mJh95XhWaPrJQraT/QsT2NWmuEf+zgAoMe64PKT7hfZ1Njmg==} engines: {node: '>=v14.18.0'} hasBin: true @@ -21988,7 +22147,7 @@ packages: mlly: 1.6.1 pathe: 1.1.2 picocolors: 1.0.0 - vite: 3.2.6_62t4yg6sxmieyhtjclyfpxhydu + vite: 3.2.6_awqanvtyflyg5rtwnggeskxy7m transitivePeerDependencies: - '@types/node' - less @@ -22032,7 +22191,7 @@ packages: fsevents: 2.3.3 dev: true - /vite/3.2.6_62t4yg6sxmieyhtjclyfpxhydu: + /vite/3.2.6_@types+node@20.11.30: resolution: {integrity: sha512-nTXTxYVvaQNLoW5BQ8PNNQ3lPia57gzsQU/Khv+JvzKPku8kNZL6NMUR/qwXhMG6E+g1idqEPanomJ+VZgixEg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -22057,18 +22216,16 @@ packages: terser: optional: true dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 esbuild: 0.15.18 - less: 4.1.3 postcss: 8.4.21 resolve: 1.22.8 rollup: 2.79.1 - terser: 5.17.1 optionalDependencies: fsevents: 2.3.3 dev: true - /vite/3.2.6_@types+node@20.11.25: + /vite/3.2.6_awqanvtyflyg5rtwnggeskxy7m: resolution: {integrity: sha512-nTXTxYVvaQNLoW5BQ8PNNQ3lPia57gzsQU/Khv+JvzKPku8kNZL6NMUR/qwXhMG6E+g1idqEPanomJ+VZgixEg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -22093,11 +22250,13 @@ packages: terser: optional: true dependencies: - '@types/node': 20.11.25 + '@types/node': 20.11.30 esbuild: 0.15.18 + less: 4.1.3 postcss: 8.4.21 resolve: 1.22.8 rollup: 2.79.1 + terser: 5.17.1 optionalDependencies: fsevents: 2.3.3 dev: true @@ -22133,9 +22292,9 @@ packages: webdriverio: optional: true dependencies: - '@types/chai': 4.3.12 + '@types/chai': 4.3.13 '@types/chai-subset': 1.3.5 - '@types/node': 20.11.25 + '@types/node': 20.11.30 '@vitest/expect': 0.30.1 '@vitest/runner': 0.30.1 '@vitest/snapshot': 0.30.1 @@ -22156,8 +22315,8 @@ packages: strip-literal: 1.3.0 tinybench: 2.6.0 tinypool: 0.4.0 - vite: 3.2.6_62t4yg6sxmieyhtjclyfpxhydu - vite-node: 0.30.1_62t4yg6sxmieyhtjclyfpxhydu + vite: 3.2.6_awqanvtyflyg5rtwnggeskxy7m + vite-node: 0.30.1_awqanvtyflyg5rtwnggeskxy7m why-is-node-running: 2.2.2 transitivePeerDependencies: - less diff --git a/packages/openinula-vchart/.eslintrc.cjs b/packages/openinula-vchart/.eslintrc.cjs new file mode 100644 index 0000000000..21e89960a8 --- /dev/null +++ b/packages/openinula-vchart/.eslintrc.cjs @@ -0,0 +1,17 @@ +require('@rushstack/eslint-patch/modern-module-resolution'); + +module.exports = { + extends: ['@internal/eslint-config/profile/react'], + globals: { + __DEV__: 'readonly', + __VERSION__: 'readonly', + NodeJS: true + }, + parserOptions: { tsconfigRootDir: __dirname, project: './tsconfig.eslint.json' }, + // ignorePatterns: [], + rules: { + "@typescript-eslint/no-unused-vars": "warn", + "react/display-name": "off", + "no-console": "warn" + } +}; diff --git a/packages/openinula-vchart/CHANGELOG.json b/packages/openinula-vchart/CHANGELOG.json new file mode 100644 index 0000000000..e6ee8032f1 --- /dev/null +++ b/packages/openinula-vchart/CHANGELOG.json @@ -0,0 +1,232 @@ +{ + "name": "@visactor/react-vchart", + "entries": [ + { + "version": "1.2.1", + "tag": "@visactor/react-vchart_v1.2.1", + "date": "Tue, 15 Aug 2023 07:25:04 GMT", + "comments": { + "patch": [ + { + "comment": "feat: the api updateViewBox adds the relayout parameter, which supports not redrawing the chart immediately after updateViewbox, details in #497\n\n" + }, + { + "comment": "fix(axis-layout): fix the problem that the axis-component cannot take effect after configuring minWidth and maxWidth, details are in #379\n\n" + }, + { + "comment": "fix(axis-layout): fix the issue of axis move slighty when manual legend filtering, details are in #426\n\n" + }, + { + "comment": "fix: fix the issue about when axis.label is autoLimit, the chart layout can not work as expect after resize, details in #429\n\n" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@visactor/vchart\" from `1.2.0` to `1.2.1`" + } + ] + } + }, + { + "version": "1.2.0", + "tag": "@visactor/react-vchart_v1.2.0", + "date": "Thu, 10 Aug 2023 05:23:25 GMT", + "comments": { + "patch": [ + { + "comment": "feat: dimension tooltip supports linear axis\n\n" + }, + { + "comment": "fix(react-vchart): catch error in BaseChart" + }, + { + "comment": "fix: shoud not update when spec is equal, fix #428" + }, + { + "comment": "fix(react-vchart): the components of react vchart should not update when no props or children are updated\n\n" + }, + { + "comment": "perf(axis-tick): optimize the calculation times of axis ticks, optimize the discrete axis sampling algorithm\n\n" + }, + { + "comment": "perf(data): remove redundant data statistics calculations\n\n" + } + ], + "none": [ + { + "comment": "feat(marker): marker support formatMethod. fix #288, fix #298" + }, + { + "comment": "fix(brush): fix mark can not resume to unselected state when click blank space. fix #307" + }, + { + "comment": "fix(brush): fix brush interactive range cannot update when chart is resize. fix #194" + } + ], + "minor": [ + { + "comment": "feat: supplement sync methods in vchart instance\n\n" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@visactor/vchart\" from `1.2.0-beta.1` to `1.2.0`" + } + ] + } + }, + { + "version": "1.1.3", + "tag": "@visactor/react-vchart_v1.1.3", + "date": "Thu, 03 Aug 2023 10:32:10 GMT", + "comments": { + "patch": [ + { + "comment": "fix: fix the issue of sankeyChart sourceFiled and targetFiled not working, closed #341" + }, + { + "comment": "fix: fix the issue of SankeyChart can't render, when unset nodeAlign, closed #343" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@visactor/vchart\" from `1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.1.2", + "tag": "@visactor/react-vchart_v1.1.2", + "date": "Tue, 01 Aug 2023 09:47:58 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@visactor/vchart\" from `1.1.1` to `1.1.2`" + } + ] + } + }, + { + "version": "1.1.1", + "tag": "@visactor/react-vchart_v1.1.1", + "date": "Fri, 28 Jul 2023 08:52:08 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@visactor/vchart\" from `1.1.0` to `1.1.1`" + } + ] + } + }, + { + "version": "1.1.0", + "tag": "@visactor/react-vchart_v1.1.0", + "date": "Wed, 26 Jul 2023 03:18:52 GMT", + "comments": { + "patch": [ + { + "comment": "chore: sync version" + }, + { + "comment": "add bandwidth attribute to context that in mark function call" + }, + { + "comment": "support zeroAlign & tick align in two axes" + }, + { + "comment": "support discrete legend bind scale" + }, + { + "comment": "feat: set default logger level to level error\n\n" + }, + { + "comment": "feat: modify function parameters to make it more user-friendly\n\n" + }, + { + "comment": "feat: support specified of scale in vchart\n\n" + }, + { + "comment": "fix: pickable shoule be false if label component is configured `interactive: false`\n\n" + }, + { + "comment": "fix region getSeries bug when option.userId = []" + }, + { + "comment": "fix: add global-scale updateDomain on chart updateData\n\n" + }, + { + "comment": "fix barWidth not work in bar chart" + }, + { + "comment": "fix(react-vchart): rebind event to chart after chart is re-render, fix #68\n\n" + }, + { + "comment": "fix: the issue that mode value does not exit in trigger config" + }, + { + "comment": "fix(react-vchart): fix type of event handlers, series, charts and components" + }, + { + "comment": " feat: add customized events of and other components" + } + ], + "none": [ + { + "comment": "feat(marker): markline support autoRange and marker performance enhance" + }, + { + "comment": "feat(brush): add operate type about 'brushStart' | 'brushEnd' and export element data of inBrush and outOfBrush" + }, + { + "comment": "feat(marker): support interactive" + }, + { + "comment": "fix(dataZoom): fix bug of datazoom not clear when updateSpec and mark disappear when xField is array" + }, + { + "comment": "fix(dataZoom): preview compute and theme config" + }, + { + "comment": "fix(wordCloud): text clip when layoutmode is fast" + }, + { + "comment": "fix(wordCloud): get padding from chartInstance padding" + } + ], + "minor": [ + { + "comment": "feat: optimize tooltip performance" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@visactor/vchart\" from `1.1.0-beta.9` to `1.1.0`" + } + ] + } + }, + { + "version": "1.0.0", + "tag": "@visactor/react-vchart_v1.0.0", + "date": "Tue, 20 Jun 2023 11:35:37 GMT", + "comments": { + "major": [ + { + "comment": "chore: release major version" + } + ], + "none": [ + { + "comment": "release 0.0.1-alpha.0" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@visactor/vchart\" from `1.0.0-alpha.0` to `1.0.0`" + } + ] + } + } + ] +} diff --git a/packages/openinula-vchart/CHANGELOG.md b/packages/openinula-vchart/CHANGELOG.md new file mode 100644 index 0000000000..73bd711e69 --- /dev/null +++ b/packages/openinula-vchart/CHANGELOG.md @@ -0,0 +1,110 @@ +# Change Log - @visactor/react-vchart + +This log was last generated on Tue, 15 Aug 2023 07:25:04 GMT and should not be manually modified. + +## 1.2.1 +Tue, 15 Aug 2023 07:25:04 GMT + +### Patches + +- feat: the api updateViewBox adds the relayout parameter, which supports not redrawing the chart immediately after updateViewbox, details in #497 + + +- fix(axis-layout): fix the problem that the axis-component cannot take effect after configuring minWidth and maxWidth, details are in #379 + + +- fix(axis-layout): fix the issue of axis move slighty when manual legend filtering, details are in #426 + + +- fix: fix the issue about when axis.label is autoLimit, the chart layout can not work as expect after resize, details in #429 + + + +## 1.2.0 +Thu, 10 Aug 2023 05:23:25 GMT + +### Minor changes + +- feat: supplement sync methods in vchart instance + + + +### Patches + +- feat: dimension tooltip supports linear axis + + +- fix(react-vchart): catch error in BaseChart +- fix: shoud not update when spec is equal, fix #428 +- fix(react-vchart): the components of react vchart should not update when no props or children are updated + + +- perf(axis-tick): optimize the calculation times of axis ticks, optimize the discrete axis sampling algorithm + + +- perf(data): remove redundant data statistics calculations + + + +## 1.1.3 +Thu, 03 Aug 2023 10:32:10 GMT + +### Patches + +- fix: fix the issue of sankeyChart sourceFiled and targetFiled not working, closed #341 +- fix: fix the issue of SankeyChart can't render, when unset nodeAlign, closed #343 + +## 1.1.2 +Tue, 01 Aug 2023 09:47:58 GMT + +_Version update only_ + +## 1.1.1 +Fri, 28 Jul 2023 08:52:08 GMT + +_Version update only_ + +## 1.1.0 +Wed, 26 Jul 2023 03:18:52 GMT + +### Minor changes + +- feat: optimize tooltip performance + +### Patches + +- chore: sync version +- add bandwidth attribute to context that in mark function call +- support zeroAlign & tick align in two axes +- support discrete legend bind scale +- feat: set default logger level to level error + + +- feat: modify function parameters to make it more user-friendly + + +- feat: support specified of scale in vchart + + +- fix: pickable shoule be false if label component is configured `interactive: false` + + +- fix region getSeries bug when option.userId = [] +- fix: add global-scale updateDomain on chart updateData + + +- fix barWidth not work in bar chart +- fix(react-vchart): rebind event to chart after chart is re-render, fix #68 + + +- fix: the issue that mode value does not exit in trigger config +- fix(react-vchart): fix type of event handlers, series, charts and components +- feat: add customized events of and other components + +## 1.0.0 +Tue, 20 Jun 2023 11:35:37 GMT + +### Breaking changes + +- chore: release major version + diff --git a/packages/openinula-vchart/README.md b/packages/openinula-vchart/README.md new file mode 100644 index 0000000000..24a54b840a --- /dev/null +++ b/packages/openinula-vchart/README.md @@ -0,0 +1,54 @@ +# @visactor/react-vchart + +`@visactor/react-vchart` 是由 [VisActor](visactor.io) 为您提供的 React 封装版本 VChart 图表库。它提供了一系列易于使用的 React 组件,用于方便的在 React 开发环境中创建各种类型的图表,包括折线图、柱状图、饼图等。`@visactor/react-vchart` 的组件具有高度的可定制性和可扩展性,可以通过传递不同的参数和配置来实现不同的图表效果。 + +`@visactor/react-vchart` 的主要特点包括: + +- **易于使用**:`@visactor/react-vchart` 提供了一系列易于使用的 React 组件,可以快速创建各种类型的图表。 +- **可定制性强**:`@visactor/react-vchart` 的组件具有高度的可定制性,可以通过传递不同的参数和配置来实现不同的图表效果。 +- **可扩展性强**:`@visactor/react-vchart` 的组件可以轻松地扩展和定制,可以根据需要添加新的功能和特性。 +- **兼容性好**:`@visactor/react-vchart` 完全继承了 VChart 的可视化能力,可以在不同的浏览器和设备上运行。 +- **支持多种图表类型**:`@visactor/react-vchart` 支持多种类型的图表,包括折线图、柱状图、饼图、雷达图等。 + +`@visactor/react-vchart` 在能力上完全对齐 VChart,并且 API 配置也与 VChart 几乎一致,关于图表的定义和配置可参考[VChart](https://www.visactor.io/vchart)。 + +## 开发指引 + +### Build + +```bash +# root directory +$ rush build +``` + +### Development + +```bash +# root directory +$ rush react +``` + +or + +```bash +$ cd packages/react-vchart +$ rushx start +``` + +## 文档指引 + +项目文档位于 `@visactor/react-vchart` 目录中的 [docs](./docs) 路径。 + +1. [快速开始](./docs/1.%20%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B.md) + - 环境要求 + - 安装 + - 引入 `@visactor/react-vchart` + - 绘制一个简单的柱状图 +2. 入门 + - [API 设计](./docs/2.1%20API%E8%AE%BE%E8%AE%A1.md) + - [统一图表标签](./docs//2.2%20%E7%BB%9F%E4%B8%80%E5%9B%BE%E8%A1%A8%E6%A0%87%E7%AD%BE.md) + - [语法化标签](./docs/2.3%20%E8%AF%AD%E6%B3%95%E5%8C%96%E6%A0%87%E7%AD%BE.md) +3. [事件交互](./docs/3.%20%E4%BA%8B%E4%BB%B6%E4%BA%A4%E4%BA%92.md) +4. [主题样式](./docs/4.%20%E4%B8%BB%E9%A2%98%E6%A0%B7%E5%BC%8F.md) +5. [FAQ](./docs/5.%20FAQ.md) +6. [更新日志](./docs/6.%20%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.md) diff --git a/packages/openinula-vchart/bundler.config.js b/packages/openinula-vchart/bundler.config.js new file mode 100644 index 0000000000..290254e012 --- /dev/null +++ b/packages/openinula-vchart/bundler.config.js @@ -0,0 +1,19 @@ +/** + * @type {import('@internal/bundler').Config} + */ +module.exports = { + name: 'ReactVChart', + formats: ['es', 'cjs', 'umd'], + outputDir: { + es: 'esm', + cjs: 'cjs', + umd: 'build' + }, + umdOutputFilename: 'index', + noEmitOnError: false, + globals: { + '@visactor/vchart': 'VChart', + '@visactor/vutils': 'VUtils' + }, + external: ['@visactor/vchart', '@visactor/vutils'] +}; diff --git a/packages/openinula-vchart/demo/index.html b/packages/openinula-vchart/demo/index.html new file mode 100644 index 0000000000..e0d1c84080 --- /dev/null +++ b/packages/openinula-vchart/demo/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/packages/openinula-vchart/demo/public/vite.svg b/packages/openinula-vchart/demo/public/vite.svg new file mode 100644 index 0000000000..e7b8dfb1b2 --- /dev/null +++ b/packages/openinula-vchart/demo/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/openinula-vchart/demo/src/App.css b/packages/openinula-vchart/demo/src/App.css new file mode 100644 index 0000000000..b9d355df2a --- /dev/null +++ b/packages/openinula-vchart/demo/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/packages/openinula-vchart/demo/src/App.tsx b/packages/openinula-vchart/demo/src/App.tsx new file mode 100644 index 0000000000..789ca230a7 --- /dev/null +++ b/packages/openinula-vchart/demo/src/App.tsx @@ -0,0 +1,345 @@ +import { useRef, useState } from 'openinula'; +import { + BarChart, + AreaChart, + LineChart, + ScatterChart, + PieChart, + RoseChart, + RadarChart, + FunnelChart, + CircularProgressChart, + LinearProgressChart, + RangeColumnChart, + BoxPlotChart, + Bar, + Axis, + Mark, + VChart, + Legend, + Tooltip, + ITooltipRenderProps +} from '../../src'; +import './App.css'; +import { generateData } from './util'; + +const data = generateData( + [ + { key: 'type', values: ['A', 'B'] }, + { key: 'gender', values: ['female', 'male'] } + ], + 10 +); + +const lineData = generateData([{ key: 'type', values: ['A', 'B', 'C'] }], 20); +const simpleData = [ + { + id: 'id0', + values: [ + { x: 'A', y: 0.2 }, + { x: 'B', y: 0.25 }, + { x: 'C', y: 0.35 } + ] + } +]; + +function App() { + const [count, setCount] = useState(0); + const [markFill, setMarkFill] = useState('red'); + const [barData, setBarData] = useState( + generateData( + [ + { key: 'type', values: ['A', 'B'] }, + { key: 'gender', values: ['female', 'male'] } + ], + 10 + ) + ); + const handleUpdateMark = () => { + if (markFill === 'red') { + setMarkFill('green'); + } else { + setMarkFill('red'); + } + }; + const handleClick = () => { + setBarData( + generateData( + [ + { key: 'type', values: ['A', 'B'] }, + { key: 'gender', values: ['female', 'male'] } + ], + 10 + ) + ); + }; + + const handleChartClick = (a: any) => { + console.log('chart, click'); + console.log(a); + + console.log('chartRef', chartRef); + }; + + const handleBarClick = (a: any) => { + console.log('bar click'); + console.log(a); + }; + + const handleLegendItemClick = (a: any) => { + console.log('legend item click'); + console.log(a); + }; + + const chartRef = useRef(null); + + return ( +
+ + + { + console.log(d); + }} + // axes={[ + // { orient: "bottom", type: "band" }, + // { orient: "left", label: { visible: true }, type: "linear" }, + // ]} + > + + + + + + 🔥 + + + ( +
🔥 {actualTooltip.title.value}
+ )} + > + + + +
+ + + + + + ( +
🔥 {actualTooltip.title.value}
+ )} + /> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + {/* + + */} + + + + + + + + + + + + datum.y + }, + { + value: 'test' + } + ] + }, + mark: { + position: 'top' + } + //renderMode: 'canvas' + } + }} + /> +
+ ); +} + +const TestTooltip = ({ actualTooltip }: ITooltipRenderProps) => ( +
🏀 {actualTooltip.title.value}
+); + +export default App; diff --git a/packages/openinula-vchart/demo/src/assets/react.svg b/packages/openinula-vchart/demo/src/assets/react.svg new file mode 100644 index 0000000000..6c87de9bb3 --- /dev/null +++ b/packages/openinula-vchart/demo/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/openinula-vchart/demo/src/index.css b/packages/openinula-vchart/demo/src/index.css new file mode 100644 index 0000000000..1123501587 --- /dev/null +++ b/packages/openinula-vchart/demo/src/index.css @@ -0,0 +1,69 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + /* display: flex; */ + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/packages/openinula-vchart/demo/src/main.tsx b/packages/openinula-vchart/demo/src/main.tsx new file mode 100644 index 0000000000..e80f3692d3 --- /dev/null +++ b/packages/openinula-vchart/demo/src/main.tsx @@ -0,0 +1,10 @@ +import React from 'openinula'; +import ReactDOM from 'openinula'; +import App from './App'; +import './index.css'; + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + + + +); diff --git a/packages/openinula-vchart/demo/src/util.ts b/packages/openinula-vchart/demo/src/util.ts new file mode 100644 index 0000000000..500b769808 --- /dev/null +++ b/packages/openinula-vchart/demo/src/util.ts @@ -0,0 +1,43 @@ +export const crossCats = (cats: Array<{ values: string[]; key: string }>, output: any[] = []): any[] => { + const firstCat = cats[0]; + + if (firstCat.key && firstCat.values?.length) { + const len = output.length; + + firstCat.values.forEach((val, catIndex) => { + if (len) { + for (let i = 0; i < len; i++) { + output[catIndex * len + i] = { ...output[i], [firstCat.key]: val }; + } + } else { + output[catIndex] = { [firstCat.key]: val }; + } + }); + } + + if (cats.length > 1) { + return crossCats(cats.slice(1), output); + } + + return output; +}; + +export const generateData = (cats: Array<{ values: string[]; key: string }>, size: number) => { + const baseData = crossCats(cats); + let res: any[] = []; + + baseData.forEach(entry => { + res = res.concat( + new Array(size).fill(0).map((val, index) => { + return { + ...entry, + y2: 0, + y: Math.floor(Math.random() * 300) + 600, + x: index + }; + }) + ); + }); + + return res; +}; diff --git a/packages/openinula-vchart/demo/src/vite-env.d.ts b/packages/openinula-vchart/demo/src/vite-env.d.ts new file mode 100644 index 0000000000..11f02fe2a0 --- /dev/null +++ b/packages/openinula-vchart/demo/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/openinula-vchart/demo/tsconfig.json b/packages/openinula-vchart/demo/tsconfig.json new file mode 100644 index 0000000000..3d0a51a86e --- /dev/null +++ b/packages/openinula-vchart/demo/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/packages/openinula-vchart/demo/tsconfig.node.json b/packages/openinula-vchart/demo/tsconfig.node.json new file mode 100644 index 0000000000..b242ad07b1 --- /dev/null +++ b/packages/openinula-vchart/demo/tsconfig.node.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true + }, + "include": [ + "vite.config.ts", + "vite.config.local.ts" + ] +} \ No newline at end of file diff --git a/packages/openinula-vchart/demo/vite.config.ts b/packages/openinula-vchart/demo/vite.config.ts new file mode 100644 index 0000000000..746c260b50 --- /dev/null +++ b/packages/openinula-vchart/demo/vite.config.ts @@ -0,0 +1,36 @@ +import { UserConfig, defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import path from 'path'; + +// let localConf: UserConfig = {}; + +// try { +// localConf = require('./vite.config.local').default; +// } catch (e) { +// console.warn('vite.config.local.ts not found', e); +// } + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + define: { + __DEV__: true, + __VERSION__: JSON.stringify(require('../../vchart/package.json').version) + }, + optimizeDeps: {}, + server: { + host: '0.0.0.0', + port: 3100 + // port: localConf.server?.port || 3100 + }, + resolve: { + alias: { + '@visactor/vchart': path.resolve(__dirname, '../../vchart/src/index.ts'), + '@visactor/vutils-extension': path.resolve(__dirname, '../../vutils-extension/src/index.ts'), + // ...localConf.resolve?.alias + react: 'openinula', // 新增 + 'react-dom': 'openinula', // 新增 + 'react/jsx-dev-runtime': 'openinula/jsx-dev-runtime' + } + } +}); diff --git "a/packages/openinula-vchart/docs/1. \345\277\253\351\200\237\345\274\200\345\247\213.md" "b/packages/openinula-vchart/docs/1. \345\277\253\351\200\237\345\274\200\345\247\213.md" new file mode 100644 index 0000000000..c0b49c9cda --- /dev/null +++ "b/packages/openinula-vchart/docs/1. \345\277\253\351\200\237\345\274\200\345\247\213.md" @@ -0,0 +1,68 @@ +# 快速开始 + +本教程将介绍如何使用 react-vchart 绘制一个简单的图表。VChart 是一款简单易用、跨平台、高性能的前端可视化图表库。图表由数据、series 系列和组件三部分组成,我们将使用配置项来声明图表。 + +## 环境要求 + +确保你的环境中安装了**node**,**npm**以及**React**,并且满足以下版本要求: + +- node 10.12.0+ + +- npm 6.4.0+ + +- react 16.0+ + +## 安装 + +### 使用包管理器安装 + +```shell +# 使用 npm 安装 +npm install @visactor/react-vchart + +# 使用 yarn 安装 +yarn add @visactor/react-vchart +``` + +## 引入 React-VChart + +推荐使用 npm 包引入 + +```js +import { BarChart, Bar } from '@visactor/react-vchart'; +``` + +## 绘制一个简单的柱状图 + +你可以像使用标准的 React 组件一样,使用通过`@visactor/react-vchart`导入的`BarChart`组件。 + +以下是一个简单柱状图是示例代码: + +```typescript +import React from 'openinula'; +import ReactDOM from 'openinula'; +import { BarChart, Bar } from '@visactor/react-vchart'; + +const barData = [ + { + id: 'barData', + values: [ + { month: 'Monday', sales: 22 }, + { month: 'Tuesday', sales: 13 }, + { month: 'Wednesday', sales: 25 }, + { month: 'Thursday', sales: 29 }, + { month: 'Friday', sales: 38 } + ] + } +]; + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + + + +); +``` + +上述例子中,`BarChart`为图表容器,`Bar`组件为柱状图元组件,一个图表容器中可以有多个图元组件,组成**组合图**。更多使用方法请参考[使用教程]()。 + +注意:上述例子中展示的图表定义方式是 React-VChart 提供的**语法化标签**API 风格,与统一图表标签的区别请参考[API 设计]()。 diff --git "a/packages/openinula-vchart/docs/2.1 API\350\256\276\350\256\241.md" "b/packages/openinula-vchart/docs/2.1 API\350\256\276\350\256\241.md" new file mode 100644 index 0000000000..6ffcf67892 --- /dev/null +++ "b/packages/openinula-vchart/docs/2.1 API\350\256\276\350\256\241.md" @@ -0,0 +1,103 @@ +# React-VChart 的 API 设计 + +React-VChart 提供两种风格的组件供开发者使用,分别是**统一图表标签**与**语法化标签**。这两种标签的使用场景略有区别。 + +## 1. 统一图表标签 + +- 封装大的 spec,提供 spec 的更新、卸载逻辑 + +- Ref 抛出图表实例,业务在 ref 上进行实例操作,包括注册交互事件 + +- 适用于 toB 页面,存在页面搭建类的产品页面 + +这种情况下使用的是`VChart`组件,该组件的功能完全对齐 VChart,同样接受一个完整的 spec 用于图表定义。 + +下面的例子是使用`VChart`实现的一个图表组件: + +```typescript +import React from 'openinula'; +import { VChart } from '@visactor/react-vchart'; + +function MyChart(props) { + const spec = { + type: 'bar', + data: [ + { + id: 'barData', + values: [ + { month: 'Monday', sales: 22 }, + { month: 'Tuesday', sales: 13 }, + { month: 'Wednesday', sales: 25 }, + { month: 'Thursday', sales: 29 }, + { month: 'Friday', sales: 38 } + ] + } + ], + xField: 'month', + yField: 'sales' + }; + + const onChartReady = (instance, isInitial: boolean) => { + instance.on('click', { level: 'mark', type: 'bar' }, e => { + console.log('bar click', e.datum.month); + }); + }; + + return ; +} + +export default MyChart; +``` + +## 2. 语法化标签 + +API 更接近 React 风格,图表组件定义更加灵活,方便进行图元组合和拆包按需加载。 + +```tsx +import React from 'openinula'; +import { BarChart, Bar, Axis, Legend } from '@visactor/react-vchart'; + +function MyChart(props) { + const barData = [ + { + id: 'barData', + values: [ + { month: 'Monday', sales: 22 }, + { month: 'Tuesday', sales: 13 }, + { month: 'Wednesday', sales: 25 }, + { month: 'Thursday', sales: 29 }, + { month: 'Friday', sales: 38 } + ] + } + ]; + + return ( + { + console.log('chart click', ev); + }} + > + { + console.log('bar click', ev); + }} + /> + + + { + console.log('legend click', ev); + }} + /> + + ); +} + +export default MyChart; +``` + +需要注意的是:虽然图表在定义上是通过 React 组件的形式进行声明的,但实际实现中并不是将其解析为 DOM 进行渲染,因此假如使用审查元素时并不能看到各个图表组件对应的 DOM。 diff --git "a/packages/openinula-vchart/docs/2.2 \347\273\237\344\270\200\345\233\276\350\241\250\346\240\207\347\255\276.md" "b/packages/openinula-vchart/docs/2.2 \347\273\237\344\270\200\345\233\276\350\241\250\346\240\207\347\255\276.md" new file mode 100644 index 0000000000..04a2d84ae5 --- /dev/null +++ "b/packages/openinula-vchart/docs/2.2 \347\273\237\344\270\200\345\233\276\350\241\250\346\240\207\347\255\276.md" @@ -0,0 +1,46 @@ +# 统一图表标签 + +正如前文所描述的,统一图表标签是接收的一个完整的**spec**作为图表定义,其**spec**的数据结构完全等同于VChart中的定义,因此开发者可以将任何对于VChart合法的spec送入React-VChart中进行图表渲染。 + +与直接使用VChart的不同点在于: + +- React-VChart内置了React封装,并且绑定了合理的组件生命周期 + +- 由于API风格的差异,开发者需要通过回调事件来获取图表实例,用于事件注册或其他操作 + +- 有些操作需要在VChart基类上进行,React-VChart同时也导出了VChart基类用于此类操作,其命名为`VChartCore`,详细内容在主题样式章节有展开说明 + +## 详细说明 + +如果你已经有了spec图表描述信息,使用统一图表标签是比较快捷的方式,只需要引入`VChart`组件即可: + +```typescript +import { VChart } from '@visactor/react-vchart'; +``` + +`VChart`组件即封装的React组件,其props定义如下: + +```typescript +interface VChartProps extends EventsProps { + /** 图表定义 */ + spec: any; + /** 画布宽度 */ + width?: number; + /** 画布高度 */ + height?: number; + /** 图表配置 */ + options?: ChartOptions; + /** 图表渲染完成事件 */ + onReady?: (instance: VChart, isInitial: boolean) => void; +} +``` + +`EventsProps`的定义参考事件交互章节 + +`onReady`是一个内置的回调事件,会在图表渲染或更新时触发,其入参分别代表图表实例对象,以及是否初次渲染。 + +举例来说,开发者可以在初次渲染时,将需要触发的回调事件注册在图表实例上以实现图表交互功能。 + +## 总结 + +VChart统一图表标签几乎是VChart的对等功能,可以方便开发者进行React版本的迁移,并且从社区或示例中心获得的spec可以直接通过这种方式使用,开发者几乎没有额外的学习成本。 diff --git "a/packages/openinula-vchart/docs/2.3 \350\257\255\346\263\225\345\214\226\346\240\207\347\255\276.md" "b/packages/openinula-vchart/docs/2.3 \350\257\255\346\263\225\345\214\226\346\240\207\347\255\276.md" new file mode 100644 index 0000000000..73ba5afa9e --- /dev/null +++ "b/packages/openinula-vchart/docs/2.3 \350\257\255\346\263\225\345\214\226\346\240\207\347\255\276.md" @@ -0,0 +1,213 @@ +# 语法化标签 + +语法化标签是指 React-VChart 将图表的图表容器以及各个组件都封装为 React 组件导出给开发者,开发者可以通过更加语义化、更接近原生 React 声明的方式来定义图表。需要说明的是语法化标签的定义内容,在多数场景下都是可以和图表描述 spec 进行相互转化的,本文主要的内容也是解释语法化标签与 spec 的关系。 + +## 标签的分类 + +目前 React-VChart 共导出了三种类型的组件标签,分别是图表标签、组件标签、系列标签 + +### 图表标签 + +图表类型的标签,包括以下这些: + +```typescript +import { + AreaChart, + BarChart, + LineChart, + ScatterChart, + PieChart, + RoseChart, + RadarChart, + MapChart, + HistogramChart, + WordCloudChart, + FunnelChart, + BoxPlotChart, + CircularProgressChart, + LinearProgressChart, + RangeColumnChart, + CommonChart +} from '@visactor/react-vchart'; +``` + +一般情况下使用这些标签直接决定了图表类型。而其中比较特殊的是 CommonChart,这是一个通用图表类型标签,可以用来实现组合图、双轴图等图表类型。更多组合图说明可参考:[组合图]() + +这些图表标签的 Props 定义为: + +```typescript +interface ChartComponent extends EventsProps { + /** 数据 */ + data?: IData; + /** 画布宽度 */ + width?: number; + /** 画布高度 */ + height?: number; + /** 图表配置 */ + options?: ChartOptions; + /** 图表渲染完成事件 */ + onReady?: (instance: VChart, isInitial: boolean) => void; +} +``` + +`EventsProps`的定义参考事件交互章节 + +`onReady`是一个内置的回调事件,会在图表渲染或更新时触发,其入参分别代表图表实例对象,以及是否初次渲染。 + +### 组件标签 + +组件标签是指 VChart 图表内部的可视化组件,包括以下这些: + +```typescript +import { + // 坐标轴组件 + Axis, + // 图例组件 + Legend, + // 自定义图元系列 + Mark, + // + Region +} from '@visactor/react-vchart'; +``` + +这些组件并不会真实的存在于 DOM 结构中,这样的写法只是为了更清晰的展示图表的结构组成。其中这些组件的配置项完全对齐 VChart 中对应组件的定义,区别在于原本的数据结构定义在此时可以作为 props 参数进行配置。 + +### 系列组件 + +系列组件是指和图表类型对应的图元系列所定义的组件。若指定了图表组件的类型,则应该使用与之对应的系列组件进行图元的定义,系列组件包含以下这些: + +```typescript +import { + Area, + Bar, + Line, + Scatter, + Map, + Pie, + Rose, + Radar, + Dot, + Link, + CircularProgress, + WordCloud, + Funnel, + LinearProgress, + RangeColumn, + BoxPlot +} from '@visactor/react-vchart'; +``` + +## 语法化标签的使用 + +首先明确语法化标签 props 定义的基本原则:语法标签的 props 与 spec 里对应组件的 api 定义是基本对等的,此外语法标签上新增了更多回调入口用于方便的进行事件挂载。 + +举例说明,现有折线图 spec 定义如下: + +```json +{ + "type": "line", + "data": [ + { + "id": "lineData", + "values": [ + { "State": "WY", "年龄段": "小于5岁", "人口数量": 25635 }, + { "State": "WY", "年龄段": "5至13岁", "人口数量": 1890 }, + { "State": "WY", "年龄段": "14至17岁", "人口数量": 9314 }, + { "State": "DC", "年龄段": "小于5岁", "人口数量": 30352 }, + { "State": "DC", "年龄段": "5至13岁", "人口数量": 20439 }, + { "State": "DC", "年龄段": "14至17岁", "人口数量": 10225 }, + { "State": "VT", "年龄段": "小于5岁", "人口数量": 38253 }, + { "State": "VT", "年龄段": "5至13岁", "人口数量": 42538 }, + { "State": "VT", "年龄段": "14至17岁", "人口数量": 15757 }, + { "State": "ND", "年龄段": "小于5岁", "人口数量": 51896 }, + { "State": "ND", "年龄段": "5至13岁", "人口数量": 67358 }, + { "State": "ND", "年龄段": "14至17岁", "人口数量": 18794 }, + { "State": "AK", "年龄段": "小于5岁", "人口数量": 72083 }, + { "State": "AK", "年龄段": "5至13岁", "人口数量": 85640 }, + { "State": "AK", "年龄段": "14至17岁", "人口数量": 22153 } + ] + } + ], + "xField": "State", + "yField": "人口数量", + "seriesField": "年龄段", + "legends": { + "visible": true, + "orient": "top" + }, + "axes": [ + { + "type": "band", + "orient": "bottom" + }, + { + "type": "linear", + "orient": "left", + "label": { + "style": { + "fill": "#aaa", + "fontSize": 14 + } + } + } + ] +} +``` + +与之对应的语法化标签定义如下: + +```typescript +import React from 'openinula'; +import { LineChart, Line, Axis, Legend } from '@visactor/react-vchart'; + +function MyChart(props) { + const lineData = [ + { + id: 'lineData', + values: [ + { State: 'WY', 年龄段: '小于5岁', 人口数量: 25635 }, + { State: 'WY', 年龄段: '5至13岁', 人口数量: 1890 }, + { State: 'WY', 年龄段: '14至17岁', 人口数量: 9314 }, + { State: 'DC', 年龄段: '小于5岁', 人口数量: 30352 }, + { State: 'DC', 年龄段: '5至13岁', 人口数量: 20439 }, + { State: 'DC', 年龄段: '14至17岁', 人口数量: 10225 }, + { State: 'VT', 年龄段: '小于5岁', 人口数量: 38253 }, + { State: 'VT', 年龄段: '5至13岁', 人口数量: 42538 }, + { State: 'VT', 年龄段: '14至17岁', 人口数量: 15757 }, + { State: 'ND', 年龄段: '小于5岁', 人口数量: 51896 }, + { State: 'ND', 年龄段: '5至13岁', 人口数量: 67358 }, + { State: 'ND', 年龄段: '14至17岁', 人口数量: 18794 }, + { State: 'AK', 年龄段: '小于5岁', 人口数量: 72083 }, + { State: 'AK', 年龄段: '5至13岁', 人口数量: 85640 }, + { State: 'AK', 年龄段: '14至17岁', 人口数量: 22153 } + ] + } + ]; + + return ( + { + console.log('chart click', ev); + }} + > + + + + { + console.log('legend click', ev); + }} + /> + + ); +} + +export default MyChart; +``` + +## 语法化标签未覆盖的组件 + +如果在使用 React-VChart 时涉及到语法化标签未覆盖的组件,可以使用统一图表标签作为兜底方案。 diff --git "a/packages/openinula-vchart/docs/3. \344\272\213\344\273\266\344\272\244\344\272\222.md" "b/packages/openinula-vchart/docs/3. \344\272\213\344\273\266\344\272\244\344\272\222.md" new file mode 100644 index 0000000000..244a305b5d --- /dev/null +++ "b/packages/openinula-vchart/docs/3. \344\272\213\344\273\266\344\272\244\344\272\222.md" @@ -0,0 +1,127 @@ +# 事件交互 + +## 统一图表标签/语法化图表标签的事件 + +统一图表标签(VChart)或是语法化图表标签(BarChart 等)最外层图表组件,其 Props 上都继承了图表的事件处理回调`EventsProps`。 + +`EventsProps`的定义如下: + +```typescript +interface EventsProps { + onPointerDown?: (e: any) => void | boolean; + onPointerUp?: (e: any) => void | boolean; + onPointerUpOutside?: (e: any) => void | boolean; + onPointerTap?: (e: any) => void | boolean; + onPointerOver?: (e: any) => void | boolean; + onPointerMove?: (e: any) => void | boolean; + onPointerEnter?: (e: any) => void | boolean; + onPointerLeave?: (e: any) => void | boolean; + onPointerOut?: (e: any) => void | boolean; + onMouseDown?: (e: any) => void | boolean; + onMouseUp?: (e: any) => void | boolean; + onMouseUpOutside?: (e: any) => void | boolean; + onMouseMove?: (e: any) => void | boolean; + onMouseOver?: (e: any) => void | boolean; + onMouseOut?: (e: any) => void | boolean; + onMouseEnter?: (e: any) => void | boolean; + onMouseLeave?: (e: any) => void | boolean; + onPinch?: (e: any) => void | boolean; + onPinchStart?: (e: any) => void | boolean; + onPinchEnd?: (e: any) => void | boolean; + onPan?: (e: any) => void | boolean; + onPanStart?: (e: any) => void | boolean; + onPanEnd?: (e: any) => void | boolean; + onDrag?: (e: any) => void | boolean; + onDragStart?: (e: any) => void | boolean; + onDragEnter?: (e: any) => void | boolean; + onDragLeave?: (e: any) => void | boolean; + onDragOver?: (e: any) => void | boolean; + onDragEnd?: (e: any) => void | boolean; + onRightDown?: (e: any) => void | boolean; + onRightUp?: (e: any) => void | boolean; + onRightUpOutside?: (e: any) => void | boolean; + onTouchStart?: (e: any) => void | boolean; + onTouchEnd?: (e: any) => void | boolean; + onTouchEndOutside?: (e: any) => void | boolean; + onTouchMove?: (e: any) => void | boolean; + onTouchCancel?: (e: any) => void | boolean; + onPress?: (e: any) => void | boolean; + onPressUp?: (e: any) => void | boolean; + onPressEnd?: (e: any) => void | boolean; + onSwipe?: (e: any) => void | boolean; + onDrop?: (e: any) => void | boolean; + onWeel?: (e: any) => void | boolean; + onClick?: (e: any) => void | boolean; + onDblClick?: (e: any) => void | boolean; +} +``` + +## 组件标签的事件 + +组件标签包括`Axis`、`Legend`、`Mark`、`Region` + +其中只有图例 Legend 有定义额外的事件,分别是: + +```typescript +interface EventsProps { + /** 图例项hover事件 */ + onLegendItemHover?: (e: any) => void | boolean; + /** 图例项hover事件 */ + onLegendItemUnHover?: (e: any) => void | boolean; + /** 图例项点击事件 */ + onLegendItemClick?: (e: any) => void | boolean; +} +``` + +## 系列组件的事件 + +系列组件(例如`Bar`、`Line`等组件)同样继承了`EventsProps`事件,详情可参考上文。 + +## 事件使用示例 + +```tsx +import React from 'openinula'; +import { BarChart, Bar, Axis, Legend } from '@visactor/react-vchart'; + +function MyChart(props) { + const barData = [ + { + id: 'barData', + values: [ + { month: 'Monday', sales: 22 }, + { month: 'Tuesday', sales: 13 }, + { month: 'Wednesday', sales: 25 }, + { month: 'Thursday', sales: 29 }, + { month: 'Friday', sales: 38 } + ] + } + ]; + + return ( + { + console.log('图表被点击', ev); + }} + > + { + console.log('柱形被点击', ev); + }} + /> + + + { + console.log('图例项被点击', ev); + }} + /> + + ); +} + +export default MyChart; +``` diff --git "a/packages/openinula-vchart/docs/4. \344\270\273\351\242\230\346\240\267\345\274\217.md" "b/packages/openinula-vchart/docs/4. \344\270\273\351\242\230\346\240\267\345\274\217.md" new file mode 100644 index 0000000000..342a1ac9e7 --- /dev/null +++ "b/packages/openinula-vchart/docs/4. \344\270\273\351\242\230\346\240\267\345\274\217.md" @@ -0,0 +1,81 @@ +# 主题样式 + +如果在 VChart 中使用自定义主题,可以通过两种方式实现,分别是在 spec 中定义 theme,以及通过`ThemeManager`注册主题。因为在 React-VChart 中,并不需要引用 VChart 的 npm 包。因此 React-VChart 中透出了 VChart 基类,命名为`VChartCore`,方便开发者在 VChart 的基类上通过静态方法注册自定义主题。 + +VChart 的主题配置请参考[VChart 主题]()。 + +## 示例 + +```tsx +import React from 'openinula'; +import { VChartCore, BarChart, Bar, Axis, Legend } from '@visactor/react-vchart'; + +const theme = { + colorScheme: { + default: [ + '#5383F4', + '#7BCF8E', + '#FF9D2C', + '#FFDB26', + '#7568D9', + '#80D8FB', + '#1857A3', + '#CAB0E8', + '#FF8867', + '#B9E493', + '#2CB4A8', + '#B9E4E3' + ] + }, + series: { + bar: { + barMaxWidth: 15, + label: { + visible: true, + position: 'top', + formatMethod: text => text + '%' + } + } + }, + component: { + axis: { + label: { + style: { fontFamily: 'Times New Roman' } + } + } + }, + markByName: { + bar: { + style: { + cornerRadius: 15 + } + } + } +}; + +// 注册主题 +VChartCore.ThemeManager.registerTheme('userTheme', theme); +// 应用主题 +VChartCore.ThemeManager.setCurrentTheme('userTheme'); + +function MyChart(props) { + const data = [ + { type: 'oxygen', value: '46.60' }, + { type: 'silicon', value: '27.72' }, + { type: 'aluminum', value: '8.13' }, + { type: 'iron', value: '5' }, + { type: 'calcium', value: '3.63' }, + { type: 'sodium', value: '2.83' }, + { type: 'potassium', value: '2.59' }, + { type: 'others', value: '3.5' } + ]; + + return ( + + + + ); +} + +export default MyChart; +``` diff --git a/packages/openinula-vchart/docs/5. FAQ.md b/packages/openinula-vchart/docs/5. FAQ.md new file mode 100644 index 0000000000..487f5e3f75 --- /dev/null +++ b/packages/openinula-vchart/docs/5. FAQ.md @@ -0,0 +1,7 @@ +# FAQ + +> 以下是在使用React-VChart过程中可能遇到的一些常见问题和解答。假如你没能找到你关心的问题,也可以到VisActor的[Github](https://github.com/VisActor/VChart)页面通过issues反馈。 + + + +## React-VChart diff --git "a/packages/openinula-vchart/docs/6. \346\233\264\346\226\260\346\227\245\345\277\227.md" "b/packages/openinula-vchart/docs/6. \346\233\264\346\226\260\346\227\245\345\277\227.md" new file mode 100644 index 0000000000..c5f9d177ea --- /dev/null +++ "b/packages/openinula-vchart/docs/6. \346\233\264\346\226\260\346\227\245\345\277\227.md" @@ -0,0 +1,7 @@ +# 更新日志 + +## 发布周期 + +当VChart版本有更新时,React-VChart会同步更新发布,版本号将会与VChart一致,以保障与VChart没有功能差异。 + +## 0.0.1 diff --git a/packages/openinula-vchart/docs/README.md b/packages/openinula-vchart/docs/README.md new file mode 100644 index 0000000000..3fb5565365 --- /dev/null +++ b/packages/openinula-vchart/docs/README.md @@ -0,0 +1,15 @@ +## 文档指引 + +1. [快速开始](./1.%20%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B.md) + - 环境要求 + - 安装 + - 引入 `@visactor/react-vchart` + - 绘制一个简单的柱状图 +2. 入门 + - [API 设计](./2.1%20API%E8%AE%BE%E8%AE%A1.md) + - [统一图表标签](.//2.2%20%E7%BB%9F%E4%B8%80%E5%9B%BE%E8%A1%A8%E6%A0%87%E7%AD%BE.md) + - [语法化标签](./2.3%20%E8%AF%AD%E6%B3%95%E5%8C%96%E6%A0%87%E7%AD%BE.md) +3. [事件交互](./3.%20%E4%BA%8B%E4%BB%B6%E4%BA%A4%E4%BA%92.md) +4. [主题样式](./4.%20%E4%B8%BB%E9%A2%98%E6%A0%B7%E5%BC%8F.md) +5. [FAQ](./5.%20FAQ.md) +6. [更新日志](./6.%20%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.md) diff --git a/packages/openinula-vchart/package.json b/packages/openinula-vchart/package.json new file mode 100644 index 0000000000..0c2ba69149 --- /dev/null +++ b/packages/openinula-vchart/package.json @@ -0,0 +1,81 @@ +{ + "name": "@visactor/openinula-vchart", + "version": "1.10.1", + "sideEffects": false, + "description": "The openinula version of VChart 4.x", + "keywords": [ + "openinula", + "charts", + "visualization", + "VChart", + "animation", + "storytelling", + "VisActor", + "graphics", + "interaction" + ], + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "esm/index.d.ts", + "files": [ + "esm", + "cjs", + "dist" + ], + "scripts": { + "compile": "tsc --noEmit", + "start": "vite ./demo", + "build": "bundle --clean" + }, + "dependencies": { + "@visactor/vchart": "workspace:1.10.1", + "@visactor/vutils": "~0.18.1", + "@visactor/vrender-core": "0.18.5", + "@visactor/vrender-kits": "0.18.5", + "@visactor/vgrammar-core": "0.12.4", + "react-is": "^18.2.0" + }, + "devDependencies": { + "@internal/bundler": "workspace:*", + "@internal/eslint-config": "workspace:*", + "@internal/ts-config": "workspace:*", + "@rushstack/eslint-patch": "~1.1.4", + "@types/jest": "^26.0.0", + "@types/offscreencanvas": "2019.6.4", + "jest": "^26.0.0", + "ts-jest": "^26.0.0", + "eslint": "~8.18.0", + "eslint-config-prettier": "8.5.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-react": "7.30.1", + "@rollup/plugin-typescript": "11.1.0", + "rollup": "3.20.5", + "tslib": "2.3.1", + "typescript": "4.9.5", + "@types/node": "*", + "@vitejs/plugin-react": "3.1.0", + "vite": "3.2.6", + "openinula": ">=0.1.2-SNAPSHOT" + }, + "peerDependencies": { + "openinula": ">=0.1.2-SNAPSHOT" + }, + "homepage": "https://www.visactor.io/vchart", + "bugs": "https://github.com/VisActor/VChart/issues", + "repository": { + "type": "git", + "url": "https://github.com/VisActor/VChart.git", + "directory": "packages/openinula-vchart" + }, + "author": { + "name": "VisActor", + "url": "https://www.visactor.io/" + }, + "license": "MIT", + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + } +} diff --git a/packages/openinula-vchart/rollup.config.js b/packages/openinula-vchart/rollup.config.js new file mode 100644 index 0000000000..a514a95502 --- /dev/null +++ b/packages/openinula-vchart/rollup.config.js @@ -0,0 +1,65 @@ +import { defineConfig } from 'rollup'; +import typescript from '@rollup/plugin-typescript'; + + +let options = defineConfig([ + // esm + { + input: 'src/index.ts', + output: [ + { + format: 'esm', + dir: 'esm', + preserveModules: true, + preserveModulesRoot: 'src' + } + ], + plugins: [ + typescript({ + tsconfig: './tsconfig.json', + target: 'es6', + declaration: true, + declarationDir: 'esm' + }), + ] + }, + // cjs + { + input: 'src/index.ts', + output: [ + { + format: 'cjs', + dir: 'cjs', + preserveModules: true, + preserveModulesRoot: 'src' + } + ], + plugins: [ + typescript({ + tsconfig: './tsconfig.json', + target: 'es6', + declaration: true, + declarationDir: 'cjs' + }), + ] + }, + // umd + { + input: 'src/index.ts', + output: [ + { + format: 'esm', + dir: 'esm', + preserveModules: true, + preserveModulesRoot: 'src' + } + ], + plugins: [ + typescript({ + tsconfig: './tsconfig.json', + }), + ] + }, +]); + +export default options; diff --git a/packages/openinula-vchart/src/VChart.tsx b/packages/openinula-vchart/src/VChart.tsx new file mode 100644 index 0000000000..4e193cd87e --- /dev/null +++ b/packages/openinula-vchart/src/VChart.tsx @@ -0,0 +1,9 @@ +import { BaseChartProps, createChart } from './charts/BaseChart'; +import VChartCore from '@visactor/vchart'; +export { VChartCore }; + +export type VChartProps = Omit; + +export const VChart = createChart('VChart', { + vchartConstrouctor: VChartCore +}); diff --git a/packages/openinula-vchart/src/VChartSimple.tsx b/packages/openinula-vchart/src/VChartSimple.tsx new file mode 100644 index 0000000000..f24ef26daa --- /dev/null +++ b/packages/openinula-vchart/src/VChartSimple.tsx @@ -0,0 +1,6 @@ +import type { IVChartConstructor } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './charts/BaseChart'; + +export type VChartSimpleProps = Omit; + +export const VChartSimple = createChart('VChartSimple'); diff --git a/packages/openinula-vchart/src/charts/AreaChart.tsx b/packages/openinula-vchart/src/charts/AreaChart.tsx new file mode 100644 index 0000000000..bde83a475c --- /dev/null +++ b/packages/openinula-vchart/src/charts/AreaChart.tsx @@ -0,0 +1,13 @@ +import React from 'openinula'; +import type { IAreaChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface AreaChartProps + extends Omit, + Omit {} + +export const AreaChart = createChart & { type: 'area' }>('AreaChart', { + type: 'area', + vchartConstrouctor: VChart +}); diff --git a/packages/openinula-vchart/src/charts/BarChart.tsx b/packages/openinula-vchart/src/charts/BarChart.tsx new file mode 100644 index 0000000000..f473f7987a --- /dev/null +++ b/packages/openinula-vchart/src/charts/BarChart.tsx @@ -0,0 +1,15 @@ +import React from 'openinula'; +import type { IBarChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface BarChartProps + extends Omit, + Omit { + // +} + +export const BarChart = createChart & { type: 'bar' }>('BarChart', { + type: 'bar', + vchartConstrouctor: VChart +}); diff --git a/packages/openinula-vchart/src/charts/BaseChart.tsx b/packages/openinula-vchart/src/charts/BaseChart.tsx new file mode 100644 index 0000000000..208c5394c5 --- /dev/null +++ b/packages/openinula-vchart/src/charts/BaseChart.tsx @@ -0,0 +1,291 @@ +import type { IVChart, IData, IInitOption, ISpec, IVChartConstructor } from '@visactor/vchart'; +import React, { useState, useEffect, useRef, useImperativeHandle, ReactNode } from 'openinula'; +import withContainer, { ContainerProps } from '../containers/withContainer'; +import RootChartContext, { ChartContextType } from '../context/chart'; +import type { IView } from '@visactor/vgrammar-core'; +import { isEqual, isNil, pickWithout } from '@visactor/vutils'; +import ViewContext from '../context/view'; +import { toArray } from '../util'; +import { REACT_PRIVATE_PROPS } from '../constants'; +import { + bindEventsToChart, + EventsProps, + CHART_EVENTS_KEYS, + CHART_EVENTS, + LegendEventProps, + ScrollBarEventProps, + BrushEventProps, + DataZoomEventProps, + PlayerEventProps, + DimensionEventProps, + HierarchyEventProps, + ChartLifeCycleEventProps +} from '../eventsUtils'; +import { IReactTooltipProps } from '../components/tooltip/interface'; +import { initCustomTooltip } from '../components/tooltip/util'; + +export type ChartOptions = Omit; + +export interface BaseChartProps + extends EventsProps, + LegendEventProps, + ScrollBarEventProps, + BrushEventProps, + DataZoomEventProps, + PlayerEventProps, + DimensionEventProps, + HierarchyEventProps, + ChartLifeCycleEventProps, + IReactTooltipProps { + vchartConstrouctor?: IVChartConstructor; + type?: string; + /** 上层container */ + container?: HTMLDivElement; + /** + * used only by + */ + spec?: ISpec; + /** 数据 */ + data?: IData; + /** 画布宽度 */ + width?: number; + /** 画布高度 */ + height?: number; + /** 图表配置 */ + options?: ChartOptions; + /** skip function diff when component update */ + skipFunctionDiff?: boolean; + /** 图表渲染完成事件 */ + onReady?: (instance: IVChart, isInitial: boolean) => void; + /** throw error when chart run into an error */ + onError?: (err: Error) => void; + /** + * use sync render + * + * @since 1.8.3 + * @deprecated 1.9.0 + **/ + useSyncRender?: boolean; +} + +type Props = React.PropsWithChildren; + +const notSpecKeys = [ + ...REACT_PRIVATE_PROPS, + ...CHART_EVENTS_KEYS, + 'vchartConstrouctor', + 'useSyncRender', + 'skipFunctionDiff', + 'onError', + 'onReady', + 'spec', + 'container', + 'options' +]; + +const getComponentId = (child: React.ReactNode, index: number) => { + const componentName = child && (child as any).type && ((child as any).type.displayName || (child as any).type.name); + return `${componentName}-${index}`; +}; + +const parseSpecFromChildren = (props: Props) => { + const specFromChildren: Omit = {}; + + toArray(props.children).map((child, index) => { + const parseSpec = child && (child as any).type && (child as any).type.parseSpec; + + if (parseSpec && (child as any).props) { + const childProps = isNil((child as any).props.componentId) + ? { + ...(child as any).props, + componentId: getComponentId(child, index) + } + : (child as any).props; + + const specResult = parseSpec(childProps); + + if (specResult.isSingle) { + specFromChildren[specResult.specName] = specResult.spec; + } else { + if (!specFromChildren[specResult.specName]) { + specFromChildren[specResult.specName] = []; + } + + specFromChildren[specResult.specName].push(specResult.spec); + } + } + }); + + return specFromChildren; +}; + +const BaseChart: React.FC = React.forwardRef((props, ref) => { + const [updateId, setUpdateId] = useState(0); + const chartContext = useRef({}); + useImperativeHandle(ref, () => chartContext.current?.chart); + const hasSpec = !!props.spec; + const [view, setView] = useState(null); + const isUnmount = useRef(false); + const prevSpec = useRef(pickWithout(props, notSpecKeys)); + const specFromChildren = useRef>(null); + const eventsBinded = React.useRef(null); + const skipFunctionDiff = !!props.skipFunctionDiff; + const [tooltipNode, setTooltipNode] = useState(null); + + const parseSpec = (props: Props) => { + let spec: ISpec = undefined; + + if (hasSpec && props.spec) { + spec = props.spec; + } else { + spec = { + ...prevSpec.current, + ...specFromChildren.current + } as ISpec; + } + + const tooltipSpec = initCustomTooltip(setTooltipNode, props, spec.tooltip); + if (tooltipSpec) { + spec.tooltip = tooltipSpec; + } + return spec; + }; + + const createChart = (props: Props) => { + const cs = new props.vchartConstrouctor(parseSpec(props), { + ...props.options, + onError: props.onError, + autoFit: true, + dom: props.container + }); + chartContext.current = { ...chartContext.current, chart: cs }; + isUnmount.current = false; + }; + + const handleChartRender = () => { + // rebind events after render + if (!isUnmount.current) { + if (!chartContext.current || !chartContext.current.chart) { + return; + } + + bindEventsToChart(chartContext.current.chart, props, eventsBinded.current, CHART_EVENTS); + + const newView = chartContext.current.chart.getCompiler().getVGrammarView(); + + setUpdateId(updateId + 1); + if (props.onReady) { + props.onReady(chartContext.current.chart, updateId === 0); + } + setView(newView); + } + }; + + const renderChart = () => { + if (chartContext.current.chart) { + chartContext.current.chart.renderSync({ + reuse: false + }); + handleChartRender(); + } + }; + + useEffect(() => { + const newSpecFromChildren = hasSpec ? null : parseSpecFromChildren(props); + + if (!chartContext.current?.chart) { + if (!hasSpec) { + specFromChildren.current = newSpecFromChildren; + } + + createChart(props); + renderChart(); + eventsBinded.current = props; + return; + } + + if (hasSpec) { + if (!isEqual(eventsBinded.current.spec, props.spec, { skipFunction: skipFunctionDiff })) { + eventsBinded.current = props; + chartContext.current.chart.updateSpecSync(parseSpec(props), undefined, { + morph: false, + enableExitAnimation: false + }); + handleChartRender(); + } + return; + } + + const newSpec = pickWithout(props, notSpecKeys); + + if ( + !isEqual(newSpec, prevSpec.current, { skipFunction: skipFunctionDiff }) || + !isEqual(newSpecFromChildren, specFromChildren.current) + ) { + prevSpec.current = newSpec; + specFromChildren.current = newSpecFromChildren; + + chartContext.current.chart.updateSpecSync(parseSpec(props), undefined, { + morph: false, + enableExitAnimation: false + }); + handleChartRender(); + } + }, [props]); + + useEffect(() => { + return () => { + if (chartContext) { + if (chartContext.current && chartContext.current.chart) { + chartContext.current.chart.release(); + chartContext.current.chart = null; + } + } + eventsBinded.current = null; + isUnmount.current = true; + }; + }, []); + + return ( + + + {toArray(props.children).map((child, index) => { + if (typeof child === 'string') { + return; + } + + const childId = getComponentId(child, index); + + return ( + + {React.cloneElement(child as React.ReactElement>, { + updateId: updateId, + componentId: childId + })} + + ); + })} + {tooltipNode} + + + ); +}); + +export const createChart = ( + componentName: string, + defaultProps?: Partial, + callback?: (props: T, defaultProps?: Partial) => T +) => { + const Com = withContainer(BaseChart as any, componentName, (props: T) => { + if (callback) { + return callback(props, defaultProps); + } + + if (defaultProps) { + return Object.assign(props, defaultProps); + } + return props; + }); + Com.displayName = componentName; + return Com; +}; diff --git a/packages/openinula-vchart/src/charts/BoxPlotChart.tsx b/packages/openinula-vchart/src/charts/BoxPlotChart.tsx new file mode 100644 index 0000000000..675ff51c1a --- /dev/null +++ b/packages/openinula-vchart/src/charts/BoxPlotChart.tsx @@ -0,0 +1,16 @@ +import React from 'openinula'; +import { IBoxPlotChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface BoxPlotChartProps + extends Omit, + Omit {} + +export const BoxPlotChart = createChart & { type: 'boxPlot' }>( + 'BoxPlotChart', + { + type: 'boxPlot', + vchartConstrouctor: VChart + } +); diff --git a/packages/openinula-vchart/src/charts/CircularProgressChart.tsx b/packages/openinula-vchart/src/charts/CircularProgressChart.tsx new file mode 100644 index 0000000000..f6ba362a1d --- /dev/null +++ b/packages/openinula-vchart/src/charts/CircularProgressChart.tsx @@ -0,0 +1,15 @@ +import React from 'openinula'; +import { ICircularProgressChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface CircularProgressChartProps + extends Omit, + Omit {} + +export const CircularProgressChart = createChart< + React.PropsWithChildren & { type: 'circularProgress' } +>('CircularProgressChart', { + type: 'circularProgress', + vchartConstrouctor: VChart +}); diff --git a/packages/openinula-vchart/src/charts/CommonChart.tsx b/packages/openinula-vchart/src/charts/CommonChart.tsx new file mode 100644 index 0000000000..f8651808d3 --- /dev/null +++ b/packages/openinula-vchart/src/charts/CommonChart.tsx @@ -0,0 +1,13 @@ +import React from 'openinula'; +import { ICommonChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface CommonChartProps + extends Omit, + Omit {} + +export const CommonChart = createChart & { type: 'common' }>('CommonChart', { + type: 'common', + vchartConstrouctor: VChart +}); diff --git a/packages/openinula-vchart/src/charts/FunnelChart.tsx b/packages/openinula-vchart/src/charts/FunnelChart.tsx new file mode 100644 index 0000000000..8bf9b4afd0 --- /dev/null +++ b/packages/openinula-vchart/src/charts/FunnelChart.tsx @@ -0,0 +1,13 @@ +import React from 'openinula'; +import { IFunnelChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface FunnelChartProps + extends Omit, + Omit {} + +export const FunnelChart = createChart & { type: 'funnel' }>('FunnelChart', { + type: 'funnel', + vchartConstrouctor: VChart +}); diff --git a/packages/openinula-vchart/src/charts/HistogramChart.tsx b/packages/openinula-vchart/src/charts/HistogramChart.tsx new file mode 100644 index 0000000000..95cdd24bb4 --- /dev/null +++ b/packages/openinula-vchart/src/charts/HistogramChart.tsx @@ -0,0 +1,16 @@ +import React from 'openinula'; +import { IHistogramChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface HistogramChartProps + extends Omit, + Omit {} + +export const HistogramChart = createChart & { type: 'histogram' }>( + 'HistogramChart', + { + type: 'histogram', + vchartConstrouctor: VChart + } +); diff --git a/packages/openinula-vchart/src/charts/LineChart.tsx b/packages/openinula-vchart/src/charts/LineChart.tsx new file mode 100644 index 0000000000..00b116661c --- /dev/null +++ b/packages/openinula-vchart/src/charts/LineChart.tsx @@ -0,0 +1,13 @@ +import React from 'openinula'; +import type { ILineChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface LineChartProps + extends Omit, + Omit {} + +export const LineChart = createChart & { type: 'line' }>('LineChart', { + type: 'line', + vchartConstrouctor: VChart +}); diff --git a/packages/openinula-vchart/src/charts/LinearProgressChart.tsx b/packages/openinula-vchart/src/charts/LinearProgressChart.tsx new file mode 100644 index 0000000000..74203e4e18 --- /dev/null +++ b/packages/openinula-vchart/src/charts/LinearProgressChart.tsx @@ -0,0 +1,15 @@ +import React from 'openinula'; +import { ILinearProgressChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface LinearProgressChartProps + extends Omit, + Omit {} + +export const LinearProgressChart = createChart< + React.PropsWithChildren & { type: 'linearProgress' } +>('LinearProgressChart', { + type: 'linearProgress', + vchartConstrouctor: VChart +}); diff --git a/packages/openinula-vchart/src/charts/MapChart.tsx b/packages/openinula-vchart/src/charts/MapChart.tsx new file mode 100644 index 0000000000..4d822a31c8 --- /dev/null +++ b/packages/openinula-vchart/src/charts/MapChart.tsx @@ -0,0 +1,13 @@ +import React from 'openinula'; +import type { IMapChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface MapChartProps + extends Omit, + Omit {} + +export const MapChart = createChart & { type: 'map' }>('MapChart', { + type: 'map', + vchartConstrouctor: VChart +}); diff --git a/packages/openinula-vchart/src/charts/PieChart.tsx b/packages/openinula-vchart/src/charts/PieChart.tsx new file mode 100644 index 0000000000..5f1560a947 --- /dev/null +++ b/packages/openinula-vchart/src/charts/PieChart.tsx @@ -0,0 +1,13 @@ +import React from 'openinula'; +import type { IPieChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface PieChartProps + extends Omit, + Omit {} + +export const PieChart = createChart & { type: 'pie' }>('PieChart', { + type: 'pie', + vchartConstrouctor: VChart +}); diff --git a/packages/openinula-vchart/src/charts/RadarChart.tsx b/packages/openinula-vchart/src/charts/RadarChart.tsx new file mode 100644 index 0000000000..754b9e4daa --- /dev/null +++ b/packages/openinula-vchart/src/charts/RadarChart.tsx @@ -0,0 +1,13 @@ +import React from 'openinula'; +import type { IRadarChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface RadarChartProps + extends Omit, + Omit {} + +export const RadarChart = createChart & { type: 'radar' }>('RadarChart', { + type: 'radar', + vchartConstrouctor: VChart +}); diff --git a/packages/openinula-vchart/src/charts/RangeColumnChart.tsx b/packages/openinula-vchart/src/charts/RangeColumnChart.tsx new file mode 100644 index 0000000000..f6a67888f3 --- /dev/null +++ b/packages/openinula-vchart/src/charts/RangeColumnChart.tsx @@ -0,0 +1,16 @@ +import React from 'openinula'; +import type { IRangeColumnChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface RangeColumnChartProps + extends Omit, + Omit {} + +export const RangeColumnChart = createChart & { type: 'rangeColumn' }>( + 'RangeColumnChart', + { + type: 'rangeColumn', + vchartConstrouctor: VChart + } +); diff --git a/packages/openinula-vchart/src/charts/RoseChart.tsx b/packages/openinula-vchart/src/charts/RoseChart.tsx new file mode 100644 index 0000000000..3bffd82645 --- /dev/null +++ b/packages/openinula-vchart/src/charts/RoseChart.tsx @@ -0,0 +1,13 @@ +import React from 'openinula'; +import type { IRoseChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface RoseChartProps + extends Omit, + Omit {} + +export const RoseChart = createChart & { type: 'rose' }>('RoseChart', { + type: 'rose', + vchartConstrouctor: VChart +}); diff --git a/packages/openinula-vchart/src/charts/ScatterChart.tsx b/packages/openinula-vchart/src/charts/ScatterChart.tsx new file mode 100644 index 0000000000..aad710ccde --- /dev/null +++ b/packages/openinula-vchart/src/charts/ScatterChart.tsx @@ -0,0 +1,16 @@ +import React from 'openinula'; +import type { IScatterChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface ScatterChartProps + extends Omit, + Omit {} + +export const ScatterChart = createChart & { type: 'scatter' }>( + 'ScatterChart', + { + type: 'scatter', + vchartConstrouctor: VChart + } +); diff --git a/packages/openinula-vchart/src/charts/SequenceChart.tsx b/packages/openinula-vchart/src/charts/SequenceChart.tsx new file mode 100644 index 0000000000..d1429c7896 --- /dev/null +++ b/packages/openinula-vchart/src/charts/SequenceChart.tsx @@ -0,0 +1,16 @@ +import React from 'openinula'; +import type { ISequenceChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface SequenceChartProps + extends Omit, + Omit {} + +export const SequenceChart = createChart & { type: 'sequence' }>( + 'SequenceChart', + { + type: 'sequence', + vchartConstrouctor: VChart + } +); diff --git a/packages/openinula-vchart/src/charts/WordCloudChart.tsx b/packages/openinula-vchart/src/charts/WordCloudChart.tsx new file mode 100644 index 0000000000..456473218f --- /dev/null +++ b/packages/openinula-vchart/src/charts/WordCloudChart.tsx @@ -0,0 +1,16 @@ +import React from 'openinula'; +import type { IWordCloudChartSpec } from '@visactor/vchart'; +import { default as VChart } from '@visactor/vchart'; +import { BaseChartProps, createChart } from './BaseChart'; + +export interface WordCloudChartProps + extends Omit, + Omit {} + +export const WordCloudChart = createChart & { type: 'wordCloud' }>( + 'WordCloudChart', + { + type: 'wordCloud', + vchartConstrouctor: VChart + } +); diff --git a/packages/openinula-vchart/src/charts/index.ts b/packages/openinula-vchart/src/charts/index.ts new file mode 100644 index 0000000000..7680998f9e --- /dev/null +++ b/packages/openinula-vchart/src/charts/index.ts @@ -0,0 +1,24 @@ +export * from './AreaChart'; +export * from './BarChart'; +export * from './LineChart'; +export * from './ScatterChart'; + +export * from './PieChart'; +export * from './RoseChart'; + +export * from './RadarChart'; + +export * from './MapChart'; +export * from './HistogramChart'; +export * from './WordCloudChart'; +export * from './FunnelChart'; +export * from './BoxPlotChart'; + +export * from './CircularProgressChart'; +export * from './LinearProgressChart'; +export * from './RangeColumnChart'; + +export * from './CommonChart'; + +export type { ChartOptions } from './BaseChart'; +export type { IData, IChartSpec } from '@visactor/vchart'; diff --git a/packages/openinula-vchart/src/components/Axis.tsx b/packages/openinula-vchart/src/components/Axis.tsx new file mode 100644 index 0000000000..d7d83a1ca0 --- /dev/null +++ b/packages/openinula-vchart/src/components/Axis.tsx @@ -0,0 +1,6 @@ +import { BaseComponentProps, createComponent } from './BaseComponent'; +import type { ICartesianAxisSpec, IPolarAxisSpec } from '@visactor/vchart'; + +export type AxisProps = (ICartesianAxisSpec | IPolarAxisSpec) & BaseComponentProps; + +export const Axis = createComponent('Axis', 'axes'); diff --git a/packages/openinula-vchart/src/components/BaseComponent.tsx b/packages/openinula-vchart/src/components/BaseComponent.tsx new file mode 100644 index 0000000000..5e73fc7cda --- /dev/null +++ b/packages/openinula-vchart/src/components/BaseComponent.tsx @@ -0,0 +1,62 @@ +import React, { useContext, useEffect } from 'openinula'; +import { pickWithout } from '@visactor/vutils'; + +import RootChartContext from '../context/chart'; +import { bindEventsToChart } from '../eventsUtils'; + +export interface BaseComponentProps { + id?: string | number; +} + +type ComponentProps = BaseComponentProps & { updateId?: number; componentId?: number }; + +export const createComponent = ( + componentName: string, + specName: string, + supportedEvents?: Record | null, + isSingle?: boolean +) => { + const ignoreKeys = ['id', 'updateId', 'componentId']; + const notSpecKeys = supportedEvents ? Object.keys(supportedEvents).concat(ignoreKeys) : ignoreKeys; + + const Comp: React.FC = (props: T) => { + const context = useContext(RootChartContext); + const eventsBinded = React.useRef(null); + const updateId = React.useRef(props.updateId); + if (props.updateId !== updateId.current) { + // update triggered by chart when chart is rendered + updateId.current = props.updateId; + + // rebind events after chart render + const hasPrevEventsBinded = supportedEvents + ? bindEventsToChart(context.chart, props, eventsBinded.current, supportedEvents) + : false; + if (hasPrevEventsBinded) { + eventsBinded.current = props; + } + } + + useEffect(() => { + return () => { + if (supportedEvents) { + bindEventsToChart(context.chart, null, eventsBinded.current, supportedEvents); + } + }; + }, []); + + return null; + }; + + Comp.displayName = componentName; + (Comp as any).parseSpec = (props: T & { updateId?: number; componentId?: string }) => { + const newComponentSpec: Partial = pickWithout(props, notSpecKeys); + + return { + spec: newComponentSpec, + specName, + isSingle + }; + }; + + return Comp; +}; diff --git a/packages/openinula-vchart/src/components/Brush.tsx b/packages/openinula-vchart/src/components/Brush.tsx new file mode 100644 index 0000000000..ea2112ffab --- /dev/null +++ b/packages/openinula-vchart/src/components/Brush.tsx @@ -0,0 +1,7 @@ +import { BRUSH_CUSTOMIZED_EVENTS, BrushEventProps } from '../eventsUtils'; +import { BaseComponentProps, createComponent } from './BaseComponent'; +import type { IBrushSpec } from '@visactor/vchart'; + +export type BrushProps = IBrushSpec & BaseComponentProps & BrushEventProps; + +export const Brush = createComponent('Brush', 'brush', BRUSH_CUSTOMIZED_EVENTS, true); diff --git a/packages/openinula-vchart/src/components/Crosshair.tsx b/packages/openinula-vchart/src/components/Crosshair.tsx new file mode 100644 index 0000000000..b9bdb08f69 --- /dev/null +++ b/packages/openinula-vchart/src/components/Crosshair.tsx @@ -0,0 +1,6 @@ +import { BaseComponentProps, createComponent } from './BaseComponent'; +import type { ICartesianCrosshairSpec, IPolarCrosshairSpec } from '@visactor/vchart'; + +export type CrosshairProps = (ICartesianCrosshairSpec | IPolarCrosshairSpec) & BaseComponentProps; + +export const Crosshair = createComponent('Crosshair', 'crosshair'); diff --git a/packages/openinula-vchart/src/components/DataZoom.tsx b/packages/openinula-vchart/src/components/DataZoom.tsx new file mode 100644 index 0000000000..46bfc0aff8 --- /dev/null +++ b/packages/openinula-vchart/src/components/DataZoom.tsx @@ -0,0 +1,6 @@ +import { DATAZOOM_CUSTOMIZED_EVENTS, DataZoomEventProps } from '../eventsUtils'; +import { BaseComponentProps, createComponent } from './BaseComponent'; +import type { IDataZoomSpec } from '@visactor/vchart'; + +export type DataZoomProps = IDataZoomSpec & BaseComponentProps & DataZoomEventProps; +export const DataZoom = createComponent('DataZoom', 'dataZoom', DATAZOOM_CUSTOMIZED_EVENTS); diff --git a/packages/openinula-vchart/src/components/Indicator.tsx b/packages/openinula-vchart/src/components/Indicator.tsx new file mode 100644 index 0000000000..5236550723 --- /dev/null +++ b/packages/openinula-vchart/src/components/Indicator.tsx @@ -0,0 +1,6 @@ +import { BaseComponentProps, createComponent } from './BaseComponent'; +import type { IIndicatorSpec } from '@visactor/vchart'; + +export type IndicatorProps = IIndicatorSpec & BaseComponentProps; + +export const Indicator = createComponent('Indicator', 'indicator', null, true); diff --git a/packages/openinula-vchart/src/components/Legend.tsx b/packages/openinula-vchart/src/components/Legend.tsx new file mode 100644 index 0000000000..03beeaed53 --- /dev/null +++ b/packages/openinula-vchart/src/components/Legend.tsx @@ -0,0 +1,7 @@ +import type { IDiscreteLegendSpec } from '@visactor/vchart'; +import { LEGEND_CUSTOMIZED_EVENTS, LegendEventProps } from '../eventsUtils'; +import { BaseComponentProps, createComponent } from './BaseComponent'; + +export type LegendProps = BaseComponentProps & IDiscreteLegendSpec & LegendEventProps; + +export const Legend = createComponent('Legend', 'legends', LEGEND_CUSTOMIZED_EVENTS); diff --git a/packages/openinula-vchart/src/components/Mark.tsx b/packages/openinula-vchart/src/components/Mark.tsx new file mode 100644 index 0000000000..704926ea98 --- /dev/null +++ b/packages/openinula-vchart/src/components/Mark.tsx @@ -0,0 +1,6 @@ +import type { ICustomMarkSpec, EnableMarkType } from '@visactor/vchart'; +import { BaseComponentProps, createComponent } from './BaseComponent'; + +export type MarkProps = ICustomMarkSpec & BaseComponentProps; + +export const Mark = createComponent('Mark', 'customMark'); diff --git a/packages/openinula-vchart/src/components/MarkArea.tsx b/packages/openinula-vchart/src/components/MarkArea.tsx new file mode 100644 index 0000000000..e4e56c83fe --- /dev/null +++ b/packages/openinula-vchart/src/components/MarkArea.tsx @@ -0,0 +1,6 @@ +import { BaseComponentProps, createComponent } from './BaseComponent'; +import type { IMarkAreaSpec } from '@visactor/vchart'; + +export type MarkAreaProps = IMarkAreaSpec & BaseComponentProps; + +export const MarkArea = createComponent('MarkArea', 'markArea'); diff --git a/packages/openinula-vchart/src/components/MarkLine.tsx b/packages/openinula-vchart/src/components/MarkLine.tsx new file mode 100644 index 0000000000..68ac131801 --- /dev/null +++ b/packages/openinula-vchart/src/components/MarkLine.tsx @@ -0,0 +1,6 @@ +import { BaseComponentProps, createComponent } from './BaseComponent'; +import type { IMarkLineSpec } from '@visactor/vchart'; + +export type MarkLineProps = IMarkLineSpec & BaseComponentProps; + +export const MarkLine = createComponent('MarkLine', 'markLine'); diff --git a/packages/openinula-vchart/src/components/MarkPoint.tsx b/packages/openinula-vchart/src/components/MarkPoint.tsx new file mode 100644 index 0000000000..5e7b396648 --- /dev/null +++ b/packages/openinula-vchart/src/components/MarkPoint.tsx @@ -0,0 +1,6 @@ +import { BaseComponentProps, createComponent } from './BaseComponent'; +import type { IMarkPointSpec } from '@visactor/vchart'; + +export type MarkPointProps = IMarkPointSpec & BaseComponentProps; + +export const MarkPoint = createComponent('MarkPoint', 'markPoint'); diff --git a/packages/openinula-vchart/src/components/Player.tsx b/packages/openinula-vchart/src/components/Player.tsx new file mode 100644 index 0000000000..8fdce392f6 --- /dev/null +++ b/packages/openinula-vchart/src/components/Player.tsx @@ -0,0 +1,7 @@ +import { PLAYER_CUSTOMIZED_EVENTS, PlayerEventProps } from '../eventsUtils'; +import { BaseComponentProps, createComponent } from './BaseComponent'; +import type { IPlayerSpec } from '@visactor/vchart'; + +export type PlayerProps = IPlayerSpec & BaseComponentProps & PlayerEventProps; + +export const Player = createComponent('Player', 'player', PLAYER_CUSTOMIZED_EVENTS, true); diff --git a/packages/openinula-vchart/src/components/Region.tsx b/packages/openinula-vchart/src/components/Region.tsx new file mode 100644 index 0000000000..570ff53b24 --- /dev/null +++ b/packages/openinula-vchart/src/components/Region.tsx @@ -0,0 +1,8 @@ +import type { IRegionSpec } from '@visactor/vchart'; +import { BaseComponentProps, createComponent } from './BaseComponent'; + +export interface RegionProps extends BaseComponentProps, IRegionSpec { + // +} + +export const Region = createComponent('Region', 'region'); diff --git a/packages/openinula-vchart/src/components/ScrollBar.tsx b/packages/openinula-vchart/src/components/ScrollBar.tsx new file mode 100644 index 0000000000..06d330cf77 --- /dev/null +++ b/packages/openinula-vchart/src/components/ScrollBar.tsx @@ -0,0 +1,7 @@ +import { SCROLLBAR_CUSTOMIZED_EVENTS, ScrollBarEventProps } from '../eventsUtils'; +import { BaseComponentProps, createComponent } from './BaseComponent'; +import type { IScrollBarSpec } from '@visactor/vchart'; + +export type ScrollBarProps = IScrollBarSpec & BaseComponentProps & ScrollBarEventProps; + +export const ScrollBar = createComponent('ScrollBar', 'scrollBar', SCROLLBAR_CUSTOMIZED_EVENTS); diff --git a/packages/openinula-vchart/src/components/Title.tsx b/packages/openinula-vchart/src/components/Title.tsx new file mode 100644 index 0000000000..7d342c72c6 --- /dev/null +++ b/packages/openinula-vchart/src/components/Title.tsx @@ -0,0 +1,6 @@ +import { BaseComponentProps, createComponent } from './BaseComponent'; +import type { ITitleSpec } from '@visactor/vchart'; + +export type TitleProps = ITitleSpec & BaseComponentProps; + +export const Title = createComponent('Title', 'title', null, true); diff --git a/packages/openinula-vchart/src/components/index.ts b/packages/openinula-vchart/src/components/index.ts new file mode 100644 index 0000000000..9bfb16899a --- /dev/null +++ b/packages/openinula-vchart/src/components/index.ts @@ -0,0 +1,15 @@ +export * from './Axis'; +export * from './Mark'; +export * from './Region'; +export * from './Legend'; +export * from './Brush'; +export * from './Crosshair'; +export * from './DataZoom'; +export * from './MarkLine'; +export * from './MarkArea'; +export * from './MarkPoint'; +export * from './ScrollBar'; +export * from './tooltip'; +export * from './Player'; +export * from './Indicator'; +export * from './Title'; diff --git a/packages/openinula-vchart/src/components/tooltip/Tooltip.tsx b/packages/openinula-vchart/src/components/tooltip/Tooltip.tsx new file mode 100644 index 0000000000..41df0cfcd2 --- /dev/null +++ b/packages/openinula-vchart/src/components/tooltip/Tooltip.tsx @@ -0,0 +1,4 @@ +import { createComponent } from '../BaseComponent'; +import { TooltipProps } from './interface'; + +export const Tooltip = createComponent('Tooltip', 'tooltip', null, true); diff --git a/packages/openinula-vchart/src/components/tooltip/constant.ts b/packages/openinula-vchart/src/components/tooltip/constant.ts new file mode 100644 index 0000000000..52a6c8fc86 --- /dev/null +++ b/packages/openinula-vchart/src/components/tooltip/constant.ts @@ -0,0 +1,3 @@ +import { PREFIX } from '@visactor/vchart'; + +export const REACT_TOOLTIP_ClASS_NAME = `${PREFIX}_REACT_TOOLTIP`; diff --git a/packages/openinula-vchart/src/components/tooltip/index.ts b/packages/openinula-vchart/src/components/tooltip/index.ts new file mode 100644 index 0000000000..10902aba8a --- /dev/null +++ b/packages/openinula-vchart/src/components/tooltip/index.ts @@ -0,0 +1,3 @@ +export * from './Tooltip'; +export * from './interface'; +export * from './constant'; diff --git a/packages/openinula-vchart/src/components/tooltip/interface.ts b/packages/openinula-vchart/src/components/tooltip/interface.ts new file mode 100644 index 0000000000..7e86a192c4 --- /dev/null +++ b/packages/openinula-vchart/src/components/tooltip/interface.ts @@ -0,0 +1,30 @@ +import { PropsWithChildren, ReactNode } from 'openinula'; +import { BaseComponentProps } from '../BaseComponent'; +import type { ITooltipSpec, ITooltipActual, TooltipHandlerParams } from '@visactor/vchart'; + +export type TooltipProps = PropsWithChildren; + +export interface ITooltipRenderProps { + tooltipElement: HTMLElement; + actualTooltip: ITooltipActual; + params: TooltipHandlerParams; +} + +export type TooltipRender = ( + tooltipElement: HTMLElement, + actualTooltip: ITooltipActual, + params: TooltipHandlerParams +) => ReactNode; + +export interface IReactTooltipProps { + /** + * tooltip 自定义渲染器 + * @since 1.10.0 + */ + tooltipRender?: TooltipRender; + /** + * 在应用 `tooltipRender` 配置时,是否保留默认 tooltip dom 元素的显示 + * @since 1.10.0 + */ + reserveDefaultTooltip?: boolean; +} diff --git a/packages/openinula-vchart/src/components/tooltip/util.tsx b/packages/openinula-vchart/src/components/tooltip/util.tsx new file mode 100644 index 0000000000..bc4540556b --- /dev/null +++ b/packages/openinula-vchart/src/components/tooltip/util.tsx @@ -0,0 +1,69 @@ +import React from 'openinula'; +import type { BaseChartProps } from '../../charts/BaseChart'; +import { TooltipProps, TooltipRender } from './interface'; +import { isObject } from '@visactor/vutils'; +import { ITooltipSpec } from '@visactor/vchart'; +import { REACT_TOOLTIP_ClASS_NAME } from './constant'; +import { createPortal } from 'openinula'; + +/** tooltip 自定义插槽 */ +export const initCustomTooltip = ( + setTooltipNode: React.Dispatch>, + props: BaseChartProps, + spec?: TooltipProps +) => { + let render: TooltipRender = undefined; + if (spec?.tooltipRender) { + render = spec.tooltipRender; + delete spec.tooltipRender; + } else if (spec?.children) { + render = (tooltipElement, actualTooltip, params) => + React.Children.map(spec.children, child => + isObject(child) + ? React.cloneElement(child as React.ReactElement>, { + tooltipElement, + actualTooltip, + params + }) + : child + ); + } else if (props.tooltipRender) { + render = props.tooltipRender; + } + + if (render) { + let reserve: boolean = undefined; + if (spec?.reserveDefaultTooltip) { + reserve = spec.reserveDefaultTooltip; + delete spec.reserveDefaultTooltip; + } else { + reserve = props.reserveDefaultTooltip; + } + return { + ...spec, + updateElement: (el, actualTooltip, params) => { + const { changePositionOnly } = params; + if (changePositionOnly) { + return; + } + if (!reserve) { + el.style.width = 'auto'; + el.style.height = 'auto'; + el.style.minHeight = 'auto'; + el.style.padding = '0px'; + for (let i = 0; i < el.children.length; i++) { + const childNode = el.children[i] as HTMLElement; + if (childNode.className !== REACT_TOOLTIP_ClASS_NAME && childNode.style.display !== 'none') { + childNode.style.display = 'none'; + } + } + } + setTooltipNode( + createPortal(
{render(el, actualTooltip, params)}
, el) + ); + } + } as ITooltipSpec; + } + + return spec as ITooltipSpec; +}; diff --git a/packages/openinula-vchart/src/constants.ts b/packages/openinula-vchart/src/constants.ts new file mode 100644 index 0000000000..9efd918036 --- /dev/null +++ b/packages/openinula-vchart/src/constants.ts @@ -0,0 +1 @@ +export const REACT_PRIVATE_PROPS = ['children', 'hooks', 'ref']; diff --git a/packages/openinula-vchart/src/containers/withContainer.tsx b/packages/openinula-vchart/src/containers/withContainer.tsx new file mode 100644 index 0000000000..825d9371b2 --- /dev/null +++ b/packages/openinula-vchart/src/containers/withContainer.tsx @@ -0,0 +1,45 @@ +import React, { useRef, useState, useLayoutEffect } from 'openinula'; + +export interface ContainerProps { + style?: React.CSSProperties; + className?: string; + width?: number | string; + height?: number | string; +} + +export default function withContainer( + Comp: any, + name = 'ChartContainer', + getProps?: (props: any) => CompProps +) { + const Cls = React.forwardRef((props: CompProps & Props, ref) => { + const container = useRef(); + const [inited, setInited] = useState(false); + const { className, style, width, ...options } = props; + + useLayoutEffect(() => { + setInited(true); + }, []); + + return ( +
+ {inited ? ( + + ) : ( + <> + )} +
+ ); + }); + Cls.displayName = name || Comp.name; + return Cls; +} diff --git a/packages/openinula-vchart/src/context/chart.tsx b/packages/openinula-vchart/src/context/chart.tsx new file mode 100644 index 0000000000..675333914f --- /dev/null +++ b/packages/openinula-vchart/src/context/chart.tsx @@ -0,0 +1,24 @@ +import React from 'openinula'; +import type { IVChart } from '@visactor/vchart'; + +export interface ChartContextType { + chart?: IVChart; + isChildrenUpdated?: boolean; +} + +const ChartContext = React.createContext(null); +ChartContext.displayName = 'ChartContext'; + +export function withChartInstance(Component: typeof React.Component) { + const Com = React.forwardRef((props: T, ref) => { + return ( + + {(ctx: ChartContextType) => } + + ); + }); + Com.displayName = Component.name; + return Com; +} + +export default ChartContext; diff --git a/packages/openinula-vchart/src/context/stage.tsx b/packages/openinula-vchart/src/context/stage.tsx new file mode 100644 index 0000000000..38c2aec625 --- /dev/null +++ b/packages/openinula-vchart/src/context/stage.tsx @@ -0,0 +1,15 @@ +import React from 'openinula'; +import type { IStage } from '@visactor/vrender-core'; + +const StageContext = React.createContext(null); +StageContext.displayName = 'StageContext'; + +export function withStage(Component: typeof React.Component) { + const Com = React.forwardRef((props: T, ref) => { + return {ctx => }; + }); + Com.displayName = Component.name; + return Com; +} + +export default StageContext; diff --git a/packages/openinula-vchart/src/context/view.tsx b/packages/openinula-vchart/src/context/view.tsx new file mode 100644 index 0000000000..3ac8d011b3 --- /dev/null +++ b/packages/openinula-vchart/src/context/view.tsx @@ -0,0 +1,15 @@ +import React from 'openinula'; +import type { IView } from '@visactor/vgrammar-core'; + +const ViewContext = React.createContext(null); +ViewContext.displayName = 'ViewContext'; + +export function withView(Component: typeof React.Component) { + const Com = React.forwardRef((props: T, ref) => { + return {ctx => }; + }); + Com.displayName = Component.name; + return Com; +} + +export default ViewContext; diff --git a/packages/openinula-vchart/src/eventsUtils.ts b/packages/openinula-vchart/src/eventsUtils.ts new file mode 100644 index 0000000000..5ee9f57605 --- /dev/null +++ b/packages/openinula-vchart/src/eventsUtils.ts @@ -0,0 +1,264 @@ +import type { IVChart, EventCallback, EventParamsDefinition } from '@visactor/vchart'; + +export interface LegendEventProps { + onLegendItemHover?: (e: any) => void; + onLegendItemUnHover?: (e: any) => void; + onLegendItemClick?: (e: any) => void; + onLegendFilter?: (e: any) => void; + onLegendSelectedDataChange?: (e: any) => void; +} + +export interface BrushEventProps { + onBrushStart?: (e: any) => void; + onBrushChange?: (e: any) => void; + onBrushEnd?: (e: any) => void; +} + +export interface DataZoomEventProps { + onDataZoomChange?: (e: any) => void; +} + +export interface PlayerEventProps { + onPlayerPlay?: (e: any) => void; + onPlayerPause?: (e: any) => void; + onPlayerEnd?: (e: any) => void; + onPlayerChange?: (e: any) => void; + onPlayerForward?: (e: any) => void; + onPlayerBackward?: (e: any) => void; +} + +export interface ScrollBarEventProps { + onScrollBarChange?: (e: any) => void; +} + +export interface DimensionEventProps { + onDimensionHover?: (e: any) => void; + onDimensionClick?: (e: any) => void; +} + +export interface HierarchyEventProps { + onDrill?: (e: any) => void; +} + +export interface ChartLifeCycleEventProps { + onInitialized?: (e: any) => void; + onRendered?: (e: any) => void; + onRenderFinished?: (e: any) => void; + onAnimationFinished?: (e: any) => void; + onLayoutStart?: (e: any) => void; + onLayoutEnd?: (e: any) => void; +} + +export interface EventsProps { + onPointerDown?: EventCallback; + onPointerUp?: EventCallback; + onPointerUpOutside?: EventCallback; + onPointerTap?: EventCallback; + onPointerOver?: EventCallback; + onPointerMove?: EventCallback; + onPointerEnter?: EventCallback; + onPointerLeave?: EventCallback; + onPointerOut?: EventCallback; + onMouseDown?: EventCallback; + onMouseUp?: EventCallback; + onMouseUpOutside?: EventCallback; + onMouseMove?: EventCallback; + onMouseOver?: EventCallback; + onMouseOut?: EventCallback; + onMouseEnter?: EventCallback; + onMouseLeave?: EventCallback; + onPinch?: EventCallback; + onPinchStart?: EventCallback; + onPinchEnd?: EventCallback; + onPan?: EventCallback; + onPanStart?: EventCallback; + onPanEnd?: EventCallback; + onDrag?: EventCallback; + onDragStart?: EventCallback; + onDragEnter?: EventCallback; + onDragLeave?: EventCallback; + onDragOver?: EventCallback; + onDragEnd?: EventCallback; + onRightDown?: EventCallback; + onRightUp?: EventCallback; + onRightUpOutside?: EventCallback; + onTouchStart?: EventCallback; + onTouchEnd?: EventCallback; + onTouchEndOutside?: EventCallback; + onTouchMove?: EventCallback; + onTouchCancel?: EventCallback; + onPress?: EventCallback; + onPressUp?: EventCallback; + onPressEnd?: EventCallback; + onSwipe?: EventCallback; + onDrop?: EventCallback; + onWeel?: EventCallback; + onClick?: EventCallback; + onDblClick?: EventCallback; +} + +export const REACT_TO_VCHART_EVENTS = { + onPointerDown: 'pointerdown', + onPointerUp: 'pointerup', + onPointerUpOutside: 'pointerupoutside', + onPointerTap: 'pointertap', + onPointerOver: 'pointerover', + onPointerMove: 'pointermove', + onPointerEnter: 'pointerenter', + onPointerLeave: 'pointerleave', + onPointerOut: 'pointerout', + onMouseDown: 'mousedown', + onMouseUp: 'mouseup', + onMouseUpOutside: 'mouseupoutside', + onMouseMove: 'mousemove', + onMouseOver: 'mouseover', + onMouseOut: 'mouseout', + onMouseEnter: 'mouseenter', + onMouseLeave: 'mouseleave', + onPinch: 'pinch', + onPinchStart: 'pinchstart', + onPinchEnd: 'pinchend', + onPan: 'pan', + onPanStart: 'panstart', + onPanEnd: 'panend', + onDrag: 'drag', + onDragStart: 'dragstart', + onDragEnter: 'dragenter', + onDragLeave: 'dragleave', + onDragOver: 'dragover', + onDragEnd: 'dragend', + onRightDown: 'rightdown', + onRightUp: 'rightup', + onRightUpOutside: 'rightupoutside', + onTouchStart: 'touchstart', + onTouchEnd: 'touchend', + onTouchEndOutside: 'touchendoutside', + onTouchMove: 'touchmove', + onTouchCancel: 'touchcancel', + onPress: 'press', + onPressUp: 'pressup', + onPressEnd: 'pressend', + onSwipe: 'swipe', + onDrop: 'drop', + onWeel: 'wheel', + onClick: 'click', + onDblClick: 'dblclick' +}; + +export const LEGEND_CUSTOMIZED_EVENTS = { + onLegendItemHover: 'legendItemHover', + onLegendItemUnHover: 'legendItemUnHover', + onLegendItemClick: 'legendItemClick', + onLegendFilter: 'legendFilter', + onLegendSelectedDataChange: 'legendSelectedDataChange' +}; +export const BRUSH_CUSTOMIZED_EVENTS = { + onBrushStart: 'brushStart', + onBrushChange: 'brushChange', + onBrushEnd: 'brushEnd', + onBrushClear: 'brushClear' +}; + +export const DATAZOOM_CUSTOMIZED_EVENTS = { + onDataZoomChange: 'dataZoomChange' +}; + +export const PLAYER_CUSTOMIZED_EVENTS = { + onPlayerPlay: 'playerPlay', + onPlayerPause: 'playerPause', + onPlayerEnd: 'playerEnd', + onPlayerChange: 'playerChange', + onPlayerForward: 'playerForward', + onPlayerBackward: 'playerBackward' +}; + +export const SCROLLBAR_CUSTOMIZED_EVENTS = { + onScrollBarChange: 'scrollBarChange' +}; + +export const DIMENSION_EVENTS = { + onDimensionHover: 'dimensionHover', + onDimensionClick: 'dimensionClick' +}; + +export const HIERARCHY_EVENTS = { + onDrill: 'drill' +}; + +export const CHART_LIFECYCLE_EVENTS = { + onInitialized: 'initialized', + onRendered: 'rendered', + onRenderFinished: 'renderFinished', + onAnimationFinished: 'animationFinished', + onLayoutStart: 'layoutStart', + onLayoutEnd: 'layoutEnd' +}; + +export const CHART_EVENTS = { + ...LEGEND_CUSTOMIZED_EVENTS, + ...BRUSH_CUSTOMIZED_EVENTS, + ...PLAYER_CUSTOMIZED_EVENTS, + ...DATAZOOM_CUSTOMIZED_EVENTS, + ...SCROLLBAR_CUSTOMIZED_EVENTS, + ...DIMENSION_EVENTS, + ...CHART_LIFECYCLE_EVENTS, + ...HIERARCHY_EVENTS, + ...REACT_TO_VCHART_EVENTS +}; + +export const CHART_EVENTS_KEYS = Object.keys(CHART_EVENTS); + +export const COMMON_EVENTK_KEYS = Object.keys(REACT_TO_VCHART_EVENTS); + +export const VCHART_TO_REACT_EVENTS = Object.keys(REACT_TO_VCHART_EVENTS).reduce((res, key) => { + res[REACT_TO_VCHART_EVENTS[key]] = key; + + return res; +}, {}); + +export const findEventProps = ( + props: T, + supportedEvents: Record = REACT_TO_VCHART_EVENTS +): EventsProps => { + const result: EventsProps = {}; + + Object.keys(props).forEach(key => { + if (supportedEvents[key] && props[key]) { + result[key] = props[key]; + } + }); + + return result; +}; + +export const bindEventsToChart = ( + chart: IVChart, + newProps?: T | null, + prevProps?: T | null, + supportedEvents: Record = REACT_TO_VCHART_EVENTS +) => { + if ((!newProps && !prevProps) || !chart) { + return false; + } + + const prevEventProps = prevProps ? findEventProps(prevProps, supportedEvents) : null; + const newEventProps = newProps ? findEventProps(newProps, supportedEvents) : null; + + if (prevEventProps) { + Object.keys(prevEventProps).forEach(eventKey => { + if (!newEventProps || !newEventProps[eventKey] || newEventProps[eventKey] !== prevEventProps[eventKey]) { + const res = chart.off(supportedEvents[eventKey], prevProps[eventKey]); + } + }); + } + + if (newEventProps) { + Object.keys(newEventProps).forEach(eventKey => { + if (!prevEventProps || !prevEventProps[eventKey] || prevEventProps[eventKey] !== newEventProps[eventKey]) { + chart.on(supportedEvents[eventKey], newEventProps[eventKey]); + } + }); + } + + return true; +}; diff --git a/packages/openinula-vchart/src/global.d.ts b/packages/openinula-vchart/src/global.d.ts new file mode 100644 index 0000000000..415c2c8274 --- /dev/null +++ b/packages/openinula-vchart/src/global.d.ts @@ -0,0 +1 @@ +declare const __VERSION__: string; diff --git a/packages/openinula-vchart/src/index.ts b/packages/openinula-vchart/src/index.ts new file mode 100644 index 0000000000..84cfa18ce4 --- /dev/null +++ b/packages/openinula-vchart/src/index.ts @@ -0,0 +1,50 @@ +export * from './charts'; +export * from './series'; +export * from './components'; +export * from './VChart'; +export * from './VChartSimple'; + +// export the version, since @1.8.3 +export const version = __VERSION__; + +export type { + IAreaChartSpec, + IBarChartSpec, + IBar3dChartSpec, + IBoxPlotChartSpec, + ICirclePackingChartSpec, + ICommonChartSpec, + IFunnelChartSpec, + IFunnel3dChartSpec, + IGaugeChartSpec, + IHeatmapChartSpec, + IHistogramChartSpec, + IHistogram3dChartSpec, + ILineChartSpec, + IMapChartSpec, + IPieChartSpec, + IPie3dChartSpec, + ICircularProgressChartSpec, + ILinearProgressChartSpec, + IRadarChartSpec, + IRangeColumnChartSpec, + IRangeColumn3dChartSpec, + IRangeAreaChartSpec, + IRoseChartSpec, + IScatterChartSpec, + ISankeyChartSpec, + ISequenceChartSpec, + ISunburstChartSpec, + ITreemapChartSpec, + IWaterfallChartSpec, + ICorrelationChartSpec, + ILiquidChartSpec, + IWordCloud3dChartSpec, + IWordCloudChartSpec, + IPolarChartSpec, + ICartesianChartSpec, + ITheme, + IInitOption, + ISpec, + IVChart +} from '@visactor/vchart'; diff --git a/packages/openinula-vchart/src/series/Area.tsx b/packages/openinula-vchart/src/series/Area.tsx new file mode 100644 index 0000000000..b9077c09e1 --- /dev/null +++ b/packages/openinula-vchart/src/series/Area.tsx @@ -0,0 +1,5 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; +import type { IAreaSeriesSpec } from '@visactor/vchart'; + +export type AreaProps = BaseSeriesProps & Omit; +export const Area = createSeries('Area', ['area'], 'area'); diff --git a/packages/openinula-vchart/src/series/Bar.tsx b/packages/openinula-vchart/src/series/Bar.tsx new file mode 100644 index 0000000000..115cfdfb98 --- /dev/null +++ b/packages/openinula-vchart/src/series/Bar.tsx @@ -0,0 +1,7 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; + +import type { IBarSeriesSpec } from '@visactor/vchart'; + +export type BarProps = BaseSeriesProps & Omit; + +export const Bar = createSeries('Bar', ['bar'], 'bar'); diff --git a/packages/openinula-vchart/src/series/BaseSeries.tsx b/packages/openinula-vchart/src/series/BaseSeries.tsx new file mode 100644 index 0000000000..e1a81898ad --- /dev/null +++ b/packages/openinula-vchart/src/series/BaseSeries.tsx @@ -0,0 +1,101 @@ +import React from 'openinula'; +import { isNil, pickWithout } from '@visactor/vutils'; +import RootChartContext from '../context/chart'; +import { + REACT_TO_VCHART_EVENTS, + EventsProps, + findEventProps, + COMMON_EVENTK_KEYS, + VCHART_TO_REACT_EVENTS +} from '../eventsUtils'; +export interface BaseSeriesProps extends EventsProps { + id?: string | number; +} + +export const createSeries = (componentName: string, markNames: string[], type?: string) => { + const ignoreKeys = ['id', 'updateId', 'componentId']; + const notSpecKeys = COMMON_EVENTK_KEYS.concat(ignoreKeys); + + const addMarkId = (spec: any, seriesId: string | number) => { + markNames.forEach(markName => { + const defaultMarkId = `${seriesId}-${markName}`; + + if (isNil(spec[markName])) { + spec[markName] = { id: defaultMarkId }; + } else if (isNil(spec[markName].id)) { + spec[markName].id = defaultMarkId; + } + }); + }; + + const Comp: React.FC = props => { + const context = React.useContext(RootChartContext); + + const id = props.id ?? props.componentId; + const bindedEvents = React.useRef void>>({}); + + const handleEvent = (e: any) => { + const markIds = markNames.map(markName => `${id}-${markName}`); + if (e?.mark && markIds.includes(e.mark.getUserId())) { + props[VCHART_TO_REACT_EVENTS[e.event.type]](e); + } + }; + + const addMarkEvent = (events: EventsProps) => { + if (!events || !context.chart) { + return; + } + + if (bindedEvents.current) { + Object.keys(bindedEvents.current).forEach(eventKey => { + context.chart.off(REACT_TO_VCHART_EVENTS[eventKey], bindedEvents.current[eventKey]); + bindedEvents.current[eventKey] = null; + }); + } + + events && + Object.keys(events).forEach(eventKey => { + if (!bindedEvents.current?.[eventKey]) { + context.chart.on(REACT_TO_VCHART_EVENTS[eventKey], handleEvent); + + if (!bindedEvents.current) { + bindedEvents.current = {}; + } + bindedEvents.current[eventKey] = handleEvent; + } + }); + }; + + const removeMarkEvent = () => { + addMarkEvent({}); + }; + + addMarkEvent(findEventProps(props)); + + React.useEffect(() => { + return () => { + removeMarkEvent(); + bindedEvents.current = {}; + }; + }, []); + + return null; + }; + + Comp.displayName = componentName; + (Comp as any).parseSpec = (compProps: T & { updateId?: number; componentId?: string }) => { + const newSeriesSpec = pickWithout(compProps, notSpecKeys); + + addMarkId(newSeriesSpec, compProps.id ?? compProps.componentId); + + if (!isNil(type)) { + (newSeriesSpec as any).type = type; + } + + return { + spec: newSeriesSpec, + specName: 'series' + }; + }; + return Comp; +}; diff --git a/packages/openinula-vchart/src/series/BoxPlot.tsx b/packages/openinula-vchart/src/series/BoxPlot.tsx new file mode 100644 index 0000000000..31e5297e17 --- /dev/null +++ b/packages/openinula-vchart/src/series/BoxPlot.tsx @@ -0,0 +1,6 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; +import type { IBoxPlotSeriesSpec } from '@visactor/vchart'; + +export type BoxPlotProps = BaseSeriesProps & Omit; + +export const BoxPlot = createSeries('BoxPlot', ['boxPlot'], 'boxPlot'); diff --git a/packages/openinula-vchart/src/series/CircularProgress.tsx b/packages/openinula-vchart/src/series/CircularProgress.tsx new file mode 100644 index 0000000000..8c59d3c8ba --- /dev/null +++ b/packages/openinula-vchart/src/series/CircularProgress.tsx @@ -0,0 +1,10 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; +import type { ICircularProgressSeriesSpec } from '@visactor/vchart'; + +export type CircularProgressProps = BaseSeriesProps & Omit; + +export const CircularProgress = createSeries( + 'CircularProgress', + ['circularProgress'], + 'circularProgress' +); diff --git a/packages/openinula-vchart/src/series/Dot.tsx b/packages/openinula-vchart/src/series/Dot.tsx new file mode 100644 index 0000000000..1735ae9273 --- /dev/null +++ b/packages/openinula-vchart/src/series/Dot.tsx @@ -0,0 +1,6 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; +import type { IDotSeriesSpec } from '@visactor/vchart'; + +export type DotProps = BaseSeriesProps & Omit; + +export const Dot = createSeries('Dot', ['dot'], 'dot'); diff --git a/packages/openinula-vchart/src/series/Funnel.tsx b/packages/openinula-vchart/src/series/Funnel.tsx new file mode 100644 index 0000000000..c9b049c531 --- /dev/null +++ b/packages/openinula-vchart/src/series/Funnel.tsx @@ -0,0 +1,6 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; +import type { IFunnelSeriesSpec } from '@visactor/vchart'; + +export type FunnelProps = BaseSeriesProps & Omit; + +export const Funnel = createSeries('Funnel', ['funnel'], 'funnel'); diff --git a/packages/openinula-vchart/src/series/Line.tsx b/packages/openinula-vchart/src/series/Line.tsx new file mode 100644 index 0000000000..c47278fe39 --- /dev/null +++ b/packages/openinula-vchart/src/series/Line.tsx @@ -0,0 +1,6 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; +import type { ILineSeriesSpec } from '@visactor/vchart'; + +export type LineProps = BaseSeriesProps & Omit; + +export const Line = createSeries('Line', ['line'], 'line'); diff --git a/packages/openinula-vchart/src/series/LinearProgress.tsx b/packages/openinula-vchart/src/series/LinearProgress.tsx new file mode 100644 index 0000000000..3f440d3f0f --- /dev/null +++ b/packages/openinula-vchart/src/series/LinearProgress.tsx @@ -0,0 +1,6 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; +import type { ILinearProgressSeriesSpec } from '@visactor/vchart'; + +export type LinearProgressProps = BaseSeriesProps & Omit; + +export const LinearProgress = createSeries('LinearProgress', ['linearProgress'], 'linearProgress'); diff --git a/packages/openinula-vchart/src/series/Link.tsx b/packages/openinula-vchart/src/series/Link.tsx new file mode 100644 index 0000000000..eaac0f2192 --- /dev/null +++ b/packages/openinula-vchart/src/series/Link.tsx @@ -0,0 +1,6 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; +import type { ILinkSeriesSpec } from '@visactor/vchart'; + +export type LinkProps = BaseSeriesProps & Omit; + +export const Link = createSeries('Link', ['link'], 'link'); diff --git a/packages/openinula-vchart/src/series/Map.tsx b/packages/openinula-vchart/src/series/Map.tsx new file mode 100644 index 0000000000..ced444d8e7 --- /dev/null +++ b/packages/openinula-vchart/src/series/Map.tsx @@ -0,0 +1,6 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; +import type { IMapSeriesSpec } from '@visactor/vchart'; + +export type MapProps = BaseSeriesProps & Omit; + +export const Map = createSeries('Map', ['map'], 'map'); diff --git a/packages/openinula-vchart/src/series/Pie.tsx b/packages/openinula-vchart/src/series/Pie.tsx new file mode 100644 index 0000000000..7b4c1674c1 --- /dev/null +++ b/packages/openinula-vchart/src/series/Pie.tsx @@ -0,0 +1,6 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; +import type { IPieSeriesSpec } from '@visactor/vchart'; + +export type PieProps = BaseSeriesProps & Omit; + +export const Pie = createSeries('Pie', ['pie'], 'pie'); diff --git a/packages/openinula-vchart/src/series/Radar.tsx b/packages/openinula-vchart/src/series/Radar.tsx new file mode 100644 index 0000000000..c5627046e3 --- /dev/null +++ b/packages/openinula-vchart/src/series/Radar.tsx @@ -0,0 +1,6 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; +import type { IRadarSeriesSpec } from '@visactor/vchart'; + +export type RadarProps = BaseSeriesProps & Omit; + +export const Radar = createSeries('Radar', ['radar'], 'radar'); diff --git a/packages/openinula-vchart/src/series/RangeColumn.tsx b/packages/openinula-vchart/src/series/RangeColumn.tsx new file mode 100644 index 0000000000..8aff0ac8e8 --- /dev/null +++ b/packages/openinula-vchart/src/series/RangeColumn.tsx @@ -0,0 +1,6 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; +import type { IRangeColumnSeriesSpec } from '@visactor/vchart'; + +export type RangeColumnProps = BaseSeriesProps & Omit; + +export const RangeColumn = createSeries('RangeColumn', ['rangeColumn'], 'rangeColumn'); diff --git a/packages/openinula-vchart/src/series/Rose.tsx b/packages/openinula-vchart/src/series/Rose.tsx new file mode 100644 index 0000000000..fecac955a1 --- /dev/null +++ b/packages/openinula-vchart/src/series/Rose.tsx @@ -0,0 +1,6 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; +import type { IRoseSeriesSpec } from '@visactor/vchart'; + +export type RoseProps = BaseSeriesProps & Omit; + +export const Rose = createSeries('Rose', ['rose'], 'rose'); diff --git a/packages/openinula-vchart/src/series/Scatter.tsx b/packages/openinula-vchart/src/series/Scatter.tsx new file mode 100644 index 0000000000..885b068e2f --- /dev/null +++ b/packages/openinula-vchart/src/series/Scatter.tsx @@ -0,0 +1,6 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; +import type { IScatterSeriesSpec } from '@visactor/vchart'; + +export type ScatterProps = BaseSeriesProps & Omit; + +export const Scatter = createSeries('Scatter', ['scatter'], 'scatter'); diff --git a/packages/openinula-vchart/src/series/Series.tsx b/packages/openinula-vchart/src/series/Series.tsx new file mode 100644 index 0000000000..b1e80acec0 --- /dev/null +++ b/packages/openinula-vchart/src/series/Series.tsx @@ -0,0 +1,40 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; +import type { + IBarSeriesSpec, + IAreaSeriesSpec, + IBoxPlotSeriesSpec, + ICircularProgressSeriesSpec, + IDotSeriesSpec, + IFunnelSeriesSpec, + ILineSeriesSpec, + ILinearProgressSeriesSpec, + ILinkSeriesSpec, + IMapSeriesSpec, + IPieSeriesSpec, + IRadarSeriesSpec, + IRangeColumnSeriesSpec, + IRoseSeriesSpec, + IScatterSeriesSpec, + IWordCloudSeriesSpec +} from '@visactor/vchart'; +export type SeriesProps = ( + | IBarSeriesSpec + | IAreaSeriesSpec + | IBoxPlotSeriesSpec + | ICircularProgressSeriesSpec + | IDotSeriesSpec + | IFunnelSeriesSpec + | ILineSeriesSpec + | ILinearProgressSeriesSpec + | ILinkSeriesSpec + | IMapSeriesSpec + | IPieSeriesSpec + | IRadarSeriesSpec + | IRangeColumnSeriesSpec + | IRoseSeriesSpec + | IScatterSeriesSpec + | IWordCloudSeriesSpec +) & + BaseSeriesProps; + +export const Series = createSeries('Series', ['bar', 'line', 'area']); diff --git a/packages/openinula-vchart/src/series/WordCloud.tsx b/packages/openinula-vchart/src/series/WordCloud.tsx new file mode 100644 index 0000000000..95558b206d --- /dev/null +++ b/packages/openinula-vchart/src/series/WordCloud.tsx @@ -0,0 +1,6 @@ +import { BaseSeriesProps, createSeries } from './BaseSeries'; +import type { IWordCloudSeriesSpec } from '@visactor/vchart'; + +export type WordCloudProps = BaseSeriesProps & Omit; + +export const WordCloud = createSeries('WordCloud', ['wordCloud'], 'wordCloud'); diff --git a/packages/openinula-vchart/src/series/index.ts b/packages/openinula-vchart/src/series/index.ts new file mode 100644 index 0000000000..095135c9a7 --- /dev/null +++ b/packages/openinula-vchart/src/series/index.ts @@ -0,0 +1,18 @@ +export * from './Series'; + +export * from './Line'; +export * from './Area'; +export * from './Bar'; +export * from './Scatter'; +export * from './Map'; +export * from './Pie'; +export * from './Rose'; +export * from './Radar'; +export * from './Dot'; +export * from './Link'; +export * from './CircularProgress'; +export * from './WordCloud'; +export * from './Funnel'; +export * from './LinearProgress'; +export * from './RangeColumn'; +export * from './BoxPlot'; diff --git a/packages/openinula-vchart/src/util.ts b/packages/openinula-vchart/src/util.ts new file mode 100644 index 0000000000..1ebb0de31e --- /dev/null +++ b/packages/openinula-vchart/src/util.ts @@ -0,0 +1,99 @@ +import { isNil, isArray, isString, isFunction, isPlainObject } from '@visactor/vutils'; +import React, { ReactNode } from 'openinula'; +import { isFragment } from 'react-is'; + +let id = 0; + +export const uid = (prefix?: string) => { + if (prefix) { + return `${prefix}-${id++}`; + } + + return `${id++}`; +}; + +/** + * Get the display name of a component + * @param {Object} Comp Specified Component + * @return {String} Display name of Component + */ +export const getDisplayName = (Comp: any) => { + if (typeof Comp === 'string') { + return Comp; + } + if (!Comp) { + return ''; + } + return Comp.displayName || Comp.name; +}; + +export const typeOfComponent = (component: any, customTypeKey = '__TYPE'): string => { + return ( + (component?.props && component.props[customTypeKey]) || + (typeof component?.type === 'string' && component.type) || + (component?.type && + typeof component.type === 'symbol' && + component.type.toString() === 'Symbol(react.fragment)' && + 'react.fragment') || + (typeof component?.type === 'function' && component.type) || + (typeof component?.type === 'object' && + component.type.$$typeof.toString() === 'Symbol(react.forward_ref)' && + 'react.forward_ref') || + (typeof component === 'string' && 'string') || + (typeof component === 'function' && 'function') || + undefined + ); +}; + +export const toArray = (children: T): TC[] => { + let result: TC[] = []; + + React.Children.forEach(children, child => { + if (isNil(child)) return; + + if (isFragment(child)) { + result = result.concat(toArray(child.props.children)); + } else { + result.push(child as unknown as TC); + } + }); + + return result; +}; + +/* + * Find and return all matched children by type. `type` can be a React element class or + * string + */ +export const findAllByType = ( + children: React.ReactNode, + type: TC | TC[] +): T[] => { + const result: T[] = []; + let types: string[] = []; + + if (isArray(type)) { + types = type.map(t => getDisplayName(t)); + } else { + types = [getDisplayName(type)]; + } + + toArray(children).forEach(child => { + const childType = getDisplayName(typeOfComponent(child)); + + if (types.indexOf(childType) !== -1) { + result.push(child as T); + } + }); + + return result; +}; +/* + * Return the first matched child by type, return null otherwise. + * `type` can be a React element class or string. + */ +export const findChildByType = (children: React.ReactNode, type: TC): T => { + const result = findAllByType(children, type); + + return result?.[0]; +}; diff --git a/packages/openinula-vchart/tsconfig.eslint.json b/packages/openinula-vchart/tsconfig.eslint.json new file mode 100644 index 0000000000..24d3e50728 --- /dev/null +++ b/packages/openinula-vchart/tsconfig.eslint.json @@ -0,0 +1,10 @@ +{ + "extends": "@internal/ts-config/tsconfig.base.json", + "compilerOptions": { + "types": ["jest", "offscreencanvas", "node"], + "lib": ["DOM", "ESNext"], + "baseUrl": "./", + "rootDir": "./" + }, + "include": ["src", "demo"] +} diff --git a/packages/openinula-vchart/tsconfig.json b/packages/openinula-vchart/tsconfig.json new file mode 100644 index 0000000000..58491fc225 --- /dev/null +++ b/packages/openinula-vchart/tsconfig.json @@ -0,0 +1,25 @@ +{ + "extends": "@internal/ts-config/tsconfig.base.json", + "compilerOptions": { + "jsx": "react", + "baseUrl": "./", + "rootDir": "./src", + "types": ["jest", "offscreencanvas", "node"], + "lib": ["DOM", "ESNext"], + "composite": true, + "outDir": "./esm", + "ignoreDeprecations": "5.0" + }, + "ts-node": { + "transpileOnly": true, + "compilerOptions": { + "module": "commonjs" + } + }, + "references": [ + { + "path": "../vchart" + } + ], + "include": ["src"] +} diff --git a/packages/vchart/__tests__/runtime/browser/test-page/zuma.ts b/packages/vchart/__tests__/runtime/browser/test-page/zuma.ts new file mode 100644 index 0000000000..15f796e51b --- /dev/null +++ b/packages/vchart/__tests__/runtime/browser/test-page/zuma.ts @@ -0,0 +1,155 @@ +// eslint-disable-next-line no-duplicate-imports +import { default as VChart } from '../../../../src/index'; + +const spec = { + type: 'common', + data: [ + { + id: 'pointer', + values: [ + { + type: 'A', + value: 10 + } + ] + }, + { + id: 'segment', + values: [ + { + type: 'A', + value: 5 + }, + { + type: 'B', + value: 10 + }, + { + type: 'C', + value: 15 + } + ] + } + ], + series: [ + { + type: 'gauge', + dataIndex: 1, + radiusField: 'type', + angleField: 'value', + seriesField: 'type', + outerRadius: 0.9, + innerRadius: 0.7, + segment: { + style: { + cornerRadius: 500 + } + }, + track: { + visible: true, + style: { + cornerRadius: 10, + innerPadding: -10, + outerPadding: -10, + fill: 'rgba(0, 0, 0, 0.1)' + } + } + }, + { + type: 'gaugePointer', + dataIndex: 0, + categoryField: 'type', + valueField: 'value', + pin: { + visible: true, + width: 0.1, + height: 0.1, + style: { + fill: { + scale: 'color', + field: 'type' + } + } + }, + pinBackground: { + visible: false + }, + pointer: { + width: 0.5, + height: 0.25, + style: { + fill: { + scale: 'color', + field: 'type' + } + } + } + } + ], + startAngle: -240, + endAngle: 60, + axes: [ + { + type: 'linear', + orient: 'angle', + inside: true, + min: 0, + max: 100, + grid: { visible: false }, + label: { visible: false } + }, + { + type: 'linear', + orient: 'radius', + grid: { visible: false }, + label: { visible: false } + } + ], + tooltip: { + visible: false + }, + animation: false +}; + +const vchart = new VChart(spec, { dom: document.getElementById('chart') as HTMLElement }); +await vchart.renderAsync(); +const angleAxis = vchart.getChart().getAllComponents()[0]; + +const ballTypes = ['A', 'B', 'C', 'D']; +let currentPointerType = 'A'; +let currentPointerValue = 0; + +vchart.on('pointermove', {}, params => { + const { x, y } = params.event.canvas; + updatePointerValue(x, y); + vchart.updateData('pointer', [ + { + type: currentPointerType, + value: currentPointerValue + } + ]); +}); + +vchart.on('pointerdown', {}, params => { + updatePointerType(); + vchart.updateData('pointer', [ + { + type: currentPointerType, + value: currentPointerValue + } + ]); +}); + +const updatePointerType = () => { + currentPointerType = ballTypes.filter(type => type !== currentPointerType)[ + Math.floor(Math.random() * (ballTypes.length - 1)) + ]; +}; + +const updatePointerValue = (x, y) => { + const { x: startX, y: startY } = angleAxis.getLayoutStartPoint(); + currentPointerValue = angleAxis.positionToData({ x: x - startX, y: y - startY }); +}; + +// Just for the convenience of console debugging, DO NOT COPY! +window['vchart'] = vchart; diff --git a/rush.json b/rush.json index 1926b22860..04333bea41 100644 --- a/rush.json +++ b/rush.json @@ -33,6 +33,13 @@ "shouldPublish": true, "versionPolicyName": "vchartMain" }, + { + "packageName": "@visactor/openinula-vchart", + "projectFolder": "packages/openinula-vchart", + "tags": ["package"], + "shouldPublish": true, + "versionPolicyName": "vchartMain" + }, { "packageName": "@visactor/taro-vchart", "projectFolder": "packages/taro-vchart",