diff --git a/app/cdap/components/AbstractWidget/Comment/CommentBox.tsx b/app/cdap/components/AbstractWidget/Comment/CommentBox.tsx index 1284bbf3d58..61940e2de97 100644 --- a/app/cdap/components/AbstractWidget/Comment/CommentBox.tsx +++ b/app/cdap/components/AbstractWidget/Comment/CommentBox.tsx @@ -129,6 +129,7 @@ export default function CommentBox({ )} ); + if (!editMode) { return ( diff --git a/app/cdap/components/FooterContext/index.ts b/app/cdap/components/FooterContext/index.ts new file mode 100644 index 00000000000..245893419ae --- /dev/null +++ b/app/cdap/components/FooterContext/index.ts @@ -0,0 +1,41 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { createContext, useContext, useEffect } from 'react'; + +interface IFooterContext { + show: boolean; + setShow(val?: boolean): void; +} + +export const FooterContext = createContext({ + show: true, + setShow() { + return; + }, +}); + +export function useHideFooterInPage() { + const { setShow } = useContext(FooterContext); + + useEffect(() => { + setShow(false); + + return () => setShow(true); + }, []); + + return setShow; +} diff --git a/app/cdap/components/PipelineCanvasActions/PipelineCommentsActionBtn.tsx b/app/cdap/components/PipelineCanvasActions/PipelineCommentsActionBtn.tsx index df95462a4b2..83400199d09 100644 --- a/app/cdap/components/PipelineCanvasActions/PipelineCommentsActionBtn.tsx +++ b/app/cdap/components/PipelineCanvasActions/PipelineCommentsActionBtn.tsx @@ -26,6 +26,7 @@ import uuidv4 from 'uuid/v4'; import { PipelineComments } from 'components/PipelineCanvasActions/PipelineComments'; import { IPipelineComment } from 'components/PipelineCanvasActions/PipelineCommentsConstants'; import ClickAwayListener from '@material-ui/core/ClickAwayListener'; +import { ControlButton } from 'reactflow'; const useStyle = makeStyles((theme) => { return { @@ -79,6 +80,7 @@ interface IPipelineCommentsActionBtnProps { onChange: (comments: IPipelineComment[]) => void; comments: IPipelineComment[]; disabled?: boolean; + isV2?: boolean; } function PipelineCommentsActionBtn({ @@ -86,6 +88,7 @@ function PipelineCommentsActionBtn({ onChange, comments = [], disabled, + isV2 = false, }: IPipelineCommentsActionBtnProps) { const [localToggle, setLocalToggle] = React.useState(false); const [showMarker, setShowMarker] = React.useState(comments.length > 0); @@ -122,6 +125,25 @@ function PipelineCommentsActionBtn({ React.useEffect(() => { setShowMarker(Array.isArray(comments) && comments.length > 0); }, [comments]); + + if (isV2) { + return ( + + + {showMarker && } + + + + + ); + } + return ( { onOpen(nodeId); }; diff --git a/app/cdap/components/StudioV2/components/DAGEditor/DAGEdges.tsx b/app/cdap/components/StudioV2/components/DAGEditor/DAGEdges.tsx new file mode 100644 index 00000000000..968c8f44e6a --- /dev/null +++ b/app/cdap/components/StudioV2/components/DAGEditor/DAGEdges.tsx @@ -0,0 +1,178 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React, { useEffect, useMemo, useRef } from 'react'; +import { + BaseEdge, + ConnectionLineComponentProps, + EdgeProps, + Position, + getSimpleBezierPath, + getSmoothStepPath, +} from 'reactflow'; +import { cartesianDistance } from '../../utils/geometry'; + +const END_MARKER_PREFIX = 'cdap-dag-edge-end-marker'; +const EDGE_BORDER_RADIUS = 20; + +const EndMarkers = { + FILLED_TRIANGLE: `${END_MARKER_PREFIX}-traiangular-filled`, + FILLED_TRIANGLE_SELECTED: `${END_MARKER_PREFIX}-traiangular-filled-selected`, +}; + +const endMarkersSvg = ` + + + + + + + + + + + +`; + +function appendMarkersSvg() { + const markers = Array.from(document.querySelectorAll(`marker[id*="${END_MARKER_PREFIX}"]`)); + if (!markers.length) { + const svgWrapperEl = document.createElement('div'); + svgWrapperEl.innerHTML = endMarkersSvg; + document.body.appendChild(svgWrapperEl); + } +} + +function getEdgePath( + sourceX: number, + sourceY: number, + sourcePosition: Position, + targetX: number, + targetY: number, + targetPosition: Position, + inProgress: boolean = false +) { + const distX = Math.abs(targetX - sourceX); + const distY = Math.abs(targetY - sourceY); + if (inProgress && distX < EDGE_BORDER_RADIUS && distY < 2 * EDGE_BORDER_RADIUS) { + return getSimpleBezierPath({ + sourceX, + sourceY, + sourcePosition, + targetX, + targetY, + targetPosition, + }); + } + + return getSmoothStepPath({ + sourceX, + sourceY, + sourcePosition, + targetX, + targetY, + targetPosition, + borderRadius: EDGE_BORDER_RADIUS, + }); +} + +export function StandardEdge({ + id, + sourceX, + sourceY, + targetX, + targetY, + selected, + data, +}: EdgeProps) { + const [path] = getEdgePath( + sourceX, + sourceY, + data?.isSourceAtBottom ? Position.Bottom : Position.Right, + targetX, + targetY, + Position.Left + ); + + useEffect(() => { + appendMarkersSvg(); + }, []); + + let markerEnd = selected + ? `url(#${EndMarkers.FILLED_TRIANGLE_SELECTED})` + : `url(#${EndMarkers.FILLED_TRIANGLE})`; + if (Math.abs(targetX - sourceX) < EDGE_BORDER_RADIUS) { + markerEnd = ''; + } + + return ; +} + +export function EdgeInProgress({ + fromX, + fromY, + toX, + toY, + fromPosition, + toPosition, +}: ConnectionLineComponentProps) { + const pathRef = useRef(null); + const [path] = useMemo( + () => getEdgePath(fromX, fromY, fromPosition, toX, toY, toPosition, true), + [fromX, fromY, toX, toY, toPosition] + ); + + useEffect(() => { + if (pathRef.current) { + pathRef.current.setAttribute('d', path); + } + }, [path, pathRef.current]); + + useEffect(() => { + appendMarkersSvg(); + }, []); + + return ( + + ); +} + +export const EDGE_TYPES = { + default: StandardEdge, + standard: StandardEdge, +}; diff --git a/app/cdap/components/StudioV2/components/DAGEditor/DAGNodes.tsx b/app/cdap/components/StudioV2/components/DAGEditor/DAGNodes.tsx new file mode 100644 index 00000000000..710463782f1 --- /dev/null +++ b/app/cdap/components/StudioV2/components/DAGEditor/DAGNodes.tsx @@ -0,0 +1,517 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React, { useContext, useEffect, useState } from 'react'; +import { useSelector } from 'react-redux'; +import styled from 'styled-components'; +import { Handle, NodeProps, Position, useUpdateNodeInternals } from 'reactflow'; +import _noop from 'lodash/noop'; + +import CommentIcon from '@material-ui/icons/Comment'; +import { + getCustomIconSrc, + shouldShowCustomIcon, +} from 'components/hydrator/components/SidePanel/helpers'; +import Comment from 'components/AbstractWidget/Comment'; +import PluginContextMenu, { getPluginMenuOptions } from 'components/PluginContextMenu'; + +import { Button, IconButton, ListItemIcon, Menu, MenuItem } from '@material-ui/core'; +import MenuIcon from '@material-ui/icons/Menu'; +import { + setMetricsTabActive, + setSelectedPlugin, +} from 'services/PipelineMetricsStore/ActionCreator'; +import ErrorStageOutline from 'components/PipelineDetails/PipelineDetailsTopPanel/PipelineRunErrorDetails/ErrorStageOutline'; +import { DAGEditorContext } from '.'; +import { + AlertHandle, + ErrorHandle, + FalseHandle, + disabledSourceHandleStyle, + sourceHandleStyle, + targetHandleStyle, +} from './NodeHandleStyles'; +import SplitterPopover, { PortContainer } from './SplitterPopover'; +import NodeMetrics from './NodeMetrics'; +import { isPluginSink } from 'services/helpers'; + +const NODE_HIGHLIGHT_COLORS = { + batchsource: '#48c038', + transform: '#4586f3', + batchsink: '#8367df', + action: '#988470', + condition: '#4e5568', + alertpublisher: '#ffba01', + errortransform: '#d40001', +}; + +type ConditionHandle = 'CONDITION_TRUE' | 'CONDITION_FALSE'; +type NodeHandle = ConditionHandle | 'GENERIC'; + +const conditionHandleStyles = { + CONDITION_TRUE: sourceHandleStyle, + CONDITION_FALSE: sourceHandleStyle, +}; + +function getNodeHandleStyle({ + nodeType, + isDisabled, + handleType = 'GENERIC', +}: { + nodeType?: string; + isDisabled?: boolean; + handleType?: NodeHandle; +}) { + if (isDisabled) { + return disabledSourceHandleStyle; + } + + if (nodeType === 'condition') { + return conditionHandleStyles[handleType] || sourceHandleStyle; + } + + return sourceHandleStyle; +} + +const DEFAULT_TEXT_COLOR = '#4a4a4a'; +const DEFAULT_HIGHLIGHT_COLOR = 'rgba(0, 0, 0, 0.5)'; +const DEFAULT_SHADOW_COLOR = 'rgba(0, 0, 0, 0.3)'; + +function getNodeBorder(nodeType, selected) { + const color = NODE_HIGHLIGHT_COLORS[nodeType] || DEFAULT_HIGHLIGHT_COLOR; + const width = selected ? '2px' : '1px'; + + return `${width} ${color} solid`; +} + +function getNodeShadow(nodeType, selected) { + const color = selected + ? NODE_HIGHLIGHT_COLORS[nodeType] || DEFAULT_SHADOW_COLOR + : DEFAULT_SHADOW_COLOR; + const spread = selected ? '15px' : '10px'; + + return `0 0 ${spread} ${color}`; +} + +const NodeContainer = styled.div` + position: relative; + margin-left: 2px; + padding: 8px 12px 4px 12px; + + background: white; + width: 200px; + height: 100px; + border-radius: 8px; + box-shadow: ${({ nodeType, selected }) => getNodeShadow(nodeType, selected)}; + border: ${({ nodeType, selected }) => getNodeBorder(nodeType, selected)}; + box-sizing: content-box; +`; + +const CommentsIconContainer = styled.div` + position: absolute; + right: 0; + top: -30px; +`; + +const NodeErrorsAndWarningsCount = styled.div` + position: absolute; + top: 3px; + right: 3px; + + display: inline-block; + padding: 0.5em; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25em; + background: ${({ isWarning }) => (isWarning ? '#ffcc00' : 'ff6666')}; + color: white; +`; + +const NodeInnerLayout = styled.div` + display: flex; + flex-direction: column; + align-items: stretch; + justify-content: space-between; + height: 100%; +`; + +const NodeInfoContainer = styled.div` + display: flex; + justify-content: flex-start; +`; + +const PluginIconContainer = styled.div` + width: 25px; + height: 25px; + min-width: 25px; + min-height: 25px; + + margin-right: 10px; + margin-top: 4px; +`; + +const PluginIconImage = styled.img` + width: 25px; + height: 25px; +`; + +const PluginIconDefault = styled.div` + width: 25px; + height: 25px; + font-size: 25px; +`; + +const PluginMetaContainer = styled.div` + overflow: hidden; + text-overflow: ellipsis; +`; + +const PluginName = styled.div` + font-size: 14px; + font-weight: 600; + margin-bottom: 2px; + color: ${DEFAULT_TEXT_COLOR}; +`; + +const PluginVersion = styled.div` + font-size: 11px; + color: ${DEFAULT_TEXT_COLOR}; +`; + +const NodeButtonsContainer = styled.div` + display: flex; + align-items: center; + justify-content: space-between; +`; + +const SplitterHandlesContainer = styled.div` + position: absolute; + left: calc(100% + 8px); + top: 0; + width: 80px; + + transform: translateY(calc((100px - 100%) / 2)); + display: flex; + flex-direction: column; + align-items: stretch; + background: white; + border-radius: 8px; + box-shadow: ${({ nodeType, selected }) => getNodeShadow(nodeType, selected)}; + border: ${({ nodeType, selected }) => getNodeBorder(nodeType, selected)}; +`; + +const BottomPortsContainer = styled.div` + display: ${({ isVisible }) => (isVisible ? 'flex' : 'none')}; + position: absolute; + top: calc(100% + 8px); + left: 0; + height: 32px; + border-radius: 10px; + align-items: stretch; + background: white; + box-shadow: ${({ nodeType, selected }) => getNodeShadow(nodeType, selected)}; + border: ${({ nodeType, selected }) => getNodeBorder(nodeType, selected)}; + + & > div { + border-right: 1px ${DEFAULT_HIGHLIGHT_COLOR} solid; + + &:last-child { + border-right: none; + } + } +`; + +export function PipelineComments({ + comments = [], + node, + setComments = _noop, + activePluginToComment = '', + setPluginActiveForComment = _noop, + isDisabled, +}) { + if (comments.length < 1 && activePluginToComment !== node.id) { + return null; + } + + return ( + + setPluginActiveForComment()} + disabled={isDisabled} + /> + + ); +} + +export function PipelineNode({ id, data, selected }: NodeProps) { + const updateNodeInternals = useUpdateNodeInternals(); + const [menuAnchorEl, setMenuAnchorEl] = useState(null); + const pluginsMap = useSelector((state) => state.pluginsMap); + const node = data.pluginNode; + + const hasCustomIcon = shouldShowCustomIcon(node.plugin, pluginsMap); + const { isDisabled } = useContext(DAGEditorContext); + const shouldShowAlertsPort = data.shouldShowAlertsPort(node); + const shouldShowErrorsPort = data.shouldShowErrorsPort(node); + const hasBottomPorts = node.type === 'condition' || shouldShowAlertsPort || shouldShowErrorsPort; + + useEffect(() => updateNodeInternals(id), [ + node?.outputSchema, + node.type, + shouldShowAlertsPort, + shouldShowErrorsPort, + ]); + + function handlePropertiesClick() { + if (typeof data.onPropertiesClick === 'function') { + data.onPropertiesClick(node); + } + } + + function handleMenuClick(event) { + setMenuAnchorEl(event.target); + data.toggleNodeMenu(node); + } + + function handleMenuClose() { + setMenuAnchorEl(null); + data.toggleNodeMenu(node); + } + + const pluginMenuItems = getPluginMenuOptions({ + nodeId: node.id, + getPluginConfiguration: data.getPluginConfiguration, + getSelectedConnections: data.getSelectedConnections, + getSelectedNodes: data.getSelectedNodes, + onDelete: data.onSelectedDelete, + onAddComment: data.onPluginAddComment, + }); + + function handleMenuItemClick(onClickHandler) { + return () => { + handleMenuClose(); + if (typeof onClickHandler === 'function') { + onClickHandler(); + } + }; + } + + return ( + <> + + + {data.isErrorStage() && } + + {!!node.errorCount && ( + + {node.errorCount} + + )} + + + + {hasCustomIcon ? ( + + ) : ( + + )} + + + {data.label} + {node.plugin.artifact.version} + + + {data.previewMode && !['action', 'sparkprogram', 'condition'].includes(node.type) && ( + + + + )} + + + {isDisabled ? ( +
+ ) : ( + + + + )} + + {pluginMenuItems.map((item) => ( + + {item.icon} + {typeof item.label === 'function' ? item.label() : item.label} + + ))} + + + {isDisabled && !['action', 'sparkprogram', 'condition'].includes(node.type) && ( +
+ +
+ )} + + {node.type === 'splittertransform' && ( + + {node?.outputSchema?.length && node.outputSchema[0].name !== 'etlSchemaBody' ? ( + + ) : ( + 0 Splits + )} + + )} + + {node.type === 'condition' && ( + + False + + + )} + {!!shouldShowAlertsPort && ( + + Alert + + + )} + {!!shouldShowErrorsPort && ( + + Error + + + )} + + + {node.type !== 'splittertransform' && !isPluginSink(node.type) && ( + + )} + {!isDisabled && ( + + )} + + ); +} + +export const NODE_TYPES = { + default: PipelineNode, + pipelineNode: PipelineNode, +}; diff --git a/app/cdap/components/StudioV2/components/DAGEditor/DAGOverrides.css b/app/cdap/components/StudioV2/components/DAGEditor/DAGOverrides.css new file mode 100644 index 00000000000..8183b010c46 --- /dev/null +++ b/app/cdap/components/StudioV2/components/DAGEditor/DAGOverrides.css @@ -0,0 +1,33 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +.react-flow__handle.target { + height: calc(100% + 10px); + width: 1px; + min-width: 0; + left: 0; + pointer-events: none; + border-radius: 0; + opacity: 0.2; +} + +path.react-flow__edge-path { + stroke-width: 2; +} + +path.react-flow__edge-path:hover { + stroke-width: 4; +} \ No newline at end of file diff --git a/app/cdap/components/StudioV2/components/DAGEditor/NodeHandleStyles.ts b/app/cdap/components/StudioV2/components/DAGEditor/NodeHandleStyles.ts new file mode 100644 index 00000000000..bc0b03afc85 --- /dev/null +++ b/app/cdap/components/StudioV2/components/DAGEditor/NodeHandleStyles.ts @@ -0,0 +1,53 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import styled from 'styled-components'; + +export const targetHandleStyle = {}; + +export const sourceHandleStyle = { + width: '12px', + height: '12px', + borderRadius: '6px', + right: '-5px', + background: '#b1b1b7', +}; + +export const disabledSourceHandleStyle = { + ...sourceHandleStyle, + background: '#d1d1d7', +}; + +export const AlertHandle = styled.div` + padding: 5px; + font-size: 10px; + color: #efab83; + font-weight: bold; + + position: relative; + display: flex; + align-items: center; + justify-content: center; + width: 60px; +`; + +export const ErrorHandle = styled(AlertHandle)` + color: #ef83d3; +`; + +export const FalseHandle = styled(AlertHandle)` + color: #b2b2b2; +`; diff --git a/app/cdap/components/StudioV2/components/DAGEditor/NodeMetrics.tsx b/app/cdap/components/StudioV2/components/DAGEditor/NodeMetrics.tsx new file mode 100644 index 00000000000..25c1a21adf4 --- /dev/null +++ b/app/cdap/components/StudioV2/components/DAGEditor/NodeMetrics.tsx @@ -0,0 +1,97 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React from 'react'; + +export interface INodeMetricsProps { + onClick?(event: any, node: any, portName?: string): void; + node?: any; + disabled?: boolean; + metricsData?: any; + portName?: string; +} + +export default function NodeMetrics({ + onClick, + node, + disabled, + metricsData, + portName, +}: INodeMetricsProps) { + if (!metricsData) { + return null; + } + + function handleClick(event) { + return onClick(event, node, portName); + } + + return ( + + ); +} diff --git a/app/cdap/components/StudioV2/components/DAGEditor/SplitterPopover.tsx b/app/cdap/components/StudioV2/components/DAGEditor/SplitterPopover.tsx new file mode 100644 index 00000000000..73a96fd3240 --- /dev/null +++ b/app/cdap/components/StudioV2/components/DAGEditor/SplitterPopover.tsx @@ -0,0 +1,70 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React from 'react'; +import { Handle, Position } from 'reactflow'; +import styled from 'styled-components'; +import { disabledSourceHandleStyle, sourceHandleStyle } from './NodeHandleStyles'; +import NodeMetrics from './NodeMetrics'; + +export const PortContainer = styled.div` + padding: 5px 10px; + padding-right: 20px; + margin: 0; + border-bottom: 1px #e1e1e1 solid; + position: relative; + + &:last-child { + border-bottom: none; + } +`; + +export default function SplitterPopover({ + ports, + isDisabled, + node, + onMetricsClick, + disableMetricsClick, + metricsData, +}) { + return ( + <> + {ports.map((port) => ( + + {port.name} + + {isDisabled && ( +
+ +
+ )} +
+ ))} + + ); +} diff --git a/app/cdap/components/StudioV2/components/DAGEditor/index.tsx b/app/cdap/components/StudioV2/components/DAGEditor/index.tsx new file mode 100644 index 00000000000..8db8359be94 --- /dev/null +++ b/app/cdap/components/StudioV2/components/DAGEditor/index.tsx @@ -0,0 +1,446 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React, { createContext, useEffect, useRef } from 'react'; +import { Provider } from 'react-redux'; +import _noop from 'lodash/noop'; + +import { + ReactFlow, + Controls, + Background, + BackgroundVariant, + useReactFlow, + ConnectionLineType, + ReactFlowProvider, + ControlButton, + Viewport, + useOnViewportChange, + Edge, + Connection, +} from 'reactflow'; +import 'reactflow/dist/style.css'; + +import DragIndicatorIcon from '@material-ui/icons/DragIndicator'; +import UndoIcon from '@material-ui/icons/Undo'; +import RedoIcon from '@material-ui/icons/Redo'; + +import './DAGOverrides.css'; +import { IPluginNode } from '../../types'; +import { useDAGController } from './useDAGController'; +import { NODE_TYPES } from './DAGNodes'; +import { EDGE_TYPES, EdgeInProgress } from './DAGEdges'; +import AvailablePluginsStore from 'services/AvailablePluginsStore'; +import PipelineCommentsActionBtn from 'components/PipelineCanvasActions/PipelineCommentsActionBtn'; +import PipelineContextMenu from 'components/PipelineContextMenu'; + +export interface IDAGEditorContext { + isDisabled?: boolean; +} + +const MIN_ZOOM = 0.4; +const MAX_ZOOM = 2; +const proOptions = { hideAttribution: true }; +export const DAGEditorContext = createContext({}); + +export interface IConnection { + source?: any; + target?: any; + sourceId: string; + targetId: string; +} + +export interface IDAGEditorProps { + isDisabled?: boolean; + pipelineArtifactType?: 'cdap-data-pipeline' | 'cdap-data-streams'; + + metricsData?: any; + disableMetricsClick?: boolean; + onMetricsClick?(node: any, portName?: string): void; + + errorStages?: string[]; + connections?: IConnection[]; + previewMode?: boolean; + + dagNodes?: IPluginNode[]; + updateNode?(nodeid: string, config: any): void; + removeNode?(node: any): void; + onNodeClick?(node: any): void; + onPreviewData?(node: any): void; + shouldShowAlertsPort?(node: any): boolean; + shouldShowErrorsPort?(node: any): boolean; + nodeMenuOpen?: any; + toggleNodeMenu?(): any; + setNodeComments?(comments: any[]): void; + activePluginToComment?: any; + + getPluginConfiguration?(): any; + getSelectedConnections?(): any; + getSelectedNodes?(): any; + onSelectedDelete?(): any; + onPluginMenuOpen?(): any; + onPluginAddComment?(): any; + + cleanupGraph?(): void; + undoActions?(): void; + undoStates?: any[]; + redoActions?(): void; + redoStates?: any[]; + pipelineComments?: any[]; + setPipelineComments?(): void; + onPipelineContextMenuPaste?(): void; + + onViewportChange?(vp: Viewport): void; + addConnection?(conn: any): void; + moveConnection?(oldConn: any, newConn: any): void; + removeConnection?(connToDel: any): void; + prevalidateConnection?(conn?: Connection): boolean; + + uiAutoLayout?: number; +} + +function removeUnits(length?: string | number): number { + if (typeof length === 'undefined') { + return 0; + } + + if (typeof length === 'number') { + return length; + } + return Number(length.replace(/px$/, '')); +} + +export function DagComponent({ + isDisabled, + pipelineArtifactType, + + metricsData, + disableMetricsClick, + onMetricsClick = _noop, + onPreviewData = _noop, + + errorStages, + connections = [], + previewMode, + + dagNodes = [], + removeNode, + updateNode, + onNodeClick, + shouldShowAlertsPort = _noop, + shouldShowErrorsPort = _noop, + + getPluginConfiguration = _noop, + getSelectedConnections = _noop, + getSelectedNodes = _noop, + onSelectedDelete = _noop, + onPluginMenuOpen = _noop, + onPluginAddComment = _noop, + setNodeComments = _noop, + activePluginToComment, + + cleanupGraph, + undoActions, + undoStates = [], + redoActions, + redoStates = [], + pipelineComments, + setPipelineComments, + onViewportChange, + onPipelineContextMenuPaste, + + addConnection, + moveConnection, + removeConnection, + prevalidateConnection, + + uiAutoLayout, + nodeMenuOpen = '', + toggleNodeMenu = _noop, +}: IDAGEditorProps) { + const reactflow = useReactFlow(); + useOnViewportChange({ + onEnd: onViewportChange, + }); + + const edgeReconnectSuccessful = useRef(true); + const { + nodes, + edges, + onNodesChange, + onConnect, + onEdgesChange, + onReconnect, + onEdgesDelete, + isValidConnection, + } = useDAGController( + dagNodes.map(pluginNodeToDagNode), + connections.map(connectionToDagEdge), + updateNode, + removeNode, + addConnection, + moveConnection, + removeConnection, + prevalidateConnection + ); + + function getNodeByName(nodeName) { + return dagNodes.find((n) => n.name === nodeName) || null; + } + + function pluginNodeToDagNode(node, index) { + return { + id: node.name, + type: 'pipelineNode', + position: { + x: removeUnits(node?._uiPosition?.left), + y: removeUnits(node?._uiPosition?.top), + }, + data: { + label: node.plugin.label, + pluginNode: node, + + onPropertiesClick: onNodeClick || _noop, + disableMetricsClick, + onMetricsClick, + onPreviewData, + shouldShowAlertsPort, + shouldShowErrorsPort, + + getPluginConfiguration, + getSelectedConnections, + getSelectedNodes, + onSelectedDelete, + onPluginMenuOpen, + onPluginAddComment, + nodeMenuOpen, + toggleNodeMenu, + setNodeComments, + activePluginToComment, + + previewMode, + metricsData, + errorStages, + isErrorStage: () => errorStages?.includes(node.name), + index, + }, + draggable: !isDisabled, + }; + } + + function connectionToDagEdge(conn): Edge { + const { from, to, condition } = conn; + const sourceNode = getNodeByName(from); + const targetNode = getNodeByName(to); + + let edgeType = 'standard'; + if ( + sourceNode.type === 'action' || + targetNode.type === 'action' || + sourceNode.type === 'sparkprogram' || + targetNode.type === 'sparkprogram' + ) { + edgeType = 'dashed'; + } + + const edge: Edge = { + id: `edge-${from}-${to}`, + type: edgeType, + source: from, + target: to, + reconnectable: 'target', + data: { + isSourceAtBottom: false, + }, + }; + + if (!sourceNode || !targetNode) { + return edge; + } + + const isConditionEdge = condition === 'false'; + const isAlertEdge = targetNode.type === 'alertpublisher'; + const isErrorEdge = targetNode.type === 'errortransform'; + const isSplitterEdge = sourceNode.type === 'splittertransform'; + + let handleType = 'default'; + let sourceHandle = `source-port-${sourceNode.id}-output`; + if (isAlertEdge) { + sourceHandle = `source-port-${sourceNode.id}-alerts`; + handleType = 'alert'; + } else if (isErrorEdge) { + sourceHandle = `source-port-${sourceNode.id}-errors`; + handleType = 'error'; + } else if (isConditionEdge) { + sourceHandle = `source-port-${sourceNode.id}-condition-false`; + handleType = 'condition-false'; + } else if (isSplitterEdge) { + sourceHandle = `source-port-${sourceNode.id}-${conn.port}`; + handleType = 'splitter-port'; + } + + if (sourceNode.type === 'condition') { + if (handleType === 'default') { + edgeType = 'condition-true'; + } else if (handleType === 'condition-false') { + edgeType = 'condition-false'; + } + } + + return { + ...edge, + type: edgeType, + sourceHandle, + data: { + isSourceAtBottom: isAlertEdge || isErrorEdge || isConditionEdge, + }, + }; + } + + function fitToScreen() { + reactflow.fitView({ + padding: 50, + minZoom: MIN_ZOOM, + maxZoom: MAX_ZOOM, + }); + } + + useEffect(() => { + document.body.classList.add('with-new-dag-editor'); + reactflow.zoomTo(0.5); + fitToScreen(); + + return () => { + document.body.classList.remove('with-new-dag-editor'); + }; + }, []); + + useEffect(() => { + if (previewMode) { + document.body.classList.add('preview-mode'); + } + + return () => { + document.body.classList.remove('preview-mode'); + }; + }, [previewMode]); + + useEffect(fitToScreen, [uiAutoLayout]); + + function handleReconnect(oldEdge, newConn) { + edgeReconnectSuccessful.current = true; + onReconnect(oldEdge, newConn); + } + + function handleReconnectStart() { + edgeReconnectSuccessful.current = false; + } + + function handleReconnectEnd(_, edge) { + if (!edgeReconnectSuccessful.current) { + onEdgesDelete([edge]); + } + + edgeReconnectSuccessful.current = true; + } + + return ( + + + + + {!isDisabled && ( + <> + + + + + + + + + + + )} + + + + {/* */} + + {!isDisabled && ( + + )} + + + + ); +} + +export default function DagEditor(props: IDAGEditorProps) { + return ( + + + + ); +} diff --git a/app/cdap/components/StudioV2/components/DAGEditor/useDAGController.ts b/app/cdap/components/StudioV2/components/DAGEditor/useDAGController.ts new file mode 100644 index 00000000000..bb58f480c4a --- /dev/null +++ b/app/cdap/components/StudioV2/components/DAGEditor/useDAGController.ts @@ -0,0 +1,166 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'; +import { + Connection, + Edge, + EdgeChange, + MarkerType, + Node, + NodeChange, + addEdge, + useEdgesState, + useNodesState, + reconnectEdge, +} from 'reactflow'; +import _noop from 'lodash/noop'; +import AvailablePluginsStore from 'services/AvailablePluginsStore'; + +interface IDAGController { + nodes: Node[]; + edges: Edge[]; + onNodesChange: (changes: NodeChange[]) => void; + onEdgesChange: (changes: EdgeChange[]) => void; + onConnect: (conn: Connection) => void; + onReconnect: (oldEdge: Edge, newConn: Connection) => void; + onEdgesDelete: (edges: Edge[]) => void; + isValidConnection: (conn: Connection) => boolean; +} + +function getNodesComparisonKey(nodes) { + return JSON.stringify( + nodes.map((node) => node.data), + (key, value) => (key === '_uiPosition' ? undefined : value === _noop ? '_noop' : value) + ); +} + +export function useDAGController( + uiNodes, + uiEdges, + updateNode, + removeNode, + addConnection, + moveConnection, + removeConnection, + prevalidateConnection +): IDAGController { + const [nodes, setNodes, onNodesChange] = useNodesState(uiNodes); + const [edges, setEdges, onEdgesChange] = useEdgesState(uiEdges); + + const pluginsMapRef = useRef(null); + function setUpPluginsListener() { + return AvailablePluginsStore.subscribe(() => { + const { pluginsMap } = AvailablePluginsStore.getState().plugins; + // trigger a re-rendering of nodes when the pluginsMap changes, + // as the nodes views may change depending on changes in plugins + if (pluginsMap !== pluginsMapRef.current) { + setNodes((nodes) => [...nodes]); + pluginsMapRef.current = pluginsMap; + } + }); + } + useLayoutEffect(setUpPluginsListener, []); + + useLayoutEffect(() => { + setNodes(uiNodes); + setEdges(uiEdges); + }, [getNodesComparisonKey(uiNodes), JSON.stringify(uiEdges)]); + + const getNodeById = useCallback( + (nodeid) => { + return nodes.find((n) => n.id === nodeid) || null; + }, + [nodes] + ); + + const handleNodesChange = useCallback( + (changes) => { + onNodesChange(changes); + for (const change of changes) { + if (change.type === 'position' && change.dragging === false) { + const node = getNodeById(change.id); + const { position } = node; + const nodeConfig = { + _uiPosition: { + top: position.y, + left: position.x, + }, + }; + updateNode(node.data.pluginNode.id, nodeConfig); + } else if (change.type === 'remove') { + const node = getNodeById(change.id); + removeNode(node.data.pluginNode); + } + } + }, + [nodes] + ); + + const handleEdgesChange = useCallback((changes) => { + // pass + }, []); + + const populateEdge = useCallback( + (edge) => ({ + ...edge, + source: getNodeById(edge.source), + target: getNodeById(edge.target), + }), + [nodes] + ); + + const onConnect = useCallback( + (conn) => { + setEdges((oldEdges) => addEdge(conn, oldEdges)); + addConnection(populateEdge(conn)); + }, + [edges, nodes] + ); + + const onReconnect = useCallback( + (oldEdge, newConn) => { + setEdges((els) => reconnectEdge(oldEdge, newConn, els)); + moveConnection(populateEdge(oldEdge), populateEdge(newConn)); + }, + [setEdges, getNodeById] + ); + + const onEdgesDelete = useCallback( + (edgesToDel: Edge[]) => { + const edgeIdsToDelSet = new Set(edgesToDel.map((x) => x.id)); + setEdges((eds) => eds.filter((e) => !edgeIdsToDelSet.has(e.id))); + edgesToDel.map(populateEdge).forEach(removeConnection); + }, + [edges] + ); + + const isValidConnection = useCallback( + (conn: Connection) => prevalidateConnection(populateEdge(conn)), + [nodes, prevalidateConnection, populateEdge] + ); + + return { + nodes, + edges, + onNodesChange: handleNodesChange, + onEdgesChange: handleEdgesChange, + onConnect, + onReconnect, + onEdgesDelete, + isValidConnection, + }; +} diff --git a/app/cdap/components/StudioV2/store/nodes/actions.ts b/app/cdap/components/StudioV2/store/nodes/actions.ts new file mode 100644 index 00000000000..130293d0bb3 --- /dev/null +++ b/app/cdap/components/StudioV2/store/nodes/actions.ts @@ -0,0 +1,29 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +const PREFIX = 'NODES_ACTIONS'; +export const NodesActions = { + RESET: `${PREFIX}/RESET`, + SET_STATE: `${PREFIX}/SET_STATE`, + UNDO_ACTIONS: `${PREFIX}/UNDO_ACTIONS`, + RESET_ACTIVE_NODE: `${PREFIX}/RESET_ACTIVE_NODE`, + ADD_NODE: `${PREFIX}/ADD_NODE`, + UPDATE_NODE: `${PREFIX}/UPDATE_NODE`, + ADD_CONNECTION: `${PREFIX}/ADD_CONNECTION`, + SET_ACTIVE_NODE: `${PREFIX}/SET_ACTIVE_NODE`, + REMOVE_PREVIOUS_STATE: `${PREFIX}/REMOVE_PREVIOUS_STATE`, + RESET_FUTURE_STATES: `${PREFIX}/RESET_FUTURE_STATES`, +}; diff --git a/app/cdap/components/StudioV2/store/nodes/reducer.ts b/app/cdap/components/StudioV2/store/nodes/reducer.ts new file mode 100644 index 00000000000..c2e97394e67 --- /dev/null +++ b/app/cdap/components/StudioV2/store/nodes/reducer.ts @@ -0,0 +1,97 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { produce } from 'immer'; +import _get from 'lodash/get'; +import _cloneDeep from 'lodash/cloneDeep'; +import _isEqual from 'lodash/isEqual'; +import _assign from 'lodash/assign'; + +import { + addConnection_mutating, + addNode_mutating, + removePreviousState_mutating, + resetActiveNodeId_mutating, + resetFutureStates_mutating, + setActiveNodeId_mutating, + undoActions_mutating, + updateNode_mutating, +} from './mutations'; +import { NodesActions } from './actions'; +import { INodesState } from './types'; + +export const nodesInitialState: INodesState = { + nodes: [], + connections: [], + activeNodeId: null, + currentSourceCount: 0, + currentTransformCount: 0, + currentSinkCount: 0, + canvasPanning: { + top: 0, + left: 0, + }, + stateHistory: { + past: [], + future: [], + }, + adjacencyMap: {}, +}; + +export const nodes = (state: INodesState = nodesInitialState, action?): INodesState => { + switch (action.type) { + case NodesActions.RESET: + return _cloneDeep(nodesInitialState); + + case NodesActions.SET_STATE: { + const patchCurrent = action?.meta?.patchCurrent; + if (!patchCurrent) { + return _cloneDeep(action.payload); + } + + return _assign(_cloneDeep(state), action.payload); + } + + case NodesActions.UNDO_ACTIONS: + return produce(state, undoActions_mutating); + + case NodesActions.RESET_ACTIVE_NODE: + return produce(state, resetActiveNodeId_mutating); + + case NodesActions.SET_ACTIVE_NODE: + return produce(state, (draft) => setActiveNodeId_mutating(draft, action.payload)); + + case NodesActions.ADD_NODE: + return produce(state, (draft) => addNode_mutating(draft, action.payload)); + + case NodesActions.UPDATE_NODE: + return produce(state, (draft) => + updateNode_mutating(draft, action.payload.nodeId, action.payload.nodeConfig) + ); + + case NodesActions.ADD_CONNECTION: + return produce(state, (draft) => addConnection_mutating(draft, action.payload)); + + case NodesActions.REMOVE_PREVIOUS_STATE: + return produce(state, removePreviousState_mutating); + + case NodesActions.RESET_FUTURE_STATES: + return produce(state, resetFutureStates_mutating); + + default: + return state; + } +}; diff --git a/app/cdap/components/StudioV2/store/nodes/types.ts b/app/cdap/components/StudioV2/store/nodes/types.ts new file mode 100644 index 00000000000..683699e3601 --- /dev/null +++ b/app/cdap/components/StudioV2/store/nodes/types.ts @@ -0,0 +1,37 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { IDagConnection, IPluginNode } from 'components/StudioV2/types'; + +export interface INodesState { + nodes: IPluginNode[]; + connections: IDagConnection[]; + activeNodeId?: string | null; + currentSourceCount: number; + currentTransformCount: number; + currentSinkCount: number; + canvasPanning: { + top: number; + left: number; + }; + stateHistory?: { + past: INodesState[]; + future: INodesState[]; + }; + adjacencyMap: { + [key: string]: string[]; + }; +} diff --git a/app/cdap/components/StudioV2/store/plugins/actions.ts b/app/cdap/components/StudioV2/store/plugins/actions.ts new file mode 100644 index 00000000000..797ddef06ba --- /dev/null +++ b/app/cdap/components/StudioV2/store/plugins/actions.ts @@ -0,0 +1,77 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { GLOBALS } from 'services/global-constants'; +import MySettingsService from 'components/StudioV2/utils/settings'; +import { IPlugin } from 'components/StudioV2/types'; +import StudioV2Store from '..'; + +const PREFIX = 'PLUGINS_ACTIONS'; + +export const PluginsActions = { + FETCH_PLUGINS: `${PREFIX}/FETCH_PLUGINS`, + FETCH_ALL_PLUGINS: `${PREFIX}/FETCH_ALL_PLUGINS`, + FETCH_PLUGIN_TEMPLATE: `${PREFIX}/FETCH_PLUGIN_TEMPLATE`, + FETCH_PLUGINS_DEFAULT_VERSIONS: `${PREFIX}/FETCH_PLUGINS_DEFAULT_VERSIONS`, + UPDATE_PLUGINS_DEFAULT_VERSIONS: `${PREFIX}/UPDATE_PLUGINS_DEFAULT_VERSIONS`, + CHECK_AND_UPDATE_PLUGIN_DEFAULT_VERSION: `${PREFIX}/CHECK_AND_UPDATE_PLUGIN_DEFAULT_VERSION`, + FETCH_EXTENSIONS: `${PREFIX}/FETCH_EXTENSIONS`, + RESET: `${PREFIX}/RESET`, +}; + +export const keepUiSupportedExtensions = (pipelineType: string) => (extension: string) => { + const extensionMap = GLOBALS.pluginTypes[pipelineType]; + return Object.keys(extensionMap).filter((ext) => extensionMap[ext] === extension).length; +}; + +export async function fetchPluginsDefaultVersions() { + try { + const pluginDefalutVersion = await MySettingsService.getInstance().get( + 'plugin-default-version' + ); + if (!pluginDefalutVersion) { + return; + } + + StudioV2Store.dispatch({ + type: PluginsActions.FETCH_PLUGINS_DEFAULT_VERSIONS, + payload: pluginDefalutVersion, + }); + } catch (err) { + return; + } +} + +export async function updatePluginDefaultVersion(plugin: IPlugin) { + try { + let pluginDefalutVersion = + (await MySettingsService.getInstance().get('plugin-default-version')) || {}; + const key = `${plugin.name}-${plugin.type}-${plugin.artifact.name}`; + pluginDefalutVersion[key] = plugin.artifact; + await MySettingsService.getInstance().set('plugin-default-version', pluginDefalutVersion); + pluginDefalutVersion = await MySettingsService.getInstance().get('plugin-default-version'); + + if (!pluginDefalutVersion) { + return; + } + StudioV2Store.dispatch({ + type: PluginsActions.FETCH_PLUGINS_DEFAULT_VERSIONS, + payload: pluginDefalutVersion, + }); + } catch (err) { + return; + } +} diff --git a/app/cdap/components/StudioV2/store/plugins/mutations.ts b/app/cdap/components/StudioV2/store/plugins/mutations.ts new file mode 100644 index 00000000000..221182d3b0b --- /dev/null +++ b/app/cdap/components/StudioV2/store/plugins/mutations.ts @@ -0,0 +1,95 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import _cloneDeep from 'lodash/cloneDeep'; +import _isEqual from 'lodash/isEqual'; +import _get from 'lodash/get'; +import { getDefaultVersionForPlugin } from 'components/StudioV2/utils/pluginUtils'; +import { IPluginTemplatesMap, IPluginToVersionMap, IPluginTypesMap, IPluginsState } from './types'; +import { getTemplatesWithAddedInfo } from 'components/StudioV2/utils/pluginUtils'; + +export function fetchPluginsDefaultVersions_mutating( + state: IPluginsState, + pluginToVersionMap?: IPluginToVersionMap +): IPluginsState { + const defaultPluginVersionsMap = pluginToVersionMap || {}; + const pluginTypesCopy: IPluginTypesMap = {}; + + if (Object.keys(defaultPluginVersionsMap).length) { + const pluginTypes = Object.keys(state.pluginTypes); + // If this is fetched after the all the plugins have been fetched from the backend then we will update them. + pluginTypes.forEach((pluginType) => { + const _plugins = state.pluginTypes[pluginType]; + pluginTypesCopy[pluginType] = _plugins.map((plugin) => { + plugin.defaultArtifact = getDefaultVersionForPlugin(plugin, defaultPluginVersionsMap); + return plugin; + }); + }); + + state.pluginTypes = pluginTypesCopy; + state.pluginToVersionMap = defaultPluginVersionsMap; + } + + return state; +} + +export function checkAndUpdatePluginDefaultVersion_mutating(state: IPluginsState): IPluginsState { + const pluginTypesKeys = Object.keys(state.pluginTypes); + if (!pluginTypesKeys.length) { + return state; + } + + pluginTypesKeys.forEach((pluginType) => { + state.pluginTypes[pluginType].forEach((plugin) => { + if (plugin.pluginTemplate) { + return; + } + const key = `${plugin.name}-${plugin.type}-${plugin.artifact.name}`; + const isArtifactExistsInBackend = plugin.allArtifacts.filter((plug) => + _isEqual(plug.artifact, state.pluginToVersionMap[key]) + ); + if (!isArtifactExistsInBackend.length) { + delete state.pluginToVersionMap[key]; + } + }); + }); + + return state; +} + +export function fetchPluginTemplate_mutating( + state: IPluginsState, + pipelineType: string, + namespace: string, + templates: IPluginTemplatesMap +): IPluginsState { + const templatesList = _get(templates, `${namespace}.${pipelineType}`); + if (!templatesList) { + return state; + } + + Object.entries(templatesList).forEach(([key, plugins]) => { + const _templates = Object.values(plugins); + const _pluginWithoutTemplates = (state.pluginTypes[key] || []).filter( + (plug) => !plug.pluginTemplate + ); + state.pluginTypes[key] = getTemplatesWithAddedInfo(_templates, key).concat( + _pluginWithoutTemplates + ); + }); + + return state; +} diff --git a/app/cdap/components/StudioV2/store/plugins/reducer.ts b/app/cdap/components/StudioV2/store/plugins/reducer.ts new file mode 100644 index 00000000000..3794664513b --- /dev/null +++ b/app/cdap/components/StudioV2/store/plugins/reducer.ts @@ -0,0 +1,64 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { produce } from 'immer'; +import _get from 'lodash/get'; +import _cloneDeep from 'lodash/cloneDeep'; +import _isEqual from 'lodash/isEqual'; + +import { PluginsActions } from './actions'; +import { + checkAndUpdatePluginDefaultVersion_mutating, + fetchPluginTemplate_mutating, + fetchPluginsDefaultVersions_mutating, +} from './mutations'; +import { IPluginsState } from './types'; + +export const pluginsInitialState: IPluginsState = { + pluginTypes: {}, + pluginToVersionMap: {}, + extensions: [], +}; + +export const plugins = (state: IPluginsState = pluginsInitialState, action?): IPluginsState => { + switch (action.type) { + case PluginsActions.FETCH_PLUGINS_DEFAULT_VERSIONS: + return produce(state, (draft) => fetchPluginsDefaultVersions_mutating(draft, action.payload)); + + case PluginsActions.CHECK_AND_UPDATE_PLUGIN_DEFAULT_VERSION: + return produce(state, checkAndUpdatePluginDefaultVersion_mutating); + + case PluginsActions.FETCH_PLUGIN_TEMPLATE: + return produce(state, (draft) => + fetchPluginTemplate_mutating( + draft, + action.payload?.pipelineType, + action.payload?.namespace, + action.payload?.templates + ) + ); + + case PluginsActions.FETCH_ALL_PLUGINS: + return { + ...state, + pluginTypes: _cloneDeep(action.payload.pluginTypes), + extensions: _cloneDeep(action.payload.extensions), + }; + + default: + return state; + } +}; diff --git a/app/cdap/components/StudioV2/store/plugins/types.ts b/app/cdap/components/StudioV2/store/plugins/types.ts new file mode 100644 index 00000000000..1e0df818f78 --- /dev/null +++ b/app/cdap/components/StudioV2/store/plugins/types.ts @@ -0,0 +1,41 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { IArtifactSummary, IPlugin, IPluginTemplate } from 'components/StudioV2/types'; + +export interface IPluginToVersionMap { + [key: string]: IArtifactSummary; +} + +export interface IPluginTypesMap { + [key: string]: IPlugin[]; +} + +export interface IPluginsState { + pluginTypes: IPluginTypesMap; + pluginToVersionMap: IPluginToVersionMap; + extensions: string[]; +} + +export interface IPluginTemplatesMap { + [namespace: string]: { + [pipelineType: string]: { + [extenstionType: string]: { + [templateName: string]: IPluginTemplate; + }; + }; + }; +} diff --git a/app/cdap/components/StudioV2/types.ts b/app/cdap/components/StudioV2/types.ts new file mode 100644 index 00000000000..0ff5e7ab7b6 --- /dev/null +++ b/app/cdap/components/StudioV2/types.ts @@ -0,0 +1,109 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { + IConfigurationGroup, + IPropertyFilter, + IWidgetProperty, +} from 'components/shared/ConfigurationGroup/types'; + +export type ArtifactScope = 'USER' | 'SYSTEM'; + +export interface IArtifactSummary { + name: string; + version: string; + scope: ArtifactScope; +} + +export interface ILabeledArtifactSummary extends IArtifactSummary { + label: string; +} + +export interface IPlugin { + name?: string; + type?: string; + label?: string; + displayName?: string; + description?: string; + className?: string; + pluginTemplate?: string; + + icon?: string; + showCustomIcon?: boolean; + customIconSrc?: string; + + artifact?: IArtifactSummary; + defaultArtifact?: IArtifactSummary; + allArtifacts?: IPlugin[]; +} + +export interface IPluginTemplate { + artifact?: IArtifactSummary; + description?: string; + lock?: { + [key: string]: any; + }; + nodeClass?: string; + outputSchema?: string; + pluginName?: string; + pluginTemplate?: string; + pluginType?: string; + templateType?: string; + properties?: { + [key: string]: any; + }; +} + +export interface IDagConnection { + from: string; + to: string; +} + +export interface IPluginWithProperties extends IPlugin { + properties?: any; +} + +export interface IPluginNode { + id: string; + name?: string; + description?: string; + type?: string; + + configGroups?: IConfigurationGroup[]; + errorCount?: number; + filters?: IPropertyFilter[]; + icon?: string; + + implicitSchema?: any; // TODO: add proper type + outputSchema?: any; + + outputSchemaProperty?: string; + outputs?: IWidgetProperty[]; + plugin?: IPluginWithProperties; + + isPluginAvailable?: boolean; + selected?: boolean; + visibilityMap?: { + [key: string]: boolean; + }; + warning?: boolean; + + _backendProperties?: any; // TODO: add proper types + _uiPosition?: { + top?: string; + left?: string; + }; +} diff --git a/app/cdap/components/StudioV2/utils/artifactUtils.ts b/app/cdap/components/StudioV2/utils/artifactUtils.ts new file mode 100644 index 00000000000..a6487a9618d --- /dev/null +++ b/app/cdap/components/StudioV2/utils/artifactUtils.ts @@ -0,0 +1,21 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { GLOBALS } from 'services/global-constants'; + +export function getArtifactDisaplayName(artifactName: string): string { + return GLOBALS.artifactConvert[artifactName] || artifactName; +} diff --git a/app/cdap/components/StudioV2/utils/geometry.ts b/app/cdap/components/StudioV2/utils/geometry.ts new file mode 100644 index 00000000000..540431c2631 --- /dev/null +++ b/app/cdap/components/StudioV2/utils/geometry.ts @@ -0,0 +1,19 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +export function cartesianDistance(fromX: number, fromY: number, toX: number, toY: number): number { + return Math.sqrt(Math.pow(toX - fromX, 2) + Math.pow(toY - fromY, 2)); +} diff --git a/app/cdap/components/StudioV2/utils/pluginUtils.ts b/app/cdap/components/StudioV2/utils/pluginUtils.ts new file mode 100644 index 00000000000..7b39d2fa6bf --- /dev/null +++ b/app/cdap/components/StudioV2/utils/pluginUtils.ts @@ -0,0 +1,196 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import _isEqual from 'lodash/isEqual'; +import _get from 'lodash/get'; +import _cloneDeep from 'lodash/cloneDeep'; +import { findHighestVersion } from 'services/VersionRange/VersionUtilities'; +import { IArtifactSummary, IPlugin } from '../types'; + +export function getPluginIcon(pluginName: string): string { + const iconMap = { + script: 'icon-script', + scriptfilter: 'icon-scriptfilter', + twitter: 'icon-twitter', + cube: 'icon-cube', + data: 'fa-database', + database: 'icon-database', + table: 'icon-table', + kafka: 'icon-kafka', + jms: 'icon-jms', + projection: 'icon-projection', + amazonsqs: 'icon-amazonsqs', + datagenerator: 'icon-datagenerator', + validator: 'icon-validator', + corevalidator: 'corevalidator', + logparser: 'icon-logparser', + file: 'icon-file', + kvtable: 'icon-kvtable', + s3: 'icon-s3', + s3avro: 'icon-s3avro', + s3parquet: 'icon-s3parquet', + snapshotavro: 'icon-snapshotavro', + snapshotparquet: 'icon-snapshotparquet', + tpfsavro: 'icon-tpfsavro', + tpfsparquet: 'icon-tpfsparquet', + sink: 'icon-sink', + hive: 'icon-hive', + structuredrecordtogenericrecord: 'icon-structuredrecord', + cassandra: 'icon-cassandra', + teradata: 'icon-teradata', + elasticsearch: 'icon-elasticsearch', + hbase: 'icon-hbase', + mongodb: 'icon-mongodb', + pythonevaluator: 'icon-pythonevaluator', + csvformatter: 'icon-csvformatter', + csvparser: 'icon-csvparser', + clonerecord: 'icon-clonerecord', + compressor: 'icon-compressor', + decompressor: 'icon-decompressor', + encoder: 'icon-encoder', + decoder: 'icon-decoder', + jsonformatter: 'icon-jsonformatter', + jsonparser: 'icon-jsonparser', + hdfs: 'icon-hdfs', + hasher: 'icon-hasher', + javascript: 'icon-javascript', + deduper: 'icon-deduper', + distinct: 'icon-distinct', + naivebayestrainer: 'icon-naivebayestrainer', + groupbyaggregate: 'icon-groupbyaggregate', + naivebayesclassifier: 'icon-naivebayesclassifier', + azureblobstore: 'icon-azureblobstore', + xmlreader: 'icon-XMLreader', + xmlparser: 'icon-XMLparser', + ftp: 'icon-FTP', + joiner: 'icon-joiner', + deduplicate: 'icon-deduplicator', + valuemapper: 'icon-valuemapper', + rowdenormalizer: 'icon-rowdenormalizer', + ssh: 'icon-ssh', + sshaction: 'icon-sshaction', + copybookreader: 'icon-COBOLcopybookreader', + excel: 'icon-excelinputsource', + encryptor: 'icon-Encryptor', + decryptor: 'icon-Decryptor', + hdfsfilemoveaction: 'icon-filemoveaction', + hdfsfilecopyaction: 'icon-filecopyaction', + sqlaction: 'icon-SQLaction', + impalahiveaction: 'icon-impalahiveaction', + email: 'icon-emailaction', + kinesissink: 'icon-Amazon-Kinesis', + bigquerysource: 'icon-Big-Query', + tpfsorc: 'icon-ORC', + groupby: 'icon-groupby', + sparkmachinelearning: 'icon-sparkmachinelearning', + solrsearch: 'icon-solr', + sparkstreaming: 'icon-sparkstreaming', + rename: 'icon-rename', + archive: 'icon-archive', + wrangler: 'icon-DataPreparation', + normalize: 'icon-normalize', + xmlmultiparser: 'icon-XMLmultiparser', + xmltojson: 'icon-XMLtoJSON', + decisiontreepredictor: 'icon-decisiontreeanalytics', + decisiontreetrainer: 'icon-DesicionTree', + hashingtffeaturegenerator: 'icon-HashingTF', + ngramtransform: 'icon-NGram', + tokenizer: 'icon-tokenizeranalytics', + skipgramfeaturegenerator: 'icon-skipgram', + skipgramtrainer: 'icon-skipgramtrainer', + logisticregressionclassifier: 'icon-logisticregressionanalytics', + logisticregressiontrainer: 'icon-LogisticRegressionclassifier', + hdfsdelete: 'icon-hdfsdelete', + hdfsmove: 'icon-hdfsmove', + windowssharecopy: 'icon-windowssharecopy', + httppoller: 'icon-httppoller', + window: 'icon-window', + run: 'icon-Run', + oracleexport: 'icon-OracleDump', + snapshottext: 'icon-SnapshotTextSink', + errorcollector: 'fa-exclamation-triangle', + mainframereader: 'icon-MainframeReader', + fastfilter: 'icon-fastfilter', + trash: 'icon-TrashSink', + staterestore: 'icon-Staterestore', + topn: 'icon-TopN', + wordcount: 'icon-WordCount', + datetransform: 'icon-DateTransform', + sftpcopy: 'icon-FTPcopy', + sftpdelete: 'icon-FTPdelete', + validatingxmlconverter: 'icon-XMLvalidator', + wholefilereader: 'icon-Filereader', + xmlschemaaction: 'icon-XMLschemagenerator', + s3toredshift: 'icon-S3toredshift', + redshifttos3: 'icon-redshifttoS3', + verticabulkexportaction: 'icon-Verticabulkexport', + verticabulkimportaction: 'icon-Verticabulkload', + loadtosnowflake: 'icon-snowflake', + kudu: 'icon-apachekudu', + orientdb: 'icon-OrientDB', + recordsplitter: 'icon-recordsplitter', + scalasparkprogram: 'icon-spark', + scalasparkcompute: 'icon-spark', + cdcdatabase: 'icon-database', + cdchbase: 'icon-hbase', + cdckudu: 'icon-apachekudu', + changetrackingsqlserver: 'icon-database', + conditional: 'fa-question-circle-o', + }; + + const actualPluginName = pluginName ? pluginName.toLowerCase() : ''; + const icon = iconMap[actualPluginName] ? iconMap[actualPluginName] : 'fa-plug'; + return icon; +} + +export function getDefaultVersionForPlugin( + plugin: IPlugin = {}, + defaultVersionMap: { [key: string]: IArtifactSummary } = {} +) { + if (Object.keys(plugin).length === 0) { + return {}; + } + + const defaultVersionsList = Object.keys(defaultVersionMap); + const key = `${plugin.name}-${plugin.type}-${plugin.artifact.name}`; + const isDefaultVersionExists = defaultVersionsList.includes(key); + const isArtifactExistsInBackend = (plugin.allArtifacts || []).filter((plug) => + _isEqual(plug.artifact, defaultVersionMap[key]) + ); + + if (!isDefaultVersionExists || isArtifactExistsInBackend.length === 0) { + const highestVersion = findHighestVersion( + plugin.allArtifacts.map((plugin) => plugin.artifact.version), + true + ); + const latestPluginVersion = plugin.allArtifacts.find( + (plugin) => plugin.artifact.version === highestVersion + ); + return _get(latestPluginVersion, 'artifact'); + } + + return _cloneDeep(defaultVersionMap[key]); +} +export const getTemplatesWithAddedInfo = (templates = [], extension = '') => + templates.map((template) => ({ + ...template, + nodeClass: 'plugin-templates', + name: template.pluginTemplate, + pluginName: template.pluginName, + type: extension, + icon: getPluginIcon(template.pluginName), + allArtifacts: [template.artifact], + })); diff --git a/app/cdap/components/shared/CollapsibleSidebar/CollapsibleSidebar.scss b/app/cdap/components/shared/CollapsibleSidebar/CollapsibleSidebar.scss index 6fd05a1e74e..e9d36261ff9 100644 --- a/app/cdap/components/shared/CollapsibleSidebar/CollapsibleSidebar.scss +++ b/app/cdap/components/shared/CollapsibleSidebar/CollapsibleSidebar.scss @@ -20,7 +20,7 @@ $border-radius: 5px; $collapsible-width: 390px; .collapsible-sidebar { - position: absolute; + position: fixed; top: 0; bottom: 0; width: 0; diff --git a/app/cdap/main.js b/app/cdap/main.js index 6f65b6e880c..779b203b5b5 100644 --- a/app/cdap/main.js +++ b/app/cdap/main.js @@ -19,7 +19,7 @@ import 'react-hot-loader/patch'; import './globals'; import { InMemoryCache, IntrospectionFragmentMatcher } from 'apollo-cache-inmemory'; -import React, { Component } from 'react'; +import React, { Component, useState, useEffect } from 'react'; import { Route, Router, Switch } from 'react-router-dom'; import SessionTokenStore, { fetchSessionToken } from 'services/SessionTokenStore'; import { Theme, applyTheme } from 'services/ThemeHelper'; @@ -66,6 +66,7 @@ import { CookieBanner } from 'components/CookieBanner'; // See ./graphql/fragements/README.md import introspectionQueryResultData from '../../graphql/fragments/fragmentTypes.json'; import { TestidProvider } from '@cdap-ui/testids/TestidsProvider'; +import { FooterContext } from 'components/FooterContext'; require('../ui-utils/url-generator'); require('font-awesome-sass-loader!./styles/font-awesome.config.js'); @@ -397,7 +398,7 @@ class CDAP extends Component { ))} )} -
+ {this.props.showFooter &&
}
@@ -408,12 +409,36 @@ class CDAP extends Component { CDAP.propTypes = { children: PropTypes.node, + showFooter: PropTypes.bool, }; +CDAP.defaultProps = { + showFooter: true, +}; + +function CdapWithFooterContext() { + const [show, setShow] = useState(true); + + useEffect(() => { + const appContainer = document.getElementById('app-container'); + if (!show) { + appContainer.classList.add('no-footer'); + } else { + appContainer.classList.remove('no-footer'); + } + }, [show]); + + return ( + + + + ); +} + const RootComp = hot(() => { return ( - } /> + } /> ); }); diff --git a/app/common/cask-shared-components.js b/app/common/cask-shared-components.js index 9a40b3642a6..af60e2b72da 100644 --- a/app/common/cask-shared-components.js +++ b/app/common/cask-shared-components.js @@ -153,6 +153,7 @@ var PreviewErrorClassificationBanner = require('../cdap/components/PipelineDetai .default; var ErrorStageOutline = require('../cdap/components/PipelineDetails/PipelineDetailsTopPanel/PipelineRunErrorDetails/ErrorStageOutline') .default; +var DAGEditor = require('../cdap/components/StudioV2/components/DAGEditor').default; export { TopPanelReact, @@ -264,4 +265,5 @@ export { Connections, PreviewErrorClassificationBanner, ErrorStageOutline, + DAGEditor, }; diff --git a/app/directives/dag-plus/my-dag.js b/app/directives/dag-plus/my-dag.js index 6ee21e3d88a..e239adc8870 100644 --- a/app/directives/dag-plus/my-dag.js +++ b/app/directives/dag-plus/my-dag.js @@ -19,6 +19,8 @@ commonModule.factory('jsPlumb', function ($window) { return $window.jsPlumb; }); +var isNewDagEditor = window.CDAP_CONFIG.featureFlags["studio.new.dag.editor"] === "true"; + commonModule.directive('myDagPlus', function() { return { restrict: 'E', @@ -40,6 +42,9 @@ commonModule.directive('myDagPlus', function() { errorStages: '=' }, link: function(scope, element) { + if (isNewDagEditor) { + return {}; + } scope.element = element; scope.getGraphMargins = function (plugins) { var margins = this.element[0].parentElement.getBoundingClientRect(); @@ -91,8 +96,8 @@ commonModule.directive('myDagPlus', function() { }; }; }, - templateUrl: 'dag-plus/my-dag.html', - controller: 'DAGPlusPlusCtrl', + templateUrl: isNewDagEditor ? 'dag-plus/new-dag.html' : 'dag-plus/my-dag.html', + controller: isNewDagEditor ? 'DAGPlusPlusCtrlV2' : 'DAGPlusPlusCtrl', controllerAs: 'DAGPlusPlusCtrl' }; }); diff --git a/app/directives/dag-plus/new-dag-ctrl.js b/app/directives/dag-plus/new-dag-ctrl.js new file mode 100644 index 00000000000..f35650f19ee --- /dev/null +++ b/app/directives/dag-plus/new-dag-ctrl.js @@ -0,0 +1,1126 @@ +/* + * Copyright © 2025 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +angular.module(PKG.name + '.commons') + .controller('DAGPlusPlusCtrlV2', function MyDAGController(jsPlumb, $scope, $timeout, DAGPlusPlusFactory, GLOBALS, DAGPlusPlusNodesActionsFactory, $window, DAGPlusPlusNodesStore, $rootScope, $modifiedPopover, uuid, DAGPlusPlusNodesDispatcher, NonStorePipelineErrorFactory, AvailablePluginsStore, myHelpers, HydratorPlusPlusCanvasFactory, HydratorPlusPlusConfigStore, HydratorPlusPlusPreviewActions, HydratorPlusPlusPreviewStore) { + + var vm = this; + vm.newDagEditor = () => true; + + vm.updateNode = function (nodeid, config) { + DAGPlusPlusNodesActionsFactory.updateNode(nodeid, config); + } + + var dispatcher = DAGPlusPlusNodesDispatcher.getDispatcher(); + var undoListenerId = dispatcher.register('onUndoActions', resetEndpointsAndConnections); + var redoListenerId = dispatcher.register('onRedoActions', resetEndpointsAndConnections); + + const SHOW_METRICS_THRESHOLD = 0.8; + const separation = $scope.separation || 200; // node separation length + + vm.isDisabled = $scope.isDisabled; + vm.disableNodeClick = $scope.disableNodeClick; + + var metricsPopovers = {}; + var selectedConnections = []; + let conditionNodes = []; + let normalNodes = []; + let splitterNodesPorts = {}; + + vm.pluginsMap = AvailablePluginsStore.getState().plugins.pluginsMap; + vm.adjacencyMap = DAGPlusPlusNodesStore.getAdjacencyMap(); + + vm.scale = 1.0; + vm.panning = { + style: { + 'top': 0, + 'left': 0 + }, + top: 0, + left: 0 + }; + + vm.setCanvasPanning = (top, left) => { + vm.panning.top = top; + vm.panning.left = left; + + vm.panning.style = { + 'top': vm.panning.top + 'px', + 'left': vm.panning.left + 'px' + }; + }; + + vm.onViewportChange = function (viewport) { + vm.scale = viewport.zoom || 1; + vm.setCanvasPanning(viewport.y, viewport.x); + } + + vm.nodeMenuOpen = null; + vm.selectedNode = []; + vm.activePluginToComment = null; + vm.doesStagesHaveComments = false; + + var nodesTimeout, + fitToScreenTimeout, + initTimeout, + metricsPopoverTimeout, + resetTimeout, + highlightSelectedNodeConnectionsTimeout; + + var Mousetrap = window.CaskCommon.Mousetrap; + + vm.checkIfAnyStageHasComment = () => { + const existingStages = DAGPlusPlusNodesStore.getNodes(); + return !_.isEmpty( + existingStages.find( + (node) => + Array.isArray(myHelpers.objectQuery(node, 'information', 'comments', 'list')) && node.information.comments.list.length > 0 + ) + ); + }; + + vm.clearSelectedNodes = () => { + vm.selectedNode = []; + }; + + vm.selectNode = (event, node) => { + if (vm.isDisabled) { return; } + const isMultipleNodesDragged = document.querySelectorAll('.jsplumb-drag-selected'); + const isNodeAlreadyInSelection = vm.selectedNode.find(selectedNode => selectedNode.id === node.id); + event.stopPropagation(); + + /** + * When users selects a bunch of nodes jsplumb adds jsplumb-drag-selected class to the nodes. + * + * After selecting the nodes, the user will click on one of the nodes and drag the selection around the canvas. + * The click on the node shouldn't be considered as node selection. Hence we check if multiple nodes are being + * dragged and if so just repaint instead of clearing out all selection and selecting that particular node. + */ + if (isMultipleNodesDragged && isMultipleNodesDragged.length && isNodeAlreadyInSelection) { + return; + } + + // If user clicks on a node with command/ctrl key pressed, keep adding the nodes the selection. + if (vm.selectionBox.isMultiSelectEnabled) { + vm.selectedNode.push(node); + vm.highlightSelectedNodeConnections(); + } else { + vm.selectedNode = [node]; + clearConnectionsSelection(); + } + }; + + vm.getSelectedNodes = () => vm.selectedNode; + + vm.getSelectedConnections = () => { + const connectionsMap = {}; + $scope.connections.forEach(conn => { + connectionsMap[`${conn.from}###${conn.to}`] = conn; + }); + return selectedConnections + .map(({source, target}) => { + return { + from: source.getAttribute('data-nodeid'), + to: target.getAttribute('data-nodeid'), + }; + }).map(({from, to}) => { + const originalConnection = connectionsMap[`${from}###${to}`]; + if (originalConnection) { + return originalConnection; + } + return {from, to}; + }); + }; + vm.deleteSelectedNodes = () => vm.onKeyboardDelete(); + vm.onPluginContextMenuOpen = (nodeId) => { + const isNodeAlreadySelected = vm.selectedNode.find(n => n.id === nodeId); + if (isNodeAlreadySelected) { + return; + } + const node = DAGPlusPlusNodesStore.getNodes().find(n => n.id === nodeId); + if (!node) { + return; + } + vm.selectedNode = [node]; + clearConnectionsSelection(); + }; + vm.isNodeSelected = (nodeName) => { + if (!vm.selectedNode.length) { + return false; + } + return vm.selectedNode.filter(node => node.id === nodeName).length > 0; + }; + + /** + * Selection is for multi-select nodes/connections in the pipeline. + * + * toggle - + * This flag flips the mode between selection mode and move mode. We basically disable + * dragging for the diagram-container and allow the to take + * over the user selection + * + * isMultiSelectEnabled - + * This flag is used when user clicks on command/ctrl and manually selects + * individual nodes. This is a separate flag as when user selects a node we should + * be able to differentiate between the normal selection (just clicking on a node) + * vs command+click in which case the nodes selection behavior is slightly different. + * The difference should be evident in the vm.selectNodes function + * + * isSelectionInProgress - + * This flag is used to track if the user is currently selecting a bunch of nodes. + * We need this flag to be able to easily go between selecting nodes and then clicking + * on canvas to reset all the selection. This should be more evident in vm.handleCanvasClick + * function. + */ + vm.selectionBox = { + boundaries: ['#diagram-container'], + selectables: ['.box'], + /** + * It makes sense to have the events start -> move -> end to happen + * in linear order. However under rare circumstances (cypress) this can + * be out of order, meaning move gets fired before start event callback + * is fired. The `isSelectionInProgress` is a catch all to make sure no + * matter what the sequence of callback happens it is right. + */ + isSelectionInProgress: false, + toggle: vm.isDisabled ? false : true, + isMultiSelectEnabled: false, + start: () => { + if (!vm.selectionBox.isSelectionInProgress) { + vm.clearSelectedNodes(); + clearConnectionsSelection(); + vm.selectionBox.isSelectionInProgress = true; + } + }, + move: ({selected}) => { + if (!vm.selectionBox.isSelectionInProgress) { + vm.selectionBox.isSelectionInProgress = true; + } + const selectedNodes = $scope.nodes.filter(node => { + if (selected.indexOf(node.id) !== -1) { + return true; + } + return false; + }); + + /** + * This has to be efficient for us to be able to handle large pipelines. + * + * Current implementation: + * + * I/P : nodes selected + * 1. Get selected nodes from selection box. + * 2. Get the adjacency map for the current graph + * 3. Then iterate through selected nodes and for each node get all nodes connected to it from the adjacency map + * 4. In the iteration if both the current selected node and the nodes connected to it are + * in the list of selected nodes then select the connection. This is where we use the + * selectedNodesMap to make a lookup. + * + */ + vm.selectedNode = selectedNodes; + vm.highlightSelectedNodeConnections(); + }, + toggleSelectionMode: () => { + if (!vm.selectionBox.toggle) { + vm.selectionBox.toggle = true; + } else { + vm.selectionBox.toggle = false; + } + } + }; + + const repaintTimeoutsMap = {}; + + vm.pipelineArtifactType = HydratorPlusPlusConfigStore.getAppType(); + + vm.highlightSelectedNodeConnections = () => { + const selectedNodesMap = {}; + vm.selectedNode.forEach(node => selectedNodesMap[node.id] = true); + const adjacencyMap = DAGPlusPlusNodesStore.getAdjacencyMap(); + clearConnectionsSelection(); + vm.selectedNode.forEach(({id, name}) => { + const connectedNodes = adjacencyMap[id]; + if (!Array.isArray(connectedNodes)) { + return; + } + const connectionsFromSource = $scope.connections; + connectedNodes.forEach(nodeId => { + if (!selectedNodesMap[nodeId]) { + return; + } + const connObj = connectionsFromSource.filter(conn => conn.source.getAttribute('data-nodeid') === name && conn.targetId === nodeId); + if (connObj.length) { + connObj.forEach(toggleConnection); + } + }); + }); + }; + + vm.onPipelineContextMenuPaste = ({nodes, connections}) => { + if (!Array.isArray(nodes) || !Array.isArray(connections)) { + return; + } + vm.clearSelectedNodes(); + clearConnectionsSelection(); + let {nodes: newNodes, connections: newConnections} = sanitizeNodesAndConnectionsBeforePaste({nodes, connections}); + vm.selectedNode = newNodes; + newNodes = [...$scope.nodes, ...newNodes]; + newConnections = [...$scope.connections, ...newConnections]; + DAGPlusPlusNodesActionsFactory.createGraphFromConfigOnPaste(newNodes, newConnections); + init(); + $timeout.cancel(highlightSelectedNodeConnectionsTimeout); + highlightSelectedNodeConnectionsTimeout = $timeout(() => vm.highlightSelectedNodeConnections()); + try { + $scope.$digest(); + } catch(e) { + return; + } + }; + + vm.getPluginConfiguration = () => { + if (!vm.selectedNode.length) { + return; + } + return { + stages: this.selectedNode.map((node) => { + return { + id: node.id, + name: node.name, + icon: node.icon, + type: node.type, + outputSchema: node.outputSchema, + plugin: { + name: node.plugin.name, + artifact: node.plugin.artifact, + properties: angular.copy(node.plugin.properties), + label: node.plugin.label, + }, + comments: node.comments, + }; + }) + }; + }; + + function init() { + $scope.nodes = DAGPlusPlusNodesStore.getNodes(); + $scope.connections = DAGPlusPlusNodesStore.getConnections(); + vm.undoStates = DAGPlusPlusNodesStore.getUndoStates(); + vm.redoStates = DAGPlusPlusNodesStore.getRedoStates(); + + if (initTimeout) { + $timeout.cancel(initTimeout); + } + initTimeout = $timeout(function () { + initNodes(); + bindKeyboardEvents(); + + // Process metrics data + if ($scope.showMetrics) { + + angular.forEach($scope.nodes, function (node) { + var elem = angular.element(document.getElementById(node.id || node.name)).children(); + + var scope = $rootScope.$new(); + scope.data = { + node: node + }; + scope.version = node.plugin.artifact.version; + + metricsPopovers[node.name] = { + scope: scope, + element: elem, + popover: null, + isShowing: false + }; + + $scope.$on('$destroy', function () { + elem.remove(); + elem = null; + scope.$destroy(); + }); + + }); + + $scope.$watch('metricsData', function () { + if (Object.keys($scope.metricsData).length === 0) { + angular.forEach(metricsPopovers, function (value) { + value.scope.data.metrics = 0; + }); + } + + angular.forEach($scope.metricsData, function (pluginMetrics, pluginName) { + let metricsToDisplay = {}; + let pluginMetricsKeys = Object.keys(pluginMetrics); + for (let i = 0; i < pluginMetricsKeys.length; i++) { + let pluginMetric = pluginMetricsKeys[i]; + if (typeof pluginMetrics[pluginMetric] === 'object') { + metricsToDisplay[pluginMetric] = _.sum(Object.keys(pluginMetrics[pluginMetric]).map(key => pluginMetrics[pluginMetric][key])); + } else { + metricsToDisplay[pluginMetric] = pluginMetrics[pluginMetric]; + } + } + + metricsPopovers[pluginName].scope.data.metrics = metricsToDisplay; + }); + }, true); + } + vm.doesStagesHaveComments = vm.checkIfAnyStageHasComment(); + }); + + // This is here because the left panel is initially in the minimized mode and expands + // based on user setting on local storage. This is taking more than a single angular digest cycle + // Hence the timeout to 1sec to render it in subsequent digest cycles. + // FIXME: This directive should not be dependent on specific external component to render itself. + // The left panel should default to expanded view and cleaning up the graph and fit to screen should happen in parallel. + fitToScreenTimeout = $timeout(() => { + vm.cleanUpGraph(); + }, 500); + } + + vm.onNodeDelete = function (event, nodes = vm.selectedNode) { + if (event) { + event.stopPropagation(); + } + + const newNodes = angular.copy(nodes); + newNodes.forEach(node => { + DAGPlusPlusNodesActionsFactory.removeNode(node.id); + + if (Object.keys(splitterNodesPorts).indexOf(node.name) !== -1) { + delete splitterNodesPorts[node.name]; + } + let nodeType = node.plugin.type || node.type; + if (nodeType === 'condition') { + conditionNodes = conditionNodes.filter(conditionNode => conditionNode !== node.name); + } else if (nodeType === 'splittertransform' && node.outputSchema && Array.isArray(node.outputSchema)) { + // pass + } else { + normalNodes = normalNodes.filter(normalNode => normalNode !== node.name); + } + + selectedConnections = selectedConnections.filter(function(selectedConnObj) { + return ( + selectedConnObj.source && + selectedConnObj.target && + selectedConnObj.source.id !== node.id && + selectedConnObj.target.id !== node.id + ); + }); + $scope.connections = $scope.connections + .filter(connection => connection.from !== node.id && connection.to !== node.id); + }); + vm.clearSelectedNodes(); + }; + + vm.onKeyboardDelete = function onKeyboardDelete() { + if (vm.selectedNode.length) { + vm.onNodeDelete(null, vm.selectedNode); + } else { + vm.removeSelectedConnections(); + } + }; + + function bindKeyboardEvents() { + Mousetrap.bind(['command+z', 'ctrl+z'], vm.undoActions); + Mousetrap.bind(['command+shift+z', 'ctrl+shift+z'], vm.redoActions); + Mousetrap.bind(['del', 'backspace'], vm.onKeyboardDelete); + Mousetrap.bind(['command+c', 'ctrl+c'], vm.onKeyboardCopy); + + if (vm.isDisabled) { + return; + } + // Toggle between move mode. With spacebar users can move the entire canvas + Mousetrap.bind('space', () => { + $scope.$apply(function() { + vm.selectionBox.toggle = true; + }); + }, 'keyup'); + Mousetrap.bind('space', () => { + $scope.$apply(function() { + vm.selectionBox.toggle = false; + }); + }, 'keydown'); + + // Select all the nodes in the canvas. + Mousetrap.bind('command+a', () => { + const nodes = $scope.nodes; + vm.selectedNode = nodes; + vm.highlightSelectedNodeConnections(); + return false; + }); + + // Select multiple nodes by manually selecting nodes. + Mousetrap.bind('shift', () => { + vm.selectionBox.isMultiSelectEnabled = true; + }, 'keydown'); + Mousetrap.bind('shift', () => { + vm.selectionBox.isMultiSelectEnabled = false; + }, 'keyup'); + } + + function unbindKeyboardEvents() { + Mousetrap.unbind(['command+z', 'ctrl+z']); + Mousetrap.unbind(['command+shift+z', 'ctrl+shift+z']); + Mousetrap.unbind(['command+c', 'ctrl+c']); + Mousetrap.unbind(['del', 'backspace']); + Mousetrap.unbind('shift'); + Mousetrap.unbind('space'); + Mousetrap.unbind('command+a'); + } + + function closeMetricsPopover(node) { + var nodeInfo = metricsPopovers[node.name]; + if (metricsPopoverTimeout) { + $timeout.cancel(metricsPopoverTimeout); + } + if (nodeInfo && nodeInfo.popover) { + nodeInfo.popover.hide(); + nodeInfo.popover.destroy(); + nodeInfo.popover = null; + } + } + + vm.nodeMouseEnter = function (node) { + if (!$scope.showMetrics || vm.scale >= SHOW_METRICS_THRESHOLD) { return; } + + var nodeInfo = metricsPopovers[node.name]; + + if (metricsPopoverTimeout) { + $timeout.cancel(metricsPopoverTimeout); + } + + if (nodeInfo.element && nodeInfo.scope) { + nodeInfo.popover = $modifiedPopover(nodeInfo.element, { + trigger: 'manual', + placement: 'auto right', + target: angular.element(nodeInfo.element[0]), + templateUrl: $scope.metricsPopoverTemplate, + container: 'main', + scope: nodeInfo.scope + }); + nodeInfo.popover.$promise + .then(function () { + + // Needs a timeout here to avoid showing popups instantly when just moving + // cursor across a node + metricsPopoverTimeout = $timeout(function () { + if (nodeInfo.popover && typeof nodeInfo.popover.show === 'function') { + nodeInfo.popover.show(); + } + }, 500); + }); + } + }; + + vm.nodeMouseLeave = function (node) { + if (!$scope.showMetrics || vm.scale >= SHOW_METRICS_THRESHOLD) { return; } + + closeMetricsPopover(node); + }; + + vm.zoomIn = function () { + vm.scale += 0.1; + }; + + vm.zoomOut = function () { + if (vm.scale <= 0.2) { return; } + vm.scale -= 0.1; + }; + + + function initNodes() { + angular.forEach($scope.nodes, function (node) { + const key = generatePluginMapKey(node); + const ispluginsMapAvailable = Object.keys(vm.pluginsMap).length; + // If pluginsMap is not available yet, consider the plugin to be valid until we know otherwise + node.isPluginAvailable = ispluginsMapAvailable ? + Boolean(myHelpers.objectQuery(vm.pluginsMap, key, 'pluginInfo')) : true; + if (node.type === 'condition') { + initConditionNode(node.id); + } else if (node.type === 'splittertransform') { + initSplitterNode(node); + } else { + initNormalNode(node); + } + }); + } + + function initNormalNode(node) { + if (normalNodes.indexOf(node.name) !== -1) { + return; + } + normalNodes.push(node.name); + } + + function initConditionNode(nodeName) { + if (conditionNodes.indexOf(nodeName) !== -1) { + return; + } + conditionNodes.push(nodeName); + } + + function initSplitterNode(node) { + if (!node.outputSchema || !Array.isArray(node.outputSchema) || (Array.isArray(node.outputSchema) && node.outputSchema[0].name === GLOBALS.defaultSchemaName)) { + let splitterPorts = splitterNodesPorts[node.name]; + if (!_.isEmpty(splitterPorts)) { + DAGPlusPlusNodesActionsFactory.setConnections($scope.connections); + delete splitterNodesPorts[node.name]; + } + return; + } + + let newPorts = node.outputSchema + .map(schema => schema.name); + + let splitterPorts = splitterNodesPorts[node.name]; + let portsChanged = !_.isEqual(splitterPorts, newPorts); + + if (!portsChanged) { + return; + } + + DAGPlusPlusNodesActionsFactory.setConnections($scope.connections); + splitterNodesPorts[node.name] = newPorts; + } + + vm.handleCanvasClick = (e) => { + if(vm.selectionBox.isSelectionInProgress) { + vm.selectionBox.isSelectionInProgress = false; + return; + } + if (e) { + const target = e.target; + const isTargetDAGContainer = target.getAttribute('id') === 'dag-container'; + if (!isTargetDAGContainer) { + return; + } + } + if (vm.activePluginToComment) { + vm.activePluginToComment = null; + } + vm.toggleNodeMenu(); + clearConnectionsSelection(); + vm.clearSelectedNodes(); + }; + + vm.addConnection = function(newConn) { + const { source, sourceHandle, target, targetHandle } = newConn; + const connection = { + from: source.id, + to: target.id, + }; + + const sourceType = source.data.pluginNode.type; + /** + * If the connection is from a condition or a splitter transform + * we need information on the source of this connection. For condition + * it could yes/no ports or for the splitter transform it needs to be + * the port name (null/non-null or custom ports) + */ + if (sourceType === 'splitter') { + connection.port = sourceHandle; + } else if (sourceType === 'condition') { + connection.condition = sourceHandle === 'handle-true' ? 'true' : 'false'; + } + $scope.connections.push(connection); + DAGPlusPlusNodesActionsFactory.setConnections($scope.connections); + } + + vm.removeConnection = function (edge, updateStore = true) { + const { source, target } = edge; + if (!source || typeof source !== 'object') { + return; + } + const connectionIndex = _.findIndex($scope.connections, function (conn) { + return conn.from === source.id && conn.to === target.id; + }); + if (connectionIndex !== -1) { + $scope.connections.splice(connectionIndex, 1); + } + if (updateStore !== false) { + DAGPlusPlusNodesActionsFactory.setConnections($scope.connections); + } + $timeout(() => $scope.$apply()); + } + + vm.moveConnection = function(oldEdge, newConn) { + vm.removeConnection(oldEdge); + vm.addConnection(newConn); + } + + vm.removeSelectedConnections = function() { + if (selectedConnections.length === 0 || vm.isDisabled) { return; } + + angular.forEach(selectedConnections, function (selectedConnectionObj) { + removeConnection(selectedConnectionObj, false); + }); + selectedConnections = []; + DAGPlusPlusNodesActionsFactory.setConnections($scope.connections); + }; + + function toggleConnection(connObj) { + if (!connObj) { + return; + } + + if (selectedConnections.indexOf(connObj) === -1) { + selectedConnections.push(connObj); + } else { + selectedConnections.splice(selectedConnections.indexOf(connObj), 1); + } + } + + function clearConnectionsSelection() { + selectedConnections.forEach((conn) => { + const existingTypes = conn.getType(); + if (Array.isArray(existingTypes) && existingTypes.indexOf('selected') !== -1) { + conn.toggleType('selected'); + conn.removeClass('selected-connector'); + } + }); + + selectedConnections = []; + } + + vm.prevalidateConnection = function (connObj) { + // return false if connection already exists, which will prevent the connecton from being formed + const { source, sourceHandle, target, targetHandle } = connObj; + const sourceNode = source.data.pluginNode; + const targetNode = target.data.pluginNode; + + const exists = _.find($scope.connections, function (conn) { + return conn.from === sourceNode.id && conn.to === targetNode.id; + }); + + const sameNode = sourceNode.id === targetNode.id; + + if (exists || sameNode) { + return false; + } + + let valid = true; + NonStorePipelineErrorFactory.connectionIsValid(sourceNode, targetNode, function(invalidConnection) { + if (invalidConnection) { valid = false; } + }); + + return valid; + } + + function resetEndpointsAndConnections() { + if (resetTimeout) { + $timeout.cancel(resetTimeout); + } + + resetTimeout = $timeout(function () { + normalNodes = []; + conditionNodes = []; + splitterNodesPorts = {}; + + $scope.nodes = DAGPlusPlusNodesStore.getNodes(); + $scope.connections = DAGPlusPlusNodesStore.getConnections(); + vm.undoStates = DAGPlusPlusNodesStore.getUndoStates(); + vm.redoStates = DAGPlusPlusNodesStore.getRedoStates(); + initNodes(); + selectedConnections = []; + }); + } + + vm.onPreviewData = function(event, node) { + event.stopPropagation(); + HydratorPlusPlusPreviewStore.dispatch(HydratorPlusPlusPreviewActions.setPreviewData()); + DAGPlusPlusNodesActionsFactory.selectNode(node.name); + }; + + vm.onNodeClick = function(node) { + vm.resetActivePluginForComment(); + closeMetricsPopover(node); + + window.CaskCommon.PipelineMetricsActionCreator.setMetricsTabActive(false); + window.CaskCommon.PipelineMetricsActionCreator.setSelectedPlugin(node.type, node.plugin.name); + DAGPlusPlusNodesActionsFactory.selectNode(node.name); + }; + + vm.onMetricsClick = function(event, node, portName) { + event.stopPropagation(); + if ($scope.disableMetricsClick) { + return; + } + closeMetricsPopover(node); + window.CaskCommon.PipelineMetricsActionCreator.setMetricsTabActive(true, portName); + DAGPlusPlusNodesActionsFactory.selectNode(node.name); + }; + + vm.removeNode = function (node) { + DAGPlusPlusNodesActionsFactory.removeNode(node.id); + if (Object.keys(splitterNodesPorts).indexOf(node.name) !== -1) { + delete splitterNodesPorts[node.name]; + } + let nodeType = node.plugin.type || node.type; + if (nodeType === 'condition') { + conditionNodes = conditionNodes.filter(conditionNode => conditionNode !== node.name); + } else if (nodeType === 'splittertransform' && node.outputSchema && Array.isArray(node.outputSchema)) { + // pass + } else { + normalNodes = normalNodes.filter(normalNode => normalNode !== node.name); + } + $scope.connections = $scope.connections + .filter(connection => connection.from !== node.id && connection.to !== node.id); + } + + vm.cleanUpGraph = function () { + if ($scope.nodes.length === 0) { return; } + + let newConnections = HydratorPlusPlusCanvasFactory.orderConnections($scope.connections, HydratorPlusPlusConfigStore.getAppType() || window.CaskCommon.PipelineDetailStore.getState().artifact.name, $scope.nodes); + let connectionsSwapped = false; + for (let i = 0; i < newConnections.length; i++) { + if (newConnections[i].from !== $scope.connections[i].from || newConnections[i].to !== $scope.connections[i].to) { + connectionsSwapped = true; + break; + } + } + + if (connectionsSwapped) { + $scope.connections = newConnections; + DAGPlusPlusNodesActionsFactory.setConnections($scope.connections); + } + + let graphNodesNetworkSimplex = DAGPlusPlusFactory.getGraphLayout($scope.nodes, $scope.connections, separation)._nodes; + let graphNodesLongestPath = DAGPlusPlusFactory.getGraphLayout($scope.nodes, $scope.connections, separation, 'longest-path')._nodes; + + vm.uiAutoLayout = Date.now(); + angular.forEach($scope.nodes, function (node) { + let locationX = graphNodesNetworkSimplex[node.name].x; + let locationY = graphNodesLongestPath[node.name].y; + node._uiPosition = { + left: locationX - 50 + 'px', + top: locationY + 'px', + }; + node._uiLayoutKey = vm.uiAutoLayout; + }); + + vm.panning.top = 0; + vm.panning.left = 0; + + DAGPlusPlusNodesActionsFactory.resetPluginCount(); + DAGPlusPlusNodesActionsFactory.setCanvasPanning(vm.panning); + }; + + vm.toggleNodeMenu = function (node, event) { + if (event) { + event.preventDefault(); + event.stopPropagation(); + } + + if (!node || vm.nodeMenuOpen === node.name) { + vm.nodeMenuOpen = null; + } else { + vm.nodeMenuOpen = node.name; + vm.selectedNode = [node]; + } + }; + + vm.undoActions = function () { + if (!vm.isDisabled && vm.undoStates.length > 0) { + DAGPlusPlusNodesActionsFactory.undoActions(); + } + }; + + vm.redoActions = function () { + if (!vm.isDisabled && vm.redoStates.length > 0) { + DAGPlusPlusNodesActionsFactory.redoActions(); + } + }; + + vm.shouldShowAlertsPort = (node) => { + let key = generatePluginMapKey(node); + vm.pluginsMap = AvailablePluginsStore.getState().plugins.pluginsMap; + return myHelpers.objectQuery(vm.pluginsMap, key, 'widgets', 'emit-alerts'); + }; + + vm.shouldShowErrorsPort = (node) => { + let key = generatePluginMapKey(node); + vm.pluginsMap = AvailablePluginsStore.getState().plugins.pluginsMap; + return myHelpers.objectQuery(vm.pluginsMap, key, 'widgets', 'emit-errors'); + }; + + vm.onKeyboardCopy = function onKeyboardCopy() { + if (vm.activePluginToComment) { + return; + } + const pluginConfig = vm.getPluginConfiguration(); + if (!pluginConfig) { + return; + } + const stages = pluginConfig.stages; + const connections = vm.getSelectedConnections(); + vm.nodeMenuOpen = null; + window.CaskCommon.Clipboard.copyToClipBoard(JSON.stringify({ + stages, + connections + })); + }; + + // handling node paste + document.body.onpaste = (e) => { + const activeNode = DAGPlusPlusNodesStore.getActiveNodeId(); + const target = myHelpers.objectQuery(e, 'target', 'tagName'); + const INVALID_TAG_NAME = ['INPUT', 'TEXTAREA']; + + if (activeNode || INVALID_TAG_NAME.indexOf(target) !== -1) { + return; + } + + let config; + if (window.clipboardData && window.clipboardData.getData) { + // for IE...... + config = window.clipboardData.getData('Text'); + } else { + config = e.clipboardData.getData('text/plain'); + } + try { + config = JSON.parse(config); + } catch(err) { + console.error('Unable to paste to canvas: '+ err); + } + config.nodes = config.stages; + config.connections = config.connections || []; + delete config.stages; + vm.onPipelineContextMenuPaste(config); + }; + + function sanitizeNodesAndConnectionsBeforePaste(text) { + const sanitize = window.CaskCommon.CDAPHelpers.santizeStringForHTMLID; + try { + let config = {}; + if (typeof text === 'string') { + config = JSON.parse(text); + } else { + config = text; + } + let nodes = myHelpers.objectQuery(config, 'nodes'); + let connections = myHelpers.objectQuery(config, 'connections'); + const oldNameToNewNameMap = {}; + if (!nodes || !Array.isArray(nodes)) { + return; + } + + nodes = nodes.map(node => { + if (!node) { return; } + + // change name + let newName = `${sanitize(node.plugin.label)}`; + const randIndex = Math.floor(Math.random() * 100); + newName = `${newName}${randIndex}`; + let iconConfiguration = {}; + if (!node.icon) { + iconConfiguration = Object.assign({}, { + icon: DAGPlusPlusFactory.getIcon(node.plugin.name) + }); + } + + oldNameToNewNameMap[node.name] = newName; + node.plugin.label = `${node.plugin.label}${randIndex}`; + return Object.assign({}, node, { + name: oldNameToNewNameMap[node.name], + id: oldNameToNewNameMap[node.name] + }, iconConfiguration); + }); + connections = connections.map((connection) => { + const from = connection.from; + const to = connection.to; + return Object.assign({}, connection, { + from: oldNameToNewNameMap[from] || from, + to: oldNameToNewNameMap[to] || to, + }); + }); + /** + * Commenting this out as this introduces a lot of changes behind + * the scenes without the user knowing about it. + * https://issues.cask.co/browse/CDAP-17252 - Will revamp this as part of this change. + */ + /* const newNodes = window.CaskCommon.CDAPHelpers.sanitizeNodeNamesInPluginProperties( + nodes, + AvailablePluginsStore.getState(), + oldNameToNewNameMap + ); + */ + return {nodes , connections}; + } catch (e) { + console.log('error parsing node config', e); + } + } + + // CUSTOM ICONS CONTROL + function generatePluginMapKey(node) { + let plugin = node.plugin; + let type = node.type || plugin.type; + + return `${plugin.name}-${type}-${plugin.artifact.name}-${plugin.artifact.version}-${plugin.artifact.scope}`; + } + + vm.shouldShowCustomIcon = (node) => { + let key = generatePluginMapKey(node); + + let iconSourceType = myHelpers.objectQuery(vm.pluginsMap, key, 'widgets', 'icon', 'type'); + return ['inline', 'link'].indexOf(iconSourceType) !== -1; + }; + + vm.getCustomIconSrc = (node) => { + let key = generatePluginMapKey(node); + let iconSourceType = myHelpers.objectQuery(vm.pluginsMap, key, 'widgets', 'icon', 'type'); + + if (iconSourceType === 'inline') { + return myHelpers.objectQuery(vm.pluginsMap, key, 'widgets', 'icon', 'arguments', 'data'); + } + + return myHelpers.objectQuery(vm.pluginsMap, key, 'widgets', 'icon', 'arguments', 'url'); + }; + + + function initPluginsMap() { + vm.pluginsMap = AvailablePluginsStore.getState().plugins.pluginsMap; + $scope.nodes.forEach(node => { + let key = generatePluginMapKey(node); + // This is to check if the plugin version is a range. If so, mark the plugin + // as available and UI will decide on the specific version while opening the plugin. + if ( + myHelpers.objectQuery(node, 'plugin', 'artifact', 'version') && + node.plugin.artifact.version.indexOf('[') === 0 + ) { + node.isPluginAvailable = true; + } else { + node.isPluginAvailable = Boolean(myHelpers.objectQuery(vm.pluginsMap, key, 'pluginInfo')) ; + } + }); + } + let subAvailablePlugins = AvailablePluginsStore.subscribe(initPluginsMap); + + function cleanupOnDestroy() { + DAGPlusPlusNodesActionsFactory.resetNodesAndConnections(); + DAGPlusPlusNodesStore.reset(); + + if (subAvailablePlugins) { + subAvailablePlugins(); + } + + // Cancelling all timeouts, key bindings and event listeners + Object.keys(repaintTimeoutsMap).forEach((id) => { + $timeout.cancel(repaintTimeoutsMap[id]); + }); + + $timeout.cancel(nodesTimeout); + $timeout.cancel(fitToScreenTimeout); + $timeout.cancel(initTimeout); + $timeout.cancel(metricsPopoverTimeout); + $timeout.cancel(highlightSelectedNodeConnectionsTimeout); + Mousetrap.reset(); + dispatcher.unregister('onUndoActions', undoListenerId); + dispatcher.unregister('onRedoActions', redoListenerId); + + document.body.onpaste = null; + } + + vm.setComments = (nodeId, comments) => { + const existingStages = DAGPlusPlusNodesStore.getNodes(); + DAGPlusPlusNodesStore.setNodes(existingStages.map((stage) => { + if (stage.id === nodeId){ + let updatedInfo = stage.information || {}; + updatedInfo = Object.assign({}, updatedInfo, { + comments: { + list: comments + } + }); + stage = Object.assign({}, stage, { information: updatedInfo }); + } + return stage; + })); + vm.doesStagesHaveComments = vm.checkIfAnyStageHasComment(); + }; + + vm.setPluginActiveForComment = (nodeId) => { + vm.resetActivePluginForComment(nodeId); + if (!nodeId) { + vm.handleCanvasClick(); + } else { + vm.onPluginContextMenuOpen(nodeId); + } + vm.nodeMenuOpen = null; + }; + + vm.resetActivePluginForComment = (nodeId = null) => { + vm.activePluginToComment = nodeId; + }; + + vm.initPipelineComments = () => { + let comments; + if (vm.isDisabled) { + comments = window.CaskCommon.PipelineDetailStore.getState().config.comments; + } else { + comments = HydratorPlusPlusConfigStore.getComments(); + } + vm.pipelineComments = comments; + }; + + vm.setPipelineComments = (comments) => { + if (vm.isDisabled) { + return; + } + HydratorPlusPlusConfigStore.setComments(comments); + vm.pipelineComments = comments; + }; + + $scope.$on('$destroy', cleanupOnDestroy); + vm.initPipelineComments(); + + $scope.$watch('runId', function() { + // Watch for runId change to update pipeline graph with + // corresponding version + if ($scope.runId) { + // prevent duplicated rendering on first time page landing + normalNodes = []; + conditionNodes = []; + splitterNodesPorts = {}; + init(); + vm.initPipelineComments(); + } + }, true); + + init(); + $scope.$watch('nodes', function() { + if (!vm.isDisabled) { + if (nodesTimeout) { + $timeout.cancel(nodesTimeout); + } + nodesTimeout = $timeout(function () { + initNodes(); + }); + } + }, true); + + DAGPlusPlusNodesStore.registerOnChangeListener(function () { + vm.activeNodeId = DAGPlusPlusNodesStore.getActiveNodeId(); + $scope.nodes = DAGPlusPlusNodesStore.getNodes(); + $scope.connections = DAGPlusPlusNodesStore.getConnections(); + //$timeout(() => $scope.$apply()); + + // can do keybindings only if no node is selected + if (!vm.activeNodeId) { + bindKeyboardEvents(); + } else { + unbindKeyboardEvents(); + } + }); + }); diff --git a/app/directives/dag-plus/new-dag.html b/app/directives/dag-plus/new-dag.html new file mode 100644 index 00000000000..43157031425 --- /dev/null +++ b/app/directives/dag-plus/new-dag.html @@ -0,0 +1,61 @@ + + + diff --git a/app/directives/react-components/index.js b/app/directives/react-components/index.js index c483e4a5e72..1edac3b870d 100644 --- a/app/directives/react-components/index.js +++ b/app/directives/react-components/index.js @@ -201,4 +201,7 @@ angular }) .directive('errorStageOutline', function (reactDirective) { return reactDirective(window.CaskCommon.ErrorStageOutline); + }) + .directive('dagEditor', function (reactDirective) { + return reactDirective(window.CaskCommon.DAGEditor); }); diff --git a/app/hydrator/adapters.less b/app/hydrator/adapters.less index 3cd1a4b717d..86482e656eb 100644 --- a/app/hydrator/adapters.less +++ b/app/hydrator/adapters.less @@ -494,7 +494,7 @@ body.theme-cdap { // Overrides for adjusted height with error classification banner body.theme-cdap.with-error-banner.state-hydrator { - my-dag-plus { + .react-version .right-wrapper my-dag-plus { height: ~"-moz-calc(100vh - 190px)"; // Header (50) + toppanel in detailed view (55) + footer (53) + error banner (32) height: ~"-webkit-calc(100vh - 190px)"; height: ~"calc(100vh - 190px)"; @@ -520,4 +520,20 @@ body.theme-cdap.with-error-banner.state-hydrator { .cask-resourcecenter-button { top: 91px; } +} + +body.theme-cdap.with-new-dag-editor.state-hydrator { + background-color: #efefef; + background-image: none; + + &.preview-mode { + background: #e1f0ff; + } +} + +body.theme-cdap.state-hydrator-create.with-new-dag-editor, +body.theme-cdap.state-hydrator-detail.with-new-dag-editor { + footer { + position: fixed; + } } \ No newline at end of file diff --git a/app/services/settings.js b/app/services/settings.js index 79075f1ebd3..1f8ec22cee1 100644 --- a/app/services/settings.js +++ b/app/services/settings.js @@ -49,6 +49,7 @@ angular.module(PKG.name + '.services') * @return {promise} resolved with the response from server */ MyPersistentStorage.prototype.set = function (key, value) { + if (!this.data) this.data = {}; myHelpers.deepSet(this.data, key, value); if (window.CaskCommon.CDAPHelpers.isAuthSetToManagedMode()) { diff --git a/package.json b/package.json index 51fbf3808be..b2b8a658aac 100644 --- a/package.json +++ b/package.json @@ -52,14 +52,16 @@ "@babel/plugin-proposal-export-namespace-from": "7.7.4", "@babel/plugin-proposal-function-sent": "7.7.4", "@babel/plugin-proposal-json-strings": "7.7.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/plugin-proposal-numeric-separator": "7.7.4", "@babel/plugin-proposal-object-rest-spread": "7.7.4", + "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/plugin-proposal-throw-expressions": "7.7.4", "@babel/plugin-syntax-dynamic-import": "7.7.4", "@babel/plugin-syntax-import-meta": "7.7.4", "@babel/plugin-transform-modules-commonjs": "7.7.4", - "@babel/preset-env": "7.7.4", - "@babel/preset-react": "7.7.4", + "@babel/preset-env": "^7.24.7", + "@babel/preset-react": "^7.24.7", "@babel/preset-typescript": "7.7.4", "@babel/runtime": "7.7.4", "@cypress/webpack-preprocessor": "5.4.11", @@ -85,7 +87,7 @@ "autoprefixer": "9.7.3", "babel-eslint": "7.2.3", "babel-jest": "26.6.1", - "babel-loader": "8.0.6", + "babel-loader": "8.2.5", "babel-plugin-lodash": "3.3.4", "babel-upgrade": "1.0.1", "case-sensitive-paths-webpack-plugin": "2.2.0", @@ -281,6 +283,7 @@ "react-timeago": "4.4.0", "react-transition-group": "4.3.0", "react-vis": "1.11.7", + "reactflow": "^11.11.4", "reactstrap": "8.4.0", "redux": "4.0.5", "redux-thunk": "2.3.0", @@ -304,7 +307,9 @@ "yml-loader": "2.1.0" }, "resolutions": { - "**/cypress": "5.6.0" + "**/cypress": "5.6.0", + "@reactflow/**/@types/d3": "7.4.0", + "@types/d3": "link:./node_modules/.cache/null" }, "engines": { "yarn": ">= 1.0.0" diff --git a/server/config/development/cdap.json b/server/config/development/cdap.json index 885fc94be51..eee200ad0d6 100644 --- a/server/config/development/cdap.json +++ b/server/config/development/cdap.json @@ -18,6 +18,7 @@ "feature.lifecycle.management.edit.enabled": "true", "feature.source.control.management.git.enabled": "true", "feature.source.control.management.multi.app.enabled": "true", + "feature.studio.new.dag.editor": "true", "ui.analyticsTag": "", "ui.GTM": "", "hsts.enabled": "false", diff --git a/webpack.config.cdap.dev.js b/webpack.config.cdap.dev.js index dcc7f7bc2d8..53606266d8a 100644 --- a/webpack.config.cdap.dev.js +++ b/webpack.config.cdap.dev.js @@ -69,7 +69,7 @@ const getWebpackDllPlugins = (mode) => { var plugins = [ new CleanWebpackPlugin(cleanOptions), new CaseSensitivePathsPlugin(), - ...getWebpackDllPlugins(mode), + //...getWebpackDllPlugins(mode), new LodashModuleReplacementPlugin({ shorthands: true, collections: true, @@ -166,6 +166,19 @@ var rules = [ ], exclude: loaderExclude, }, + { + test: /node_modules[\/\\]@?reactflow[\/\\].*.js$/, + use: { + loader: 'babel-loader', + options: { + presets: ['@babel/preset-env', "@babel/preset-react"], + plugins: [ + "@babel/plugin-proposal-optional-chaining", + "@babel/plugin-proposal-nullish-coalescing-operator", + ] + } + } + }, { test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, use: [ @@ -214,7 +227,6 @@ var webpackConfig = { path: __dirname + '/packaged/public/cdap_dist/cdap_assets/', publicPath: '/cdap_assets/', pathinfo: false, // added. reduces 0.2~0.3 seconds - hashFunction: 'sha512', }, stats: { assets: false, diff --git a/webpack.config.cdap.dll.js b/webpack.config.cdap.dll.js index fabf3c89525..960be6c6287 100644 --- a/webpack.config.cdap.dll.js +++ b/webpack.config.cdap.dll.js @@ -31,7 +31,6 @@ const getWebpackOutputObj = (mode) => { filename: 'dll.cdap.[name].js', library: 'cdap_[name]', globalObject: 'window', - hashFunction: 'sha512', }; if (mode === 'development') { output.filename = 'dll.cdap.[name].development.js'; diff --git a/webpack.config.cdap.js b/webpack.config.cdap.js index b37869f4ee5..4f1ce290f8b 100644 --- a/webpack.config.cdap.js +++ b/webpack.config.cdap.js @@ -70,7 +70,7 @@ const getWebpackDllPlugins = (mode) => { var plugins = [ new CleanWebpackPlugin(cleanOptions), new CaseSensitivePathsPlugin(), - ...getWebpackDllPlugins(mode), + //...getWebpackDllPlugins(mode), new LodashModuleReplacementPlugin({ shorthands: true, collections: true, @@ -171,6 +171,19 @@ var rules = [ exclude: loaderExclude, include: [path.join(__dirname, 'app'), path.join(__dirname, '.storybook')], }, + { + test: /node_modules[\/\\]@?reactflow[\/\\].*.js$/, + use: { + loader: 'babel-loader', + options: { + presets: ['@babel/preset-env', "@babel/preset-react"], + plugins: [ + "@babel/plugin-proposal-optional-chaining", + "@babel/plugin-proposal-nullish-coalescing-operator", + ] + } + } + }, { test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, use: [ @@ -234,7 +247,6 @@ var webpackConfig = { chunkFilename: '[name].[chunkhash].js', path: __dirname + '/packaged/public/cdap_dist/cdap_assets/', publicPath: '/cdap_assets/', - hashFunction: 'sha512', }, stats: { assets: false, diff --git a/webpack.config.common.js b/webpack.config.common.js index 5cb38f308a7..c8c1e86ff70 100644 --- a/webpack.config.common.js +++ b/webpack.config.common.js @@ -105,6 +105,19 @@ var rules = [ ], exclude: loaderExclude, }, + { + test: /node_modules[\/\\]@?reactflow[\/\\].*.js$/, + use: { + loader: 'babel-loader', + options: { + presets: ['@babel/preset-env', "@babel/preset-react"], + plugins: [ + "@babel/plugin-proposal-optional-chaining", + "@babel/plugin-proposal-nullish-coalescing-operator", + ] + } + } + }, { test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, use: [ @@ -172,7 +185,6 @@ var webpackConfig = { libraryTarget: 'umd', publicPath: '/common_assets/', globalObject: 'window', - hashFunction: 'sha512', }, externals: { react: { diff --git a/webpack.config.login.js b/webpack.config.login.js index 0edda5ff62e..9bfb218913f 100644 --- a/webpack.config.login.js +++ b/webpack.config.login.js @@ -183,7 +183,6 @@ var webpackConfig = { filename: '[name].js', path: __dirname + '/packaged/public/login_dist/login_assets', publicPath: '/login_assets/', - hashFunction: 'sha512', }, plugins: plugins, resolve: { diff --git a/webpack.config.server.js b/webpack.config.server.js index ef757579bde..dd2770357c7 100644 --- a/webpack.config.server.js +++ b/webpack.config.server.js @@ -34,7 +34,6 @@ var webpackConfig = { filename: 'index.js', path: __dirname + '/packaged/server_dist/', publicPath: '/packaged/server_dist/', - hashFunction: 'sha512', }, plugins: [ new CleanWebpackPlugin(cleanOptions), diff --git a/webpack.config.shared.dll.js b/webpack.config.shared.dll.js index ddb421068ae..dae42f3e79d 100644 --- a/webpack.config.shared.dll.js +++ b/webpack.config.shared.dll.js @@ -31,7 +31,6 @@ const getWebpackOutputObj = (mode) => { filename: 'dll.shared.[name].js', library: 'shared_[name]', globalObject: 'window', - hashFunction: 'sha512', }; if (mode === 'development') { output.filename = 'dll.shared.[name].development.js'; diff --git a/yarn.lock b/yarn.lock index bdecfcbb816..27431e9d48e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -145,6 +145,23 @@ dependencies: "@babel/highlight" "^7.14.5" +"@babel/code-frame@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== + dependencies: + "@babel/highlight" "^7.24.7" + picocolors "^1.0.0" + +"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.15.0": version "7.15.0" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" @@ -155,6 +172,16 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.8.tgz#5b783b9808f15cef71547f1b691f34f8ff6003a6" integrity sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.24.8": + version "7.24.9" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.9.tgz#53eee4e68f1c1d0282aa0eb05ddb02d033fc43a0" + integrity sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng== + +"@babel/compat-data@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.5.tgz#df93ac37f4417854130e21d72c66ff3d4b897fc7" + integrity sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg== + "@babel/core@7.12.9": version "7.12.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" @@ -267,6 +294,27 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.24.8": + version "7.24.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.10.tgz#a4ab681ec2a78bbb9ba22a3941195e28a81d8e76" + integrity sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg== + dependencies: + "@babel/types" "^7.24.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" + +"@babel/generator@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.5.tgz#e44d4ab3176bbcaf78a5725da5f1dc28802a9458" + integrity sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw== + dependencies: + "@babel/parser" "^7.26.5" + "@babel/types" "^7.26.5" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + "@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835" @@ -281,13 +329,19 @@ dependencies: "@babel/types" "^7.12.13" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" - integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== +"@babel/helper-annotate-as-pure@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" + integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== dependencies: - "@babel/helper-explode-assignable-expression" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/types" "^7.24.7" + +"@babel/helper-annotate-as-pure@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== + dependencies: + "@babel/types" "^7.25.9" "@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": version "7.15.4" @@ -317,6 +371,28 @@ browserslist "^4.16.6" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.22.6": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz#b607c3161cd9d1744977d4f97139572fe778c271" + integrity sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw== + dependencies: + "@babel/compat-data" "^7.24.8" + "@babel/helper-validator-option" "^7.24.8" + browserslist "^4.23.1" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-compilation-targets@^7.25.9", "@babel/helper-compilation-targets@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8" + integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA== + dependencies: + "@babel/compat-data" "^7.26.5" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.7.4": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.8.tgz#0367bd0a7505156ce018ca464f7ac91ba58c1a04" @@ -340,6 +416,19 @@ "@babel/helper-replace-supers" "^7.15.4" "@babel/helper-split-export-declaration" "^7.15.4" +"@babel/helper-create-class-features-plugin@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83" + integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.25.9" + semver "^6.3.1" + "@babel/helper-create-regexp-features-plugin@^7.12.13": version "7.12.17" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" @@ -356,6 +445,24 @@ "@babel/helper-annotate-as-pure" "^7.14.5" regexpu-core "^4.7.1" +"@babel/helper-create-regexp-features-plugin@^7.18.6": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz#be4f435a80dc2b053c76eeb4b7d16dd22cfc89da" + integrity sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + regexpu-core "^5.3.1" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz#5169756ecbe1d95f7866b90bb555b022595302a0" + integrity sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + regexpu-core "^6.2.0" + semver "^6.3.1" + "@babel/helper-define-polyfill-provider@^0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz#3c2f91b7971b9fc11fe779c945c014065dea340e" @@ -384,12 +491,23 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-explode-assignable-expression@^7.12.13": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" - integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== +"@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== dependencies: - "@babel/types" "^7.13.0" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-environment-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" + integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== + dependencies: + "@babel/types" "^7.24.7" "@babel/helper-explode-assignable-expression@^7.15.4": version "7.15.4" @@ -416,6 +534,14 @@ "@babel/template" "^7.15.4" "@babel/types" "^7.15.4" +"@babel/helper-function-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" + integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== + dependencies: + "@babel/template" "^7.24.7" + "@babel/types" "^7.24.7" + "@babel/helper-get-function-arity@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" @@ -430,14 +556,6 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-hoist-variables@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz#5d5882e855b5c5eda91e0cadc26c6e7a2c8593d8" - integrity sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g== - dependencies: - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - "@babel/helper-hoist-variables@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" @@ -445,6 +563,13 @@ dependencies: "@babel/types" "^7.15.4" +"@babel/helper-hoist-variables@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" + integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== + dependencies: + "@babel/types" "^7.24.7" + "@babel/helper-member-expression-to-functions@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz#6aa4bb678e0f8c22f58cdb79451d30494461b091" @@ -459,7 +584,15 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.7.4": +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== @@ -473,6 +606,14 @@ dependencies: "@babel/types" "^7.15.4" +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.4", "@babel/helper-module-transforms@^7.15.8": version "7.15.8" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz#d8c0e75a87a52e374a8f25f855174786a09498b2" @@ -502,6 +643,15 @@ "@babel/types" "^7.13.0" lodash "^4.17.19" +"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" @@ -516,6 +666,13 @@ dependencies: "@babel/types" "^7.15.4" +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== + dependencies: + "@babel/types" "^7.25.9" + "@babel/helper-plugin-utils@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" @@ -531,14 +688,15 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== -"@babel/helper-remap-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" - integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-wrap-function" "^7.13.0" - "@babel/types" "^7.13.0" +"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" + integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== + +"@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" + integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== "@babel/helper-remap-async-to-generator@^7.14.5", "@babel/helper-remap-async-to-generator@^7.15.4": version "7.15.4" @@ -549,7 +707,16 @@ "@babel/helper-wrap-function" "^7.15.4" "@babel/types" "^7.15.4" -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0": +"@babel/helper-remap-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" + integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-wrap-function" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-replace-supers@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz#6034b7b51943094cb41627848cb219cb02be1d24" integrity sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw== @@ -569,6 +736,15 @@ "@babel/traverse" "^7.15.4" "@babel/types" "^7.15.4" +"@babel/helper-replace-supers@^7.25.9": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d" + integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.26.5" + "@babel/helper-simple-access@^7.12.13", "@babel/helper-simple-access@^7.7.4": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" @@ -583,13 +759,6 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" - integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== - dependencies: - "@babel/types" "^7.12.1" - "@babel/helper-skip-transparent-expression-wrappers@^7.14.5", "@babel/helper-skip-transparent-expression-wrappers@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz#707dbdba1f4ad0fa34f9114fc8197aec7d5da2eb" @@ -597,6 +766,22 @@ dependencies: "@babel/types" "^7.15.4" +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" + integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/helper-split-export-declaration@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" @@ -611,6 +796,23 @@ dependencies: "@babel/types" "^7.15.4" +"@babel/helper-split-export-declaration@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" + integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-string-parser@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + "@babel/helper-validator-identifier@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" @@ -626,6 +828,16 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== +"@babel/helper-validator-identifier@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + "@babel/helper-validator-option@^7.12.17": version "7.12.17" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" @@ -636,15 +848,15 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== -"@babel/helper-wrap-function@^7.13.0", "@babel/helper-wrap-function@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" - integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" +"@babel/helper-validator-option@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" + integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== + +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== "@babel/helper-wrap-function@^7.15.4": version "7.15.4" @@ -656,6 +868,25 @@ "@babel/traverse" "^7.15.4" "@babel/types" "^7.15.4" +"@babel/helper-wrap-function@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" + integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== + dependencies: + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-wrap-function@^7.7.4": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" + integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== + dependencies: + "@babel/helper-function-name" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + "@babel/helpers@^7.12.5", "@babel/helpers@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43" @@ -692,6 +923,16 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== + dependencies: + "@babel/helper-validator-identifier" "^7.24.7" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.4", "@babel/parser@^7.7.4": version "7.13.9" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.9.tgz#ca34cb95e1c2dd126863a84465ae8ef66114be99" @@ -707,6 +948,40 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.5.tgz#d33a58ca69facc05b26adfe4abebfed56c1c2dac" integrity sha512-2hQstc6I7T6tQsWzlboMh3SgMRPaS4H6H7cPQsJkdzTzEGqQrpLDsE2BGASU5sBPoEQyHzeqU6C8uKbFeEk6sg== +"@babel/parser@^7.24.7", "@babel/parser@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.8.tgz#58a4dbbcad7eb1d48930524a3fd93d93e9084c6f" + integrity sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w== + +"@babel/parser@^7.25.9", "@babel/parser@^7.26.5", "@babel/parser@^7.26.7": + version "7.26.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.7.tgz#e114cd099e5f7d17b05368678da0fb9f69b3385c" + integrity sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w== + dependencies: + "@babel/types" "^7.26.7" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" + integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" + integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" + integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz#dbdeabb1e80f622d9f0b583efb2999605e0a567e" @@ -716,6 +991,23 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" "@babel/plugin-proposal-optional-chaining" "^7.14.5" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" + integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" + integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/plugin-proposal-async-generator-functions@^7.15.8": version "7.15.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz#a3100f785fab4357987c4223ab1b02b599048403" @@ -725,15 +1017,6 @@ "@babel/helper-remap-async-to-generator" "^7.15.4" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-async-generator-functions@^7.7.4": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz#87aacb574b3bc4b5603f6fe41458d72a5a2ec4b1" - integrity sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-proposal-class-properties@7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz#2f964f0cb18b948450362742e33e15211e77c2ba" @@ -785,14 +1068,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-dynamic-import@^7.7.4": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d" - integrity sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-export-default-from@^7.12.1": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.14.5.tgz#8931a6560632c650f92a8e5948f6e73019d6d321" @@ -842,14 +1117,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.7.4": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" - integrity sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-proposal-logical-assignment-operators@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" @@ -866,6 +1133,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-numeric-separator@7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.7.4.tgz#7819a17445f4197bb9575e5750ed349776da858a" @@ -910,17 +1185,6 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.15.4" -"@babel/plugin-proposal-object-rest-spread@^7.7.4": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" - integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== - dependencies: - "@babel/compat-data" "^7.13.8" - "@babel/helper-compilation-targets" "^7.13.8" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.13.0" - "@babel/plugin-proposal-optional-catch-binding@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" @@ -929,14 +1193,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-catch-binding@^7.7.4": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" - integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining@^7.12.7", "@babel/plugin-proposal-optional-chaining@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" @@ -946,6 +1202,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" +"@babel/plugin-proposal-optional-chaining@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" @@ -954,6 +1219,11 @@ "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + "@babel/plugin-proposal-private-property-in-object@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz#55c5e3b4d0261fd44fe637e3f624cfb0f484e3e5" @@ -980,7 +1250,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.7.4": +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== @@ -988,7 +1258,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-async-generators@^7.7.4", "@babel/plugin-syntax-async-generators@^7.8.4": +"@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== @@ -1037,7 +1307,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-dynamic-import@^7.7.4", "@babel/plugin-syntax-dynamic-import@^7.8.3": +"@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== @@ -1072,6 +1342,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" +"@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" + integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-import-attributes@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-import-meta@7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.7.4.tgz#3e9e4630780df5885b801f53c5f68d75e99e5261" @@ -1100,13 +1384,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-jsx@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" - integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-jsx@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201" @@ -1114,6 +1391,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" + integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -1142,7 +1426,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.7.4", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== @@ -1177,7 +1461,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-top-level-await@^7.7.4", "@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-top-level-await@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== @@ -1198,6 +1482,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" @@ -1205,12 +1497,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" - integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== +"@babel/plugin-transform-arrow-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-async-generator-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz#1b18530b077d18a407c494eb3d1d72da505283a2" + integrity sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.25.9" "@babel/plugin-transform-async-to-generator@^7.14.5": version "7.14.5" @@ -1221,14 +1522,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-remap-async-to-generator" "^7.14.5" -"@babel/plugin-transform-async-to-generator@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" - integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== +"@babel/plugin-transform-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" "@babel/plugin-transform-block-scoped-functions@^7.14.5": version "7.14.5" @@ -1237,12 +1538,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-block-scoped-functions@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" - integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== +"@babel/plugin-transform-block-scoped-functions@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz#3dc4405d31ad1cbe45293aa57205a6e3b009d53e" + integrity sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.26.5" "@babel/plugin-transform-block-scoping@^7.12.12", "@babel/plugin-transform-block-scoping@^7.15.3": version "7.15.3" @@ -1251,12 +1552,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-block-scoping@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" - integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== +"@babel/plugin-transform-block-scoping@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" + integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-class-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-class-static-block@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" + integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.15.4": version "7.15.4" @@ -1271,17 +1588,16 @@ "@babel/helper-split-export-declaration" "^7.15.4" globals "^11.1.0" -"@babel/plugin-transform-classes@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" - integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== +"@babel/plugin-transform-classes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.13.0" - "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.14.5": @@ -1291,12 +1607,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-computed-properties@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" - integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== +"@babel/plugin-transform-computed-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" "@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.14.7": version "7.14.7" @@ -1305,12 +1622,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-destructuring@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz#c5dce270014d4e1ebb1d806116694c12b7028963" - integrity sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA== +"@babel/plugin-transform-destructuring@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-dotall-regex@^7.14.5": version "7.14.5" @@ -1320,7 +1637,15 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.7.4": +"@babel/plugin-transform-dotall-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" + integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-dotall-regex@^7.4.4": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== @@ -1335,12 +1660,27 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-duplicate-keys@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" - integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== +"@babel/plugin-transform-duplicate-keys@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" + integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" + integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-dynamic-import@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" + integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-exponentiation-operator@^7.14.5": version "7.14.5" @@ -1350,13 +1690,19 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-exponentiation-operator@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" - integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== +"@babel/plugin-transform-exponentiation-operator@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" + integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-export-namespace-from@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" + integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-flow-strip-types@^7.14.5": version "7.14.5" @@ -1373,12 +1719,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-for-of@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" - integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== +"@babel/plugin-transform-for-of@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755" + integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" "@babel/plugin-transform-function-name@^7.14.5": version "7.14.5" @@ -1388,13 +1735,21 @@ "@babel/helper-function-name" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-function-name@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" - integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== +"@babel/plugin-transform-function-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-json-strings@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" + integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-literals@^7.14.5": version "7.14.5" @@ -1403,12 +1758,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-literals@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" - integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== +"@babel/plugin-transform-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-logical-assignment-operators@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-member-expression-literals@^7.14.5": version "7.14.5" @@ -1417,12 +1779,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-member-expression-literals@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" - integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== +"@babel/plugin-transform-member-expression-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" + integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-modules-amd@^7.14.5": version "7.14.5" @@ -1433,14 +1795,13 @@ "@babel/helper-plugin-utils" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-amd@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3" - integrity sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ== +"@babel/plugin-transform-modules-amd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" + integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-modules-commonjs@7.7.4": version "7.7.4" @@ -1462,15 +1823,13 @@ "@babel/helper-simple-access" "^7.15.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.7.4": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" - integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== +"@babel/plugin-transform-modules-commonjs@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" + integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-simple-access" "^7.12.13" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-modules-systemjs@^7.15.4": version "7.15.4" @@ -1483,16 +1842,15 @@ "@babel/helper-validator-identifier" "^7.14.9" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.7.4": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" - integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== +"@babel/plugin-transform-modules-systemjs@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" + integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== dependencies: - "@babel/helper-hoist-variables" "^7.13.0" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-identifier" "^7.12.11" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" "@babel/plugin-transform-modules-umd@^7.14.5": version "7.14.5" @@ -1502,13 +1860,13 @@ "@babel/helper-module-transforms" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-modules-umd@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" - integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== +"@babel/plugin-transform-modules-umd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" + integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-named-capturing-groups-regex@^7.14.9": version "7.14.9" @@ -1517,12 +1875,13 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.14.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" - integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-new-target@^7.14.5": version "7.14.5" @@ -1531,12 +1890,35 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-new-target@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" - integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== +"@babel/plugin-transform-new-target@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" + integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.26.6": + version "7.26.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz#fbf6b3c92cb509e7b319ee46e3da89c5bedd31fe" + integrity sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-numeric-separator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-object-rest-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" "@babel/plugin-transform-object-super@^7.14.5": version "7.14.5" @@ -1546,13 +1928,28 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-replace-supers" "^7.14.5" -"@babel/plugin-transform-object-super@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" - integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== +"@babel/plugin-transform-object-super@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" + integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + +"@babel/plugin-transform-optional-catch-binding@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" "@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.15.4": version "7.15.4" @@ -1561,12 +1958,29 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-parameters@^7.13.0", "@babel/plugin-transform-parameters@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" - integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== +"@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-private-methods@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-private-property-in-object@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-property-literals@^7.14.5": version "7.14.5" @@ -1575,12 +1989,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" - integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== +"@babel/plugin-transform-property-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" + integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-react-display-name@^7.14.5": version "7.15.1" @@ -1589,12 +2003,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-react-display-name@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz#c28effd771b276f4647411c9733dbb2d2da954bd" - integrity sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA== +"@babel/plugin-transform-react-display-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz#4b79746b59efa1f38c8695065a92a9f5afb24f7d" + integrity sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-react-jsx-development@^7.14.5": version "7.14.5" @@ -1603,19 +2017,12 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.14.5" -"@babel/plugin-transform-react-jsx-self@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz#422d99d122d592acab9c35ea22a6cfd9bf189f60" - integrity sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-react-jsx-source@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.13.tgz#051d76126bee5c9a6aa3ba37be2f6c1698856bcb" - integrity sha512-O5JJi6fyfih0WfDgIJXksSPhGP/G0fQpfxYy87sDc+1sFmsCS6wr3aAn+whbzkhbjtq4VMqLRaSzR6IsshIC0Q== +"@babel/plugin-transform-react-jsx-development@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz#8fd220a77dd139c07e25225a903b8be8c829e0d7" + integrity sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-react-jsx" "^7.25.9" "@babel/plugin-transform-react-jsx@^7.12.12", "@babel/plugin-transform-react-jsx@^7.14.5": version "7.14.9" @@ -1628,16 +2035,16 @@ "@babel/plugin-syntax-jsx" "^7.14.5" "@babel/types" "^7.14.9" -"@babel/plugin-transform-react-jsx@^7.7.4": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.17.tgz#dd2c1299f5e26de584939892de3cfc1807a38f24" - integrity sha512-mwaVNcXV+l6qJOuRhpdTEj8sT/Z0owAVWf9QujTZ0d2ye9X/K+MTOTSizcgKOj18PGnTc/7g1I4+cIUjsKhBcw== +"@babel/plugin-transform-react-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz#06367940d8325b36edff5e2b9cbe782947ca4166" + integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/types" "^7.12.17" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/types" "^7.25.9" "@babel/plugin-transform-react-pure-annotations@^7.14.5": version "7.14.5" @@ -1647,6 +2054,14 @@ "@babel/helper-annotate-as-pure" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-react-pure-annotations@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz#ea1c11b2f9dbb8e2d97025f43a3b5bc47e18ae62" + integrity sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-regenerator@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" @@ -1654,12 +2069,21 @@ dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-regenerator@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz#b628bcc9c85260ac1aeb05b45bde25210194a2f5" - integrity sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA== +"@babel/plugin-transform-regenerator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" + integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== dependencies: - regenerator-transform "^0.14.2" + "@babel/helper-plugin-utils" "^7.25.9" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-regexp-modifiers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" + integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-reserved-words@^7.14.5": version "7.14.5" @@ -1668,12 +2092,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-reserved-words@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" - integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== +"@babel/plugin-transform-reserved-words@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" + integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.14.5": version "7.14.5" @@ -1682,12 +2106,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-shorthand-properties@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" - integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== +"@babel/plugin-transform-shorthand-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.15.8": version "7.15.8" @@ -1697,13 +2121,13 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" -"@babel/plugin-transform-spread@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" - integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== +"@babel/plugin-transform-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" "@babel/plugin-transform-sticky-regex@^7.14.5": version "7.14.5" @@ -1712,12 +2136,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-sticky-regex@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" - integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== +"@babel/plugin-transform-sticky-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.14.5": version "7.14.5" @@ -1726,12 +2150,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-template-literals@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" - integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== +"@babel/plugin-transform-template-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz#6dbd4a24e8fad024df76d1fac6a03cf413f60fe1" + integrity sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-typeof-symbol@^7.14.5": version "7.14.5" @@ -1740,12 +2164,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-typeof-symbol@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" - integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== +"@babel/plugin-transform-typeof-symbol@^7.26.7": + version "7.26.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz#d0e33acd9223744c1e857dbd6fa17bd0a3786937" + integrity sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.26.5" "@babel/plugin-transform-typescript@^7.15.0": version "7.15.8" @@ -1772,6 +2196,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-unicode-escapes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" + integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-property-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" + integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-unicode-regex@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" @@ -1780,13 +2219,21 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-unicode-regex@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" - integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== +"@babel/plugin-transform-unicode-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-sets-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" + integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/polyfill@7.0.0": version "7.0.0" @@ -1804,63 +2251,6 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" -"@babel/preset-env@7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.4.tgz#ccaf309ae8d1ee2409c85a4e2b5e280ceee830f8" - integrity sha512-Dg+ciGJjwvC1NIe/DGblMbcGq1HOtKbw8RLl4nIjlfcILKEOkWT/vRqPpumswABEBVudii6dnVwrBtzD7ibm4g== - dependencies: - "@babel/helper-module-imports" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.7.4" - "@babel/plugin-proposal-dynamic-import" "^7.7.4" - "@babel/plugin-proposal-json-strings" "^7.7.4" - "@babel/plugin-proposal-object-rest-spread" "^7.7.4" - "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" - "@babel/plugin-proposal-unicode-property-regex" "^7.7.4" - "@babel/plugin-syntax-async-generators" "^7.7.4" - "@babel/plugin-syntax-dynamic-import" "^7.7.4" - "@babel/plugin-syntax-json-strings" "^7.7.4" - "@babel/plugin-syntax-object-rest-spread" "^7.7.4" - "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" - "@babel/plugin-syntax-top-level-await" "^7.7.4" - "@babel/plugin-transform-arrow-functions" "^7.7.4" - "@babel/plugin-transform-async-to-generator" "^7.7.4" - "@babel/plugin-transform-block-scoped-functions" "^7.7.4" - "@babel/plugin-transform-block-scoping" "^7.7.4" - "@babel/plugin-transform-classes" "^7.7.4" - "@babel/plugin-transform-computed-properties" "^7.7.4" - "@babel/plugin-transform-destructuring" "^7.7.4" - "@babel/plugin-transform-dotall-regex" "^7.7.4" - "@babel/plugin-transform-duplicate-keys" "^7.7.4" - "@babel/plugin-transform-exponentiation-operator" "^7.7.4" - "@babel/plugin-transform-for-of" "^7.7.4" - "@babel/plugin-transform-function-name" "^7.7.4" - "@babel/plugin-transform-literals" "^7.7.4" - "@babel/plugin-transform-member-expression-literals" "^7.7.4" - "@babel/plugin-transform-modules-amd" "^7.7.4" - "@babel/plugin-transform-modules-commonjs" "^7.7.4" - "@babel/plugin-transform-modules-systemjs" "^7.7.4" - "@babel/plugin-transform-modules-umd" "^7.7.4" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" - "@babel/plugin-transform-new-target" "^7.7.4" - "@babel/plugin-transform-object-super" "^7.7.4" - "@babel/plugin-transform-parameters" "^7.7.4" - "@babel/plugin-transform-property-literals" "^7.7.4" - "@babel/plugin-transform-regenerator" "^7.7.4" - "@babel/plugin-transform-reserved-words" "^7.7.4" - "@babel/plugin-transform-shorthand-properties" "^7.7.4" - "@babel/plugin-transform-spread" "^7.7.4" - "@babel/plugin-transform-sticky-regex" "^7.7.4" - "@babel/plugin-transform-template-literals" "^7.7.4" - "@babel/plugin-transform-typeof-symbol" "^7.7.4" - "@babel/plugin-transform-unicode-regex" "^7.7.4" - "@babel/types" "^7.7.4" - browserslist "^4.6.0" - core-js-compat "^3.1.1" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.5.0" - "@babel/preset-env@^7.12.11": version "7.15.8" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.8.tgz#f527ce5bcb121cd199f6b502bf23e420b3ff8dba" @@ -1940,6 +2330,81 @@ core-js-compat "^3.16.0" semver "^6.3.0" +"@babel/preset-env@^7.24.7": + version "7.26.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.7.tgz#24d38e211f4570b8d806337035cc3ae798e0c36d" + integrity sha512-Ycg2tnXwixaXOVb29rana8HNPgLVBof8qqtNQ9LE22IoyZboQbGSxI6ZySMdW3K5nAe6gu35IaJefUJflhUFTQ== + dependencies: + "@babel/compat-data" "^7.26.5" + "@babel/helper-compilation-targets" "^7.26.5" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/plugin-syntax-import-attributes" "^7.26.0" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.25.9" + "@babel/plugin-transform-async-generator-functions" "^7.25.9" + "@babel/plugin-transform-async-to-generator" "^7.25.9" + "@babel/plugin-transform-block-scoped-functions" "^7.26.5" + "@babel/plugin-transform-block-scoping" "^7.25.9" + "@babel/plugin-transform-class-properties" "^7.25.9" + "@babel/plugin-transform-class-static-block" "^7.26.0" + "@babel/plugin-transform-classes" "^7.25.9" + "@babel/plugin-transform-computed-properties" "^7.25.9" + "@babel/plugin-transform-destructuring" "^7.25.9" + "@babel/plugin-transform-dotall-regex" "^7.25.9" + "@babel/plugin-transform-duplicate-keys" "^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-dynamic-import" "^7.25.9" + "@babel/plugin-transform-exponentiation-operator" "^7.26.3" + "@babel/plugin-transform-export-namespace-from" "^7.25.9" + "@babel/plugin-transform-for-of" "^7.25.9" + "@babel/plugin-transform-function-name" "^7.25.9" + "@babel/plugin-transform-json-strings" "^7.25.9" + "@babel/plugin-transform-literals" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" + "@babel/plugin-transform-member-expression-literals" "^7.25.9" + "@babel/plugin-transform-modules-amd" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.26.3" + "@babel/plugin-transform-modules-systemjs" "^7.25.9" + "@babel/plugin-transform-modules-umd" "^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-new-target" "^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.26.6" + "@babel/plugin-transform-numeric-separator" "^7.25.9" + "@babel/plugin-transform-object-rest-spread" "^7.25.9" + "@babel/plugin-transform-object-super" "^7.25.9" + "@babel/plugin-transform-optional-catch-binding" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/plugin-transform-private-methods" "^7.25.9" + "@babel/plugin-transform-private-property-in-object" "^7.25.9" + "@babel/plugin-transform-property-literals" "^7.25.9" + "@babel/plugin-transform-regenerator" "^7.25.9" + "@babel/plugin-transform-regexp-modifiers" "^7.26.0" + "@babel/plugin-transform-reserved-words" "^7.25.9" + "@babel/plugin-transform-shorthand-properties" "^7.25.9" + "@babel/plugin-transform-spread" "^7.25.9" + "@babel/plugin-transform-sticky-regex" "^7.25.9" + "@babel/plugin-transform-template-literals" "^7.25.9" + "@babel/plugin-transform-typeof-symbol" "^7.26.7" + "@babel/plugin-transform-unicode-escapes" "^7.25.9" + "@babel/plugin-transform-unicode-property-regex" "^7.25.9" + "@babel/plugin-transform-unicode-regex" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.38.1" + semver "^6.3.1" + "@babel/preset-flow@^7.12.1": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.14.5.tgz#a1810b0780c8b48ab0bece8e7ab8d0d37712751c" @@ -1949,6 +2414,15 @@ "@babel/helper-validator-option" "^7.14.5" "@babel/plugin-transform-flow-strip-types" "^7.14.5" +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + "@babel/preset-modules@^0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" @@ -1960,17 +2434,6 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.7.4.tgz#3fe2ea698d8fb536d8e7881a592c3c1ee8bf5707" - integrity sha512-j+vZtg0/8pQr1H8wKoaJyGL2IEk3rG/GIvua7Sec7meXVIvGycihlGMx5xcU00kqCJbwzHs18xTu3YfREOqQ+g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.7.4" - "@babel/plugin-transform-react-jsx" "^7.7.4" - "@babel/plugin-transform-react-jsx-self" "^7.7.4" - "@babel/plugin-transform-react-jsx-source" "^7.7.4" - "@babel/preset-react@^7.12.10": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz#0fbb769513f899c2c56f3a882fa79673c2d4ab3c" @@ -1983,6 +2446,18 @@ "@babel/plugin-transform-react-jsx-development" "^7.14.5" "@babel/plugin-transform-react-pure-annotations" "^7.14.5" +"@babel/preset-react@^7.24.7": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.26.3.tgz#7c5e028d623b4683c1f83a0bd4713b9100560caa" + integrity sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-transform-react-display-name" "^7.25.9" + "@babel/plugin-transform-react-jsx" "^7.25.9" + "@babel/plugin-transform-react-jsx-development" "^7.25.9" + "@babel/plugin-transform-react-pure-annotations" "^7.25.9" + "@babel/preset-typescript@7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.7.4.tgz#780059a78e6fa7f7a4c87f027292a86b31ce080a" @@ -2011,6 +2486,11 @@ pirates "^4.0.0" source-map-support "^0.5.16" +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + "@babel/runtime-corejs3@^7.10.2": version "7.13.9" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.13.9.tgz#b2fa9a6e5690ef8d4c4f2d30cac3ec1a8bb633ce" @@ -2063,6 +2543,24 @@ "@babel/parser" "^7.15.4" "@babel/types" "^7.15.4" +"@babel/template@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" + integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/template@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.7.4": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" @@ -2093,7 +2591,36 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.17", "@babel/types@^7.13.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.4": +"@babel/traverse@^7.24.7": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.8.tgz#6c14ed5232b7549df3371d820fbd9abfcd7dfab7" + integrity sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.24.8" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-hoist-variables" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + "@babel/parser" "^7.24.8" + "@babel/types" "^7.24.8" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.5": + version "7.26.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.7.tgz#99a0a136f6a75e7fb8b0a1ace421e0b25994b8bb" + integrity sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.5" + "@babel/parser" "^7.26.7" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.7" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.4": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA== @@ -2118,6 +2645,23 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" +"@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.24.9": + version "7.24.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.9.tgz#228ce953d7b0d16646e755acf204f4cf3d08cc73" + integrity sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ== + dependencies: + "@babel/helper-string-parser" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + to-fast-properties "^2.0.0" + +"@babel/types@^7.25.9", "@babel/types@^7.26.5", "@babel/types@^7.26.7": + version "7.26.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.7.tgz#5e2b89c0768e874d4d061961f3a5a153d71dc17a" + integrity sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@base2/pretty-print-object@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.0.tgz#860ce718b0b73f4009e153541faff2cb6b85d047" @@ -2708,6 +3252,38 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@material-ui/core@^4.12.3": version "4.12.3" resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.12.3.tgz#80d665caf0f1f034e52355c5450c0e38b099d3ca" @@ -2964,6 +3540,72 @@ prop-types "^15.6.1" react-lifecycles-compat "^3.0.4" +"@reactflow/background@11.3.14": + version "11.3.14" + resolved "https://registry.yarnpkg.com/@reactflow/background/-/background-11.3.14.tgz#778ca30174f3de77fc321459ab3789e66e71a699" + integrity sha512-Gewd7blEVT5Lh6jqrvOgd4G6Qk17eGKQfsDXgyRSqM+CTwDqRldG2LsWN4sNeno6sbqVIC2fZ+rAUBFA9ZEUDA== + dependencies: + "@reactflow/core" "11.11.4" + classcat "^5.0.3" + zustand "^4.4.1" + +"@reactflow/controls@11.2.14": + version "11.2.14" + resolved "https://registry.yarnpkg.com/@reactflow/controls/-/controls-11.2.14.tgz#508ed2c40d23341b3b0919dd11e76fd49cf850c7" + integrity sha512-MiJp5VldFD7FrqaBNIrQ85dxChrG6ivuZ+dcFhPQUwOK3HfYgX2RHdBua+gx+40p5Vw5It3dVNp/my4Z3jF0dw== + dependencies: + "@reactflow/core" "11.11.4" + classcat "^5.0.3" + zustand "^4.4.1" + +"@reactflow/core@11.11.4": + version "11.11.4" + resolved "https://registry.yarnpkg.com/@reactflow/core/-/core-11.11.4.tgz#89bd86d1862aa1416f3f49926cede7e8c2aab6a7" + integrity sha512-H4vODklsjAq3AMq6Np4LE12i1I4Ta9PrDHuBR9GmL8uzTt2l2jh4CiQbEMpvMDcp7xi4be0hgXj+Ysodde/i7Q== + 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.4.1" + +"@reactflow/minimap@11.7.14": + version "11.7.14" + resolved "https://registry.yarnpkg.com/@reactflow/minimap/-/minimap-11.7.14.tgz#298d7a63cb1da06b2518c99744f716560c88ca73" + integrity sha512-mpwLKKrEAofgFJdkhwR5UQ1JYWlcAAL/ZU/bctBkuNTT1yqV+y0buoNVImsRehVYhJwffSWeSHaBR5/GJjlCSQ== + dependencies: + "@reactflow/core" "11.11.4" + "@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.4.1" + +"@reactflow/node-resizer@2.2.14": + version "2.2.14" + resolved "https://registry.yarnpkg.com/@reactflow/node-resizer/-/node-resizer-2.2.14.tgz#1810c0ce51aeb936f179466a6660d1e02c7a77a8" + integrity sha512-fwqnks83jUlYr6OHcdFEedumWKChTHRGw/kbCxj0oqBd+ekfs+SIp4ddyNU0pdx96JIm5iNFS0oNrmEiJbbSaA== + dependencies: + "@reactflow/core" "11.11.4" + classcat "^5.0.4" + d3-drag "^3.0.0" + d3-selection "^3.0.0" + zustand "^4.4.1" + +"@reactflow/node-toolbar@1.3.14": + version "1.3.14" + resolved "https://registry.yarnpkg.com/@reactflow/node-toolbar/-/node-toolbar-1.3.14.tgz#c6ffc76f82acacdce654f2160dc9852162d6e7c9" + integrity sha512-rbynXQnH/xFNu4P9H+hVqlEUafDCkEoCy0Dg9mG22Sg+rY/0ck6KkrAQrYrTgXusd+cEJOMK0uOOFCK2/5rSGQ== + dependencies: + "@reactflow/core" "11.11.4" + classcat "^5.0.3" + zustand "^4.4.1" + "@reduxjs/toolkit@^1.7.1": version "1.7.1" resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.7.1.tgz#994962aeb7df3c77be343dd2ad1aa48221dbaa0c" @@ -4096,6 +4738,224 @@ resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.10.tgz#61cc8469849e5bcdd0c7044122265c39cec10cf4" integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ== +"@types/d3-array@*": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-3.2.1.tgz#1f6658e3d2006c4fceac53fde464166859f8b8c5" + integrity sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg== + +"@types/d3-axis@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-axis/-/d3-axis-3.0.6.tgz#e760e5765b8188b1defa32bc8bb6062f81e4c795" + integrity sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-brush@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-brush/-/d3-brush-3.0.6.tgz#c2f4362b045d472e1b186cdbec329ba52bdaee6c" + integrity sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-chord@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-chord/-/d3-chord-3.0.6.tgz#1706ca40cf7ea59a0add8f4456efff8f8775793d" + integrity sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg== + +"@types/d3-color@*": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-3.1.3.tgz#368c961a18de721da8200e80bf3943fb53136af2" + integrity sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A== + +"@types/d3-contour@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-contour/-/d3-contour-3.0.6.tgz#9ada3fa9c4d00e3a5093fed0356c7ab929604231" + integrity sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg== + dependencies: + "@types/d3-array" "*" + "@types/geojson" "*" + +"@types/d3-delaunay@*": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz#185c1a80cc807fdda2a3fe960f7c11c4a27952e1" + integrity sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw== + +"@types/d3-dispatch@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz#096efdf55eb97480e3f5621ff9a8da552f0961e7" + integrity sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ== + +"@types/d3-drag@*", "@types/d3-drag@^3.0.1": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/d3-drag/-/d3-drag-3.0.7.tgz#b13aba8b2442b4068c9a9e6d1d82f8bcea77fc02" + integrity sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-dsv@*": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/d3-dsv/-/d3-dsv-3.0.7.tgz#0a351f996dc99b37f4fa58b492c2d1c04e3dac17" + integrity sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g== + +"@types/d3-ease@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/d3-ease/-/d3-ease-3.0.2.tgz#e28db1bfbfa617076f7770dd1d9a48eaa3b6c51b" + integrity sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA== + +"@types/d3-fetch@*": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/d3-fetch/-/d3-fetch-3.0.7.tgz#c04a2b4f23181aa376f30af0283dbc7b3b569980" + integrity sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA== + dependencies: + "@types/d3-dsv" "*" + +"@types/d3-force@*": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@types/d3-force/-/d3-force-3.0.10.tgz#6dc8fc6e1f35704f3b057090beeeb7ac674bff1a" + integrity sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw== + +"@types/d3-format@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-3.0.4.tgz#b1e4465644ddb3fdf3a263febb240a6cd616de90" + integrity sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g== + +"@types/d3-geo@*": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/d3-geo/-/d3-geo-3.1.0.tgz#b9e56a079449174f0a2c8684a9a4df3f60522440" + integrity sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ== + dependencies: + "@types/geojson" "*" + +"@types/d3-hierarchy@*": + version "3.1.7" + resolved "https://registry.yarnpkg.com/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz#6023fb3b2d463229f2d680f9ac4b47466f71f17b" + integrity sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg== + +"@types/d3-interpolate@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz#412b90e84870285f2ff8a846c6eb60344f12a41c" + integrity sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA== + dependencies: + "@types/d3-color" "*" + +"@types/d3-path@*": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.1.0.tgz#2b907adce762a78e98828f0b438eaca339ae410a" + integrity sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ== + +"@types/d3-polygon@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/d3-polygon/-/d3-polygon-3.0.2.tgz#dfae54a6d35d19e76ac9565bcb32a8e54693189c" + integrity sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA== + +"@types/d3-quadtree@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz#d4740b0fe35b1c58b66e1488f4e7ed02952f570f" + integrity sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg== + +"@types/d3-random@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/d3-random/-/d3-random-3.0.3.tgz#ed995c71ecb15e0cd31e22d9d5d23942e3300cfb" + integrity sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ== + +"@types/d3-scale-chromatic@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.3.tgz#fc0db9c10e789c351f4c42d96f31f2e4df8f5644" + integrity sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw== + +"@types/d3-scale@*": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-4.0.8.tgz#d409b5f9dcf63074464bf8ddfb8ee5a1f95945bb" + integrity sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ== + dependencies: + "@types/d3-time" "*" + +"@types/d3-selection@*", "@types/d3-selection@^3.0.3": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-3.0.10.tgz#98cdcf986d0986de6912b5892e7c015a95ca27fe" + integrity sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg== + +"@types/d3-shape@*": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@types/d3-shape/-/d3-shape-3.1.6.tgz#65d40d5a548f0a023821773e39012805e6e31a72" + integrity sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA== + dependencies: + "@types/d3-path" "*" + +"@types/d3-time-format@*": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/d3-time-format/-/d3-time-format-4.0.3.tgz#d6bc1e6b6a7db69cccfbbdd4c34b70632d9e9db2" + integrity sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg== + +"@types/d3-time@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-3.0.3.tgz#3c186bbd9d12b9d84253b6be6487ca56b54f88be" + integrity sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw== + +"@types/d3-timer@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-3.0.2.tgz#70bbda77dc23aa727413e22e214afa3f0e852f70" + integrity sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw== + +"@types/d3-transition@*": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@types/d3-transition/-/d3-transition-3.0.8.tgz#677707f5eed5b24c66a1918cde05963021351a8f" + integrity sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-zoom@*", "@types/d3-zoom@^3.0.1": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@types/d3-zoom/-/d3-zoom-3.0.8.tgz#dccb32d1c56b1e1c6e0f1180d994896f038bc40b" + integrity sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw== + dependencies: + "@types/d3-interpolate" "*" + "@types/d3-selection" "*" + +"@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== + dependencies: + "@types/d3-array" "*" + "@types/d3-axis" "*" + "@types/d3-brush" "*" + "@types/d3-chord" "*" + "@types/d3-color" "*" + "@types/d3-contour" "*" + "@types/d3-delaunay" "*" + "@types/d3-dispatch" "*" + "@types/d3-drag" "*" + "@types/d3-dsv" "*" + "@types/d3-ease" "*" + "@types/d3-fetch" "*" + "@types/d3-force" "*" + "@types/d3-format" "*" + "@types/d3-geo" "*" + "@types/d3-hierarchy" "*" + "@types/d3-interpolate" "*" + "@types/d3-path" "*" + "@types/d3-polygon" "*" + "@types/d3-quadtree" "*" + "@types/d3-random" "*" + "@types/d3-scale" "*" + "@types/d3-scale-chromatic" "*" + "@types/d3-selection" "*" + "@types/d3-shape" "*" + "@types/d3-time" "*" + "@types/d3-time-format" "*" + "@types/d3-timer" "*" + "@types/d3-transition" "*" + "@types/d3-zoom" "*" + +"@types/d3@^7.4.0": + version "0.0.0" + uid "" + +"@types/d3@link:./node_modules/.cache/null": + version "0.0.0" + uid "" + "@types/express-serve-static-core@*", "@types/express-serve-static-core@4.17.18", "@types/express-serve-static-core@^4.17.18": version "4.17.18" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz#8371e260f40e0e1ca0c116a9afcd9426fa094c40" @@ -4141,6 +5001,11 @@ dependencies: "@types/node" "*" +"@types/geojson@*": + version "7946.0.14" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.14.tgz#319b63ad6df705ee2a65a73ef042c8271e696613" + integrity sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg== + "@types/glob-base@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@types/glob-base/-/glob-base-0.3.0.tgz#a581d688347e10e50dd7c17d6f2880a10354319d" @@ -5956,15 +6821,15 @@ babel-jest@^26.6.3: graceful-fs "^4.2.4" slash "^3.0.0" -babel-loader@8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" - integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== +babel-loader@8.2.5: + version "8.2.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" + integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== dependencies: - find-cache-dir "^2.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" - pify "^4.0.1" + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" babel-loader@^8.2.2: version "8.2.2" @@ -6090,6 +6955,15 @@ babel-plugin-polyfill-corejs2@^0.2.2: "@babel/helper-define-polyfill-provider" "^0.2.2" semver "^6.1.1" +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.2" + semver "^6.3.1" + babel-plugin-polyfill-corejs3@^0.1.0: version "0.1.7" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz#80449d9d6f2274912e05d9e182b54816904befd0" @@ -6098,6 +6972,14 @@ babel-plugin-polyfill-corejs3@^0.1.0: "@babel/helper-define-polyfill-provider" "^0.1.5" core-js-compat "^3.8.1" +babel-plugin-polyfill-corejs3@^0.10.6: + version "0.10.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" + babel-plugin-polyfill-corejs3@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz#2779846a16a1652244ae268b1e906ada107faf92" @@ -6113,6 +6995,13 @@ babel-plugin-polyfill-regenerator@^0.2.2: dependencies: "@babel/helper-define-polyfill-provider" "^0.2.2" +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.2" + babel-plugin-react-docgen@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz#7cc8e2f94e8dc057a06e953162f0810e4e72257b" @@ -6567,7 +7456,7 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" -browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.3, browserslist@^4.6.0, browserslist@^4.8.0: +browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.8.0: version "4.16.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== @@ -6589,6 +7478,26 @@ browserslist@^4.16.6, browserslist@^4.17.3: node-releases "^2.0.0" picocolors "^1.0.0" +browserslist@^4.23.1: + version "4.23.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.2.tgz#244fe803641f1c19c28c48c4b6ec9736eb3d32ed" + integrity sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA== + dependencies: + caniuse-lite "^1.0.30001640" + electron-to-chromium "^1.4.820" + node-releases "^2.0.14" + update-browserslist-db "^1.1.0" + +browserslist@^4.24.0, browserslist@^4.24.3: + version "4.24.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" + integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== + dependencies: + caniuse-lite "^1.0.30001688" + electron-to-chromium "^1.5.73" + node-releases "^2.0.19" + update-browserslist-db "^1.1.1" + bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" @@ -6886,6 +7795,16 @@ caniuse-lite@^1.0.30001012, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.300011 resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz" integrity sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg== +caniuse-lite@^1.0.30001640: + version "1.0.30001643" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz#9c004caef315de9452ab970c3da71085f8241dbd" + integrity sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg== + +caniuse-lite@^1.0.30001688: + version "1.0.30001696" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz#00c30a2fc11e3c98c25e5125418752af3ae2f49f" + integrity sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ== + canvas-prebuilt@^1.6: version "1.6.11" resolved "https://registry.yarnpkg.com/canvas-prebuilt/-/canvas-prebuilt-1.6.11.tgz#9b37071aa0ddd4f7c2b4a9e279b63fb2dc30db9b" @@ -7142,6 +8061,11 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +classcat@^5.0.3, classcat@^5.0.4: + version "5.0.5" + resolved "https://registry.yarnpkg.com/classcat/-/classcat-5.0.5.tgz#8c209f359a93ac302404a10161b501eba9c09c77" + integrity sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w== + classnames@2.2.6, classnames@^2.2.3: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" @@ -7803,14 +8727,6 @@ copy-webpack-plugin@5.0.5: serialize-javascript "^2.1.0" webpack-log "^2.0.0" -core-js-compat@^3.1.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.9.1.tgz#4e572acfe90aff69d76d8c37759d21a5c59bb455" - integrity sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA== - dependencies: - browserslist "^4.16.3" - semver "7.0.0" - core-js-compat@^3.16.0, core-js-compat@^3.16.2, core-js-compat@^3.8.1: version "3.18.3" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.3.tgz#e0e7e87abc55efb547e7fa19169e45fa9df27a67" @@ -7819,6 +8735,13 @@ core-js-compat@^3.16.0, core-js-compat@^3.16.2, core-js-compat@^3.8.1: browserslist "^4.17.3" semver "7.0.0" +core-js-compat@^3.38.0, core-js-compat@^3.38.1: + version "3.40.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.40.0.tgz#7485912a5a4a4315c2fdb2cbdc623e6881c88b38" + integrity sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ== + dependencies: + browserslist "^4.24.3" + core-js-pure@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.9.1.tgz#677b322267172bd490e4464696f790cbc355bec5" @@ -8432,7 +9355,7 @@ d3-drag@1: d3-dispatch "1" d3-selection "1" -"d3-drag@2 - 3", d3-drag@3: +"d3-drag@2 - 3", d3-drag@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== @@ -8687,7 +9610,7 @@ d3-selection@1, d3-selection@^1.1.0: resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.2.tgz#dcaa49522c0dbf32d6c1858afc26b6094555bc5c" integrity sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg== -"d3-selection@2 - 3", d3-selection@3: +"d3-selection@2 - 3", d3-selection@3, d3-selection@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-3.0.0.tgz#c25338207efa72cc5b9bd1458a1a41901f1e1b31" integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ== @@ -8781,7 +9704,7 @@ d3-zoom@1: d3-selection "1" d3-transition "1" -d3-zoom@3: +d3-zoom@3, d3-zoom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-3.0.0.tgz#d13f4165c73217ffeaa54295cd6969b3e7aee8f3" integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw== @@ -8973,6 +9896,13 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: dependencies: ms "2.1.2" +debug@^4.3.1: + version "4.3.5" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" + integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== + dependencies: + ms "2.1.2" + decamelize-keys@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -9548,6 +10478,16 @@ electron-to-chromium@^1.3.867: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.871.tgz#6e87365fd72037a6c898fb46050ad4be3ac9ef62" integrity sha512-qcLvDUPf8DSIMWarHT2ptgcqrYg62n3vPA7vhrOF24d8UNzbUBaHu2CySiENR3nEDzYgaN60071t0F6KLYMQ7Q== +electron-to-chromium@^1.4.820: + version "1.5.0" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz#0d3123a9f09189b9c7ab4b5d6848d71b3c1fd0e8" + integrity sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA== + +electron-to-chromium@^1.5.73: + version "1.5.90" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.90.tgz#4717e5a5413f95bbb12d0af14c35057e9c65e0b6" + integrity sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug== + elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -9849,6 +10789,16 @@ escalade@^3.0.2, escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -13791,11 +14741,6 @@ js-file-download@0.4.9: resolved "https://registry.yarnpkg.com/js-file-download/-/js-file-download-0.4.9.tgz#3d837d5914442940d09af454e852d0840ce3bc64" integrity sha512-/qFei3bAo/BmV05ScKp3KDUMf57qD6UVkMa1gfOnwpLHuuHXRNXW42QbcQPi8+1Kn5LSrTEM28V2cooeHsU66w== -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== - js-message@1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/js-message/-/js-message-1.0.7.tgz#fbddd053c7a47021871bb8b2c95397cc17c20e47" @@ -13888,11 +14833,21 @@ jsesc@2.5.2, jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + jshint@2.11.0-rc1: version "2.11.0-rc1" resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.11.0-rc1.tgz#55fb92abe783193ba138b2139abc7e87c7481b58" @@ -15845,6 +16800,16 @@ node-releases@^2.0.0: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.0.tgz#67dc74903100a7deb044037b8a2e5f453bb05400" integrity sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA== +node-releases@^2.0.14: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== + +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== + node-status-codes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" @@ -16770,6 +17735,16 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" @@ -18489,6 +19464,18 @@ reactcss@^1.2.0: dependencies: lodash "^4.0.1" +reactflow@^11.11.4: + version "11.11.4" + resolved "https://registry.yarnpkg.com/reactflow/-/reactflow-11.11.4.tgz#e3593e313420542caed81aecbd73fb9bc6576653" + integrity sha512-70FOtJkUWH3BAOsN+LU9lCrKoKbtOPnz2uq0CV2PLdNSwxTXOhCbsZr50GmZ+Rtw3jx8Uv7/vBFtCGixLfd4Og== + dependencies: + "@reactflow/background" "11.3.14" + "@reactflow/controls" "11.2.14" + "@reactflow/core" "11.11.4" + "@reactflow/minimap" "11.7.14" + "@reactflow/node-resizer" "2.2.14" + "@reactflow/node-toolbar" "1.3.14" + reactstrap@8.4.0: version "8.4.0" resolved "https://registry.yarnpkg.com/reactstrap/-/reactstrap-8.4.0.tgz#318961ae8150ec1790fec5ee2f81816c9e32d7a1" @@ -18778,6 +19765,20 @@ refractor@^3.1.0: parse-entities "^2.0.0" prismjs "~1.25.0" +regenerate-unicode-properties@^10.1.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== + dependencies: + regenerate "^1.4.2" + +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -18785,7 +19786,7 @@ regenerate-unicode-properties@^8.2.0: dependencies: regenerate "^1.4.0" -regenerate@^1.4.0: +regenerate@^1.4.0, regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== @@ -18807,6 +19808,13 @@ regenerator-transform@^0.14.2: dependencies: "@babel/runtime" "^7.8.4" +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -18840,6 +19848,30 @@ regexpu-core@^4.7.1: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.2.0" +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regexpu-core@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.12.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + registry-auth-token@^3.0.1: version "3.4.0" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" @@ -18860,6 +19892,18 @@ regjsgen@^0.5.1: resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== + dependencies: + jsesc "~3.0.2" + regjsparser@^0.6.4: version "0.6.7" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.7.tgz#c00164e1e6713c2e3ee641f1701c4b7aa0a7f86c" @@ -18867,6 +19911,13 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + relateurl@0.2.x, relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" @@ -19608,6 +20659,11 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" @@ -21535,6 +22591,11 @@ unicode-canonical-property-names-ecmascript@^1.0.4: resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + unicode-match-property-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" @@ -21543,16 +22604,34 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + unicode-property-aliases-ecmascript@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + unidecode@0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/unidecode/-/unidecode-0.1.8.tgz#efbb301538bc45246a9ac8c559d72f015305053e" @@ -21775,6 +22854,22 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +update-browserslist-db@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== + dependencies: + escalade "^3.1.2" + picocolors "^1.0.1" + +update-browserslist-db@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz#97e9c96ab0ae7bcac08e9ae5151d26e6bc6b5580" + integrity sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + update-notifier@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-1.0.3.tgz#8f92c515482bd6831b7c93013e70f87552c7cf5a" @@ -21873,6 +22968,11 @@ use-latest@^1.0.0: dependencies: use-isomorphic-layout-effect "^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== + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -23362,6 +24462,13 @@ zen-observable@^0.8.0: resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== +zustand@^4.4.1: + version "4.5.4" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.4.tgz#63abdd81edfb190bc61e0bbae045cc4d52158a05" + integrity sha512-/BPMyLKJPtFEvVL0E9E9BTUM63MNyhPGlvxk1XjrfWTUlV+BR8jufjsovHzrtR6YNcBEcL7cMHovL1n9xHawEg== + dependencies: + use-sync-external-store "1.2.0" + zwitch@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"