diff --git a/libs/shared/lib/querybuilder/structures/TranslatedJSONQuery.tsx b/libs/shared/lib/querybuilder/graph/graphology/JSONParser.tsx
similarity index 100%
rename from libs/shared/lib/querybuilder/structures/TranslatedJSONQuery.tsx
rename to libs/shared/lib/querybuilder/graph/graphology/JSONParser.tsx
diff --git a/libs/shared/lib/querybuilder/graph/graphology/model.ts b/libs/shared/lib/querybuilder/graph/graphology/model.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cc294874e3576eaf66f1faaeb4876092d0788b5b
--- /dev/null
+++ b/libs/shared/lib/querybuilder/graph/graphology/model.ts
@@ -0,0 +1,27 @@
+import { Attributes as GAttributes } from "graphology-types";
+import { AttributeData, AttributeNode, EntityData, EntityNode, FunctionNode, ModifierNode, RelationData, RelationNode } from "../reactflow/model";
+import Graph from "graphology";
+import { XYPosition } from "reactflow";
+
+// export interface Attributes extends EntityNode | RelationNode | AttributeNode | FunctionNode | ModifierNode  {
+// }
+
+export type NodeAttributes = XYPosition & AttributeData & {
+    type: string;
+    width?: number;
+    height?: number;
+};
+
+export type EntityNodeAttributes = XYPosition & EntityData & {
+    type: string;
+    width?: number;
+    height?: number;
+};
+
+export type RelationNodeAttributes = XYPosition & RelationData & {
+    type: string;
+    width?: number;
+    height?: number;
+};
+
+export type QueryGraph = Graph<NodeAttributes | EntityNodeAttributes | RelationNodeAttributes, GAttributes, GAttributes>;
diff --git a/libs/shared/lib/querybuilder/usecases/addPill.ts b/libs/shared/lib/querybuilder/graph/graphology/utils.ts
similarity index 70%
rename from libs/shared/lib/querybuilder/usecases/addPill.ts
rename to libs/shared/lib/querybuilder/graph/graphology/utils.ts
index 4dc37e18d16bd55f0b405520704b97f174ef6fca..165c442af0a2a6ddf847444b9a07a94bb8fd5704 100644
--- a/libs/shared/lib/querybuilder/usecases/addPill.ts
+++ b/libs/shared/lib/querybuilder/graph/graphology/utils.ts
@@ -4,6 +4,7 @@ import {
 } from '@graphpolaris/shared/lib/data-access/store';
 import Graph from 'graphology';
 import { Attributes } from 'graphology-types';
