diff --git a/electron/main/index.ts b/electron/main/index.ts index f56199e..2b9c2b5 100644 --- a/electron/main/index.ts +++ b/electron/main/index.ts @@ -137,6 +137,7 @@ async function createWindow(projectPath?: string) { trafficLightPosition: { x: 10, y: 10 }, webPreferences: { preload, + webSecurity: false, // Warning: Enable nodeIntegration and disable contextIsolation is not secure in production // Consider using contextBridge.exposeInMainWorld // Read more on https://www.electronjs.org/docs/latest/tutorial/context-isolation diff --git a/index.html b/index.html index 33d5999..5fca809 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - + Behavior3 Editor diff --git a/package-lock.json b/package-lock.json index 2bbaa48..e24764c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { "name": "behavior3editor", - "version": "1.8.1", + "version": "1.8.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "behavior3editor", - "version": "1.8.1", + "version": "1.8.2", "hasInstallScript": true, "license": "MIT", "dependencies": { "@ant-design/icons": "^5.4.0", - "@antv/g6": "^4.8.24", + "@antv/g6": "^5.0.45", "@electron/remote": "github:electron/remote", "@types/electron-localshortcut": "^3.1.3", "@types/node": "^20.14.14", @@ -189,300 +189,348 @@ "version": "0.1.26", "resolved": "https://registry.npmjs.org/@antv/algorithm/-/algorithm-0.1.26.tgz", "integrity": "sha512-DVhcFSQ8YQnMNW34Mk8BSsfc61iC1sAnmcfYoXTAshYHuU50p/6b7x3QYaGctDNKWGvi1ub7mPcSY0bK+aN0qg==", + "license": "MIT", "dependencies": { "@antv/util": "^2.0.13", "tslib": "^2.0.0" } }, - "node_modules/@antv/dom-util": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@antv/dom-util/-/dom-util-2.0.4.tgz", - "integrity": "sha512-2shXUl504fKwt82T3GkuT4Uoc6p9qjCKnJ8gXGLSW4T1W37dqf9AV28aCfoVPHp2BUXpSsB+PAJX2rG/jLHsLQ==", + "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==", + "license": "ISC", "dependencies": { + "csstype": "^3.0.8", "tslib": "^2.0.3" } }, + "node_modules/@antv/component": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@antv/component/-/component-2.1.2.tgz", + "integrity": "sha512-5nC9i9lh5rBHE+pk4TNnerLe4mn5874YHHhvv6EdL618UkgpdKJL0hJu4l7uAYjZ3g46VBK+IYT7md0FYv8f4w==", + "license": "MIT", + "dependencies": { + "@antv/g": "^6.1.11", + "@antv/scale": "^0.4.16", + "@antv/util": "^3.3.10", + "svg-path-parser": "^1.1.0" + } + }, "node_modules/@antv/event-emitter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@antv/event-emitter/-/event-emitter-0.1.3.tgz", - "integrity": "sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg==" + "integrity": "sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg==", + "license": "MIT" }, - "node_modules/@antv/g-base": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/@antv/g-base/-/g-base-0.5.16.tgz", - "integrity": "sha512-jP06wggTubDPHXoKwFg3/f1lyxBX9ywwN3E/HG74Nd7DXqOXQis8tsIWW+O6dS/h9vyuXLd1/wDWkMMm3ZzXdg==", + "node_modules/@antv/g": { + "version": "6.1.21", + "resolved": "https://registry.npmjs.org/@antv/g/-/g-6.1.21.tgz", + "integrity": "sha512-3cWmsY1bYwDmVzsFmBeqN1tWVt+3JaWL6Uu54C1oF7qn1VXXa3V3KuXGEYCxuei8E8BMriN3D7fZosY5d+MQqw==", + "license": "MIT", "dependencies": { - "@antv/event-emitter": "^0.1.1", - "@antv/g-math": "^0.1.9", - "@antv/matrix-util": "^3.1.0-beta.1", - "@antv/path-util": "~2.0.5", - "@antv/util": "~2.0.13", - "@types/d3-timer": "^2.0.0", - "d3-ease": "^1.0.5", - "d3-interpolate": "^3.0.1", - "d3-timer": "^1.0.9", - "detect-browser": "^5.1.0", - "tslib": "^2.0.3" + "@antv/g-camera-api": "2.0.35", + "@antv/g-dom-mutation-observer-api": "2.0.32", + "@antv/g-lite": "2.2.16", + "@antv/g-web-animations-api": "2.1.21", + "@babel/runtime": "^7.25.6" + } + }, + "node_modules/@antv/g-camera-api": { + "version": "2.0.35", + "resolved": "https://registry.npmjs.org/@antv/g-camera-api/-/g-camera-api-2.0.35.tgz", + "integrity": "sha512-z4WKmB6yN2fFi9EnapjuHbFVF0ilhMrWo2eZCxYXcb0dV5MiflU/WZi/bjs4WqVMJPNtYKx+yZhTyROncEiglw==", + "license": "MIT", + "dependencies": { + "@antv/g-lite": "2.2.16", + "@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": "0.5.17", - "resolved": "https://registry.npmjs.org/@antv/g-canvas/-/g-canvas-0.5.17.tgz", - "integrity": "sha512-sXYJMWTOlb/Ycb6sTKu00LcJqInXJY4t99+kSM40u2OfqrXYmaXDjHR7D2V0roMkbK/QWiWS9UnEidCR1VtMOA==", + "version": "2.0.40", + "resolved": "https://registry.npmjs.org/@antv/g-canvas/-/g-canvas-2.0.40.tgz", + "integrity": "sha512-Starh5g+ydOFKzfK/GpwnLwz+o6UZNHkyWBXdHx2ax/AJWHVXwjyCadt/6kkc2non0ts2ow/hpJaW7X3dgdDxQ==", + "license": "MIT", "dependencies": { - "@antv/g-base": "^0.5.12", - "@antv/g-math": "^0.1.9", - "@antv/matrix-util": "^3.1.0-beta.1", - "@antv/path-util": "~2.0.5", - "@antv/util": "~2.0.0", - "gl-matrix": "^3.0.0", - "tslib": "^2.0.3" + "@antv/g-lite": "2.2.16", + "@antv/g-plugin-canvas-path-generator": "2.1.16", + "@antv/g-plugin-canvas-picker": "2.1.19", + "@antv/g-plugin-canvas-renderer": "2.2.19", + "@antv/g-plugin-dom-interaction": "2.1.21", + "@antv/g-plugin-html-renderer": "2.1.21", + "@antv/g-plugin-image-loader": "2.1.19", + "@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.32", + "resolved": "https://registry.npmjs.org/@antv/g-dom-mutation-observer-api/-/g-dom-mutation-observer-api-2.0.32.tgz", + "integrity": "sha512-50r7en1+doUtR9uXmFJk8YtENQ/+DFcj2g3a4XKu9xp58kmF2qBgtdst9n1deqGcL5s0ufX/Ck9rUhtHwka+Ow==", + "license": "MIT", + "dependencies": { + "@antv/g-lite": "2.2.16", + "@babel/runtime": "^7.25.6" + } + }, + "node_modules/@antv/g-lite": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/@antv/g-lite/-/g-lite-2.2.16.tgz", + "integrity": "sha512-473r6S5srkxUiUxI3ZkrM74HMkgyO9+2HR1xtJ75yDOOuT8F6osdXDgy0Or5cWqOlsVjiN3L3DaPnQLHlUGO5A==", + "license": "MIT", + "dependencies": { + "@antv/g-math": "3.0.0", + "@antv/util": "^3.3.5", + "@antv/vendor": "^1.0.3", + "@babel/runtime": "^7.25.6", + "eventemitter3": "^5.0.1", + "gl-matrix": "^3.4.3", + "rbush": "^3.0.1", + "tslib": "^2.5.3" } }, "node_modules/@antv/g-math": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@antv/g-math/-/g-math-0.1.9.tgz", - "integrity": "sha512-KHMSfPfZ5XHM1PZnG42Q2gxXfOitYveNTA7L61lR6mhZ8Y/aExsYmHqaKBsSarU0z+6WLrl9C07PQJZaw0uljQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@antv/g-math/-/g-math-3.0.0.tgz", + "integrity": "sha512-AkmiNIEL1vgqTPeGY2wtsMdBBqKFwF7SKSgs+D1iOS/rqYMsXdhp/HvtuQ5tx/HdawE/ZzTiicIYopc520ADZw==", + "license": "MIT", "dependencies": { - "@antv/util": "~2.0.0", - "gl-matrix": "^3.0.0" + "@antv/util": "^3.3.5", + "gl-matrix": "^3.4.3", + "tslib": "^2.5.3" } }, - "node_modules/@antv/g-svg": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@antv/g-svg/-/g-svg-0.5.7.tgz", - "integrity": "sha512-jUbWoPgr4YNsOat2Y/rGAouNQYGpw4R0cvlN0YafwOyacFFYy2zC8RslNd6KkPhhR3XHNSqJOuCYZj/YmLUwYw==", + "node_modules/@antv/g-plugin-canvas-path-generator": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-canvas-path-generator/-/g-plugin-canvas-path-generator-2.1.16.tgz", + "integrity": "sha512-E3/HUzWRv1/5QyKHLcXIgFJff0JBxDHz4NfHwYp6IOy5P/A1mbISsUjwafSl8JIVqx0J81CzgqpwU7pWHeXlaQ==", + "license": "MIT", "dependencies": { - "@antv/g-base": "^0.5.12", - "@antv/g-math": "^0.1.9", - "@antv/util": "~2.0.0", - "detect-browser": "^5.0.0", - "tslib": "^2.0.3" + "@antv/g-lite": "2.2.16", + "@antv/g-math": "3.0.0", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "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-canvas-picker": { + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-canvas-picker/-/g-plugin-canvas-picker-2.1.19.tgz", + "integrity": "sha512-69G0m2v09FimmYSU+hO1wjft1FqM467Cf1jDpjBz6Y3caQ98Hrqpz/7Prko1hMOALCo92MDo65yTTnz/LhBiQA==", + "license": "MIT", "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.2.16", + "@antv/g-math": "3.0.0", + "@antv/g-plugin-canvas-path-generator": "2.1.16", + "@antv/g-plugin-canvas-renderer": "2.2.19", + "@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": { - "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-canvas-renderer": { + "version": "2.2.19", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-canvas-renderer/-/g-plugin-canvas-renderer-2.2.19.tgz", + "integrity": "sha512-3Ac0pjU0NAafu0rwTnthwWV/CV5kV9CpTf96v1CCXX0P3iPWtW72SatQNOt/v2aQ2NjYB34YuwYy9i0U1oS8rg==", + "license": "MIT", "dependencies": { - "eventemitter3": "^4.0.0", - "gl-matrix": "^3.1.0", - "lodash": "^4.17.15", - "probe.gl": "^3.1.1" + "@antv/g-lite": "2.2.16", + "@antv/g-math": "3.0.0", + "@antv/g-plugin-canvas-path-generator": "2.1.16", + "@antv/g-plugin-image-loader": "2.1.19", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "gl-matrix": "^3.4.3", + "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-plugin-dom-interaction": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-dom-interaction/-/g-plugin-dom-interaction-2.1.21.tgz", + "integrity": "sha512-Vm8yeNjZ2aNgNH3LwDRExRChpuVv0Wv2zOblUGy5rgyRIh2Fkm8R89pKLmd3GlLo4AF1ZqAGWHiY2WOeMHEEIA==", + "license": "MIT", "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.2.16", + "@babel/runtime": "^7.25.6", + "tslib": "^2.5.3" + } + }, + "node_modules/@antv/g-plugin-dragndrop": { + "version": "2.0.32", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-dragndrop/-/g-plugin-dragndrop-2.0.32.tgz", + "integrity": "sha512-0Y9S/jx6Z7O3hEQhqrXGWNIcV1dBoRpokSP9gIMqTxOjCLzVUFYv8pFoI+Uyeow6PAWe+gdBQu+EJgVi223lJQ==", + "license": "MIT", + "dependencies": { + "@antv/g-lite": "2.2.16", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "tslib": "^2.5.3" + } + }, + "node_modules/@antv/g-plugin-html-renderer": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-html-renderer/-/g-plugin-html-renderer-2.1.21.tgz", + "integrity": "sha512-1PR9rYt4BgSx8LFnVPF+cPlcBYKfI7iWK/xPipEa3jZ4j/xftELQ5EEyZpfPnrTqu2PtKeMurx7oaM/HPsgaiQ==", + "license": "MIT", + "dependencies": { + "@antv/g-lite": "2.2.16", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "gl-matrix": "^3.4.3", + "tslib": "^2.5.3" + } + }, + "node_modules/@antv/g-plugin-image-loader": { + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-image-loader/-/g-plugin-image-loader-2.1.19.tgz", + "integrity": "sha512-ZjNs08RkzdDMLlEWGabJG1Lu1Q71afStSlhcIRhrDOLB4tH0UdYlq/f72tlzJ6KjtLnril/xQH3D7znPlfAoig==", + "license": "MIT", + "dependencies": { + "@antv/g-lite": "2.2.16", + "@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.1.21", + "resolved": "https://registry.npmjs.org/@antv/g-web-animations-api/-/g-web-animations-api-2.1.21.tgz", + "integrity": "sha512-EkIjeEH3QzHkDJn3sz1Mk83PqVQXGe5440mJV42QmnxuFuFcxGVJMi9vS8Te7kCUJl4eSb/eqnNi5AWfDMWm+w==", + "license": "MIT", + "dependencies": { + "@antv/g-lite": "2.2.16", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "tslib": "^2.5.3" } }, "node_modules/@antv/g6": { - "version": "4.8.24", - "resolved": "https://registry.npmjs.org/@antv/g6/-/g6-4.8.24.tgz", - "integrity": "sha512-bgj7sZ+z45JmOngIpYpwmSIg7SboMLZBoAlX0+RoAETZB3/xvZO0MXT3lCSyAhIgm5Sb68pekKi7OStuo04NyQ==", - "dependencies": { - "@antv/g6-pc": "0.8.24" - } - }, - "node_modules/@antv/g6-core": { - "version": "0.8.24", - "resolved": "https://registry.npmjs.org/@antv/g6-core/-/g6-core-0.8.24.tgz", - "integrity": "sha512-rgI3dArAD8uoSz2+skS4ctN4x/Of33ivTIKaEYYvClxgkLZWVz9zvocy+5AWcVPBHZsAXkZcdh9zndIoWY/33A==", + "version": "5.0.45", + "resolved": "https://registry.npmjs.org/@antv/g6/-/g6-5.0.45.tgz", + "integrity": "sha512-gwJnan63G+UOyoGAFRafEJjcFHVDt2MPM7xpryJd3Pg0uAFTBQSAriqfNecNj7Ao9vDwfkcrfP5sN87yksMSfA==", + "license": "MIT", "dependencies": { "@antv/algorithm": "^0.1.26", - "@antv/dom-util": "^2.0.1", - "@antv/event-emitter": "~0.1.0", - "@antv/g-base": "^0.5.1", - "@antv/g-math": "^0.1.1", - "@antv/matrix-util": "^3.1.0-beta.3", - "@antv/path-util": "^2.0.3", - "@antv/util": "~2.0.5", - "ml-matrix": "^6.5.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@antv/g6-element": { - "version": "0.8.24", - "resolved": "https://registry.npmjs.org/@antv/g6-element/-/g6-element-0.8.24.tgz", - "integrity": "sha512-61FXkt9LY+6EOUtSam1iFTOW2AM59sPVcV1BuPj4dXiD0dluLE+R7d8B/94g1tKDw9tsjhfUQGC7hTXscJRJFw==", - "dependencies": { - "@antv/g-base": "^0.5.1", - "@antv/g6-core": "0.8.24", - "@antv/util": "~2.0.5", - "tslib": "^2.6.2" - }, - "peerDependencies": { - "@antv/g6": "4.8.24" - } - }, - "node_modules/@antv/g6-pc": { - "version": "0.8.24", - "resolved": "https://registry.npmjs.org/@antv/g6-pc/-/g6-pc-0.8.24.tgz", - "integrity": "sha512-nf0y1lrp8J5DotqRryXd2S/J30COW8spVcLF9gUqywGqQAHfE00Ywkqr+PZBnsfCZXsXCi9o0+CE9NrkWs4SBQ==", - "dependencies": { - "@ant-design/colors": "^4.0.5", - "@antv/algorithm": "^0.1.26", - "@antv/dom-util": "^2.0.1", - "@antv/event-emitter": "~0.1.0", - "@antv/g-base": "^0.5.1", - "@antv/g-canvas": "^0.5.2", - "@antv/g-math": "^0.1.1", - "@antv/g-svg": "^0.5.1", - "@antv/g6-core": "0.8.24", - "@antv/g6-element": "0.8.24", - "@antv/g6-plugin": "0.8.24", - "@antv/hierarchy": "^0.6.10", - "@antv/layout": "^0.3.0", - "@antv/matrix-util": "^3.1.0-beta.3", - "@antv/path-util": "^2.0.3", - "@antv/util": "~2.0.5", - "color": "^3.1.3", - "d3-force": "^2.0.1", - "dagre": "^0.8.5", - "insert-css": "^2.0.0", - "ml-matrix": "^6.5.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@antv/g6-pc/node_modules/@ant-design/colors": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-4.0.5.tgz", - "integrity": "sha512-3mnuX2prnWOWvpFTS2WH2LoouWlOgtnIpc6IarWN6GOzzLF8dW/U8UctuvIPhoboETehZfJ61XP+CGakBEPJ3Q==", - "dependencies": { - "tinycolor2": "^1.4.1" - } - }, - "node_modules/@antv/g6-plugin": { - "version": "0.8.24", - "resolved": "https://registry.npmjs.org/@antv/g6-plugin/-/g6-plugin-0.8.24.tgz", - "integrity": "sha512-ZIOnwLTC7SM2bFiJZ3vYFWnkyOCWKqnU96i/fBh1qAoY5slDS3hatenZWEXUtOcqaKw1h+5A5f72MRXqBBVn0g==", - "dependencies": { - "@antv/dom-util": "^2.0.2", - "@antv/g-base": "^0.5.1", - "@antv/g-canvas": "^0.5.2", - "@antv/g-svg": "^0.5.2", - "@antv/g6-core": "0.8.24", - "@antv/g6-element": "0.8.24", - "@antv/matrix-util": "^3.1.0-beta.3", - "@antv/path-util": "^2.0.3", - "@antv/scale": "^0.3.4", - "@antv/util": "^2.0.9", - "insert-css": "^2.0.0" - }, - "peerDependencies": { - "@antv/g6": "4.8.24" + "@antv/component": "^2.1.2", + "@antv/event-emitter": "^0.1.3", + "@antv/g": "^6.1.14", + "@antv/g-canvas": "^2.0.32", + "@antv/g-plugin-dragndrop": "^2.0.25", + "@antv/graphlib": "^2.0.4", + "@antv/hierarchy": "^0.6.14", + "@antv/layout": "1.2.14-beta.9", + "@antv/util": "^3.3.10", + "bubblesets-js": "^2.3.4" } }, "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==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@antv/graphlib/-/graphlib-2.0.4.tgz", + "integrity": "sha512-zc/5oQlsdk42Z0ib1mGklwzhJ5vczLFiPa1v7DgJkTbgJ2YxRh9xdarf86zI49sKVJmgbweRpJs7Nu5bIiwv4w==", + "license": "MIT", + "dependencies": { + "@antv/event-emitter": "^0.1.3" + } }, "node_modules/@antv/hierarchy": { - "version": "0.6.11", - "resolved": "https://registry.npmjs.org/@antv/hierarchy/-/hierarchy-0.6.11.tgz", - "integrity": "sha512-RJVhEMCuu4vj+Dt25lXIiNdd7jaqm/fqWGYikiELha4S5tnzdJoTUaUvvpfWlxLx4B0RsS9XRwBs1bOKN71TKg==", - "dependencies": { - "@antv/util": "^2.0.7" - } + "version": "0.6.14", + "resolved": "https://registry.npmjs.org/@antv/hierarchy/-/hierarchy-0.6.14.tgz", + "integrity": "sha512-V3uknf7bhynOqQDw2sg+9r9DwZ9pc6k/EcqyTFdfXB1+ydr7urisP0MipIuimucvQKN+Qkd+d6w601r1UIroqQ==", + "license": "MIT" }, "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==", + "version": "1.2.14-beta.9", + "resolved": "https://registry.npmjs.org/@antv/layout/-/layout-1.2.14-beta.9.tgz", + "integrity": "sha512-wPlwBFMtq2lWZFc89/7Lzb8fjHnyKVZZ9zBb2h+zZIP0YWmVmHRE8+dqCiPKOyOGUXEdDtn813f1g107dCHZlg==", + "license": "MIT", "dependencies": { - "@antv/g-webgpu": "0.7.2", - "@antv/graphlib": "^1.0.0", + "@antv/event-emitter": "^0.1.3", + "@antv/graphlib": "^2.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" + "@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/layout/node_modules/@antv/util": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/@antv/util/-/util-3.3.7.tgz", - "integrity": "sha512-qqPg7rIPCsJyl7N56jAC25v/99mJ3ApVkgBsGijhiWrEeKvzXBPk1r5P77Pm9nCljpnn+hH8Z3t5AivbEoTJMg==", + "node_modules/@antv/scale": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/@antv/scale/-/scale-0.4.16.tgz", + "integrity": "sha512-5wg/zB5kXHxpTV5OYwJD3ja6R8yTiqIOkjOhmpEJiowkzRlbEC/BOyMvNUq5fqFIHnMCE9woO7+c3zxEQCKPjw==", + "license": "MIT", + "dependencies": { + "@antv/util": "^3.3.7", + "color-string": "^1.5.5", + "fecha": "^4.2.1" + } + }, + "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==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "gl-matrix": "^3.3.0", "tslib": "^2.3.1" } }, - "node_modules/@antv/layout/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==", + "node_modules/@antv/vendor": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@antv/vendor/-/vendor-1.0.10.tgz", + "integrity": "sha512-/llNfo0gyUAi+ZY3TAtkNPS66eXTMbNdaKd8qllyJUuXnpRHYd/LGU69ix6olGJEFBi61hO4f9eTY0zzNOlFlw==", + "license": "MIT AND ISC", "dependencies": { - "ml-array-rescale": "^1.3.1" - } - }, - "node_modules/@antv/matrix-util": { - "version": "3.1.0-beta.3", - "resolved": "https://registry.npmjs.org/@antv/matrix-util/-/matrix-util-3.1.0-beta.3.tgz", - "integrity": "sha512-W2R6Za3A6CmG51Y/4jZUM/tFgYSq7vTqJL1VD9dKrvwxS4sE0ZcXINtkp55CdyBwJ6Cwm8pfoRpnD4FnHahN0A==", - "dependencies": { - "@antv/util": "^2.0.9", - "gl-matrix": "^3.4.3", - "tslib": "^2.0.3" - } - }, - "node_modules/@antv/path-util": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/@antv/path-util/-/path-util-2.0.15.tgz", - "integrity": "sha512-R2VLZ5C8PLPtr3VciNyxtjKqJ0XlANzpFb5sE9GE61UQqSRuSVSzIakMxjEPrpqbgc+s+y8i+fmc89Snu7qbNw==", - "dependencies": { - "@antv/matrix-util": "^3.0.4", - "@antv/util": "^2.0.9", - "tslib": "^2.0.3" - } - }, - "node_modules/@antv/path-util/node_modules/@antv/matrix-util": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@antv/matrix-util/-/matrix-util-3.0.4.tgz", - "integrity": "sha512-BAPyu6dUliHcQ7fm9hZSGKqkwcjEDVLVAstlHULLvcMZvANHeLXgHEgV7JqcAV/GIhIz8aZChIlzM1ZboiXpYQ==", - "dependencies": { - "@antv/util": "^2.0.9", - "gl-matrix": "^3.3.0", - "tslib": "^2.0.3" - } - }, - "node_modules/@antv/scale": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@antv/scale/-/scale-0.3.18.tgz", - "integrity": "sha512-GHwE6Lo7S/Q5fgaLPaCsW+CH+3zl4aXpnN1skOiEY0Ue9/u+s2EySv6aDXYkAqs//i0uilMDD/0/4n8caX9U9w==", - "dependencies": { - "@antv/util": "~2.0.3", - "fecha": "~4.2.0", - "tslib": "^2.0.0" - } - }, - "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" + "@types/d3-array": "^3.2.1", + "@types/d3-color": "^3.1.3", + "@types/d3-dispatch": "^3.0.6", + "@types/d3-dsv": "^3.0.7", + "@types/d3-fetch": "^3.0.7", + "@types/d3-force": "^3.0.10", + "@types/d3-format": "^3.0.4", + "@types/d3-geo": "^3.1.0", + "@types/d3-hierarchy": "^3.1.7", + "@types/d3-interpolate": "^3.0.4", + "@types/d3-path": "^3.1.0", + "@types/d3-quadtree": "^3.0.6", + "@types/d3-random": "^3.0.3", + "@types/d3-scale": "^4.0.9", + "@types/d3-scale-chromatic": "^3.1.0", + "@types/d3-shape": "^3.1.7", + "@types/d3-time": "^3.0.4", + "@types/d3-timer": "^3.0.2", + "d3-array": "^3.2.4", + "d3-color": "^3.1.0", + "d3-dispatch": "^3.0.1", + "d3-dsv": "^3.0.1", + "d3-fetch": "^3.0.1", + "d3-force": "^3.0.0", + "d3-force-3d": "^3.0.5", + "d3-format": "^3.1.0", + "d3-geo": "^3.1.1", + "d3-geo-projection": "^4.0.0", + "d3-hierarchy": "^3.1.2", + "d3-interpolate": "^3.0.1", + "d3-path": "^3.1.0", + "d3-quadtree": "^3.0.1", + "d3-random": "^3.0.1", + "d3-regression": "^1.3.10", + "d3-scale": "^4.0.2", + "d3-scale-chromatic": "^3.1.0", + "d3-shape": "^3.2.0", + "d3-time": "^3.1.0", + "d3-timer": "^3.0.1" } }, "node_modules/@babel/code-frame": { @@ -1715,7 +1763,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1729,7 +1776,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -1738,7 +1784,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -1747,8 +1792,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "optional": true, "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", @@ -1759,14 +1802,12 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1845,6 +1886,15 @@ "node": ">= 10.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==", + "license": "MIT", + "peerDependencies": { + "workerize-loader": "*" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1906,31 +1956,6 @@ "node": ">=18" } }, - "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/@rc-component/async-validator": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@rc-component/async-validator/-/async-validator-5.0.4.tgz", @@ -2443,10 +2468,128 @@ "@types/responselike": "^1.0.0" } }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", + "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==", + "license": "MIT" + }, + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", + "license": "MIT" + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "license": "MIT", + "dependencies": { + "@types/d3-dsv": "*" + } + }, + "node_modules/@types/d3-force": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", + "license": "MIT" + }, + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", + "license": "MIT" + }, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", + "license": "MIT" + }, + "node_modules/@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", + "license": "MIT" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, "node_modules/@types/d3-timer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-2.0.3.tgz", - "integrity": "sha512-jhAJzaanK5LqyLQ50jJNIrB8fjL9gwWZTgYjevPvkDLMU+kTAZkYsobI59nYoeSrH1PucuyJEi247Pb90t6XUg==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" }, "node_modules/@types/debug": { "version": "4.1.12", @@ -2468,12 +2611,22 @@ "version": "8.56.11", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz", "integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==", - "dev": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", @@ -2497,6 +2650,12 @@ "@types/node": "*" } }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, "node_modules/@types/hast": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", @@ -2513,8 +2672,7 @@ "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "node_modules/@types/keyv": { "version": "3.1.4", @@ -2957,6 +3115,167 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, "node_modules/@xmldom/xmldom": { "version": "0.8.10", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", @@ -2966,6 +3285,20 @@ "node": ">=10.0.0" } }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0", + "peer": true + }, "node_modules/7zip-bin": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", @@ -2973,10 +3306,10 @@ "dev": true }, "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -3043,6 +3376,48 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT", + "peer": true + }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -3088,12 +3463,6 @@ "node": ">=7.0.0" } }, - "node_modules/ansi-styles/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/antd": { "version": "5.20.0", "resolved": "https://registry.npmjs.org/antd/-/antd-5.20.0.tgz", @@ -3528,6 +3897,16 @@ } ] }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -3599,7 +3978,6 @@ "version": "4.24.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "dev": true, "funding": [ { "type": "opencollective", @@ -3628,6 +4006,12 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "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==", + "license": "MIT" + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -3675,8 +4059,7 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/builder-util": { "version": "24.13.1", @@ -3821,7 +4204,6 @@ "version": "1.0.30001701", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001701.tgz", "integrity": "sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==", - "dev": true, "funding": [ { "type": "opencollective", @@ -3983,6 +4365,16 @@ "node": ">=10" } }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/chromium-pickle-js": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", @@ -4051,32 +4443,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, "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==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/color-string": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -4094,6 +4471,12 @@ "node": ">= 0.8" } }, + "node_modules/comlink": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.4.2.tgz", + "integrity": "sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==", + "license": "Apache-2.0" + }, "node_modules/comma-separated-tokens": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", @@ -4107,8 +4490,6 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "optional": true, "peer": true }, "node_modules/compare-version": { @@ -4343,38 +4724,183 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "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==", + "license": "MIT" + }, "node_modules/d3-color": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", "engines": { "node": ">=12" } }, "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==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } }, - "node_modules/d3-ease": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", - "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "license": "ISC", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "license": "ISC", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } }, "node_modules/d3-force": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-2.1.1.tgz", - "integrity": "sha512-nAuHEzBqMvpFVMf9OX75d00OxvOXdxY+xECIXjW6Gv8BRrXu6gAWbv/9XKrvfJ5i5DCokDW7RYE50LRoK092ew==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "license": "ISC", "dependencies": { - "d3-dispatch": "1 - 2", - "d3-quadtree": "1 - 2", - "d3-timer": "1 - 2" + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "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==", + "license": "MIT", + "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", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo-projection": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-4.0.0.tgz", + "integrity": "sha512-p0bK60CEzph1iqmnxut7d/1kyTmm3UWtPlwdkM31AU+LW+BXazd5zJdoCn7VFxNCHXRngPHRnsNn5uGjLRGndg==", + "license": "ISC", + "dependencies": { + "commander": "7", + "d3-array": "1 - 3", + "d3-geo": "1.12.0 - 3" + }, + "bin": { + "geo2svg": "bin/geo2svg.js", + "geograticule": "bin/geograticule.js", + "geoproject": "bin/geoproject.js", + "geoquantize": "bin/geoquantize.js", + "geostitch": "bin/geostitch.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo-projection/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "license": "ISC", + "engines": { + "node": ">=12" } }, "node_modules/d3-interpolate": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3" }, @@ -4382,36 +4908,129 @@ "node": ">=12" } }, + "node_modules/d3-octree": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-octree/-/d3-octree-1.1.0.tgz", + "integrity": "sha512-F8gPlqpP+HwRPMO/8uOu5wjH110+6q4cgJvgJT6vlpy3BEaDIKlTZrgHKZSp/i1InRpVfh4puY/kvL6MxK930A==", + "license": "MIT" + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/d3-quadtree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-2.0.0.tgz", - "integrity": "sha512-b0Ed2t1UUalJpc3qXzKi+cPGxeXRr4KU9YSlocN74aTzp6R/Ud43t79yLLqxHRWZfsvWXmbDWPpoENK1K539xw==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-regression": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/d3-regression/-/d3-regression-1.3.10.tgz", + "integrity": "sha512-PF8GWEL70cHHWpx2jUQXc68r1pyPHIA+St16muk/XRokETzlegj5LriNKg7o4LR0TySug4nHYPJNNRz/W+/Niw==", + "license": "BSD-3-Clause" + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } }, "node_modules/d3-timer": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", - "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } }, "node_modules/dagre": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", + "license": "MIT", "dependencies": { "graphlib": "^2.1.8", "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/dayjs": { "version": "1.11.12", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", @@ -4546,11 +5165,6 @@ "node": ">=6" } }, - "node_modules/detect-browser": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz", - "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==" - }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -4970,7 +5584,6 @@ "version": "1.5.109", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.109.tgz", "integrity": "sha512-AidaH9JETVRr9DIPGfp1kAarm/W6hRJTPuCnkF+2MqhF4KaAgRIcBc8nvjk+YMXZhwfISof/7WG29eS4iGxQLQ==", - "dev": true, "license": "ISC" }, "node_modules/electron-updater": { @@ -5027,6 +5640,16 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -5035,6 +5658,20 @@ "once": "^1.4.0" } }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -5088,7 +5725,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", - "dev": true, "license": "MIT" }, "node_modules/es6-error": { @@ -5142,7 +5778,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5224,6 +5859,20 @@ "eslint": ">=7" } }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", @@ -5400,7 +6049,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -5412,7 +6060,16 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "peer": true, "engines": { "node": ">=4.0" } @@ -5446,9 +6103,20 @@ } }, "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.x" + } }, "node_modules/expect-type": { "version": "1.2.0", @@ -5539,6 +6207,23 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -5559,7 +6244,8 @@ "node_modules/fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" }, "node_modules/file-entry-cache": { "version": "6.0.1", @@ -5817,12 +6503,8 @@ "node_modules/gl-matrix": { "version": "3.4.3", "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==" + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==", + "license": "MIT" }, "node_modules/glob": { "version": "7.2.3", @@ -5853,6 +6535,13 @@ "node": ">=10.13.0" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause", + "peer": true + }, "node_modules/global-agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", @@ -5952,9 +6641,10 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", @@ -5966,6 +6656,7 @@ "version": "2.1.8", "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", + "license": "MIT", "dependencies": { "lodash": "^4.17.15" } @@ -5974,7 +6665,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -6195,7 +6885,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -6318,10 +7007,14 @@ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz", "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==" }, - "node_modules/insert-css": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/insert-css/-/insert-css-2.0.0.tgz", - "integrity": "sha512-xGq5ISgcUP5cvGkS2MMFLtPDBtrtQPSFfC6gA6U8wHKqfjTIMZLZNxOItQnoSjdOzlXOLU/yD32RKC4SvjNbtA==" + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } }, "node_modules/intersection-observer": { "version": "0.12.2", @@ -6353,7 +7046,14 @@ "node_modules/is-any-array": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-any-array/-/is-any-array-2.0.1.tgz", - "integrity": "sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==" + "integrity": "sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==", + "license": "MIT" + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" }, "node_modules/is-binary-path": { "version": "2.1.0", @@ -6541,6 +7241,21 @@ "node": ">=10" } }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/jiti": { "version": "1.21.7", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", @@ -6590,6 +7305,13 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT", + "peer": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -6620,7 +7342,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -6780,6 +7501,31 @@ "dev": true, "license": "MIT" }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "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==", + "license": "MIT", + "peer": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", @@ -7081,6 +7827,13 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT", + "peer": true + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -7541,7 +8294,6 @@ "version": "1.52.0", "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -7550,7 +8302,6 @@ "version": "2.1.35", "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -7625,6 +8376,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/ml-array-max/-/ml-array-max-1.2.4.tgz", "integrity": "sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==", + "license": "MIT", "dependencies": { "is-any-array": "^2.0.0" } @@ -7633,6 +8385,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/ml-array-min/-/ml-array-min-1.2.3.tgz", "integrity": "sha512-VcZ5f3VZ1iihtrGvgfh/q0XlMobG6GQ8FsNyQXD3T+IlstDv85g8kfV0xUG1QPRO/t21aukaJowDzMTc7j5V6Q==", + "license": "MIT", "dependencies": { "is-any-array": "^2.0.0" } @@ -7641,6 +8394,7 @@ "version": "1.3.7", "resolved": "https://registry.npmjs.org/ml-array-rescale/-/ml-array-rescale-1.3.7.tgz", "integrity": "sha512-48NGChTouvEo9KBctDfHC3udWnQKNKEWN0ziELvY3KG25GR5cA8K8wNVzracsqSW1QEkAXjTNx+ycgAv06/1mQ==", + "license": "MIT", "dependencies": { "is-any-array": "^2.0.0", "ml-array-max": "^1.2.4", @@ -7648,9 +8402,10 @@ } }, "node_modules/ml-matrix": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/ml-matrix/-/ml-matrix-6.11.0.tgz", - "integrity": "sha512-7jr9NmFRkaUxbKslfRu3aZOjJd2LkSitCGv+QH9PF0eJoEG7jIpjXra1Vw8/kgao8+kHCSsJONG6vfWmXQ+/Eg==", + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/ml-matrix/-/ml-matrix-6.12.1.tgz", + "integrity": "sha512-TJ+8eOFdp+INvzR4zAuwBQJznDUfktMtOB6g/hUcGh3rcyjxbz4Te57Pgri8Q9bhSQ7Zys4IYOGhFdnlgeB6Lw==", + "license": "MIT", "dependencies": { "is-any-array": "^2.0.1", "ml-array-rescale": "^1.3.7" @@ -7717,6 +8472,13 @@ "node": ">= 4.4.x" } }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT", + "peer": true + }, "node_modules/node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", @@ -7728,7 +8490,6 @@ "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true, "license": "MIT" }, "node_modules/normalize-path": { @@ -7981,7 +8742,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -8237,17 +8997,6 @@ "node": ">= 0.8.0" } }, - "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/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -8342,6 +9091,31 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "license": "ISC" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rbush": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + "license": "MIT", + "dependencies": { + "quickselect": "^2.0.0" + } + }, "node_modules/rc-cascader": { "version": "3.27.0", "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.27.0.tgz", @@ -9122,11 +9896,6 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, - "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/remark-parse": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", @@ -9167,6 +9936,16 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", @@ -9329,11 +10108,16 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -9353,8 +10137,7 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sanitize-filename": { "version": "1.6.3", @@ -9395,6 +10178,63 @@ "loose-envify": "^1.1.0" } }, + "node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT", + "peer": true + }, "node_modules/screenfull": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz", @@ -9447,6 +10287,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -9491,15 +10341,11 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", "dependencies": { "is-arrayish": "^0.3.1" } }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -9551,7 +10397,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -9570,7 +10415,6 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -9838,6 +10682,22 @@ "node": ">= 8.0" } }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -9851,6 +10711,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-path-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/svg-path-parser/-/svg-path-parser-1.1.0.tgz", + "integrity": "sha512-jGCUqcQyXpfe38R7RFfhrMyfXcBmpMNJI/B+4CE9/Unkh98UporAc461GTthv+TVDuZXsBx7/WiwJb1Oh4tt4A==", + "license": "MIT" + }, "node_modules/tailwindcss": { "version": "3.4.17", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", @@ -9907,6 +10773,16 @@ "postcss": "^8.0.0" } }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/tar": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", @@ -10002,8 +10878,6 @@ "version": "5.31.5", "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.5.tgz", "integrity": "sha512-YPmas0L0rE1UyLL/llTWA0SiDOqIcAQYLeUj7cJYzXHlRTAnMSg9pPe4VJ5PlKvTrPQsdVFuiRiwyeNlYgwh2Q==", - "dev": true, - "optional": true, "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -10018,6 +10892,41 @@ "node": ">=10" } }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -10067,11 +10976,6 @@ "dev": true, "license": "MIT" }, - "node_modules/tinycolor2": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" - }, "node_modules/tinyexec": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", @@ -10374,7 +11278,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, "funding": [ { "type": "opencollective", @@ -10733,11 +11636,82 @@ "node": ">=0.10.0" } }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "license": "MIT", + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, + "node_modules/webpack": { + "version": "5.98.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -10779,6 +11753,19 @@ "node": ">=8" } }, + "node_modules/workerize-loader": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/workerize-loader/-/workerize-loader-2.0.2.tgz", + "integrity": "sha512-HoZ6XY4sHWxA2w0WpzgBwUiR3dv1oo7bS+oCwIpb6n54MclQ/7KXdXsVIChTCygyuHtVuGBO1+i3HzTt699UJQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "loader-utils": "^2.0.0" + }, + "peerDependencies": { + "webpack": "*" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -11079,14 +12066,28 @@ "requires": { "@antv/util": "^2.0.13", "tslib": "^2.0.0" + }, + "dependencies": { + "@antv/util": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@antv/util/-/util-2.0.17.tgz", + "integrity": "sha512-o6I9hi5CIUvLGDhth0RxNSFDRwXeywmt6ExR4+RmVAzIi48ps6HUy+svxOCayvrPBN37uE6TAc2KDofRo0nK9Q==", + "requires": { + "csstype": "^3.0.8", + "tslib": "^2.0.3" + } + } } }, - "@antv/dom-util": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@antv/dom-util/-/dom-util-2.0.4.tgz", - "integrity": "sha512-2shXUl504fKwt82T3GkuT4Uoc6p9qjCKnJ8gXGLSW4T1W37dqf9AV28aCfoVPHp2BUXpSsB+PAJX2rG/jLHsLQ==", + "@antv/component": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@antv/component/-/component-2.1.2.tgz", + "integrity": "sha512-5nC9i9lh5rBHE+pk4TNnerLe4mn5874YHHhvv6EdL618UkgpdKJL0hJu4l7uAYjZ3g46VBK+IYT7md0FYv8f4w==", "requires": { - "tslib": "^2.0.3" + "@antv/g": "^6.1.11", + "@antv/scale": "^0.4.16", + "@antv/util": "^3.3.10", + "svg-path-parser": "^1.1.0" } }, "@antv/event-emitter": { @@ -11094,282 +12095,293 @@ "resolved": "https://registry.npmjs.org/@antv/event-emitter/-/event-emitter-0.1.3.tgz", "integrity": "sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg==" }, - "@antv/g-base": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/@antv/g-base/-/g-base-0.5.16.tgz", - "integrity": "sha512-jP06wggTubDPHXoKwFg3/f1lyxBX9ywwN3E/HG74Nd7DXqOXQis8tsIWW+O6dS/h9vyuXLd1/wDWkMMm3ZzXdg==", + "@antv/g": { + "version": "6.1.21", + "resolved": "https://registry.npmjs.org/@antv/g/-/g-6.1.21.tgz", + "integrity": "sha512-3cWmsY1bYwDmVzsFmBeqN1tWVt+3JaWL6Uu54C1oF7qn1VXXa3V3KuXGEYCxuei8E8BMriN3D7fZosY5d+MQqw==", "requires": { - "@antv/event-emitter": "^0.1.1", - "@antv/g-math": "^0.1.9", - "@antv/matrix-util": "^3.1.0-beta.1", - "@antv/path-util": "~2.0.5", - "@antv/util": "~2.0.13", - "@types/d3-timer": "^2.0.0", - "d3-ease": "^1.0.5", - "d3-interpolate": "^3.0.1", - "d3-timer": "^1.0.9", - "detect-browser": "^5.1.0", - "tslib": "^2.0.3" + "@antv/g-camera-api": "2.0.35", + "@antv/g-dom-mutation-observer-api": "2.0.32", + "@antv/g-lite": "2.2.16", + "@antv/g-web-animations-api": "2.1.21", + "@babel/runtime": "^7.25.6" + } + }, + "@antv/g-camera-api": { + "version": "2.0.35", + "resolved": "https://registry.npmjs.org/@antv/g-camera-api/-/g-camera-api-2.0.35.tgz", + "integrity": "sha512-z4WKmB6yN2fFi9EnapjuHbFVF0ilhMrWo2eZCxYXcb0dV5MiflU/WZi/bjs4WqVMJPNtYKx+yZhTyROncEiglw==", + "requires": { + "@antv/g-lite": "2.2.16", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "gl-matrix": "^3.4.3", + "tslib": "^2.5.3" } }, "@antv/g-canvas": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/@antv/g-canvas/-/g-canvas-0.5.17.tgz", - "integrity": "sha512-sXYJMWTOlb/Ycb6sTKu00LcJqInXJY4t99+kSM40u2OfqrXYmaXDjHR7D2V0roMkbK/QWiWS9UnEidCR1VtMOA==", + "version": "2.0.40", + "resolved": "https://registry.npmjs.org/@antv/g-canvas/-/g-canvas-2.0.40.tgz", + "integrity": "sha512-Starh5g+ydOFKzfK/GpwnLwz+o6UZNHkyWBXdHx2ax/AJWHVXwjyCadt/6kkc2non0ts2ow/hpJaW7X3dgdDxQ==", "requires": { - "@antv/g-base": "^0.5.12", - "@antv/g-math": "^0.1.9", - "@antv/matrix-util": "^3.1.0-beta.1", - "@antv/path-util": "~2.0.5", - "@antv/util": "~2.0.0", - "gl-matrix": "^3.0.0", - "tslib": "^2.0.3" + "@antv/g-lite": "2.2.16", + "@antv/g-plugin-canvas-path-generator": "2.1.16", + "@antv/g-plugin-canvas-picker": "2.1.19", + "@antv/g-plugin-canvas-renderer": "2.2.19", + "@antv/g-plugin-dom-interaction": "2.1.21", + "@antv/g-plugin-html-renderer": "2.1.21", + "@antv/g-plugin-image-loader": "2.1.19", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "tslib": "^2.5.3" + } + }, + "@antv/g-dom-mutation-observer-api": { + "version": "2.0.32", + "resolved": "https://registry.npmjs.org/@antv/g-dom-mutation-observer-api/-/g-dom-mutation-observer-api-2.0.32.tgz", + "integrity": "sha512-50r7en1+doUtR9uXmFJk8YtENQ/+DFcj2g3a4XKu9xp58kmF2qBgtdst9n1deqGcL5s0ufX/Ck9rUhtHwka+Ow==", + "requires": { + "@antv/g-lite": "2.2.16", + "@babel/runtime": "^7.25.6" + } + }, + "@antv/g-lite": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/@antv/g-lite/-/g-lite-2.2.16.tgz", + "integrity": "sha512-473r6S5srkxUiUxI3ZkrM74HMkgyO9+2HR1xtJ75yDOOuT8F6osdXDgy0Or5cWqOlsVjiN3L3DaPnQLHlUGO5A==", + "requires": { + "@antv/g-math": "3.0.0", + "@antv/util": "^3.3.5", + "@antv/vendor": "^1.0.3", + "@babel/runtime": "^7.25.6", + "eventemitter3": "^5.0.1", + "gl-matrix": "^3.4.3", + "rbush": "^3.0.1", + "tslib": "^2.5.3" } }, "@antv/g-math": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@antv/g-math/-/g-math-0.1.9.tgz", - "integrity": "sha512-KHMSfPfZ5XHM1PZnG42Q2gxXfOitYveNTA7L61lR6mhZ8Y/aExsYmHqaKBsSarU0z+6WLrl9C07PQJZaw0uljQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@antv/g-math/-/g-math-3.0.0.tgz", + "integrity": "sha512-AkmiNIEL1vgqTPeGY2wtsMdBBqKFwF7SKSgs+D1iOS/rqYMsXdhp/HvtuQ5tx/HdawE/ZzTiicIYopc520ADZw==", "requires": { - "@antv/util": "~2.0.0", - "gl-matrix": "^3.0.0" + "@antv/util": "^3.3.5", + "gl-matrix": "^3.4.3", + "tslib": "^2.5.3" } }, - "@antv/g-svg": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@antv/g-svg/-/g-svg-0.5.7.tgz", - "integrity": "sha512-jUbWoPgr4YNsOat2Y/rGAouNQYGpw4R0cvlN0YafwOyacFFYy2zC8RslNd6KkPhhR3XHNSqJOuCYZj/YmLUwYw==", + "@antv/g-plugin-canvas-path-generator": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-canvas-path-generator/-/g-plugin-canvas-path-generator-2.1.16.tgz", + "integrity": "sha512-E3/HUzWRv1/5QyKHLcXIgFJff0JBxDHz4NfHwYp6IOy5P/A1mbISsUjwafSl8JIVqx0J81CzgqpwU7pWHeXlaQ==", "requires": { - "@antv/g-base": "^0.5.12", - "@antv/g-math": "^0.1.9", - "@antv/util": "~2.0.0", - "detect-browser": "^5.0.0", - "tslib": "^2.0.3" + "@antv/g-lite": "2.2.16", + "@antv/g-math": "3.0.0", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "tslib": "^2.5.3" } }, - "@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==", + "@antv/g-plugin-canvas-picker": { + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-canvas-picker/-/g-plugin-canvas-picker-2.1.19.tgz", + "integrity": "sha512-69G0m2v09FimmYSU+hO1wjft1FqM467Cf1jDpjBz6Y3caQ98Hrqpz/7Prko1hMOALCo92MDo65yTTnz/LhBiQA==", "requires": { - "@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.2.16", + "@antv/g-math": "3.0.0", + "@antv/g-plugin-canvas-path-generator": "2.1.16", + "@antv/g-plugin-canvas-renderer": "2.2.19", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "gl-matrix": "^3.4.3", + "tslib": "^2.5.3" } }, - "@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==", + "@antv/g-plugin-canvas-renderer": { + "version": "2.2.19", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-canvas-renderer/-/g-plugin-canvas-renderer-2.2.19.tgz", + "integrity": "sha512-3Ac0pjU0NAafu0rwTnthwWV/CV5kV9CpTf96v1CCXX0P3iPWtW72SatQNOt/v2aQ2NjYB34YuwYy9i0U1oS8rg==", "requires": { - "eventemitter3": "^4.0.0", - "gl-matrix": "^3.1.0", - "lodash": "^4.17.15", - "probe.gl": "^3.1.1" + "@antv/g-lite": "2.2.16", + "@antv/g-math": "3.0.0", + "@antv/g-plugin-canvas-path-generator": "2.1.16", + "@antv/g-plugin-image-loader": "2.1.19", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "gl-matrix": "^3.4.3", + "tslib": "^2.5.3" } }, - "@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==", + "@antv/g-plugin-dom-interaction": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-dom-interaction/-/g-plugin-dom-interaction-2.1.21.tgz", + "integrity": "sha512-Vm8yeNjZ2aNgNH3LwDRExRChpuVv0Wv2zOblUGy5rgyRIh2Fkm8R89pKLmd3GlLo4AF1ZqAGWHiY2WOeMHEEIA==", "requires": { - "@antv/g-webgpu-core": "^0.7.2", - "gl-matrix": "^3.1.0", - "lodash": "^4.17.15", - "regl": "^1.3.11" + "@antv/g-lite": "2.2.16", + "@babel/runtime": "^7.25.6", + "tslib": "^2.5.3" + } + }, + "@antv/g-plugin-dragndrop": { + "version": "2.0.32", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-dragndrop/-/g-plugin-dragndrop-2.0.32.tgz", + "integrity": "sha512-0Y9S/jx6Z7O3hEQhqrXGWNIcV1dBoRpokSP9gIMqTxOjCLzVUFYv8pFoI+Uyeow6PAWe+gdBQu+EJgVi223lJQ==", + "requires": { + "@antv/g-lite": "2.2.16", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "tslib": "^2.5.3" + } + }, + "@antv/g-plugin-html-renderer": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-html-renderer/-/g-plugin-html-renderer-2.1.21.tgz", + "integrity": "sha512-1PR9rYt4BgSx8LFnVPF+cPlcBYKfI7iWK/xPipEa3jZ4j/xftELQ5EEyZpfPnrTqu2PtKeMurx7oaM/HPsgaiQ==", + "requires": { + "@antv/g-lite": "2.2.16", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "gl-matrix": "^3.4.3", + "tslib": "^2.5.3" + } + }, + "@antv/g-plugin-image-loader": { + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/@antv/g-plugin-image-loader/-/g-plugin-image-loader-2.1.19.tgz", + "integrity": "sha512-ZjNs08RkzdDMLlEWGabJG1Lu1Q71afStSlhcIRhrDOLB4tH0UdYlq/f72tlzJ6KjtLnril/xQH3D7znPlfAoig==", + "requires": { + "@antv/g-lite": "2.2.16", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "gl-matrix": "^3.4.3", + "tslib": "^2.5.3" + } + }, + "@antv/g-web-animations-api": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/@antv/g-web-animations-api/-/g-web-animations-api-2.1.21.tgz", + "integrity": "sha512-EkIjeEH3QzHkDJn3sz1Mk83PqVQXGe5440mJV42QmnxuFuFcxGVJMi9vS8Te7kCUJl4eSb/eqnNi5AWfDMWm+w==", + "requires": { + "@antv/g-lite": "2.2.16", + "@antv/util": "^3.3.5", + "@babel/runtime": "^7.25.6", + "tslib": "^2.5.3" } }, "@antv/g6": { - "version": "4.8.24", - "resolved": "https://registry.npmjs.org/@antv/g6/-/g6-4.8.24.tgz", - "integrity": "sha512-bgj7sZ+z45JmOngIpYpwmSIg7SboMLZBoAlX0+RoAETZB3/xvZO0MXT3lCSyAhIgm5Sb68pekKi7OStuo04NyQ==", - "requires": { - "@antv/g6-pc": "0.8.24" - } - }, - "@antv/g6-core": { - "version": "0.8.24", - "resolved": "https://registry.npmjs.org/@antv/g6-core/-/g6-core-0.8.24.tgz", - "integrity": "sha512-rgI3dArAD8uoSz2+skS4ctN4x/Of33ivTIKaEYYvClxgkLZWVz9zvocy+5AWcVPBHZsAXkZcdh9zndIoWY/33A==", + "version": "5.0.45", + "resolved": "https://registry.npmjs.org/@antv/g6/-/g6-5.0.45.tgz", + "integrity": "sha512-gwJnan63G+UOyoGAFRafEJjcFHVDt2MPM7xpryJd3Pg0uAFTBQSAriqfNecNj7Ao9vDwfkcrfP5sN87yksMSfA==", "requires": { "@antv/algorithm": "^0.1.26", - "@antv/dom-util": "^2.0.1", - "@antv/event-emitter": "~0.1.0", - "@antv/g-base": "^0.5.1", - "@antv/g-math": "^0.1.1", - "@antv/matrix-util": "^3.1.0-beta.3", - "@antv/path-util": "^2.0.3", - "@antv/util": "~2.0.5", - "ml-matrix": "^6.5.0", - "tslib": "^2.6.2" - } - }, - "@antv/g6-element": { - "version": "0.8.24", - "resolved": "https://registry.npmjs.org/@antv/g6-element/-/g6-element-0.8.24.tgz", - "integrity": "sha512-61FXkt9LY+6EOUtSam1iFTOW2AM59sPVcV1BuPj4dXiD0dluLE+R7d8B/94g1tKDw9tsjhfUQGC7hTXscJRJFw==", - "requires": { - "@antv/g-base": "^0.5.1", - "@antv/g6-core": "0.8.24", - "@antv/util": "~2.0.5", - "tslib": "^2.6.2" - } - }, - "@antv/g6-pc": { - "version": "0.8.24", - "resolved": "https://registry.npmjs.org/@antv/g6-pc/-/g6-pc-0.8.24.tgz", - "integrity": "sha512-nf0y1lrp8J5DotqRryXd2S/J30COW8spVcLF9gUqywGqQAHfE00Ywkqr+PZBnsfCZXsXCi9o0+CE9NrkWs4SBQ==", - "requires": { - "@ant-design/colors": "^4.0.5", - "@antv/algorithm": "^0.1.26", - "@antv/dom-util": "^2.0.1", - "@antv/event-emitter": "~0.1.0", - "@antv/g-base": "^0.5.1", - "@antv/g-canvas": "^0.5.2", - "@antv/g-math": "^0.1.1", - "@antv/g-svg": "^0.5.1", - "@antv/g6-core": "0.8.24", - "@antv/g6-element": "0.8.24", - "@antv/g6-plugin": "0.8.24", - "@antv/hierarchy": "^0.6.10", - "@antv/layout": "^0.3.0", - "@antv/matrix-util": "^3.1.0-beta.3", - "@antv/path-util": "^2.0.3", - "@antv/util": "~2.0.5", - "color": "^3.1.3", - "d3-force": "^2.0.1", - "dagre": "^0.8.5", - "insert-css": "^2.0.0", - "ml-matrix": "^6.5.0", - "tslib": "^2.6.2" - }, - "dependencies": { - "@ant-design/colors": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-4.0.5.tgz", - "integrity": "sha512-3mnuX2prnWOWvpFTS2WH2LoouWlOgtnIpc6IarWN6GOzzLF8dW/U8UctuvIPhoboETehZfJ61XP+CGakBEPJ3Q==", - "requires": { - "tinycolor2": "^1.4.1" - } - } - } - }, - "@antv/g6-plugin": { - "version": "0.8.24", - "resolved": "https://registry.npmjs.org/@antv/g6-plugin/-/g6-plugin-0.8.24.tgz", - "integrity": "sha512-ZIOnwLTC7SM2bFiJZ3vYFWnkyOCWKqnU96i/fBh1qAoY5slDS3hatenZWEXUtOcqaKw1h+5A5f72MRXqBBVn0g==", - "requires": { - "@antv/dom-util": "^2.0.2", - "@antv/g-base": "^0.5.1", - "@antv/g-canvas": "^0.5.2", - "@antv/g-svg": "^0.5.2", - "@antv/g6-core": "0.8.24", - "@antv/g6-element": "0.8.24", - "@antv/matrix-util": "^3.1.0-beta.3", - "@antv/path-util": "^2.0.3", - "@antv/scale": "^0.3.4", - "@antv/util": "^2.0.9", - "insert-css": "^2.0.0" + "@antv/component": "^2.1.2", + "@antv/event-emitter": "^0.1.3", + "@antv/g": "^6.1.14", + "@antv/g-canvas": "^2.0.32", + "@antv/g-plugin-dragndrop": "^2.0.25", + "@antv/graphlib": "^2.0.4", + "@antv/hierarchy": "^0.6.14", + "@antv/layout": "1.2.14-beta.9", + "@antv/util": "^3.3.10", + "bubblesets-js": "^2.3.4" } }, "@antv/graphlib": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@antv/graphlib/-/graphlib-1.2.0.tgz", - "integrity": "sha512-hhJOMThec51nU4Fe5p/viLlNIL71uDEgYFzKPajWjr2715SFG1HAgiP6AVylIeqBcAZ04u3Lw7usjl/TuI5RuQ==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@antv/graphlib/-/graphlib-2.0.4.tgz", + "integrity": "sha512-zc/5oQlsdk42Z0ib1mGklwzhJ5vczLFiPa1v7DgJkTbgJ2YxRh9xdarf86zI49sKVJmgbweRpJs7Nu5bIiwv4w==", + "requires": { + "@antv/event-emitter": "^0.1.3" + } }, "@antv/hierarchy": { - "version": "0.6.11", - "resolved": "https://registry.npmjs.org/@antv/hierarchy/-/hierarchy-0.6.11.tgz", - "integrity": "sha512-RJVhEMCuu4vj+Dt25lXIiNdd7jaqm/fqWGYikiELha4S5tnzdJoTUaUvvpfWlxLx4B0RsS9XRwBs1bOKN71TKg==", - "requires": { - "@antv/util": "^2.0.7" - } + "version": "0.6.14", + "resolved": "https://registry.npmjs.org/@antv/hierarchy/-/hierarchy-0.6.14.tgz", + "integrity": "sha512-V3uknf7bhynOqQDw2sg+9r9DwZ9pc6k/EcqyTFdfXB1+ydr7urisP0MipIuimucvQKN+Qkd+d6w601r1UIroqQ==" }, "@antv/layout": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@antv/layout/-/layout-0.3.25.tgz", - "integrity": "sha512-d29Aw1PXoAavMRZy7iTB9L5rMBeChFEX0BJ9ELP4TI35ySdCu07YbmPo9ju9OH/6sG2/NB3o85Ayxrre3iwX/g==", + "version": "1.2.14-beta.9", + "resolved": "https://registry.npmjs.org/@antv/layout/-/layout-1.2.14-beta.9.tgz", + "integrity": "sha512-wPlwBFMtq2lWZFc89/7Lzb8fjHnyKVZZ9zBb2h+zZIP0YWmVmHRE8+dqCiPKOyOGUXEdDtn813f1g107dCHZlg==", "requires": { - "@antv/g-webgpu": "0.7.2", - "@antv/graphlib": "^1.0.0", + "@antv/event-emitter": "^0.1.3", + "@antv/graphlib": "^2.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" - }, - "dependencies": { - "@antv/util": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/@antv/util/-/util-3.3.7.tgz", - "integrity": "sha512-qqPg7rIPCsJyl7N56jAC25v/99mJ3ApVkgBsGijhiWrEeKvzXBPk1r5P77Pm9nCljpnn+hH8Z3t5AivbEoTJMg==", - "requires": { - "fast-deep-equal": "^3.1.3", - "gl-matrix": "^3.3.0", - "tslib": "^2.3.1" - } - }, - "ml-matrix": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/ml-matrix/-/ml-matrix-6.5.0.tgz", - "integrity": "sha512-sms732Dge+rs5dU4mnjE0oqLWm1WujvR2fr38LgUHRG2cjXjWlO3WJupLYaSz3++2iYr0UrGDK72OAivr3J8dg==", - "requires": { - "ml-array-rescale": "^1.3.1" - } - } - } - }, - "@antv/matrix-util": { - "version": "3.1.0-beta.3", - "resolved": "https://registry.npmjs.org/@antv/matrix-util/-/matrix-util-3.1.0-beta.3.tgz", - "integrity": "sha512-W2R6Za3A6CmG51Y/4jZUM/tFgYSq7vTqJL1VD9dKrvwxS4sE0ZcXINtkp55CdyBwJ6Cwm8pfoRpnD4FnHahN0A==", - "requires": { - "@antv/util": "^2.0.9", - "gl-matrix": "^3.4.3", - "tslib": "^2.0.3" - } - }, - "@antv/path-util": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/@antv/path-util/-/path-util-2.0.15.tgz", - "integrity": "sha512-R2VLZ5C8PLPtr3VciNyxtjKqJ0XlANzpFb5sE9GE61UQqSRuSVSzIakMxjEPrpqbgc+s+y8i+fmc89Snu7qbNw==", - "requires": { - "@antv/matrix-util": "^3.0.4", - "@antv/util": "^2.0.9", - "tslib": "^2.0.3" - }, - "dependencies": { - "@antv/matrix-util": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@antv/matrix-util/-/matrix-util-3.0.4.tgz", - "integrity": "sha512-BAPyu6dUliHcQ7fm9hZSGKqkwcjEDVLVAstlHULLvcMZvANHeLXgHEgV7JqcAV/GIhIz8aZChIlzM1ZboiXpYQ==", - "requires": { - "@antv/util": "^2.0.9", - "gl-matrix": "^3.3.0", - "tslib": "^2.0.3" - } - } + "@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" } }, "@antv/scale": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@antv/scale/-/scale-0.3.18.tgz", - "integrity": "sha512-GHwE6Lo7S/Q5fgaLPaCsW+CH+3zl4aXpnN1skOiEY0Ue9/u+s2EySv6aDXYkAqs//i0uilMDD/0/4n8caX9U9w==", + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/@antv/scale/-/scale-0.4.16.tgz", + "integrity": "sha512-5wg/zB5kXHxpTV5OYwJD3ja6R8yTiqIOkjOhmpEJiowkzRlbEC/BOyMvNUq5fqFIHnMCE9woO7+c3zxEQCKPjw==", "requires": { - "@antv/util": "~2.0.3", - "fecha": "~4.2.0", - "tslib": "^2.0.0" + "@antv/util": "^3.3.7", + "color-string": "^1.5.5", + "fecha": "^4.2.1" } }, "@antv/util": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@antv/util/-/util-2.0.17.tgz", - "integrity": "sha512-o6I9hi5CIUvLGDhth0RxNSFDRwXeywmt6ExR4+RmVAzIi48ps6HUy+svxOCayvrPBN37uE6TAc2KDofRo0nK9Q==", + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/@antv/util/-/util-3.3.10.tgz", + "integrity": "sha512-basGML3DFA3O87INnzvDStjzS+n0JLEhRnRsDzP9keiXz8gT1z/fTdmJAZFOzMMWxy+HKbi7NbSt0+8vz/OsBQ==", "requires": { - "csstype": "^3.0.8", - "tslib": "^2.0.3" + "fast-deep-equal": "^3.1.3", + "gl-matrix": "^3.3.0", + "tslib": "^2.3.1" + } + }, + "@antv/vendor": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@antv/vendor/-/vendor-1.0.10.tgz", + "integrity": "sha512-/llNfo0gyUAi+ZY3TAtkNPS66eXTMbNdaKd8qllyJUuXnpRHYd/LGU69ix6olGJEFBi61hO4f9eTY0zzNOlFlw==", + "requires": { + "@types/d3-array": "^3.2.1", + "@types/d3-color": "^3.1.3", + "@types/d3-dispatch": "^3.0.6", + "@types/d3-dsv": "^3.0.7", + "@types/d3-fetch": "^3.0.7", + "@types/d3-force": "^3.0.10", + "@types/d3-format": "^3.0.4", + "@types/d3-geo": "^3.1.0", + "@types/d3-hierarchy": "^3.1.7", + "@types/d3-interpolate": "^3.0.4", + "@types/d3-path": "^3.1.0", + "@types/d3-quadtree": "^3.0.6", + "@types/d3-random": "^3.0.3", + "@types/d3-scale": "^4.0.9", + "@types/d3-scale-chromatic": "^3.1.0", + "@types/d3-shape": "^3.1.7", + "@types/d3-time": "^3.0.4", + "@types/d3-timer": "^3.0.2", + "d3-array": "^3.2.4", + "d3-color": "^3.1.0", + "d3-dispatch": "^3.0.1", + "d3-dsv": "^3.0.1", + "d3-fetch": "^3.0.1", + "d3-force": "^3.0.0", + "d3-force-3d": "^3.0.5", + "d3-format": "^3.1.0", + "d3-geo": "^3.1.1", + "d3-geo-projection": "^4.0.0", + "d3-hierarchy": "^3.1.2", + "d3-interpolate": "^3.0.1", + "d3-path": "^3.1.0", + "d3-quadtree": "^3.0.1", + "d3-random": "^3.0.1", + "d3-regression": "^1.3.10", + "d3-scale": "^4.0.2", + "d3-scale-chromatic": "^3.1.0", + "d3-shape": "^3.2.0", + "d3-time": "^3.1.0", + "d3-timer": "^3.0.1" } }, "@babel/code-frame": { @@ -12123,7 +13135,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, "requires": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -12133,21 +13144,17 @@ "@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" }, "@jridgewell/set-array": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" }, "@jridgewell/source-map": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "optional": true, "peer": true, "requires": { "@jridgewell/gen-mapping": "^0.3.0", @@ -12157,14 +13164,12 @@ "@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -12221,6 +13226,12 @@ } } }, + "@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==", + "requires": {} + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -12263,31 +13274,6 @@ "playwright": "1.50.1" } }, - "@probe.gl/env": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-3.6.0.tgz", - "integrity": "sha512-4tTZYUg/8BICC3Yyb9rOeoKeijKbZHRXBEKObrfPmX4sQmYB15ZOUpoVBhAyJkOYVAM8EkPci6Uw5dLCwx2BEQ==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@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==", - "requires": { - "@babel/runtime": "^7.0.0", - "@probe.gl/env": "3.6.0" - } - }, - "@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==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, "@rc-component/async-validator": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@rc-component/async-validator/-/async-validator-5.0.4.tgz", @@ -12596,10 +13582,110 @@ "@types/responselike": "^1.0.0" } }, + "@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==" + }, + "@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" + }, + "@types/d3-dispatch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", + "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==" + }, + "@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==" + }, + "@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "requires": { + "@types/d3-dsv": "*" + } + }, + "@types/d3-force": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==" + }, + "@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==" + }, + "@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "requires": { + "@types/geojson": "*" + } + }, + "@types/d3-hierarchy": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==" + }, + "@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "requires": { + "@types/d3-color": "*" + } + }, + "@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==" + }, + "@types/d3-quadtree": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==" + }, + "@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==" + }, + "@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "requires": { + "@types/d3-time": "*" + } + }, + "@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==" + }, + "@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "requires": { + "@types/d3-path": "*" + } + }, + "@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==" + }, "@types/d3-timer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-2.0.3.tgz", - "integrity": "sha512-jhAJzaanK5LqyLQ50jJNIrB8fjL9gwWZTgYjevPvkDLMU+kTAZkYsobI59nYoeSrH1PucuyJEi247Pb90t6XUg==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==" }, "@types/debug": { "version": "4.1.12", @@ -12621,12 +13707,21 @@ "version": "8.56.11", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz", "integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==", - "dev": true, "requires": { "@types/estree": "*", "@types/json-schema": "*" } }, + "@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "peer": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "@types/estree": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", @@ -12649,6 +13744,11 @@ "@types/node": "*" } }, + "@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==" + }, "@types/hast": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", @@ -12665,8 +13765,7 @@ "@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "@types/keyv": { "version": "3.1.4", @@ -12965,12 +14064,170 @@ "tinyrainbow": "^2.0.0" } }, + "@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "peer": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "peer": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "peer": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "peer": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "peer": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "peer": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "peer": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "peer": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "peer": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, "@xmldom/xmldom": { "version": "0.8.10", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", "dev": true }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "peer": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "peer": true + }, "7zip-bin": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", @@ -12978,10 +14235,9 @@ "dev": true }, "acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==" }, "acorn-jsx": { "version": "5.3.2", @@ -13027,6 +14283,35 @@ "uri-js": "^4.2.2" } }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "peer": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "peer": true + } + } + }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -13057,12 +14342,6 @@ "requires": { "color-name": "~1.1.4" } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true } } }, @@ -13403,6 +14682,12 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "peer": true + }, "binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -13465,7 +14750,6 @@ "version": "4.24.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "dev": true, "requires": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", @@ -13473,6 +14757,11 @@ "update-browserslist-db": "^1.1.1" } }, + "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==" + }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -13497,8 +14786,7 @@ "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "builder-util": { "version": "24.13.1", @@ -13612,8 +14900,7 @@ "caniuse-lite": { "version": "1.0.30001701", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001701.tgz", - "integrity": "sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==", - "dev": true + "integrity": "sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==" }, "ccount": { "version": "2.0.1", @@ -13713,6 +15000,12 @@ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true }, + "chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "peer": true + }, "chromium-pickle-js": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", @@ -13760,27 +15053,10 @@ "mimic-response": "^1.0.0" } }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "color-string": { "version": "1.9.1", @@ -13800,6 +15076,11 @@ "delayed-stream": "~1.0.0" } }, + "comlink": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.4.2.tgz", + "integrity": "sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==" + }, "comma-separated-tokens": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", @@ -13809,8 +15090,6 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "optional": true, "peer": true }, "compare-version": { @@ -13991,31 +15270,111 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, + "d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "requires": { + "internmap": "1 - 2" + } + }, + "d3-binarytree": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d3-binarytree/-/d3-binarytree-1.0.2.tgz", + "integrity": "sha512-cElUNH+sHu95L04m92pG73t2MEJXKu+GeKUN1TJkFsu93E5W8E9Sc3kHEGJKgenGvj19m6upSn2EunvMgMD2Yw==" + }, "d3-color": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" }, "d3-dispatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-2.0.0.tgz", - "integrity": "sha512-S/m2VsXI7gAti2pBoLClFFTMOO1HTtT0j99AuXLoGFKO6deHDdnv6ZGTxSTTUTgO1zVcv82fCOtDjYK4EECmWA==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" }, - "d3-ease": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", - "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" + "d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "requires": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + } + } + }, + "d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "requires": { + "d3-dsv": "1 - 3" + } }, "d3-force": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-2.1.1.tgz", - "integrity": "sha512-nAuHEzBqMvpFVMf9OX75d00OxvOXdxY+xECIXjW6Gv8BRrXu6gAWbv/9XKrvfJ5i5DCokDW7RYE50LRoK092ew==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", "requires": { - "d3-dispatch": "1 - 2", - "d3-quadtree": "1 - 2", - "d3-timer": "1 - 2" + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" } }, + "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==", + "requires": { + "d3-binarytree": "1", + "d3-dispatch": "1 - 3", + "d3-octree": "1", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" + }, + "d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "requires": { + "d3-array": "2.5.0 - 3" + } + }, + "d3-geo-projection": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-4.0.0.tgz", + "integrity": "sha512-p0bK60CEzph1iqmnxut7d/1kyTmm3UWtPlwdkM31AU+LW+BXazd5zJdoCn7VFxNCHXRngPHRnsNn5uGjLRGndg==", + "requires": { + "commander": "7", + "d3-array": "1 - 3", + "d3-geo": "1.12.0 - 3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + } + } + }, + "d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==" + }, "d3-interpolate": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", @@ -14024,15 +15383,80 @@ "d3-color": "1 - 3" } }, + "d3-octree": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-octree/-/d3-octree-1.1.0.tgz", + "integrity": "sha512-F8gPlqpP+HwRPMO/8uOu5wjH110+6q4cgJvgJT6vlpy3BEaDIKlTZrgHKZSp/i1InRpVfh4puY/kvL6MxK930A==" + }, + "d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==" + }, "d3-quadtree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-2.0.0.tgz", - "integrity": "sha512-b0Ed2t1UUalJpc3qXzKi+cPGxeXRr4KU9YSlocN74aTzp6R/Ud43t79yLLqxHRWZfsvWXmbDWPpoENK1K539xw==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" + }, + "d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==" + }, + "d3-regression": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/d3-regression/-/d3-regression-1.3.10.tgz", + "integrity": "sha512-PF8GWEL70cHHWpx2jUQXc68r1pyPHIA+St16muk/XRokETzlegj5LriNKg7o4LR0TySug4nHYPJNNRz/W+/Niw==" + }, + "d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "requires": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + } + }, + "d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "requires": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + } + }, + "d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "requires": { + "d3-path": "^3.1.0" + } + }, + "d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "requires": { + "d3-array": "2 - 3" + } + }, + "d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "requires": { + "d3-time": "1 - 3" + } }, "d3-timer": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", - "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" }, "dagre": { "version": "0.8.5", @@ -14043,12 +15467,6 @@ "lodash": "^4.17.15" } }, - "dagre-compound": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/dagre-compound/-/dagre-compound-0.0.11.tgz", - "integrity": "sha512-UrSgRP9LtOZCYb9e5doolZXpc7xayyszgyOs7uakTK4n4KsLegLVTRRtq01GpQd/iZjYw5fWMapx9ed+c80MAQ==", - "requires": {} - }, "dayjs": { "version": "1.11.12", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", @@ -14135,11 +15553,6 @@ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" }, - "detect-browser": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz", - "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==" - }, "detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -14478,8 +15891,7 @@ "electron-to-chromium": { "version": "1.5.109", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.109.tgz", - "integrity": "sha512-AidaH9JETVRr9DIPGfp1kAarm/W6hRJTPuCnkF+2MqhF4KaAgRIcBc8nvjk+YMXZhwfISof/7WG29eS4iGxQLQ==", - "dev": true + "integrity": "sha512-AidaH9JETVRr9DIPGfp1kAarm/W6hRJTPuCnkF+2MqhF4KaAgRIcBc8nvjk+YMXZhwfISof/7WG29eS4iGxQLQ==" }, "electron-updater": { "version": "6.3.9", @@ -14528,6 +15940,12 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "peer": true + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -14536,6 +15954,16 @@ "once": "^1.4.0" } }, + "enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "peer": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, "env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -14576,8 +16004,7 @@ "es-module-lexer": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", - "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", - "dev": true + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==" }, "es6-error": { "version": "4.1.1", @@ -14621,8 +16048,7 @@ "escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" }, "escape-string-regexp": { "version": "4.0.0", @@ -14759,6 +16185,16 @@ "dev": true, "requires": {} }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "peer": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, "eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", @@ -14797,7 +16233,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "requires": { "estraverse": "^5.2.0" }, @@ -14805,11 +16240,16 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" } } }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "peer": true + }, "estree-util-is-identifier-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", @@ -14831,9 +16271,15 @@ "dev": true }, "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "peer": true }, "expect-type": { "version": "1.2.0", @@ -14905,6 +16351,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "peer": true + }, "fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -15121,11 +16573,6 @@ "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" }, - "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==" - }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", @@ -15149,6 +16596,12 @@ "is-glob": "^4.0.3" } }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "peer": true + }, "global-agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", @@ -15220,9 +16673,9 @@ } }, "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "graphemer": { "version": "1.4.0", @@ -15241,8 +16694,7 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-property-descriptors": { "version": "1.0.2", @@ -15400,7 +16852,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } @@ -15483,10 +16934,10 @@ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz", "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==" }, - "insert-css": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/insert-css/-/insert-css-2.0.0.tgz", - "integrity": "sha512-xGq5ISgcUP5cvGkS2MMFLtPDBtrtQPSFfC6gA6U8wHKqfjTIMZLZNxOItQnoSjdOzlXOLU/yD32RKC4SvjNbtA==" + "internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" }, "intersection-observer": { "version": "0.12.2", @@ -15512,6 +16963,11 @@ "resolved": "https://registry.npmjs.org/is-any-array/-/is-any-array-2.0.1.tgz", "integrity": "sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==" }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -15636,6 +17092,17 @@ "minimatch": "^3.1.2" } }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "peer": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, "jiti": { "version": "1.21.7", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", @@ -15671,6 +17138,12 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "peer": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -15700,8 +17173,7 @@ "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, "jsonfile": { "version": "4.0.0", @@ -15831,6 +17303,23 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "peer": true + }, + "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==", + "peer": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", @@ -16078,6 +17567,12 @@ "@types/mdast": "^4.0.0" } }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "peer": true + }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -16314,14 +17809,12 @@ "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { "version": "2.1.35", "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "requires": { "mime-db": "1.52.0" } @@ -16400,9 +17893,9 @@ } }, "ml-matrix": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/ml-matrix/-/ml-matrix-6.11.0.tgz", - "integrity": "sha512-7jr9NmFRkaUxbKslfRu3aZOjJd2LkSitCGv+QH9PF0eJoEG7jIpjXra1Vw8/kgao8+kHCSsJONG6vfWmXQ+/Eg==", + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/ml-matrix/-/ml-matrix-6.12.1.tgz", + "integrity": "sha512-TJ+8eOFdp+INvzR4zAuwBQJznDUfktMtOB6g/hUcGh3rcyjxbz4Te57Pgri8Q9bhSQ7Zys4IYOGhFdnlgeB6Lw==", "requires": { "is-any-array": "^2.0.1", "ml-array-rescale": "^1.3.7" @@ -16448,6 +17941,12 @@ "sax": "^1.2.4" } }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "peer": true + }, "node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", @@ -16458,8 +17957,7 @@ "node-releases": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" }, "normalize-path": { "version": "3.0.0", @@ -16640,8 +18138,7 @@ "picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "picomatch": { "version": "2.3.1", @@ -16771,17 +18268,6 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "probe.gl": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/probe.gl/-/probe.gl-3.6.0.tgz", - "integrity": "sha512-19JydJWI7+DtR4feV+pu4Mn1I5TAc0xojuxVgZdXIyfmTLfUaFnk4OloWK1bKbPtkgGKLr2lnbnCXmpZEcEp9g==", - "requires": { - "@babel/runtime": "^7.0.0", - "@probe.gl/env": "3.6.0", - "@probe.gl/log": "3.6.0", - "@probe.gl/stats": "3.6.0" - } - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -16843,6 +18329,28 @@ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" }, + "quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "peer": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "rbush": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + "requires": { + "quickselect": "^2.0.0" + } + }, "rc-cascader": { "version": "3.27.0", "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.27.0.tgz", @@ -17389,11 +18897,6 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, - "regl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/regl/-/regl-1.7.0.tgz", - "integrity": "sha512-bEAtp/qrtKucxXSJkD4ebopFZYP0q1+3Vb2WECWv/T8yQEgKxDxJ7ztO285tAMaYZVR6mM1GgI6CCn8FROtL1w==" - }, "remark-parse": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", @@ -17423,6 +18926,12 @@ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "peer": true + }, "resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", @@ -17531,18 +19040,21 @@ "queue-microtask": "^1.2.2" } }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "peer": true }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sanitize-filename": { "version": "1.6.3", @@ -17577,6 +19089,47 @@ "loose-envify": "^1.1.0" } }, + "schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "peer": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "peer": true + } + } + }, "screenfull": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz", @@ -17610,6 +19163,15 @@ "type-fest": "^0.13.1" } }, + "serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -17643,13 +19205,6 @@ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "requires": { "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - } } }, "simple-update-notifier": { @@ -17689,8 +19244,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-js": { "version": "1.2.1", @@ -17702,7 +19256,6 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -17899,12 +19452,26 @@ "debug": "^4.1.0" } }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "svg-path-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/svg-path-parser/-/svg-path-parser-1.1.0.tgz", + "integrity": "sha512-jGCUqcQyXpfe38R7RFfhrMyfXcBmpMNJI/B+4CE9/Unkh98UporAc461GTthv+TVDuZXsBx7/WiwJb1Oh4tt4A==" + }, "tailwindcss": { "version": "3.4.17", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", @@ -17948,6 +19515,12 @@ } } }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "peer": true + }, "tar": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", @@ -18027,8 +19600,6 @@ "version": "5.31.5", "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.5.tgz", "integrity": "sha512-YPmas0L0rE1UyLL/llTWA0SiDOqIcAQYLeUj7cJYzXHlRTAnMSg9pPe4VJ5PlKvTrPQsdVFuiRiwyeNlYgwh2Q==", - "dev": true, - "optional": true, "peer": true, "requires": { "@jridgewell/source-map": "^0.3.3", @@ -18037,6 +19608,19 @@ "source-map-support": "~0.5.20" } }, + "terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -18077,11 +19661,6 @@ "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true }, - "tinycolor2": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" - }, "tinyexec": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", @@ -18294,7 +19873,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, "requires": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -18465,11 +20043,58 @@ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==" }, + "watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "peer": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, + "webpack": { + "version": "5.98.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "peer": true, + "requires": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "peer": true + }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -18498,6 +20123,15 @@ "stackback": "0.0.2" } }, + "workerize-loader": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/workerize-loader/-/workerize-loader-2.0.2.tgz", + "integrity": "sha512-HoZ6XY4sHWxA2w0WpzgBwUiR3dv1oo7bS+oCwIpb6n54MclQ/7KXdXsVIChTCygyuHtVuGBO1+i3HzTt699UJQ==", + "peer": true, + "requires": { + "loader-utils": "^2.0.0" + } + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index c707e37..acf0aff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "behavior3editor", - "version": "1.8.1", + "version": "1.8.2", "main": "dist-electron/main/index.js", "description": "行为树编辑器", "author": "zhandouxiaojiji & codetypes", @@ -27,7 +27,7 @@ "homepage": "https://github.com/zhandouxiaojiji/behavior3editor#readme", "dependencies": { "@ant-design/icons": "^5.4.0", - "@antv/g6": "^4.8.24", + "@antv/g6": "^5.0.45", "@electron/remote": "github:electron/remote", "@types/electron-localshortcut": "^3.1.3", "@types/node": "^20.14.14", diff --git a/public/locales/en.json b/public/locales/en.json index 32c934f..4a61d56 100644 --- a/public/locales/en.json +++ b/public/locales/en.json @@ -84,7 +84,7 @@ "tree.name": "Tree name", "tree.desc": "Tree desc", "tree.export": "Export", - "tree.firstid": "First id", + "tree.prefix": "ID prefix", "tree.group": "Enable Node Grouping", "tree.group.placeholder": "Select node groups", "tree.vars": "Define Variables", @@ -105,9 +105,11 @@ "node.children": "Num children", "node.debug": "Debug", "node.deleteRootNodeDenied": "Unable to delete the root node", + "node.dropDenied": "This node position is denied to drop the node", "node.desc": "Node desc", "node.disabled": "Disabled", "node.editSubtreeDenied": "Unable to edit the subtree node", + "node.editFailed": "Node '{{name}}' edit failed", "node.group": "Node group", "node.groupNotEnabled": "One of '{{group}}' node group is not enabled in current file", "node.id": "Node id", @@ -126,6 +128,7 @@ "node.rootNodeAsSubtree": "Root node cann't be save as subtree", "node.subtree": "Subtree", "node.subtreePathError": "You should save the subtree inside the current workspace", + "node.subtreeSaveRootError": "Root node cann't be save as subtree", "node.type": "Node type", "node.undefinedVariable": "Variable '{{variable}}' is not defined", diff --git a/public/locales/zh.json b/public/locales/zh.json index fbbe256..c63f668 100644 --- a/public/locales/zh.json +++ b/public/locales/zh.json @@ -84,7 +84,7 @@ "tree.name": "行为树", "tree.desc": "说明", "tree.export": "导出", - "tree.firstid": "起始标识", + "tree.prefix": "标识前缀", "tree.group": "启用节点分组", "tree.group.placeholder": "选择节点分组", "tree.vars": "定义变量", @@ -105,9 +105,11 @@ "node.children": "子节点数量", "node.debug": "调试", "node.deleteRootNodeDenied": "不能删除根节点", + "node.dropDenied": "此节点位置不允许放置拖拽的节点", "node.desc": "节点说明", "node.disabled": "禁用", "node.editSubtreeDenied": "不能编辑子树节点", + "node.editFailed": "节点 {{name}} 编辑失败", "node.group": "节点分组", "node.groupNotEnabled": "节点分组 “{{group}}” 任意一个未在当前文件中启用", "node.id": "节点标识", @@ -126,6 +128,7 @@ "node.rootNodeAsSubtree": "根节点不能保存为子树", "node.subtree": "子树", "node.subtreePathError": "子树必须保存在当前工作区的目录内", + "node.subtreeSaveRootError": "根节点不能保存为子树", "node.type": "节点类型", "node.undefinedVariable": "变量 “{{variable}}” 未定义", "node.unknown.desc": "新建节点" diff --git a/sample/scripts/build.js b/sample/scripts/build.js index 356f8e9..ca53901 100644 --- a/sample/scripts/build.js +++ b/sample/scripts/build.js @@ -11,7 +11,7 @@ firstid: number; group: string[]; import: string[]; - declvar: VarDef[]; + vars: { name: string; desc: string }[]; root: NodeModel; } diff --git a/sample/scripts/test.js b/sample/scripts/test.js index 5c5be9b..3803719 100644 --- a/sample/scripts/test.js +++ b/sample/scripts/test.js @@ -11,7 +11,7 @@ firstid: number; group: string[]; import: string[]; - declvar: VarDef[]; + vars: { name: string; desc: string }[]; root: NodeModel; } diff --git a/sample/vars/declare-core.json b/sample/vars/declare-core.json index 3be9dcd..4d686e5 100644 --- a/sample/vars/declare-core.json +++ b/sample/vars/declare-core.json @@ -6,7 +6,7 @@ "export": true, "group": [], "import": [], - "declvar": [ + "vars": [ { "name": "context", "desc": "上下文" @@ -22,8 +22,6 @@ "args": { "time": 1 }, - "input": [ - "version" - ] + "input": ["version"] } -} \ No newline at end of file +} diff --git a/sample/vars/declare-vars.json b/sample/vars/declare-vars.json index 8b0e299..e712f4c 100644 --- a/sample/vars/declare-vars.json +++ b/sample/vars/declare-vars.json @@ -1,12 +1,12 @@ { + "version": "1.8.1", "name": "declare-vars", "desc": "", "firstid": 1, "export": true, - "import": [ - "vars/declare-core.json" - ], - "declvar": [ + "group": [], + "import": ["vars/declare-core.json"], + "vars": [ { "name": "owner", "desc": "所有者" @@ -17,8 +17,7 @@ } ], "root": { - "id": 1, + "id": "1", "name": "Sequence" - }, - "group": [] -} \ No newline at end of file + } +} diff --git a/sample/vars/test-subtree.json b/sample/vars/test-subtree.json index 5f12071..d97dd9c 100644 --- a/sample/vars/test-subtree.json +++ b/sample/vars/test-subtree.json @@ -1,21 +1,23 @@ { + "version": "1.8.1", "name": "test-subtree", "desc": "", "firstid": 1, "export": true, + "group": [], "import": ["vars/declare-core.json"], - "declvar": [ + "vars": [ { "name": "test", "desc": "测试" } ], "root": { - "id": 1, + "id": "1", "name": "Sequence", "children": [ { - "id": 2, + "id": "2", "name": "Log", "args": { "message": "hello" diff --git a/sample/vars/test-vars.json b/sample/vars/test-vars.json index 420a8a4..0897ee5 100644 --- a/sample/vars/test-vars.json +++ b/sample/vars/test-vars.json @@ -1,8 +1,8 @@ { - "version": "1.8.0", + "version": "1.8.1", "name": "test-vars", "desc": "", - "firstid": 1, + "prefix": "A", "export": true, "group": [ "Client", @@ -12,7 +12,7 @@ "vars/declare-core.json", "vars/declare-vars.json" ], - "declvar": [ + "vars": [ { "name": "target", "desc": "目标" @@ -23,52 +23,52 @@ } ], "root": { - "id": 1, + "id": "1", "name": "Sequence", "children": [ { - "id": 2, + "id": "2", "name": "Sequence", "path": "vars/test-subtree.json" }, { - "id": 4, + "id": "4", "name": "FindEnemy", - "args": {}, "output": [ "target1" - ] + ], + "args": {} }, { - "id": 5, + "id": "5", "name": "Attack", "input": [ "target1" ] }, { - "id": 6, + "id": "6", "name": "Check", "args": { "value": "target[0].x > 0 " } }, { - "id": 7, + "id": "7", "name": "MoveToTarget", "input": [ "target" ] }, { - "id": 8, + "id": "8", "name": "Clear", "output": [ "test" ] }, { - "id": 9, + "id": "9", "name": "TestB3", "args": { "time": 1, @@ -79,7 +79,7 @@ } }, { - "id": 10, + "id": "10", "name": "TestB3", "args": { "time": 1, @@ -90,15 +90,17 @@ } }, { - "id": 11, + "id": "11", "name": "Clear", "output": [ "context" ] }, { - "id": 12, + "id": "12", "name": "Listen", + "input": [], + "output": [], "args": { "builtin": "afterRunFailure" } diff --git a/sample/workdir/hero.json b/sample/workdir/hero.json index 0c59e66..5b0fc34 100644 --- a/sample/workdir/hero.json +++ b/sample/workdir/hero.json @@ -4,12 +4,9 @@ "desc": "英雄测试AI", "firstid": 1, "export": true, - "group": [ - "Client", - "Server" - ], + "group": ["Client", "Server"], "import": [], - "declvar": [], + "vars": [], "root": { "id": 1, "name": "Selector", @@ -29,16 +26,12 @@ "w": 100, "h": 50 }, - "output": [ - "enemy" - ] + "output": ["enemy"] }, { "id": 4, "name": "Attack", - "input": [ - "enemy" - ] + "input": ["enemy"] }, { "id": 5, @@ -63,16 +56,12 @@ "x": 0, "y": 0 }, - "output": [ - "enemy" - ] + "output": ["enemy"] }, { "id": 8, "name": "MoveToTarget", - "input": [ - "enemy" - ] + "input": ["enemy"] } ] }, @@ -84,9 +73,7 @@ { "id": 10, "name": "GetHp", - "output": [ - "hp" - ] + "output": ["hp"] }, { "id": 11, @@ -94,9 +81,7 @@ "args": { "lt": 50 }, - "input": [ - "hp" - ] + "input": ["hp"] }, { "id": 12, @@ -114,4 +99,4 @@ } ] } -} \ No newline at end of file +} diff --git a/sample/workdir/monster.json b/sample/workdir/monster.json index ed1fbe6..5460003 100644 --- a/sample/workdir/monster.json +++ b/sample/workdir/monster.json @@ -4,11 +4,9 @@ "desc": "怪物测试AI", "firstid": 1, "export": true, - "group": [ - "Test" - ], + "group": ["Test"], "import": [], - "declvar": [], + "vars": [], "root": { "id": 1, "name": "Sequence", @@ -22,9 +20,7 @@ { "id": 3, "name": "GetHp", - "output": [ - "hp" - ], + "output": ["hp"], "children": [ { "id": 4, @@ -41,9 +37,7 @@ "value": "hp", "gt": 50 }, - "input": [ - "hp" - ] + "input": ["hp"] }, { "id": 7, @@ -75,4 +69,4 @@ } ] } -} \ No newline at end of file +} diff --git a/sample/workdir/sub/subtree1.json b/sample/workdir/sub/subtree1.json index 7d28abc..f925b66 100644 --- a/sample/workdir/sub/subtree1.json +++ b/sample/workdir/sub/subtree1.json @@ -5,7 +5,7 @@ "firstid": 1, "group": [], "import": [], - "declvar": [], + "vars": [], "root": { "id": 1, "name": "Sequence", @@ -27,4 +27,4 @@ } ] } -} \ No newline at end of file +} diff --git a/sample/workdir/sub/subtree2.json b/sample/workdir/sub/subtree2.json index 324a819..c8602ec 100644 --- a/sample/workdir/sub/subtree2.json +++ b/sample/workdir/sub/subtree2.json @@ -5,7 +5,7 @@ "firstid": 1, "group": [], "import": [], - "declvar": [], + "vars": [], "root": { "id": 1, "name": "Sequence", @@ -14,17 +14,13 @@ { "id": 2, "name": "Cmp", - "input": [ - "d" - ] + "input": ["d"] }, { "id": 3, "name": "Attack", - "input": [ - "in" - ] + "input": ["in"] } ] } -} \ No newline at end of file +} diff --git a/sample/workdir/subtree1.json b/sample/workdir/subtree1.json index aeaf0af..3a6b866 100644 --- a/sample/workdir/subtree1.json +++ b/sample/workdir/subtree1.json @@ -5,7 +5,7 @@ "firstid": 1, "group": [], "import": [], - "declvar": [], + "vars": [], "root": { "id": 1, "name": "Sequence", @@ -27,4 +27,4 @@ } ] } -} \ No newline at end of file +} diff --git a/sample/workdir/subtree2.json b/sample/workdir/subtree2.json index 503e5a8..b86b161 100644 --- a/sample/workdir/subtree2.json +++ b/sample/workdir/subtree2.json @@ -5,7 +5,7 @@ "firstid": 1, "group": [], "import": [], - "declvar": [], + "vars": [], "root": { "id": 1, "name": "Sequence", @@ -15,10 +15,8 @@ "id": 2, "name": "Cmp", "args": {}, - "input": [ - "x" - ] + "input": ["x"] } ] } -} \ No newline at end of file +} diff --git a/src/behavior3 b/src/behavior3 index b3e20e8..9283002 160000 --- a/src/behavior3 +++ b/src/behavior3 @@ -1 +1 @@ -Subproject commit b3e20e85785aed1b1b5762e08c94056101e0cd35 +Subproject commit 9283002a96ab5ff5e326919c26cb953c2285fa9c diff --git a/src/components/editor.tsx b/src/components/editor.tsx index 75cdf9b..0c8c0a9 100644 --- a/src/components/editor.tsx +++ b/src/components/editor.tsx @@ -1,9 +1,6 @@ import { ArrowDownOutlined, ArrowUpOutlined, CloseOutlined } from "@ant-design/icons"; -import G6, { G6GraphEvent, Item, Matrix, TreeGraph } from "@antv/g6"; -import { dialog } from "@electron/remote"; import { useSize } from "ahooks"; import { Button, Dropdown, Flex, FlexProps, Input, InputRef, MenuProps } from "antd"; -import { clipboard } from "electron"; import * as fs from "fs"; import React, { FC, KeyboardEvent, useEffect, useMemo, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; @@ -21,98 +18,17 @@ import { EditTree, useWorkspace, } from "../contexts/workspace-context"; -import { ImportDef, isExprType, NodeModel, TreeGraphData, TreeModel, VarDef } from "../misc/b3type"; -import * as b3util from "../misc/b3util"; -import { message } from "../misc/hooks"; import i18n from "../misc/i18n"; import { Hotkey, isMacos, useKeyDown } from "../misc/keys"; -import Path from "../misc/path"; -import { mergeClassNames, readJson, writeTree } from "../misc/util"; +import { mergeClassNames } from "../misc/util"; +import { FilterOption, Graph } from "./graph"; import "./register-node"; -import { calcTreeDataSize } from "./register-node"; export interface EditorProps extends React.HTMLAttributes { data: EditorStore; - onUpdate: () => void; + onChange: () => void; } -interface FilterOption { - results: string[]; - index: number; - filterStr: string; - filterCase: boolean; - filterFocus: boolean; - filterType: "content" | "id"; - placeholder: string; -} - -const createTreeData = (node: NodeModel, parent?: string) => { - return b3util.createTreeData(node, parent, calcTreeDataSize); -}; - -const refreshTreeData = (data: TreeGraphData) => { - data.size = calcTreeDataSize(data); - if (data.children) { - for (const child of data.children) { - refreshTreeData(child); - } - } -}; - -const isTreeUpdated = (editor: EditorStore, editTree: EditTree) => { - if ( - editor.data.firstid !== editTree.firstid || - editor.data.export !== editTree.export || - editor.data.name !== editTree.name || - editor.data.desc !== editTree.desc - ) { - return true; - } - - let max = Math.max(editor.declare.declvar.length, editTree.declvar.length); - for (let i = 0; i < max; i++) { - const v1: VarDef | undefined = editor.declare.declvar[i]; - const v2: VarDef | undefined = editTree.declvar[i]; - if (v1?.name !== v2?.name || v1?.desc !== v2?.desc) { - return true; - } - } - - max = Math.max(editor.data.group.length, editTree.group.length); - for (let i = 0; i < max; i++) { - if (editor.data.group[i] !== editTree.group[i]) { - return true; - } - } - - max = Math.max(editor.declare.import.length, editTree.import.length); - for (let i = 0; i < max; i++) { - const v1: ImportDef | undefined = editor.declare.import[i]; - const v2: ImportDef | undefined = editTree.import[i]; - if (v1?.path !== v2?.path) { - return true; - } - } - - return false; -}; - -const isSubtreeUpdated = (data: TreeGraphData) => { - if (data.path) { - if (b3util.files[data.path] !== data.lastModified) { - return true; - } - } - if (data.children) { - for (const child of data.children) { - if (isSubtreeUpdated(child)) { - return true; - } - } - } - return false; -}; - const createMenu = () => { const t = i18n.t; const MenuItem: FC = (itemProps) => { @@ -193,29 +109,60 @@ const createMenu = () => { return arr; }; -export const Editor: FC = ({ onUpdate: updateState, data: editor, ...props }) => { +const hotkeyMap: Record = { + [Hotkey.Copy]: "copy", + [Hotkey.Replace]: "replace", + [Hotkey.Paste]: "paste", + [Hotkey.Insert]: "insert", + [Hotkey.Enter]: "insert", + [Hotkey.Delete]: "delete", + [Hotkey.Backspace]: "delete", + [Hotkey.Undo]: "undo", + [Hotkey.Redo]: "redo", +}; + +export const Editor: FC = ({ onChange, data: editor, ...props }) => { const workspace = useWorkspace( useShallow((state) => ({ - refresh: state.refresh, editing: state.editing, - editingNode: state.editingNode, - editingTree: state.editingTree, - nodeDefs: state.nodeDefs, - onEditingNode: state.onEditingNode, - onEditingTree: state.onEditingTree, - open: state.open, - relative: state.relative, - updateFileMeta: state.updateFileMeta, - workdir: state.workdir, })) ); + const keysRef = useRef(null); + useKeyDown( + [ + Hotkey.Copy, + Hotkey.Replace, + Hotkey.Paste, + Hotkey.Insert, + Hotkey.Enter, + Hotkey.Delete, + Hotkey.Backspace, + ], + keysRef, + (e, key) => { + e.preventDefault(); + e.stopImmediatePropagation(); + e.stopPropagation(); + editor.dispatch(hotkeyMap[key]); + } + ); + + useKeyDown([Hotkey.Undo, Hotkey.Redo], null, (e, key) => { + if (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) { + return; + } + e.stopPropagation(); + editor.dispatch(hotkeyMap[key]); + }); + const searchInputRef = useRef(null); const graphRef = useRef(null); const sizeRef = useRef(null); const editorSize = useSize(sizeRef); const { t } = useTranslation(); const menuItems = useMemo(() => createMenu(), [t]); + const [graph, setGraph] = useState(null!); const [showingSearch, setShowingSearch] = useState(false); const [filterOption, setFilterOption] = useState({ @@ -228,1044 +175,39 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . placeholder: "", }); - const onSearchChange = (option: FilterOption) => { + const onSearchChange = async (option: FilterOption) => { option.results.length = 0; - editor.searchingText = option.filterStr; - filterNodes(option, editor.root); + graph.hightlightSearch(option, graph.data.root); setFilterOption({ ...option, }); if (option.results.length > 0) { const idx = option.index < option.results.length ? option.index : 0; - recursiveOpenCollapsed(option.results[idx]); - editor.graph.focusItem(option.results[idx]); - selectNode(option.results[idx]); + graph.expandElement(); + graph.focusNode(option.results[idx]); } else { - selectNode(null); + graph.selectNode(null); } - editor.graph.findAll("node", () => true).forEach((item) => item.draw()); }; const updateSearchState = () => { const option = { ...filterOption }; option.results.length = 0; - filterNodes(option, editor.root); + graph.hightlightSearch(option, graph.data.root); setFilterOption({ ...option, }); - editor.graph.findAll("node", () => true).forEach((item) => item.draw()); }; - const onDebounceSearchChange = useDebounceCallback(onSearchChange, 200); - - const onChange = () => { - if (!editor.unsave) { - editor.unsave = true; - updateState(); - } - }; - - const findParent = (node: TreeGraphData) => { - if (node.parent) { - return findDataById(node.parent); - } else { - return null; - } - }; - - const findHightlight = (node: TreeGraphData, highlight: string[], changed?: TreeGraphData[]) => { - changed ||= []; - if (node.highlightInput || node.highlightOutput || node.highlightArgs) { - node.highlightInput = false; - node.highlightOutput = false; - node.highlightArgs = false; - changed.push(node); - } - - if (node.input) { - for (const v of node.input) { - if (highlight.includes(v)) { - node.highlightInput = true; - changed.push(node); - break; - } - } - } - - if (node.output) { - for (const v of node.output) { - if (highlight.includes(v)) { - node.highlightOutput = true; - changed.push(node); - break; - } - } - } - - node.def.args?.forEach((arg) => { - if (isExprType(arg.type)) { - const expr = node.args?.[arg.name] as string | string[] | undefined; - if (typeof expr === "string") { - for (const v of b3util.parseExpr(expr)) { - if (highlight.includes(v)) { - node.highlightArgs = true; - changed.push(node); - break; - } - } - } else if (expr instanceof Array) { - loop: for (const str of expr) { - for (const v of b3util.parseExpr(str)) { - if (highlight.includes(v)) { - node.highlightArgs = true; - changed.push(node); - break loop; - } - } - } - } - } - }); - - node.children?.forEach((child: TreeGraphData) => findHightlight(child, highlight, changed)); - - return changed; - }; - - const findDataById = (id: string) => { - const traverse = (node: TreeGraphData): TreeGraphData | undefined => { - if (node.id === id) { - return node; - } - if (node.children) { - for (const child of node.children) { - const result = traverse(child); - if (result) { - return result; - } - } - } - }; - return traverse(editor.root) as TreeGraphData; - }; - - const includeString = (content: string | undefined, option: FilterOption) => { - if (!content || typeof content !== "string") { - return false; - } else if (option.filterCase) { - return content.includes(option.filterStr); - } else { - return content.toLowerCase().includes(option.filterStr.toLowerCase()); - } - }; - - const filterNodes = (option: FilterOption, node: TreeGraphData | null) => { - if (node) { - node.highlightGray = option.filterFocus && !!option.filterStr; - if (option.filterStr) { - let found = false; - if (option.filterType === "id") { - if (option.filterStr === node.id) { - found = true; - } - } else { - if ( - includeString(node.name, option) || - includeString(node.desc || node.def.desc, option) - ) { - found = true; - } - if (!found && node.input) { - for (const str of node.input) { - if (includeString(str, option)) { - found = true; - break; - } - } - } - if (!found && node.args) { - loop: for (const str in node.args) { - const value = node.args[str]; - if (typeof value === "string") { - if (includeString(value, option)) { - found = true; - break loop; - } - } else if (value instanceof Array) { - for (const v of value) { - if (includeString(v, option)) { - found = true; - break loop; - } - } - } - } - } - if (!found && node.output) { - for (const str of node.output) { - if (includeString(str, option)) { - found = true; - break; - } - } - } - if (!found && node.path) { - if (includeString(node.path, option)) { - found = true; - } - } - } - if (found) { - option.results.push(node.id); - node.highlightGray = false; - } - } - node.children?.forEach((child: TreeGraphData) => filterNodes(option, child)); - } - }; - - const isAncestor = (ancestor: TreeGraphData, node: TreeGraphData): boolean => { - if (ancestor.id === node.parent) { - return true; - } else if (node.parent) { - return isAncestor(ancestor, findDataById(node.parent)); - } else { - return false; - } - }; - - const isSubtreeNode = (node: TreeGraphData | null): boolean => { - if (node?.path) { - return true; - } else if (node?.parent) { - return isSubtreeNode(findParent(node)); - } else { - return false; - } - }; - - const findSubtree = (node: TreeGraphData | null): TreeGraphData | null => { - if (node?.path) { - return node; - } else if (node?.parent) { - return findSubtree(findParent(node)); - } else { - return null; - } - }; - - const refresh = () => { - const rootNode = b3util.createNode(editor.root); - editor.modifiedTime = fs.statSync(editor.path).mtimeMs; - editor.root = createTreeData(rootNode); - editor.autoId = b3util.refreshTreeDataId(editor.root, editor.data.firstid); - editor.graph.changeData(editor.root); - editor.graph.layout(); - if (editor.selectedId) { - selectNode(editor.selectedId); - } - restoreViewport(); - }; - - const reload = () => { - const file = readJson(editor.path) as TreeModel; - editor.root = createTreeData(file.root); - editor.autoId = b3util.refreshTreeDataId(editor.root, editor.data.firstid); - editor.unsave = false; - updateState(); - if (editor.graph) { - editor.graph.changeData(editor.root); - editor.graph.layout(); - restoreViewport(); - } - }; - - const checkSubtree = () => { - if (editor.graph && isSubtreeUpdated(editor.root)) { - refresh(); - pushHistory(); - onChange(); - } - }; - - const clearDragDstState = () => { - if (editor.dragDstId) { - setItemState(editor.dragDstId, "dragRight", false); - setItemState(editor.dragDstId, "dragDown", false); - setItemState(editor.dragDstId, "dragUp", false); - editor.dragDstId = undefined; - } - }; - - const clearDragSrcState = () => { - if (editor.dragSrcId) { - setItemState(editor.dragSrcId, "dragSrc", false); - editor.dragSrcId = undefined; - } - }; - - const setItemState = (item: string | Item, state: string, value: string | boolean) => { - if (typeof item === "string") { - item = editor.graph.findById(item); - } - if (item) { - editor.graph.setItemState(item, state, value); - } - }; - - const updateNode = (editNode: EditNode) => { - const newNode = editNode.data; - const data = findDataById(editNode.data.id.toString()); - const oldNode = b3util.createNode(data, false); - if (b3util.isNodeEqual(oldNode, newNode)) { - return; - } - b3util.copyFromNode(data, newNode); - data.def = workspace.nodeDefs.get(data.name)!; - data.size = calcTreeDataSize(data); - if (oldNode.path !== newNode.path) { - refresh(); - selectNode(null); - selectNode(data.id); - } else { - const item = editor.graph.findById(data.id); - item.draw(); - } - pushHistory(); - onChange(); - }; - - const updateTree = (editTree: EditTree) => { - if (isTreeUpdated(editor, editTree)) { - editor.data.desc = editTree.desc || ""; - editor.data.export = editTree.export !== false; - editor.data.group = editTree.group; - editor.data.firstid = editTree.firstid ?? 1; - editor.declare.declvar = editTree.declvar || []; - editor.declare.import = editTree.import || []; - editor.data.import = editor.declare.import.map((v) => v.path).sort(); - editor.data.declvar = editor.declare.declvar - .map((v) => ({ ...v })) - .sort((a, b) => a.name.localeCompare(b.name)); - workspace.refresh(editor.path); - pushHistory(); - refresh(); - onChange(); - } - }; - - const clickVar = (...names: string[]) => { - const changed = findHightlight(editor.root, names); - if (changed.length > 0) { - const refreshHighlight = (node: TreeGraphData) => { - const item = editor.graph.findById(node.id); - if (names.length > 0) { - node.highlightGray = !(node.highlightInput || node.highlightOutput || node.highlightArgs); - } else { - node.highlightGray = false; - } - item.draw(); - if (node.children) { - node.children.forEach(refreshHighlight); - } - }; - refreshHighlight(editor.root); - } - if (names.length === 0 && editor.searchingText) { - const matrix = editor.graphMatrix; - const selectedId = editor.selectedId; - onSearchChange({ - ...filterOption, - filterType: "content", - filterStr: editor.searchingText, - }); - editor.graphMatrix = matrix; - selectNode(selectedId); - restoreViewport(); - } - }; - - const selectNode = (id: string | null) => { - if (editor.selectedId) { - setItemState(editor.selectedId, "selected", false); - setItemState(editor.selectedId, "hover", false); - } - - editor.selectedId = id; - - if (editor.selectedId) { - const data = findDataById(editor.selectedId); - workspace.onEditingNode({ - data: b3util.createNode(data, false), - editable: !isSubtreeNode(data), - limitError: !b3util.checkChildrenLimit(data), - }); - setItemState(editor.selectedId, "selected", true); - } else { - workspace.onEditingTree(editor); - } - }; - - const restoreViewport = () => { - if (editor.graphMatrix) { - editor.graph.getGroup().setMatrix(editor.graphMatrix); - } - }; - - const pushHistory = () => { - editor.historyStack.length = ++editor.historyIndex; - editor.historyStack.push( - JSON.stringify( - { - ...editor.data, - root: b3util.createNode(editor.root), - }, - null, - 2 - ) - ); - }; - - const copyNode = () => { - if (editor.selectedId) { - const data = findDataById(editor.selectedId); - if (data) { - const str = JSON.stringify(b3util.createNode(data), null, 2); - clipboard.writeText(str); - } - } - }; - - const pasteNode = () => { - if (!editor.selectedId) { - message.warning(t("node.noNodeSelected")); - return; - } - - if (isSubtreeNode(findDataById(editor.selectedId))) { - message.warning(t("node.editSubtreeDenied")); - return; - } - - try { - const str = clipboard.readText(); - if (!str || str === "") { - return; - } - const curNodeData = findDataById(editor.selectedId); - const data = createTreeData(JSON.parse(str), editor.selectedId); - editor.autoId = b3util.refreshTreeDataId(data, editor.autoId); - selectNode(null); - curNodeData.children ||= []; - curNodeData.children.push(data); - refreshItem(curNodeData); - updateGrahp(); - pushHistory(); - onChange(); - } catch (error) { - message.error(t("node.pasteDataError")); - console.log(error); - } - }; - - const replaceNode = () => { - if (!editor.selectedId) { - message.warning(t("node.noNodeSelected")); - return; - } - - if (isSubtreeNode(findDataById(editor.selectedId))) { - message.warning(t("node.editSubtreeDenied")); - return; - } - - try { - const str = clipboard.readText(); - if (!str || str === "") { - return; - } - const curNodeData = findDataById(editor.selectedId); - if (curNodeData.parent) { - const parentData = findDataById(curNodeData.parent); - const idx = parentData.children!.indexOf(curNodeData); - const data = createTreeData(JSON.parse(str), editor.selectedId); - editor.autoId = b3util.refreshTreeDataId(data, editor.autoId); - parentData.children![idx] = data; - refreshItem(parentData); - updateGrahp(); - } else { - editor.root = createTreeData(JSON.parse(str), editor.selectedId); - editor.autoId = b3util.refreshTreeDataId(editor.root, editor.data.firstid); - editor.graph.changeData(editor.root); - editor.graph.render(); - editor.graph.layout(); - } - selectNode(null); - pushHistory(); - onChange(); - } catch (error) { - message.error(t("node.pasteDataError")); - console.log(error); - } - }; - - const createNode = () => { - if (!editor.selectedId) { - message.warning(t("node.noNodeSelected")); - return; - } - - if (isSubtreeNode(findDataById(editor.selectedId))) { - message.warning(t("node.editSubtreeDenied")); - return; - } - - const curNodeData = findDataById(editor.selectedId); - const newNodeData: NodeModel = { - id: editor.autoId++, - name: "unknow", - }; - curNodeData.children ||= []; - curNodeData.children.push(createTreeData(newNodeData, editor.selectedId)); - refreshItem(curNodeData); - updateGrahp(); - pushHistory(); - onChange(); - }; - - const deleteNode = () => { - if (!editor.selectedId) { - return; - } - - if (editor.selectedId === "1") { - message.warning(t("node.deleteRootNodeDenied")); - return; - } - - const data = findDataById(editor.selectedId); - - if (isSubtreeNode(data) && !data.path) { - message.warning(t("node.editSubtreeDenied")); - return; - } - - const parentData = findParent(data)!; - parentData.children = parentData.children!.filter((e) => e.id !== editor.selectedId); - refreshItem(parentData); - selectNode(null); - updateGrahp(); - pushHistory(); - onChange(); - }; - - const refreshItem = (data: TreeGraphData) => { - editor.graph.findById(data.id)?.draw(); - }; - - const useStackData = (str: string) => { - const data = JSON.parse(str) as TreeModel; - editor.data = data; - editor.root = createTreeData(data.root); - editor.declare.import = data.import.map((v) => ({ path: v, vars: [], depends: [] })); - editor.declare.declvar = data.declvar.map((v) => ({ ...v })); - editor.autoId = b3util.refreshTreeDataId(editor.root, editor.data.firstid); - editor.graph.changeData(editor.root); - editor.graph.layout(); - restoreViewport(); - onChange(); - - if (workspace.editingTree) { - workspace.onEditingTree(editor); - } else if (workspace.editingNode) { - selectNode(workspace.editingNode.data.id.toString()); - } - }; - - const updateGrahp = () => { - editor.graph.changeData(); - editor.graph.layout(); - }; - - const undo = () => { - if (editor.historyIndex > 0) { - useStackData(editor.historyStack[--editor.historyIndex]); - updateSearchState(); - } - }; - - const redo = () => { - if (editor.historyIndex < editor.historyStack.length - 1) { - useStackData(editor.historyStack[++editor.historyIndex]); - updateSearchState(); - } - }; - - const rename = (newPath: string) => { - editor.path = newPath; - }; - - const save = () => { - if (b3util.isNewVersion(editor.data.version)) { - message.error(t("alertNewVersion", { version: editor.data.version }), 6); - return; - } - const path = editor.path; - editor.autoId = b3util.refreshTreeDataId(editor.root, editor.data.firstid); - editor.data.root = b3util.createFileData(editor.root); - editor.modifiedTime = Date.now(); - writeTree(path, editor.data); - workspace.updateFileMeta(editor); - editor.unsave = false; - editor.graph.changeData(editor.root); - editor.graph.layout(); - restoreViewport(); - updateSearchState(); - updateState(); - }; - - const editSubtree = () => { - if (!editor.selectedId) { - message.warning(t("node.noNodeSelected")); - return; - } - - const data = findSubtree(findDataById(editor.selectedId)); - if (data?.path) { - const path = `${workspace.workdir}/${data.path}`; - workspace.open(path, Number(editor.selectedId) - Number(data.id) + 1); - } - }; - - const saveAsSubtree = () => { - if (!editor.selectedId) { - message.warning(t("node.noNodeSelected")); - return; - } - if (editor.selectedId === "1") { - message.warning(t("node.saveAsSubtree")); - return; - } - setTimeout(() => { - let subpath = dialog.showSaveDialogSync({ - defaultPath: workspace.workdir, - properties: ["showOverwriteConfirmation"], - filters: [{ name: "Json", extensions: ["json"] }], - }); - - if (!subpath) { - return; - } - - subpath = subpath.replaceAll(Path.sep, "/"); - if (subpath.indexOf(workspace.workdir) === -1) { - message.warning(t("node.subtreePathError")); - return; - } - - const data = findDataById(editor.selectedId!); - const subroot = b3util.createFileData(data); - const subtreeModel = { - name: Path.basename(subpath).slice(0, -5), - root: subroot, - desc: data.desc, - } as TreeModel; - fs.writeFileSync(subpath, JSON.stringify(subtreeModel, null, 2)); - data.path = workspace.relative(subpath); - refresh(); - pushHistory(); - onChange(); - }, 200); - }; - - const createGraph = (ref: React.MutableRefObject) => { - editor.graph = new TreeGraph({ - container: ref.current!, - animate: false, - maxZoom: 2, - minZoom: 0.4, - modes: { - default: [ - "drag-canvas", - "zoom-canvas", - "click-select", - "hover", - { - type: "collapse-expand", - trigger: "dblclick", - onChange: (item, collapsed) => { - if (!item) { - return; - } - selectNode(item.getID()); - const data = item.getModel(); - data.collapsed = collapsed; - setItemState(item, "collapsed", data.collapsed as boolean); - const icon = data.collapsed ? G6.Marker.expand : G6.Marker.collapse; - const marker = item - .get("group") - // eslint-disable-next-line @typescript-eslint/no-explicit-any - .find((ele: any) => ele.get("name") === "collapse-icon"); - editor.graph.refresh(); - marker.attr("symbol", icon); - return true; - }, - }, - ], - }, - defaultEdge: { - type: "cubic-horizontal", - size: 2.5, - style: { - stroke: "#A3B1BF", - }, - }, - defaultNode: { - type: "TreeNode", - }, - layout: { - type: "compactBox", - direction: "LR", - getHGap: () => 30, - getWidth: (d: TreeGraphData) => { - return d.size![0]; - }, - getHeight: (d: TreeGraphData) => { - return d.size![1]; - }, - }, - }); - - editor.graph.on("viewportchange", (data) => { - if (data.action === "translate" || data.action === "zoom") { - editor.graphMatrix = data.matrix as Matrix; - } - }); - - editor.graph.on("node:click", (e: G6GraphEvent) => { - const names: string[] = []; - if (e.shape.cfg.name === "input-text") { - const data = findDataById(e.item.getID()); - data.input?.forEach((v) => v && names.push(v)); - } else if (e.shape.cfg.name === "output-text") { - const data = findDataById(e.item.getID()); - data.output?.forEach((v) => v && names.push(v)); - } - clickVar(...names); - }); - - editor.graph.on("node:contextmenu", (e: G6GraphEvent) => { - selectNode(e.item.getID()); - }); - - editor.graph.on("node:mouseenter", (e: G6GraphEvent) => { - if (!e.item.hasState("selected")) { - setItemState(e.item, "hover", true); - } - }); - - editor.graph.on("node:mouseleave", (e: G6GraphEvent) => { - if (!e.item.hasState("selected")) { - setItemState(e.item, "hover", false); - } - }); - - editor.graph.on("nodeselectchange", (e: G6GraphEvent) => { - if (e.target) { - selectNode((e.target as unknown as Item).getID()); - } else { - selectNode(null); - } - }); - - editor.graph.on("node:dragstart", (e: G6GraphEvent) => { - editor.dragSrcId = e.item.getID(); - setItemState(editor.dragSrcId, "dragSrc", true); - }); - - editor.graph.on("node:dragend", (e: G6GraphEvent) => { - if (editor.dragSrcId) { - setItemState(editor.dragSrcId, "dragSrc", false); - editor.dragSrcId = undefined; - } - }); - - editor.graph.on("node:dragover", (e: G6GraphEvent) => { - const dstNodeId = e.item.getID(); - if (dstNodeId === editor.dragSrcId) { - return; - } - - clearDragDstState(); - - const box = e.item.getBBox(); - if (e.x > box.minX + box.width * 0.6) { - setItemState(dstNodeId, "dragRight", true); - } else if (e.y > box.minY + box.height * 0.5) { - setItemState(dstNodeId, "dragDown", true); - } else { - setItemState(dstNodeId, "dragUp", true); - } - editor.dragDstId = dstNodeId; - }); - - editor.graph.on("node:dragleave", (e: G6GraphEvent) => { - clearDragDstState(); - }); - - editor.graph.on("node:drop", (e: G6GraphEvent) => { - const dstNode = e.item; - - let srcNodeId = editor.dragSrcId; - let dragDir; - if (dstNode.hasState("dragRight")) { - dragDir = "dragRight"; - } else if (dstNode.hasState("dragDown")) { - dragDir = "dragDown"; - } else if (dstNode.hasState("dragUp")) { - dragDir = "dragUp"; - } - - clearDragSrcState(); - clearDragDstState(); - - if (e.originalEvent instanceof DragEvent) { - const dragEvent = e.originalEvent as DragEvent; - const exploreFile = dragEvent.dataTransfer?.getData("explore-file"); - const exploreNode = dragEvent.dataTransfer?.getData("explore-node"); - const dstData = findDataById(dstNode.getID()); - - if (exploreNode) { - const newTreeData: TreeGraphData = createTreeData( - { - id: editor.autoId++, - name: exploreNode, - }, - dstData.id - ); - dstData.children ||= []; - dstData.children.push(newTreeData); - refreshItem(dstData); - srcNodeId = newTreeData.id; - } else if (exploreFile && exploreFile !== editor.path) { - const newTreeData: TreeGraphData = createTreeData( - { - id: editor.autoId++, - name: "unknow", - path: workspace.relative(exploreFile), - }, - dstData.id - ); - dstData.children ||= []; - dstData.children.push(newTreeData); - refreshItem(dstData); - srcNodeId = newTreeData.id; - editor.autoId = b3util.refreshTreeDataId(newTreeData, Number(srcNodeId)); - } - } - - if (!srcNodeId) { - console.log("no drag src"); - return; - } - - if (srcNodeId === dstNode.getID()) { - console.log("drop same node"); - return; - } - - const srcData = findDataById(srcNodeId); - const srcParent = findParent(srcData); - const dstData = findDataById(dstNode.getID()); - const dstParent = findParent(dstData); - if (!srcParent) { - console.log("no parent!"); - return; - } - - if (isAncestor(srcData, dstData)) { - console.log("cannot move to child"); - return; - } - - const removeSrc = () => { - srcParent.children = srcParent.children!.filter((value) => value.id !== srcData.id); - }; - - if (dragDir === "dragRight") { - removeSrc(); - if (!dstData.children) { - dstData.children = []; - } - srcData.parent = dstData.id; - dstData.children.push(srcData); - } else if (dragDir === "dragUp") { - if (!dstParent) { - return; - } - removeSrc(); - const idx = dstParent.children!.findIndex((value) => value.id === dstData.id); - srcData.parent = dstParent.id; - dstParent.children!.splice(idx, 0, srcData); - } else if (dragDir === "dragDown") { - if (!dstParent) { - return; - } - removeSrc(); - const idx = dstParent.children!.findIndex((value) => value.id === dstData.id); - srcData.parent = dstParent.id; - dstParent.children!.splice(idx + 1, 0, srcData); - } else { - return; - } - - refreshItem(srcParent); - refreshItem(dstData); - - updateGrahp(); - pushHistory(); - onChange(); - }); - - refreshTreeData(editor.root); - editor.graph.data(editor.root); - editor.graph.render(); - if (editor.graphMatrix) { - restoreViewport(); - } else { - editor.graph.fitCenter(); - } - }; - - const keysRef = useRef(null); - - useKeyDown(Hotkey.Copy, keysRef, () => copyNode()); - useKeyDown(Hotkey.Replace, keysRef, () => replaceNode()); - useKeyDown(Hotkey.Paste, keysRef, () => pasteNode()); - useKeyDown(Hotkey.Undo, keysRef, () => undo()); - useKeyDown(Hotkey.Redo, keysRef, () => redo()); - useKeyDown([Hotkey.Insert, Hotkey.Enter], keysRef, () => createNode()); - useKeyDown([Hotkey.Delete, Hotkey.Backspace], keysRef, () => deleteNode()); - - editor.dispatch = (event: EditEvent, data: unknown) => { - switch (event) { - case "copy": { - copyNode(); - break; - } - case "paste": { - pasteNode(); - break; - } - case "delete": { - deleteNode(); - break; - } - case "insert": { - createNode(); - break; - } - case "replace": { - replaceNode(); - break; - } - case "save": { - save(); - break; - } - case "undo": { - undo(); - break; - } - case "redo": { - redo(); - break; - } - case "refresh": { - refresh(); - break; - } - case "reload": { - reload(); - break; - } - case "rename": { - rename(data as string); - break; - } - case "updateTree": { - updateTree(data as EditTree); - break; - } - case "updateNode": { - updateNode(data as EditNode); - break; - } - case "searchNode": { - searchByType("content"); - break; - } - case "jumpNode": { - searchByType("id"); - break; - } - case "editSubtree": { - editSubtree(); - break; - } - case "saveAsSubtree": { - saveAsSubtree(); - break; - } - case "clickVar": { - clickVar(data as string); - break; - } - } - }; - - // check should rebuild graph - useEffect(() => { - if (!editorSize || (editorSize.width === 0 && editorSize.height === 0)) { - return; - } - - if (!editor.graph) { - createGraph(graphRef); - } - - if ( - editor.graph.getWidth() !== editorSize.width || - editor.graph.getHeight() !== editorSize.height - ) { - editor.graph.changeSize(editorSize.width, editorSize.height); - } - - if (editor.selectedId) { - const id = editor.selectedId; - setTimeout(() => { - editor.graph.focusItem(id); - selectNode(id); - }, 50); - } - }, [editorSize, workspace.editing]); - - // check should repaint node - useEffect(() => { - if (workspace.editing === editor) { - checkSubtree(); - editor.graph && refresh(); - } - }, [workspace.editing, t]); + const onDebounceSearchChange = useDebounceCallback(onSearchChange, 100); const nextResult = () => { const { results, index } = filterOption; if (results.length > 0) { const idx = (index + 1) % results.length; - recursiveOpenCollapsed(results[idx]); - editor.graph.focusItem(results[idx]); - selectNode(results[idx]); setFilterOption({ ...filterOption, index: idx }); + graph.expandElement(); + graph.focusNode(results[idx]); } }; @@ -1273,10 +215,9 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . const { results, index } = filterOption; if (results.length > 0) { const idx = (index + results.length - 1) % results.length; - recursiveOpenCollapsed(results[idx]); - editor.graph.focusItem(results[idx]); - selectNode(results[idx]); setFilterOption({ ...filterOption, index: idx }); + graph.expandElement(); + graph.focusNode(results[idx]); } }; @@ -1319,19 +260,98 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . e.stopPropagation(); }; - const recursiveOpenCollapsed = (id: string) => { - const recursiveFun = (searchId: string) => { - const data = findDataById(searchId); - if (searchId !== id && data.collapsed) { - data.collapsed = undefined; - } - if (data.parent) { - recursiveFun(data.parent); + editor.dispatch = async (event: EditEvent, data: unknown) => { + if (event === "close") { + graph.destroy(); + } else if (event === "copy") { + graph.copyNode(); + } else if (event === "paste") { + await graph.pasteNode(); + } else if (event === "delete") { + await graph.deleteNode(); + } else if (event === "insert") { + await graph.createNode(); + } else if (event === "replace") { + graph.replaceNode(); + } else if (event === "save") { + await graph.save(); + onChange(); + editor.changed = false; + editor.mtime = Date.now(); + updateSearchState(); + } else if (event === "undo") { + await graph.undo(); + updateSearchState(); + } else if (event === "redo") { + await graph.redo(); + updateSearchState(); + } else if (event === "refresh") { + await graph.refresh(); + editor.mtime = fs.statSync(editor.path).mtimeMs; + } else if (event === "reload") { + graph.reload(); + editor.mtime = fs.statSync(editor.path).mtimeMs; + editor.changed = false; + } else if (event === "rename") { + editor.path = data as string; + } else if (event === "updateTree") { + graph.updateTree(data as EditTree); + } else if (event === "updateNode") { + graph.updateNode(data as EditNode); + } else if (event === "searchNode") { + searchByType("content"); + } else if (event === "jumpNode") { + searchByType("id"); + } else if (event === "editSubtree") { + graph.editSubtree(); + } else if (event === "saveAsSubtree") { + graph.saveAsSubtree(); + } else if (event === "clickVar") { + graph.clickVar(data as string); + } + keysRef.current?.focus(); + }; + + if (graph) { + graph.onChange = () => { + if (!editor.changed) { + editor.changed = true; + onChange(); } }; - recursiveFun(id); - updateGrahp(); - }; + graph.onUpdateSearch = () => { + if (filterOption.filterStr) { + onSearchChange({ + ...filterOption, + filterType: "content", + }); + } + }; + } + + // check should rebuild graph + useEffect(() => { + if (!editorSize || (editorSize.width === 0 && editorSize.height === 0)) { + return; + } + + if (!graph) { + setGraph(new Graph(editor, graphRef)); + } + + if (graph && workspace.editing === editor) { + graph.setSize(editorSize.width, editorSize.height); + + graph.refreshSubtree().then(() => { + if (editor.focusId) { + graph.focusNode(editor.focusId); + editor.focusId = null; + } else if (graph.selectedId) { + graph.selectNode(graph.selectedId); + } + }); + } + }, [editorSize, workspace.editing, graph, t]); return (
= ({ onUpdate: updateState, data: editor, . justifyContent: "end", paddingRight: "10px", paddingTop: "10px", + zIndex: 100, }} > {
{
["state"]; + +type IGraph = { + context: { + behavior?: { + currentTarget: unknown; + }; + }; +}; + +const workspace = useWorkspace.getState(); + +export interface FilterOption { + results: string[]; + index: number; + filterStr: string; + filterCase: boolean; + filterFocus: boolean; + filterType: "content" | "id"; + placeholder: string; +} + +export class Graph { + onChange?: () => void; + onUpdateSearch?: () => void; + + private _graph: G6Graph; + private _historyStack: string[] = []; + private _historyIndex: number = 0; + private _dragId?: string; + private _dropId?: string; + private _selectedId: string | null = null; + + constructor(readonly editor: EditorStore, ref: React.RefObject) { + this._graph = new G6Graph({ + container: ref.current!, + behaviors: ["drag-canvas", "zoom-canvas", "hover-activate"], + animation: false, + zoomRange: [0.25, 2], + node: { + type: "TreeNode", + style: { + radius: 4, + fill: "white", + size: [260, 50], + ports: [{ placement: "right" }, { placement: "left" }], + }, + state: TreeNodeStyle as G6NodeState, + }, + edge: { + type: "cubic-horizontal", + style: { + lineWidth: 2, + stroke: "#A3B1BF", + }, + animation: { + enter: false, + }, + }, + layout: { + type: "compact-box", + direction: "LR", + sortBy: (nodeA: G6NodeData, nodeB: G6NodeData) => { + const dataA = nodeA.data as unknown as NodeData; + const dataB = nodeB.data as unknown as NodeData; + return Number(dataA.id) - Number(dataB.id); + }, + getHeight: ({ data }: { data: NodeData }) => data.size![1], + getWidth: ({ data }: { data: NodeData }) => data.size![0], + getVGap: () => 20, + getHGap: () => 30, + }, + }); + this._graph.on(G6CanvasEvent.CLICK, this._onCanvasClick.bind(this)); + this._graph.on(G6NodeEvent.CONTEXT_MENU, this._onContextMenu.bind(this)); + this._graph.on(G6NodeEvent.CLICK, this._onClick.bind(this)); + this._graph.on(G6NodeEvent.DRAG_START, this._onDragStart.bind(this)); + this._graph.on(G6NodeEvent.DRAG_END, this._onDragEnd.bind(this)); + this._graph.on(G6NodeEvent.DRAG_ENTER, this._onDragEnter.bind(this)); + this._graph.on(G6NodeEvent.DRAG_LEAVE, this._onDragLeave.bind(this)); + this._graph.on(G6NodeEvent.DRAG, this._onDrag.bind(this)); + this._graph.on(G6NodeEvent.DROP, this._onDrop.bind(this)); + this._update(editor.data); + this._historyIndex = -1; + this._storeHistory(false); + } + + destroy() { + this._graph.destroy(); + } + + get data() { + return this.editor.data; + } + + private _storeHistory(changed: boolean = true) { + if (this._graph.rendered) { + this.editor.data.root = this._nodeToData("1"); + } + const str = JSON.stringify(this.data, null, 2); + if (this._historyStack[this._historyIndex] !== str) { + this._historyStack.length = ++this._historyIndex; + this._historyStack.push(str); + if (changed) { + this.onChange?.(); + } + } + } + + private async _applyHistory(str: string) { + // clear node inspector + this.selectNode(null); + const data = JSON.parse(str) as TreeData; + this.editor.declare.import = data.import.map((v) => ({ path: v, vars: [], depends: [] })); + this.editor.declare.vars = data.vars.map((v) => ({ ...v })); + await this._update(data); + // update tree inspector + this.selectNode(null); + this.onChange?.(); + } + + private async _update(data: TreeData, refreshId: boolean = true) { + this.editor.data = data; + if (refreshId) { + b3util.refreshNodeData(this.data.root, 1); + } + + workspace.refresh(this.editor.path); + + // clear current target avoid hover error + const graph = this._graph as unknown as IGraph; + if (graph.context.behavior) { + graph.context.behavior.currentTarget = null; + } + + this._graph.clear(); + this._graph.setData( + treeToGraphData(data.root, { + getNodeData: (node) => { + return { + id: node.id, + prefix: this.data.prefix, + data: node as unknown as Record, + children: node.children?.map((child) => child.id), + }; + }, + }) + ); + await this._render(); + } + + setSize(width: number, height: number) { + const [w, h] = this._graph.getSize(); + if (w !== width || h !== height) { + this._graph.setSize(width, height); + } + } + + async undo() { + if (this._historyIndex > 0) { + await this._applyHistory(this._historyStack[--this._historyIndex]); + } + } + + async redo() { + if (this._historyIndex < this._historyStack.length - 1) { + await this._applyHistory(this._historyStack[++this._historyIndex]); + } + } + + private _nodeToData(id: string) { + const node = this._graph.getElementData(id) as G6NodeData; + const data = { ...node.data } as unknown as NodeData; + if (node.children) { + data.children = []; + for (const child of node.children) { + data.children.push(this._nodeToData(child)); + } + } else { + data.children = undefined; + } + return data; + } + + private async _render() { + if (!this._graph.rendered) { + await this._graph.render(); + } + const zoom = this._graph.getZoom(); + await this._graph.zoomTo(1, false); + const [x, y] = this._graph.getPosition(); + await this._graph.translateTo([0, 0], false); + await this._graph.render(); + await this._graph.translateTo([x, y], false); + await this._graph.zoomTo(zoom, false); + } + + private _getAncestors(id: string): G6NodeData[] { + return this._graph.getAncestorsData(id, "tree") as G6NodeData[]; + } + + private _findSubtreeRoot(id: string): G6NodeData | null { + const node = this._graph.getNodeData(id); + const data = node.data as unknown as NodeData | undefined; + if (data?.path) { + return node; + } else { + return this._getAncestors(id).find((v) => (v.data as unknown as NodeData)?.path) ?? null; + } + } + + private _isSubtreeNode(id: string | null | undefined): boolean { + return !!(id && this._findSubtreeRoot(id)); + } + + private _findParent(id: string) { + return this._graph.getParentData(id, "tree") as G6NodeData | null; + } + + private _findHightlight( + node: NodeData, + highlight: string[], + changed?: [NodeData, TreeNodeState[]][] + ) { + changed ||= []; + + if (highlight.length > 0) { + const states: TreeNodeState[] = []; + + for (const v of node.input ?? []) { + if (highlight.includes(v)) { + states.push("highlightinput"); + break; + } + } + + for (const v of node.output ?? []) { + if (highlight.includes(v)) { + states.push("highlightoutput"); + break; + } + } + + const def = b3util.nodeDefs.get(node.name); + loop: for (const arg of def.args ?? []) { + if (isExprType(arg.type)) { + const expr = node.args?.[arg.name] as string | string[] | undefined; + if (typeof expr === "string") { + for (const v of b3util.parseExpr(expr)) { + if (highlight.includes(v)) { + states.push("highlightargs"); + break loop; + } + } + } else if (expr instanceof Array) { + for (const str of expr) { + for (const v of b3util.parseExpr(str)) { + if (highlight.includes(v)) { + states.push("highlightargs"); + break loop; + } + } + } + } + } + } + + if (states.length > 0) { + changed.push([node, states]); + } else { + changed.push([node, ["highlightgray"]]); + } + } else { + changed.push([node, []]); + } + + node.children?.forEach((child) => this._findHightlight(child, highlight, changed)); + + return changed; + } + + async expandElement() { + for (const node of this._graph.getNodeData()) { + await this._graph.expandElement(node.id, false); + } + } + + clickVar(...names: string[]) { + console.debug("click variable:", names); + const nodes = this._findHightlight(this.data.root, names); + for (const [node, states] of nodes) { + const oldStates = this._getState(node.id).sort(); + const newStates = [...oldStates.filter((v) => !this._isHighlightState(v)), ...states].sort(); + if (oldStates.length !== newStates.length || oldStates.some((v, i) => v !== newStates[i])) { + this._setState(node.id, newStates); + } + } + if (names.length === 0) { + this.onUpdateSearch?.(); + } + } + + private _includeString(content: string | undefined, option: FilterOption) { + if (!content || typeof content !== "string") { + return false; + } else if (option.filterCase) { + return content.includes(option.filterStr); + } else { + return content.toLowerCase().includes(option.filterStr.toLowerCase()); + } + } + + hightlightSearch(option: FilterOption, node: NodeData | null) { + if (!node) { + return; + } + + let highlightGray = option.filterFocus && !!option.filterStr; + + if (option.filterStr) { + const def = b3util.nodeDefs.get(node.name); + let found = false; + if (option.filterType === "id") { + if (option.filterStr === node.id) { + found = true; + } + } else { + if ( + this._includeString(node.name, option) || + this._includeString(node.desc || def.desc, option) + ) { + found = true; + } + if (!found && node.input) { + for (const str of node.input) { + if (this._includeString(str, option)) { + found = true; + break; + } + } + } + if (!found && node.args) { + loop: for (const str in node.args) { + const value = node.args[str]; + if (typeof value === "string") { + if (this._includeString(value, option)) { + found = true; + break loop; + } + } else if (value instanceof Array) { + for (const v of value) { + if (this._includeString(v, option)) { + found = true; + break loop; + } + } + } + } + } + if (!found && node.output) { + for (const str of node.output) { + if (this._includeString(str, option)) { + found = true; + break; + } + } + } + if (!found && node.path) { + if (this._includeString(node.path, option)) { + found = true; + } + } + } + if (found) { + option.results.push(node.id); + highlightGray = false; + } + } + + const states = this._getState(node.id).filter((v) => !this._isHighlightState(v)); + if (highlightGray) { + states.push("highlightgray"); + } + this._setState(node.id, states); + + node.children?.forEach((child) => this.hightlightSearch(option, child)); + } + + private _isTreeUpdated(editTree: EditTree) { + if ( + this.data.prefix !== editTree.prefix || + this.data.export !== editTree.export || + this.data.name !== editTree.name || + this.data.desc !== editTree.desc + ) { + return true; + } + + let max = Math.max(this.editor.declare.vars.length, editTree.vars.length); + for (let i = 0; i < max; i++) { + const v1: VarDecl | undefined = this.editor.declare.vars[i]; + const v2: VarDecl | undefined = editTree.vars[i]; + if (v1?.name !== v2?.name || v1?.desc !== v2?.desc) { + return true; + } + } + + max = Math.max(this.data.group.length, editTree.group.length); + for (let i = 0; i < max; i++) { + if (this.data.group[i] !== editTree.group[i]) { + return true; + } + } + + max = Math.max(this.editor.declare.import.length, editTree.import.length); + for (let i = 0; i < max; i++) { + const v1: ImportDecl | undefined = this.editor.declare.import[i]; + const v2: ImportDecl | undefined = editTree.import[i]; + if (v1?.path !== v2?.path) { + return true; + } + } + + return false; + } + + async updateTree(editTree: EditTree) { + if (this._isTreeUpdated(editTree)) { + this.data.desc = editTree.desc || ""; + this.data.export = editTree.export !== false; + this.data.group = editTree.group; + this.data.prefix = editTree.prefix ?? ""; + this.data.import = editTree.import.map((v) => v.path).sort(); + this.data.vars = editTree.vars + .map((v) => ({ ...v })) + .sort((a, b) => a.name.localeCompare(b.name)); + this.editor.declare.vars = editTree.vars || []; + this.editor.declare.import = editTree.import || []; + workspace.refresh(this.editor.path); + await this.refresh(); + this._storeHistory(); + } + } + + async updateNode(editNode: EditNode) { + const node = this._graph.getNodeData(editNode.data.id); + const data = node.data as unknown as NodeData; + if (b3util.isNodeEqual(data, editNode.data)) { + return; + } + + // update node + node.data = { ...editNode.data, size: b3util.calcSize(editNode.data) }; + this._graph.updateNodeData([node]); + await this._graph.draw(); + + // update subtree + if (data.path !== editNode.data.path) { + this.editor.data.root = this._nodeToData("1"); + await this.refresh(); + } + + this._storeHistory(); + } + + async refresh() { + this.selectNode(null); + await this._update(this.data); + this.selectNode(null); + } + + async reload() { + this.selectNode(null); + await this._update(readTree(this.editor.path)); + this._storeHistory(false); + this.selectNode(null); + } + + async focusNode(id: string) { + this.selectNode(id); + await this._graph.translateTo([0, 0], false); + await this._graph.focusElement(id, true); + } + + get selectedId() { + return this._selectedId; + } + + selectNode(id: string | null) { + if (this._selectedId && id !== this._selectedId) { + this._setState( + this._selectedId, + this._getState(this._selectedId).filter((v) => v !== "selected") + ); + } + + this._selectedId = id; + + if (this._selectedId) { + const node = this._graph.getNodeData(this._selectedId); + const data = node.data as unknown as NodeData; + workspace.onEditingNode({ + data: { ...data }, + prefix: this.data.prefix, + disabled: this._isSubtreeNode(node.id), + subtreeEditable: !this._isSubtreeNode(this._findParent(node.id)?.id), + }); + const states = this._getState(this._selectedId); + this._setState(this._selectedId, [...states, "selected"]); + } else { + workspace.onEditingTree(this.editor); + } + } + + private _onContextMenu(e: IG6PointerEvent) { + this.selectNode(e.target.id); + } + + private _onCanvasClick(e: IG6PointerEvent) { + this.selectNode(null); + } + + private _onClick(e: IG6PointerEvent) { + const names: string[] = []; + const originalTarget = e.originalTarget; + if (originalTarget.className === "input-text") { + const node = this._graph.getNodeData(e.target.id); + const data = node.data as unknown as NodeData; + data.input?.forEach((v) => v && names.push(v)); + } else if (originalTarget.className === "output-text") { + const node = this._graph.getNodeData(e.target.id); + const data = node.data as unknown as NodeData; + data.output?.forEach((v) => v && names.push(v)); + } + this.clickVar(...names); + this.selectNode(e.target.id); + } + + private _isDragState(state: string): boolean { + return ( + state === "dragsrc" || state === "dragup" || state === "dragdown" || state === "dragright" + ); + } + + private _isHighlightState(state: string): boolean { + return ( + state === "highlightgray" || + state === "highlightinput" || + state === "highlightoutput" || + state === "highlightargs" + ); + } + + private _getState(id: string) { + return this._graph.getElementState(id) as TreeNodeState[]; + } + + private _setState(id: string, states: TreeNodeState[]) { + this._graph.setElementState(id, states); + } + + private _clearDragState(id: string) { + const states = this._getState(id).filter((v) => !this._isDragState(v)); + this._setState(id, states); + } + + private _onDragStart(e: IG6PointerEvent) { + const { target } = e; + const states = this._getState(target.id); + this._setState(target.id, ["dragsrc", ...states]); + this._dragId = target.id; + console.log("drag start", target.id); + } + + private _onDragEnd(e: IG6PointerEvent) { + if (!this._dragId) { + return; + } + if (e.target.id !== this._dragId) { + console.warn("cancel drag", this._dragId, e.target.id); + this._clearDragState(this._dragId); + } + const { target } = e; + this._clearDragState(target.id); + this._dragId = undefined; + console.log("drag end", target.id); + } + + private _onDragEnter(e: IG6PointerEvent) { + const { target } = e; + if (target.id !== this._dragId) { + this._dropId = target.id; + } + } + + private _onDragLeave(e: IG6PointerEvent) { + const { target } = e; + if (target.id !== this._dragId) { + this._clearDragState(target.id); + this._dropId = undefined; + } + } + + private _onDrag(e: IG6PointerEvent) { + if (!this._dropId) { + return; + } + const id = this._dropId; + const pos = this._graph.getElementPosition(id); + const data = this._graph.getNodeData(id).data as unknown as NodeData; + const [w, h] = data.size!; + const x = e.canvas.x - pos[0] + w / 2; + const y = e.canvas.y - pos[1] + h / 2; + const states = this._getState(id); + let dragto: TreeNodeState | undefined; + if (x > w / 2) { + dragto = "dragright"; + } else if (y > h / 2) { + dragto = "dragdown"; + } else if (y < h / 2) { + dragto = "dragup"; + } + if (dragto && !states.includes(dragto)) { + // console.log(`drag node: drop=${id} dropto=${dragto}`, states); + this._setState(id, [dragto, ...states.filter((v) => !this._isDragState(v))]); + } + } + + private async _onDrop(e: IG6PointerEvent) { + const srcId = this._dragId!; + const dstId = e.target.id; + + this._dragId = undefined; + this._dropId = undefined; + + const dstStates = this._getState(e.target.id); + const dragto: TreeNodeState = dstStates.find((v) => this._isDragState(v))!; + + this._clearDragState(srcId); + this._clearDragState(dstId); + + if (srcId === e.target.id) { + console.log("drop same node"); + return; + } + + const ancestors = this._getAncestors(dstId); + if ( + ancestors.some((v) => v.id === srcId) || + ((dragto === "dragdown" || dragto === "dragup") && dstId === "1") + ) { + message.error(i18n.t("node.dropDenied")); + return; + } + + if (this._isSubtreeNode(dstId)) { + message.error(i18n.t("node.editSubtreeDenied")); + return; + } + + console.log(`drop node: drag=${srcId} target=${dstId} dropto=${dragto}`); + + if (e.originalEvent instanceof DragEvent) { + // const dragEvent = e.originalEvent as DragEvent; + // const exploreFile = dragEvent.dataTransfer?.getData("explore-file"); + // const exploreNode = dragEvent.dataTransfer?.getData("explore-node"); + // const dstData = findDataById(destNode.getID()); + // if (exploreNode) { + // const newTreeData: TreeGraphData = createTreeData( + // { + // id: editor.autoId++, + // name: exploreNode, + // }, + // dstData.id + // ); + // dstData.children ||= []; + // dstData.children.push(newTreeData); + // refreshItem(dstData); + // srcNodeId = newTreeData.id; + // } else if (exploreFile && exploreFile !== editor.path) { + // const newTreeData: TreeGraphData = createTreeData( + // { + // id: editor.autoId++, + // name: "unknow", + // path: workspace.relative(exploreFile), + // }, + // dstData.id + // ); + // dstData.children ||= []; + // dstData.children.push(newTreeData); + // refreshItem(dstData); + // srcNodeId = newTreeData.id; + // editor.autoId = b3util.refreshTreeDataId(newTreeData, Number(srcNodeId)); + // } + } + + const root = this._nodeToData("1"); + + const srcParentId = this._graph.getParentData(srcId, "tree")?.id; + const dstParentId = this._graph.getParentData(dstId, "tree")?.id; + + let srcData: NodeData | undefined; + let dstData: NodeData | undefined; + let srcParentData: NodeData | undefined; + let dstParentData: NodeData | undefined; + + b3util.dfs(root, (node) => { + if (node.id === srcId) { + srcData = node; + } + if (node.id === dstId) { + dstData = node; + } + if (node.id === srcParentId) { + srcParentData = node; + } + if (node.id === dstParentId) { + dstParentData = node; + } + }); + + assert(srcData, srcId); + assert(dstData, dstId); + assert(srcParentData, srcParentId); + + if (dragto === "dragright") { + srcParentData.children?.remove(srcData); + dstData.children ||= []; + dstData.children.push(srcData); + } else if (dragto === "dragup") { + assert(dstParentData, dstParentId); + srcParentData.children?.remove(srcData); + const idx = dstParentData.children!.findIndex((v) => v.id === dstId); + dstParentData.children?.insertAt(idx, srcData); + } else if (dragto === "dragdown") { + assert(dstParentData, dstParentId); + srcParentData.children?.remove(srcData); + const idx = dstParentData.children!.findIndex((v) => v.id === dstId); + dstParentData.children?.insertAt(idx + 1, srcData); + } + await this._update({ ...this.data, root }, false); + this._storeHistory(); + } + + copyNode() { + if (this._selectedId) { + const node = this._graph.getNodeData(this._selectedId); + if (node) { + const data = node.data as unknown as NodeData; + const str = JSON.stringify(b3util.createNode(data)); + clipboard.writeText(str); + } + } + } + + async pasteNode() { + if (!this._selectedId) { + message.error(i18n.t("node.noNodeSelected")); + return; + } + + if (this._isSubtreeNode(this._selectedId)) { + message.error(i18n.t("node.editSubtreeDenied")); + return; + } + + try { + const str = clipboard.readText(); + if (!str || str === "") { + return; + } + console.debug("parse node:", str); + + const root = this._nodeToData("1"); + let dstData: NodeData | undefined; + b3util.dfs(root, (node) => { + if (node.id === this._selectedId) { + dstData = node; + } + }); + + assert(dstData, this._selectedId); + dstData.children ||= []; + dstData.children.push(JSON.parse(str) as NodeData); + this.selectNode(null); + await this._update({ ...this.data, root }); + this._storeHistory(); + } catch (error) { + message.error(i18n.t("node.pasteDataError")); + console.log(error); + } + } + + async replaceNode() { + if (!this._selectedId) { + message.error(i18n.t("node.noNodeSelected")); + return; + } + + if (this._isSubtreeNode(this._selectedId)) { + message.error(i18n.t("node.editSubtreeDenied")); + return; + } + + try { + const str = clipboard.readText(); + if (!str || str === "") { + return; + } + + const root = this._nodeToData("1"); + let dstData: NodeData | undefined; + b3util.dfs(root, (node) => { + if (node.id === this._selectedId) { + dstData = node; + } + }); + + assert(dstData, this._selectedId); + Object.keys(dstData).forEach((k) => delete (dstData as unknown as ObjectType)[k]); + Object.assign(dstData, JSON.parse(str)); + this.selectNode(null); + await this._update({ ...this.data, root }); + this._storeHistory(); + } catch (error) { + message.error(i18n.t("node.pasteDataError")); + console.log(error); + } + } + + async createNode() { + if (!this._selectedId) { + message.error(i18n.t("node.noNodeSelected")); + return; + } + + if (this._isSubtreeNode(this._selectedId)) { + message.error(i18n.t("node.editSubtreeDenied")); + return; + } + + const root = this._nodeToData("1"); + let dstData: NodeData | undefined; + b3util.dfs(root, (node) => { + if (node.id === this._selectedId) { + dstData = node; + } + }); + + assert(dstData, this._selectedId); + dstData.children ||= []; + dstData.children.push({ id: "", name: "unknow" }); + await this._update({ ...this.data, root }); + this._storeHistory(); + } + + async deleteNode() { + if (!this._selectedId) { + return; + } + + if (this._selectedId === "1") { + message.error(i18n.t("node.deleteRootNodeDenied")); + return; + } + + const subtreeRoot = this._getAncestors(this._selectedId) + .reverse() + .find((v) => (v.data as unknown as NodeData)?.path); + + if (subtreeRoot && subtreeRoot.id !== this._selectedId) { + message.error(i18n.t("node.editSubtreeDenied")); + return; + } + + const root = this._nodeToData("1"); + const parentId = this._findParent(this._selectedId)?.id; + b3util.dfs(root, (n) => { + if (n.id === parentId) { + n.children = n.children?.filter((v) => v.id !== this._selectedId); + } + }); + this.selectNode(null); + await this._update({ ...this.data, root }); + this._storeHistory(); + } + + private _isSubtreeUpdated(data: NodeData) { + let updated = false; + b3util.dfs(data, (node) => { + if (node.path && b3util.files[node.path] !== node.mtime) { + updated = true; + } + }); + return updated; + } + + async refreshSubtree() { + if (this._isSubtreeUpdated(this.data.root)) { + this.selectNode(null); + await this.refresh(); + this._storeHistory(); + } + } + + async save() { + if (b3util.isNewVersion(this.data.version)) { + message.error(i18n.t("alertNewVersion", { version: this.data.version }), 6); + return; + } + await this._update({ ...this.data, root: this._nodeToData("1") }); + writeTree(this.editor.path, { + ...this.data, + root: b3util.createNode(this.data.root), + }); + workspace.updateFileMeta(this.editor); + } + + editSubtree() { + if (!this._selectedId) { + message.error(i18n.t("node.noNodeSelected")); + return; + } + + const node = this._findSubtreeRoot(this._selectedId); + const data = node?.data as unknown as NodeData | undefined; + if (data?.path) { + const path = `${workspace.workdir}/${data.path}`; + workspace.open(path, (Number(this._selectedId) - Number(data.id) + 1).toString()); + } + } + + async saveAsSubtree() { + if (!this._selectedId) { + message.error(i18n.t("node.noNodeSelected")); + return; + } + + if (this._selectedId === "1") { + message.error(i18n.t("node.subtreeSaveRootError")); + return; + } + + if (this._isSubtreeNode(this._selectedId)) { + message.error(i18n.t("node.editSubtreeDenied")); + return; + } + + const ret = await dialog.showSaveDialog({ + defaultPath: workspace.workdir, + properties: ["showOverwriteConfirmation"], + filters: [{ name: "Json", extensions: ["json"] }], + }); + + if (ret.canceled) { + return; + } + + const subpath = ret.filePath.replaceAll(Path.sep, "/"); + if (subpath.indexOf(workspace.workdir) === -1) { + message.error(i18n.t("node.subtreePathError")); + return; + } + + const node = this._graph.getNodeData(this._selectedId); + const data = node.data as unknown as NodeData; + const subroot = b3util.createFileData(data); + const subtreeModel = { + name: Path.basenameWithoutExt(subpath), + root: subroot, + desc: data.desc, + } as TreeData; + fs.writeFileSync(subpath, JSON.stringify(subtreeModel, null, 2)); + data.path = workspace.relative(subpath); + await this.refresh(); + this._storeHistory(); + } +} diff --git a/src/components/inspector.tsx b/src/components/inspector.tsx index bef5bc1..f619b2b 100644 --- a/src/components/inspector.tsx +++ b/src/components/inspector.tsx @@ -29,7 +29,7 @@ import { ExpressionEvaluator } from "../behavior3/src/behavior3"; import { EditNode, EditTree, useWorkspace } from "../contexts/workspace-context"; import { hasArgOptions, - ImportDef, + ImportDecl, isBoolType, isExprType, isFloatType, @@ -37,9 +37,8 @@ import { isJsonType, isStringType, NodeArg, - NodeModel, - TreeGraphData, - VarDef, + NodeData, + VarDecl, } from "../misc/b3type"; import { checkNodeArgValue, @@ -47,12 +46,12 @@ import { getNodeArgRawType, isNodeArgArray, isNodeArgOptional, + isValidChildren, isValidVariableName, isVariadic, parseExpr, - usingGroups, - usingVars, } from "../misc/b3util"; +import { message } from "../misc/hooks"; import i18n from "../misc/i18n"; import { Hotkey, isMacos } from "../misc/keys"; import { mergeClassNames } from "../misc/util"; @@ -61,7 +60,7 @@ interface OptionType extends DefaultOptionType { value: string; } -interface VarItem extends VarDef { +interface VarItem extends VarDecl { count?: number; } @@ -69,11 +68,11 @@ interface VarItemProps { name: number; disabled?: boolean; value?: VarItem; - onChange?: (vardef: VarItem) => void; + onChange?: (value: VarItem) => void; onRemove?: (name: number | number[]) => void; } -const VarDefItem: FC = ({ name, onChange, onRemove, disabled, ...props }) => { +const VarDeclItem: FC = ({ name, onChange, onRemove, disabled, ...props }) => { const { t } = useTranslation(); const form = useFormInstance(); const [value, setValue] = useState(props.value ?? { name: "", desc: "" }); @@ -152,6 +151,7 @@ const TreeInspector: FC = () => { relative: state.relative, open: state.open, workdir: state.workdir, + usingVars: state.usingVars, })) ); const { t } = useTranslation(); @@ -160,7 +160,7 @@ const TreeInspector: FC = () => { // using count const usingCount: Record = useMemo(() => { const count: Record = {}; - const collect = (node: TreeGraphData) => { + const collect = (node: NodeData) => { const def = workspace.nodeDefs.get(node.name); if (def.input) { node.input?.forEach((v) => { @@ -195,7 +195,7 @@ const TreeInspector: FC = () => { }; collect(workspace.editingTree.root); return count; - }, [workspace.editingTree, workspace.nodeDefs]); + }, [workspace.editingTree, workspace.nodeDefs, workspace.usingVars]); // auto complete for subtree const subtreeOptions = useMemo(() => { @@ -218,11 +218,11 @@ const TreeInspector: FC = () => { form.setFieldValue("name", workspace.editingTree.name); form.setFieldValue("desc", workspace.editingTree.desc); form.setFieldValue("export", workspace.editingTree.export !== false); - form.setFieldValue("firstid", workspace.editingTree.firstid); + form.setFieldValue("prefix", workspace.editingTree.prefix); form.setFieldValue("group", workspace.editingTree.group); form.setFieldValue( - "declvar", - workspace.editingTree.declvar.map((v) => ({ + "vars", + workspace.editingTree.vars.map((v) => ({ name: v.name, desc: v.desc, count: usingCount[v.name] ?? 0, @@ -258,16 +258,16 @@ const TreeInspector: FC = () => { name: values.name, desc: values.desc, export: values.export, - firstid: Number(values.firstid), + prefix: values.prefix, group: ((values.group ?? []) as string[]).filter((g) => g).sort((a, b) => a.localeCompare(b)), - declvar: (values.declvar as VarDef[]) + vars: (values.vars as VarDecl[]) .filter((v) => v && v.name) .map((v) => ({ name: v.name, desc: v.desc, })) .sort((a, b) => a.name.localeCompare(b.name)), - import: (values.import as ImportDef[]) + import: (values.import as ImportDecl[]) .filter((v) => v && v.path) .sort((a, b) => a.path.localeCompare(b.path)) .map((v) => ({ @@ -299,8 +299,8 @@ const TreeInspector: FC = () => {