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: