diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 3c7aa52..85155f4 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1,3 @@ +@Jaryt @KyleTryon -@CircleCI-Public/cpeng \ No newline at end of file +@CircleCI-Public/cpeng diff --git a/.nvmrc b/.nvmrc index dac255d..12ea1ee 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v16.15.1 +v18.12.0 \ No newline at end of file diff --git a/package.json b/package.json index 516144c..a264fee 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "@circleci/circleci-config-parser": "^0.10.0-alpha.3", "@circleci/circleci-config-sdk": "^0.10.1", "@monaco-editor/react": "^4.4.5", + "@vitejs/plugin-react": "^2.2.0", "algoliasearch": "^4.13.1", "easy-peasy": "^5.0.3", "formik": "^2.2.9", @@ -22,17 +23,14 @@ "react-aria": "3.19.0", "react-beautiful-dnd": "^13.1.0", "react-dom": "^18.2.0", - "react-flow-renderer": "9.6.7", "react-instantsearch-hooks-web": "^6.29.0", "react-redux": "^7.2.6", + "reactflow": "^11.2.0", "start-server-and-test": "^1.14.0", "uuid": "^8.3.2" }, "devDependencies": { "@reduxjs/toolkit": "^1.6.2", - "@testing-library/jest-dom": "^5.11.4", - "@testing-library/react": "^12.1.2", - "@testing-library/user-event": "^13.5.0", "@types/algoliasearch": "^4.0.0", "@types/jest": "^27.0.2", "@types/node": "^16.11.35", @@ -41,14 +39,12 @@ "@types/react-dom": "^18.0.6", "@types/react-tabs": "^2.3.3", "@types/uuid": "^8.3.1", - "@vitejs/plugin-react": "^2.1.0", "autoprefixer": "^10.4.12", "cypress": "^10.11.0", "eslint-plugin-react-hooks": "^4.3.0", "postcss": "^8.4.16", "tailwindcss": "^3.1.8", "typescript": "^4.6.4", - "vite": "^3.1.0", - "vite-plugin-environment": "^1.1.2" + "vite": "^3.1.0" } } diff --git a/src/App.tsx b/src/App.tsx index f6014e8..6d3756d 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,16 +1,16 @@ import algoliasearch from 'algoliasearch'; import { createStore, StoreProvider } from 'easy-peasy'; import { useRef } from 'react'; -import Toast from './components/atoms/Toast'; -import ToolTip from './components/atoms/Tooltip'; -import ConfirmationModal from './components/containers/ConfirmationModal'; -import KBarList from './components/containers/KBarList'; -import EditorPane from './components/panes/EditorPane'; -import NavigationPane from './components/panes/NavigationPane'; -import WorkflowsPane from './components/panes/WorkflowsPane'; +import Toast from './core/components/atoms/Toast'; +import ToolTip from './core/components/atoms/Tooltip'; +import ConfirmationModal from './core/components/containers/ConfirmationModal'; +import KBarList from './core/components/containers/KBarList'; +import EditorPane from './core/components/panes/EditorPane'; +import NavigationPane from './core/components/panes/NavigationPane'; +import WorkflowsPane from './core/components/panes/WorkflowsPane'; import './index.css'; -import useWindowDimensions, { useStoreState } from './state/Hooks'; -import Store from './state/Store'; +import useWindowDimensions, { useStoreState } from './core/state/Hooks'; +import Store from './core/state/Store'; export const store = createStore(Store); export const inspectorWidth = 400; diff --git a/src/components/atoms/ConnectionLine.tsx b/src/components/atoms/ConnectionLine.tsx deleted file mode 100644 index 9fbc7b8..0000000 --- a/src/components/atoms/ConnectionLine.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import { - ConnectionLineComponentProps, - useStoreState as flowState, -} from 'react-flow-renderer'; -import { useStoreState } from '../../state/Hooks'; - -const getPos = (isSource: boolean, bounds: DOMRect, transform: number[]) => { - let x, y; - - if (isSource) { - x = (bounds.x + bounds.width - transform[0]) / transform[2]; - } else { - x = (bounds.x - transform[0]) / transform[2]; - } - - y = (bounds.y + bounds.height / 2 - 60 - transform[1]) / transform[2]; - - return { x, y }; -}; - -const ConnectionLine = ({ targetX, targetY }: ConnectionLineComponentProps) => { - const connecting = useStoreState((state) => state.connecting); - const altAction = useStoreState((state) => state.altAction); - const transform = flowState((state: any) => state.transform); - const handle = connecting?.start?.ref?.current as Element; - const isSource = connecting?.start?.id.connectionHandleType === 'source'; - - if (!handle) { - return null; - } - - const bounds = handle.getBoundingClientRect(); - const start = getPos(isSource, bounds, transform); - let end = { x: targetX, y: targetY }; - const dist = 30 * (isSource ? 1 : -1); - const invalid = isSource ? end.x < start.x : end.y > start.x; - let color = '#76CDFF'; - - if (!invalid && connecting?.end?.ref) { - const snapTo = connecting?.end.ref?.current as Element; - - if (snapTo && connecting?.end?.ref.current !== handle) { - const snapToBounds = snapTo.getBoundingClientRect(); - end = getPos(!isSource, snapToBounds, transform); - color = '#0078CA'; - } - } - - color = invalid || altAction ? '#F24646' : color; - - return ( - - - - - - ); -}; - -export default ConnectionLine; diff --git a/src/components/atoms/Edge.tsx b/src/components/atoms/Edge.tsx deleted file mode 100644 index 6ff2c3d..0000000 --- a/src/components/atoms/Edge.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from 'react'; -import { EdgeProps } from 'react-flow-renderer'; - -export default function Edge({ - id, - sourceX, - sourceY, - targetX, - targetY, - sourcePosition, - targetPosition, - style = {}, - data, - arrowHeadType, - markerEndId, -}: EdgeProps) { - const gap = 45; - - return ( - - - {/* - - {'requires'} - - */} - - ); -} diff --git a/src/components/atoms/nodes/JobNode.tsx b/src/components/atoms/nodes/JobNode.tsx deleted file mode 100644 index b462cf8..0000000 --- a/src/components/atoms/nodes/JobNode.tsx +++ /dev/null @@ -1,312 +0,0 @@ -import { Job, types, workflow } from '@circleci/circleci-config-sdk'; -import { WorkflowJob } from '@circleci/circleci-config-sdk/dist/src/lib/Components/Workflow'; -import React, { useRef } from 'react'; -import { Handle, isNode, NodeProps, Position } from 'react-flow-renderer'; -import JobIcon from '../../../icons/components/JobIcon'; -import JobOnHoldIcon from '../../../icons/components/JobOnHoldIcon'; -import DeleteItemIcon from '../../../icons/ui/DeleteItemIcon'; -import MinusIcon from '../../../icons/ui/MinusIcon'; -import PlusIcon from '../../../icons/ui/PlusIcon'; -import { JobMapping } from '../../../mappings/components/JobMapping'; -import { useStoreActions, useStoreState } from '../../../state/Hooks'; -import { StagedJobMenuNav } from '../../menus/stage/StagedJobMenu'; -import { flattenGenerable } from '../Definition'; - -const formatPattern = (pattern: string) => { - if (!pattern.startsWith('^')) { - pattern = `^${pattern}`; - } - if (!pattern.endsWith('$')) { - pattern = `${pattern}$`; - } - - return pattern; -}; - -const ConnectorIcon = (props: { filled: boolean; subtraction?: boolean }) => { - return ( - <> - {props.subtraction ? ( - - ) : ( - - )} - - ); -}; - -const JobNode: React.FunctionComponent< - NodeProps & { data: workflow.WorkflowJob } -> = (props) => { - const elements = useStoreState( - (state) => - state.definitions.workflows[state.selectedWorkflowId].value.elements, - ); - const dragging = useStoreState((state) => state.dragging); - // const setWorkflowElements = useStoreActions( - // (actions) => actions.setWorkflowElements, - // ); - const updateJob = useStoreActions((actions) => actions.update_jobs); - const navigateTo = useStoreActions((actions) => actions.navigateTo); - const setConnecting = useStoreActions((actions) => actions.setConnecting); - const toolbox = useStoreState((state) => state.previewToolbox); - const selectedWorkflow = useStoreState((state) => state.selectedWorkflowId); - const altAction = useStoreState((state) => state.altAction); - const removeWorkflowElement = useStoreActions( - (actions) => actions.removeWorkflowElement, - ); - - const connecting = useStoreState((state) => state.connecting); - const updateConnecting = useStoreActions( - (actions) => actions.updateConnecting, - ); - - const updateWorkflowJob = ( - workflowJob: workflow.WorkflowJob, - applyToData: { - job?: Job; - parameters?: types.workflow.WorkflowJobParameters; - }, - ) => - elements.map((element) => - isNode(element) && element.data.job.name === workflowJob.job.name - ? { ...element, data: { ...workflowJob, ...applyToData } } - : element, - ); - const [hovering, setHovering] = React.useState({ - handles: false, - node: false, - requiredBy: false, - remove: false, - requires: false, - }); - - let filtered = false; - - const workflowJob = props.data as WorkflowJob; - const filters = workflowJob.parameters?.filters; - - if (filters && toolbox.filter.preview && filters[toolbox.filter.type]) { - const jobFilter = filters[toolbox.filter.type]; - const sample = toolbox.filter.pattern; - - try { - const ignoreFilter = jobFilter?.ignore?.some((pattern) => - sample.match(formatPattern(pattern)), - ); - const onlyFilter = jobFilter?.only - ? jobFilter?.only?.some((pattern) => - sample.match(formatPattern(pattern)), - ) - : true; - - filtered = ignoreFilter || !onlyFilter; - } catch (e) { - console.warn('Invalid regex pattern'); - } - } else if (toolbox.filter.type === 'tags') { - filtered = true; - } - - const jobIcon = (isApproval: boolean = false) => { - const classNameValue = 'w-5 mr-2'; - if (isApproval) { - return ; - } else { - return ; - } - }; - - const viewJobProperties = () => { - navigateTo({ - component: StagedJobMenuNav, - props: { - source: workflowJob, - values: flattenGenerable(workflowJob, true), - id: props.id, - overrideRoot: selectedWorkflow, - }, - origin: true, - }); - }; - - const trackHovering = ( - entering: string[], - leaving: string[], - postEnter?: () => void, - postLeave?: () => void, - ) => { - return { - onMouseEnter: () => { - setHovering( - entering.reduce( - (previous, n) => ({ ...previous, [n]: true }), - hovering, - ), - ); - postEnter && postEnter(); - }, - onMouseLeave: () => { - setHovering( - leaving.reduce( - (previous, n) => ({ ...previous, [n]: false }), - hovering, - ), - ); - postLeave && postLeave(); - }, - }; - }; - - const nodeRef = useRef(null); - const startConnecting = - (side: 'source' | 'target') => (e: React.DragEvent) => { - setConnecting({ - ref: nodeRef, - id: { - connectionNodeId: props.id, - connectionHandleType: side, - connectionHandleId: `${props.id}_${side}`, - }, - name: props.data.parameters?.name || props.data.name, - }); - e.preventDefault(); - }; - - return ( -
{ - const startType = connecting?.start?.id.connectionHandleType; - const side = startType === 'source' ? 'target' : 'source'; - updateConnecting({ - ref: nodeRef, - id: { - connectionNodeId: props.id, - connectionHandleType: side, - connectionHandleId: `${props.id}_${side}`, - }, - name: props.data.parameters?.name || props.data.name, - }); - }, - () => { - updateConnecting(undefined); - }, - )} - onDragOver={(e) => { - if (dragging && dragging.dataType?.dragTarget === JobMapping.key) { - e.preventDefault(); - } - }} - onDrop={(e) => { - if ( - dragging && - dragging.dataType?.dragTarget === JobMapping.key && - dragging.dataType.applyToNode - ) { - const applyToData = dragging.dataType.applyToNode( - dragging.data, - props.data, - ); - - if (JobMapping.key in applyToData) { - updateJob({ old: props.data.job, new: applyToData.job }); - } - - if ('parameters' in applyToData) { - updateWorkflowJob(props.data, applyToData); - } - } - }} - > - - -
- - -
- - - - - -
- ); -}; - -export default JobNode; diff --git a/src/components/containers/WorkflowContainer.tsx b/src/components/containers/WorkflowContainer.tsx deleted file mode 100644 index fc8b0bd..0000000 --- a/src/components/containers/WorkflowContainer.tsx +++ /dev/null @@ -1,284 +0,0 @@ -import { orb } from '@circleci/circleci-config-sdk'; -import { WorkflowJobParameters } from '@circleci/circleci-config-sdk/dist/src/lib/Components/Workflow/types/WorkflowJob.types'; -import { useEffect, useState } from 'react'; -import ReactFlow, { - addEdge, - Background, - BackgroundVariant, - ConnectionLineComponentProps, - ConnectionMode, - EdgeProps, - FlowTransform, - isNode, - Node, - NodeTypesType, - useStoreActions as flowActions, -} from 'react-flow-renderer'; -import { v4 } from 'uuid'; -import { dataMappings } from '../../mappings/GenerableMapping'; -import { JobMapping } from '../../mappings/components/JobMapping'; -import { useStoreActions, useStoreState } from '../../state/Hooks'; -import ConnectionLine from '../atoms/ConnectionLine'; -import Edge from '../atoms/Edge'; - -export interface ElementProps { - className?: string; - bgClassName?: string; -} - -const getTypes = (): NodeTypesType => - Object.assign( - {}, - ...dataMappings.map((component) => - component.mapping.node - ? { [component.mapping.key]: component.mapping.node.component } - : null, - ), - ); - -const WorkflowContainer = ({ bgClassName, className }: ElementProps) => { - const importOrb = useStoreActions((actions) => actions.importOrb); - const [transform, setTransform] = useState({ - x: 0, - y: 0, - zoom: 1, - }); - const [cooldown, setCooldown] = useState(false); - const elements = useStoreState( - (state) => - state.definitions.workflows[state.selectedWorkflowId].value.elements, - ); - const addWorkflowElement = useStoreActions( - (actions) => actions.addWorkflowElement, - ); - const setWorkflowElements = useStoreActions( - (actions) => actions.setWorkflowElements, - ); - const dragging = useStoreState((state) => state.dragging); - const connecting = useStoreState((state) => state.connecting); - const setConnecting = useStoreActions((actions) => actions.setConnecting); - const altAction = useStoreState((state) => state.altAction); - const setAltAction = useStoreActions((actions) => actions.setAltAction); - const [connectingTo, setConnectingTo] = useState({ x: 0, y: 0 }); - - window.addEventListener('keydown', (e) => { - if (e.shiftKey && !cooldown) { - setAltAction(!altAction); - - setCooldown(true); - - setTimeout(() => { - setCooldown(false); - }, 5); - } - }); - - const updateWorkflowJob = ( - targetJob: string, - applyToData: (parameters: WorkflowJobParameters) => WorkflowJobParameters, - ) => - elements.map((element) => { - return isNode(element) && - JobMapping.node?.transform && - (element.data.parameters?.name || element.data.job.name) === targetJob - ? { - ...element, - data: JobMapping.node.transform( - element.data.job, - applyToData(element.data.parameters), - ), - } - : element; - }); - - const handleMouseUp = () => { - if (connecting?.start?.name) { - const source = - connecting.start.id.connectionHandleType === 'source' - ? connecting.start - : connecting.end; - const target = - connecting.start.id.connectionHandleType === 'source' - ? connecting.end - : connecting.start; - const startName = source?.name; - - if (target?.name && startName) { - if ( - connecting.intent === 'creating' && - source.id.connectionNodeId !== target.id.connectionNodeId - ) { - setWorkflowElements( - addEdge( - { - source: source.id.connectionNodeId, - target: target.id.connectionNodeId, - type: 'requires', - sourceHandle: source.id.connectionHandleId, - targetHandle: target.id.connectionNodeId, - animated: false, - style: { stroke: '#A3A3A3', strokeWidth: '2px' }, - }, - updateWorkflowJob(target.name, (parameters) => ({ - ...parameters, - requires: parameters?.requires - ? [...parameters.requires, startName] - : [startName], - })), - ), - ); - } else { - const updated = updateWorkflowJob(target.name, (parameters) => { - let requires = undefined; - - if (parameters.requires) { - const updatedRequires = parameters?.requires?.filter( - (requirement) => requirement !== startName, - ); - requires = - updatedRequires.length > 0 ? updatedRequires : undefined; - } - return { - ...parameters, - requires, - }; - }); - - const filtered = updated.filter((e) => { - if (e.type !== 'requires') { - return true; - } - - const edge = e as EdgeProps; - - return ( - edge.source !== source.id.connectionNodeId || - edge.target !== target.id.connectionNodeId - ); - }); - - setWorkflowElements(filtered); - } - } - - setConnecting({ - id: { - connectionNodeId: null, - connectionHandleType: null, - connectionHandleId: null, - }, - }); - } - }; - - useEffect(() => { - window.addEventListener('mouseup', handleMouseUp); - - return () => { - window.removeEventListener('mouseup', handleMouseUp); - }; - }); - - const gap = 15; - - const NodeGraph = () => { - const setConnecting = flowActions((state) => state.setConnectionNodeId); - const setConnectingPosition = flowActions( - (state) => state.setConnectionPosition, - ); - - useEffect(() => { - setConnecting(connecting?.start?.id); - setConnectingPosition({ - x: connectingTo.x - transform.x, - y: connectingTo.y - transform.y, - }); - }); - - return null; - }; - - return ( -
{ - if (dragging?.dataType?.dragTarget === 'workflow') { - e.preventDefault(); - } - }} - onDrag={(e) => {}} - onMouseMove={(e) => { - const containerBounds = (e.target as Element) - .closest('.react-flow') - ?.getBoundingClientRect(); - - if (containerBounds) { - setConnectingTo({ - x: e.clientX + transform.x - containerBounds.left, - y: e.clientY + transform.y - containerBounds.top, - }); - } - }} - onDrop={(e) => { - const nodeMapping = dragging?.dataType?.node; - - if (dragging?.dataType?.dragTarget === 'workflow' && nodeMapping) { - const pos = { - x: e.clientX - 80 - transform.x, - y: e.clientY - 120 - transform.y, - }; - const round = (val: number) => - Math.floor(val / transform.zoom / gap) * gap; - let data = dragging.data; - - if (nodeMapping.transform) { - data = nodeMapping.transform(data, undefined, elements); - } - - if (data.job instanceof orb.OrbRef) { - importOrb(data.job.orb); - } - - const workflowNode: Node = { - id: data.parameters?.name || data.name || v4(), - data, - connectable: true, - dragHandle: '.node', - type: dragging.dataType.key, - position: { x: round(pos.x), y: round(pos.y) }, - }; - - addWorkflowElement(workflowNode); - } - }} - > - { - setTransform(e || transform); - }} - selectNodesOnDrag={false} - nodeTypes={getTypes()} - edgeTypes={{ requires: Edge }} - snapToGrid={true} - minZoom={0.1} - connectionMode={ConnectionMode.Loose} - connectionLineComponent={ - ConnectionLine as React.ComponentType - } - > - - - -
- ); -}; - -export default WorkflowContainer; diff --git a/src/components/atoms/AddButton.tsx b/src/core/components/atoms/AddButton.tsx similarity index 96% rename from src/components/atoms/AddButton.tsx rename to src/core/components/atoms/AddButton.tsx index 47f9c7a..e2d7f55 100644 --- a/src/components/atoms/AddButton.tsx +++ b/src/core/components/atoms/AddButton.tsx @@ -7,7 +7,7 @@ const AddButton = (props: ButtonHTMLAttributes) => { type="button" {...props} className={ - `bg-circle-gray-300 transition-colors h-8 w-8 rounded ${props.className} + `bg-circle-gray-300 transition-colors h-8 w-8 rounded ${props.className} ${props.disabled ? 'opacity-50 cursor-default' : 'hover:bg-circle-gray-400 '}` } > diff --git a/src/components/atoms/Button.tsx b/src/core/components/atoms/Button.tsx similarity index 78% rename from src/components/atoms/Button.tsx rename to src/core/components/atoms/Button.tsx index db86066..4605b12 100644 --- a/src/components/atoms/Button.tsx +++ b/src/core/components/atoms/Button.tsx @@ -1,13 +1,14 @@ import { ButtonHTMLAttributes } from 'react'; -const styles = { +const styles: Record = { dangerous: { default: 'bg-circle-red-dangerous text-white', - active: 'hover:bg-circle-red-dangerous-dark ', + active: 'hover:bg-circle-red-dangerous-dark', }, secondary: { default: 'bg-circle-gray-250', active: 'hover:bg-circle-gray-300', + selected: 'bg-circle-gray-400' }, flat: { default: 'text-circle-gray-400', @@ -25,10 +26,12 @@ export const Button = ({ variant, className, margin, + selected, ...props }: ButtonHTMLAttributes & { variant: ButtonVariant; margin?: string; + selected?: boolean; }) => { return ( diff --git a/src/components/atoms/Card.tsx b/src/core/components/atoms/Card.tsx similarity index 100% rename from src/components/atoms/Card.tsx rename to src/core/components/atoms/Card.tsx diff --git a/src/components/atoms/ComponentInfo.tsx b/src/core/components/atoms/ComponentInfo.tsx similarity index 93% rename from src/components/atoms/ComponentInfo.tsx rename to src/core/components/atoms/ComponentInfo.tsx index 27cc6bf..8cc764e 100644 --- a/src/components/atoms/ComponentInfo.tsx +++ b/src/core/components/atoms/ComponentInfo.tsx @@ -1,6 +1,6 @@ import InspectableMapping, { GenerableInfoType, -} from '../../mappings/InspectableMapping'; +} from '../../../mappings/InspectableMapping'; const ComponentInfo = ({ type, diff --git a/src/core/components/atoms/ConnectionLine.tsx b/src/core/components/atoms/ConnectionLine.tsx new file mode 100644 index 0000000..7ed76da --- /dev/null +++ b/src/core/components/atoms/ConnectionLine.tsx @@ -0,0 +1,86 @@ +// import { +// ConnectionLineComponentProps, +// useStore as flowState, +// } from 'react-flow-renderer'; +// import { useStoreState } from '../../state/Hooks'; + +// const getPos = (isSource: boolean, bounds: DOMRect, transform: number[]) => { +// let x, y; + +// if (isSource) { +// x = (bounds.x + bounds.width - transform[0]) / transform[2]; +// } else { +// x = (bounds.x - transform[0]) / transform[2]; +// } + +// y = (bounds.y + bounds.height / 2 - 60 - transform[1]) / transform[2]; + +// return { x, y }; +// }; + +// const ConnectionLine = ({ targetX, targetY }: ConnectionLineComponentProps) => { +// const connecting = useStoreState((state) => state.connecting); +// const altAction = useStoreState((state) => state.altAction); +// const transform = flowState((state: any) => state.transform); +// const handle = connecting?.start?.ref?.current as Element; +// const isSource = connecting?.start?.id.connectionHandleType === 'source'; + +// if (!handle) { +// return null; +// } + +// const bounds = handle.getBoundingClientRect(); +// const start = getPos(isSource, bounds, transform); +// let end = { x: targetX, y: targetY }; +// const dist = 30 * (isSource ? 1 : -1); +// const invalid = isSource ? end.x < start.x : end.y > start.x; +// let color = '#76CDFF'; + +// if (!invalid && connecting?.end?.ref) { +// const snapTo = connecting?.end.ref?.current as Element; + +// if (snapTo && connecting?.end?.ref.current !== handle) { +// const snapToBounds = snapTo.getBoundingClientRect(); +// end = getPos(!isSource, snapToBounds, transform); +// color = '#0078CA'; +// } +// } + +// color = invalid || altAction ? '#F24646' : color; + +// return ( +// +// +// +// +// +// ); +// }; + +// export default ConnectionLine; + +export default {} \ No newline at end of file diff --git a/src/components/atoms/Definition.tsx b/src/core/components/atoms/Definition.tsx similarity index 83% rename from src/components/atoms/Definition.tsx rename to src/core/components/atoms/Definition.tsx index 24d26ae..c5e6e60 100644 --- a/src/components/atoms/Definition.tsx +++ b/src/core/components/atoms/Definition.tsx @@ -5,7 +5,7 @@ import { OrbImport, OrbRef, } from '@circleci/circleci-config-sdk/dist/src/lib/Orb'; -import InspectableMapping from '../../mappings/InspectableMapping'; +import InspectableMapping from '../../../mappings/InspectableMapping'; import { useStoreActions } from '../../state/Hooks'; import { InspectorDefinitionMenuNav } from '../menus/definitions/InspectorDefinitionMenu'; @@ -35,7 +35,7 @@ export const flattenGenerable = (data: Generable, nested?: boolean) => { )[0]; }; -const Definition = (props: { +const Definition = ({ data, ...props}: { data: Generable | OrbRef; type: InspectableMapping; index: number; @@ -47,27 +47,27 @@ const Definition = (props: { return ( ); }; diff --git a/src/core/components/atoms/Edge.tsx b/src/core/components/atoms/Edge.tsx new file mode 100644 index 0000000..0aab887 --- /dev/null +++ b/src/core/components/atoms/Edge.tsx @@ -0,0 +1,45 @@ +import React from 'react'; +// import { EdgeProps } from 'react-flow-renderer'; + +// export default function Edge({ +// id, +// sourceX, +// sourceY, +// targetX, +// targetY, +// sourcePosition, +// targetPosition, +// style = {}, +// data, +// arrowHeadType, +// markerEndId, +// }: EdgeProps) { +// const gap = 45; + +// return ( +// +// +// {/* +// +// {'requires'} +// +// */} +// +// ); +// } + +export default {} \ No newline at end of file diff --git a/src/components/atoms/Empty.tsx b/src/core/components/atoms/Empty.tsx similarity index 100% rename from src/components/atoms/Empty.tsx rename to src/core/components/atoms/Empty.tsx diff --git a/src/components/atoms/Footer.tsx b/src/core/components/atoms/Footer.tsx similarity index 91% rename from src/components/atoms/Footer.tsx rename to src/core/components/atoms/Footer.tsx index ef1d469..b749af3 100644 --- a/src/components/atoms/Footer.tsx +++ b/src/core/components/atoms/Footer.tsx @@ -1,5 +1,5 @@ import { PropsWithChildren } from 'react'; -import { inspectorWidth } from '../../App'; +import { inspectorWidth } from '../../../App'; export const Footer = ({ children, diff --git a/src/components/atoms/Info.tsx b/src/core/components/atoms/Info.tsx similarity index 100% rename from src/components/atoms/Info.tsx rename to src/core/components/atoms/Info.tsx diff --git a/src/components/atoms/OpenConfig.tsx b/src/core/components/atoms/OpenConfig.tsx similarity index 96% rename from src/components/atoms/OpenConfig.tsx rename to src/core/components/atoms/OpenConfig.tsx index b94fc35..2a3b6f0 100644 --- a/src/components/atoms/OpenConfig.tsx +++ b/src/core/components/atoms/OpenConfig.tsx @@ -5,7 +5,7 @@ import { useStoreActions, useStoreState, } from '../../state/Hooks'; -import { Button } from '../atoms/Button'; +import { Button } from './Button'; export const OpenConfig = () => { const inputFile = useRef(null); diff --git a/src/components/atoms/Select.tsx b/src/core/components/atoms/Select.tsx similarity index 98% rename from src/components/atoms/Select.tsx rename to src/core/components/atoms/Select.tsx index afd1600..0b7ee26 100644 --- a/src/components/atoms/Select.tsx +++ b/src/core/components/atoms/Select.tsx @@ -61,7 +61,7 @@ const Select = (props: SelectProps) => { props.borderless ? 'border-transparent' : ' border-circle-gray-300 shadow-sm' - } px-2 hover:border-circle-gray-700 border + } px-2 hover:border-circle-gray-700 border ${props.className}`} >
diff --git a/src/components/atoms/Toast.tsx b/src/core/components/atoms/Toast.tsx similarity index 100% rename from src/components/atoms/Toast.tsx rename to src/core/components/atoms/Toast.tsx diff --git a/src/components/atoms/Tooltip.tsx b/src/core/components/atoms/Tooltip.tsx similarity index 100% rename from src/components/atoms/Tooltip.tsx rename to src/core/components/atoms/Tooltip.tsx diff --git a/src/components/atoms/WorkflowSelector.tsx b/src/core/components/atoms/WorkflowSelector.tsx similarity index 95% rename from src/components/atoms/WorkflowSelector.tsx rename to src/core/components/atoms/WorkflowSelector.tsx index 21118e4..ac48d17 100644 --- a/src/components/atoms/WorkflowSelector.tsx +++ b/src/core/components/atoms/WorkflowSelector.tsx @@ -1,7 +1,7 @@ import { v4 } from 'uuid'; import WorkflowIcon from '../../icons/components/WorkflowIcon'; import ExpandIcon from '../../icons/ui/ExpandIcon'; -import { WorkflowStage } from '../../mappings/components/WorkflowMapping'; +import { WorkflowStage } from '../../../mappings/components/WorkflowMapping'; import { useStoreActions, useStoreState } from '../../state/Hooks'; import DropdownContainer from '../containers/DropdownContainer'; diff --git a/src/components/atoms/form/AdjacentStepListItem.tsx b/src/core/components/atoms/form/AdjacentStepListItem.tsx similarity index 100% rename from src/components/atoms/form/AdjacentStepListItem.tsx rename to src/core/components/atoms/form/AdjacentStepListItem.tsx diff --git a/src/components/atoms/form/ExecutorProperty.tsx b/src/core/components/atoms/form/ExecutorProperty.tsx similarity index 98% rename from src/components/atoms/form/ExecutorProperty.tsx rename to src/core/components/atoms/form/ExecutorProperty.tsx index 82ef582..36cd539 100644 --- a/src/components/atoms/form/ExecutorProperty.tsx +++ b/src/core/components/atoms/form/ExecutorProperty.tsx @@ -31,7 +31,7 @@ export const ExecutorProperty = ({ label={label || "Executor"} as="select" name={`${name}.name`} - className="w-full" + className="w-full" {...props} dependent={(executorName: string) => { const splitName = executorName?.split('/'); diff --git a/src/components/atoms/form/InspectorProperty.tsx b/src/core/components/atoms/form/InspectorProperty.tsx similarity index 100% rename from src/components/atoms/form/InspectorProperty.tsx rename to src/core/components/atoms/form/InspectorProperty.tsx diff --git a/src/components/atoms/form/ListProperty.tsx b/src/core/components/atoms/form/ListProperty.tsx similarity index 100% rename from src/components/atoms/form/ListProperty.tsx rename to src/core/components/atoms/form/ListProperty.tsx diff --git a/src/components/atoms/form/MatrixProperty.tsx b/src/core/components/atoms/form/MatrixProperty.tsx similarity index 100% rename from src/components/atoms/form/MatrixProperty.tsx rename to src/core/components/atoms/form/MatrixProperty.tsx diff --git a/src/components/atoms/form/StepListItem.tsx b/src/core/components/atoms/form/StepListItem.tsx similarity index 100% rename from src/components/atoms/form/StepListItem.tsx rename to src/core/components/atoms/form/StepListItem.tsx diff --git a/src/core/components/atoms/nodes/JobNode.tsx b/src/core/components/atoms/nodes/JobNode.tsx new file mode 100644 index 0000000..6e03b41 --- /dev/null +++ b/src/core/components/atoms/nodes/JobNode.tsx @@ -0,0 +1,313 @@ +// import { Job, types, workflow } from '@circleci/circleci-config-sdk'; +// import { WorkflowJob } from '@circleci/circleci-config-sdk/dist/src/lib/Components/Workflow'; +// import React, { useRef } from 'react'; +// import { Handle, isNode, NodeProps, Position } from 'react-flow-renderer'; +// import JobIcon from '../../../icons/components/JobIcon'; +// import JobOnHoldIcon from '../../../icons/components/JobOnHoldIcon'; +// import DeleteItemIcon from '../../../icons/ui/DeleteItemIcon'; +// import MinusIcon from '../../../icons/ui/MinusIcon'; +// import PlusIcon from '../../../icons/ui/PlusIcon'; +// import { JobMapping } from '../../../mappings/components/JobMapping'; +// import { useStoreActions, useStoreState } from '../../../state/Hooks'; +// import { StagedJobMenuNav } from '../../menus/stage/StagedJobMenu'; +// import { flattenGenerable } from '../Definition'; + +// const formatPattern = (pattern: string) => { +// if (!pattern.startsWith('^')) { +// pattern = `^${pattern}`; +// } +// if (!pattern.endsWith('$')) { +// pattern = `${pattern}$`; +// } + +// return pattern; +// }; + +// const ConnectorIcon = (props: { filled: boolean; subtraction?: boolean }) => { +// return ( +// <> +// {props.subtraction ? ( +// +// ) : ( +// +// )} +// +// ); +// }; + +// const JobNode: React.FunctionComponent< +// NodeProps & { data: workflow.WorkflowJob } +// > = (props) => { +// const elements = useStoreState( +// (state) => +// state.definitions.workflows[state.selectedWorkflowId].value.elements, +// ); +// const dragging = useStoreState((state) => state.dragging); +// // const setWorkflowElements = useStoreActions( +// // (actions) => actions.setWorkflowElements, +// // ); +// const updateJob = useStoreActions((actions) => actions.update_jobs); +// const navigateTo = useStoreActions((actions) => actions.navigateTo); +// const setConnecting = useStoreActions((actions) => actions.setConnecting); +// const toolbox = useStoreState((state) => state.previewToolbox); +// const selectedWorkflow = useStoreState((state) => state.selectedWorkflowId); +// const altAction = useStoreState((state) => state.altAction); +// const removeWorkflowElement = useStoreActions( +// (actions) => actions.removeWorkflowElement, +// ); + +// const connecting = useStoreState((state) => state.connecting); +// const updateConnecting = useStoreActions( +// (actions) => actions.updateConnecting, +// ); + +// const updateWorkflowJob = ( +// workflowJob: workflow.WorkflowJob, +// applyToData: { +// job?: Job; +// parameters?: types.workflow.WorkflowJobParameters; +// }, +// ) => +// elements.map((element) => +// isNode(element) && element.data.job.name === workflowJob.job.name +// ? { ...element, data: { ...workflowJob, ...applyToData } } +// : element, +// ); +// const [hovering, setHovering] = React.useState({ +// handles: false, +// node: false, +// requiredBy: false, +// remove: false, +// requires: false, +// }); + +// let filtered = false; + +// const workflowJob = props.data as WorkflowJob; +// const filters = workflowJob.parameters?.filters; + +// if (filters && toolbox.filter.preview && filters[toolbox.filter.type]) { +// const jobFilter = filters[toolbox.filter.type]; +// const sample = toolbox.filter.pattern; + +// try { +// const ignoreFilter = jobFilter?.ignore?.some((pattern) => +// sample.match(formatPattern(pattern)), +// ); +// const onlyFilter = jobFilter?.only +// ? jobFilter?.only?.some((pattern) => +// sample.match(formatPattern(pattern)), +// ) +// : true; + +// filtered = ignoreFilter || !onlyFilter; +// } catch (e) { +// console.warn('Invalid regex pattern'); +// } +// } else if (toolbox.filter.type === 'tags') { +// filtered = true; +// } + +// const jobIcon = (isApproval: boolean = false) => { +// const classNameValue = 'w-5 mr-2'; +// if (isApproval) { +// return ; +// } else { +// return ; +// } +// }; + +// const viewJobProperties = () => { +// navigateTo({ +// component: StagedJobMenuNav, +// props: { +// source: workflowJob, +// values: flattenGenerable(workflowJob, true), +// id: props.id, +// overrideRoot: selectedWorkflow, +// }, +// origin: true, +// }); +// }; + +// const trackHovering = ( +// entering: string[], +// leaving: string[], +// postEnter?: () => void, +// postLeave?: () => void, +// ) => { +// return { +// onMouseEnter: () => { +// setHovering( +// entering.reduce( +// (previous, n) => ({ ...previous, [n]: true }), +// hovering, +// ), +// ); +// postEnter && postEnter(); +// }, +// onMouseLeave: () => { +// setHovering( +// leaving.reduce( +// (previous, n) => ({ ...previous, [n]: false }), +// hovering, +// ), +// ); +// postLeave && postLeave(); +// }, +// }; +// }; + +// const nodeRef = useRef(null); +// const startConnecting = +// (side: 'source' | 'target') => (e: React.DragEvent) => { +// setConnecting({ +// ref: nodeRef, +// id: { +// connectionNodeId: props.id, +// connectionHandleType: side, +// connectionHandleId: `${props.id}_${side}`, +// }, +// name: props.data.parameters?.name || props.data.name, +// }); +// e.preventDefault(); +// }; + +// return ( +//
{ +// const startType = connecting?.start?.id.connectionHandleType; +// const side = startType === 'source' ? 'target' : 'source'; +// updateConnecting({ +// ref: nodeRef, +// id: { +// connectionNodeId: props.id, +// connectionHandleType: side, +// connectionHandleId: `${props.id}_${side}`, +// }, +// name: props.data.parameters?.name || props.data.name, +// }); +// }, +// () => { +// updateConnecting(undefined); +// }, +// )} +// onDragOver={(e) => { +// if (dragging && dragging.dataType?.dragTarget === JobMapping.key) { +// e.preventDefault(); +// } +// }} +// onDrop={(e) => { +// if ( +// dragging && +// dragging.dataType?.dragTarget === JobMapping.key && +// dragging.dataType.applyToNode +// ) { +// const applyToData = dragging.dataType.applyToNode( +// dragging.data, +// props.data, +// ); + +// if (JobMapping.key in applyToData) { +// updateJob({ old: props.data.job, new: applyToData.job }); +// } + +// if ('parameters' in applyToData) { +// updateWorkflowJob(props.data, applyToData); +// } +// } +// }} +// > +// + +//
+// +// +//
+ +// + +// +// +//
+// ); +// }; + +// export default JobNode; +export default {} \ No newline at end of file diff --git a/src/components/atoms/summaries/CommandSummary.tsx b/src/core/components/atoms/summaries/CommandSummary.tsx similarity index 100% rename from src/components/atoms/summaries/CommandSummary.tsx rename to src/core/components/atoms/summaries/CommandSummary.tsx diff --git a/src/components/atoms/summaries/ExecutorSummary.tsx b/src/core/components/atoms/summaries/ExecutorSummary.tsx similarity index 100% rename from src/components/atoms/summaries/ExecutorSummary.tsx rename to src/core/components/atoms/summaries/ExecutorSummary.tsx diff --git a/src/components/atoms/summaries/JobSummary.tsx b/src/core/components/atoms/summaries/JobSummary.tsx similarity index 100% rename from src/components/atoms/summaries/JobSummary.tsx rename to src/core/components/atoms/summaries/JobSummary.tsx diff --git a/src/components/atoms/summaries/ParameterSummary.tsx b/src/core/components/atoms/summaries/ParameterSummary.tsx similarity index 100% rename from src/components/atoms/summaries/ParameterSummary.tsx rename to src/core/components/atoms/summaries/ParameterSummary.tsx diff --git a/src/components/containers/BreadCrumbs.tsx b/src/core/components/containers/BreadCrumbs.tsx similarity index 100% rename from src/components/containers/BreadCrumbs.tsx rename to src/core/components/containers/BreadCrumbs.tsx diff --git a/src/components/containers/CollapsibleList.tsx b/src/core/components/containers/CollapsibleList.tsx similarity index 100% rename from src/components/containers/CollapsibleList.tsx rename to src/core/components/containers/CollapsibleList.tsx diff --git a/src/components/containers/ConfirmationModal.tsx b/src/core/components/containers/ConfirmationModal.tsx similarity index 98% rename from src/components/containers/ConfirmationModal.tsx rename to src/core/components/containers/ConfirmationModal.tsx index 5a98392..cbcd7e7 100644 --- a/src/components/containers/ConfirmationModal.tsx +++ b/src/core/components/containers/ConfirmationModal.tsx @@ -33,7 +33,7 @@ const confirmDialogue: ConfirmationDialogueTemplates = { }, delete: { header: `Delete ${placeholder} ${placeholder}?`, - body: `When you delete the ${placeholder} named ${placeholder}, it will be removed from each component that uses it. + body: `When you delete the ${placeholder} named ${placeholder}, it will be removed from each component that uses it. This definition has %s dependent components.`, button: 'Delete', buttonVariant: 'dangerous', @@ -57,7 +57,7 @@ const ConfirmationModal = () => { }, [updateConfirmation]); const handleUserKeyPress = useCallback( - (event) => { + (event: any) => { const { key } = event; if (key === 'Escape') { closeHandler(); diff --git a/src/components/containers/DefinitionsContainer.tsx b/src/core/components/containers/DefinitionsContainer.tsx similarity index 98% rename from src/components/containers/DefinitionsContainer.tsx rename to src/core/components/containers/DefinitionsContainer.tsx index 8aaf730..cc6cb8f 100644 --- a/src/components/containers/DefinitionsContainer.tsx +++ b/src/core/components/containers/DefinitionsContainer.tsx @@ -1,5 +1,5 @@ import { useRef } from 'react'; -import InspectableMapping from '../../mappings/InspectableMapping'; +import InspectableMapping from '../../../mappings/InspectableMapping'; import { mapDefinitions, NamedGenerable } from '../../state/DefinitionStore'; import { useStoreActions, useStoreState } from '../../state/Hooks'; import AddButton from '../atoms/AddButton'; diff --git a/src/components/containers/DropdownContainer.tsx b/src/core/components/containers/DropdownContainer.tsx similarity index 100% rename from src/components/containers/DropdownContainer.tsx rename to src/core/components/containers/DropdownContainer.tsx diff --git a/src/components/containers/ExternalLinks.tsx b/src/core/components/containers/ExternalLinks.tsx similarity index 93% rename from src/components/containers/ExternalLinks.tsx rename to src/core/components/containers/ExternalLinks.tsx index 1cdea3a..18c01b3 100644 --- a/src/components/containers/ExternalLinks.tsx +++ b/src/core/components/containers/ExternalLinks.tsx @@ -1,5 +1,5 @@ import MoreIcon from '../../icons/ui/MoreIcon'; -import DropdownContainer from '../containers/DropdownContainer'; +import DropdownContainer from './DropdownContainer'; export const ExternalLinks = () => { const links = [ diff --git a/src/components/containers/FilterPreviewContainer.tsx b/src/core/components/containers/FilterPreviewContainer.tsx similarity index 100% rename from src/components/containers/FilterPreviewContainer.tsx rename to src/core/components/containers/FilterPreviewContainer.tsx diff --git a/src/components/containers/GuideContainer.tsx b/src/core/components/containers/GuideContainer.tsx similarity index 100% rename from src/components/containers/GuideContainer.tsx rename to src/core/components/containers/GuideContainer.tsx diff --git a/src/components/containers/HeaderMenu.tsx b/src/core/components/containers/HeaderMenu.tsx similarity index 50% rename from src/components/containers/HeaderMenu.tsx rename to src/core/components/containers/HeaderMenu.tsx index 49be178..efdee59 100644 --- a/src/components/containers/HeaderMenu.tsx +++ b/src/core/components/containers/HeaderMenu.tsx @@ -1,10 +1,12 @@ +import { FlowTools } from '../../../flow/components/FlowTools'; +import { Button } from '../atoms/Button'; import { ExternalLinks } from './ExternalLinks'; import PreviewToolbox from './PreviewToolbox'; export default function HeaderMenu() { return ( -
- +
+
); diff --git a/src/components/containers/KBarList.tsx b/src/core/components/containers/KBarList.tsx similarity index 100% rename from src/components/containers/KBarList.tsx rename to src/core/components/containers/KBarList.tsx diff --git a/src/components/containers/OrbImportsContainer.tsx b/src/core/components/containers/OrbImportsContainer.tsx similarity index 99% rename from src/components/containers/OrbImportsContainer.tsx rename to src/core/components/containers/OrbImportsContainer.tsx index ef04f34..d9b0173 100644 --- a/src/components/containers/OrbImportsContainer.tsx +++ b/src/core/components/containers/OrbImportsContainer.tsx @@ -21,11 +21,11 @@ const OrbImportsContainer = (props: OrbImportProps) => { const ref = useRef(null); const orbDefinitions = useMemo( () => - + mapDefinitions(items, (orb) => { return ( ) + }) + }, [mode, updateMode ]) + + return (
+ {Buttons} + +
) +} + +export { FlowTools } diff --git a/src/flow/components/GhostNode.tsx b/src/flow/components/GhostNode.tsx new file mode 100644 index 0000000..eb201ca --- /dev/null +++ b/src/flow/components/GhostNode.tsx @@ -0,0 +1,48 @@ +import { useEffect, useMemo } from 'react'; +import { Handle, NodeProps, Position, ReactFlowState, useStore } from 'reactflow'; +import { useStoreState } from '../../core/state/Hooks'; +import { FlowMode } from '../state/FlowStore'; + +const connectionNodeIdSelector = (state: ReactFlowState) => state.connectionNodeId; + +export default function GhostNode({ id, selected }: NodeProps) { + const connectionNodeId = useStore(connectionNodeIdSelector); + const mode = useStoreState((state) => state.mode); + + const isTarget = connectionNodeId && connectionNodeId !== id; + + const label = 'Ghost'; + const nodeBase = "p-2 pr-3 text-sm bg-white node flex flex-row text-black rounded-md border cursor-pointer" + const outline = selected ? "border-circle-blue" : " border-circle-gray-300" + + const Handles = useMemo(() => { + const connectMode = mode == FlowMode.CONNECT; + const handleBase = `${ connectMode ? '!w-full !h-full' : '!w-0 h-0'} !rounded opacity-50` + const notConnecting = connectionNodeId == null + + return ( + <> + + + + ) + + }, [mode, connectionNodeId]) + + return ( +
{ console.log('hehujasj') }}> + {label} + {Handles} +
+ ); +} diff --git a/src/flow/components/JobNode.tsx b/src/flow/components/JobNode.tsx new file mode 100644 index 0000000..6d46276 --- /dev/null +++ b/src/flow/components/JobNode.tsx @@ -0,0 +1,52 @@ + +import { useEffect, useMemo } from 'react'; +import {workflow} from '@circleci/circleci-config-sdk'; +import { Handle, NodeProps, Position, ReactFlowState, useStore } from 'reactflow'; +import JobIcon from '../../core/icons/components/JobIcon'; +import { useStoreState } from '../../core/state/Hooks'; +import { FlowMode } from '../state/FlowStore'; + +const connectionNodeIdSelector = (state: ReactFlowState) => state.connectionNodeId; + +export default function JobNode({ id, selected, data }: NodeProps) { + const connectionNodeId = useStore(connectionNodeIdSelector); + const mode = useStoreState((state) => state.mode); + const workflowJob = data as workflow.WorkflowJob; + const isTarget = connectionNodeId && connectionNodeId !== id; + + const label = useMemo(() => workflowJob.parameters?.name || workflowJob.name, [data]); + const nodeBase = "p-2 pr-3 text-sm bg-white node flex flex-row text-black rounded-md border cursor-pointer" + const outline = selected ? "border-circle-blue" : " border-circle-gray-300" + + const Handles = useMemo(() => { + const connectMode = mode == FlowMode.CONNECT; + const handleBase = `${ connectMode ? '!w-full !h-full' : '!w-0 h-0'} !rounded opacity-0` + const notConnecting = connectionNodeId == null + + return ( + <> + + + + ) + + }, [mode, connectionNodeId]) + + return ( +
+ + {label} + {Handles} +
+ ); +} diff --git a/src/flow/hooks/useFlowDnD.ts b/src/flow/hooks/useFlowDnD.ts new file mode 100644 index 0000000..0aa12ed --- /dev/null +++ b/src/flow/hooks/useFlowDnD.ts @@ -0,0 +1,71 @@ +import { useCallback, useState } from "react"; +import { applyNodeChanges, useReactFlow, XYPosition } from "reactflow"; +import { v4 } from "uuid"; +import { useStoreActions, useStoreState } from "../../core/state/Hooks"; +import InspectableMapping from "../../mappings/InspectableMapping"; +import { NodeMapping } from "../../mappings/NodeMapping"; +import { FlowActionsModel, FlowStoreModel } from "../state/FlowStore"; +import { useFlowOffset } from "./useFlowOffset"; + +// Alternative to control a node during drag and drop cycle +// If abstracted a layer higher, useDragAndDrop may come in handy later +export function useFlowDragAndDrop(offset?: DOMRect) { + const { addNodes, getNodes } = useReactFlow(); + const dragging = useStoreState((state) => state.dragging); + const cancel = useCallback((e: React.DragEvent) => { e.preventDefault() }, []); + const onDrop = useFlowOffset((position, droppedItem) => { + const mapping = dragging?.dataMapping as unknown as NodeMapping & InspectableMapping; + + if (dragging == undefined || !mapping?.node) { + return; + } + + const nodes = getNodes(); + const data = mapping.node.transform(dragging.data, nodes); + const id = mapping.node.getId(data) + + addNodes({  id, position, type: mapping.node.key, data}); + }, offset, [dragging]); + + return { onDragEnter: cancel, onDragOver: cancel, onDrop } +} + +// Alternative to control a node during drag and drop cycle +// export function useFlowDragAndDrop(offset?: DOMRect) { +// const { addNodes, setNodes, deleteElements, getNodes } = useReactFlow(); +// const [lastPos, setPos] = useState(); + +// // Upon entering the flow, create the drop ghost +// const onDragEnter = useFlowOffset((position, data) => { +// addNodes({  id: 'ghost', position, type: 'ghost',data: ''}); +// }, offset); + +// // While dragging, move the ghost +// const onDragOver = useFlowOffset((position, data) => { +// if (lastPos) { +// const dx = lastPos.x - position.x; +// const dy = lastPos.y - position.y; +// const dist = Math.abs(dx * dy); + +// if (dist > 150) { +// console.log(dist) +// const nodes = getNodes(); +// const changes = applyNodeChanges([ {  id: 'ghost', type: 'position', position, dragging: true } ], nodes); +// setNodes(changes); +// setPos(position); +// } +// } else { +// setPos(position); +// } +// }, offset, [lastPos]); +// // Upon drop and leave, remove the ghost` +// const onDragLeave = useFlowOffset((pos, data) => { +// deleteElements({ nodes: [{ id: 'ghost' }]}) +// }, offset); +// const onDrop = useFlowOffset((position, data) => { +// addNodes({  id: 'ghost', position, type: 'job', data}); +// }, offset); + + +// return [onDragEnter, onDragOver, onDragLeave, onDrop] +// } diff --git a/src/flow/hooks/useFlowOffset.ts b/src/flow/hooks/useFlowOffset.ts new file mode 100644 index 0000000..5cc8250 --- /dev/null +++ b/src/flow/hooks/useFlowOffset.ts @@ -0,0 +1,18 @@ +import { useCallback } from "react"; +import { useReactFlow, XYPosition } from "reactflow"; +import { useStoreState } from "../../core/state/Hooks"; +import { DataModel } from "../../core/state/Store"; + +type FlowEvent = (position: XYPosition, dragging?: DataModel) => void; + +export function useFlowOffset(func: FlowEvent, offset?: DOMRect, deps?: any[]) { + const { project } = useReactFlow(); + + return useCallback((e: React.MouseEvent) => { + const eventPos = project({ x: e.clientX, y: e.clientY - (offset?.y || 0)}); + + func(eventPos); + + e.preventDefault(); + }, deps ? [project, ...deps] : [project]); +} diff --git a/src/flow/state/FlowStore.tsx b/src/flow/state/FlowStore.tsx new file mode 100644 index 0000000..342ecb7 --- /dev/null +++ b/src/flow/state/FlowStore.tsx @@ -0,0 +1,53 @@ +import { Action, action } from "easy-peasy"; +import { DataModel } from "../../core/state/Store"; + +export enum FlowMode { + SELECT, + CONNECT, + DELETE, + MOVE, +} + + +export type FlowStoreModel = { + mode: FlowMode; + /** Data being dragged from definition */ + dragging?: DataModel; +} + +export type FlowActionsModel = { + setMode: Action; + setDragging: Action; +} + +export const FlowActions: FlowActionsModel = { + setMode: action((state, mode) => { + state.mode = mode; + }), + setDragging: action((state, payload) => { + state.dragging = payload; + }), +} + +/** + * Notify flow that a job has been dragged to the canvas + */ +function droppedJob() { + +} + +/** + * Update flow to reflect that job status + */ +function updatedJob() { + +} + +/** + * Store to support data transfer between React Flow and DefinitionStore + */ + const FlowStore: FlowStoreModel = { + mode: FlowMode.SELECT, +}; + +export { FlowStore }; diff --git a/src/flow/util/FlowUtil.tsx b/src/flow/util/FlowUtil.tsx new file mode 100644 index 0000000..1470c0c --- /dev/null +++ b/src/flow/util/FlowUtil.tsx @@ -0,0 +1,3 @@ +export function buildWorkflow() { + +} \ No newline at end of file diff --git a/src/main.tsx b/src/main.tsx index 611e848..9bf0f7b 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -2,6 +2,7 @@ import React from 'react' import ReactDOM from 'react-dom/client' import App from './App' import './index.css' +import 'reactflow/dist/style.css'; ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( diff --git a/src/mappings/GenerableMapping.tsx b/src/mappings/GenerableMapping.tsx index a100f65..2746462 100644 --- a/src/mappings/GenerableMapping.tsx +++ b/src/mappings/GenerableMapping.tsx @@ -11,8 +11,8 @@ import { DefinitionType, MappingSubscriptions, NamedGenerable, -} from '../state/DefinitionStore'; -import Store, { StoreActions, StoreModel, UpdateType } from '../state/Store'; +} from '../core/state/DefinitionStore'; +import Store, { StoreActionsModel, StoreModel, UpdateType } from '../core/state/Store'; import { CommandMapping } from './components/CommandMapping'; import { ExecutorMapping } from './components/ExecutorMapping'; import { JobMapping } from './components/JobMapping'; @@ -149,7 +149,7 @@ export default interface GenerableMapping< * Store action resolver to watch other actions for changes. */ externalUpdates?: ( - actions: TargetResolver, + actions: TargetResolver, ) => Target | Target[]; resolveObservables?: ( generable: GenerableType, diff --git a/src/mappings/InspectableMapping.tsx b/src/mappings/InspectableMapping.tsx index bcea9b9..862932f 100644 --- a/src/mappings/InspectableMapping.tsx +++ b/src/mappings/InspectableMapping.tsx @@ -1,13 +1,13 @@ import { Generable } from '@circleci/circleci-config-sdk/dist/src/lib/Components'; import { FormikValues } from 'formik'; -import { Elements, NodeProps } from 'react-flow-renderer'; -import { IconProps } from '../icons/IconProps'; + import { Edge, NodeProps } from 'reactflow'; +import { IconProps } from '../core/icons/IconProps'; import { DefinitionsModel, DefinitionSubscriptions, NamedGenerable, -} from '../state/DefinitionStore'; -import { NavigationComponent } from '../state/Store'; +} from '../core/state/DefinitionStore'; +import { NavigationComponent } from '../core/state/Store'; import { WorkflowStage } from './components/WorkflowMapping'; import GenerableMapping, { SubTypeMapping } from './GenerableMapping'; export interface GenerableInfoType { @@ -61,16 +61,6 @@ export default interface InspectableMapping< data: GenerableType, nodeData: ConfigNodeProps, ) => { [K in KeysOfUnion]?: any }; - node?: { - /** Transform definition data */ - transform?: ( - data: GenerableType, - extras?: any, - stage?: Elements, - ) => ConfigNodeProps; - /** @todo: Add store functionality to better support updating definitions and their corresponding workflow nodes */ - component: React.FunctionComponent<{ data: ConfigNodeProps } & NodeProps>; - }; subtypes?: { component: NavigationComponent; getSubtype: (data: GenerableType) => string | undefined; diff --git a/src/mappings/NodeMapping.tsx b/src/mappings/NodeMapping.tsx new file mode 100644 index 0000000..8272837 --- /dev/null +++ b/src/mappings/NodeMapping.tsx @@ -0,0 +1,22 @@ +import { Node, NodeProps } from "reactflow"; +import { NamedGenerable } from "../core/state/DefinitionStore"; + +export interface NodeMapping +{ + node: { + /** + * generated id from managed type + */ + getId: (data: ManagedType) => string; + key: string; + /** Transform definition data */ + transform: ( + data: InType, + nodes: Node[], + extras?: any, + ) => ManagedType; + /** @todo: Add store functionality to better support updating definitions and their corresponding workflow nodes */ + component: React.FunctionComponent<{ data: ManagedType } & NodeProps>; + }; +} diff --git a/src/mappings/components/CommandMapping.tsx b/src/mappings/components/CommandMapping.tsx index ffceda4..5133513 100644 --- a/src/mappings/components/CommandMapping.tsx +++ b/src/mappings/components/CommandMapping.tsx @@ -1,13 +1,13 @@ import { parseReusableCommand } from '@circleci/circleci-config-parser'; import { reusable } from '@circleci/circleci-config-sdk'; -import CommandSummary from '../../components/atoms/summaries/CommandSummary'; -import CommandInspector from '../../components/containers/inspector/CommandInspector'; -import { componentParametersSubtypes } from '../../components/containers/inspector/subtypes/ParameterSubtypes'; -import CommandIcon from '../../icons/components/CommandIcon'; +import CommandSummary from '../../core/components/atoms/summaries/CommandSummary'; +import CommandInspector from '../../core/components/containers/inspector/CommandInspector'; +import { componentParametersSubtypes } from '../../core/components/containers/inspector/subtypes/ParameterSubtypes'; +import CommandIcon from '../../core/icons/components/CommandIcon'; import { DefinitionAction, definitionsAsArray, -} from '../../state/DefinitionStore'; +} from '../../core/state/DefinitionStore'; import InspectableMapping from '../InspectableMapping'; export const CommandMapping: InspectableMapping = { diff --git a/src/mappings/components/ExecutorMapping.tsx b/src/mappings/components/ExecutorMapping.tsx index 23f8677..808f62b 100644 --- a/src/mappings/components/ExecutorMapping.tsx +++ b/src/mappings/components/ExecutorMapping.tsx @@ -5,13 +5,13 @@ import { workflow, } from '@circleci/circleci-config-sdk'; import { parseReusableExecutor } from '@circleci/circleci-config-parser'; -import ExecutorSummary from '../../components/atoms/summaries/ExecutorSummary'; -import ExecutorInspector from '../../components/containers/inspector/ExecutorInspector'; -import { executorSubtypes } from '../../components/containers/inspector/subtypes/ExecutorSubtypes'; -import { componentParametersSubtypes } from '../../components/containers/inspector/subtypes/ParameterSubtypes'; -import ExecutorTypePageNav from '../../components/menus/definitions/subtypes/ExecutorTypePage'; -import ExecutorIcon from '../../icons/components/ExecutorIcon'; -import { DefinitionAction } from '../../state/DefinitionStore'; +import ExecutorSummary from '../../core/components/atoms/summaries/ExecutorSummary'; +import ExecutorInspector from '../../core/components/containers/inspector/ExecutorInspector'; +import { executorSubtypes } from '../../core/components/containers/inspector/subtypes/ExecutorSubtypes'; +import { componentParametersSubtypes } from '../../core/components/containers/inspector/subtypes/ParameterSubtypes'; +import ExecutorTypePageNav from '../../core/components/menus/definitions/subtypes/ExecutorTypePage'; +import ExecutorIcon from '../../core/icons/components/ExecutorIcon'; +import { DefinitionAction } from '../../core/state/DefinitionStore'; import InspectableMapping from '../InspectableMapping'; import { JobMapping } from './JobMapping'; diff --git a/src/mappings/components/JobMapping.tsx b/src/mappings/components/JobMapping.tsx index 66c04bf..9fed511 100644 --- a/src/mappings/components/JobMapping.tsx +++ b/src/mappings/components/JobMapping.tsx @@ -1,18 +1,19 @@ import { parseJob } from '@circleci/circleci-config-parser'; import { Job, orb, reusable, workflow } from '@circleci/circleci-config-sdk'; -import JobNode from '../../components/atoms/nodes/JobNode'; -import JobSummary from '../../components/atoms/summaries/JobSummary'; -import JobInspector from '../../components/containers/inspector/JobInspector'; -import { componentParametersSubtypes } from '../../components/containers/inspector/subtypes/ParameterSubtypes'; -import JobIcon from '../../icons/components/JobIcon'; +import JobSummary from '../../core/components/atoms/summaries/JobSummary'; +import JobInspector from '../../core/components/containers/inspector/JobInspector'; +import { componentParametersSubtypes } from '../../core/components/containers/inspector/subtypes/ParameterSubtypes'; +import JobIcon from '../../core/icons/components/JobIcon'; import { DefinitionAction, definitionsAsArray, -} from '../../state/DefinitionStore'; +} from '../../core/state/DefinitionStore'; +import JobNode from '../../flow/components/JobNode'; import InspectableMapping from '../InspectableMapping'; +import { NodeMapping } from '../NodeMapping'; import { UNDEFINED_EXECUTOR } from './ExecutorMapping'; -export const JobMapping: InspectableMapping = { +export const JobMapping: InspectableMapping & NodeMapping = { key: 'jobs', name: { singular: 'Job', @@ -102,15 +103,18 @@ export const JobMapping: InspectableMapping = { }, dragTarget: 'workflow', node: { - transform: (data, params, elements) => { + getId: (data) => { + return data.parameters?.name || data.name; + }, + transform: (data, nodes, params) => { const stagedNames = new Set( - elements - ?.filter((element) => element.type === 'jobs') - .map((job) => job.data.parameters?.name || job.data.name), + nodes + ?.filter((element) => element.type === 'workflow_job') + .map((node) => node.data.parameters?.name || node.data.name), ); let name = data.name; - if (stagedNames && stagedNames.has(name)) { + if (stagedNames.has(name)) { for (let i = 2; true; i++) { const newName = `${name} (${i})`; @@ -130,6 +134,7 @@ export const JobMapping: InspectableMapping = { return new workflow.WorkflowJob(data, newParams); }, component: JobNode, + key: 'workflow_job' }, components: { icon: JobIcon, diff --git a/src/mappings/components/ParameterMapping.tsx b/src/mappings/components/ParameterMapping.tsx index aff6e55..aafa2a7 100644 --- a/src/mappings/components/ParameterMapping.tsx +++ b/src/mappings/components/ParameterMapping.tsx @@ -2,12 +2,12 @@ import { parseParameter } from '@circleci/circleci-config-parser'; import { parameters } from '@circleci/circleci-config-sdk'; import { CustomParameter } from '@circleci/circleci-config-sdk/dist/src/lib/Components/Parameters'; import { PipelineParameterLiteral } from '@circleci/circleci-config-sdk/dist/src/lib/Components/Parameters/types/CustomParameterLiterals.types'; -import ParameterSummary from '../../components/atoms/summaries/ParameterSummary'; -import ParameterInspector from '../../components/containers/inspector/ParameterInspector'; -import { parameterSubtypes } from '../../components/containers/inspector/subtypes/ParameterSubtypes'; -import ParameterTypePageNav from '../../components/menus/definitions/subtypes/ParameterTypePage'; -import ParameterIcon from '../../icons/components/ParameterIcon'; -import { DefinitionAction } from '../../state/DefinitionStore'; +import ParameterSummary from '../../core/components/atoms/summaries/ParameterSummary'; +import ParameterInspector from '../../core/components/containers/inspector/ParameterInspector'; +import { parameterSubtypes } from '../../core/components/containers/inspector/subtypes/ParameterSubtypes'; +import ParameterTypePageNav from '../../core/components/menus/definitions/subtypes/ParameterTypePage'; +import ParameterIcon from '../../core/icons/components/ParameterIcon'; +import { DefinitionAction } from '../../core/state/DefinitionStore'; import InspectableMapping from '../InspectableMapping'; export const ParameterMapping: InspectableMapping< diff --git a/src/mappings/components/WorkflowMapping.tsx b/src/mappings/components/WorkflowMapping.tsx index f8c27d5..922518f 100644 --- a/src/mappings/components/WorkflowMapping.tsx +++ b/src/mappings/components/WorkflowMapping.tsx @@ -1,13 +1,14 @@ import { Job, workflow, Workflow } from '@circleci/circleci-config-sdk'; import { When } from '@circleci/circleci-config-sdk/dist/src/lib/Components/Logic'; import { WorkflowJobAbstract } from '@circleci/circleci-config-sdk/dist/src/lib/Components/Workflow'; -import { FlowElement } from 'react-flow-renderer'; -import { Definition, DefinitionAction } from '../../state/DefinitionStore'; -import { StoreModel } from '../../state/Store'; +import { Edge, Node } from 'reactflow'; +import { Definition, DefinitionAction } from '../../core/state/DefinitionStore'; +import { StoreModel } from '../../core/state/Store'; import GenerableMapping from '../GenerableMapping'; +export type WorkflowElements = { nodes: Node[], edges: Edge[]}; export class WorkflowStage extends Workflow { - elements: FlowElement[]; + elements: WorkflowElements; id: string; constructor( @@ -15,7 +16,7 @@ export class WorkflowStage extends Workflow { id: string, jobs?: Array, when?: When, - elements: FlowElement[] = [], + elements: WorkflowElements = { nodes: [], edges: []}, ) { super(name, jobs, when); @@ -79,7 +80,7 @@ export const WorkflowMapping: GenerableMapping = { return job; }); - const elements = w.elements.map((node) => { + const nodes = w.elements.nodes.map((node) => { return node.type === 'jobs' && node.data.job.name === prev.name ? { ...node, @@ -88,7 +89,7 @@ export const WorkflowMapping: GenerableMapping = { : node; }); - return new WorkflowStage(w.name, w.id, jobs, w.when, elements); + return new WorkflowStage(w.name, w.id, jobs, w.when, { nodes: nodes, edges: w.elements.edges}); }, }, resolveObservables: (w) => ({ diff --git a/vite.config.ts b/vite.config.ts index b1ff680..072da14 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,7 +1,5 @@ import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' -import EnvironmentPlugin from 'vite-plugin-environment' - // https://vitejs.dev/config/ export default defineConfig({ diff --git a/yarn.lock b/yarn.lock index d3ca4f6..878cfb7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,11 +2,6 @@ # yarn lockfile v1 -"@adobe/css-tools@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.0.1.tgz#b38b444ad3aa5fedbb15f2f746dcd934226a12dd" - integrity sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g== - "@algolia/cache-browser-local-storage@4.14.2": version "4.14.2" resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz#d5b1b90130ca87c6321de876e167df9ec6524936" @@ -137,7 +132,7 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": +"@babel/code-frame@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== @@ -150,32 +145,32 @@ integrity sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ== "@babel/core@^7.19.6": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.6.tgz#7122ae4f5c5a37c0946c066149abd8e75f81540f" - integrity sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg== + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.2.tgz#8dc9b1620a673f92d3624bd926dc49a52cf25b92" + integrity sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.6" - "@babel/helper-compilation-targets" "^7.19.3" - "@babel/helper-module-transforms" "^7.19.6" - "@babel/helpers" "^7.19.4" - "@babel/parser" "^7.19.6" + "@babel/generator" "^7.20.2" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-module-transforms" "^7.20.2" + "@babel/helpers" "^7.20.1" + "@babel/parser" "^7.20.2" "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.6" - "@babel/types" "^7.19.4" + "@babel/traverse" "^7.20.1" + "@babel/types" "^7.20.2" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.19.6", "@babel/generator@^7.20.1": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.1.tgz#ef32ecd426222624cbd94871a7024639cf61a9fa" - integrity sha512-u1dMdBUmA7Z0rBB97xh8pIhviK7oItYOkjbsCxTWMknyvbQRBwX7/gn4JXurRdirWMFh+ZtYARqkA6ydogVZpg== +"@babel/generator@^7.20.1", "@babel/generator@^7.20.2": + version "7.20.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.4.tgz#4d9f8f0c30be75fd90a0562099a26e5839602ab8" + integrity sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA== dependencies: - "@babel/types" "^7.20.0" + "@babel/types" "^7.20.2" "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" @@ -186,7 +181,7 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-compilation-targets@^7.19.3": +"@babel/helper-compilation-targets@^7.20.0": version "7.20.0" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz#6bf5374d424e1b3922822f1d9bdaa43b1a139d0a" integrity sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ== @@ -223,31 +218,31 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.19.6": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz#6c52cc3ac63b70952d33ee987cbee1c9368b533f" - integrity sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw== +"@babel/helper-module-transforms@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz#ac53da669501edd37e658602a21ba14c08748712" + integrity sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA== dependencies: "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.19.4" + "@babel/helper-simple-access" "^7.20.2" "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-validator-identifier" "^7.19.1" "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.6" - "@babel/types" "^7.19.4" + "@babel/traverse" "^7.20.1" + "@babel/types" "^7.20.2" "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf" - integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== -"@babel/helper-simple-access@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz#be553f4951ac6352df2567f7daa19a0ee15668e7" - integrity sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg== +"@babel/helper-simple-access@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== dependencies: - "@babel/types" "^7.19.4" + "@babel/types" "^7.20.2" "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" @@ -271,7 +266,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== -"@babel/helpers@^7.19.4": +"@babel/helpers@^7.20.1": version "7.20.1" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.1.tgz#2ab7a0fcb0a03b5bf76629196ed63c2d7311f4c9" integrity sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg== @@ -289,10 +284,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.18.10", "@babel/parser@^7.19.6", "@babel/parser@^7.20.1": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.1.tgz#3e045a92f7b4623cafc2425eddcb8cf2e54f9cc5" - integrity sha512-hp0AYxaZJhxULfM1zyp7Wgr+pSUKBcP3M+PHnSzWGdXOzg/kHWIgiUWARvubhUKGOEw3xqY4x+lyZ9ytBVcELw== +"@babel/parser@^7.18.10", "@babel/parser@^7.20.1", "@babel/parser@^7.20.2": + version "7.20.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.3.tgz#5358cf62e380cf69efcb87a7bb922ff88bfac6e2" + integrity sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg== "@babel/plugin-syntax-jsx@^7.18.6": version "7.18.6" @@ -333,7 +328,7 @@ "@babel/plugin-syntax-jsx" "^7.18.6" "@babel/types" "^7.19.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.3", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.2", "@babel/runtime@^7.6.2", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.9", "@babel/runtime@^7.6.2", "@babel/runtime@^7.9.2": version "7.20.1" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9" integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg== @@ -349,7 +344,7 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.19.6", "@babel/traverse@^7.20.1": +"@babel/traverse@^7.20.1": version "7.20.1" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.1.tgz#9b15ccbf882f6d107eeeecf263fbcdd208777ec8" integrity sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA== @@ -365,10 +360,10 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.19.4", "@babel/types@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.0.tgz#52c94cf8a7e24e89d2a194c25c35b17a64871479" - integrity sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg== +"@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.2.tgz#67ac09266606190f496322dbaff360fdaa5e7842" + integrity sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog== dependencies: "@babel/helper-string-parser" "^7.19.4" "@babel/helper-validator-identifier" "^7.19.1" @@ -427,15 +422,15 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@esbuild/android-arm@0.15.12": - version "0.15.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz#e548b10a5e55b9e10537a049ebf0bc72c453b769" - integrity sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA== +"@esbuild/android-arm@0.15.13": + version "0.15.13" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.13.tgz#ce11237a13ee76d5eae3908e47ba4ddd380af86a" + integrity sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw== -"@esbuild/linux-loong64@0.15.12": - version "0.15.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz#475b33a2631a3d8ca8aa95ee127f9a61d95bf9c1" - integrity sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw== +"@esbuild/linux-loong64@0.15.13": + version "0.15.13" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.13.tgz#64e8825bf0ce769dac94ee39d92ebe6272020dfc" + integrity sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag== "@formatjs/ecma402-abstract@1.13.0": version "1.13.0" @@ -517,32 +512,6 @@ dependencies: "@babel/runtime" "^7.6.2" -"@jest/expect-utils@^29.2.2": - version "29.2.2" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.2.2.tgz#460a5b5a3caf84d4feb2668677393dd66ff98665" - integrity sha512-vwnVmrVhTmGgQzyvcpze08br91OL61t9O0lJMDyb6Y/D8EKQ9V7rGUb/p7PDt0GPzK0zFYqXWFo4EO2legXmkg== - dependencies: - jest-get-type "^29.2.0" - -"@jest/schemas@^29.0.0": - version "29.0.0" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" - integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== - dependencies: - "@sinclair/typebox" "^0.24.1" - -"@jest/types@^29.2.1": - version "29.2.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.2.1.tgz#ec9c683094d4eb754e41e2119d8bdaef01cf6da0" - integrity sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw== - dependencies: - "@jest/schemas" "^29.0.0" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" @@ -1596,6 +1565,54 @@ "@react-types/overlays" "^3.6.4" "@react-types/shared" "^3.15.0" +"@reactflow/background@11.0.4": + version "11.0.4" + resolved "https://registry.yarnpkg.com/@reactflow/background/-/background-11.0.4.tgz#72fabec861d8fb913cdc35e6eccdbe840be694a5" + integrity sha512-AACdU1B63BJCL0mO6I2ceehkv0ijKxzhh4UMc0JQs8sSgbAQjvnMSt/VcjIJ1e8V4o/wjPejj3xWm2Jxsv0Qhw== + dependencies: + "@babel/runtime" "^7.18.9" + "@reactflow/core" "11.2.0" + classcat "^5.0.3" + zustand "^4.1.1" + +"@reactflow/controls@11.0.4": + version "11.0.4" + resolved "https://registry.yarnpkg.com/@reactflow/controls/-/controls-11.0.4.tgz#12ceae0023de96ab1371f2184f5bf8574dbf640f" + integrity sha512-NLycgcW+hS2CcZiUqvTOXkug+UMmq7dzORxdzxosvBI0b1La+xNXi+UxVMlMAYrNZH3lm+SWyftksXQ/r010bQ== + dependencies: + "@babel/runtime" "^7.18.9" + "@reactflow/core" "11.2.0" + classcat "^5.0.3" + +"@reactflow/core@11.2.0": + version "11.2.0" + resolved "https://registry.yarnpkg.com/@reactflow/core/-/core-11.2.0.tgz#9cc1c3a23796905070baa77052d7622dc233b59c" + integrity sha512-8rYp9bQON7MMtHZ3opU37Bfp4NaGGrJFeu+tcokz9bQZcGo43oCKl8xkURn8HlC8FnpVwpQ7e3DBdsOtnEbaEg== + dependencies: + "@types/d3" "^7.4.0" + "@types/d3-drag" "^3.0.1" + "@types/d3-selection" "^3.0.3" + "@types/d3-zoom" "^3.0.1" + classcat "^5.0.3" + d3-drag "^3.0.0" + d3-selection "^3.0.0" + d3-zoom "^3.0.0" + zustand "^4.1.1" + +"@reactflow/minimap@11.1.0": + version "11.1.0" + resolved "https://registry.yarnpkg.com/@reactflow/minimap/-/minimap-11.1.0.tgz#ee5770a3dab62e099d8330a998f71372cacab973" + integrity sha512-igquYRc9QdV5hu7KZiBjQgynvy/oMH5+i5eDvI0aLSkLC68NVnHFFpEZlk4bSVav+nGeWbHOZK/tryd3Sa39TQ== + dependencies: + "@babel/runtime" "^7.18.9" + "@reactflow/core" "11.2.0" + "@types/d3-selection" "^3.0.3" + "@types/d3-zoom" "^3.0.1" + classcat "^5.0.3" + d3-selection "^3.0.0" + d3-zoom "^3.0.0" + zustand "^4.1.1" + "@reduxjs/toolkit@^1.6.2": version "1.8.6" resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.8.6.tgz#147fb7957befcdb75bc9c1230db63628e30e4332" @@ -1623,56 +1640,6 @@ resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== -"@sinclair/typebox@^0.24.1": - version "0.24.51" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" - integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== - -"@testing-library/dom@^8.0.0": - version "8.19.0" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.19.0.tgz#bd3f83c217ebac16694329e413d9ad5fdcfd785f" - integrity sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^4.2.0" - aria-query "^5.0.0" - chalk "^4.1.0" - dom-accessibility-api "^0.5.9" - lz-string "^1.4.4" - pretty-format "^27.0.2" - -"@testing-library/jest-dom@^5.11.4": - version "5.16.5" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e" - integrity sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA== - dependencies: - "@adobe/css-tools" "^4.0.1" - "@babel/runtime" "^7.9.2" - "@types/testing-library__jest-dom" "^5.9.1" - aria-query "^5.0.0" - chalk "^3.0.0" - css.escape "^1.5.1" - dom-accessibility-api "^0.5.6" - lodash "^4.17.15" - redent "^3.0.0" - -"@testing-library/react@^12.1.2": - version "12.1.5" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-12.1.5.tgz#bb248f72f02a5ac9d949dea07279095fa577963b" - integrity sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg== - dependencies: - "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^8.0.0" - "@types/react-dom" "<18.0.0" - -"@testing-library/user-event@^13.5.0": - version "13.5.0" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-13.5.0.tgz#69d77007f1e124d55314a2b73fd204b333b13295" - integrity sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg== - dependencies: - "@babel/runtime" "^7.12.5" - "@types/algoliasearch@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/algoliasearch/-/algoliasearch-4.0.0.tgz#129501dff14b70024439751beb3ec820417f566a" @@ -1680,11 +1647,6 @@ dependencies: algoliasearch "*" -"@types/aria-query@^4.2.0": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" - integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== - "@types/d3-array@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-3.0.3.tgz#87d990bf504d14ad6b16766979d04e943c046dac" @@ -1732,7 +1694,7 @@ resolved "https://registry.yarnpkg.com/@types/d3-dispatch/-/d3-dispatch-3.0.1.tgz#a1b18ae5fa055a6734cb3bd3cbc6260ef19676e3" integrity sha512-NhxMn3bAkqhjoxabVJWKryhnZXXYYVQxaBnbANu0O94+O/nX9qSjrA1P1jbAQJxJf+VC72TxDX/YJcKue5bRqw== -"@types/d3-drag@*": +"@types/d3-drag@*", "@types/d3-drag@^3.0.1": version "3.0.1" resolved "https://registry.yarnpkg.com/@types/d3-drag/-/d3-drag-3.0.1.tgz#fb1e3d5cceeee4d913caa59dedf55c94cb66e80f" integrity sha512-o1Va7bLwwk6h03+nSM8dpaGEYnoIG19P0lKqlic8Un36ymh9NSkNFX1yiXMKNMx8rJ0Kfnn2eovuFaL6Jvj0zA== @@ -1817,7 +1779,7 @@ dependencies: "@types/d3-time" "*" -"@types/d3-selection@*": +"@types/d3-selection@*", "@types/d3-selection@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-3.0.3.tgz#57be7da68e7d9c9b29efefd8ea5a9ef1171e42ba" integrity sha512-Mw5cf6nlW1MlefpD9zrshZ+DAWL4IQ5LnWfRheW6xwsdaWOb6IRRu2H7XPAQcyXEx1D7XQWgdoKR83ui1/HlEA== @@ -1851,7 +1813,7 @@ dependencies: "@types/d3-selection" "*" -"@types/d3-zoom@*": +"@types/d3-zoom@*", "@types/d3-zoom@^3.0.1": version "3.0.1" resolved "https://registry.yarnpkg.com/@types/d3-zoom/-/d3-zoom-3.0.1.tgz#4bfc7e29625c4f79df38e2c36de52ec3e9faf826" integrity sha512-7s5L9TjfqIYQmQQEUcpMAcBOahem7TRoSO/+Gkz02GbMVuULiZzjF2BOdw291dbO2aNon4m2OdFsRGaCq2caLQ== @@ -1859,7 +1821,7 @@ "@types/d3-interpolate" "*" "@types/d3-selection" "*" -"@types/d3@^7.0.0": +"@types/d3@^7.4.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@types/d3/-/d3-7.4.0.tgz#fc5cac5b1756fc592a3cf1f3dc881bf08225f515" integrity sha512-jIfNVK0ZlxcuRDKtRS/SypEyOQ6UHaFQBKv032X45VvxSJ6Yi5G9behy9h6tNTHTDGh5Vq+KbmBjUWLgY4meCA== @@ -1918,33 +1880,6 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@*": - version "29.2.1" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.1.tgz#31fda30bdf2861706abc5f1730be78bed54f83ee" - integrity sha512-nKixEdnGDqFOZkMTF74avFNr3yRqB1ZJ6sRZv5/28D5x2oLN14KApv7F9mfDT/vUic0L3tRCsh3XWpWjtJisUQ== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - "@types/jest@^27.0.2": version "27.5.2" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.5.2.tgz#ec49d29d926500ffb9fd22b84262e862049c026c" @@ -1985,13 +1920,6 @@ dependencies: "@types/react" "*" -"@types/react-dom@<18.0.0": - version "17.0.18" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.18.tgz#8f7af38f5d9b42f79162eea7492e5a1caff70dc2" - integrity sha512-rLVtIfbwyur2iFKykP2w0pl/1unw26b5td16d5xMgp7/yjTHomkyxPYChFoCr/FtEX1lN9wY6lFj1qvKdS5kDw== - dependencies: - "@types/react" "^17" - "@types/react-dom@^18.0.6": version "18.0.8" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.8.tgz#d2606d855186cd42cc1b11e63a71c39525441685" @@ -1999,7 +1927,7 @@ dependencies: "@types/react" "*" -"@types/react-redux@^7.1.18", "@types/react-redux@^7.1.20": +"@types/react-redux@^7.1.20": version "7.1.24" resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.24.tgz#6caaff1603aba17b27d20f8ad073e4c077e975c0" integrity sha512-7FkurKcS1k0FHZEtdbbgN8Oc6b+stGSfZYjQGicofJ0j4U0qIn/jaSvnP2pLwZKiai3/17xqqxkkrxTgN8UNbQ== @@ -2025,15 +1953,6 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/react@^17": - version "17.0.52" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.52.tgz#10d8b907b5c563ac014a541f289ae8eaa9bf2e9b" - integrity sha512-vwk8QqVODi0VaZZpDXQCmEmiOuyjEFPY7Ttaw5vjM112LOq37yz1CDJGrRJwA1fYEq4Iitd5rnjd1yWAc/bT+A== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" @@ -2049,35 +1968,11 @@ resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== -"@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== - -"@types/testing-library__jest-dom@^5.9.1": - version "5.14.5" - resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz#d113709c90b3c75fdb127ec338dad7d5f86c974f" - integrity sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ== - dependencies: - "@types/jest" "*" - "@types/uuid@^8.3.1": version "8.3.4" resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^17.0.8": - version "17.0.13" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.13.tgz#34cced675ca1b1d51fcf4d34c3c6f0fa142a5c76" - integrity sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg== - dependencies: - "@types/yargs-parser" "*" - "@types/yauzl@^2.9.1": version "2.10.0" resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" @@ -2085,7 +1980,7 @@ dependencies: "@types/node" "*" -"@vitejs/plugin-react@^2.1.0": +"@vitejs/plugin-react@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-2.2.0.tgz#1b9f63b8b6bc3f56258d20cd19b33f5cc761ce6e" integrity sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA== @@ -2221,13 +2116,6 @@ arg@^5.0.2: resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== -aria-query@^5.0.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== - dependencies: - deep-equal "^2.0.5" - asn1@~0.2.3: version "0.2.6" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" @@ -2272,11 +2160,6 @@ autoprefixer@^10.4.12: picocolors "^1.0.0" postcss-value-parser "^4.2.0" -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -2369,14 +2252,6 @@ cachedir@^2.3.0: resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - camelcase-css@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" @@ -2401,14 +2276,6 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -2563,11 +2430,6 @@ css-box-model@^1.2.0: dependencies: tiny-invariant "^1.0.6" -css.escape@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" - integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== - cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -2636,7 +2498,7 @@ cypress@^10.11.0: resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e" integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg== -"d3-drag@2 - 3": +"d3-drag@2 - 3", d3-drag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-3.0.0.tgz#994aae9cd23c719f53b5e10e3a0a6108c69607ba" integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg== @@ -2721,40 +2583,11 @@ debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: dependencies: ms "2.1.2" -deep-equal@^2.0.5: - version "2.1.0" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.1.0.tgz#5ba60402cf44ab92c2c07f3f3312c3d857a0e1dd" - integrity sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA== - dependencies: - call-bind "^1.0.2" - es-get-iterator "^1.1.2" - get-intrinsic "^1.1.3" - is-arguments "^1.1.1" - is-date-object "^1.0.5" - is-regex "^1.1.4" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.8" - deepmerge@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - defined@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" @@ -2784,21 +2617,11 @@ diff-sequences@^27.5.1: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== -diff-sequences@^29.2.0: - version "29.2.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.2.0.tgz#4c55b5b40706c7b5d2c5c75999a50c56d214e8f6" - integrity sha512-413SY5JpYeSBZxmenGEmCVQ8mCgtFJF0w9PROdaS6z987XC2Pd2GOKqOITLtMftmyFZqgtCOb/QA7/Z3ZXfzIw== - dlv@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== -dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: - version "0.5.14" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz#56082f71b1dc7aac69d83c4285eef39c15d93f56" - integrity sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg== - duplexer@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -2849,147 +2672,133 @@ enquirer@^2.3.6: dependencies: ansi-colors "^4.1.1" -es-get-iterator@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.2.tgz#9234c54aba713486d7ebde0220864af5e2b283f7" - integrity sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.0" - has-symbols "^1.0.1" - is-arguments "^1.1.0" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.5" - isarray "^2.0.5" - -esbuild-android-64@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz#5e8151d5f0a748c71a7fbea8cee844ccf008e6fc" - integrity sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q== - -esbuild-android-arm64@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz#5ee72a6baa444bc96ffcb472a3ba4aba2cc80666" - integrity sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA== - -esbuild-darwin-64@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz#70047007e093fa1b3ba7ef86f9b3fa63db51fe25" - integrity sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q== - -esbuild-darwin-arm64@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz#41c951f23d9a70539bcca552bae6e5196696ae04" - integrity sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw== - -esbuild-freebsd-64@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz#a761b5afd12bbedb7d56c612e9cfa4d2711f33f0" - integrity sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw== - -esbuild-freebsd-arm64@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz#6b0839d4d58deabc6cbd96276eb8cbf94f7f335e" - integrity sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g== - -esbuild-linux-32@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz#bd50bfe22514d434d97d5150977496e2631345b4" - integrity sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA== - -esbuild-linux-64@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz#074bb2b194bf658245f8490f29c01ffcdfa8c931" - integrity sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA== - -esbuild-linux-arm64@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz#3bf789c4396dc032875a122988efd6f3733f28f5" - integrity sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ== - -esbuild-linux-arm@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz#b91b5a8d470053f6c2c9c8a5e67ec10a71fe4a67" - integrity sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A== - -esbuild-linux-mips64le@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz#2fb54099ada3c950a7536dfcba46172c61e580e2" - integrity sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A== - -esbuild-linux-ppc64le@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz#9e3b8c09825fb27886249dfb3142a750df29a1b7" - integrity sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg== - -esbuild-linux-riscv64@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz#923d0f5b6e12ee0d1fe116b08e4ae4478fe40693" - integrity sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA== - -esbuild-linux-s390x@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz#3b1620220482b96266a0c6d9d471d451a1eab86f" - integrity sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww== - -esbuild-netbsd-64@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz#276730f80da646859b1af5a740e7802d8cd73e42" - integrity sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w== - -esbuild-openbsd-64@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz#bd0eea1dd2ca0722ed489d88c26714034429f8ae" - integrity sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw== - -esbuild-sunos-64@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz#5e56bf9eef3b2d92360d6d29dcde7722acbecc9e" - integrity sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg== - -esbuild-windows-32@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz#a4f1a301c1a2fa7701fcd4b91ef9d2620cf293d0" - integrity sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw== - -esbuild-windows-64@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz#bc2b467541744d653be4fe64eaa9b0dbbf8e07f6" - integrity sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA== - -esbuild-windows-arm64@0.15.12: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz#9a7266404334a86be800957eaee9aef94c3df328" - integrity sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA== +esbuild-android-64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.13.tgz#5f25864055dbd62e250f360b38b4c382224063af" + integrity sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g== + +esbuild-android-arm64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.13.tgz#d8820f999314efbe8e0f050653a99ff2da632b0f" + integrity sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w== + +esbuild-darwin-64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.13.tgz#99ae7fdaa43947b06cd9d1a1c3c2c9f245d81fd0" + integrity sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg== + +esbuild-darwin-arm64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.13.tgz#bafa1814354ad1a47adcad73de416130ef7f55e3" + integrity sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A== + +esbuild-freebsd-64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.13.tgz#84ef85535c5cc38b627d1c5115623b088d1de161" + integrity sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA== + +esbuild-freebsd-arm64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.13.tgz#033f21de434ec8e0c478054b119af8056763c2d8" + integrity sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q== + +esbuild-linux-32@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.13.tgz#54290ea8035cba0faf1791ce9ae6693005512535" + integrity sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w== + +esbuild-linux-64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.13.tgz#4264249281ea388ead948614b57fb1ddf7779a2c" + integrity sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A== + +esbuild-linux-arm64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.13.tgz#9323c333924f97a02bdd2ae8912b36298acb312d" + integrity sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ== + +esbuild-linux-arm@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.13.tgz#b407f47b3ae721fe4e00e19e9f19289bef87a111" + integrity sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ== + +esbuild-linux-mips64le@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.13.tgz#bdf905aae5c0bcaa8f83567fe4c4c1bdc1f14447" + integrity sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A== + +esbuild-linux-ppc64le@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.13.tgz#2911eae1c90ff58a3bd3259cb557235df25aa3b4" + integrity sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA== + +esbuild-linux-riscv64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.13.tgz#1837c660be12b1d20d2a29c7189ea703f93e9265" + integrity sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow== + +esbuild-linux-s390x@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.13.tgz#d52880ece229d1bd10b2d936b792914ffb07c7fc" + integrity sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag== + +esbuild-netbsd-64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.13.tgz#de14da46f1d20352b43e15d97a80a8788275e6ed" + integrity sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ== + +esbuild-openbsd-64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.13.tgz#45e8a5fd74d92ad8f732c43582369c7990f5a0ac" + integrity sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w== + +esbuild-sunos-64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.13.tgz#f646ac3da7aac521ee0fdbc192750c87da697806" + integrity sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw== + +esbuild-windows-32@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.13.tgz#fb4fe77c7591418880b3c9b5900adc4c094f2401" + integrity sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA== + +esbuild-windows-64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.13.tgz#1fca8c654392c0c31bdaaed168becfea80e20660" + integrity sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ== + +esbuild-windows-arm64@0.15.13: + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.13.tgz#4ffd01b6b2888603f1584a2fe96b1f6a6f2b3dd8" + integrity sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg== esbuild@^0.15.9: - version "0.15.12" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.12.tgz#6c8e22d6d3b7430d165c33848298d3fc9a1f251c" - integrity sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng== + version "0.15.13" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.13.tgz#7293480038feb2bafa91d3f6a20edab3ba6c108a" + integrity sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ== optionalDependencies: - "@esbuild/android-arm" "0.15.12" - "@esbuild/linux-loong64" "0.15.12" - esbuild-android-64 "0.15.12" - esbuild-android-arm64 "0.15.12" - esbuild-darwin-64 "0.15.12" - esbuild-darwin-arm64 "0.15.12" - esbuild-freebsd-64 "0.15.12" - esbuild-freebsd-arm64 "0.15.12" - esbuild-linux-32 "0.15.12" - esbuild-linux-64 "0.15.12" - esbuild-linux-arm "0.15.12" - esbuild-linux-arm64 "0.15.12" - esbuild-linux-mips64le "0.15.12" - esbuild-linux-ppc64le "0.15.12" - esbuild-linux-riscv64 "0.15.12" - esbuild-linux-s390x "0.15.12" - esbuild-netbsd-64 "0.15.12" - esbuild-openbsd-64 "0.15.12" - esbuild-sunos-64 "0.15.12" - esbuild-windows-32 "0.15.12" - esbuild-windows-64 "0.15.12" - esbuild-windows-arm64 "0.15.12" + "@esbuild/android-arm" "0.15.13" + "@esbuild/linux-loong64" "0.15.13" + esbuild-android-64 "0.15.13" + esbuild-android-arm64 "0.15.13" + esbuild-darwin-64 "0.15.13" + esbuild-darwin-arm64 "0.15.13" + esbuild-freebsd-64 "0.15.13" + esbuild-freebsd-arm64 "0.15.13" + esbuild-linux-32 "0.15.13" + esbuild-linux-64 "0.15.13" + esbuild-linux-arm "0.15.13" + esbuild-linux-arm64 "0.15.13" + esbuild-linux-mips64le "0.15.13" + esbuild-linux-ppc64le "0.15.13" + esbuild-linux-riscv64 "0.15.13" + esbuild-linux-s390x "0.15.13" + esbuild-netbsd-64 "0.15.13" + esbuild-openbsd-64 "0.15.13" + esbuild-sunos-64 "0.15.13" + esbuild-windows-32 "0.15.13" + esbuild-windows-64 "0.15.13" + esbuild-windows-arm64 "0.15.13" escalade@^3.1.1: version "3.1.1" @@ -3001,11 +2810,6 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - eslint-plugin-react-hooks@^4.3.0: version "4.6.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" @@ -3066,17 +2870,6 @@ executable@^4.1.1: dependencies: pify "^2.2.0" -expect@^29.0.0: - version "29.2.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.2.2.tgz#ba2dd0d7e818727710324a6e7f13dd0e6d086106" - integrity sha512-hE09QerxZ5wXiOhqkXy5d2G9ar+EqOyifnCXCpMNu+vZ6DG9TJ6CO2c2kPDSLqERTTWrO7OZj8EkYHQqSd78Yw== - dependencies: - "@jest/expect-utils" "^29.2.2" - jest-get-type "^29.2.0" - jest-matcher-utils "^29.2.2" - jest-message-util "^29.2.1" - jest-util "^29.2.1" - extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" @@ -3157,13 +2950,6 @@ follow-redirects@^1.14.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -3226,25 +3012,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -3309,23 +3081,11 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: +graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -has-bigints@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -3336,25 +3096,6 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -3462,21 +3203,6 @@ intl-messageformat@^10.1.0: "@formatjs/icu-messageformat-parser" "2.1.10" tslib "2.4.0" -is-arguments@^1.1.0, is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -3484,19 +3210,6 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-callable@^1.1.3: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - is-ci@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" @@ -3511,13 +3224,6 @@ is-core-module@^2.9.0: dependencies: has "^1.0.3" -is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -3543,18 +3249,6 @@ is-installed-globally@~0.4.0: global-dirs "^3.0.0" is-path-inside "^3.0.2" -is-map@^2.0.1, is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -3565,49 +3259,11 @@ is-path-inside@^3.0.2: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-set@^2.0.1, is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -3618,24 +3274,6 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -3656,26 +3294,11 @@ jest-diff@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-diff@^29.2.1: - version "29.2.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.2.1.tgz#027e42f5a18b693fb2e88f81b0ccab533c08faee" - integrity sha512-gfh/SMNlQmP3MOUgdzxPOd4XETDJifADpT937fN1iUGz+9DgOu2eUPHH25JDkLVcLwwqxv3GzVyK4VBUr9fjfA== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.2.0" - jest-get-type "^29.2.0" - pretty-format "^29.2.1" - jest-get-type@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== -jest-get-type@^29.2.0: - version "29.2.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.2.0.tgz#726646f927ef61d583a3b3adb1ab13f3a5036408" - integrity sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA== - jest-matcher-utils@^27.0.0: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" @@ -3686,43 +3309,6 @@ jest-matcher-utils@^27.0.0: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-matcher-utils@^29.2.2: - version "29.2.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.2.2.tgz#9202f8e8d3a54733266784ce7763e9a08688269c" - integrity sha512-4DkJ1sDPT+UX2MR7Y3od6KtvRi9Im1ZGLGgdLFLm4lPexbTaCgJW5NN3IOXlQHF7NSHY/VHhflQ+WoKtD/vyCw== - dependencies: - chalk "^4.0.0" - jest-diff "^29.2.1" - jest-get-type "^29.2.0" - pretty-format "^29.2.1" - -jest-message-util@^29.2.1: - version "29.2.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.2.1.tgz#3a51357fbbe0cc34236f17a90d772746cf8d9193" - integrity sha512-Dx5nEjw9V8C1/Yj10S/8ivA8F439VS8vTq1L7hEgwHFn9ovSKNpYW/kwNh7UglaEgXO42XxzKJB+2x0nSglFVw== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.2.1" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.2.1" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-util@^29.2.1: - version "29.2.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.2.1.tgz#f26872ba0dc8cbefaba32c34f98935f6cf5fc747" - integrity sha512-P5VWDj25r7kj7kl4pN2rG/RN2c1TLfYYYZYULnS/35nFDjBai+hBeo3MDrYZS7p6IoY3YHZnt2vq4L6mKnLk0g== - dependencies: - "@jest/types" "^29.2.1" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - joi@^17.4.0: version "17.7.0" resolved "https://registry.yarnpkg.com/joi/-/joi-17.7.0.tgz#591a33b1fe1aca2bc27f290bcad9b9c1c570a6b3" @@ -3833,7 +3419,7 @@ lodash.once@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== -lodash@^4.17.15, lodash@^4.17.21: +lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3870,11 +3456,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lz-string@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" - integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ== - magic-string@^0.26.7: version "0.26.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.7.tgz#caf7daf61b34e9982f8228c4527474dac8981d6f" @@ -3927,11 +3508,6 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -4003,34 +3579,6 @@ object-hash@^3.0.0: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -4094,7 +3642,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -4167,7 +3715,7 @@ pretty-bytes@^5.6.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1: +pretty-format@^27.0.0, pretty-format@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== @@ -4176,16 +3724,7 @@ pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^29.0.0, pretty-format@^29.2.1: - version "29.2.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.2.1.tgz#86e7748fe8bbc96a6a4e04fa99172630907a9611" - integrity sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA== - dependencies: - "@jest/schemas" "^29.0.0" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.7.2: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -4308,35 +3847,11 @@ react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-draggable@^4.4.4: - version "4.4.5" - resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.5.tgz#9e37fe7ce1a4cf843030f521a0a4cc41886d7e7c" - integrity sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g== - dependencies: - clsx "^1.1.1" - prop-types "^15.8.1" - react-fast-compare@^2.0.1: version "2.0.4" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== -react-flow-renderer@9.6.7: - version "9.6.7" - resolved "https://registry.yarnpkg.com/react-flow-renderer/-/react-flow-renderer-9.6.7.tgz#273edbfbaa17886102ecb5fbfa8bee58307d1233" - integrity sha512-pzsd0GhV1+3i0cBGIw2pf6XUKIXpAjmK1omWQj9Dsq6bij6exd7UbURbMKHD+2BlW8BnnJROYRcWw+Ydooj/ug== - dependencies: - "@babel/runtime" "^7.15.3" - "@types/d3" "^7.0.0" - "@types/react-redux" "^7.1.18" - classcat "^5.0.3" - d3-selection "^3.0.0" - d3-zoom "^3.0.0" - fast-deep-equal "^3.1.3" - react-draggable "^4.4.4" - react-redux "^7.2.4" - redux "^4.1.1" - react-instantsearch-hooks-web@^6.29.0: version "6.38.0" resolved "https://registry.yarnpkg.com/react-instantsearch-hooks-web/-/react-instantsearch-hooks-web-6.38.0.tgz#6713b8f5ca55a326c0e4d8119fddc44dbe1d889b" @@ -4366,12 +3881,7 @@ react-is@^17.0.1, react-is@^17.0.2: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -react-redux@^7.2.0, react-redux@^7.2.4, react-redux@^7.2.6: +react-redux@^7.2.0, react-redux@^7.2.6: version "7.2.9" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.9.tgz#09488fbb9416a4efe3735b7235055442b042481d" integrity sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ== @@ -4402,6 +3912,16 @@ react@^18.2.0: dependencies: loose-envify "^1.1.0" +reactflow@^11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/reactflow/-/reactflow-11.2.0.tgz#cb670ae07fe8cc39ec08bbc78e716e490a3e255a" + integrity sha512-wrpcpY1J1QY87meJXrd7Y1jZQ9s0VvXudpeMrXeq1HEgYOyYmZrg2oxv4ck9m9liq0Urz9z/eWrIQTkdb/6P5A== + dependencies: + "@reactflow/background" "11.0.4" + "@reactflow/controls" "11.0.4" + "@reactflow/core" "11.2.0" + "@reactflow/minimap" "11.1.0" + read-cache@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" @@ -4416,20 +3936,12 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - redux-thunk@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714" integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q== -redux@^4.0.0, redux@^4.0.4, redux@^4.1.1, redux@^4.1.2: +redux@^4.0.0, redux@^4.0.4, redux@^4.1.2: version "4.2.0" resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13" integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA== @@ -4441,15 +3953,6 @@ regenerator-runtime@^0.13.10: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz#ed07b19616bcbec5da6274ebc75ae95634bfc2ee" integrity sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw== -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - request-progress@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" @@ -4568,25 +4071,11 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - slice-ansi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" @@ -4637,13 +4126,6 @@ sshpk@^1.14.1: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -stack-utils@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== - dependencies: - escape-string-regexp "^2.0.0" - start-server-and-test@^1.14.0: version "1.14.0" resolved "https://registry.yarnpkg.com/start-server-and-test/-/start-server-and-test-1.14.0.tgz#c57f04f73eac15dd51733b551d775b40837fdde3" @@ -4690,13 +4172,6 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -4871,7 +4346,7 @@ use-memo-one@^1.1.1: resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99" integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ== -use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0: +use-sync-external-store@1.2.0, use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== @@ -4895,11 +4370,6 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vite-plugin-environment@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/vite-plugin-environment/-/vite-plugin-environment-1.1.3.tgz#d01a04abb2f69730a4866c9c9db51d3dab74645b" - integrity sha512-9LBhB0lx+2lXVBEWxFZC+WO7PKEyE/ykJ7EPWCq95NEcCpblxamTbs5Dm3DLBGzwODpJMEnzQywJU8fw6XGGGA== - vite@^3.1.0: version "3.2.2" resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.2.tgz#280762bfaf47bcea1d12698427331c0009ac7c1f" @@ -4923,39 +4393,6 @@ wait-on@6.0.0: minimist "^1.2.5" rxjs "^7.1.0" -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - -which-typed-array@^1.1.8: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" - which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -5013,3 +4450,10 @@ yauzl@^2.10.0: dependencies: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" + +zustand@^4.1.1: + version "4.1.4" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.1.4.tgz#b0286da4cc9edd35e91c96414fa54bfa4652a54d" + integrity sha512-k2jVOlWo8p4R83mQ+/uyB8ILPO2PCJOf+QVjcL+1PbMCk1w5OoPYpAIxy9zd93FSfmJqoH6lGdwzzjwqJIRU5A== + dependencies: + use-sync-external-store "1.2.0"