diff --git a/apps/web/README.md b/apps/web/README.md index 5f248d6..1cb9521 100644 --- a/apps/web/README.md +++ b/apps/web/README.md @@ -1,5 +1,7 @@ # react-mobx-starter +todo: https://reactflow.dev/docs/guides/state-management/ + ## dev ```bash diff --git a/apps/web/package.json b/apps/web/package.json index f784b68..12eccd3 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -22,12 +22,13 @@ "mobx-react-lite": "^3.4.0", "mobx-router": "1.0.0", "mobx-state-tree": "5.1.5", + "mobxtypes": "workspace:*", "mst-middlewares": "5.1.5", "react": "18.1.0", "react-dom": "18.1.0", + "react-flow-renderer": "^10.3.8", "react-i18next": "^11.16.9", "react-icons": "^4.4.0", - "mobxtypes": "workspace:*", "shared-types": "workspace:*" }, "devDependencies": { @@ -44,8 +45,8 @@ "sass": "1.52.1", "tailwindcss": "^3.0.24", "tsconfig": "workspace:*", - "vite": "2.9.9", - "typescript": "^4.7.2" + "typescript": "^4.7.2", + "vite": "2.9.9" }, "description": "", "main": "vite.config.js", diff --git a/apps/web/src/models/root.ts b/apps/web/src/models/root.ts index 8deca84..c71baed 100644 --- a/apps/web/src/models/root.ts +++ b/apps/web/src/models/root.ts @@ -3,11 +3,13 @@ import { Instance, types } from 'mobx-state-tree' import { createContext, useContext } from 'react' import { NotFoundPage } from '../pages/404/model' import { CatsPage } from '../pages/cats/model' +import { FlowPage } from '../pages/flow/model' import ApiStore, { APIType } from './api' const PagesStore = types.model('Pages', { notFound: types.optional(NotFoundPage, () => NotFoundPage.create()), cats: types.optional(CatsPage, () => CatsPage.create()), + flow: types.optional(FlowPage, () => FlowPage.create()), }) export const RealRootModel = types.model('Root', { diff --git a/apps/web/src/pages/flow/model.ts b/apps/web/src/pages/flow/model.ts new file mode 100644 index 0000000..3f78c8f --- /dev/null +++ b/apps/web/src/pages/flow/model.ts @@ -0,0 +1,138 @@ +import { types, cast } from 'mobx-state-tree' +import { getRootStore } from '../../models/helpers' +import ReactFlow, { + MiniMap, + Controls, + useNodesState, + useEdgesState, + applyEdgeChanges, + applyNodeChanges, + NodeChange, + EdgeChange, + Node, + Connection, +} from 'react-flow-renderer' + +export const FlowPage = types + .model('CatsPage', { + data: types.optional( + types.model({ + test: types.optional(types.string, ''), + }), + {}, + ), + nnodes: types.frozen(), + nodes: types.array( + types.model({ + id: types.string, + data: types.model({ + label: types.string, + }), + position: types.model({ + x: types.number, + y: types.number, + }), + }), + ), + edges: types.array( + types.model({ + id: types.string, + source: types.string, + target: types.string, + }), + ), + }) + .actions((self) => ({ + // INITIALIZATION + initialisePage() { + self.data.test = 'test' + self.nodes = cast([ + { id: '1', data: { label: 'Node yay' }, position: { x: 100, y: 100 } }, + { id: '2', data: { label: 'Node 2' }, position: { x: 100, y: 200 } }, + ]) + self.edges = cast([{ id: 'e1-2', source: '1', target: '2' }]) + }, + + updateFirstNode() { + self.nodes[0].position.x += 50 + }, + + onNodesChange: (changes: NodeChange[]) => { + const updatedNodes = applyNodeChanges(changes, self.nodes) + for (const updatedNode of updatedNodes) { + for (const node of self.nodes) { + if (updatedNode.id === node.id) { + // console.log(`changing node ${node.id}`) + node.position.x = updatedNode.position.x + node.position.y = updatedNode.position.y + } + } + } + // self.nodes.push(...updatedNodes) + }, + + onEdgeChange: (changes: any[]) => { + for (const edge of self.edges) { + if (edge.id === changes[0].id) { + self.edges.remove(edge) + return + } + } + }, + + onConnect: (connection: Connection) => { + // applyEdgeChanges() + self.edges.push({ + id: `${connection.source}-${connection.target}`, + source: String(connection.source), + target: String(connection.target), + }) + }, + + addNode: () => { + const ids: number[] = self.nodes.map((node) => Number(node.id)) + const maxId = Math.max(...ids) + const newId = String(maxId + 1) + self.nodes.push({ + id: newId, + data: { + label: `Node ${newId}`, + }, + position: { + x: 50, + y: 50, + }, + }) + }, + + removeEdge: (id: string) => { + for (const edge of self.edges) { + if (edge.id === id) { + self.edges.remove(edge) + return + } + } + }, + })) + .views((self) => ({ + pageModelFetching() { + return true + }, + + getNodes() { + // console.log(JSON.stringify(self.nodes)) + // return self.nodes + return JSON.parse(JSON.stringify(self.nodes)) + }, + + getEdges() { + // return JSON.parse(JSON.stringify(self.edges)) + return self.edges.map((edge) => { + return { + id: edge.id, + source: edge.source, + target: edge.target, + } + }) + }, + })) diff --git a/apps/web/src/pages/flow/page.tsx b/apps/web/src/pages/flow/page.tsx new file mode 100644 index 0000000..b9558f4 --- /dev/null +++ b/apps/web/src/pages/flow/page.tsx @@ -0,0 +1,51 @@ +import { observer } from 'mobx-react-lite' +import { useMst } from '../../models/root' +import ReactFlow, { + MiniMap, + Controls, + useNodesState, + useEdgesState, + applyEdgeChanges, + applyNodeChanges, +} from 'react-flow-renderer' +import { Button } from '@chakra-ui/react' + +const flowKey = 'example-flow' + +const getNodeId = () => `randomnode_${+new Date()}` + +const initialNodes = [ + { id: '1', data: { label: 'Node 1' }, position: { x: 100, y: 100 } }, + { id: '2', data: { label: 'Node 2' }, position: { x: 100, y: 200 } }, +] + +const initialEdges = [{ id: 'e1-2', source: '1', target: '2' }] + +export default observer(() => { + const { + root: { + pages: { flow: page }, + }, + } = useMst() + + return ( + <> + + { + page.onNodesChange(event) + // applyNodeChanges(event, page.nodes) + }} + onEdgesChange={(event: any) => page.onEdgeChange(event)} + // onConnect={onConnect} + onConnect={(event) => page.onConnect(event)} + > + + + + + ) +}) diff --git a/apps/web/src/routes.tsx b/apps/web/src/routes.tsx index 87dadcf..f1996b9 100644 --- a/apps/web/src/routes.tsx +++ b/apps/web/src/routes.tsx @@ -2,13 +2,14 @@ import { Route } from 'mobx-router' import { RootStore } from './models/root' import NotFoundPage from './pages/404/page' import CatsPage from './pages/cats/page' +import FlowPage from './pages/flow/page' export default { home: new Route({ path: '/', - component: , + component: , onEnter(_route, _parameters, { root: { pages } }) { - pages.cats.initialisePage() + pages.flow.initialisePage() }, }), @@ -20,6 +21,14 @@ export default { }, }), + flow: new Route({ + path: '/flow', + component: , + onEnter(_route, _parameters, { root: { pages } }) { + pages.flow.initialisePage() + }, + }), + notFound: new Route({ path: '/404', component: , diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba3c211..f641c00 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,6 +37,7 @@ importers: prettier: 2.6.2 react: 18.1.0 react-dom: 18.1.0 + react-flow-renderer: ^10.3.8 react-i18next: ^11.16.9 react-icons: ^4.4.0 rollup-plugin-analyzer: 4.0.0 @@ -63,6 +64,7 @@ importers: mst-middlewares: 5.1.5_mobx-state-tree@5.1.5 react: 18.1.0 react-dom: 18.1.0_react@18.1.0 + react-flow-renderer: 10.3.8_ef5jwxihqo6n7gxfmzogljlgcm react-i18next: 11.16.9_mqft7h2hndup6oyqvtfsfspurq react-icons: 4.4.0_react@18.1.0 shared-types: link:../../packages/shared-types @@ -195,7 +197,6 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.1.1 '@jridgewell/trace-mapping': 0.3.13 - dev: true /@babel/code-frame/7.12.11: resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} @@ -212,7 +213,6 @@ packages: /@babel/compat-data/7.17.10: resolution: {integrity: sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==} engines: {node: '>=6.9.0'} - dev: true /@babel/core/7.18.2: resolution: {integrity: sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ==} @@ -235,7 +235,6 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: true /@babel/generator/7.18.2: resolution: {integrity: sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==} @@ -244,7 +243,6 @@ packages: '@babel/types': 7.18.4 '@jridgewell/gen-mapping': 0.3.1 jsesc: 2.5.2 - dev: true /@babel/helper-annotate-as-pure/7.16.7: resolution: {integrity: sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==} @@ -264,12 +262,10 @@ packages: '@babel/helper-validator-option': 7.16.7 browserslist: 4.20.3 semver: 6.3.0 - dev: true /@babel/helper-environment-visitor/7.18.2: resolution: {integrity: sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-function-name/7.17.9: resolution: {integrity: sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==} @@ -277,14 +273,12 @@ packages: dependencies: '@babel/template': 7.16.7 '@babel/types': 7.18.4 - dev: true /@babel/helper-hoist-variables/7.16.7: resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.18.4 - dev: true /@babel/helper-module-imports/7.16.7: resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} @@ -306,7 +300,6 @@ packages: '@babel/types': 7.18.4 transitivePeerDependencies: - supports-color - dev: true /@babel/helper-plugin-utils/7.17.12: resolution: {integrity: sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==} @@ -317,14 +310,12 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.18.4 - dev: true /@babel/helper-split-export-declaration/7.16.7: resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.18.4 - dev: true /@babel/helper-validator-identifier/7.16.7: resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} @@ -333,7 +324,6 @@ packages: /@babel/helper-validator-option/7.16.7: resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==} engines: {node: '>=6.9.0'} - dev: true /@babel/helpers/7.18.2: resolution: {integrity: sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==} @@ -344,7 +334,6 @@ packages: '@babel/types': 7.18.4 transitivePeerDependencies: - supports-color - dev: true /@babel/highlight/7.17.12: resolution: {integrity: sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==} @@ -360,7 +349,6 @@ packages: hasBin: true dependencies: '@babel/types': 7.18.4 - dev: true /@babel/plugin-syntax-jsx/7.17.12_@babel+core@7.18.2: resolution: {integrity: sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==} @@ -429,7 +417,6 @@ packages: '@babel/code-frame': 7.16.7 '@babel/parser': 7.18.4 '@babel/types': 7.18.4 - dev: true /@babel/traverse/7.18.2: resolution: {integrity: sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA==} @@ -447,7 +434,6 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true /@babel/types/7.18.4: resolution: {integrity: sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==} @@ -1456,7 +1442,6 @@ packages: dependencies: '@jridgewell/set-array': 1.1.1 '@jridgewell/sourcemap-codec': 1.4.13 - dev: true /@jridgewell/gen-mapping/0.3.1: resolution: {integrity: sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==} @@ -1465,28 +1450,23 @@ packages: '@jridgewell/set-array': 1.1.1 '@jridgewell/sourcemap-codec': 1.4.13 '@jridgewell/trace-mapping': 0.3.13 - dev: true /@jridgewell/resolve-uri/3.0.7: resolution: {integrity: sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array/1.1.1: resolution: {integrity: sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/sourcemap-codec/1.4.13: resolution: {integrity: sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==} - dev: true /@jridgewell/trace-mapping/0.3.13: resolution: {integrity: sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==} dependencies: '@jridgewell/resolve-uri': 3.0.7 '@jridgewell/sourcemap-codec': 1.4.13 - dev: true /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -1777,7 +1757,6 @@ packages: escalade: 3.1.1 node-releases: 2.0.5 picocolors: 1.0.0 - dev: true /call-bind/1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} @@ -1797,7 +1776,6 @@ packages: /caniuse-lite/1.0.30001346: resolution: {integrity: sha512-q6ibZUO2t88QCIPayP/euuDREq+aMAxFE5S70PkrLh0iTDj/zEhgvJRKC2+CvXY6EWc6oQwUR48lL5vCW6jiXQ==} - dev: true /chalk/2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -1829,6 +1807,10 @@ packages: fsevents: 2.3.2 dev: true + /classcat/5.0.3: + resolution: {integrity: sha512-6dK2ke4VEJZOFx2ZfdDAl5OhEL8lvkl6EHF92IfRePfHxQTqir5NlcNVUv+2idjDqCX2NDc8m8YSAI5NI975ZQ==} + dev: false + /color-convert/1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -1898,6 +1880,71 @@ packages: /csstype/3.1.0: resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==} + /d3-color/3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + dev: false + + /d3-dispatch/3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + dev: false + + /d3-drag/3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + dev: false + + /d3-ease/3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + dev: false + + /d3-interpolate/3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + dependencies: + d3-color: 3.1.0 + dev: false + + /d3-selection/3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + dev: false + + /d3-timer/3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + dev: false + + /d3-transition/3.0.1_d3-selection@3.0.0: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + dev: false + + /d3-zoom/3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1_d3-selection@3.0.0 + dev: false + /debug/4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -1971,7 +2018,6 @@ packages: /electron-to-chromium/1.4.144: resolution: {integrity: sha512-R3RV3rU1xWwFJlSClVWDvARaOk6VUO/FubHLodIASDB3Mc2dzuWvNdfOgH9bwHUTqT79u92qw60NWfwUdzAqdg==} - dev: true /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2245,7 +2291,6 @@ packages: /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - dev: true /escape-string-regexp/1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} @@ -2612,7 +2657,6 @@ packages: /gensync/1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - dev: true /get-intrinsic/1.1.1: resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} @@ -2661,7 +2705,6 @@ packages: /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - dev: true /globals/13.15.0: resolution: {integrity: sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==} @@ -2913,7 +2956,6 @@ packages: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true - dev: true /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -2933,7 +2975,6 @@ packages: resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} engines: {node: '>=6'} hasBin: true - dev: true /jsx-ast-utils/3.3.0: resolution: {integrity: sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==} @@ -3090,7 +3131,6 @@ packages: /node-releases/2.0.5: resolution: {integrity: sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==} - dev: true /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -3214,7 +3254,6 @@ packages: /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true /picomatch/2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -3357,6 +3396,23 @@ packages: resolution: {integrity: sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==} dev: false + /react-flow-renderer/10.3.8_ef5jwxihqo6n7gxfmzogljlgcm: + resolution: {integrity: sha512-owtDCSK6rATiZipew2OYSPPu2sd0VM/QCydN9S+ivrMVwR0vNSSwtsWKqJSq8DL5wXtIEed5gPi4yJqXJA7tLQ==} + engines: {node: '>=14'} + peerDependencies: + react: 16 || 17 || 18 + react-dom: 16 || 17 || 18 + dependencies: + '@babel/runtime': 7.18.3 + classcat: 5.0.3 + d3-drag: 3.0.0 + d3-selection: 3.0.0 + d3-zoom: 3.0.0 + react: 18.1.0 + react-dom: 18.1.0_react@18.1.0 + zustand: 3.7.2_react@18.1.0 + dev: false + /react-focus-lock/2.9.1_4mg53anm6bsgggist7tcqrzb4y: resolution: {integrity: sha512-pSWOQrUmiKLkffPO6BpMXN7SNKXMsuOakl652IBuALAu1esk+IcpJyM+ALcYzPTTFz1rD0R54aB9A4HuP5t1Wg==} peerDependencies: @@ -4045,3 +4101,15 @@ packages: /yaml/1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} + + /zustand/3.7.2_react@18.1.0: + resolution: {integrity: sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==} + engines: {node: '>=12.7.0'} + peerDependencies: + react: '>=16.8' + peerDependenciesMeta: + react: + optional: true + dependencies: + react: 18.1.0 + dev: false