Upgrade react-flow-renderer to version 10 (#4234)

This commit is contained in:
Jon Koops 2023-01-20 15:12:24 +01:00 committed by GitHub
parent 6c91556a1c
commit 7f8d4db15c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 705 additions and 270 deletions

View file

@ -72,7 +72,7 @@
"react-dom": "^17.0.2",
"react-dropzone": "^14.2.3",
"react-error-boundary": "^3.1.4",
"react-flow-renderer": "^9.7.4",
"react-flow-renderer": "^10.3.17",
"react-hook-form": "^6.15.8",
"react-hook-form-v7": "npm:react-hook-form@^7.35.1",
"react-i18next": "^12.0.0",

View file

@ -1,4 +1,4 @@
import { useState, MouseEvent as ReactMouseEvent } from "react";
import type AuthenticationExecutionInfoRepresentation from "@keycloak/keycloak-admin-client/lib/defs/authenticationExecutionInfoRepresentation";
import {
Drawer,
DrawerActions,
@ -8,25 +8,29 @@ import {
DrawerHead,
DrawerPanelContent,
} from "@patternfly/react-core";
import { MouseEvent as ReactMouseEvent, useMemo, useState } from "react";
import ReactFlow, {
Node,
Edge,
Elements,
Position,
removeElements,
MiniMap,
Controls,
Background,
isNode,
Controls,
Edge,
EdgeTypes,
MiniMap,
Node,
NodeMouseHandler,
NodeTypes,
Position,
ReactFlowInstance,
useEdgesState,
useNodesState,
} from "react-flow-renderer";
import { useUpdateEffect } from "../../utils/useUpdateEffect";
import type AuthenticationExecutionInfoRepresentation from "@keycloak/keycloak-admin-client/lib/defs/authenticationExecutionInfoRepresentation";
import type { ExecutionList, ExpandableExecution } from "../execution-model";
import { EndSubFlowNode, StartSubFlowNode } from "./diagram/SubFlowNode";
import { ConditionalNode } from "./diagram/ConditionalNode";
import { ButtonEdge } from "./diagram/ButtonEdge";
import { getLayoutedElements } from "./diagram/auto-layout";
import { providerConditionFilter } from "../FlowDetails";
import { getLayoutedEdges, getLayoutedNodes } from "./diagram/auto-layout";
import { ButtonEdge, ButtonEdges } from "./diagram/ButtonEdge";
import { ConditionalNode } from "./diagram/ConditionalNode";
import { EndSubFlowNode, StartSubFlowNode } from "./diagram/SubFlowNode";
import "./flow-diagram.css";
@ -34,7 +38,7 @@ type FlowDiagramProps = {
executionList: ExecutionList;
};
const createEdge = (fromNode: string, toNode: string) => ({
const createEdge = (fromNode: string, toNode: string): Edge => ({
id: `edge-${fromNode}-to-${toNode}`,
type: "buttonEdge",
source: fromNode,
@ -50,7 +54,7 @@ const createEdge = (fromNode: string, toNode: string) => ({
},
});
const createNode = (ex: ExpandableExecution) => {
const createNode = (ex: ExpandableExecution): Node => {
let nodeType: string | undefined = undefined;
if (ex.executionList) {
nodeType = "startSubFlow";
@ -68,50 +72,50 @@ const createNode = (ex: ExpandableExecution) => {
};
};
const renderParallelNodes = (
const renderParallelNodes = (execution: ExpandableExecution): Node[] => [
createNode(execution),
];
const renderParallelEdges = (
start: AuthenticationExecutionInfoRepresentation,
execution: ExpandableExecution,
end: AuthenticationExecutionInfoRepresentation
) => {
const elements: Elements = [];
elements.push(createNode(execution));
elements.push(createEdge(start.id!, execution.id!));
elements.push(createEdge(execution.id!, end.id!));
return elements;
};
): Edge[] => [
createEdge(start.id!, execution.id!),
createEdge(execution.id!, end.id!),
];
const renderSequentialNodes = (
const renderSequentialNodes = (execution: ExpandableExecution): Node[] => [
createNode(execution),
];
const renderSequentialEdges = (
start: AuthenticationExecutionInfoRepresentation,
execution: ExpandableExecution,
end: AuthenticationExecutionInfoRepresentation,
prefExecution: ExpandableExecution,
isFirst: boolean,
isLast: boolean
) => {
const elements: Elements = [];
elements.push(createNode(execution));
): Edge[] => {
const edges: Edge[] = [];
if (isFirst) {
elements.push(createEdge(start.id!, execution.id!));
edges.push(createEdge(start.id!, execution.id!));
} else {
elements.push(createEdge(prefExecution.id!, execution.id!));
edges.push(createEdge(prefExecution.id!, execution.id!));
}
if (isLast) {
elements.push(createEdge(execution.id!, end.id!));
edges.push(createEdge(execution.id!, end.id!));
}
return elements;
return edges;
};
const renderSubFlow = (
execution: ExpandableExecution,
start: AuthenticationExecutionInfoRepresentation,
end: AuthenticationExecutionInfoRepresentation,
prefExecution?: ExpandableExecution
) => {
const elements: Elements = [];
const renderSubFlowNodes = (execution: ExpandableExecution): Node[] => {
const nodes: Node[] = [];
elements.push({
nodes.push({
id: execution.id!,
type: "startSubFlow",
sourcePosition: Position.Right,
@ -119,8 +123,10 @@ const renderSubFlow = (
data: { label: execution.displayName! },
position: { x: 0, y: 0 },
});
const endSubFlowId = `flow-end-${execution.id}`;
elements.push({
nodes.push({
id: endSubFlowId,
type: "endSubFlow",
sourcePosition: Position.Right,
@ -128,7 +134,21 @@ const renderSubFlow = (
data: { label: execution.displayName! },
position: { x: 0, y: 0 },
});
elements.push(
return nodes.concat(renderFlowNodes(execution.executionList || []));
};
const renderSubFlowEdges = (
execution: ExpandableExecution,
start: AuthenticationExecutionInfoRepresentation,
end: AuthenticationExecutionInfoRepresentation,
prefExecution?: ExpandableExecution
): Edge[] => {
const edges: Edge[] = [];
const endSubFlowId = `flow-end-${execution.id}`;
edges.push(
createEdge(
prefExecution && prefExecution.requirement !== "ALTERNATIVE"
? prefExecution.id!
@ -136,38 +156,60 @@ const renderSubFlow = (
execution.id!
)
);
elements.push(createEdge(endSubFlowId, end.id!));
edges.push(createEdge(endSubFlowId, end.id!));
return elements.concat(
renderFlow(execution, execution.executionList || [], {
return edges.concat(
renderFlowEdges(execution, execution.executionList || [], {
...execution,
id: endSubFlowId,
})
);
};
const renderFlow = (
const renderFlowNodes = (executionList: ExpandableExecution[]): Node[] => {
let elements: Node[] = [];
for (let index = 0; index < executionList.length; index++) {
const execution = executionList[index];
if (execution.executionList) {
elements = elements.concat(renderSubFlowNodes(execution));
} else {
if (
execution.requirement === "ALTERNATIVE" ||
execution.requirement === "DISABLED"
) {
elements = elements.concat(renderParallelNodes(execution));
} else {
elements = elements.concat(renderSequentialNodes(execution));
}
}
}
return elements;
};
const renderFlowEdges = (
start: AuthenticationExecutionInfoRepresentation,
executionList: ExpandableExecution[],
end: AuthenticationExecutionInfoRepresentation
) => {
let elements: Elements = [];
): Edge[] => {
let elements: Edge[] = [];
for (let index = 0; index < executionList.length; index++) {
const execution = executionList[index];
if (execution.executionList) {
elements = elements.concat(
renderSubFlow(execution, start, end, executionList[index - 1])
renderSubFlowEdges(execution, start, end, executionList[index - 1])
);
} else {
if (
execution.requirement === "ALTERNATIVE" ||
execution.requirement === "DISABLED"
) {
elements = elements.concat(renderParallelNodes(start, execution, end));
elements = elements.concat(renderParallelEdges(start, execution, end));
} else {
elements = elements.concat(
renderSequentialNodes(
renderSequentialEdges(
start,
execution,
end,
@ -183,10 +225,18 @@ const renderFlow = (
return elements;
};
export const FlowDiagram = ({
executionList: { expandableList },
}: FlowDiagramProps) => {
let elements: Elements = [
const nodeTypes: NodeTypes = {
conditional: ConditionalNode,
startSubFlow: StartSubFlowNode,
endSubFlow: EndSubFlowNode,
};
const edgeTypes: ButtonEdges = {
buttonEdge: ButtonEdge,
};
function renderNodes(expandableList: ExpandableExecution[]) {
return getLayoutedNodes([
{
id: "start",
sourcePosition: Position.Right,
@ -203,27 +253,39 @@ export const FlowDiagram = ({
position: { x: 0, y: 0 },
className: "keycloak__authentication__output_node",
},
];
...renderFlowNodes(expandableList),
]);
}
elements = elements.concat(
renderFlow({ id: "start" }, expandableList, { id: "end" })
function renderEdges(expandableList: ExpandableExecution[]): Edge[] {
return getLayoutedEdges(
renderFlowEdges({ id: "start" }, expandableList, {
id: "end",
})
);
}
const onLoad = (reactFlowInstance: { fitView: () => void }) =>
export const FlowDiagram = ({
executionList: { expandableList },
}: FlowDiagramProps) => {
const [expandDrawer, setExpandDrawer] = useState(false);
const initialNodes = useMemo(() => renderNodes(expandableList), []);
const initialEdges = useMemo(() => renderEdges(expandableList), []);
const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes);
const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges);
useUpdateEffect(() => {
setNodes(renderNodes(expandableList));
setEdges(renderEdges(expandableList));
}, [expandableList]);
const onInit = (reactFlowInstance: ReactFlowInstance) =>
reactFlowInstance.fitView();
const [layoutedElements, setElements] = useState(
getLayoutedElements(elements)
);
const [expandDrawer, setExpandDrawer] = useState(false);
const onElementClick = (_event: ReactMouseEvent, element: Node | Edge) => {
if (isNode(element)) setExpandDrawer(!expandDrawer);
const onNodeClick: NodeMouseHandler = () => {
setExpandDrawer(!expandDrawer);
};
const onElementsRemove = (elementsToRemove: Elements) =>
setElements((els) => removeElements(elementsToRemove, els));
return (
<Drawer isExpanded={expandDrawer} onExpand={() => setExpandDrawer(true)}>
<DrawerContent
@ -240,18 +302,14 @@ export const FlowDiagram = ({
>
<DrawerContentBody>
<ReactFlow
nodeTypes={{
conditional: ConditionalNode,
startSubFlow: StartSubFlowNode,
endSubFlow: EndSubFlowNode,
}}
edgeTypes={{
buttonEdge: ButtonEdge,
}}
onElementClick={onElementClick}
onElementsRemove={onElementsRemove}
onLoad={onLoad}
elements={layoutedElements}
nodes={nodes}
edges={edges}
onNodesChange={onNodesChange}
onEdgesChange={onEdgesChange}
onInit={onInit}
nodeTypes={nodeTypes}
edgeTypes={edgeTypes as EdgeTypes}
onNodeClick={onNodeClick}
nodesConnectable={false}
>
<MiniMap />

View file

@ -1,25 +1,20 @@
import { CSSProperties, MouseEvent as ReactMouseEvent } from "react";
import { PlusIcon } from "@patternfly/react-icons";
import { ComponentType, MouseEvent as ReactMouseEvent } from "react";
import {
ArrowHeadType,
EdgeProps,
getBezierPath,
getEdgeCenter,
getMarkerEnd,
Position,
MarkerType,
} from "react-flow-renderer";
type ButtonEdgeProps = {
id: string;
sourceX: number;
sourceY: number;
sourcePosition?: Position;
targetX: number;
targetY: number;
targetPosition?: Position;
style: CSSProperties;
arrowHeadType?: ArrowHeadType;
markerEndId: string;
selected: boolean;
export type ButtonEdges = {
[key: string]: ComponentType<ButtonEdgeProps>;
};
export type ButtonEdgeProps = EdgeProps & {
markerType?: MarkerType;
markerEndId?: string;
data: {
onEdgeClick: (
evt: ReactMouseEvent<HTMLButtonElement, MouseEvent>,
@ -39,7 +34,7 @@ export const ButtonEdge = ({
sourcePosition,
targetPosition,
style = {},
arrowHeadType,
markerType,
markerEndId,
selected,
data: { onEdgeClick },
@ -52,7 +47,7 @@ export const ButtonEdge = ({
targetY,
targetPosition,
});
const markerEnd = getMarkerEnd(arrowHeadType, markerEndId);
const markerEnd = getMarkerEnd(markerType, markerEndId);
const [edgeCenterX, edgeCenterY] = getEdgeCenter({
sourceX,
sourceY,

View file

@ -1,5 +1,5 @@
import { Elements, Position, isNode } from "react-flow-renderer";
import { graphlib, layout } from "dagre";
import { Edge, Node, Position } from "react-flow-renderer";
const dagreGraph = new graphlib.Graph();
dagreGraph.setDefaultEdgeLabel(() => ({}));
@ -7,35 +7,41 @@ dagreGraph.setDefaultEdgeLabel(() => ({}));
const nodeWidth = 130;
const nodeHeight = 28;
export const getLayoutedElements = (elements: Elements, direction = "LR") => {
export const getLayoutedNodes = (nodes: Node[], direction = "LR"): Node[] => {
const isHorizontal = direction === "LR";
dagreGraph.setGraph({ rankdir: direction });
elements.forEach((element) => {
if (isNode(element)) {
dagreGraph.setNode(element.id, {
width: nodeWidth,
height: nodeHeight,
});
} else {
dagreGraph.setEdge(element.source, element.target);
}
nodes.forEach((element) => {
dagreGraph.setNode(element.id, {
width: nodeWidth,
height: nodeHeight,
});
});
layout(dagreGraph);
return elements.map((element) => {
if (isNode(element)) {
const nodeWithPosition = dagreGraph.node(element.id);
element.targetPosition = isHorizontal ? Position.Left : Position.Top;
element.sourcePosition = isHorizontal ? Position.Right : Position.Bottom;
return nodes.map((node) => {
const nodeWithPosition = dagreGraph.node(node.id);
node.targetPosition = isHorizontal ? Position.Left : Position.Top;
node.sourcePosition = isHorizontal ? Position.Right : Position.Bottom;
element.position = {
x: nodeWithPosition.x - nodeWidth / 2 + Math.random() / 1000,
y: nodeWithPosition.y - nodeHeight / 2,
};
}
node.position = {
x: nodeWithPosition.x - nodeWidth / 2 + Math.random() / 1000,
y: nodeWithPosition.y - nodeHeight / 2,
};
return element;
return node;
});
};
export const getLayoutedEdges = (edges: Edge[], direction = "LR"): Edge[] => {
dagreGraph.setGraph({ rankdir: direction });
edges.forEach((element) => {
dagreGraph.setEdge(element.source, element.target);
});
layout(dagreGraph);
return edges;
};

View file

@ -0,0 +1,16 @@
import { DependencyList, EffectCallback, useEffect, useRef } from "react";
/**
* A `useEffect` hook that only triggers on updates, not on initial render.
*/
export function useUpdateEffect(effect: EffectCallback, deps?: DependencyList) {
const didMount = useRef(false);
useEffect(() => {
if (didMount.current) {
return effect();
}
didMount.current = true;
}, deps);
}

658
package-lock.json generated
View file

@ -151,7 +151,7 @@
"react-dom": "^17.0.2",
"react-dropzone": "^14.2.3",
"react-error-boundary": "^3.1.4",
"react-flow-renderer": "^9.7.4",
"react-flow-renderer": "^10.3.17",
"react-hook-form": "^6.15.8",
"react-hook-form-v7": "npm:react-hook-form@^7.35.1",
"react-i18next": "^12.0.0",
@ -4444,6 +4444,228 @@
"@types/chai": "*"
}
},
"node_modules/@types/d3": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.0.tgz",
"integrity": "sha512-jIfNVK0ZlxcuRDKtRS/SypEyOQ6UHaFQBKv032X45VvxSJ6Yi5G9behy9h6tNTHTDGh5Vq+KbmBjUWLgY4meCA==",
"dependencies": {
"@types/d3-array": "*",
"@types/d3-axis": "*",
"@types/d3-brush": "*",
"@types/d3-chord": "*",
"@types/d3-color": "*",
"@types/d3-contour": "*",
"@types/d3-delaunay": "*",
"@types/d3-dispatch": "*",
"@types/d3-drag": "*",
"@types/d3-dsv": "*",
"@types/d3-ease": "*",
"@types/d3-fetch": "*",
"@types/d3-force": "*",
"@types/d3-format": "*",
"@types/d3-geo": "*",
"@types/d3-hierarchy": "*",
"@types/d3-interpolate": "*",
"@types/d3-path": "*",
"@types/d3-polygon": "*",
"@types/d3-quadtree": "*",
"@types/d3-random": "*",
"@types/d3-scale": "*",
"@types/d3-scale-chromatic": "*",
"@types/d3-selection": "*",
"@types/d3-shape": "*",
"@types/d3-time": "*",
"@types/d3-time-format": "*",
"@types/d3-timer": "*",
"@types/d3-transition": "*",
"@types/d3-zoom": "*"
}
},
"node_modules/@types/d3-array": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.4.tgz",
"integrity": "sha512-nwvEkG9vYOc0Ic7G7kwgviY4AQlTfYGIZ0fqB7CQHXGyYM6nO7kJh5EguSNA3jfh4rq7Sb7eMVq8isuvg2/miQ=="
},
"node_modules/@types/d3-axis": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.2.tgz",
"integrity": "sha512-uGC7DBh0TZrU/LY43Fd8Qr+2ja1FKmH07q2FoZFHo1eYl8aj87GhfVoY1saJVJiq24rp1+wpI6BvQJMKgQm8oA==",
"dependencies": {
"@types/d3-selection": "*"
}
},
"node_modules/@types/d3-brush": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.2.tgz",
"integrity": "sha512-2TEm8KzUG3N7z0TrSKPmbxByBx54M+S9lHoP2J55QuLU0VSQ9mE96EJSAOVNEqd1bbynMjeTS9VHmz8/bSw8rA==",
"dependencies": {
"@types/d3-selection": "*"
}
},
"node_modules/@types/d3-chord": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.2.tgz",
"integrity": "sha512-abT/iLHD3sGZwqMTX1TYCMEulr+wBd0SzyOQnjYNLp7sngdOHYtNkMRI5v3w5thoN+BWtlHVDx2Osvq6fxhZWw=="
},
"node_modules/@types/d3-color": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz",
"integrity": "sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA=="
},
"node_modules/@types/d3-contour": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.2.tgz",
"integrity": "sha512-k6/bGDoAGJZnZWaKzeB+9glgXCYGvh6YlluxzBREiVo8f/X2vpTEdgPy9DN7Z2i42PZOZ4JDhVdlTSTSkLDPlQ==",
"dependencies": {
"@types/d3-array": "*",
"@types/geojson": "*"
}
},
"node_modules/@types/d3-delaunay": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.1.tgz",
"integrity": "sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ=="
},
"node_modules/@types/d3-dispatch": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.2.tgz",
"integrity": "sha512-rxN6sHUXEZYCKV05MEh4z4WpPSqIw+aP7n9ZN6WYAAvZoEAghEK1WeVZMZcHRBwyaKflU43PCUAJNjFxCzPDjg=="
},
"node_modules/@types/d3-drag": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.2.tgz",
"integrity": "sha512-qmODKEDvyKWVHcWWCOVcuVcOwikLVsyc4q4EBJMREsoQnR2Qoc2cZQUyFUPgO9q4S3qdSqJKBsuefv+h0Qy+tw==",
"dependencies": {
"@types/d3-selection": "*"
}
},
"node_modules/@types/d3-dsv": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.1.tgz",
"integrity": "sha512-76pBHCMTvPLt44wFOieouXcGXWOF0AJCceUvaFkxSZEu4VDUdv93JfpMa6VGNFs01FHfuP4a5Ou68eRG1KBfTw=="
},
"node_modules/@types/d3-ease": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz",
"integrity": "sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA=="
},
"node_modules/@types/d3-fetch": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.2.tgz",
"integrity": "sha512-gllwYWozWfbep16N9fByNBDTkJW/SyhH6SGRlXloR7WdtAaBui4plTP+gbUgiEot7vGw/ZZop1yDZlgXXSuzjA==",
"dependencies": {
"@types/d3-dsv": "*"
}
},
"node_modules/@types/d3-force": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.4.tgz",
"integrity": "sha512-q7xbVLrWcXvSBBEoadowIUJ7sRpS1yvgMWnzHJggFy5cUZBq2HZL5k/pBSm0GdYWS1vs5/EDwMjSKF55PDY4Aw=="
},
"node_modules/@types/d3-format": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.1.tgz",
"integrity": "sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg=="
},
"node_modules/@types/d3-geo": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.0.3.tgz",
"integrity": "sha512-bK9uZJS3vuDCNeeXQ4z3u0E7OeJZXjUgzFdSOtNtMCJCLvDtWDwfpRVWlyt3y8EvRzI0ccOu9xlMVirawolSCw==",
"dependencies": {
"@types/geojson": "*"
}
},
"node_modules/@types/d3-hierarchy": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.1.tgz",
"integrity": "sha512-QwjxA3+YCKH3N1Rs3uSiSy1bdxlLB1uUiENXeJudBoAFvtDuswUxLcanoOaR2JYn1melDTuIXR8VhnVyI3yG/A=="
},
"node_modules/@types/d3-interpolate": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
"integrity": "sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==",
"dependencies": {
"@types/d3-color": "*"
}
},
"node_modules/@types/d3-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz",
"integrity": "sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg=="
},
"node_modules/@types/d3-polygon": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.0.tgz",
"integrity": "sha512-D49z4DyzTKXM0sGKVqiTDTYr+DHg/uxsiWDAkNrwXYuiZVd9o9wXZIo+YsHkifOiyBkmSWlEngHCQme54/hnHw=="
},
"node_modules/@types/d3-quadtree": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.2.tgz",
"integrity": "sha512-QNcK8Jguvc8lU+4OfeNx+qnVy7c0VrDJ+CCVFS9srBo2GL9Y18CnIxBdTF3v38flrGy5s1YggcoAiu6s4fLQIw=="
},
"node_modules/@types/d3-random": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.1.tgz",
"integrity": "sha512-IIE6YTekGczpLYo/HehAy3JGF1ty7+usI97LqraNa8IiDur+L44d0VOjAvFQWJVdZOJHukUJw+ZdZBlgeUsHOQ=="
},
"node_modules/@types/d3-scale": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz",
"integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==",
"dependencies": {
"@types/d3-time": "*"
}
},
"node_modules/@types/d3-scale-chromatic": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz",
"integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw=="
},
"node_modules/@types/d3-selection": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.4.tgz",
"integrity": "sha512-ZeykX7286BCyMg9sH5fIAORyCB6hcATPSRQpN47jwBA2bMbAT0s+EvtDP5r1FZYJ95R8QoEE1CKJX+n0/M5Vhg=="
},
"node_modules/@types/d3-shape": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.1.tgz",
"integrity": "sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==",
"dependencies": {
"@types/d3-path": "*"
}
},
"node_modules/@types/d3-time": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz",
"integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg=="
},
"node_modules/@types/d3-time-format": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.0.tgz",
"integrity": "sha512-yjfBUe6DJBsDin2BMIulhSHmr5qNR5Pxs17+oW4DoVPyVIXZ+m6bs7j1UVKP08Emv6jRmYrYqxYzO63mQxy1rw=="
},
"node_modules/@types/d3-timer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz",
"integrity": "sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g=="
},
"node_modules/@types/d3-transition": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.3.tgz",
"integrity": "sha512-/S90Od8Id1wgQNvIA8iFv9jRhCiZcGhPd2qX0bKF/PS+y0W5CrXKgIiELd2CvG1mlQrWK/qlYh3VxicqG1ZvgA==",
"dependencies": {
"@types/d3-selection": "*"
}
},
"node_modules/@types/d3-zoom": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.2.tgz",
"integrity": "sha512-t09DDJVBI6AkM7N8kuPsnq/3d/ehtRKBN1xSiYjjMCgbiw6HM6Ged5VhvswmhprfKyGvzeTEL/4WBaK9llWvlA==",
"dependencies": {
"@types/d3-interpolate": "*",
"@types/d3-selection": "*"
}
},
"node_modules/@types/dagre": {
"version": "0.7.48",
"dev": true,
@ -4482,6 +4704,11 @@
"dev": true,
"license": "MIT"
},
"node_modules/@types/geojson": {
"version": "7946.0.10",
"resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz",
"integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA=="
},
"node_modules/@types/gunzip-maybe": {
"version": "1.4.0",
"license": "MIT",
@ -4489,14 +4716,6 @@
"@types/node": "*"
}
},
"node_modules/@types/hoist-non-react-statics": {
"version": "3.3.1",
"license": "MIT",
"dependencies": {
"@types/react": "*",
"hoist-non-react-statics": "^3.3.0"
}
},
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.4",
"dev": true,
@ -4611,15 +4830,10 @@
"@types/react": "^17"
}
},
"node_modules/@types/react-redux": {
"version": "7.1.24",
"license": "MIT",
"dependencies": {
"@types/hoist-non-react-statics": "^3.3.0",
"@types/react": "*",
"hoist-non-react-statics": "^3.3.0",
"redux": "^4.0.0"
}
"node_modules/@types/resize-observer-browser": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.7.tgz",
"integrity": "sha512-G9eN0Sn0ii9PWQ3Vl72jDPgeJwRWhv2Qk/nQkJuWmRmOB4HX3/BhD5SE1dZs/hzPZL/WKnvF0RHdTSG54QJFyg=="
},
"node_modules/@types/resolve": {
"version": "1.20.2",
@ -6445,13 +6659,6 @@
"node": ">=8"
}
},
"node_modules/clsx": {
"version": "1.2.1",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/code-block-writer": {
"version": "11.0.3",
"resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-11.0.3.tgz",
@ -9045,6 +9252,7 @@
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"dev": true,
"license": "MIT"
},
"node_modules/fast-diff": {
@ -9792,13 +10000,6 @@
"minimalistic-crypto-utils": "^1.0.1"
}
},
"node_modules/hoist-non-react-statics": {
"version": "3.3.2",
"license": "BSD-3-Clause",
"dependencies": {
"react-is": "^16.7.0"
}
},
"node_modules/html-encoding-sniffer": {
"version": "3.0.0",
"dev": true,
@ -12747,18 +12948,6 @@
"react": "17.0.2"
}
},
"node_modules/react-draggable": {
"version": "4.4.5",
"license": "MIT",
"dependencies": {
"clsx": "^1.1.1",
"prop-types": "^15.8.1"
},
"peerDependencies": {
"react": ">= 16.3.0",
"react-dom": ">= 16.3.0"
}
},
"node_modules/react-dropzone": {
"version": "14.2.3",
"license": "MIT",
@ -12789,24 +12978,26 @@
}
},
"node_modules/react-flow-renderer": {
"version": "9.7.4",
"license": "MIT",
"version": "10.3.17",
"resolved": "https://registry.npmjs.org/react-flow-renderer/-/react-flow-renderer-10.3.17.tgz",
"integrity": "sha512-bywiqVErlh5kCDqw3x0an5Ur3mT9j9CwJsDwmhmz4i1IgYM1a0SPqqEhClvjX+s5pU4nHjmVaGXWK96pwsiGcQ==",
"deprecated": "react-flow-renderer has been renamed to reactflow, please use this package from now on https://reactflow.dev/docs/guides/migrate-to-v11/",
"dependencies": {
"@babel/runtime": "^7.16.7",
"@babel/runtime": "^7.18.9",
"@types/d3": "^7.4.0",
"@types/resize-observer-browser": "^0.1.7",
"classcat": "^5.0.3",
"d3-drag": "^3.0.0",
"d3-selection": "^3.0.0",
"d3-zoom": "^3.0.0",
"fast-deep-equal": "^3.1.3",
"react-draggable": "^4.4.4",
"react-redux": "^7.2.6",
"redux": "^4.1.2"
"zustand": "^3.7.2"
},
"engines": {
"node": ">=12"
"node": ">=14"
},
"peerDependencies": {
"react": "16 || 17",
"react-dom": "16 || 17"
"react": "16 || 17 || 18",
"react-dom": "16 || 17 || 18"
}
},
"node_modules/react-hook-form": {
@ -12849,33 +13040,6 @@
"react": "^17.x"
}
},
"node_modules/react-redux": {
"version": "7.2.8",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.15.4",
"@types/react-redux": "^7.1.20",
"hoist-non-react-statics": "^3.3.2",
"loose-envify": "^1.4.0",
"prop-types": "^15.7.2",
"react-is": "^17.0.2"
},
"peerDependencies": {
"react": "^16.8.3 || ^17 || ^18"
},
"peerDependenciesMeta": {
"react-dom": {
"optional": true
},
"react-native": {
"optional": true
}
}
},
"node_modules/react-redux/node_modules/react-is": {
"version": "17.0.2",
"license": "MIT"
},
"node_modules/react-refresh": {
"version": "0.14.0",
"dev": true,
@ -12961,13 +13125,6 @@
"node": ">=8"
}
},
"node_modules/redux": {
"version": "4.2.0",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.9.2"
}
},
"node_modules/regenerate": {
"version": "1.4.2",
"dev": true,
@ -16162,6 +16319,22 @@
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true,
"optional": true
},
"node_modules/zustand": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz",
"integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==",
"engines": {
"node": ">=12.7.0"
},
"peerDependencies": {
"react": ">=16.8"
},
"peerDependenciesMeta": {
"react": {
"optional": true
}
}
}
},
"dependencies": {
@ -18768,6 +18941,228 @@
"@types/chai": "*"
}
},
"@types/d3": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.0.tgz",
"integrity": "sha512-jIfNVK0ZlxcuRDKtRS/SypEyOQ6UHaFQBKv032X45VvxSJ6Yi5G9behy9h6tNTHTDGh5Vq+KbmBjUWLgY4meCA==",
"requires": {
"@types/d3-array": "*",
"@types/d3-axis": "*",
"@types/d3-brush": "*",
"@types/d3-chord": "*",
"@types/d3-color": "*",
"@types/d3-contour": "*",
"@types/d3-delaunay": "*",
"@types/d3-dispatch": "*",
"@types/d3-drag": "*",
"@types/d3-dsv": "*",
"@types/d3-ease": "*",
"@types/d3-fetch": "*",
"@types/d3-force": "*",
"@types/d3-format": "*",
"@types/d3-geo": "*",
"@types/d3-hierarchy": "*",
"@types/d3-interpolate": "*",
"@types/d3-path": "*",
"@types/d3-polygon": "*",
"@types/d3-quadtree": "*",
"@types/d3-random": "*",
"@types/d3-scale": "*",
"@types/d3-scale-chromatic": "*",
"@types/d3-selection": "*",
"@types/d3-shape": "*",
"@types/d3-time": "*",
"@types/d3-time-format": "*",
"@types/d3-timer": "*",
"@types/d3-transition": "*",
"@types/d3-zoom": "*"
}
},
"@types/d3-array": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.4.tgz",
"integrity": "sha512-nwvEkG9vYOc0Ic7G7kwgviY4AQlTfYGIZ0fqB7CQHXGyYM6nO7kJh5EguSNA3jfh4rq7Sb7eMVq8isuvg2/miQ=="
},
"@types/d3-axis": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.2.tgz",
"integrity": "sha512-uGC7DBh0TZrU/LY43Fd8Qr+2ja1FKmH07q2FoZFHo1eYl8aj87GhfVoY1saJVJiq24rp1+wpI6BvQJMKgQm8oA==",
"requires": {
"@types/d3-selection": "*"
}
},
"@types/d3-brush": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.2.tgz",
"integrity": "sha512-2TEm8KzUG3N7z0TrSKPmbxByBx54M+S9lHoP2J55QuLU0VSQ9mE96EJSAOVNEqd1bbynMjeTS9VHmz8/bSw8rA==",
"requires": {
"@types/d3-selection": "*"
}
},
"@types/d3-chord": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.2.tgz",
"integrity": "sha512-abT/iLHD3sGZwqMTX1TYCMEulr+wBd0SzyOQnjYNLp7sngdOHYtNkMRI5v3w5thoN+BWtlHVDx2Osvq6fxhZWw=="
},
"@types/d3-color": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz",
"integrity": "sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA=="
},
"@types/d3-contour": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.2.tgz",
"integrity": "sha512-k6/bGDoAGJZnZWaKzeB+9glgXCYGvh6YlluxzBREiVo8f/X2vpTEdgPy9DN7Z2i42PZOZ4JDhVdlTSTSkLDPlQ==",
"requires": {
"@types/d3-array": "*",
"@types/geojson": "*"
}
},
"@types/d3-delaunay": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.1.tgz",
"integrity": "sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ=="
},
"@types/d3-dispatch": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.2.tgz",
"integrity": "sha512-rxN6sHUXEZYCKV05MEh4z4WpPSqIw+aP7n9ZN6WYAAvZoEAghEK1WeVZMZcHRBwyaKflU43PCUAJNjFxCzPDjg=="
},
"@types/d3-drag": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.2.tgz",
"integrity": "sha512-qmODKEDvyKWVHcWWCOVcuVcOwikLVsyc4q4EBJMREsoQnR2Qoc2cZQUyFUPgO9q4S3qdSqJKBsuefv+h0Qy+tw==",
"requires": {
"@types/d3-selection": "*"
}
},
"@types/d3-dsv": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.1.tgz",
"integrity": "sha512-76pBHCMTvPLt44wFOieouXcGXWOF0AJCceUvaFkxSZEu4VDUdv93JfpMa6VGNFs01FHfuP4a5Ou68eRG1KBfTw=="
},
"@types/d3-ease": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz",
"integrity": "sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA=="
},
"@types/d3-fetch": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.2.tgz",
"integrity": "sha512-gllwYWozWfbep16N9fByNBDTkJW/SyhH6SGRlXloR7WdtAaBui4plTP+gbUgiEot7vGw/ZZop1yDZlgXXSuzjA==",
"requires": {
"@types/d3-dsv": "*"
}
},
"@types/d3-force": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.4.tgz",
"integrity": "sha512-q7xbVLrWcXvSBBEoadowIUJ7sRpS1yvgMWnzHJggFy5cUZBq2HZL5k/pBSm0GdYWS1vs5/EDwMjSKF55PDY4Aw=="
},
"@types/d3-format": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.1.tgz",
"integrity": "sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg=="
},
"@types/d3-geo": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.0.3.tgz",
"integrity": "sha512-bK9uZJS3vuDCNeeXQ4z3u0E7OeJZXjUgzFdSOtNtMCJCLvDtWDwfpRVWlyt3y8EvRzI0ccOu9xlMVirawolSCw==",
"requires": {
"@types/geojson": "*"
}
},
"@types/d3-hierarchy": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.1.tgz",
"integrity": "sha512-QwjxA3+YCKH3N1Rs3uSiSy1bdxlLB1uUiENXeJudBoAFvtDuswUxLcanoOaR2JYn1melDTuIXR8VhnVyI3yG/A=="
},
"@types/d3-interpolate": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
"integrity": "sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==",
"requires": {
"@types/d3-color": "*"
}
},
"@types/d3-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz",
"integrity": "sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg=="
},
"@types/d3-polygon": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.0.tgz",
"integrity": "sha512-D49z4DyzTKXM0sGKVqiTDTYr+DHg/uxsiWDAkNrwXYuiZVd9o9wXZIo+YsHkifOiyBkmSWlEngHCQme54/hnHw=="
},
"@types/d3-quadtree": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.2.tgz",
"integrity": "sha512-QNcK8Jguvc8lU+4OfeNx+qnVy7c0VrDJ+CCVFS9srBo2GL9Y18CnIxBdTF3v38flrGy5s1YggcoAiu6s4fLQIw=="
},
"@types/d3-random": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.1.tgz",
"integrity": "sha512-IIE6YTekGczpLYo/HehAy3JGF1ty7+usI97LqraNa8IiDur+L44d0VOjAvFQWJVdZOJHukUJw+ZdZBlgeUsHOQ=="
},
"@types/d3-scale": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz",
"integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==",
"requires": {
"@types/d3-time": "*"
}
},
"@types/d3-scale-chromatic": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz",
"integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw=="
},
"@types/d3-selection": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.4.tgz",
"integrity": "sha512-ZeykX7286BCyMg9sH5fIAORyCB6hcATPSRQpN47jwBA2bMbAT0s+EvtDP5r1FZYJ95R8QoEE1CKJX+n0/M5Vhg=="
},
"@types/d3-shape": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.1.tgz",
"integrity": "sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==",
"requires": {
"@types/d3-path": "*"
}
},
"@types/d3-time": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz",
"integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg=="
},
"@types/d3-time-format": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.0.tgz",
"integrity": "sha512-yjfBUe6DJBsDin2BMIulhSHmr5qNR5Pxs17+oW4DoVPyVIXZ+m6bs7j1UVKP08Emv6jRmYrYqxYzO63mQxy1rw=="
},
"@types/d3-timer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz",
"integrity": "sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g=="
},
"@types/d3-transition": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.3.tgz",
"integrity": "sha512-/S90Od8Id1wgQNvIA8iFv9jRhCiZcGhPd2qX0bKF/PS+y0W5CrXKgIiELd2CvG1mlQrWK/qlYh3VxicqG1ZvgA==",
"requires": {
"@types/d3-selection": "*"
}
},
"@types/d3-zoom": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.2.tgz",
"integrity": "sha512-t09DDJVBI6AkM7N8kuPsnq/3d/ehtRKBN1xSiYjjMCgbiw6HM6Ged5VhvswmhprfKyGvzeTEL/4WBaK9llWvlA==",
"requires": {
"@types/d3-interpolate": "*",
"@types/d3-selection": "*"
}
},
"@types/dagre": {
"version": "0.7.48",
"dev": true
@ -18800,19 +19195,17 @@
"version": "5.0.2",
"dev": true
},
"@types/geojson": {
"version": "7946.0.10",
"resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz",
"integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA=="
},
"@types/gunzip-maybe": {
"version": "1.4.0",
"requires": {
"@types/node": "*"
}
},
"@types/hoist-non-react-statics": {
"version": "3.3.1",
"requires": {
"@types/react": "*",
"hoist-non-react-statics": "^3.3.0"
}
},
"@types/istanbul-lib-coverage": {
"version": "2.0.4",
"dev": true
@ -18906,14 +19299,10 @@
"@types/react": "^17"
}
},
"@types/react-redux": {
"version": "7.1.24",
"requires": {
"@types/hoist-non-react-statics": "^3.3.0",
"@types/react": "*",
"hoist-non-react-statics": "^3.3.0",
"redux": "^4.0.0"
}
"@types/resize-observer-browser": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.7.tgz",
"integrity": "sha512-G9eN0Sn0ii9PWQ3Vl72jDPgeJwRWhv2Qk/nQkJuWmRmOB4HX3/BhD5SE1dZs/hzPZL/WKnvF0RHdTSG54QJFyg=="
},
"@types/resolve": {
"version": "1.20.2",
@ -19435,7 +19824,7 @@
"react-dom": "^17.0.2",
"react-dropzone": "^14.2.3",
"react-error-boundary": "^3.1.4",
"react-flow-renderer": "^9.7.4",
"react-flow-renderer": "^10.3.17",
"react-hook-form": "^6.15.8",
"react-hook-form-v7": "npm:react-hook-form@^7.35.1",
"react-i18next": "^12.0.0",
@ -20518,9 +20907,6 @@
}
}
},
"clsx": {
"version": "1.2.1"
},
"code-block-writer": {
"version": "11.0.3",
"resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-11.0.3.tgz",
@ -22216,7 +22602,8 @@
"dev": true
},
"fast-deep-equal": {
"version": "3.1.3"
"version": "3.1.3",
"dev": true
},
"fast-diff": {
"version": "1.2.0",
@ -22714,12 +23101,6 @@
"minimalistic-crypto-utils": "^1.0.1"
}
},
"hoist-non-react-statics": {
"version": "3.3.2",
"requires": {
"react-is": "^16.7.0"
}
},
"html-encoding-sniffer": {
"version": "3.0.0",
"dev": true,
@ -24717,13 +25098,6 @@
"scheduler": "^0.20.2"
}
},
"react-draggable": {
"version": "4.4.5",
"requires": {
"clsx": "^1.1.1",
"prop-types": "^15.8.1"
}
},
"react-dropzone": {
"version": "14.2.3",
"requires": {
@ -24739,16 +25113,18 @@
}
},
"react-flow-renderer": {
"version": "9.7.4",
"version": "10.3.17",
"resolved": "https://registry.npmjs.org/react-flow-renderer/-/react-flow-renderer-10.3.17.tgz",
"integrity": "sha512-bywiqVErlh5kCDqw3x0an5Ur3mT9j9CwJsDwmhmz4i1IgYM1a0SPqqEhClvjX+s5pU4nHjmVaGXWK96pwsiGcQ==",
"requires": {
"@babel/runtime": "^7.16.7",
"@babel/runtime": "^7.18.9",
"@types/d3": "^7.4.0",
"@types/resize-observer-browser": "^0.1.7",
"classcat": "^5.0.3",
"d3-drag": "^3.0.0",
"d3-selection": "^3.0.0",
"d3-zoom": "^3.0.0",
"fast-deep-equal": "^3.1.3",
"react-draggable": "^4.4.4",
"react-redux": "^7.2.6",
"redux": "^4.1.2"
"zustand": "^3.7.2"
}
},
"react-hook-form": {
@ -24772,22 +25148,6 @@
"prop-types": "^15.7.2"
}
},
"react-redux": {
"version": "7.2.8",
"requires": {
"@babel/runtime": "^7.15.4",
"@types/react-redux": "^7.1.20",
"hoist-non-react-statics": "^3.3.2",
"loose-envify": "^1.4.0",
"prop-types": "^15.7.2",
"react-is": "^17.0.2"
},
"dependencies": {
"react-is": {
"version": "17.0.2"
}
}
},
"react-refresh": {
"version": "0.14.0",
"dev": true
@ -24845,12 +25205,6 @@
"strip-indent": "^3.0.0"
}
},
"redux": {
"version": "4.2.0",
"requires": {
"@babel/runtime": "^7.9.2"
}
},
"regenerate": {
"version": "1.4.2",
"dev": true
@ -26977,6 +27331,12 @@
"optional": true
}
}
},
"zustand": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz",
"integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==",
"requires": {}
}
}
}