+import { EntityNodeAttributes, NodeAttributes, QueryGraph, RelationNodeAttributes } from './model';
 
 /** monospace fontsize table */
 const widthPerFontsize = {
@@ -13,10 +14,10 @@ const widthPerFontsize = {
 };
 
 /** Adds a query builder pill to the graphology nodes object. */
-export function addPill(
+export function addPill2Graphology(
   id: string,
-  attributes: Attributes,
-  nodes: Graph
+  attributes: NodeAttributes | EntityNodeAttributes | RelationNodeAttributes,
+  nodes: QueryGraph
 ): boolean {
   const { type, name } = attributes;
   if (!type || !name) return false;
@@ -27,10 +28,10 @@ export function addPill(
   if (!y) y = 0;
 
   // Get the width and height of a node
-  const { w, h } = calcWidthHeightOfPill(attributes);
+  const { width, height } = calcWidthHeightOfPill(attributes);
 
   // Add a node to the graphology object
-  nodes.addNode(id, { ...attributes, x, y, w, h });
+  nodes.addNode(id, { ...attributes, x, y, width, height });
 
   // Set the new nodes in the query builder slice
   store.dispatch(setQuerybuilderNodes(nodes.export()));
@@ -42,8 +43,8 @@ export function addPill(
  * DEPENDS ON STYLING, if styling changed, change this.
  */
 function calcWidthHeightOfPill(attributes: Attributes): {
-  w: number;
-  h: number;
+  width: number;
+  height: number;
 } {
   const { type, name } = attributes;
 
@@ -90,5 +91,24 @@ function calcWidthHeightOfPill(attributes: Attributes): {
     }
   }
 
-  return { w, h };
+  return { width: w, height: h };
 }
+
+/** Interface for x and y position of node */
+export interface NodePosition {
+  x: number;
+  y: number;
+}
+
+/** Returns from-position of relation node */
+export function RelationPosToFromEntityPos(position: NodePosition): NodePosition {
+  return { x: position.x - 60, y: position.y - 40 };
+}
+
+/** Returns to-position of relation node */
+export function RelationPosToToEntityPos(position: NodePosition): NodePosition {
+  return { x: position.x + 400, y: position.y };
+}
+
+/** Default position; x=0, y=0 */
+export const DefaultPosition = { x: 0, y: 0 };
\ No newline at end of file
diff --git a/libs/shared/lib/querybuilder/structures/FunctionTypes.tsx b/libs/shared/lib/querybuilder/graph/logic/queryFunctions.tsx
similarity index 57%
rename from libs/shared/lib/querybuilder/structures/FunctionTypes.tsx
rename to libs/shared/lib/querybuilder/graph/logic/queryFunctions.tsx
index a8c399008a79d9961d221240909fc0a6bb1c5e5a..404f2f3ea0fbbf5e1fcc4efa7c3518441f00003c 100644
--- a/libs/shared/lib/querybuilder/structures/FunctionTypes.tsx
+++ b/libs/shared/lib/querybuilder/graph/logic/queryFunctions.tsx
@@ -4,7 +4,7 @@
  * © Copyright Utrecht University (Department of Information and Computing Sciences)
  */
 
-import { AnyNode, FunctionArgs } from './Nodes';
+import { AnyNode, FunctionArgs } from '../reactflow/model';
 
 /** What functions exist
  *  Default is for the functions in the function bar that don't exist yet.
@@ -32,10 +32,30 @@ export enum FunctionArgTypes {
 export const DefaultGroupByArgs: FunctionArgs = {
   group: { displayName: 'Group', connectable: true, value: '', visible: true },
   by: { displayName: 'By', connectable: true, value: '_id', visible: true },
-  relation: { displayName: 'On', connectable: true, value: undefined, visible: true },
-  modifier: { displayName: 'Modifier: ', connectable: false, value: '', visible: true },
-  constraints: { displayName: 'Constraints: ', connectable: true, value: undefined, visible: true },
-  result: { displayName: 'Result: ', connectable: true, value: undefined, visible: true },
+  relation: {
+    displayName: 'On',
+    connectable: true,
+    value: undefined,
+    visible: true,
+  },
+  modifier: {
+    displayName: 'Modifier: ',
+    connectable: false,
+    value: '',
+    visible: true,
+  },
+  constraints: {
+    displayName: 'Constraints: ',
+    connectable: true,
+    value: undefined,
+    visible: true,
+  },
+  result: {
+    displayName: 'Result: ',
+    connectable: true,
+    value: undefined,
+    visible: true,
+  },
 };
 /** All arguments that linkprediction pill needs */
 export const DefaultLinkPredictionArgs: FunctionArgs = {
@@ -87,3 +107,42 @@ export const DefaultFunctionArgs: { [type: string]: FunctionArgs } = {
   centrality: DefaultCentralityArgs,
   shortestPath: DefaultShortestPathArgs,
 };
+
+/** Interface for what function descriptions need */
+export interface FunctionDescription {
+  name: string;
+  type: FunctionTypes;
+  description: string;
+}
+
+/** All available functions in the function bar. */
+export const AvailableFunctions: Record<string, FunctionDescription> = {
+  centrality: {
+    name: 'centrality',
+    type: FunctionTypes.centrality,
+    description: 'W.I.P. Shows the importance of nodes',
+  },
+  communityDetection: {
+    name: 'Community Detection',
+    type: FunctionTypes.communityDetection,
+    description:
+      'Group entities connected by a relation based on how interconnected they are.',
+  },
+  groupBy: {
+    name: 'Group By',
+    type: FunctionTypes.GroupBy,
+    description:
+      'W.I.P. Per entity of type A, generate aggregate statistics of an attribute of either all links of a relation, or all nodes of an entity of type B connected to the type A entity by a relation.',
+  },
+  link: {
+    name: 'Link Prediction',
+    type: FunctionTypes.link,
+    description:
+      'For each pair of entities from a given type, determine the overlap between nodes they are connect to by a given relation.',
+  },
+  shortestPath: {
+    name: 'shortestPath',
+    type: FunctionTypes.shortestPath,
+    description: 'W.I.P. shortest path. Shows the shortest path between nodes',
+  },
+};
diff --git a/libs/shared/lib/querybuilder/structures/Handles.tsx b/libs/shared/lib/querybuilder/graph/reactflow/handles.tsx
similarity index 83%
rename from libs/shared/lib/querybuilder/structures/Handles.tsx
rename to libs/shared/lib/querybuilder/graph/reactflow/handles.tsx
index 93e9947fbcf5b397ff8729ce6abca409783d5504..9f5f1cdaec06860869971a2d3074014420cffbb3 100644
--- a/libs/shared/lib/querybuilder/structures/Handles.tsx
+++ b/libs/shared/lib/querybuilder/graph/reactflow/handles.tsx
@@ -8,14 +8,14 @@
  * Enums for possible values for handles of nodes in the query builder.
  * Possible handles for an entity node.
  */
-import { FunctionArgTypes } from './FunctionTypes';
-import { AnyNode, QueryElementTypes } from './Nodes';
+import { FunctionArgTypes } from '../logic/queryFunctions';
+import { AnyNode, QueryElementTypes } from './model';
 
 /** Links need handles to what they are connected to (and which side) */
 export enum Handles {
   RelationLeft = 'leftEntityHandle', //target
   RelationRight = 'rightEntityHandle', //target
-  ToAttributeHandle = 'attributesHandle', //target
+  ToAttribute = 'attributesHandle', //target
   ToRelation = 'relationsHandle', //source
   OnAttribute = 'onAttributeHandle', //source
   ReceiveFunction = 'receiveFunctionHandle', //target
@@ -29,12 +29,13 @@ export function isFunctionHandle(handle: string): boolean {
 
 /**
  *  returns the functionargumenttype
- *  Currently only working for groupby but made that in the future other functiones can use this aswell.
+ *  Currently only working for groupby but made that in the future other functions can use this as well.
  */
 export function functionHandleToType(handle: string): FunctionArgTypes {
   if (isFunctionHandle(handle))
     return handle.slice(Handles.FunctionBase.length) as FunctionArgTypes;
-  else throw new Error('Incorrectly trying to assert handle to functionhandle');
+  else
+    throw new Error('Incorrectly trying to assert handle to function handle');
 }
 /** Creates a handle from a functiontype */
 export function typeToFunctionHandle(type: FunctionArgTypes): string {
@@ -44,14 +45,16 @@ export function typeToFunctionHandle(type: FunctionArgTypes): string {
 /**
  * Return a list of handles to which a connection can be made by dragging a node nearby
  */
-export function nodeToHandlesThatCanReceiveDragconnect(node: AnyNode): string[] {
+export function nodeToHandlesThatCanReceiveDragconnect(
+  node: AnyNode
+): string[] {
   switch (node.type) {
     case QueryElementTypes.Entity:
-      return [Handles.ToAttributeHandle];
+      return [Handles.ToAttribute];
     case QueryElementTypes.Relation:
-      return [Handles.RelationLeft, Handles.RelationRight, Handles.ToAttributeHandle];
+      return [Handles.RelationLeft, Handles.RelationRight, Handles.ToAttribute];
     case QueryElementTypes.Function:
-      return [Handles.ToAttributeHandle];
+      return [Handles.ToAttribute];
     case QueryElementTypes.Attribute:
       return [];
     default:
diff --git a/libs/shared/lib/querybuilder/structures/Nodes.tsx b/libs/shared/lib/querybuilder/graph/reactflow/model.tsx
similarity index 68%
rename from libs/shared/lib/querybuilder/structures/Nodes.tsx
rename to libs/shared/lib/querybuilder/graph/reactflow/model.tsx
index cc89d9e14ff8d95fda78c32131a404fa5670cdbd..fddca14b89b5c917ad821ff5f1257381e3801d13 100644
--- a/libs/shared/lib/querybuilder/structures/Nodes.tsx
+++ b/libs/shared/lib/querybuilder/graph/reactflow/model.tsx
@@ -64,7 +64,7 @@ export interface RelationData extends NodeData {
  * bool   MatchTypes: EQ/NEQ.
  */
 export interface AttributeData extends NodeData {
-  attribute: string;
+  name: string;
   value: string;
   dataType: string;
   matchType: string;
@@ -92,3 +92,39 @@ export interface updateEdges {
   newEdge: Edge | undefined;
   removeEdge: Edge | undefined;
 }
+
+/**
+ * Checks if a node is an entityNode.
+ * @param {AnyNode} node The node that has to checked.
+ * @returns True and casts if the node is an EntityNode.
+ */
+export function isEntityNode(node: AnyNode): node is EntityNode {
+  return node.type == QueryElementTypes.Entity;
+}
+
+/**
+ * Checks if a node is a RelationNode.
+ * @param {AnyNode} node The node that has to checked.
+ * @returns True and casts if the node is an RelationNode.
+ */
+export function isRelationNode(node: AnyNode): node is RelationNode {
+  return node.type == QueryElementTypes.Relation;
+}
+
+/**
+ * Checks if a node is an AttributeNode.
+ * @param {AnyNode} node The node that has to checked.
+ * @returns True and casts if the node is an AttributeNode.
+ */
+export function isAttributeNode(node: AnyNode): node is AttributeNode {
+  return node.type == QueryElementTypes.Attribute;
+}
+
+/**
+ * Checks if a node is an FunctionNode.
+ * @param {AnyNode} node The node that has to checked.
+ * @returns True and casts if the node is an FunctionNode.
+ */
+export function isFunctionNode(node: AnyNode): node is FunctionNode {
+  return node.type == QueryElementTypes.Function;
+}
diff --git a/libs/shared/lib/querybuilder/usecases/pillHandles.ts b/libs/shared/lib/querybuilder/graph/reactflow/pillHandles.ts
similarity index 100%
rename from libs/shared/lib/querybuilder/usecases/pillHandles.ts
rename to libs/shared/lib/querybuilder/graph/reactflow/pillHandles.ts
diff --git a/libs/shared/lib/querybuilder/usecases/createReactFlowElements.ts b/libs/shared/lib/querybuilder/graph/reactflow/utils.ts
similarity index 100%
rename from libs/shared/lib/querybuilder/usecases/createReactFlowElements.ts
rename to libs/shared/lib/querybuilder/graph/reactflow/utils.ts
diff --git a/libs/shared/lib/querybuilder/panel/querybuilder.stories.tsx b/libs/shared/lib/querybuilder/panel/querybuilder.stories.tsx
index ca8d975e0fcd3b7cb094c744f8fb747bba1ab55b..b8f69db162ef7d407c1adaede9dfcdbdad571bce 100644
--- a/libs/shared/lib/querybuilder/panel/querybuilder.stories.tsx
+++ b/libs/shared/lib/querybuilder/panel/querybuilder.stories.tsx
@@ -6,14 +6,13 @@ import {
 } from '@graphpolaris/shared/lib/data-access/store';
 import { GraphPolarisThemeProvider } from '@graphpolaris/shared/lib/data-access/theme';
 import { configureStore } from '@reduxjs/toolkit';
-import { Meta, ComponentStory } from '@storybook/react';
+import { Meta } from '@storybook/react';
 import { Provider } from 'react-redux';
 import QueryBuilder from './querybuilder';
 import { MultiGraph } from 'graphology';
-import {
-  addPill,
-  handles,
-} from '@graphpolaris/shared/lib/querybuilder/usecases';
+import { addPill2Graphology } from '../graph/graphology/utils';
+import { handles } from '../graph/reactflow/pillHandles';
+import { QueryGraph } from '../graph/graphology/model';
 
 const Component: Meta<typeof QueryBuilder> = {
   component: QueryBuilder,
@@ -34,10 +33,14 @@ const mockStore = configureStore({
     querybuilder: querybuilderSlice.reducer,
   },
 });
-const graph = new MultiGraph();
-addPill('0', { type: 'entity', x: 100, y: 100, name: 'Entity Pill' }, graph);
+const graph: QueryGraph = new MultiGraph();
+addPill2Graphology(
+  '0',
+  { type: 'entity', x: 100, y: 100, name: 'Entity Pill' },
+  graph
+);
 // graph.addNode('0', { type: 'entity', x: 100, y: 100, name: 'Entity Pill' });
-addPill(
+addPill2Graphology(
   '1',
   {
     type: 'relation',
@@ -48,7 +51,7 @@ addPill(
   },
   graph
 );
-addPill(
+addPill2Graphology(
   '2',
   {
     type: 'attribute',
@@ -62,7 +65,7 @@ addPill(
   },
   graph
 );
-addPill(
+addPill2Graphology(
   '3',
   {
     type: 'attribute',
@@ -75,7 +78,7 @@ addPill(
   },
   graph
 );
-addPill(
+addPill2Graphology(
   '4',
   {
     type: 'attribute',
diff --git a/libs/shared/lib/querybuilder/panel/querybuilder.tsx b/libs/shared/lib/querybuilder/panel/querybuilder.tsx
index c3c8de1014f844986f14c6b2d9dcc1578ceb1a3c..d3de82b59af0ce1f51a2ee52fb5614e124596d6d 100644
--- a/libs/shared/lib/querybuilder/panel/querybuilder.tsx
+++ b/libs/shared/lib/querybuilder/panel/querybuilder.tsx
@@ -1,9 +1,3 @@
-import {
-  createReactFlowElements,
-  movePillTo,
-  dragPillStarted,
-  dragPillStopped,
-} from '@graphpolaris/shared/lib/querybuilder/usecases';
 import {
   setQuerybuilderNodes,
   useAppDispatch,
@@ -20,17 +14,19 @@ import styles from './querybuilder.module.scss';
 import {
   EntityFlowElement,
   RelationPill,
-  AttributeRFPill,
+  AttributePill,
   ConnectionDragLine,
   ConnectionLine,
 } from '@graphpolaris/shared/lib/querybuilder/pills';
 
 import { useMemo, useRef } from 'react';
+import { createReactFlowElements } from '../graph/reactflow/utils';
+import { dragPillStarted, movePillTo } from '../pills/dragging/dragPill';
 
 const nodeTypes = {
   entity: EntityFlowElement,
   relation: RelationPill,
-  attribute: AttributeRFPill,
+  attribute: AttributePill,
 };
 const edgeTypes = {
   connection: ConnectionLine,
diff --git a/libs/shared/lib/querybuilder/pills/customFlowLines/connection.tsx b/libs/shared/lib/querybuilder/pills/customFlowLines/connection.tsx
index 646b6f4f24159628ca7d82aa1a85162ac0c89d2b..36bab8056be94c13bcba5d6f73a281f812a9af36 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowLines/connection.tsx
+++ b/libs/shared/lib/querybuilder/pills/customFlowLines/connection.tsx
@@ -1,6 +1,6 @@
-import { handles } from '@graphpolaris/shared/lib/querybuilder/usecases';
 import React from 'react';
 import { EdgeProps, getSmoothStepPath, Position } from 'reactflow';
+import { handles } from '../../graph/reactflow/pillHandles';
 
 /**
  * A custom query element edge line component.
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/attributepill/attributepill-full.stories.tsx b/libs/shared/lib/querybuilder/pills/customFlowPills/attributepill/attributepill-full.stories.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..4afeb9d21b94a306bc3e1f419ea393faac5bb4e0
--- /dev/null
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/attributepill/attributepill-full.stories.tsx
@@ -0,0 +1,60 @@
+import React from 'react';
+import {
+  colorPaletteConfigSlice,
+  querybuilderSlice,
+  setQuerybuilderNodes,
+} from '@graphpolaris/shared/lib/data-access/store';
+import { GraphPolarisThemeProvider } from '@graphpolaris/shared/lib/data-access/theme';
+import { configureStore } from '@reduxjs/toolkit';
+import { Meta } from '@storybook/react';
+import { Provider } from 'react-redux';
+import { MultiGraph } from 'graphology';
+import { QueryBuilder } from '../../../panel';
+import { addPill2Graphology } from '../../../graph/graphology/utils';
+import { QueryGraph } from '../../../graph/graphology/model';
+import { circular } from 'graphology-layout';
+
+const Component: Meta<typeof QueryBuilder> = {
+  component: QueryBuilder,
+  title: 'Querybuilder/Pills/AttributePill',
+  decorators: [
+    (story) => (
+      <Provider store={mockStore}>
+        <GraphPolarisThemeProvider>{story()}</GraphPolarisThemeProvider>
+      </Provider>
+    ),
+  ],
+};
+
+// Mock palette store
+const mockStore = configureStore({
+  reducer: {
+    colorPaletteConfig: colorPaletteConfigSlice.reducer,
+    querybuilder: querybuilderSlice.reducer,
+  },
+});
+const graph: QueryGraph = new MultiGraph();
+addPill2Graphology(
+  '2',
+  {
+    type: 'attribute',
+    x: 170,
+    y: 160,
+    name: 'Attr string',
+    dataType: 'string',
+    matchType: 'NEQ',
+    value: 'mark',
+    fadeIn: false,
+    // depth: { min: 0, max: 1 },
+  },
+  graph
+);
+console.log(graph.export());
+
+mockStore.dispatch(setQuerybuilderNodes(graph.export()));
+
+export const Flow = {
+  args: {},
+};
+
+export default Component;
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/attributepill/attributepill.stories.tsx b/libs/shared/lib/querybuilder/pills/customFlowPills/attributepill/attributepill.stories.tsx
index c76dd412df9db944ad30863f0cc4ebfb71120c8c..eec408f5a00677e37e7144b00a74b3929b0cf5ca 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowPills/attributepill/attributepill.stories.tsx
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/attributepill/attributepill.stories.tsx
@@ -1,6 +1,6 @@
 import React from 'react';
 import { Meta } from '@storybook/react';
-import AttributeRFPill from './attributepill';
+import AttributePill from './attributepill';
 import { configureStore } from '@reduxjs/toolkit';
 import { Provider } from 'react-redux';
 import { GraphPolarisThemeProvider } from '@graphpolaris/shared/lib/data-access/theme';
@@ -12,13 +12,13 @@ import {
 } from '@graphpolaris/shared/lib/data-access/store';
 import { ReactFlowProvider } from 'reactflow';
 
-const Component: Meta<typeof AttributeRFPill> = {
+const Component: Meta<typeof AttributePill> = {
   /* 👇 The title prop is optional.
    * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading
    * to learn how to generate automatic titles
    */
-  title: 'Querybuilder/Pills/AttributeRFPill',
-  component: AttributeRFPill,
+  title: 'Querybuilder/Pills/AttributePill',
+  component: AttributePill,
   decorators: [
     (story) => (
       <Provider store={Mockstore}>
@@ -41,7 +41,7 @@ const Mockstore = configureStore({
   },
 });
 
-export const Default = {
+export const Simple = {
   args: {
     data: {
       name: 'TestEntity',
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/attributepill/attributepill.tsx b/libs/shared/lib/querybuilder/pills/customFlowPills/attributepill/attributepill.tsx
index 7c7a17c530d89b665f9482c1f42e7366f0dd8d04..359a562d3dd0fdbcfeb873e9806eea2a97999fb3 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowPills/attributepill/attributepill.tsx
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/attributepill/attributepill.tsx
@@ -1,7 +1,3 @@
-import {
-  CheckDatatypeConstraint,
-  GetAttributeBoolOperators,
-} from '@graphpolaris/shared/lib/querybuilder/usecases';
 import {
   updateQBAttributeOperator,
   updateQBAttributeValue,
@@ -11,18 +7,19 @@ import { useTheme } from '@mui/material';
 import React, { useMemo, useState } from 'react';
 import styles from './attributepill.module.scss';
 import { Handle, NodeProps, Position } from 'reactflow';
-import { AttributeNode } from '../../../structures/Nodes';
 import { AttributeOperatorSelect } from './operator';
-import { Handles } from '../../../structures/Handles';
 import Select from './select-component';
+import { AttributeNode } from '../../../graph/reactflow/model';
+import { Handles } from '../../../graph/reactflow/handles';
 
 /**
  * Component to render an attribute flow element
  * @param {FlowElement<EntityData>)} param0 The data of an entity flow element.
  */
-export const AttributeRFPill = React.memo(({ id, data }: AttributeNode) => {
+export const AttributePill = React.memo(({ id, data }: AttributeNode) => {
   const theme = useTheme();
   const [read, setRead] = useState(true);
+  // console.log('AttributePill', data);
 
   /**
    * Check if the pressed key is enter in order to send the new query.
@@ -109,7 +106,7 @@ export const AttributeRFPill = React.memo(({ id, data }: AttributeNode) => {
       <Handle
         id={Handles.OnAttribute}
         type="source"
-        position={Position.Bottom}
+        position={Position.Left}
         className={
           styles.attributeHandleLeft +
           ' ' +
@@ -118,7 +115,7 @@ export const AttributeRFPill = React.memo(({ id, data }: AttributeNode) => {
         style={{ backgroundColor: theme.palette.custom.elements.attribute[1] }}
       />
       <div className={styles.attributeWrapper}>
-        <span className={styles.attributeWrapperSpan}>{data?.attribute}</span>
+        <span className={styles.attributeWrapperSpan}>{data?.name}</span>
         <Select data={data} />
         <span className={styles.attributeInput}>
           <input type="hidden"></input>
@@ -142,6 +139,6 @@ export const AttributeRFPill = React.memo(({ id, data }: AttributeNode) => {
     </div>
   );
 });
-AttributeRFPill.displayName = 'AttributeRFPill';
+AttributePill.displayName = 'AttributePill';
 
-export default AttributeRFPill;
+export default AttributePill;
diff --git a/libs/shared/lib/querybuilder/usecases/attribute/checkInput.ts b/libs/shared/lib/querybuilder/pills/customFlowPills/attributepill/checkInput.ts
similarity index 100%
rename from libs/shared/lib/querybuilder/usecases/attribute/checkInput.ts
rename to libs/shared/lib/querybuilder/pills/customFlowPills/attributepill/checkInput.ts
diff --git a/libs/shared/lib/querybuilder/usecases/attribute/getAttributeBoolOperators.ts b/libs/shared/lib/querybuilder/pills/customFlowPills/attributepill/getAttributeBoolOperators.ts
similarity index 100%
rename from libs/shared/lib/querybuilder/usecases/attribute/getAttributeBoolOperators.ts
rename to libs/shared/lib/querybuilder/pills/customFlowPills/attributepill/getAttributeBoolOperators.ts
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/edge-line.tsx b/libs/shared/lib/querybuilder/pills/customFlowPills/edge-line.tsx
index 72fe298174edf670ad1aa0ff12255671eab185fb..2d9006f6712a37cbe4b503e53e6fd991d420edd9 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowPills/edge-line.tsx
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/edge-line.tsx
@@ -10,7 +10,7 @@
  * See testing plan for more details.*/
 import React from 'react';
 import { EdgeProps, getSmoothStepPath, Position } from 'reactflow';
-import { Handles } from '../../structures/Handles';
+import { Handles } from '../../graph-reactflow/handles';
 
 /**
  * A custom query element edge line component.
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/entitypill/entitypill-full.stories.tsx b/libs/shared/lib/querybuilder/pills/customFlowPills/entitypill/entitypill-full.stories.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..88e921bfd24e71d8a034a4bb5a664b42cf7f450a
--- /dev/null
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/entitypill/entitypill-full.stories.tsx
@@ -0,0 +1,50 @@
+import React from 'react';
+import {
+  colorPaletteConfigSlice,
+  querybuilderSlice,
+  setQuerybuilderNodes,
+} from '@graphpolaris/shared/lib/data-access/store';
+import { GraphPolarisThemeProvider } from '@graphpolaris/shared/lib/data-access/theme';
+import { configureStore } from '@reduxjs/toolkit';
+import { Meta } from '@storybook/react';
+import { Provider } from 'react-redux';
+import { MultiGraph } from 'graphology';
+import { QueryBuilder } from '../../../panel';
+import { addPill2Graphology } from '../../../graph/graphology/utils';
+import { QueryGraph } from '../../../graph/graphology/model';
+import { circular } from 'graphology-layout';
+
+const Component: Meta<typeof QueryBuilder> = {
+  component: QueryBuilder,
+  title: 'Querybuilder/Pills/EntityPill',
+  decorators: [
+    (story) => (
+      <Provider store={mockStore}>
+        <GraphPolarisThemeProvider>{story()}</GraphPolarisThemeProvider>
+      </Provider>
+    ),
+  ],
+};
+
+// Mock palette store
+const mockStore = configureStore({
+  reducer: {
+    colorPaletteConfig: colorPaletteConfigSlice.reducer,
+    querybuilder: querybuilderSlice.reducer,
+  },
+});
+const graph: QueryGraph = new MultiGraph();
+addPill2Graphology(
+  '2',
+  { type: 'entity', x: 100, y: 100, name: 'Entity Pill', fadeIn: false },
+  graph
+);
+console.log(graph.export());
+
+mockStore.dispatch(setQuerybuilderNodes(graph.export()));
+
+export const Flow = {
+  args: {},
+};
+
+export default Component;
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/entitypill/entitypill.module.scss.d.ts b/libs/shared/lib/querybuilder/pills/customFlowPills/entitypill/entitypill.module.scss.d.ts
index 4463ed1a30528ff02976d4e75d8a2788103922b5..bc2a7aa4bd34d49f3d40e760930d461ab62dce48 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowPills/entitypill/entitypill.module.scss.d.ts
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/entitypill/entitypill.module.scss.d.ts
@@ -17,6 +17,9 @@ declare const classNames: {
   readonly entityHandleLeft: 'entityHandleLeft';
   readonly entityHandleBottom: 'entityHandleBottom';
   readonly entitySpan: 'entitySpan';
+  readonly ToRelationHandle: 'ToRelationHandle';
+  readonly ToAttributeHandle: 'ToAttributeHandle';
+  readonly ReceiveFunctionHandle: 'ReceiveFunctionHandle';
   readonly handleFunctionEntity: 'handleFunctionEntity';
 };
 export = classNames;
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/entitypill/entitypill.stories.tsx b/libs/shared/lib/querybuilder/pills/customFlowPills/entitypill/entitypill.stories.tsx
index a0b50d291255b3affc8e80f106e5e0d2ece10efd..87d7a9e8ce85b6e08c8f2e90c6d723cf761405d8 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowPills/entitypill/entitypill.stories.tsx
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/entitypill/entitypill.stories.tsx
@@ -11,7 +11,7 @@ import {
   schemaSlice,
 } from '@graphpolaris/shared/lib/data-access/store';
 import { ReactFlowProvider } from 'reactflow';
-import { EntityData, EntityNode } from '../../../structures/Nodes';
+import { EntityData, EntityNode } from '../../../graph-reactflow/model';
 
 const Component: Meta<typeof EntityFlowElement> = {
   /* 👇 The title prop is optional.
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/entitypill/entitypill.tsx b/libs/shared/lib/querybuilder/pills/customFlowPills/entitypill/entitypill.tsx
index 0aa8a88a92a157f1f213c8a9dcb89cbf98019700..7a2bd9490c8b7d17244b7168efd17af85a9c7282 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowPills/entitypill/entitypill.tsx
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/entitypill/entitypill.tsx
@@ -2,9 +2,9 @@
 import { useTheme } from '@mui/material';
 import React, { useEffect } from 'react';
 import { ReactFlow, Handle, Position } from 'reactflow';
-import { EntityNode } from '../../../structures/Nodes';
 import styles from './entitypill.module.scss';
-import { Handles } from '../../../structures/Handles';
+import { EntityNode } from '../../../graph/reactflow/model';
+import { Handles } from '../../../graph/reactflow/handles';
 
 /**
  * Component to render an entity flow element
@@ -13,7 +13,7 @@ import { Handles } from '../../../structures/Handles';
 export const EntityFlowElement = React.memo(({ data }: EntityNode) => {
   const theme = useTheme();
 
-  console.log('EntityRFPill', data);
+  console.log('EntityPill', data);
 
   // TODO: Change flow element width when text overflows
   const animation = data.fadeIn ? styles.entityFade : '';
@@ -26,19 +26,19 @@ export const EntityFlowElement = React.memo(({ data }: EntityNode) => {
       <Handle
         id={Handles.ToRelation}
         type="source"
-        position={Position.Bottom}
+        position={Position.Left}
         className={
-          styles.entityHandleLeft +
+          styles.ToRelationHandle +
           ' ' +
           (false ? styles.handleConnectedFill : '')
         }
       />
       <Handle
-        id={Handles.ToAttributeHandle}
+        id={Handles.ToAttribute}
         type="target"
-        position={Position.Bottom}
+        position={Position.Left}
         className={
-          styles.entityHandleBottom +
+          styles.ToAttributeHandle +
           ' ' +
           (false ? styles.handleConnectedFill : '')
         }
@@ -46,9 +46,9 @@ export const EntityFlowElement = React.memo(({ data }: EntityNode) => {
       <Handle
         id={Handles.ReceiveFunction}
         type="target"
-        position={Position.Bottom}
+        position={Position.Left}
         className={
-          styles.handleFunction +
+          styles.ReceiveFunctionHandle +
           ' ' +
           (false ? styles.handleConnectedFill : '')
         }
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/functionpill/functionpill.module.scss.d.ts b/libs/shared/lib/querybuilder/pills/customFlowPills/functionpill/functionpill.module.scss.d.ts
index 3d99377bfba8c80e787070367b98fa8a6df1f06c..924514ea12818ede4d522342249d6035c47abe82 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowPills/functionpill/functionpill.module.scss.d.ts
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/functionpill/functionpill.module.scss.d.ts
@@ -1,4 +1,10 @@
 declare const classNames: {
+  readonly 'react-flow__node': 'react-flow__node';
+  readonly selected: 'selected';
+  readonly entityWrapper: 'entityWrapper';
+  readonly hidden: 'hidden';
+  readonly 'react-flow__edges': 'react-flow__edges';
+  readonly 'react-flow__edge-default': 'react-flow__edge-default';
   readonly handleConnectedFill: 'handleConnectedFill';
   readonly handleConnectedBorderRight: 'handleConnectedBorderRight';
   readonly handleConnectedBorderLeft: 'handleConnectedBorderLeft';
@@ -6,15 +12,14 @@ declare const classNames: {
   readonly entity: 'entity';
   readonly highlighted: 'highlighted';
   readonly handleLeft: 'handleLeft';
-  readonly 'react-flow__edges': 'react-flow__edges';
-  readonly 'react-flow__edge-default': 'react-flow__edge-default';
-  readonly selected: 'selected';
   readonly contentWrapper: 'contentWrapper';
   readonly entityFade: 'entityFade';
   readonly entityHandleLeft: 'entityHandleLeft';
   readonly entityHandleBottom: 'entityHandleBottom';
-  readonly entityWrapper: 'entityWrapper';
   readonly entitySpan: 'entitySpan';
+  readonly ToRelationHandle: 'ToRelationHandle';
+  readonly ToAttributeHandle: 'ToAttributeHandle';
+  readonly ReceiveFunctionHandle: 'ReceiveFunctionHandle';
   readonly handleFunctionEntity: 'handleFunctionEntity';
   readonly function: 'function';
   readonly functionWrapper: 'functionWrapper';
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/functionpill/functionpill.stories.tsx b/libs/shared/lib/querybuilder/pills/customFlowPills/functionpill/functionpill.stories.tsx
index ea45eba20e7e0405183a978b365011690e8a68a0..2488295e09b2e2b682a60dde06359a59a526640c 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowPills/functionpill/functionpill.stories.tsx
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/functionpill/functionpill.stories.tsx
@@ -15,7 +15,7 @@ import {
   EntityData,
   EntityNode,
   FunctionData,
-} from '../../../structures/Nodes';
+} from '../../../graph-reactflow/model';
 
 const Component: Meta<typeof FunctionFlowElement> = {
   /* 👇 The title prop is optional.
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/functionpill/functionpill.tsx b/libs/shared/lib/querybuilder/pills/customFlowPills/functionpill/functionpill.tsx
index 254f2d78af5f4557adad7bb31c0be4033346ad76..c0edcaff21c16a0f102d965fa5da96759bc23495 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowPills/functionpill/functionpill.tsx
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/functionpill/functionpill.tsx
@@ -11,9 +11,9 @@
 import React, { useState } from 'react';
 import { Handle, Position } from 'reactflow';
 import styles from './functionpill.module.scss';
-import { FunctionData, FunctionNode } from '../../../structures/Nodes';
 import { useTheme } from '@mui/material';
-import { Handles } from '../../../structures/Handles';
+import { FunctionData, FunctionNode } from '../../../graph/reactflow/model';
+import { Handles } from '../../../graph/reactflow/handles';
 
 const countArgs = (data: FunctionData | undefined) => {
   if (data !== undefined) {
@@ -148,7 +148,7 @@ export default function RelationFlowElement({ data }: FunctionNode) {
           }
         />
         <Handle
-          id={Handles.ToAttributeHandle}
+          id={Handles.ToAttribute}
           type="source"
           position={Position.Bottom}
           className={
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/modifierpill/modifierpill.module.scss.d.ts b/libs/shared/lib/querybuilder/pills/customFlowPills/modifierpill/modifierpill.module.scss.d.ts
index cda357ac92c4798eafb4006b0d994798bdd7e5da..d22770e4487c411c24d1fedf852dbe55ea42f79c 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowPills/modifierpill/modifierpill.module.scss.d.ts
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/modifierpill/modifierpill.module.scss.d.ts
@@ -1,4 +1,10 @@
 declare const classNames: {
+  readonly 'react-flow__node': 'react-flow__node';
+  readonly selected: 'selected';
+  readonly entityWrapper: 'entityWrapper';
+  readonly hidden: 'hidden';
+  readonly 'react-flow__edges': 'react-flow__edges';
+  readonly 'react-flow__edge-default': 'react-flow__edge-default';
   readonly handleConnectedFill: 'handleConnectedFill';
   readonly handleConnectedBorderRight: 'handleConnectedBorderRight';
   readonly handleConnectedBorderLeft: 'handleConnectedBorderLeft';
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/modifierpill/modifierpill.tsx b/libs/shared/lib/querybuilder/pills/customFlowPills/modifierpill/modifierpill.tsx
index 4e7e272e88de708f68c865b3046c20b110fbbffd..6041c775e13891b6f55ad41588ddd523fbfda34d 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowPills/modifierpill/modifierpill.tsx
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/modifierpill/modifierpill.tsx
@@ -12,7 +12,7 @@ import React from 'react';
 import { Handle, NodeProps, Position } from 'reactflow';
 import Select from './select-modifier';
 import styles from './modifierpill.module.scss';
-import { ModifierData, ModifierNode } from '../../../structures/Nodes';
+import { ModifierData, ModifierNode } from '../../../graph-reactflow/model';
 
 /**
  * Component to render an entity flow element
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/modifierpill/mopdifierpill.stories.tsx b/libs/shared/lib/querybuilder/pills/customFlowPills/modifierpill/mopdifierpill.stories.tsx
index 04b2283a2a15c4e4a49aec971f55e0be9fcfbd7c..480fe054e9465947e2e0c47d8b0a981aef0c9548 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowPills/modifierpill/mopdifierpill.stories.tsx
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/modifierpill/mopdifierpill.stories.tsx
@@ -16,7 +16,7 @@ import {
   EntityNode,
   FunctionData,
   ModifierData,
-} from '../../../structures/Nodes';
+} from '../../../graph-reactflow/model';
 
 const Component: Meta<typeof ModifierPill> = {
   /* 👇 The title prop is optional.
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/modifierpill/select-modifier.tsx b/libs/shared/lib/querybuilder/pills/customFlowPills/modifierpill/select-modifier.tsx
index c263b7620a2a04d6b8ae9e2e79ce75b8d1c4787b..86ebf29a76fea48ad15da5e287a18c719ec3f141 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowPills/modifierpill/select-modifier.tsx
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/modifierpill/select-modifier.tsx
@@ -11,7 +11,7 @@
 import React, { useState } from 'react';
 import { NodeProps } from 'reactflow';
 import styles from './modifierpill.module.scss';
-import { ModifierData } from '../../../structures/Nodes';
+import { ModifierData } from '../../../graph-reactflow/model';
 
 // Create style constant to prevent rereaction of styles
 
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relation-full.stories.tsx b/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relation-full.stories.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..36b8f7b3bcae5cbe6153d78b029927211810e124
--- /dev/null
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relation-full.stories.tsx
@@ -0,0 +1,57 @@
+import React from 'react';
+import {
+  colorPaletteConfigSlice,
+  querybuilderSlice,
+  setQuerybuilderNodes,
+} from '@graphpolaris/shared/lib/data-access/store';
+import { GraphPolarisThemeProvider } from '@graphpolaris/shared/lib/data-access/theme';
+import { configureStore } from '@reduxjs/toolkit';
+import { Meta } from '@storybook/react';
+import { Provider } from 'react-redux';
+import { MultiGraph } from 'graphology';
+import { QueryBuilder } from '../../../panel';
+import { addPill2Graphology } from '../../../graph/graphology/utils';
+import { QueryGraph } from '../../../graph/graphology/model';
+import { circular } from 'graphology-layout';
+
+const Component: Meta<typeof QueryBuilder> = {
+  component: QueryBuilder,
+  title: 'Querybuilder/Pills/relationPill',
+  decorators: [
+    (story) => (
+      <Provider store={mockStore}>
+        <GraphPolarisThemeProvider>{story()}</GraphPolarisThemeProvider>
+      </Provider>
+    ),
+  ],
+};
+
+// Mock palette store
+const mockStore = configureStore({
+  reducer: {
+    colorPaletteConfig: colorPaletteConfigSlice.reducer,
+    querybuilder: querybuilderSlice.reducer,
+  },
+});
+const graph: QueryGraph = new MultiGraph();
+addPill2Graphology(
+  '2',
+  {
+    type: 'relation',
+    x: 140,
+    y: 140,
+    name: 'Relation Pill',
+    depth: { min: 0, max: 1 },
+    fadeIn: false,
+  },
+  graph
+);
+console.log(graph.export());
+
+mockStore.dispatch(setQuerybuilderNodes(graph.export()));
+
+export const Flow = {
+  args: {},
+};
+
+export default Component;
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill copy.txt b/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill copy.txt
new file mode 100644
index 0000000000000000000000000000000000000000..805e3f3fc78bd04389de1363e61d22592aa70044
--- /dev/null
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill copy.txt	
@@ -0,0 +1,242 @@
+import React, { memo, useRef, useState } from 'react';
+
+import { handles } from '@graphpolaris/shared/lib/querybuilder/usecases';
+import { useTheme } from '@mui/material';
+import { Handle, Position } from 'reactflow';
+import cn from 'classnames';
+
+import styles from './relationpill.module.scss';
+import { Handles } from '../../../structures/Handles';
+import { RelationNode } from '../../../structures/Nodes';
+
+// export type RelationRFPillProps = {
+//   data: {
+//     name: string;
+//     suggestedForConnection: any;
+//     isFromEntityConnected?: boolean;
+//     isToEntityConnected?: boolean;
+//   };
+// };
+
+/**
+ * Component to render a relation flow element
+ * @param { FlowElement<RelationData>} param0 The data of a relation flow element.
+ */
+export const RelationPill = memo(({ data }: RelationNode) => {
+  // export default function RelationRFPill({ data }: { data: any }) {
+  const theme = useTheme();
+  // console.log('RelationRFPill', data);
+
+  const minRef = useRef<HTMLInputElement>(null);
+  const maxRef = useRef<HTMLInputElement>(null);
+
+  const [readOnlyMin, setReadOnlyMin] = useState(true);
+  const [readOnlyMax, setReadOnlyMax] = useState(true);
+
+  const onDepthChanged = (depth: string) => {
+    // Don't allow depth above 99
+    const limit = 99;
+    if (data?.depth != undefined) {
+      data.depth.min = data.depth.min >= limit ? limit : data.depth.min;
+      data.depth.max = data.depth.max >= limit ? limit : data.depth.max;
+
+      // Check for for valid depth: min <= max
+      if (depth == 'min') {
+        if (data.depth.min > data.depth.max) data.depth.max = data.depth.min;
+        setReadOnlyMin(true);
+      } else if (depth == 'max') {
+        if (data.depth.max < data.depth.min) data.depth.min = data.depth.max;
+        setReadOnlyMax(true);
+      }
+
+      // Set to the correct width
+      if (maxRef.current)
+        maxRef.current.style.maxWidth = calcWidth(data.depth.max);
+      if (minRef.current)
+        minRef.current.style.maxWidth = calcWidth(data.depth.min);
+    }
+  };
+
+  const isNumber = (x: string) => {
+    {
+      if (typeof x != 'string') return false;
+      return !Number.isNaN(x) && !Number.isNaN(parseFloat(x));
+    }
+  };
+
+  const calcWidth = (data: number) => {
+    return data.toString().length + 0.5 + 'ch';
+  };
+
+  return (
+    <div
+      className={styles.relation}
+      style={{
+        background: theme.palette.custom.nodesBase[0],
+        borderTop: `4px solid ${theme.palette.custom.nodesBase[0]}`,
+        borderBottom: `6px solid ${theme.palette.custom.elements.relationBase[0]}`,
+      }}
+    >
+      <div className={styles.relationWrapper}>
+        <div
+          className={[
+            styles.relationNodeTriangleGeneral,
+            styles.relationNodeTriangleLeft,
+          ].join(' ')}
+          style={{ borderRightColor: theme.palette.custom.nodesBase[0] }}
+        >
+          <span className={styles.relationHandleFiller}>
+            <Handle
+              id={Handles.RelationLeft}
+              type="target"
+              position={Position.Left}
+              className={
+                styles.relationHandleLeft +
+                ' ' +
+                (false ? styles.handleConnectedBorderLeft : '')
+              }
+            />
+          </span>
+        </div>
+        <div
+          className={[
+            styles.relationNodeTriangleGeneral,
+            styles.relationNodeSmallTriangleLeft,
+          ].join(' ')}
+          style={{
+            borderRightColor: theme.palette.custom.elements.relationBase[0],
+          }}
+        ></div>
+        <div
+          className={[
+            styles.relationNodeTriangleGeneral,
+            styles.relationNodeTriangleRight,
+          ].join(' ')}
+          style={{ borderLeftColor: theme.palette.custom.nodesBase[0] }}
+        >
+          <span className={styles.relationHandleFiller}>
+            <Handle
+              id={Handles.RelationRight}
+              type="target"
+              position={Position.Right}
+              className={
+                styles.relationHandleRight +
+                ' ' +
+                (false ? styles.handleConnectedBorderRight : '')
+              }
+            />
+          </span>
+        </div>
+        <div
+          className={[
+            styles.relationNodeTriangleGeneral,
+            styles.relationNodeSmallTriangleRight,
+          ].join(' ')}
+          style={{
+            borderLeftColor: theme.palette.custom.elements.relationBase[0],
+          }}
+        ></div>
+
+        <span className={styles.relationHandleFiller}>
+          <Handle
+            id={Handles.ToAttributeHandle}
+            type="target"
+            position={Position.Bottom}
+            className={
+              styles.relationHandleBottom +
+              ' ' +
+              (false ? styles.handleConnectedFill : '')
+            }
+          />
+        </span>
+        <div className={styles.relationDataWrapper}>
+          <span className={styles.relationSpan}>{data?.name}</span>
+          <span className={styles.relationInputHolder}>
+            <span>[</span>
+            <input
+              className={
+                styles.relationInput +
+                ' ' +
+                (readOnlyMin ? styles.relationReadonly : '')
+              }
+              ref={minRef}
+              type="string"
+              min={0}
+              readOnly={readOnlyMin}
+              placeholder={'?'}
+              value={data?.depth.min}
+              onChange={(e) => {
+                if (data != undefined) {
+                  data.depth.min = isNumber(e.target.value)
+                    ? parseInt(e.target.value)
+                    : 0;
+                  e.target.style.maxWidth = calcWidth(data.depth.min);
+                }
+              }}
+              onDoubleClick={() => {
+                setReadOnlyMin(false);
+              }}
+              onBlur={(e) => {
+                onDepthChanged('min');
+              }}
+              onKeyDown={(e) => {
+                if (e.key === 'Enter') {
+                  onDepthChanged('min');
+                }
+              }}
+            ></input>
+            <span>..</span>
+            <input
+              className={
+                styles.relationInput +
+                ' ' +
+                (readOnlyMax ? styles.relationReadonly : '')
+              }
+              ref={maxRef}
+              type="string"
+              min={0}
+              readOnly={readOnlyMax}
+              placeholder={'?'}
+              value={data?.depth.max}
+              onChange={(e) => {
+                if (data != undefined) {
+                  data.depth.max = isNumber(e.target.value)
+                    ? parseInt(e.target.value)
+                    : 0;
+                  e.target.style.maxWidth = calcWidth(data.depth.max);
+                }
+              }}
+              onDoubleClick={() => {
+                setReadOnlyMax(false);
+              }}
+              onBlur={(e) => {
+                onDepthChanged('max');
+              }}
+              onKeyDown={(e) => {
+                if (e.key === 'Enter') {
+                  onDepthChanged('max');
+                }
+              }}
+            ></input>
+            <span>]</span>
+          </span>
+        </div>
+        <Handle
+          id={Handles.ReceiveFunction}
+          type="target"
+          position={Position.Bottom}
+          className={
+            styles.relationHandleFunction +
+            ' ' +
+            styles.handleFunction +
+            ' ' +
+            (false ? styles.handleConnectedFill : '')
+          }
+        />
+      </div>
+    </div>
+  );
+});
+
+RelationPill.displayName = 'RelationPill';
+export default RelationPill;
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill.module copy.scss b/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill.module copy.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e7dd844ff495b98f1ff9ceebf1e57b41dc9fede0
--- /dev/null
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill.module copy.scss	
@@ -0,0 +1,304 @@
+@import '../../querypills.module.scss';
+
+.relation {
+  display: flex;
+  text-align: center;
+  font-family: monospace;
+  font-weight: bold;
+  font-size: 10px;
+  background-color: transparent;
+}
+
+.highlighted {
+  box-shadow: black 0 0 2px;
+}
+
+.contentWrapper {
+  display: flex;
+  align-items: center;
+
+  .handleLeft {
+    position: relative;
+    z-index: 3;
+
+    top: 25%;
+    border: 0px;
+    border-radius: 0px;
+
+    background: transparent;
+    transform-origin: center;
+
+    width: 0;
+    height: 0;
+    border-top: 5px solid transparent;
+    border-bottom: 5px solid transparent;
+    border-right: rgba(255, 255, 255, 0.7) 6px solid;
+
+    &::after {
+      content: '';
+      display: block;
+      position: absolute;
+      width: 0;
+      height: 0;
+      border-top: 7px solid transparent;
+      border-bottom: 7px solid transparent;
+      border-right: rgba(0, 0, 0, 0.1) 8px solid;
+      top: -7px;
+      right: -7px;
+    }
+  }
+  .highlighted {
+    z-index: -1;
+    box-shadow: 0 0 2px 1px gray;
+  }
+
+  .content {
+    margin: 0 2ch;
+    padding: 3px 0;
+    max-width: 20ch;
+    text-overflow: ellipsis;
+    overflow: hidden;
+    white-space: nowrap;
+    // pointer-events: none;
+  }
+
+  .handleRight {
+    position: relative;
+    top: 25%;
+    border: 0px;
+    border-radius: 0px;
+
+    background: transparent;
+    transform-origin: center;
+
+    width: 0;
+    height: 0;
+    border-top: 5px solid transparent;
+    border-bottom: 5px solid transparent;
+    border-left: rgba(255, 255, 255, 0.7) 6px solid;
+
+    &::after {
+      content: '';
+      display: block;
+      position: absolute;
+      width: 0;
+      height: 0;
+      border-top: 7px solid transparent;
+      border-bottom: 7px solid transparent;
+      border-left: rgba(0, 0, 0, 0.1) 8px solid;
+      top: -7px;
+      left: -7px;
+    }
+  }
+}
+
+$height: 10px;
+.arrowLeft {
+  z-index: 2;
+  width: 0;
+  height: 0;
+  border-top: $height solid transparent;
+  border-bottom: $height solid transparent;
+  transform: scale(1.028) translate(0.3px 0px);
+
+  border-right: $height solid;
+}
+
+.arrowRight {
+  width: 0;
+  height: 0;
+  border-top: $height solid transparent;
+  border-bottom: $height solid transparent;
+  transform: scale(1.02) translate(-0.3px 0px);
+
+  border-left: $height solid;
+}
+
+// Relation element
+.relation {
+  height: 36;
+  min-width: 240px;
+  display: flex;
+  text-align: center;
+  color: black;
+  line-height: 20px;
+  font-family: monospace;
+  font-weight: bold;
+  font-size: 11px;
+}
+
+.relationWrapper {
+  display: inherit;
+  align-items: center;
+  justify-content: space-between;
+}
+
+.relationNodeTriangleGeneral {
+  position: absolute;
+  width: 0;
+  height: 0;
+  margin: auto 0;
+  border-style: solid;
+  border-color: transparent;
+}
+
+.relationNodeTriangleLeft {
+  transform: translateX(-100%);
+  top: 0px;
+  border-width: 18px 24px 18px 0;
+}
+
+.relationNodeSmallTriangleLeft {
+  transform: translateX(-100%);
+  top: 30px;
+  border-width: 0 8px 6px 0;
+}
+
+.relationNodeTriangleRight {
+  right: -24px;
+  top: 0px;
+  border-width: 18px 0 18px 24px;
+}
+
+.relationNodeSmallTriangleRight {
+  right: -8px;
+  top: 30px;
+  border-width: 0 0 6px 8px;
+}
+
+.relationHandleFiller {
+  display: block;
+}
+
+.relationHandleLeft {
+  position: absolute;
+  top: 50%;
+  margin-left: 15px;
+  border-style: solid;
+  border-width: 8px 12px 8px 0;
+  border-radius: 0px;
+  left: unset;
+  border-color: transparent rgba(0, 0, 0, 0.3) transparent transparent;
+  background: transparent;
+  &::before {
+    content: '';
+    border-style: solid;
+    border-width: 6px 8px 6px 0;
+    border-color: transparent rgba(255, 255, 255, 0.6) transparent transparent;
+    background: transparent;
+    z-index: -1;
+    display: inline-block;
+    position: absolute;
+    top: -0.5em;
+    left: 0.25em;
+  }
+}
+
+.relationHandleRight {
+  position: absolute;
+  margin-right: 19px;
+  border-style: solid;
+  border-width: 8px 0 8px 12px;
+  border-radius: 0px;
+  left: unset;
+  border-color: transparent transparent transparent rgba(0, 0, 0, 0.3);
+  background: transparent;
+  &::before {
+    content: '';
+    border-style: solid;
+    border-width: 6px 0 6px 8px;
+    border-color: transparent transparent transparent rgba(255, 255, 255, 0.6);
+    background: transparent;
+    z-index: -1;
+    display: inline-block;
+    position: absolute;
+    top: -0.5em;
+    right: 0.25em;
+  }
+}
+
+.relationHandleBottom {
+  border: 0;
+  border-radius: 0;
+  width: 8;
+  height: 8;
+  left: unset;
+  margin-bottom: 18;
+  margin-left: 40;
+  background: rgba(0, 0, 0, 0.3);
+  transform: rotate(-45deg);
+  transform-origin: center;
+  margin: 5px;
+  &::before {
+    content: '';
+    width: 6;
+    height: 6;
+    left: 1;
+    bottom: 1;
+    border: 0;
+    border-radius: 0;
+    background: rgba(255, 255, 255, 0.6);
+    z-index: -1;
+    display: inline-block;
+    position: fixed;
+  }
+}
+
+.relationDataWrapper {
+  margin-left: 80;
+}
+
+.relationSpan {
+  float: left;
+  margin-left: 5;
+}
+
+.relationInputHolder {
+  display: flex;
+  float: right;
+  margin-right: 20px;
+  margin-top: 4px;
+  margin-left: 5px;
+  max-width: 80px;
+  background-color: rgba(255, 255, 255, 0.6);
+  border-radius: 2px;
+  align-items: center;
+  max-height: 12px;
+}
+
+.relationInput {
+  z-index: 1;
+  cursor: text;
+  min-width: 0px;
+  max-width: 1.5ch;
+  border: none;
+  background: transparent;
+  text-align: center;
+  font-family: monospace;
+  font-weight: bold;
+  font-size: 11px;
+  color: #181520;
+  user-select: none;
+  font-style: italic;
+  &:focus {
+    outline: none;
+    user-select: none;
+  }
+  &::placeholder {
+    outline: none;
+    user-select: none;
+    font-style: italic;
+  }
+}
+
+.relationReadonly {
+  cursor: grab !important;
+  color: #181520 !important;
+  user-select: none;
+  font-style: normal !important;
+}
+
+.relationHandleFunction {
+  margin-left: 20;
+  margin-bottom: 18px !important;
+}
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill.module.scss.d.ts b/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill.module.scss.d.ts
index 6c853cb0e9a0e47ae837108048613ac30a223336..1348fe7efc3d9733a5bedea25c46bc5d23ec4f8b 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill.module.scss.d.ts
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill.module.scss.d.ts
@@ -9,7 +9,6 @@ declare const classNames: {
   readonly handleConnectedBorderRight: 'handleConnectedBorderRight';
   readonly handleConnectedBorderLeft: 'handleConnectedBorderLeft';
   readonly handleFunction: 'handleFunction';
-  readonly relation: 'relation';
   readonly highlighted: 'highlighted';
   readonly contentWrapper: 'contentWrapper';
   readonly handleLeft: 'handleLeft';
@@ -17,12 +16,15 @@ declare const classNames: {
   readonly handleRight: 'handleRight';
   readonly arrowLeft: 'arrowLeft';
   readonly arrowRight: 'arrowRight';
+  readonly relation: 'relation';
+  readonly rightArrow: 'rightArrow';
+  readonly leftArrow: 'leftArrow';
   readonly relationTop: 'relationTop';
   readonly relationBottom: 'relationBottom';
   readonly relationWrapper: 'relationWrapper';
   readonly relationHandleFiller: 'relationHandleFiller';
   readonly relationHandleLeft: 'relationHandleLeft';
-  readonly relationHandleBottom: 'relationHandleBottom';
+  readonly relationHandleAttribute: 'relationHandleAttribute';
   readonly relationHandleRight: 'relationHandleRight';
   readonly relationHandleFunction: 'relationHandleFunction';
   readonly relationInputHolder: 'relationInputHolder';
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill.stories.tsx b/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill.stories.tsx
index 59f7ef74002e7f4362684d1aea0e6ad577c0f44e..35171325cb14ef9d80de42d8470862b9a5895e47 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill.stories.tsx
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill.stories.tsx
@@ -11,7 +11,7 @@ import {
   schemaSlice,
 } from '@graphpolaris/shared/lib/data-access/store';
 import { ReactFlowProvider } from 'reactflow';
-import { RelationData } from '../../../structures/Nodes';
+import { RelationData } from '../../../graph/reactflow/model';
 
 const Component: Meta<typeof RelationPill> = {
   /* 👇 The title prop is optional.
diff --git a/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill.tsx b/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill.tsx
index cd912b2befbeeddae42c7d65c383f069ee6a3994..84ed39fc7269429dca547937ab328dacdf022d0d 100644
--- a/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill.tsx
+++ b/libs/shared/lib/querybuilder/pills/customFlowPills/relationpill/relationpill.tsx
@@ -1,13 +1,11 @@
 import React, { memo, useRef, useState } from 'react';
 
-import { handles } from '@graphpolaris/shared/lib/querybuilder/usecases';
 import { useTheme } from '@mui/material';
 import { Handle, Position } from 'reactflow';
-import cn from 'classnames';
 
 import styles from './relationpill.module.scss';
-import { Handles } from '../../../structures/Handles';
-import { RelationNode } from '../../../structures/Nodes';
+import { RelationNode } from '../../../graph/reactflow/model';
+import { Handles } from '../../../graph/reactflow/handles';
 
 // export type RelationRFPillProps = {
 //   data: {
@@ -69,15 +67,26 @@ export const RelationPill = memo(({ data }: RelationNode) => {
   };
 
   return (
-    <div className={styles.relation}>
-      <span
+    <div
+      className={styles.relation}
+      style={{ backgroundColor: theme.palette.custom.elements.relation[0] }}
+    >
+      <div
+        className={styles.rightArrow}
+        style={{ borderLeftColor: theme.palette.custom.elements.relation[0] }}
+      ></div>
+      <div
+        className={styles.leftArrow}
+        style={{ borderRightColor: theme.palette.custom.elements.relation[0] }}
+      ></div>
+      {/* <span
         className={styles.relationTop}
         style={{ backgroundColor: theme.palette.custom.elements.relation[0] }}
       ></span>
       <span
         className={styles.relationBottom}
         style={{ backgroundColor: theme.palette.custom.elements.relation[0] }}
-      ></span>
+      ></span> */}
       <div className={styles.relationWrapper}>
         <span className={styles.relationHandleFiller}>
           <Handle
@@ -93,11 +102,11 @@ export const RelationPill = memo(({ data }: RelationNode) => {
         </span>
         <span className={styles.relationHandleFiller}>
           <Handle
-            id={Handles.ToAttributeHandle}
+            id={Handles.ToAttribute}
             type="target"
-            position={Position.Bottom}
+            position={Position.Left}
             className={
-              styles.relationHandleBottom +
+              styles.relationHandleAttribute +
               ' ' +
               (false ? styles.handleConnectedFill : '')
             }
@@ -190,12 +199,10 @@ export const RelationPill = memo(({ data }: RelationNode) => {
         <Handle
           id={Handles.ReceiveFunction}
           type="target"
-          position={Position.Bottom}
+          position={Position.Right}
           className={
             styles.relationHandleFunction +
             ' ' +
-            styles.handleFunction +
-            ' ' +
             (false ? styles.handleConnectedFill : '')
           }
         />
diff --git a/libs/shared/lib/querybuilder/usecases/dragging/dragAttribute.ts b/libs/shared/lib/querybuilder/pills/dragging/dragAttribute.ts
similarity index 100%
rename from libs/shared/lib/querybuilder/usecases/dragging/dragAttribute.ts
rename to libs/shared/lib/querybuilder/pills/dragging/dragAttribute.ts
diff --git a/libs/shared/lib/querybuilder/usecases/dragging/dragAttributesAlong.ts b/libs/shared/lib/querybuilder/pills/dragging/dragAttributesAlong.ts
similarity index 100%
rename from libs/shared/lib/querybuilder/usecases/dragging/dragAttributesAlong.ts
rename to libs/shared/lib/querybuilder/pills/dragging/dragAttributesAlong.ts
diff --git a/libs/shared/lib/querybuilder/usecases/dragging/dragEntity.ts b/libs/shared/lib/querybuilder/pills/dragging/dragEntity.ts
similarity index 100%
rename from libs/shared/lib/querybuilder/usecases/dragging/dragEntity.ts
rename to libs/shared/lib/querybuilder/pills/dragging/dragEntity.ts
diff --git a/libs/shared/lib/querybuilder/usecases/dragging/dragPill.ts b/libs/shared/lib/querybuilder/pills/dragging/dragPill.ts
similarity index 100%
rename from libs/shared/lib/querybuilder/usecases/dragging/dragPill.ts
rename to libs/shared/lib/querybuilder/pills/dragging/dragPill.ts
diff --git a/libs/shared/lib/querybuilder/usecases/dragging/dragRelation.ts b/libs/shared/lib/querybuilder/pills/dragging/dragRelation.ts
similarity index 100%
rename from libs/shared/lib/querybuilder/usecases/dragging/dragRelation.ts
rename to libs/shared/lib/querybuilder/pills/dragging/dragRelation.ts
diff --git a/libs/shared/lib/querybuilder/usecases/dragging/getClosestPill.ts b/libs/shared/lib/querybuilder/pills/dragging/getClosestPill.ts
similarity index 100%
rename from libs/shared/lib/querybuilder/usecases/dragging/getClosestPill.ts
rename to libs/shared/lib/querybuilder/pills/dragging/getClosestPill.ts
diff --git a/libs/shared/lib/querybuilder/structures/FunctionDescriptions.tsx b/libs/shared/lib/querybuilder/structures/FunctionDescriptions.tsx
deleted file mode 100644
index f350e03be0fee6a6c238cdf0ad635e0303a2588b..0000000000000000000000000000000000000000
--- a/libs/shared/lib/querybuilder/structures/FunctionDescriptions.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * This program has been developed by students from the bachelor Computer Science at
- * Utrecht University within the Software Project course.
- * © Copyright Utrecht University (Department of Information and Computing Sciences)
- */
-
-import { FunctionTypes } from './FunctionTypes';
-
-/** Interface for what function descriptions need */
-export interface FunctionDescription {
-  name: string;
-  type: FunctionTypes;
-  description: string;
-}
-
-/** All availiable functions in the function bar. */
-export const AvailableFunctions: Record<string, FunctionDescription> = {
-  centrality: {
-    name: 'centrality',
-    type: FunctionTypes.centrality,
-    description: 'W.I.P. Shows the importance of nodes',
-  },
-  communityDetection: {
-    name: 'Community Detection',
-    type: FunctionTypes.communityDetection,
-    description: 'Group entities connected by a relation based on how interconnected they are.',
-  },
-  groupBy: {
-    name: 'Group By',
-    type: FunctionTypes.GroupBy,
-    description:
-      'W.I.P. Per entity of type A, generate aggregate statistics of an attribute of either alllinks of a relation, or all nodes of anentity of type B connected to the type A entity by a relation.',
-  },
-  link: {
-    name: 'Link Prediction',
-    type: FunctionTypes.link,
-    description:
-      'For each pair of entities from a giventype, determine the overlap betweennodes they are connect to by a given relation.',
-  },
-  shortestPath: {
-    name: 'shortestPath',
-    type: FunctionTypes.shortestPath,
-    description: 'W.I.P. shortest path. Shows the shortest path between nodes',
-  },
-};
diff --git a/libs/shared/lib/querybuilder/structures/IsNodeType.tsx b/libs/shared/lib/querybuilder/structures/IsNodeType.tsx
deleted file mode 100644
index 625ec523d33ac55c9344344165784a6a532a84d3..0000000000000000000000000000000000000000
--- a/libs/shared/lib/querybuilder/structures/IsNodeType.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * This program has been developed by students from the bachelor Computer Science at
- * Utrecht University within the Software Project course.
- * © Copyright Utrecht University (Department of Information and Computing Sciences)
- */
-import {
-  AnyNode,
-  AttributeNode,
-  EntityNode,
-  FunctionNode,
-  QueryElementTypes,
-  RelationNode,
-} from './Nodes';
-
-/**
- * Checks if a node is an entityNode.
- * @param {AnyNode} node The node that has to checked.
- * @returns True and casts if the node is an EntityNode.
- */
-export function isEntityNode(node: AnyNode): node is EntityNode {
-  return node.type == QueryElementTypes.Entity;
-}
-
-/**
- * Checks if a node is a RelationNode.
- * @param {AnyNode} node The node that has to checked.
- * @returns True and casts if the node is an RelationNode.
- */
-export function isRelationNode(node: AnyNode): node is RelationNode {
-  return node.type == QueryElementTypes.Relation;
-}
-
-/**
- * Checks if a node is an AttributeNode.
- * @param {AnyNode} node The node that has to checked.
- * @returns True and casts if the node is an AttributeNode.
- */
-export function isAttributeNode(node: AnyNode): node is AttributeNode {
-  return node.type == QueryElementTypes.Attribute;
-}
-
-/**
- * Checks if a node is an FunctionNode.
- * @param {AnyNode} node The node that has to checked.
- * @returns True and casts if the node is an FunctionNode.
- */
-export function isFunctionNode(node: AnyNode): node is FunctionNode {
-  return node.type == QueryElementTypes.Function;
-}
\ No newline at end of file
diff --git a/libs/shared/lib/querybuilder/structures/NodePosition.tsx b/libs/shared/lib/querybuilder/structures/NodePosition.tsx
deleted file mode 100644
index 8711645512efff0a9e58a78d1334e744362ebde3..0000000000000000000000000000000000000000
--- a/libs/shared/lib/querybuilder/structures/NodePosition.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * This program has been developed by students from the bachelor Computer Science at
- * Utrecht University within the Software Project course.
- * © Copyright Utrecht University (Department of Information and Computing Sciences)
- */
-
-/** Interface for x and y position of node */
-export interface NodePosition {
-  x: number;
-  y: number;
-}
-
-/** Returns from-position of relation node */
-export function RelationPosToFromEntityPos(position: NodePosition): NodePosition {
-  return { x: position.x - 60, y: position.y - 40 };
-}
-
-/** Returns to-position of relation node */
-export function RelationPosToToEntityPos(position: NodePosition): NodePosition {
-  return { x: position.x + 400, y: position.y };
-}
-
-/** Default position; x=0, y=0 */
-export const DefaultPosition = { x: 0, y: 0 };
diff --git a/libs/shared/lib/querybuilder/usecases/index.ts b/libs/shared/lib/querybuilder/usecases/index.ts
deleted file mode 100644
index 54e15f0b0d2ef473477ca7d09d970ef86eb63c29..0000000000000000000000000000000000000000
--- a/libs/shared/lib/querybuilder/usecases/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export * from './attribute/getAttributeBoolOperators';
-export * from './attribute/checkInput';
-export * from './createReactFlowElements';
-export * from './pillHandles';
-export * from './dragging/dragPill';
-export * from './addPill';
diff --git a/libs/shared/lib/querybuilder/usecases/querybuilder-usecases.spec.ts b/libs/shared/lib/querybuilder/usecases/querybuilder-usecases.spec.ts
deleted file mode 100644
index cb212e0e122658ec13e90e4c8b9e613c51b8b8d8..0000000000000000000000000000000000000000
--- a/libs/shared/lib/querybuilder/usecases/querybuilder-usecases.spec.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { querybuilderUsecases } from './querybuilder-usecases';
-import { assert, describe, expect, it } from "vitest";
-
-describe('querybuilderUsecases', () => {
-  it('should work', () => {
-    expect(querybuilderUsecases()).toEqual('querybuilder-usecases');
-  });
-});
diff --git a/libs/shared/lib/querybuilder/usecases/querybuilder-usecases.ts b/libs/shared/lib/querybuilder/usecases/querybuilder-usecases.ts
deleted file mode 100644
index 06d687eb90fbdd6d6e752c90417a12a854aff52b..0000000000000000000000000000000000000000
--- a/libs/shared/lib/querybuilder/usecases/querybuilder-usecases.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export function querybuilderUsecases(): string {
-  return 'querybuilder-usecases';
-}
diff --git a/libs/shared/lib/schema/panel/schema.tsx b/libs/shared/lib/schema/panel/schema.tsx
index c99707f3ebb1a735c28a76c7e3bfd7fbccd0c2b6..d5990f1c0acf7e514e5e5512be7bc3a3739cc866 100644
--- a/libs/shared/lib/schema/panel/schema.tsx
+++ b/libs/shared/lib/schema/panel/schema.tsx
@@ -31,7 +31,7 @@ import styles from './schema.module.scss';
 import {
   EntityFlowElement,
   RelationPill,
-  AttributeRFPill,
+  AttributePill,
   ConnectionDragLine,
   ConnectionLine,
 } from '@graphpolaris/shared/lib/querybuilder/pills';
diff --git a/libs/shared/lib/schema/panel/schemaOLD.tsx b/libs/shared/lib/schema/panel/schemaOLD.tsx
index 06884037ed6c831f7e2cc6bfed19c00c60c263f8..0f943c3bf010e6293b42bbdda6b32c09b86d4bb5 100644
--- a/libs/shared/lib/schema/panel/schemaOLD.tsx
+++ b/libs/shared/lib/schema/panel/schemaOLD.tsx
@@ -30,7 +30,7 @@ import styles from './schema.module.scss';
 import {
   EntityFlowElement,
   RelationPill,
-  AttributeRFPill,
+  AttributePill,
   ConnectionDragLine,
   ConnectionLine,
 } from '@graphpolaris/shared/lib/querybuilder/pills';
@@ -46,7 +46,7 @@ const onLoad = (reactFlowInstance: any) => {
 const nodeTypes = {
   entity: EntityFlowElement,
   relation: RelationPill,
-  attribute: AttributeRFPill,
+  attribute: AttributePill,
 };
 const edgeTypes = {
   connection: ConnectionLine,
diff --git a/libs/storybook/package.json b/libs/storybook/package.json
index 4ae25ae4255dedc0484cb2607ade11962348fc2f..3e1f36b4c340170ac3b7cd26d977ec45915991dd 100644
--- a/libs/storybook/package.json
+++ b/libs/storybook/package.json
@@ -16,14 +16,14 @@
     "ui": "workspace:*"
   },
   "devDependencies": {
-    "@storybook/addon-essentials": "7.0.0-rc.5",
-    "@storybook/addon-interactions": "7.0.0-rc.5",
-    "@storybook/addon-links": "7.0.0-rc.5",
+    "@storybook/addon-essentials": "next",
+    "@storybook/addon-interactions": "next",
+    "@storybook/addon-links": "^7.0.2",
     "@storybook/addon-styling": "^0.3.2",
-    "@storybook/blocks": "7.0.0-rc.5",
+    "@storybook/blocks": "^7.0.2",
     "@storybook/preset-scss": "^1.0.3",
-    "@storybook/react": "7.0.0-rc.5",
-    "@storybook/react-vite": "7.0.0-rc.5",
+    "@storybook/react": "^7.0.2",
+    "@storybook/react-vite": "^7.0.2",
     "@storybook/testing-library": "0.0.14-next.1",
     "@types/node": "18.13.0",
     "@types/react": "^18.0.28",
@@ -36,7 +36,7 @@
     "prop-types": "15.8.1",
     "sass": "^1.59.3",
     "sass-loader": "^13.2.2",
-    "storybook": "7.0.0-rc.5",
+    "storybook": "^7.0.2",
     "typescript": "^4.9.3",
     "vite": "^4.2.0",
     "vite-plugin-sass-dts": "^1.3.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2053e84891e1902b85e8c9bceb9cc1f130c683be..5c0c2a12b86f20b4cad32003b63ac13b0e3bf4d6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -24,7 +24,7 @@ importers:
         version: 2.8.7
       turbo:
         specifier: latest
-        version: 1.8.8
+        version: 1.8.6
 
   apps/web:
     dependencies:
@@ -189,8 +189,8 @@ importers:
         specifier: ^6.8.1
         version: 6.9.0(react-dom@18.2.0)(react@18.2.0)
       reactflow:
-        specifier: next
-        version: 11.4.0-next.1(react-dom@18.2.0)(react@18.2.0)
+        specifier: ^11.7.0
+        version: 11.7.0(react-dom@18.2.0)(react@18.2.0)
       regenerator-runtime:
         specifier: 0.13.11
         version: 0.13.11
@@ -212,7 +212,7 @@ importers:
     devDependencies:
       '@storybook/addon-styling':
         specifier: ^0.3.2
-        version: 0.3.2(@storybook/addons@6.5.16)(@storybook/api@6.5.16)(@storybook/components@6.5.16)(@storybook/core-events@6.5.16)(@storybook/manager-api@7.0.0-rc.5)(@storybook/theming@6.5.16)(react-dom@18.2.0)(react@18.2.0)(sass-loader@13.2.2)
+        version: 0.3.2(@storybook/addons@6.5.16)(@storybook/api@6.5.16)(@storybook/components@6.5.16)(@storybook/core-events@6.5.16)(@storybook/manager-api@7.0.2)(@storybook/theming@6.5.16)(react-dom@18.2.0)(react@18.2.0)(sass-loader@13.2.2)
       '@storybook/preset-scss':
         specifier: ^1.0.3
         version: 1.0.3(css-loader@6.7.3)(sass-loader@13.2.2)(style-loader@3.3.2)
@@ -386,29 +386,29 @@ importers:
         version: link:../workspace/ui
     devDependencies:
       '@storybook/addon-essentials':
-        specifier: 7.0.0-rc.5
+        specifier: next
         version: 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)
       '@storybook/addon-interactions':
-        specifier: 7.0.0-rc.5
+        specifier: next
         version: 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)
       '@storybook/addon-links':
-        specifier: 7.0.0-rc.5
-        version: 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)
+        specifier: ^7.0.2
+        version: 7.0.2(react-dom@18.2.0)(react@18.2.0)
       '@storybook/addon-styling':
         specifier: ^0.3.2
-        version: 0.3.2(@storybook/addons@6.5.16)(@storybook/api@6.5.16)(@storybook/components@6.5.16)(@storybook/core-events@6.5.16)(@storybook/manager-api@7.0.0-rc.5)(@storybook/theming@6.5.16)(react-dom@18.2.0)(react@18.2.0)(sass-loader@13.2.2)
+        version: 0.3.2(@storybook/addons@6.5.16)(@storybook/api@6.5.16)(@storybook/components@6.5.16)(@storybook/core-events@6.5.16)(@storybook/manager-api@7.0.2)(@storybook/theming@6.5.16)(react-dom@18.2.0)(react@18.2.0)(sass-loader@13.2.2)
       '@storybook/blocks':
-        specifier: 7.0.0-rc.5
-        version: 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)
+        specifier: ^7.0.2
+        version: 7.0.2(react-dom@18.2.0)(react@18.2.0)
       '@storybook/preset-scss':
         specifier: ^1.0.3
         version: 1.0.3(css-loader@6.7.3)(sass-loader@13.2.2)(style-loader@3.3.2)
       '@storybook/react':
-        specifier: 7.0.0-rc.5
-        version: 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)
+        specifier: ^7.0.2
+        version: 7.0.2(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)
       '@storybook/react-vite':
-        specifier: 7.0.0-rc.5
-        version: 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.2.1)
+        specifier: ^7.0.2
+        version: 7.0.2(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.2.1)
       '@storybook/testing-library':
         specifier: 0.0.14-next.1
         version: 0.0.14-next.1
@@ -446,8 +446,8 @@ importers:
         specifier: ^13.2.2
         version: 13.2.2(sass@1.59.3)(webpack@5.77.0)
       storybook:
-        specifier: 7.0.0-rc.5
-        version: 7.0.0-rc.5
+        specifier: ^7.0.2
+        version: 7.0.2
       typescript:
         specifier: ^4.9.3
         version: 4.9.5
@@ -537,8 +537,8 @@ packages:
     dependencies:
       '@babel/highlight': 7.18.6
 
-  /@babel/compat-data@7.21.0:
-    resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==}
+  /@babel/compat-data@7.21.4:
+    resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==}
     engines: {node: '>=6.9.0'}
     dev: true
 
@@ -549,13 +549,13 @@ packages:
       '@ampproject/remapping': 2.2.0
       '@babel/code-frame': 7.18.6
       '@babel/generator': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
+      '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.3)
       '@babel/helper-module-transforms': 7.21.2
       '@babel/helpers': 7.21.0
       '@babel/parser': 7.21.3
       '@babel/template': 7.20.7
       '@babel/traverse': 7.21.3(supports-color@5.5.0)
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
       convert-source-map: 1.9.0
       debug: 4.3.4(supports-color@5.5.0)
       gensync: 1.0.0-beta.2
@@ -569,7 +569,7 @@ packages:
     resolution: {integrity: sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
       '@jridgewell/gen-mapping': 0.3.2
       '@jridgewell/trace-mapping': 0.3.17
       jsesc: 2.5.2
@@ -578,23 +578,23 @@ packages:
     resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
 
   /@babel/helper-builder-binary-assignment-operator-visitor@7.18.9:
     resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/helper-explode-assignable-expression': 7.18.6
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
-  /@babel/helper-compilation-targets@7.20.7(@babel/core@7.21.3):
-    resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==}
+  /@babel/helper-compilation-targets@7.21.4(@babel/core@7.21.3):
+    resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/compat-data': 7.21.0
+      '@babel/compat-data': 7.21.4
       '@babel/core': 7.21.3
       '@babel/helper-validator-option': 7.21.0
       browserslist: 4.21.5
@@ -638,7 +638,7 @@ packages:
       '@babel/core': ^7.4.0-0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
+      '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
       debug: 4.3.4(supports-color@5.5.0)
       lodash.debounce: 4.0.8
@@ -656,7 +656,7 @@ packages:
     resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@babel/helper-function-name@7.21.0:
@@ -664,19 +664,19 @@ packages:
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/template': 7.20.7
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
 
   /@babel/helper-hoist-variables@7.18.6:
     resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
 
   /@babel/helper-member-expression-to-functions@7.21.0:
     resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@babel/helper-module-imports@7.18.6:
@@ -696,7 +696,7 @@ packages:
       '@babel/helper-validator-identifier': 7.19.1
       '@babel/template': 7.20.7
       '@babel/traverse': 7.21.3(supports-color@5.5.0)
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -705,7 +705,7 @@ packages:
     resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@babel/helper-plugin-utils@7.20.2:
@@ -723,7 +723,7 @@ packages:
       '@babel/helper-annotate-as-pure': 7.18.6
       '@babel/helper-environment-visitor': 7.18.9
       '@babel/helper-wrap-function': 7.20.5
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -737,7 +737,7 @@ packages:
       '@babel/helper-optimise-call-expression': 7.18.6
       '@babel/template': 7.20.7
       '@babel/traverse': 7.21.3(supports-color@5.5.0)
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -746,21 +746,21 @@ packages:
     resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@babel/helper-skip-transparent-expression-wrappers@7.20.0:
     resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@babel/helper-split-export-declaration@7.18.6:
     resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
 
   /@babel/helper-string-parser@7.19.4:
     resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
@@ -782,7 +782,7 @@ packages:
       '@babel/helper-function-name': 7.21.0
       '@babel/template': 7.20.7
       '@babel/traverse': 7.21.3(supports-color@5.5.0)
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -793,7 +793,7 @@ packages:
     dependencies:
       '@babel/template': 7.20.7
       '@babel/traverse': 7.21.3(supports-color@5.5.0)
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -811,7 +811,7 @@ packages:
     engines: {node: '>=6.0.0'}
     hasBin: true
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
 
   /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.3):
     resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==}
@@ -949,9 +949,9 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/compat-data': 7.21.0
+      '@babel/compat-data': 7.21.4
       '@babel/core': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
+      '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
       '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3)
       '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3)
@@ -1240,7 +1240,7 @@ packages:
     dependencies:
       '@babel/core': 7.21.3
       '@babel/helper-annotate-as-pure': 7.18.6
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
+      '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.3)
       '@babel/helper-environment-visitor': 7.18.9
       '@babel/helper-function-name': 7.21.0
       '@babel/helper-optimise-call-expression': 7.18.6
@@ -1333,7 +1333,7 @@ packages:
       '@babel/core': ^7.0.0-0
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
+      '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.3)
       '@babel/helper-function-name': 7.21.0
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
@@ -1498,7 +1498,7 @@ packages:
       '@babel/helper-module-imports': 7.18.6
       '@babel/helper-plugin-utils': 7.20.2
       '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.21.3)
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.21.3):
@@ -1609,15 +1609,15 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
     dev: true
 
-  /@babel/preset-env@7.20.2(@babel/core@7.21.3):
-    resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==}
+  /@babel/preset-env@7.21.4(@babel/core@7.21.3):
+    resolution: {integrity: sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/compat-data': 7.21.0
+      '@babel/compat-data': 7.21.4
       '@babel/core': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
+      '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.3)
       '@babel/helper-plugin-utils': 7.20.2
       '@babel/helper-validator-option': 7.21.0
       '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.3)
@@ -1685,7 +1685,7 @@ packages:
       '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.3)
       '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.3)
       '@babel/preset-modules': 0.1.5(@babel/core@7.21.3)
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
       babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.3)
       babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.3)
       babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.3)
@@ -1716,7 +1716,7 @@ packages:
       '@babel/helper-plugin-utils': 7.20.2
       '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.3)
       '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3)
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
       esutils: 2.0.3
     dev: true
 
@@ -1764,7 +1764,7 @@ packages:
     dependencies:
       '@babel/code-frame': 7.18.6
       '@babel/parser': 7.21.3
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
 
   /@babel/traverse@7.21.3(supports-color@5.5.0):
     resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==}
@@ -1791,6 +1791,14 @@ packages:
       '@babel/helper-validator-identifier': 7.19.1
       to-fast-properties: 2.0.0
 
+  /@babel/types@7.21.4:
+    resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-string-parser': 7.19.4
+      '@babel/helper-validator-identifier': 7.19.1
+      to-fast-properties: 2.0.0
+
   /@base2/pretty-print-object@1.0.1:
     resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==}
     dev: true
@@ -3349,6 +3357,21 @@ packages:
       - immer
     dev: false
 
+  /@reactflow/background@11.2.0(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-Fd8Few2JsLuE/2GaIM6fkxEBaAJvfzi2Lc106HKi/ddX+dZs8NUsSwMsJy1Ajs8b4GbiX8v8axfKpbK6qFMV8w==}
+    peerDependencies:
+      react: '>=17'
+      react-dom: '>=17'
+    dependencies:
+      '@reactflow/core': 11.7.0(react-dom@18.2.0)(react@18.2.0)
+      classcat: 5.0.4
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      zustand: 4.3.6(react@18.2.0)
+    transitivePeerDependencies:
+      - immer
+    dev: false
+
   /@reactflow/controls@11.1.0-next.1(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-jqvwxI9VFc4ZPBfZE98MigwE+UJbxLHBC47y0pt1bGqnxzK1XcAMocDVcvlTMbHWbDmouFmpk+cUoYSkQx5/cQ==}
     peerDependencies:
@@ -3364,6 +3387,20 @@ packages:
       - immer
     dev: false
 
+  /@reactflow/controls@11.1.11(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-g6WrsszhNkQjzkJ9HbVUBkGGoUy2z8dQVgH6CYQEjuoonD15cWAPGvjyg8vx8oGG7CuktUhWu5JPivL6qjECow==}
+    peerDependencies:
+      react: '>=17'
+      react-dom: '>=17'
+    dependencies:
+      '@reactflow/core': 11.7.0(react-dom@18.2.0)(react@18.2.0)
+      classcat: 5.0.4
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    transitivePeerDependencies:
+      - immer
+    dev: false
+
   /@reactflow/core@11.4.0-next.1(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-OgHMl9qs7ZMidoc+pUcZ4O1TxszrpW0jcb2tZQOfB5WpJL40HmwXrGYZdk9IhG1ANo4N0nwS5MBvho2Ddo7aSw==}
     peerDependencies:
@@ -3406,6 +3443,27 @@ packages:
       - immer
     dev: false
 
+  /@reactflow/core@11.7.0(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-UJcpbNRSupSSoMWh5UmRp6UUr0ug7xVKmMvadnkKKiNi9584q57nz4HMfkqwN3/ESbre7LD043yh2n678d/5FQ==}
+    peerDependencies:
+      react: '>=17'
+      react-dom: '>=17'
+    dependencies:
+      '@types/d3': 7.4.0
+      '@types/d3-drag': 3.0.2
+      '@types/d3-selection': 3.0.5
+      '@types/d3-zoom': 3.0.2
+      classcat: 5.0.4
+      d3-drag: 3.0.0
+      d3-selection: 3.0.0
+      d3-zoom: 3.0.0
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      zustand: 4.3.6(react@18.2.0)
+    transitivePeerDependencies:
+      - immer
+    dev: false
+
   /@reactflow/minimap@11.3.0-next.1(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-ZNo6oLTKSLHO/rdfribRO5pmBMWT8Y5Hbn5zKkzJgjPKmaa7sG6ZjuOJNBz4LuKy7GrP5Uu2wGSc8svxNvYogA==}
     peerDependencies:
@@ -3426,6 +3484,25 @@ packages:
       - immer
     dev: false
 
+  /@reactflow/minimap@11.5.0(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-n/3tlaknLpi3zaqCC+tDDPvUTOjd6jglto9V3RB1F2wlaUEbCwmuoR2GYTkiRyZMvuskKyAoQW8+0DX0+cWwsA==}
+    peerDependencies:
+      react: '>=17'
+      react-dom: '>=17'
+    dependencies:
+      '@reactflow/core': 11.7.0(react-dom@18.2.0)(react@18.2.0)
+      '@types/d3-selection': 3.0.5
+      '@types/d3-zoom': 3.0.2
+      classcat: 5.0.4
+      d3-selection: 3.0.0
+      d3-zoom: 3.0.0
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      zustand: 4.3.6(react@18.2.0)
+    transitivePeerDependencies:
+      - immer
+    dev: false
+
   /@reactflow/node-resizer@2.1.0(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-DVL8nnWsltP8/iANadAcTaDB4wsEkx2mOLlBEPNE3yc5loSm3u9l5m4enXRcBym61MiMuTtDPzZMyYYQUjuYIg==}
     peerDependencies:
@@ -3459,6 +3536,21 @@ packages:
       - immer
     dev: false
 
+  /@reactflow/node-toolbar@1.1.11(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-+hKtx+cvXwfCa9paGxE+G34rWRIIVEh68ZOqAtivClVmfqGzH/sEoGWtIOUyg9OEDNE1nEmZ1NrnpBGSmHHXFg==}
+    peerDependencies:
+      react: '>=17'
+      react-dom: '>=17'
+    dependencies:
+      '@reactflow/core': 11.7.0(react-dom@18.2.0)(react@18.2.0)
+      classcat: 5.0.4
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      zustand: 4.3.6(react@18.2.0)
+    transitivePeerDependencies:
+      - immer
+    dev: false
+
   /@reduxjs/toolkit@1.9.3(react-redux@8.0.5)(react@18.2.0):
     resolution: {integrity: sha512-GU2TNBQVofL09VGmuSioNPQIu6Ml0YLf4EJhgj0AvBadRlCGzUWet8372LjvO4fqKZF2vH1xU0htAa7BrK9pZg==}
     peerDependencies:
@@ -3650,7 +3742,7 @@ packages:
       '@storybook/csf-plugin': 7.0.0-rc.5
       '@storybook/csf-tools': 7.0.0-rc.5
       '@storybook/global': 5.0.0
-      '@storybook/mdx2-csf': 1.0.0-next.6
+      '@storybook/mdx2-csf': 1.0.0-next.8
       '@storybook/node-logger': 7.0.0-rc.5
       '@storybook/postinstall': 7.0.0-rc.5
       '@storybook/preview-api': 7.0.0-rc.5
@@ -3732,8 +3824,8 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/addon-links@7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-MyfufFES3iNf/6fP/nTgB8op3v5jUWPvguo/L8mREUk2LfjB8KNmQuJolM4RzrKOl6cOcD6vZlqaVkuLiOSPYA==}
+  /@storybook/addon-links@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-lPtfy2MqrcI9YjupBM2eRKGPdFKVPCz7WgO/JQQakGugORJTEGCyJrNJNtWY9jDenv8ynLZ40OxtPBZi54Sr6Q==}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -3743,14 +3835,14 @@ packages:
       react-dom:
         optional: true
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.5
-      '@storybook/core-events': 7.0.0-rc.5
-      '@storybook/csf': 0.0.2-next.11
+      '@storybook/client-logger': 7.0.2
+      '@storybook/core-events': 7.0.2
+      '@storybook/csf': 0.1.0
       '@storybook/global': 5.0.0
-      '@storybook/manager-api': 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/preview-api': 7.0.0-rc.5
-      '@storybook/router': 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)
-      '@storybook/types': 7.0.0-rc.5
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.2
+      '@storybook/router': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.2
       prop-types: 15.8.1
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
@@ -3802,7 +3894,7 @@ packages:
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/addon-styling@0.3.2(@storybook/addons@6.5.16)(@storybook/api@6.5.16)(@storybook/components@6.5.16)(@storybook/core-events@6.5.16)(@storybook/manager-api@7.0.0-rc.5)(@storybook/theming@6.5.16)(react-dom@18.2.0)(react@18.2.0)(sass-loader@13.2.2):
+  /@storybook/addon-styling@0.3.2(@storybook/addons@6.5.16)(@storybook/api@6.5.16)(@storybook/components@6.5.16)(@storybook/core-events@6.5.16)(@storybook/manager-api@7.0.2)(@storybook/theming@6.5.16)(react-dom@18.2.0)(react@18.2.0)(sass-loader@13.2.2):
     resolution: {integrity: sha512-ztKy9uU2yKBtvBp4/Km4LD1JCNNFHpXS33LjbeIfho0toRv100g8tUojrdnoRX1b2KVK6cqep5mJV0z2ak9hIQ==}
     peerDependencies:
       '@storybook/addons': ^6.5.8
@@ -3829,7 +3921,7 @@ packages:
       '@storybook/api': 6.5.16(react-dom@18.2.0)(react@18.2.0)
       '@storybook/components': 6.5.16(react-dom@18.2.0)(react@18.2.0)
       '@storybook/core-events': 6.5.16
-      '@storybook/manager-api': 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
       '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0)
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
@@ -3962,32 +4054,65 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/builder-manager@7.0.0-rc.5:
-    resolution: {integrity: sha512-VAtkM9HT9OUl06n/GHzdrcgr2zf1DULbzayy6jJ8HxDHQe8ONM2fe+v8gF0NAcmtEi0i9C381sS7P3pnNAK4Qw==}
+  /@storybook/blocks@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-JzHmU8jZLzeQ6bunzci8j/2Ji18GBTyhrPFLk5RjEbMNGWpGjvER/yR127tZOdbPguVNr4iVbRfGzd1wGHlrzA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/channels': 7.0.2
+      '@storybook/client-logger': 7.0.2
+      '@storybook/components': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/core-events': 7.0.2
+      '@storybook/csf': 0.1.0
+      '@storybook/docs-tools': 7.0.2
+      '@storybook/global': 5.0.0
+      '@storybook/manager-api': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/preview-api': 7.0.2
+      '@storybook/theming': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.2
+      '@types/lodash': 4.14.191
+      color-convert: 2.0.1
+      dequal: 2.0.3
+      lodash: 4.17.21
+      markdown-to-jsx: 7.2.0(react@18.2.0)
+      memoizerific: 1.11.3
+      polished: 4.2.2
+      react: 18.2.0
+      react-colorful: 5.6.1(react-dom@18.2.0)(react@18.2.0)
+      react-dom: 18.2.0(react@18.2.0)
+      telejson: 7.0.4
+      ts-dedent: 2.2.0
+      util-deprecate: 1.0.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@storybook/builder-manager@7.0.2:
+    resolution: {integrity: sha512-Oej/n8D7eaWgmWF7nN2hXLRM53lcYOdh6umSN8Mh/LcYUfxB+dvUBFzUjoLE0xjhW6xRinrKrENT5LcP/f/HBQ==}
     dependencies:
       '@fal-works/esbuild-plugin-global-externals': 2.1.2
-      '@storybook/core-common': 7.0.0-rc.5
-      '@storybook/manager': 7.0.0-rc.5
-      '@storybook/node-logger': 7.0.0-rc.5
+      '@storybook/core-common': 7.0.2
+      '@storybook/manager': 7.0.2
+      '@storybook/node-logger': 7.0.2
       '@types/ejs': 3.1.2
       '@types/find-cache-dir': 3.2.1
-      '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.16.17)
+      '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.17.12)
       browser-assert: 1.2.1
       ejs: 3.1.9
-      esbuild: 0.16.17
+      esbuild: 0.17.12
       esbuild-plugin-alias: 0.2.1
       express: 4.18.2
       find-cache-dir: 3.3.2
       fs-extra: 11.1.1
       process: 0.11.10
-      slash: 3.0.0
       util: 0.12.5
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@storybook/builder-vite@7.0.0-rc.5(typescript@4.9.5)(vite@4.2.1):
-    resolution: {integrity: sha512-TkT+KaUBHiyFyHQ31qeq3zFM1p5cwffu3orAJRcSWOCHkQy1hbu2H55ZApgZJRHBq9MGxtUZ1FTVYIb3OLv1jg==}
+  /@storybook/builder-vite@7.0.2(typescript@4.9.5)(vite@4.2.1):
+    resolution: {integrity: sha512-G6CD2Gf2zwzRslvNvqgz4FeADVEA9XA4Mw6+NM6Twc+Wy/Ah482dvHS9ApSgirtGyBKjOfdHn1xQT4Z+kzbJnw==}
     peerDependencies:
       '@preact/preset-vite': '*'
       '@storybook/mdx1-csf': '>=1.0.0-next.1'
@@ -4004,16 +4129,16 @@ packages:
       vite-plugin-glimmerx:
         optional: true
     dependencies:
-      '@storybook/channel-postmessage': 7.0.0-rc.5
-      '@storybook/channel-websocket': 7.0.0-rc.5
-      '@storybook/client-logger': 7.0.0-rc.5
-      '@storybook/core-common': 7.0.0-rc.5
-      '@storybook/csf-plugin': 7.0.0-rc.5
-      '@storybook/mdx2-csf': 1.0.0-next.6
-      '@storybook/node-logger': 7.0.0-rc.5
-      '@storybook/preview': 7.0.0-rc.5
-      '@storybook/preview-api': 7.0.0-rc.5
-      '@storybook/types': 7.0.0-rc.5
+      '@storybook/channel-postmessage': 7.0.2
+      '@storybook/channel-websocket': 7.0.2
+      '@storybook/client-logger': 7.0.2
+      '@storybook/core-common': 7.0.2
+      '@storybook/csf-plugin': 7.0.2
+      '@storybook/mdx2-csf': 1.0.0
+      '@storybook/node-logger': 7.0.2
+      '@storybook/preview': 7.0.2
+      '@storybook/preview-api': 7.0.2
+      '@storybook/types': 7.0.2
       browser-assert: 1.2.1
       es-module-lexer: 0.9.3
       express: 4.18.2
@@ -4021,41 +4146,42 @@ packages:
       glob: 8.1.0
       glob-promise: 6.0.2(glob@8.1.0)
       magic-string: 0.27.0
+      remark-external-links: 8.0.0
+      remark-slug: 6.1.0
       rollup: 3.20.0
-      slash: 3.0.0
       typescript: 4.9.5
       vite: 4.2.1(@types/node@18.13.0)(sass@1.59.3)
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@storybook/channel-postmessage@7.0.0:
-    resolution: {integrity: sha512-Sy3oHL/xDRjUiHnM0ncnkbOE5pK3O72MjOoiLJX4FCI90w03KM4+F/N0eU2cXl6yXHuCyI5eJisEzQxTNsaJiw==}
+  /@storybook/channel-postmessage@7.0.0-rc.5:
+    resolution: {integrity: sha512-NBnIKiACAnLpsVe7bf9B2XE4tH+4HgTJh8Mvj1Dpu1jxu2cJ3j20x3IGgELXCXSEicUbXCqr+O1Zc7CHBXYV+g==}
     dependencies:
-      '@storybook/channels': 7.0.0
-      '@storybook/client-logger': 7.0.0
-      '@storybook/core-events': 7.0.0
+      '@storybook/channels': 7.0.0-rc.5
+      '@storybook/client-logger': 7.0.0-rc.5
+      '@storybook/core-events': 7.0.0-rc.5
       '@storybook/global': 5.0.0
       qs: 6.11.1
       telejson: 7.0.4
     dev: true
 
-  /@storybook/channel-postmessage@7.0.0-rc.5:
-    resolution: {integrity: sha512-NBnIKiACAnLpsVe7bf9B2XE4tH+4HgTJh8Mvj1Dpu1jxu2cJ3j20x3IGgELXCXSEicUbXCqr+O1Zc7CHBXYV+g==}
+  /@storybook/channel-postmessage@7.0.2:
+    resolution: {integrity: sha512-SZ/KqnZcx10W9hJbrzBKcP9dmgaeTaXugUhcgw1IkmjKWdsKazqFZCPwQWZZKAmhO4wYbyYOhkz3wfSIeB4mFw==}
     dependencies:
-      '@storybook/channels': 7.0.0-rc.5
-      '@storybook/client-logger': 7.0.0-rc.5
-      '@storybook/core-events': 7.0.0-rc.5
+      '@storybook/channels': 7.0.2
+      '@storybook/client-logger': 7.0.2
+      '@storybook/core-events': 7.0.2
       '@storybook/global': 5.0.0
       qs: 6.11.1
       telejson: 7.0.4
     dev: true
 
-  /@storybook/channel-websocket@7.0.0-rc.5:
-    resolution: {integrity: sha512-n8oPrbxGS9FtSkNWYMpOtEZedeeVxnxJuiEwApGRkWt0q3eWIK9u24NElIbjCoSysaZl60CXrlK615W+Ml3ujQ==}
+  /@storybook/channel-websocket@7.0.2:
+    resolution: {integrity: sha512-YU3lFId6Nsi75ddA+3qfbnLfNUPswboYyx+SALhaLuXqz7zqfzX4ezMgxeS/h0gRlUJ7nf2/yJ5qie/kZaizjw==}
     dependencies:
-      '@storybook/channels': 7.0.0-rc.5
-      '@storybook/client-logger': 7.0.0-rc.5
+      '@storybook/channels': 7.0.2
+      '@storybook/client-logger': 7.0.2
       '@storybook/global': 5.0.0
       telejson: 7.0.4
     dev: true
@@ -4068,28 +4194,28 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
-  /@storybook/channels@7.0.0:
-    resolution: {integrity: sha512-adPIkvL4q37dGTWCpSzV8ETLdkxsg7BAgzeT9pustZJjRIZqAHGUAm7krDtGT7jbV4dU0Zw0VpUrnmyfxIkOKQ==}
-    dev: true
-
   /@storybook/channels@7.0.0-rc.5:
     resolution: {integrity: sha512-/T4iJQsTj42bs+d2sG8aLyInKh1IjZeK0vPoJRK9gvy3YfxTj3yodZ60s2yywKJCgGjg5zJMFxYMWqSVmHIdnw==}
     dev: true
 
-  /@storybook/cli@7.0.0-rc.5:
-    resolution: {integrity: sha512-v0gCsKM2NtNBkhJJ4ZXQcNyasKj8zJxW0KRWpfrECe04ko7wuN8MCsJIZAE4AWQnmtx7OWWVYNrzfTFUEVTs6A==}
+  /@storybook/channels@7.0.2:
+    resolution: {integrity: sha512-qkI8mFy9c8mxN2f01etayKhCaauL6RAsxRzbX1/pKj6UqhHWqqUbtHwymrv4hG5qDYjV1e9pd7ae5eNF8Kui0g==}
+    dev: true
+
+  /@storybook/cli@7.0.2:
+    resolution: {integrity: sha512-xMM2QdXNGg09wuXzAGroKrbsnaHSFPmtmefX1XGALhHuKVwxOoC2apWMpek6gY/9vh5EIRTog2Dvfd2BzNrT6Q==}
     hasBin: true
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/preset-env': 7.20.2(@babel/core@7.21.3)
+      '@babel/preset-env': 7.21.4(@babel/core@7.21.3)
       '@ndelangen/get-tarball': 3.0.7
-      '@storybook/codemod': 7.0.0-rc.5
-      '@storybook/core-common': 7.0.0-rc.5
-      '@storybook/core-server': 7.0.0-rc.5
-      '@storybook/csf-tools': 7.0.0-rc.5
-      '@storybook/node-logger': 7.0.0-rc.5
-      '@storybook/telemetry': 7.0.0-rc.5
-      '@storybook/types': 7.0.0-rc.5
+      '@storybook/codemod': 7.0.2
+      '@storybook/core-common': 7.0.2
+      '@storybook/core-server': 7.0.2
+      '@storybook/csf-tools': 7.0.2
+      '@storybook/node-logger': 7.0.2
+      '@storybook/telemetry': 7.0.2
+      '@storybook/types': 7.0.2
       '@types/semver': 7.3.13
       boxen: 5.1.2
       chalk: 4.1.2
@@ -4105,7 +4231,7 @@ packages:
       get-port: 5.1.1
       giget: 1.1.2
       globby: 11.1.0
-      jscodeshift: 0.14.0(@babel/preset-env@7.20.2)
+      jscodeshift: 0.14.0(@babel/preset-env@7.21.4)
       leven: 3.1.0
       prettier: 2.8.7
       prompts: 2.4.2
@@ -4132,31 +4258,31 @@ packages:
       global: 4.4.0
     dev: true
 
-  /@storybook/client-logger@7.0.0:
-    resolution: {integrity: sha512-wRZZiPta37DFc8SVZ8Q3ZqyTrs5qgO6bcCuVDRLQAcO0Oz4xKEVPEVfVVxSPZU/+p2ypqdBBCP2pdL/Jy86AJg==}
+  /@storybook/client-logger@7.0.0-rc.5:
+    resolution: {integrity: sha512-YkqjJb2jK6/jT4zm9cmdMVZeOyzoDxiyK3BedhoXKMRDMz+7+E7tcOZEXsuvTGekJe459TTnwYLfvUvObaXNKw==}
     dependencies:
       '@storybook/global': 5.0.0
     dev: true
 
-  /@storybook/client-logger@7.0.0-rc.5:
-    resolution: {integrity: sha512-YkqjJb2jK6/jT4zm9cmdMVZeOyzoDxiyK3BedhoXKMRDMz+7+E7tcOZEXsuvTGekJe459TTnwYLfvUvObaXNKw==}
+  /@storybook/client-logger@7.0.2:
+    resolution: {integrity: sha512-rv7W2BhzIQHbFpUM5/CP/acS6T5lTmaxT0MbZ9n+9h++9QQU/cFOdkZgSUbLVAb1AeUGoLsk0HYzcqPpV35Xsw==}
     dependencies:
       '@storybook/global': 5.0.0
     dev: true
 
-  /@storybook/codemod@7.0.0-rc.5:
-    resolution: {integrity: sha512-aiW7PeU9rZE9wp6tNxLxloAsfVNzeG8pI0HJrj1JALhvaPzlCphdMP8Cf2UT0a4ADjpmYQSsGX301XFgMQYFKA==}
+  /@storybook/codemod@7.0.2:
+    resolution: {integrity: sha512-D9PdByxJlFiaDJcLkM+RN1DHCj4VfQIlSZkADOcNtI4o9H064oiMloWDGZiR1i1FCYMSXuWmW6tMsuCVebA+Nw==}
     dependencies:
       '@babel/core': 7.21.3
-      '@babel/preset-env': 7.20.2(@babel/core@7.21.3)
-      '@babel/types': 7.21.3
-      '@storybook/csf': 0.0.2-next.11
-      '@storybook/csf-tools': 7.0.0-rc.5
-      '@storybook/node-logger': 7.0.0-rc.5
-      '@storybook/types': 7.0.0-rc.5
+      '@babel/preset-env': 7.21.4(@babel/core@7.21.3)
+      '@babel/types': 7.21.4
+      '@storybook/csf': 0.1.0
+      '@storybook/csf-tools': 7.0.2
+      '@storybook/node-logger': 7.0.2
+      '@storybook/types': 7.0.2
       cross-spawn: 7.0.3
       globby: 11.1.0
-      jscodeshift: 0.14.0(@babel/preset-env@7.20.2)
+      jscodeshift: 0.14.0(@babel/preset-env@7.21.4)
       lodash: 4.17.21
       prettier: 2.8.7
       recast: 0.23.1
@@ -4200,6 +4326,24 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
+  /@storybook/components@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-Ee9pY6WlpricPUdYiyR0Ov8zgHkUt541yl1CZ6Ytaom2TA12cAnRjKewbLAgVPPhIE1LsMRhOPFYql0JMtnN4Q==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/client-logger': 7.0.2
+      '@storybook/csf': 0.1.0
+      '@storybook/global': 5.0.0
+      '@storybook/theming': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.2
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0)
+      util-deprecate: 1.0.2
+    dev: true
+
   /@storybook/core-client@7.0.0-rc.5:
     resolution: {integrity: sha512-jBY4kJDL5sdVcnGzz+cpruzkF01Hi+DJ/c9mpNiL+CjiDSFewtCk28Qggwccm9tKne5eAlrFiJAu5MOlbIcM+g==}
     dependencies:
@@ -4207,6 +4351,13 @@ packages:
       '@storybook/preview-api': 7.0.0-rc.5
     dev: true
 
+  /@storybook/core-client@7.0.2:
+    resolution: {integrity: sha512-tr6Uv41YD2O0xiUrtgujiY1QxuznhbyUI0BRsSh49e8cx3QoW7FgPy7IVZHgb17DXKZ/wY/hgdyTTB87H6IbLA==}
+    dependencies:
+      '@storybook/client-logger': 7.0.2
+      '@storybook/preview-api': 7.0.2
+    dev: true
+
   /@storybook/core-common@7.0.0-rc.5:
     resolution: {integrity: sha512-YlkcTcDx8bkOq3/STAuBkQOBQB5i0zLj2Zb0LUPzIDDBPZlGb3mJEla0UyJoMbP/E/QCq1K8pA1l9vtTK+ROJQ==}
     dependencies:
@@ -4234,37 +4385,63 @@ packages:
       - supports-color
     dev: true
 
+  /@storybook/core-common@7.0.2:
+    resolution: {integrity: sha512-DayFPTCj695tnEKLuDlogclBim8mzdrbj9U1xzFm23BUReheGSGdLl2zrb3mP1l9Zj4xJ/Ctst1KN9SFbW84vw==}
+    dependencies:
+      '@storybook/node-logger': 7.0.2
+      '@storybook/types': 7.0.2
+      '@types/node': 16.18.16
+      '@types/pretty-hrtime': 1.0.1
+      chalk: 4.1.2
+      esbuild: 0.17.12
+      esbuild-register: 3.4.2(esbuild@0.17.12)
+      file-system-cache: 2.0.2
+      find-up: 5.0.0
+      fs-extra: 11.1.1
+      glob: 8.1.0
+      glob-promise: 6.0.2(glob@8.1.0)
+      handlebars: 4.7.7
+      lazy-universal-dotenv: 4.0.0
+      picomatch: 2.3.1
+      pkg-dir: 5.0.0
+      pretty-hrtime: 1.0.3
+      resolve-from: 5.0.0
+      ts-dedent: 2.2.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@storybook/core-events@6.5.16:
     resolution: {integrity: sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==}
     dependencies:
       core-js: 3.29.1
     dev: true
 
-  /@storybook/core-events@7.0.0:
-    resolution: {integrity: sha512-pxzNmgEI1p90bHyAYABHDDtB2XM5pffq6CqIHboK6aSCux7Cdc16IjOYq6BJIhCKaaI+qQHaFLR4JfaFAsxwQQ==}
-    dev: true
-
   /@storybook/core-events@7.0.0-rc.5:
     resolution: {integrity: sha512-n9+TqgrgkXN5V+mNdgdnojUVqhKOsyL3DNfOmAsbLEewhg5z6+QDYxOe/FBe1usGI2DV+ihwb/knMZzuYXN5ow==}
     dev: true
 
-  /@storybook/core-server@7.0.0-rc.5:
-    resolution: {integrity: sha512-rif4CTnaExe+GLNv2wWRkqJPNn1WN+1ZWv/YLjYUjR2zGeLQn26/XLUKVn5CCQ4DzHbqWwfMaxlPKhNAeZyodw==}
+  /@storybook/core-events@7.0.2:
+    resolution: {integrity: sha512-1DCHCwHRL3+rlvnVVc/BCfReP31XaT2WYgcLeGTmkX1E43Po1MkgcM7PnJPSaa9POvSqZ+6YLZv5Bs1SXbufow==}
+    dev: true
+
+  /@storybook/core-server@7.0.2:
+    resolution: {integrity: sha512-7ipGws8YffVaiwkc+D0+MfZc/Sy52aKenG3nDJdK4Ajmp5LPAlelb/sxIhfRvoHDbDsy2FQNz++Mb55Yh03KkA==}
     dependencies:
       '@aw-web-design/x-default-browser': 1.4.88
       '@discoveryjs/json-ext': 0.5.7
-      '@storybook/builder-manager': 7.0.0-rc.5
-      '@storybook/core-common': 7.0.0-rc.5
-      '@storybook/core-events': 7.0.0-rc.5
-      '@storybook/csf': 0.0.2-next.11
-      '@storybook/csf-tools': 7.0.0-rc.5
-      '@storybook/docs-mdx': 0.0.1-next.6
+      '@storybook/builder-manager': 7.0.2
+      '@storybook/core-common': 7.0.2
+      '@storybook/core-events': 7.0.2
+      '@storybook/csf': 0.1.0
+      '@storybook/csf-tools': 7.0.2
+      '@storybook/docs-mdx': 0.1.0
       '@storybook/global': 5.0.0
-      '@storybook/manager': 7.0.0-rc.5
-      '@storybook/node-logger': 7.0.0-rc.5
-      '@storybook/preview-api': 7.0.0-rc.5
-      '@storybook/telemetry': 7.0.0-rc.5
-      '@storybook/types': 7.0.0-rc.5
+      '@storybook/manager': 7.0.2
+      '@storybook/node-logger': 7.0.2
+      '@storybook/preview-api': 7.0.2
+      '@storybook/telemetry': 7.0.2
+      '@storybook/types': 7.0.2
       '@types/detect-port': 1.3.2
       '@types/node': 16.18.16
       '@types/node-fetch': 2.6.2
@@ -4288,7 +4465,6 @@ packages:
       read-pkg-up: 7.0.1
       semver: 7.3.8
       serve-favicon: 2.5.0
-      slash: 3.0.0
       telejson: 7.0.4
       ts-dedent: 2.2.0
       util-deprecate: 1.0.2
@@ -4310,13 +4486,22 @@ packages:
       - supports-color
     dev: true
 
+  /@storybook/csf-plugin@7.0.2:
+    resolution: {integrity: sha512-aGuo+G6G5IwSGkmc+OUA796sOfvJMaQj8QS/Zh5F0nL4ZlQvghHpXON8cRHHvmXHQqUo07KLiy7CZh2I2oq4iQ==}
+    dependencies:
+      '@storybook/csf-tools': 7.0.2
+      unplugin: 0.10.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@storybook/csf-tools@7.0.0-rc.5:
     resolution: {integrity: sha512-DvcAygIZMZIL30j7WxMXeJ6a+A2/Y/FuatZItmW+3sNv0FK1J9wH2SKw7QjzEw75LsgjvO07lU2cgcsPDFhXoA==}
     dependencies:
       '@babel/generator': 7.21.3
       '@babel/parser': 7.21.3
       '@babel/traverse': 7.21.3(supports-color@5.5.0)
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
       '@storybook/csf': 0.0.2-next.11
       '@storybook/types': 7.0.0-rc.5
       fs-extra: 11.1.1
@@ -4326,6 +4511,22 @@ packages:
       - supports-color
     dev: true
 
+  /@storybook/csf-tools@7.0.2:
+    resolution: {integrity: sha512-sOp355yQSpYiMqNSopmFYWZkPPRJdGgy4tpxGGLxpOZMygK3j1wQ/WQtl2Z0h61KP0S0dl6hrs0pHQz3A/eVrw==}
+    dependencies:
+      '@babel/generator': 7.21.3
+      '@babel/parser': 7.21.3
+      '@babel/traverse': 7.21.3(supports-color@5.5.0)
+      '@babel/types': 7.21.4
+      '@storybook/csf': 0.1.0
+      '@storybook/types': 7.0.2
+      fs-extra: 11.1.1
+      recast: 0.23.1
+      ts-dedent: 2.2.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@storybook/csf@0.0.2--canary.4566f4d.1:
     resolution: {integrity: sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==}
     dependencies:
@@ -4338,8 +4539,14 @@ packages:
       type-fest: 2.19.0
     dev: true
 
-  /@storybook/docs-mdx@0.0.1-next.6:
-    resolution: {integrity: sha512-DjoSIXADmLJtdroXAjUotFiZlcZ2usWhqrS7aeOtZs0DVR0Ws5WQjnwtpDUXt8gryTSd+OZJ0cNsDcqg4JDEvQ==}
+  /@storybook/csf@0.1.0:
+    resolution: {integrity: sha512-uk+jMXCZ8t38jSTHk2o5btI+aV2Ksbvl6DoOv3r6VaCM1KZqeuMwtwywIQdflkA8/6q/dKT8z8L+g8hC4GC3VQ==}
+    dependencies:
+      type-fest: 2.19.0
+    dev: true
+
+  /@storybook/docs-mdx@0.1.0:
+    resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==}
     dev: true
 
   /@storybook/docs-tools@7.0.0-rc.5:
@@ -4356,18 +4563,22 @@ packages:
       - supports-color
     dev: true
 
-  /@storybook/global@5.0.0:
-    resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
+  /@storybook/docs-tools@7.0.2:
+    resolution: {integrity: sha512-w4D5BURrYjLbLGG9VKAaKU2dSdukszxRE3HWkJyhQU9R1JHvS3n8ntcMqYPqRfoHCOeBLBxP0edDYcAfzGNDYQ==}
+    dependencies:
+      '@babel/core': 7.21.3
+      '@storybook/core-common': 7.0.2
+      '@storybook/preview-api': 7.0.2
+      '@storybook/types': 7.0.2
+      '@types/doctrine': 0.0.3
+      doctrine: 3.0.0
+      lodash: 4.17.21
+    transitivePeerDependencies:
+      - supports-color
     dev: true
 
-  /@storybook/instrumenter@7.0.0:
-    resolution: {integrity: sha512-A7jBrV7VM3OxRgall8rpjagy3VC78A/OV1g1aYVVLpAF/+Odj+MeHHF179+fR6JBLnBgukNfsG7/ZHHGs0gL5Q==}
-    dependencies:
-      '@storybook/channels': 7.0.0
-      '@storybook/client-logger': 7.0.0
-      '@storybook/core-events': 7.0.0
-      '@storybook/global': 5.0.0
-      '@storybook/preview-api': 7.0.0
+  /@storybook/global@5.0.0:
+    resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
     dev: true
 
   /@storybook/instrumenter@7.0.0-rc.5:
@@ -4380,6 +4591,16 @@ packages:
       '@storybook/preview-api': 7.0.0-rc.5
     dev: true
 
+  /@storybook/instrumenter@7.0.2:
+    resolution: {integrity: sha512-zr9/fuaYtGVUtcL8XgjA4Iq5jtzdcqQyOSH4XLXtz6JtSad3lkRagbJo2Vzbw7dO/4vzjfTMxEzvWjUuPxLOhA==}
+    dependencies:
+      '@storybook/channels': 7.0.2
+      '@storybook/client-logger': 7.0.2
+      '@storybook/core-events': 7.0.2
+      '@storybook/global': 5.0.0
+      '@storybook/preview-api': 7.0.2
+    dev: true
+
   /@storybook/manager-api@7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-MsNj/cPIOlL7HJ8ReYahUvJVfvZDtNfacUYSFuQjQwdnp0u3pbC5mGZPd32tAGj7lLaLzcqqo1yR+NAgwpZUBw==}
     peerDependencies:
@@ -4405,12 +4626,41 @@ packages:
       ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/manager@7.0.0-rc.5:
-    resolution: {integrity: sha512-VPTIYzcKguKaA+4HGFPAPRdDGTZ8fxKAKL71VgP+AOOJhNmdTWHCXs8Yu7GMg/2uyRZ2zSKiOeBESh+Qb8pRZg==}
+  /@storybook/manager-api@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-PbLj9Rc5uCMPfMdaXv1wE3koA3+d0rmZ3BJI8jeq+mfZEvpvfI4OOpRioT1q04CkkVomFOVFTyO0Q/o6Rb5N7g==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/channels': 7.0.2
+      '@storybook/client-logger': 7.0.2
+      '@storybook/core-events': 7.0.2
+      '@storybook/csf': 0.1.0
+      '@storybook/global': 5.0.0
+      '@storybook/router': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/theming': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.2
+      dequal: 2.0.3
+      lodash: 4.17.21
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      semver: 7.3.8
+      store2: 2.14.2
+      telejson: 7.0.4
+      ts-dedent: 2.2.0
     dev: true
 
-  /@storybook/mdx2-csf@1.0.0-next.6:
-    resolution: {integrity: sha512-m6plojocU/rmrqWd26yvm8D+oHZPZ6PtSSFmZIgpNDEPVmc8s4fBD6LXOAB5MiPI5f8KLUr2HVhOMZ97o5pDTw==}
+  /@storybook/manager@7.0.2:
+    resolution: {integrity: sha512-jsFsFKG0rPNYfuRm/WSXGMBy8vnALyFWU330ObDmfU0JID3SeLlVqAOZT1GlwI6vupYpWodsN6qPZKRmC8onRw==}
+    dev: true
+
+  /@storybook/mdx2-csf@1.0.0:
+    resolution: {integrity: sha512-dBAnEL4HfxxJmv7LdEYUoZlQbWj9APZNIbOaq0tgF8XkxiIbzqvgB0jhL/9UOrysSDbQWBiCRTu2wOVxedGfmw==}
+    dev: true
+
+  /@storybook/mdx2-csf@1.0.0-next.8:
+    resolution: {integrity: sha512-t2O5s/HHTH5evZVHgVtCWTZgMZ/CaqDu3xVGgjVbKeTvpPAbi0Waab5SSX8T9PG5jNDei/x+jpAVCcNMOHoWzg==}
     dev: true
 
   /@storybook/node-logger@7.0.0-rc.5:
@@ -4422,6 +4672,15 @@ packages:
       pretty-hrtime: 1.0.3
     dev: true
 
+  /@storybook/node-logger@7.0.2:
+    resolution: {integrity: sha512-UENpXxB1yDqP7JXaODJo+pbGt5y3NFBNurBr4+pI4bMAC4ARjpgRE4wp6fxUKFPu9MAR10oCdcLEHkaVUAjYRg==}
+    dependencies:
+      '@types/npmlog': 4.1.4
+      chalk: 4.1.2
+      npmlog: 5.0.1
+      pretty-hrtime: 1.0.3
+    dev: true
+
   /@storybook/postinstall@7.0.0-rc.5:
     resolution: {integrity: sha512-F23wxKEJ2XoVnHT7oAMjCXtANWvNq7M+FmIowgI98b3FT1dxt9fFPKKY+3Lcqp0Xa6Pzezd03KR9vAxXvvK/iQ==}
     dev: true
@@ -4438,49 +4697,49 @@ packages:
       style-loader: 3.3.2(webpack@5.77.0)
     dev: true
 
-  /@storybook/preview-api@7.0.0:
-    resolution: {integrity: sha512-Q0IYYH1gOmx42ClYlQfQPjuERBWM3Ey+3DFsLQaraKXDdgZ9wN7jPNuS7wxuUNylT0oa/3WjxT7qNfiGw8JtBw==}
+  /@storybook/preview-api@7.0.0-rc.5:
+    resolution: {integrity: sha512-cuyFIT/4MXfoqN6d5AK/KH7Yp0cifuOmcBj4+9xrmrPK47m4F8eHZ/mX6rXE6rVFNsWv65Al5An6WCM1CDImJg==}
     dependencies:
-      '@storybook/channel-postmessage': 7.0.0
-      '@storybook/channels': 7.0.0
-      '@storybook/client-logger': 7.0.0
-      '@storybook/core-events': 7.0.0
+      '@storybook/channel-postmessage': 7.0.0-rc.5
+      '@storybook/channels': 7.0.0-rc.5
+      '@storybook/client-logger': 7.0.0-rc.5
+      '@storybook/core-events': 7.0.0-rc.5
       '@storybook/csf': 0.0.2-next.11
       '@storybook/global': 5.0.0
-      '@storybook/types': 7.0.0
+      '@storybook/types': 7.0.0-rc.5
       '@types/qs': 6.9.7
       dequal: 2.0.3
       lodash: 4.17.21
       memoizerific: 1.11.3
       qs: 6.11.1
+      slash: 3.0.0
       synchronous-promise: 2.0.17
       ts-dedent: 2.2.0
       util-deprecate: 1.0.2
     dev: true
 
-  /@storybook/preview-api@7.0.0-rc.5:
-    resolution: {integrity: sha512-cuyFIT/4MXfoqN6d5AK/KH7Yp0cifuOmcBj4+9xrmrPK47m4F8eHZ/mX6rXE6rVFNsWv65Al5An6WCM1CDImJg==}
+  /@storybook/preview-api@7.0.2:
+    resolution: {integrity: sha512-QAlJM/r92+dQe/kB7MTTR9b/1mt9UJjxNjazGdEWipA/nw23kOF3o/hBcvKwBYkit4zGYsX70H+vuzW8hCo/lA==}
     dependencies:
-      '@storybook/channel-postmessage': 7.0.0-rc.5
-      '@storybook/channels': 7.0.0-rc.5
-      '@storybook/client-logger': 7.0.0-rc.5
-      '@storybook/core-events': 7.0.0-rc.5
-      '@storybook/csf': 0.0.2-next.11
+      '@storybook/channel-postmessage': 7.0.2
+      '@storybook/channels': 7.0.2
+      '@storybook/client-logger': 7.0.2
+      '@storybook/core-events': 7.0.2
+      '@storybook/csf': 0.1.0
       '@storybook/global': 5.0.0
-      '@storybook/types': 7.0.0-rc.5
+      '@storybook/types': 7.0.2
       '@types/qs': 6.9.7
       dequal: 2.0.3
       lodash: 4.17.21
       memoizerific: 1.11.3
       qs: 6.11.1
-      slash: 3.0.0
       synchronous-promise: 2.0.17
       ts-dedent: 2.2.0
       util-deprecate: 1.0.2
     dev: true
 
-  /@storybook/preview@7.0.0-rc.5:
-    resolution: {integrity: sha512-AG6vg4dsHVjbNchC3eiDqwSKfUWyFXauYDLg+Ce4F47s98J5ly+mFAIY0Vo1mwao3CVHLk0SYt+vtuQZF52WAg==}
+  /@storybook/preview@7.0.2:
+    resolution: {integrity: sha512-U7MZkDT9bBq7HggLAXmTO9gI4eqhYs26fZS0L6iTE/PCX4Wg2TJBJSq2X8jhDXRqJFOt8SrQ756+V5Vtwrh4Og==}
     dev: true
 
   /@storybook/react-dom-shim@7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0):
@@ -4493,8 +4752,18 @@ packages:
       react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/react-vite@7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.2.1):
-    resolution: {integrity: sha512-IW2DYK6K115B7VKBvNMaSMVe3LWyFyFBgjby1N2/wfL5jkvrwRmYH4ag5+qn1e6HgxH6F+Wd9ryLhf8jaldgVQ==}
+  /@storybook/react-dom-shim@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-fMl0aV7mJ3wyQKvt6z+rZuiIiSd9YinS77IJ1ETHqVZ4SxWriOS0GFKP6sZflrlpShoZBh+zl1lDPG7ZZdrQGw==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: true
+
+  /@storybook/react-vite@7.0.2(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.2.1):
+    resolution: {integrity: sha512-1bDrmGo6imxBzZKJJ+SEHPuDn474JY3Yatm0cPaNVtlYhbnbiTPa3PxhI4U3233l4Qsc6DXNLKvi++j/knXDCw==}
     engines: {node: '>=16'}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4503,8 +4772,8 @@ packages:
     dependencies:
       '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@4.9.5)(vite@4.2.1)
       '@rollup/pluginutils': 4.2.1
-      '@storybook/builder-vite': 7.0.0-rc.5(typescript@4.9.5)(vite@4.2.1)
-      '@storybook/react': 7.0.0-rc.5(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)
+      '@storybook/builder-vite': 7.0.2(typescript@4.9.5)(vite@4.2.1)
+      '@storybook/react': 7.0.2(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)
       '@vitejs/plugin-react': 3.1.0(vite@4.2.1)
       ast-types: 0.14.2
       magic-string: 0.27.0
@@ -4559,6 +4828,45 @@ packages:
       - supports-color
     dev: true
 
+  /@storybook/react@7.0.2(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5):
+    resolution: {integrity: sha512-2P7Oju1XKWMyn75dO0vjL4gthzBL/lLiCBRyAHKXZJ1H2eNdWjXkOOtH1HxnbRcXjWSU4tW96dqKY8m0iR9zAA==}
+    engines: {node: '>=16.0.0'}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@storybook/client-logger': 7.0.2
+      '@storybook/core-client': 7.0.2
+      '@storybook/docs-tools': 7.0.2
+      '@storybook/global': 5.0.0
+      '@storybook/preview-api': 7.0.2
+      '@storybook/react-dom-shim': 7.0.2(react-dom@18.2.0)(react@18.2.0)
+      '@storybook/types': 7.0.2
+      '@types/escodegen': 0.0.6
+      '@types/estree': 0.0.51
+      '@types/node': 16.18.16
+      acorn: 7.4.1
+      acorn-jsx: 5.3.2(acorn@7.4.1)
+      acorn-walk: 7.2.0
+      escodegen: 2.0.0
+      html-tags: 3.2.0
+      lodash: 4.17.21
+      prop-types: 15.8.1
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      react-element-to-jsx-string: 15.0.0(react-dom@18.2.0)(react@18.2.0)
+      ts-dedent: 2.2.0
+      type-fest: 2.19.0
+      typescript: 4.9.5
+      util-deprecate: 1.0.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@storybook/router@6.5.16(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-ZgeP8a5YV/iuKbv31V8DjPxlV4AzorRiR8OuSt/KqaiYXNXlOoQDz/qMmiNcrshrfLpmkzoq7fSo4T8lWo2UwQ==}
     peerDependencies:
@@ -4587,6 +4895,19 @@ packages:
       react-dom: 18.2.0(react@18.2.0)
     dev: true
 
+  /@storybook/router@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-ZB2vucfayZUrMLBlXju4v6CNOQQb0YKDLw5RoojdBxOsUFtnp5UiPOE+I8PQR63EBwnRjozeibV1XSM+GlQb5w==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      '@storybook/client-logger': 7.0.2
+      memoizerific: 1.11.3
+      qs: 6.11.1
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: true
+
   /@storybook/semver@7.3.2:
     resolution: {integrity: sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==}
     engines: {node: '>=10'}
@@ -4596,11 +4917,11 @@ packages:
       find-up: 4.1.0
     dev: true
 
-  /@storybook/telemetry@7.0.0-rc.5:
-    resolution: {integrity: sha512-So3Tb+wanyM2KMT1lVv56Kt8VEaQqwt375lWOt3TLNj15L0NYLvCmMCBRsLhtaB4arLo+uwfR4lBs372Qu7w2A==}
+  /@storybook/telemetry@7.0.2:
+    resolution: {integrity: sha512-s2PIwI9nVYQBf3h40EFHLynYUfdqzRJMXyaCWJdVQuvdQfRkAn3CLXaubK+VdjC869z3ZfW20EMu3Mbgzcc0HA==}
     dependencies:
-      '@storybook/client-logger': 7.0.0-rc.5
-      '@storybook/core-common': 7.0.0-rc.5
+      '@storybook/client-logger': 7.0.2
+      '@storybook/core-common': 7.0.2
       chalk: 4.1.2
       detect-package-manager: 2.0.1
       fetch-retry: 5.0.4
@@ -4616,8 +4937,8 @@ packages:
   /@storybook/testing-library@0.0.14-next.1:
     resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==}
     dependencies:
-      '@storybook/client-logger': 7.0.0
-      '@storybook/instrumenter': 7.0.0
+      '@storybook/client-logger': 7.0.2
+      '@storybook/instrumenter': 7.0.2
       '@testing-library/dom': 8.20.0
       '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0)
       ts-dedent: 2.2.0
@@ -4651,13 +4972,18 @@ packages:
       react-dom: 18.2.0(react@18.2.0)
     dev: true
 
-  /@storybook/types@7.0.0:
-    resolution: {integrity: sha512-eCMW/xTVMswgD/58itibw8s8f2hZ7tciT3saRdGCymg9tPUhMC/9eGIIUSr/C+xfnCJEZm6J6DgEUo1xlifonw==}
+  /@storybook/theming@7.0.2(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-c9sE+QAZNbopPvLiJ6BMxBERfTaq1ATyIri97FBvTucuSotNXw7X5q+ip5/nrCOPZuvK2f5wF4DRyD2HnB/rIQ==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
     dependencies:
-      '@storybook/channels': 7.0.0
-      '@types/babel__core': 7.20.0
-      '@types/express': 4.17.17
-      file-system-cache: 2.0.2
+      '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0)
+      '@storybook/client-logger': 7.0.2
+      '@storybook/global': 5.0.0
+      memoizerific: 1.11.3
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
     dev: true
 
   /@storybook/types@7.0.0-rc.5:
@@ -4669,6 +4995,15 @@ packages:
       file-system-cache: 2.0.2
     dev: true
 
+  /@storybook/types@7.0.2:
+    resolution: {integrity: sha512-0OCt/kAexa8MCcljxA+yZxGMn0n2U2Ync0KxotItqNbKBKVkaLQUls0+IXTWSCpC/QJvNZ049jxUHHanNi/96w==}
+    dependencies:
+      '@storybook/channels': 7.0.2
+      '@types/babel__core': 7.20.0
+      '@types/express': 4.17.17
+      file-system-cache: 2.0.2
+    dev: true
+
   /@swc/core-darwin-arm64@1.3.42:
     resolution: {integrity: sha512-hM6RrZFyoCM9mX3cj/zM5oXwhAqjUdOCLXJx7KTQps7NIkv/Qjvobgvyf2gAb89j3ARNo9NdIoLjTjJ6oALtiA==}
     engines: {node: '>=10'}
@@ -4894,7 +5229,7 @@ packages:
     resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==}
     dependencies:
       '@babel/parser': 7.21.3
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
       '@types/babel__generator': 7.6.4
       '@types/babel__template': 7.4.1
       '@types/babel__traverse': 7.18.3
@@ -4903,20 +5238,20 @@ packages:
   /@types/babel__generator@7.6.4:
     resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@types/babel__template@7.4.1:
     resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
     dependencies:
       '@babel/parser': 7.21.3
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@types/babel__traverse@7.18.3:
     resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==}
     dependencies:
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
     dev: true
 
   /@types/body-parser@1.19.2:
@@ -5690,13 +6025,13 @@ packages:
     resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
     dev: true
 
-  /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.16.17):
+  /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.17.12):
     resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==}
     engines: {node: '>=14.15.0'}
     peerDependencies:
       esbuild: '>=0.10.0'
     dependencies:
-      esbuild: 0.16.17
+      esbuild: 0.17.12
       tslib: 2.5.0
     dev: true
 
@@ -6072,7 +6407,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/compat-data': 7.21.0
+      '@babel/compat-data': 7.21.4
       '@babel/core': 7.21.3
       '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3)
       semver: 6.3.0
@@ -6617,7 +6952,7 @@ packages:
     dev: true
 
   /concat-map@0.0.1:
-    resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+    resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
 
   /concat-stream@1.6.2:
     resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==}
@@ -7646,6 +7981,17 @@ packages:
       - supports-color
     dev: true
 
+  /esbuild-register@3.4.2(esbuild@0.17.12):
+    resolution: {integrity: sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==}
+    peerDependencies:
+      esbuild: '>=0.12 <1'
+    dependencies:
+      debug: 4.3.4(supports-color@5.5.0)
+      esbuild: 0.17.12
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /esbuild@0.16.17:
     resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==}
     engines: {node: '>=12'}
@@ -8045,7 +8391,7 @@ packages:
     engines: {node: '>=8.3.0'}
     dependencies:
       '@babel/traverse': 7.21.3(supports-color@5.5.0)
-      '@babel/types': 7.21.3
+      '@babel/types': 7.21.4
       c8: 7.13.0
     transitivePeerDependencies:
       - supports-color
@@ -9425,7 +9771,7 @@ packages:
       argparse: 2.0.1
     dev: true
 
-  /jscodeshift@0.14.0(@babel/preset-env@7.20.2):
+  /jscodeshift@0.14.0(@babel/preset-env@7.21.4):
     resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==}
     hasBin: true
     peerDependencies:
@@ -9437,7 +9783,7 @@ packages:
       '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.3)
       '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3)
       '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.3)
-      '@babel/preset-env': 7.20.2(@babel/core@7.21.3)
+      '@babel/preset-env': 7.21.4(@babel/core@7.21.3)
       '@babel/preset-flow': 7.18.6(@babel/core@7.21.3)
       '@babel/preset-typescript': 7.21.0(@babel/core@7.21.3)
       '@babel/register': 7.21.0(@babel/core@7.21.3)
@@ -11166,6 +11512,24 @@ packages:
       - immer
     dev: false
 
+  /reactflow@11.7.0(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-bjfJV1iQZ+VwIlvsnd4TbXNs6kuJ5ONscud6fNkF8RY/oU2VUZpdjA3q1zwmgnjmJcIhxuBiBI5VLGajYx/Ozg==}
+    peerDependencies:
+      react: '>=17'
+      react-dom: '>=17'
+    dependencies:
+      '@reactflow/background': 11.2.0(react-dom@18.2.0)(react@18.2.0)
+      '@reactflow/controls': 11.1.11(react-dom@18.2.0)(react@18.2.0)
+      '@reactflow/core': 11.7.0(react-dom@18.2.0)(react@18.2.0)
+      '@reactflow/minimap': 11.5.0(react-dom@18.2.0)(react@18.2.0)
+      '@reactflow/node-resizer': 2.1.0(react-dom@18.2.0)(react@18.2.0)
+      '@reactflow/node-toolbar': 1.1.11(react-dom@18.2.0)(react@18.2.0)
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    transitivePeerDependencies:
+      - immer
+    dev: false
+
   /read-pkg-up@7.0.1:
     resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
     engines: {node: '>=8'}
@@ -11784,11 +12148,11 @@ packages:
     resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==}
     dev: true
 
-  /storybook@7.0.0-rc.5:
-    resolution: {integrity: sha512-zmp7E5O4AJoro99qrDYbOxloKaQED//5WlnjdIhZSndXxSJb82IyVl6VYZc7Ji6xUWC4EoqzrLcFbttfC4w5uQ==}
+  /storybook@7.0.2:
+    resolution: {integrity: sha512-/XBLhT9Vb14yNBcA9rlW15y+C6IsCA3kx5PKvK9kL10sKCi8invcY94UfCSisXe8HqsO3u6peumo2xpYucKMjw==}
     hasBin: true
     dependencies:
-      '@storybook/cli': 7.0.0-rc.5
+      '@storybook/cli': 7.0.2
     transitivePeerDependencies:
       - bufferutil
       - encoding
@@ -12283,65 +12647,65 @@ packages:
       tslib: 1.14.1
       typescript: 4.9.5
 
-  /turbo-darwin-64@1.8.8:
-    resolution: {integrity: sha512-18cSeIm7aeEvIxGyq7PVoFyEnPpWDM/0CpZvXKHpQ6qMTkfNt517qVqUTAwsIYqNS8xazcKAqkNbvU1V49n65Q==}
+  /turbo-darwin-64@1.8.6:
+    resolution: {integrity: sha512-VlXkQR0TEBAEyBRsvAXBax+fj1EdPKPliwBaCnRLiDUcA/8wYlKte/Kk6ubmj9E0n7U/B4keCxxHiJZqW/5Rqg==}
     cpu: [x64]
     os: [darwin]
     requiresBuild: true
     dev: true
     optional: true
 
-  /turbo-darwin-arm64@1.8.8:
-    resolution: {integrity: sha512-ruGRI9nHxojIGLQv1TPgN7ud4HO4V8mFBwSgO6oDoZTNuk5ybWybItGR+yu6fni5vJoyMHXOYA2srnxvOc7hjQ==}
+  /turbo-darwin-arm64@1.8.6:
+    resolution: {integrity: sha512-w4L2QLj90ex68UXxTPoqtZPl8mWzc6a1RtPjQhoxAWtZf9T2WXi813dCzYEbVUVC09/DOW/VxZRN7sb2r0KP9A==}
     cpu: [arm64]
     os: [darwin]
     requiresBuild: true
     dev: true
     optional: true
 
-  /turbo-linux-64@1.8.8:
-    resolution: {integrity: sha512-N/GkHTHeIQogXB1/6ZWfxHx+ubYeb8Jlq3b/3jnU4zLucpZzTQ8XkXIAfJG/TL3Q7ON7xQ8yGOyGLhHL7MpFRg==}
+  /turbo-linux-64@1.8.6:
+    resolution: {integrity: sha512-eV245jefIhMAZskqQKalFwreC5UEdQcuHcBiWcgUk0py76fbwB7+1HfH5cmeJlb3a1sB6f3H0HHmGPmb34feCA==}
     cpu: [x64]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /turbo-linux-arm64@1.8.8:
-    resolution: {integrity: sha512-hKqLbBHgUkYf2Ww8uBL9UYdBFQ5677a7QXdsFhONXoACbDUPvpK4BKlz3NN7G4NZ+g9dGju+OJJjQP0VXRHb5w==}
+  /turbo-linux-arm64@1.8.6:
+    resolution: {integrity: sha512-Kiw3nyEvNU6Bpil4zE5FwhasPAOi59R4YdCmjJp0Sen6V9u+/Jij6SWwaoUdATORJLiYQBbhontWBH55B53VDw==}
     cpu: [arm64]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /turbo-windows-64@1.8.8:
-    resolution: {integrity: sha512-2ndjDJyzkNslXxLt+PQuU21AHJWc8f6MnLypXy3KsN4EyX/uKKGZS0QJWz27PeHg0JS75PVvhfFV+L9t9i+Yyg==}
+  /turbo-windows-64@1.8.6:
+    resolution: {integrity: sha512-34BkAG9r4nE00xeMeVahaF82h8R6SO+IIOcD60fNr2p+Ch+YcQa+DbEWA/KUj3coUTIiNP5XnRCLRUYADdlxjQ==}
     cpu: [x64]
     os: [win32]
     requiresBuild: true
     dev: true
     optional: true
 
-  /turbo-windows-arm64@1.8.8:
-    resolution: {integrity: sha512-xCA3oxgmW9OMqpI34AAmKfOVsfDljhD5YBwgs0ZDsn5h3kCHhC4x9W5dDk1oyQ4F5EXSH3xVym5/xl1J6WRpUg==}
+  /turbo-windows-arm64@1.8.6:
+    resolution: {integrity: sha512-4jWUaI7Lmonp2I3x81GruiCYd0aQsG/xDOYhuv9+j2yIgB/UHJFz/P8PWp/nziwPtGpRd/AheDlPzzyd9lWoqw==}
     cpu: [arm64]
     os: [win32]
     requiresBuild: true
     dev: true
     optional: true
 
-  /turbo@1.8.8:
-    resolution: {integrity: sha512-qYJ5NjoTX+591/x09KgsDOPVDUJfU9GoS+6jszQQlLp1AHrf1wRFA3Yps8U+/HTG03q0M4qouOfOLtRQP4QypA==}
+  /turbo@1.8.6:
+    resolution: {integrity: sha512-6IOOaa8ytgjnSCTnp3LKAd2uGBZ/Kmx8ZPlI/YMWuKMUqvkXKLbh+w76ApMgMm+faUqti+QujVWovCu2kY6KuQ==}
     hasBin: true
     requiresBuild: true
     optionalDependencies:
-      turbo-darwin-64: 1.8.8
-      turbo-darwin-arm64: 1.8.8
-      turbo-linux-64: 1.8.8
-      turbo-linux-arm64: 1.8.8
-      turbo-windows-64: 1.8.8
-      turbo-windows-arm64: 1.8.8
+      turbo-darwin-64: 1.8.6
+      turbo-darwin-arm64: 1.8.6
+      turbo-linux-64: 1.8.6
+      turbo-linux-arm64: 1.8.6
+      turbo-windows-64: 1.8.6
+      turbo-windows-arm64: 1.8.6
     dev: true
 
   /type-check@0.3.2: