From e86841ba091191b73a97cdc8e9049fa4122b6a13 Mon Sep 17 00:00:00 2001 From: ZackYoung Date: Thu, 7 Nov 2024 18:09:33 +0800 Subject: [PATCH] [Refactor][Web]Refactoring a new data development interface to enhance the user experience (#3854) Signed-off-by: Zzm0809 <934230207@qq.com> Co-authored-by: zackyoungh Co-authored-by: Zzm0809 <934230207@qq.com> Co-authored-by: gaoyan Co-authored-by: gaoyan1998 Co-authored-by: zhangyuhang Co-authored-by: LUOSHANGJIE\71826 <718261933@qq.com> Co-authored-by: 18216499322 <18216499322@users.noreply.github.com> Co-authored-by: Zzm0809 --- .idea/vcs.xml | 2 - .../dinky/service/impl/StudioServiceImpl.java | 2 +- .../main/java/org/dinky/ws/SqlGateway.java | 2 +- dinky-web/config/config.ts | 13 +- dinky-web/config/routes.ts | 7 + dinky-web/package-lock.json | 3180 ++++++++++------- dinky-web/package.json | 33 +- .../CustomEditor/CodeEdit/index.tsx | 28 +- .../CustomEditor/CodeShow/index.tsx | 9 +- .../src/components/Flink/FlinkDag/config.ts | 7 +- .../src/components/Flink/FlinkDag/index.tsx | 10 +- .../components/Flink/OptionsSelect/index.tsx | 2 +- .../src/components/VersionList/index.tsx | 12 +- dinky-web/src/global.less | 14 +- dinky-web/src/hooks/useThemeValue.tsx | 10 + dinky-web/src/locales/en-US/global.ts | 3 + dinky-web/src/locales/en-US/menu.ts | 7 +- dinky-web/src/locales/en-US/pages.ts | 17 +- dinky-web/src/locales/zh-CN/global.ts | 3 + dinky-web/src/locales/zh-CN/menu.ts | 7 +- dinky-web/src/locales/zh-CN/pages.ts | 16 +- .../DataStudio/HeaderContainer/index.tsx | 4 +- .../LeftContainer/Project/JobTree/index.tsx | 12 +- .../LeftContainer/Project/constants.tsx | 2 +- .../LeftContainer/Project/function.tsx | 4 +- .../Terminal/TerminalConfig.ts | 2 +- .../Terminal/TerminalContent.tsx | 2 +- .../MiddleContainer/Terminal/index.tsx | 9 +- .../DataStudio/MiddleContainer/index.tsx | 2 +- .../src/pages/DataStudioNew/Algorithm.ts | 911 +++++ .../CenterTabContent/DataSourceDetail.tsx | 38 + .../CenterTabContent/HistoryVersion.tsx | 150 + .../RunToolbar/SelectFlinkEnv.tsx | 46 + .../RunToolbar/SelectFlinkRunMode.tsx | 103 + .../CenterTabContent/SqlTask.tsx | 838 +++++ .../CenterTabContent/StartIntroPage.tsx | 36 + .../TaskConfig/BasicConfig.tsx | 181 + .../TaskConfig/ProFormFlinkConfig.tsx | 110 + .../TaskConfig/ProFormFlinkUdfConfig.tsx | 120 + .../CenterTabContent/TaskConfig/function.ts | 23 + .../CenterTabContent/TaskConfig/index.tsx | 151 + .../CenterTabContent/TaskInfo.tsx | 57 + .../DataStudioNew/CenterTabContent/index.less | 46 + .../src/pages/DataStudioNew/ContentLayout.tsx | 283 ++ .../pages/DataStudioNew/DataStudioContext.ts | 27 + .../DataStudioNew/DockLayoutFunction.tsx | 262 ++ .../src/pages/DataStudioNew/DvaFunction.tsx | 118 + .../FooterContainer/JobRunningModal/index.tsx | 72 + .../DataStudioNew/FooterContainer/index.tsx | 122 + .../pages/DataStudioNew/RightContextMenu.tsx | 107 + .../DataStudioNew/Toolbar/Catalog/data.tsx | 37 + .../DataStudioNew/Toolbar/Catalog/index.tsx | 397 ++ .../DataStudioNew/Toolbar/Catalog/service.tsx | 32 + .../Toolbar/DataSource/index.tsx | 263 ++ .../Toolbar/DataSource/service.tsx | 46 + .../Toolbar/FlinkSqlClient/index.less | 15 + .../Toolbar/FlinkSqlClient/index.tsx | 92 + .../Toolbar/GlobalVariable/index.tsx | 76 + .../Project/FolderModal/FolderForm/index.tsx | 42 + .../Toolbar/Project/FolderModal/index.tsx | 100 + .../JobModal/components/TemplateSelect.tsx | 104 + .../Toolbar/Project/JobModal/index.tsx | 323 ++ .../components/JobImportModal/index.tsx | 103 + .../Toolbar/Project/JobTree/index.tsx | 328 ++ .../Toolbar/Project/RightContext.tsx | 449 +++ .../Toolbar/Project/function.tsx | 370 ++ .../DataStudioNew/Toolbar/Project/index.tsx | 391 ++ .../Service/ExecutionHistory/index.tsx | 274 ++ .../Toolbar/Service/Explain/index.tsx | 203 ++ .../Toolbar/Service/FlinkGraph/index.tsx | 42 + .../Toolbar/Service/Lineage/index.tsx | 38 + .../Toolbar/Service/LineageNew/index.tsx | 257 ++ .../Toolbar/Service/Output/index.tsx | 207 ++ .../Toolbar/Service/Result/index.tsx | 319 ++ .../Toolbar/Service/TableData/index.tsx | 111 + .../DataStudioNew/Toolbar/Service/index.less | 15 + .../DataStudioNew/Toolbar/Service/index.tsx | 331 ++ .../Toolbar/Tool/JsonToSql/index.tsx | 68 + .../Toolbar/Tool/JsonToSql/service.tsx | 25 + .../Toolbar/Tool/TextComparison/index.tsx | 48 + .../DataStudioNew/Toolbar/Tool/index.less | 7 + .../DataStudioNew/Toolbar/Tool/index.tsx | 43 + .../DataStudioNew/Toolbar/ToolbarRoute.tsx | 103 + .../pages/DataStudioNew/Toolbar/data.d.tsx | 45 + .../pages/DataStudioNew/Toolbar/index.less | 43 + .../src/pages/DataStudioNew/Toolbar/index.tsx | 119 + .../CusPanelResizeHandle/index.less | 3 + .../components/CusPanelResizeHandle/index.tsx | 26 + .../components/RunToolBarButton/index.tsx | 102 + .../src/pages/DataStudioNew/css/index.less | 994 ++++++ dinky-web/src/pages/DataStudioNew/data.d.tsx | 61 + .../src/pages/DataStudioNew/function.tsx | 289 ++ dinky-web/src/pages/DataStudioNew/index.less | 45 + dinky-web/src/pages/DataStudioNew/index.tsx | 593 +++ dinky-web/src/pages/DataStudioNew/model.tsx | 606 ++++ dinky-web/src/pages/DataStudioNew/service.tsx | 33 + dinky-web/src/pages/DataStudioNew/type.ts | 291 ++ dinky-web/src/pages/DataStudioNew/utils.tsx | 110 + .../RightTagsRouter/index.tsx | 1 - dinky-web/src/service-worker.js | 31 +- dinky-web/src/services/BusinessCrud.ts | 4 +- dinky-web/src/types/Public/data.ts | 2 +- dinky-web/src/types/Studio/data.d.ts | 2 +- dinky-web/src/utils/function.tsx | 14 +- dinky-web/src/utils/{intl.ts => intl.tsx} | 0 dinky-web/src/utils/treeUtils.tsx | 212 ++ 106 files changed, 14772 insertions(+), 1335 deletions(-) create mode 100644 dinky-web/src/pages/DataStudioNew/Algorithm.ts create mode 100644 dinky-web/src/pages/DataStudioNew/CenterTabContent/DataSourceDetail.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/CenterTabContent/HistoryVersion.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/CenterTabContent/RunToolbar/SelectFlinkEnv.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/CenterTabContent/RunToolbar/SelectFlinkRunMode.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/CenterTabContent/SqlTask.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/CenterTabContent/StartIntroPage.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskConfig/BasicConfig.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskConfig/ProFormFlinkConfig.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskConfig/ProFormFlinkUdfConfig.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskConfig/function.ts create mode 100644 dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskConfig/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskInfo.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/CenterTabContent/index.less create mode 100644 dinky-web/src/pages/DataStudioNew/ContentLayout.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/DataStudioContext.ts create mode 100644 dinky-web/src/pages/DataStudioNew/DockLayoutFunction.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/DvaFunction.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/FooterContainer/JobRunningModal/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/FooterContainer/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/RightContextMenu.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Catalog/data.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Catalog/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Catalog/service.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/DataSource/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/DataSource/service.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/FlinkSqlClient/index.less create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/FlinkSqlClient/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/GlobalVariable/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Project/FolderModal/FolderForm/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Project/FolderModal/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Project/JobModal/components/TemplateSelect.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Project/JobModal/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Project/JobTree/components/JobImportModal/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Project/JobTree/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Project/RightContext.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Project/function.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Project/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Service/ExecutionHistory/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Service/Explain/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Service/FlinkGraph/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Service/Lineage/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Service/LineageNew/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Service/Output/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Service/Result/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Service/TableData/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Service/index.less create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Service/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Tool/JsonToSql/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Tool/JsonToSql/service.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Tool/TextComparison/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Tool/index.less create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/Tool/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/ToolbarRoute.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/data.d.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/index.less create mode 100644 dinky-web/src/pages/DataStudioNew/Toolbar/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/components/CusPanelResizeHandle/index.less create mode 100644 dinky-web/src/pages/DataStudioNew/components/CusPanelResizeHandle/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/components/RunToolBarButton/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/css/index.less create mode 100644 dinky-web/src/pages/DataStudioNew/data.d.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/function.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/index.less create mode 100644 dinky-web/src/pages/DataStudioNew/index.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/model.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/service.tsx create mode 100644 dinky-web/src/pages/DataStudioNew/type.ts create mode 100644 dinky-web/src/pages/DataStudioNew/utils.tsx rename dinky-web/src/utils/{intl.ts => intl.tsx} (100%) create mode 100644 dinky-web/src/utils/treeUtils.tsx diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 5fb54e31db..a6b68d70dc 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -13,7 +13,5 @@ - - \ No newline at end of file diff --git a/dinky-admin/src/main/java/org/dinky/service/impl/StudioServiceImpl.java b/dinky-admin/src/main/java/org/dinky/service/impl/StudioServiceImpl.java index 5b63c2e7c9..f98ee33148 100644 --- a/dinky-admin/src/main/java/org/dinky/service/impl/StudioServiceImpl.java +++ b/dinky-admin/src/main/java/org/dinky/service/impl/StudioServiceImpl.java @@ -120,7 +120,7 @@ public LineageResult getLineage(StudioLineageDTO studioCADTO) { } } else { TaskDTO taskDTO = taskService.getTaskInfoById(studioCADTO.getTaskId()); - taskDTO.setStatement(taskService.buildEnvSql(taskDTO) + taskDTO.getStatement()); + taskDTO.setStatement(taskService.buildEnvSql(taskDTO) + studioCADTO.getStatement()); JobConfig jobConfig = taskDTO.getJobConfig(); return LineageBuilder.getColumnLineageByLogicalPlan(taskDTO.getStatement(), jobConfig.getExecutorSetting()); } diff --git a/dinky-admin/src/main/java/org/dinky/ws/SqlGateway.java b/dinky-admin/src/main/java/org/dinky/ws/SqlGateway.java index 4a3623a3cc..0790053a10 100644 --- a/dinky-admin/src/main/java/org/dinky/ws/SqlGateway.java +++ b/dinky-admin/src/main/java/org/dinky/ws/SqlGateway.java @@ -61,7 +61,7 @@ @Component @Slf4j -@ServerEndpoint("/ws/sql-gateway/") +@ServerEndpoint("/api/ws/sql-gateway/") public class SqlGateway { private Session session; diff --git a/dinky-web/config/config.ts b/dinky-web/config/config.ts index 341c91395b..68810ad0f2 100644 --- a/dinky-web/config/config.ts +++ b/dinky-web/config/config.ts @@ -23,7 +23,7 @@ import proxy from './proxy'; import routes from './routes'; const { REACT_APP_ENV = 'dev' } = process.env; - +const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); // @ts-ignore export default defineConfig({ /** @@ -196,5 +196,14 @@ export default defineConfig({ strategy: 'eager' }, // requestRecord: {}, - dva: {} + dva: {}, + + chainWebpack: (memo) => { + memo.plugin('monaco-editor-webpack-plugin').use(MonacoWebpackPlugin, [ + // 按需配置 + { languages: ['shell', 'json', 'java', 'sql', 'python', 'scala', 'yaml'] } + ]); + + return memo; + } }); diff --git a/dinky-web/config/routes.ts b/dinky-web/config/routes.ts index 9c7b6976bd..6cbced7d19 100644 --- a/dinky-web/config/routes.ts +++ b/dinky-web/config/routes.ts @@ -64,6 +64,13 @@ export default [ footerRender: false, component: './DataStudio' }, + { + path: '/datastudio-new', + name: 'datastudio', + icon: 'CodeOutlined', + footerRender: false, + component: './DataStudioNew' + }, { path: '/devops', name: 'devops', diff --git a/dinky-web/package-lock.json b/dinky-web/package-lock.json index 8c840fd9b3..bd3f7f48f9 100644 --- a/dinky-web/package-lock.json +++ b/dinky-web/package-lock.json @@ -14,11 +14,13 @@ "@ant-design/charts": "^2.2.1", "@ant-design/icons": "^5.3.7", "@ant-design/pro-components": "^2.7.19", - "@ant-design/pro-layout": "^7.20.2", - "@ant-design/pro-table": "^3.17.2", "@ant-design/use-emotion-css": "^1.0.4", - "@antv/g2": "^5.2.5", - "@antv/layout": "0.3.25", + "@antv/ava-react": "^3.3.2", + "@antv/g-canvas": "^2.0.20", + "@antv/g2": "^5.2.7", + "@antv/g6-extension-react": "^0.1.7", + "@antv/graphin": "^3.0.2", + "@antv/layout": "1.2.13", "@antv/x6": "^2.18.1", "@antv/x6-plugin-selection": "^2.2.2", "@antv/x6-react-shape": "^2.2.3", @@ -27,8 +29,8 @@ "@umijs/route-utils": "^4.0.1", "@xterm/addon-fit": "^0.10.0", "@xterm/xterm": "^5.5.0", - "antd": "^5.21.0", - "antd-style": "^3.6.3", + "antd": "5.21.0", + "antd-style": "^3.7.1", "butterfly-dag": "^4.3.29", "classnames": "^2.5.1", "dayjs": "^1.11.11", @@ -40,13 +42,13 @@ "lodash": "^4.17.21", "million": "^3.1.1", "moment": "^2.30.1", - "monaco-editor": "^0.51.0", + "monaco-editor": "^0.52.0", "omit.js": "^2.0.2", "path-to-regexp": "^6.2.2", - "rc-menu": "^9.14.0", - "rc-util": "^5.43.0", + "rc-dock": "^3.3.0", "re-resizable": "^6.10.0", "react": "^18.3.1", + "react-activation": "^0.12.4", "react-countup": "^6.5.3", "react-dom": "^18.3.1", "react-fast-marquee": "^1.6.5", @@ -55,11 +57,14 @@ "react-lineage-dag": "^2.0.36", "react-lottie": "^1.2.4", "react-markdown": "^9.0.1", + "react-resizable-panels": "^2.1.4", + "react-sortablejs": "^6.1.4", "react-spring": "^9.7.3", "react-use-cookie": "^1.6.1", "redux-persist": "^6.0.0", "remark-gfm": "^4.0.0", "screenfull": "^6.0.2", + "sortablejs": "^1.15.3", "sql-formatter": "^15.3.1", "styled-components": "^6.1.1", "use-sse": "^2.0.1", @@ -78,22 +83,24 @@ "@types/react-grid-layout": "^1.3.5", "@types/react-helmet": "^6.1.9", "@types/react-lottie": "^1.2.10", - "@umijs/lint": "^4.2.11", - "@umijs/max": "^4.2.11", + "@types/sortablejs": "^1.15.8", + "@umijs/lint": "^4.3.24", + "@umijs/max": "^4.3.24", "cross-env": "^7.0.3", "eslint": "^9.3.0", "express": "^4.19.2", "husky": "^9.0.11", "js-cookie": "^3.0.5", "lint-staged": "^15.2.4", + "monaco-editor-webpack-plugin": "^7.1.0", "prettier": "^3.2.5", "react-dev-inspector": "^2.0.1", "react-inspector": "^6.0.2", "sql-formatter": "^15.3.1", "swagger-ui-dist": "^5.17.12", "ts-node": "^10.9.2", - "typescript": "^5.4.5", - "umi-presets-pro": "^2.0.0" + "typescript": "^5.6.2", + "umi-presets-pro": "^2.0.3" }, "engines": { "node": ">=18", @@ -1075,6 +1082,134 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/@antv/algorithm": { + "version": "0.1.26", + "resolved": "https://registry.npmjs.org/@antv/algorithm/-/algorithm-0.1.26.tgz", + "integrity": "sha512-DVhcFSQ8YQnMNW34Mk8BSsfc61iC1sAnmcfYoXTAshYHuU50p/6b7x3QYaGctDNKWGvi1ub7mPcSY0bK+aN0qg==", + "dependencies": { + "@antv/util": "^2.0.13", + "tslib": "^2.0.0" + } + }, + "node_modules/@antv/algorithm/node_modules/@antv/util": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@antv/util/-/util-2.0.17.tgz", + "integrity": "sha512-o6I9hi5CIUvLGDhth0RxNSFDRwXeywmt6ExR4+RmVAzIi48ps6HUy+svxOCayvrPBN37uE6TAc2KDofRo0nK9Q==", + "dependencies": { + "csstype": "^3.0.8", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/ava": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@antv/ava/-/ava-3.4.1.tgz", + "integrity": "sha512-6DG7HrAr/bKXiBu7Na/t9sulIz5WlunuKaptsw48luoG7xwMcfLPXooaOFw0eCX8PdZX5UveGn0tzZC00Ywr4Q==", + "dependencies": { + "@antv/antv-spec": "^0.1.0-alpha.18", + "@antv/g2": "^5.0.8", + "@antv/smart-color": "^0.2.1", + "bayesian-changepoint": "^1.0.1", + "csstype": "^3.1.2", + "heap-js": "^2.1.6", + "lodash": "^4.17.21", + "regression": "^2.0.1", + "tslib": "^2.3.1" + } + }, + "node_modules/@antv/ava-react": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@antv/ava-react/-/ava-react-3.3.2.tgz", + "integrity": "sha512-2451VHfnmzMDfu1iOIgYU/UCe8rgnRBq0eIKCV6dqhTfGVYFFUOXNBrrUmRVsfiMTlp1UhkMwl1PM24Yf+fChA==", + "dependencies": { + "@antv/ava": "^3.4.0", + "@antv/g2": "^5.0.8", + "canvg": "^4.0.1", + "classnames": "^2.3.2", + "katex": "^0.16.4", + "lodash": "^4.17.21", + "styled-components": "^5.3.5", + "uuid": "^8.3.2" + }, + "peerDependencies": { + "@ant-design/icons": ">=4.7.0", + "antd": ">=4.16.13", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@antv/ava-react/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@antv/ava-react/node_modules/styled-components": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.11.tgz", + "integrity": "sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==", + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^1.1.0", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", + "babel-plugin-styled-components": ">= 1.12.0", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", + "supports-color": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0", + "react-is": ">= 16.8.0" + } + }, + "node_modules/@antv/ava-react/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@antv/ava-react/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@antv/ava/node_modules/@antv/antv-spec": { + "version": "0.1.0-alpha.18", + "resolved": "https://registry.npmjs.org/@antv/antv-spec/-/antv-spec-0.1.0-alpha.18.tgz", + "integrity": "sha512-30IdqLDdJFYZ/jXpaELYQEkwfR6qA0GoZ8+Wcu0ougYi5KPhM6W7OibFjofQUpPtIBIhMpW7zRcxW7gzFJVgvg==", + "peerDependencies": { + "@antv/g2plot": "^2.3.27", + "@antv/g6": "^4.3.11" + } + }, + "node_modules/@antv/color-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@antv/color-schema/-/color-schema-0.2.3.tgz", + "integrity": "sha512-lHkN/MHQ5nnuv2fmo2jy0j9mSIddYClvDLrucH5WdXnZRNW/Y7od4iO2H0caqLoYLC7rAtzrSsoA2MD1RUvIeQ==", + "dependencies": { + "@types/chroma-js": "^2.1.3" + } + }, "node_modules/@antv/component": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@antv/component/-/component-2.0.1.tgz", @@ -1111,58 +1246,63 @@ "integrity": "sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg==" }, "node_modules/@antv/g": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/@antv/g/-/g-6.0.10.tgz", - "integrity": "sha512-VH45ddgHQhEzWZ4aDpHHcu6f77vIVKhfEMgHZzUL9bnMTmJ2P4qf0DtarhP6BKvxcHlFFpJcSyYSxTurNHvW5w==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@antv/g/-/g-6.1.4.tgz", + "integrity": "sha512-YHiYqu1nmYFdzImvfHA8E2ZhwjLHljNsQ0D1jT5ONV/CX5S7PMINpjfB/6D+HqZuDS/umLGmfPqpk1lqjvPW9A==", "dependencies": { - "@antv/g-camera-api": "2.0.9", - "@antv/g-dom-mutation-observer-api": "2.0.6", - "@antv/g-lite": "2.0.6", - "@antv/g-web-animations-api": "2.0.7" + "@antv/g-camera-api": "2.0.18", + "@antv/g-dom-mutation-observer-api": "2.0.15", + "@antv/g-lite": "2.1.4", + "@antv/g-web-animations-api": "2.1.4", + "@babel/runtime": "^7.25.6" } }, "node_modules/@antv/g-camera-api": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@antv/g-camera-api/-/g-camera-api-2.0.9.tgz", - "integrity": "sha512-ixeF5lypyNqZ6Btua6FC7w3YvGi+WnmtDIAalByaM8lGDlYroZNYQTsOeVE4JsS15kjQwEe+GYs+e0jWgdXpeg==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/@antv/g-camera-api/-/g-camera-api-2.0.18.tgz", + "integrity": "sha512-N3Gd/kCSCoPZfTocAI0i1uu3VmKrVR6FAq+9QSLEHFdFpg6+Pvqjx32QeOgl3uhE5hNiG/FUZ7KWXDNSnKJS1w==", "dependencies": { - "@antv/g-lite": "2.0.6", + "@antv/g-lite": "2.1.4", "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", "gl-matrix": "^3.4.3", "tslib": "^2.5.3" } }, "node_modules/@antv/g-canvas": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@antv/g-canvas/-/g-canvas-2.0.8.tgz", - "integrity": "sha512-XyzFGq3xqIRxEnIIU310FyOyuNAuUKyh93plgkRkF2dOCpS3RAVQRRxD1vnG47NShwjfo3Pn0qiIKTSyxGXQZg==", - "dependencies": { - "@antv/g-lite": "2.0.6", - "@antv/g-plugin-canvas-path-generator": "2.0.6", - "@antv/g-plugin-canvas-picker": "2.0.7", - "@antv/g-plugin-canvas-renderer": "2.0.7", - "@antv/g-plugin-dom-interaction": "2.0.6", - "@antv/g-plugin-html-renderer": "2.0.7", - "@antv/g-plugin-image-loader": "2.0.6", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@antv/g-canvas/-/g-canvas-2.0.20.tgz", + "integrity": "sha512-o6aB/I4g6Xi3em6cwdgPQhm/3X1uf+KaMgyQKgB/FekWAD6kxf0qwQRmn0SggUCMcfpJDOrvKmifdIfeDV1zpw==", + "dependencies": { + "@antv/g-lite": "2.1.4", + "@antv/g-plugin-canvas-path-generator": "2.0.15", + "@antv/g-plugin-canvas-picker": "2.0.17", + "@antv/g-plugin-canvas-renderer": "2.1.4", + "@antv/g-plugin-dom-interaction": "2.1.4", + "@antv/g-plugin-html-renderer": "2.1.4", + "@antv/g-plugin-image-loader": "2.0.15", "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", "tslib": "^2.5.3" } }, "node_modules/@antv/g-dom-mutation-observer-api": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@antv/g-dom-mutation-observer-api/-/g-dom-mutation-observer-api-2.0.6.tgz", - "integrity": "sha512-VIdXYxaIa82oqxLu2si+zaMq+UCU4CZS1sdtE4oROEe9uhA4vlZsynfnoOD+nw5RcTwKWx9nu1IxI/xsjFXUvw==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@antv/g-dom-mutation-observer-api/-/g-dom-mutation-observer-api-2.0.15.tgz", + "integrity": "sha512-wHlTNJuVw899GaiWIBVtW6KG5Naf/xZXzK6GSX0z5QlcmNx5tZhUWFNreLebbADrHbr9XBNN2B5m3ndCX7500w==", "dependencies": { - "@antv/g-lite": "2.0.6" + "@antv/g-lite": "2.1.4", + "@babel/runtime": "^7.25.6" } }, "node_modules/@antv/g-lite": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@antv/g-lite/-/g-lite-2.0.6.tgz", - "integrity": "sha512-7lYAtxrNHqtQIsBYCub6HLrMNm0828dzBed9Kge1hZtLbTL0weCmZBq/te/0lpdNDVeP/XqwYmT6toIi3sc0Ew==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@antv/g-lite/-/g-lite-2.1.4.tgz", + "integrity": "sha512-RPs+NdvbD1WQpdoSB8pb7Ugrauxc0a2z4QJxvNWhjVPJqnB6GUlnLDKpbd+2vqzOf4GhObAfAdPbOXjA1HkHRw==", "dependencies": { "@antv/g-math": "3.0.0", "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", "d3-color": "^3.1.0", "eventemitter3": "^5.0.1", "gl-matrix": "^3.4.3", @@ -1181,132 +1321,153 @@ } }, "node_modules/@antv/g-plugin-canvas-path-generator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@antv/g-plugin-canvas-path-generator/-/g-plugin-canvas-path-generator-2.0.6.tgz", - "integrity": "sha512-wMRUPowlyp1t7u3aalBZM0gQXCrOVNqNpodOOwFPqe+M0qBpHmh9gUF1AtXyg3m84i4HCUFgmupJ9YZVCnZ2lg==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-canvas-path-generator/-/g-plugin-canvas-path-generator-2.0.15.tgz", + "integrity": "sha512-QsPYUdlgSvCOu6e6KrCdfaZPH3H15hY6kFJDGRSrtydAS/IM/YqgXxsw8Xl2nByCjSg48alwNuFoajgu+7dgzA==", "dependencies": { - "@antv/g-lite": "2.0.6", + "@antv/g-lite": "2.1.4", "@antv/g-math": "3.0.0", "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", "tslib": "^2.5.3" } }, "node_modules/@antv/g-plugin-canvas-picker": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@antv/g-plugin-canvas-picker/-/g-plugin-canvas-picker-2.0.7.tgz", - "integrity": "sha512-c1igCBXG4ZBvzxrTQ9DNxhYdA1gkzNv6JbTmT2ZDIBMxkLi1sD9jjEF00vc1+d2OHS3bpqmfpLkIniZCtAN3kA==", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-canvas-picker/-/g-plugin-canvas-picker-2.0.17.tgz", + "integrity": "sha512-A36VnA25QCh38xhnuVHwK5/NKp5dAQ0Y1ZoQ6JTZHNWox+ZChjSDbfimtQOVQQaixoX4O6JFtFroUgno7vHIkg==", "dependencies": { - "@antv/g-lite": "2.0.6", + "@antv/g-lite": "2.1.4", "@antv/g-math": "3.0.0", - "@antv/g-plugin-canvas-path-generator": "2.0.6", - "@antv/g-plugin-canvas-renderer": "2.0.7", + "@antv/g-plugin-canvas-path-generator": "2.0.15", + "@antv/g-plugin-canvas-renderer": "2.1.4", "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", "gl-matrix": "^3.4.3", "tslib": "^2.5.3" } }, "node_modules/@antv/g-plugin-canvas-renderer": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@antv/g-plugin-canvas-renderer/-/g-plugin-canvas-renderer-2.0.7.tgz", - "integrity": "sha512-GcfAyCXrsBCOUWPx8MnyMN3TJ/ocb9APg6gO1LeN5F8YN0fpkKqxuhfHTtc5D1dCG0+8VQWSyI3HdkbOOhA3vA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-canvas-renderer/-/g-plugin-canvas-renderer-2.1.4.tgz", + "integrity": "sha512-VtcaCZP04zsjocKNVaHTE0323GZh5J+y9ZwF316mfwD3+Ji97ueRIrXDmi0oVmnC64T3N3JKwOy+xoKOd/mw6g==", "dependencies": { - "@antv/g-lite": "2.0.6", + "@antv/g-lite": "2.1.4", "@antv/g-math": "3.0.0", - "@antv/g-plugin-canvas-path-generator": "2.0.6", - "@antv/g-plugin-image-loader": "2.0.6", + "@antv/g-plugin-canvas-path-generator": "2.0.15", + "@antv/g-plugin-image-loader": "2.0.15", "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", "gl-matrix": "^3.4.3", "tslib": "^2.5.3" } }, "node_modules/@antv/g-plugin-dom-interaction": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@antv/g-plugin-dom-interaction/-/g-plugin-dom-interaction-2.0.6.tgz", - "integrity": "sha512-tu9+PNPSc7JOO+rZ/Q7tTuPMbMXRsXg9AVVaB+PzwGuYYQmCfRuudtPa5+lVWzXaFc6wlThb4v9qeA2AerqeNw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-dom-interaction/-/g-plugin-dom-interaction-2.1.4.tgz", + "integrity": "sha512-ewWyGj4ipYMeh9yyoZVjyOOyfGDvzIVFZ1TrY1LYh75UsOQGbCIF/IdeBCOYxM/hEi9nQAVlxgc5g6AOH6CCXw==", "dependencies": { - "@antv/g-lite": "2.0.6", + "@antv/g-lite": "2.1.4", + "@babel/runtime": "^7.25.6", "tslib": "^2.5.3" } }, "node_modules/@antv/g-plugin-dragndrop": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@antv/g-plugin-dragndrop/-/g-plugin-dragndrop-2.0.6.tgz", - "integrity": "sha512-qMrDbrGEnM66Qg/vwI+zNdhFNoN+pjzyZtO3MD+CjNQnEGpQqy1W9PNLpWcFE43BU5Z/JkoUtu6Oy5C/WKHBbQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-dragndrop/-/g-plugin-dragndrop-2.0.14.tgz", + "integrity": "sha512-UwBr1CfDlwOLLbUlvQWP/LZvy+lvJL8dko2zuqKWXvEXS7BK/nmogAj0wH3KJxnlWInWwwl1vghnnyly4MLsJw==", "dependencies": { - "@antv/g-lite": "2.0.6", + "@antv/g-lite": "2.1.3", "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", "tslib": "^2.5.3" } }, - "node_modules/@antv/g-plugin-html-renderer": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@antv/g-plugin-html-renderer/-/g-plugin-html-renderer-2.0.7.tgz", - "integrity": "sha512-j5zuVJ3cBm0VfJBTAtMa5GB159HSInBBXO3Nup4UVaKjl7JSL0Qkz5vZCvRX6rv6UD19+vH483v7JtQ+JXcgHA==", + "node_modules/@antv/g-plugin-dragndrop/node_modules/@antv/g-lite": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@antv/g-lite/-/g-lite-2.1.3.tgz", + "integrity": "sha512-1Au5FzxX3RnwNyhrvCrlBtUcinczf9bAoUQ6F/eNVpisVrabjJ0vADRYTDGRJU2RE8JAtUfo7Isjfe7mRKksFw==", "dependencies": { - "@antv/g-lite": "2.0.6", + "@antv/g-math": "3.0.0", "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "d3-color": "^3.1.0", + "eventemitter3": "^5.0.1", "gl-matrix": "^3.4.3", + "rbush": "^3.0.1", "tslib": "^2.5.3" } }, - "node_modules/@antv/g-plugin-image-loader": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@antv/g-plugin-image-loader/-/g-plugin-image-loader-2.0.6.tgz", - "integrity": "sha512-lyJ157fDqH0iFBYwFGUxZNUOxN0vRV5hF7e0iK9ElvSEc2ovqpLi0UVwjAbA67eJwpd5Y771Go1sRfx0XJo87Q==", + "node_modules/@antv/g-plugin-html-renderer": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-html-renderer/-/g-plugin-html-renderer-2.1.4.tgz", + "integrity": "sha512-a/1m1xOpAWusFtWsKq4ohJUWFrMbjc1g0LCPz1mu2D0r9AMl9fXhPaPmm5XapTkWBHHpOiJKEV8wsNVgkMK5Zw==", "dependencies": { - "@antv/g-lite": "2.0.6", + "@antv/g-lite": "2.1.4", "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", "gl-matrix": "^3.4.3", "tslib": "^2.5.3" } }, - "node_modules/@antv/g-web-animations-api": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@antv/g-web-animations-api/-/g-web-animations-api-2.0.7.tgz", - "integrity": "sha512-BpP86sTRAgNAWHDNajOhoM0YC2eL95iUFGcRftulrZ/8sqnTXF/M/I319vcznylwKNS37tzVmEppn76vS35UmQ==", + "node_modules/@antv/g-plugin-image-loader": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-image-loader/-/g-plugin-image-loader-2.0.15.tgz", + "integrity": "sha512-iP991rOUoJHUyX8GoJ5ASRexZyhEJfMvfTZoWIpduTcH2EiYJh/luLwKedlUQ71haF3/TraEJPE+0LzGnxOeJQ==", "dependencies": { - "@antv/g-lite": "2.0.6", + "@antv/g-lite": "2.1.4", "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "gl-matrix": "^3.4.3", "tslib": "^2.5.3" } }, - "node_modules/@antv/g-webgpu": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@antv/g-webgpu/-/g-webgpu-0.7.2.tgz", - "integrity": "sha512-kw+oYGsdvj5qeUfy5DPb/jztZBV+2fmqBd3Vv8NlKatfBmv8AirYX/CCW74AUSdWm99rEiLyxFB1VdRZ6b/wnQ==", + "node_modules/@antv/g-plugin-svg-picker": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-svg-picker/-/g-plugin-svg-picker-2.0.17.tgz", + "integrity": "sha512-wUVNPbbLtyAcl/LBwMqAI5+CDlzwXy6DvkGIEY7J1MB3WY/s8Td8mr7Jd1MaP4xQTiFqQ+uupbVSur+v/pGSrg==", "dependencies": { - "@antv/g-webgpu-core": "^0.7.2", - "@antv/g-webgpu-engine": "^0.7.2", - "gl-matrix": "^3.1.0", - "gl-vec2": "^1.3.0", - "lodash": "^4.17.15" + "@antv/g-lite": "2.1.4", + "@antv/g-plugin-svg-renderer": "2.1.4", + "@babel/runtime": "^7.25.6", + "tslib": "^2.5.3" } }, - "node_modules/@antv/g-webgpu-core": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@antv/g-webgpu-core/-/g-webgpu-core-0.7.2.tgz", - "integrity": "sha512-xUMmop7f3Rs34zFYKXLqHhDR1CQTeDl/7vI7Sn3X/73BqJc3X3HIIRvm83Fg2CjVACaOzw4WeLRXNaOCp9fz9w==", + "node_modules/@antv/g-plugin-svg-renderer": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-svg-renderer/-/g-plugin-svg-renderer-2.1.4.tgz", + "integrity": "sha512-XOHSLKEzpRVUGEKcwX9xx7Mg9Bnapj1YbTliTJ+r1FnGLLsSkWKe8DT00TlH2mTXYdQWO5LaJFYEEuAmttswtA==", "dependencies": { - "eventemitter3": "^4.0.0", - "gl-matrix": "^3.1.0", - "lodash": "^4.17.15", - "probe.gl": "^3.1.1" + "@antv/g-lite": "2.1.4", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "gl-matrix": "^3.4.3", + "tslib": "^2.5.3" } }, - "node_modules/@antv/g-webgpu-core/node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "node_modules/@antv/g-svg": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@antv/g-svg/-/g-svg-2.0.17.tgz", + "integrity": "sha512-FnMEW9UWgODZFvG9i9pfpgbynckD2T4fuBZi8Elq1STOe7qpGMUk3lJSJ4dFvtMLK+115BkmtsqMxJU7/+lYmQ==", + "dependencies": { + "@antv/g-lite": "2.1.4", + "@antv/g-plugin-dom-interaction": "2.1.4", + "@antv/g-plugin-svg-picker": "2.0.17", + "@antv/g-plugin-svg-renderer": "2.1.4", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "tslib": "^2.5.3" + } }, - "node_modules/@antv/g-webgpu-engine": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@antv/g-webgpu-engine/-/g-webgpu-engine-0.7.2.tgz", - "integrity": "sha512-lx8Y93IW2cnJvdoDRKyMmTdYqSC1pOmF0nyG3PGGyA0NI9vBYVgO0KTF6hkyWjdTWVq7XDZyf/h8CJridLh3lg==", + "node_modules/@antv/g-web-animations-api": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@antv/g-web-animations-api/-/g-web-animations-api-2.1.4.tgz", + "integrity": "sha512-KLPrP3HsnKDKdoBF3ijiXY8QJx8FrdRRPFmz1uVVIzyfJa7UVX5HOi7soK7Nh6Grg3eiy99Y9y9U1IQe41J5fQ==", "dependencies": { - "@antv/g-webgpu-core": "^0.7.2", - "gl-matrix": "^3.1.0", - "lodash": "^4.17.15", - "regl": "^1.3.11" + "@antv/g-lite": "2.1.4", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "tslib": "^2.5.3" } }, "node_modules/@antv/g2": { @@ -1347,49 +1508,179 @@ "d3-hierarchy": "^3.1.2" } }, - "node_modules/@antv/graphlib": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@antv/graphlib/-/graphlib-1.2.0.tgz", - "integrity": "sha512-hhJOMThec51nU4Fe5p/viLlNIL71uDEgYFzKPajWjr2715SFG1HAgiP6AVylIeqBcAZ04u3Lw7usjl/TuI5RuQ==" + "node_modules/@antv/g6": { + "version": "5.0.27", + "resolved": "https://registry.npmjs.org/@antv/g6/-/g6-5.0.27.tgz", + "integrity": "sha512-L8Bx3BUkKPNzPqiXgqn49re8RZPVBw13h7EXYaMFLRCZsjpw1AMBcAJ2muAfJV8HTWjdV2c5gUwwzYlK7L7p2g==", + "dependencies": { + "@antv/algorithm": "^0.1.26", + "@antv/component": "^2.1.0", + "@antv/event-emitter": "^0.1.3", + "@antv/g": "^6.1.2", + "@antv/g-canvas": "^2.0.18", + "@antv/g-plugin-dragndrop": "^2.0.13", + "@antv/graphlib": "^2.0.3", + "@antv/hierarchy": "^0.6.13", + "@antv/layout": "^1.2.14-beta.8", + "@antv/util": "^3.3.8", + "bubblesets-js": "^2.3.3", + "hull.js": "^1.0.6" + } + }, + "node_modules/@antv/g6-extension-react": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@antv/g6-extension-react/-/g6-extension-react-0.1.7.tgz", + "integrity": "sha512-fKk1weq2odHSTi5i8iSg9/keDPbufryA2TZ2X2j+qkSAwxJ7WtURagV/7/CUN9r1tMMk1eoiuzQZXdvc72a1GA==", + "dependencies": { + "@antv/g": "^6.0.13", + "@antv/g-svg": "^2.0.11", + "@antv/react-g": "^2.0.14" + }, + "peerDependencies": { + "@antv/g6": "^5.0.22", + "react": ">=16.8", + "react-dom": ">=16.8" + } }, - "node_modules/@antv/hierarchy": { - "version": "0.6.12", - "resolved": "https://registry.npmjs.org/@antv/hierarchy/-/hierarchy-0.6.12.tgz", - "integrity": "sha512-WvWT9WYtm2SvYunm1HtzrHazvOozeP4cPFDhJWsnLzmTGMX/tNhsoCD3O+DDB3aeDY8fyM+wfZDvLv7+/4lIeA==" + "node_modules/@antv/g6-extension-react/node_modules/@antv/react-g": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@antv/react-g/-/react-g-2.0.20.tgz", + "integrity": "sha512-dT+XFuXaPk7VYFombFJLL0CFmisF+kYOhH9PwoSAQXrVIDVx5B9k3bF+XPIj/nushGD1SpwP7Bw9uq3dkNvheg==", + "dependencies": { + "@antv/g": "6.1.4", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "gl-matrix": "^3.4.3", + "react-reconciler": "^0.26.2", + "scheduler": "^0.20.2", + "tslib": "^2.5.3" + }, + "peerDependencies": { + "react": "^16.13.1" + } }, - "node_modules/@antv/layout": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@antv/layout/-/layout-0.3.25.tgz", - "integrity": "sha512-d29Aw1PXoAavMRZy7iTB9L5rMBeChFEX0BJ9ELP4TI35ySdCu07YbmPo9ju9OH/6sG2/NB3o85Ayxrre3iwX/g==", + "node_modules/@antv/g6-extension-react/node_modules/@antv/react-g/node_modules/react-reconciler": { + "version": "0.26.2", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.26.2.tgz", + "integrity": "sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q==", "dependencies": { - "@antv/g-webgpu": "0.7.2", - "@antv/graphlib": "^1.0.0", - "@antv/util": "^3.3.2", - "d3-force": "^2.1.1", - "d3-quadtree": "^2.0.0", - "dagre-compound": "^0.0.11", - "ml-matrix": "6.5.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^17.0.2" } }, - "node_modules/@antv/layout/node_modules/d3-dispatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-2.0.0.tgz", - "integrity": "sha512-S/m2VsXI7gAti2pBoLClFFTMOO1HTtT0j99AuXLoGFKO6deHDdnv6ZGTxSTTUTgO1zVcv82fCOtDjYK4EECmWA==" + "node_modules/@antv/g6-extension-react/node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } }, - "node_modules/@antv/layout/node_modules/d3-force": { + "node_modules/@antv/g6/node_modules/@antv/component": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-2.1.1.tgz", - "integrity": "sha512-nAuHEzBqMvpFVMf9OX75d00OxvOXdxY+xECIXjW6Gv8BRrXu6gAWbv/9XKrvfJ5i5DCokDW7RYE50LRoK092ew==", + "resolved": "https://registry.npmjs.org/@antv/component/-/component-2.1.1.tgz", + "integrity": "sha512-V0UCq3Bekqtjw5WedexT1tHM/9x5BY0UAaU7G/5A2NhRfp9GuaQ8xGWLMSWlCQiJSRZWhPIA7RoOSw4Y/W+7UA==", "dependencies": { - "d3-dispatch": "1 - 2", - "d3-quadtree": "1 - 2", - "d3-timer": "1 - 2" + "@antv/g": "^6.1.2", + "@antv/scale": "^0.4.3", + "@antv/util": "^3.3.5", + "svg-path-parser": "^1.1.0" } }, - "node_modules/@antv/layout/node_modules/d3-timer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-2.0.0.tgz", - "integrity": "sha512-TO4VLh0/420Y/9dO3+f9abDEFYeCUr2WZRlxJvbp4HPTQcSylXNiL6yZa9FIUvV1yRiFufl1bszTCLDqv9PWNA==" + "node_modules/@antv/g6/node_modules/@antv/layout": { + "version": "1.2.14-beta.8", + "resolved": "https://registry.npmjs.org/@antv/layout/-/layout-1.2.14-beta.8.tgz", + "integrity": "sha512-/zP8pRz28ahYSVk4fsfhl3T1X3FvCAi7Q3YQ8H2LZEvTojYYrJtO2AXFsojehU6HGVnIAq+QIjd3He6ot8+gvA==", + "dependencies": { + "@antv/event-emitter": "^0.1.3", + "@antv/graphlib": "^2.0.0", + "@antv/util": "^3.3.2", + "@naoak/workerize-transferable": "^0.1.0", + "comlink": "^4.4.1", + "d3-force": "^3.0.0", + "d3-force-3d": "^3.0.5", + "d3-octree": "^1.0.2", + "d3-quadtree": "^3.0.1", + "dagre": "^0.8.5", + "ml-matrix": "^6.10.4", + "tslib": "^2.5.0" + } + }, + "node_modules/@antv/g6/node_modules/@antv/util": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/@antv/util/-/util-3.3.10.tgz", + "integrity": "sha512-basGML3DFA3O87INnzvDStjzS+n0JLEhRnRsDzP9keiXz8gT1z/fTdmJAZFOzMMWxy+HKbi7NbSt0+8vz/OsBQ==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "gl-matrix": "^3.3.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@antv/g6/node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/@antv/graphin": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@antv/graphin/-/graphin-3.0.2.tgz", + "integrity": "sha512-r06mf7vSRB/GK2b/Zx8LovI2zf2iL7hkoKNak8NVuWY7FmnOzEiJthKhwaTBVCO6KGTlxPpslMpvVevOPQUTCQ==", + "dependencies": { + "@antv/g6": "^5.0.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@antv/graphlib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@antv/graphlib/-/graphlib-2.0.3.tgz", + "integrity": "sha512-EtQR+DIfsYy28tumTnH560v7yIzXZq0nSgFBZh76mMiV1oHEN1L4p6JKu7IMtILH14mDqzmYYYFetYoAODoQUw==", + "dependencies": { + "@antv/event-emitter": "^0.1.3" + } + }, + "node_modules/@antv/hierarchy": { + "version": "0.6.14", + "resolved": "https://registry.npmjs.org/@antv/hierarchy/-/hierarchy-0.6.14.tgz", + "integrity": "sha512-V3uknf7bhynOqQDw2sg+9r9DwZ9pc6k/EcqyTFdfXB1+ydr7urisP0MipIuimucvQKN+Qkd+d6w601r1UIroqQ==" + }, + "node_modules/@antv/layout": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@antv/layout/-/layout-1.2.13.tgz", + "integrity": "sha512-yoGeA+R/Sk2Z6dVzmGY80tLx4rPqPcZJHIQr6sNejP1KsGZXjIry/NZMTxXRWmQ+XIfE5VIhiCo5P+y7LVxvxA==", + "dependencies": { + "@antv/event-emitter": "^0.1.3", + "@antv/graphlib": "^2.0.0", + "@antv/util": "^3.3.2", + "@naoak/workerize-transferable": "^0.1.0", + "comlink": "^4.4.1", + "d3-force": "^3.0.0", + "d3-octree": "^1.0.2", + "d3-quadtree": "^3.0.1", + "ml-matrix": "^6.10.4", + "tslib": "^2.5.0" + } + }, + "node_modules/@antv/layout/node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "engines": { + "node": ">=12" + } }, "node_modules/@antv/matrix-util": { "version": "3.0.4", @@ -1420,6 +1711,17 @@ "fecha": "^4.2.1" } }, + "node_modules/@antv/smart-color": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@antv/smart-color/-/smart-color-0.2.1.tgz", + "integrity": "sha512-2E42oczcJtfMQCSk+Ms5pWC34aH3S8/vHBWDCiwBhuImVodzYTHDAaU1oTYN2XlJMaLSsA7lE1UUFmOG8xjOOw==", + "dependencies": { + "@antv/color-schema": "^0.2.2", + "chroma-js": "^2.1.2", + "color-blind": "^0.1.1", + "quantize": "^1.0.2" + } + }, "node_modules/@antv/util": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/@antv/util/-/util-3.3.7.tgz", @@ -1473,11 +1775,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -1485,28 +1788,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.8.tgz", - "integrity": "sha512-c4IM7OTg6k1Q+AJ153e2mc2QVTezTwnb4VzquwcyiEzGnW0Kedv4do/TrkU98qPeC5LNiMt/QXwIjzYXLBpyZg==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.8.tgz", - "integrity": "sha512-6AWcmZC/MZCO0yKys4uhg5NlxL0ESF3K6IAaoQ+xSXvPyPyxNWRafP+GDbI88Oh68O7QkJgmEtedWPM9U0pZNg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.8", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helpers": "^7.24.8", - "@babel/parser": "^7.24.8", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -1557,26 +1860,37 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.8.tgz", - "integrity": "sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", "dependencies": { - "@babel/types": "^7.24.8", + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/generator/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", - "dev": true, + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1596,13 +1910,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", - "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dependencies": { - "@babel/compat-data": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -1619,19 +1933,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.8.tgz", - "integrity": "sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", "semver": "^6.3.1" }, "engines": { @@ -1696,6 +2008,7 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, "dependencies": { "@babel/types": "^7.24.7" }, @@ -1703,22 +2016,11 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-hoist-variables": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dev": true, "dependencies": { "@babel/types": "^7.24.7" }, @@ -1727,40 +2029,38 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", "dev": true, "dependencies": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.8.tgz", - "integrity": "sha512-m4vWKVqvkVAWLXfHCCfff2luJj86U+J0/x+0N3ArG/tP0Fq7zky2dYwMbtPmkc/oulkkbjdL3uWzuoBwQ8R00Q==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1770,35 +2070,34 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", "dev": true, "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", - "dev": true, + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz", - "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-wrap-function": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1808,14 +2107,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", - "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.7", - "@babel/helper-optimise-call-expression": "^7.24.7" + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1828,6 +2127,7 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -1837,75 +2137,63 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", "dev": true, "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", - "dependencies": { - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz", - "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", - "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.8" + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" }, "engines": { "node": ">=6.9.0" @@ -1915,6 +2203,7 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", @@ -1929,6 +2218,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -1940,6 +2230,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -1953,6 +2244,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -1960,12 +2252,14 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -1974,6 +2268,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { "node": ">=4" } @@ -1982,6 +2277,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -1990,9 +2286,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", - "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "dependencies": { + "@babel/types": "^7.26.0" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -2255,12 +2554,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", - "dev": true, + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2372,12 +2670,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", - "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2418,15 +2716,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", - "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", + "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2468,12 +2765,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz", - "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2483,13 +2780,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", - "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2516,18 +2813,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.8.tgz", - "integrity": "sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", "globals": "^11.1.0" }, "engines": { @@ -2664,14 +2959,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz", - "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2697,12 +2992,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz", - "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3019,16 +3314,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz", - "integrity": "sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3053,12 +3348,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", - "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3068,12 +3363,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", - "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3206,15 +3501,16 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.8.tgz", - "integrity": "sha512-CgFgtN61BbdOGCP4fLaAMOPkzWUh6yQZNMr5YSt8uz2cZSSiQONCQFWqsE4NeVfOIhqDOlS9CR3WD91FzMeB2Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", + "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/plugin-syntax-typescript": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3461,31 +3757,28 @@ } }, "node_modules/@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", - "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.8", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.8", - "@babel/types": "^7.24.8", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -3494,13 +3787,12 @@ } }, "node_modules/@babel/types": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.8.tgz", - "integrity": "sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3949,6 +4241,11 @@ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" }, + "node_modules/@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + }, "node_modules/@emotion/unitless": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", @@ -3976,6 +4273,7 @@ "version": "2.4.4", "resolved": "https://registry.npmjs.org/@esbuild-kit/cjs-loader/-/cjs-loader-2.4.4.tgz", "integrity": "sha512-NfsJX4PdzhwSkfJukczyUiZGc7zNNWZcEAyqeISpDnn0PTfzMJR1aR8xAIPskBejIxBJbIgCCMzbaYa9SXepIg==", + "deprecated": "Merged into tsx: https://tsx.is", "dev": true, "dependencies": { "@esbuild-kit/core-utils": "^3.2.3", @@ -3986,6 +4284,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz", "integrity": "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==", + "deprecated": "Merged into tsx: https://tsx.is", "dev": true, "dependencies": { "esbuild": "~0.18.20", @@ -4344,12 +4643,6 @@ "node": ">=12" } }, - "node_modules/@esbuild-kit/core-utils/node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, "node_modules/@esbuild-kit/core-utils/node_modules/esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", @@ -4410,6 +4703,7 @@ "version": "2.6.5", "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz", "integrity": "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==", + "deprecated": "Merged into tsx: https://tsx.is", "dev": true, "dependencies": { "@esbuild-kit/core-utils": "^3.3.2", @@ -5374,9 +5668,9 @@ } }, "node_modules/@jest/transform/node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -5531,6 +5825,302 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/@naoak/workerize-transferable": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@naoak/workerize-transferable/-/workerize-transferable-0.1.0.tgz", + "integrity": "sha512-fDLfuP71IPNP5+zSfxFb52OHgtjZvauRJWbVnpzQ7G7BjcbLjTny0OW1d3ZO806XKpLWNKmeeW3MhE0sy8iwYQ==", + "peerDependencies": { + "workerize-loader": "*" + } + }, + "node_modules/@napi-rs/nice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.1.tgz", + "integrity": "sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.0.1", + "@napi-rs/nice-android-arm64": "1.0.1", + "@napi-rs/nice-darwin-arm64": "1.0.1", + "@napi-rs/nice-darwin-x64": "1.0.1", + "@napi-rs/nice-freebsd-x64": "1.0.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.0.1", + "@napi-rs/nice-linux-arm64-gnu": "1.0.1", + "@napi-rs/nice-linux-arm64-musl": "1.0.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.0.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.0.1", + "@napi-rs/nice-linux-s390x-gnu": "1.0.1", + "@napi-rs/nice-linux-x64-gnu": "1.0.1", + "@napi-rs/nice-linux-x64-musl": "1.0.1", + "@napi-rs/nice-win32-arm64-msvc": "1.0.1", + "@napi-rs/nice-win32-ia32-msvc": "1.0.1", + "@napi-rs/nice-win32-x64-msvc": "1.0.1" + } + }, + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz", + "integrity": "sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.1.tgz", + "integrity": "sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz", + "integrity": "sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.1.tgz", + "integrity": "sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.1.tgz", + "integrity": "sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.1.tgz", + "integrity": "sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.1.tgz", + "integrity": "sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.1.tgz", + "integrity": "sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.1.tgz", + "integrity": "sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.1.tgz", + "integrity": "sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.1.tgz", + "integrity": "sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.1.tgz", + "integrity": "sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.1.tgz", + "integrity": "sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.1.tgz", + "integrity": "sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.1.tgz", + "integrity": "sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz", + "integrity": "sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -6054,31 +6644,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@probe.gl/env": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-3.6.0.tgz", - "integrity": "sha512-4tTZYUg/8BICC3Yyb9rOeoKeijKbZHRXBEKObrfPmX4sQmYB15ZOUpoVBhAyJkOYVAM8EkPci6Uw5dLCwx2BEQ==", - "dependencies": { - "@babel/runtime": "^7.0.0" - } - }, - "node_modules/@probe.gl/log": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-3.6.0.tgz", - "integrity": "sha512-hjpyenpEvOdowgZ1qMeCJxfRD4JkKdlXz0RC14m42Un62NtOT+GpWyKA4LssT0+xyLULCByRAtG2fzZorpIAcA==", - "dependencies": { - "@babel/runtime": "^7.0.0", - "@probe.gl/env": "3.6.0" - } - }, - "node_modules/@probe.gl/stats": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-3.6.0.tgz", - "integrity": "sha512-JdALQXB44OP4kUBN/UrQgzbJe4qokbVF4Y8lkIA8iVCFnjVowWIgkD/z/0QO65yELT54tTrtepw1jScjKB+rhQ==", - "dependencies": { - "@babel/runtime": "^7.0.0" - } - }, "node_modules/@radix-ui/popper": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/@radix-ui/popper/-/popper-0.0.10.tgz", @@ -7228,6 +7793,11 @@ "@types/node": "*" } }, + "node_modules/@types/chroma-js": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/chroma-js/-/chroma-js-2.4.4.tgz", + "integrity": "sha512-/DTccpHTaKomqussrn+ciEvfW4k6NAHzNzs/sts1TCqg333qNxOhy8TNIoQCmbGG3Tl8KdEhkGAssb1n3mTXiQ==" + }, "node_modules/@types/classnames": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.3.1.tgz", @@ -7266,9 +7836,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" }, "node_modules/@types/estree-jsx": { "version": "1.0.5", @@ -7484,6 +8054,11 @@ "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", "dev": true }, + "node_modules/@types/raf": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==" + }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", @@ -7590,6 +8165,12 @@ "@types/send": "*" } }, + "node_modules/@types/sortablejs": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.8.tgz", + "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==", + "dev": true + }, "node_modules/@types/stylis": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", @@ -7887,24 +8468,24 @@ } }, "node_modules/@umijs/ast": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/ast/-/ast-4.3.6.tgz", - "integrity": "sha512-+tHH4gc21yUlUsZr4sWwXcxXmwGw4M/S3GMQ6P6NudQqTokD/nV31GPvVPA64njCheK2zj4l+CQYZTnNw4iYZw==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/ast/-/ast-4.3.28.tgz", + "integrity": "sha512-woQ53WWghne1dpFCEqshArOLdYwyi6lbhGLCzj3LU1WkaXWbfiQkMFvFlWOqjwLe1tumn30CEiiup2jHi5A+8Q==", "dev": true, "dependencies": { - "@umijs/bundler-utils": "4.3.6" + "@umijs/bundler-utils": "4.3.28" } }, "node_modules/@umijs/babel-preset-umi": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/babel-preset-umi/-/babel-preset-umi-4.3.6.tgz", - "integrity": "sha512-Okso4CLgCsBYmPKOLzfo54AU6IwVuMdJlx0sh80R43DaKCje0sAOSVworOBsMiPHEKORG89papQnpwDVgnPO2A==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/babel-preset-umi/-/babel-preset-umi-4.3.28.tgz", + "integrity": "sha512-ZfKMrFPdbrkX0Wcm16bnrbdkBGZ4lJAyMhWBcaB1j5e2/SUcJ3S96qXSdcmRirtHZTYkJQIRxpPolPUDat7QOg==", "dev": true, "dependencies": { "@babel/runtime": "7.23.6", "@bloomberg/record-tuple-polyfill": "0.0.4", - "@umijs/bundler-utils": "4.3.6", - "@umijs/utils": "4.3.6", + "@umijs/bundler-utils": "4.3.28", + "@umijs/utils": "4.3.28", "core-js": "3.34.0" } }, @@ -7921,13 +8502,13 @@ } }, "node_modules/@umijs/bundler-esbuild": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/bundler-esbuild/-/bundler-esbuild-4.3.6.tgz", - "integrity": "sha512-u8sFcAabWmzVfUf2hRNNXC/KVIgcvn3JxfAIVncNZti1P5b8qizFQ4JrqImh1A10UUzY8GOQD85T8sEw0iWPBA==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/bundler-esbuild/-/bundler-esbuild-4.3.28.tgz", + "integrity": "sha512-IBt/vPJbenG5m/H2zfjUKARCtwMyb/udwyqCSTY6k713spZNmlX8RxPHXIOH7JyyiDmSnEHAkMi9HuvBYkEReg==", "dev": true, "dependencies": { - "@umijs/bundler-utils": "4.3.6", - "@umijs/utils": "4.3.6", + "@umijs/bundler-utils": "4.3.28", + "@umijs/utils": "4.3.28", "enhanced-resolve": "5.9.3", "postcss": "^8.4.21", "postcss-flexbugs-fixes": "5.0.2", @@ -7938,18 +8519,19 @@ } }, "node_modules/@umijs/bundler-mako": { - "version": "0.7.6-beta.2", - "resolved": "https://registry.npmjs.org/@umijs/bundler-mako/-/bundler-mako-0.7.6-beta.2.tgz", - "integrity": "sha512-uMkbVKvoZYRe1Ws3oO3yLof8Ktwj/gS8rcmsh4OSMlOReyb9tZvGHucbtpW+ilvgThqegM0sJUhzgVdJKVQ4UQ==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@umijs/bundler-mako/-/bundler-mako-0.9.3.tgz", + "integrity": "sha512-gyOzLthR7baISonfV78OMj5MBNw/lSBON+SR0a1i19pZVhH05xn9NvH9gD0madoN4/D4Br8k+cgHeHPdgzZccA==", "dev": true, "dependencies": { "@umijs/bundler-utils": "^4.0.81", - "@umijs/mako": "0.7.5", + "@umijs/mako": "0.9.3", "chalk": "^4.1.2", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", "cors": "^2.8.5", "express": "^4.18.2", + "express-http-proxy": "^2.1.1", "get-tsconfig": "4.7.5", "lodash": "^4.17.21", "rimraf": "5.0.1", @@ -8028,12 +8610,12 @@ } }, "node_modules/@umijs/bundler-utils": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/bundler-utils/-/bundler-utils-4.3.6.tgz", - "integrity": "sha512-NSpfHBvMB0qTWIAwnfuRh9IGNzWCOTZ4p3lng5qtxYkrigsH/SKOS+d3LSMGg7k0SRtA4nKtSYvWExE5IMqoUQ==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/bundler-utils/-/bundler-utils-4.3.28.tgz", + "integrity": "sha512-+KqOgzAb/va8DColDeN4kJg+dv9CtrkNZpo42p00K61a4Z+8OBxKul8XjgPw5lLS421ckuoI9wkCHH9D9obmxw==", "dev": true, "dependencies": { - "@umijs/utils": "4.3.6", + "@umijs/utils": "4.3.28", "esbuild": "0.21.4", "regenerate": "^1.4.2", "regenerate-unicode-properties": "10.1.1", @@ -8041,14 +8623,14 @@ } }, "node_modules/@umijs/bundler-vite": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/bundler-vite/-/bundler-vite-4.3.6.tgz", - "integrity": "sha512-p491ZfllZ2ndMw88kyGR0UyZfWiB7wqY4hTi5oXlrnGOomB27+UUCyRjVIrpfWEmH6HnGOGdbgtJKjr6zTivww==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/bundler-vite/-/bundler-vite-4.3.28.tgz", + "integrity": "sha512-7DsPYdJ+cqE6wYC2mc50jxOIlxtqMzRblZDdxXa9qSJEZl6pFBETtuFNKoZkIerhbKhsB9XjU8ltB1WyZU8B8g==", "dev": true, "dependencies": { "@svgr/core": "6.5.1", - "@umijs/bundler-utils": "4.3.6", - "@umijs/utils": "4.3.6", + "@umijs/bundler-utils": "4.3.28", + "@umijs/utils": "4.3.28", "@vitejs/plugin-react": "4.0.0", "core-js": "3.34.0", "less": "4.1.3", @@ -8061,115 +8643,22 @@ "bundler-vite": "bin/bundler-vite.js" } }, - "node_modules/@umijs/bundler-vite/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@umijs/bundler-vite/node_modules/rollup-plugin-visualizer": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.0.tgz", - "integrity": "sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==", - "dev": true, - "dependencies": { - "open": "^8.4.0", - "picomatch": "^2.3.1", - "source-map": "^0.7.4", - "yargs": "^17.5.1" - }, - "bin": { - "rollup-plugin-visualizer": "dist/bin/cli.js" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "rollup": "2.x || 3.x" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@umijs/bundler-vite/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@umijs/bundler-vite/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@umijs/bundler-vite/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@umijs/bundler-vite/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/@umijs/bundler-webpack": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/bundler-webpack/-/bundler-webpack-4.3.6.tgz", - "integrity": "sha512-aqRwYVvXaAyze7C2Ti4GdF0RNKfNlnFaLQtO+bqEnJ+GOUdbf8p8I/MW4zuxG/Vzt6yHr9njFofm1UERjLV7wg==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/bundler-webpack/-/bundler-webpack-4.3.28.tgz", + "integrity": "sha512-teidYmIq0VXDb+UJWq0mn/m+Jw6B0+F10ulfisk9J+4K8xW0m6J/VwUzDX6uHIpP/3J6lATf0c8TCrWR2rc01Q==", "dev": true, "dependencies": { "@svgr/core": "6.5.1", "@svgr/plugin-jsx": "^6.5.1", "@svgr/plugin-svgo": "^6.5.1", "@types/hapi__joi": "17.1.9", - "@umijs/babel-preset-umi": "4.3.6", - "@umijs/bundler-utils": "4.3.6", + "@umijs/babel-preset-umi": "4.3.28", + "@umijs/bundler-utils": "4.3.28", "@umijs/case-sensitive-paths-webpack-plugin": "^1.0.1", - "@umijs/mfsu": "4.3.6", + "@umijs/mfsu": "4.3.28", "@umijs/react-refresh-webpack-plugin": "0.5.11", - "@umijs/utils": "4.3.6", + "@umijs/utils": "4.3.28", "cors": "^2.8.5", "css-loader": "6.7.1", "es5-imcompatible-versions": "^0.1.78", @@ -8254,13 +8743,13 @@ "dev": true }, "node_modules/@umijs/core": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/core/-/core-4.3.6.tgz", - "integrity": "sha512-DfLm4I8gv20fPej5idu7M6p5DVltvaTvwww6o4lwTJa6j5TswL+fQfQpPRUNxOzcEll51uBw2uXcmgmcBnuXxQ==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/core/-/core-4.3.28.tgz", + "integrity": "sha512-dHofkKMsDSjY0VfHYCIikRabrZeJ2ktRUryKxrpSYpijgU6IGEdFYofQfkiuIpr6zMDVVCEos501FngqaoN8eQ==", "dev": true, "dependencies": { - "@umijs/bundler-utils": "4.3.6", - "@umijs/utils": "4.3.6" + "@umijs/bundler-utils": "4.3.28", + "@umijs/utils": "4.3.28" } }, "node_modules/@umijs/did-you-know": { @@ -8933,9 +9422,9 @@ } }, "node_modules/@umijs/lint": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/lint/-/lint-4.3.6.tgz", - "integrity": "sha512-Pz5o19UNHYOh55RRAz6A8+nQXyX1D18/6XucFxHAN9qJBHu20jsb9cA5a930SAoFY+EStneFDsnM+bijmBJL1A==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/lint/-/lint-4.3.28.tgz", + "integrity": "sha512-bbkYhdkG8N+G1GwIo49TvtX+uIRzFQ3WPG2gXASXR40TQUsYe+NXre5PQdExO/poXr3PJkOuewXZ1hmRFldirw==", "dev": true, "dependencies": { "@babel/core": "7.23.6", @@ -8943,7 +9432,7 @@ "@stylelint/postcss-css-in-js": "^0.38.0", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", - "@umijs/babel-preset-umi": "4.3.6", + "@umijs/babel-preset-umi": "4.3.28", "eslint-plugin-jest": "27.2.3", "eslint-plugin-react": "7.33.2", "eslint-plugin-react-hooks": "4.6.0", @@ -9241,9 +9730,9 @@ } }, "node_modules/@umijs/mako": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@umijs/mako/-/mako-0.7.5.tgz", - "integrity": "sha512-0mk/uNoltnX8d2ZD1Zi8/2En+zw69dPtxo1bpAyVDoruGI4djoi+u99s2vI9EORK+LGtTNuj8Sa/uyopKtsuPA==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@umijs/mako/-/mako-0.9.3.tgz", + "integrity": "sha512-anXeaw2h8bPHk2ZwOIQc9NVAoW4o2RP1FuxqGDx26VB/kdDx2puXvYE6RxJ0o8bX+GvQiKX5qCCQ43CC/YD/nQ==", "dev": true, "dependencies": { "@swc/helpers": "0.5.1", @@ -9267,16 +9756,20 @@ "node": ">= 16" }, "optionalDependencies": { - "@umijs/mako-darwin-arm64": "0.7.5", - "@umijs/mako-darwin-x64": "0.7.5", - "@umijs/mako-linux-x64-gnu": "0.7.5", - "@umijs/mako-linux-x64-musl": "0.7.5" + "@umijs/mako-darwin-arm64": "0.9.3", + "@umijs/mako-darwin-x64": "0.9.3", + "@umijs/mako-linux-arm64-gnu": "0.9.3", + "@umijs/mako-linux-arm64-musl": "0.9.3", + "@umijs/mako-linux-x64-gnu": "0.9.3", + "@umijs/mako-linux-x64-musl": "0.9.3", + "@umijs/mako-win32-ia32-msvc": "0.9.3", + "@umijs/mako-win32-x64-msvc": "0.9.3" } }, "node_modules/@umijs/mako-darwin-arm64": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@umijs/mako-darwin-arm64/-/mako-darwin-arm64-0.7.5.tgz", - "integrity": "sha512-ZLa/B2uf90642TNdG8ztXvYqcoXze5dnGvxHJz2jSt3rYiwEME4SHOLKm29RqoLN5qFSRKuIUTovvUw0QuKdFQ==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@umijs/mako-darwin-arm64/-/mako-darwin-arm64-0.9.3.tgz", + "integrity": "sha512-z1iPiOCzmvrMaPE6um05oAizHWSALOkLZqzvDVFkd9ooTl0RnVBPR/IowVfeuPAv3sx/4uKuGg4LJamyHZFbHg==", "cpu": [ "arm64" ], @@ -9290,9 +9783,9 @@ } }, "node_modules/@umijs/mako-darwin-x64": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@umijs/mako-darwin-x64/-/mako-darwin-x64-0.7.5.tgz", - "integrity": "sha512-zv2VQGTYRW0xxXrxdCOeU5zzkTT2uJT1Mc0nhD7BzhdAZ7/O7BsNJ94RogdXuBrZcefBMHEFdCC89dQVtWlaZQ==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@umijs/mako-darwin-x64/-/mako-darwin-x64-0.9.3.tgz", + "integrity": "sha512-C0rAIdsRtTOMJZUcxL1lYLefWYkXpT3DxKsCEcdiSnzU6T4Vqs8e+FLOjJftlNcbqdwkmcOpKLuYVMsYTzXbYw==", "cpu": [ "x64" ], @@ -9305,10 +9798,42 @@ "node": ">= 10" } }, + "node_modules/@umijs/mako-linux-arm64-gnu": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@umijs/mako-linux-arm64-gnu/-/mako-linux-arm64-gnu-0.9.3.tgz", + "integrity": "sha512-TatetkTnf9c+tRcrlrjUqiCbgWMw7NfncZ8rGMtQCKqIRQAZ0yz+JJ1sdBetOxOVh+FXSvtlvAR0OzEZlWJu7g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@umijs/mako-linux-arm64-musl": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@umijs/mako-linux-arm64-musl/-/mako-linux-arm64-musl-0.9.3.tgz", + "integrity": "sha512-3c2NbXLVLg6FkkG94lXKh7S2w4FfH2vC0HNeTx16D6JldJSTE+D1hh/W8RKOrkOvnrcOR2aKWCRSzBx9xfleWg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@umijs/mako-linux-x64-gnu": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@umijs/mako-linux-x64-gnu/-/mako-linux-x64-gnu-0.7.5.tgz", - "integrity": "sha512-AmgxLol6SKwj7O4Zd9lkgnjbSknKaW6ECmMUguVmBDbPAl5HKGLYfdW4oO5DZQ4Xk2AndK+RPCDDifImHE8yYw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@umijs/mako-linux-x64-gnu/-/mako-linux-x64-gnu-0.9.3.tgz", + "integrity": "sha512-ycMsOsoJ8uZx5qBPWspN+OlCSRWJqs8rsfW9PONEFe2c+9/+7fo0KZukeXN1WU6L+EyQ2eWlvJjvnTp7gXSCZA==", "cpu": [ "x64" ], @@ -9322,9 +9847,9 @@ } }, "node_modules/@umijs/mako-linux-x64-musl": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@umijs/mako-linux-x64-musl/-/mako-linux-x64-musl-0.7.5.tgz", - "integrity": "sha512-sfVOpUC1UIxHaUNrj7RahYeTaSrC97XEOqAxEAbeMG9tBKYOV7azGREJPsdePyGFdjF9mfsW69ljAuo6+MBxmQ==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@umijs/mako-linux-x64-musl/-/mako-linux-x64-musl-0.9.3.tgz", + "integrity": "sha512-X7KXe9D3L77sj+yE3PMTsb/NIRuxjs/eZlJR7d3bcT+M7fxpxjcBHqht8XFP03sJgbfvcKBxChFXZW33DKLjfQ==", "cpu": [ "x64" ], @@ -9337,6 +9862,38 @@ "node": ">= 10" } }, + "node_modules/@umijs/mako-win32-ia32-msvc": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@umijs/mako-win32-ia32-msvc/-/mako-win32-ia32-msvc-0.9.3.tgz", + "integrity": "sha512-hrRdoo5jQ9X5V+6d2x0dxUYQTGAlxKCMUbvQ3RswUgoK0HrNQb/aLVloQduOl9CDFOluoTX9EMjIM6JKEqKDKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@umijs/mako-win32-x64-msvc": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@umijs/mako-win32-x64-msvc/-/mako-win32-x64-msvc-0.9.3.tgz", + "integrity": "sha512-Bpv09WEJLBWY6lH6SZyv2lLoBzARZ9DdkgXzYOcvXLQ61amqxgh0X6SRtLsnrLfm41An69pIkN7Snl4dWPkm0g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@umijs/mako/node_modules/less": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", @@ -9402,17 +9959,17 @@ } }, "node_modules/@umijs/max": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/max/-/max-4.3.6.tgz", - "integrity": "sha512-LKFTka5c4E8En9FNUbgRFL5XY06YxRsDOBkz8/pCdIQ47Yoy0V9vV/QqnrtrcRV9smc1s8tHnnb7+ulaax49Vw==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/max/-/max-4.3.28.tgz", + "integrity": "sha512-qyS9QtlXDjFuegDcbCZf/MuUCVXYy7uj2u2QQ7mHNBDdiV/Ny5/hLEKSa7k/Dcw0M/An/7qk/lB+uBTLG4NbJA==", "dev": true, "dependencies": { - "@umijs/lint": "4.3.6", - "@umijs/plugins": "4.3.6", + "@umijs/lint": "4.3.28", + "@umijs/plugins": "4.3.28", "antd": "^4.20.6", "eslint": "8.35.0", "stylelint": "14.8.2", - "umi": "4.3.6" + "umi": "4.3.28" }, "bin": { "max": "bin/max.js" @@ -10495,14 +11052,14 @@ } }, "node_modules/@umijs/mfsu": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/mfsu/-/mfsu-4.3.6.tgz", - "integrity": "sha512-DcrdJf6X3KNVtb8elCGAXvkXKYe/z3j7lfBTTpQbKSPDn/M8YrL0fHvAtn/K8mzTy5szk3OnWi/tdT9Vv5mjAA==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/mfsu/-/mfsu-4.3.28.tgz", + "integrity": "sha512-DxAw8/TXOFQoajyAtjwd7OAlOR79NAjHiBztBKXPa+elWJHACdiE5PjEQs7YysSrTp917dYzrgFr1Dpeoiulcg==", "dev": true, "dependencies": { - "@umijs/bundler-esbuild": "4.3.6", - "@umijs/bundler-utils": "4.3.6", - "@umijs/utils": "4.3.6", + "@umijs/bundler-esbuild": "4.3.28", + "@umijs/bundler-utils": "4.3.28", + "@umijs/utils": "4.3.28", "enhanced-resolve": "5.9.3", "is-equal": "^1.6.4" } @@ -10547,18 +11104,18 @@ } }, "node_modules/@umijs/plugin-run": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/plugin-run/-/plugin-run-4.3.6.tgz", - "integrity": "sha512-oEci9Kwxkm5ZnYBW4F9N64Y6KowRizaNVs1meUUD+Pr7jEOGy7N3NjYyUI8hPNas62v5S4g/hzwiInV6jJHv5w==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/plugin-run/-/plugin-run-4.3.28.tgz", + "integrity": "sha512-hRAFAB0aXaL11AGTRKoxr6hjRHXRt3tPWXvEJnw6q6xeEJLuDPAPa/1lHJNARRQHyE5R97Yrccd7KQBmcWl/Rw==", "dev": true, "dependencies": { "tsx": "3.12.2" } }, "node_modules/@umijs/plugins": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/plugins/-/plugins-4.3.6.tgz", - "integrity": "sha512-qtw0Wir2jdfidVOZJv+WNteZP7QJQ7NdzqQgQrb1W2Mw1drtUWKgVDY0JhhYC5WeTseq75XOQIzeqgBE7fiDAQ==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/plugins/-/plugins-4.3.28.tgz", + "integrity": "sha512-+JKIT7upNDMGHV3KKF1tWAJx1+4p61aYJL16q04Nzv0Gkn7C9p8anmTACJhNcuZ2jFEUX1oYMfykbsIps6EYiA==", "dev": true, "dependencies": { "@ahooksjs/use-request": "^2.0.0", @@ -10569,7 +11126,7 @@ "@ant-design/pro-components": "^2.0.1", "@tanstack/react-query": "^4.24.10", "@tanstack/react-query-devtools": "^4.24.10", - "@umijs/bundler-utils": "4.3.6", + "@umijs/bundler-utils": "4.3.28", "@umijs/valtio": "1.0.4", "antd-dayjs-webpack-plugin": "^1.0.6", "axios": "^0.27.2", @@ -10846,31 +11403,31 @@ } }, "node_modules/@umijs/preset-umi": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/preset-umi/-/preset-umi-4.3.6.tgz", - "integrity": "sha512-sC9GgJJvBi25N6/SvK+cs3aFkIlcj41MlBWS5cyAKZGcs9osEhf/MUvZ0X0XXiYB6ewwldYu4UwQ0UYxGmq3mw==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/preset-umi/-/preset-umi-4.3.28.tgz", + "integrity": "sha512-u1QUT1RbEC0z+BvXu2DYHL6D69z8ucxO9MehgC2dSdwE5YreprCHB9pcPugyHPZCV3nx9S+dC+LE8oRkxnPVkg==", "dev": true, "dependencies": { "@iconify/utils": "2.1.1", "@svgr/core": "6.5.1", - "@umijs/ast": "4.3.6", - "@umijs/babel-preset-umi": "4.3.6", - "@umijs/bundler-esbuild": "4.3.6", - "@umijs/bundler-mako": "0.7.6-beta.2", - "@umijs/bundler-utils": "4.3.6", - "@umijs/bundler-vite": "4.3.6", - "@umijs/bundler-webpack": "4.3.6", - "@umijs/core": "4.3.6", + "@umijs/ast": "4.3.28", + "@umijs/babel-preset-umi": "4.3.28", + "@umijs/bundler-esbuild": "4.3.28", + "@umijs/bundler-mako": "0.9.3", + "@umijs/bundler-utils": "4.3.28", + "@umijs/bundler-vite": "4.3.28", + "@umijs/bundler-webpack": "4.3.28", + "@umijs/core": "4.3.28", "@umijs/did-you-know": "1.0.3", "@umijs/es-module-parser": "0.0.7", "@umijs/history": "5.3.1", - "@umijs/mfsu": "4.3.6", - "@umijs/plugin-run": "4.3.6", - "@umijs/renderer-react": "4.3.6", - "@umijs/server": "4.3.6", + "@umijs/mfsu": "4.3.28", + "@umijs/plugin-run": "4.3.28", + "@umijs/renderer-react": "4.3.28", + "@umijs/server": "4.3.28", "@umijs/ui": "3.0.1", - "@umijs/utils": "4.3.6", - "@umijs/zod2ts": "4.3.6", + "@umijs/utils": "4.3.28", + "@umijs/zod2ts": "4.3.28", "babel-plugin-dynamic-import-node": "2.3.3", "babel-plugin-react-compiler": "0.0.0-experimental-c23de8d-20240515", "click-to-react-component": "^1.0.8", @@ -11013,9 +11570,9 @@ } }, "node_modules/@umijs/renderer-react": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/renderer-react/-/renderer-react-4.3.6.tgz", - "integrity": "sha512-oO/zfJemvQoCgDBO/RwXXWBApzH2QnW/VeUi1U/ELv7EtP6By7PGk5doqIxshRzKIZXkaBu83ppRzygEMvAIlA==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/renderer-react/-/renderer-react-4.3.28.tgz", + "integrity": "sha512-2QRgGrhGxs1Uz54WztK2kzZIlrdHuDYUnCFWDgky71AanL4u6O4iscGHkCZZ0ibWG+cYSvETUQL3VrZ3pqkceg==", "dev": true, "dependencies": { "@babel/runtime": "7.23.6", @@ -11094,12 +11651,12 @@ "integrity": "sha512-+1ixf1BTOLuH+ORb4x8vYMPeIt38n9q0fJDwhv9nSxrV46mxbLF0nmELIo9CKQB2gHfuC4+hww6xejJ6VYnBHQ==" }, "node_modules/@umijs/server": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/server/-/server-4.3.6.tgz", - "integrity": "sha512-kWSXdchJ+wLRJwdOU3CdFVLcwhF25tYXA6C4sbcGxK8qb+v6+ssMqyuRS2QsOsF8k8nx6mIlB6Nbld++CJNjxg==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/server/-/server-4.3.28.tgz", + "integrity": "sha512-kKXYblGidNMB2cEm8GI0iNLwd0rNOXSFRuf8payc6Bbu+i0E5iuwRASZLNsXcPQB7GdAkJ7a0MjZP4Jv0S6Oaw==", "dev": true, "dependencies": { - "@umijs/bundler-utils": "4.3.6", + "@umijs/bundler-utils": "4.3.28", "history": "5.3.0", "react": "18.3.1", "react-dom": "18.3.1", @@ -11107,15 +11664,15 @@ } }, "node_modules/@umijs/test": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/test/-/test-4.3.6.tgz", - "integrity": "sha512-L3lFE03cY/REob0lUpzTZUlaI3R5u+5+FNh6yQM2N9NuXpjpShpBp+lmrB8apqSsak9lh8uuLqkV+RlN8AV8Cg==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/test/-/test-4.3.28.tgz", + "integrity": "sha512-Di2GxRbcU9gy3ZvkRkkzed4HPxCkgFhtNpYltxSrTKfYwiUDWW0B4URG9FHvW9JyV8qyVaAbM3vz+TR+e7UKIw==", "dev": true, "dependencies": { "@babel/plugin-transform-modules-commonjs": "7.23.3", "@jest/types": "27.5.1", - "@umijs/bundler-utils": "4.3.6", - "@umijs/utils": "4.3.6", + "@umijs/bundler-utils": "4.3.28", + "@umijs/utils": "4.3.28", "babel-jest": "^29.7.0", "esbuild": "0.21.4", "identity-obj-proxy": "3.0.0", @@ -11154,9 +11711,9 @@ } }, "node_modules/@umijs/utils": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/utils/-/utils-4.3.6.tgz", - "integrity": "sha512-CsxIQHc0/22Rihzzl6XQP1ToM4zcRi1ExzB59yKM9q4LGKrc7DSXIxkHpQcX1IYmtphqAtIwfrGgKrGrL7QIZA==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/utils/-/utils-4.3.28.tgz", + "integrity": "sha512-+cOe95w1KuHEzxR2KcPEbWTawl3KxH8z0jW1eZVWsRoPdfVkEvT900nclNoRQbYUEWvLS2/8vtGIG8UmVzjOAQ==", "dev": true, "dependencies": { "chokidar": "3.5.3", @@ -11173,9 +11730,9 @@ } }, "node_modules/@umijs/zod2ts": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@umijs/zod2ts/-/zod2ts-4.3.6.tgz", - "integrity": "sha512-cOuKxMErZqDJ9iVZ21DP0cxwnNirEnvW9dmLGX7Z8moWCiwP5MCw87NAlY0s36Mib2QNC3c6B0XnwRdDKaf1Bg==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@umijs/zod2ts/-/zod2ts-4.3.28.tgz", + "integrity": "sha512-LNs6YjtFYtJD6yvPJ3+ZMoM8WapYm9dghTze5XJxBbnMBGWBRrhFb4pLjGgicD5bJ/Pq2G3El+7v1EZPOuMiRg==", "dev": true }, "node_modules/@ungap/structured-clone": { @@ -11252,9 +11809,9 @@ } }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "bin": { "acorn": "bin/acorn" }, @@ -11496,13 +12053,13 @@ } }, "node_modules/antd": { - "version": "5.21.5", - "resolved": "https://registry.npmjs.org/antd/-/antd-5.21.5.tgz", - "integrity": "sha512-g/c8VkdruKDCVA6di9Ow1fG6dLtYJ1IOraPo7vXaY7DoQ56A3HExaFaH0fBEwTYKC0ICeftC4iA5eAjrF6/b9w==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/antd/-/antd-5.21.0.tgz", + "integrity": "sha512-eoY3LruXq/8MRCXG46O2cwc+Q8HW8Bhc+pWw7loIt6Dn22tLHckxYF/663kn55JTIOVUnJdmJDP9njdJmLXJsQ==", "dependencies": { "@ant-design/colors": "^7.1.0", "@ant-design/cssinjs": "^1.21.1", - "@ant-design/cssinjs-utils": "^1.1.1", + "@ant-design/cssinjs-utils": "^1.1.0", "@ant-design/icons": "^5.5.1", "@ant-design/react-slick": "~1.1.2", "@babel/runtime": "^7.25.6", @@ -11515,7 +12072,7 @@ "classnames": "^2.5.1", "copy-to-clipboard": "^3.3.3", "dayjs": "^1.11.11", - "rc-cascader": "~3.28.2", + "rc-cascader": "~3.28.1", "rc-checkbox": "~3.3.0", "rc-collapse": "~3.8.0", "rc-dialog": "~9.6.0", @@ -11528,19 +12085,19 @@ "rc-mentions": "~2.16.1", "rc-menu": "~9.15.1", "rc-motion": "^2.9.3", - "rc-notification": "~5.6.2", + "rc-notification": "~5.6.1", "rc-pagination": "~4.3.0", - "rc-picker": "~4.6.15", + "rc-picker": "~4.6.14", "rc-progress": "~4.0.0", "rc-rate": "~2.13.0", "rc-resize-observer": "^1.4.0", "rc-segmented": "~2.5.0", "rc-select": "~14.15.2", - "rc-slider": "~11.1.7", + "rc-slider": "~11.1.6", "rc-steps": "~6.0.1", "rc-switch": "~4.1.0", "rc-table": "~7.47.5", - "rc-tabs": "~15.3.0", + "rc-tabs": "~15.2.0", "rc-textarea": "~1.8.2", "rc-tooltip": "~6.2.1", "rc-tree": "~5.9.0", @@ -11553,10 +12110,6 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/ant-design" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" } }, "node_modules/antd-dayjs-webpack-plugin": { @@ -11851,7 +12404,6 @@ "version": "3.1.8", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -12341,13 +12893,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -12397,7 +12949,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz", "integrity": "sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-module-imports": "^7.22.5", @@ -12410,23 +12961,26 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", "dev": true, "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -12530,6 +13084,11 @@ } ] }, + "node_modules/bayesian-changepoint": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bayesian-changepoint/-/bayesian-changepoint-1.0.1.tgz", + "integrity": "sha512-OhSHWfGiEcBtI46b5guJGmj6pJEjvyaXsRPCAQy5MPoVaDZ38poXmzVZLSIuw6VLQmZs58+uf5F9iFA4NVmTTA==" + }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -12736,6 +13295,11 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, "node_modules/bplist-parser": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", @@ -12812,13 +13376,17 @@ } }, "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", "dev": true, "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" } }, "node_modules/browserify-sign": { @@ -12842,48 +13410,6 @@ "node": ">= 0.12" } }, - "node_modules/browserify-sign/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/browserify-sign/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", @@ -12900,9 +13426,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.23.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "funding": [ { "type": "opencollective", @@ -12918,10 +13444,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.1.0" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -12939,6 +13465,11 @@ "node-int64": "^0.4.0" } }, + "node_modules/bubblesets-js": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/bubblesets-js/-/bubblesets-js-2.3.4.tgz", + "integrity": "sha512-DyMjHmpkS2+xcFNtyN00apJYL3ESdp9fTrkDr5+9Qg/GPqFmcWgGsK1akZnttE1XFxJ/VMy4DNNGMGYtmFp1Sg==" + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -12972,6 +13503,12 @@ "node": "*" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "node_modules/buffer-okam": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer-okam/-/buffer-okam-4.9.2.tgz", @@ -13222,9 +13759,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001642", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz", - "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==", + "version": "1.0.30001674", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001674.tgz", + "integrity": "sha512-jOsKlZVRnzfhLojb+Ykb+gyUSp9Xb57So+fAiFlLzzTKpqg8xxSav0e40c8/4F/v9N8QSvrRRaLeVzQbLqomYw==", "funding": [ { "type": "opencollective", @@ -13240,6 +13777,21 @@ } ] }, + "node_modules/canvg": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-4.0.2.tgz", + "integrity": "sha512-/7kIZger/mdFci4KXdtMr+NQB4GU1InkJ4RwSyDBRcvy4BUlg1hD+ZUWo550sWPyWaKZ8purqby6kjf09qVriw==", + "dependencies": { + "@types/raf": "^3.4.0", + "raf": "^3.4.1", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/carlo": { "version": "0.9.46", "resolved": "https://registry.npmjs.org/carlo/-/carlo-0.9.46.tgz", @@ -13374,6 +13926,11 @@ "node": ">=10" } }, + "node_modules/chroma-js": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.6.0.tgz", + "integrity": "sha512-BLHvCB9s8Z1EV4ethr6xnkl/P2YRFOGqfgvuMG/MyCbZPrTA+NeiByY6XvgF0zP4/2deU2CXnWyMa3zu1LqQ3A==" + }, "node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -13633,42 +14190,6 @@ "readable-stream": "^2.3.5" } }, - "node_modules/cloneable-readable/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/cloneable-readable/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/cloneable-readable/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/cloneable-readable/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -13689,6 +14210,17 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/color-blind": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/color-blind/-/color-blind-0.1.3.tgz", + "integrity": "sha512-n65+lsZBF7UvN7Vpml2NmlH4zYppxRwZCRUg21BmTn1uV39+Tv6Dap8KdPZ2uRe7KybOe0jEalvfdvY9zJJlJw==", + "dependencies": { + "onecolor": "^3.1.0" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -13757,6 +14289,11 @@ "node": ">= 0.8" } }, + "node_modules/comlink": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.4.1.tgz", + "integrity": "sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==" + }, "node_modules/comma-separated-tokens": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", @@ -13892,48 +14429,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/concat-stream/node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", @@ -14039,12 +14534,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", - "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", + "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", "dev": true, "dependencies": { - "browserslist": "^4.23.0" + "browserslist": "^4.24.2" }, "funding": { "type": "opencollective", @@ -14052,9 +14547,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz", - "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", + "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", "dev": true, "hasInstallScript": true, "funding": { @@ -14154,6 +14649,19 @@ "object-assign": "^4.1.1" } }, + "node_modules/create-react-context": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.3.0.tgz", + "integrity": "sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==", + "dependencies": { + "gud": "^1.0.0", + "warning": "^4.0.3" + }, + "peerDependencies": { + "prop-types": "^15.0.0", + "react": "^0.14.0 || ^15.0.0 || ^16.0.0" + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -14202,25 +14710,29 @@ } }, "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", "dev": true, "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" }, "engines": { - "node": "*" + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/css-animation": { @@ -14519,6 +15031,11 @@ "node": ">=12" } }, + "node_modules/d3-binarytree": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d3-binarytree/-/d3-binarytree-1.0.2.tgz", + "integrity": "sha512-cElUNH+sHu95L04m92pG73t2MEJXKu+GeKUN1TJkFsu93E5W8E9Sc3kHEGJKgenGvj19m6upSn2EunvMgMD2Yw==" + }, "node_modules/d3-color": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", @@ -14572,6 +15089,21 @@ "node": ">=12" } }, + "node_modules/d3-force-3d": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/d3-force-3d/-/d3-force-3d-3.0.5.tgz", + "integrity": "sha512-tdwhAhoTYZY/a6eo9nR7HP3xSW/C6XvJTbeRpR92nlPzH6OiE+4MliN9feuSFd0tPtEUo+191qOhCTWx3NYifg==", + "dependencies": { + "d3-binarytree": "1", + "d3-dispatch": "1 - 3", + "d3-octree": "1", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/d3-format": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", @@ -14610,6 +15142,11 @@ "node": ">=12" } }, + "node_modules/d3-octree": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d3-octree/-/d3-octree-1.0.2.tgz", + "integrity": "sha512-Qxg4oirJrNXauiuC94uKMbgxwnhdda9xRLl9ihq45srlJ4Ga3CSgqGcAL8iW7N5CIv4Oz8x3E734ulxyvHPvwA==" + }, "node_modules/d3-path": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", @@ -14663,17 +15200,6 @@ "lodash": "^4.17.15" } }, - "node_modules/dagre-compound": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/dagre-compound/-/dagre-compound-0.0.11.tgz", - "integrity": "sha512-UrSgRP9LtOZCYb9e5doolZXpc7xayyszgyOs7uakTK4n4KsLegLVTRRtq01GpQd/iZjYw5fWMapx9ed+c80MAQ==", - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "dagre": "^0.8.5" - } - }, "node_modules/dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", @@ -15330,8 +15856,7 @@ "node_modules/dom-align": { "version": "1.12.4", "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.4.tgz", - "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==", - "dev": true + "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==" }, "node_modules/dom-converter": { "version": "0.2.0", @@ -15567,14 +16092,14 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.827", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.827.tgz", - "integrity": "sha512-VY+J0e4SFcNfQy19MEoMdaIcZLmDCprqvBtkii1WTCTQHpRvf5N8+3kTYCgL/PcntvwQvmMJWTuDPsq+IlhWKQ==" + "version": "1.5.49", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz", + "integrity": "sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==" }, "node_modules/elliptic": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", - "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.0.tgz", + "integrity": "sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==", "dev": true, "dependencies": { "bn.js": "^4.11.9", @@ -16013,9 +16538,9 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "engines": { "node": ">=6" } @@ -16600,6 +17125,29 @@ "node": ">= 0.10.0" } }, + "node_modules/express-http-proxy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/express-http-proxy/-/express-http-proxy-2.1.1.tgz", + "integrity": "sha512-4aRQRqDQU7qNPV5av0/hLcyc0guB9UP71nCYrQEYml7YphTo8tmWf3nDZWdTJMMjFikyz9xKXaURor7Chygdwg==", + "dev": true, + "dependencies": { + "debug": "^3.0.1", + "es6-promise": "^4.1.1", + "raw-body": "^2.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/express-http-proxy/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -17030,42 +17578,6 @@ "node": ">=0.10.0" } }, - "node_modules/first-chunk-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/first-chunk-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/first-chunk-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/first-chunk-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", @@ -17112,6 +17624,77 @@ "uglify-js": "^2.6.2" } }, + "node_modules/fmin/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fmin/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fmin/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fmin/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fmin/node_modules/rollup": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.25.8.tgz", + "integrity": "sha512-a2S4Bh3bgrdO4BhKr2E4nZkjTvrJ2m2bWjMTzVYtoqSCn0HnuxosXnaJUHrMEziOWr3CzL9GjilQQKcyCQpJoA==", + "dependencies": { + "chalk": "^1.1.1", + "minimist": "^1.2.0", + "source-map-support": "^0.3.2" + }, + "bin": { + "rollup": "bin/rollup" + } + }, + "node_modules/fmin/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fmin/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/follow-redirects": { "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", @@ -17569,11 +18152,6 @@ "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" }, - "node_modules/gl-vec2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/gl-vec2/-/gl-vec2-1.3.0.tgz", - "integrity": "sha512-YiqaAuNsheWmUV0Sa8k94kBB0D6RWjwZztyO+trEYS8KzJ6OQB/4686gdrf59wld4hHFIvaxynO3nRxpk1Ij/A==" - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -17763,6 +18341,11 @@ "node": ">=8.0.0" } }, + "node_modules/gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + }, "node_modules/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", @@ -18000,6 +18583,14 @@ "he": "bin/he" } }, + "node_modules/heap-js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/heap-js/-/heap-js-2.5.0.tgz", + "integrity": "sha512-kUGoI3p7u6B41z/dp33G6OaL7J4DRqRYwVmeIlwLClx7yaaAy7hoDExnuejTKtuDwfcatGmddHDEOjf6EyIxtQ==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/history": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", @@ -18055,42 +18646,6 @@ "wbuf": "^1.1.0" } }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/htm": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/htm/-/htm-3.1.1.tgz", @@ -18336,6 +18891,12 @@ "ms": "^2.1.1" } }, + "node_modules/hull.js": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/hull.js/-/hull.js-1.0.6.tgz", + "integrity": "sha512-TC7e9sHYOaCVms0sn2hN7buxnaGfcl9h5EPVoVX9DTPoMpqQiS9bf3tmGDgiNaMVHBD91RAvWjCxrJ5Jx8BI5A==", + "deprecated": "This package is not maintained anymore on npmjs.com, please use GitHub URL to fetch the latest version. See the package homepage for instructions." + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -19603,9 +20164,9 @@ } }, "node_modules/jest-haste-map/node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -19685,9 +20246,9 @@ } }, "node_modules/jest-util/node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -19789,6 +20350,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, "bin": { "jsesc": "bin/jsesc" }, @@ -19933,6 +20495,29 @@ "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", "dev": true }, + "node_modules/katex": { + "version": "0.16.11", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.11.tgz", + "integrity": "sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -20027,9 +20612,9 @@ } }, "node_modules/less-plugin-resolve/node_modules/enhanced-resolve": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -22626,11 +23211,12 @@ } }, "node_modules/ml-matrix": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/ml-matrix/-/ml-matrix-6.5.0.tgz", - "integrity": "sha512-sms732Dge+rs5dU4mnjE0oqLWm1WujvR2fr38LgUHRG2cjXjWlO3WJupLYaSz3++2iYr0UrGDK72OAivr3J8dg==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ml-matrix/-/ml-matrix-6.12.0.tgz", + "integrity": "sha512-AGfR+pWaC0GmzjUnB6BfwhndPEUGz0i7QUYdqNuw1zhTov/vSRJ9pP2hs6BoGpaSbtXgrKjZz2zjD1M0xuur6A==", "dependencies": { - "ml-array-rescale": "^1.3.1" + "is-any-array": "^2.0.1", + "ml-array-rescale": "^1.3.7" } }, "node_modules/mock-property": { @@ -22684,9 +23270,36 @@ } }, "node_modules/monaco-editor": { - "version": "0.51.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.51.0.tgz", - "integrity": "sha512-xaGwVV1fq343cM7aOYB6lVE4Ugf0UyimdD/x5PWcWBMKENwectaEu77FAN7c5sFiyumqeJdX1RPTh1ocioyDjw==" + "version": "0.52.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.52.0.tgz", + "integrity": "sha512-OeWhNpABLCeTqubfqLMXGsqf6OmPU6pHM85kF3dhy6kq5hnhuVS1p3VrEW/XhWHc71P2tHyS5JFySD8mgs1crw==" + }, + "node_modules/monaco-editor-webpack-plugin": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-7.1.0.tgz", + "integrity": "sha512-ZjnGINHN963JQkFqjjcBtn1XBtUATDZBMgNQhDQwd78w2ukRhFXAPNgWuacaQiDZsUr4h1rWv5Mv6eriKuOSzA==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.2" + }, + "peerDependencies": { + "monaco-editor": ">= 0.31.0", + "webpack": "^4.5.0 || 5.x" + } + }, + "node_modules/monaco-editor-webpack-plugin/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } }, "node_modules/moo": { "version": "0.5.2", @@ -22827,21 +23440,6 @@ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "!win32" - ], - "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -22858,13 +23456,6 @@ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", "dev": true }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true - }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -23108,42 +23699,6 @@ "vm-browserify": "^1.0.1" } }, - "node_modules/node-libs-browser-okam/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/node-libs-browser-okam/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/node-libs-browser-okam/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/node-libs-browser-okam/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/node-libs-browser/node_modules/buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", @@ -23167,36 +23722,6 @@ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true }, - "node_modules/node-libs-browser/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/node-libs-browser/node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -23222,9 +23747,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" }, "node_modules/nopt": { "version": "5.0.0", @@ -24078,6 +24603,14 @@ "wrappy": "1" } }, + "node_modules/onecolor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/onecolor/-/onecolor-3.1.0.tgz", + "integrity": "sha512-YZSypViXzu3ul5LMu/m6XjJ9ol8qAy9S2VjHl5E6UlhUH1KGKWabyEJifn0Jjpw23bYDzC2ucKMPGiH5kfwSGQ==", + "engines": { + "node": ">=0.4.8" + } + }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -24655,13 +25188,12 @@ "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -24743,12 +25275,12 @@ } }, "node_modules/piscina": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.6.1.tgz", - "integrity": "sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.7.0.tgz", + "integrity": "sha512-b8hvkpp9zS0zsfa939b/jXbe64Z2gZv0Ha7FYPNUiDIB1y2AtxcOZdfP8xN8HFjUaqQiT9gRlfjAsoL8vdJ1Iw==", "dev": true, "optionalDependencies": { - "nice-napi": "^1.0.2" + "@napi-rs/nice": "^1.0.1" } }, "node_modules/pkg-dir": { @@ -25580,9 +26112,9 @@ } }, "node_modules/postcss-preset-env/node_modules/autoprefixer": { - "version": "10.4.19", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", - "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", "dev": true, "funding": [ { @@ -25599,11 +26131,11 @@ } ], "dependencies": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001599", + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", + "picocolors": "^1.0.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -26037,17 +26569,6 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/probe.gl": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/probe.gl/-/probe.gl-3.6.0.tgz", - "integrity": "sha512-19JydJWI7+DtR4feV+pu4Mn1I5TAc0xojuxVgZdXIyfmTLfUaFnk4OloWK1bKbPtkgGKLr2lnbnCXmpZEcEp9g==", - "dependencies": { - "@babel/runtime": "^7.0.0", - "@probe.gl/env": "3.6.0", - "@probe.gl/log": "3.6.0", - "@probe.gl/stats": "3.6.0" - } - }, "node_modules/proc-log": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", @@ -26323,6 +26844,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/quantize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quantize/-/quantize-1.0.2.tgz", + "integrity": "sha512-25P7wI2UoDbIQsQp50ARkt+5pwPsOq7G/BqvT5xAbapnRoNWMN8/p55H9TXd5MuENiJnm5XICB2H2aDZGwts7w==", + "engines": { + "node": ">=0.10.21" + } + }, "node_modules/query-string": { "version": "6.14.1", "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", @@ -26394,7 +26923,6 @@ "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dev": true, "dependencies": { "performance-now": "^2.1.0" } @@ -26485,7 +27013,6 @@ "version": "4.0.15", "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.15.tgz", "integrity": "sha512-wqJtVH60pka/nOX7/IspElA8gjPNQKIx/ZqJ6heATCkXpe1Zg4cPVrMD2vC96wjsFFL8WsmhPbx9tdMo1qqlIA==", - "dev": true, "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", @@ -26588,6 +27115,93 @@ "react-dom": ">=16.9.0" } }, + "node_modules/rc-dock": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/rc-dock/-/rc-dock-3.3.0.tgz", + "integrity": "sha512-9rQAzHSLAdQz1ZpPqQGkZKlAt4YI6gNYjuqqpY6hIWBFDhVPccs0jYr7L7PP3OpmliZ/R60LgHfLFbrL9l+Tlg==", + "dependencies": { + "classnames": "^2.5.1", + "lodash": "^4.17.21", + "rc-dropdown": "~4.0.1", + "rc-menu": "~9.8.4", + "rc-new-window": "^0.1.13", + "rc-tabs": "~11.16.1" + }, + "peerDependencies": { + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/rc-dock/node_modules/rc-dropdown": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.0.1.tgz", + "integrity": "sha512-OdpXuOcme1rm45cR0Jzgfl1otzmU4vuBVb+etXM8vcaULGokAKVpKlw8p6xzspG7jGd/XxShvq+N3VNEfk/l5g==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "classnames": "^2.2.6", + "rc-trigger": "^5.3.1", + "rc-util": "^5.17.0" + }, + "peerDependencies": { + "react": ">=16.11.0", + "react-dom": ">=16.11.0" + } + }, + "node_modules/rc-dock/node_modules/rc-menu": { + "version": "9.8.4", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.8.4.tgz", + "integrity": "sha512-lmw2j8I2fhdIzHmC9ajfImfckt0WDb2KVJJBBRIsxPEw2kGkEfjLMUoB1NgiNT/Q5cC8PdjGOGQjHJIJMwyNMw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.4.3", + "rc-overflow": "^1.2.8", + "rc-trigger": "^5.1.2", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-dock/node_modules/rc-tabs": { + "version": "11.16.1", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-11.16.1.tgz", + "integrity": "sha512-bR7Dap23YyfzZQwtKomhiFEFzZuE7WaKWo+ypNRSGB9PDKSc6tM12VP8LWYkvmmQHthgwP0WRN8nFbSJWuqLYw==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "classnames": "2.x", + "rc-dropdown": "~4.0.0", + "rc-menu": "~9.6.0", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.5.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-dock/node_modules/rc-tabs/node_modules/rc-menu": { + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.6.4.tgz", + "integrity": "sha512-6DiNAjxjVIPLZXHffXxxcyE15d4isRL7iQ1ru4MqYDH2Cqc5bW96wZOdMydFtGLyDdnmEQ9jVvdCE9yliGvzkw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.4.3", + "rc-overflow": "^1.2.0", + "rc-trigger": "^5.1.2", + "rc-util": "^5.12.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, "node_modules/rc-drawer": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-7.2.0.tgz", @@ -26741,6 +27355,21 @@ "react-dom": ">=16.9.0" } }, + "node_modules/rc-new-window": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/rc-new-window/-/rc-new-window-0.1.13.tgz", + "integrity": "sha512-KqANLQVfgNcfs+R4ntpzV5ELyqXMlAUimdSfFHapk2VwsoZX3y+BK2RjFBFb7q865yqAshP87g0PbIPqblKVTg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "bowser": "^2.11.0", + "classnames": "2.x", + "lodash": "^4.17.20" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, "node_modules/rc-notification": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-5.6.2.tgz", @@ -26990,9 +27619,9 @@ } }, "node_modules/rc-tabs": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-15.3.0.tgz", - "integrity": "sha512-lzE18r+zppT/jZWOAWS6ntdkDUKHOLJzqMi5UAij1LeKwOaQaupupAoI9Srn73GRzVpmGznkECMRrzkRusC40A==", + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-15.2.0.tgz", + "integrity": "sha512-ZfHdGw0krK4walBYNOgPWCcBImSp5NtzJR5+oI4rN9Z44FYDQKozBFfuAQHhumIUtx4EmGaYCFjywwgca/Rs1g==", "dependencies": { "@babel/runtime": "^7.11.2", "classnames": "2.x", @@ -27079,7 +27708,6 @@ "version": "5.3.4", "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-5.3.4.tgz", "integrity": "sha512-mQv+vas0TwKcjAO2izNPkqR4j86OemLRmvL2nOzdP9OWNWA1ivoTt5hzFqYNW9zACwmTezRiN8bttrC7cZzYSw==", - "dev": true, "dependencies": { "@babel/runtime": "^7.18.3", "classnames": "^2.2.6", @@ -27165,6 +27793,20 @@ "node": ">=0.10.0" } }, + "node_modules/react-activation": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/react-activation/-/react-activation-0.12.4.tgz", + "integrity": "sha512-6jJtnUnQBKCrWgvHkzCJP3QZAtthnhDuoPa5LJnj1+1TxS5qkh3Z74zdNZY40wMbkTsLbo6CYoS51Fx/bTM3/w==", + "dependencies": { + "create-react-context": "^0.3.0", + "hoist-non-react-statics": "^3.3.0", + "react-node-key": "^0.4.0", + "szfe-tools": "^0.0.0-beta.7" + }, + "peerDependencies": { + "react": ">=16" + } + }, "node_modules/react-countup": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/react-countup/-/react-countup-6.5.3.tgz", @@ -27416,6 +28058,30 @@ "react-tween-state": "^0.1.5" } }, + "node_modules/react-node-key": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/react-node-key/-/react-node-key-0.4.0.tgz", + "integrity": "sha512-puiuP2QYEuNBVVvcjpUE8d8/jdAhiXHBHMmjZzQT4+fe276RMYea/tY7JoZoYlrhAX8DORLPvjySjXYJZ1m6/A==", + "dependencies": { + "jsx-ast-utils": "^2.2.1", + "szfe-tools": "^0.0.0-beta.7" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/react-node-key/node_modules/jsx-ast-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", + "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", + "dependencies": { + "array-includes": "^3.1.1", + "object.assign": "^4.1.0" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/react-redux": { "version": "7.2.9", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", @@ -27468,6 +28134,15 @@ "react": ">= 16.3" } }, + "node_modules/react-resizable-panels": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.1.6.tgz", + "integrity": "sha512-oIqo/7pp2TsR+Dp1qZMr1l4RBDV4Zz/0HEG5zxliBJoHqqFnG0MbmFbk+5Q1VMGfPQ4uhXxefunLC1o7v38PDQ==", + "peerDependencies": { + "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, "node_modules/react-router": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz", @@ -27494,6 +28169,26 @@ "react-dom": ">=16.8" } }, + "node_modules/react-sortablejs": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/react-sortablejs/-/react-sortablejs-6.1.4.tgz", + "integrity": "sha512-fc7cBosfhnbh53Mbm6a45W+F735jwZ1UFIYSrIqcO/gRIFoDyZeMtgKlpV4DdyQfbCzdh5LoALLTDRxhMpTyXQ==", + "dependencies": { + "classnames": "2.3.1", + "tiny-invariant": "1.2.0" + }, + "peerDependencies": { + "@types/sortablejs": "1", + "react": ">=16.9.0", + "react-dom": ">=16.9.0", + "sortablejs": "1" + } + }, + "node_modules/react-sortablejs/node_modules/classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + }, "node_modules/react-spring": { "version": "9.7.3", "resolved": "https://registry.npmjs.org/react-spring/-/react-spring-9.7.3.tgz", @@ -27803,6 +28498,42 @@ "node": ">=8" } }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/readdir-scoped-modules": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", @@ -28058,10 +28789,10 @@ "jsesc": "bin/jsesc" } }, - "node_modules/regl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/regl/-/regl-1.7.0.tgz", - "integrity": "sha512-bEAtp/qrtKucxXSJkD4ebopFZYP0q1+3Vb2WECWv/T8yQEgKxDxJ7ztO285tAMaYZVR6mM1GgI6CCn8FROtL1w==" + "node_modules/regression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regression/-/regression-2.0.1.tgz", + "integrity": "sha512-A4XYsc37dsBaNOgEjkJKzfJlE394IMmUPlI/p3TTI9u3T+2a+eox5Pr/CPUqF0eszeWZJPAc6QkroAhuUpWDJQ==" }, "node_modules/relateurl": { "version": "0.2.7", @@ -28770,6 +29501,14 @@ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true }, + "node_modules/rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", + "engines": { + "node": ">= 0.8.15" + } + }, "node_modules/right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", @@ -29045,74 +29784,112 @@ } }, "node_modules/rollup": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.25.8.tgz", - "integrity": "sha512-a2S4Bh3bgrdO4BhKr2E4nZkjTvrJ2m2bWjMTzVYtoqSCn0HnuxosXnaJUHrMEziOWr3CzL9GjilQQKcyCQpJoA==", + "version": "3.29.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", + "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-visualizer": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.0.tgz", + "integrity": "sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==", + "dev": true, "dependencies": { - "chalk": "^1.1.1", - "minimist": "^1.2.0", - "source-map-support": "^0.3.2" + "open": "^8.4.0", + "picomatch": "^2.3.1", + "source-map": "^0.7.4", + "yargs": "^17.5.1" }, "bin": { - "rollup": "bin/rollup" + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "rollup": "2.x || 3.x" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/rollup/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "node_modules/rollup-plugin-visualizer/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/rollup/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "node_modules/rollup-plugin-visualizer/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/rollup/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "node_modules/rollup-plugin-visualizer/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rollup/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/rollup/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "node_modules/rollup-plugin-visualizer/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/rollup/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "node_modules/rollup-plugin-visualizer/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=12" } }, "node_modules/run-applescript": { @@ -30109,6 +30886,11 @@ "node": ">=8" } }, + "node_modules/sortablejs": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.3.tgz", + "integrity": "sha512-zdK3/kwwAK1cJgy1rwl1YtNTbRmc8qW/+vgXf75A7NHag5of4pyI6uK86ktmQETyWRH7IGaE73uZOOBcGxgqZg==" + }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -30329,6 +31111,14 @@ "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", "dev": true }, + "node_modules/stackblur-canvas": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", + "engines": { + "node": ">=0.1.14" + } + }, "node_modules/stackframe": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", @@ -30371,42 +31161,6 @@ "readable-stream": "^2.0.2" } }, - "node_modules/stream-browserify/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/stream-browserify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/stream-browserify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/stream-buffers": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-1.0.1.tgz", @@ -30429,51 +31183,6 @@ "xtend": "^4.0.0" } }, - "node_modules/stream-http/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/stream-http/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/stream-http/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/stream-http/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/stream-http/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/stream-shift": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", @@ -31226,6 +31935,14 @@ "resolved": "https://registry.npmjs.org/svg-path-parser/-/svg-path-parser-1.1.0.tgz", "integrity": "sha512-jGCUqcQyXpfe38R7RFfhrMyfXcBmpMNJI/B+4CE9/Unkh98UporAc461GTthv+TVDuZXsBx7/WiwJb1Oh4tt4A==" }, + "node_modules/svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/svg-tags": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", @@ -31378,6 +32095,14 @@ "integrity": "sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==", "dev": true }, + "node_modules/szfe-tools": { + "version": "0.0.0-beta.7", + "resolved": "https://registry.npmjs.org/szfe-tools/-/szfe-tools-0.0.0-beta.7.tgz", + "integrity": "sha512-/M7+Tel2G8zapfDYZlz17hf9ViqAi/loZMfM81b5iZMyaWL/t5dajBszEBI2kyIDFzlLT4btBcq+BimFgmAHug==", + "dependencies": { + "@babel/runtime": "^7.10.2" + } + }, "node_modules/table": { "version": "6.8.2", "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", @@ -31542,9 +32267,9 @@ "dev": true }, "node_modules/terser": { - "version": "5.31.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.2.tgz", - "integrity": "sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==", + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -31559,12 +32284,6 @@ "node": ">=10" } }, - "node_modules/terser/node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -31670,6 +32389,11 @@ "node": ">=0.12" } }, + "node_modules/tiny-invariant": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz", + "integrity": "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==" + }, "node_modules/tiny-pinyin": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/tiny-pinyin/-/tiny-pinyin-1.3.2.tgz", @@ -31721,6 +32445,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, "engines": { "node": ">=4" } @@ -32362,9 +33087,9 @@ } }, "node_modules/typescript": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -32422,21 +33147,21 @@ "optional": true }, "node_modules/umi": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/umi/-/umi-4.3.6.tgz", - "integrity": "sha512-/Iu/HGzclkjG5x91HcQdDWzocnxHrT5rvr/B1A/b0KPFnVfPCLYlrPOnF/ZUMMvBYj4Xuz3PstjylouQIpvMhA==", + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/umi/-/umi-4.3.28.tgz", + "integrity": "sha512-egs1ouAcXuzIGGItIhPXiaqwpU8F4sl9enBClE+I5pop5rs5yxbIwBf7VsBnnGx4Go5hQY+/juNfMLASdKLhXw==", "dev": true, "dependencies": { "@babel/runtime": "7.23.6", - "@umijs/bundler-utils": "4.3.6", - "@umijs/bundler-webpack": "4.3.6", - "@umijs/core": "4.3.6", - "@umijs/lint": "4.3.6", - "@umijs/preset-umi": "4.3.6", - "@umijs/renderer-react": "4.3.6", - "@umijs/server": "4.3.6", - "@umijs/test": "4.3.6", - "@umijs/utils": "4.3.6", + "@umijs/bundler-utils": "4.3.28", + "@umijs/bundler-webpack": "4.3.28", + "@umijs/core": "4.3.28", + "@umijs/lint": "4.3.28", + "@umijs/preset-umi": "4.3.28", + "@umijs/renderer-react": "4.3.28", + "@umijs/server": "4.3.28", + "@umijs/test": "4.3.28", + "@umijs/utils": "4.3.28", "prettier-plugin-organize-imports": "^3.2.2", "prettier-plugin-packagejson": "2.4.3" }, @@ -32740,10 +33465,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-5.0.0.tgz", "integrity": "sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==", - "dev": true, - "workspaces": [ - "./packages/isomorphic-unfetch" - ] + "dev": true }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -33002,9 +33724,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "funding": [ { "type": "opencollective", @@ -33020,8 +33742,8 @@ } ], "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -33040,13 +33762,16 @@ } }, "node_modules/url": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", - "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", "dev": true, "dependencies": { "punycode": "^1.4.1", - "qs": "^6.11.2" + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/url-okam": { @@ -33072,9 +33797,9 @@ "dev": true }, "node_modules/url/node_modules/qs": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.3.tgz", - "integrity": "sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "dependencies": { "side-channel": "^1.0.6" @@ -33826,22 +34551,6 @@ "@esbuild/win32-x64": "0.18.20" } }, - "node_modules/vite/node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", @@ -34187,6 +34896,15 @@ "async-limiter": "~1.0.0" } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/dinky-web/package.json b/dinky-web/package.json index a717a5c0d4..1a8a3b1b3c 100644 --- a/dinky-web/package.json +++ b/dinky-web/package.json @@ -39,11 +39,13 @@ "@ant-design/charts": "^2.2.1", "@ant-design/icons": "^5.3.7", "@ant-design/pro-components": "^2.7.19", - "@ant-design/pro-layout": "^7.20.2", - "@ant-design/pro-table": "^3.17.2", "@ant-design/use-emotion-css": "^1.0.4", - "@antv/g2": "^5.2.5", - "@antv/layout": "0.3.25", + "@antv/graphin": "^3.0.2", + "@antv/g6-extension-react": "^0.1.7", + "@antv/g-canvas": "^2.0.20", + "@antv/ava-react": "^3.3.2", + "@antv/g2": "^5.2.7", + "@antv/layout": "1.2.13", "@antv/x6": "^2.18.1", "@antv/x6-plugin-selection": "^2.2.2", "@antv/x6-react-shape": "^2.2.3", @@ -52,8 +54,8 @@ "@umijs/route-utils": "^4.0.1", "@xterm/addon-fit": "^0.10.0", "@xterm/xterm": "^5.5.0", - "antd": "^5.21.0", - "antd-style": "^3.6.3", + "antd": "5.21.0", + "antd-style": "^3.7.1", "butterfly-dag": "^4.3.29", "classnames": "^2.5.1", "dayjs": "^1.11.11", @@ -65,13 +67,13 @@ "lodash": "^4.17.21", "million": "^3.1.1", "moment": "^2.30.1", - "monaco-editor": "^0.51.0", + "monaco-editor": "^0.52.0", "omit.js": "^2.0.2", "path-to-regexp": "^6.2.2", - "rc-menu": "^9.14.0", - "rc-util": "^5.43.0", + "rc-dock": "^3.3.0", "re-resizable": "^6.10.0", "react": "^18.3.1", + "react-activation": "^0.12.4", "react-countup": "^6.5.3", "react-dom": "^18.3.1", "react-fast-marquee": "^1.6.5", @@ -80,11 +82,14 @@ "react-lineage-dag": "^2.0.36", "react-lottie": "^1.2.4", "react-markdown": "^9.0.1", + "react-resizable-panels": "^2.1.4", + "react-sortablejs": "^6.1.4", "react-spring": "^9.7.3", "react-use-cookie": "^1.6.1", "redux-persist": "^6.0.0", "remark-gfm": "^4.0.0", "screenfull": "^6.0.2", + "sortablejs": "^1.15.3", "sql-formatter": "^15.3.1", "styled-components": "^6.1.1", "use-sse": "^2.0.1", @@ -103,22 +108,24 @@ "@types/react-grid-layout": "^1.3.5", "@types/react-helmet": "^6.1.9", "@types/react-lottie": "^1.2.10", - "@umijs/lint": "^4.2.11", - "@umijs/max": "^4.2.11", + "@types/sortablejs": "^1.15.8", + "@umijs/lint": "^4.3.24", + "@umijs/max": "^4.3.24", "cross-env": "^7.0.3", "eslint": "^9.3.0", "express": "^4.19.2", "husky": "^9.0.11", "js-cookie": "^3.0.5", "lint-staged": "^15.2.4", + "monaco-editor-webpack-plugin": "^7.1.0", "prettier": "^3.2.5", "react-dev-inspector": "^2.0.1", "react-inspector": "^6.0.2", "sql-formatter": "^15.3.1", "swagger-ui-dist": "^5.17.12", "ts-node": "^10.9.2", - "typescript": "^5.4.5", - "umi-presets-pro": "^2.0.0" + "typescript": "^5.6.2", + "umi-presets-pro": "^2.0.3" }, "engines": { "node": ">=18", diff --git a/dinky-web/src/components/CustomEditor/CodeEdit/index.tsx b/dinky-web/src/components/CustomEditor/CodeEdit/index.tsx index e5234c5946..bdb614285a 100644 --- a/dinky-web/src/components/CustomEditor/CodeEdit/index.tsx +++ b/dinky-web/src/components/CustomEditor/CodeEdit/index.tsx @@ -22,18 +22,21 @@ import { editor, languages, Position } from 'monaco-editor'; import { buildAllSuggestionsToEditor } from '@/components/CustomEditor/CodeEdit/function'; import { handleInitEditorAndLanguageOnBeforeMount } from '@/components/CustomEditor/function'; -import { StateType } from '@/pages/DataStudio/model'; import { MonacoEditorOptions, SuggestionInfo } from '@/types/Public/data'; import { convertCodeEditTheme } from '@/utils/function'; import { Editor, loader, Monaco, OnChange } from '@monaco-editor/react'; import { connect } from '@umijs/max'; import useMemoCallback from 'rc-menu/es/hooks/useMemoCallback'; -import { memo, useCallback, useRef } from 'react'; +import { memo, useCallback, useContext, useRef } from 'react'; +import { DataStudioState } from '@/pages/DataStudioNew/model'; import ITextModel = editor.ITextModel; import CompletionItem = languages.CompletionItem; import CompletionContext = languages.CompletionContext; import CompletionList = languages.CompletionList; import ProviderResult = languages.ProviderResult; +import LanguageSelector = languages.LanguageSelector; +import { DevopsContext } from '@/pages/DevOps'; +import { DataStudioContext, DataStudioContextType } from '@/pages/DataStudioNew/DataStudioContext'; loader.config({ monaco }); @@ -44,7 +47,7 @@ let provider = { export type CodeEditFormProps = { height?: string; width?: string; - language?: string; + language: string; options?: any; onChange?: OnChange; code: string; @@ -57,7 +60,7 @@ export type CodeEditFormProps = { monacoRef?: any; }; -const CodeEdit = (props: CodeEditFormProps & connect) => { +const CodeEdit = (props: CodeEditFormProps) => { /** * 1. height: edit height * 2. width: edit width @@ -82,13 +85,14 @@ const CodeEdit = (props: CodeEditFormProps & connect) => { lineNumbers, // show lineNumbers enableSuggestions = false, // enable suggestions enableSuggestionPreview = false, // enable suggestion preview + // @ts-ignore suggestionsData, // suggestions data autoWrap = 'on', // auto wrap editorDidMount, - monacoRef, - tabs: { activeKey } + monacoRef } = props; + const { theme } = useContext(DataStudioContext); const editorInstance = useRef( monacoRef?.current?.editor ); @@ -105,7 +109,7 @@ const CodeEdit = (props: CodeEditFormProps & connect) => { async (model: ITextModel, position: monaco.Position) => { return buildAllSuggestions(model, position); }, - [code, activeKey] + [] ); // memo @@ -113,7 +117,7 @@ const CodeEdit = (props: CodeEditFormProps & connect) => { function reloadCompilation(monacoIns: Monaco, segmentedWords: string[]) { provider.dispose(); - provider = monacoIns.languages.registerCompletionItemProvider(language, { + provider = monacoIns.languages.registerCompletionItemProvider(language!!, { provideCompletionItems: ( model: editor.ITextModel, position: Position, @@ -292,7 +296,6 @@ const CodeEdit = (props: CodeEditFormProps & connect) => { lineNumbers, ...options }; - return ( <>
@@ -308,14 +311,13 @@ const CodeEdit = (props: CodeEditFormProps & connect) => { onChange={onChange} //zh-CN: 因为在 handleInitEditorAndLanguageOnBeforeMount 中已经注册了自定义语言,所以这里的作用仅仅是用来切换主题 不需要重新加载自定义语言的 token 样式 , 所以这里入参需要为空, 否则每次任意的 props 改变时(包括高度等),会出现编辑器闪烁的问题 //en-US: because the custom language has been registered in handleInitEditorAndLanguageOnBeforeMount, so the only purpose here is to switch the theme, and there is no need to reload the token style of the custom language, so the incoming parameters here need to be empty, otherwise any props change (including height, etc.) will cause the editor to flash - theme={convertCodeEditTheme()} + theme={theme === 'realDark' ? 'vs-dark' : theme} />
); }; -export default connect(({ Studio }: { Studio: StateType }) => ({ - suggestionsData: Studio.suggestions, - tabs: Studio.tabs +export default connect(({ DataStudio }: { DataStudio: DataStudioState }) => ({ + suggestionsData: DataStudio.tempData.suggestions }))(memo(CodeEdit)); diff --git a/dinky-web/src/components/CustomEditor/CodeShow/index.tsx b/dinky-web/src/components/CustomEditor/CodeShow/index.tsx index a0e9e57ab1..ab5b53c625 100644 --- a/dinky-web/src/components/CustomEditor/CodeShow/index.tsx +++ b/dinky-web/src/components/CustomEditor/CodeShow/index.tsx @@ -31,6 +31,7 @@ import { handleInitEditorAndLanguageOnBeforeMount } from '@/components/CustomEdi import { Editor, loader, Monaco } from '@monaco-editor/react'; import * as monaco from 'monaco-editor'; import { CSSProperties, useRef, useState } from 'react'; +import LineNumbersType = editor.LineNumbersType; loader.config({ monaco }); @@ -38,11 +39,11 @@ export type CodeShowFormProps = { height?: string | number; width?: string; language?: EditorLanguage | string; - options?: any; + options?: editor.IStandaloneEditorConstructionOptions; code: string; - lineNumbers?: string; + lineNumbers?: LineNumbersType; enableMiniMap?: boolean; - autoWrap?: string; + autoWrap?: 'on' | 'off' | 'wordWrapColumn' | 'bounded' | undefined; showFloatButton?: boolean; refreshLogCallback?: () => void; fullScreenBtn?: boolean; @@ -219,7 +220,7 @@ const CodeShow = (props: CodeShowFormProps) => { */ return ( <> - + {/* fullScreen button */} {fullScreenBtn && ( diff --git a/dinky-web/src/components/Flink/FlinkDag/config.ts b/dinky-web/src/components/Flink/FlinkDag/config.ts index 1986df9024..c80c754e24 100644 --- a/dinky-web/src/components/Flink/FlinkDag/config.ts +++ b/dinky-web/src/components/Flink/FlinkDag/config.ts @@ -17,10 +17,10 @@ * */ -import { DagreLayoutOptions } from '@antv/layout/lib/layout/types'; import { Options } from '@antv/x6/lib/graph/options'; import Connecting = Options.Connecting; import Manual = Options.Manual; +import { DagreLayoutOptions } from '@antv/layout'; export const edgeConfig = { markup: [ @@ -168,10 +168,11 @@ export const graphConfig: Partial = { maxScale: 1.5, minScale: 0.1 }, - connecting: graphConnectConfig + connecting: graphConnectConfig, + autoResize: true }; -export const layoutConfig: DagreLayoutOptions = { +export const layoutConfig: DagreLayoutOptions & { type: string } = { type: 'dagre', rankdir: 'LR', ranksep: 120, diff --git a/dinky-web/src/components/Flink/FlinkDag/index.tsx b/dinky-web/src/components/Flink/FlinkDag/index.tsx index 641d6b9af7..2009839aa1 100644 --- a/dinky-web/src/components/Flink/FlinkDag/index.tsx +++ b/dinky-web/src/components/Flink/FlinkDag/index.tsx @@ -196,7 +196,7 @@ function getMaxWidthAndDepth(edges: CusEdge[]): { maxWidth: number; maxDepth: nu } const FlinkDag = (props: DagProps) => { - const container = useRef(null); + const container = useRef(null); const { job, onlyPlan = false, checkPoints = {} } = props; @@ -280,8 +280,8 @@ const FlinkDag = (props: DagProps) => { ); // Adaptive layout - const model = new DagreLayout(layoutConfig).layout(flinkData); - graph.fromJSON(model); + // const model = new DagreLayout(layoutConfig).assign(flinkData); + graph.fromJSON(flinkData); // Automatically zoom to fit graph.zoomToFit(zoomOptions); @@ -378,7 +378,7 @@ const FlinkDag = (props: DagProps) => { }, [zoom]); return ( - + <>
{ /> )} - + ); }; diff --git a/dinky-web/src/components/Flink/OptionsSelect/index.tsx b/dinky-web/src/components/Flink/OptionsSelect/index.tsx index e2b52e84ec..023d131e02 100644 --- a/dinky-web/src/components/Flink/OptionsSelect/index.tsx +++ b/dinky-web/src/components/Flink/OptionsSelect/index.tsx @@ -41,7 +41,7 @@ const FlinkOptionsSelect = (props: FlinkOptionsProps) => { return ( renderTemplateDropDown(item), virtual: false }} + fieldProps={{ dropdownRender: (item) => renderTemplateDropDown(item), virtual: true }} /> ); }; diff --git a/dinky-web/src/components/VersionList/index.tsx b/dinky-web/src/components/VersionList/index.tsx index fe69465b6c..11d32882d7 100644 --- a/dinky-web/src/components/VersionList/index.tsx +++ b/dinky-web/src/components/VersionList/index.tsx @@ -18,12 +18,22 @@ */ import { PopconfirmDeleteBtn } from '@/components/CallBackButton/PopconfirmDeleteBtn'; -import { TaskVersionListItem } from '@/types/Studio/data'; import { l } from '@/utils/intl'; import { DeliveredProcedureOutlined } from '@ant-design/icons'; import { List, Skeleton, Space, Tag, Tooltip } from 'antd'; import { ListItemTypeProps } from 'antd/es/list/Item'; +export type TaskVersionListItem = { + id: number; + taskId?: number; + name?: string; + dialect?: string; + type?: string; + statement: string; + versionId?: string; + createTime?: string; + isLatest?: boolean; +}; export interface VersionListProps { data: TaskVersionListItem[]; onSelectListen?: (value: TaskVersionListItem) => void; diff --git a/dinky-web/src/global.less b/dinky-web/src/global.less index 5c13661ba7..3da28ae781 100644 --- a/dinky-web/src/global.less +++ b/dinky-web/src/global.less @@ -96,7 +96,7 @@ body, // scrollbar style --- start ---- ::-webkit-scrollbar { - width: 0.2vw; + width: 0.3vw; height: 0.5vh; } @@ -253,14 +253,22 @@ ol { display: flex; } +.ant-spin-nested-loading { + height: inherit; +} + +.ant-spin-container { + height: inherit; +} + .gitCodeTree { min-height: 73vh; max-height: 73vh; } .schemaTree { - min-height: 92vh; - max-height: 92vh; + height: 100%; + overflow-y: auto; } .code-content-empty { diff --git a/dinky-web/src/hooks/useThemeValue.tsx b/dinky-web/src/hooks/useThemeValue.tsx index 9550d92438..315a940bac 100644 --- a/dinky-web/src/hooks/useThemeValue.tsx +++ b/dinky-web/src/hooks/useThemeValue.tsx @@ -42,3 +42,13 @@ export default function useThemeValue() { return getThemeValue(theme === THEME.dark); } + +export function useTheme() { + const [theme, setTheme] = useState(localStorage.getItem(THEME.NAV_THEME)); + + useEffect(() => { + setTheme(localStorage.getItem(THEME.NAV_THEME)); + }, [localStorage.getItem(THEME.NAV_THEME)]); + + return theme; +} diff --git a/dinky-web/src/locales/en-US/global.ts b/dinky-web/src/locales/en-US/global.ts index ce78f16d68..c250ce38c7 100644 --- a/dinky-web/src/locales/en-US/global.ts +++ b/dinky-web/src/locales/en-US/global.ts @@ -86,6 +86,7 @@ export default { 'button.stopRefresh': 'Stop Auto Refresh', 'button.startRefresh': 'Start Auto Refresh(5s/e)', 'button.autoWrap': 'Auto Wrap/Unwrap', + 'button.output': 'Output', 'menu.menu': 'Menu', 'right.menu.open': 'Open', @@ -125,6 +126,8 @@ export default { 'global.stay.tuned': 'Stay tuned', 'global.mini': 'Mini Size', 'global.max': 'Max Size', + 'global.blankOpen': 'Opens in a new window', + 'global.float': 'Float', 'global.table.operate': 'Operation', 'global.table.config': 'Config', diff --git a/dinky-web/src/locales/en-US/menu.ts b/dinky-web/src/locales/en-US/menu.ts index 5c1fa0b27f..28f609079c 100644 --- a/dinky-web/src/locales/en-US/menu.ts +++ b/dinky-web/src/locales/en-US/menu.ts @@ -100,6 +100,8 @@ export default { 'menu.datastudio.savePoint': 'Save Point', 'menu.datastudio.historyVision': 'History Vision', 'menu.datastudio.jobInfo': 'Job Info', + 'menu.datastudio.quickStart': 'Quick Start', + 'menu.datastudio.flinkSqlClient': 'Flink SQL Client', 'menu.datastudio.tool': 'Tool', 'menu.datastudio.result': 'Result', @@ -108,7 +110,10 @@ export default { 'menu.datastudio.process': 'Process', 'menu.datastudio.history': 'Execution History', 'menu.datastudio.table-data': 'Table Data', + 'menu.datastudio.service': 'Service', 'menu.datastudio.tool.text-comparison': 'Text Comparison', - 'menu.datastudio.tool.jsonToSql': 'JSON TO Flink-SQL' + 'menu.datastudio.tool.jsonToSql': 'JSON TO Flink-SQL', + 'menu.datastudio.task.baseConfig': 'Basic Configuration', + 'menu.datastudio.task.previewConfig': 'Preview Configuration' }; diff --git a/dinky-web/src/locales/en-US/pages.ts b/dinky-web/src/locales/en-US/pages.ts index 47b1564a8a..47af5710e6 100644 --- a/dinky-web/src/locales/en-US/pages.ts +++ b/dinky-web/src/locales/en-US/pages.ts @@ -449,8 +449,8 @@ export default { 'pages.datastudio.editor.debug.success': 'Search succeeded', 'pages.datastudio.editor.execute.warn': 'The execution mode of this task is [{type}], which does not support SQL query, please save it manually and use the button on the right - job submission', - 'pages.datastudio.editor.explan': 'Get the current FlinkSql execution graph', - 'pages.datastudio.editor.explan.tip': 'JobPlan for FlinkSQL', + 'pages.datastudio.editor.explain': 'Get the current FlinkSql execution graph', + 'pages.datastudio.editor.explain.tip': 'JobPlan for FlinkSQL', 'pages.datastudio.editor.stop': 'Stop', 'pages.datastudio.editor.stop.job': 'Stop job', 'pages.datastudio.editor.stop.jobConfirm': 'Are you sure to stop the job [{jobName}]? ', @@ -568,8 +568,10 @@ export default { 'The data is too long to be displayed in full', 'pages.datastudio.label.version': 'Version History', 'pages.datastudio.label.version.diff': 'Version Diff', - 'pages.datastudio.label.version.leftTitle': 'Version number', - 'pages.datastudio.label.version.rightTitle': 'Version number', + 'pages.datastudio.label.version.leftTitle': + 'Version number: {versionId} Creation time: {createTime}', + 'pages.datastudio.label.version.rightTitle': + 'Version: [Current Edited Version] Update Time: [{updateTime}]', 'pages.datastudio.label.version.rollback': 'Rollback', 'pages.datastudio.label.version.rollback.flinksql': 'Rollback Flink SQL Version', 'pages.datastudio.label.version.rollback.flinksqlConfirm': @@ -1370,5 +1372,10 @@ export default { 'dashboard.theme.shine': 'Purple', 'dashboard.theme.vintage': 'Vintage', 'dashboard.theme.westeros': 'Westeros', - 'dashboard.theme.wonderland': 'Wonderland' + 'dashboard.theme.wonderland': 'Wonderland', + + 'datastudio.toolbar.rightClick.hideToolbarDesc': 'hides the toolbar window name', + 'datastudio.toolbar.rightClick.showToolbarDesc': 'displays the toolbar window name', + 'datastudio.toolbar.rightClick.closeCompact': 'turn off compact mode', + 'datastudio.toolbar.rightClick.openCompact': 'turn on compact mode' }; diff --git a/dinky-web/src/locales/zh-CN/global.ts b/dinky-web/src/locales/zh-CN/global.ts index 88bde72050..7a4aff4aa8 100644 --- a/dinky-web/src/locales/zh-CN/global.ts +++ b/dinky-web/src/locales/zh-CN/global.ts @@ -86,6 +86,7 @@ export default { 'button.stopRefresh': '停止自动刷新', 'button.startRefresh': '开始自动刷新(5s/次)', 'button.autoWrap': '自动换行/不换行', + 'button.output': '输出', 'menu.menu': '菜单', 'right.menu.open': '打开', @@ -125,6 +126,8 @@ export default { 'global.stay.tuned': '敬请期待', 'global.mini': '最小化', 'global.max': '最大化', + 'global.blankOpen': '在新窗口打开', + 'global.float': '浮动', 'global.table.operate': '操作', 'global.table.updateTime': '更新时间', diff --git a/dinky-web/src/locales/zh-CN/menu.ts b/dinky-web/src/locales/zh-CN/menu.ts index 0733c783f7..490106f0dc 100644 --- a/dinky-web/src/locales/zh-CN/menu.ts +++ b/dinky-web/src/locales/zh-CN/menu.ts @@ -107,7 +107,12 @@ export default { 'menu.datastudio.process': '进程', 'menu.datastudio.history': '执行历史', 'menu.datastudio.table-data': '表数据', + 'menu.datastudio.service': '服务', + 'menu.datastudio.quickStart': '快速开始', + 'menu.datastudio.flinkSqlClient': 'Flink SQL 客户端', 'menu.datastudio.tool.text-comparison': '文本比对', - 'menu.datastudio.tool.jsonToSql': 'JSON转Flink-SQL' + 'menu.datastudio.tool.jsonToSql': 'JSON转Flink-SQL', + 'menu.datastudio.task.baseConfig': '基础配置', + 'menu.datastudio.task.previewConfig': '预览配置' }; diff --git a/dinky-web/src/locales/zh-CN/pages.ts b/dinky-web/src/locales/zh-CN/pages.ts index 19bea6a9a7..d82b7b82c7 100644 --- a/dinky-web/src/locales/zh-CN/pages.ts +++ b/dinky-web/src/locales/zh-CN/pages.ts @@ -400,8 +400,8 @@ export default { 'pages.datastudio.editor.exec.success': '提交成功', 'pages.datastudio.editor.execute.warn': '该任务执行模式为【{type}】,不支持 SQL 查询,请手动保存后使用右侧按钮——作业提交', - 'pages.datastudio.editor.explan': '获取当前的 FlinkSql 的执行图', - 'pages.datastudio.editor.explan.tip': 'FlinkSQL 的 JobPlan', + 'pages.datastudio.editor.explain': '获取当前的 FlinkSql 的执行图', + 'pages.datastudio.editor.explain.tip': 'FlinkSQL 的 JobPlan', 'pages.datastudio.editor.stop': '停止', 'pages.datastudio.editor.stop.job': '停止作业', 'pages.datastudio.editor.stop.jobConfirm': '确定停止作业【{jobName}】吗?', @@ -506,8 +506,9 @@ export default { 'pages.datastudio.label.result.query.latest.data.truncate': '数据过长无法全部显示', 'pages.datastudio.label.version': '版本历史', 'pages.datastudio.label.version.diff': '版本对比', - 'pages.datastudio.label.version.leftTitle': '版本号:【{versionId}】 创建时间', - 'pages.datastudio.label.version.rightTitle': '版本号:【当前编辑版本】 创建时间', + 'pages.datastudio.label.version.leftTitle': '版本号:【{versionId}】 创建时间:【{createTime}】', + 'pages.datastudio.label.version.rightTitle': + '版本号:【当前编辑版本】 更新时间:【{updateTime}】', 'pages.datastudio.label.version.rollback': '回滚', 'pages.datastudio.label.version.rollback.flinksql': '回滚Flink SQL版本', 'pages.datastudio.label.version.rollback.flinksqlConfirm': @@ -1285,5 +1286,10 @@ export default { 'dashboard.theme.shine': '明亮', 'dashboard.theme.vintage': '复古', 'dashboard.theme.westeros': '西部', - 'dashboard.theme.wonderland': '奇幻' + 'dashboard.theme.wonderland': '奇幻', + + 'datastudio.toolbar.rightClick.hideToolbarDesc': '隐藏工具栏窗口名称', + 'datastudio.toolbar.rightClick.showToolbarDesc': '显示工具栏窗口名称', + 'datastudio.toolbar.rightClick.closeCompact': '关闭紧凑模式', + 'datastudio.toolbar.rightClick.openCompact': '打开紧凑模式' }; diff --git a/dinky-web/src/pages/DataStudio/HeaderContainer/index.tsx b/dinky-web/src/pages/DataStudio/HeaderContainer/index.tsx index f0370c652c..79c3e31bdd 100644 --- a/dinky-web/src/pages/DataStudio/HeaderContainer/index.tsx +++ b/dinky-web/src/pages/DataStudio/HeaderContainer/index.tsx @@ -344,10 +344,10 @@ const HeaderContainer = (props: connect) => { }; const showDagGraph = async () => { - const result = await getJobPlan(l('pages.datastudio.editor.explan.tip'), currentData); + const result = await getJobPlan(l('pages.datastudio.editor.explain.tip'), currentData); if (result) { modal.confirm({ - title: l('pages.datastudio.editor.explan.tip'), + title: l('pages.datastudio.editor.explain.tip'), width: '100%', icon: null, content: , diff --git a/dinky-web/src/pages/DataStudio/LeftContainer/Project/JobTree/index.tsx b/dinky-web/src/pages/DataStudio/LeftContainer/Project/JobTree/index.tsx index e341c5616e..e77bdde8ff 100644 --- a/dinky-web/src/pages/DataStudio/LeftContainer/Project/JobTree/index.tsx +++ b/dinky-web/src/pages/DataStudio/LeftContainer/Project/JobTree/index.tsx @@ -39,7 +39,7 @@ import { connect } from '@@/exports'; import { SortAscendingOutlined } from '@ant-design/icons'; import { Key } from '@ant-design/pro-components'; import { useModel } from '@umijs/max'; -import { Divider, MenuProps } from 'antd'; +import { Divider, Flex, MenuProps } from 'antd'; import { Button, Dropdown, Empty, Space, Tree } from 'antd'; import type { ButtonType } from 'antd/es/button/buttonHelpers'; import Search from 'antd/es/input/Search'; @@ -69,8 +69,6 @@ const JobTree: React.FC = (props) => { selectCatalogueSortTypeData, onNodeClick, style, - height, - leftContainerWidth, onRightClick, selectKeyChange, onExpand, @@ -271,9 +269,9 @@ const JobTree: React.FC = (props) => { return ( <> - + = (props) => { > - +
openTerminal()}> SQL Cli Terminal @@ -321,8 +319,6 @@ const JobTree: React.FC = (props) => { export default connect( ({ Studio, SysConfig }: { Studio: StateType; SysConfig: SysConfigStateType }) => ({ - height: Studio.toolContentHeight, - leftContainerWidth: Studio.leftContainer.width, project: Studio.project, taskOwnerLockingStrategy: SysConfig.taskOwnerLockingStrategy, users: Studio.users, diff --git a/dinky-web/src/pages/DataStudio/LeftContainer/Project/constants.tsx b/dinky-web/src/pages/DataStudio/LeftContainer/Project/constants.tsx index d54d0dc682..575169bcc8 100644 --- a/dinky-web/src/pages/DataStudio/LeftContainer/Project/constants.tsx +++ b/dinky-web/src/pages/DataStudio/LeftContainer/Project/constants.tsx @@ -28,8 +28,8 @@ import { PlusCircleTwoTone, UpCircleTwoTone } from '@ant-design/icons'; -import { MenuItemType } from 'antd/es/menu/hooks/useItems'; import { DefaultOptionType } from 'antd/es/select'; +import { MenuItemType } from 'antd/es/menu/interface'; /** * 目录级别: diff --git a/dinky-web/src/pages/DataStudio/LeftContainer/Project/function.tsx b/dinky-web/src/pages/DataStudio/LeftContainer/Project/function.tsx index 0fb3d36e24..3e5f5d91cc 100644 --- a/dinky-web/src/pages/DataStudio/LeftContainer/Project/function.tsx +++ b/dinky-web/src/pages/DataStudio/LeftContainer/Project/function.tsx @@ -39,8 +39,8 @@ import { Key } from 'react'; export const generateList = (data: any, list: any[]) => { for (const element of data) { const node = element; - const { name, id, parentId, level } = node; - list.push({ name, id, key: id, title: name, parentId, level }); + const { name, id, parentId, level, isLeaf } = node; + list.push({ name, id, key: id, title: name, parentId, level, isLeaf }); if (node.children) { generateList(node.children, list); } diff --git a/dinky-web/src/pages/DataStudio/MiddleContainer/Terminal/TerminalConfig.ts b/dinky-web/src/pages/DataStudio/MiddleContainer/Terminal/TerminalConfig.ts index 165b15e7da..e6460f1180 100644 --- a/dinky-web/src/pages/DataStudio/MiddleContainer/Terminal/TerminalConfig.ts +++ b/dinky-web/src/pages/DataStudio/MiddleContainer/Terminal/TerminalConfig.ts @@ -35,7 +35,7 @@ export const getTermConfig = () => { const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; return { mode: 'MODE_EMBEDDED', - wsUrl: `${protocol}//${window.location.host}/ws/sql-gateway`, + wsUrl: `${protocol}//${window.location.host}/api/ws/sql-gateway`, fontSize: 14, backspaceAsCtrlH: true }; diff --git a/dinky-web/src/pages/DataStudio/MiddleContainer/Terminal/TerminalContent.tsx b/dinky-web/src/pages/DataStudio/MiddleContainer/Terminal/TerminalContent.tsx index f9339fdc54..af0a2d1bf7 100644 --- a/dinky-web/src/pages/DataStudio/MiddleContainer/Terminal/TerminalContent.tsx +++ b/dinky-web/src/pages/DataStudio/MiddleContainer/Terminal/TerminalContent.tsx @@ -180,7 +180,7 @@ const TerminalContent: React.FC = (props) => { }; }, []); - return
; + return
; }; export default TerminalContent; diff --git a/dinky-web/src/pages/DataStudio/MiddleContainer/Terminal/index.tsx b/dinky-web/src/pages/DataStudio/MiddleContainer/Terminal/index.tsx index 335ad2c0c9..a9b759fa71 100644 --- a/dinky-web/src/pages/DataStudio/MiddleContainer/Terminal/index.tsx +++ b/dinky-web/src/pages/DataStudio/MiddleContainer/Terminal/index.tsx @@ -58,7 +58,7 @@ const TerminalTab = () => { const GATEWAY_FILTER = [ClusterType.SQL_GATEWAY]; const [disableUrlEditable, setUrlEditable] = useState(true); - const [opentTerm, setOpentTerm] = useState(false); + const [openTerm, setOpenTerm] = useState(false); const [connectCfg, setConnectCfg] = useState(getTermConfig()); const [currentMode, setCurrentMode] = useState(connectCfg.mode); @@ -110,7 +110,7 @@ const TerminalTab = () => { const onFinish = (values: TermProps) => { setTermConfig(values); setConnectCfg(values); - setOpentTerm(true); + setOpenTerm(true); }; const formItemLayout = { @@ -126,15 +126,14 @@ const TerminalTab = () => { return ( <> - {opentTerm ? ( + {openTerm ? ( ) : ( -
+
diff --git a/dinky-web/src/pages/DataStudio/MiddleContainer/index.tsx b/dinky-web/src/pages/DataStudio/MiddleContainer/index.tsx index 9f6abadab6..c33349b702 100644 --- a/dinky-web/src/pages/DataStudio/MiddleContainer/index.tsx +++ b/dinky-web/src/pages/DataStudio/MiddleContainer/index.tsx @@ -229,7 +229,7 @@ const MiddleContainer = (props: any) => { return ; case TabsPageType.metadata: { const params = (item as MetadataTabsItemType).params; - return ; + return ; } case TabsPageType.project: if (parseInt(activeKey) < 0) { diff --git a/dinky-web/src/pages/DataStudioNew/Algorithm.ts b/dinky-web/src/pages/DataStudioNew/Algorithm.ts new file mode 100644 index 0000000000..a7b0bf275c --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/Algorithm.ts @@ -0,0 +1,911 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { + BoxData, + DockMode, + DropDirection, + LayoutData, + maximePlaceHolderId, + PanelData, + placeHolderStyle, + TabBase, + TabData, + TabGroup +} from 'rc-dock/es//DockData'; + +let _watchObjectChange: WeakMap = new WeakMap(); + +export function getUpdatedObject(obj: any): any { + let result = _watchObjectChange.get(obj); + if (result) { + return getUpdatedObject(result); + } + return obj; +} + +function clearObjectCache() { + _watchObjectChange = new WeakMap(); +} + +function clone(value: T, extra?: any): T { + let newValue: any = { ...value, ...extra }; + if (Array.isArray(newValue.tabs)) { + newValue.tabs = newValue.tabs.concat(); + } + if (Array.isArray(newValue.children)) { + newValue.children = newValue.children.concat(); + } + _watchObjectChange.set(value, newValue); + return newValue; +} + +function maxFlex(currentFlex: number, newFlex: number) { + if (currentFlex == null) { + return newFlex; + } + return Math.max(currentFlex, newFlex); +} + +function mergeFlex(currentFlex: number, newFlex: number) { + if (currentFlex == null) { + return newFlex; + } + if (currentFlex === newFlex) { + return newFlex; + } + if (currentFlex >= 1) { + if (newFlex <= 1) { + return 1; + } + return Math.min(currentFlex, newFlex); + } else { + if (newFlex >= 1) { + return 1; + } + return Math.max(currentFlex, newFlex); + } +} + +let _idCount = 0; + +export function nextId() { + ++_idCount; + return `+${_idCount}`; +} + +let _zCount = 0; + +export function nextZIndex(current?: number): number { + if (current === _zCount) { + // already the top + return current; + } + return ++_zCount; +} + +function findInPanel( + panel: PanelData, + id: string, + filter: Filter +): PanelData | TabData | undefined { + if (panel.id === id && filter & Filter.Panel) { + return panel; + } + if (filter & Filter.Tab) { + for (let tab of panel.tabs) { + if (tab.id === id) { + return tab; + } + } + } + return undefined; +} + +function findInBox( + box: BoxData | undefined, + id: string, + filter: Filter +): PanelData | TabData | BoxData | undefined { + let result: PanelData | TabData | BoxData | undefined; + if (filter | Filter.Box && box?.id === id) { + return box; + } + if (!box?.children) { + return undefined; + } + for (let child of box.children) { + if ('children' in child) { + if ((result = findInBox(child, id, filter))) { + break; + } + } else if ('tabs' in child) { + if ((result = findInPanel(child, id, filter))) { + break; + } + } + } + return result; +} + +export enum Filter { + Tab = 1, + Panel = 1 << 1, + Box = 1 << 2, + Docked = 1 << 3, + Floated = 1 << 4, + Windowed = 1 << 5, + Max = 1 << 6, + EveryWhere = Docked | Floated | Windowed | Max, + AnyTab = Tab | EveryWhere, + AnyPanel = Panel | EveryWhere, + AnyTabPanel = Tab | Panel | EveryWhere, + All = Tab | Panel | Box | EveryWhere +} + +export function find( + layout: LayoutData, + id: string, + filter: Filter = Filter.AnyTabPanel +): PanelData | TabData | BoxData | undefined { + let result: PanelData | TabData | BoxData | undefined; + + if (filter & Filter.Docked) { + result = findInBox(layout.dockbox, id, filter); + } + if (result) return result; + + if (filter & Filter.Floated) { + result = findInBox(layout.floatbox, id, filter); + } + if (result) return result; + + if (filter & Filter.Windowed) { + result = findInBox(layout.windowbox, id, filter); + } + if (result) return result; + + if (filter & Filter.Max) { + result = findInBox(layout.maxbox, id, filter); + } + + return result; +} + +export function addNextToTab( + layout: LayoutData, + source: TabData | PanelData, + target: TabData, + direction: DropDirection +): LayoutData { + let pos = target.parent.tabs.indexOf(target); + if (pos >= 0) { + if (direction === 'after-tab') { + ++pos; + } + return addTabToPanel(layout, source, target.parent, pos); + } + return layout; +} + +export function addTabToPanel( + layout: LayoutData, + source: TabData | PanelData, + panel: PanelData, + idx = -1 +): LayoutData { + if (idx === -1) { + idx = panel.tabs.length; + } + + let tabs: TabData[]; + let activeId: string; + if ('tabs' in source) { + // source is PanelData + tabs = source.tabs; + activeId = source.activeId; + } else { + // source is TabData + tabs = [source]; + } + + if (tabs.length) { + let newPanel = clone(panel); + newPanel.tabs.splice(idx, 0, ...tabs); + newPanel.activeId = tabs.at(-1).id; + for (let tab of tabs) { + tab.parent = newPanel; + } + if (activeId) { + newPanel.activeId = activeId; + } + layout = replacePanel(layout, panel, newPanel); + } + + return layout; +} + +export function converToPanel(source: TabData | PanelData): PanelData { + if ('tabs' in source) { + // source is already PanelData + return source; + } else { + let newPanel: PanelData = { tabs: [source], group: source.group, activeId: source.id }; + source.parent = newPanel; + return newPanel; + } +} + +export function dockPanelToPanel( + layout: LayoutData, + newPanel: PanelData, + panel: PanelData, + direction: DropDirection +): LayoutData { + let box = panel.parent; + let dockMode: DockMode = + direction === 'left' || direction === 'right' ? 'horizontal' : 'vertical'; + let afterPanel = direction === 'bottom' || direction === 'right'; + + let pos = box.children.indexOf(panel); + if (pos >= 0) { + let newBox = clone(box); + if (dockMode === box.mode) { + if (afterPanel) { + ++pos; + } + // HINT: The size remains the same, preventing flex-grow less than 1 + newPanel.size = panel.size; + newBox.children.splice(pos, 0, newPanel); + } else { + let newChildBox: BoxData = { mode: dockMode, children: [] }; + newChildBox.size = panel.size; + if (afterPanel) { + newChildBox.children = [panel, newPanel]; + } else { + newChildBox.children = [newPanel, panel]; + } + panel.parent = newChildBox; + panel.size = 200; + newPanel.parent = newChildBox; + newPanel.size = 200; + newBox.children[pos] = newChildBox; + newChildBox.parent = newBox; + } + return replaceBox(layout, box, newBox); + } + return layout; +} + +export function dockPanelToBox( + layout: LayoutData, + newPanel: PanelData, + box: BoxData, + direction: DropDirection +): LayoutData { + let parentBox = box.parent; + let dockMode: DockMode = + direction === 'left' || direction === 'right' ? 'horizontal' : 'vertical'; + + let afterPanel = direction === 'bottom' || direction === 'right'; + + if (parentBox) { + let pos = parentBox.children.indexOf(box); + if (pos >= 0) { + let newParentBox = clone(parentBox); + if (dockMode === parentBox.mode) { + if (afterPanel) { + ++pos; + } + newPanel.size = box.size * 0.3; + box.size *= 0.7; + + newParentBox.children.splice(pos, 0, newPanel); + } else { + let newChildBox: BoxData = { mode: dockMode, children: [] }; + newChildBox.size = box.size; + if (afterPanel) { + newChildBox.children = [box, newPanel]; + } else { + newChildBox.children = [newPanel, box]; + } + box.parent = newChildBox; + box.size = 280; + newPanel.parent = newChildBox; + newPanel.size = 120; + newParentBox.children[pos] = newChildBox; + } + return replaceBox(layout, parentBox, newParentBox); + } + } else if (box === layout.dockbox) { + let newBox = clone(box); + if (dockMode === box.mode) { + let pos = 0; + if (afterPanel) { + pos = newBox.children.length; + } + newPanel.size = box.size * 0.3; + box.size *= 0.7; + + newBox.children.splice(pos, 0, newPanel); + return replaceBox(layout, box, newBox); + } else { + // replace root dockbox + + let newDockBox: BoxData = { mode: dockMode, children: [] }; + newDockBox.size = box.size; + if (afterPanel) { + newDockBox.children = [newBox, newPanel]; + } else { + newDockBox.children = [newPanel, newBox]; + } + newBox.size = 280; + newPanel.size = 120; + return replaceBox(layout, box, newDockBox); + } + } else if (box === layout.maxbox) { + let newBox = clone(box); + newBox.children.push(newPanel); + return replaceBox(layout, box, newBox); + } + + return layout; +} + +export function floatPanel( + layout: LayoutData, + newPanel: PanelData, + rect?: { left: number; top: number; width: number; height: number } +): LayoutData { + let newBox = clone(layout.floatbox); + if (rect) { + newPanel.x = rect.left; + newPanel.y = rect.top; + newPanel.w = rect.width; + newPanel.h = rect.height; + } + + newBox.children.push(newPanel); + return replaceBox(layout, layout.floatbox, newBox); +} + +export function panelToWindow(layout: LayoutData, newPanel: PanelData): LayoutData { + let newBox = clone(layout.windowbox); + + newBox.children.push(newPanel); + return replaceBox(layout, layout.windowbox, newBox); +} + +export function removeFromLayout(layout: LayoutData, source: TabData | PanelData): LayoutData { + if (source) { + let panelData: PanelData; + if ('tabs' in source) { + panelData = source; + layout = removePanel(layout, panelData); + } else { + panelData = source.parent; + layout = removeTab(layout, source); + } + if (panelData && panelData.parent && panelData.parent.mode === 'maximize') { + let newPanel = layout.maxbox.children[0] as PanelData; + if (!newPanel || (newPanel.tabs.length === 0 && !newPanel.panelLock)) { + // max panel is gone, remove the place holder + let placeHolder = find(layout, maximePlaceHolderId) as PanelData; + if (placeHolder) { + return removePanel(layout, placeHolder); + } + } + } + } + return layout; +} + +function removePanel(layout: LayoutData, panel: PanelData): LayoutData { + let box = panel.parent; + if (box) { + let pos = box.children.indexOf(panel); + if (pos >= 0) { + let newBox = clone(box); + newBox.children.splice(pos, 1); + return replaceBox(layout, box, newBox); + } + } + return layout; +} + +function removeTab(layout: LayoutData, tab: TabData): LayoutData { + let panel = tab.parent; + if (panel) { + let pos = panel.tabs.indexOf(tab); + if (pos >= 0) { + let newPanel = clone(panel); + newPanel.tabs.splice(pos, 1); + if (newPanel.activeId === tab.id) { + // update selection id + if (newPanel.tabs.length > pos) { + newPanel.activeId = newPanel.tabs[pos].id; + } else if (newPanel.tabs.length) { + newPanel.activeId = newPanel.tabs[0].id; + } + } + return replacePanel(layout, panel, newPanel); + } + } + return layout; +} + +export function moveToFront(layout: LayoutData, source: TabData | PanelData): LayoutData { + if (source) { + let panelData: PanelData; + let needUpdate = false; + let changes: any = {}; + if ('tabs' in source) { + panelData = source; + } else { + panelData = source.parent; + if (panelData.activeId !== source.id) { + // move tab to front + changes.activeId = source.id; + needUpdate = true; + } + } + if (panelData && panelData.parent && panelData.parent.mode === 'float') { + // move float panel to front + let newZ = nextZIndex(panelData.z); + if (newZ !== panelData.z) { + changes.z = newZ; + needUpdate = true; + } + } + if (needUpdate) { + layout = replacePanel(layout, panelData, clone(panelData, changes)); + } + } + return layout; +} + +// maximize or restore the panel +export function maximize(layout: LayoutData, source: TabData | PanelData): LayoutData { + if (source) { + if ('tabs' in source) { + if (source.parent.mode === 'maximize') { + return restorePanel(layout, source); + } else { + return maximizePanel(layout, source); + } + } else { + return maximizeTab(layout, source); + } + } + return layout; +} + +function maximizePanel(layout: LayoutData, panel: PanelData): LayoutData { + let maxbox = layout.maxbox; + if (maxbox.children.length) { + // invalid maximize + return layout; + } + let placeHodlerPanel: PanelData = { + ...panel, + id: maximePlaceHolderId, + tabs: [], + panelLock: {} + }; + layout = replacePanel(layout, panel, placeHodlerPanel); + layout = dockPanelToBox(layout, panel, layout.maxbox, 'middle'); + return layout; +} + +function restorePanel(layout: LayoutData, panel: PanelData): LayoutData { + layout = removePanel(layout, panel); + let placeHolder = find(layout, maximePlaceHolderId) as PanelData; + if (placeHolder) { + let { x, y, z, w, h } = placeHolder; + panel = { ...panel, x, y, z, w, h }; + return replacePanel(layout, placeHolder, panel); + } else { + return dockPanelToBox(layout, panel, layout.dockbox, 'right'); + } +} + +function maximizeTab(layout: LayoutData, tab: TabData): LayoutData { + // TODO to be implemented + return layout; +} + +// move float panel into the screen +export function fixFloatPanelPos( + layout: LayoutData, + layoutWidth?: number, + layoutHeight?: number +): LayoutData { + let layoutChanged = false; + if (layout && layout.floatbox && layoutWidth > 200 && layoutHeight > 200) { + let newFloatChildren = layout.floatbox.children.concat(); + for (let i = 0; i < newFloatChildren.length; ++i) { + let panel: PanelData = newFloatChildren[i] as PanelData; + let panelChange: any = {}; + if (!(panel.w > 0)) { + panelChange.w = Math.round(layoutWidth / 3); + } else if (panel.w > layoutWidth) { + panelChange.w = layoutWidth; + } + if (!(panel.h > 0)) { + panelChange.h = Math.round(layoutHeight / 3); + } else if (panel.h > layoutHeight) { + panelChange.h = layoutHeight; + } + if (typeof panel.y !== 'number') { + panelChange.y = (layoutHeight - (panelChange.h || panel.h)) >> 1; + } else if (panel.y > layoutHeight - 16) { + panelChange.y = Math.max(layoutHeight - 16 - (panel.h >> 1), 0); + } else if (!(panel.y >= 0)) { + panelChange.y = 0; + } + + if (typeof panel.x !== 'number') { + panelChange.x = (layoutWidth - (panelChange.w || panel.w)) >> 1; + } else if (panel.x + panel.w < 16) { + panelChange.x = 16 - (panel.w >> 1); + } else if (panel.x > layoutWidth - 16) { + panelChange.x = layoutWidth - 16 - (panel.w >> 1); + } + if (Object.keys(panelChange).length) { + newFloatChildren[i] = clone(panel, panelChange); + layoutChanged = true; + } + } + if (layoutChanged) { + let newBox = clone(layout.floatbox); + newBox.children = newFloatChildren; + return replaceBox(layout, layout.floatbox, newBox); + } + } + + return layout; +} + +export function fixLayoutData( + layout: LayoutData, + groups?: { [key: string]: TabGroup }, + loadTab?: (tab: TabBase) => TabData +): LayoutData { + function fixPanelOrBox(d: PanelData | BoxData) { + if (d.id == null) { + d.id = nextId(); + } else if (d.id.startsWith('+')) { + let idnum = Number(d.id); + if (idnum > _idCount) { + // make sure generated id is unique + _idCount = idnum; + } + } + if (!(d.size >= 0)) { + d.size = 1000; + } + d.minWidth = 0; + d.minHeight = 0; + d.widthFlex = null; + d.heightFlex = null; + } + + function fixPanelData(panel: PanelData): PanelData { + fixPanelOrBox(panel); + let findActiveId = false; + if (loadTab) { + for (let i = 0; i < panel.tabs.length; ++i) { + panel.tabs[i] = loadTab(panel.tabs[i]); + } + } + if (panel.group == null && panel.tabs.length) { + panel.group = panel.tabs[0].group; + } + let tabGroup = groups?.[panel.group]; + if (tabGroup) { + if (tabGroup.widthFlex != null) { + panel.widthFlex = tabGroup.widthFlex; + } + if (tabGroup.heightFlex != null) { + panel.heightFlex = tabGroup.heightFlex; + } + } + for (let child of panel.tabs) { + child.parent = panel; + if (child.id === panel.activeId) { + findActiveId = true; + } + if (child.minWidth > panel.minWidth) panel.minWidth = child.minWidth; + if (child.minHeight > panel.minHeight) panel.minHeight = child.minHeight; + } + if (!findActiveId && panel.tabs.length) { + panel.activeId = panel.tabs[0].id; + } + if (panel.minWidth <= 0) { + panel.minWidth = 1; + } + if (panel.minHeight <= 0) { + panel.minHeight = 1; + } + let { panelLock } = panel; + if (panelLock) { + if (panel.minWidth < panelLock.minWidth) { + panel.minWidth = panelLock.minWidth; + } + if (panel.minHeight < panelLock.minHeight) { + panel.minHeight = panelLock.minHeight; + } + if (panel.panelLock.widthFlex != null) { + panel.widthFlex = panelLock.widthFlex; + } + if (panel.panelLock.heightFlex != null) { + panel.heightFlex = panelLock.heightFlex; + } + } + + if (panel.z > _zCount) { + // make sure next zIndex is on top + _zCount = panel.z; + } + return panel; + } + + function fixBoxData(box: BoxData): BoxData { + fixPanelOrBox(box); + for (let i = 0; i < box.children.length; ++i) { + let child = box.children[i]; + child.parent = box; + if ('children' in child) { + fixBoxData(child); + if (child.children.length === 0) { + // remove box with no child + box.children.splice(i, 1); + --i; + } else if (child.children.length === 1) { + // box with one child should be merged back to parent box + let subChild = child.children[0]; + if ((subChild as BoxData).mode === box.mode) { + // sub child is another box that can be merged into current box + let totalSubSize = 0; + for (let subsubChild of (subChild as BoxData).children) { + totalSubSize += subsubChild.size; + } + let sizeScale = child.size / totalSubSize; + for (let subsubChild of (subChild as BoxData).children) { + subsubChild.size *= sizeScale; + } + // merge children up + box.children.splice(i, 1, ...(subChild as BoxData).children); + } else { + // sub child can be moved up one layer + subChild.size = child.size; + box.children[i] = subChild; + } + --i; + } + } else if ('tabs' in child) { + fixPanelData(child); + if (child.tabs.length === 0) { + // remove panel with no tab + if (!child.panelLock) { + box.children.splice(i, 1); + --i; + } else if (child.group === placeHolderStyle && (box.children.length > 1 || box.parent)) { + // remove placeHolder Group + box.children.splice(i, 1); + --i; + } + } + } + // merge min size + switch (box.mode) { + case 'horizontal': + if (child.minWidth > 0) box.minWidth += child.minWidth; + if (child.minHeight > box.minHeight) box.minHeight = child.minHeight; + if (child.widthFlex != null) { + box.widthFlex = maxFlex(box.widthFlex, child.widthFlex); + } + if (child.heightFlex != null) { + box.heightFlex = mergeFlex(box.heightFlex, child.heightFlex); + } + break; + case 'vertical': + if (child.minWidth > box.minWidth) box.minWidth = child.minWidth; + if (child.minHeight > 0) box.minHeight += child.minHeight; + if (child.heightFlex != null) { + box.heightFlex = maxFlex(box.heightFlex, child.heightFlex); + } + if (child.widthFlex != null) { + box.widthFlex = mergeFlex(box.widthFlex, child.widthFlex); + } + break; + } + } + // add divider size + if (box.children.length > 1) { + switch (box.mode) { + case 'horizontal': + box.minWidth += (box.children.length - 1) * 4; + break; + case 'vertical': + box.minHeight += (box.children.length - 1) * 4; + break; + } + } + + return box; + } + + if (layout.floatbox) { + layout.floatbox.mode = 'float'; + } else { + layout.floatbox = { mode: 'float', children: [], size: 1 }; + } + + if (layout.windowbox) { + layout.windowbox.mode = 'window'; + } else { + layout.windowbox = { mode: 'window', children: [], size: 1 }; + } + + if (layout.maxbox) { + layout.maxbox.mode = 'maximize'; + } else { + layout.maxbox = { mode: 'maximize', children: [], size: 1 }; + } + + fixBoxData(layout.dockbox); + fixBoxData(layout.floatbox); + fixBoxData(layout.windowbox); + fixBoxData(layout.maxbox); + + if (layout.dockbox.children.length === 0) { + // add place holder panel when root box is empty + let newPanel: PanelData = { + id: '+0', + group: placeHolderStyle, + panelLock: {}, + size: 200, + tabs: [] + }; + newPanel.parent = layout.dockbox; + layout.dockbox.children.push(newPanel); + } else { + // merge and replace root box when box has only one child + while (layout.dockbox.children.length === 1 && 'children' in layout.dockbox.children[0]) { + let newDockBox = clone(layout.dockbox.children[0] as BoxData); + layout.dockbox = newDockBox; + for (let child of newDockBox.children) { + child.parent = newDockBox; + } + } + } + layout.dockbox.parent = null; + layout.floatbox.parent = null; + layout.windowbox.parent = null; + layout.maxbox.parent = null; + clearObjectCache(); + return layout; +} + +export function replacePanel( + layout: LayoutData, + panel: PanelData, + newPanel: PanelData +): LayoutData { + for (let tab of newPanel.tabs) { + tab.parent = newPanel; + } + + let box = panel.parent; + if (box) { + let pos = box.children.indexOf(panel); + if (pos >= 0) { + let newBox = clone(box); + newBox.children[pos] = newPanel; + return replaceBox(layout, box, newBox); + } + } + return layout; +} + +function replaceBox(layout: LayoutData, box: BoxData, newBox: BoxData): LayoutData { + for (let child of newBox.children) { + child.parent = newBox; + } + + let parentBox = box.parent; + if (parentBox) { + let pos = parentBox.children.indexOf(box); + if (pos >= 0) { + let newParentBox = clone(parentBox); + newParentBox.children[pos] = newBox; + return replaceBox(layout, parentBox, newParentBox); + } + } else { + if (box.id === layout.dockbox.id || box === layout.dockbox) { + return { ...layout, dockbox: newBox }; + } else if (box.id === layout.floatbox.id || box === layout.floatbox) { + return { ...layout, floatbox: newBox }; + } else if (box.id === layout.windowbox.id || box === layout.windowbox) { + return { ...layout, windowbox: newBox }; + } else if (box.id === layout.maxbox.id || box === layout.maxbox) { + return { ...layout, maxbox: newBox }; + } + } + return layout; +} + +export function getFloatPanelSize(panel: HTMLElement, tabGroup: TabGroup) { + if (!panel) { + return [300, 300]; + } + let panelWidth = panel.offsetWidth; + let panelHeight = panel.offsetHeight; + + let [minWidth, maxWidth] = tabGroup.preferredFloatWidth || [100, 600]; + let [minHeight, maxHeight] = tabGroup.preferredFloatHeight || [50, 500]; + if (!(panelWidth >= minWidth)) { + panelWidth = minWidth; + } else if (!(panelWidth <= maxWidth)) { + panelWidth = maxWidth; + } + if (!(panelHeight >= minHeight)) { + panelHeight = minHeight; + } else if (!(panelHeight <= maxHeight)) { + panelHeight = maxHeight; + } + + return [panelWidth, panelHeight]; +} + +export function findNearestPanel(rectFrom: DOMRect, rectTo: DOMRect, direction: string): number { + let distance = -1; + let overlap = -1; + let alignment = 0; + switch (direction) { + case 'ArrowUp': { + distance = rectFrom.top - rectTo.bottom + rectFrom.height; + overlap = Math.min(rectFrom.right, rectTo.right) - Math.max(rectFrom.left, rectTo.left); + break; + } + case 'ArrowDown': { + distance = rectTo.top - rectFrom.bottom + rectFrom.height; + overlap = Math.min(rectFrom.right, rectTo.right) - Math.max(rectFrom.left, rectTo.left); + break; + } + case 'ArrowLeft': { + distance = rectFrom.left - rectTo.right + rectFrom.width; + overlap = Math.min(rectFrom.bottom, rectTo.bottom) - Math.max(rectFrom.top, rectTo.top); + alignment = Math.abs(rectFrom.top - rectTo.top); + break; + } + case 'ArrowRight': { + distance = rectTo.left - rectFrom.right + rectFrom.width; + overlap = Math.min(rectFrom.bottom, rectTo.bottom) - Math.max(rectFrom.top, rectTo.top); + alignment = Math.abs(rectFrom.top - rectTo.top); + break; + } + } + if (distance < 0 || overlap <= 0) { + return -1; + } + + return distance * (alignment + 1) - overlap * 0.001; +} diff --git a/dinky-web/src/pages/DataStudioNew/CenterTabContent/DataSourceDetail.tsx b/dinky-web/src/pages/DataStudioNew/CenterTabContent/DataSourceDetail.tsx new file mode 100644 index 0000000000..f2c9df9c7b --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/CenterTabContent/DataSourceDetail.tsx @@ -0,0 +1,38 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { CenterTab, DataStudioState } from '@/pages/DataStudioNew/model'; +import RightTagsRouter from '@/pages/RegCenter/DataSource/components/DataSourceDetail/RightTagsRouter'; +import { QueryParams } from '@/pages/RegCenter/DataSource/components/DataSourceDetail/RightTagsRouter/data'; +import { connect } from '@@/exports'; +import { mapDispatchToProps } from '@/pages/DataStudioNew/DvaFunction'; + +const DataSourceDetail = (props: CenterTab) => { + const { params } = props; + const queryParams: QueryParams = { + id: params.selectDatabaseId, + schemaName: params.schemaName, + tableName: params.tableName + }; + return ; +}; +export default connect( + ({ DataStudio }: { DataStudio: DataStudioState }) => ({}), + mapDispatchToProps +)(DataSourceDetail); diff --git a/dinky-web/src/pages/DataStudioNew/CenterTabContent/HistoryVersion.tsx b/dinky-web/src/pages/DataStudioNew/CenterTabContent/HistoryVersion.tsx new file mode 100644 index 0000000000..8b9e685848 --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/CenterTabContent/HistoryVersion.tsx @@ -0,0 +1,150 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { API_CONSTANTS } from '@/services/endpoints'; +import React, { useRef, useState } from 'react'; +import { TaskVersionListItem } from '@/types/Studio/data'; +import { l } from '@/utils/intl'; +import moment from 'moment'; +import { Button, Card, Modal, Tag } from 'antd'; +import { RocketOutlined, SyncOutlined } from '@ant-design/icons'; +import { DiffEditor, MonacoDiffEditor } from '@monaco-editor/react'; +import { convertCodeEditTheme } from '@/utils/function'; +import { handleOption, handleRemoveById } from '@/services/BusinessCrud'; +import VersionList from '@/components/VersionList'; +import { useRequest } from '@umijs/max'; + +export const HistoryVersion = (props: { taskId: number; statement: string; updateTime: Date }) => { + const { taskId, statement, updateTime } = props; + + const { data, refresh, loading } = useRequest({ + url: API_CONSTANTS.GET_JOB_VERSION, + params: { taskId: taskId } + }); + + const [versionDiffVisible, setVersionDiffVisible] = useState(false); + const [versionDiffRow, setVersionDiffRow] = useState(); + + const editorRef = useRef(null); + + function handleEditorDidMount(editor: MonacoDiffEditor) { + // @ts-ignore + editorRef.current = editor; + } + + const VersionDiffForm = () => { + let leftTitle = l('pages.datastudio.label.version.leftTitle', '', { + versionId: versionDiffRow?.versionId, + createTime: moment(versionDiffRow?.createTime).format('YYYY-MM-DD HH:mm:ss') + }); + + let rightTitle = l('pages.datastudio.label.version.rightTitle', '', { + updateTime: moment(updateTime).format('YYYY-MM-DD HH:mm:ss') + }); + let originalValue = versionDiffRow?.statement; + + return ( + { + editorRef.current?.dispose(); + setVersionDiffVisible(false); + }} + footer={[ + + ]} + > +
+ + {leftTitle} + + + {rightTitle} + +
+
+ +
+ ); + }; + + const onRollBackVersion = async (row: TaskVersionListItem) => { + Modal.confirm({ + title: l('pages.datastudio.label.version.rollback.flinksql'), + content: l('pages.datastudio.label.version.rollback.flinksqlConfirm', '', { + versionId: row.versionId + }), + okText: l('button.confirm'), + cancelText: l('button.cancel'), + onOk: async () => { + const TaskVersionRollbackItem = { + taskId: row.taskId, + versionId: row.versionId + }; + await handleOption( + 'api/task/rollbackTask', + l('pages.datastudio.label.version.rollback.flinksql'), + TaskVersionRollbackItem + ); + } + }); + }; + + const deleteVersion = async (item: TaskVersionListItem) => { + await handleRemoveById(API_CONSTANTS.GET_JOB_VERSION, item.id); + await refresh(); + }; + + return ( + + { + setVersionDiffRow(item); + setVersionDiffVisible(true); + }} + /> + {VersionDiffForm()} + + ); +}; diff --git a/dinky-web/src/pages/DataStudioNew/CenterTabContent/RunToolbar/SelectFlinkEnv.tsx b/dinky-web/src/pages/DataStudioNew/CenterTabContent/RunToolbar/SelectFlinkEnv.tsx new file mode 100644 index 0000000000..4d03878fcd --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/CenterTabContent/RunToolbar/SelectFlinkEnv.tsx @@ -0,0 +1,46 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { EnvType } from '@/pages/DataStudio/model'; +import React, { memo } from 'react'; +import { l } from '@/utils/intl'; +import { ProFormSelect } from '@ant-design/pro-components'; + +import '../index.less'; + +export const SelectFlinkEnv = memo((params: { flinkEnv: EnvType[] }) => { + const { flinkEnv } = params; + const options = [ + { label: l('button.disable'), value: -1 }, + ...flinkEnv.map((env) => ({ + label: env.name, + value: env.id + })) + ]; + return ( + + ); +}); diff --git a/dinky-web/src/pages/DataStudioNew/CenterTabContent/RunToolbar/SelectFlinkRunMode.tsx b/dinky-web/src/pages/DataStudioNew/CenterTabContent/RunToolbar/SelectFlinkRunMode.tsx new file mode 100644 index 0000000000..ca0134b298 --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/CenterTabContent/RunToolbar/SelectFlinkRunMode.tsx @@ -0,0 +1,103 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { ProFormCascader } from '@ant-design/pro-form/lib'; +import { CascaderProps, Tag } from 'antd'; +import { DefaultOptionType } from 'antd/es/select'; +import { FlinkCluster } from '@/pages/DataStudioNew/type'; +import { memo } from 'react'; + +type Option = { + value: number; + label: string; + enabled?: boolean; + children?: Option[]; +}; +export const SelectFlinkRunMode = memo((props: { data: FlinkCluster[] }) => { + const { data } = props; + const optionDict = { + local: [], + standalone: [], + 'yarn-session': [], + 'yarn-per-job': [], + 'yarn-application': [], + 'kubernetes-session': [], + 'kubernetes-application': [], + 'kubernetes-application-operator': [] + } as Record; + data.forEach((item) => { + if (item.type === 'yarn-application') { + optionDict['yarn-per-job'].push({ + value: item.id, + label: item.name, + enabled: item.enabled + }); + } + optionDict[item.type].push({ + value: item.id, + label: item.name, + enabled: item.enabled + }); + }); + //optionDict转换options + const options = [ + { + value: 'local', + label: 'local' + }, + ...Object.keys(optionDict) + .filter((key) => optionDict[key].length > 0) + .map((key) => { + return { + value: key, + label: key, + children: optionDict[key] + }; + }) + ]; + const displayRender: CascaderProps['displayRender'] = ( + labels, + selectedOptions = [] + ) => + labels.map((label, i) => { + const option = selectedOptions[i]; + return ( + option && + i === labels.length - 1 && ( + + {label}{' '} + {labels.length > 1 && ( + {selectedOptions[0].label} + )} + + ) + ); + }); + return ( + + ); +}); diff --git a/dinky-web/src/pages/DataStudioNew/CenterTabContent/SqlTask.tsx b/dinky-web/src/pages/DataStudioNew/CenterTabContent/SqlTask.tsx new file mode 100644 index 0000000000..79709851b4 --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/CenterTabContent/SqlTask.tsx @@ -0,0 +1,838 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { CenterTab, DataStudioState } from '@/pages/DataStudioNew/model'; +import { Button, Col, Divider, Flex, Row, Skeleton, TabsProps } from 'antd'; +import './index.less'; +import React, { memo, useCallback, useEffect, useRef, useState } from 'react'; +import { registerEditorKeyBindingAndAction } from '@/utils/function'; +import { Monaco } from '@monaco-editor/react'; +import { Panel, PanelGroup } from 'react-resizable-panels'; +import { + ApartmentOutlined, + AuditOutlined, + BugOutlined, + CaretRightOutlined, + ClearOutlined, + CloseOutlined, + EnvironmentOutlined, + FullscreenExitOutlined, + FullscreenOutlined, + FundOutlined, + MergeCellsOutlined, + PartitionOutlined, + PauseOutlined, + RotateRightOutlined, + SaveOutlined +} from '@ant-design/icons'; +import RunToolBarButton from '@/pages/DataStudioNew/components/RunToolBarButton'; +import { connect, useModel } from '@umijs/max'; +import CusPanelResizeHandle from '@/pages/DataStudioNew/components/CusPanelResizeHandle'; +import { ProForm, ProFormInstance } from '@ant-design/pro-components'; +import { useAsyncEffect, useFullscreen } from 'ahooks'; +import { getTaskDetails } from '@/pages/DataStudio/LeftContainer/Project/service'; +import { SelectFlinkEnv } from '@/pages/DataStudioNew/CenterTabContent/RunToolbar/SelectFlinkEnv'; +import { SelectFlinkRunMode } from '@/pages/DataStudioNew/CenterTabContent/RunToolbar/SelectFlinkRunMode'; +import { mapDispatchToProps } from '@/pages/DataStudioNew/DvaFunction'; +import { TaskInfo } from '@/pages/DataStudioNew/CenterTabContent/TaskInfo'; +import TaskConfig from '@/pages/DataStudioNew/CenterTabContent/TaskConfig'; +import { HistoryVersion } from '@/pages/DataStudioNew/CenterTabContent/HistoryVersion'; +import { FlinkTaskRunType, StudioLineageParams, TaskState } from '@/pages/DataStudioNew/type'; +import { JOB_LIFE_CYCLE } from '@/pages/DevOps/constants'; +import { debounce } from 'lodash'; +import { + cancelTask, + changeTaskLife, + executeSql, + explainSql, + getJobPlan +} from '@/pages/DataStudio/HeaderContainer/service'; +import { l } from '@/utils/intl'; +import { editor } from 'monaco-editor'; +import { DataStudioActionType } from '@/pages/DataStudioNew/data.d'; +import { getDataByParams, handlePutDataJson, queryDataByParams } from '@/services/BusinessCrud'; +import { API_CONSTANTS } from '@/services/endpoints'; +import { Jobs, LineageDetailInfo } from '@/types/DevOps/data'; +import { isStatusDone } from '@/pages/DataStudioNew/function'; +import { debugTask } from '@/pages/DataStudioNew/service'; +import { PushpinIcon } from '@/components/Icons/CustomIcons'; +import { assert } from '@/pages/DataStudio/function'; +import { DIALECT } from '@/services/constants'; +import { isSql } from '@/pages/DataStudio/HeaderContainer/function'; +import { SysConfigStateType } from '@/pages/SettingCenter/GlobalSetting/model'; +import DiffModal from '@/pages/DataStudio/MiddleContainer/StudioEditor/DiffModal'; +import { matchLanguage } from '@/pages/DataStudio/MiddleContainer/function'; +import CodeEdit from '@/components/CustomEditor/CodeEdit'; +import { lockTask } from '@/pages/DataStudioNew/function'; + +export type FlinkSqlProps = { + showDesc: boolean; + tabData: CenterTab; + activeTab?: string | undefined; +}; +const toolbarSize = 40; +const dividerHeight = 24; + +export const SqlTask = memo((props: FlinkSqlProps & any) => { + const { + showDesc, + tempData, + updateAction, + updateProject, + updateCenterTab, + activeTab, + enabledDs, + taskOwnerLockingStrategy, + dsConfig, + users, + tabs + } = props; + const { params, title, id } = props.tabData as CenterTab; + const containerRef = useRef(null); + const editorInstance = useRef(null); + const [codeEditorWidth, setCodeEditorWidth] = useState(0); + + const [selectRightToolbar, setSelectRightToolbar] = useState(undefined); + + const [loading, setLoading] = useState(true); + const [originStatementValue, setOriginStatementValue] = useState(''); + const [currentState, setCurrentState] = useState({ + alertGroupId: -1, + batchModel: false, + configJson: { + udfRefer: [], + customConfig: {} + }, + databaseId: 0, + firstLevelOwner: 0, + fragment: false, + note: '', + parallelism: 0, + savePointPath: '', + savePointStrategy: 0, + secondLevelOwners: [], + type: 'local', + taskId: params.taskId, + statement: '', + name: '', + dialect: '', + step: 0, + envId: -1, + versionId: 0, + createTime: new Date(), + updateTime: new Date(), + status: '' + }); + // 代码恢复 + const [openDiffModal, setOpenDiffModal] = useState(false); + const [diff, setDiff] = useState([]); + + const formRef = useRef(); + const [isFullscreen, { enterFullscreen, exitFullscreen }] = useFullscreen(containerRef); + + const { initialState, setInitialState } = useModel('@@initialState'); + + useAsyncEffect(async () => { + const taskDetail = await getTaskDetails(params.taskId); + if (taskDetail) { + const statement = params.statement ?? taskDetail.statement; + const newParams = { ...taskDetail, taskId: params.taskId, statement }; + // @ts-ignore + setCurrentState(newParams); + updateCenterTab({ ...props.tabData, params: newParams }); + + setOriginStatementValue(statement); + + if (params?.statement && params?.statement !== taskDetail.statement) { + setDiff([{ key: 'statement', server: taskDetail.statement, cache: params.statement }]); + setOpenDiffModal(true); + updateCenterTab({ + ...props.tabData, + isUpdate: true, + params: { ...newParams } + }); + } + } + setLoading(false); + }, []); + + // 数据初始化 + useEffect(() => { + if (!containerRef.current) { + return () => {}; + } + // 监控布局宽度高度变化,重新计算树的高度 + const element = containerRef.current!!; + const observer = new ResizeObserver((entries) => { + if (entries?.length === 1) { + // 这里节点理应为一个,减去的高度是为搜索栏的高度 + setCodeEditorWidth(entries[0].contentRect.width); + } + }); + observer.observe(element); + return () => { + observer.unobserve(element); + }; + }, [loading]); + + const editorDidMount = (editor: editor.IStandaloneCodeEditor, monaco: Monaco) => { + editor.layout(); + editor.focus(); + // @ts-ignore + editorInstance.current = editor; + // @ts-ignore + editor['id'] = currentState.taskId; + editor.onDidChangeCursorPosition((e) => { + // props.footContainerCacher.cache.codePosition = [e.position.lineNumber, e.position.column]; + // dispatch({ + // type: STUDIO_MODEL.saveFooterValue, + // payload: { ...props.footContainerCacher.cache } + // }); + }); + registerEditorKeyBindingAndAction(editor); + }; + + const updateTask = (useServerVersion: boolean) => { + const statement = useServerVersion ? diff[0].server : diff[0].cache; + if (useServerVersion) { + updateCenterTab({ + ...props.tabData, + isUpdate: false, + params: { ...currentState, statement } + }); + } + setCurrentState((prevState) => ({ ...prevState, statement })); + setOriginStatementValue(statement); + + setOpenDiffModal(false); + }; + + const getFlinkMode = () => { + if (currentState.type === 'local') { + return ['local']; + } + if ( + currentState.type === 'standalone' || + currentState.type === 'kubernetes-session' || + currentState.type === 'yarn-session' + ) { + return [currentState.type, currentState.clusterId]; + } + return [currentState.type, currentState.clusterConfigurationId]; + }; + const onEditorChange = (value: string | undefined, ev: editor.IModelContentChangedEvent) => { + updateCenterTab({ + ...props.tabData, + isUpdate: originStatementValue !== value, + params: { ...currentState, statement: value ?? '' } + }); + setCurrentState((prevState) => ({ ...prevState, statement: value ?? '' })); + }; + + const onValuesChange = (changedValues: any, allValues: TaskState) => { + if ('flinkMode' in allValues) { + const mode = (allValues['flinkMode'] as [string, number])[0] as FlinkTaskRunType; + if (mode === 'local') { + allValues.clusterId = null; + allValues.clusterConfigurationId = null; + } else if ( + mode === 'standalone' || + mode === 'kubernetes-session' || + mode === 'yarn-session' + ) { + allValues.clusterId = (allValues['flinkMode'] as [string, number])[1]; + allValues.clusterConfigurationId = null; + } else { + const id = (allValues['flinkMode'] as [string, number])[1]; + allValues.clusterId = null; + allValues.clusterConfigurationId = id; + } + allValues.type = mode; + } + setCurrentState({ ...currentState, ...allValues }); + updateCenterTab({ ...props.tabData, params: { ...currentState, ...allValues } }); + }; + const hotKeyConfig = { enable: activeTab === id }; + + const getActiveTab = () => { + return tabs.find((item: CenterTab) => { + if (item.id === activeTab) { + return item; + } + }); + }; + + const isLockTask = lockTask( + getActiveTab()?.params?.firstLevelOwner, + getActiveTab()?.params?.secondLevelOwners, + initialState?.currentUser?.user, + taskOwnerLockingStrategy + ); + + const rightToolbarItem: TabsProps['items'] = []; + if ( + isSql(currentState.dialect) || + assert(currentState.dialect, [DIALECT.FLINK_SQL, DIALECT.FLINKJAR], true, 'includes') + ) { + rightToolbarItem.push({ + label: l('button.config'), + key: 'config', + children: ( + + ) + }); + } + if (assert(currentState.dialect, [DIALECT.FLINK_SQL, DIALECT.FLINKJAR], true, 'includes')) { + rightToolbarItem.push({ + label: l('menu.datastudio.historyVision'), + key: 'historyVersion', + children: ( + + ) + }); + } + + rightToolbarItem.push({ + label: l('global.info'), + key: 'info', + children: + }); + + const handleSave = useCallback(async () => { + // await putTask(currentState) + await handlePutDataJson(API_CONSTANTS.TASK, currentState); + updateCenterTab({ ...props.tabData, isUpdate: false }); + }, [currentState, updateCenterTab, props.tabData]); + + const handleCheck = useCallback(async () => { + const res = await explainSql( + l('pages.datastudio.editor.checking', '', { jobName: currentState?.name }), + { ...currentState } + ); + updateAction({ + actionType: DataStudioActionType.TASK_RUN_CHECK, + params: { + taskId: params.taskId, + data: res.data + } + }); + }, [currentState, updateAction]); + const handleDAG = useCallback(async () => { + const res = await getJobPlan(l('pages.datastudio.editor.explain.tip'), currentState); + updateAction({ + actionType: DataStudioActionType.TASK_RUN_DAG, + params: { + taskId: params.taskId, + data: res.data + } + }); + }, [currentState, updateAction]); + + const handleLineage = useCallback(async () => { + const { type, dialect, databaseId, statement, envId, fragment, taskId } = currentState; + const params: StudioLineageParams = { + type: 1, // todo: 暂时写死 ,后续优化 + dialect: dialect, + envId: envId ?? -1, + fragment: fragment, + statement: statement, + statementSet: true, + databaseId: databaseId ?? 0, + variables: {}, + taskId: taskId + }; + const data = (await getDataByParams( + API_CONSTANTS.STUDIO_GET_LINEAGE, + params + )) as LineageDetailInfo; + updateAction({ + actionType: DataStudioActionType.TASK_RUN_LINEAGE, + params: { + taskId: params.taskId, + data: data + } + }); + }, [currentState, updateAction]); + + const handleSubmit = useCallback(async () => { + await handleSave(); + updateAction({ + actionType: DataStudioActionType.TASK_RUN_SUBMIT, + params: { + taskId: currentState.taskId, + envId: currentState.envId + } + }); + const result = await executeSql( + l('pages.datastudio.editor.submitting', '', { jobName: title }), + currentState.taskId + ); + if (result.success) { + setCurrentState((prevState) => { + return { + ...prevState, + status: result.data.status === 'SUCCESS' ? 'RUNNING' : result.data.status + }; + }); + if (isSql(currentState.dialect) && result?.data?.result?.success) { + updateAction({ + actionType: DataStudioActionType.TASK_PREVIEW_RESULT, + params: { + taskId: currentState.taskId, + dialect: currentState.dialect, + columns: result.data.result.columns, + rowData: result.data.result.rowData + } + }); + } + } + }, [updateAction, currentState.envId, handleSave, currentState.taskId, currentState.dialect]); + + const handleDebug = useCallback(async () => { + const res = await debugTask( + l('pages.datastudio.editor.debugging', '', { jobName: currentState.name }), + { ...currentState } + ); + if (res?.success && res?.data?.result?.success) { + updateAction({ + actionType: DataStudioActionType.TASK_RUN_DEBUG, + params: { + taskId: params.taskId + } + }); + setCurrentState((prevState) => { + return { + ...prevState, + status: res.data.status === 'SUCCESS' ? 'RUNNING' : res.data.status + }; + }); + } + }, [currentState, updateAction]); + + const handleStop = useCallback(async () => { + const result = await cancelTask('', currentState.taskId, false); + if (result.success) { + setCurrentState((prevState) => { + return { + ...prevState, + status: 'CANCEL' + }; + }); + } + }, [currentState.taskId]); + + const handleGotoDevOps = useCallback(async () => { + const dataByParams = await queryDataByParams( + API_CONSTANTS.GET_JOB_INSTANCE_BY_TASK_ID, + { taskId: currentState.taskId } + ); + if (dataByParams) { + window.open(`/#/devops/job-detail?id=${dataByParams?.id}`); + } + }, [currentState.taskId]); + + const handleFormat = useCallback(async () => { + editorInstance.current?.getAction('format')?.run(); + }, [editorInstance.current]); + const handleLocation = useCallback(async () => { + const key = Number(id.replace('project_', '')); + updateAction({ + actionType: DataStudioActionType.TASK_RUN_LOCATION, + params: { + taskId: params.taskId, + key: key + } + }); + }, [updateAction]); + const handleChangeJobLife = useCallback(async () => { + if (JOB_LIFE_CYCLE.PUBLISH == currentState.step) { + await changeTaskLife( + l('global.table.lifecycle.offline'), + currentState.taskId, + JOB_LIFE_CYCLE.DEVELOP + ); + currentState.step = JOB_LIFE_CYCLE.DEVELOP; + } else { + await handleSave(); + await changeTaskLife( + l('global.table.lifecycle.publishing'), + currentState.taskId, + JOB_LIFE_CYCLE.PUBLISH + ); + currentState.step = JOB_LIFE_CYCLE.PUBLISH; + } + setCurrentState((prevState) => ({ ...prevState, step: currentState.step })); + }, [handleSave, currentState.step, currentState.taskId]); + + return ( + + + + + + {/* 运行工具栏*/} + } + onClick={handleSave} + disabled={currentState?.step === JOB_LIFE_CYCLE.PUBLISH || isLockTask} + hotKey={{ + ...hotKeyConfig, + hotKeyDesc: 'Ctrl/Command +S', + hotKeyHandle: (e: KeyboardEvent) => + (e.ctrlKey && e.key === 's') || (e.metaKey && e.key === 's') + }} + /> + } + onClick={async () => { + enterFullscreen(); + }} + /> + } + onClick={async () => { + exitFullscreen(); + }} + /> + } + onClick={handleCheck} + disabled={isLockTask} + isShow={ + assert( + currentState.dialect, + [DIALECT.JAVA, DIALECT.SCALA, DIALECT.PYTHON_LONG], + true, + 'notIncludes' + ) && !isSql(currentState.dialect) + } + hotKey={{ + ...hotKeyConfig, + hotKeyDesc: 'Alt+2/@', + hotKeyHandle: (e: KeyboardEvent) => + (e.altKey && e.code === 'Digit2') || (e.altKey && e.key === '@') + }} + /> + } + onClick={handleDAG} + /> + } + onClick={handleLineage} + isShow={assert(currentState.dialect, [DIALECT.FLINK_SQL], true, 'includes')} + /> + + {assert( + currentState.dialect, + [DIALECT.FLINK_SQL, DIALECT.FLINKJAR], + true, + 'includes' + ) && ( + <> + + + + + )} + + {assert( + currentState.dialect, + [DIALECT.JAVA, DIALECT.SCALA, DIALECT.PYTHON_LONG, DIALECT.FLINKSQLENV], + true, + 'notIncludes' + ) && } + + } + onClick={handleSubmit} + hotKey={{ + ...hotKeyConfig, + hotKeyDesc: 'Shift+F10', + hotKeyHandle: (e: KeyboardEvent) => e.shiftKey && e.key === 'F10' + }} + /> + } + onClick={handleDebug} + hotKey={{ + ...hotKeyConfig, + hotKeyDesc: 'Shift+F9', + hotKeyHandle: (e: KeyboardEvent) => e.shiftKey && e.key === 'F9' + }} + /> + + } + onClick={handleStop} + hotKey={{ + ...hotKeyConfig, + hotKeyDesc: 'Ctrl+F2', + hotKeyHandle: (e: KeyboardEvent) => e.ctrlKey && e.key === 'F2' + }} + /> + + } + onClick={handleGotoDevOps} + /> + + + } + onClick={handleFormat} + /> + } + onClick={handleLocation} + /> + + + + } + onClick={handleChangeJobLife} + /> + } + onClick={handleChangeJobLife} + /> + } + isShow={ + enabledDs && + JOB_LIFE_CYCLE.PUBLISH === currentState.step && + assert( + currentState.dialect, + [DIALECT.FLINKSQLENV, DIALECT.SCALA, DIALECT.JAVA, DIALECT.PYTHON_LONG], + true, + 'notIncludes' + ) + } + hotKey={{ + ...hotKeyConfig, + hotKeyDesc: 'Ctrl+E', + hotKeyHandle: (e: KeyboardEvent) => e.ctrlKey && e.key === 'E' + }} + /> + + + + + + + + + + {selectRightToolbar && ( + <> + + + + + + + {renderFlinkConfig()} + + ); +}; +function removeDuplicates(arr: DefaultOptionType[], key: string): DefaultOptionType[] { + const seen = new Map(); + return arr.filter((item) => { + const keyValue = item[key]; + if (seen.has(keyValue)) { + return false; + } + seen.set(keyValue, true); + return true; + }); +} diff --git a/dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskConfig/ProFormFlinkUdfConfig.tsx b/dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskConfig/ProFormFlinkUdfConfig.tsx new file mode 100644 index 0000000000..1bb2555a5f --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskConfig/ProFormFlinkUdfConfig.tsx @@ -0,0 +1,120 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { l } from '@/utils/intl'; +import { + ProFormGroup, + ProFormInstance, + ProFormList, + ProFormText +} from '@ant-design/pro-components'; +import { Space } from 'antd'; +import FlinkUdfOptionsSelect from '@/components/Flink/UdfSelect'; +import React, { useState } from 'react'; +import { DefaultOptionType } from 'antd/es/select'; +import { TaskUdfRefer } from '@/types/Studio/data'; +import { calculatorWidth } from '@/pages/DataStudioNew/CenterTabContent/TaskConfig/function'; + +export const ProFormFlinkUdfConfig = (props: { + containerWidth: number; + flinkUdfOptions: DefaultOptionType[]; + proFormInstance: () => ProFormInstance; + defaultValue: { className: string; name: string }[]; +}) => { + const { flinkUdfOptions, containerWidth, proFormInstance } = props; + + const [currentSelectUdfIndexMap, setCurrentSelectUdfIndexMap] = useState< + Map + >(new Map([])); + + const existsClassNameList = [...currentSelectUdfIndexMap.values().map((item) => item.className)]; + + return ( + { + // 删除一项之后拿到 index 从 currentSelectUdfIndexMap 中删除对应的值 || get the value from currentSelectUdfIndexMap and delete it + setCurrentSelectUdfIndexMap((prevState) => { + const newState = new Map(prevState); + newState.delete(index); + return newState; + }); + }} + creatorButtonProps={{ + style: { width: '100%' }, + creatorButtonText: l('pages.datastudio.label.udf.injectUdf') + }} + > + {(_, index) => { + return ( + + + { + return { + ...item, + children: item.children?.filter( + (child) => !existsClassNameList.includes(child.value) + ) + }; + })} + onChange={(value: string) => { + setCurrentSelectUdfIndexMap((prevState) => { + const newState = new Map(prevState); + newState.set(index, { name: '', className: value }); + return newState; + }); + const simpleClassName = value?.split('.')?.pop() ?? ''; + const lowerName = + simpleClassName.charAt(0).toLowerCase() + simpleClassName.slice(1); + proFormInstance().setFieldsValue({ + configJson: { + udfRefer: { + [index]: { + className: value, + name: lowerName + } + } + } + }); + }} + /> + + + + ); + }} + + ); +}; diff --git a/dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskConfig/function.ts b/dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskConfig/function.ts new file mode 100644 index 0000000000..1892bd2e3e --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskConfig/function.ts @@ -0,0 +1,23 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +export const calculatorWidth = (width: number) => { + const resultWidth = width - 50; // 50 为右侧 proform list 组件的 删除按钮宽度 + return resultWidth > 0 ? resultWidth / 2 : 300; +}; diff --git a/dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskConfig/index.tsx b/dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskConfig/index.tsx new file mode 100644 index 0000000000..af9af656c7 --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskConfig/index.tsx @@ -0,0 +1,151 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { Tabs, TabsProps, Tag } from 'antd'; +import { + ProForm, + ProFormDigit, + ProFormGroup, + ProFormSelect, + ProFormSwitch +} from '@ant-design/pro-components'; +import { l } from '@/utils/intl'; +import React from 'react'; +import { InfoCircleOutlined } from '@ant-design/icons'; +import { DIALECT, SWITCH_OPTIONS } from '@/services/constants'; +import { TaskState, TempData } from '@/pages/DataStudioNew/type'; +import { BasicConfig } from '@/pages/DataStudioNew/CenterTabContent/TaskConfig/BasicConfig'; +import { assert } from '@/pages/DataStudio/function'; +import { isSql } from '@/pages/DataStudioNew/utils'; +import { DataSources } from '@/types/RegCenter/data'; +import { TagAlignLeft } from '@/components/StyledComponents'; +import { JOB_LIFE_CYCLE } from '@/pages/DevOps/constants'; + +export default (props: { + tempData: TempData; + data: TaskState; + onValuesChange?: (changedValues: any, values: TaskState) => void; + isLockTask: boolean; +}) => { + const { data, tempData } = props; + const items: TabsProps['items'] = []; + if (assert(data.dialect, [DIALECT.FLINK_SQL, DIALECT.FLINKJAR], true, 'includes')) { + items.push({ + key: 'basicConfig', + label: l('menu.datastudio.task.baseConfig'), + children: ( + + ) + }); + } + if ( + isSql(data.dialect) || + assert(data.dialect, [DIALECT.FLINK_SQL, DIALECT.FLINKJAR], true, 'includes') + ) { + const renderOtherConfig = () => { + if (isSql(data.dialect)) { + const dataSourceData: Record = {}; + const databaseDataList = tempData.dataSourceDataList; + databaseDataList + .filter((x) => x.type.toLowerCase() === data?.dialect.toLowerCase()) + .forEach((item: DataSources.DataSource) => { + dataSourceData[item.id] = ( + + + {item.type} + + {item.name} + + ); + }); + return ( + String(value)} + valueEnum={dataSourceData} + placeholder='Please select a dataSource' + rules={[{ required: true, message: 'Please select your dataSource!' }]} + allowClear={false} + /> + ); + } else { + return ( + <> + + }} + {...SWITCH_OPTIONS()} + /> + + }} + {...SWITCH_OPTIONS()} + /> + + ); + } + }; + items.push({ + key: 'previewConfig', + label: l('menu.datastudio.task.previewConfig'), + children: ( + + + {renderOtherConfig()} + + + + ) + }); + } + + return ; +}; diff --git a/dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskInfo.tsx b/dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskInfo.tsx new file mode 100644 index 0000000000..028e5c7bf0 --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/CenterTabContent/TaskInfo.tsx @@ -0,0 +1,57 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { l } from '@/utils/intl'; +import { Descriptions } from 'antd'; +import Paragraph from 'antd/es/typography/Paragraph'; +import { TaskState } from '@/pages/DataStudioNew/type'; +import { showFirstLevelOwner, showSecondLevelOwners } from '@/pages/DataStudioNew/function'; +import { UserBaseInfo } from '@/types/AuthCenter/data.d'; + +export const TaskInfo = (props: { params: TaskState; users: UserBaseInfo.User[] }) => { + const { + params: { taskId, name, dialect, versionId, firstLevelOwner, secondLevelOwners }, + users + } = props; + + return ( +
+ + + {taskId} + + + {name} + + + {dialect} + + + {versionId} + + + {showFirstLevelOwner(firstLevelOwner, users)} + + + {showSecondLevelOwners(secondLevelOwners, users)} + + +
+ ); +}; diff --git a/dinky-web/src/pages/DataStudioNew/CenterTabContent/index.less b/dinky-web/src/pages/DataStudioNew/CenterTabContent/index.less new file mode 100644 index 0000000000..627d05298b --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/CenterTabContent/index.less @@ -0,0 +1,46 @@ +.run-toolbar { + width: 100%; + //height: 40px; + padding-inline: 20px; + padding-block: 4px; + background-color: var(--second-color); + //overflow-x: auto; + align-items: center; +} + +.right-toolbar { + background-color: var(--second-color); + height: inherit; + position: absolute; + right: 0; + user-select: none; +} + +.right-toolbar-item { + height: 80px; + width: 100%; + writing-mode: vertical-lr; + align-content: center; + text-align: center; + cursor: pointer; +} + +.ant-form-item { + margin-bottom: 0; +} +.right-toolbar-item:hover { + color: #0396ff; +} + +.right-toolbar-item-active { + background-color: #0396ff; + color: #f4f5f9; +} +.right-toolbar-item-active:hover { + color: #f4f5f9; +} + +.right-toolbar-container { + padding: 5px 15px; + background-color: var(--main-background-color); +} diff --git a/dinky-web/src/pages/DataStudioNew/ContentLayout.tsx b/dinky-web/src/pages/DataStudioNew/ContentLayout.tsx new file mode 100644 index 0000000000..ba72c5c71b --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/ContentLayout.tsx @@ -0,0 +1,283 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import React from 'react'; +import { LayoutData, TabGroup } from 'rc-dock'; +import { DockContext, PanelData, TabData } from 'rc-dock/lib/DockData'; +import 'rc-dock/style/index-light.less'; +import './index.less'; +import { + ArrowsAltOutlined, + BorderOutlined, + CloseOutlined, + ImportOutlined, + PlusCircleOutlined, + ReloadOutlined, + SelectOutlined, + ShrinkOutlined, + SwitcherOutlined, + SyncOutlined +} from '@ant-design/icons'; +import { leftDefaultShowTab } from '@/pages/DataStudioNew/Toolbar/ToolbarRoute'; +import { l } from '@/utils/intl'; +import * as Algorithm from 'rc-dock/src/Algorithm'; +import { createNewPanel } from '@/pages/DataStudioNew/DockLayoutFunction'; +import { ToolbarPosition, ToolbarRoute } from '@/pages/DataStudioNew/Toolbar/data.d'; +import { DataStudioActionType } from '@/pages/DataStudioNew/data.d'; + +const quickGuideTab: TabData = { + closable: false, + id: 'quick-start', + title: '快速开始', + content: <>, + group: 'centerContent' +}; + +export const layout: LayoutData = { + dockbox: { + mode: 'vertical', + size: 1000, + children: [ + { + mode: 'horizontal', + size: 600, + children: [ + { + mode: 'vertical', + size: 200, + children: [ + { + tabs: [ + { + content: <>, + id: leftDefaultShowTab.key, + title: '项目', + minHeight: 30, + group: leftDefaultShowTab.position + } + ] + } + ] + }, + { + size: 800, + tabs: [quickGuideTab], + panelLock: { panelStyle: 'main' } + } + ] + }, + { + mode: 'horizontal', + tabs: [] + } + ] + } +}; + +const centerPanelExtraButtons = (panelData: PanelData, context: DockContext) => { + const buttons = []; + + if (panelData.parent?.mode !== 'window' && panelData.parent?.mode !== 'float') { + buttons.push( + context.dockMove(panelData, null, 'float')} + /> + ); + const MaximizeIcon = panelData.parent?.mode === 'maximize' ? SwitcherOutlined : BorderOutlined; + buttons.push( + context.dockMove(panelData, null, 'maximize')} + /> + ); + } else { + if (panelData.parent?.mode == 'float') { + buttons.push( + context.dockMove(panelData, null, 'new-window')} + /> + ); + } + buttons.push( + { + // @ts-ignore + const route: ToolbarRoute = { + key: panelData.activeId as string, + // 标题 + title: () => panelData.activeId as string, + // 图标 + icon: <> , + position: panelData.group as ToolbarPosition + }; + const layout = Algorithm.fixLayoutData( + // @ts-ignore + createNewPanel(context.state.layout, route), + // @ts-ignore + context.props.groups + ); + // @ts-ignore + context.changeLayout(layout, route.key, 'update', false); + context.dockMove(panelData, null, 'remove'); + }} + /> + ); + } + return buttons; +}; + +const toolbarPanelExtraButtons = ( + panelData: PanelData, + context: DockContext, + updateAction: any +) => { + const buttons = []; + if (panelData.activeId === 'project') { + buttons.push( + { + updateAction({ actionType: DataStudioActionType.PROJECT_REFRESH, params: {} }); + }} + /> + ); + buttons.push( + { + updateAction({ actionType: DataStudioActionType.PROJECT_CREATE_ROOT_DIR, params: {} }); + }} + /> + ); + buttons.push( + { + updateAction({ actionType: DataStudioActionType.PROJECT_EXPAND_ALL, params: {} }); + }} + /> + ); + buttons.push( + { + updateAction({ actionType: DataStudioActionType.PROJECT_COLLAPSE_ALL, params: {} }); + }} + /> + ); + } else if (panelData.activeId === 'catalog') { + buttons.push( + { + updateAction({ actionType: DataStudioActionType.CATALOG_REFRESH, params: {} }); + }} + /> + ); + } else if (panelData.activeId === 'datasource') { + buttons.push( + { + updateAction({ actionType: DataStudioActionType.DATASOURCE_REFRESH, params: {} }); + }} + /> + ); + buttons.push( + { + updateAction({ actionType: DataStudioActionType.DATASOURCE_CREATE, params: {} }); + }} + /> + ); + } + const close = ( + context.dockMove(panelData, null, 'remove')} + /> + ); + return [...buttons, ...centerPanelExtraButtons(panelData, context), close]; +}; +const toolbarPanelExtra = (panelData: PanelData, context: DockContext, updateAction: any) => { + return <>{toolbarPanelExtraButtons(panelData, context, updateAction).map((button) => button)}; +}; + +export const groups = ( + updateAction: (params: { actionType: string; params: Record }) => void +): { [key: string]: TabGroup } => { + const panelExtra = (panelData: PanelData, context: DockContext) => { + return toolbarPanelExtra(panelData, context, updateAction); + }; + return { + leftTop: { + floatable: true, + panelExtra: panelExtra, + newWindow: true + }, + leftBottom: { + floatable: true, + panelExtra: panelExtra, + newWindow: true + }, + right: { + floatable: true, + panelExtra: panelExtra, + newWindow: true + }, + // 中间内容group + centerContent: { + newWindow: true, + tabLocked: true, + panelExtra: (panelData: PanelData, context: DockContext) => { + return
{centerPanelExtraButtons(panelData, context).map((button) => button)}
; + } + } + }; +}; diff --git a/dinky-web/src/pages/DataStudioNew/DataStudioContext.ts b/dinky-web/src/pages/DataStudioNew/DataStudioContext.ts new file mode 100644 index 0000000000..4a6e83d0b2 --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/DataStudioContext.ts @@ -0,0 +1,27 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { createContext } from 'react'; + +export type DataStudioContextType = { + theme: 'realDark' | 'light'; +}; +export const DataStudioContext = createContext({ + theme: 'light' +} as DataStudioContextType); diff --git a/dinky-web/src/pages/DataStudioNew/DockLayoutFunction.tsx b/dinky-web/src/pages/DataStudioNew/DockLayoutFunction.tsx new file mode 100644 index 0000000000..be821e37f7 --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/DockLayoutFunction.tsx @@ -0,0 +1,262 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { BoxData } from 'rc-dock/es'; +import { DataStudioState } from '@/pages/DataStudioNew/model'; +import { ToolbarPosition, ToolbarRoute } from '@/pages/DataStudioNew/Toolbar/data.d'; +import { PanelData, TabData } from 'rc-dock/es/DockData'; +import { DockLayout, LayoutData } from 'rc-dock'; +import { Filter } from 'rc-dock/es/Algorithm'; + +export const activeTab = ( + dockLayout: DockLayout, + layoutData: LayoutData, + sourceTabData: TabData, + targetId: string +) => { + const tabPanel = find(layoutData, sourceTabData.id!!) as PanelData; + const targetTabPanel = find(layoutData, targetId) as PanelData; + if (!tabPanel && targetTabPanel) { + // 新增tab + targetTabPanel.tabs = [sourceTabData, ...targetTabPanel.tabs]; + targetTabPanel.activeId = sourceTabData.id; + } else { + // 切换tab + if (tabPanel.activeId === sourceTabData.id) { + dockLayout.loadLayout(layoutData); + return; + } + if (tabPanel.tabs.length === 0) { + tabPanel.tabs = [sourceTabData]; + } else { + if (tabPanel.tabs.some((tab) => tab.id === sourceTabData.id)) { + tabPanel.activeId = sourceTabData.id; + } + } + } + + dockLayout.loadLayout(layoutData); +}; + +export const createNewPanel = ( + layoutData: LayoutData, + route: ToolbarRoute, + size?: number +): LayoutData => { + // todo 这里有布局混乱导致算法崩溃风险 + const panelData: PanelData = { + group: route.position, + size, + tabs: [ + { + id: route.key, + content: <>, + title: route.title, + group: route.position + } + ] + }; + const boxData: BoxData = { + mode: 'vertical', + size: size ?? 1000, + children: [panelData] + }; + + const dockbox = layoutData.dockbox; + if (dockbox.mode === 'horizontal') { + if (route.position == 'right') { + (dockbox.children as BoxData[]).push(boxData); + } else if (route.position === 'leftTop') { + dockbox.children = [boxData, ...dockbox.children]; + } else if (route.position === 'leftBottom') { + return { + ...layoutData, + dockbox: { + mode: 'vertical', + children: [ + { + mode: 'horizontal', + children: [...dockbox.children] + }, + boxData + ] + } + }; + } else if (route.position === 'centerContent') { + if (dockbox.children.length === 0) { + dockbox.children = [...dockbox.children, boxData]; + } else { + if ((dockbox.children[0] as PanelData).group === 'leftTop') { + dockbox.children = [dockbox.children[0], boxData, ...dockbox.children.slice(1)]; + } else if ((dockbox.children[0] as PanelData).group === 'right') { + dockbox.children = [boxData, ...dockbox.children]; + } + } + } + } else if (dockbox.mode === 'vertical') { + if (dockbox.children.length === 0) { + dockbox.children.push(boxData); + } else { + if (route.position === 'leftBottom') { + dockbox.children.push(boxData); + } else { + for (let i = 0; i < dockbox.children.length; i++) { + if ((dockbox.children[i] as PanelData).group !== 'leftBottom') { + if (route.position === 'leftTop') { + if ('tabs' in dockbox.children[i]) { + // panel + dockbox.children[i] = { + mode: 'horizontal', + children: [boxData, dockbox.children[i] as PanelData] + }; + } else { + // box + (dockbox.children[i] as BoxData).children = [ + boxData, + ...(dockbox.children[i] as BoxData).children + ]; + } + } else if (route.position === 'right') { + if ('tabs' in dockbox.children[i]) { + // panel + dockbox.children[i] = { + mode: 'horizontal', + children: [dockbox.children[i] as PanelData, boxData] + }; + } else { + // box + (dockbox.children[i] as BoxData).children.push(boxData); + } + } else if (route.position === 'centerContent') { + if ('tabs' in dockbox.children[i]) { + // panel + if ((dockbox.children[i] as PanelData).group === 'leftTop') { + dockbox.children[i] = [dockbox.children[i], panelData]; + } else if ((dockbox.children[i] as PanelData).group === 'right') { + dockbox.children[i] = [panelData, dockbox.children[i]]; + } + dockbox.children[i] = { + mode: 'horizontal', + children: [...(dockbox.children[i] as PanelData[])] + }; + } else { + if ((dockbox.children[i].children[0] as PanelData).group === 'leftTop') { + (dockbox.children[i] as BoxData).children = [ + dockbox.children[i].children[0], + panelData, + ...dockbox.children[i].children.slice(1) + ]; + } + } + } + break; + } + } + } + } + } + return layoutData; +}; + +export const findToolbarPositionByTabId = ( + toolbar: DataStudioState['toolbar'], + tabId: string +): ToolbarPosition | undefined => { + if (toolbar.leftTop.allOpenTabs.includes(tabId)) { + return 'leftTop'; + } else if (toolbar.leftBottom.allOpenTabs.includes(tabId)) { + return 'leftBottom'; + } else if (toolbar.right.allOpenTabs.includes(tabId)) { + return 'right'; + } + return undefined; +}; + +export function find( + layout: LayoutData, + id: string, + filter: Filter = Filter.AnyTabPanel +): PanelData | TabData | BoxData | undefined { + let result: PanelData | TabData | BoxData | undefined; + + if (filter & Filter.Docked) { + result = findInBox(layout.dockbox, id, filter); + } + if (result) return result; + + if (filter & Filter.Floated) { + result = findInBox(layout.floatbox, id, filter); + } + if (result) return result; + + if (filter & Filter.Windowed) { + result = findInBox(layout.windowbox, id, filter); + } + if (result) return result; + + if (filter & Filter.Max) { + result = findInBox(layout.maxbox, id, filter); + } + + return result; +} + +function findInBox( + box: BoxData | undefined, + id: string, + filter: Filter +): PanelData | TabData | BoxData | undefined { + let result: PanelData | TabData | BoxData | undefined; + if (filter | Filter.Box && box?.id === id) { + return box; + } + if (!box?.children) { + return undefined; + } + for (let child of box.children) { + if ('children' in child) { + if ((result = findInBox(child, id, filter))) { + break; + } + } else if ('tabs' in child) { + if ((result = findInPanel(child, id, filter))) { + break; + } + } + } + return result; +} + +function findInPanel( + panel: PanelData, + id: string, + filter: Filter +): PanelData | TabData | undefined { + if (panel.id === id && filter & Filter.Panel) { + return panel; + } + if (filter & Filter.Tab) { + for (let tab of panel.tabs) { + if (tab.id === id) { + return panel; + } + } + } + return undefined; +} diff --git a/dinky-web/src/pages/DataStudioNew/DvaFunction.tsx b/dinky-web/src/pages/DataStudioNew/DvaFunction.tsx new file mode 100644 index 0000000000..3890659120 --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/DvaFunction.tsx @@ -0,0 +1,118 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { STUDIO_MODEL, STUDIO_MODEL_ASYNC } from '@/pages/DataStudioNew/model'; +import { Dispatch } from '@umijs/max'; +import { + CenterTabDTO, + HandleLayoutChangeDTO, + ProjectDTO, + SaveToolbarLayoutDTO, + SetLayoutDTO, + UpdateActionDTO +} from '@/pages/DataStudioNew/type'; + +export const mapDispatchToProps = (dispatch: Dispatch) => { + return { + setLayout: (payload: SetLayoutDTO) => { + dispatch({ + ...payload, + type: STUDIO_MODEL.setLayout + }); + }, + handleLayoutChange: (payload: HandleLayoutChangeDTO) => + dispatch({ + ...payload, + type: STUDIO_MODEL.handleLayoutChange + }), + handleToolbarShowDesc: () => + dispatch({ + type: STUDIO_MODEL.handleToolbarShowDesc + }), + handleThemeCompact: () => + dispatch({ + type: STUDIO_MODEL.handleThemeCompact + }), + saveToolbarLayout: (payload: SaveToolbarLayoutDTO) => + dispatch({ + ...payload, + type: STUDIO_MODEL.saveToolbarLayout + }), + addCenterTab: (payload: CenterTabDTO) => + dispatch({ + ...payload, + type: STUDIO_MODEL.addCenterTab + }), + updateCenterTab: (payload: CenterTabDTO) => + dispatch({ + ...payload, + type: STUDIO_MODEL.updateCenterTab + }), + removeCenterTab: (id: string) => + dispatch({ + id, + type: STUDIO_MODEL.removeCenterTab + }), + updateProject: (payload: ProjectDTO) => + dispatch({ + ...payload, + type: STUDIO_MODEL.updateProject + }), + updateAction: (payload: UpdateActionDTO) => + dispatch({ + ...payload, + type: STUDIO_MODEL.updateAction + }), + + // effects + queryFlinkEnv: () => + dispatch({ + type: STUDIO_MODEL_ASYNC.queryFlinkEnv + }), + queryFlinkCluster: () => + dispatch({ + type: STUDIO_MODEL_ASYNC.queryFlinkCluster + }), + queryAlertGroup: () => + dispatch({ + type: STUDIO_MODEL_ASYNC.queryAlertGroup + }), + queryFlinkConfigOptions: () => + dispatch({ + type: STUDIO_MODEL_ASYNC.queryFlinkConfigOptions + }), + queryFlinkUdfOptions: () => + dispatch({ + type: STUDIO_MODEL_ASYNC.queryFlinkUdfOptions + }), + queryDataSourceDataList: () => + dispatch({ + type: STUDIO_MODEL_ASYNC.queryDataSourceDataList + }), + querySuggestions: () => + dispatch({ + type: STUDIO_MODEL_ASYNC.querySuggestions + }), + queryUserData: (params: {}) => + dispatch({ + type: STUDIO_MODEL_ASYNC.queryUserData, + payload: params + }) + }; +}; diff --git a/dinky-web/src/pages/DataStudioNew/FooterContainer/JobRunningModal/index.tsx b/dinky-web/src/pages/DataStudioNew/FooterContainer/JobRunningModal/index.tsx new file mode 100644 index 0000000000..7318fb4674 --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/FooterContainer/JobRunningModal/index.tsx @@ -0,0 +1,72 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { JobRunningMsgType } from '@/pages/DataStudio/model'; +import { StopTwoTone } from '@ant-design/icons'; +import { Col, Modal, Progress, Row, Space } from 'antd'; +import React from 'react'; + +type JobRunningModalProps = { + visible: boolean; + onCancel: () => void; + onOk: () => void; + value: JobRunningMsgType; +}; +const JobRunningModal: React.FC = (props) => { + const { visible, onCancel, onOk, value } = props; + + return ( + + + + + + + + + + + + + ); +}; + +export default JobRunningModal; diff --git a/dinky-web/src/pages/DataStudioNew/FooterContainer/index.tsx b/dinky-web/src/pages/DataStudioNew/FooterContainer/index.tsx new file mode 100644 index 0000000000..8e8775134b --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/FooterContainer/index.tsx @@ -0,0 +1,122 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { l } from '@/utils/intl'; +import { useModel } from '@@/exports'; +import { Button, GlobalToken, Space } from 'antd'; +import React, { useEffect, useState } from 'react'; +import { SseData, Topic } from '@/models/UseWebSocketModel'; + +type ButtonRoute = { + text: React.ReactNode; + title: string; + onClick?: () => void; +}; + +export default (props: { token: GlobalToken }) => { + const { token } = props; + const [memDetailInfo, setMemDetailInfo] = useState('0/0M'); + const { subscribeTopic } = useModel('UseWebSocketModel', (model: any) => ({ + subscribeTopic: model.subscribeTopic + })); + + useEffect(() => { + return subscribeTopic(Topic.JVM_INFO, null, (data: SseData) => { + const respData = data.data['none-params']; + setMemDetailInfo( + Number(respData['heapUsed'] / 1024 / 1024).toFixed(0) + + '/' + + Number(respData['max'] / 1024 / 1024).toFixed(0) + + 'M' + ); + }); + }, []); + + const route: ButtonRoute[] = [ + { + text: ( + +
+ {memDetailInfo} +
+
+ ), + title: l('pages.datastudio.footer.memDetails', '', { + max: memDetailInfo.split('/')[1], + used: memDetailInfo.split('/')[0] + }) + } + ]; + + /** + * render footer right info + */ + const renderFooterRightInfo = (routes: ButtonRoute[]) => { + return routes.map((item, index) => ( + + )); + }; + + return ( + <> +
+ + + + + {renderFooterRightInfo(route)} + +
+ + ); +}; diff --git a/dinky-web/src/pages/DataStudioNew/RightContextMenu.tsx b/dinky-web/src/pages/DataStudioNew/RightContextMenu.tsx new file mode 100644 index 0000000000..4f23be7c6e --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/RightContextMenu.tsx @@ -0,0 +1,107 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { Dropdown } from 'antd'; +import { MenuItemType } from 'antd/es/menu/interface'; +import { MenuInfo } from 'rc-menu/es/interface'; +import React from 'react'; +import { RightMenuItemProps } from '@/pages/DataStudioNew/data.d'; +import { DataStudioState } from '@/pages/DataStudioNew/model'; +import { l } from '@/utils/intl'; + +/** + * 右键菜单组件props | Right-click menu component props + * @param onClick 点击事件 | Click event + * @param items 菜单项 | Menu item + * @param contextMenuPosition 右键菜单位置 | Right-click menu position + * @param open 是否打开 | Whether to open + * @param openChange 打开事件 | Open event + */ +type RightContextMenuProps = { + onClick: (values: MenuInfo) => void; + items: MenuItemType[]; + contextMenuPosition: any; + open: boolean; + openChange: () => void; +}; + +/** + * zh: 右键菜单组件 + * en: Right-click menu component. + * @param props RightContextMenuProps + * @constructor + */ +const RightContextMenu: React.FC = (props) => { + const { onClick, items, openChange, open, contextMenuPosition } = props; + + return ( + + {/*占位*/} +
+ + ); +}; + +export default RightContextMenu; + +/** + * 自定义钩子函数 | Custom hook function. + * 获取右键按钮菜单项 | Get right-click button menu items. + * @param props RightMenuItemProps + */ +export const useRightMenuItem = (props: RightMenuItemProps) => { + const { dataStudioState } = props; + const menuItem: MenuItemType[] = []; + + // 显示工具窗口名称 | Show toolbar window name. + if (dataStudioState.toolbar.showDesc) { + menuItem.push({ + key: 'hideToolbarDesc', + label: l('datastudio.toolbar.rightClick.hideToolbarDesc') + }); + } else { + menuItem.push({ + key: 'showToolbarDesc', + label: l('datastudio.toolbar.rightClick.showToolbarDesc') + }); + } + + // 显示紧凑模式 + if (dataStudioState.theme.compact) { + menuItem.push({ + key: 'closeCompact', + label: l('datastudio.toolbar.rightClick.closeCompact') + }); + } else { + menuItem.push({ + key: 'openCompact', + label: l('datastudio.toolbar.rightClick.openCompact') + }); + } + return menuItem; +}; diff --git a/dinky-web/src/pages/DataStudioNew/Toolbar/Catalog/data.tsx b/dinky-web/src/pages/DataStudioNew/Toolbar/Catalog/data.tsx new file mode 100644 index 0000000000..74b29281e1 --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/Toolbar/Catalog/data.tsx @@ -0,0 +1,37 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { DataSources } from '@/types/RegCenter/data'; +import { DataNode } from 'antd/es/tree'; + +export type StudioMetaStoreParam = { + statement?: string; + fragment?: boolean; + dialect?: string; + envId?: number; + databaseId?: number; + catalog?: string; + database?: string; + table?: string; +}; + +export type TableDataNode = { + isTable: boolean; +} & DataNode & + DataSources.Table; diff --git a/dinky-web/src/pages/DataStudioNew/Toolbar/Catalog/index.tsx b/dinky-web/src/pages/DataStudioNew/Toolbar/Catalog/index.tsx new file mode 100644 index 0000000000..06fa87dfed --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/Toolbar/Catalog/index.tsx @@ -0,0 +1,397 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import SchemaDesc from '@/pages/RegCenter/DataSource/components/DataSourceDetail/RightTagsRouter/SchemaDesc'; +import { DIALECT } from '@/services/constants'; +import { l } from '@/utils/intl'; +import { + AppstoreOutlined, + BlockOutlined, + DownOutlined, + FunctionOutlined, + TableOutlined +} from '@ant-design/icons'; +import { connect } from '@umijs/max'; +import { Button, Col, Empty, Flex, Modal, Row, Select, Spin } from 'antd'; +import { DataNode } from 'antd/es/tree'; +import DirectoryTree from 'antd/es/tree/DirectoryTree'; +import { DefaultOptionType } from 'rc-select/lib/Select'; +import React, { useEffect, useState } from 'react'; +import { getMSCatalogs, getMSColumns, getMSSchemaInfo } from './service'; +import { useAsyncEffect } from 'ahooks'; +import { CenterTab, DataStudioState } from '@/pages/DataStudioNew/model'; +import { mapDispatchToProps } from '@/pages/DataStudioNew/DvaFunction'; +import { isSql } from '@/pages/DataStudioNew/utils'; +import { TableDataNode } from '@/pages/DataStudioNew/Toolbar/Catalog/data'; +import { DataStudioActionType } from '@/pages/DataStudioNew/data.d'; + +type CatalogState = { + envId?: number; + databaseId?: number; + dialect?: string; + fragment?: boolean; + engine?: string; +}; + +const Catalog = (props: { + tabs: CenterTab[]; + activeTab?: string | undefined; + actionType?: DataStudioActionType; + updateAction: any; +}) => { + const { tabs, activeTab, actionType, updateAction } = props; + const [catalogSelect, setCatalogSelect] = useState([]); + const [catalog, setCatalog] = useState('default_catalog'); + const [database, setDatabase] = useState(''); + const [table, setTable] = useState(''); + const [treeData, setTreeData] = useState([]); + const [modalVisit, setModalVisit] = useState(false); + const [row, setRow] = useState(); + const [loading, setLoading] = useState(false); + const [currentState, setCurrentState] = useState(); + + const currentData = tabs.find((tab) => activeTab == tab.id); + + useEffect(() => { + if ( + (currentData && + currentData.tabType === 'task' && + (currentData.params['envId'] !== null || currentData.params['databaseId']) != null) || + currentData?.params?.dialect?.toLowerCase() === DIALECT.FLINKSQLENV + ) { + const { + params: { taskId, fragment } + } = currentData!!; + const dialect = currentData?.params?.dialect?.toLowerCase() as string; + let envId: number | undefined; + let databaseId: number | undefined; + let engine: string | undefined; + if (dialect === DIALECT.FLINKSQLENV) { + envId = taskId; + engine = 'Flink'; + } else if (dialect === DIALECT.FLINK_SQL) { + envId = currentData.params.envId; + engine = 'Flink'; + } else if (isSql(dialect)) { + databaseId = currentData.params.databaseId; + if (!databaseId) { + setCatalogSelect([]); + return; + } + } + envId = envId ?? -1; + setCurrentState({ + envId, + databaseId, + dialect, + fragment, + engine + }); + } else { + setCurrentState(undefined); + setCatalogSelect([]); + } + }, [activeTab, currentData?.params['envId'], currentData?.params['databaseId']]); + useAsyncEffect(async () => { + if (actionType === DataStudioActionType.CATALOG_REFRESH) { + await refreshMetaStoreTables(); + updateAction({ + actionType: null, + params: null + }); + } + }, [actionType]); + + useAsyncEffect(async () => { + await getCatalogs(); + }, [currentState]); + + useAsyncEffect(async () => { + if (table && currentState) { + const { envId, dialect, databaseId } = currentState; + setLoading(true); + const res = await getMSColumns({ + envId, + catalog, + database, + table, + dialect, + databaseId + }); + setLoading(false); + // @ts-ignore + setRow({ ...row, columns: res }); + } + }, [table]); + + const onRefreshTreeData = (catalogAndDatabase: string) => { + if (!currentState) { + return; + } + const { envId, dialect, databaseId, fragment, engine } = currentState; + setTreeData([]); + setLoading(true); + const names = catalogAndDatabase.split('.'); + let catalogTmp = 'default_catalog'; + let databaseTmp = 'default_database'; + if (names.length > 1) { + catalogTmp = names[0]; + databaseTmp = names[1]; + } else if (names.length == 1) { + databaseTmp = names[0]; + } + setCatalog(catalogTmp); + setDatabase(databaseTmp); + let param = { + envId: envId, + fragment: fragment, + dialect: dialect, + catalog: catalogTmp, + database: databaseTmp, + databaseId + }; + const result = getMSSchemaInfo(param); + result + .then((res) => { + setLoading(false); + const tables: any[] = []; + if (res.tables) { + for (let i = 0; i < res.tables.length; i++) { + tables.push(res.tables[i]); + } + } + const treeDataTmp: DataNode[] = []; + const tablesData: TableDataNode[] = []; + for (const t of tables) { + tablesData.push({ + driverType: '', + title: t.name, + key: t.name, + icon: , + isLeaf: true, + isTable: true, + name: t.name, + schema: databaseTmp, + catalog: catalog, + comment: t.comment, + type: t.type, + engine: engine ?? t.engine, + options: t.options, + rows: t.rows, + createTime: t.createTime, + updateTime: t.updateTime + }); + } + treeDataTmp.push({ + title: 'tables', + key: 'tables', + children: tablesData + }); + + const viewsData: DataNode[] = []; + if (res.views) { + for (let i = 0; i < res.views.length; i++) { + viewsData.push({ + title: res.views[i], + key: res.views[i], + icon: , + isLeaf: true + }); + } + } + treeDataTmp.push({ + title: 'views', + key: 'views', + children: viewsData + }); + + const functionsData: DataNode[] = []; + if (res.functions) { + for (let i = 0; i < res.functions.length; i++) { + functionsData.push({ + title: res.functions[i], + key: res.functions[i], + icon: , + isLeaf: true + }); + } + } + treeDataTmp.push({ + title: 'functions', + key: 'functions', + children: functionsData + }); + + const userFunctionsData: DataNode[] = []; + if (res.userFunctions) { + for (let i = 0; i < res.userFunctions.length; i++) { + userFunctionsData.push({ + title: res.userFunctions[i], + key: res.userFunctions[i], + icon: , + isLeaf: true + }); + } + } + treeDataTmp.push({ + title: 'user functions', + key: 'userFunctions', + children: userFunctionsData + }); + + const modulesData: DataNode[] = []; + if (res.modules) { + for (let i = 0; i < res.modules.length; i++) { + modulesData.push({ + title: res.modules[i], + key: res.modules[i], + icon: , + isLeaf: true + }); + } + } + treeDataTmp.push({ + title: 'modules', + key: 'modules', + children: modulesData + }); + + setTreeData(treeDataTmp); + }) + .catch(() => {}); + }; + + const getCatalogs = async () => { + if (!currentState) { + return; + } + const { envId, dialect, databaseId, fragment, engine } = currentState; + if (envId || databaseId) { + setLoading(true); + setTreeData([]); + setCatalogSelect([]); + setDatabase(''); + let param = { + envId: envId, + fragment: fragment, + dialect: dialect, + databaseId + }; + const d = await getMSCatalogs(param); + setCatalogSelect( + (d as any[]).map((item) => { + setLoading(false); + return { + label: item.name, + options: (item.schemas as any[]).map((schema) => { + return { + label: schema.name, + value: item.name + '.' + schema.name + }; + }) + }; + }) + ); + } + }; + + const refreshMetaStoreTables = async () => { + if (database) { + await onRefreshTreeData(catalog + '.' + database); + } else { + await getCatalogs(); + } + }; + + const onChangeMetaStoreCatalogs = (value: string) => { + onRefreshTreeData(value); + }; + + const openColumnInfo = (node: TableDataNode) => { + if (node && node.isLeaf && node.isTable) { + setTable(node.name); + setRow(node); + setModalVisit(true); + } + }; + + const cancelHandle = () => { + setModalVisit(false); + setTable(''); + }; + // ; + return ( + + + + + setSelectedKeys(e.target.value ? [e.target.value] : [])} + onPressEnter={() => handleSearch(selectedKeys as string[], confirm, dataIndex)} + style={{ marginBottom: 8, display: 'block' }} + /> + + + + +
+ ), + filterIcon: (filtered: boolean) => ( + + ), + onFilter: (value, record) => + record[dataIndex] + .toString() + .toLowerCase() + .includes((value as string).toLowerCase()), + onFilterDropdownOpenChange: (visible) => { + if (visible) { + setTimeout(() => searchInput.current?.select(), 100); + } + }, + render: (text) => + searchedColumn === dataIndex ? ( + + ) : ( + text + ) + }); + + const loadData = async () => { + const res = await handleGetOptionWithoutMsg(API_CONSTANTS.GET_LATEST_HISTORY_BY_ID, { + id: taskId + }); + const historyData = res.data; + if (historyData) { + const tableData = await handleGetOption( + API_CONSTANTS.GET_JOB_DATA, + l('global.getdata.tips'), + { + jobId: historyData.id + } + ); + const data = tableData.data; + if (tableData.success && data?.success) { + setData(data); + } else { + setData({}); + } + } + + setLoading(false); + }; + + useAsyncEffect(async () => { + if (!isSql(dialect)) { + setData({}); + setDataList([]); + await loadData(); + } else { + setLoading(false); + } + }, []); + + const getColumns = (columns: string[] = []) => { + return columns?.map((item) => { + return { + title: item, + dataIndex: item, + sorter: (a, b) => a[item] - b[item], + ...getColumnSearchProps(item) + }; + }) as ColumnsType; + }; + + const showDetail = async () => { + setLoading(true); + await loadData(); + setLoading(false); + }; + + const renderFlinkSQLContent = () => { + return ( + <> + {!isSql(dialect) && !data.destroyed ? ( + + ) : undefined} + + ); + }; + const renderDownloadButton = () => { + if (data.columns) { + const _utf = '\uFEFF'; + const csvDataBlob = new Blob([_utf + transformTableDataToCsv(data.columns!, data.rowData!)], { + type: 'text/csv' + }); + const url = URL.createObjectURL(csvDataBlob); + return + ); + }; + + const renderTips = () => { + return ( + <> + {data.truncationFlag ? ( + + + + ) : undefined} + + ); + }; + const handleCloseAva = useCallback(() => setOpenAVA(false), []); + return ( +
+ + {renderTips()} + {renderFlinkSQLContent()} + + {data.columns ? ( + { + return { ...item, key: index }; + })} + options={{ fullScreen: true, density: false }} + search={false} + loading={loading} + toolBarRender={() => [renderDownloadButton(), renderAVA()]} + pagination={{ + showSizeChanger: true + }} + /> + ) : dataList.length > 0 ? ( + + {dataList.map((data, index) => { + return ( + + { + return { ...item, key: index }; + })} + loading={loading} + /> + + ); + })} + + ) : ( + + )} + + Ok + + ]} + > +
+ {avaResult?.insights && + avaResult.insights.map((insight, index) => { + return ( + + ); + })} +
+
+ + ); +}; diff --git a/dinky-web/src/pages/DataStudioNew/Toolbar/Service/TableData/index.tsx b/dinky-web/src/pages/DataStudioNew/Toolbar/Service/TableData/index.tsx new file mode 100644 index 0000000000..dda67e64f4 --- /dev/null +++ b/dinky-web/src/pages/DataStudioNew/Toolbar/Service/TableData/index.tsx @@ -0,0 +1,111 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { postAll } from '@/services/api'; +import { l } from '@/utils/intl'; +import { useModel } from '@@/exports'; +import { Modal, Select, Tabs } from 'antd'; +import TextArea from 'antd/es/input/TextArea'; +import { Tab } from 'rc-tabs/lib/interface.d'; +import React, { memo, useEffect, useState } from 'react'; +import { SseData, Topic } from '@/models/UseWebSocketModel'; +import { DefaultOptionType } from 'rc-select/lib/Select'; + +export async function getPrintTables(statement: string) { + return postAll('api/printTable/getPrintTables', { statement }); +} + +/*--- Clear Console ---*/ +export type PrintTable = { + tableName: string; + fullTableName: string; +}; + +export const DataPage = (props: any) => { + const { style, title } = props; + const [consoleInfo, setConsoleInfo] = useState(''); + const { subscribeTopic } = useModel('UseWebSocketModel', (model: any) => ({ + subscribeTopic: model.subscribeTopic + })); + + useEffect(() => { + if (title) { + return subscribeTopic(Topic.PRINT_TABLE, [title.fullTableName], (data: SseData) => { + if (data?.data[title.fullTableName]) { + setConsoleInfo( + (preConsoleInfo) => preConsoleInfo + '\n' + data.data[title.fullTableName] + ); + } + }); + } + }, []); + + return