UNPKG

n8n-editor-ui

Version:

Workflow Editor UI for n8n

14,392 lines 758 kB
;
(function () {
  System.register(["./chunk-legacy-Re9CbdfL.js", "./vue.runtime.esm-bundler-legacy--Sn1h8On.js", "./_MapCache-legacy-DlYNX_X1.js", "./src-legacy-uZTNWMC0.js", "./_plugin-vue_export-helper-legacy-DZMI5HPp.js", "./truncate-legacy-BGje52Or.js", "./ParameterInputList-legacy-s9Bhch5Q.js", "./useTelemetry-legacy-B3pzzkAE.js", "./useToast-legacy-C4Vu5mt9.js", "./constants-legacy-TKxWCqvM.js", "./useStyles-legacy-E8NPEyeD.js", "./chatPanel.store-legacy-6e-l0_Mt.js", "./templates.store-legacy-BBcmaAs_.js", "./useRunWorkflow-legacy-BClq6Sr5.js", "./usePinnedData-legacy-CfMMmXZ8.js", "./nodeCreator.store-legacy-BeEd3d8s.js", "./nodeIcon-legacy-D1wFvzkX.js", "./useCanvasOperations-legacy-CXe_JeOj.js", "./NodeIcon-legacy-D0j2KPV5.js", "./KeyboardShortcutTooltip-legacy-Eq8d2TDj.js", "./useTelemetryContext-legacy-Ck4DfXMq.js", "./NodeSettings-legacy-j1Aa2j8E.js", "./useKeybindings-legacy-BktShY1S.js"], function (_export, _context) {
    "use strict";

    var __toESM, __commonJS, computed, toDisplayString, createElementBlock, createCommentVNode, nextTick, unref, guardReactiveProps, ref, onBeforeUnmount, h, createVNode, defineComponent, reactive, onUnmounted, createBlock, mergeModels, toRef, mergeProps, onMounted, Fragment, watch, renderSlot, Teleport, normalizeStyle, withCtx, useCssModule, resolveDynamicComponent, openBlock, useModel, withModifiers, renderList, createTextVNode, createSlots, useCssVars, Transition, provide, vShow, useSlots, useAttrs, normalizeClass, watchEffect, createBaseVNode, withDirectives, Suspense, normalizeProps, inject, onKeyDown, I18nT, useI18n, useThrottleFn, watchOnce, watchThrottled, onKeyUp, N8nButton_default, N8nPopover_default, N8nText_default, N8nIcon_default, useDeviceSupport, N8nTooltip_default, N8nActionDropdown_default, N8nLink_default, N8nIconButton_default, N8nSticky_default, __plugin_vue_export_helper_default, truncateBeforeLast, useRoute, createEventBus, useRouter, TitledList_default, _sfc_main$1, isMacOs, CanvasNodeDirtiness, PanelPosition, useSourceControlStore, NodeId, getBezierPath, useUIStore, useVueFlow, useSettingsStore, getBoundsofRects, getConnectedEdges, _sfc_main$d, _sfc_main$f, Position, nodeViewEventBus, clamp, getRectOfNodes, v4_default, injectWorkflowState, CanvasConnectionMode, MarkerType, useHistoryStore, wheelDelta, useGetPointerPosition, useNDVStore, useNodeTypesStore, isPresent, CONFIGURATION_NODE_RADIUS, getTriggerNodeServiceName, GRID_SIZE, _sfc_main$3, globalLinkActionsEventBus, _sfc_main$4, calculateNodeSize, useWorkflowsStore, PUSH_NODES_OFFSET, isChatNode, useTelemetry, DEFAULT_NODE_SIZE, isValidNodeConnectionType, updateViewportToContainNodes, CanvasNodeRenderType, useNodeHelpers, getMousePosition, environments_store_default, getSmoothStepPath, isOutsideSelected, sanitizeHtml, useToast, CHAT_TRIGGER_NODE_TYPE, NODE_CREATOR_OPEN_SOURCES, getResourcePermissions, CanvasNodeHandleKey, CUSTOM_API_CALL_KEY, VIEWS, mapConnectionsByDestination, NodeConnectionTypes, PRODUCTION_ONLY_TRIGGER_NODE_TYPES, CanvasNodeKey, isCommunityPackageName, NOT_DUPLICATABLE_NODE_TYPES, EXPERIMENT_TEMPLATES_DATA_QUALITY_KEY, CanvasKey, require_isEqual, WAIT_NODE_TYPE, getSubworkflowId, isExecutable, isNodeWithWorkflowSelector, WEBHOOK_NODE_TYPE, WAIT_INDEFINITELY, EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE, CANVAS_EXECUTION_DATA_THROTTLE_DURATION, parseExtractableSubgraphSelection, getNodeOutputs, SIMULATE_NODE_TYPE, buildAdjacencyList, SEND_AND_WAIT_OPERATION, WORKFLOW_EXTRACTION_NAME_MODAL_KEY, ExpressionLocalResolveContextSymbol, SIMULATE_TRIGGER_NODE_TYPE, getNodeInputs, FORM_NODE_TYPE, STICKY_NODE_TYPE, extractReferencesInNodeExpressions, useStyles, useChatPanelStore, useTemplatesDataQualityStore, trackTemplatesClick, TemplateClickSource, isExtraTemplateLinksExperimentEnabled, useTemplatesStore, useNodeDirtiness, useRunWorkflow, usePinnedData, mapLegacyEndpointsToCanvasConnectionPort, insertSpacersBetweenEndpoints, parseCanvasConnectionHandleString, checkOverlap, createCanvasConnectionHandleString, mapLegacyConnectionsToCanvasConnections, useNodeCreatorStore, getNodeIconSource, useLogsStore, useExperimentalNdvStore, useCanvasOperations, NodeIcon_default, KeyboardShortcutTooltip_default, useTelemetryContext, NodeSettings_default, useKeybindings, __vite_style__, CanvasRunWorkflowButton_vue_vue_type_script_setup_true_lang_default, component$1, split, button$2, divider, chevron, menu, menuPopper, menuItem, disabled$3, menuIcon, buttonContent, subText, CanvasRunWorkflowButton_vue_vue_type_style_index_0_lang_module_default, cssModules$29, CanvasRunWorkflowButton_default, import_isEqual$1, CANVAS_HISTORY_OPTIONS, state, _hoisted_1$17, _hoisted_2$7, _hoisted_3$9, _hoisted_4$2, CanvasNodeStatusIcons_vue_vue_type_script_setup_true_lang_default, status, runData, waiting$1, pinnedData, running$1, absoluteSpinner, spinnerScrim, issues, count, warning$2, disabled$2, CanvasNodeStatusIcons_vue_vue_type_style_index_0_lang_module_default, cssModules$28, CanvasNodeStatusIcons_default, _hoisted_1$16, _hoisted_2$6, CanvasNodeStickyColorSelector_vue_vue_type_script_setup_true_lang_default, popover, content, color$1, selected$2, option$1, CanvasNodeStickyColorSelector_vue_vue_type_style_index_0_lang_module_default, cssModules$27, CanvasNodeStickyColorSelector_default, CanvasNodeToolbar_vue_vue_type_script_setup_true_lang_default, canvasNodeToolbar$1, isExperimentalNdvActive$2, canvasNodeToolbarItems$1, forceVisible, statusIcons$1, CanvasNodeToolbar_vue_vue_type_style_index_0_lang_module_default, cssModules$26, CanvasNodeToolbar_default, _hoisted_1$15, _hoisted_2$5, _hoisted_3$8, _hoisted_4$1, size, CanvasNodeSettingsIcons_vue_vue_type_script_setup_true_lang_default, settingsIcons, tooltipHeader, tooltipTitle, CanvasNodeSettingsIcons_vue_vue_type_style_index_0_lang_module_default, cssModules$25, CanvasNodeSettingsIcons_default, ExperimentalCanvasNodeSettings_vue_vue_type_script_setup_true_lang_default, ExperimentalCanvasNodeSettings_default, ExperimentalEmbeddedNdvActions_vue_vue_type_script_setup_true_lang_default, actions, ExperimentalEmbeddedNdvActions_vue_vue_type_style_index_0_lang_module_default, cssModules$24, ExperimentalEmbeddedNdvActions_default, ExperimentalEmbeddedNodeDetails_vue_vue_type_script_setup_true_lang_default, component, expanded, collapsed, collapsedContent, settingsView, disabled$1, collapsedNodeName, ExperimentalEmbeddedNodeDetails_vue_vue_type_style_index_0_lang_module_default, cssModules$23, ExperimentalEmbeddedNodeDetails_default, CanvasNodeTooltip_vue_vue_type_script_setup_true_lang_default, tooltipTrigger, popper, CanvasNodeTooltip_vue_vue_type_style_index_0_lang_module_default, cssModules$22, CanvasNodeTooltip_default, CanvasNodeDisabledStrikeThrough_vue_vue_type_script_setup_true_lang_default, disabledStrikeThrough, success$2, warning$1, CanvasNodeDisabledStrikeThrough_vue_vue_type_style_index_0_lang_module_default, cssModules$21, CanvasNodeDisabledStrikeThrough_default, _hoisted_1$14, CanvasNodeDefault_vue_vue_type_script_setup_true_lang_default, node, trigger$1, configuration, statusIcons, configurable, icon, description, label$6, subtitle, running, selected$1, success$1, warning, error, pinned, disabled, waiting, disabledLabel, CanvasNodeDefault_vue_vue_type_style_index_0_lang_module_default, cssModules$20, CanvasNodeDefault_default, xhtml$1, namespaces$1, find$1, filter$1, root$1, noop$1, nonpassive, nonpassivecapture$1, constant$3, ResizeControlVariant, DefaultPositions, StylingProperty, _sfc_main$1$9, _sfc_main$8, CanvasNodeStickyNote_vue_vue_type_script_setup_true_lang_default, sticky, selected, CanvasNodeStickyNote_vue_vue_type_style_index_0_lang_module_default, cssModules$19, CanvasNodeStickyNote_default, CanvasNodeAddNodes_vue_vue_type_script_setup_true_lang_default, addNodes, button$1, label$5, CanvasNodeAddNodes_vue_vue_type_style_index_0_lang_module_default, cssModules$18, CanvasNodeAddNodes_default, CanvasNodeChoicePrompt_vue_vue_type_script_setup_true_lang_default, choicePrompt, option, button, selectedButtonHighlight, highlighted, label$4, orDivider, orText, CanvasNodeChoicePrompt_vue_vue_type_style_index_0_lang_module_default, cssModules$17, CanvasNodeChoicePrompt_default, CanvasNodeRenderer_vue_vue_type_script_setup_true_lang_default, CanvasNodeRenderer_default, CanvasHandleRectangle_vue_vue_type_script_setup_true_lang_default, rectangle, CanvasHandleRectangle_vue_vue_type_style_index_0_lang_module_default, cssModules$16, CanvasHandleRectangle_default, handleClasses$3, CanvasHandleMainInput_vue_vue_type_script_setup_true_lang_default, handle$4, label$3, required$3, CanvasHandleMainInput_vue_vue_type_style_index_0_lang_module_default, cssModules$15, CanvasHandleMainInput_default, CanvasHandleDot_vue_vue_type_script_setup_true_lang_default, dot, CanvasHandleDot_vue_vue_type_style_index_0_lang_module_default, cssModules$14, CanvasHandleDot_default, _hoisted_1$13, _hoisted_2$4, _hoisted_3$7, CanvasHandlePlus_vue_vue_type_script_setup_true_lang_default, wrapper, right$1, bottom$1, secondary, line, plus, success, CanvasHandlePlus_vue_vue_type_style_index_0_lang_module_default, cssModules$13, CanvasHandlePlus_default, handleClasses$2, CanvasHandleMainOutput_vue_vue_type_script_setup_true_lang_default, handle$3, connected, label$2, required$2, outputLabel, runDataLabel, CanvasHandleMainOutput_vue_vue_type_style_index_0_lang_module_default, cssModules$12, CanvasHandleMainOutput_default, CanvasHandleDiamond_vue_vue_type_script_setup_true_lang_default, diamond, CanvasHandleDiamond_vue_vue_type_style_index_0_lang_module_default, cssModules$11, CanvasHandleDiamond_default, handleClasses$1, CanvasHandleNonMainInput_vue_vue_type_script_setup_true_lang_default, handle$2, label$1, required$1, CanvasHandleNonMainInput_vue_vue_type_style_index_0_lang_module_default, cssModules$10, CanvasHandleNonMainInput_default, handleClasses, CanvasHandleNonMainOutput_vue_vue_type_script_setup_true_lang_default, handle$1, label, required, CanvasHandleNonMainOutput_vue_vue_type_style_index_0_lang_module_default, cssModules$9, CanvasHandleNonMainOutput_default, CanvasHandleRenderer_vue_vue_type_script_setup_true_lang_default, handle, inputs, main, renderType, top, right, left, bottom, CanvasHandleRenderer_vue_vue_type_style_index_0_lang_module_default, cssModules$8, CanvasHandleRenderer_default, position$2, target, useContextMenu, CanvasNodeTrigger_vue_vue_type_script_setup_true_lang_default, container, interactive, hovered, isExperimentalNdvActive$1, bolt, CanvasNodeTrigger_vue_vue_type_style_index_0_lang_module_default, cssModules$7, CanvasNodeTrigger_default, import_isEqual, _hoisted_1$12, CanvasNode_vue_vue_type_script_setup_true_lang_default, canvasNode, canvasNodeToolbarItems, trigger, showToolbar, canvasNodeToolbar, CanvasNode_vue_vue_type_style_index_0_lang_module_default, cssModules$6, CanvasNode_default, _hoisted_1$11, _hoisted_2$3, CanvasBackgroundStripedPattern_vue_vue_type_script_setup_true_lang_default, CanvasBackgroundStripedPattern_default, BackgroundVariant, LinePattern, DotPattern, DefaultBgColors, _hoisted_1$9, _hoisted_2$2, _hoisted_3$6, _hoisted_4, _sfc_main$5, CanvasBackground_vue_vue_type_script_setup_true_lang_default, CanvasBackground_default, ContextMenu_vue_vue_type_script_setup_true_lang_default, contextMenu, activator, ContextMenu_vue_vue_type_style_index_0_lang_module_default, cssModules$5, ContextMenu_default, require_graph, require_version$1, require_lib, require_json, require_components, require_priority_queue, require_dijkstra, require_dijkstra_all, require_tarjan, require_find_cycles, require_floyd_warshall, require_topsort, require_is_acyclic, require_dfs, require_postorder, require_preorder, require_prim, require_alg, require_graphlib, require_list, require_greedy_fas, require_util$1, require_acyclic, require_normalize, require_util, require_feasible_tree, require_network_simplex, require_rank, require_parent_dummy_chains, require_nesting_graph, require_add_border_segments, require_coordinate_system, require_init_order, require_cross_count, require_barycenter, require_resolve_conflicts, require_sort, require_sort_subgraph, require_build_layer_graph, require_add_subgraph_constraints, require_order, require_bk, require_position, require_layout, require_debug, require_version, require_dagre, import_dagre, NODE_X_SPACING, NODE_Y_SPACING, SUBGRAPH_SPACING, AI_X_SPACING, AI_Y_SPACING, STICKY_BOTTOM_PADDING, noop, xhtml, namespaces, find, filter, root, nonpassivecapture, darker, brighter, reI, reN, reP, reHex, reRgbInteger, reRgbPercent, reRgbaInteger, reRgbaPercent, reHslPercent, reHslaPercent, named, constant$1, interpolateRgb, reA, reB, degrees, identity$1, svgNode, interpolateTransformCss, interpolateTransformSvg, epsilon2, interpolateZoom, frame, timeout$1, interval, pokeDelay, taskHead, taskTail, clockLast, clockNow, clockSkew, clock, setFrame, emptyOn, emptyTween, CREATED, SCHEDULED, STARTING, STARTED, RUNNING, ENDING, ENDED, Selection, id, selection_prototype, defaultTiming, constant, identity, Slots, _hoisted_1$1$9, _sfc_main$1$7, _hoisted_1$10, _hoisted_2$1, _hoisted_3$5, _sfc_main, _hoisted_1$8, CanvasArrowHeadMarker_vue_vue_type_script_setup_true_lang_default, CanvasArrowHeadMarker_default, EDGE_PADDING_BOTTOM, EDGE_PADDING_X, EDGE_BORDER_RADIUS, HANDLE_SIZE, isRightOfSourceHandle, CanvasConnectionLine_vue_vue_type_script_setup_true_lang_default, edge$1, visible, CanvasConnectionLine_vue_vue_type_style_index_0_lang_module_default, cssModules$4, CanvasConnectionLine_default, _sfc_main$6, _hoisted_1$7, TidyUpIcon_default, _sfc_main$1$5, _export_sfc, _hoisted_1$5, ControlButton, _hoisted_1$4, _hoisted_3$4, PlusIcon, _hoisted_1$3, _hoisted_3$3, MinusIcon, _hoisted_1$2, _hoisted_3$2, FitView, _hoisted_1$1, _hoisted_3$1, Lock, _hoisted_1$6, _hoisted_3, Unlock, _sfc_main$2, CanvasControlButtons_vue_vue_type_script_setup_true_lang_default, iconButton, CanvasControlButtons_vue_vue_type_style_index_0_lang_module_default, cssModules$3, CanvasControlButtons_default, CanvasEdgeToolbar_vue_vue_type_script_setup_true_lang_default, canvasEdgeToolbar, CanvasEdgeToolbar_vue_vue_type_style_index_0_lang_module_default, cssModules$2, CanvasEdgeToolbar_default, _hoisted_1, _hoisted_2, delayedHoveredTimeout, CanvasEdge_vue_vue_type_script_setup_true_lang_default, edge, edgeLabelWrapper, straight, edgeLabel, CanvasEdge_vue_vue_type_style_index_0_lang_module_default, cssModules$1, CanvasEdge_default, renameKeyCode, defaultZoom, minimapVisibilityDelay, Canvas_vue_vue_type_script_setup_true_lang_default, canvas, ready, isExperimentalNdvActive, Canvas_vue_vue_type_style_index_0_lang_module_default, cssModules, Canvas_default;
    function useWorkflowExtraction() {
      const uiStore = useUIStore();
      const workflowsStore = useWorkflowsStore();
      const toast = useToast();
      const router = useRouter();
      const historyStore = useHistoryStore();
      const canvasOperations = useCanvasOperations();
      const i18n = useI18n();
      const telemetry = useTelemetry();
      const adjacencyList = computed(() => buildAdjacencyList(workflowsStore.workflow.connections));
      const workflowObject = computed(() => workflowsStore.workflowObject);
      function showError(message) {
        toast.showMessage({
          type: "error",
          message,
          title: i18n.baseText("workflowExtraction.error.failure"),
          duration: 15 * 1e3
        });
      }
      function extractableErrorResultToMessage(result) {
        switch (result.errorCode) {
          case "Input Edge To Non-Root Node":
            return i18n.baseText("workflowExtraction.error.selectionGraph.inputEdgeToNonRoot", {
              interpolate: {
                node: result.node
              }
            });
          case "Output Edge From Non-Leaf Node":
            return i18n.baseText("workflowExtraction.error.selectionGraph.outputEdgeFromNonLeaf", {
              interpolate: {
                node: result.node
              }
            });
          case "Multiple Input Nodes":
            return i18n.baseText("workflowExtraction.error.selectionGraph.multipleInputNodes", {
              interpolate: {
                nodes: [...result.nodes].map(x => `'${x}'`).join(", ")
              }
            });
          case "Multiple Output Nodes":
            return i18n.baseText("workflowExtraction.error.selectionGraph.multipleOutputNodes", {
              interpolate: {
                nodes: [...result.nodes].map(x => `'${x}'`).join(", ")
              }
            });
          case "No Continuous Path From Root To Leaf In Selection":
            return i18n.baseText("workflowExtraction.error.selectionGraph.noContinuousPathFromRootToLeaf", {
              interpolate: {
                start: result.start,
                end: result.end
              }
            });
        }
      }
      function makeExecuteWorkflowNode(workflowId, name, position$3, variables) {
        return {
          parameters: {
            workflowId: {
              __rl: true,
              value: workflowId,
              mode: "list"
            },
            workflowInputs: {
              mappingMode: "defineBelow",
              value: Object.fromEntries(variables.entries().map(([k, v]) => [k, `={{ ${v} }}`])),
              matchingColumns: [...variables.keys()],
              schema: [...variables.keys().map(x => ({
                id: x,
                displayName: x,
                required: false,
                defaultMatch: false,
                display: true,
                canBeUsedToMatch: true,
                removed: false
              }))],
              attemptToConvertTypes: false,
              convertFieldsToString: true
            },
            options: {}
          },
          type: "n8n-nodes-base.executeWorkflow",
          typeVersion: 1.2,
          position: position$3,
          name
        };
      }
      function makeSubworkflow(newWorkflowName, {
        start: start$1,
        end
      }, nodes, connections, selectionVariables, selectionChildrenVariables, startNodeName, returnNodeName) {
        const newConnections = Object.fromEntries(Object.entries(connections).filter(([k]) => nodes.some(x => x.name === k)));
        if (end) delete newConnections[end];
        const startNodeTarget = nodes.find(x => x.name === start$1);
        const firstNode = startNodeTarget ?? nodes.sort((a, b) => a.position[1] - b.position[1])[0];
        const startNodePosition = [firstNode.position[0] - PUSH_NODES_OFFSET, firstNode.position[1]];
        const endNodeTarget = nodes.find(x => x.name === end);
        const lastNode = endNodeTarget ?? nodes.sort((a, b) => b.position[1] - a.position[1])[0];
        const endNodePosition = [lastNode.position[0] + PUSH_NODES_OFFSET, lastNode.position[1]];
        const shouldInsertReturnNode = selectionChildrenVariables.size > 0;
        const startNodeConnection = startNodeTarget ? {
          [startNodeName]: {
            main: [[{
              node: startNodeTarget.name,
              type: "main",
              index: 0
            }]]
          }
        } : {};
        const endNodeConnection = endNodeTarget && shouldInsertReturnNode ? {
          [endNodeTarget.name]: {
            main: [[{
              node: returnNodeName,
              type: "main",
              index: 0
            }]]
          }
        } : {};
        const returnNode = shouldInsertReturnNode ? [{
          parameters: {
            assignments: {
              assignments: [...selectionChildrenVariables.entries().map(x => ({
                id: v4_default(),
                name: x[0],
                value: `={{ ${x[1]} }}`,
                type: "string"
              }))]
            },
            options: {}
          },
          type: "n8n-nodes-base.set",
          typeVersion: 3.4,
          position: endNodePosition,
          id: v4_default(),
          name: returnNodeName
        }] : [];
        const triggerParameters = selectionVariables.size === 0 ? {
          inputSource: "passthrough"
        } : {
          workflowInputs: {
            values: [...selectionVariables.keys().map(k => ({
              name: k,
              type: "any"
            }))]
          }
        };
        const triggerNode = {
          id: v4_default(),
          typeVersion: 1.1,
          name: startNodeName,
          type: EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE,
          position: startNodePosition,
          parameters: triggerParameters
        };
        return {
          name: newWorkflowName,
          nodes: [...nodes, ...returnNode, triggerNode],
          connections: {
            ...newConnections,
            ...startNodeConnection,
            ...endNodeConnection
          },
          settings: {
            executionOrder: "v1"
          },
          projectId: workflowsStore.workflow.homeProject?.id,
          parentFolderId: workflowsStore.workflow.parentFolder?.id ?? void 0
        };
      }
      function computeAveragePosition(nodes) {
        const summedUp = nodes.reduce((acc, v) => [acc[0] + v.position[0], acc[1] + v.position[1], acc[2] + 1], [0, 0, 0]);
        return [summedUp[0] / summedUp[2], summedUp[1] / summedUp[2]];
      }
      async function tryCreateWorkflow(workflowData) {
        try {
          const createdWorkflow = await workflowsStore.createNewWorkflow(workflowData);
          const {
            href
          } = router.resolve({
            name: VIEWS.WORKFLOW,
            params: {
              name: createdWorkflow.id
            }
          });
          toast.showMessage({
            title: i18n.baseText("workflowExtraction.success.title"),
            message: i18n.baseText("workflowExtraction.success.message", {
              interpolate: {
                url: href
              }
            }),
            type: "success",
            duration: 10 * 1e3
          });
          return createdWorkflow;
        } catch (e) {
          toast.showError(e, i18n.baseText("workflowExtraction.error.subworkflowCreationFailed"));
          return null;
        }
      }
      function checkExtractableSelectionValidity(selection$1) {
        if (Array.isArray(selection$1)) {
          showError(i18n.baseText("workflowExtraction.error.selectionGraph.listHeader", {
            interpolate: {
              body: selection$1.map(extractableErrorResultToMessage).map(x => `- ${x}`).join("<br>")
            }
          }));
          return false;
        }
        const {
          start: start$1,
          end
        } = selection$1;
        const isSingleIO = (nodeName, getIOs) => {
          const node$1 = workflowsStore.getNodeByName(nodeName);
          if (!node$1) return true;
          const nodeType = useNodeTypesStore().getNodeType(node$1.type, node$1.typeVersion);
          if (!nodeType) return true;
          return getIOs(workflowObject.value, node$1, nodeType).filter(x => typeof x === "string" ? x === "main" : x.type === "main").length <= 1;
        };
        if (start$1 && !isSingleIO(start$1, getNodeInputs)) {
          showError(i18n.baseText("workflowExtraction.error.inputNodeHasMultipleInputBranches", {
            interpolate: {
              node: start$1
            }
          }));
          return false;
        }
        if (end && !isSingleIO(end, getNodeOutputs)) {
          showError(i18n.baseText("workflowExtraction.error.outputNodeHasMultipleOutputBranches", {
            interpolate: {
              node: end
            }
          }));
          return false;
        }
        return !Array.isArray(selection$1);
      }
      async function replaceSelectionWithNode(executeWorkflowNodeData, startId, endId, selection$1, selectionChildNodes) {
        historyStore.startRecordingUndo();
        uiStore.resetLastInteractedWith();
        const executeWorkflowNode = (await canvasOperations.addNodes([executeWorkflowNodeData], {
          ...CANVAS_HISTORY_OPTIONS,
          forcePosition: true
        }))[0];
        if (endId) canvasOperations.replaceNodeConnections(endId, executeWorkflowNode.id, {
          ...CANVAS_HISTORY_OPTIONS,
          replaceInputs: false
        });
        if (startId) canvasOperations.replaceNodeConnections(startId, executeWorkflowNode.id, {
          ...CANVAS_HISTORY_OPTIONS,
          replaceOutputs: false
        });
        canvasOperations.deleteNodes(selection$1.map(x => x.id), CANVAS_HISTORY_OPTIONS);
        for (const node$1 of selectionChildNodes) {
          const currentNode = workflowsStore.workflow.nodes.find(x => x.id === node$1.id);
          if ((0, import_isEqual$1.default)(node$1, currentNode)) continue;
          canvasOperations.replaceNodeParameters(node$1.id, {
            ...currentNode?.parameters
          }, {
            ...node$1.parameters
          }, CANVAS_HISTORY_OPTIONS);
        }
        uiStore.stateIsDirty = true;
        historyStore.stopRecordingUndo();
      }
      function tryExtractNodesIntoSubworkflow(nodeIds) {
        const subGraph = nodeIds.map(workflowsStore.getNodeById).filter(x => x !== void 0);
        const triggers = subGraph.filter(x => useNodeTypesStore().getNodeType(x.type, x.typeVersion)?.group.includes("trigger"));
        if (triggers.length > 0) {
          showError(i18n.baseText("workflowExtraction.error.triggerSelected", {
            interpolate: {
              nodes: triggers.map(x => `'${x.name}'`).join(", ")
            }
          }));
          return false;
        }
        const selection$1 = parseExtractableSubgraphSelection(new Set(subGraph.map(x => x.name)), adjacencyList.value);
        if (!checkExtractableSelectionValidity(selection$1)) return false;
        uiStore.openModalWithData({
          name: WORKFLOW_EXTRACTION_NAME_MODAL_KEY,
          data: {
            subGraph,
            selection: selection$1
          }
        });
        return true;
      }
      async function doExtractNodesIntoSubworkflow(selection$1, subGraph, newWorkflowName) {
        const {
          start: start$1,
          end
        } = selection$1;
        const allNodeNames = workflowsStore.workflow.nodes.map(x => x.name);
        let startNodeName = "Start";
        const subGraphNames = subGraph.map(x => x.name);
        while (subGraphNames.includes(startNodeName)) startNodeName += "_1";
        let returnNodeName = "Return";
        while (subGraphNames.includes(returnNodeName)) returnNodeName += "_1";
        const directAfterEndNodeNames = end ? workflowObject.value.getChildNodes(end, "main", 1).map(x => workflowObject.value.getNode(x)?.name).filter(x => x !== void 0) : [];
        const allAfterEndNodes = end ? workflowObject.value.getChildNodes(end, "ALL").map(x => workflowObject.value.getNode(x)).filter(x => x !== null) : [];
        const {
          nodes,
          variables
        } = extractReferencesInNodeExpressions(subGraph, allNodeNames, startNodeName, start$1 ? [start$1] : void 0);
        let executeWorkflowNodeName = `Call ${newWorkflowName}`;
        while (allNodeNames.includes(executeWorkflowNodeName)) executeWorkflowNodeName += "_1";
        const {
          nodes: afterNodes,
          variables: afterVariables
        } = extractReferencesInNodeExpressions(allAfterEndNodes, allAfterEndNodes.map(x => x.name).concat(subGraphNames), executeWorkflowNodeName, directAfterEndNodeNames);
        const createdWorkflow = await tryCreateWorkflow(makeSubworkflow(newWorkflowName, selection$1, nodes, workflowsStore.workflow.connections, variables, afterVariables, startNodeName, returnNodeName));
        if (createdWorkflow === null) return false;
        const executeWorkflowPosition = computeAveragePosition(subGraph);
        await replaceSelectionWithNode(makeExecuteWorkflowNode(createdWorkflow.id, executeWorkflowNodeName, executeWorkflowPosition, variables), subGraph.find(x => x.name === start$1)?.id, subGraph.find(x => x.name === end)?.id, subGraph, afterNodes);
        return true;
      }
      function trackStartExtractWorkflow(nodeCount, success$3) {
        telemetry.track("User started nodes to sub-workflow extraction", {
          node_count: nodeCount,
          success: success$3
        });
      }
      function trackExtractWorkflow(nodeCount, success$3) {
        telemetry.track("User extracted nodes to sub-workflow", {
          node_count: nodeCount,
          success: success$3
        });
      }
      /**
      * This mutates the current workflow and creates a new one.
      * Intended to be called from @WorkflowExtractionNameModal spawned
      * by @tryExtractNodesIntoSubworkflow
      */
      async function extractNodesIntoSubworkflow(selection$1, subGraph, newWorkflowName) {
        const success$3 = await doExtractNodesIntoSubworkflow(selection$1, subGraph, newWorkflowName);
        trackExtractWorkflow(subGraph.length, success$3);
      }
      /**
      * This starts the extraction process by checking whether the selection is extractable
      * and spawning a pop up asking for a sub-workflow name.
      * If confirmed, the modal calls @extractNodesIntoSubworkflow to handle the actual mutation
      *
      * @param nodeIds the ids to be extracted from the current workflow into a sub-workflow
      */
      function extractWorkflow(nodeIds) {
        const success$3 = tryExtractNodesIntoSubworkflow(nodeIds);
        trackStartExtractWorkflow(nodeIds.length, success$3);
      }
      return {
        adjacencyList,
        extractWorkflow,
        tryExtractNodesIntoSubworkflow,
        extractNodesIntoSubworkflow
      };
    }

    //#endregion
    //#region src/app/composables/useGlobalLinkActions.ts

    function useGlobalLinkActions() {
      function registerCustomAction({
        key,
        action
      }) {
        state.customActions[key] = action;
      }
      function unregisterCustomAction(key) {
        const {
          [key]: _,
          ...rest
        } = state.customActions;
        state.customActions = rest;
      }
      function getElementAttributes(element) {
        const attributesObject = {};
        for (let i = 0; i < element.attributes.length; i++) {
          const attr = element.attributes[i];
          if (attr.name.startsWith("data-action-parameter-")) attributesObject[attr.name.replace("data-action-parameter-", "")] = attr.value;
        }
        return attributesObject;
      }
      function delegateClick(e) {
        const clickedElement = e.target;
        if (!(clickedElement instanceof Element) || clickedElement.tagName !== "A") return;
        const actionAttribute = clickedElement.getAttribute("data-action");
        if (actionAttribute && typeof availableActions.value[actionAttribute] === "function") {
          e.preventDefault();
          const elementAttributes = getElementAttributes(clickedElement);
          availableActions.value[actionAttribute](elementAttributes);
        }
      }
      function reload() {
        if (window.top) window.top.location.reload();else window.location.reload();
      }
      const availableActions = computed(() => ({
        reload,
        ...state.customActions
      }));
      onMounted(() => {
        if (state.delegatedClickHandler) return;
        state.delegatedClickHandler = delegateClick;
        window.addEventListener("click", delegateClick);
        globalLinkActionsEventBus.on("registerGlobalLinkAction", registerCustomAction);
      });
      onUnmounted(() => {
        window.removeEventListener("click", delegateClick);
        state.delegatedClickHandler = null;
        globalLinkActionsEventBus.off("registerGlobalLinkAction", registerCustomAction);
      });
      return {
        registerCustomAction,
        unregisterCustomAction
      };
    }

    //#endregion
    //#region src/features/workflows/canvas/composables/useCanvasNode.ts
    function useCanvasNode() {
      const node$1 = inject(CanvasNodeKey);
      const data = computed(() => node$1?.data.value ?? {
        id: "",
        name: "",
        subtitle: "",
        type: "",
        typeVersion: 1,
        disabled: false,
        inputs: [],
        outputs: [],
        connections: {
          [CanvasConnectionMode.Input]: {},
          [CanvasConnectionMode.Output]: {}
        },
        issues: {
          execution: [],
          validation: [],
          visible: false
        },
        pinnedData: {
          count: 0,
          visible: false
        },
        execution: {
          running: false
        },
        runData: {
          iterations: 0,
          outputMap: {},
          visible: false
        },
        render: {
          type: CanvasNodeRenderType.Default,
          options: {}
        }
      });
      const id$1 = computed(() => node$1?.id.value ?? "");
      const label$7 = computed(() => node$1?.label.value ?? "");
      const subtitle$1 = computed(() => data.value.subtitle);
      const name = computed(() => data.value.name);
      const inputs$1 = computed(() => data.value.inputs);
      const outputs = computed(() => data.value.outputs);
      const connections = computed(() => data.value.connections);
      const isDisabled = computed(() => data.value.disabled);
      const isReadOnly = computed(() => node$1?.readOnly.value);
      const isSelected = computed(() => node$1?.selected.value);
      const pinnedDataCount = computed(() => data.value.pinnedData.count);
      const hasPinnedData = computed(() => data.value.pinnedData.count > 0);
      const issues$1 = computed(() => [...data.value.issues.execution, ...data.value.issues.validation]);
      const executionErrors = computed(() => data.value.issues.execution ?? []);
      const validationErrors = computed(() => data.value.issues.validation ?? []);
      const hasIssues = computed(() => data.value.issues.visible);
      const hasExecutionErrors = computed(() => data.value.issues.execution.length > 0);
      const hasValidationErrors = computed(() => data.value.issues.validation.length > 0);
      const executionStatus = computed(() => data.value.execution.status);
      const executionWaiting = computed(() => data.value.execution.waiting);
      const executionWaitingForNext = computed(() => data.value.execution.waitingForNext);
      const executionRunning = computed(() => data.value.execution.running);
      const runDataOutputMap = computed(() => data.value.runData.outputMap);
      return {
        node: node$1,
        id: id$1,
        name,
        label: label$7,
        subtitle: subtitle$1,
        inputs: inputs$1,
        outputs,
        connections,
        isDisabled,
        isReadOnly,
        isSelected,
        pinnedDataCount,
        hasPinnedData,
        runDataIterations: computed(() => data.value.runData.iterations),
        runDataOutputMap,
        hasRunData: computed(() => data.value.runData.visible),
        issues: issues$1,
        executionErrors,
        validationErrors,
        hasIssues,
        hasExecutionErrors,
        hasValidationErrors,
        executionStatus,
        executionWaiting,
        executionWaitingForNext,
        executionRunning,
        render: computed(() => data.value.render),
        eventBus: computed(() => node$1?.eventBus.value),
        isNotInstalledCommunityNode: computed(() => isCommunityPackageName(data.value.type) && !useNodeTypesStore().getIsNodeInstalled(data.value.type))
      };
    }

    //#endregion
    //#region src/app/utils/injectStrict.ts
    function injectStrict(key, fallback) {
      const resolved = inject(key, fallback);
      if (!resolved) throw new Error(`Could not resolve ${key.description}`);
      return resolved;
    }

    //#endregion
    //#region src/features/workflows/canvas/composables/useCanvas.ts
    function useCanvas() {
      return injectStrict(CanvasKey);
    }

    //#endregion
    //#region src/features/workflows/canvas/components/elements/nodes/render-types/parts/CanvasNodeStatusIcons.vue?vue&type=script&setup=true&lang.ts

    //#endregion
    //#region src/app/composables/useNodeConnections.ts
    function useNodeConnections({
      inputs: inputs$1,
      outputs,
      connections
    }) {
      /**
      * Inputs
      */
      const mainInputs = computed(() => unref(inputs$1).filter(input => input.type === NodeConnectionTypes.Main));
      const nonMainInputs = computed(() => unref(inputs$1).filter(input => input.type !== NodeConnectionTypes.Main));
      const requiredNonMainInputs = computed(() => nonMainInputs.value.filter(input => input.required));
      const mainInputConnections = computed(() => unref(connections)[CanvasConnectionMode.Input][NodeConnectionTypes.Main] ?? []);
      /**
      * Outputs
      */
      const mainOutputs = computed(() => unref(outputs).filter(output => output.type === NodeConnectionTypes.Main));
      const nonMainOutputs = computed(() => unref(outputs).filter(output => output.type !== NodeConnectionTypes.Main));
      const mainOutputConnections = computed(() => unref(connections)[CanvasConnectionMode.Output][NodeConnectionTypes.Main] ?? []);
      /**
      * Connection validation
      */
      function isValidConnection(connection) {
        const {
          type: sourceType,
          mode: sourceMode
        } = parseCanvasConnectionHandleString(connection.sourceHandle);
        const {
          type: targetType,
          mode: targetMode
        } = parseCanvasConnectionHandleString(connection.targetHandle);
        return !(sourceMode === targetMode) && sourceType === targetType;
      }
      return {
        mainInputs,
        nonMainInputs,
        requiredNonMainInputs,
        mainInputConnections,
        mainOutputs,
        nonMainOutputs,
        mainOutputConnections,
        isValidConnection
      };
    }

    //#endregion
    //#region src/features/workflows/canvas/components/elements/nodes/render-types/parts/CanvasNodeSettingsIcons.vue?vue&type=script&setup=true&lang.ts

    //#endregion
    //#region src/features/workflows/canvas/experimental/experimentalNdv.utils.ts
    function getNodeSubTitleText(node$1, nodeType, includeOperation, t) {
      if (node$1.disabled) return `(${t.baseText("node.disabled")})`;
      const displayName = nodeType.displayName ?? "";
      if (!includeOperation) return displayName;
      const selectedOperation = node$1.parameters.operation;
      const selectedOperationDisplayName = selectedOperation && nodeType.properties.find(p => p.name === "operation")?.options?.find(o => "value" in o && o.value === selectedOperation)?.name;
      if (!selectedOperationDisplayName) return displayName;
      return `${displayName}: ${selectedOperationDisplayName}`;
    }

    //#endregion
    //#region src/features/workflows/canvas/experimental/components/ExperimentalEmbeddedNdvActions.vue?vue&type=script&setup=true&lang.ts

    //#endregion
    //#region src/features/workflows/canvas/experimental/composables/useExpressionResolveCtx.ts
    function useExpressionResolveCtx(node$1) {
      const environmentsStore = environments_store_default();
      const workflowsStore = useWorkflowsStore();
      const workflowObject = computed(() => workflowsStore.workflowObject);
      return computed(() => {
        if (!node$1.value) return;
        const runIndex = 0;
        const execution = workflowsStore.workflowExecutionData;
        const nodeName = node$1.value.name;
        function findInputNode() {
          const source = (execution?.data?.resultData.runData[nodeName] ?? [])[runIndex]?.source[0];
          if (source) return {
            name: source.previousNode,
            branchIndex: source.previousNodeOutput ?? 0,
            runIndex: source.previousNodeRun ?? 0
          };
          const inputs$1 = workflowObject.value.getParentNodesByDepth(nodeName, 1);
          if (inputs$1.length > 0) return {
            name: inputs$1[0].name,
            branchIndex: inputs$1[0].indicies[0] ?? 0,
            runIndex: 0
          };
        }
        return {
          localResolve: true,
          envVars: environmentsStore.variablesAsObject,
          workflow: workflowObject.value,
          execution,
          nodeName,
          additionalKeys: {},
          inputNode: findInputNode(),
          connections: workflowsStore.connectionsBySourceNode
        };
      });
    }

    //#endregion
    //#region src/features/workflows/canvas/experimental/components/ExperimentalEmbeddedNodeDetails.vue?vue&type=script&setup=true&lang.ts

    function namespace$1(name) {
      var prefix = name += "",
        i = prefix.indexOf(":");
      if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
      return namespaces$1.hasOwnProperty(prefix) ? {
        space: namespaces$1[prefix],
        local: name
      } : name;
    }
    function creatorInherit$1(name) {
      return function () {
        var document2 = this.ownerDocument,
          uri = this.namespaceURI;
        return uri === xhtml$1 && document2.documentElement.namespaceURI === xhtml$1 ? document2.createElement(name) : document2.createElementNS(uri, name);
      };
    }
    function creatorFixed$1(fullname) {
      return function () {
        return this.ownerDocument.createElementNS(fullname.space, fullname.local);
      };
    }
    function creator$1(name) {
      var fullname = namespace$1(name);
      return (fullname.local ? creatorFixed$1 : creatorInherit$1)(fullname);
    }
    function none$1() {}
    function selector$1(selector2) {
      return selector2 == null ? none$1 : function () {
        return this.querySelector(selector2);
      };
    }
    function selection_select$1(select2) {
      if (typeof select2 !== "function") select2 = selector$1(select2);
      for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node$1, subnode, i = 0; i < n; ++i) if ((node$1 = group[i]) && (subnode = select2.call(node$1, node$1.__data__, i, group))) {
        if ("__data__" in node$1) subnode.__data__ = node$1.__data__;
        subgroup[i] = subnode;
      }
      return new Selection$2(subgroups, this._parents);
    }
    function array$1(x) {
      return x == null ? [] : Array.isArray(x) ? x : Array.from(x);
    }
    function empty$1() {
      return [];
    }
    function selectorAll$1(selector2) {
      return selector2 == null ? empty$1 : function () {
        return this.querySelectorAll(selector2);
      };
    }
    function arrayAll$1(select2) {
      return function () {
        return array$1(select2.apply(this, arguments));
      };
    }
    function selection_selectAll$1(select2) {
      if (typeof select2 === "function") select2 = arrayAll$1(select2);else select2 = selectorAll$1(select2);
      for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) for (var group = groups[j], n = group.length, node$1, i = 0; i < n; ++i) if (node$1 = group[i]) {
        subgroups.push(select2.call(node$1, node$1.__data__, i, group));
        parents.push(node$1);
      }
      return new Selection$2(subgroups, parents);
    }
    function matcher$1(selector2) {
      return function () {
        return this.matches(selector2);
      };
    }
    function childMatcher$1(selector2) {
      return function (node$1) {
        return node$1.matches(selector2);
      };
    }
    function childFind$1(match) {
      return function () {
        return find$1.call(this.children, match);
      };
    }
    function childFirst$1() {
      return this.firstElementChild;
    }
    function selection_selectChild$1(match) {
      return this.select(match == null ? childFirst$1 : childFind$1(typeof match === "function" ? match : childMatcher$1(match)));
    }
    function children$1() {
      return Array.from(this.children);
    }
    function childrenFilter$1(match) {
      return function () {
        return filter$1.call(this.children, match);
      };
    }
    function selection_selectChildren$1(match) {
      return this.selectAll(match == null ? children$1 : childrenFilter$1(typeof match === "function" ? match : childMatcher$1(match)));
    }
    function selection_filter$1(match) {
      if (typeof match !== "function") match = matcher$1(match);
      for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node$1, i = 0; i < n; ++i) if ((node$1 = group[i]) && match.call(node$1, node$1.__data__, i, group)) subgroup.push(node$1);
      return new Selection$2(subgroups, this._parents);
    }
    function sparse$1(update) {
      return new Array(update.length);
    }
    function selection_enter$1() {
      return new Selection$2(this._enter || this._groups.map(sparse$1), this._parents);
    }
    function EnterNode$1(parent, datum2) {
      this.ownerDocument = parent.ownerDocument;
      this.namespaceURI = parent.namespaceURI;
      this._next = null;
      this._parent = parent;
      this.__data__ = datum2;
    }
    function constant$1$1(x) {
      return function () {
        return x;
      };
    }
    function bindIndex$1(parent, group, enter, update, exit, data) {
      var i = 0,
        node$1,
        groupLength = group.length,
        dataLength = data.length;
      for (; i < dataLength; ++i) if (node$1 = group[i]) {
        node$1.__data__ = data[i];
        update[i] = node$1;
      } else enter[i] = new EnterNode$1(parent, data[i]);
      for (; i < groupLength; ++i) if (node$1 = group[i]) exit[i] = node$1;
    }
    function bindKey$1(parent, group, enter, update, exit, data, key) {
      var i,
        node$1,
        nodeByKeyValue = /* @__PURE__ */new Map(),
        groupLength = group.length,
        dataLength = data.length,
        keyValues = new Array(groupLength),
        keyValue;
      for (i = 0; i < groupLength; ++i) if (node$1 = group[i]) {
        keyValues[i] = keyValue = key.call(node$1, node$1.__data__, i, group) + "";
        if (nodeByKeyValue.has(keyValue)) exit[i] = node$1;else nodeByKeyValue.set(keyValue, node$1);
      }
      for (i = 0; i < dataLength; ++i) {
        keyValue = key.call(parent, data[i], i, data) + "";
        if (node$1 = nodeByKeyValue.get(keyValue)) {
          update[i] = node$1;
          node$1.__data__ = data[i];
          nodeByKeyValue.delete(keyValue);
        } else enter[i] = new EnterNode$1(parent, data[i]);
      }
      for (i = 0; i < groupLength; ++i) if ((node$1 = group[i]) && nodeByKeyValue.get(keyValues[i]) === node$1) exit[i] = node$1;
    }
    function datum$1(node$1) {
      return node$1.__data__;
    }
    function selection_data$1(value, key) {
      if (!arguments.length) return Array.from(this, datum$1);
      var bind = key ? bindKey$1 : bindIndex$1,
        parents = this._parents,
        groups = this._groups;
      if (typeof value !== "function") value = constant$1$1(value);
      for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
        var parent = parents[j],
          group = groups[j],
          groupLength = group.length,
          data = arraylike$1(value.call(parent, parent && parent.__data__, j, parents)),
          dataLength = data.length,
          enterGroup = enter[j] = new Array(dataLength),
          updateGroup = update[j] = new Array(dataLength);
        bind(parent, group, enterGroup, updateGroup, exit[j] = new Array(groupLength), data, key);
        for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) if (previous = enterGroup[i0]) {
          if (i0 >= i1) i1 = i0 + 1;
          while (!(next = updateGroup[i1]) && ++i1 < dataLength);
          previous._next = next || null;
        }
      }
      update = new Selection$2(update, parents);
      update._enter = enter;
      update._exit = exit;
      return update;
    }
    function arraylike$1(data) {
      return typeof data === "object" && "length" in data ? data : Array.from(data);
    }
    function selection_exit$1() {
      return new Selection$2(this._exit || this._groups.map(sparse$1), this._parents);
    }
    function selection_join$1(onenter, onupdate, onexit) {
      var enter = this.enter(),
        update = this,
        exit = this.exit();
      if (typeof onenter === "function") {
        enter = onenter(enter);
        if (enter) enter = enter.selection();
      } else enter = enter.append(onenter + "");
      if (onupdate != null) {
        update = onupdate(update);
        if (update) update = update.selection();
      }
      if (onexit == null) exit.remove();else onexit(exit);
      return enter && update ? enter.merge(update).order() : update;
    }
    function selection_merge$1(context) {
      var selection$1 = context.selection ? context.selection() : context;
      for (var groups0 = this._groups, groups1 = selection$1._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node$1, i = 0; i < n; ++i) if (node$1 = group0[i] || group1[i]) merge[i] = node$1;
      for (; j < m0; ++j) merges[j] = groups0[j];
      return new Selection$2(merges, this._parents);
    }
    function selection_order$1() {
      for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) for (var group = groups[j], i = group.length - 1, next = group[i], node$1; --i >= 0;) if (node$1 = group[i]) {
        if (next && node$1.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node$1, next);
        next = node$1;
      }
      return this;
    }
    function selection_sort$1(compare) {
      if (!compare) compare = ascending$1;
      function compareNode(a, b) {
        return a && b ? compare(a.__data__, b.__data__) : !a - !b;
      }
      for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
        for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node$1, i = 0; i < n; ++i) if (node$1 = group[i]) sortgroup[i] = node$1;
        sortgroup.sort(compareNode);
      }
      return new Selection$2(sortgroups, this._parents).order();
    }
    function ascending$1(a, b) {
      return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
    }
    function selection_call$1() {
      var callback = arguments[0];
      arguments[0] = this;
      callback.apply(null, arguments);
      return this;
    }
    function selection_nodes$1() {
      return Array.from(this);
    }
    function selection_node$1() {
      for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
        var node$1 = group[i];
        if (node$1) return node$1;
      }
      return null;
    }
    function selection_size$1() {
      let size$1 = 0;
      for (const node$1 of this) ++size$1;
      return size$1;
    }
    function selection_empty$1() {
      return !this.node();
    }
    function selection_each$1(callback) {
      for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) for (var group = groups[j], i = 0, n = group.length, node$1; i < n; ++i) if (node$1 = group[i]) callback.call(node$1, node$1.__data__, i, group);
      return this;
    }
    function attrRemove$2(name) {
      return function () {
        this.removeAttribute(name);
      };
    }
    function attrRemoveNS$2(fullname) {
      return function () {
        this.removeAttributeNS(fullname.space, fullname.local);
      };
    }
    function attrConstant$2(name, value) {
      return function () {
        this.setAttribute(name, value);
      };
    }
    function attrConstantNS$2(fullname, value) {
      return function () {
        this.setAttributeNS(fullname.space, fullname.local, value);
      };
    }
    function attrFunction$2(name, value) {
      return function () {
        var v = value.apply(this, arguments);
        if (v == null) this.removeAttribute(name);else this.setAttribute(name, v);
      };
    }
    function attrFunctionNS$2(fullname, value) {
      return function () {
        var v = value.apply(this, arguments);
        if (v == null) this.removeAttributeNS(fullname.space, fullname.local);else this.setAttributeNS(fullname.space, fullname.local, v);
      };
    }
    function selection_attr$1(name, value) {
      var fullname = namespace$1(name);
      if (arguments.length < 2) {
        var node$1 = this.node();
        return fullname.local ? node$1.getAttributeNS(fullname.space, fullname.local) : node$1.getAttribute(fullname);
      }
      return this.each((value == null ? fullname.local ? attrRemoveNS$2 : attrRemove$2 : typeof value === "function" ? fullname.local ? attrFunctionNS$2 : attrFunction$2 : fullname.local ? attrConstantNS$2 : attrConstant$2)(fullname, value));
    }
    function defaultView$1(node$1) {
      return node$1.ownerDocument && node$1.ownerDocument.defaultView || node$1.document && node$1 || node$1.defaultView;
    }
    function styleRemove$2(name) {
      return function () {
        this.style.removeProperty(name);
      };
    }
    function styleConstant$2(name, value, priority) {
      return function () {
        this.style.setProperty(name, value, priority);
      };
    }
    function styleFunction$2(name, value, priority) {
      return function () {
        var v = value.apply(this, arguments);
        if (v == null) this.style.removeProperty(name);else this.style.setProperty(name, v, priority);
      };
    }
    function selection_style$1(name, value, priority) {
      return arguments.length > 1 ? this.each((value == null ? styleRemove$2 : typeof value === "function" ? styleFunction$2 : styleConstant$2)(name, value, priority == null ? "" : priority)) : styleValue$1(this.node(), name);
    }
    function styleValue$1(node$1, name) {
      return node$1.style.getPropertyValue(name) || defaultView$1(node$1).getComputedStyle(node$1, null).getPropertyValue(name);
    }
    function propertyRemove$1(name) {
      return function () {
        delete this[name];
      };
    }
    function propertyConstant$1(name, value) {
      return function () {
        this[name] = value;
      };
    }
    function propertyFunction$1(name, value) {
      return function () {
        var v = value.apply(this, arguments);
        if (v == null) delete this[name];else this[name] = v;
      };
    }
    function selection_property$1(name, value) {
      return arguments.length > 1 ? this.each((value == null ? propertyRemove$1 : typeof value === "function" ? propertyFunction$1 : propertyConstant$1)(name, value)) : this.node()[name];
    }
    function classArray$1(string) {
      return string.trim().split(/^|\s+/);
    }
    function classList$1(node$1) {
      return node$1.classList || new ClassList$1(node$1);
    }
    function ClassList$1(node$1) {
      this._node = node$1;
      this._names = classArray$1(node$1.getAttribute("class") || "");
    }
    function classedAdd$1(node$1, names) {
      var list = classList$1(node$1),
        i = -1,
        n = names.length;
      while (++i < n) list.add(names[i]);
    }
    function classedRemove$1(node$1, names) {
      var list = classList$1(node$1),
        i = -1,
        n = names.length;
      while (++i < n) list.remove(names[i]);
    }
    function classedTrue$1(names) {
      return function () {
        classedAdd$1(this, names);
      };
    }
    function classedFalse$1(names) {
      return function () {
        classedRemove$1(this, names);
      };
    }
    function classedFunction$1(names, value) {
      return function () {
        (value.apply(this, arguments) ? classedAdd$1 : classedRemove$1)(this, names);
      };
    }
    function selection_classed$1(name, value) {
      var names = classArray$1(name + "");
      if (arguments.length < 2) {
        var list = classList$1(this.node()),
          i = -1,
          n = names.length;
        while (++i < n) if (!list.contains(names[i])) return false;
        return true;
      }
      return this.each((typeof value === "function" ? classedFunction$1 : value ? classedTrue$1 : classedFalse$1)(names, value));
    }
    function textRemove$1() {
      this.textContent = "";
    }
    function textConstant$2(value) {
      return function () {
        this.textContent = value;
      };
    }
    function textFunction$2(value) {
      return function () {
        var v = value.apply(this, arguments);
        this.textContent = v == null ? "" : v;
      };
    }
    function selection_text$1(value) {
      return arguments.length ? this.each(value == null ? textRemove$1 : (typeof value === "function" ? textFunction$2 : textConstant$2)(value)) : this.node().textContent;
    }
    function htmlRemove$1() {
      this.innerHTML = "";
    }
    function htmlConstant$1(value) {
      return function () {
        this.innerHTML = value;
      };
    }
    function htmlFunction$1(value) {
      return function () {
        var v = value.apply(this, arguments);
        this.innerHTML = v == null ? "" : v;
      };
    }
    function selection_html$1(value) {
      return arguments.length ? this.each(value == null ? htmlRemove$1 : (typeof value === "function" ? htmlFunction$1 : htmlConstant$1)(value)) : this.node().innerHTML;
    }
    function raise$1() {
      if (this.nextSibling) this.parentNode.appendChild(this);
    }
    function selection_raise$1() {
      return this.each(raise$1);
    }
    function lower$1() {
      if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
    }
    function selection_lower$1() {
      return this.each(lower$1);
    }
    function selection_append$1(name) {
      var create$1 = typeof name === "function" ? name : creator$1(name);
      return this.select(function () {
        return this.appendChild(create$1.apply(this, arguments));
      });
    }
    function constantNull$1() {
      return null;
    }
    function selection_insert$1(name, before) {
      var create$1 = typeof name === "function" ? name : creator$1(name),
        select2 = before == null ? constantNull$1 : typeof before === "function" ? before : selector$1(before);
      return this.select(function () {
        return this.insertBefore(create$1.apply(this, arguments), select2.apply(this, arguments) || null);
      });
    }
    function remove$1() {
      var parent = this.parentNode;
      if (parent) parent.removeChild(this);
    }
    function selection_remove$1() {
      return this.each(remove$1);
    }
    function selection_cloneShallow$1() {
      var clone = this.cloneNode(false),
        parent = this.parentNode;
      return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
    }
    function selection_cloneDeep$1() {
      var clone = this.cloneNode(true),
        parent = this.parentNode;
      return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
    }
    function selection_clone$1(deep) {
      return this.select(deep ? selection_cloneDeep$1 : selection_cloneShallow$1);
    }
    function selection_datum$1(value) {
      return arguments.length ? this.property("__data__", value) : this.node().__data__;
    }
    function contextListener$1(listener) {
      return function (event) {
        listener.call(this, event, this.__data__);
      };
    }
    function parseTypenames$1$1(typenames) {
      return typenames.trim().split(/^|\s+/).map(function (t) {
        var name = "",
          i = t.indexOf(".");
        if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
        return {
          type: t,
          name
        };
      });
    }
    function onRemove$1(typename) {
      return function () {
        var on = this.__on;
        if (!on) return;
        for (var j = 0, i = -1, m = on.length, o; j < m; ++j) if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) this.removeEventListener(o.type, o.listener, o.options);else on[++i] = o;
        if (++i) on.length = i;else delete this.__on;
      };
    }
    function onAdd$1(typename, value, options) {
      return function () {
        var on = this.__on,
          o,
          listener = contextListener$1(value);
        if (on) {
          for (var j = 0, m = on.length; j < m; ++j) if ((o = on[j]).type === typename.type && o.name === typename.name) {
            this.removeEventListener(o.type, o.listener, o.options);
            this.addEventListener(o.type, o.listener = listener, o.options = options);
            o.value = value;
            return;
          }
        }
        this.addEventListener(typename.type, listener, options);
        o = {
          type: typename.type,
          name: typename.name,
          value,
          listener,
          options
        };
        if (!on) this.__on = [o];else on.push(o);
      };
    }
    function selection_on$1(typename, value, options) {
      var typenames = parseTypenames$1$1(typename + ""),
        i,
        n = typenames.length,
        t;
      if (arguments.length < 2) {
        var on = this.node().__on;
        if (on) {
          for (var j = 0, m = on.length, o; j < m; ++j) for (i = 0, o = on[j]; i < n; ++i) if ((t = typenames[i]).type === o.type && t.name === o.name) return o.value;
        }
        return;
      }
      on = value ? onAdd$1 : onRemove$1;
      for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));
      return this;
    }
    function dispatchEvent$1(node$1, type, params) {
      var window$1 = defaultView$1(node$1),
        event = window$1.CustomEvent;
      if (typeof event === "function") event = new event(type, params);else {
        event = window$1.document.createEvent("Event");
        if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;else event.initEvent(type, false, false);
      }
      node$1.dispatchEvent(event);
    }
    function dispatchConstant$1(type, params) {
      return function () {
        return dispatchEvent$1(this, type, params);
      };
    }
    function dispatchFunction$1(type, params) {
      return function () {
        return dispatchEvent$1(this, type, params.apply(this, arguments));
      };
    }
    function selection_dispatch$1(type, params) {
      return this.each((typeof params === "function" ? dispatchFunction$1 : dispatchConstant$1)(type, params));
    }
    function* selection_iterator$1() {
      for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) for (var group = groups[j], i = 0, n = group.length, node$1; i < n; ++i) if (node$1 = group[i]) yield node$1;
    }
    function Selection$2(groups, parents) {
      this._groups = groups;
      this._parents = parents;
    }
    function selection_selection$1() {
      return this;
    }
    function select$1(selector2) {
      return typeof selector2 === "string" ? new Selection$2([[document.querySelector(selector2)]], [document.documentElement]) : new Selection$2([[selector2]], root$1);
    }
    function sourceEvent$1(event) {
      let sourceEvent2;
      while (sourceEvent2 = event.sourceEvent) event = sourceEvent2;
      return event;
    }
    function pointer$1(event, node$1) {
      event = sourceEvent$1(event);
      if (node$1 === void 0) node$1 = event.currentTarget;
      if (node$1) {
        var svg = node$1.ownerSVGElement || node$1;
        if (svg.createSVGPoint) {
          var point = svg.createSVGPoint();
          point.x = event.clientX, point.y = event.clientY;
          point = point.matrixTransform(node$1.getScreenCTM().inverse());
          return [point.x, point.y];
        }
        if (node$1.getBoundingClientRect) {
          var rect = node$1.getBoundingClientRect();
          return [event.clientX - rect.left - node$1.clientLeft, event.clientY - rect.top - node$1.clientTop];
        }
      }
      return [event.pageX, event.pageY];
    }
    function dispatch$1() {
      for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
        if (!(t = arguments[i] + "") || t in _ || /[\s.]/.test(t)) throw new Error("illegal type: " + t);
        _[t] = [];
      }
      return new Dispatch$1(_);
    }
    function Dispatch$1(_) {
      this._ = _;
    }
    function parseTypenames$2(typenames, types) {
      return typenames.trim().split(/^|\s+/).map(function (t) {
        var name = "",
          i = t.indexOf(".");
        if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
        if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
        return {
          type: t,
          name
        };
      });
    }
    function get$2(type, name) {
      for (var i = 0, n = type.length, c; i < n; ++i) if ((c = type[i]).name === name) return c.value;
    }
    function set$2(type, name, callback) {
      for (var i = 0, n = type.length; i < n; ++i) if (type[i].name === name) {
        type[i] = noop$1, type = type.slice(0, i).concat(type.slice(i + 1));
        break;
      }
      if (callback != null) type.push({
        name,
        value: callback
      });
      return type;
    }
    function nopropagation$1(event) {
      event.stopImmediatePropagation();
    }
    function noevent$2(event) {
      event.preventDefault();
      event.stopImmediatePropagation();
    }
    function nodrag(view) {
      var root2 = view.document.documentElement,
        selection$1 = select$1(view).on("dragstart.drag", noevent$2, nonpassivecapture$1);
      if ("onselectstart" in root2) selection$1.on("selectstart.drag", noevent$2, nonpassivecapture$1);else {
        root2.__noselect = root2.style.MozUserSelect;
        root2.style.MozUserSelect = "none";
      }
    }
    function yesdrag$1(view, noclick) {
      var root2 = view.document.documentElement,
        selection$1 = select$1(view).on("dragstart.drag", null);
      if (noclick) {
        selection$1.on("click.drag", noevent$2, nonpassivecapture$1);
        setTimeout(function () {
          selection$1.on("click.drag", null);
        }, 0);
      }
      if ("onselectstart" in root2) selection$1.on("selectstart.drag", null);else {
        root2.style.MozUserSelect = root2.__noselect;
        delete root2.__noselect;
      }
    }
    function DragEvent(type, {
      sourceEvent: sourceEvent2,
      subject,
      target: target$1,
      identifier,
      active,
      x,
      y,
      dx,
      dy,
      dispatch: dispatch2
    }) {
      Object.defineProperties(this, {
        type: {
          value: type,
          enumerable: true,
          configurable: true
        },
        sourceEvent: {
          value: sourceEvent2,
          enumerable: true,
          configurable: true
        },
        subject: {
          value: subject,
          enumerable: true,
          configurable: true
        },
        target: {
          value: target$1,
          enumerable: true,
          configurable: true
        },
        identifier: {
          value: identifier,
          enumerable: true,
          configurable: true
        },
        active: {
          value: active,
          enumerable: true,
          configurable: true
        },
        x: {
          value: x,
          enumerable: true,
          configurable: true
        },
        y: {
          value: y,
          enumerable: true,
          configurable: true
        },
        dx: {
          value: dx,
          enumerable: true,
          configurable: true
        },
        dy: {
          value: dy,
          enumerable: true,
          configurable: true
        },
        _: {
          value: dispatch2
        }
      });
    }
    function defaultFilter$1(event) {
      return !event.ctrlKey && !event.button;
    }
    function defaultContainer() {
      return this.parentNode;
    }
    function defaultSubject(event, d) {
      return d == null ? {
        x: event.x,
        y: event.y
      } : d;
    }
    function defaultTouchable$1() {
      return navigator.maxTouchPoints || "ontouchstart" in this;
    }
    function drag() {
      var filter2 = defaultFilter$1,
        container$1 = defaultContainer,
        subject = defaultSubject,
        touchable = defaultTouchable$1,
        gestures = {},
        listeners = dispatch$1("start", "drag", "end"),
        active = 0,
        mousedownx,
        mousedowny,
        mousemoving,
        touchending,
        clickDistance2 = 0;
      function drag2(selection$1) {
        selection$1.on("mousedown.drag", mousedowned).filter(touchable).on("touchstart.drag", touchstarted).on("touchmove.drag", touchmoved, nonpassive).on("touchend.drag touchcancel.drag", touchended).style("touch-action", "none").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
      }
      function mousedowned(event, d) {
        if (touchending || !filter2.call(this, event, d)) return;
        var gesture = beforestart(this, container$1.call(this, event, d), event, d, "mouse");
        if (!gesture) return;
        select$1(event.view).on("mousemove.drag", mousemoved, nonpassivecapture$1).on("mouseup.drag", mouseupped, nonpassivecapture$1);
        nodrag(event.view);
        nopropagation$1(event);
        mousemoving = false;
        mousedownx = event.clientX;
        mousedowny = event.clientY;
        gesture("start", event);
      }
      function mousemoved(event) {
        noevent$2(event);
        if (!mousemoving) {
          var dx = event.clientX - mousedownx,
            dy = event.clientY - mousedowny;
          mousemoving = dx * dx + dy * dy > clickDistance2;
        }
        gestures.mouse("drag", event);
      }
      function mouseupped(event) {
        select$1(event.view).on("mousemove.drag mouseup.drag", null);
        yesdrag$1(event.view, mousemoving);
        noevent$2(event);
        gestures.mouse("end", event);
      }
      function touchstarted(event, d) {
        if (!filter2.call(this, event, d)) return;
        var touches = event.changedTouches,
          c = container$1.call(this, event, d),
          n = touches.length,
          i,
          gesture;
        for (i = 0; i < n; ++i) if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {
          nopropagation$1(event);
          gesture("start", event, touches[i]);
        }
      }
      function touchmoved(event) {
        var touches = event.changedTouches,
          n = touches.length,
          i,
          gesture;
        for (i = 0; i < n; ++i) if (gesture = gestures[touches[i].identifier]) {
          noevent$2(event);
          gesture("drag", event, touches[i]);
        }
      }
      function touchended(event) {
        var touches = event.changedTouches,
          n = touches.length,
          i,
          gesture;
        if (touchending) clearTimeout(touchending);
        touchending = setTimeout(function () {
          touchending = null;
        }, 500);
        for (i = 0; i < n; ++i) if (gesture = gestures[touches[i].identifier]) {
          nopropagation$1(event);
          gesture("end", event, touches[i]);
        }
      }
      function beforestart(that, container2, event, d, identifier, touch) {
        var dispatch2 = listeners.copy(),
          p = pointer$1(touch || event, container2),
          dx,
          dy,
          s;
        if ((s = subject.call(that, new DragEvent("beforestart", {
          sourceEvent: event,
          target: drag2,
          identifier,
          active,
          x: p[0],
          y: p[1],
          dx: 0,
          dy: 0,
          dispatch: dispatch2
        }), d)) == null) return;
        dx = s.x - p[0] || 0;
        dy = s.y - p[1] || 0;
        return function gesture(type, event2, touch2) {
          var p0 = p,
            n;
          switch (type) {
            case "start":
              gestures[identifier] = gesture, n = active++;
              break;
            case "end":
              delete gestures[identifier], --active;
            case "drag":
              p = pointer$1(touch2 || event2, container2), n = active;
              break;
          }
          dispatch2.call(type, that, new DragEvent(type, {
            sourceEvent: event2,
            subject: s,
            target: drag2,
            identifier,
            active: n,
            x: p[0] + dx,
            y: p[1] + dy,
            dx: p[0] - p0[0],
            dy: p[1] - p0[1],
            dispatch: dispatch2
          }), d);
        };
      }
      drag2.filter = function (_) {
        return arguments.length ? (filter2 = typeof _ === "function" ? _ : constant$3(!!_), drag2) : filter2;
      };
      drag2.container = function (_) {
        return arguments.length ? (container$1 = typeof _ === "function" ? _ : constant$3(_), drag2) : container$1;
      };
      drag2.subject = function (_) {
        return arguments.length ? (subject = typeof _ === "function" ? _ : constant$3(_), drag2) : subject;
      };
      drag2.touchable = function (_) {
        return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$3(!!_), drag2) : touchable;
      };
      drag2.on = function () {
        var value = listeners.on.apply(listeners, arguments);
        return value === listeners ? drag2 : value;
      };
      drag2.clickDistance = function (_) {
        return arguments.length ? (clickDistance2 = (_ = +_) * _, drag2) : Math.sqrt(clickDistance2);
      };
      return drag2;
    }
    function getDirection({
      width: width$1,
      prevWidth,
      height,
      prevHeight,
      invertX,
      invertY
    }) {
      const deltaWidth = width$1 - prevWidth;
      const deltaHeight = height - prevHeight;
      const direction = [deltaWidth > 0 ? 1 : deltaWidth < 0 ? -1 : 0, deltaHeight > 0 ? 1 : deltaHeight < 0 ? -1 : 0];
      if (deltaWidth && invertX) direction[0] = direction[0] * -1;
      if (deltaHeight && invertY) direction[1] = direction[1] * -1;
      return direction;
    }
    //#endregion
    //#region src/features/workflows/canvas/composables/useCanvasNodeHandle.ts
    function useCanvasNodeHandle() {
      const handle$5 = inject(CanvasNodeHandleKey);
      return {
        label: computed(() => handle$5?.label.value ?? ""),
        isConnected: computed(() => handle$5?.isConnected.value ?? false),
        isConnecting: computed(() => handle$5?.isConnecting.value ?? false),
        isReadOnly: computed(() => handle$5?.isReadOnly.value),
        isRequired: computed(() => handle$5?.isRequired.value),
        maxConnections: computed(() => handle$5?.maxConnections.value),
        type: computed(() => handle$5?.type.value ?? NodeConnectionTypes.Main),
        mode: computed(() => handle$5?.mode.value ?? CanvasConnectionMode.Input),
        index: computed(() => handle$5?.index.value ?? 0),
        runData: computed(() => handle$5?.runData.value)
      };
    }

    //#endregion
    //#region src/features/workflows/canvas/components/elements/handles/render-types/parts/CanvasHandleRectangle.vue?vue&type=script&setup=true&lang.ts

    //#endregion
    //#region src/features/shared/contextMenu/composables/useContextMenuItems.ts
    function useContextMenuItems(targetNodeIds) {
      const uiStore = useUIStore();
      const nodeTypesStore = useNodeTypesStore();
      const workflowsStore = useWorkflowsStore();
      const sourceControlStore = useSourceControlStore();
      const i18n = useI18n();
      const workflowObject = computed(() => workflowsStore.workflowObject);
      const workflowPermissions = computed(() => getResourcePermissions(workflowsStore.workflow.scopes).workflow);
      const isReadOnly = computed(() => sourceControlStore.preferences.branchReadOnly || uiStore.isReadOnlyView || !workflowPermissions.value.update || workflowsStore.workflow.isArchived);
      const canOpenSubworkflow = computed(() => {
        if (targetNodes.value.length !== 1) return false;
        const node$1 = targetNodes.value[0];
        if (!isNodeWithWorkflowSelector(node$1)) return false;
        return !!getSubworkflowId(node$1);
      });
      const targetNodes = computed(() => targetNodeIds.value.map(nodeId => workflowsStore.getNodeById(nodeId)).filter(isPresent));
      const canAddNodeOfType = nodeType => {
        const sameTypeNodes = workflowsStore.allNodes.filter(n => n.type === nodeType.name);
        return nodeType.maxNodes === void 0 || sameTypeNodes.length < nodeType.maxNodes;
      };
      const canDuplicateNode = node$1 => {
        const nodeType = nodeTypesStore.getNodeType(node$1.type, node$1.typeVersion);
        if (!nodeType) return false;
        if (NOT_DUPLICATABLE_NODE_TYPES.includes(nodeType.name)) return false;
        return canAddNodeOfType(nodeType);
      };
      const hasPinData = node$1 => {
        return !!workflowsStore.pinDataByNodeName(node$1.name);
      };
      const isExecutable$1 = node$1 => {
        const workflowNode = workflowObject.value.getNode(node$1.name);
        const nodeType = nodeTypesStore.getNodeType(workflowNode.type, workflowNode.typeVersion);
        return isExecutable(workflowObject.value, workflowNode, nodeType);
      };
      const isWebhookNode = node$1 => {
        if (node$1.type === "n8n-nodes-base.webhook") return true;
        if (!node$1.webhookId) return false;
        if (!node$1.type.toLocaleLowerCase().includes("trigger")) return false;
        if (!isExecutable$1(node$1)) return false;
        return true;
      };
      return computed(() => {
        const nodes = targetNodes.value;
        const onlyStickies = nodes.every(node$1 => node$1.type === STICKY_NODE_TYPE);
        const i18nOptions = {
          adjustToNumber: nodes.length,
          interpolate: {
            subject: onlyStickies ? i18n.baseText("contextMenu.sticky", {
              adjustToNumber: nodes.length
            }) : i18n.baseText("contextMenu.node", {
              adjustToNumber: nodes.length
            })
          }
        };
        const selectionActions = [{
          id: "select_all",
          divided: true,
          label: i18n.baseText("contextMenu.selectAll"),
          shortcut: {
            metaKey: true,
            keys: ["A"]
          },
          disabled: nodes.length === workflowsStore.allNodes.length
        }, {
          id: "deselect_all",
          label: i18n.baseText("contextMenu.deselectAll"),
          disabled: nodes.length === 0
        }];
        const extractionActions = [{
          id: "extract_sub_workflow",
          divided: true,
          label: i18n.baseText("contextMenu.extract", {
            adjustToNumber: nodes.length
          }),
          shortcut: {
            altKey: true,
            keys: ["X"]
          },
          disabled: isReadOnly.value
        }];
        const layoutActions = [{
          id: "tidy_up",
          divided: true,
          label: i18n.baseText(nodes.length < 2 ? "contextMenu.tidyUpWorkflow" : "contextMenu.tidyUpSelection"),
          shortcut: {
            shiftKey: true,
            altKey: true,
            keys: ["T"]
          },
          disabled: isReadOnly.value
        }];
        if (nodes.length === 0) return [{
          id: "add_node",
          shortcut: {
            keys: ["Tab"]
          },
          label: i18n.baseText("contextMenu.addNode"),
          disabled: isReadOnly.value
        }, {
          id: "add_sticky",
          shortcut: {
            shiftKey: true,
            keys: ["s"]
          },
          label: i18n.baseText("contextMenu.addSticky"),
          disabled: isReadOnly.value
        }, ...layoutActions, ...selectionActions];else {
          const menuActions = [!onlyStickies && {
            id: "toggle_activation",
            label: nodes.every(node$1 => node$1.disabled) ? i18n.baseText("contextMenu.activate", i18nOptions) : i18n.baseText("contextMenu.deactivate", i18nOptions),
            shortcut: {
              keys: ["D"]
            },
            disabled: isReadOnly.value
          }, !onlyStickies && {
            id: "toggle_pin",
            label: nodes.every(node$1 => hasPinData(node$1)) ? i18n.baseText("contextMenu.unpin", i18nOptions) : i18n.baseText("contextMenu.pin", i18nOptions),
            shortcut: {
              keys: ["p"]
            },
            disabled: isReadOnly.value || !nodes.every(n => usePinnedData(n).canPinNode(true))
          }, {
            id: "copy",
            label: i18n.baseText("contextMenu.copy", i18nOptions),
            shortcut: {
              metaKey: true,
              keys: ["C"]
            }
          }, {
            id: "duplicate",
            label: i18n.baseText("contextMenu.duplicate", i18nOptions),
            shortcut: {
              metaKey: true,
              keys: ["D"]
            },
            disabled: isReadOnly.value || !nodes.every(canDuplicateNode)
          }, ...layoutActions, ...extractionActions, ...selectionActions, {
            id: "delete",
            divided: true,
            label: i18n.baseText("contextMenu.delete", i18nOptions),
            shortcut: {
              keys: ["Del"]
            },
            disabled: isReadOnly.value
          }].filter(Boolean);
          if (nodes.length === 1) {
            const copyWebhookActions = [];
            if (isWebhookNode(nodes[0])) {
              const isProductionOnly = PRODUCTION_ONLY_TRIGGER_NODE_TYPES.includes(nodes[0].type);
              const isWorkflowActive = workflowsStore.workflow.active;
              if (!isProductionOnly) copyWebhookActions.push({
                divided: true,
                id: "copy_test_url",
                label: i18n.baseText("contextMenu.copyTestUrl"),
                shortcut: {
                  shiftKey: true,
                  altKey: true,
                  keys: ["U"]
                },
                disabled: false
              });
              if (isWorkflowActive) copyWebhookActions.push({
                divided: isProductionOnly,
                id: "copy_production_url",
                label: i18n.baseText("contextMenu.copyProductionUrl"),
                shortcut: {
                  altKey: true,
                  keys: ["U"]
                },
                disabled: false
              });
            }
            const singleNodeActions = onlyStickies ? [{
              id: "open",
              label: i18n.baseText("contextMenu.editSticky"),
              shortcut: {
                keys: ["↵"]
              },
              disabled: isReadOnly.value
            }, {
              id: "change_color",
              label: i18n.baseText("contextMenu.changeColor"),
              disabled: isReadOnly.value
            }] : [{
              id: "open",
              label: i18n.baseText("contextMenu.open"),
              shortcut: {
                keys: ["↵"]
              }
            }, {
              id: "execute",
              label: i18n.baseText("contextMenu.test"),
              disabled: isReadOnly.value || !isExecutable$1(nodes[0])
            }, ...copyWebhookActions, {
              divided: !!copyWebhookActions.length,
              id: "rename",
              label: i18n.baseText("contextMenu.rename"),
              shortcut: {
                keys: ["Space"]
              },
              disabled: isReadOnly.value
            }, {
              id: "replace",
              label: i18n.baseText("contextMenu.replace"),
              shortcut: {
                keys: ["R"]
              },
              disabled: isReadOnly.value
            }];
            if (isNodeWithWorkflowSelector(nodes[0])) singleNodeActions.push({
              id: "open_sub_workflow",
              label: i18n.baseText("contextMenu.openSubworkflow"),
              shortcut: {
                shiftKey: true,
                metaKey: true,
                keys: ["O"]
              },
              disabled: !canOpenSubworkflow.value
            });
            menuActions.unshift(...singleNodeActions);
          }
          return menuActions;
        }
      });
    }

    //#endregion
    //#region src/features/shared/contextMenu/composables/useContextMenu.ts

    function useCanvasLayout(canvasId, isEmbeddedNdvActive) {
      const {
        findNode,
        findEdge,
        getSelectedNodes,
        edges: allEdges,
        nodes: allNodes
      } = useVueFlow(canvasId);
      function getTargetData(target$1) {
        if (target$1 === "selection") return {
          nodes: getSelectedNodes.value,
          edges: allEdges.value
        };
        return {
          nodes: allNodes.value,
          edges: allEdges.value
        };
      }
      function sortByPosition(posA, posB) {
        const yDiff = posA.y - posB.y;
        return yDiff === 0 ? posA.x - posB.x : yDiff;
      }
      function sortNodesByPosition(nodeA, nodeB) {
        const hasEdgesA = allEdges.value.some(edge$2 => edge$2.target === nodeA.id);
        const hasEdgesB = allEdges.value.some(edge$2 => edge$2.target === nodeB.id);
        if (!hasEdgesA && hasEdgesB) return -1;
        if (hasEdgesA && !hasEdgesB) return 1;
        return sortByPosition(nodeA.position, nodeB.position);
      }
      function sortEdgesByPosition(edgeA, edgeB) {
        return sortByPosition(positionFromEdge(edgeA), positionFromEdge(edgeB));
      }
      function positionFromEdge(edge$2) {
        return {
          x: edge$2.targetX,
          y: edge$2.targetY
        };
      }
      function getNodeDimensions(node$1) {
        if (node$1.dimensions && typeof node$1.dimensions.width === "number" && typeof node$1.dimensions.height === "number" && node$1.dimensions.width > 0 && node$1.dimensions.height > 0) return {
          width: node$1.dimensions.width,
          height: node$1.dimensions.height
        };
        if (node$1.data && node$1.data.render) return calculateNodeSize(node$1.data.render.type === CanvasNodeRenderType.Default && node$1.data.render.options.configuration === true, node$1.data.render.type === CanvasNodeRenderType.Default && node$1.data.render.options.configurable === true, node$1.data.inputs.filter(input => input.type === "main").length || 1, node$1.data.outputs.filter(output => output.type === "main").length || 1, node$1.data.inputs.filter(input => input.type !== "main").length + node$1.data.outputs.filter(output => output.type !== "main").length, isEmbeddedNdvActive.value);
        return {
          width: DEFAULT_NODE_SIZE[0],
          height: DEFAULT_NODE_SIZE[1]
        };
      }
      function createDagreGraph({
        nodes,
        edges
      }) {
        const graph = new import_dagre.default.graphlib.Graph();
        graph.setDefaultEdgeLabel(() => ({}));
        const graphNodes = nodes.map(node$1 => findNode(node$1.id)).filter(isPresent).sort(sortNodesByPosition);
        const nodeIdSet = new Set(nodes.map(node$1 => node$1.id));
        graphNodes.forEach(node$1 => {
          const {
            width: width$1,
            height
          } = getNodeDimensions(node$1);
          const {
            x,
            y
          } = node$1.position;
          graph.setNode(node$1.id, {
            width: width$1,
            height,
            x,
            y
          });
        });
        edges.map(node$1 => findEdge(node$1.id)).filter(isPresent).filter(edge$2 => nodeIdSet.has(edge$2.source) && nodeIdSet.has(edge$2.target)).sort(sortEdgesByPosition).forEach(edge$2 => graph.setEdge(edge$2.source, edge$2.target));
        return graph;
      }
      function createDagreSubGraph({
        nodeIds,
        parent
      }) {
        const subGraph = new import_dagre.default.graphlib.Graph();
        subGraph.setGraph({
          rankdir: "LR",
          edgesep: NODE_Y_SPACING,
          nodesep: NODE_Y_SPACING,
          ranksep: NODE_X_SPACING
        });
        subGraph.setDefaultEdgeLabel(() => ({}));
        const nodeIdSet = new Set(nodeIds);
        parent.nodes().filter(nodeId => nodeIdSet.has(nodeId)).forEach(nodeId => {
          subGraph.setNode(nodeId, parent.node(nodeId));
        });
        parent.edges().filter(edge$2 => nodeIdSet.has(edge$2.v) && nodeIdSet.has(edge$2.w)).forEach(edge$2 => subGraph.setEdge(edge$2.v, edge$2.w, parent.edge(edge$2)));
        return subGraph;
      }
      function createDagreVerticalGraph({
        nodes
      }) {
        const subGraph = new import_dagre.default.graphlib.Graph();
        subGraph.setGraph({
          rankdir: "TB",
          align: "UL",
          edgesep: SUBGRAPH_SPACING,
          nodesep: SUBGRAPH_SPACING,
          ranksep: SUBGRAPH_SPACING
        });
        subGraph.setDefaultEdgeLabel(() => ({}));
        nodes.forEach(({
          id: id$1,
          box: {
            x,
            y,
            width: width$1,
            height
          }
        }) => subGraph.setNode(id$1, {
          x,
          y,
          width: width$1,
          height
        }));
        nodes.forEach((node$1, index) => {
          if (!nodes[index + 1]) return;
          subGraph.setEdge(node$1.id, nodes[index + 1].id);
        });
        return subGraph;
      }
      function createAiSubGraph({
        parent,
        nodeIds
      }) {
        const subGraph = new import_dagre.default.graphlib.Graph();
        subGraph.setGraph({
          rankdir: "TB",
          edgesep: AI_X_SPACING,
          nodesep: AI_X_SPACING,
          ranksep: AI_Y_SPACING
        });
        subGraph.setDefaultEdgeLabel(() => ({}));
        const nodeIdSet = new Set(nodeIds);
        parent.nodes().filter(nodeId => nodeIdSet.has(nodeId)).forEach(nodeId => {
          subGraph.setNode(nodeId, parent.node(nodeId));
        });
        parent.edges().filter(edge$2 => nodeIdSet.has(edge$2.v) && nodeIdSet.has(edge$2.w)).forEach(edge$2 => subGraph.setEdge(edge$2.w, edge$2.v));
        return subGraph;
      }
      function compositeBoundingBox(boxes) {
        const {
          minX,
          minY,
          maxX,
          maxY
        } = boxes.reduce((bbox, node$1) => {
          const {
            x,
            y,
            width: width$1,
            height
          } = node$1;
          return {
            minX: Math.min(bbox.minX, x),
            maxX: Math.max(bbox.maxX, x + width$1),
            minY: Math.min(bbox.minY, y),
            maxY: Math.max(bbox.maxY, y + height)
          };
        }, {
          minX: Infinity,
          minY: Infinity,
          maxX: -Infinity,
          maxY: -Infinity
        });
        return {
          x: minX,
          y: minY,
          width: maxX - minX,
          height: maxY - minY
        };
      }
      function boundingBoxFromCanvasNode(node$1) {
        const {
          width: width$1,
          height
        } = getNodeDimensions(node$1);
        return {
          x: node$1.position.x,
          y: node$1.position.y,
          width: width$1,
          height
        };
      }
      function boundingBoxFromDagreNode(node$1) {
        return {
          x: node$1.x - node$1.width / 2,
          y: node$1.y - node$1.height / 2,
          width: node$1.width,
          height: node$1.height
        };
      }
      function boundingBoxFromGraph(graph) {
        return compositeBoundingBox(graph.nodes().map(nodeId => boundingBoxFromDagreNode(graph.node(nodeId))));
      }
      function boundingBoxFromCanvasNodes(nodes) {
        return compositeBoundingBox(nodes.map(boundingBoxFromCanvasNode));
      }
      function isCoveredBy(parent, child) {
        const childRight = child.x + child.width;
        const childBottom = child.y + child.height;
        const parentRight = parent.x + parent.width;
        const parentBottom = parent.y + parent.height;
        return child.x >= parent.x && child.y >= parent.y && childRight <= parentRight && childBottom <= parentBottom;
      }
      function centerHorizontally(container$1, target$1) {
        return container$1.x + container$1.width / 2 - target$1.width / 2;
      }
      function intersects(container$1, target$1, padding = 0) {
        const targetWithPadding = {
          x: target$1.x - padding,
          y: target$1.y - padding,
          width: target$1.width + padding * 2,
          height: target$1.height + padding * 2
        };
        return !(targetWithPadding.x + targetWithPadding.width < container$1.x || targetWithPadding.x > container$1.x + container$1.width || targetWithPadding.y + targetWithPadding.height < container$1.y || targetWithPadding.y > container$1.y + container$1.height);
      }
      function isAiParentNode(node$1) {
        return node$1.render.type === CanvasNodeRenderType.Default && node$1.render.options.configurable && !node$1.render.options.configuration;
      }
      function isAiConfigNode(node$1) {
        return node$1.render.type === CanvasNodeRenderType.Default && node$1.render.options.configuration;
      }
      function getAllConnectedAiConfigNodes({
        graph,
        root: root$2,
        nodeById
      }) {
        return graph.predecessors(root$2.id).map(successor => nodeById[successor]).filter(node$1 => isAiConfigNode(node$1.data)).flatMap(node$1 => [node$1.id, ...getAllConnectedAiConfigNodes({
          graph,
          root: node$1.data,
          nodeById
        })]);
      }
      function layout$1(target$1) {
        const {
          nodes,
          edges
        } = getTargetData(target$1);
        const nonStickyNodes = nodes.filter(node$1 => node$1.data.type !== STICKY_NODE_TYPE).map(node$1 => findNode(node$1.id)).filter(isPresent);
        const boundingBoxBefore = boundingBoxFromCanvasNodes(nonStickyNodes);
        const parentGraph = createDagreGraph({
          nodes: nonStickyNodes,
          edges
        });
        const nodeById = nonStickyNodes.reduce((acc, node$1) => {
          acc[node$1.id] = node$1;
          return acc;
        }, {});
        const subgraphs = import_dagre.default.graphlib.alg.components(parentGraph).map(nodeIds => {
          const subgraph = createDagreSubGraph({
            nodeIds,
            parent: parentGraph
          });
          const aiGraphs = subgraph.nodes().map(nodeId => nodeById[nodeId].data).filter(isAiParentNode).map(aiParentNode => {
            const configNodeIds = getAllConnectedAiConfigNodes({
              graph: subgraph,
              nodeById,
              root: aiParentNode
            });
            const aiGraph = createAiSubGraph({
              parent: subgraph,
              nodeIds: configNodeIds.concat(aiParentNode.id)
            });
            configNodeIds.forEach(nodeId => subgraph.removeNode(nodeId));
            const rootEdges = subgraph.edges().filter(edge$2 => edge$2.v === aiParentNode.id || edge$2.w === aiParentNode.id);
            import_dagre.default.layout(aiGraph, {
              disableOptimalOrderHeuristic: true
            });
            const aiBoundingBox = boundingBoxFromGraph(aiGraph);
            subgraph.setNode(aiParentNode.id, {
              width: aiBoundingBox.width,
              height: aiBoundingBox.height
            });
            rootEdges.forEach(edge$2 => subgraph.setEdge(edge$2));
            return {
              graph: aiGraph,
              boundingBox: aiBoundingBox,
              aiParentNode
            };
          });
          import_dagre.default.layout(subgraph, {
            disableOptimalOrderHeuristic: true
          });
          return {
            graph: subgraph,
            aiGraphs,
            boundingBox: boundingBoxFromGraph(subgraph)
          };
        });
        const compositeGraph = createDagreVerticalGraph({
          nodes: subgraphs.map(({
            boundingBox
          }, index) => ({
            box: boundingBox,
            id: index.toString()
          }))
        });
        import_dagre.default.layout(compositeGraph, {
          disableOptimalOrderHeuristic: true
        });
        const boundingBoxByNodeId = subgraphs.flatMap(({
          graph,
          aiGraphs
        }, index) => {
          const subgraphPosition = compositeGraph.node(index.toString());
          const aiParentNodes = new Set(aiGraphs.map(({
            aiParentNode
          }) => aiParentNode.id));
          const offset = {
            x: 0,
            y: subgraphPosition.y - subgraphPosition.height / 2
          };
          return graph.nodes().flatMap(nodeId => {
            const {
              x,
              y,
              width: width$1,
              height
            } = graph.node(nodeId);
            const positionedNode = {
              id: nodeId,
              boundingBox: {
                x: x + offset.x - width$1 / 2,
                y: y + offset.y - height / 2,
                width: width$1,
                height
              }
            };
            if (aiParentNodes.has(nodeId)) {
              const aiGraph = aiGraphs.find(({
                aiParentNode
              }) => aiParentNode.id === nodeId);
              if (!aiGraph) return [];
              const aiParentNodeBox = positionedNode.boundingBox;
              const parentOffset = {
                x: aiParentNodeBox.x,
                y: aiParentNodeBox.y
              };
              return aiGraph.graph.nodes().map(aiNodeId => {
                const aiNode = aiGraph.graph.node(aiNodeId);
                return {
                  id: aiNodeId,
                  boundingBox: {
                    x: aiNode.x + parentOffset.x - aiNode.width / 2,
                    y: aiNode.y + parentOffset.y - aiNode.height / 2,
                    width: aiNode.width,
                    height: aiNode.height
                  }
                };
              });
            }
            return positionedNode;
          });
        }).reduce((acc, node$1) => {
          acc[node$1.id] = node$1.boundingBox;
          return acc;
        }, {});
        subgraphs.flatMap(({
          aiGraphs
        }) => aiGraphs).forEach(({
          graph
        }) => {
          const aiNodes = graph.nodes();
          const aiGraphBoundingBox = compositeBoundingBox(aiNodes.map(nodeId => boundingBoxByNodeId[nodeId]).filter(isPresent));
          const aiNodeVerticalCorrection = aiGraphBoundingBox.height / 2 - DEFAULT_NODE_SIZE[0] / 2;
          aiGraphBoundingBox.y += aiNodeVerticalCorrection;
          if (!Object.entries(boundingBoxByNodeId).filter(([id$1]) => !graph.hasNode(id$1)).some(([, nodeBoundingBox]) => intersects(aiGraphBoundingBox, nodeBoundingBox, NODE_Y_SPACING))) for (const aiNode of aiNodes) boundingBoxByNodeId[aiNode].y += aiNodeVerticalCorrection;
        });
        const positionedNodes = Object.entries(boundingBoxByNodeId).map(([id$1, boundingBox]) => ({
          id: id$1,
          boundingBox
        }));
        const boundingBoxAfter = compositeBoundingBox(positionedNodes.map(node$1 => node$1.boundingBox));
        const anchor = {
          x: boundingBoxAfter.x - boundingBoxBefore.x,
          y: boundingBoxAfter.y - boundingBoxBefore.y
        };
        const positionedStickies = nodes.filter(node$1 => node$1.data.type === STICKY_NODE_TYPE).map(node$1 => findNode(node$1.id)).filter(isPresent).map(sticky$1 => {
          const stickyBox = boundingBoxFromCanvasNode(sticky$1);
          const coveredNodes = nonStickyNodes.filter(node$1 => isCoveredBy(boundingBoxFromCanvasNode(sticky$1), boundingBoxFromCanvasNode(node$1)));
          if (coveredNodes.length === 0) return null;
          const coveredNodesBoxAfter = compositeBoundingBox(positionedNodes.filter(node$1 => coveredNodes.some(covered => covered.id === node$1.id)).map(({
            boundingBox
          }) => boundingBox));
          return {
            id: sticky$1.id,
            boundingBox: {
              x: centerHorizontally(coveredNodesBoxAfter, stickyBox),
              y: coveredNodesBoxAfter.y + coveredNodesBoxAfter.height - stickyBox.height + STICKY_BOTTOM_PADDING,
              height: stickyBox.height,
              width: stickyBox.width
            }
          };
        }).filter(isPresent);
        return {
          boundingBox: boundingBoxAfter,
          nodes: positionedNodes.concat(positionedStickies).map(({
            id: id$1,
            boundingBox
          }) => {
            return {
              id: id$1,
              x: boundingBox.x - anchor.x,
              y: boundingBox.y - anchor.y
            };
          })
        };
      }
      return {
        layout: layout$1
      };
    }

    //#endregion
    //#region src/features/workflows/canvas/composables/useCanvasNodeHover.ts
    /**
    * From a given node list, finds a node that the mouse cursor is within its hit box.
    * If more than one node meets this condition, returns the closest one.
    */
    function useCanvasNodeHover(nodesRef, store, getHitBox) {
      const id$1 = ref();
      const recalculate = useThrottleFn(event => {
        const bounds = store.viewportRef.value?.getBoundingClientRect();
        if (!bounds) return;
        const eventCoord = store.project({
          x: event.clientX - bounds.x,
          y: event.clientY - bounds.y
        });
        id$1.value = nodesRef.value.flatMap(node$1 => {
          if (node$1.data?.disabled) return [];
          const vueFlowNode = store.nodeLookup.value.get(node$1.id);
          if (!vueFlowNode) return [];
          const nodeRect = getRectOfNodes([vueFlowNode]);
          const hitBox = getHitBox(nodeRect);
          if (hitBox.x > eventCoord.x || eventCoord.x > hitBox.x + hitBox.width || hitBox.y > eventCoord.y || eventCoord.y > hitBox.y + hitBox.height) return [];
          const dx = nodeRect.x + nodeRect.width / 2 - eventCoord.x;
          const dy = nodeRect.y + nodeRect.height / 2 - eventCoord.y;
          return [{
            id: node$1.id,
            squareDistance: dx ** 2 + dy ** 2
          }];
        }).toSorted((nodeA, nodeB) => nodeA.squareDistance - nodeB.squareDistance)[0]?.id;
      }, 200, true, true);
      onMounted(() => {
        store.vueFlowRef.value?.addEventListener("mousemove", recalculate);
      });
      onUnmounted(() => {
        store.vueFlowRef.value?.removeEventListener("mousemove", recalculate);
      });
      return {
        id: id$1
      };
    }

    //#endregion
    //#region src/features/workflows/canvas/composables/useCanvasTraversal.ts
    function useCanvasTraversal({
      getIncomers,
      getOutgoers
    }) {
      function sortNodesByVerticalPosition(nodes) {
        return nodes.sort((a, b) => a.position.y - b.position.y);
      }
      function getIncomingNodes(id$1) {
        return sortNodesByVerticalPosition(getIncomers(id$1));
      }
      function getOutgoingNodes(id$1) {
        return sortNodesByVerticalPosition(getOutgoers(id$1));
      }
      function getSiblingNodes(id$1) {
        const incomingSiblings = getIncomers(id$1).flatMap(incomingNode => getOutgoers(incomingNode.id));
        const outgoingSiblings = getOutgoers(id$1).flatMap(outgoingNode => getIncomers(outgoingNode.id));
        return sortNodesByVerticalPosition([...incomingSiblings, ...outgoingSiblings].filter((node$1, index, nodes) => nodes.findIndex(n => n.id === node$1.id) === index));
      }
      function getDownstreamNodes(id$1, visited = []) {
        if (visited.includes(id$1)) return [];
        visited.push(id$1);
        const downstreamNodes = getOutgoers(id$1);
        return [...downstreamNodes, ...downstreamNodes.flatMap(node$1 => getDownstreamNodes(node$1.id, visited))].filter((node$1, index, nodes) => nodes.findIndex(n => n.id === node$1.id) === index);
      }
      function getUpstreamNodes(id$1, visited = []) {
        if (visited.includes(id$1)) return [];
        visited.push(id$1);
        const upstreamNodes = getIncomers(id$1);
        return [...upstreamNodes, ...upstreamNodes.flatMap(node$1 => getUpstreamNodes(node$1.id, visited))].filter((node$1, index, nodes) => nodes.findIndex(n => n.id === node$1.id) === index);
      }
      return {
        sortNodesByVerticalPosition,
        getIncomingNodes,
        getOutgoingNodes,
        getSiblingNodes,
        getDownstreamNodes,
        getUpstreamNodes
      };
    }

    //#endregion
    //#region ../@n8n/composables/src/useShortKeyPress.ts
    function useShortKeyPress(key, fn, {
      dedupe = true,
      threshold = 300,
      disabled: disabled$4 = false
    }) {
      const keyDownTime = ref(null);
      onKeyDown(key, () => {
        if (unref(disabled$4)) return;
        keyDownTime.value = Date.now();
      }, {
        dedupe
      });
      onKeyUp(key, () => {
        if (unref(disabled$4) || !keyDownTime.value) return;
        if (Date.now() - keyDownTime.value < threshold) fn();
      });
    }

    //#endregion
    //#region ../../../node_modules/.pnpm/@vue-flow+minimap@1.5.4_@vue-flow+core@1.48.0_vue@3.5.13_typescript@5.9.2___vue@3.5.13_typescript@5.9.2_/node_modules/@vue-flow/minimap/dist/vue-flow-minimap.mjs

    function dispatch() {
      for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
        if (!(t = arguments[i] + "") || t in _ || /[\s.]/.test(t)) throw new Error("illegal type: " + t);
        _[t] = [];
      }
      return new Dispatch(_);
    }
    function Dispatch(_) {
      this._ = _;
    }
    function parseTypenames$1(typenames, types) {
      return typenames.trim().split(/^|\s+/).map(function (t) {
        var name = "",
          i = t.indexOf(".");
        if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
        if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
        return {
          type: t,
          name
        };
      });
    }
    function get$1(type, name) {
      for (var i = 0, n = type.length, c; i < n; ++i) if ((c = type[i]).name === name) return c.value;
    }
    function set$1(type, name, callback) {
      for (var i = 0, n = type.length; i < n; ++i) if (type[i].name === name) {
        type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));
        break;
      }
      if (callback != null) type.push({
        name,
        value: callback
      });
      return type;
    }
    function namespace(name) {
      var prefix = name += "",
        i = prefix.indexOf(":");
      if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
      return namespaces.hasOwnProperty(prefix) ? {
        space: namespaces[prefix],
        local: name
      } : name;
    }
    function creatorInherit(name) {
      return function () {
        var document2 = this.ownerDocument,
          uri = this.namespaceURI;
        return uri === xhtml && document2.documentElement.namespaceURI === xhtml ? document2.createElement(name) : document2.createElementNS(uri, name);
      };
    }
    function creatorFixed(fullname) {
      return function () {
        return this.ownerDocument.createElementNS(fullname.space, fullname.local);
      };
    }
    function creator(name) {
      var fullname = namespace(name);
      return (fullname.local ? creatorFixed : creatorInherit)(fullname);
    }
    function none() {}
    function selector(selector2) {
      return selector2 == null ? none : function () {
        return this.querySelector(selector2);
      };
    }
    function selection_select(select2) {
      if (typeof select2 !== "function") select2 = selector(select2);
      for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node$1, subnode, i = 0; i < n; ++i) if ((node$1 = group[i]) && (subnode = select2.call(node$1, node$1.__data__, i, group))) {
        if ("__data__" in node$1) subnode.__data__ = node$1.__data__;
        subgroup[i] = subnode;
      }
      return new Selection$1(subgroups, this._parents);
    }
    function array(x) {
      return x == null ? [] : Array.isArray(x) ? x : Array.from(x);
    }
    function empty() {
      return [];
    }
    function selectorAll(selector2) {
      return selector2 == null ? empty : function () {
        return this.querySelectorAll(selector2);
      };
    }
    function arrayAll(select2) {
      return function () {
        return array(select2.apply(this, arguments));
      };
    }
    function selection_selectAll(select2) {
      if (typeof select2 === "function") select2 = arrayAll(select2);else select2 = selectorAll(select2);
      for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) for (var group = groups[j], n = group.length, node$1, i = 0; i < n; ++i) if (node$1 = group[i]) {
        subgroups.push(select2.call(node$1, node$1.__data__, i, group));
        parents.push(node$1);
      }
      return new Selection$1(subgroups, parents);
    }
    function matcher(selector2) {
      return function () {
        return this.matches(selector2);
      };
    }
    function childMatcher(selector2) {
      return function (node$1) {
        return node$1.matches(selector2);
      };
    }
    function childFind(match) {
      return function () {
        return find.call(this.children, match);
      };
    }
    function childFirst() {
      return this.firstElementChild;
    }
    function selection_selectChild(match) {
      return this.select(match == null ? childFirst : childFind(typeof match === "function" ? match : childMatcher(match)));
    }
    function children() {
      return Array.from(this.children);
    }
    function childrenFilter(match) {
      return function () {
        return filter.call(this.children, match);
      };
    }
    function selection_selectChildren(match) {
      return this.selectAll(match == null ? children : childrenFilter(typeof match === "function" ? match : childMatcher(match)));
    }
    function selection_filter(match) {
      if (typeof match !== "function") match = matcher(match);
      for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node$1, i = 0; i < n; ++i) if ((node$1 = group[i]) && match.call(node$1, node$1.__data__, i, group)) subgroup.push(node$1);
      return new Selection$1(subgroups, this._parents);
    }
    function sparse(update) {
      return new Array(update.length);
    }
    function selection_enter() {
      return new Selection$1(this._enter || this._groups.map(sparse), this._parents);
    }
    function EnterNode(parent, datum2) {
      this.ownerDocument = parent.ownerDocument;
      this.namespaceURI = parent.namespaceURI;
      this._next = null;
      this._parent = parent;
      this.__data__ = datum2;
    }
    function constant$2(x) {
      return function () {
        return x;
      };
    }
    function bindIndex(parent, group, enter, update, exit, data) {
      var i = 0,
        node$1,
        groupLength = group.length,
        dataLength = data.length;
      for (; i < dataLength; ++i) if (node$1 = group[i]) {
        node$1.__data__ = data[i];
        update[i] = node$1;
      } else enter[i] = new EnterNode(parent, data[i]);
      for (; i < groupLength; ++i) if (node$1 = group[i]) exit[i] = node$1;
    }
    function bindKey(parent, group, enter, update, exit, data, key) {
      var i,
        node$1,
        nodeByKeyValue = /* @__PURE__ */new Map(),
        groupLength = group.length,
        dataLength = data.length,
        keyValues = new Array(groupLength),
        keyValue;
      for (i = 0; i < groupLength; ++i) if (node$1 = group[i]) {
        keyValues[i] = keyValue = key.call(node$1, node$1.__data__, i, group) + "";
        if (nodeByKeyValue.has(keyValue)) exit[i] = node$1;else nodeByKeyValue.set(keyValue, node$1);
      }
      for (i = 0; i < dataLength; ++i) {
        keyValue = key.call(parent, data[i], i, data) + "";
        if (node$1 = nodeByKeyValue.get(keyValue)) {
          update[i] = node$1;
          node$1.__data__ = data[i];
          nodeByKeyValue.delete(keyValue);
        } else enter[i] = new EnterNode(parent, data[i]);
      }
      for (i = 0; i < groupLength; ++i) if ((node$1 = group[i]) && nodeByKeyValue.get(keyValues[i]) === node$1) exit[i] = node$1;
    }
    function datum(node$1) {
      return node$1.__data__;
    }
    function selection_data(value, key) {
      if (!arguments.length) return Array.from(this, datum);
      var bind = key ? bindKey : bindIndex,
        parents = this._parents,
        groups = this._groups;
      if (typeof value !== "function") value = constant$2(value);
      for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
        var parent = parents[j],
          group = groups[j],
          groupLength = group.length,
          data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),
          dataLength = data.length,
          enterGroup = enter[j] = new Array(dataLength),
          updateGroup = update[j] = new Array(dataLength);
        bind(parent, group, enterGroup, updateGroup, exit[j] = new Array(groupLength), data, key);
        for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) if (previous = enterGroup[i0]) {
          if (i0 >= i1) i1 = i0 + 1;
          while (!(next = updateGroup[i1]) && ++i1 < dataLength);
          previous._next = next || null;
        }
      }
      update = new Selection$1(update, parents);
      update._enter = enter;
      update._exit = exit;
      return update;
    }
    function arraylike(data) {
      return typeof data === "object" && "length" in data ? data : Array.from(data);
    }
    function selection_exit() {
      return new Selection$1(this._exit || this._groups.map(sparse), this._parents);
    }
    function selection_join(onenter, onupdate, onexit) {
      var enter = this.enter(),
        update = this,
        exit = this.exit();
      if (typeof onenter === "function") {
        enter = onenter(enter);
        if (enter) enter = enter.selection();
      } else enter = enter.append(onenter + "");
      if (onupdate != null) {
        update = onupdate(update);
        if (update) update = update.selection();
      }
      if (onexit == null) exit.remove();else onexit(exit);
      return enter && update ? enter.merge(update).order() : update;
    }
    function selection_merge(context) {
      var selection2 = context.selection ? context.selection() : context;
      for (var groups0 = this._groups, groups1 = selection2._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node$1, i = 0; i < n; ++i) if (node$1 = group0[i] || group1[i]) merge[i] = node$1;
      for (; j < m0; ++j) merges[j] = groups0[j];
      return new Selection$1(merges, this._parents);
    }
    function selection_order() {
      for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) for (var group = groups[j], i = group.length - 1, next = group[i], node$1; --i >= 0;) if (node$1 = group[i]) {
        if (next && node$1.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node$1, next);
        next = node$1;
      }
      return this;
    }
    function selection_sort(compare) {
      if (!compare) compare = ascending;
      function compareNode(a, b) {
        return a && b ? compare(a.__data__, b.__data__) : !a - !b;
      }
      for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
        for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node$1, i = 0; i < n; ++i) if (node$1 = group[i]) sortgroup[i] = node$1;
        sortgroup.sort(compareNode);
      }
      return new Selection$1(sortgroups, this._parents).order();
    }
    function ascending(a, b) {
      return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
    }
    function selection_call() {
      var callback = arguments[0];
      arguments[0] = this;
      callback.apply(null, arguments);
      return this;
    }
    function selection_nodes() {
      return Array.from(this);
    }
    function selection_node() {
      for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
        var node$1 = group[i];
        if (node$1) return node$1;
      }
      return null;
    }
    function selection_size() {
      let size$1 = 0;
      for (const node$1 of this) ++size$1;
      return size$1;
    }
    function selection_empty() {
      return !this.node();
    }
    function selection_each(callback) {
      for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) for (var group = groups[j], i = 0, n = group.length, node$1; i < n; ++i) if (node$1 = group[i]) callback.call(node$1, node$1.__data__, i, group);
      return this;
    }
    function attrRemove$1(name) {
      return function () {
        this.removeAttribute(name);
      };
    }
    function attrRemoveNS$1(fullname) {
      return function () {
        this.removeAttributeNS(fullname.space, fullname.local);
      };
    }
    function attrConstant$1(name, value) {
      return function () {
        this.setAttribute(name, value);
      };
    }
    function attrConstantNS$1(fullname, value) {
      return function () {
        this.setAttributeNS(fullname.space, fullname.local, value);
      };
    }
    function attrFunction$1(name, value) {
      return function () {
        var v = value.apply(this, arguments);
        if (v == null) this.removeAttribute(name);else this.setAttribute(name, v);
      };
    }
    function attrFunctionNS$1(fullname, value) {
      return function () {
        var v = value.apply(this, arguments);
        if (v == null) this.removeAttributeNS(fullname.space, fullname.local);else this.setAttributeNS(fullname.space, fullname.local, v);
      };
    }
    function selection_attr(name, value) {
      var fullname = namespace(name);
      if (arguments.length < 2) {
        var node$1 = this.node();
        return fullname.local ? node$1.getAttributeNS(fullname.space, fullname.local) : node$1.getAttribute(fullname);
      }
      return this.each((value == null ? fullname.local ? attrRemoveNS$1 : attrRemove$1 : typeof value === "function" ? fullname.local ? attrFunctionNS$1 : attrFunction$1 : fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, value));
    }
    function defaultView(node$1) {
      return node$1.ownerDocument && node$1.ownerDocument.defaultView || node$1.document && node$1 || node$1.defaultView;
    }
    function styleRemove$1(name) {
      return function () {
        this.style.removeProperty(name);
      };
    }
    function styleConstant$1(name, value, priority) {
      return function () {
        this.style.setProperty(name, value, priority);
      };
    }
    function styleFunction$1(name, value, priority) {
      return function () {
        var v = value.apply(this, arguments);
        if (v == null) this.style.removeProperty(name);else this.style.setProperty(name, v, priority);
      };
    }
    function selection_style(name, value, priority) {
      return arguments.length > 1 ? this.each((value == null ? styleRemove$1 : typeof value === "function" ? styleFunction$1 : styleConstant$1)(name, value, priority == null ? "" : priority)) : styleValue(this.node(), name);
    }
    function styleValue(node$1, name) {
      return node$1.style.getPropertyValue(name) || defaultView(node$1).getComputedStyle(node$1, null).getPropertyValue(name);
    }
    function propertyRemove(name) {
      return function () {
        delete this[name];
      };
    }
    function propertyConstant(name, value) {
      return function () {
        this[name] = value;
      };
    }
    function propertyFunction(name, value) {
      return function () {
        var v = value.apply(this, arguments);
        if (v == null) delete this[name];else this[name] = v;
      };
    }
    function selection_property(name, value) {
      return arguments.length > 1 ? this.each((value == null ? propertyRemove : typeof value === "function" ? propertyFunction : propertyConstant)(name, value)) : this.node()[name];
    }
    function classArray(string) {
      return string.trim().split(/^|\s+/);
    }
    function classList(node$1) {
      return node$1.classList || new ClassList(node$1);
    }
    function ClassList(node$1) {
      this._node = node$1;
      this._names = classArray(node$1.getAttribute("class") || "");
    }
    function classedAdd(node$1, names) {
      var list = classList(node$1),
        i = -1,
        n = names.length;
      while (++i < n) list.add(names[i]);
    }
    function classedRemove(node$1, names) {
      var list = classList(node$1),
        i = -1,
        n = names.length;
      while (++i < n) list.remove(names[i]);
    }
    function classedTrue(names) {
      return function () {
        classedAdd(this, names);
      };
    }
    function classedFalse(names) {
      return function () {
        classedRemove(this, names);
      };
    }
    function classedFunction(names, value) {
      return function () {
        (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
      };
    }
    function selection_classed(name, value) {
      var names = classArray(name + "");
      if (arguments.length < 2) {
        var list = classList(this.node()),
          i = -1,
          n = names.length;
        while (++i < n) if (!list.contains(names[i])) return false;
        return true;
      }
      return this.each((typeof value === "function" ? classedFunction : value ? classedTrue : classedFalse)(names, value));
    }
    function textRemove() {
      this.textContent = "";
    }
    function textConstant$1(value) {
      return function () {
        this.textContent = value;
      };
    }
    function textFunction$1(value) {
      return function () {
        var v = value.apply(this, arguments);
        this.textContent = v == null ? "" : v;
      };
    }
    function selection_text(value) {
      return arguments.length ? this.each(value == null ? textRemove : (typeof value === "function" ? textFunction$1 : textConstant$1)(value)) : this.node().textContent;
    }
    function htmlRemove() {
      this.innerHTML = "";
    }
    function htmlConstant(value) {
      return function () {
        this.innerHTML = value;
      };
    }
    function htmlFunction(value) {
      return function () {
        var v = value.apply(this, arguments);
        this.innerHTML = v == null ? "" : v;
      };
    }
    function selection_html(value) {
      return arguments.length ? this.each(value == null ? htmlRemove : (typeof value === "function" ? htmlFunction : htmlConstant)(value)) : this.node().innerHTML;
    }
    function raise() {
      if (this.nextSibling) this.parentNode.appendChild(this);
    }
    function selection_raise() {
      return this.each(raise);
    }
    function lower() {
      if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
    }
    function selection_lower() {
      return this.each(lower);
    }
    function selection_append(name) {
      var create2 = typeof name === "function" ? name : creator(name);
      return this.select(function () {
        return this.appendChild(create2.apply(this, arguments));
      });
    }
    function constantNull() {
      return null;
    }
    function selection_insert(name, before) {
      var create2 = typeof name === "function" ? name : creator(name),
        select2 = before == null ? constantNull : typeof before === "function" ? before : selector(before);
      return this.select(function () {
        return this.insertBefore(create2.apply(this, arguments), select2.apply(this, arguments) || null);
      });
    }
    function remove() {
      var parent = this.parentNode;
      if (parent) parent.removeChild(this);
    }
    function selection_remove() {
      return this.each(remove);
    }
    function selection_cloneShallow() {
      var clone = this.cloneNode(false),
        parent = this.parentNode;
      return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
    }
    function selection_cloneDeep() {
      var clone = this.cloneNode(true),
        parent = this.parentNode;
      return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
    }
    function selection_clone(deep) {
      return this.select(deep ? selection_cloneDeep : selection_cloneShallow);
    }
    function selection_datum(value) {
      return arguments.length ? this.property("__data__", value) : this.node().__data__;
    }
    function contextListener(listener) {
      return function (event) {
        listener.call(this, event, this.__data__);
      };
    }
    function parseTypenames(typenames) {
      return typenames.trim().split(/^|\s+/).map(function (t) {
        var name = "",
          i = t.indexOf(".");
        if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
        return {
          type: t,
          name
        };
      });
    }
    function onRemove(typename) {
      return function () {
        var on = this.__on;
        if (!on) return;
        for (var j = 0, i = -1, m = on.length, o; j < m; ++j) if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) this.removeEventListener(o.type, o.listener, o.options);else on[++i] = o;
        if (++i) on.length = i;else delete this.__on;
      };
    }
    function onAdd(typename, value, options) {
      return function () {
        var on = this.__on,
          o,
          listener = contextListener(value);
        if (on) {
          for (var j = 0, m = on.length; j < m; ++j) if ((o = on[j]).type === typename.type && o.name === typename.name) {
            this.removeEventListener(o.type, o.listener, o.options);
            this.addEventListener(o.type, o.listener = listener, o.options = options);
            o.value = value;
            return;
          }
        }
        this.addEventListener(typename.type, listener, options);
        o = {
          type: typename.type,
          name: typename.name,
          value,
          listener,
          options
        };
        if (!on) this.__on = [o];else on.push(o);
      };
    }
    function selection_on(typename, value, options) {
      var typenames = parseTypenames(typename + ""),
        i,
        n = typenames.length,
        t;
      if (arguments.length < 2) {
        var on = this.node().__on;
        if (on) {
          for (var j = 0, m = on.length, o; j < m; ++j) for (i = 0, o = on[j]; i < n; ++i) if ((t = typenames[i]).type === o.type && t.name === o.name) return o.value;
        }
        return;
      }
      on = value ? onAdd : onRemove;
      for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));
      return this;
    }
    function dispatchEvent(node$1, type, params) {
      var window2 = defaultView(node$1),
        event = window2.CustomEvent;
      if (typeof event === "function") event = new event(type, params);else {
        event = window2.document.createEvent("Event");
        if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;else event.initEvent(type, false, false);
      }
      node$1.dispatchEvent(event);
    }
    function dispatchConstant(type, params) {
      return function () {
        return dispatchEvent(this, type, params);
      };
    }
    function dispatchFunction(type, params) {
      return function () {
        return dispatchEvent(this, type, params.apply(this, arguments));
      };
    }
    function selection_dispatch(type, params) {
      return this.each((typeof params === "function" ? dispatchFunction : dispatchConstant)(type, params));
    }
    function* selection_iterator() {
      for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) for (var group = groups[j], i = 0, n = group.length, node$1; i < n; ++i) if (node$1 = group[i]) yield node$1;
    }
    function Selection$1(groups, parents) {
      this._groups = groups;
      this._parents = parents;
    }
    function selection() {
      return new Selection$1([[document.documentElement]], root);
    }
    function selection_selection() {
      return this;
    }
    function select(selector2) {
      return typeof selector2 === "string" ? new Selection$1([[document.querySelector(selector2)]], [document.documentElement]) : new Selection$1([[selector2]], root);
    }
    function sourceEvent(event) {
      let sourceEvent2;
      while (sourceEvent2 = event.sourceEvent) event = sourceEvent2;
      return event;
    }
    function pointer(event, node$1) {
      event = sourceEvent(event);
      if (node$1 === void 0) node$1 = event.currentTarget;
      if (node$1) {
        var svg = node$1.ownerSVGElement || node$1;
        if (svg.createSVGPoint) {
          var point = svg.createSVGPoint();
          point.x = event.clientX, point.y = event.clientY;
          point = point.matrixTransform(node$1.getScreenCTM().inverse());
          return [point.x, point.y];
        }
        if (node$1.getBoundingClientRect) {
          var rect = node$1.getBoundingClientRect();
          return [event.clientX - rect.left - node$1.clientLeft, event.clientY - rect.top - node$1.clientTop];
        }
      }
      return [event.pageX, event.pageY];
    }
    function noevent$1(event) {
      event.preventDefault();
      event.stopImmediatePropagation();
    }
    function dragDisable(view) {
      var root2 = view.document.documentElement,
        selection2 = select(view).on("dragstart.drag", noevent$1, nonpassivecapture);
      if ("onselectstart" in root2) selection2.on("selectstart.drag", noevent$1, nonpassivecapture);else {
        root2.__noselect = root2.style.MozUserSelect;
        root2.style.MozUserSelect = "none";
      }
    }
    function yesdrag(view, noclick) {
      var root2 = view.document.documentElement,
        selection2 = select(view).on("dragstart.drag", null);
      if (noclick) {
        selection2.on("click.drag", noevent$1, nonpassivecapture);
        setTimeout(function () {
          selection2.on("click.drag", null);
        }, 0);
      }
      if ("onselectstart" in root2) selection2.on("selectstart.drag", null);else {
        root2.style.MozUserSelect = root2.__noselect;
        delete root2.__noselect;
      }
    }
    function define(constructor, factory, prototype) {
      constructor.prototype = factory.prototype = prototype;
      prototype.constructor = constructor;
    }
    function extend(parent, definition) {
      var prototype = Object.create(parent.prototype);
      for (var key in definition) prototype[key] = definition[key];
      return prototype;
    }
    function Color() {}
    function color_formatHex() {
      return this.rgb().formatHex();
    }
    function color_formatHex8() {
      return this.rgb().formatHex8();
    }
    function color_formatHsl() {
      return hslConvert(this).formatHsl();
    }
    function color_formatRgb() {
      return this.rgb().formatRgb();
    }
    function color(format) {
      var m, l;
      format = (format + "").trim().toLowerCase();
      return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) : l === 3 ? new Rgb(m >> 8 & 15 | m >> 4 & 240, m >> 4 & 15 | m & 240, (m & 15) << 4 | m & 15, 1) : l === 8 ? rgba(m >> 24 & 255, m >> 16 & 255, m >> 8 & 255, (m & 255) / 255) : l === 4 ? rgba(m >> 12 & 15 | m >> 8 & 240, m >> 8 & 15 | m >> 4 & 240, m >> 4 & 15 | m & 240, ((m & 15) << 4 | m & 15) / 255) : null) : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) : named.hasOwnProperty(format) ? rgbn(named[format]) : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) : null;
    }
    function rgbn(n) {
      return new Rgb(n >> 16 & 255, n >> 8 & 255, n & 255, 1);
    }
    function rgba(r, g, b, a) {
      if (a <= 0) r = g = b = NaN;
      return new Rgb(r, g, b, a);
    }
    function rgbConvert(o) {
      if (!(o instanceof Color)) o = color(o);
      if (!o) return new Rgb();
      o = o.rgb();
      return new Rgb(o.r, o.g, o.b, o.opacity);
    }
    function rgb(r, g, b, opacity) {
      return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
    }
    function Rgb(r, g, b, opacity) {
      this.r = +r;
      this.g = +g;
      this.b = +b;
      this.opacity = +opacity;
    }
    function rgb_formatHex() {
      return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;
    }
    function rgb_formatHex8() {
      return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;
    }
    function rgb_formatRgb() {
      const a = clampa(this.opacity);
      return `${a === 1 ? "rgb(" : "rgba("}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? ")" : `, ${a})`}`;
    }
    function clampa(opacity) {
      return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));
    }
    function clampi(value) {
      return Math.max(0, Math.min(255, Math.round(value) || 0));
    }
    function hex(value) {
      value = clampi(value);
      return (value < 16 ? "0" : "") + value.toString(16);
    }
    function hsla(h$1, s, l, a) {
      if (a <= 0) h$1 = s = l = NaN;else if (l <= 0 || l >= 1) h$1 = s = NaN;else if (s <= 0) h$1 = NaN;
      return new Hsl(h$1, s, l, a);
    }
    function hslConvert(o) {
      if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
      if (!(o instanceof Color)) o = color(o);
      if (!o) return new Hsl();
      if (o instanceof Hsl) return o;
      o = o.rgb();
      var r = o.r / 255,
        g = o.g / 255,
        b = o.b / 255,
        min = Math.min(r, g, b),
        max = Math.max(r, g, b),
        h$1 = NaN,
        s = max - min,
        l = (max + min) / 2;
      if (s) {
        if (r === max) h$1 = (g - b) / s + (g < b) * 6;else if (g === max) h$1 = (b - r) / s + 2;else h$1 = (r - g) / s + 4;
        s /= l < .5 ? max + min : 2 - max - min;
        h$1 *= 60;
      } else s = l > 0 && l < 1 ? 0 : h$1;
      return new Hsl(h$1, s, l, o.opacity);
    }
    function hsl(h$1, s, l, opacity) {
      return arguments.length === 1 ? hslConvert(h$1) : new Hsl(h$1, s, l, opacity == null ? 1 : opacity);
    }
    function Hsl(h$1, s, l, opacity) {
      this.h = +h$1;
      this.s = +s;
      this.l = +l;
      this.opacity = +opacity;
    }
    function clamph(value) {
      value = (value || 0) % 360;
      return value < 0 ? value + 360 : value;
    }
    function clampt(value) {
      return Math.max(0, Math.min(1, value || 0));
    }
    function hsl2rgb(h$1, m1, m2) {
      return (h$1 < 60 ? m1 + (m2 - m1) * h$1 / 60 : h$1 < 180 ? m2 : h$1 < 240 ? m1 + (m2 - m1) * (240 - h$1) / 60 : m1) * 255;
    }
    function linear(a, d) {
      return function (t) {
        return a + t * d;
      };
    }
    function exponential(a, b, y) {
      return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function (t) {
        return Math.pow(a + t * b, y);
      };
    }
    function gamma(y) {
      return (y = +y) === 1 ? nogamma : function (a, b) {
        return b - a ? exponential(a, b, y) : constant$1(isNaN(a) ? b : a);
      };
    }
    function nogamma(a, b) {
      var d = b - a;
      return d ? linear(a, d) : constant$1(isNaN(a) ? b : a);
    }
    function interpolateNumber(a, b) {
      return a = +a, b = +b, function (t) {
        return a * (1 - t) + b * t;
      };
    }
    function zero(b) {
      return function () {
        return b;
      };
    }
    function one(b) {
      return function (t) {
        return b(t) + "";
      };
    }
    function interpolateString(a, b) {
      var bi = reA.lastIndex = reB.lastIndex = 0,
        am,
        bm,
        bs,
        i = -1,
        s = [],
        q = [];
      a = a + "", b = b + "";
      while ((am = reA.exec(a)) && (bm = reB.exec(b))) {
        if ((bs = bm.index) > bi) {
          bs = b.slice(bi, bs);
          if (s[i]) s[i] += bs;else s[++i] = bs;
        }
        if ((am = am[0]) === (bm = bm[0])) {
          if (s[i]) s[i] += bm;else s[++i] = bm;
        } else {
          s[++i] = null;
          q.push({
            i,
            x: interpolateNumber(am, bm)
          });
        }
        bi = reB.lastIndex;
      }
      if (bi < b.length) {
        bs = b.slice(bi);
        if (s[i]) s[i] += bs;else s[++i] = bs;
      }
      return s.length < 2 ? q[0] ? one(q[0].x) : zero(b) : (b = q.length, function (t) {
        for (var i2 = 0, o; i2 < b; ++i2) s[(o = q[i2]).i] = o.x(t);
        return s.join("");
      });
    }
    function decompose(a, b, c, d, e, f) {
      var scaleX, scaleY, skewX;
      if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;
      if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;
      if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;
      if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;
      return {
        translateX: e,
        translateY: f,
        rotate: Math.atan2(b, a) * degrees,
        skewX: Math.atan(skewX) * degrees,
        scaleX,
        scaleY
      };
    }
    function parseCss(value) {
      const m = new (typeof DOMMatrix === "function" ? DOMMatrix : WebKitCSSMatrix)(value + "");
      return m.isIdentity ? identity$1 : decompose(m.a, m.b, m.c, m.d, m.e, m.f);
    }
    function parseSvg(value) {
      if (value == null) return identity$1;
      if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
      svgNode.setAttribute("transform", value);
      if (!(value = svgNode.transform.baseVal.consolidate())) return identity$1;
      value = value.matrix;
      return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
    }
    function interpolateTransform(parse, pxComma, pxParen, degParen) {
      function pop(s) {
        return s.length ? s.pop() + " " : "";
      }
      function translate(xa, ya, xb, yb, s, q) {
        if (xa !== xb || ya !== yb) {
          var i = s.push("translate(", null, pxComma, null, pxParen);
          q.push({
            i: i - 4,
            x: interpolateNumber(xa, xb)
          }, {
            i: i - 2,
            x: interpolateNumber(ya, yb)
          });
        } else if (xb || yb) s.push("translate(" + xb + pxComma + yb + pxParen);
      }
      function rotate(a, b, s, q) {
        if (a !== b) {
          if (a - b > 180) b += 360;else if (b - a > 180) a += 360;
          q.push({
            i: s.push(pop(s) + "rotate(", null, degParen) - 2,
            x: interpolateNumber(a, b)
          });
        } else if (b) s.push(pop(s) + "rotate(" + b + degParen);
      }
      function skewX(a, b, s, q) {
        if (a !== b) q.push({
          i: s.push(pop(s) + "skewX(", null, degParen) - 2,
          x: interpolateNumber(a, b)
        });else if (b) s.push(pop(s) + "skewX(" + b + degParen);
      }
      function scale(xa, ya, xb, yb, s, q) {
        if (xa !== xb || ya !== yb) {
          var i = s.push(pop(s) + "scale(", null, ",", null, ")");
          q.push({
            i: i - 4,
            x: interpolateNumber(xa, xb)
          }, {
            i: i - 2,
            x: interpolateNumber(ya, yb)
          });
        } else if (xb !== 1 || yb !== 1) s.push(pop(s) + "scale(" + xb + "," + yb + ")");
      }
      return function (a, b) {
        var s = [],
          q = [];
        a = parse(a), b = parse(b);
        translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
        rotate(a.rotate, b.rotate, s, q);
        skewX(a.skewX, b.skewX, s, q);
        scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
        a = b = null;
        return function (t) {
          var i = -1,
            n = q.length,
            o;
          while (++i < n) s[(o = q[i]).i] = o.x(t);
          return s.join("");
        };
      };
    }
    function cosh(x) {
      return ((x = Math.exp(x)) + 1 / x) / 2;
    }
    function sinh(x) {
      return ((x = Math.exp(x)) - 1 / x) / 2;
    }
    function tanh(x) {
      return ((x = Math.exp(2 * x)) - 1) / (x + 1);
    }
    function now() {
      return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
    }
    function clearNow() {
      clockNow = 0;
    }
    function Timer() {
      this._call = this._time = this._next = null;
    }
    function timer(callback, delay, time$1) {
      var t = new Timer();
      t.restart(callback, delay, time$1);
      return t;
    }
    function timerFlush() {
      now();
      ++frame;
      var t = taskHead,
        e;
      while (t) {
        if ((e = clockNow - t._time) >= 0) t._call.call(void 0, e);
        t = t._next;
      }
      --frame;
    }
    function wake() {
      clockNow = (clockLast = clock.now()) + clockSkew;
      frame = timeout$1 = 0;
      try {
        timerFlush();
      } finally {
        frame = 0;
        nap();
        clockNow = 0;
      }
    }
    function poke() {
      var now2 = clock.now(),
        delay = now2 - clockLast;
      if (delay > pokeDelay) clockSkew -= delay, clockLast = now2;
    }
    function nap() {
      var t0,
        t1 = taskHead,
        t2,
        time$1 = Infinity;
      while (t1) if (t1._call) {
        if (time$1 > t1._time) time$1 = t1._time;
        t0 = t1, t1 = t1._next;
      } else {
        t2 = t1._next, t1._next = null;
        t1 = t0 ? t0._next = t2 : taskHead = t2;
      }
      taskTail = t0;
      sleep(time$1);
    }
    function sleep(time$1) {
      if (frame) return;
      if (timeout$1) timeout$1 = clearTimeout(timeout$1);
      if (time$1 - clockNow > 24) {
        if (time$1 < Infinity) timeout$1 = setTimeout(wake, time$1 - clock.now() - clockSkew);
        if (interval) interval = clearInterval(interval);
      } else {
        if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);
        frame = 1, setFrame(wake);
      }
    }
    function timeout(callback, delay, time$1) {
      var t = new Timer();
      delay = delay == null ? 0 : +delay;
      t.restart(elapsed => {
        t.stop();
        callback(elapsed + delay);
      }, delay, time$1);
      return t;
    }
    function schedule(node$1, name, id2, index, group, timing) {
      var schedules = node$1.__transition;
      if (!schedules) node$1.__transition = {};else if (id2 in schedules) return;
      create(node$1, id2, {
        name,
        index,
        group,
        on: emptyOn,
        tween: emptyTween,
        time: timing.time,
        delay: timing.delay,
        duration: timing.duration,
        ease: timing.ease,
        timer: null,
        state: CREATED
      });
    }
    function init(node$1, id2) {
      var schedule2 = get(node$1, id2);
      if (schedule2.state > CREATED) throw new Error("too late; already scheduled");
      return schedule2;
    }
    function set(node$1, id2) {
      var schedule2 = get(node$1, id2);
      if (schedule2.state > STARTED) throw new Error("too late; already running");
      return schedule2;
    }
    function get(node$1, id2) {
      var schedule2 = node$1.__transition;
      if (!schedule2 || !(schedule2 = schedule2[id2])) throw new Error("transition not found");
      return schedule2;
    }
    function create(node$1, id2, self) {
      var schedules = node$1.__transition,
        tween;
      schedules[id2] = self;
      self.timer = timer(schedule2, 0, self.time);
      function schedule2(elapsed) {
        self.state = SCHEDULED;
        self.timer.restart(start2, self.delay, self.time);
        if (self.delay <= elapsed) start2(elapsed - self.delay);
      }
      function start2(elapsed) {
        var i, j, n, o;
        if (self.state !== SCHEDULED) return stop();
        for (i in schedules) {
          o = schedules[i];
          if (o.name !== self.name) continue;
          if (o.state === STARTED) return timeout(start2);
          if (o.state === RUNNING) {
            o.state = ENDED;
            o.timer.stop();
            o.on.call("interrupt", node$1, node$1.__data__, o.index, o.group);
            delete schedules[i];
          } else if (+i < id2) {
            o.state = ENDED;
            o.timer.stop();
            o.on.call("cancel", node$1, node$1.__data__, o.index, o.group);
            delete schedules[i];
          }
        }
        timeout(function () {
          if (self.state === STARTED) {
            self.state = RUNNING;
            self.timer.restart(tick, self.delay, self.time);
            tick(elapsed);
          }
        });
        self.state = STARTING;
        self.on.call("start", node$1, node$1.__data__, self.index, self.group);
        if (self.state !== STARTING) return;
        self.state = STARTED;
        tween = new Array(n = self.tween.length);
        for (i = 0, j = -1; i < n; ++i) if (o = self.tween[i].value.call(node$1, node$1.__data__, self.index, self.group)) tween[++j] = o;
        tween.length = j + 1;
      }
      function tick(elapsed) {
        var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),
          i = -1,
          n = tween.length;
        while (++i < n) tween[i].call(node$1, t);
        if (self.state === ENDING) {
          self.on.call("end", node$1, node$1.__data__, self.index, self.group);
          stop();
        }
      }
      function stop() {
        self.state = ENDED;
        self.timer.stop();
        delete schedules[id2];
        for (var i in schedules) return;
        delete node$1.__transition;
      }
    }
    function interrupt(node$1, name) {
      var schedules = node$1.__transition,
        schedule2,
        active,
        empty2 = true,
        i;
      if (!schedules) return;
      name = name == null ? null : name + "";
      for (i in schedules) {
        if ((schedule2 = schedules[i]).name !== name) {
          empty2 = false;
          continue;
        }
        active = schedule2.state > STARTING && schedule2.state < ENDING;
        schedule2.state = ENDED;
        schedule2.timer.stop();
        schedule2.on.call(active ? "interrupt" : "cancel", node$1, node$1.__data__, schedule2.index, schedule2.group);
        delete schedules[i];
      }
      if (empty2) delete node$1.__transition;
    }
    function selection_interrupt(name) {
      return this.each(function () {
        interrupt(this, name);
      });
    }
    function tweenRemove(id2, name) {
      var tween0, tween1;
      return function () {
        var schedule2 = set(this, id2),
          tween = schedule2.tween;
        if (tween !== tween0) {
          tween1 = tween0 = tween;
          for (var i = 0, n = tween1.length; i < n; ++i) if (tween1[i].name === name) {
            tween1 = tween1.slice();
            tween1.splice(i, 1);
            break;
          }
        }
        schedule2.tween = tween1;
      };
    }
    function tweenFunction(id2, name, value) {
      var tween0, tween1;
      if (typeof value !== "function") throw new Error();
      return function () {
        var schedule2 = set(this, id2),
          tween = schedule2.tween;
        if (tween !== tween0) {
          tween1 = (tween0 = tween).slice();
          for (var t = {
              name,
              value
            }, i = 0, n = tween1.length; i < n; ++i) if (tween1[i].name === name) {
            tween1[i] = t;
            break;
          }
          if (i === n) tween1.push(t);
        }
        schedule2.tween = tween1;
      };
    }
    function transition_tween(name, value) {
      var id2 = this._id;
      name += "";
      if (arguments.length < 2) {
        var tween = get(this.node(), id2).tween;
        for (var i = 0, n = tween.length, t; i < n; ++i) if ((t = tween[i]).name === name) return t.value;
        return null;
      }
      return this.each((value == null ? tweenRemove : tweenFunction)(id2, name, value));
    }
    function tweenValue(transition, name, value) {
      var id2 = transition._id;
      transition.each(function () {
        var schedule2 = set(this, id2);
        (schedule2.value || (schedule2.value = {}))[name] = value.apply(this, arguments);
      });
      return function (node$1) {
        return get(node$1, id2).value[name];
      };
    }
    function interpolate(a, b) {
      var c;
      return (typeof b === "number" ? interpolateNumber : b instanceof color ? interpolateRgb : (c = color(b)) ? (b = c, interpolateRgb) : interpolateString)(a, b);
    }
    function attrRemove(name) {
      return function () {
        this.removeAttribute(name);
      };
    }
    function attrRemoveNS(fullname) {
      return function () {
        this.removeAttributeNS(fullname.space, fullname.local);
      };
    }
    function attrConstant(name, interpolate2, value1) {
      var string00,
        string1 = value1 + "",
        interpolate0;
      return function () {
        var string0 = this.getAttribute(name);
        return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate2(string00 = string0, value1);
      };
    }
    function attrConstantNS(fullname, interpolate2, value1) {
      var string00,
        string1 = value1 + "",
        interpolate0;
      return function () {
        var string0 = this.getAttributeNS(fullname.space, fullname.local);
        return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate2(string00 = string0, value1);
      };
    }
    function attrFunction(name, interpolate2, value) {
      var string00, string10, interpolate0;
      return function () {
        var string0,
          value1 = value(this),
          string1;
        if (value1 == null) return void this.removeAttribute(name);
        string0 = this.getAttribute(name);
        string1 = value1 + "";
        return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate2(string00 = string0, value1));
      };
    }
    function attrFunctionNS(fullname, interpolate2, value) {
      var string00, string10, interpolate0;
      return function () {
        var string0,
          value1 = value(this),
          string1;
        if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);
        string0 = this.getAttributeNS(fullname.space, fullname.local);
        string1 = value1 + "";
        return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate2(string00 = string0, value1));
      };
    }
    function transition_attr(name, value) {
      var fullname = namespace(name),
        i = fullname === "transform" ? interpolateTransformSvg : interpolate;
      return this.attrTween(name, typeof value === "function" ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, "attr." + name, value)) : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname) : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));
    }
    function attrInterpolate(name, i) {
      return function (t) {
        this.setAttribute(name, i.call(this, t));
      };
    }
    function attrInterpolateNS(fullname, i) {
      return function (t) {
        this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));
      };
    }
    function attrTweenNS(fullname, value) {
      var t0, i0;
      function tween() {
        var i = value.apply(this, arguments);
        if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);
        return t0;
      }
      tween._value = value;
      return tween;
    }
    function attrTween(name, value) {
      var t0, i0;
      function tween() {
        var i = value.apply(this, arguments);
        if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);
        return t0;
      }
      tween._value = value;
      return tween;
    }
    function transition_attrTween(name, value) {
      var key = "attr." + name;
      if (arguments.length < 2) return (key = this.tween(key)) && key._value;
      if (value == null) return this.tween(key, null);
      if (typeof value !== "function") throw new Error();
      var fullname = namespace(name);
      return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
    }
    function delayFunction(id2, value) {
      return function () {
        init(this, id2).delay = +value.apply(this, arguments);
      };
    }
    function delayConstant(id2, value) {
      return value = +value, function () {
        init(this, id2).delay = value;
      };
    }
    function transition_delay(value) {
      var id2 = this._id;
      return arguments.length ? this.each((typeof value === "function" ? delayFunction : delayConstant)(id2, value)) : get(this.node(), id2).delay;
    }
    function durationFunction(id2, value) {
      return function () {
        set(this, id2).duration = +value.apply(this, arguments);
      };
    }
    function durationConstant(id2, value) {
      return value = +value, function () {
        set(this, id2).duration = value;
      };
    }
    function transition_duration(value) {
      var id2 = this._id;
      return arguments.length ? this.each((typeof value === "function" ? durationFunction : durationConstant)(id2, value)) : get(this.node(), id2).duration;
    }
    function easeConstant(id2, value) {
      if (typeof value !== "function") throw new Error();
      return function () {
        set(this, id2).ease = value;
      };
    }
    function transition_ease(value) {
      var id2 = this._id;
      return arguments.length ? this.each(easeConstant(id2, value)) : get(this.node(), id2).ease;
    }
    function easeVarying(id2, value) {
      return function () {
        var v = value.apply(this, arguments);
        if (typeof v !== "function") throw new Error();
        set(this, id2).ease = v;
      };
    }
    function transition_easeVarying(value) {
      if (typeof value !== "function") throw new Error();
      return this.each(easeVarying(this._id, value));
    }
    function transition_filter(match) {
      if (typeof match !== "function") match = matcher(match);
      for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node$1, i = 0; i < n; ++i) if ((node$1 = group[i]) && match.call(node$1, node$1.__data__, i, group)) subgroup.push(node$1);
      return new Transition$1(subgroups, this._parents, this._name, this._id);
    }
    function transition_merge(transition) {
      if (transition._id !== this._id) throw new Error();
      for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node$1, i = 0; i < n; ++i) if (node$1 = group0[i] || group1[i]) merge[i] = node$1;
      for (; j < m0; ++j) merges[j] = groups0[j];
      return new Transition$1(merges, this._parents, this._name, this._id);
    }
    function start(name) {
      return (name + "").trim().split(/^|\s+/).every(function (t) {
        var i = t.indexOf(".");
        if (i >= 0) t = t.slice(0, i);
        return !t || t === "start";
      });
    }
    function onFunction(id2, name, listener) {
      var on0,
        on1,
        sit = start(name) ? init : set;
      return function () {
        var schedule2 = sit(this, id2),
          on = schedule2.on;
        if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
        schedule2.on = on1;
      };
    }
    function transition_on(name, listener) {
      var id2 = this._id;
      return arguments.length < 2 ? get(this.node(), id2).on.on(name) : this.each(onFunction(id2, name, listener));
    }
    function removeFunction(id2) {
      return function () {
        var parent = this.parentNode;
        for (var i in this.__transition) if (+i !== id2) return;
        if (parent) parent.removeChild(this);
      };
    }
    function transition_remove() {
      return this.on("end.remove", removeFunction(this._id));
    }
    function transition_select(select2) {
      var name = this._name,
        id2 = this._id;
      if (typeof select2 !== "function") select2 = selector(select2);
      for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node$1, subnode, i = 0; i < n; ++i) if ((node$1 = group[i]) && (subnode = select2.call(node$1, node$1.__data__, i, group))) {
        if ("__data__" in node$1) subnode.__data__ = node$1.__data__;
        subgroup[i] = subnode;
        schedule(subgroup[i], name, id2, i, subgroup, get(node$1, id2));
      }
      return new Transition$1(subgroups, this._parents, name, id2);
    }
    function transition_selectAll(select2) {
      var name = this._name,
        id2 = this._id;
      if (typeof select2 !== "function") select2 = selectorAll(select2);
      for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) for (var group = groups[j], n = group.length, node$1, i = 0; i < n; ++i) if (node$1 = group[i]) {
        for (var children2 = select2.call(node$1, node$1.__data__, i, group), child, inherit2 = get(node$1, id2), k = 0, l = children2.length; k < l; ++k) if (child = children2[k]) schedule(child, name, id2, k, children2, inherit2);
        subgroups.push(children2);
        parents.push(node$1);
      }
      return new Transition$1(subgroups, parents, name, id2);
    }
    function transition_selection() {
      return new Selection(this._groups, this._parents);
    }
    function styleNull(name, interpolate2) {
      var string00, string10, interpolate0;
      return function () {
        var string0 = styleValue(this, name),
          string1 = (this.style.removeProperty(name), styleValue(this, name));
        return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : interpolate0 = interpolate2(string00 = string0, string10 = string1);
      };
    }
    function styleRemove(name) {
      return function () {
        this.style.removeProperty(name);
      };
    }
    function styleConstant(name, interpolate2, value1) {
      var string00,
        string1 = value1 + "",
        interpolate0;
      return function () {
        var string0 = styleValue(this, name);
        return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate2(string00 = string0, value1);
      };
    }
    function styleFunction(name, interpolate2, value) {
      var string00, string10, interpolate0;
      return function () {
        var string0 = styleValue(this, name),
          value1 = value(this),
          string1 = value1 + "";
        if (value1 == null) string1 = value1 = (this.style.removeProperty(name), styleValue(this, name));
        return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate2(string00 = string0, value1));
      };
    }
    function styleMaybeRemove(id2, name) {
      var on0,
        on1,
        listener0,
        key = "style." + name,
        event = "end." + key,
        remove2;
      return function () {
        var schedule2 = set(this, id2),
          on = schedule2.on,
          listener = schedule2.value[key] == null ? remove2 || (remove2 = styleRemove(name)) : void 0;
        if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);
        schedule2.on = on1;
      };
    }
    function transition_style(name, value, priority) {
      var i = (name += "") === "transform" ? interpolateTransformCss : interpolate;
      return value == null ? this.styleTween(name, styleNull(name, i)).on("end.style." + name, styleRemove(name)) : typeof value === "function" ? this.styleTween(name, styleFunction(name, i, tweenValue(this, "style." + name, value))).each(styleMaybeRemove(this._id, name)) : this.styleTween(name, styleConstant(name, i, value), priority).on("end.style." + name, null);
    }
    function styleInterpolate(name, i, priority) {
      return function (t) {
        this.style.setProperty(name, i.call(this, t), priority);
      };
    }
    function styleTween(name, value, priority) {
      var t, i0;
      function tween() {
        var i = value.apply(this, arguments);
        if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);
        return t;
      }
      tween._value = value;
      return tween;
    }
    function transition_styleTween(name, value, priority) {
      var key = "style." + (name += "");
      if (arguments.length < 2) return (key = this.tween(key)) && key._value;
      if (value == null) return this.tween(key, null);
      if (typeof value !== "function") throw new Error();
      return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
    }
    function textConstant(value) {
      return function () {
        this.textContent = value;
      };
    }
    function textFunction(value) {
      return function () {
        var value1 = value(this);
        this.textContent = value1 == null ? "" : value1;
      };
    }
    function transition_text(value) {
      return this.tween("text", typeof value === "function" ? textFunction(tweenValue(this, "text", value)) : textConstant(value == null ? "" : value + ""));
    }
    function textInterpolate(i) {
      return function (t) {
        this.textContent = i.call(this, t);
      };
    }
    function textTween(value) {
      var t0, i0;
      function tween() {
        var i = value.apply(this, arguments);
        if (i !== i0) t0 = (i0 = i) && textInterpolate(i);
        return t0;
      }
      tween._value = value;
      return tween;
    }
    function transition_textTween(value) {
      var key = "text";
      if (arguments.length < 1) return (key = this.tween(key)) && key._value;
      if (value == null) return this.tween(key, null);
      if (typeof value !== "function") throw new Error();
      return this.tween(key, textTween(value));
    }
    function transition_transition() {
      var name = this._name,
        id0 = this._id,
        id1 = newId();
      for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) for (var group = groups[j], n = group.length, node$1, i = 0; i < n; ++i) if (node$1 = group[i]) {
        var inherit2 = get(node$1, id0);
        schedule(node$1, name, id1, i, group, {
          time: inherit2.time + inherit2.delay + inherit2.duration,
          delay: 0,
          duration: inherit2.duration,
          ease: inherit2.ease
        });
      }
      return new Transition$1(groups, this._parents, name, id1);
    }
    function transition_end() {
      var on0,
        on1,
        that = this,
        id2 = that._id,
        size$1 = that.size();
      return new Promise(function (resolve, reject) {
        var cancel = {
            value: reject
          },
          end = {
            value: function () {
              if (--size$1 === 0) resolve();
            }
          };
        that.each(function () {
          var schedule2 = set(this, id2),
            on = schedule2.on;
          if (on !== on0) {
            on1 = (on0 = on).copy();
            on1._.cancel.push(cancel);
            on1._.interrupt.push(cancel);
            on1._.end.push(end);
          }
          schedule2.on = on1;
        });
        if (size$1 === 0) resolve();
      });
    }
    function Transition$1(groups, parents, name, id2) {
      this._groups = groups;
      this._parents = parents;
      this._name = name;
      this._id = id2;
    }
    function newId() {
      return ++id;
    }
    function cubicInOut(t) {
      return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
    }
    function inherit(node$1, id2) {
      var timing;
      while (!(timing = node$1.__transition) || !(timing = timing[id2])) if (!(node$1 = node$1.parentNode)) throw new Error(`transition ${id2} not found`);
      return timing;
    }
    function selection_transition(name) {
      var id2, timing;
      if (name instanceof Transition$1) id2 = name._id, name = name._name;else id2 = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
      for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) for (var group = groups[j], n = group.length, node$1, i = 0; i < n; ++i) if (node$1 = group[i]) schedule(node$1, name, id2, i, group, timing || inherit(node$1, id2));
      return new Transition$1(groups, this._parents, name, id2);
    }
    function ZoomEvent(type, {
      sourceEvent: sourceEvent2,
      target: target$1,
      transform,
      dispatch: dispatch2
    }) {
      Object.defineProperties(this, {
        type: {
          value: type,
          enumerable: true,
          configurable: true
        },
        sourceEvent: {
          value: sourceEvent2,
          enumerable: true,
          configurable: true
        },
        target: {
          value: target$1,
          enumerable: true,
          configurable: true
        },
        transform: {
          value: transform,
          enumerable: true,
          configurable: true
        },
        _: {
          value: dispatch2
        }
      });
    }
    function Transform(k, x, y) {
      this.k = k;
      this.x = x;
      this.y = y;
    }
    function nopropagation(event) {
      event.stopImmediatePropagation();
    }
    function noevent(event) {
      event.preventDefault();
      event.stopImmediatePropagation();
    }
    function defaultFilter(event) {
      return (!event.ctrlKey || event.type === "wheel") && !event.button;
    }
    function defaultExtent() {
      var e = this;
      if (e instanceof SVGElement) {
        e = e.ownerSVGElement || e;
        if (e.hasAttribute("viewBox")) {
          e = e.viewBox.baseVal;
          return [[e.x, e.y], [e.x + e.width, e.y + e.height]];
        }
        return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];
      }
      return [[0, 0], [e.clientWidth, e.clientHeight]];
    }
    function defaultTransform() {
      return this.__zoom || identity;
    }
    function defaultWheelDelta(event) {
      return -event.deltaY * (event.deltaMode === 1 ? .05 : event.deltaMode ? 1 : .002) * (event.ctrlKey ? 10 : 1);
    }
    function defaultTouchable() {
      return navigator.maxTouchPoints || "ontouchstart" in this;
    }
    function defaultConstrain(transform, extent, translateExtent) {
      var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],
        dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],
        dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],
        dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];
      return transform.translate(dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1), dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1));
    }
    function zoom() {
      var filter2 = defaultFilter,
        extent = defaultExtent,
        constrain = defaultConstrain,
        wheelDelta2 = defaultWheelDelta,
        touchable = defaultTouchable,
        scaleExtent = [0, Infinity],
        translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],
        duration = 250,
        interpolate2 = interpolateZoom,
        listeners = dispatch("start", "zoom", "end"),
        touchstarting,
        touchfirst,
        touchending,
        touchDelay = 500,
        wheelDelay = 150,
        clickDistance2 = 0,
        tapDistance = 10;
      function zoom2(selection2) {
        selection2.property("__zoom", defaultTransform).on("wheel.zoom", wheeled, {
          passive: false
        }).on("mousedown.zoom", mousedowned).on("dblclick.zoom", dblclicked).filter(touchable).on("touchstart.zoom", touchstarted).on("touchmove.zoom", touchmoved).on("touchend.zoom touchcancel.zoom", touchended).style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
      }
      zoom2.transform = function (collection, transform, point, event) {
        var selection2 = collection.selection ? collection.selection() : collection;
        selection2.property("__zoom", defaultTransform);
        if (collection !== selection2) schedule2(collection, transform, point, event);else selection2.interrupt().each(function () {
          gesture(this, arguments).event(event).start().zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform).end();
        });
      };
      zoom2.scaleBy = function (selection2, k, p, event) {
        zoom2.scaleTo(selection2, function () {
          return this.__zoom.k * (typeof k === "function" ? k.apply(this, arguments) : k);
        }, p, event);
      };
      zoom2.scaleTo = function (selection2, k, p, event) {
        zoom2.transform(selection2, function () {
          var e = extent.apply(this, arguments),
            t0 = this.__zoom,
            p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p,
            p1 = t0.invert(p0),
            k1 = typeof k === "function" ? k.apply(this, arguments) : k;
          return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);
        }, p, event);
      };
      zoom2.translateBy = function (selection2, x, y, event) {
        zoom2.transform(selection2, function () {
          return constrain(this.__zoom.translate(typeof x === "function" ? x.apply(this, arguments) : x, typeof y === "function" ? y.apply(this, arguments) : y), extent.apply(this, arguments), translateExtent);
        }, null, event);
      };
      zoom2.translateTo = function (selection2, x, y, p, event) {
        zoom2.transform(selection2, function () {
          var e = extent.apply(this, arguments),
            t = this.__zoom,
            p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p;
          return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(typeof x === "function" ? -x.apply(this, arguments) : -x, typeof y === "function" ? -y.apply(this, arguments) : -y), e, translateExtent);
        }, p, event);
      };
      function scale(transform, k) {
        k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));
        return k === transform.k ? transform : new Transform(k, transform.x, transform.y);
      }
      function translate(transform, p0, p1) {
        var x = p0[0] - p1[0] * transform.k,
          y = p0[1] - p1[1] * transform.k;
        return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);
      }
      function centroid(extent2) {
        return [(+extent2[0][0] + +extent2[1][0]) / 2, (+extent2[0][1] + +extent2[1][1]) / 2];
      }
      function schedule2(transition, transform, point, event) {
        transition.on("start.zoom", function () {
          gesture(this, arguments).event(event).start();
        }).on("interrupt.zoom end.zoom", function () {
          gesture(this, arguments).event(event).end();
        }).tween("zoom", function () {
          var that = this,
            args = arguments,
            g = gesture(that, args).event(event),
            e = extent.apply(that, args),
            p = point == null ? centroid(e) : typeof point === "function" ? point.apply(that, args) : point,
            w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
            a = that.__zoom,
            b = typeof transform === "function" ? transform.apply(that, args) : transform,
            i = interpolate2(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
          return function (t) {
            if (t === 1) t = b;else {
              var l = i(t),
                k = w / l[2];
              t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k);
            }
            g.zoom(null, t);
          };
        });
      }
      function gesture(that, args, clean) {
        return !clean && that.__zooming || new Gesture(that, args);
      }
      function Gesture(that, args) {
        this.that = that;
        this.args = args;
        this.active = 0;
        this.sourceEvent = null;
        this.extent = extent.apply(that, args);
        this.taps = 0;
      }
      Gesture.prototype = {
        event: function (event) {
          if (event) this.sourceEvent = event;
          return this;
        },
        start: function () {
          if (++this.active === 1) {
            this.that.__zooming = this;
            this.emit("start");
          }
          return this;
        },
        zoom: function (key, transform) {
          if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]);
          if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]);
          if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]);
          this.that.__zoom = transform;
          this.emit("zoom");
          return this;
        },
        end: function () {
          if (--this.active === 0) {
            delete this.that.__zooming;
            this.emit("end");
          }
          return this;
        },
        emit: function (type) {
          var d = select(this.that).datum();
          listeners.call(type, this.that, new ZoomEvent(type, {
            sourceEvent: this.sourceEvent,
            target: zoom2,
            type,
            transform: this.that.__zoom,
            dispatch: listeners
          }), d);
        }
      };
      function wheeled(event, ...args) {
        if (!filter2.apply(this, arguments)) return;
        var g = gesture(this, args).event(event),
          t = this.__zoom,
          k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta2.apply(this, arguments)))),
          p = pointer(event);
        if (g.wheel) {
          if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) g.mouse[1] = t.invert(g.mouse[0] = p);
          clearTimeout(g.wheel);
        } else if (t.k === k) return;else {
          g.mouse = [p, t.invert(p)];
          interrupt(this);
          g.start();
        }
        noevent(event);
        g.wheel = setTimeout(wheelidled, wheelDelay);
        g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));
        function wheelidled() {
          g.wheel = null;
          g.end();
        }
      }
      function mousedowned(event, ...args) {
        if (touchending || !filter2.apply(this, arguments)) return;
        var currentTarget = event.currentTarget,
          g = gesture(this, args, true).event(event),
          v = select(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
          p = pointer(event, currentTarget),
          x0 = event.clientX,
          y0 = event.clientY;
        dragDisable(event.view);
        nopropagation(event);
        g.mouse = [p, this.__zoom.invert(p)];
        interrupt(this);
        g.start();
        function mousemoved(event2) {
          noevent(event2);
          if (!g.moved) {
            var dx = event2.clientX - x0,
              dy = event2.clientY - y0;
            g.moved = dx * dx + dy * dy > clickDistance2;
          }
          g.event(event2).zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event2, currentTarget), g.mouse[1]), g.extent, translateExtent));
        }
        function mouseupped(event2) {
          v.on("mousemove.zoom mouseup.zoom", null);
          yesdrag(event2.view, g.moved);
          noevent(event2);
          g.event(event2).end();
        }
      }
      function dblclicked(event, ...args) {
        if (!filter2.apply(this, arguments)) return;
        var t0 = this.__zoom,
          p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),
          p1 = t0.invert(p0),
          k1 = t0.k * (event.shiftKey ? .5 : 2),
          t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);
        noevent(event);
        if (duration > 0) select(this).transition().duration(duration).call(schedule2, t1, p0, event);else select(this).call(zoom2.transform, t1, p0, event);
      }
      function touchstarted(event, ...args) {
        if (!filter2.apply(this, arguments)) return;
        var touches = event.touches,
          n = touches.length,
          g = gesture(this, args, event.changedTouches.length === n).event(event),
          started,
          i,
          t,
          p;
        nopropagation(event);
        for (i = 0; i < n; ++i) {
          t = touches[i], p = pointer(t, this);
          p = [p, this.__zoom.invert(p), t.identifier];
          if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;
        }
        if (touchstarting) touchstarting = clearTimeout(touchstarting);
        if (started) {
          if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function () {
            touchstarting = null;
          }, touchDelay);
          interrupt(this);
          g.start();
        }
      }
      function touchmoved(event, ...args) {
        if (!this.__zooming) return;
        var g = gesture(this, args).event(event),
          touches = event.changedTouches,
          n = touches.length,
          i,
          t,
          p,
          l;
        noevent(event);
        for (i = 0; i < n; ++i) {
          t = touches[i], p = pointer(t, this);
          if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;
        }
        t = g.that.__zoom;
        if (g.touch1) {
          var p0 = g.touch0[0],
            l0 = g.touch0[1],
            p1 = g.touch1[0],
            l1 = g.touch1[1],
            dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,
            dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;
          t = scale(t, Math.sqrt(dp / dl));
          p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
          l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
        } else if (g.touch0) p = g.touch0[0], l = g.touch0[1];else return;
        g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent));
      }
      function touchended(event, ...args) {
        if (!this.__zooming) return;
        var g = gesture(this, args).event(event),
          touches = event.changedTouches,
          n = touches.length,
          i,
          t;
        nopropagation(event);
        if (touchending) clearTimeout(touchending);
        touchending = setTimeout(function () {
          touchending = null;
        }, touchDelay);
        for (i = 0; i < n; ++i) {
          t = touches[i];
          if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;
        }
        if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;
        if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);else {
          g.end();
          if (g.taps === 2) {
            t = pointer(t, this);
            if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {
              var p = select(this).on("dblclick.zoom");
              if (p) p.apply(this, arguments);
            }
          }
        }
      }
      zoom2.wheelDelta = function (_) {
        return arguments.length ? (wheelDelta2 = typeof _ === "function" ? _ : constant(+_), zoom2) : wheelDelta2;
      };
      zoom2.filter = function (_) {
        return arguments.length ? (filter2 = typeof _ === "function" ? _ : constant(!!_), zoom2) : filter2;
      };
      zoom2.touchable = function (_) {
        return arguments.length ? (touchable = typeof _ === "function" ? _ : constant(!!_), zoom2) : touchable;
      };
      zoom2.extent = function (_) {
        return arguments.length ? (extent = typeof _ === "function" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom2) : extent;
      };
      zoom2.scaleExtent = function (_) {
        return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom2) : [scaleExtent[0], scaleExtent[1]];
      };
      zoom2.translateExtent = function (_) {
        return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom2) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];
      };
      zoom2.constrain = function (_) {
        return arguments.length ? (constrain = _, zoom2) : constrain;
      };
      zoom2.duration = function (_) {
        return arguments.length ? (duration = +_, zoom2) : duration;
      };
      zoom2.interpolate = function (_) {
        return arguments.length ? (interpolate2 = _, zoom2) : interpolate2;
      };
      zoom2.on = function () {
        var value = listeners.on.apply(listeners, arguments);
        return value === listeners ? zoom2 : value;
      };
      zoom2.clickDistance = function (_) {
        return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom2) : Math.sqrt(clickDistance2);
      };
      zoom2.tapDistance = function (_) {
        return arguments.length ? (tapDistance = +_, zoom2) : tapDistance;
      };
      return zoom2;
    }
    //#endregion
    //#region src/features/workflows/canvas/composables/useViewportAutoAdjust.ts
    /**
    * When canvas is resized (via window resize or toggling logs panel), adjust viewport to maintain center
    */
    function useViewportAutoAdjust(viewportRef, viewport, setViewport) {
      const canvasRect = ref();
      watch(viewportRef, (vp, _, onCleanUp) => {
        if (!vp) return;
        const resizeObserver = new ResizeObserver(entries => {
          const entry = entries[0];
          if (entry) canvasRect.value = entry.contentRect;
        });
        canvasRect.value = {
          x: vp.offsetLeft,
          y: vp.offsetTop,
          width: vp.offsetWidth,
          height: vp.offsetHeight
        };
        resizeObserver.observe(vp);
        onCleanUp(() => resizeObserver.disconnect());
      }, {
        immediate: true
      });
      watch(canvasRect, async (newRect, oldRect) => {
        if (!newRect || !oldRect) return;
        await setViewport({
          x: viewport.value.x + (newRect.width - oldRect.width) / 2,
          y: viewport.value.y + (newRect.height - oldRect.height) / 2,
          zoom: viewport.value.zoom
        });
      });
    }

    //#endregion
    //#region src/features/workflows/canvas/components/elements/edges/CanvasArrowHeadMarker.vue?vue&type=script&setup=true&lang.ts

    function getEdgeRenderData(props, {
      connectionType = NodeConnectionTypes.Main
    } = {}) {
      const {
        targetX,
        targetY,
        sourceX,
        sourceY,
        sourcePosition,
        targetPosition
      } = props;
      const isConnectorStraight = sourceY === targetY;
      if (!isRightOfSourceHandle(sourceX, targetX) || connectionType !== NodeConnectionTypes.Main) {
        const segment = getBezierPath(props);
        return {
          segments: [segment],
          labelPosition: [segment[1], segment[2]],
          isConnectorStraight
        };
      }
      const firstSegmentTargetX = (sourceX + targetX) / 2;
      const firstSegmentTargetY = sourceY + EDGE_PADDING_BOTTOM;
      return {
        segments: [getSmoothStepPath({
          sourceX,
          sourceY,
          targetX: firstSegmentTargetX,
          targetY: firstSegmentTargetY,
          sourcePosition,
          targetPosition: Position.Right,
          borderRadius: EDGE_BORDER_RADIUS,
          offset: EDGE_PADDING_X
        }), getSmoothStepPath({
          sourceX: firstSegmentTargetX,
          sourceY: firstSegmentTargetY,
          targetX,
          targetY,
          sourcePosition: Position.Left,
          targetPosition,
          borderRadius: EDGE_BORDER_RADIUS,
          offset: EDGE_PADDING_X
        })],
        labelPosition: [firstSegmentTargetX, firstSegmentTargetY],
        isConnectorStraight
      };
    }

    //#endregion
    //#region src/features/workflows/canvas/components/elements/edges/CanvasConnectionLine.vue?vue&type=script&setup=true&lang.ts

    function _sfc_render$1(_ctx, _cache) {
      return openBlock(), createElementBlock("svg", _hoisted_1$7, _cache[0] || (_cache[0] = [createBaseVNode("path", {
        fill: "currentColor",
        d: "M1.6.13c-.18-.17-.47-.18-.62 0L.56.57.14.98c-.2.15-.18.44 0 .62l3.63 3.6c.1.1.1.27 0 .37-.2.2-.53.52-.93.94-.56.57-.12 1.62.22 2.11.05.07.12.1.2.1.05-.01.1-.04.15-.08l5.23-5.22c.1-.1.1-.26-.02-.34-.5-.34-1.55-.78-2.12-.22-.42.4-.75.73-.94.93-.1.1-.27.1-.37 0L1.6.13ZM9.5 3.9c.07-.09.2-.1.3-.04l6.07 3.44c.15.08.18.29.05.4l-1.21 1.22a.26.26 0 0 1-.26.07l-2.18-.64a.26.26 0 0 0-.32.33l.76 2.02c.04.1.01.2-.06.27L7.7 15.92a.26.26 0 0 1-.41-.05L3.83 9.8a.26.26 0 0 1 .04-.3l5.62-5.6Z"
      }, null, -1)]));
    }
    function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
      return openBlock(), createElementBlock("button", _hoisted_1$5, [renderSlot(_ctx.$slots, "default")]);
    }
    function render$4(_ctx, _cache) {
      return openBlock(), createElementBlock("svg", _hoisted_1$4, _hoisted_3$4);
    }
    function render$3(_ctx, _cache) {
      return openBlock(), createElementBlock("svg", _hoisted_1$3, _hoisted_3$3);
    }
    function render$2(_ctx, _cache) {
      return openBlock(), createElementBlock("svg", _hoisted_1$2, _hoisted_3$2);
    }
    function render$1(_ctx, _cache) {
      return openBlock(), createElementBlock("svg", _hoisted_1$1, _hoisted_3$1);
    }
    function render(_ctx, _cache) {
      return openBlock(), createElementBlock("svg", _hoisted_1$6, _hoisted_3);
    }
    //#endregion
    //#region src/features/workflows/canvas/composables/useCanvasMapping.ts
    function useCanvasMapping({
      nodes,
      connections,
      workflowObject
    }) {
      const i18n = useI18n();
      const workflowsStore = useWorkflowsStore();
      const workflowState = injectWorkflowState();
      const nodeTypesStore = useNodeTypesStore();
      const nodeHelpers = useNodeHelpers();
      const {
        dirtinessByName
      } = useNodeDirtiness();
      function createStickyNoteRenderType(node$1) {
        return {
          type: CanvasNodeRenderType.StickyNote,
          options: {
            width: node$1.parameters.width,
            height: node$1.parameters.height,
            color: node$1.parameters.color,
            content: node$1.parameters.content
          }
        };
      }
      function createAddNodesRenderType() {
        return {
          type: CanvasNodeRenderType.AddNodes,
          options: {}
        };
      }
      function createChoicePromptRenderType() {
        return {
          type: CanvasNodeRenderType.ChoicePrompt,
          options: {}
        };
      }
      function createDefaultNodeRenderType(node$1) {
        const nodeType = nodeTypeDescriptionByNodeId.value[node$1.id];
        const icon$1 = getNodeIconSource(simulatedNodeTypeDescriptionByNodeId.value[node$1.id] ?? nodeType ?? node$1.type, node$1);
        return {
          type: CanvasNodeRenderType.Default,
          options: {
            trigger: isTriggerNodeById.value[node$1.id],
            configuration: nodeTypesStore.isConfigNode(workflowObject.value, node$1, node$1.type),
            configurable: nodeTypesStore.isConfigurableNode(workflowObject.value, node$1, node$1.type, node$1.typeVersion),
            inputs: {
              labelSize: nodeInputLabelSizeById.value[node$1.id]
            },
            outputs: {
              labelSize: nodeOutputLabelSizeById.value[node$1.id]
            },
            tooltip: nodeTooltipById.value[node$1.id],
            dirtiness: dirtinessByName.value[node$1.name],
            icon: icon$1
          }
        };
      }
      const renderTypeByNodeId = computed(() => nodes.value.reduce((acc, node$1) => {
        switch (node$1.type) {
          case `${CanvasNodeRenderType.StickyNote}`:
            acc[node$1.id] = createStickyNoteRenderType(node$1);
            break;
          case `${CanvasNodeRenderType.AddNodes}`:
            acc[node$1.id] = createAddNodesRenderType();
            break;
          case `${CanvasNodeRenderType.ChoicePrompt}`:
            acc[node$1.id] = createChoicePromptRenderType();
            break;
          default:
            acc[node$1.id] = createDefaultNodeRenderType(node$1);
        }
        return acc;
      }, {}) ?? {});
      const nodeTypeDescriptionByNodeId = computed(() => nodes.value.reduce((acc, node$1) => {
        acc[node$1.id] = nodeTypesStore.getNodeType(node$1.type, node$1.typeVersion) ?? nodeTypesStore.communityNodeType(node$1.type)?.nodeDescription ?? null;
        return acc;
      }, {}));
      const isTriggerNodeById = computed(() => nodes.value.reduce((acc, node$1) => {
        acc[node$1.id] = nodeTypesStore.isTriggerNode(node$1.type);
        return acc;
      }, {}));
      const nodeSubtitleById = computed(() => {
        return nodes.value.reduce((acc, node$1) => {
          try {
            const nodeTypeDescription = nodeTypeDescriptionByNodeId.value[node$1.id];
            if (!nodeTypeDescription) return acc;
            const nodeSubtitle = nodeHelpers.getNodeSubtitle(node$1, nodeTypeDescription, workflowObject.value) ?? "";
            if (nodeSubtitle.includes("__CUSTOM_API_CALL__")) return acc;
            acc[node$1.id] = nodeSubtitle;
          } catch (e) {}
          return acc;
        }, {});
      });
      const nodeInputsById = computed(() => nodes.value.reduce((acc, node$1) => {
        const nodeTypeDescription = nodeTypeDescriptionByNodeId.value[node$1.id];
        const workflowObjectNode = workflowObject.value.getNode(node$1.name);
        acc[node$1.id] = workflowObjectNode && nodeTypeDescription ? mapLegacyEndpointsToCanvasConnectionPort(getNodeInputs(workflowObject.value, workflowObjectNode, nodeTypeDescription), nodeTypeDescription.inputNames ?? []) : [];
        return acc;
      }, {}));
      function getLabelSize(label$7 = "") {
        if (label$7.length <= 2) return 0;else if (label$7.length <= 6) return 1;else return 2;
      }
      function getMaxNodePortsLabelSize(ports) {
        const labelSizes = ["small", "medium", "large"];
        const labelSizeIndexes = ports.reduce((sizeAcc, input) => {
          if (input.type === NodeConnectionTypes.Main) sizeAcc.push(getLabelSize(input.label ?? ""));
          return sizeAcc;
        }, [0]);
        return labelSizes[Math.max(...labelSizeIndexes)];
      }
      const nodeInputLabelSizeById = computed(() => nodes.value.reduce((acc, node$1) => {
        acc[node$1.id] = getMaxNodePortsLabelSize(nodeInputsById.value[node$1.id]);
        return acc;
      }, {}));
      const nodeOutputLabelSizeById = computed(() => nodes.value.reduce((acc, node$1) => {
        acc[node$1.id] = getMaxNodePortsLabelSize(nodeOutputsById.value[node$1.id]);
        return acc;
      }, {}));
      const nodeOutputsById = computed(() => nodes.value.reduce((acc, node$1) => {
        const nodeTypeDescription = nodeTypeDescriptionByNodeId.value[node$1.id];
        const workflowObjectNode = workflowObject.value.getNode(node$1.name);
        acc[node$1.id] = workflowObjectNode && nodeTypeDescription ? mapLegacyEndpointsToCanvasConnectionPort(getNodeOutputs(workflowObject.value, workflowObjectNode, nodeTypeDescription), nodeTypeDescription.outputNames ?? []) : [];
        return acc;
      }, {}));
      const nodePinnedDataById = computed(() => nodes.value.reduce((acc, node$1) => {
        acc[node$1.id] = workflowsStore.pinDataByNodeName(node$1.name);
        return acc;
      }, {}));
      const nodeTooltipById = computed(() => {
        if (!workflowsStore.isWorkflowRunning) return {};
        const activeTriggerNodeCount = nodes.value.filter(node$1 => isTriggerNodeById.value[node$1.id] && !node$1.disabled).length;
        const triggerNodeName = workflowsStore.getWorkflowExecution?.triggerNode;
        if (triggerNodeName === void 0 && activeTriggerNodeCount !== 1) return {};
        return nodes.value.reduce((acc, node$1) => {
          const nodeTypeDescription = nodeTypeDescriptionByNodeId.value[node$1.id];
          if (nodeTypeDescription && isTriggerNodeById.value[node$1.id]) {
            if (!!node$1.disabled || triggerNodeName !== void 0 && triggerNodeName !== node$1.name || !["new", "unknown", "waiting"].includes(nodeExecutionStatusById.value[node$1.id]) || nodePinnedDataById.value[node$1.id]) return acc;
            if (typeof nodeTypeDescription.eventTriggerDescription === "string") {
              const nodeName = i18n.shortNodeType(nodeTypeDescription.name);
              const {
                eventTriggerDescription
              } = nodeTypeDescription;
              acc[node$1.id] = i18n.nodeText(nodeTypeDescription.name).eventTriggerDescription(nodeName, eventTriggerDescription ?? "");
            } else acc[node$1.id] = i18n.baseText("node.waitingForYouToCreateAnEventIn", {
              interpolate: {
                nodeType: nodeTypeDescription ? getTriggerNodeServiceName(nodeTypeDescription) : ""
              }
            });
          }
          return acc;
        }, {});
      });
      const nodeExecutionRunningById = computed(() => nodes.value.reduce((acc, node$1) => {
        acc[node$1.id] = workflowState.executingNode.isNodeExecuting(node$1.name);
        return acc;
      }, {}));
      const nodeExecutionWaitingForNextById = computed(() => nodes.value.reduce((acc, node$1) => {
        acc[node$1.id] = node$1.name === workflowState.executingNode.lastAddedExecutingNode && workflowState.executingNode.executingNode.length === 0 && workflowsStore.isWorkflowRunning;
        return acc;
      }, {}));
      const nodeExecutionStatusById = computed(() => nodes.value.reduce((acc, node$1) => {
        const tasks = workflowsStore.getWorkflowRunData?.[node$1.name] ?? [];
        let lastExecutionStatus = tasks.at(-1)?.executionStatus;
        if (tasks.length > 1 && lastExecutionStatus === "canceled") lastExecutionStatus = tasks.at(-2)?.executionStatus;
        acc[node$1.id] = lastExecutionStatus ?? "new";
        return acc;
      }, {}));
      const nodeExecutionRunDataById = computed(() => nodes.value.reduce((acc, node$1) => {
        acc[node$1.id] = workflowsStore.getWorkflowResultDataByNodeName(node$1.name);
        return acc;
      }, {}));
      const nodesByName = computed(() => new Map(nodes.value.map(n => [n.name, n])));
      const nodeExecutionRunDataOutputMapById = ref({});
      watchThrottled(() => workflowsStore.workflowExecutionResultDataLastUpdate, () => {
        nodeExecutionRunDataOutputMapById.value = Object.keys(nodeExecutionRunDataById.value).reduce((acc, nodeId) => {
          acc[nodeId] = {};
          const outputData = {
            iterations: 0,
            total: 0
          };
          for (const runIteration of nodeExecutionRunDataById.value[nodeId] ?? []) {
            const data = runIteration.data ?? {};
            for (const connectionType of Object.keys(data)) {
              const connectionTypeData = data[connectionType] ?? {};
              acc[nodeId][connectionType] = acc[nodeId][connectionType] ?? {};
              for (const outputIndex of Object.keys(connectionTypeData)) {
                const connectionTypeOutputIndexData = connectionTypeData[parseInt(outputIndex, 10)] ?? [];
                acc[nodeId][connectionType][outputIndex] = acc[nodeId][connectionType][outputIndex] ?? {
                  ...outputData,
                  ...(connectionType !== NodeConnectionTypes.Main ? {
                    byTarget: {}
                  } : {})
                };
                let itemCount = connectionTypeOutputIndexData.length;
                if (connectionType !== NodeConnectionTypes.Main && connectionTypeOutputIndexData.length > 0) {
                  const firstItem = connectionTypeOutputIndexData[0];
                  if (firstItem?.json && typeof firstItem.json === "object" && "response" in firstItem.json && Array.isArray(firstItem.json.response)) itemCount = firstItem.json.response.length;
                }
                if (runIteration.executionStatus !== "canceled") acc[nodeId][connectionType][outputIndex].iterations += 1;
                acc[nodeId][connectionType][outputIndex].total += itemCount;
                if (connectionType !== NodeConnectionTypes.Main) {
                  const callingNodeName = runIteration.source?.[0]?.previousNode;
                  if (callingNodeName) {
                    const callingNode = nodesByName.value.get(callingNodeName);
                    if (callingNode) {
                      const targetId = callingNode.id;
                      const outputEntry = acc[nodeId][connectionType][outputIndex];
                      if (outputEntry.byTarget) {
                        if (!outputEntry.byTarget[targetId]) outputEntry.byTarget[targetId] = {
                          total: 0,
                          iterations: 0
                        };
                        if (runIteration.executionStatus !== "canceled") outputEntry.byTarget[targetId].iterations += 1;
                        outputEntry.byTarget[targetId].total += itemCount;
                      }
                    }
                  }
                }
              }
            }
          }
          return acc;
        }, {});
      }, {
        throttle: 500,
        immediate: true
      });
      const nodeExecutionErrorsById = computed(() => nodes.value.reduce((acc, node$1) => {
        const executionErrors = [];
        const nodeExecutionRunData = workflowsStore.getWorkflowRunData?.[node$1.name];
        if (nodeExecutionRunData) nodeExecutionRunData.forEach(executionRunData => {
          if (executionRunData?.error) {
            const {
              message,
              description: description$1
            } = executionRunData.error;
            const issue = `${message}${description$1 ? ` (${description$1})` : ""}`;
            executionErrors.push(sanitizeHtml(issue));
          }
        });
        acc[node$1.id] = executionErrors;
        return acc;
      }, {}));
      const nodeValidationErrorsById = computed(() => nodes.value.reduce((acc, node$1) => {
        const validationErrors = [];
        if (node$1?.issues !== void 0) validationErrors.push(...nodeHelpers.nodeIssuesToString(node$1.issues, node$1));
        acc[node$1.id] = validationErrors;
        return acc;
      }, {}));
      const nodeHasIssuesById = computed(() => nodes.value.reduce((acc, node$1) => {
        const hasExecutionErrors = nodeExecutionErrorsById.value[node$1.id]?.length > 0;
        const hasValidationErrors = nodeValidationErrorsById.value[node$1.id]?.length > 0;
        if (["crashed", "error"].includes(nodeExecutionStatusById.value[node$1.id])) acc[node$1.id] = true;else if (nodePinnedDataById.value[node$1.id]) acc[node$1.id] = false;else if (hasValidationErrors) acc[node$1.id] = true;else if (hasExecutionErrors) acc[node$1.id] = true;else {
          const tasks = workflowsStore.getWorkflowRunData?.[node$1.name] ?? [];
          acc[node$1.id] = Boolean(tasks.at(-1)?.error);
        }
        return acc;
      }, {}));
      const nodeExecutionWaitingById = computed(() => nodes.value.reduce((acc, node$1) => {
        const isExecutionSummary = execution => "waitTill" in execution;
        const workflowExecution = workflowsStore.getWorkflowExecution;
        const lastNodeExecuted = workflowExecution?.data?.resultData?.lastNodeExecuted;
        if (workflowExecution && lastNodeExecuted && isExecutionSummary(workflowExecution)) {
          if (node$1.name === workflowExecution.data?.resultData?.lastNodeExecuted && workflowExecution?.waitTill && !workflowExecution?.finished) {
            if (node$1 && node$1.type === "n8n-nodes-base.wait" && ["webhook", "form"].includes(node$1.parameters.resume)) {
              acc[node$1.id] = node$1.parameters.resume === "webhook" ? i18n.baseText("node.theNodeIsWaitingWebhookCall") : i18n.baseText("node.theNodeIsWaitingFormCall");
              return acc;
            }
            if (node$1?.parameters.operation === "sendAndWait") {
              acc[node$1.id] = i18n.baseText("node.theNodeIsWaitingUserInput");
              return acc;
            }
            if (node$1?.type === "n8n-nodes-base.form") {
              acc[node$1.id] = i18n.baseText("node.theNodeIsWaitingFormCall");
              return acc;
            }
            const waitDate = new Date(workflowExecution.waitTill);
            if (waitDate.getTime() === WAIT_INDEFINITELY.getTime()) {
              acc[node$1.id] = i18n.baseText("node.theNodeIsWaitingIndefinitelyForAnIncomingWebhookCall");
              return acc;
            }
            acc[node$1.id] = i18n.baseText("node.nodeIsWaitingTill", {
              interpolate: {
                date: waitDate.toLocaleDateString(),
                time: waitDate.toLocaleTimeString()
              }
            });
          }
        }
        return acc;
      }, {}));
      const additionalNodePropertiesById = computed(() => {
        const stickyNodeBaseZIndex = -100;
        const sortedStickyNodeBoundingBoxes = nodes.value.reduce((acc, node$1) => {
          if (node$1.type === "n8n-nodes-base.stickyNote") {
            const x = node$1.position[0];
            const y = node$1.position[1];
            const width$1 = node$1.parameters.width;
            const height = node$1.parameters.height;
            acc.push({
              id: node$1.id,
              x,
              y,
              width: width$1,
              height,
              area: width$1 * height,
              zIndex: stickyNodeBaseZIndex
            });
          }
          return acc;
        }, []).sort((a, b) => b.area - a.area);
        sortedStickyNodeBoundingBoxes.forEach((node$1, index) => {
          node$1.zIndex = stickyNodeBaseZIndex + index;
        });
        for (let i = 0; i < sortedStickyNodeBoundingBoxes.length; i++) {
          const node1 = sortedStickyNodeBoundingBoxes[i];
          for (let j = i + 1; j < sortedStickyNodeBoundingBoxes.length; j++) {
            const node2 = sortedStickyNodeBoundingBoxes[j];
            if (checkOverlap(node1, node2)) {
              if (node1.area < node2.area && node1.zIndex <= node2.zIndex) node1.zIndex = node2.zIndex + 1;else if (node2.area < node1.area && node2.zIndex <= node1.zIndex) node2.zIndex = node1.zIndex + 1;
            }
          }
        }
        return sortedStickyNodeBoundingBoxes.reduce((acc, node$1) => {
          acc[node$1.id] = {
            style: {
              zIndex: node$1.zIndex
            }
          };
          return acc;
        }, {});
      });
      const simulatedNodeTypeDescriptionByNodeId = computed(() => {
        return nodes.value.reduce((acc, node$1) => {
          if (["n8n-nodes-base.simulate", "n8n-nodes-base.simulateTrigger"].includes(node$1.type)) {
            const icon$1 = node$1.parameters?.icon;
            const iconValue = workflowObject.value.expression.getSimpleParameterValue(node$1, icon$1, "internal", {});
            if (iconValue && typeof iconValue === "string") acc[node$1.id] = nodeTypesStore.getNodeType(iconValue);
          }
          return acc;
        }, {});
      });
      function filterOutCanceled(tasks) {
        if (!tasks) return null;
        return tasks.filter(task => task.executionStatus !== "canceled");
      }
      const mappedNodes = computed(() => {
        const connectionsBySourceNode = connections.value;
        const connectionsByDestinationNode = mapConnectionsByDestination(connectionsBySourceNode);
        return [...nodes.value.map(node$1 => {
          const outputConnections = connectionsBySourceNode[node$1.name] ?? {};
          const inputConnections = connectionsByDestinationNode[node$1.name] ?? {};
          const data = {
            id: node$1.id,
            name: node$1.name,
            subtitle: nodeSubtitleById.value[node$1.id] ?? "",
            type: node$1.type,
            typeVersion: node$1.typeVersion,
            disabled: node$1.disabled,
            inputs: nodeInputsById.value[node$1.id] ?? [],
            outputs: nodeOutputsById.value[node$1.id] ?? [],
            connections: {
              [CanvasConnectionMode.Input]: inputConnections,
              [CanvasConnectionMode.Output]: outputConnections
            },
            issues: {
              execution: nodeExecutionErrorsById.value[node$1.id],
              validation: nodeValidationErrorsById.value[node$1.id],
              visible: nodeHasIssuesById.value[node$1.id]
            },
            pinnedData: {
              count: nodePinnedDataById.value[node$1.id]?.length ?? 0,
              visible: !!nodePinnedDataById.value[node$1.id]
            },
            execution: {
              status: nodeExecutionStatusById.value[node$1.id],
              waiting: nodeExecutionWaitingById.value[node$1.id],
              waitingForNext: nodeExecutionWaitingForNextById.value[node$1.id],
              running: nodeExecutionRunningById.value[node$1.id]
            },
            runData: {
              outputMap: nodeExecutionRunDataOutputMapById.value[node$1.id],
              iterations: filterOutCanceled(nodeExecutionRunDataById.value[node$1.id])?.length ?? 0,
              visible: !!nodeExecutionRunDataById.value[node$1.id]
            },
            render: renderTypeByNodeId.value[node$1.id] ?? {
              type: "default",
              options: {}
            }
          };
          return {
            id: node$1.id,
            label: node$1.name,
            type: "canvas-node",
            position: {
              x: node$1.position[0],
              y: node$1.position[1]
            },
            data,
            ...additionalNodePropertiesById.value[node$1.id],
            draggable: node$1.draggable ?? true
          };
        })];
      });
      const mappedConnections = computed(() => {
        return mapLegacyConnectionsToCanvasConnections(connections.value ?? [], nodes.value ?? []).map(connection => {
          const type = getConnectionType(connection);
          const label$7 = getConnectionLabel(connection);
          const data = getConnectionData(connection);
          return {
            ...connection,
            data,
            type,
            label: label$7,
            markerEnd: MarkerType.ArrowClosed
          };
        });
      });
      function getConnectionData(connection) {
        const {
          type,
          index
        } = parseCanvasConnectionHandleString(connection.sourceHandle);
        const runDataTotal = nodeExecutionRunDataOutputMapById.value[connection.source]?.[type]?.[index]?.total ?? 0;
        const sourceTasks = nodeExecutionRunDataById.value[connection.source] ?? [];
        let lastSourceTask = sourceTasks[sourceTasks.length - 1];
        if (lastSourceTask?.executionStatus === "canceled" && sourceTasks.length > 1) lastSourceTask = sourceTasks[sourceTasks.length - 2];
        let status$1;
        if (nodeExecutionRunningById.value[connection.source] && runDataTotal === 0) status$1 = "running";else if (nodePinnedDataById.value[connection.source] && nodeExecutionRunDataById.value[connection.source]) status$1 = "pinned";else if (nodeHasIssuesById.value[connection.source]) status$1 = "error";else if (runDataTotal > 0 && lastSourceTask?.executionStatus !== "canceled") {
          const isMainConnection = type === NodeConnectionTypes.Main;
          const targetNodeHasAnyExecution = nodeExecutionRunDataById.value[connection.target];
          if (isMainConnection || targetNodeHasAnyExecution) status$1 = "success";
        }
        const maxConnections = [...nodeInputsById.value[connection.source], ...nodeInputsById.value[connection.target]].filter(port => port.type === type).reduce((acc, port) => {
          if (port.maxConnections === void 0) return acc;
          return Math.min(acc ?? Infinity, port.maxConnections);
        }, void 0);
        return {
          ...connection.data,
          ...(maxConnections ? {
            maxConnections
          } : {}),
          status: status$1
        };
      }
      function getConnectionType(_) {
        return "canvas-edge";
      }
      function getConnectionLabel(connection) {
        const fromNode = nodes.value.find(node$1 => node$1.name === connection.data?.source.node);
        if (!fromNode) return "";
        if (nodePinnedDataById.value[fromNode.id]) {
          const pinnedDataCount = nodePinnedDataById.value[fromNode.id]?.length ?? 0;
          return pinnedDataCount > 0 ? i18n.baseText("ndv.output.items", {
            adjustToNumber: pinnedDataCount,
            interpolate: {
              count: String(pinnedDataCount)
            }
          }) : "";
        } else if (nodeExecutionRunDataById.value[fromNode.id]) {
          const {
            type,
            index
          } = parseCanvasConnectionHandleString(connection.sourceHandle);
          const outputData = nodeExecutionRunDataOutputMapById.value[fromNode.id]?.[type]?.[index];
          const isMainConnection = type === NodeConnectionTypes.Main;
          const targetHasExecutionData = nodeExecutionRunDataById.value[connection.target];
          if (!isMainConnection && outputData?.byTarget) {
            const targetNodeId = connection.target;
            const targetData = outputData.byTarget[targetNodeId];
            if (targetData && targetData.total > 0 && targetHasExecutionData) return i18n.baseText(targetData.iterations > 1 ? "ndv.output.itemsTotal" : "ndv.output.items", {
              adjustToNumber: targetData.total,
              interpolate: {
                count: String(targetData.total)
              }
            });
            return "";
          }
          const runDataTotal = outputData?.total ?? 0;
          const hasMultipleRunDataIterations = (outputData?.iterations ?? 1) > 1;
          return runDataTotal > 0 && (isMainConnection || targetHasExecutionData) ? i18n.baseText(hasMultipleRunDataIterations ? "ndv.output.itemsTotal" : "ndv.output.items", {
            adjustToNumber: runDataTotal,
            interpolate: {
              count: String(runDataTotal)
            }
          }) : "";
        }
        return "";
      }
      return {
        additionalNodePropertiesById,
        nodeExecutionRunDataOutputMapById,
        nodeExecutionWaitingForNextById,
        nodeHasIssuesById,
        connections: mappedConnections,
        nodes: mappedNodes
      };
    }

    //#endregion
    _export({
      l: useGlobalLinkActions,
      o: useContextMenuItems,
      s: useExpressionResolveCtx,
      t: useCanvasMapping,
      u: useWorkflowExtraction
    });
    return {
      setters: [function (_chunkLegacy001Js) {
        __toESM = _chunkLegacy001Js.o;
        __commonJS = _chunkLegacy001Js.t;
      }, function (_vueRuntimeEsmBundlerLegacy003Js) {
        computed = _vueRuntimeEsmBundlerLegacy003Js.C;
        toDisplayString = _vueRuntimeEsmBundlerLegacy003Js.Cn;
        createElementBlock = _vueRuntimeEsmBundlerLegacy003Js.D;
        createCommentVNode = _vueRuntimeEsmBundlerLegacy003Js.E;
        nextTick = _vueRuntimeEsmBundlerLegacy003Js.G;
        unref = _vueRuntimeEsmBundlerLegacy003Js.Gt;
        guardReactiveProps = _vueRuntimeEsmBundlerLegacy003Js.I;
        ref = _vueRuntimeEsmBundlerLegacy003Js.It;
        onBeforeUnmount = _vueRuntimeEsmBundlerLegacy003Js.J;
        h = _vueRuntimeEsmBundlerLegacy003Js.L;
        createVNode = _vueRuntimeEsmBundlerLegacy003Js.M;
        defineComponent = _vueRuntimeEsmBundlerLegacy003Js.P;
        reactive = _vueRuntimeEsmBundlerLegacy003Js.Pt;
        onUnmounted = _vueRuntimeEsmBundlerLegacy003Js.Q;
        createBlock = _vueRuntimeEsmBundlerLegacy003Js.T;
        mergeModels = _vueRuntimeEsmBundlerLegacy003Js.U;
        toRef = _vueRuntimeEsmBundlerLegacy003Js.Vt;
        mergeProps = _vueRuntimeEsmBundlerLegacy003Js.W;
        onMounted = _vueRuntimeEsmBundlerLegacy003Js.Z;
        Fragment = _vueRuntimeEsmBundlerLegacy003Js._;
        watch = _vueRuntimeEsmBundlerLegacy003Js._t;
        renderSlot = _vueRuntimeEsmBundlerLegacy003Js.at;
        Teleport = _vueRuntimeEsmBundlerLegacy003Js.b;
        normalizeStyle = _vueRuntimeEsmBundlerLegacy003Js.bn;
        withCtx = _vueRuntimeEsmBundlerLegacy003Js.bt;
        useCssModule = _vueRuntimeEsmBundlerLegacy003Js.c;
        resolveDynamicComponent = _vueRuntimeEsmBundlerLegacy003Js.ct;
        openBlock = _vueRuntimeEsmBundlerLegacy003Js.et;
        useModel = _vueRuntimeEsmBundlerLegacy003Js.ft;
        withModifiers = _vueRuntimeEsmBundlerLegacy003Js.h;
        renderList = _vueRuntimeEsmBundlerLegacy003Js.it;
        createTextVNode = _vueRuntimeEsmBundlerLegacy003Js.j;
        createSlots = _vueRuntimeEsmBundlerLegacy003Js.k;
        useCssVars = _vueRuntimeEsmBundlerLegacy003Js.l;
        Transition = _vueRuntimeEsmBundlerLegacy003Js.n;
        provide = _vueRuntimeEsmBundlerLegacy003Js.nt;
        vShow = _vueRuntimeEsmBundlerLegacy003Js.p;
        useSlots = _vueRuntimeEsmBundlerLegacy003Js.pt;
        useAttrs = _vueRuntimeEsmBundlerLegacy003Js.ut;
        normalizeClass = _vueRuntimeEsmBundlerLegacy003Js.vn;
        watchEffect = _vueRuntimeEsmBundlerLegacy003Js.vt;
        createBaseVNode = _vueRuntimeEsmBundlerLegacy003Js.w;
        withDirectives = _vueRuntimeEsmBundlerLegacy003Js.xt;
        Suspense = _vueRuntimeEsmBundlerLegacy003Js.y;
        normalizeProps = _vueRuntimeEsmBundlerLegacy003Js.yn;
        inject = _vueRuntimeEsmBundlerLegacy003Js.z;
      }, function (_MapCacheLegacy005Js) {
        onKeyDown = _MapCacheLegacy005Js._;
        I18nT = _MapCacheLegacy005Js._t;
        useI18n = _MapCacheLegacy005Js.gt;
        useThrottleFn = _MapCacheLegacy005Js.it;
        watchOnce = _MapCacheLegacy005Js.ot;
        watchThrottled = _MapCacheLegacy005Js.st;
        onKeyUp = _MapCacheLegacy005Js.y;
      }, function (_srcLegacy007Js) {
        N8nButton_default = _srcLegacy007Js.Hn;
        N8nPopover_default = _srcLegacy007Js.T;
        N8nText_default = _srcLegacy007Js.Vn;
        N8nIcon_default = _srcLegacy007Js.Wn;
        useDeviceSupport = _srcLegacy007Js.it;
        N8nTooltip_default = _srcLegacy007Js.mt;
        N8nActionDropdown_default = _srcLegacy007Js.nt;
        N8nLink_default = _srcLegacy007Js.ut;
        N8nIconButton_default = _srcLegacy007Js.xt;
        N8nSticky_default = _srcLegacy007Js.y;
      }, function (_pluginVue_exportHelperLegacy00fJs) {
        __plugin_vue_export_helper_default = _pluginVue_exportHelperLegacy00fJs.t;
      }, function (_truncateLegacy00hJs) {
        truncateBeforeLast = _truncateLegacy00hJs.n;
        useRoute = _truncateLegacy00hJs.v;
        createEventBus = _truncateLegacy00hJs.x;
        useRouter = _truncateLegacy00hJs.y;
      }, function (_ParameterInputListLegacy00tJs) {
        TitledList_default = _ParameterInputListLegacy00tJs.D;
      }, function (_useTelemetryLegacy00HJs) {
        _sfc_main$1 = _useTelemetryLegacy00HJs.A;
        isMacOs = _useTelemetryLegacy00HJs.B;
        CanvasNodeDirtiness = _useTelemetryLegacy00HJs.Cr;
        PanelPosition = _useTelemetryLegacy00HJs.D;
        useSourceControlStore = _useTelemetryLegacy00HJs.Dn;
        NodeId = _useTelemetryLegacy00HJs.E;
        getBezierPath = _useTelemetryLegacy00HJs.F;
        useUIStore = _useTelemetryLegacy00HJs.Fi;
        useVueFlow = _useTelemetryLegacy00HJs.H;
        useSettingsStore = _useTelemetryLegacy00HJs.Ho;
        getBoundsofRects = _useTelemetryLegacy00HJs.I;
        getConnectedEdges = _useTelemetryLegacy00HJs.L;
        _sfc_main$d = _useTelemetryLegacy00HJs.M;
        _sfc_main$f = _useTelemetryLegacy00HJs.N;
        Position = _useTelemetryLegacy00HJs.O;
        nodeViewEventBus = _useTelemetryLegacy00HJs.Oi;
        clamp = _useTelemetryLegacy00HJs.P;
        getRectOfNodes = _useTelemetryLegacy00HJs.R;
        v4_default = _useTelemetryLegacy00HJs.Ro;
        injectWorkflowState = _useTelemetryLegacy00HJs.Sn;
        CanvasConnectionMode = _useTelemetryLegacy00HJs.Sr;
        MarkerType = _useTelemetryLegacy00HJs.T;
        useHistoryStore = _useTelemetryLegacy00HJs.Tr;
        wheelDelta = _useTelemetryLegacy00HJs.U;
        useGetPointerPosition = _useTelemetryLegacy00HJs.V;
        useNDVStore = _useTelemetryLegacy00HJs.a;
        useNodeTypesStore = _useTelemetryLegacy00HJs.at;
        isPresent = _useTelemetryLegacy00HJs.bi;
        CONFIGURATION_NODE_RADIUS = _useTelemetryLegacy00HJs.c;
        getTriggerNodeServiceName = _useTelemetryLegacy00HJs.ei;
        GRID_SIZE = _useTelemetryLegacy00HJs.f;
        _sfc_main$3 = _useTelemetryLegacy00HJs.j;
        globalLinkActionsEventBus = _useTelemetryLegacy00HJs.ji;
        _sfc_main$4 = _useTelemetryLegacy00HJs.k;
        calculateNodeSize = _useTelemetryLegacy00HJs.m;
        useWorkflowsStore = _useTelemetryLegacy00HJs.o;
        PUSH_NODES_OFFSET = _useTelemetryLegacy00HJs.p;
        isChatNode = _useTelemetryLegacy00HJs.q;
        useTelemetry = _useTelemetryLegacy00HJs.t;
        DEFAULT_NODE_SIZE = _useTelemetryLegacy00HJs.u;
        isValidNodeConnectionType = _useTelemetryLegacy00HJs.vr;
        updateViewportToContainNodes = _useTelemetryLegacy00HJs.w;
        CanvasNodeRenderType = _useTelemetryLegacy00HJs.wr;
        useNodeHelpers = _useTelemetryLegacy00HJs.xn;
        getMousePosition = _useTelemetryLegacy00HJs.y;
        environments_store_default = _useTelemetryLegacy00HJs.yn;
        getSmoothStepPath = _useTelemetryLegacy00HJs.z;
      }, function (_useToastLegacy00JJs) {
        isOutsideSelected = _useToastLegacy00JJs.o;
        sanitizeHtml = _useToastLegacy00JJs.s;
        useToast = _useToastLegacy00JJs.t;
      }, function (_constantsLegacy00TJs) {
        CHAT_TRIGGER_NODE_TYPE = _constantsLegacy00TJs.Bt;
        NODE_CREATOR_OPEN_SOURCES = _constantsLegacy00TJs.Ct;
        getResourcePermissions = _constantsLegacy00TJs.Do;
        CanvasNodeHandleKey = _constantsLegacy00TJs.Gs;
        CUSTOM_API_CALL_KEY = _constantsLegacy00TJs.I;
        VIEWS = _constantsLegacy00TJs.Io;
        mapConnectionsByDestination = _constantsLegacy00TJs.Ji;
        NodeConnectionTypes = _constantsLegacy00TJs.Ka;
        PRODUCTION_ONLY_TRIGGER_NODE_TYPES = _constantsLegacy00TJs.Kn;
        CanvasNodeKey = _constantsLegacy00TJs.Ks;
        isCommunityPackageName = _constantsLegacy00TJs.Oa;
        NOT_DUPLICATABLE_NODE_TYPES = _constantsLegacy00TJs.Rn;
        EXPERIMENT_TEMPLATES_DATA_QUALITY_KEY = _constantsLegacy00TJs.Wo;
        CanvasKey = _constantsLegacy00TJs.Ws;
        require_isEqual = _constantsLegacy00TJs._o;
        WAIT_NODE_TYPE = _constantsLegacy00TJs._r;
        getSubworkflowId = _constantsLegacy00TJs.ca;
        isExecutable = _constantsLegacy00TJs.da;
        isNodeWithWorkflowSelector = _constantsLegacy00TJs.fa;
        WEBHOOK_NODE_TYPE = _constantsLegacy00TJs.go;
        WAIT_INDEFINITELY = _constantsLegacy00TJs.ho;
        EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE = _constantsLegacy00TJs.io;
        CANVAS_EXECUTION_DATA_THROTTLE_DURATION = _constantsLegacy00TJs.mc;
        parseExtractableSubgraphSelection = _constantsLegacy00TJs.mi;
        getNodeOutputs = _constantsLegacy00TJs.na;
        SIMULATE_NODE_TYPE = _constantsLegacy00TJs.nr;
        buildAdjacencyList = _constantsLegacy00TJs.pi;
        SEND_AND_WAIT_OPERATION = _constantsLegacy00TJs.po;
        WORKFLOW_EXTRACTION_NAME_MODAL_KEY = _constantsLegacy00TJs.ps;
        ExpressionLocalResolveContextSymbol = _constantsLegacy00TJs.qs;
        SIMULATE_TRIGGER_NODE_TYPE = _constantsLegacy00TJs.rr;
        getNodeInputs = _constantsLegacy00TJs.ta;
        FORM_NODE_TYPE = _constantsLegacy00TJs.un;
        STICKY_NODE_TYPE = _constantsLegacy00TJs.ur;
        extractReferencesInNodeExpressions = _constantsLegacy00TJs.vi;
      }, function (_useStylesLegacy015Js) {
        useStyles = _useStylesLegacy015Js.t;
      }, function (_chatPanelStoreLegacy017Js) {
        useChatPanelStore = _chatPanelStoreLegacy017Js.t;
      }, function (_templatesStoreLegacy01fJs) {
        useTemplatesDataQualityStore = _templatesStoreLegacy01fJs.a;
        trackTemplatesClick = _templatesStoreLegacy01fJs.i;
        TemplateClickSource = _templatesStoreLegacy01fJs.n;
        isExtraTemplateLinksExperimentEnabled = _templatesStoreLegacy01fJs.r;
        useTemplatesStore = _templatesStoreLegacy01fJs.t;
      }, function (_useRunWorkflowLegacy01pJs) {
        useNodeDirtiness = _useRunWorkflowLegacy01pJs.r;
        useRunWorkflow = _useRunWorkflowLegacy01pJs.t;
      }, function (_usePinnedDataLegacy01rJs) {
        usePinnedData = _usePinnedDataLegacy01rJs.t;
      }, function (_nodeCreatorStoreLegacy01tJs) {
        mapLegacyEndpointsToCanvasConnectionPort = _nodeCreatorStoreLegacy01tJs.c;
        insertSpacersBetweenEndpoints = _nodeCreatorStoreLegacy01tJs.i;
        parseCanvasConnectionHandleString = _nodeCreatorStoreLegacy01tJs.l;
        checkOverlap = _nodeCreatorStoreLegacy01tJs.n;
        createCanvasConnectionHandleString = _nodeCreatorStoreLegacy01tJs.r;
        mapLegacyConnectionsToCanvasConnections = _nodeCreatorStoreLegacy01tJs.s;
        useNodeCreatorStore = _nodeCreatorStoreLegacy01tJs.t;
      }, function (_nodeIconLegacy01vJs) {
        getNodeIconSource = _nodeIconLegacy01vJs.t;
      }, function (_useCanvasOperationsLegacy01zJs) {
        useLogsStore = _useCanvasOperationsLegacy01zJs.a;
        useExperimentalNdvStore = _useCanvasOperationsLegacy01zJs.i;
        useCanvasOperations = _useCanvasOperationsLegacy01zJs.t;
      }, function (_NodeIconLegacy01FJs) {
        NodeIcon_default = _NodeIconLegacy01FJs.t;
      }, function (_KeyboardShortcutTooltipLegacy01HJs) {
        KeyboardShortcutTooltip_default = _KeyboardShortcutTooltipLegacy01HJs.t;
      }, function (_useTelemetryContextLegacy02zJs) {
        useTelemetryContext = _useTelemetryContextLegacy02zJs.t;
      }, function (_NodeSettingsLegacy02RJs) {
        NodeSettings_default = _NodeSettingsLegacy02RJs.t;
      }, function (_useKeybindingsLegacy03LJs) {
        useKeybindings = _useKeybindingsLegacy03LJs.t;
      }],
      execute: function () {
        __vite_style__ = document.createElement('style');
        __vite_style__.textContent = "/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._component_1dst5_123 {\n  position: relative;\n  display: flex;\n  align-items: stretch;\n}\n._split_1dst5_129 ._button_1dst5_129 {\n  height: var(--spacing--2xl);\n  padding-inline-start: var(--spacing--xs);\n  padding-block: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n._divider_1dst5_137 {\n  width: 1px;\n  background-color: var(--button--color--text, var(--button--color--text--primary));\n}\n._chevron_1dst5_142 {\n  width: 40px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n._menu_1dst5_148 .el-dropdown {\n  height: 100%;\n}\n._menuPopper_1dst5_152 {\n  max-width: none !important;\n}\n._menuItem_1dst5_156 {\n  display: flex;\n  align-items: center;\n  gap: var(--spacing--2xs);\n}\n._menuItem_1dst5_156._disabled_1dst5_162 ._menuIcon_1dst5_162 {\n  opacity: 0.2;\n}\n._buttonContent_1dst5_166 {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start !important;\n  gap: var(--spacing--5xs);\n}\n._subText_1dst5_173 {\n  font-size: var(--font-size--2xs);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._status_ncm5n_123 {\n  display: flex;\n  align-items: center;\n  gap: var(--spacing--5xs);\n  font-weight: var(--font-weight--bold);\n}\n._runData_ncm5n_130 {\n  color: var(--color--success);\n}\n._waiting_ncm5n_134 {\n  color: var(--color--secondary);\n}\n._pinnedData_ncm5n_138 {\n  color: var(--color--secondary);\n}\n._running_ncm5n_142 {\n  color: hsl(var(--color--primary--h), var(--color--primary--s), var(--color--primary--l));\n}\n._running_ncm5n_142._absoluteSpinner_ncm5n_145 {\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 3.75em;\n  color: hsla(var(--color--primary--h), var(--color--primary--s), var(--color--primary--l), 0.7);\n  position: absolute;\n  left: 0;\n  top: 0;\n  padding: var(--canvas-node--status-icons--margin);\n}\n._running_ncm5n_142._spinnerScrim_ncm5n_158 {\n  z-index: 10;\n  background-color: rgba(255, 255, 255, 0.82);\n  border-radius: var(--radius--lg);\n}\n._issues_ncm5n_164 {\n  color: var(--color--danger);\n  cursor: default;\n}\n._count_ncm5n_169 {\n  font-size: var(--font-size--sm);\n}\n._warning_ncm5n_173 {\n  color: var(--color--warning);\n}\n._disabled_ncm5n_177 {\n  color: var(--color--foreground--shade-2);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._popover_1wxso_123 {\n  min-width: 208px;\n  margin-bottom: -8px;\n  margin-left: -2px;\n}\n._content_1wxso_129 {\n  display: flex;\n  flex-direction: row;\n  width: -moz-fit-content;\n  width: fit-content;\n  gap: var(--spacing--2xs);\n}\n._color_1wxso_136 {\n  width: 20px;\n  height: 20px;\n  border-width: 1px;\n  border-style: solid;\n  border-color: var(--color--foreground--shade-2);\n  border-radius: 50%;\n  background: var(--sticky--color--background);\n}\n._color_1wxso_136:hover {\n  cursor: pointer;\n}\n._color_1wxso_136._selected_1wxso_148 {\n  box-shadow: 0 0 0 1px var(--sticky--color--background);\n}\n._color_1wxso_136._sticky-color-1_1wxso_151 {\n  --sticky--color--background: var(--sticky--color--background--variant-1);\n}\n._color_1wxso_136._sticky-color-2_1wxso_154 {\n  --sticky--color--background: var(--sticky--color--background--variant-2);\n}\n._color_1wxso_136._sticky-color-3_1wxso_157 {\n  --sticky--color--background: var(--sticky--color--background--variant-3);\n}\n._color_1wxso_136._sticky-color-4_1wxso_160 {\n  --sticky--color--background: var(--sticky--color--background--variant-4);\n}\n._color_1wxso_136._sticky-color-5_1wxso_163 {\n  --sticky--color--background: var(--sticky--color--background--variant-5);\n}\n._color_1wxso_136._sticky-color-6_1wxso_166 {\n  --sticky--color--background: var(--sticky--color--background--variant-6);\n}\n._color_1wxso_136._sticky-color-7_1wxso_169 {\n  --sticky--color--background: var(--sticky--color--background--variant-7);\n}\n._option_1wxso_173 {\n  display: inline-block;\n  padding: var(--spacing--3xs);\n  color: var(--color--text--tint-1);\n}\n._option_1wxso_173 svg {\n  width: var(--font-size--sm) !important;\n}\n._option_1wxso_173:hover {\n  color: var(--color--primary);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._canvasNodeToolbar_nandb_123 {\n  padding-bottom: var(--spacing--xs);\n  display: flex;\n  justify-content: flex-end;\n  width: 100%;\n  cursor: default;\n  pointer-events: none;\n}\n._canvasNodeToolbar_nandb_123._isExperimentalNdvActive_nandb_131 {\n  justify-content: space-between;\n  align-items: center;\n  padding-bottom: var(--spacing--3xs);\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  zoom: var(--canvas-zoom-compensation-factor, 1);\n  margin-bottom: var(--spacing--2xs);\n}\n._canvasNodeToolbarItems_nandb_140 {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background-color: var(--canvas--color--background);\n  border-radius: var(--radius);\n  pointer-events: auto;\n}\n._canvasNodeToolbarItems_nandb_140 .button {\n  --button--color--text: var(--color--text--tint-1);\n}\n._forceVisible_nandb_152 {\n  opacity: 1 !important;\n}\n._statusIcons_nandb_156 {\n  margin-inline-end: var(--spacing--3xs);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._settingsIcons_4xb9m_123 {\n  position: absolute;\n  top: var(--canvas-node--status-icons--margin);\n  right: var(--canvas-node--status-icons--margin);\n  display: flex;\n  flex-direction: row;\n}\n._tooltipHeader_4xb9m_131 {\n  display: flex;\n  gap: 2px;\n}\n._tooltipTitle_4xb9m_136 {\n  font-weight: 600;\n  font-size: inherit;\n  line-height: inherit;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._actions_1cmje_123 {\n  display: flex;\n  align-items: center;\n  color: var(--color--text);\n}\n._actions_1cmje_123 > button {\n  color: var(--color--text--tint-1);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._component_hvjba_123 {\n  align-items: flex-start !important;\n  justify-content: stretch;\n  border-width: 1px !important;\n  border-radius: var(--radius) !important;\n  overflow: hidden;\n  --canvas-node--border-color: var(--color--text--tint-2);\n  --embedded-ndv--max-height--expanded: min(\n  \tcalc(var(--canvas-node--height) * 2),\n  \tvar(--input--max-height--focus),\n  \t300px\n  );\n}\n._component_hvjba_123._expanded_hvjba_136 {\n  -webkit-user-select: text;\n          user-select: text;\n  cursor: auto;\n  height: auto;\n  max-height: var(--embedded-ndv--max-height--expanded);\n  min-height: var(--spacing--3xl);\n}\n.selected ._component_hvjba_123._expanded_hvjba_136 {\n  max-height: var(--input--max-height--focus);\n}\n._component_hvjba_123._collapsed_hvjba_146 {\n  overflow: hidden;\n  height: var(--spacing--2xl);\n}\n:root .vue-flow__node:has(._component_hvjba_123) {\n  z-index: 10;\n}\n.selected :root .vue-flow__node:has(._component_hvjba_123) {\n  z-index: 11;\n}\n._collapsedContent_hvjba_158,\n._settingsView_hvjba_159 {\n  z-index: 1000;\n  width: 100%;\n  height: auto;\n  max-height: calc(var(--embedded-ndv--max-height--expanded) - var(--border-width) * 2);\n  min-height: var(--spacing--2xl);\n}\n.selected ._collapsedContent_hvjba_158,\n.selected ._settingsView_hvjba_159 {\n  max-height: calc(var(--input--max-height--focus) - var(--border-width) * 2);\n}\n._collapsedContent_hvjba_158 {\n  height: 100%;\n  display: flex;\n  align-items: center;\n  gap: var(--spacing--4xs);\n  background-color: white;\n  padding: var(--spacing--2xs) var(--spacing--4xs) var(--spacing--2xs) var(--spacing--2xs);\n  background-color: var(--color--background--light-3);\n  cursor: pointer;\n}\n._disabled_hvjba_181 ._collapsedContent_hvjba_158 {\n  background-color: var(--color--foreground--tint-1);\n}\n._collapsedContent_hvjba_158 > * {\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  zoom: var(--canvas-zoom-compensation-factor, 1);\n  flex-grow: 0;\n  flex-shrink: 0;\n}\n._collapsedNodeName_hvjba_191 {\n  width: 0;\n  flex-grow: 1;\n  display: flex;\n  flex-direction: column;\n  gap: var(--spacing--5xs);\n}\n._collapsedNodeName_hvjba_191 > * {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n._settingsView_hvjba_159 > * {\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  zoom: var(--canvas-zoom-compensation-factor, 1);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._tooltipTrigger_dauyi_123 {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n._popper_dauyi_131 {\n  white-space: nowrap;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._disabledStrikeThrough_1byso_123 {\n  border: 1px solid var(--color--foreground--shade-1);\n  position: absolute;\n  top: calc(var(--canvas-node--height) / 2 - 1px);\n  left: -4px;\n  width: calc(100% + 12px);\n  pointer-events: none;\n}\n._success_1byso_132 {\n  border-color: var(--color--success--tint-1);\n}\n._warning_1byso_136 {\n  border-color: var(--color--warning--tint-1);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._node_199fc_123 {\n  --canvas-node--border-width: 2px;\n  --trigger-node--radius: 36px;\n  --canvas-node--status-icons--margin: var(--spacing--3xs);\n  --node--icon--color: var(--color--foreground--shade-1);\n  position: relative;\n  height: var(--canvas-node--height);\n  width: var(--canvas-node--width);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: var(--canvas-node--color--background, var(--node--color--background));\n  border: var(--canvas-node--border-width) solid var(--canvas-node--border-color, var(--color--foreground--shade-2));\n  border-radius: var(--radius--lg);\n  /**\n   * Node types\n   */\n  /**\n   * State classes\n   * The reverse order defines the priority in case multiple states are active\n   */\n}\n._node_199fc_123._trigger_199fc_145 {\n  border-radius: var(--trigger-node--radius) var(--radius--lg) var(--radius--lg) var(--trigger-node--radius);\n}\n._node_199fc_123._configuration_199fc_148 {\n  background: var(--canvas-node--color--background, var(--node-type--supplemental--color--background));\n  border: var(--canvas-node--border-width) solid var(--canvas-node--border-color, var(--color--foreground--shade-1));\n  border-radius: calc(var(--canvas-node--height) / 2);\n}\n._node_199fc_123._configuration_199fc_148 ._statusIcons_199fc_153 {\n  right: unset;\n}\n._node_199fc_123._configurable_199fc_156 ._icon_199fc_156 {\n  margin-left: calc(40px - (var(--node--icon--size)) / 2 - var(--canvas-node--border-width));\n}\n._node_199fc_123._configurable_199fc_156 ._description_199fc_159 {\n  top: unset;\n  position: relative;\n  margin-top: 0;\n  margin-left: var(--spacing--sm);\n  margin-right: var(--spacing--sm);\n  width: auto;\n  min-width: unset;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  flex-grow: 1;\n  flex-shrink: 1;\n}\n._node_199fc_123._configurable_199fc_156 ._label_199fc_172 {\n  text-align: left;\n}\n._node_199fc_123._configurable_199fc_156 ._subtitle_199fc_175 {\n  text-align: left;\n}\n._node_199fc_123._configurable_199fc_156._configuration_199fc_148 ._icon_199fc_156 {\n  margin-left: calc((var(--canvas-node--height) - var(--node--icon--size) - 4px) / 2);\n}\n._node_199fc_123._configurable_199fc_156._configuration_199fc_148:not(._running_199fc_181) ._statusIcons_199fc_153 {\n  position: static;\n  margin-right: var(--spacing--2xs);\n}\n._node_199fc_123._configurable_199fc_156._configuration_199fc_148 ._description_199fc_159 {\n  margin-right: var(--spacing--xs);\n}\n._node_199fc_123._selected_199fc_188 {\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  box-shadow: 0 0 0 calc(8px * var(--canvas-zoom-compensation-factor, 1)) var(--canvas--color--selected-transparent);\n}\n._node_199fc_123._success_199fc_192 {\n  --canvas-node--border-color: var(\n  \t--color-canvas-node-success-border-color,\n  \tvar(--color--success)\n  );\n}\n._node_199fc_123._warning_199fc_198 {\n  --canvas-node--border-color: var(--color--warning);\n}\n._node_199fc_123._error_199fc_201 {\n  --canvas-node--border-color: var(--canvas-node--border-color--error, var(--color--danger));\n}\n._node_199fc_123._pinned_199fc_204 {\n  --canvas-node--border-color: var(\n  \t--color-canvas-node-pinned-border-color,\n  \tvar(--node--border-color--pinned)\n  );\n}\n._node_199fc_123._disabled_199fc_210 {\n  --canvas-node--border-color: var(\n  \t--color-canvas-node-disabled-border-color,\n  \tvar(--color--foreground)\n  );\n}\n._node_199fc_123._running_199fc_181 {\n  background-color: var(--node--color--background--executing);\n  --canvas-node--border-color: var(\n  \t--color-canvas-node-running-border-color,\n  \tvar(--node--border-color--running)\n  );\n}\n._node_199fc_123._waiting_199fc_223 {\n  --canvas-node--border-color: var(\n  \t--color-canvas-node-waiting-border-color,\n  \tvar(--color--secondary)\n  );\n}\n._description_199fc_159 {\n  top: 100%;\n  position: absolute;\n  width: 100%;\n  min-width: calc(var(--canvas-node--width) * 2);\n  margin-top: var(--spacing--2xs);\n  display: flex;\n  flex-direction: column;\n  gap: var(--spacing--4xs);\n  pointer-events: none;\n}\n._label_199fc_172,\n._disabledLabel_199fc_243 {\n  font-size: var(--font-size--md);\n  text-align: center;\n  text-overflow: ellipsis;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 2;\n  overflow: hidden;\n  overflow-wrap: anywhere;\n  font-weight: var(--font-weight--medium);\n  line-height: var(--line-height--sm);\n}\n._subtitle_199fc_175 {\n  width: 100%;\n  text-align: center;\n  color: var(--color--text--tint-1);\n  font-size: var(--font-size--xs);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  line-height: var(--line-height--sm);\n  font-weight: var(--font-weight--regular);\n}\n._statusIcons_199fc_153 {\n  position: absolute;\n  bottom: var(--canvas-node--status-icons--margin);\n  right: var(--canvas-node--status-icons--margin);\n}\n._icon_199fc_156 {\n  flex-grow: 0;\n  flex-shrink: 0;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._sticky_166fo_123 {\n  position: relative;\n  /**\n   * State classes\n   * The reverse order defines the priority in case multiple states are active\n   */\n}\n._sticky_166fo_123._selected_166fo_130 {\n  box-shadow: 0 0 0 4px var(--canvas--color--selected);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._addNodes_i8qus_123 {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  width: 100px;\n  height: 100px;\n}\n._addNodes_i8qus_123:hover ._button_i8qus_131 svg path {\n  fill: var(--color--primary);\n}\n._button_i8qus_131 {\n  background: var(--color--foreground--tint-2);\n  border: 2px dashed var(--color--foreground--shade-2);\n  border-radius: 8px;\n  padding: 0;\n  min-width: 100px;\n  min-height: 100px;\n  cursor: pointer;\n}\n._label_i8qus_145 {\n  width: max-content;\n  font-weight: var(--font-weight--medium);\n  font-size: var(--font-size--md);\n  line-height: var(--line-height--xl);\n  color: var(--color--text--shade-1);\n  margin-top: var(--spacing--2xs);\n  display: flex;\n  flex-direction: column;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._choicePrompt_grxwq_123 {\n  display: flex;\n  flex-direction: row;\n  align-items: flex-start;\n  justify-content: center;\n  gap: var(--spacing--lg);\n}\n._option_grxwq_131 {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  width: 100px;\n}\n._button_grxwq_138 {\n  background: var(--color--foreground--tint-2);\n  border: 2px dashed var(--color--foreground--shade-2);\n  border-radius: var(--radius--lg);\n  padding: 0;\n  min-width: 100px;\n  min-height: 100px;\n  cursor: pointer;\n}\n._selectedButtonHighlight_grxwq_148 {\n  border-radius: var(--radius--lg);\n}\n._selectedButtonHighlight_grxwq_148._highlighted_grxwq_151 {\n  box-shadow: 0 0 0 7px var(--canvas--color--selected);\n}\n._label_grxwq_155 {\n  width: max-content;\n  font-weight: var(--font-weight--medium);\n  font-size: var(--font-size--md);\n  line-height: var(--line-height--xl);\n  color: var(--color--text--shade-1);\n  margin-top: var(--spacing--2xs);\n  text-align: center;\n  display: flex;\n  flex-direction: column;\n}\n._orDivider_grxwq_167 {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 100px;\n  margin-bottom: calc(var(--line-height--xl) * 1em + var(--spacing--2xs));\n}\n._orText_grxwq_175 {\n  font-size: var(--font-size--md);\n  color: var(--color--text);\n  font-weight: var(--font-weight--regular);\n  padding: 0 var(--spacing--xs);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._rectangle_1o69r_123 {\n  width: var(--handle--indicator--width);\n  height: var(--handle--indicator--height);\n  background: var(--color--foreground--shade-2);\n}\n._rectangle_1o69r_123:hover {\n  background: var(--color--primary);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._handle_7mf8f_123 {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n}\n._label_7mf8f_130 {\n  position: absolute;\n  top: 50%;\n  left: calc(var(--spacing--xs) * -1);\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  transform: translate(0, -50%) scale(var(--canvas-zoom-compensation-factor, 1)) translate(-100%, 0);\n  transform-origin: center left;\n  font-size: var(--font-size--2xs);\n  color: var(--color--foreground--shade-2);\n  background: var(--canvas--label--color--background);\n  z-index: 1;\n  text-align: center;\n  white-space: nowrap;\n}\n._required_7mf8f_145 ._label_7mf8f_130::after {\n  content: \"*\";\n  color: var(--color--danger);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._dot_mkl47_123 {\n  width: var(--handle--indicator--width);\n  height: var(--handle--indicator--height);\n  border-radius: 50%;\n  background: var(--color--foreground--shade-2);\n}\n._dot_mkl47_123:hover {\n  background: var(--color--primary);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._wrapper_1wtvd_123 {\n  position: relative;\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  transform: scale(var(--canvas-zoom-compensation-factor, 1));\n}\n._wrapper_1wtvd_123._right_1wtvd_128 {\n  transform-origin: center left;\n}\n._wrapper_1wtvd_123._bottom_1wtvd_131 {\n  transform-origin: top center;\n}\n._wrapper_1wtvd_123._secondary_1wtvd_134 ._line_1wtvd_134 {\n  stroke: var(--node-type--supplemental--color);\n}\n._wrapper_1wtvd_123._secondary_1wtvd_134 ._plus_1wtvd_137 path {\n  fill: var(--node-type--supplemental--color);\n}\n._wrapper_1wtvd_123._secondary_1wtvd_134 ._plus_1wtvd_137 rect {\n  stroke: var(--node-type--supplemental--color);\n}\n._wrapper_1wtvd_123._success_1wtvd_143 ._line_1wtvd_134 {\n  stroke: var(--color--success);\n}\n._wrapper_1wtvd_123 ._plus_1wtvd_137:hover {\n  cursor: pointer;\n}\n._wrapper_1wtvd_123 ._plus_1wtvd_137:hover path {\n  fill: var(--color--primary);\n}\n._wrapper_1wtvd_123 ._plus_1wtvd_137:hover rect {\n  stroke: var(--color--primary);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._handle_ca2iu_123 {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  justify-content: center;\n}\n._handle_ca2iu_123._connected_ca2iu_129 ._label_ca2iu_129 {\n  max-width: 96px;\n}\n._label_ca2iu_129 {\n  position: absolute;\n  background: var(--canvas--label--color--background);\n  z-index: 1;\n  max-width: calc(100% - var(--spacing--md) - 24px);\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n._required_ca2iu_143 ._label_ca2iu_129::after {\n  content: \"*\";\n  color: var(--color--danger);\n}\n._outputLabel_ca2iu_148 {\n  top: 50%;\n  left: var(--spacing--md);\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  transform: translate(0, -50%) scale(var(--canvas-zoom-compensation-factor, 1));\n  transform-origin: center left;\n  font-size: var(--font-size--2xs);\n  color: var(--color--foreground--shade-2);\n}\n._runDataLabel_ca2iu_158 {\n  position: absolute;\n  top: 50%;\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  left: calc(50% * var(--canvas-zoom-compensation-factor, 1));\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  transform: translate(-50%, -50%) scale(var(--canvas-zoom-compensation-factor, 1)) translate(0, -100%);\n  font-size: var(--font-size--xs);\n  color: var(--color--text);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n.canvas-node-handle-main-output-enter-active,\n.canvas-node-handle-main-output-leave-active {\n  transform-origin: 0 center;\n  transition-property: transform, opacity;\n  transition-duration: 0.2s;\n  transition-timing-function: ease;\n}\n.canvas-node-handle-main-output-enter-from,\n.canvas-node-handle-main-output-leave-to {\n  transform: scale(0);\n  opacity: 0;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._diamond_pdek7_123 {\n  width: var(--handle--indicator--width);\n  height: var(--handle--indicator--height);\n  background: var(--node-type--supplemental--color);\n  transform: rotate(45deg) scale(0.8);\n}\n._diamond_pdek7_123:hover {\n  background: var(--color--primary);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._handle_1q30k_123 {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n}\n._label_1q30k_130 {\n  position: absolute;\n  top: 20px;\n  left: 50%;\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  transform: translate(-50%, 0) scale(var(--canvas-zoom-compensation-factor, 1));\n  font-size: var(--font-size--2xs);\n  color: var(--node-type--supplemental--color);\n  background: var(--canvas--label--color--background);\n  z-index: 1;\n  text-align: center;\n  white-space: nowrap;\n}\n._required_1q30k_144 ._label_1q30k_130::after {\n  content: \"*\";\n  color: var(--color--danger);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n.canvas-node-handle-non-main-input-enter-active,\n.canvas-node-handle-non-main-input-leave-active {\n  transform-origin: center 0;\n  transition-property: transform, opacity;\n  transition-duration: 0.2s;\n  transition-timing-function: ease;\n}\n.canvas-node-handle-non-main-input-enter-from,\n.canvas-node-handle-non-main-input-leave-to {\n  transform: scale(0);\n  opacity: 0;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._handle_1argj_123 {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  justify-content: center;\n}\n._label_1argj_130 {\n  position: absolute;\n  top: -20px;\n  left: 50%;\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  transform: translate(-50%, 0) scale(var(--canvas-zoom-compensation-factor, 1));\n  font-size: var(--font-size--2xs);\n  color: var(--node-type--supplemental--color);\n  background: var(--canvas--label--color--background);\n  z-index: 0;\n  white-space: nowrap;\n}\n._required_1argj_143 ._label_1argj_130::after {\n  content: \"*\";\n  color: var(--color--danger);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n.vue-flow__handle._handle_1mj65_123 {\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  --handle--indicator--width: calc(16px * var(--canvas-zoom-compensation-factor, 1));\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  --handle--indicator--height: calc(16px * var(--canvas-zoom-compensation-factor, 1));\n  width: var(--handle--indicator--width);\n  height: var(--handle--indicator--height);\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  border: 0;\n  z-index: 1;\n  background: transparent;\n  border-radius: 0;\n}\n.vue-flow__handle._handle_1mj65_123._inputs_1mj65_138._main_1mj65_138 {\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  --handle--indicator--width: calc(8px * var(--canvas-zoom-compensation-factor, 1));\n}\n._renderType_1mj65_143._top_1mj65_143 {\n  margin-bottom: calc(-1 * var(--handle--indicator--height));\n  transform: translate(0%, -50%);\n}\n._renderType_1mj65_143._right_1mj65_147 {\n  margin-left: calc(-1 * var(--handle--indicator--width));\n  transform: translate(50%, 0%);\n}\n._renderType_1mj65_143._left_1mj65_151 {\n  margin-right: calc(-1 * var(--handle--indicator--width));\n  transform: translate(-50%, 0%);\n}\n._renderType_1mj65_143._bottom_1mj65_155 {\n  margin-top: calc(-1 * var(--handle--indicator--height));\n  transform: translate(0%, 50%);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._container_19xnh_123 {\n  z-index: -1;\n  position: absolute;\n  display: flex;\n  align-items: center;\n  height: 100%;\n  right: 100%;\n  top: 0;\n  pointer-events: none;\n}\n._container_19xnh_123 > div {\n  position: relative;\n  display: flex;\n  align-items: center;\n}\n._container_19xnh_123 button {\n  margin-right: var(--spacing--sm);\n  opacity: 0;\n  translate: -12px 0;\n  transition: translate 0.1s ease-in, opacity 0.1s ease-in;\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  transform: scale(var(--canvas-zoom-compensation-factor, 1));\n  transform-origin: center right;\n}\n._container_19xnh_123._interactive_19xnh_147._hovered_19xnh_147 button {\n  opacity: 1;\n  translate: 0 0;\n  pointer-events: all;\n}\n._container_19xnh_123._isExperimentalNdvActive_19xnh_152 {\n  height: var(--spacing--2xl);\n}\n._bolt_19xnh_156 {\n  position: absolute;\n  right: 0;\n  color: var(--color--primary);\n  padding: var(--spacing--sm);\n  opacity: 1;\n  translate: 0 0;\n  transition: translate 0.1s ease-in, opacity 0.1s ease-in;\n}\n._container_19xnh_123._interactive_19xnh_147._hovered_19xnh_147 ._bolt_19xnh_156 {\n  translate: -12px 0;\n  opacity: 0;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._canvasNode_1k8iq_123 ._canvasNodeToolbarItems_1k8iq_123 {\n  transition: opacity 0.1s ease-in;\n  opacity: 0;\n}\n._canvasNode_1k8iq_123:hover:not(:has(> ._trigger_1k8iq_127:hover)) ._canvasNodeToolbarItems_1k8iq_123, ._canvasNode_1k8iq_123:focus-within ._canvasNodeToolbarItems_1k8iq_123, ._canvasNode_1k8iq_123._showToolbar_1k8iq_127 ._canvasNodeToolbarItems_1k8iq_123 {\n  opacity: 1;\n}\n._canvasNodeToolbar_1k8iq_123 {\n  position: absolute;\n  bottom: 100%;\n  left: 0;\n  z-index: 1;\n}\npath[data-v-c74a9681] {\n\tstroke: var(--canvas--read-only-line--color);\n}\n/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._contextMenu_12fz3_123 {\n  position: fixed;\n}\n._activator_12fz3_127 {\n  pointer-events: none;\n  opacity: 0;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._edge_cbk94_123 {\n  transition-property: stroke, opacity;\n  transition-duration: 300ms;\n  transition-timing-function: ease;\n  opacity: 0;\n}\n._edge_cbk94_123._visible_cbk94_129 {\n  opacity: 1;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._iconButton_fx9xi_123 {\n  padding-left: 0;\n  padding-right: 0;\n}\n._iconButton_fx9xi_123 svg {\n  width: 16px;\n  height: 16px;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._canvasEdgeToolbar_1hcsv_123 {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  gap: var(--spacing--2xs);\n  pointer-events: all;\n  padding: var(--spacing--2xs);\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  transform: scale(var(--canvas-zoom-compensation-factor, 1));\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n@media (prefers-color-scheme: dark) {\nbody:not([data-theme]) .canvas-edge-toolbar-button {\n    --button--color--background: var(--color--background);\n    --button--color--background--hover: var(--color--background--light-2);\n}\n}\n[data-theme=dark] .canvas-edge-toolbar-button {\n  --button--color--background: var(--color--background);\n  --button--color--background--hover: var(--color--background--light-2);\n}\n.canvas-edge-toolbar-button {\n  border-width: 2px;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._edge_ahl09_123 {\n  transition: stroke 0.3s ease, fill 0.3s ease;\n  stroke: var(--canvas-edge--color, var(--5e8a20b0)) !important;\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  stroke-width: calc(2 * var(--canvas-zoom-compensation-factor, 1)) !important;\n  stroke-linecap: square;\n}\n._edgeLabelWrapper_ahl09_131 {\n  transform: translateY(calc(var(--spacing--xs) * -1));\n  position: absolute;\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  --label-translate-y: 0;\n}\n._edgeLabelWrapper_ahl09_131._straight_ahl09_137 {\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  --label-translate-y: -100%;\n}\n._edgeLabel_ahl09_131 {\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  transform: scale(var(--canvas-zoom-compensation-factor, 1)) translate(0, var(--label-translate-y));\n  color: var(--color--text);\n  font-size: var(--font-size--xs);\n  background-color: hsla(var(--canvas--color--background--h), var(--canvas--color--background--s), var(--canvas--color--background--l), 0.85);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._canvas_rygeb_123 {\n  width: 100%;\n  height: 100%;\n  opacity: 0;\n  transition: opacity 300ms ease;\n}\n._canvas_rygeb_123._ready_rygeb_129 {\n  opacity: 1;\n}\n._canvas_rygeb_123._isExperimentalNdvActive_rygeb_132 {\n  /* stylelint-disable-next-line @n8n/css-var-naming */\n  --canvas-zoom-compensation-factor: 0.5;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n  --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n.minimap-enter-active[data-v-3dfb422b],\n.minimap-leave-active[data-v-3dfb422b] {\n  transition: opacity 0.3s ease;\n}\n.minimap-enter-from[data-v-3dfb422b],\n.minimap-leave-to[data-v-3dfb422b] {\n  opacity: 0;\n}/*$vite$:1*/";
        document.head.appendChild(__vite_style__);
        //#region src/features/workflows/canvas/components/elements/buttons/CanvasRunWorkflowButton.vue?vue&type=script&setup=true&lang.ts
        CanvasRunWorkflowButton_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasRunWorkflowButton",
          props: {
            selectedTriggerNodeName: {},
            triggerNodes: {},
            waitingForWebhook: {
              type: Boolean
            },
            executing: {
              type: Boolean
            },
            disabled: {
              type: Boolean
            },
            hideTooltip: {
              type: Boolean
            },
            label: {},
            size: {},
            includeChatTrigger: {
              type: Boolean
            },
            getNodeType: {
              type: Function
            }
          },
          emits: ["mouseenter", "mouseleave", "execute", "selectTriggerNode"],
          setup(__props, {
            emit: __emit
          }) {
            const emit = __emit;
            const props = __props;
            const i18n = useI18n();
            const selectableTriggerNodes = computed(() => props.triggerNodes.filter(node$1 => !node$1.disabled && (props.includeChatTrigger ? true : !isChatNode(node$1))));
            const label$7 = computed(() => {
              if (!props.executing) return props.label ?? i18n.baseText("nodeView.runButtonText.executeWorkflow");
              if (props.waitingForWebhook) return i18n.baseText("nodeView.runButtonText.waitingForTriggerEvent");
              return i18n.baseText("nodeView.runButtonText.executingWorkflow");
            });
            const actions$1 = computed(() => props.triggerNodes.filter(node$1 => props.includeChatTrigger ? true : !isChatNode(node$1)).toSorted((a, b) => {
              const [aX, aY] = a.position;
              const [bX, bY] = b.position;
              return aY === bY ? aX - bX : aY - bY;
            }).map(node$1 => ({
              label: truncateBeforeLast(node$1.name, 50),
              disabled: !!node$1.disabled || props.executing,
              id: node$1.name,
              checked: props.selectedTriggerNodeName === node$1.name
            })));
            const isSplitButton = computed(() => selectableTriggerNodes.value.length > 1 && props.selectedTriggerNodeName !== void 0);
            function getNodeTypeByName(name) {
              const node$1 = props.triggerNodes.find(trigger$2 => trigger$2.name === name);
              if (!node$1) return null;
              return props.getNodeType(node$1.type, node$1.typeVersion);
            }
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                class: normalizeClass([_ctx.$style.component, isSplitButton.value ? _ctx.$style.split : ""])
              }, [createVNode(KeyboardShortcutTooltip_default, {
                label: label$7.value,
                shortcut: {
                  metaKey: true,
                  keys: ["↵"]
                },
                disabled: _ctx.executing || _ctx.hideTooltip
              }, {
                default: withCtx(() => [createVNode(unref(N8nButton_default), {
                  class: normalizeClass(_ctx.$style.button),
                  loading: _ctx.executing,
                  disabled: _ctx.disabled,
                  size: _ctx.size ?? "large",
                  icon: "flask-conical",
                  type: "primary",
                  "data-test-id": "execute-workflow-button",
                  onMouseenter: _cache[0] || (_cache[0] = $event => _ctx.$emit("mouseenter", $event)),
                  onMouseleave: _cache[1] || (_cache[1] = $event => _ctx.$emit("mouseleave", $event)),
                  onClick: _cache[2] || (_cache[2] = $event => emit("execute"))
                }, {
                  default: withCtx(() => [createBaseVNode("span", {
                    class: normalizeClass(_ctx.$style.buttonContent)
                  }, [createTextVNode(toDisplayString(label$7.value) + " ", 1), isSplitButton.value ? (openBlock(), createBlock(unref(N8nText_default), {
                    key: 0,
                    class: normalizeClass(_ctx.$style.subText),
                    bold: false
                  }, {
                    default: withCtx(() => [createVNode(unref(I18nT), {
                      keypath: "nodeView.runButtonText.from",
                      scope: "global"
                    }, {
                      nodeName: withCtx(() => [createVNode(unref(N8nText_default), {
                        bold: "",
                        size: "mini"
                      }, {
                        default: withCtx(() => [createTextVNode(toDisplayString(unref(truncateBeforeLast)(props.selectedTriggerNodeName ?? "", 25)), 1)]),
                        _: 1
                      })]),
                      _: 1
                    })]),
                    _: 1
                  }, 8, ["class"])) : createCommentVNode("", true)], 2)]),
                  _: 1
                }, 8, ["class", "loading", "disabled", "size"])]),
                _: 1
              }, 8, ["label", "disabled"]), isSplitButton.value ? (openBlock(), createElementBlock(Fragment, {
                key: 0
              }, [createBaseVNode("div", {
                role: "presentation",
                class: normalizeClass(_ctx.$style.divider)
              }, null, 2), createVNode(unref(N8nActionDropdown_default), {
                class: normalizeClass(_ctx.$style.menu),
                items: actions$1.value,
                disabled: _ctx.disabled,
                placement: "top",
                "extra-popper-class": _ctx.$style.menuPopper,
                onSelect: _cache[3] || (_cache[3] = $event => emit("selectTriggerNode", $event))
              }, {
                activator: withCtx(() => [createVNode(unref(N8nButton_default), {
                  type: "primary",
                  "icon-size": "large",
                  disabled: _ctx.disabled,
                  class: normalizeClass(_ctx.$style.chevron),
                  "aria-label": "Select trigger node",
                  icon: "chevron-down"
                }, null, 8, ["disabled", "class"])]),
                menuItem: withCtx(item => [createBaseVNode("div", {
                  class: normalizeClass([_ctx.$style.menuItem, item.disabled ? _ctx.$style.disabled : ""])
                }, [createVNode(NodeIcon_default, {
                  class: normalizeClass(_ctx.$style.menuIcon),
                  size: 16,
                  "node-type": getNodeTypeByName(item.id)
                }, null, 8, ["class", "node-type"]), createBaseVNode("span", null, [createVNode(unref(I18nT), {
                  keypath: "nodeView.runButtonText.from",
                  scope: "global"
                }, {
                  nodeName: withCtx(() => [createVNode(unref(N8nText_default), {
                    bold: "",
                    size: "small"
                  }, {
                    default: withCtx(() => [createTextVNode(toDisplayString(item.label), 1)]),
                    _: 2
                  }, 1024)]),
                  _: 2
                }, 1024)])], 2)]),
                _: 1
              }, 8, ["class", "items", "disabled", "extra-popper-class"])], 64)) : createCommentVNode("", true)], 2);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/buttons/CanvasRunWorkflowButton.vue?vue&type=style&index=0&lang.module.scss
        component$1 = "_component_1dst5_123";
        split = "_split_1dst5_129";
        button$2 = "_button_1dst5_129";
        divider = "_divider_1dst5_137";
        chevron = "_chevron_1dst5_142";
        menu = "_menu_1dst5_148";
        menuPopper = "_menuPopper_1dst5_152";
        menuItem = "_menuItem_1dst5_156";
        disabled$3 = "_disabled_1dst5_162";
        menuIcon = "_menuIcon_1dst5_162";
        buttonContent = "_buttonContent_1dst5_166";
        subText = "_subText_1dst5_173";
        CanvasRunWorkflowButton_vue_vue_type_style_index_0_lang_module_default = {
          component: component$1,
          split,
          button: button$2,
          divider,
          chevron,
          menu,
          menuPopper,
          menuItem,
          disabled: disabled$3,
          menuIcon,
          buttonContent,
          subText
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/buttons/CanvasRunWorkflowButton.vue
        cssModules$29 = {
          "$style": CanvasRunWorkflowButton_vue_vue_type_style_index_0_lang_module_default
        };
        _export("d", CanvasRunWorkflowButton_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasRunWorkflowButton_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$29]])); //#endregion
        //#region src/app/composables/useWorkflowExtraction.ts
        import_isEqual$1 = /* @__PURE__ */__toESM(require_isEqual());
        CANVAS_HISTORY_OPTIONS = {
          trackBulk: false,
          trackHistory: true
        };
        state = reactive({
          customActions: {},
          delegatedClickHandler: null
        });
        _hoisted_1$17 = {
          key: 0
        };
        _hoisted_2$7 = ["textContent"];
        _hoisted_3$9 = {
          key: 6
        };
        _hoisted_4$2 = {
          key: 8
        };
        CanvasNodeStatusIcons_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasNodeStatusIcons",
          props: {
            size: {
              default: "large"
            },
            spinnerScrim: {
              type: Boolean,
              default: false
            },
            spinnerLayout: {
              default: "absolute"
            }
          },
          setup(__props) {
            const nodeHelpers = useNodeHelpers();
            const i18n = useI18n();
            const $style = useCssModule();
            const {
              hasPinnedData,
              executionErrors,
              validationErrors,
              hasExecutionErrors,
              hasValidationErrors,
              executionStatus,
              executionWaiting,
              executionWaitingForNext,
              executionRunning,
              hasRunData,
              runDataIterations,
              isDisabled,
              render: render$5,
              isNotInstalledCommunityNode
            } = useCanvasNode();
            const route = useRoute();
            const {
              isExecuting
            } = useCanvas();
            const hideNodeIssues = computed(() => false);
            const isDemoRoute = computed(() => route.name === VIEWS.DEMO);
            const dirtiness = computed(() => render$5.value.type === CanvasNodeRenderType.Default ? render$5.value.options.dirtiness : void 0);
            const isNodeExecuting = computed(() => {
              if (!isExecuting.value) return false;
              return executionRunning.value || executionWaitingForNext.value || executionStatus.value === "running";
            });
            const commonClasses = computed(() => [$style.status, __props.spinnerScrim ? $style.spinnerScrim : "", __props.spinnerLayout === "absolute" ? $style.absoluteSpinner : ""]);
            return (_ctx, _cache) => {
              return unref(executionWaiting) || unref(executionStatus) === "waiting" ? (openBlock(), createElementBlock("div", _hoisted_1$17, [createBaseVNode("div", {
                class: normalizeClass([...commonClasses.value, unref($style).waiting])
              }, [createVNode(unref(N8nTooltip_default), {
                placement: "bottom"
              }, {
                content: withCtx(() => [createBaseVNode("div", {
                  textContent: toDisplayString(unref(executionWaiting))
                }, null, 8, _hoisted_2$7)]),
                default: withCtx(() => [createVNode(unref(N8nIcon_default), {
                  icon: "clock",
                  size: _ctx.size
                }, null, 8, ["size"])]),
                _: 1
              })], 2)])) : unref(isNotInstalledCommunityNode) && !isDemoRoute.value ? (openBlock(), createElementBlock("div", {
                key: 1,
                class: normalizeClass([...commonClasses.value, unref($style).issues]),
                "data-test-id": "node-not-installed"
              }, [createVNode(unref(N8nTooltip_default), {
                "show-after": 500,
                placement: "bottom"
              }, {
                content: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("node.install-to-use")), 1)]),
                default: withCtx(() => [createVNode(unref(N8nIcon_default), {
                  icon: "hard-drive-download",
                  size: _ctx.size
                }, null, 8, ["size"])]),
                _: 1
              })], 2)) : isNodeExecuting.value ? (openBlock(), createElementBlock("div", {
                key: 2,
                "data-test-id": "canvas-node-status-running",
                class: normalizeClass([...commonClasses.value, unref($style).running])
              }, [createVNode(unref(N8nIcon_default), {
                icon: "refresh-cw",
                spin: ""
              })], 2)) : unref(isDisabled) ? (openBlock(), createElementBlock("div", {
                key: 3,
                class: normalizeClass([...commonClasses.value, unref($style).disabled])
              }, [createVNode(unref(N8nIcon_default), {
                icon: "power",
                size: _ctx.size
              }, null, 8, ["size"])], 2)) : unref(hasExecutionErrors) && !hideNodeIssues.value ? (openBlock(), createElementBlock("div", {
                key: 4,
                class: normalizeClass([...commonClasses.value, unref($style).issues]),
                "data-test-id": "node-issues"
              }, [createVNode(unref(N8nTooltip_default), {
                "show-after": 500,
                placement: "bottom"
              }, {
                content: withCtx(() => [createVNode(TitledList_default, {
                  title: `${unref(i18n).baseText("node.issues")}:`,
                  items: unref(executionErrors)
                }, null, 8, ["title", "items"])]),
                default: withCtx(() => [createVNode(unref(N8nIcon_default), {
                  icon: "node-execution-error",
                  size: _ctx.size
                }, null, 8, ["size"])]),
                _: 1
              })], 2)) : unref(hasValidationErrors) && !hideNodeIssues.value ? (openBlock(), createElementBlock("div", {
                key: 5,
                class: normalizeClass([...commonClasses.value, unref($style).issues]),
                "data-test-id": "node-issues"
              }, [createVNode(unref(N8nTooltip_default), {
                "show-after": 500,
                placement: "bottom"
              }, {
                content: withCtx(() => [createVNode(TitledList_default, {
                  title: `${unref(i18n).baseText("node.issues")}:`,
                  items: unref(validationErrors)
                }, null, 8, ["title", "items"])]),
                default: withCtx(() => [createVNode(unref(N8nIcon_default), {
                  icon: "node-validation-error",
                  size: _ctx.size
                }, null, 8, ["size"])]),
                _: 1
              })], 2)) : unref(executionStatus) === "unknown" ? (openBlock(), createElementBlock("div", _hoisted_3$9)) : unref(hasPinnedData) && !unref(nodeHelpers).isProductionExecutionPreview.value ? (openBlock(), createElementBlock("div", {
                key: 7,
                "data-test-id": "canvas-node-status-pinned",
                class: normalizeClass([...commonClasses.value, unref($style).pinnedData])
              }, [createVNode(unref(N8nIcon_default), {
                icon: "node-pin",
                size: _ctx.size
              }, null, 8, ["size"])], 2)) : dirtiness.value !== void 0 ? (openBlock(), createElementBlock("div", _hoisted_4$2, [createVNode(unref(N8nTooltip_default), {
                "show-after": 500,
                placement: "bottom"
              }, {
                content: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText(dirtiness.value === unref(CanvasNodeDirtiness).PARAMETERS_UPDATED ? "node.dirty" : "node.subjectToChange")), 1)]),
                default: withCtx(() => [createBaseVNode("div", {
                  "data-test-id": "canvas-node-status-warning",
                  class: normalizeClass([...commonClasses.value, unref($style).warning])
                }, [createVNode(unref(N8nIcon_default), {
                  icon: "node-dirty",
                  size: _ctx.size
                }, null, 8, ["size"]), unref(runDataIterations) > 1 ? (openBlock(), createElementBlock("span", {
                  key: 0,
                  class: normalizeClass(unref($style).count)
                }, toDisplayString(unref(runDataIterations)), 3)) : createCommentVNode("", true)], 2)]),
                _: 1
              })])) : unref(hasRunData) && unref(executionStatus) === "success" ? (openBlock(), createElementBlock("div", {
                key: 9,
                "data-test-id": "canvas-node-status-success",
                class: normalizeClass([...commonClasses.value, unref($style).runData])
              }, [createVNode(unref(N8nIcon_default), {
                icon: "node-success",
                size: _ctx.size
              }, null, 8, ["size"]), unref(runDataIterations) > 1 ? (openBlock(), createElementBlock("span", {
                key: 0,
                class: normalizeClass(unref($style).count)
              }, toDisplayString(unref(runDataIterations)), 3)) : createCommentVNode("", true)], 2)) : createCommentVNode("", true);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/parts/CanvasNodeStatusIcons.vue?vue&type=style&index=0&lang.module.scss
        status = "_status_ncm5n_123";
        runData = "_runData_ncm5n_130";
        waiting$1 = "_waiting_ncm5n_134";
        pinnedData = "_pinnedData_ncm5n_138";
        running$1 = "_running_ncm5n_142";
        absoluteSpinner = "_absoluteSpinner_ncm5n_145";
        spinnerScrim = "_spinnerScrim_ncm5n_158";
        issues = "_issues_ncm5n_164";
        count = "_count_ncm5n_169";
        warning$2 = "_warning_ncm5n_173";
        disabled$2 = "_disabled_ncm5n_177";
        CanvasNodeStatusIcons_vue_vue_type_style_index_0_lang_module_default = {
          status,
          runData,
          waiting: waiting$1,
          pinnedData,
          running: running$1,
          absoluteSpinner,
          spinnerScrim,
          issues,
          count,
          warning: warning$2,
          disabled: disabled$2
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/parts/CanvasNodeStatusIcons.vue
        cssModules$28 = {
          "$style": CanvasNodeStatusIcons_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasNodeStatusIcons_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasNodeStatusIcons_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$28]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/toolbar/CanvasNodeStickyColorSelector.vue?vue&type=script&setup=true&lang.ts
        _hoisted_1$16 = ["title"];
        _hoisted_2$6 = ["onClick"];
        CanvasNodeStickyColorSelector_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasNodeStickyColorSelector",
          props: {
            "visible": {
              type: Boolean
            },
            "visibleModifiers": {}
          },
          emits: /* @__PURE__ */mergeModels(["update"], ["update:visible"]),
          setup(__props, {
            emit: __emit
          }) {
            const emit = __emit;
            const i18n = useI18n();
            const {
              render: render$5,
              eventBus
            } = useCanvasNode();
            const renderOptions = computed(() => render$5.value.options);
            const autoHideTimeout = ref(null);
            const colors = computed(() => Array.from({
              length: 7
            }).map((_, index) => index + 1));
            const isPopoverVisible = useModel(__props, "visible");
            function hidePopover() {
              isPopoverVisible.value = false;
            }
            function showPopover() {
              isPopoverVisible.value = true;
            }
            function changeColor(index) {
              emit("update", index);
              hidePopover();
            }
            function onMouseEnter() {
              if (autoHideTimeout.value) {
                clearTimeout(autoHideTimeout.value);
                autoHideTimeout.value = null;
              }
            }
            function onMouseLeave() {
              autoHideTimeout.value = setTimeout(() => {
                hidePopover();
              }, 1e3);
            }
            onMounted(() => {
              eventBus.value?.on("update:sticky:color", showPopover);
            });
            onBeforeUnmount(() => {
              eventBus.value?.off("update:sticky:color", showPopover);
            });
            return (_ctx, _cache) => {
              return openBlock(), createBlock(unref(N8nPopover_default), {
                visible: isPopoverVisible.value,
                "onUpdate:visible": _cache[1] || (_cache[1] = $event => isPopoverVisible.value = $event),
                effect: "dark",
                trigger: "click",
                placement: "top",
                "popper-class": _ctx.$style.popover,
                "popper-style": {
                  width: "208px"
                },
                teleported: true,
                onBeforeEnter: onMouseEnter,
                onAfterLeave: onMouseLeave
              }, {
                reference: withCtx(() => [createBaseVNode("div", {
                  class: normalizeClass(_ctx.$style.option),
                  "data-test-id": "change-sticky-color",
                  title: unref(i18n).baseText("node.changeColor"),
                  onClick: _cache[0] || (_cache[0] = withModifiers(() => {}, ["stop"]))
                }, [createVNode(unref(N8nIcon_default), {
                  size: "small",
                  icon: "palette"
                })], 10, _hoisted_1$16)]),
                default: withCtx(() => [createBaseVNode("div", {
                  class: normalizeClass(_ctx.$style.content)
                }, [(openBlock(true), createElementBlock(Fragment, null, renderList(colors.value, color$2 => {
                  return openBlock(), createElementBlock("div", {
                    key: color$2,
                    "data-test-id": "color",
                    class: normalizeClass([_ctx.$style.color, _ctx.$style[`sticky-color-${color$2}`], renderOptions.value.color === color$2 ? _ctx.$style.selected : ""]),
                    onClick: $event => changeColor(color$2)
                  }, null, 10, _hoisted_2$6);
                }), 128))], 2)]),
                _: 1
              }, 8, ["visible", "popper-class"]);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/toolbar/CanvasNodeStickyColorSelector.vue?vue&type=style&index=0&lang.module.scss
        popover = "_popover_1wxso_123";
        content = "_content_1wxso_129";
        color$1 = "_color_1wxso_136";
        selected$2 = "_selected_1wxso_148";
        option$1 = "_option_1wxso_173";
        CanvasNodeStickyColorSelector_vue_vue_type_style_index_0_lang_module_default = {
          popover,
          content,
          color: color$1,
          selected: selected$2,
          "sticky-color-1": "_sticky-color-1_1wxso_151",
          "sticky-color-2": "_sticky-color-2_1wxso_154",
          "sticky-color-3": "_sticky-color-3_1wxso_157",
          "sticky-color-4": "_sticky-color-4_1wxso_160",
          "sticky-color-5": "_sticky-color-5_1wxso_163",
          "sticky-color-6": "_sticky-color-6_1wxso_166",
          "sticky-color-7": "_sticky-color-7_1wxso_169",
          option: option$1
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/toolbar/CanvasNodeStickyColorSelector.vue
        cssModules$27 = {
          "$style": CanvasNodeStickyColorSelector_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasNodeStickyColorSelector_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasNodeStickyColorSelector_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$27]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/CanvasNodeToolbar.vue?vue&type=script&setup=true&lang.ts
        CanvasNodeToolbar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasNodeToolbar",
          props: {
            readOnly: {
              type: Boolean
            },
            showStatusIcons: {
              type: Boolean
            },
            itemsClass: {}
          },
          emits: ["delete", "toggle", "run", "update", "open:contextmenu", "focus"],
          setup(__props, {
            emit: __emit
          }) {
            const emit = __emit;
            const props = __props;
            const $style = useCssModule();
            const i18n = useI18n();
            const {
              isExecuting,
              isExperimentalNdvActive: isExperimentalNdvActive$3
            } = useCanvas();
            const {
              isDisabled,
              render: render$5,
              name
            } = useCanvasNode();
            const workflowsStore = useWorkflowsStore();
            const nodeTypesStore = useNodeTypesStore();
            const experimentalNdvStore = useExperimentalNdvStore();
            const node$1 = computed(() => name.value ? workflowsStore.getNodeByName(name.value) : null);
            const isToolNode = computed(() => !!node$1.value && nodeTypesStore.isToolNode(node$1.value.type));
            const nodeDisabledTitle = computed(() => {
              return isDisabled.value ? i18n.baseText("node.enable") : i18n.baseText("node.disable");
            });
            const isStickyColorSelectorOpen = ref(false);
            const isHovered = ref(false);
            const classes = computed(() => ({
              [$style.canvasNodeToolbar]: true,
              [$style.readOnly]: props.readOnly,
              [$style.forceVisible]: isHovered.value || isStickyColorSelectorOpen.value,
              [$style.isExperimentalNdvActive]: isExperimentalNdvActive$3.value
            }));
            const isExecuteNodeVisible = computed(() => {
              return !props.readOnly && render$5.value.type === CanvasNodeRenderType.Default && "configuration" in render$5.value.options && (!render$5.value.options.configuration || isToolNode.value);
            });
            const isDisableNodeVisible = computed(() => {
              return !props.readOnly && render$5.value.type === CanvasNodeRenderType.Default;
            });
            const isDeleteNodeVisible = computed(() => !props.readOnly);
            const isFocusNodeVisible = computed(() => experimentalNdvStore.isZoomedViewEnabled);
            const isStickyNoteChangeColorVisible = computed(() => !props.readOnly && render$5.value.type === CanvasNodeRenderType.StickyNote);
            function executeNode() {
              emit("run");
            }
            function onToggleNode() {
              emit("toggle");
            }
            function onDeleteNode() {
              emit("delete");
            }
            function onChangeStickyColor(color$2) {
              emit("update", {
                color: color$2
              });
            }
            function onOpenContextMenu(event) {
              emit("open:contextmenu", event);
            }
            function onMouseEnter() {
              isHovered.value = true;
            }
            function onMouseLeave() {
              isHovered.value = false;
            }
            function onFocusNode() {
              if (node$1.value) emit("focus", node$1.value.id);
            }
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                "data-test-id": "canvas-node-toolbar",
                class: normalizeClass(classes.value),
                onMouseenter: onMouseEnter,
                onMouseleave: onMouseLeave,
                onMousedown: _cache[1] || (_cache[1] = withModifiers(() => {}, ["stop"])),
                onClick: _cache[2] || (_cache[2] = withModifiers(() => {}, ["stop"]))
              }, [createBaseVNode("div", {
                class: normalizeClass([unref($style).canvasNodeToolbarItems, _ctx.itemsClass])
              }, [isExecuteNodeVisible.value ? (openBlock(), createBlock(unref(N8nTooltip_default), {
                key: 0,
                placement: "top",
                disabled: !unref(isDisabled),
                content: unref(i18n).baseText("ndv.execute.deactivated")
              }, {
                default: withCtx(() => [createVNode(unref(N8nIconButton_default), {
                  "data-test-id": "execute-node-button",
                  type: "tertiary",
                  text: "",
                  size: "small",
                  icon: "node-play",
                  disabled: unref(isExecuting) || unref(isDisabled),
                  title: unref(i18n).baseText("node.testStep"),
                  onClick: withModifiers(executeNode, ["stop"])
                }, null, 8, ["disabled", "title"])]),
                _: 1
              }, 8, ["disabled", "content"])) : createCommentVNode("", true), isDisableNodeVisible.value ? (openBlock(), createBlock(unref(N8nIconButton_default), {
                key: 1,
                "data-test-id": "disable-node-button",
                type: "tertiary",
                text: "",
                size: "small",
                icon: "node-power",
                title: nodeDisabledTitle.value,
                onClick: withModifiers(onToggleNode, ["stop"])
              }, null, 8, ["title"])) : createCommentVNode("", true), isDeleteNodeVisible.value ? (openBlock(), createBlock(unref(N8nIconButton_default), {
                key: 2,
                "data-test-id": "delete-node-button",
                type: "tertiary",
                size: "small",
                text: "",
                icon: "node-trash",
                title: unref(i18n).baseText("node.delete"),
                onClick: withModifiers(onDeleteNode, ["stop"])
              }, null, 8, ["title"])) : createCommentVNode("", true), isFocusNodeVisible.value ? (openBlock(), createBlock(unref(N8nIconButton_default), {
                key: 3,
                type: "tertiary",
                size: "small",
                text: "",
                icon: "crosshair",
                onClick: withModifiers(onFocusNode, ["stop"])
              })) : createCommentVNode("", true), isStickyNoteChangeColorVisible.value ? (openBlock(), createBlock(CanvasNodeStickyColorSelector_default, {
                key: 4,
                visible: isStickyColorSelectorOpen.value,
                "onUpdate:visible": _cache[0] || (_cache[0] = $event => isStickyColorSelectorOpen.value = $event),
                onUpdate: onChangeStickyColor
              }, null, 8, ["visible"])) : createCommentVNode("", true), createVNode(unref(N8nIconButton_default), {
                "data-test-id": "overflow-node-button",
                type: "tertiary",
                size: "small",
                text: "",
                icon: "node-ellipsis",
                onClick: withModifiers(onOpenContextMenu, ["stop"])
              })], 2), _ctx.showStatusIcons ? (openBlock(), createBlock(CanvasNodeStatusIcons_default, {
                key: 0,
                class: normalizeClass(unref($style).statusIcons),
                "spinner-layout": "static"
              }, null, 8, ["class"])) : createCommentVNode("", true)], 34);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/CanvasNodeToolbar.vue?vue&type=style&index=0&lang.module.scss
        canvasNodeToolbar$1 = "_canvasNodeToolbar_nandb_123";
        isExperimentalNdvActive$2 = "_isExperimentalNdvActive_nandb_131";
        canvasNodeToolbarItems$1 = "_canvasNodeToolbarItems_nandb_140";
        forceVisible = "_forceVisible_nandb_152";
        statusIcons$1 = "_statusIcons_nandb_156";
        CanvasNodeToolbar_vue_vue_type_style_index_0_lang_module_default = {
          canvasNodeToolbar: canvasNodeToolbar$1,
          isExperimentalNdvActive: isExperimentalNdvActive$2,
          canvasNodeToolbarItems: canvasNodeToolbarItems$1,
          forceVisible,
          statusIcons: statusIcons$1
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/CanvasNodeToolbar.vue
        cssModules$26 = {
          "$style": CanvasNodeToolbar_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasNodeToolbar_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasNodeToolbar_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$26]]);
        _hoisted_1$15 = {
          "data-test-id": "canvas-node-status-always-output-data"
        };
        _hoisted_2$5 = {
          "data-test-id": "canvas-node-status-execute-once"
        };
        _hoisted_3$8 = {
          "data-test-id": "canvas-node-status-retry-on-fail"
        };
        _hoisted_4$1 = {
          "data-test-id": "canvas-node-status-continue-on-error"
        };
        size = "medium";
        CanvasNodeSettingsIcons_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasNodeSettingsIcons",
          setup(__props) {
            const {
              name
            } = useCanvasNode();
            const i18n = useI18n();
            const workflowsStore = useWorkflowsStore();
            const node$1 = computed(() => workflowsStore.workflowObject.getNode(name.value));
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                class: normalizeClass(_ctx.$style.settingsIcons)
              }, [node$1.value?.alwaysOutputData ? (openBlock(), createBlock(unref(N8nTooltip_default), {
                key: 0
              }, {
                content: withCtx(() => [createBaseVNode("div", {
                  class: normalizeClass(_ctx.$style.tooltipHeader)
                }, [createVNode(unref(N8nIcon_default), {
                  icon: "always-output-data",
                  size
                }), createBaseVNode("strong", {
                  class: normalizeClass(_ctx.$style.tooltipTitle)
                }, toDisplayString(unref(i18n).baseText("nodeSettings.alwaysOutputData.displayName")), 3)], 2), createBaseVNode("div", null, toDisplayString(unref(i18n).baseText("node.settings.alwaysOutputData")), 1)]),
                default: withCtx(() => [createBaseVNode("div", _hoisted_1$15, [createVNode(unref(N8nIcon_default), {
                  icon: "always-output-data",
                  size
                })])]),
                _: 1
              })) : createCommentVNode("", true), node$1.value?.executeOnce ? (openBlock(), createBlock(unref(N8nTooltip_default), {
                key: 1
              }, {
                content: withCtx(() => [createBaseVNode("div", {
                  class: normalizeClass(_ctx.$style.tooltipHeader)
                }, [createVNode(unref(N8nIcon_default), {
                  icon: "execute-once",
                  size
                }), createBaseVNode("strong", {
                  class: normalizeClass(_ctx.$style.tooltipTitle)
                }, toDisplayString(unref(i18n).baseText("nodeSettings.executeOnce.displayName")), 3)], 2), createBaseVNode("div", null, toDisplayString(unref(i18n).baseText("node.settings.executeOnce")), 1)]),
                default: withCtx(() => [createBaseVNode("div", _hoisted_2$5, [createVNode(unref(N8nIcon_default), {
                  icon: "execute-once",
                  size
                })])]),
                _: 1
              })) : createCommentVNode("", true), node$1.value?.retryOnFail ? (openBlock(), createBlock(unref(N8nTooltip_default), {
                key: 2
              }, {
                content: withCtx(() => [createBaseVNode("div", {
                  class: normalizeClass(_ctx.$style.tooltipHeader)
                }, [createVNode(unref(N8nIcon_default), {
                  icon: "retry-on-fail",
                  size
                }), createBaseVNode("strong", {
                  class: normalizeClass(_ctx.$style.tooltipTitle)
                }, toDisplayString(unref(i18n).baseText("nodeSettings.retryOnFail.displayName")), 3)], 2), createBaseVNode("div", null, toDisplayString(unref(i18n).baseText("node.settings.retriesOnFailure")), 1)]),
                default: withCtx(() => [createBaseVNode("div", _hoisted_3$8, [createVNode(unref(N8nIcon_default), {
                  icon: "retry-on-fail",
                  size
                })])]),
                _: 1
              })) : createCommentVNode("", true), node$1.value?.onError === "continueRegularOutput" || node$1.value?.onError === "continueErrorOutput" ? (openBlock(), createBlock(unref(N8nTooltip_default), {
                key: 3
              }, {
                content: withCtx(() => [createBaseVNode("div", {
                  class: normalizeClass(_ctx.$style.tooltipHeader)
                }, [createVNode(unref(N8nIcon_default), {
                  icon: "continue-on-error",
                  size
                }), createBaseVNode("strong", {
                  class: normalizeClass(_ctx.$style.tooltipTitle)
                }, toDisplayString(unref(i18n).baseText("node.settings.continuesOnError.title")), 3)], 2), createBaseVNode("div", null, toDisplayString(unref(i18n).baseText("node.settings.continuesOnError")), 1)]),
                default: withCtx(() => [createBaseVNode("div", _hoisted_4$1, [createVNode(unref(N8nIcon_default), {
                  icon: "continue-on-error",
                  size
                })])]),
                _: 1
              })) : createCommentVNode("", true)], 2);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/parts/CanvasNodeSettingsIcons.vue?vue&type=style&index=0&lang.module.scss
        settingsIcons = "_settingsIcons_4xb9m_123";
        tooltipHeader = "_tooltipHeader_4xb9m_131";
        tooltipTitle = "_tooltipTitle_4xb9m_136";
        CanvasNodeSettingsIcons_vue_vue_type_style_index_0_lang_module_default = {
          settingsIcons,
          tooltipHeader,
          tooltipTitle
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/parts/CanvasNodeSettingsIcons.vue
        cssModules$25 = {
          "$style": CanvasNodeSettingsIcons_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasNodeSettingsIcons_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasNodeSettingsIcons_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$25]]); //#endregion
        //#region src/features/workflows/canvas/experimental/components/ExperimentalCanvasNodeSettings.vue?vue&type=script&setup=true&lang.ts
        ExperimentalCanvasNodeSettings_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "ExperimentalCanvasNodeSettings",
          props: {
            nodeId: {},
            isReadOnly: {
              type: Boolean
            },
            subTitle: {},
            isEmbeddedInCanvas: {
              type: Boolean
            }
          },
          emits: ["dblclickHeader"],
          setup(__props, {
            emit: __emit
          }) {
            const emit = __emit;
            const workflowsStore = useWorkflowsStore();
            const uiStore = useUIStore();
            const {
              renameNode
            } = useCanvasOperations();
            const nodeHelpers = useNodeHelpers();
            const ndvStore = useNDVStore();
            const activeNode = computed(() => workflowsStore.getNodeById(__props.nodeId));
            const foreignCredentials = computed(() => nodeHelpers.getForeignCredentialsIfSharingEnabled(activeNode.value?.credentials));
            const isWorkflowRunning = computed(() => uiStore.isActionActive.workflowRunning);
            const isExecutionWaitingForWebhook = computed(() => workflowsStore.executionWaitingForWebhook);
            const blockUi = computed(() => isWorkflowRunning.value || isExecutionWaitingForWebhook.value);
            function handleValueChanged(parameterData) {
              if (parameterData.name === "name" && parameterData.oldValue) renameNode(parameterData.oldValue, parameterData.value);
            }
            function handleCaptureWheelEvent(event) {
              if (event.ctrlKey) return;
              if (event.currentTarget instanceof HTMLElement && event.currentTarget.scrollHeight <= event.currentTarget.offsetHeight) return;
              if (Math.abs(event.deltaX) >= Math.abs(event.deltaY)) return;
              event.stopImmediatePropagation();
            }
            return (_ctx, _cache) => {
              return openBlock(), createBlock(NodeSettings_default, {
                dragging: false,
                "active-node": activeNode.value,
                "push-ref": unref(ndvStore).pushRef,
                "foreign-credentials": foreignCredentials.value,
                "read-only": _ctx.isReadOnly,
                "block-u-i": blockUi.value,
                executable: !_ctx.isReadOnly,
                "is-embedded-in-canvas": _ctx.isEmbeddedInCanvas,
                "sub-title": _ctx.subTitle,
                "extra-tabs-class-name": "nodrag",
                "extra-parameter-wrapper-class-name": "nodrag",
                "is-ndv-v2": "",
                "hide-execute": "",
                "hide-docs": false,
                "hide-sub-connections": "",
                onValueChanged: handleValueChanged,
                onCaptureWheelBody: handleCaptureWheelEvent,
                onDblclickHeader: _cache[0] || (_cache[0] = $event => emit("dblclickHeader", $event))
              }, {
                actions: withCtx(() => [renderSlot(_ctx.$slots, "actions")]),
                _: 3
              }, 8, ["active-node", "push-ref", "foreign-credentials", "read-only", "block-u-i", "executable", "is-embedded-in-canvas", "sub-title"]);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/experimental/components/ExperimentalCanvasNodeSettings.vue
        _export("c", ExperimentalCanvasNodeSettings_default = ExperimentalCanvasNodeSettings_vue_vue_type_script_setup_true_lang_default);
        ExperimentalEmbeddedNdvActions_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "ExperimentalEmbeddedNdvActions",
          props: {
            isExpanded: {
              type: Boolean
            }
          },
          emits: ["openNdv", "toggleExpand"],
          setup(__props, {
            emit: __emit
          }) {
            const emit = __emit;
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                class: normalizeClass(_ctx.$style.actions)
              }, [createVNode(unref(N8nIconButton_default), {
                icon: "expand",
                type: "secondary",
                text: "",
                size: "mini",
                "icon-size": "small",
                "aria-label": "Open...",
                onClick: _cache[0] || (_cache[0] = withModifiers($event => emit("openNdv"), ["stop"]))
              }), createVNode(unref(N8nIconButton_default), {
                icon: _ctx.isExpanded ? "chevron-down" : "chevron-up",
                type: "secondary",
                text: "",
                size: "mini",
                "icon-size": "medium",
                "aria-label": "Toggle expand",
                onClick: _cache[1] || (_cache[1] = withModifiers($event => emit("toggleExpand"), ["stop"]))
              }, null, 8, ["icon"])], 2);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/experimental/components/ExperimentalEmbeddedNdvActions.vue?vue&type=style&index=0&lang.module.scss
        actions = "_actions_1cmje_123";
        ExperimentalEmbeddedNdvActions_vue_vue_type_style_index_0_lang_module_default = {
          actions
        }; //#endregion
        //#region src/features/workflows/canvas/experimental/components/ExperimentalEmbeddedNdvActions.vue
        cssModules$24 = {
          "$style": ExperimentalEmbeddedNdvActions_vue_vue_type_style_index_0_lang_module_default
        };
        ExperimentalEmbeddedNdvActions_default = /* @__PURE__ */__plugin_vue_export_helper_default(ExperimentalEmbeddedNdvActions_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$24]]);
        ExperimentalEmbeddedNodeDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "ExperimentalEmbeddedNodeDetails",
          props: {
            nodeId: {},
            isReadOnly: {
              type: Boolean
            }
          },
          setup(__props) {
            const i18n = useI18n();
            const ndvStore = useNDVStore();
            const experimentalNdvStore = useExperimentalNdvStore();
            const isExpanded = computed(() => !experimentalNdvStore.collapsedNodes[__props.nodeId]);
            const nodeTypesStore = useNodeTypesStore();
            const workflowsStore = useWorkflowsStore();
            useTelemetryContext({
              view_shown: "zoomed_view"
            });
            const node$1 = computed(() => workflowsStore.getNodeById(__props.nodeId) ?? null);
            const nodeType = computed(() => {
              if (node$1.value) return nodeTypesStore.getNodeType(node$1.value.type, node$1.value.typeVersion);
              return null;
            });
            const vf = useVueFlow();
            const {
              isPaneMoving
            } = useCanvas();
            const isVisible = computed(() => vf.isNodeIntersecting({
              id: __props.nodeId
            }, {
              x: -vf.viewport.value.x / vf.viewport.value.zoom,
              y: -vf.viewport.value.y / vf.viewport.value.zoom,
              width: vf.dimensions.value.width / vf.viewport.value.zoom,
              height: vf.dimensions.value.height / vf.viewport.value.zoom
            }));
            const isOnceVisible = ref(isVisible.value);
            const subTitle = computed(() => node$1.value && nodeType.value ? getNodeSubTitleText(node$1.value, nodeType.value, !isExpanded.value, i18n) : void 0);
            const maxHeightOnFocus = computed(() => vf.dimensions.value.height * .8);
            const expressionResolveCtx = useExpressionResolveCtx(node$1);
            function handleToggleExpand() {
              experimentalNdvStore.setNodeExpanded(__props.nodeId);
            }
            function handleOpenNdv() {
              if (node$1.value) ndvStore.setActiveNodeName(node$1.value.name, "canvas_zoomed_view");
            }
            provide(ExpressionLocalResolveContextSymbol, expressionResolveCtx);
            watchOnce(isVisible, visible$1 => {
              isOnceVisible.value = isOnceVisible.value || visible$1;
            });
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                class: normalizeClass([_ctx.$style.component, isExpanded.value ? _ctx.$style.expanded : _ctx.$style.collapsed, node$1.value?.disabled ? _ctx.$style.disabled : ""]),
                style: normalizeStyle({
                  "--input--max-height--focus": `${maxHeightOnFocus.value / unref(experimentalNdvStore).maxCanvasZoom}px`,
                  pointerEvents: unref(isPaneMoving) ? "none" : "auto"
                })
              }, [!node$1.value || !isOnceVisible.value ? (openBlock(), createElementBlock(Fragment, {
                key: 0
              }, [], 64)) : isExpanded.value ? (openBlock(), createBlock(ExperimentalCanvasNodeSettings_default, {
                key: 1,
                tabindex: "-1",
                "node-id": _ctx.nodeId,
                class: normalizeClass(_ctx.$style.settingsView),
                "is-read-only": _ctx.isReadOnly,
                "sub-title": subTitle.value,
                "input-node-name": unref(expressionResolveCtx)?.inputNode?.name,
                "is-embedded-in-canvas": "",
                onDblclickHeader: handleOpenNdv
              }, {
                actions: withCtx(() => [createVNode(ExperimentalEmbeddedNdvActions_default, {
                  "is-expanded": isExpanded.value,
                  onOpenNdv: handleOpenNdv,
                  onToggleExpand: handleToggleExpand
                }, null, 8, ["is-expanded"])]),
                _: 1
              }, 8, ["node-id", "class", "is-read-only", "sub-title", "input-node-name"])) : (openBlock(), createElementBlock("div", {
                key: 2,
                role: "button",
                class: normalizeClass(_ctx.$style.collapsedContent),
                onClick: handleToggleExpand
              }, [createVNode(NodeIcon_default, {
                "node-type": nodeType.value,
                size: 18
              }, null, 8, ["node-type"]), createBaseVNode("div", {
                class: normalizeClass(_ctx.$style.collapsedNodeName)
              }, [createVNode(unref(N8nText_default), {
                bold: ""
              }, {
                default: withCtx(() => [createTextVNode(toDisplayString(node$1.value.name), 1)]),
                _: 1
              }), createVNode(unref(N8nText_default), {
                bold: "",
                size: "small",
                color: "text-light"
              }, {
                default: withCtx(() => [createTextVNode(toDisplayString(subTitle.value), 1)]),
                _: 1
              })], 2), createVNode(ExperimentalEmbeddedNdvActions_default, {
                "is-expanded": isExpanded.value,
                onOpenNdv: handleOpenNdv,
                onToggleExpand: handleToggleExpand
              }, null, 8, ["is-expanded"])], 2))], 6);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/experimental/components/ExperimentalEmbeddedNodeDetails.vue?vue&type=style&index=0&lang.module.scss
        component = "_component_hvjba_123";
        expanded = "_expanded_hvjba_136";
        collapsed = "_collapsed_hvjba_146";
        collapsedContent = "_collapsedContent_hvjba_158";
        settingsView = "_settingsView_hvjba_159";
        disabled$1 = "_disabled_hvjba_181";
        collapsedNodeName = "_collapsedNodeName_hvjba_191";
        ExperimentalEmbeddedNodeDetails_vue_vue_type_style_index_0_lang_module_default = {
          component,
          expanded,
          collapsed,
          collapsedContent,
          settingsView,
          disabled: disabled$1,
          collapsedNodeName
        }; //#endregion
        //#region src/features/workflows/canvas/experimental/components/ExperimentalEmbeddedNodeDetails.vue
        cssModules$23 = {
          "$style": ExperimentalEmbeddedNodeDetails_vue_vue_type_style_index_0_lang_module_default
        };
        ExperimentalEmbeddedNodeDetails_default = /* @__PURE__ */__plugin_vue_export_helper_default(ExperimentalEmbeddedNodeDetails_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$23]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/parts/CanvasNodeTooltip.vue?vue&type=script&setup=true&lang.ts
        CanvasNodeTooltip_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasNodeTooltip",
          props: {
            visible: {
              type: Boolean
            }
          },
          setup(__props) {
            const {
              render: render$5
            } = useCanvasNode();
            const renderOptions = computed(() => render$5.value.options);
            const popperOptions = {
              modifiers: [{
                name: "flip",
                enabled: false
              }]
            };
            return (_ctx, _cache) => {
              return openBlock(), createBlock(unref(N8nTooltip_default), {
                placement: "top",
                "show-after": 500,
                visible: true,
                teleported: false,
                "popper-class": _ctx.$style.popper,
                "popper-options": popperOptions
              }, {
                content: withCtx(() => [createTextVNode(toDisplayString(renderOptions.value.tooltip), 1)]),
                default: withCtx(() => [createBaseVNode("div", {
                  class: normalizeClass(_ctx.$style.tooltipTrigger)
                }, null, 2)]),
                _: 1
              }, 8, ["popper-class"]);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/parts/CanvasNodeTooltip.vue?vue&type=style&index=0&lang.module.scss
        tooltipTrigger = "_tooltipTrigger_dauyi_123";
        popper = "_popper_dauyi_131";
        CanvasNodeTooltip_vue_vue_type_style_index_0_lang_module_default = {
          tooltipTrigger,
          popper
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/parts/CanvasNodeTooltip.vue
        cssModules$22 = {
          "$style": CanvasNodeTooltip_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasNodeTooltip_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasNodeTooltip_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$22]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/parts/CanvasNodeDisabledStrikeThrough.vue?vue&type=script&setup=true&lang.ts
        CanvasNodeDisabledStrikeThrough_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasNodeDisabledStrikeThrough",
          setup(__props) {
            const $style = useCssModule();
            const {
              hasRunData,
              render: render$5
            } = useCanvasNode();
            const classes = computed(() => {
              return {
                [$style.disabledStrikeThrough]: true,
                [$style.success]: hasRunData.value,
                [$style.warning]: render$5.value.type === CanvasNodeRenderType.Default && render$5.value.options.dirtiness !== void 0
              };
            });
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                class: normalizeClass(classes.value)
              }, null, 2);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/parts/CanvasNodeDisabledStrikeThrough.vue?vue&type=style&index=0&lang.module.scss
        disabledStrikeThrough = "_disabledStrikeThrough_1byso_123";
        success$2 = "_success_1byso_132";
        warning$1 = "_warning_1byso_136";
        CanvasNodeDisabledStrikeThrough_vue_vue_type_style_index_0_lang_module_default = {
          disabledStrikeThrough,
          success: success$2,
          warning: warning$1
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/parts/CanvasNodeDisabledStrikeThrough.vue
        cssModules$21 = {
          "$style": CanvasNodeDisabledStrikeThrough_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasNodeDisabledStrikeThrough_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasNodeDisabledStrikeThrough_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$21]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/CanvasNodeDefault.vue?vue&type=script&setup=true&lang.ts
        _hoisted_1$14 = ["data-test-id"];
        CanvasNodeDefault_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasNodeDefault",
          emits: ["open:contextmenu", "activate"],
          setup(__props, {
            emit: __emit
          }) {
            const $style = useCssModule();
            const i18n = useI18n();
            const emit = __emit;
            const {
              initialized,
              viewport,
              isExperimentalNdvActive: isExperimentalNdvActive$3
            } = useCanvas();
            const route = useRoute();
            const {
              id: id$1,
              label: label$7,
              subtitle: subtitle$1,
              inputs: inputs$1,
              outputs,
              connections,
              isDisabled,
              isReadOnly,
              isSelected,
              hasPinnedData,
              executionStatus,
              executionWaiting,
              executionWaitingForNext,
              executionRunning,
              hasRunData,
              hasExecutionErrors,
              render: render$5,
              isNotInstalledCommunityNode
            } = useCanvasNode();
            const {
              mainOutputs,
              mainOutputConnections,
              mainInputs,
              mainInputConnections,
              nonMainInputs
            } = useNodeConnections({
              inputs: inputs$1,
              outputs,
              connections
            });
            const nodeHelpers = useNodeHelpers();
            const renderOptions = computed(() => render$5.value.options);
            const isDemoRoute = computed(() => route.name === VIEWS.DEMO);
            const classes = computed(() => {
              return {
                [$style.node]: true,
                [$style.selected]: isSelected.value,
                [$style.disabled]: isDisabled.value || isNotInstalledCommunityNode.value && !isDemoRoute.value,
                [$style.success]: hasRunData.value && executionStatus.value === "success",
                [$style.error]: hasExecutionErrors.value,
                [$style.pinned]: hasPinnedData.value,
                [$style.waiting]: executionWaiting.value ?? executionStatus.value === "waiting",
                [$style.running]: executionRunning.value || executionWaitingForNext.value,
                [$style.configurable]: renderOptions.value.configurable,
                [$style.configuration]: renderOptions.value.configuration,
                [$style.trigger]: renderOptions.value.trigger,
                [$style.warning]: renderOptions.value.dirtiness !== void 0
              };
            });
            const iconSize = computed(() => renderOptions.value.configuration ? 30 : 40);
            const nodeSize = computed(() => calculateNodeSize(renderOptions.value.configuration ?? false, renderOptions.value.configurable ?? false, mainInputs.value.length, mainOutputs.value.length, nonMainInputs.value.length, isExperimentalNdvActive$3.value));
            const styles = computed(() => ({
              "--canvas-node--width": `${nodeSize.value.width}px`,
              "--canvas-node--height": `${nodeSize.value.height}px`,
              "--node--icon--size": `${iconSize.value}px`
            }));
            const dataTestId = computed(() => {
              let type = "default";
              if (renderOptions.value.configurable) type = "configurable";else if (renderOptions.value.configuration) type = "configuration";else if (renderOptions.value.trigger) type = "trigger";
              return `canvas-${type}-node`;
            });
            const isStrikethroughVisible = computed(() => {
              const isSingleMainInputNode = mainInputs.value.length === 1 && mainInputConnections.value.length <= 1;
              const isSingleMainOutputNode = mainOutputs.value.length === 1 && mainOutputConnections.value.length <= 1;
              return isDisabled.value && isSingleMainInputNode && isSingleMainOutputNode;
            });
            const iconSource = computed(() => renderOptions.value.icon);
            const showTooltip = ref(false);
            watch(initialized, () => {
              if (initialized.value) showTooltip.value = true;
            });
            watch(viewport, () => {
              showTooltip.value = false;
              setTimeout(() => {
                showTooltip.value = true;
              }, 0);
            });
            function openContextMenu(event) {
              emit("open:contextmenu", event);
            }
            function onActivate(event) {
              emit("activate", id$1.value, event);
            }
            return (_ctx, _cache) => {
              return unref(isExperimentalNdvActive$3) ? (openBlock(), createBlock(ExperimentalEmbeddedNodeDetails_default, {
                key: 0,
                "node-id": unref(id$1),
                class: normalizeClass(classes.value),
                style: normalizeStyle(styles.value),
                "is-read-only": unref(isReadOnly),
                "is-configurable": renderOptions.value.configurable ?? false
              }, null, 8, ["node-id", "class", "style", "is-read-only", "is-configurable"])) : (openBlock(), createElementBlock("div", {
                key: 1,
                class: normalizeClass(classes.value),
                style: normalizeStyle(styles.value),
                "data-test-id": dataTestId.value,
                onContextmenu: openContextMenu,
                onDblclick: withModifiers(onActivate, ["stop"])
              }, [renderOptions.value.tooltip ? (openBlock(), createBlock(CanvasNodeTooltip_default, {
                key: 0,
                visible: showTooltip.value
              }, null, 8, ["visible"])) : createCommentVNode("", true), createVNode(NodeIcon_default, {
                "icon-source": iconSource.value,
                size: iconSize.value,
                shrink: false,
                disabled: unref(isDisabled),
                class: normalizeClass(unref($style).icon)
              }, null, 8, ["icon-source", "size", "disabled", "class"]), !renderOptions.value.configuration && !unref(isDisabled) && !(unref(hasPinnedData) && !unref(nodeHelpers).isProductionExecutionPreview.value) ? (openBlock(), createBlock(CanvasNodeSettingsIcons_default, {
                key: 1
              })) : createCommentVNode("", true), isStrikethroughVisible.value ? (openBlock(), createBlock(CanvasNodeDisabledStrikeThrough_default, {
                key: 2
              })) : createCommentVNode("", true), createBaseVNode("div", {
                class: normalizeClass(unref($style).description)
              }, [unref(label$7) ? (openBlock(), createElementBlock("div", {
                key: 0,
                class: normalizeClass(unref($style).label)
              }, toDisplayString(unref(label$7)), 3)) : createCommentVNode("", true), unref(isDisabled) ? (openBlock(), createElementBlock("div", {
                key: 1,
                class: normalizeClass(unref($style).disabledLabel)
              }, " (" + toDisplayString(unref(i18n).baseText("node.disabled")) + ") ", 3)) : createCommentVNode("", true), unref(subtitle$1) ? (openBlock(), createElementBlock("div", {
                key: 2,
                class: normalizeClass(unref($style).subtitle)
              }, toDisplayString(unref(subtitle$1)), 3)) : createCommentVNode("", true)], 2), !unref(isDisabled) ? (openBlock(), createBlock(CanvasNodeStatusIcons_default, {
                key: 3,
                class: normalizeClass(unref($style).statusIcons)
              }, null, 8, ["class"])) : createCommentVNode("", true)], 46, _hoisted_1$14));
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/CanvasNodeDefault.vue?vue&type=style&index=0&lang.module.scss
        node = "_node_199fc_123";
        trigger$1 = "_trigger_199fc_145";
        configuration = "_configuration_199fc_148";
        statusIcons = "_statusIcons_199fc_153";
        configurable = "_configurable_199fc_156";
        icon = "_icon_199fc_156";
        description = "_description_199fc_159";
        label$6 = "_label_199fc_172";
        subtitle = "_subtitle_199fc_175";
        running = "_running_199fc_181";
        selected$1 = "_selected_199fc_188";
        success$1 = "_success_199fc_192";
        warning = "_warning_199fc_198";
        error = "_error_199fc_201";
        pinned = "_pinned_199fc_204";
        disabled = "_disabled_199fc_210";
        waiting = "_waiting_199fc_223";
        disabledLabel = "_disabledLabel_199fc_243";
        CanvasNodeDefault_vue_vue_type_style_index_0_lang_module_default = {
          node,
          trigger: trigger$1,
          configuration,
          statusIcons,
          configurable,
          icon,
          description,
          label: label$6,
          subtitle,
          running,
          selected: selected$1,
          success: success$1,
          warning,
          error,
          pinned,
          disabled,
          waiting,
          disabledLabel
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/CanvasNodeDefault.vue
        cssModules$20 = {
          "$style": CanvasNodeDefault_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasNodeDefault_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasNodeDefault_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$20]]); //#endregion
        //#region ../../../node_modules/.pnpm/@vue-flow+node-resizer@1.5.0_@vue-flow+core@1.48.0_vue@3.5.13_typescript@5.9.2___vue@3.5.13_typescript@5.9.2_/node_modules/@vue-flow/node-resizer/dist/vue-flow-node-resizer.mjs
        xhtml$1 = "http://www.w3.org/1999/xhtml";
        namespaces$1 = {
          svg: "http://www.w3.org/2000/svg",
          xhtml: xhtml$1,
          xlink: "http://www.w3.org/1999/xlink",
          xml: "http://www.w3.org/XML/1998/namespace",
          xmlns: "http://www.w3.org/2000/xmlns/"
        };
        find$1 = Array.prototype.find;
        filter$1 = Array.prototype.filter;
        EnterNode$1.prototype = {
          constructor: EnterNode$1,
          appendChild: function (child) {
            return this._parent.insertBefore(child, this._next);
          },
          insertBefore: function (child, next) {
            return this._parent.insertBefore(child, next);
          },
          querySelector: function (selector2) {
            return this._parent.querySelector(selector2);
          },
          querySelectorAll: function (selector2) {
            return this._parent.querySelectorAll(selector2);
          }
        };
        ClassList$1.prototype = {
          add: function (name) {
            if (this._names.indexOf(name) < 0) {
              this._names.push(name);
              this._node.setAttribute("class", this._names.join(" "));
            }
          },
          remove: function (name) {
            var i = this._names.indexOf(name);
            if (i >= 0) {
              this._names.splice(i, 1);
              this._node.setAttribute("class", this._names.join(" "));
            }
          },
          contains: function (name) {
            return this._names.indexOf(name) >= 0;
          }
        };
        root$1 = [null];
        Selection$2.prototype = {
          constructor: Selection$2,
          select: selection_select$1,
          selectAll: selection_selectAll$1,
          selectChild: selection_selectChild$1,
          selectChildren: selection_selectChildren$1,
          filter: selection_filter$1,
          data: selection_data$1,
          enter: selection_enter$1,
          exit: selection_exit$1,
          join: selection_join$1,
          merge: selection_merge$1,
          selection: selection_selection$1,
          order: selection_order$1,
          sort: selection_sort$1,
          call: selection_call$1,
          nodes: selection_nodes$1,
          node: selection_node$1,
          size: selection_size$1,
          empty: selection_empty$1,
          each: selection_each$1,
          attr: selection_attr$1,
          style: selection_style$1,
          property: selection_property$1,
          classed: selection_classed$1,
          text: selection_text$1,
          html: selection_html$1,
          raise: selection_raise$1,
          lower: selection_lower$1,
          append: selection_append$1,
          insert: selection_insert$1,
          remove: selection_remove$1,
          clone: selection_clone$1,
          datum: selection_datum$1,
          on: selection_on$1,
          dispatch: selection_dispatch$1,
          [Symbol.iterator]: selection_iterator$1
        };
        noop$1 = {
          value: () => {}
        };
        Dispatch$1.prototype = dispatch$1.prototype = {
          constructor: Dispatch$1,
          on: function (typename, callback) {
            var _ = this._,
              T = parseTypenames$2(typename + "", _),
              t,
              i = -1,
              n = T.length;
            if (arguments.length < 2) {
              while (++i < n) if ((t = (typename = T[i]).type) && (t = get$2(_[t], typename.name))) return t;
              return;
            }
            if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
            while (++i < n) if (t = (typename = T[i]).type) _[t] = set$2(_[t], typename.name, callback);else if (callback == null) for (t in _) _[t] = set$2(_[t], typename.name, null);
            return this;
          },
          copy: function () {
            var copy = {},
              _ = this._;
            for (var t in _) copy[t] = _[t].slice();
            return new Dispatch$1(copy);
          },
          call: function (type, that) {
            if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
            if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
            for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
          },
          apply: function (type, that, args) {
            if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
            for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
          }
        };
        nonpassive = {
          passive: false
        };
        nonpassivecapture$1 = {
          capture: true,
          passive: false
        };
        constant$3 = x => () => x;
        DragEvent.prototype.on = function () {
          var value = this._.on.apply(this._, arguments);
          return value === this._ ? this : value;
        };
        ResizeControlVariant = /* @__PURE__ */(ResizeControlVariant2 => {
          ResizeControlVariant2["Line"] = "line";
          ResizeControlVariant2["Handle"] = "handle";
          return ResizeControlVariant2;
        })(ResizeControlVariant || {});
        DefaultPositions = {
          [ResizeControlVariant.Line]: "right",
          [ResizeControlVariant.Handle]: "bottom-right"
        };
        StylingProperty = {
          [ResizeControlVariant.Line]: "borderColor",
          [ResizeControlVariant.Handle]: "backgroundColor"
        };
        _sfc_main$1$9 = /* @__PURE__ */defineComponent({
          name: "ResizeControl",
          compatConfig: {
            MODE: 3
          },
          props: {
            nodeId: {},
            color: {},
            minWidth: {
              default: 10
            },
            minHeight: {
              default: 10
            },
            maxWidth: {
              default: Number.MAX_VALUE
            },
            maxHeight: {
              default: Number.MAX_VALUE
            },
            position: {},
            variant: {
              default: "handle"
            },
            shouldResize: {},
            keepAspectRatio: {
              type: [Boolean, Number],
              default: false
            },
            autoScale: {
              type: Boolean,
              default: true
            },
            handleClassName: {},
            handleStyle: {},
            lineClassName: {},
            lineStyle: {},
            isVisible: {
              type: Boolean
            }
          },
          emits: ["resizeStart", "resize", "resizeEnd"],
          setup(__props, {
            emit: emits
          }) {
            const props = __props;
            const initPrevValues = {
              width: 0,
              height: 0,
              x: 0,
              y: 0
            };
            const initStartValues = {
              ...initPrevValues,
              pointerX: 0,
              pointerY: 0,
              aspectRatio: 1
            };
            const {
              findNode,
              emits: triggerEmits,
              viewport,
              noDragClassName
            } = useVueFlow();
            const getPointerPosition = useGetPointerPosition();
            const resizeControlRef = ref();
            let startValues = initStartValues;
            let prevValues = initPrevValues;
            const controlPosition = toRef(() => props.position ?? DefaultPositions[props.variant]);
            const positionClassNames = computed(() => controlPosition.value.split("-"));
            const controlStyle = toRef(() => props.color ? {
              [StylingProperty[props.variant]]: props.color
            } : {});
            watchEffect(onCleanup => {
              if (!resizeControlRef.value || !props.nodeId) return;
              const selection$1 = select$1(resizeControlRef.value);
              const enableX = controlPosition.value.includes("right") || controlPosition.value.includes("left");
              const enableY = controlPosition.value.includes("bottom") || controlPosition.value.includes("top");
              const invertX = controlPosition.value.includes("left");
              const invertY = controlPosition.value.includes("top");
              const dragHandler = drag().on("start", event => {
                const node$1 = findNode(props.nodeId);
                const {
                  xSnapped,
                  ySnapped
                } = getPointerPosition(event);
                prevValues = {
                  width: (node$1 == null ? void 0 : node$1.dimensions.width) ?? 0,
                  height: (node$1 == null ? void 0 : node$1.dimensions.height) ?? 0,
                  x: (node$1 == null ? void 0 : node$1.position.x) ?? 0,
                  y: (node$1 == null ? void 0 : node$1.position.y) ?? 0
                };
                startValues = {
                  ...prevValues,
                  pointerX: xSnapped,
                  pointerY: ySnapped,
                  aspectRatio: prevValues.width / prevValues.height
                };
                emits("resizeStart", {
                  event,
                  params: prevValues
                });
              }).on("drag", event => {
                var _a;
                const {
                  xSnapped,
                  ySnapped
                } = getPointerPosition(event);
                const node$1 = findNode(props.nodeId);
                if (node$1) {
                  const changes = [];
                  const {
                    pointerX: startX,
                    pointerY: startY,
                    width: startWidth,
                    height: startHeight,
                    x: startNodeX,
                    y: startNodeY,
                    aspectRatio: startAspectRatio
                  } = startValues;
                  const {
                    x: prevX,
                    y: prevY,
                    width: prevWidth,
                    height: prevHeight
                  } = prevValues;
                  const distX = Math.floor(enableX ? xSnapped - startX : 0);
                  const distY = Math.floor(enableY ? ySnapped - startY : 0);
                  let width$1 = clamp(startWidth + (invertX ? -distX : distX), props.minWidth, props.maxWidth);
                  let height = clamp(startHeight + (invertY ? -distY : distY), props.minHeight, props.maxHeight);
                  if (props.keepAspectRatio) {
                    const nextAspectRatio = width$1 / height;
                    let aspectRatio = startAspectRatio;
                    if (typeof props.keepAspectRatio === "number" && nextAspectRatio !== props.keepAspectRatio) aspectRatio = props.keepAspectRatio;
                    const isDiagonal = enableX && enableY;
                    const isHorizontal = enableX && !enableY;
                    width$1 = nextAspectRatio <= aspectRatio && isDiagonal || enableY && !enableX ? height * aspectRatio : width$1;
                    height = nextAspectRatio > aspectRatio && isDiagonal || isHorizontal ? width$1 / aspectRatio : height;
                    if (width$1 >= props.maxWidth) {
                      width$1 = props.maxWidth;
                      height = props.maxWidth / aspectRatio;
                    } else if (width$1 <= props.minWidth) {
                      width$1 = props.minWidth;
                      height = props.minWidth / aspectRatio;
                    }
                    if (height >= props.maxHeight) {
                      height = props.maxHeight;
                      width$1 = props.maxHeight * aspectRatio;
                    } else if (height <= props.minHeight) {
                      height = props.minHeight;
                      width$1 = props.minHeight * aspectRatio;
                    }
                  }
                  const isWidthChange = width$1 !== prevWidth;
                  const isHeightChange = height !== prevHeight;
                  if (invertX || invertY) {
                    const x = invertX ? startNodeX - (width$1 - startWidth) : startNodeX;
                    const y = invertY ? startNodeY - (height - startHeight) : startNodeY;
                    const isXPosChange = x !== prevX && isWidthChange;
                    const isYPosChange = y !== prevY && isHeightChange;
                    if (isXPosChange || isYPosChange) {
                      const positionChange = {
                        id: node$1.id,
                        type: "position",
                        from: node$1.position,
                        position: {
                          x: isXPosChange ? x : prevX,
                          y: isYPosChange ? y : prevY
                        }
                      };
                      changes.push(positionChange);
                      prevValues.x = positionChange.position.x;
                      prevValues.y = positionChange.position.y;
                    }
                  }
                  if (props.nodeId && (isWidthChange || isHeightChange)) {
                    const dimensionChange = {
                      id: props.nodeId,
                      type: "dimensions",
                      updateStyle: true,
                      resizing: true,
                      dimensions: {
                        width: width$1,
                        height
                      }
                    };
                    changes.push(dimensionChange);
                    prevValues.width = width$1;
                    prevValues.height = height;
                  }
                  if (changes.length === 0) return;
                  const direction = getDirection({
                    width: prevValues.width,
                    prevWidth,
                    height: prevValues.height,
                    prevHeight,
                    invertX,
                    invertY
                  });
                  const nextValues = {
                    ...prevValues,
                    direction
                  };
                  if (((_a = props.shouldResize) == null ? void 0 : _a.call(props, event, nextValues)) === false) return;
                  emits("resize", {
                    event,
                    params: nextValues
                  });
                  triggerEmits.nodesChange(changes);
                }
              }).on("end", event => {
                if (props.nodeId) {
                  const dimensionChange = {
                    id: props.nodeId,
                    type: "dimensions",
                    resizing: false
                  };
                  emits("resizeEnd", {
                    event,
                    params: prevValues
                  });
                  triggerEmits.nodesChange([dimensionChange]);
                }
              });
              selection$1.call(dragHandler);
              onCleanup(() => {
                selection$1.on(".drag", null);
              });
            });
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                ref_key: "resizeControlRef",
                ref: resizeControlRef,
                class: normalizeClass(["vue-flow__resize-control", [...positionClassNames.value, _ctx.variant, unref(noDragClassName)]]),
                style: normalizeStyle({
                  ...controlStyle.value,
                  scale: _ctx.variant === unref(ResizeControlVariant).Handle ? `${Math.max(1 / unref(viewport).zoom, 1)}` : void 0
                })
              }, [renderSlot(_ctx.$slots, "default")], 6);
            };
          }
        });
        _sfc_main$8 = /* @__PURE__ */defineComponent({
          name: "NodeResizer",
          compatConfig: {
            MODE: 3
          },
          inheritAttrs: false,
          props: {
            nodeId: {},
            color: {},
            handleClassName: {},
            handleStyle: {},
            lineClassName: {},
            lineStyle: {},
            isVisible: {
              type: Boolean,
              default: true
            },
            minWidth: {},
            minHeight: {},
            maxWidth: {},
            maxHeight: {},
            shouldResize: {},
            keepAspectRatio: {
              type: [Boolean, Number]
            },
            autoScale: {
              type: Boolean,
              default: true
            }
          },
          emits: ["resizeStart", "resize", "resizeEnd"],
          setup(__props, {
            emit: emits
          }) {
            const props = __props;
            const {
              findNode,
              emits: triggerEmits
            } = useVueFlow();
            const handleControls = ["top-left", "top-right", "bottom-left", "bottom-right"];
            const lineControls = ["top", "right", "bottom", "left"];
            const contextNodeId = inject(NodeId, null);
            const nodeId = toRef(() => typeof props.nodeId === "string" ? props.nodeId : contextNodeId);
            const node$1 = computed(() => findNode(nodeId.value));
            watch([() => props.minWidth, () => props.minHeight, () => props.maxWidth, () => props.maxHeight, () => {
              var _a;
              return !!((_a = node$1.value) == null ? void 0 : _a.dimensions.width) && !!node$1.value.dimensions.height;
            }], ([minWidth, minHeight, maxWidth, maxHeight, isInitialized]) => {
              const n = node$1.value;
              if (n && isInitialized) {
                const dimensionChange = {
                  id: n.id,
                  type: "dimensions",
                  updateStyle: true,
                  dimensions: {
                    width: n.dimensions.width,
                    height: n.dimensions.height
                  }
                };
                if (minWidth && n.dimensions.width < minWidth) dimensionChange.dimensions.width = minWidth;
                if (minHeight && n.dimensions.height < minHeight) dimensionChange.dimensions.height = minHeight;
                if (maxWidth && n.dimensions.width > maxWidth) dimensionChange.dimensions.width = maxWidth;
                if (maxHeight && n.dimensions.height > maxHeight) dimensionChange.dimensions.height = maxHeight;
                if (dimensionChange.dimensions.width !== n.dimensions.width || dimensionChange.dimensions.height !== n.dimensions.height) triggerEmits.nodesChange([dimensionChange]);
              }
            }, {
              flush: "post",
              immediate: true
            });
            return (_ctx, _cache) => {
              return _ctx.isVisible ? (openBlock(), createElementBlock(Fragment, {
                key: 0
              }, [(openBlock(), createElementBlock(Fragment, null, renderList(lineControls, c => {
                return createVNode(_sfc_main$1$9, {
                  key: c,
                  class: normalizeClass(_ctx.lineClassName),
                  style: normalizeStyle(_ctx.lineStyle),
                  "node-id": nodeId.value,
                  position: c,
                  variant: unref(ResizeControlVariant).Line,
                  color: _ctx.color,
                  "min-width": _ctx.minWidth,
                  "min-height": _ctx.minHeight,
                  "max-width": _ctx.maxWidth,
                  "max-height": _ctx.maxHeight,
                  "should-resize": _ctx.shouldResize,
                  "keep-aspect-ratio": _ctx.keepAspectRatio,
                  "auto-scale": _ctx.autoScale,
                  onResizeStart: _cache[0] || (_cache[0] = $event => emits("resizeStart", $event)),
                  onResize: _cache[1] || (_cache[1] = $event => emits("resize", $event)),
                  onResizeEnd: _cache[2] || (_cache[2] = $event => emits("resizeEnd", $event))
                }, null, 8, ["class", "style", "node-id", "position", "variant", "color", "min-width", "min-height", "max-width", "max-height", "should-resize", "keep-aspect-ratio", "auto-scale"]);
              }), 64)), (openBlock(), createElementBlock(Fragment, null, renderList(handleControls, c => {
                return createVNode(_sfc_main$1$9, {
                  key: c,
                  class: normalizeClass(_ctx.handleClassName),
                  style: normalizeStyle(_ctx.handleStyle),
                  "node-id": nodeId.value,
                  position: c,
                  color: _ctx.color,
                  "min-width": _ctx.minWidth,
                  "min-height": _ctx.minHeight,
                  "max-width": _ctx.maxWidth,
                  "max-height": _ctx.maxHeight,
                  "should-resize": _ctx.shouldResize,
                  "keep-aspect-ratio": _ctx.keepAspectRatio,
                  "auto-scale": _ctx.autoScale,
                  onResizeStart: _cache[3] || (_cache[3] = $event => emits("resizeStart", $event)),
                  onResize: _cache[4] || (_cache[4] = $event => emits("resize", $event)),
                  onResizeEnd: _cache[5] || (_cache[5] = $event => emits("resizeEnd", $event))
                }, null, 8, ["class", "style", "node-id", "position", "color", "min-width", "min-height", "max-width", "max-height", "should-resize", "keep-aspect-ratio", "auto-scale"]);
              }), 64))], 64)) : createCommentVNode("", true);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/CanvasNodeStickyNote.vue?vue&type=script&setup=true&lang.ts
        CanvasNodeStickyNote_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          inheritAttrs: false,
          __name: "CanvasNodeStickyNote",
          emits: ["update", "move", "activate", "deactivate", "open:contextmenu"],
          setup(__props, {
            emit: __emit
          }) {
            const emit = __emit;
            const $style = useCssModule();
            const {
              id: id$1,
              isSelected,
              isReadOnly,
              render: render$5,
              eventBus
            } = useCanvasNode();
            const renderOptions = computed(() => render$5.value.options);
            const classes = computed(() => ({
              [$style.sticky]: true,
              [$style.selected]: isSelected.value,
              ["sticky--active"]: isActive.value
            }));
            /**
            * Resizing
            */
            function onResize(event) {
              emit("move", {
                x: event.params.x,
                y: event.params.y
              });
              emit("update", {
                ...(event.params.width ? {
                  width: event.params.width
                } : {}),
                ...(event.params.height ? {
                  height: event.params.height
                } : {})
              });
            }
            /**
            * Content change
            */
            const isActive = ref(false);
            function onInputChange(value) {
              emit("update", {
                content: value
              });
            }
            function onSetActive(value) {
              if (isActive.value === value) return;
              isActive.value = value;
              if (value) emit("activate", id$1.value);else emit("deactivate", id$1.value);
            }
            function onActivate() {
              onSetActive(true);
            }
            /**
            * Context menu
            */
            function openContextMenu(event) {
              emit("open:contextmenu", event);
            }
            /**
            * Lifecycle
            */
            onMounted(() => {
              eventBus.value?.on("update:node:activated", onActivate);
            });
            onBeforeUnmount(() => {
              eventBus.value?.off("update:node:activated", onActivate);
            });
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(_sfc_main$8), {
                "min-height": 80,
                "min-width": 150,
                height: renderOptions.value.height,
                width: renderOptions.value.width,
                "is-visible": !unref(isReadOnly),
                onResize
              }, null, 8, ["height", "width", "is-visible"]), createVNode(unref(N8nSticky_default), mergeProps(_ctx.$attrs, {
                id: unref(id$1),
                class: classes.value,
                "data-test-id": "sticky",
                height: renderOptions.value.height,
                width: renderOptions.value.width,
                "model-value": renderOptions.value.content,
                "background-color": renderOptions.value.color,
                "edit-mode": isActive.value,
                "read-only": unref(isReadOnly),
                onEdit: onSetActive,
                onDblclick: withModifiers(onActivate, ["stop"]),
                "onUpdate:modelValue": onInputChange,
                onContextmenu: openContextMenu
              }), null, 16, ["id", "class", "height", "width", "model-value", "background-color", "edit-mode", "read-only"])], 64);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/CanvasNodeStickyNote.vue?vue&type=style&index=0&lang.module.scss
        sticky = "_sticky_166fo_123";
        selected = "_selected_166fo_130";
        CanvasNodeStickyNote_vue_vue_type_style_index_0_lang_module_default = {
          sticky,
          selected
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/CanvasNodeStickyNote.vue
        cssModules$19 = {
          "$style": CanvasNodeStickyNote_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasNodeStickyNote_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasNodeStickyNote_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$19]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/CanvasNodeAddNodes.vue?vue&type=script&setup=true&lang.ts
        CanvasNodeAddNodes_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasNodeAddNodes",
          setup(__props) {
            const nodeCreatorStore = useNodeCreatorStore();
            const i18n = useI18n();
            const settingsStore = useSettingsStore();
            const templatesStore = useTemplatesStore();
            const router = useRouter();
            const uiStore = useUIStore();
            const templatesDataQualityStore = useTemplatesDataQualityStore();
            const isTooltipVisible = ref(false);
            const templatesLinkEnabled = computed(() => {
              return isExtraTemplateLinksExperimentEnabled() && settingsStore.isTemplatesEnabled;
            });
            onMounted(() => {
              nodeViewEventBus.on("runWorkflowButton:mouseenter", onShowTooltip);
              nodeViewEventBus.on("runWorkflowButton:mouseleave", onHideTooltip);
            });
            onBeforeUnmount(() => {
              nodeViewEventBus.off("runWorkflowButton:mouseenter", onShowTooltip);
              nodeViewEventBus.off("runWorkflowButton:mouseleave", onHideTooltip);
            });
            function onShowTooltip() {
              isTooltipVisible.value = true;
            }
            function onHideTooltip() {
              isTooltipVisible.value = false;
            }
            function onClick() {
              nodeCreatorStore.openNodeCreatorForTriggerNodes(NODE_CREATOR_OPEN_SOURCES.TRIGGER_PLACEHOLDER_BUTTON);
            }
            async function onClickTemplatesLink() {
              trackTemplatesClick(TemplateClickSource.emptyWorkflowLink);
              if (templatesStore.hasCustomTemplatesHost) {
                await router.push({
                  name: VIEWS.TEMPLATES
                });
                return;
              }
              if (templatesDataQualityStore.isFeatureEnabled()) {
                uiStore.openModal(EXPERIMENT_TEMPLATES_DATA_QUALITY_KEY);
                return;
              }
              window.open(templatesStore.websiteTemplateRepositoryURL, "_blank");
            }
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                ref: "container",
                class: normalizeClass(_ctx.$style.addNodes),
                "data-test-id": "canvas-add-button"
              }, [createVNode(unref(N8nTooltip_default), {
                placement: "top",
                visible: isTooltipVisible.value,
                disabled: unref(nodeCreatorStore).showScrim,
                "popper-class": _ctx.$style.tooltip,
                "show-after": 700
              }, {
                content: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("nodeView.canvasAddButton.addATriggerNodeBeforeExecuting")), 1)]),
                default: withCtx(() => [createBaseVNode("button", {
                  class: normalizeClass(_ctx.$style.button),
                  "data-test-id": "canvas-plus-button",
                  onClick: withModifiers(onClick, ["stop"])
                }, [createVNode(unref(N8nIcon_default), {
                  icon: "plus",
                  color: "foreground-xdark",
                  size: 40
                })], 2)]),
                _: 1
              }, 8, ["visible", "disabled", "popper-class"]), createBaseVNode("p", {
                class: normalizeClass(_ctx.$style.label)
              }, [createTextVNode(toDisplayString(unref(i18n).baseText("nodeView.canvasAddButton.addFirstStep")) + " ", 1), templatesLinkEnabled.value ? (openBlock(), createBlock(unref(N8nLink_default), {
                key: 0,
                underline: true,
                size: "small",
                "data-test-id": "canvas-template-link",
                onClick: onClickTemplatesLink
              }, {
                default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("nodeView.templateLink")), 1)]),
                _: 1
              })) : createCommentVNode("", true)], 2)], 2);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/CanvasNodeAddNodes.vue?vue&type=style&index=0&lang.module.scss
        addNodes = "_addNodes_i8qus_123";
        button$1 = "_button_i8qus_131";
        label$5 = "_label_i8qus_145";
        CanvasNodeAddNodes_vue_vue_type_style_index_0_lang_module_default = {
          addNodes,
          button: button$1,
          label: label$5
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/CanvasNodeAddNodes.vue
        cssModules$18 = {
          "$style": CanvasNodeAddNodes_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasNodeAddNodes_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasNodeAddNodes_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$18]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/CanvasNodeChoicePrompt.vue?vue&type=script&setup=true&lang.ts
        CanvasNodeChoicePrompt_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasNodeChoicePrompt",
          setup(__props) {
            const nodeCreatorStore = useNodeCreatorStore();
            const chatPanelStore = useChatPanelStore();
            const i18n = useI18n();
            const settingsStore = useSettingsStore();
            const templatesStore = useTemplatesStore();
            const router = useRouter();
            const uiStore = useUIStore();
            const templatesDataQualityStore = useTemplatesDataQualityStore();
            const isChatWindowOpen = computed(() => chatPanelStore.isOpen && chatPanelStore.isBuilderModeActive);
            const templatesLinkEnabled = computed(() => {
              return isExtraTemplateLinksExperimentEnabled() && settingsStore.isTemplatesEnabled;
            });
            const onAddFirstStepClick = () => {
              if (nodeCreatorStore.isCreateNodeActive) nodeCreatorStore.isCreateNodeActive = false;else nodeCreatorStore.openNodeCreatorForTriggerNodes(NODE_CREATOR_OPEN_SOURCES.TRIGGER_PLACEHOLDER_BUTTON);
            };
            async function onBuildWithAIClick() {
              await chatPanelStore.toggle({
                mode: "builder"
              });
            }
            async function onClickTemplatesLink() {
              trackTemplatesClick(TemplateClickSource.emptyWorkflowLink);
              if (templatesStore.hasCustomTemplatesHost) {
                await router.push({
                  name: VIEWS.TEMPLATES
                });
                return;
              }
              if (templatesDataQualityStore.isFeatureEnabled()) {
                uiStore.openModal(EXPERIMENT_TEMPLATES_DATA_QUALITY_KEY);
                return;
              }
              window.open(templatesStore.websiteTemplateRepositoryURL, "_blank");
            }
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                class: normalizeClass(_ctx.$style.choicePrompt),
                "data-test-id": "canvas-choice-prompt",
                onClick: _cache[0] || (_cache[0] = withModifiers(() => {}, ["stop"])),
                onMousedown: _cache[1] || (_cache[1] = withModifiers(() => {}, ["stop"]))
              }, [createBaseVNode("div", {
                class: normalizeClass(_ctx.$style.option)
              }, [createBaseVNode("div", {
                class: normalizeClass([_ctx.$style.selectedButtonHighlight, {
                  [_ctx.$style.highlighted]: unref(nodeCreatorStore).isCreateNodeActive
                }])
              }, [createBaseVNode("button", {
                class: normalizeClass(_ctx.$style.button),
                "data-test-id": "canvas-add-first-step-button",
                onMousedown: withModifiers(onAddFirstStepClick, ["stop", "prevent"])
              }, [createVNode(unref(N8nIcon_default), {
                icon: "plus",
                color: "foreground-xdark",
                size: 40
              })], 34)], 2), createBaseVNode("p", {
                class: normalizeClass(_ctx.$style.label)
              }, [createTextVNode(toDisplayString(unref(i18n).baseText("nodeView.canvasAddButton.addFirstStep")) + " ", 1), templatesLinkEnabled.value ? (openBlock(), createBlock(unref(N8nLink_default), {
                key: 0,
                underline: true,
                size: "small",
                "data-test-id": "canvas-template-link",
                onClick: onClickTemplatesLink
              }, {
                default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("nodeView.templateLink")), 1)]),
                _: 1
              })) : createCommentVNode("", true)], 2)], 2), createBaseVNode("div", {
                class: normalizeClass(_ctx.$style.orDivider)
              }, [createBaseVNode("span", {
                class: normalizeClass(_ctx.$style.orText)
              }, toDisplayString(unref(i18n).baseText("generic.or")), 3)], 2), createBaseVNode("div", {
                class: normalizeClass(_ctx.$style.option)
              }, [createBaseVNode("div", {
                class: normalizeClass([_ctx.$style.selectedButtonHighlight, {
                  [_ctx.$style.highlighted]: isChatWindowOpen.value
                }])
              }, [createBaseVNode("button", {
                class: normalizeClass([_ctx.$style.button]),
                "data-test-id": "canvas-build-with-ai-button",
                onMousedown: withModifiers(onBuildWithAIClick, ["stop", "prevent"])
              }, [createVNode(unref(N8nIcon_default), {
                icon: "wand-sparkles",
                color: "foreground-xdark",
                size: 40
              })], 34)], 2), createBaseVNode("p", {
                class: normalizeClass(_ctx.$style.label)
              }, toDisplayString(unref(i18n).baseText("aiAssistant.builder.canvasPrompt.buildWithAI")), 3)], 2)], 34);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/CanvasNodeChoicePrompt.vue?vue&type=style&index=0&lang.module.scss
        choicePrompt = "_choicePrompt_grxwq_123";
        option = "_option_grxwq_131";
        button = "_button_grxwq_138";
        selectedButtonHighlight = "_selectedButtonHighlight_grxwq_148";
        highlighted = "_highlighted_grxwq_151";
        label$4 = "_label_grxwq_155";
        orDivider = "_orDivider_grxwq_167";
        orText = "_orText_grxwq_175";
        CanvasNodeChoicePrompt_vue_vue_type_style_index_0_lang_module_default = {
          choicePrompt,
          option,
          button,
          selectedButtonHighlight,
          highlighted,
          label: label$4,
          orDivider,
          orText
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/CanvasNodeChoicePrompt.vue
        cssModules$17 = {
          "$style": CanvasNodeChoicePrompt_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasNodeChoicePrompt_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasNodeChoicePrompt_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$17]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/CanvasNodeRenderer.vue?vue&type=script&setup=true&lang.ts
        CanvasNodeRenderer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasNodeRenderer",
          setup(__props) {
            const node$1 = inject(CanvasNodeKey);
            const Render = () => {
              const renderType$1 = node$1?.data.value.render.type ?? CanvasNodeRenderType.Default;
              let Component;
              switch (renderType$1) {
                case CanvasNodeRenderType.StickyNote:
                  Component = CanvasNodeStickyNote_default;
                  break;
                case CanvasNodeRenderType.AddNodes:
                  Component = CanvasNodeAddNodes_default;
                  break;
                case CanvasNodeRenderType.ChoicePrompt:
                  Component = CanvasNodeChoicePrompt_default;
                  break;
                default:
                  Component = CanvasNodeDefault_default;
              }
              return h(Component, {
                "data-canvas-node-render-type": renderType$1
              });
            };
            return (_ctx, _cache) => {
              return openBlock(), createBlock(Render);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/CanvasNodeRenderer.vue
        CanvasNodeRenderer_default = CanvasNodeRenderer_vue_vue_type_script_setup_true_lang_default;
        CanvasHandleRectangle_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasHandleRectangle",
          props: {
            handleClasses: {
              default: void 0
            }
          },
          setup(__props) {
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                class: normalizeClass([_ctx.$style.rectangle, _ctx.handleClasses])
              }, null, 2);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/parts/CanvasHandleRectangle.vue?vue&type=style&index=0&lang.module.scss
        rectangle = "_rectangle_1o69r_123";
        CanvasHandleRectangle_vue_vue_type_style_index_0_lang_module_default = {
          rectangle
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/parts/CanvasHandleRectangle.vue
        cssModules$16 = {
          "$style": CanvasHandleRectangle_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasHandleRectangle_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasHandleRectangle_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$16]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/CanvasHandleMainInput.vue?vue&type=script&setup=true&lang.ts
        handleClasses$3 = "target";
        CanvasHandleMainInput_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasHandleMainInput",
          setup(__props) {
            const $style = useCssModule();
            const {
              label: label$7,
              isRequired
            } = useCanvasNodeHandle();
            const classes = computed(() => ({
              "canvas-node-handle-main-input": true,
              [$style.handle]: true,
              [$style.required]: isRequired.value
            }));
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                class: normalizeClass(classes.value)
              }, [createBaseVNode("div", {
                class: normalizeClass([unref($style).label])
              }, toDisplayString(unref(label$7)), 3), createVNode(CanvasHandleRectangle_default, {
                "handle-classes": handleClasses$3
              })], 2);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/CanvasHandleMainInput.vue?vue&type=style&index=0&lang.module.scss
        handle$4 = "_handle_7mf8f_123";
        label$3 = "_label_7mf8f_130";
        required$3 = "_required_7mf8f_145";
        CanvasHandleMainInput_vue_vue_type_style_index_0_lang_module_default = {
          handle: handle$4,
          label: label$3,
          required: required$3
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/CanvasHandleMainInput.vue
        cssModules$15 = {
          "$style": CanvasHandleMainInput_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasHandleMainInput_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasHandleMainInput_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$15]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/parts/CanvasHandleDot.vue?vue&type=script&setup=true&lang.ts
        CanvasHandleDot_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasHandleDot",
          props: {
            handleClasses: {
              default: void 0
            }
          },
          setup(__props) {
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                class: normalizeClass([_ctx.$style.dot, _ctx.handleClasses])
              }, null, 2);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/parts/CanvasHandleDot.vue?vue&type=style&index=0&lang.module.scss
        dot = "_dot_mkl47_123";
        CanvasHandleDot_vue_vue_type_style_index_0_lang_module_default = {
          dot
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/parts/CanvasHandleDot.vue
        cssModules$14 = {
          "$style": CanvasHandleDot_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasHandleDot_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasHandleDot_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$14]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/parts/CanvasHandlePlus.vue?vue&type=script&setup=true&lang.ts
        _hoisted_1$13 = ["viewBox"];
        _hoisted_2$4 = ["x1", "y1", "x2", "y2"];
        _hoisted_3$7 = ["transform"];
        CanvasHandlePlus_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasHandlePlus",
          props: {
            position: {
              default: "right"
            },
            handleClasses: {
              default: void 0
            },
            plusSize: {
              default: 24
            },
            lineSize: {
              default: 46
            },
            type: {
              default: "default"
            }
          },
          emits: ["click:plus"],
          setup(__props, {
            emit: __emit
          }) {
            const props = __props;
            const emit = __emit;
            const style = useCssModule();
            const classes = computed(() => ["canvas-handle-plus-wrapper", style.wrapper, style[props.position], style[props.type], props.handleClasses]);
            const viewBox = computed(() => {
              switch (props.position) {
                case "bottom":
                case "top":
                  return {
                    width: props.plusSize,
                    height: props.lineSize + props.plusSize
                  };
                default:
                  return {
                    width: props.lineSize + props.plusSize,
                    height: props.plusSize
                  };
              }
            });
            const styles = computed(() => ({
              width: `${viewBox.value.width}px`,
              height: `${viewBox.value.height}px`
            }));
            const linePosition = computed(() => {
              switch (props.position) {
                case "top":
                  return [[viewBox.value.width / 2, viewBox.value.height - props.lineSize + 1], [viewBox.value.width / 2, viewBox.value.height]];
                case "bottom":
                  return [[viewBox.value.width / 2, 0], [viewBox.value.width / 2, props.lineSize + 1]];
                case "left":
                  return [[viewBox.value.width - props.lineSize - 1, viewBox.value.height / 2], [viewBox.value.width, viewBox.value.height / 2]];
                default:
                  return [[0, viewBox.value.height / 2], [props.lineSize + 1, viewBox.value.height / 2]];
              }
            });
            const plusPosition = computed(() => {
              switch (props.position) {
                case "bottom":
                  return [0, viewBox.value.height - props.plusSize];
                case "top":
                  return [0, 0];
                case "left":
                  return [0, 0];
                default:
                  return [viewBox.value.width - props.plusSize, 0];
              }
            });
            function onClick(event) {
              emit("click:plus", event);
            }
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("svg", {
                "data-test-id": "canvas-handle-plus-wrapper",
                class: normalizeClass(classes.value),
                viewBox: `0 0 ${viewBox.value.width} ${viewBox.value.height}`,
                style: normalizeStyle(styles.value)
              }, [createBaseVNode("line", {
                class: normalizeClass([_ctx.handleClasses, _ctx.$style.line]),
                x1: linePosition.value[0][0],
                y1: linePosition.value[0][1],
                x2: linePosition.value[1][0],
                y2: linePosition.value[1][1],
                stroke: "var(--color--foreground--shade-2)",
                "stroke-width": "2"
              }, null, 10, _hoisted_2$4), createBaseVNode("g", {
                "data-test-id": "canvas-handle-plus",
                class: normalizeClass([_ctx.$style.plus, _ctx.handleClasses, "clickable"]),
                transform: `translate(${plusPosition.value[0]}, ${plusPosition.value[1]})`,
                onClick: withModifiers(onClick, ["stop"])
              }, [createBaseVNode("rect", {
                class: normalizeClass([_ctx.handleClasses, "clickable"]),
                x: "2",
                y: "2",
                width: "20",
                height: "20",
                stroke: "var(--color--foreground--shade-2)",
                "stroke-width": "2",
                rx: "4",
                fill: "var(--color--foreground--tint-2)"
              }, null, 2), _cache[0] || (_cache[0] = createBaseVNode("path", {
                stroke: "currentColor",
                "stroke-linecap": "round",
                "stroke-linejoin": "round",
                d: "M8 12h8m-4-4v8",
                class: "source clickable"
              }, null, -1))], 10, _hoisted_3$7)], 14, _hoisted_1$13);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/parts/CanvasHandlePlus.vue?vue&type=style&index=0&lang.module.scss
        wrapper = "_wrapper_1wtvd_123";
        right$1 = "_right_1wtvd_128";
        bottom$1 = "_bottom_1wtvd_131";
        secondary = "_secondary_1wtvd_134";
        line = "_line_1wtvd_134";
        plus = "_plus_1wtvd_137";
        success = "_success_1wtvd_143";
        CanvasHandlePlus_vue_vue_type_style_index_0_lang_module_default = {
          wrapper,
          right: right$1,
          bottom: bottom$1,
          secondary,
          line,
          plus,
          success
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/parts/CanvasHandlePlus.vue
        cssModules$13 = {
          "$style": CanvasHandlePlus_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasHandlePlus_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasHandlePlus_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$13]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/CanvasHandleMainOutput.vue?vue&type=script&setup=true&lang.ts
        handleClasses$2 = "source";
        CanvasHandleMainOutput_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasHandleMainOutput",
          emits: ["add"],
          setup(__props, {
            emit: __emit
          }) {
            const emit = __emit;
            const $style = useCssModule();
            const i18n = useI18n();
            const {
              render: render$5
            } = useCanvasNode();
            const {
              label: label$7,
              isConnected,
              isConnecting,
              isReadOnly,
              isRequired,
              runData: runData$1
            } = useCanvasNodeHandle();
            const classes = computed(() => ({
              "canvas-node-handle-main-output": true,
              [$style.handle]: true,
              [$style.connected]: isConnected.value,
              [$style.required]: isRequired.value
            }));
            const isHovered = ref(false);
            const renderOptions = computed(() => render$5.value.options);
            const runDataTotal = computed(() => runData$1.value?.total ?? 0);
            const runDataLabel$1 = computed(() => !isConnected.value && runData$1.value && runData$1.value.total > 0 ? i18n.baseText("ndv.output.items", {
              adjustToNumber: runData$1.value.total,
              interpolate: {
                count: String(runData$1.value.total)
              }
            }) : "");
            const isHandlePlusVisible = computed(() => !isConnecting.value || isHovered.value);
            const plusType = computed(() => runDataTotal.value > 0 ? "success" : "default");
            const plusLineSize = computed(() => ({
              small: 46,
              medium: 66,
              large: 80
            })[(runDataTotal.value > 0 ? "large" : renderOptions.value.outputs?.labelSize) ?? "small"]);
            const outputLabelClasses = computed(() => ({
              [$style.label]: true,
              [$style.outputLabel]: true
            }));
            const runDataLabelClasses = computed(() => ({
              [$style.label]: true,
              [$style.runDataLabel]: true
            }));
            function onMouseEnter() {
              isHovered.value = true;
            }
            function onMouseLeave() {
              isHovered.value = false;
            }
            function onClickAdd() {
              emit("add");
            }
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                class: normalizeClass(classes.value)
              }, [unref(label$7) ? (openBlock(), createElementBlock("div", {
                key: 0,
                class: normalizeClass(outputLabelClasses.value)
              }, toDisplayString(unref(label$7)), 3)) : createCommentVNode("", true), unref(runData$1) ? (openBlock(), createElementBlock("div", {
                key: 1,
                class: normalizeClass(runDataLabelClasses.value)
              }, toDisplayString(runDataLabel$1.value), 3)) : createCommentVNode("", true), createVNode(CanvasHandleDot_default, {
                "handle-classes": handleClasses$2
              }), createVNode(Transition, {
                name: "canvas-node-handle-main-output"
              }, {
                default: withCtx(() => [!unref(isConnected) && !unref(isReadOnly) ? withDirectives((openBlock(), createBlock(CanvasHandlePlus_default, {
                  key: 0,
                  "data-plus-type": plusType.value,
                  "line-size": plusLineSize.value,
                  "handle-classes": handleClasses$2,
                  type: plusType.value,
                  onMouseenter: onMouseEnter,
                  onMouseleave: onMouseLeave,
                  "onClick:plus": onClickAdd
                }, null, 8, ["data-plus-type", "line-size", "type"])), [[vShow, isHandlePlusVisible.value]]) : createCommentVNode("", true)]),
                _: 1
              })], 2);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/CanvasHandleMainOutput.vue?vue&type=style&index=0&lang.module.scss
        handle$3 = "_handle_ca2iu_123";
        connected = "_connected_ca2iu_129";
        label$2 = "_label_ca2iu_129";
        required$2 = "_required_ca2iu_143";
        outputLabel = "_outputLabel_ca2iu_148";
        runDataLabel = "_runDataLabel_ca2iu_158";
        CanvasHandleMainOutput_vue_vue_type_style_index_0_lang_module_default = {
          handle: handle$3,
          connected,
          label: label$2,
          required: required$2,
          outputLabel,
          runDataLabel
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/CanvasHandleMainOutput.vue
        cssModules$12 = {
          "$style": CanvasHandleMainOutput_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasHandleMainOutput_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasHandleMainOutput_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$12]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/parts/CanvasHandleDiamond.vue?vue&type=script&setup=true&lang.ts
        CanvasHandleDiamond_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasHandleDiamond",
          props: {
            handleClasses: {
              default: void 0
            }
          },
          setup(__props) {
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                class: normalizeClass([_ctx.$style.diamond, _ctx.handleClasses])
              }, null, 2);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/parts/CanvasHandleDiamond.vue?vue&type=style&index=0&lang.module.scss
        diamond = "_diamond_pdek7_123";
        CanvasHandleDiamond_vue_vue_type_style_index_0_lang_module_default = {
          diamond
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/parts/CanvasHandleDiamond.vue
        cssModules$11 = {
          "$style": CanvasHandleDiamond_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasHandleDiamond_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasHandleDiamond_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$11]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/CanvasHandleNonMainInput.vue?vue&type=script&setup=true&lang.ts
        handleClasses$1 = "target";
        CanvasHandleNonMainInput_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasHandleNonMainInput",
          emits: ["add"],
          setup(__props, {
            emit: __emit
          }) {
            const emit = __emit;
            const $style = useCssModule();
            const {
              label: label$7,
              isConnected,
              isConnecting,
              isRequired,
              maxConnections
            } = useCanvasNodeHandle();
            const classes = computed(() => ({
              "canvas-node-handle-non-main-input": true,
              [$style.handle]: true,
              [$style.required]: isRequired.value
            }));
            const isHandlePlusAvailable = computed(() => !isConnected.value || !maxConnections.value || maxConnections.value > 1);
            const isHandlePlusVisible = computed(() => !isConnecting.value || isHovered.value || !maxConnections.value || maxConnections.value > 1);
            const isHovered = ref(false);
            function onMouseEnter() {
              isHovered.value = true;
            }
            function onMouseLeave() {
              isHovered.value = false;
            }
            function onClickAdd() {
              emit("add");
            }
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                class: normalizeClass(classes.value)
              }, [createBaseVNode("div", {
                class: normalizeClass([unref($style).label])
              }, toDisplayString(unref(label$7)), 3), createVNode(CanvasHandleDiamond_default, {
                "handle-classes": handleClasses$1
              }), createVNode(Transition, {
                name: "canvas-node-handle-non-main-input"
              }, {
                default: withCtx(() => [isHandlePlusAvailable.value ? withDirectives((openBlock(), createBlock(CanvasHandlePlus_default, {
                  key: 0,
                  "handle-classes": handleClasses$1,
                  type: "secondary",
                  position: "bottom",
                  onMouseenter: onMouseEnter,
                  onMouseleave: onMouseLeave,
                  "onClick:plus": onClickAdd
                }, null, 512)), [[vShow, isHandlePlusVisible.value]]) : createCommentVNode("", true)]),
                _: 1
              })], 2);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/CanvasHandleNonMainInput.vue?vue&type=style&index=0&lang.module.scss
        handle$2 = "_handle_1q30k_123";
        label$1 = "_label_1q30k_130";
        required$1 = "_required_1q30k_144";
        CanvasHandleNonMainInput_vue_vue_type_style_index_0_lang_module_default = {
          handle: handle$2,
          label: label$1,
          required: required$1
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/CanvasHandleNonMainInput.vue
        cssModules$10 = {
          "$style": CanvasHandleNonMainInput_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasHandleNonMainInput_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasHandleNonMainInput_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$10]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/CanvasHandleNonMainOutput.vue?vue&type=script&setup=true&lang.ts
        handleClasses = "source";
        CanvasHandleNonMainOutput_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasHandleNonMainOutput",
          setup(__props) {
            const $style = useCssModule();
            const {
              label: label$7,
              isRequired
            } = useCanvasNodeHandle();
            const classes = computed(() => ({
              "canvas-node-handle-non-main-output": true,
              [$style.handle]: true,
              [$style.required]: isRequired.value
            }));
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                class: normalizeClass(classes.value)
              }, [createBaseVNode("div", {
                class: normalizeClass(unref($style).label)
              }, toDisplayString(unref(label$7)), 3), createVNode(CanvasHandleDiamond_default, {
                "handle-classes": handleClasses
              })], 2);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/CanvasHandleNonMainOutput.vue?vue&type=style&index=0&lang.module.scss
        handle$1 = "_handle_1argj_123";
        label = "_label_1argj_130";
        required = "_required_1argj_143";
        CanvasHandleNonMainOutput_vue_vue_type_style_index_0_lang_module_default = {
          handle: handle$1,
          label,
          required
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/render-types/CanvasHandleNonMainOutput.vue
        cssModules$9 = {
          "$style": CanvasHandleNonMainOutput_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasHandleNonMainOutput_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasHandleNonMainOutput_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$9]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/CanvasHandleRenderer.vue?vue&type=script&setup=true&lang.ts
        CanvasHandleRenderer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          inheritAttrs: false,
          __name: "CanvasHandleRenderer",
          props: {
            handleId: {},
            connectionsCount: {},
            isConnecting: {
              type: Boolean
            },
            position: {},
            offset: {},
            node: {},
            type: {},
            index: {},
            required: {
              type: Boolean
            },
            maxConnections: {},
            label: {},
            mode: {},
            isReadOnly: {
              type: Boolean
            },
            isValidConnection: {
              type: Function
            }
          },
          emits: ["add"],
          setup(__props, {
            emit: __emit
          }) {
            const props = __props;
            const emit = __emit;
            const style = useCssModule();
            const handleType = computed(() => props.mode === CanvasConnectionMode.Input ? "target" : "source");
            const handleClasses$4 = computed(() => [style.handle, style[props.type], style[props.mode]]);
            /**
            * Connectable
            */
            const connectionsLimitReached = computed(() => {
              return props.maxConnections && props.connectionsCount >= props.maxConnections;
            });
            const isConnectableStart = computed(() => {
              if (connectionsLimitReached.value) return false;
              return props.mode === CanvasConnectionMode.Output || props.type !== NodeConnectionTypes.Main;
            });
            const isConnectableEnd = computed(() => {
              if (connectionsLimitReached.value) return false;
              return props.mode === CanvasConnectionMode.Input || props.type !== NodeConnectionTypes.Main;
            });
            const isConnected = computed(() => props.connectionsCount > 0);
            /**
            * Run data
            */
            const {
              runDataOutputMap
            } = useCanvasNode();
            const runData$1 = computed(() => props.mode === CanvasConnectionMode.Output ? runDataOutputMap.value?.[props.type]?.[props.index] : void 0);
            /**
            * Render additional elements
            */
            const renderTypeClasses = computed(() => [style.renderType, style[props.position]]);
            const RenderType = () => {
              let Component;
              if (props.mode === CanvasConnectionMode.Output) {
                if (props.type === NodeConnectionTypes.Main) Component = CanvasHandleMainOutput_default;else Component = CanvasHandleNonMainOutput_default;
              } else if (props.type === NodeConnectionTypes.Main) Component = CanvasHandleMainInput_default;else Component = CanvasHandleNonMainInput_default;
              return Component ? h(Component) : null;
            };
            /**
            * Event bindings
            */
            function onAdd$2() {
              emit("add", props.handleId);
            }
            /**
            * Provide
            */
            const label$7 = toRef(props, "label");
            const isConnecting = toRef(props, "isConnecting");
            const isReadOnly = toRef(props, "isReadOnly");
            const mode = toRef(props, "mode");
            const type = toRef(props, "type");
            const index = toRef(props, "index");
            const isRequired = toRef(props, "required");
            const maxConnections = toRef(props, "maxConnections");
            provide(CanvasNodeHandleKey, {
              label: label$7,
              mode,
              type,
              index,
              runData: runData$1,
              isRequired,
              isConnected,
              isConnecting,
              isReadOnly,
              maxConnections
            });
            return (_ctx, _cache) => {
              return openBlock(), createBlock(unref(_sfc_main$f), mergeProps(_ctx.$attrs, {
                id: _ctx.handleId,
                class: handleClasses$4.value,
                type: handleType.value,
                position: _ctx.position,
                style: _ctx.offset,
                "connectable-start": isConnectableStart.value,
                "connectable-end": isConnectableEnd.value,
                "is-valid-connection": _ctx.isValidConnection
              }), {
                default: withCtx(() => [createVNode(RenderType, {
                  class: normalizeClass(renderTypeClasses.value),
                  "is-connected": isConnected.value,
                  "max-connections": maxConnections.value,
                  style: normalizeStyle(_ctx.offset),
                  label: label$7.value,
                  onAdd: onAdd$2
                }, null, 8, ["class", "is-connected", "max-connections", "style", "label"])]),
                _: 1
              }, 16, ["id", "class", "type", "position", "style", "connectable-start", "connectable-end", "is-valid-connection"]);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/CanvasHandleRenderer.vue?vue&type=style&index=0&lang.module.scss
        handle = "_handle_1mj65_123";
        inputs = "_inputs_1mj65_138";
        main = "_main_1mj65_138";
        renderType = "_renderType_1mj65_143";
        top = "_top_1mj65_143";
        right = "_right_1mj65_147";
        left = "_left_1mj65_151";
        bottom = "_bottom_1mj65_155";
        CanvasHandleRenderer_vue_vue_type_style_index_0_lang_module_default = {
          handle,
          inputs,
          main,
          renderType,
          top,
          right,
          left,
          bottom
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/handles/CanvasHandleRenderer.vue
        cssModules$8 = {
          "$style": CanvasHandleRenderer_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasHandleRenderer_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasHandleRenderer_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$8]]);
        position$2 = ref([0, 0]);
        target = ref();
        useContextMenu = () => {
          const uiStore = useUIStore();
          const isOpen = computed(() => target.value !== void 0);
          const targetNodeIds = computed(() => {
            if (!target.value) return [];
            const currentTarget = target.value;
            return currentTarget.source === "canvas" ? currentTarget.nodeIds : [currentTarget.nodeId];
          });
          const close = () => {
            target.value = void 0;
            position$2.value = [0, 0];
          };
          const open = (event, menuTarget) => {
            event.stopPropagation();
            if (isOpen.value && menuTarget.source === target.value?.source && menuTarget.nodeId === target.value?.nodeId) {
              close();
              return;
            }
            event.preventDefault();
            target.value = menuTarget;
            position$2.value = getMousePosition(event);
          };
          const actions$1 = useContextMenuItems(targetNodeIds);
          watch(() => uiStore.nodeViewOffsetPosition, close);
          return {
            isOpen,
            position: position$2,
            target,
            actions: computed(() => isOpen.value ? actions$1.value : []),
            targetNodeIds,
            open,
            close
          };
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/parts/CanvasNodeTrigger.vue?vue&type=script&setup=true&lang.ts
        CanvasNodeTrigger_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasNodeTrigger",
          props: {
            name: {},
            type: {},
            hovered: {
              type: Boolean
            },
            disabled: {
              type: Boolean
            },
            readOnly: {
              type: Boolean
            },
            class: {},
            isExperimentalNdvActive: {
              type: Boolean
            }
          },
          setup(__props) {
            const style = useCssModule();
            const containerClass = computed(() => ({
              [__props.class ?? ""]: true,
              [style.container]: true,
              [style.interactive]: !__props.disabled && !__props.readOnly,
              [style.hovered]: !!__props.hovered,
              [style.isExperimentalNdvActive]: __props.isExperimentalNdvActive
            }));
            const router = useRouter();
            const i18n = useI18n();
            const workflowsStore = useWorkflowsStore();
            const logsStore = useLogsStore();
            const {
              runEntireWorkflow
            } = useRunWorkflow({
              router
            });
            const {
              startChat
            } = useCanvasOperations();
            const isChatOpen = computed(() => logsStore.isOpen);
            const isExecuting = computed(() => workflowsStore.isWorkflowRunning);
            const testId = computed(() => `execute-workflow-button-${__props.name}`);
            async function handleClickExecute() {
              workflowsStore.setSelectedTriggerNodeName(__props.name);
              await runEntireWorkflow("node", __props.name);
            }
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                class: normalizeClass(containerClass.value),
                onClick: _cache[2] || (_cache[2] = withModifiers(() => {}, ["stop", "prevent"])),
                onMousedown: _cache[3] || (_cache[3] = withModifiers(() => {}, ["stop", "prevent"]))
              }, [createBaseVNode("div", null, [createBaseVNode("div", {
                class: normalizeClass(_ctx.$style.bolt)
              }, [createVNode(unref(N8nIcon_default), {
                icon: "bolt-filled",
                size: "large"
              })], 2), !_ctx.readOnly ? (openBlock(), createElementBlock(Fragment, {
                key: 0
              }, [_ctx.type === unref("@n8n/n8n-nodes-langchain.chatTrigger") ? (openBlock(), createElementBlock(Fragment, {
                key: 0
              }, [isChatOpen.value ? (openBlock(), createBlock(unref(N8nButton_default), {
                key: 0,
                type: "secondary",
                icon: "message-circle",
                size: "large",
                disabled: isExecuting.value,
                "data-test-id": testId.value,
                label: unref(i18n).baseText("chat.hide"),
                onClickCapture: _cache[0] || (_cache[0] = $event => unref(logsStore).toggleOpen(false))
              }, null, 8, ["disabled", "data-test-id", "label"])) : (openBlock(), createBlock(KeyboardShortcutTooltip_default, {
                key: 1,
                label: unref(i18n).baseText("chat.open"),
                shortcut: {
                  keys: ["c"]
                }
              }, {
                default: withCtx(() => [createVNode(unref(N8nButton_default), {
                  type: "primary",
                  icon: "message-circle",
                  size: "large",
                  disabled: isExecuting.value,
                  "data-test-id": testId.value,
                  label: unref(i18n).baseText("chat.open"),
                  onClickCapture: _cache[1] || (_cache[1] = $event => unref(startChat)("node"))
                }, null, 8, ["disabled", "data-test-id", "label"])]),
                _: 1
              }, 8, ["label"]))], 64)) : (openBlock(), createBlock(unref(N8nButton_default), {
                key: 1,
                type: "primary",
                icon: "flask-conical",
                size: "large",
                disabled: isExecuting.value,
                "data-test-id": testId.value,
                label: unref(i18n).baseText("nodeView.runButtonText.executeWorkflow"),
                onClickCapture: handleClickExecute
              }, null, 8, ["disabled", "data-test-id", "label"]))], 64)) : createCommentVNode("", true)])], 34);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/parts/CanvasNodeTrigger.vue?vue&type=style&index=0&lang.module.scss
        container = "_container_19xnh_123";
        interactive = "_interactive_19xnh_147";
        hovered = "_hovered_19xnh_147";
        isExperimentalNdvActive$1 = "_isExperimentalNdvActive_19xnh_152";
        bolt = "_bolt_19xnh_156";
        CanvasNodeTrigger_vue_vue_type_style_index_0_lang_module_default = {
          container,
          interactive,
          hovered,
          isExperimentalNdvActive: isExperimentalNdvActive$1,
          bolt
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/render-types/parts/CanvasNodeTrigger.vue
        cssModules$7 = {
          "$style": CanvasNodeTrigger_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasNodeTrigger_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasNodeTrigger_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$7]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/CanvasNode.vue?vue&type=script&setup=true&lang.ts
        import_isEqual = /* @__PURE__ */__toESM(require_isEqual());
        _hoisted_1$12 = ["data-test-id", "data-node-name", "data-node-type"];
        CanvasNode_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasNode",
          props: {
            id: {},
            type: {},
            selected: {
              type: Boolean
            },
            connectable: {
              type: [Boolean, Number, String, Function]
            },
            position: {},
            dimensions: {},
            label: {},
            isValidTargetPos: {
              type: Function
            },
            isValidSourcePos: {
              type: Function
            },
            parent: {},
            parentNodeId: {},
            dragging: {
              type: Boolean
            },
            resizing: {
              type: Boolean
            },
            zIndex: {},
            targetPosition: {},
            sourcePosition: {},
            dragHandle: {},
            data: {},
            events: {},
            readOnly: {
              type: Boolean
            },
            eventBus: {},
            hovered: {
              type: Boolean
            },
            nearbyHovered: {
              type: Boolean
            }
          },
          emits: ["add", "delete", "run", "select", "toggle", "activate", "deactivate", "open:contextmenu", "update", "update:inputs", "update:outputs", "move", "focus"],
          setup(__props, {
            emit: __emit
          }) {
            const slots = useSlots();
            const emit = __emit;
            const style = useCssModule();
            const props = __props;
            const contextMenu$1 = useContextMenu();
            const {
              connectingHandle,
              isExperimentalNdvActive: isExperimentalNdvActive$3
            } = useCanvas();
            const nodeClasses = ref([]);
            const inputs$1 = computed(() => props.data.inputs);
            const outputs = computed(() => props.data.outputs);
            const connections = computed(() => props.data.connections);
            const {
              mainInputs,
              nonMainInputs,
              requiredNonMainInputs,
              mainOutputs,
              nonMainOutputs,
              isValidConnection
            } = useNodeConnections({
              inputs: inputs$1,
              outputs,
              connections
            });
            const isDisabled = computed(() => props.data.disabled);
            const classes = computed(() => ({
              [style.canvasNode]: true,
              [style.showToolbar]: showToolbar$1.value,
              hovered: props.hovered,
              selected: props.selected,
              ...Object.fromEntries([...nodeClasses.value].map(c => [c, true]))
            }));
            const renderType$1 = computed(() => props.data.render.type);
            const dataTestId = computed(() => [CanvasNodeRenderType.StickyNote, CanvasNodeRenderType.AddNodes, CanvasNodeRenderType.ChoicePrompt].includes(renderType$1.value) ? void 0 : "canvas-node");
            /**
            * Event bus
            */
            const canvasNodeEventBus = ref(createEventBus());
            function emitCanvasNodeEvent(event) {
              if (event.ids.includes(props.id) && canvasNodeEventBus.value) canvasNodeEventBus.value.emit(event.action, event.payload);
            }
            /**
            * Inputs
            */
            const nonMainInputsWithSpacer = computed(() => insertSpacersBetweenEndpoints(nonMainInputs.value, requiredNonMainInputs.value.length));
            const mappedInputs = computed(() => {
              return [...mainInputs.value.map(mainInputsMappingFn), ...nonMainInputsWithSpacer.value.map(nonMainInputsMappingFn)].filter(endpoint => !!endpoint);
            });
            /**
            * Outputs
            */
            const mappedOutputs = computed(() => {
              return [...mainOutputs.value.map(mainOutputsMappingFn), ...nonMainOutputs.value.map(nonMainOutputsMappingFn)].filter(endpoint => !!endpoint);
            });
            /**
            * Endpoints
            */
            const createEndpointMappingFn = ({
              mode,
              position: position$3,
              offsetAxis
            }) => (endpoint, index, endpoints) => {
              if (!endpoint) return;
              const handleId = createCanvasConnectionHandleString({
                mode,
                type: endpoint.type,
                index: endpoint.index
              });
              const handleType = mode === CanvasConnectionMode.Input ? "target" : "source";
              const connectionsCount = connections.value[mode][endpoint.type]?.[endpoint.index]?.length ?? 0;
              const isConnecting = connectingHandle.value?.nodeId === props.id && connectingHandle.value?.handleType === handleType && connectingHandle.value?.handleId === handleId;
              const offsetValue = position$3 === Position.Bottom ? `${40 + 16 * (3 * index)}px` : isExperimentalNdvActive$3.value && endpoints.length === 1 ? `${(1 + index) * (16 * 1.5)}px` : `${100 / (endpoints.length + 1) * (index + 1)}%`;
              return {
                ...endpoint,
                handleId,
                connectionsCount,
                isConnecting,
                position: position$3,
                offset: {
                  [offsetAxis]: offsetValue
                }
              };
            };
            const mainInputsMappingFn = createEndpointMappingFn({
              mode: CanvasConnectionMode.Input,
              position: Position.Left,
              offsetAxis: "top"
            });
            const nonMainInputsMappingFn = createEndpointMappingFn({
              mode: CanvasConnectionMode.Input,
              position: Position.Bottom,
              offsetAxis: "left"
            });
            const mainOutputsMappingFn = createEndpointMappingFn({
              mode: CanvasConnectionMode.Output,
              position: Position.Right,
              offsetAxis: "top"
            });
            const nonMainOutputsMappingFn = createEndpointMappingFn({
              mode: CanvasConnectionMode.Output,
              position: Position.Top,
              offsetAxis: "left"
            });
            /**
            * Events
            */
            function onAdd$2(handle$5) {
              emit("add", props.id, handle$5);
            }
            function onDelete() {
              emit("delete", props.id);
            }
            function onRun() {
              emit("run", props.id);
            }
            function onDisabledToggle() {
              emit("toggle", props.id);
            }
            function onActivate(id$2, event) {
              emit("activate", id$2, event);
            }
            function onDeactivate() {
              emit("deactivate", props.id);
            }
            function onOpenContextMenuFromToolbar(event) {
              emit("open:contextmenu", props.id, event, "node-button");
            }
            function onOpenContextMenuFromNode(event) {
              emit("open:contextmenu", props.id, event, "node-right-click");
            }
            function onUpdate(parameters) {
              emit("update", props.id, parameters);
            }
            function onMove(position$3) {
              emit("move", props.id, position$3);
            }
            function onFocus(id$2) {
              emit("focus", id$2);
            }
            function onUpdateClass({
              className,
              add = true
            }) {
              nodeClasses.value = add ? [...new Set([...nodeClasses.value, className])] : nodeClasses.value.filter(c => c !== className);
            }
            /**
            * Provide
            */
            const id$1 = toRef(props, "id");
            const data = toRef(props, "data");
            const label$7 = toRef(props, "label");
            const selected$3 = toRef(props, "selected");
            const readOnly = toRef(props, "readOnly");
            provide(CanvasNodeKey, {
              id: id$1,
              data,
              label: label$7,
              selected: selected$3,
              readOnly,
              eventBus: canvasNodeEventBus
            });
            const hasToolbar = computed(() => ![CanvasNodeRenderType.AddNodes, CanvasNodeRenderType.ChoicePrompt].includes(renderType$1.value));
            const showToolbar$1 = computed(() => {
              const target$1 = contextMenu$1.target.value;
              return contextMenu$1.isOpen && target$1?.source === "node-button" && target$1.nodeId === id$1.value;
            });
            /**
            * Lifecycle
            */
            watch(() => props.selected, value => {
              emit("select", props.id, value);
            });
            watch(inputs$1, (newValue, oldValue) => {
              if (!(0, import_isEqual.default)(newValue, oldValue)) emit("update:inputs", props.id);
            });
            watch(outputs, (newValue, oldValue) => {
              if (!(0, import_isEqual.default)(newValue, oldValue)) emit("update:outputs", props.id);
            });
            onMounted(() => {
              props.eventBus?.on("nodes:action", emitCanvasNodeEvent);
              canvasNodeEventBus.value?.on("update:node:class", onUpdateClass);
            });
            onBeforeUnmount(() => {
              props.eventBus?.off("nodes:action", emitCanvasNodeEvent);
              canvasNodeEventBus.value?.off("update:node:class", onUpdateClass);
            });
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                class: normalizeClass(classes.value),
                "data-test-id": dataTestId.value,
                "data-node-name": data.value.name,
                "data-node-type": data.value.type
              }, [(openBlock(true), createElementBlock(Fragment, null, renderList(mappedOutputs.value, source => {
                return openBlock(), createBlock(CanvasHandleRenderer_default, mergeProps({
                  key: `${source.handleId}(${source.index + 1}/${mappedOutputs.value.length})`,
                  ref_for: true
                }, source, {
                  mode: unref(CanvasConnectionMode).Output,
                  "is-read-only": readOnly.value,
                  "is-valid-connection": unref(isValidConnection),
                  "data-node-name": data.value.name,
                  "data-test-id": "canvas-node-output-handle",
                  "data-index": source.index,
                  "data-connection-type": source.type,
                  onAdd: onAdd$2
                }), null, 16, ["mode", "is-read-only", "is-valid-connection", "data-node-name", "data-index", "data-connection-type"]);
              }), 128)), (openBlock(true), createElementBlock(Fragment, null, renderList(mappedInputs.value, target$1 => {
                return openBlock(), createBlock(CanvasHandleRenderer_default, mergeProps({
                  key: `${target$1.handleId}(${target$1.index + 1}/${mappedInputs.value.length})`,
                  ref_for: true
                }, target$1, {
                  mode: unref(CanvasConnectionMode).Input,
                  "is-read-only": readOnly.value,
                  "is-valid-connection": unref(isValidConnection),
                  "data-test-id": "canvas-node-input-handle",
                  "data-index": target$1.index,
                  "data-connection-type": target$1.type,
                  "data-node-name": data.value.name,
                  onAdd: onAdd$2
                }), null, 16, ["mode", "is-read-only", "is-valid-connection", "data-index", "data-connection-type", "data-node-name"]);
              }), 128)), slots.toolbar ? renderSlot(_ctx.$slots, "toolbar", {
                key: 0,
                inputs: unref(mainInputs),
                outputs: unref(mainOutputs),
                data: data.value
              }) : hasToolbar.value ? (openBlock(), createBlock(CanvasNodeToolbar_default, {
                key: 1,
                "data-test-id": "canvas-node-toolbar",
                "read-only": readOnly.value,
                class: normalizeClass(_ctx.$style.canvasNodeToolbar),
                "show-status-icons": unref(isExperimentalNdvActive$3),
                "items-class": _ctx.$style.canvasNodeToolbarItems,
                onDelete,
                onToggle: onDisabledToggle,
                onRun,
                onUpdate,
                "onOpen:contextmenu": onOpenContextMenuFromToolbar,
                onFocus
              }, null, 8, ["read-only", "class", "show-status-icons", "items-class"])) : createCommentVNode("", true), createVNode(CanvasNodeRenderer_default, {
                onActivate,
                onDeactivate,
                onMove,
                onUpdate,
                "onOpen:contextmenu": onOpenContextMenuFromNode,
                onDelete
              }), props.data.render.type === unref(CanvasNodeRenderType).Default && props.data.render.options.trigger ? (openBlock(), createBlock(CanvasNodeTrigger_default, {
                key: 2,
                name: data.value.name,
                type: data.value.type,
                hovered: _ctx.nearbyHovered,
                disabled: isDisabled.value,
                "read-only": readOnly.value,
                class: normalizeClass(_ctx.$style.trigger),
                "is-experimental-ndv-active": unref(isExperimentalNdvActive$3)
              }, null, 8, ["name", "type", "hovered", "disabled", "read-only", "class", "is-experimental-ndv-active"])) : createCommentVNode("", true)], 10, _hoisted_1$12);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/CanvasNode.vue?vue&type=style&index=0&lang.module.scss
        canvasNode = "_canvasNode_1k8iq_123";
        canvasNodeToolbarItems = "_canvasNodeToolbarItems_1k8iq_123";
        trigger = "_trigger_1k8iq_127";
        showToolbar = "_showToolbar_1k8iq_127";
        canvasNodeToolbar = "_canvasNodeToolbar_1k8iq_123";
        CanvasNode_vue_vue_type_style_index_0_lang_module_default = {
          canvasNode,
          canvasNodeToolbarItems,
          trigger,
          showToolbar,
          canvasNodeToolbar
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/nodes/CanvasNode.vue
        cssModules$6 = {
          "$style": CanvasNode_vue_vue_type_style_index_0_lang_module_default
        };
        _export("a", CanvasNode_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasNode_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$6]])); //#endregion
        //#region src/features/workflows/canvas/components/elements/background/CanvasBackgroundStripedPattern.vue?vue&type=script&setup=true&lang.ts
        _hoisted_1$11 = ["id", "x", "y", "width", "height", "patternTransform"];
        _hoisted_2$3 = ["d", "stroke-width"];
        CanvasBackgroundStripedPattern_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasBackgroundStripedPattern",
          props: {
            id: {},
            x: {},
            y: {},
            zoom: {}
          },
          setup(__props) {
            /**
            * @see https://github.com/bcakmakoglu/vue-flow/blob/master/packages/background/src/Background.vue
            */
            const props = __props;
            const scaledGap = computed(() => 20 * props.zoom || 1);
            const patternOffset = computed(() => scaledGap.value / 2);
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("pattern", {
                id: _ctx.id,
                patternUnits: "userSpaceOnUse",
                x: _ctx.x % scaledGap.value,
                y: _ctx.y % scaledGap.value,
                width: scaledGap.value,
                height: scaledGap.value,
                patternTransform: `rotate(135) translate(-${patternOffset.value},-${patternOffset.value})`
              }, [createBaseVNode("path", {
                d: `M0 ${scaledGap.value / 2} H${scaledGap.value}`,
                "stroke-width": scaledGap.value / 2
              }, null, 8, _hoisted_2$3)], 8, _hoisted_1$11);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/background/CanvasBackgroundStripedPattern.vue
        CanvasBackgroundStripedPattern_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasBackgroundStripedPattern_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-c74a9681"]]); //#endregion
        //#region ../../../node_modules/.pnpm/@vue-flow+background@1.3.2_@vue-flow+core@1.48.0_vue@3.5.13_typescript@5.9.2___vue@3.5.13_typescript@5.9.2_/node_modules/@vue-flow/background/dist/vue-flow-background.mjs
        BackgroundVariant = /* @__PURE__ */(BackgroundVariant2 => {
          BackgroundVariant2["Lines"] = "lines";
          BackgroundVariant2["Dots"] = "dots";
          return BackgroundVariant2;
        })(BackgroundVariant || {});
        LinePattern = function ({
          dimensions,
          size: size$1,
          color: color$2
        }) {
          return h("path", {
            "stroke": color$2,
            "stroke-width": size$1,
            "d": `M${dimensions[0] / 2} 0 V${dimensions[1]} M0 ${dimensions[1] / 2} H${dimensions[0]}`
          });
        };
        DotPattern = function ({
          radius,
          color: color$2
        }) {
          return h("circle", {
            cx: radius,
            cy: radius,
            r: radius,
            fill: color$2
          });
        };
        BackgroundVariant.Lines, BackgroundVariant.Dots;
        DefaultBgColors = {
          [BackgroundVariant.Dots]: "#81818a",
          [BackgroundVariant.Lines]: "#eee"
        };
        _hoisted_1$9 = ["id", "x", "y", "width", "height", "patternTransform"];
        _hoisted_2$2 = {
          key: 2,
          height: "100",
          width: "100"
        };
        _hoisted_3$6 = ["fill"];
        _hoisted_4 = ["x", "y", "fill"];
        _sfc_main$5 = /* @__PURE__ */defineComponent({
          name: "Background",
          compatConfig: {
            MODE: 3
          },
          props: {
            id: {},
            variant: {
              default: () => BackgroundVariant.Dots
            },
            gap: {
              default: 20
            },
            size: {
              default: 1
            },
            lineWidth: {
              default: 1
            },
            patternColor: {},
            color: {},
            bgColor: {},
            height: {
              default: 100
            },
            width: {
              default: 100
            },
            x: {
              default: 0
            },
            y: {
              default: 0
            },
            offset: {
              default: 0
            }
          },
          setup(__props) {
            const {
              id: vueFlowId,
              viewport
            } = useVueFlow();
            const background = computed(() => {
              const zoom$1 = viewport.value.zoom;
              const [gapX, gapY] = Array.isArray(__props.gap) ? __props.gap : [__props.gap, __props.gap];
              const scaledGap = [gapX * zoom$1 || 1, gapY * zoom$1 || 1];
              const scaledSize = __props.size * zoom$1;
              const [offsetX, offsetY] = Array.isArray(__props.offset) ? __props.offset : [__props.offset, __props.offset];
              return {
                scaledGap,
                offset: [offsetX * zoom$1 || 1 + scaledGap[0] / 2, offsetY * zoom$1 || 1 + scaledGap[1] / 2],
                size: scaledSize
              };
            });
            const patternId = toRef(() => `pattern-${vueFlowId}${__props.id ? `-${__props.id}` : ""}`);
            const patternColor = toRef(() => __props.color || __props.patternColor || DefaultBgColors[__props.variant || BackgroundVariant.Dots]);
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("svg", {
                class: "vue-flow__background vue-flow__container",
                style: normalizeStyle({
                  height: `${_ctx.height > 100 ? 100 : _ctx.height}%`,
                  width: `${_ctx.width > 100 ? 100 : _ctx.width}%`
                })
              }, [renderSlot(_ctx.$slots, "pattern-container", {
                id: patternId.value
              }, () => [createBaseVNode("pattern", {
                id: patternId.value,
                x: unref(viewport).x % background.value.scaledGap[0],
                y: unref(viewport).y % background.value.scaledGap[1],
                width: background.value.scaledGap[0],
                height: background.value.scaledGap[1],
                patternTransform: `translate(-${background.value.offset[0]},-${background.value.offset[1]})`,
                patternUnits: "userSpaceOnUse"
              }, [renderSlot(_ctx.$slots, "pattern", {}, () => [_ctx.variant === unref(BackgroundVariant).Lines ? (openBlock(), createBlock(unref(LinePattern), {
                key: 0,
                size: _ctx.lineWidth,
                color: patternColor.value,
                dimensions: background.value.scaledGap
              }, null, 8, ["size", "color", "dimensions"])) : _ctx.variant === unref(BackgroundVariant).Dots ? (openBlock(), createBlock(unref(DotPattern), {
                key: 1,
                color: patternColor.value,
                radius: background.value.size / 2
              }, null, 8, ["color", "radius"])) : createCommentVNode("", true), _ctx.bgColor ? (openBlock(), createElementBlock("svg", _hoisted_2$2, [createBaseVNode("rect", {
                width: "100%",
                height: "100%",
                fill: _ctx.bgColor
              }, null, 8, _hoisted_3$6)])) : createCommentVNode("", true)])], 8, _hoisted_1$9)]), createBaseVNode("rect", {
                x: _ctx.x,
                y: _ctx.y,
                width: "100%",
                height: "100%",
                fill: `url(#${patternId.value})`
              }, null, 8, _hoisted_4), renderSlot(_ctx.$slots, "default", {
                id: patternId.value
              })], 4);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/background/CanvasBackground.vue?vue&type=script&setup=true&lang.ts
        CanvasBackground_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasBackground",
          props: {
            striped: {
              type: Boolean
            },
            viewport: {}
          },
          setup(__props) {
            return (_ctx, _cache) => {
              return openBlock(), createBlock(unref(_sfc_main$5), {
                "data-test-id": "canvas-background",
                "pattern-color": "var(--canvas--dot--color)",
                gap: unref(16)
              }, createSlots({
                _: 2
              }, [_ctx.striped ? {
                name: "pattern-container",
                fn: withCtx(patternProps => [createVNode(CanvasBackgroundStripedPattern_default, {
                  id: patternProps.id,
                  "data-test-id": "canvas-background-striped-pattern",
                  x: _ctx.viewport.x,
                  y: _ctx.viewport.y,
                  zoom: _ctx.viewport.zoom
                }, null, 8, ["id", "x", "y", "zoom"])]),
                key: "0"
              } : void 0]), 1032, ["gap"]);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/background/CanvasBackground.vue
        _export("i", CanvasBackground_default = CanvasBackground_vue_vue_type_script_setup_true_lang_default); //#endregion
        //#region src/features/shared/contextMenu/components/ContextMenu.vue?vue&type=script&setup=true&lang.ts
        ContextMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "ContextMenu",
          emits: ["action"],
          setup(__props, {
            emit: __emit
          }) {
            const contextMenu$1 = useContextMenu();
            const {
              position: position$3,
              isOpen,
              actions: actions$1,
              target: target$1
            } = contextMenu$1;
            const dropdown = ref();
            const emit = __emit;
            const {
              APP_Z_INDEXES
            } = useStyles();
            watch(isOpen, () => {
              if (isOpen) dropdown.value?.open();else dropdown.value?.close();
            }, {
              flush: "post"
            });
            function onActionSelect(item) {
              emit("action", item, contextMenu$1.targetNodeIds.value);
            }
            function onVisibleChange(open) {
              if (!open) contextMenu$1.close();
            }
            return (_ctx, _cache) => {
              return unref(isOpen) ? (openBlock(), createBlock(Teleport, {
                key: 0,
                to: "body"
              }, [createBaseVNode("div", {
                class: normalizeClass(_ctx.$style.contextMenu),
                style: normalizeStyle({
                  left: `${unref(position$3)[0]}px`,
                  top: `${unref(position$3)[1]}px`,
                  zIndex: unref(APP_Z_INDEXES).CONTEXT_MENU
                })
              }, [createVNode(unref(N8nActionDropdown_default), {
                ref_key: "dropdown",
                ref: dropdown,
                items: unref(actions$1),
                placement: "bottom-start",
                "data-test-id": "context-menu",
                "hide-arrow": unref(target$1)?.source !== "node-button",
                teleported: false,
                onSelect: onActionSelect,
                onVisibleChange
              }, {
                activator: withCtx(() => [createBaseVNode("div", {
                  class: normalizeClass(_ctx.$style.activator)
                }, null, 2)]),
                _: 1
              }, 8, ["items", "hide-arrow"])], 6)])) : createCommentVNode("", true);
            };
          }
        }); //#endregion
        //#region src/features/shared/contextMenu/components/ContextMenu.vue?vue&type=style&index=0&lang.module.scss
        contextMenu = "_contextMenu_12fz3_123";
        activator = "_activator_12fz3_127";
        ContextMenu_vue_vue_type_style_index_0_lang_module_default = {
          contextMenu,
          activator
        }; //#endregion
        //#region src/features/shared/contextMenu/components/ContextMenu.vue
        cssModules$5 = {
          "$style": ContextMenu_vue_vue_type_style_index_0_lang_module_default
        };
        ContextMenu_default = /* @__PURE__ */__plugin_vue_export_helper_default(ContextMenu_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$5]]); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/graph.js
        require_graph = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/graph.js": (exports, module) => {
            var DEFAULT_EDGE_NAME = "\0";
            var GRAPH_NODE = "\0";
            var EDGE_KEY_DELIM = "";
            var Graph$10 = class {
              _isDirected = true;
              _isMultigraph = false;
              _isCompound = false;
              _label;
              _defaultNodeLabelFn = () => void 0;
              _defaultEdgeLabelFn = () => void 0;
              _nodes = {};
              _in = {};
              _preds = {};
              _out = {};
              _sucs = {};
              _edgeObjs = {};
              _edgeLabels = {};
              _nodeCount = 0;
              _edgeCount = 0;
              _parent;
              _children;
              constructor(opts) {
                if (opts) {
                  this._isDirected = Object.hasOwn(opts, "directed") ? opts.directed : true;
                  this._isMultigraph = Object.hasOwn(opts, "multigraph") ? opts.multigraph : false;
                  this._isCompound = Object.hasOwn(opts, "compound") ? opts.compound : false;
                }
                if (this._isCompound) {
                  this._parent = {};
                  this._children = {};
                  this._children[GRAPH_NODE] = {};
                }
              }
              /**
              * Whether graph was created with 'directed' flag set to true or not.
              */
              isDirected() {
                return this._isDirected;
              }
              /**
              * Whether graph was created with 'multigraph' flag set to true or not.
              */
              isMultigraph() {
                return this._isMultigraph;
              }
              /**
              * Whether graph was created with 'compound' flag set to true or not.
              */
              isCompound() {
                return this._isCompound;
              }
              /**
              * Sets the label of the graph.
              */
              setGraph(label$7) {
                this._label = label$7;
                return this;
              }
              /**
              * Gets the graph label.
              */
              graph() {
                return this._label;
              }
              /**
              * Sets the default node label. If newDefault is a function, it will be
              * invoked ach time when setting a label for a node. Otherwise, this label
              * will be assigned as default label in case if no label was specified while
              * setting a node.
              * Complexity: O(1).
              */
              setDefaultNodeLabel(newDefault) {
                this._defaultNodeLabelFn = newDefault;
                if (typeof newDefault !== "function") this._defaultNodeLabelFn = () => newDefault;
                return this;
              }
              /**
              * Gets the number of nodes in the graph.
              * Complexity: O(1).
              */
              nodeCount() {
                return this._nodeCount;
              }
              /**
              * Gets all nodes of the graph. Note, the in case of compound graph subnodes are
              * not included in list.
              * Complexity: O(1).
              */
              nodes() {
                return Object.keys(this._nodes);
              }
              /**
              * Gets list of nodes without in-edges.
              * Complexity: O(|V|).
              */
              sources() {
                var self = this;
                return this.nodes().filter(v => Object.keys(self._in[v]).length === 0);
              }
              /**
              * Gets list of nodes without out-edges.
              * Complexity: O(|V|).
              */
              sinks() {
                var self = this;
                return this.nodes().filter(v => Object.keys(self._out[v]).length === 0);
              }
              /**
              * Invokes setNode method for each node in names list.
              * Complexity: O(|names|).
              */
              setNodes(vs, value) {
                var args = arguments;
                var self = this;
                vs.forEach(function (v) {
                  if (args.length > 1) self.setNode(v, value);else self.setNode(v);
                });
                return this;
              }
              /**
              * Creates or updates the value for the node v in the graph. If label is supplied
              * it is set as the value for the node. If label is not supplied and the node was
              * created by this call then the default node label will be assigned.
              * Complexity: O(1).
              */
              setNode(v, value) {
                if (Object.hasOwn(this._nodes, v)) {
                  if (arguments.length > 1) this._nodes[v] = value;
                  return this;
                }
                this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);
                if (this._isCompound) {
                  this._parent[v] = GRAPH_NODE;
                  this._children[v] = {};
                  this._children[GRAPH_NODE][v] = true;
                }
                this._in[v] = {};
                this._preds[v] = {};
                this._out[v] = {};
                this._sucs[v] = {};
                ++this._nodeCount;
                return this;
              }
              /**
              * Gets the label of node with specified name.
              * Complexity: O(|V|).
              */
              node(v) {
                return this._nodes[v];
              }
              /**
              * Detects whether graph has a node with specified name or not.
              */
              hasNode(v) {
                return Object.hasOwn(this._nodes, v);
              }
              /**
              * Remove the node with the name from the graph or do nothing if the node is not in
              * the graph. If the node was removed this function also removes any incident
              * edges.
              * Complexity: O(1).
              */
              removeNode(v) {
                var self = this;
                if (Object.hasOwn(this._nodes, v)) {
                  var removeEdge = e => self.removeEdge(self._edgeObjs[e]);
                  delete this._nodes[v];
                  if (this._isCompound) {
                    this._removeFromParentsChildList(v);
                    delete this._parent[v];
                    this.children(v).forEach(function (child) {
                      self.setParent(child);
                    });
                    delete this._children[v];
                  }
                  Object.keys(this._in[v]).forEach(removeEdge);
                  delete this._in[v];
                  delete this._preds[v];
                  Object.keys(this._out[v]).forEach(removeEdge);
                  delete this._out[v];
                  delete this._sucs[v];
                  --this._nodeCount;
                }
                return this;
              }
              /**
              * Sets node p as a parent for node v if it is defined, or removes the
              * parent for v if p is undefined. Method throws an exception in case of
              * invoking it in context of noncompound graph.
              * Average-case complexity: O(1).
              */
              setParent(v, parent) {
                if (!this._isCompound) throw new Error("Cannot set parent in a non-compound graph");
                if (parent === void 0) parent = GRAPH_NODE;else {
                  parent += "";
                  for (var ancestor = parent; ancestor !== void 0; ancestor = this.parent(ancestor)) if (ancestor === v) throw new Error("Setting " + parent + " as parent of " + v + " would create a cycle");
                  this.setNode(parent);
                }
                this.setNode(v);
                this._removeFromParentsChildList(v);
                this._parent[v] = parent;
                this._children[parent][v] = true;
                return this;
              }
              _removeFromParentsChildList(v) {
                delete this._children[this._parent[v]][v];
              }
              /**
              * Gets parent node for node v.
              * Complexity: O(1).
              */
              parent(v) {
                if (this._isCompound) {
                  var parent = this._parent[v];
                  if (parent !== GRAPH_NODE) return parent;
                }
              }
              /**
              * Gets list of direct children of node v.
              * Complexity: O(1).
              */
              children(v = GRAPH_NODE) {
                if (this._isCompound) {
                  var children$2 = this._children[v];
                  if (children$2) return Object.keys(children$2);
                } else if (v === GRAPH_NODE) return this.nodes();else if (this.hasNode(v)) return [];
              }
              /**
              * Return all nodes that are predecessors of the specified node or undefined if node v is not in
              * the graph. Behavior is undefined for undirected graphs - use neighbors instead.
              * Complexity: O(|V|).
              */
              predecessors(v) {
                var predsV = this._preds[v];
                if (predsV) return Object.keys(predsV);
              }
              /**
              * Return all nodes that are successors of the specified node or undefined if node v is not in
              * the graph. Behavior is undefined for undirected graphs - use neighbors instead.
              * Complexity: O(|V|).
              */
              successors(v) {
                var sucsV = this._sucs[v];
                if (sucsV) return Object.keys(sucsV);
              }
              /**
              * Return all nodes that are predecessors or successors of the specified node or undefined if
              * node v is not in the graph.
              * Complexity: O(|V|).
              */
              neighbors(v) {
                var preds = this.predecessors(v);
                if (preds) {
                  const union = new Set(preds);
                  for (var succ of this.successors(v)) union.add(succ);
                  return Array.from(union.values());
                }
              }
              isLeaf(v) {
                var neighbors;
                if (this.isDirected()) neighbors = this.successors(v);else neighbors = this.neighbors(v);
                return neighbors.length === 0;
              }
              /**
              * Creates new graph with nodes filtered via filter. Edges incident to rejected node
              * are also removed. In case of compound graph, if parent is rejected by filter,
              * than all its children are rejected too.
              * Average-case complexity: O(|E|+|V|).
              */
              filterNodes(filter$2) {
                var copy = new this.constructor({
                  directed: this._isDirected,
                  multigraph: this._isMultigraph,
                  compound: this._isCompound
                });
                copy.setGraph(this.graph());
                var self = this;
                Object.entries(this._nodes).forEach(function ([v, value]) {
                  if (filter$2(v)) copy.setNode(v, value);
                });
                Object.values(this._edgeObjs).forEach(function (e) {
                  if (copy.hasNode(e.v) && copy.hasNode(e.w)) copy.setEdge(e, self.edge(e));
                });
                var parents = {};
                function findParent(v) {
                  var parent = self.parent(v);
                  if (parent === void 0 || copy.hasNode(parent)) {
                    parents[v] = parent;
                    return parent;
                  } else if (parent in parents) return parents[parent];else return findParent(parent);
                }
                if (this._isCompound) copy.nodes().forEach(v => copy.setParent(v, findParent(v)));
                return copy;
              }
              /**
              * Sets the default edge label or factory function. This label will be
              * assigned as default label in case if no label was specified while setting
              * an edge or this function will be invoked each time when setting an edge
              * with no label specified and returned value * will be used as a label for edge.
              * Complexity: O(1).
              */
              setDefaultEdgeLabel(newDefault) {
                this._defaultEdgeLabelFn = newDefault;
                if (typeof newDefault !== "function") this._defaultEdgeLabelFn = () => newDefault;
                return this;
              }
              /**
              * Gets the number of edges in the graph.
              * Complexity: O(1).
              */
              edgeCount() {
                return this._edgeCount;
              }
              /**
              * Gets edges of the graph. In case of compound graph subgraphs are not considered.
              * Complexity: O(|E|).
              */
              edges() {
                return Object.values(this._edgeObjs);
              }
              /**
              * Establish an edges path over the nodes in nodes list. If some edge is already
              * exists, it will update its label, otherwise it will create an edge between pair
              * of nodes with label provided or default label if no label provided.
              * Complexity: O(|nodes|).
              */
              setPath(vs, value) {
                var self = this;
                var args = arguments;
                vs.reduce(function (v, w) {
                  if (args.length > 1) self.setEdge(v, w, value);else self.setEdge(v, w);
                  return w;
                });
                return this;
              }
              /**
              * Creates or updates the label for the edge (v, w) with the optionally supplied
              * name. If label is supplied it is set as the value for the edge. If label is not
              * supplied and the edge was created by this call then the default edge label will
              * be assigned. The name parameter is only useful with multigraphs.
              */
              setEdge() {
                var v, w, name, value;
                var valueSpecified = false;
                var arg0 = arguments[0];
                if (typeof arg0 === "object" && arg0 !== null && "v" in arg0) {
                  v = arg0.v;
                  w = arg0.w;
                  name = arg0.name;
                  if (arguments.length === 2) {
                    value = arguments[1];
                    valueSpecified = true;
                  }
                } else {
                  v = arg0;
                  w = arguments[1];
                  name = arguments[3];
                  if (arguments.length > 2) {
                    value = arguments[2];
                    valueSpecified = true;
                  }
                }
                v = "" + v;
                w = "" + w;
                if (name !== void 0) name = "" + name;
                var e = edgeArgsToId(this._isDirected, v, w, name);
                if (Object.hasOwn(this._edgeLabels, e)) {
                  if (valueSpecified) this._edgeLabels[e] = value;
                  return this;
                }
                if (name !== void 0 && !this._isMultigraph) throw new Error("Cannot set a named edge when isMultigraph = false");
                this.setNode(v);
                this.setNode(w);
                this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);
                var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);
                v = edgeObj.v;
                w = edgeObj.w;
                Object.freeze(edgeObj);
                this._edgeObjs[e] = edgeObj;
                incrementOrInitEntry(this._preds[w], v);
                incrementOrInitEntry(this._sucs[v], w);
                this._in[w][e] = edgeObj;
                this._out[v][e] = edgeObj;
                this._edgeCount++;
                return this;
              }
              /**
              * Gets the label for the specified edge.
              * Complexity: O(1).
              */
              edge(v, w, name) {
                var e = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v, w, name);
                return this._edgeLabels[e];
              }
              /**
              * Gets the label for the specified edge and converts it to an object.
              * Complexity: O(1)
              */
              edgeAsObj() {
                const edge$2 = this.edge(...arguments);
                if (typeof edge$2 !== "object") return {
                  label: edge$2
                };
                return edge$2;
              }
              /**
              * Detects whether the graph contains specified edge or not. No subgraphs are considered.
              * Complexity: O(1).
              */
              hasEdge(v, w, name) {
                var e = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v, w, name);
                return Object.hasOwn(this._edgeLabels, e);
              }
              /**
              * Removes the specified edge from the graph. No subgraphs are considered.
              * Complexity: O(1).
              */
              removeEdge(v, w, name) {
                var e = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v, w, name);
                var edge$2 = this._edgeObjs[e];
                if (edge$2) {
                  v = edge$2.v;
                  w = edge$2.w;
                  delete this._edgeLabels[e];
                  delete this._edgeObjs[e];
                  decrementOrRemoveEntry(this._preds[w], v);
                  decrementOrRemoveEntry(this._sucs[v], w);
                  delete this._in[w][e];
                  delete this._out[v][e];
                  this._edgeCount--;
                }
                return this;
              }
              /**
              * Return all edges that point to the node v. Optionally filters those edges down to just those
              * coming from node u. Behavior is undefined for undirected graphs - use nodeEdges instead.
              * Complexity: O(|E|).
              */
              inEdges(v, u) {
                var inV = this._in[v];
                if (inV) {
                  var edges = Object.values(inV);
                  if (!u) return edges;
                  return edges.filter(edge$2 => edge$2.v === u);
                }
              }
              /**
              * Return all edges that are pointed at by node v. Optionally filters those edges down to just
              * those point to w. Behavior is undefined for undirected graphs - use nodeEdges instead.
              * Complexity: O(|E|).
              */
              outEdges(v, w) {
                var outV = this._out[v];
                if (outV) {
                  var edges = Object.values(outV);
                  if (!w) return edges;
                  return edges.filter(edge$2 => edge$2.w === w);
                }
              }
              /**
              * Returns all edges to or from node v regardless of direction. Optionally filters those edges
              * down to just those between nodes v and w regardless of direction.
              * Complexity: O(|E|).
              */
              nodeEdges(v, w) {
                var inEdges = this.inEdges(v, w);
                if (inEdges) return inEdges.concat(this.outEdges(v, w));
              }
            };
            function incrementOrInitEntry(map, k) {
              if (map[k]) map[k]++;else map[k] = 1;
            }
            function decrementOrRemoveEntry(map, k) {
              if (! --map[k]) delete map[k];
            }
            function edgeArgsToId(isDirected, v_, w_, name) {
              var v = "" + v_;
              var w = "" + w_;
              if (!isDirected && v > w) {
                var tmp = v;
                v = w;
                w = tmp;
              }
              return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (name === void 0 ? DEFAULT_EDGE_NAME : name);
            }
            function edgeArgsToObj(isDirected, v_, w_, name) {
              var v = "" + v_;
              var w = "" + w_;
              if (!isDirected && v > w) {
                var tmp = v;
                v = w;
                w = tmp;
              }
              var edgeObj = {
                v,
                w
              };
              if (name) edgeObj.name = name;
              return edgeObj;
            }
            function edgeObjToId(isDirected, edgeObj) {
              return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);
            }
            module.exports = Graph$10;
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/version.js
        require_version$1 = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/version.js": (exports, module) => {
            module.exports = "2.2.4";
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/index.js
        require_lib = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/index.js": (exports, module) => {
            module.exports = {
              Graph: require_graph(),
              version: require_version$1()
            };
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/json.js
        require_json = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/json.js": (exports, module) => {
            var Graph$9 = require_graph();
            module.exports = {
              write,
              read
            };
            /**
            * Creates a JSON representation of the graph that can be serialized to a string with
            * JSON.stringify. The graph can later be restored using json.read.
            */
            function write(g) {
              var json = {
                options: {
                  directed: g.isDirected(),
                  multigraph: g.isMultigraph(),
                  compound: g.isCompound()
                },
                nodes: writeNodes(g),
                edges: writeEdges(g)
              };
              if (g.graph() !== void 0) json.value = structuredClone(g.graph());
              return json;
            }
            function writeNodes(g) {
              return g.nodes().map(function (v) {
                var nodeValue = g.node(v);
                var parent = g.parent(v);
                var node$1 = {
                  v
                };
                if (nodeValue !== void 0) node$1.value = nodeValue;
                if (parent !== void 0) node$1.parent = parent;
                return node$1;
              });
            }
            function writeEdges(g) {
              return g.edges().map(function (e) {
                var edgeValue = g.edge(e);
                var edge$2 = {
                  v: e.v,
                  w: e.w
                };
                if (e.name !== void 0) edge$2.name = e.name;
                if (edgeValue !== void 0) edge$2.value = edgeValue;
                return edge$2;
              });
            }
            /**
            * Takes JSON as input and returns the graph representation.
            *
            * @example
            * var g2 = graphlib.json.read(JSON.parse(str));
            * g2.nodes();
            * // ['a', 'b']
            * g2.edges()
            * // [ { v: 'a', w: 'b' } ]
            */
            function read(json) {
              var g = new Graph$9(json.options).setGraph(json.value);
              json.nodes.forEach(function (entry) {
                g.setNode(entry.v, entry.value);
                if (entry.parent) g.setParent(entry.v, entry.parent);
              });
              json.edges.forEach(function (entry) {
                g.setEdge({
                  v: entry.v,
                  w: entry.w,
                  name: entry.name
                }, entry.value);
              });
              return g;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/components.js
        require_components = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/components.js": (exports, module) => {
            module.exports = components;
            function components(g) {
              var visited = {};
              var cmpts = [];
              var cmpt;
              function dfs$4(v) {
                if (Object.hasOwn(visited, v)) return;
                visited[v] = true;
                cmpt.push(v);
                g.successors(v).forEach(dfs$4);
                g.predecessors(v).forEach(dfs$4);
              }
              g.nodes().forEach(function (v) {
                cmpt = [];
                dfs$4(v);
                if (cmpt.length) cmpts.push(cmpt);
              });
              return cmpts;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/data/priority-queue.js
        require_priority_queue = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/data/priority-queue.js": (exports, module) => {
            /**
            * A min-priority queue data structure. This algorithm is derived from Cormen,
            * et al., "Introduction to Algorithms". The basic idea of a min-priority
            * queue is that you can efficiently (in O(1) time) get the smallest key in
            * the queue. Adding and removing elements takes O(log n) time. A key can
            * have its priority decreased in O(log n) time.
            */
            var PriorityQueue$2 = class {
              _arr = [];
              _keyIndices = {};
              /**
              * Returns the number of elements in the queue. Takes `O(1)` time.
              */
              size() {
                return this._arr.length;
              }
              /**
              * Returns the keys that are in the queue. Takes `O(n)` time.
              */
              keys() {
                return this._arr.map(function (x) {
                  return x.key;
                });
              }
              /**
              * Returns `true` if **key** is in the queue and `false` if not.
              */
              has(key) {
                return Object.hasOwn(this._keyIndices, key);
              }
              /**
              * Returns the priority for **key**. If **key** is not present in the queue
              * then this function returns `undefined`. Takes `O(1)` time.
              *
              * @param {Object} key
              */
              priority(key) {
                var index = this._keyIndices[key];
                if (index !== void 0) return this._arr[index].priority;
              }
              /**
              * Returns the key for the minimum element in this queue. If the queue is
              * empty this function throws an Error. Takes `O(1)` time.
              */
              min() {
                if (this.size() === 0) throw new Error("Queue underflow");
                return this._arr[0].key;
              }
              /**
              * Inserts a new key into the priority queue. If the key already exists in
              * the queue this function returns `false`; otherwise it will return `true`.
              * Takes `O(n)` time.
              *
              * @param {Object} key the key to add
              * @param {Number} priority the initial priority for the key
              */
              add(key, priority) {
                var keyIndices = this._keyIndices;
                key = String(key);
                if (!Object.hasOwn(keyIndices, key)) {
                  var arr = this._arr;
                  var index = arr.length;
                  keyIndices[key] = index;
                  arr.push({
                    key,
                    priority
                  });
                  this._decrease(index);
                  return true;
                }
                return false;
              }
              /**
              * Removes and returns the smallest key in the queue. Takes `O(log n)` time.
              */
              removeMin() {
                this._swap(0, this._arr.length - 1);
                var min = this._arr.pop();
                delete this._keyIndices[min.key];
                this._heapify(0);
                return min.key;
              }
              /**
              * Decreases the priority for **key** to **priority**. If the new priority is
              * greater than the previous priority, this function will throw an Error.
              *
              * @param {Object} key the key for which to raise priority
              * @param {Number} priority the new priority for the key
              */
              decrease(key, priority) {
                var index = this._keyIndices[key];
                if (priority > this._arr[index].priority) throw new Error("New priority is greater than current priority. Key: " + key + " Old: " + this._arr[index].priority + " New: " + priority);
                this._arr[index].priority = priority;
                this._decrease(index);
              }
              _heapify(i) {
                var arr = this._arr;
                var l = 2 * i;
                var r = l + 1;
                var largest = i;
                if (l < arr.length) {
                  largest = arr[l].priority < arr[largest].priority ? l : largest;
                  if (r < arr.length) largest = arr[r].priority < arr[largest].priority ? r : largest;
                  if (largest !== i) {
                    this._swap(i, largest);
                    this._heapify(largest);
                  }
                }
              }
              _decrease(index) {
                var arr = this._arr;
                var priority = arr[index].priority;
                var parent;
                while (index !== 0) {
                  parent = index >> 1;
                  if (arr[parent].priority < priority) break;
                  this._swap(index, parent);
                  index = parent;
                }
              }
              _swap(i, j) {
                var arr = this._arr;
                var keyIndices = this._keyIndices;
                var origArrI = arr[i];
                var origArrJ = arr[j];
                arr[i] = origArrJ;
                arr[j] = origArrI;
                keyIndices[origArrJ.key] = i;
                keyIndices[origArrI.key] = j;
              }
            };
            module.exports = PriorityQueue$2;
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/dijkstra.js
        require_dijkstra = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/dijkstra.js": (exports, module) => {
            var PriorityQueue$1 = require_priority_queue();
            module.exports = dijkstra$1;
            var DEFAULT_WEIGHT_FUNC$1 = () => 1;
            function dijkstra$1(g, source, weightFn, edgeFn) {
              return runDijkstra(g, String(source), weightFn || DEFAULT_WEIGHT_FUNC$1, edgeFn || function (v) {
                return g.outEdges(v);
              });
            }
            function runDijkstra(g, source, weightFn, edgeFn) {
              var results = {};
              var pq = new PriorityQueue$1();
              var v, vEntry;
              var updateNeighbors = function (edge$2) {
                var w = edge$2.v !== v ? edge$2.v : edge$2.w;
                var wEntry = results[w];
                var weight = weightFn(edge$2);
                var distance = vEntry.distance + weight;
                if (weight < 0) throw new Error("dijkstra does not allow negative edge weights. Bad edge: " + edge$2 + " Weight: " + weight);
                if (distance < wEntry.distance) {
                  wEntry.distance = distance;
                  wEntry.predecessor = v;
                  pq.decrease(w, distance);
                }
              };
              g.nodes().forEach(function (v$1) {
                var distance = v$1 === source ? 0 : Number.POSITIVE_INFINITY;
                results[v$1] = {
                  distance
                };
                pq.add(v$1, distance);
              });
              while (pq.size() > 0) {
                v = pq.removeMin();
                vEntry = results[v];
                if (vEntry.distance === Number.POSITIVE_INFINITY) break;
                edgeFn(v).forEach(updateNeighbors);
              }
              return results;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/dijkstra-all.js
        require_dijkstra_all = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/dijkstra-all.js": (exports, module) => {
            var dijkstra = require_dijkstra();
            module.exports = dijkstraAll;
            function dijkstraAll(g, weightFunc, edgeFunc) {
              return g.nodes().reduce(function (acc, v) {
                acc[v] = dijkstra(g, v, weightFunc, edgeFunc);
                return acc;
              }, {});
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/tarjan.js
        require_tarjan = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/tarjan.js": (exports, module) => {
            module.exports = tarjan$1;
            function tarjan$1(g) {
              var index = 0;
              var stack = [];
              var visited = {};
              var results = [];
              function dfs$4(v) {
                var entry = visited[v] = {
                  onStack: true,
                  lowlink: index,
                  index: index++
                };
                stack.push(v);
                g.successors(v).forEach(function (w$1) {
                  if (!Object.hasOwn(visited, w$1)) {
                    dfs$4(w$1);
                    entry.lowlink = Math.min(entry.lowlink, visited[w$1].lowlink);
                  } else if (visited[w$1].onStack) entry.lowlink = Math.min(entry.lowlink, visited[w$1].index);
                });
                if (entry.lowlink === entry.index) {
                  var cmpt = [];
                  var w;
                  do {
                    w = stack.pop();
                    visited[w].onStack = false;
                    cmpt.push(w);
                  } while (v !== w);
                  results.push(cmpt);
                }
              }
              g.nodes().forEach(function (v) {
                if (!Object.hasOwn(visited, v)) dfs$4(v);
              });
              return results;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/find-cycles.js
        require_find_cycles = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/find-cycles.js": (exports, module) => {
            var tarjan = require_tarjan();
            module.exports = findCycles;
            function findCycles(g) {
              return tarjan(g).filter(function (cmpt) {
                return cmpt.length > 1 || cmpt.length === 1 && g.hasEdge(cmpt[0], cmpt[0]);
              });
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/floyd-warshall.js
        require_floyd_warshall = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/floyd-warshall.js": (exports, module) => {
            module.exports = floydWarshall;
            var DEFAULT_WEIGHT_FUNC = () => 1;
            function floydWarshall(g, weightFn, edgeFn) {
              return runFloydWarshall(g, weightFn || DEFAULT_WEIGHT_FUNC, edgeFn || function (v) {
                return g.outEdges(v);
              });
            }
            function runFloydWarshall(g, weightFn, edgeFn) {
              var results = {};
              var nodes = g.nodes();
              nodes.forEach(function (v) {
                results[v] = {};
                results[v][v] = {
                  distance: 0
                };
                nodes.forEach(function (w) {
                  if (v !== w) results[v][w] = {
                    distance: Number.POSITIVE_INFINITY
                  };
                });
                edgeFn(v).forEach(function (edge$2) {
                  var w = edge$2.v === v ? edge$2.w : edge$2.v;
                  var d = weightFn(edge$2);
                  results[v][w] = {
                    distance: d,
                    predecessor: v
                  };
                });
              });
              nodes.forEach(function (k) {
                var rowK = results[k];
                nodes.forEach(function (i) {
                  var rowI = results[i];
                  nodes.forEach(function (j) {
                    var ik = rowI[k];
                    var kj = rowK[j];
                    var ij = rowI[j];
                    var altDistance = ik.distance + kj.distance;
                    if (altDistance < ij.distance) {
                      ij.distance = altDistance;
                      ij.predecessor = kj.predecessor;
                    }
                  });
                });
              });
              return results;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/topsort.js
        require_topsort = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/topsort.js": (exports, module) => {
            function topsort$1(g) {
              var visited = {};
              var stack = {};
              var results = [];
              function visit(node$1) {
                if (Object.hasOwn(stack, node$1)) throw new CycleException();
                if (!Object.hasOwn(visited, node$1)) {
                  stack[node$1] = true;
                  visited[node$1] = true;
                  g.predecessors(node$1).forEach(visit);
                  delete stack[node$1];
                  results.push(node$1);
                }
              }
              g.sinks().forEach(visit);
              if (Object.keys(visited).length !== g.nodeCount()) throw new CycleException();
              return results;
            }
            var CycleException = class extends Error {
              constructor() {
                super(...arguments);
              }
            };
            module.exports = topsort$1;
            topsort$1.CycleException = CycleException;
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/is-acyclic.js
        require_is_acyclic = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/is-acyclic.js": (exports, module) => {
            var topsort = require_topsort();
            module.exports = isAcyclic;
            function isAcyclic(g) {
              try {
                topsort(g);
              } catch (e) {
                if (e instanceof topsort.CycleException) return false;
                throw e;
              }
              return true;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/dfs.js
        require_dfs = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/dfs.js": (exports, module) => {
            module.exports = dfs$3;
            function dfs$3(g, vs, order$2) {
              if (!Array.isArray(vs)) vs = [vs];
              var navigation = g.isDirected() ? v => g.successors(v) : v => g.neighbors(v);
              var orderFunc = order$2 === "post" ? postOrderDfs : preOrderDfs;
              var acc = [];
              var visited = {};
              vs.forEach(v => {
                if (!g.hasNode(v)) throw new Error("Graph does not have node: " + v);
                orderFunc(v, navigation, visited, acc);
              });
              return acc;
            }
            function postOrderDfs(v, navigation, visited, acc) {
              var stack = [[v, false]];
              while (stack.length > 0) {
                var curr = stack.pop();
                if (curr[1]) acc.push(curr[0]);else if (!Object.hasOwn(visited, curr[0])) {
                  visited[curr[0]] = true;
                  stack.push([curr[0], true]);
                  forEachRight(navigation(curr[0]), w => stack.push([w, false]));
                }
              }
            }
            function preOrderDfs(v, navigation, visited, acc) {
              var stack = [v];
              while (stack.length > 0) {
                var curr = stack.pop();
                if (!Object.hasOwn(visited, curr)) {
                  visited[curr] = true;
                  acc.push(curr);
                  forEachRight(navigation(curr), w => stack.push(w));
                }
              }
            }
            function forEachRight(array$2, iteratee) {
              var length = array$2.length;
              while (length--) iteratee(array$2[length], length, array$2);
              return array$2;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/postorder.js
        require_postorder = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/postorder.js": (exports, module) => {
            var dfs$2 = require_dfs();
            module.exports = postorder$2;
            function postorder$2(g, vs) {
              return dfs$2(g, vs, "post");
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/preorder.js
        require_preorder = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/preorder.js": (exports, module) => {
            var dfs$1 = require_dfs();
            module.exports = preorder$1;
            function preorder$1(g, vs) {
              return dfs$1(g, vs, "pre");
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/prim.js
        require_prim = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/prim.js": (exports, module) => {
            var Graph$8 = require_graph();
            var PriorityQueue = require_priority_queue();
            module.exports = prim;
            function prim(g, weightFunc) {
              var result = new Graph$8();
              var parents = {};
              var pq = new PriorityQueue();
              var v;
              function updateNeighbors(edge$2) {
                var w = edge$2.v === v ? edge$2.w : edge$2.v;
                var pri = pq.priority(w);
                if (pri !== void 0) {
                  var edgeWeight = weightFunc(edge$2);
                  if (edgeWeight < pri) {
                    parents[w] = v;
                    pq.decrease(w, edgeWeight);
                  }
                }
              }
              if (g.nodeCount() === 0) return result;
              g.nodes().forEach(function (v$1) {
                pq.add(v$1, Number.POSITIVE_INFINITY);
                result.setNode(v$1);
              });
              pq.decrease(g.nodes()[0], 0);
              var init$1 = false;
              while (pq.size() > 0) {
                v = pq.removeMin();
                if (Object.hasOwn(parents, v)) result.setEdge(v, parents[v]);else if (init$1) throw new Error("Input graph is not connected: " + g);else init$1 = true;
                g.nodeEdges(v).forEach(updateNeighbors);
              }
              return result;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/index.js
        require_alg = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/lib/alg/index.js": (exports, module) => {
            module.exports = {
              components: require_components(),
              dijkstra: require_dijkstra(),
              dijkstraAll: require_dijkstra_all(),
              findCycles: require_find_cycles(),
              floydWarshall: require_floyd_warshall(),
              isAcyclic: require_is_acyclic(),
              postorder: require_postorder(),
              preorder: require_preorder(),
              prim: require_prim(),
              tarjan: require_tarjan(),
              topsort: require_topsort()
            };
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/index.js
        require_graphlib = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+graphlib@2.2.4/node_modules/@dagrejs/graphlib/index.js": (exports, module) => {
            /**
            * Copyright (c) 2014, Chris Pettitt
            * All rights reserved.
            *
            * Redistribution and use in source and binary forms, with or without
            * modification, are permitted provided that the following conditions are met:
            *
            * 1. Redistributions of source code must retain the above copyright notice, this
            * list of conditions and the following disclaimer.
            *
            * 2. Redistributions in binary form must reproduce the above copyright notice,
            * this list of conditions and the following disclaimer in the documentation
            * and/or other materials provided with the distribution.
            *
            * 3. Neither the name of the copyright holder nor the names of its contributors
            * may be used to endorse or promote products derived from this software without
            * specific prior written permission.
            *
            * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
            * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
            * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
            * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
            * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
            * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
            * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
            * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
            * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
            * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
            */
            var lib = require_lib();
            module.exports = {
              Graph: lib.Graph,
              json: require_json(),
              alg: require_alg(),
              version: lib.version
            };
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/data/list.js
        require_list = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/data/list.js": (exports, module) => {
            var List$1 = class {
              constructor() {
                let sentinel = {};
                sentinel._next = sentinel._prev = sentinel;
                this._sentinel = sentinel;
              }
              dequeue() {
                let sentinel = this._sentinel;
                let entry = sentinel._prev;
                if (entry !== sentinel) {
                  unlink(entry);
                  return entry;
                }
              }
              enqueue(entry) {
                let sentinel = this._sentinel;
                if (entry._prev && entry._next) unlink(entry);
                entry._next = sentinel._next;
                sentinel._next._prev = entry;
                sentinel._next = entry;
                entry._prev = sentinel;
              }
              toString() {
                let strs = [];
                let sentinel = this._sentinel;
                let curr = sentinel._prev;
                while (curr !== sentinel) {
                  strs.push(JSON.stringify(curr, filterOutLinks));
                  curr = curr._prev;
                }
                return "[" + strs.join(", ") + "]";
              }
            };
            function unlink(entry) {
              entry._prev._next = entry._next;
              entry._next._prev = entry._prev;
              delete entry._next;
              delete entry._prev;
            }
            function filterOutLinks(k, v) {
              if (k !== "_next" && k !== "_prev") return v;
            }
            module.exports = List$1;
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/greedy-fas.js
        require_greedy_fas = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/greedy-fas.js": (exports, module) => {
            var Graph$7 = require_graphlib().Graph;
            var List = require_list();
            module.exports = greedyFAS$1;
            var DEFAULT_WEIGHT_FN = () => 1;
            function greedyFAS$1(g, weightFn) {
              if (g.nodeCount() <= 1) return [];
              let state$1 = buildState(g, weightFn || DEFAULT_WEIGHT_FN);
              return doGreedyFAS(state$1.graph, state$1.buckets, state$1.zeroIdx).flatMap(e => g.outEdges(e.v, e.w));
            }
            function doGreedyFAS(g, buckets, zeroIdx) {
              let results = [];
              let sources = buckets[buckets.length - 1];
              let sinks = buckets[0];
              let entry;
              while (g.nodeCount()) {
                while (entry = sinks.dequeue()) removeNode(g, buckets, zeroIdx, entry);
                while (entry = sources.dequeue()) removeNode(g, buckets, zeroIdx, entry);
                if (g.nodeCount()) for (let i = buckets.length - 2; i > 0; --i) {
                  entry = buckets[i].dequeue();
                  if (entry) {
                    results = results.concat(removeNode(g, buckets, zeroIdx, entry, true));
                    break;
                  }
                }
              }
              return results;
            }
            function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) {
              let results = collectPredecessors ? [] : void 0;
              g.inEdges(entry.v).forEach(edge$2 => {
                let weight = g.edge(edge$2);
                let uEntry = g.node(edge$2.v);
                if (collectPredecessors) results.push({
                  v: edge$2.v,
                  w: edge$2.w
                });
                uEntry.out -= weight;
                assignBucket(buckets, zeroIdx, uEntry);
              });
              g.outEdges(entry.v).forEach(edge$2 => {
                let weight = g.edge(edge$2);
                let w = edge$2.w;
                let wEntry = g.node(w);
                wEntry["in"] -= weight;
                assignBucket(buckets, zeroIdx, wEntry);
              });
              g.removeNode(entry.v);
              return results;
            }
            function buildState(g, weightFn) {
              let fasGraph = new Graph$7();
              let maxIn = 0;
              let maxOut = 0;
              g.nodes().forEach(v => {
                fasGraph.setNode(v, {
                  v,
                  "in": 0,
                  out: 0
                });
              });
              g.edges().forEach(e => {
                let prevWeight = fasGraph.edge(e.v, e.w) || 0;
                let weight = weightFn(e);
                let edgeWeight = prevWeight + weight;
                fasGraph.setEdge(e.v, e.w, edgeWeight);
                maxOut = Math.max(maxOut, fasGraph.node(e.v).out += weight);
                maxIn = Math.max(maxIn, fasGraph.node(e.w)["in"] += weight);
              });
              let buckets = range$1(maxOut + maxIn + 3).map(() => new List());
              let zeroIdx = maxIn + 1;
              fasGraph.nodes().forEach(v => {
                assignBucket(buckets, zeroIdx, fasGraph.node(v));
              });
              return {
                graph: fasGraph,
                buckets,
                zeroIdx
              };
            }
            function assignBucket(buckets, zeroIdx, entry) {
              if (!entry.out) buckets[0].enqueue(entry);else if (!entry["in"]) buckets[buckets.length - 1].enqueue(entry);else buckets[entry.out - entry["in"] + zeroIdx].enqueue(entry);
            }
            function range$1(limit) {
              const range$2 = [];
              for (let i = 0; i < limit; i++) range$2.push(i);
              return range$2;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/util.js
        require_util$1 = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/util.js": (exports, module) => {
            var Graph$6 = require_graphlib().Graph;
            module.exports = {
              addBorderNode: addBorderNode$1,
              addDummyNode,
              applyWithChunking: applyWithChunking$1,
              asNonCompoundGraph,
              buildLayerMatrix,
              intersectRect,
              mapValues,
              maxRank,
              normalizeRanks: normalizeRanks$1,
              notime,
              partition,
              pick,
              predecessorWeights,
              range,
              removeEmptyRanks: removeEmptyRanks$1,
              simplify: simplify$1,
              successorWeights,
              time,
              uniqueId: uniqueId$1,
              zipObject: zipObject$1
            };
            function addDummyNode(g, type, attrs, name) {
              let v;
              do v = uniqueId$1(name); while (g.hasNode(v));
              attrs.dummy = type;
              g.setNode(v, attrs);
              return v;
            }
            function simplify$1(g) {
              let simplified = new Graph$6().setGraph(g.graph());
              g.nodes().forEach(v => simplified.setNode(v, g.node(v)));
              g.edges().forEach(e => {
                let simpleLabel = simplified.edge(e.v, e.w) || {
                  weight: 0,
                  minlen: 1
                };
                let label$7 = g.edge(e);
                simplified.setEdge(e.v, e.w, {
                  weight: simpleLabel.weight + label$7.weight,
                  minlen: Math.max(simpleLabel.minlen, label$7.minlen)
                });
              });
              return simplified;
            }
            function asNonCompoundGraph(g) {
              let simplified = new Graph$6({
                multigraph: g.isMultigraph()
              }).setGraph(g.graph());
              g.nodes().forEach(v => {
                if (!g.children(v).length) simplified.setNode(v, g.node(v));
              });
              g.edges().forEach(e => {
                simplified.setEdge(e, g.edge(e));
              });
              return simplified;
            }
            function successorWeights(g) {
              let weightMap = g.nodes().map(v => {
                let sucs = {};
                g.outEdges(v).forEach(e => {
                  sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight;
                });
                return sucs;
              });
              return zipObject$1(g.nodes(), weightMap);
            }
            function predecessorWeights(g) {
              let weightMap = g.nodes().map(v => {
                let preds = {};
                g.inEdges(v).forEach(e => {
                  preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight;
                });
                return preds;
              });
              return zipObject$1(g.nodes(), weightMap);
            }
            function intersectRect(rect, point) {
              let x = rect.x;
              let y = rect.y;
              let dx = point.x - x;
              let dy = point.y - y;
              let w = rect.width / 2;
              let h$1 = rect.height / 2;
              if (!dx && !dy) throw new Error("Not possible to find intersection inside of the rectangle");
              let sx, sy;
              if (Math.abs(dy) * w > Math.abs(dx) * h$1) {
                if (dy < 0) h$1 = -h$1;
                sx = h$1 * dx / dy;
                sy = h$1;
              } else {
                if (dx < 0) w = -w;
                sx = w;
                sy = w * dy / dx;
              }
              return {
                x: x + sx,
                y: y + sy
              };
            }
            function buildLayerMatrix(g) {
              let layering = range(maxRank(g) + 1).map(() => []);
              g.nodes().forEach(v => {
                let node$1 = g.node(v);
                let rank$2 = node$1.rank;
                if (rank$2 !== void 0) layering[rank$2][node$1.order] = v;
              });
              return layering;
            }
            function normalizeRanks$1(g) {
              let nodeRanks = g.nodes().map(v => {
                let rank$2 = g.node(v).rank;
                if (rank$2 === void 0) return Number.MAX_VALUE;
                return rank$2;
              });
              let min = applyWithChunking$1(Math.min, nodeRanks);
              g.nodes().forEach(v => {
                let node$1 = g.node(v);
                if (Object.hasOwn(node$1, "rank")) node$1.rank -= min;
              });
            }
            function removeEmptyRanks$1(g) {
              let nodeRanks = g.nodes().map(v => g.node(v).rank);
              let offset = applyWithChunking$1(Math.min, nodeRanks);
              let layers = [];
              g.nodes().forEach(v => {
                let rank$2 = g.node(v).rank - offset;
                if (!layers[rank$2]) layers[rank$2] = [];
                layers[rank$2].push(v);
              });
              let delta = 0;
              let nodeRankFactor = g.graph().nodeRankFactor;
              Array.from(layers).forEach((vs, i) => {
                if (vs === void 0 && i % nodeRankFactor !== 0) --delta;else if (vs !== void 0 && delta) vs.forEach(v => g.node(v).rank += delta);
              });
            }
            function addBorderNode$1(g, prefix, rank$2, order$2) {
              let node$1 = {
                width: 0,
                height: 0
              };
              if (arguments.length >= 4) {
                node$1.rank = rank$2;
                node$1.order = order$2;
              }
              return addDummyNode(g, "border", node$1, prefix);
            }
            function splitToChunks(array$2, chunkSize = CHUNKING_THRESHOLD) {
              const chunks = [];
              for (let i = 0; i < array$2.length; i += chunkSize) {
                const chunk = array$2.slice(i, i + chunkSize);
                chunks.push(chunk);
              }
              return chunks;
            }
            var CHUNKING_THRESHOLD = 65535;
            function applyWithChunking$1(fn, argsArray) {
              if (argsArray.length > CHUNKING_THRESHOLD) {
                const chunks = splitToChunks(argsArray);
                return fn.apply(null, chunks.map(chunk => fn.apply(null, chunk)));
              } else return fn.apply(null, argsArray);
            }
            function maxRank(g) {
              const nodeRanks = g.nodes().map(v => {
                let rank$2 = g.node(v).rank;
                if (rank$2 === void 0) return Number.MIN_VALUE;
                return rank$2;
              });
              return applyWithChunking$1(Math.max, nodeRanks);
            }
            function partition(collection, fn) {
              let result = {
                lhs: [],
                rhs: []
              };
              collection.forEach(value => {
                if (fn(value)) result.lhs.push(value);else result.rhs.push(value);
              });
              return result;
            }
            function time(name, fn) {
              let start$1 = Date.now();
              try {
                return fn();
              } finally {
                console.log(name + " time: " + (Date.now() - start$1) + "ms");
              }
            }
            function notime(name, fn) {
              return fn();
            }
            var idCounter = 0;
            function uniqueId$1(prefix) {
              var id$1 = ++idCounter;
              return toString(prefix) + id$1;
            }
            function range(start$1, limit, step = 1) {
              if (limit == null) {
                limit = start$1;
                start$1 = 0;
              }
              let endCon = i => i < limit;
              if (step < 0) endCon = i => limit < i;
              const range$2 = [];
              for (let i = start$1; endCon(i); i += step) range$2.push(i);
              return range$2;
            }
            function pick(source, keys) {
              const dest = {};
              for (const key of keys) if (source[key] !== void 0) dest[key] = source[key];
              return dest;
            }
            function mapValues(obj, funcOrProp) {
              let func = funcOrProp;
              if (typeof funcOrProp === "string") func = val => val[funcOrProp];
              return Object.entries(obj).reduce((acc, [k, v]) => {
                acc[k] = func(v, k);
                return acc;
              }, {});
            }
            function zipObject$1(props, values) {
              return props.reduce((acc, key, i) => {
                acc[key] = values[i];
                return acc;
              }, {});
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/acyclic.js
        require_acyclic = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/acyclic.js": (exports, module) => {
            var greedyFAS = require_greedy_fas();
            var uniqueId = require_util$1().uniqueId;
            module.exports = {
              run: run$2,
              undo: undo$2
            };
            function run$2(g) {
              (g.graph().acyclicer === "greedy" ? greedyFAS(g, weightFn(g)) : dfsFAS(g)).forEach(e => {
                let label$7 = g.edge(e);
                g.removeEdge(e);
                label$7.forwardName = e.name;
                label$7.reversed = true;
                g.setEdge(e.w, e.v, label$7, uniqueId("rev"));
              });
              function weightFn(g$1) {
                return e => {
                  return g$1.edge(e).weight;
                };
              }
            }
            function dfsFAS(g) {
              let fas = [];
              let stack = {};
              let visited = {};
              function dfs$4(v) {
                if (Object.hasOwn(visited, v)) return;
                visited[v] = true;
                stack[v] = true;
                g.outEdges(v).forEach(e => {
                  if (Object.hasOwn(stack, e.w)) fas.push(e);else dfs$4(e.w);
                });
                delete stack[v];
              }
              g.nodes().forEach(dfs$4);
              return fas;
            }
            function undo$2(g) {
              g.edges().forEach(e => {
                let label$7 = g.edge(e);
                if (label$7.reversed) {
                  g.removeEdge(e);
                  let forwardName = label$7.forwardName;
                  delete label$7.reversed;
                  delete label$7.forwardName;
                  g.setEdge(e.w, e.v, label$7, forwardName);
                }
              });
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/normalize.js
        require_normalize = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/normalize.js": (exports, module) => {
            var util$11 = require_util$1();
            module.exports = {
              run: run$1,
              undo: undo$1
            };
            function run$1(g) {
              g.graph().dummyChains = [];
              g.edges().forEach(edge$2 => normalizeEdge(g, edge$2));
            }
            function normalizeEdge(g, e) {
              let v = e.v;
              let vRank = g.node(v).rank;
              let w = e.w;
              let wRank = g.node(w).rank;
              let name = e.name;
              let edgeLabel$1 = g.edge(e);
              let labelRank = edgeLabel$1.labelRank;
              if (wRank === vRank + 1) return;
              g.removeEdge(e);
              let dummy, attrs, i;
              for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {
                edgeLabel$1.points = [];
                attrs = {
                  width: 0,
                  height: 0,
                  edgeLabel: edgeLabel$1,
                  edgeObj: e,
                  rank: vRank
                };
                dummy = util$11.addDummyNode(g, "edge", attrs, "_d");
                if (vRank === labelRank) {
                  attrs.width = edgeLabel$1.width;
                  attrs.height = edgeLabel$1.height;
                  attrs.dummy = "edge-label";
                  attrs.labelpos = edgeLabel$1.labelpos;
                }
                g.setEdge(v, dummy, {
                  weight: edgeLabel$1.weight
                }, name);
                if (i === 0) g.graph().dummyChains.push(dummy);
                v = dummy;
              }
              g.setEdge(v, w, {
                weight: edgeLabel$1.weight
              }, name);
            }
            function undo$1(g) {
              g.graph().dummyChains.forEach(v => {
                let node$1 = g.node(v);
                let origLabel = node$1.edgeLabel;
                let w;
                g.setEdge(node$1.edgeObj, origLabel);
                while (node$1.dummy) {
                  w = g.successors(v)[0];
                  g.removeNode(v);
                  origLabel.points.push({
                    x: node$1.x,
                    y: node$1.y
                  });
                  if (node$1.dummy === "edge-label") {
                    origLabel.x = node$1.x;
                    origLabel.y = node$1.y;
                    origLabel.width = node$1.width;
                    origLabel.height = node$1.height;
                  }
                  v = w;
                  node$1 = g.node(v);
                }
              });
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/rank/util.js
        require_util = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/rank/util.js": (exports, module) => {
            var {
              applyWithChunking
            } = require_util$1();
            module.exports = {
              longestPath: longestPath$1,
              slack: slack$2
            };
            function longestPath$1(g) {
              var visited = {};
              function dfs$4(v) {
                var label$7 = g.node(v);
                if (Object.hasOwn(visited, v)) return label$7.rank;
                visited[v] = true;
                let outEdgesMinLens = g.outEdges(v).map(e => {
                  if (e == null) return Number.POSITIVE_INFINITY;
                  return dfs$4(e.w) - g.edge(e).minlen;
                });
                var rank$2 = applyWithChunking(Math.min, outEdgesMinLens);
                if (rank$2 === Number.POSITIVE_INFINITY) rank$2 = 0;
                return label$7.rank = rank$2;
              }
              g.sources().forEach(dfs$4);
            }
            function slack$2(g, e) {
              return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/rank/feasible-tree.js
        require_feasible_tree = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/rank/feasible-tree.js": (exports, module) => {
            var Graph$5 = require_graphlib().Graph;
            var slack$1 = require_util().slack;
            module.exports = feasibleTree$2;
            function feasibleTree$2(g) {
              var t = new Graph$5({
                directed: false
              });
              var start$1 = g.nodes()[0];
              var size$1 = g.nodeCount();
              t.setNode(start$1, {});
              var edge$2, delta;
              while (tightTree(t, g) < size$1) {
                edge$2 = findMinSlackEdge(t, g);
                delta = t.hasNode(edge$2.v) ? slack$1(g, edge$2) : -slack$1(g, edge$2);
                shiftRanks(t, g, delta);
              }
              return t;
            }
            function tightTree(t, g) {
              function dfs$4(v) {
                g.nodeEdges(v).forEach(e => {
                  var edgeV = e.v,
                    w = v === edgeV ? e.w : edgeV;
                  if (!t.hasNode(w) && !slack$1(g, e)) {
                    t.setNode(w, {});
                    t.setEdge(v, w, {});
                    dfs$4(w);
                  }
                });
              }
              t.nodes().forEach(dfs$4);
              return t.nodeCount();
            }
            function findMinSlackEdge(t, g) {
              return g.edges().reduce((acc, edge$2) => {
                let edgeSlack = Number.POSITIVE_INFINITY;
                if (t.hasNode(edge$2.v) !== t.hasNode(edge$2.w)) edgeSlack = slack$1(g, edge$2);
                if (edgeSlack < acc[0]) return [edgeSlack, edge$2];
                return acc;
              }, [Number.POSITIVE_INFINITY, null])[1];
            }
            function shiftRanks(t, g, delta) {
              t.nodes().forEach(v => g.node(v).rank += delta);
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/rank/network-simplex.js
        require_network_simplex = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/rank/network-simplex.js": (exports, module) => {
            var feasibleTree$1 = require_feasible_tree();
            var slack = require_util().slack;
            var initRank = require_util().longestPath;
            var preorder = require_graphlib().alg.preorder;
            var postorder$1 = require_graphlib().alg.postorder;
            var simplify = require_util$1().simplify;
            module.exports = networkSimplex$1;
            networkSimplex$1.initLowLimValues = initLowLimValues;
            networkSimplex$1.initCutValues = initCutValues;
            networkSimplex$1.calcCutValue = calcCutValue;
            networkSimplex$1.leaveEdge = leaveEdge;
            networkSimplex$1.enterEdge = enterEdge;
            networkSimplex$1.exchangeEdges = exchangeEdges;
            function networkSimplex$1(g) {
              g = simplify(g);
              initRank(g);
              var t = feasibleTree$1(g);
              initLowLimValues(t);
              initCutValues(t, g);
              var e, f;
              while (e = leaveEdge(t)) {
                f = enterEdge(t, g, e);
                exchangeEdges(t, g, e, f);
              }
            }
            function initCutValues(t, g) {
              var vs = postorder$1(t, t.nodes());
              vs = vs.slice(0, vs.length - 1);
              vs.forEach(v => assignCutValue(t, g, v));
            }
            function assignCutValue(t, g, child) {
              var parent = t.node(child).parent;
              t.edge(child, parent).cutvalue = calcCutValue(t, g, child);
            }
            function calcCutValue(t, g, child) {
              var parent = t.node(child).parent;
              var childIsTail = true;
              var graphEdge = g.edge(child, parent);
              var cutValue = 0;
              if (!graphEdge) {
                childIsTail = false;
                graphEdge = g.edge(parent, child);
              }
              cutValue = graphEdge.weight;
              g.nodeEdges(child).forEach(e => {
                var isOutEdge = e.v === child,
                  other = isOutEdge ? e.w : e.v;
                if (other !== parent) {
                  var pointsToHead = isOutEdge === childIsTail,
                    otherWeight = g.edge(e).weight;
                  cutValue += pointsToHead ? otherWeight : -otherWeight;
                  if (isTreeEdge(t, child, other)) {
                    var otherCutValue = t.edge(child, other).cutvalue;
                    cutValue += pointsToHead ? -otherCutValue : otherCutValue;
                  }
                }
              });
              return cutValue;
            }
            function initLowLimValues(tree, root$2) {
              if (arguments.length < 2) root$2 = tree.nodes()[0];
              dfsAssignLowLim(tree, {}, 1, root$2);
            }
            function dfsAssignLowLim(tree, visited, nextLim, v, parent) {
              var low = nextLim;
              var label$7 = tree.node(v);
              visited[v] = true;
              tree.neighbors(v).forEach(w => {
                if (!Object.hasOwn(visited, w)) nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v);
              });
              label$7.low = low;
              label$7.lim = nextLim++;
              if (parent) label$7.parent = parent;else delete label$7.parent;
              return nextLim;
            }
            function leaveEdge(tree) {
              return tree.edges().find(e => tree.edge(e).cutvalue < 0);
            }
            function enterEdge(t, g, edge$2) {
              var v = edge$2.v;
              var w = edge$2.w;
              if (!g.hasEdge(v, w)) {
                v = edge$2.w;
                w = edge$2.v;
              }
              var vLabel = t.node(v);
              var wLabel = t.node(w);
              var tailLabel = vLabel;
              var flip = false;
              if (vLabel.lim > wLabel.lim) {
                tailLabel = wLabel;
                flip = true;
              }
              return g.edges().filter(edge$3 => {
                return flip === isDescendant(t, t.node(edge$3.v), tailLabel) && flip !== isDescendant(t, t.node(edge$3.w), tailLabel);
              }).reduce((acc, edge$3) => {
                if (slack(g, edge$3) < slack(g, acc)) return edge$3;
                return acc;
              });
            }
            function exchangeEdges(t, g, e, f) {
              var v = e.v;
              var w = e.w;
              t.removeEdge(v, w);
              t.setEdge(f.v, f.w, {});
              initLowLimValues(t);
              initCutValues(t, g);
              updateRanks(t, g);
            }
            function updateRanks(t, g) {
              var vs = preorder(t, t.nodes().find(v => !g.node(v).parent));
              vs = vs.slice(1);
              vs.forEach(v => {
                var parent = t.node(v).parent,
                  edge$2 = g.edge(v, parent),
                  flipped = false;
                if (!edge$2) {
                  edge$2 = g.edge(parent, v);
                  flipped = true;
                }
                g.node(v).rank = g.node(parent).rank + (flipped ? edge$2.minlen : -edge$2.minlen);
              });
            }
            function isTreeEdge(tree, u, v) {
              return tree.hasEdge(u, v);
            }
            function isDescendant(tree, vLabel, rootLabel) {
              return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/rank/index.js
        require_rank = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/rank/index.js": (exports, module) => {
            var longestPath = require_util().longestPath;
            var feasibleTree = require_feasible_tree();
            var networkSimplex = require_network_simplex();
            module.exports = rank$1;
            function rank$1(g) {
              switch (g.graph().ranker) {
                case "network-simplex":
                  networkSimplexRanker(g);
                  break;
                case "tight-tree":
                  tightTreeRanker(g);
                  break;
                case "longest-path":
                  longestPathRanker(g);
                  break;
                default:
                  networkSimplexRanker(g);
              }
            }
            var longestPathRanker = longestPath;
            function tightTreeRanker(g) {
              longestPath(g);
              feasibleTree(g);
            }
            function networkSimplexRanker(g) {
              networkSimplex(g);
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/parent-dummy-chains.js
        require_parent_dummy_chains = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/parent-dummy-chains.js": (exports, module) => {
            module.exports = parentDummyChains$1;
            function parentDummyChains$1(g) {
              let postorderNums = postorder(g);
              g.graph().dummyChains.forEach(v => {
                let node$1 = g.node(v);
                let edgeObj = node$1.edgeObj;
                let pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);
                let path = pathData.path;
                let lca = pathData.lca;
                let pathIdx = 0;
                let pathV = path[pathIdx];
                let ascending$2 = true;
                while (v !== edgeObj.w) {
                  node$1 = g.node(v);
                  if (ascending$2) {
                    while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node$1.rank) pathIdx++;
                    if (pathV === lca) ascending$2 = false;
                  }
                  if (!ascending$2) {
                    while (pathIdx < path.length - 1 && g.node(pathV = path[pathIdx + 1]).minRank <= node$1.rank) pathIdx++;
                    pathV = path[pathIdx];
                  }
                  g.setParent(v, pathV);
                  v = g.successors(v)[0];
                }
              });
            }
            function findPath(g, postorderNums, v, w) {
              let vPath = [];
              let wPath = [];
              let low = Math.min(postorderNums[v].low, postorderNums[w].low);
              let lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);
              let parent;
              let lca;
              parent = v;
              do {
                parent = g.parent(parent);
                vPath.push(parent);
              } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim));
              lca = parent;
              parent = w;
              while ((parent = g.parent(parent)) !== lca) wPath.push(parent);
              return {
                path: vPath.concat(wPath.reverse()),
                lca
              };
            }
            function postorder(g) {
              let result = {};
              let lim = 0;
              function dfs$4(v) {
                let low = lim;
                g.children(v).forEach(dfs$4);
                result[v] = {
                  low,
                  lim: lim++
                };
              }
              g.children().forEach(dfs$4);
              return result;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/nesting-graph.js
        require_nesting_graph = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/nesting-graph.js": (exports, module) => {
            var util$10 = require_util$1();
            module.exports = {
              run,
              cleanup
            };
            function run(g) {
              let root$2 = util$10.addDummyNode(g, "root", {}, "_root");
              let depths = treeDepths(g);
              let depthsArr = Object.values(depths);
              let height = util$10.applyWithChunking(Math.max, depthsArr) - 1;
              let nodeSep = 2 * height + 1;
              g.graph().nestingRoot = root$2;
              g.edges().forEach(e => g.edge(e).minlen *= nodeSep);
              let weight = sumWeights(g) + 1;
              g.children().forEach(child => dfs(g, root$2, nodeSep, weight, height, depths, child));
              g.graph().nodeRankFactor = nodeSep;
            }
            function dfs(g, root$2, nodeSep, weight, height, depths, v) {
              let children$2 = g.children(v);
              if (!children$2.length) {
                if (v !== root$2) g.setEdge(root$2, v, {
                  weight: 0,
                  minlen: nodeSep
                });
                return;
              }
              let top$1 = util$10.addBorderNode(g, "_bt");
              let bottom$2 = util$10.addBorderNode(g, "_bb");
              let label$7 = g.node(v);
              g.setParent(top$1, v);
              label$7.borderTop = top$1;
              g.setParent(bottom$2, v);
              label$7.borderBottom = bottom$2;
              children$2.forEach(child => {
                dfs(g, root$2, nodeSep, weight, height, depths, child);
                let childNode = g.node(child);
                let childTop = childNode.borderTop ? childNode.borderTop : child;
                let childBottom = childNode.borderBottom ? childNode.borderBottom : child;
                let thisWeight = childNode.borderTop ? weight : 2 * weight;
                let minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;
                g.setEdge(top$1, childTop, {
                  weight: thisWeight,
                  minlen,
                  nestingEdge: true
                });
                g.setEdge(childBottom, bottom$2, {
                  weight: thisWeight,
                  minlen,
                  nestingEdge: true
                });
              });
              if (!g.parent(v)) g.setEdge(root$2, top$1, {
                weight: 0,
                minlen: height + depths[v]
              });
            }
            function treeDepths(g) {
              var depths = {};
              function dfs$4(v, depth) {
                var children$2 = g.children(v);
                if (children$2 && children$2.length) children$2.forEach(child => dfs$4(child, depth + 1));
                depths[v] = depth;
              }
              g.children().forEach(v => dfs$4(v, 1));
              return depths;
            }
            function sumWeights(g) {
              return g.edges().reduce((acc, e) => acc + g.edge(e).weight, 0);
            }
            function cleanup(g) {
              var graphLabel = g.graph();
              g.removeNode(graphLabel.nestingRoot);
              delete graphLabel.nestingRoot;
              g.edges().forEach(e => {
                if (g.edge(e).nestingEdge) g.removeEdge(e);
              });
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/add-border-segments.js
        require_add_border_segments = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/add-border-segments.js": (exports, module) => {
            var util$9 = require_util$1();
            module.exports = addBorderSegments$1;
            function addBorderSegments$1(g) {
              function dfs$4(v) {
                let children$2 = g.children(v);
                let node$1 = g.node(v);
                if (children$2.length) children$2.forEach(dfs$4);
                if (Object.hasOwn(node$1, "minRank")) {
                  node$1.borderLeft = [];
                  node$1.borderRight = [];
                  for (let rank$2 = node$1.minRank, maxRank$1 = node$1.maxRank + 1; rank$2 < maxRank$1; ++rank$2) {
                    addBorderNode(g, "borderLeft", "_bl", v, node$1, rank$2);
                    addBorderNode(g, "borderRight", "_br", v, node$1, rank$2);
                  }
                }
              }
              g.children().forEach(dfs$4);
            }
            function addBorderNode(g, prop, prefix, sg, sgNode, rank$2) {
              let label$7 = {
                width: 0,
                height: 0,
                rank: rank$2,
                borderType: prop
              };
              let prev = sgNode[prop][rank$2 - 1];
              let curr = util$9.addDummyNode(g, "border", label$7, prefix);
              sgNode[prop][rank$2] = curr;
              g.setParent(curr, sg);
              if (prev) g.setEdge(prev, curr, {
                weight: 1
              });
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/coordinate-system.js
        require_coordinate_system = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/coordinate-system.js": (exports, module) => {
            module.exports = {
              adjust,
              undo
            };
            function adjust(g) {
              let rankDir = g.graph().rankdir.toLowerCase();
              if (rankDir === "lr" || rankDir === "rl") swapWidthHeight(g);
            }
            function undo(g) {
              let rankDir = g.graph().rankdir.toLowerCase();
              if (rankDir === "bt" || rankDir === "rl") reverseY(g);
              if (rankDir === "lr" || rankDir === "rl") {
                swapXY(g);
                swapWidthHeight(g);
              }
            }
            function swapWidthHeight(g) {
              g.nodes().forEach(v => swapWidthHeightOne(g.node(v)));
              g.edges().forEach(e => swapWidthHeightOne(g.edge(e)));
            }
            function swapWidthHeightOne(attrs) {
              let w = attrs.width;
              attrs.width = attrs.height;
              attrs.height = w;
            }
            function reverseY(g) {
              g.nodes().forEach(v => reverseYOne(g.node(v)));
              g.edges().forEach(e => {
                let edge$2 = g.edge(e);
                edge$2.points.forEach(reverseYOne);
                if (Object.hasOwn(edge$2, "y")) reverseYOne(edge$2);
              });
            }
            function reverseYOne(attrs) {
              attrs.y = -attrs.y;
            }
            function swapXY(g) {
              g.nodes().forEach(v => swapXYOne(g.node(v)));
              g.edges().forEach(e => {
                let edge$2 = g.edge(e);
                edge$2.points.forEach(swapXYOne);
                if (Object.hasOwn(edge$2, "x")) swapXYOne(edge$2);
              });
            }
            function swapXYOne(attrs) {
              let x = attrs.x;
              attrs.x = attrs.y;
              attrs.y = x;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/init-order.js
        require_init_order = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/init-order.js": (exports, module) => {
            var util$8 = require_util$1();
            module.exports = initOrder$1;
            function initOrder$1(g) {
              let visited = {};
              let simpleNodes = g.nodes().filter(v => !g.children(v).length);
              let simpleNodesRanks = simpleNodes.map(v => g.node(v).rank);
              let maxRank$1 = util$8.applyWithChunking(Math.max, simpleNodesRanks);
              let layers = util$8.range(maxRank$1 + 1).map(() => []);
              function dfs$4(v) {
                if (visited[v]) return;
                visited[v] = true;
                layers[g.node(v).rank].push(v);
                g.successors(v).forEach(dfs$4);
              }
              simpleNodes.sort((a, b) => g.node(a).rank - g.node(b).rank).forEach(dfs$4);
              return layers;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/cross-count.js
        require_cross_count = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/cross-count.js": (exports, module) => {
            var zipObject = require_util$1().zipObject;
            module.exports = crossCount$1;
            function crossCount$1(g, layering) {
              let cc = 0;
              for (let i = 1; i < layering.length; ++i) cc += twoLayerCrossCount(g, layering[i - 1], layering[i]);
              return cc;
            }
            function twoLayerCrossCount(g, northLayer, southLayer) {
              let southPos = zipObject(southLayer, southLayer.map((v, i) => i));
              let southEntries = northLayer.flatMap(v => {
                return g.outEdges(v).map(e => {
                  return {
                    pos: southPos[e.w],
                    weight: g.edge(e).weight
                  };
                }).sort((a, b) => a.pos - b.pos);
              });
              let firstIndex = 1;
              while (firstIndex < southLayer.length) firstIndex <<= 1;
              let treeSize = 2 * firstIndex - 1;
              firstIndex -= 1;
              let tree = new Array(treeSize).fill(0);
              let cc = 0;
              southEntries.forEach(entry => {
                let index = entry.pos + firstIndex;
                tree[index] += entry.weight;
                let weightSum = 0;
                while (index > 0) {
                  if (index % 2) weightSum += tree[index + 1];
                  index = index - 1 >> 1;
                  tree[index] += entry.weight;
                }
                cc += entry.weight * weightSum;
              });
              return cc;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/barycenter.js
        require_barycenter = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/barycenter.js": (exports, module) => {
            module.exports = barycenter$1;
            function barycenter$1(g, movable = []) {
              return movable.map(v => {
                let inV = g.inEdges(v);
                if (!inV.length) return {
                  v
                };else {
                  let result = inV.reduce((acc, e) => {
                    let edge$2 = g.edge(e),
                      nodeU = g.node(e.v);
                    return {
                      sum: acc.sum + edge$2.weight * nodeU.order,
                      weight: acc.weight + edge$2.weight
                    };
                  }, {
                    sum: 0,
                    weight: 0
                  });
                  return {
                    v,
                    barycenter: result.sum / result.weight,
                    weight: result.weight
                  };
                }
              });
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/resolve-conflicts.js
        require_resolve_conflicts = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/resolve-conflicts.js": (exports, module) => {
            var util$7 = require_util$1();
            module.exports = resolveConflicts$1;
            function resolveConflicts$1(entries, cg) {
              let mappedEntries = {};
              entries.forEach((entry, i) => {
                let tmp = mappedEntries[entry.v] = {
                  indegree: 0,
                  "in": [],
                  out: [],
                  vs: [entry.v],
                  i
                };
                if (entry.barycenter !== void 0) {
                  tmp.barycenter = entry.barycenter;
                  tmp.weight = entry.weight;
                }
              });
              cg.edges().forEach(e => {
                let entryV = mappedEntries[e.v];
                let entryW = mappedEntries[e.w];
                if (entryV !== void 0 && entryW !== void 0) {
                  entryW.indegree++;
                  entryV.out.push(mappedEntries[e.w]);
                }
              });
              return doResolveConflicts(Object.values(mappedEntries).filter(entry => !entry.indegree));
            }
            function doResolveConflicts(sourceSet) {
              let entries = [];
              function handleIn(vEntry) {
                return uEntry => {
                  if (uEntry.merged) return;
                  if (uEntry.barycenter === void 0 || vEntry.barycenter === void 0 || uEntry.barycenter >= vEntry.barycenter) mergeEntries(vEntry, uEntry);
                };
              }
              function handleOut(vEntry) {
                return wEntry => {
                  wEntry["in"].push(vEntry);
                  if (--wEntry.indegree === 0) sourceSet.push(wEntry);
                };
              }
              while (sourceSet.length) {
                let entry = sourceSet.pop();
                entries.push(entry);
                entry["in"].reverse().forEach(handleIn(entry));
                entry.out.forEach(handleOut(entry));
              }
              return entries.filter(entry => !entry.merged).map(entry => {
                return util$7.pick(entry, ["vs", "i", "barycenter", "weight"]);
              });
            }
            function mergeEntries(target$1, source) {
              let sum = 0;
              let weight = 0;
              if (target$1.weight) {
                sum += target$1.barycenter * target$1.weight;
                weight += target$1.weight;
              }
              if (source.weight) {
                sum += source.barycenter * source.weight;
                weight += source.weight;
              }
              target$1.vs = source.vs.concat(target$1.vs);
              target$1.barycenter = sum / weight;
              target$1.weight = weight;
              target$1.i = Math.min(source.i, target$1.i);
              source.merged = true;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/sort.js
        require_sort = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/sort.js": (exports, module) => {
            var util$6 = require_util$1();
            module.exports = sort$1;
            function sort$1(entries, biasRight) {
              let parts = util$6.partition(entries, entry => {
                return Object.hasOwn(entry, "barycenter");
              });
              let sortable = parts.lhs,
                unsortable = parts.rhs.sort((a, b) => b.i - a.i),
                vs = [],
                sum = 0,
                weight = 0,
                vsIndex = 0;
              sortable.sort(compareWithBias(!!biasRight));
              vsIndex = consumeUnsortable(vs, unsortable, vsIndex);
              sortable.forEach(entry => {
                vsIndex += entry.vs.length;
                vs.push(entry.vs);
                sum += entry.barycenter * entry.weight;
                weight += entry.weight;
                vsIndex = consumeUnsortable(vs, unsortable, vsIndex);
              });
              let result = {
                vs: vs.flat(true)
              };
              if (weight) {
                result.barycenter = sum / weight;
                result.weight = weight;
              }
              return result;
            }
            function consumeUnsortable(vs, unsortable, index) {
              let last;
              while (unsortable.length && (last = unsortable[unsortable.length - 1]).i <= index) {
                unsortable.pop();
                vs.push(last.vs);
                index++;
              }
              return index;
            }
            function compareWithBias(bias) {
              return (entryV, entryW) => {
                if (entryV.barycenter < entryW.barycenter) return -1;else if (entryV.barycenter > entryW.barycenter) return 1;
                return !bias ? entryV.i - entryW.i : entryW.i - entryV.i;
              };
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/sort-subgraph.js
        require_sort_subgraph = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/sort-subgraph.js": (exports, module) => {
            var barycenter = require_barycenter();
            var resolveConflicts = require_resolve_conflicts();
            var sort = require_sort();
            module.exports = sortSubgraph$1;
            function sortSubgraph$1(g, v, cg, biasRight) {
              let movable = g.children(v);
              let node$1 = g.node(v);
              let bl = node$1 ? node$1.borderLeft : void 0;
              let br = node$1 ? node$1.borderRight : void 0;
              let subgraphs = {};
              if (bl) movable = movable.filter(w => w !== bl && w !== br);
              let barycenters = barycenter(g, movable);
              barycenters.forEach(entry => {
                if (g.children(entry.v).length) {
                  let subgraphResult = sortSubgraph$1(g, entry.v, cg, biasRight);
                  subgraphs[entry.v] = subgraphResult;
                  if (Object.hasOwn(subgraphResult, "barycenter")) mergeBarycenters(entry, subgraphResult);
                }
              });
              let entries = resolveConflicts(barycenters, cg);
              expandSubgraphs(entries, subgraphs);
              let result = sort(entries, biasRight);
              if (bl) {
                result.vs = [bl, result.vs, br].flat(true);
                if (g.predecessors(bl).length) {
                  let blPred = g.node(g.predecessors(bl)[0]),
                    brPred = g.node(g.predecessors(br)[0]);
                  if (!Object.hasOwn(result, "barycenter")) {
                    result.barycenter = 0;
                    result.weight = 0;
                  }
                  result.barycenter = (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2);
                  result.weight += 2;
                }
              }
              return result;
            }
            function expandSubgraphs(entries, subgraphs) {
              entries.forEach(entry => {
                entry.vs = entry.vs.flatMap(v => {
                  if (subgraphs[v]) return subgraphs[v].vs;
                  return v;
                });
              });
            }
            function mergeBarycenters(target$1, other) {
              if (target$1.barycenter !== void 0) {
                target$1.barycenter = (target$1.barycenter * target$1.weight + other.barycenter * other.weight) / (target$1.weight + other.weight);
                target$1.weight += other.weight;
              } else {
                target$1.barycenter = other.barycenter;
                target$1.weight = other.weight;
              }
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/build-layer-graph.js
        require_build_layer_graph = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/build-layer-graph.js": (exports, module) => {
            var Graph$4 = require_graphlib().Graph;
            var util$5 = require_util$1();
            module.exports = buildLayerGraph$1;
            function buildLayerGraph$1(g, rank$2, relationship) {
              let root$2 = createRootNode(g),
                result = new Graph$4({
                  compound: true
                }).setGraph({
                  root: root$2
                }).setDefaultNodeLabel(v => g.node(v));
              g.nodes().forEach(v => {
                let node$1 = g.node(v),
                  parent = g.parent(v);
                if (node$1.rank === rank$2 || node$1.minRank <= rank$2 && rank$2 <= node$1.maxRank) {
                  result.setNode(v);
                  result.setParent(v, parent || root$2);
                  g[relationship](v).forEach(e => {
                    let u = e.v === v ? e.w : e.v,
                      edge$2 = result.edge(u, v),
                      weight = edge$2 !== void 0 ? edge$2.weight : 0;
                    result.setEdge(u, v, {
                      weight: g.edge(e).weight + weight
                    });
                  });
                  if (Object.hasOwn(node$1, "minRank")) result.setNode(v, {
                    borderLeft: node$1.borderLeft[rank$2],
                    borderRight: node$1.borderRight[rank$2]
                  });
                }
              });
              return result;
            }
            function createRootNode(g) {
              var v;
              while (g.hasNode(v = util$5.uniqueId("_root")));
              return v;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/add-subgraph-constraints.js
        require_add_subgraph_constraints = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/add-subgraph-constraints.js": (exports, module) => {
            module.exports = addSubgraphConstraints$1;
            function addSubgraphConstraints$1(g, cg, vs) {
              let prev = {},
                rootPrev;
              vs.forEach(v => {
                let child = g.parent(v),
                  parent,
                  prevChild;
                while (child) {
                  parent = g.parent(child);
                  if (parent) {
                    prevChild = prev[parent];
                    prev[parent] = child;
                  } else {
                    prevChild = rootPrev;
                    rootPrev = child;
                  }
                  if (prevChild && prevChild !== child) {
                    cg.setEdge(prevChild, child);
                    return;
                  }
                  child = parent;
                }
              });
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/index.js
        require_order = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/order/index.js": (exports, module) => {
            var initOrder = require_init_order();
            var crossCount = require_cross_count();
            var sortSubgraph = require_sort_subgraph();
            var buildLayerGraph = require_build_layer_graph();
            var addSubgraphConstraints = require_add_subgraph_constraints();
            var Graph$3 = require_graphlib().Graph;
            var util$4 = require_util$1();
            module.exports = order$1;
            function order$1(g, opts) {
              if (opts && typeof opts.customOrder === "function") {
                opts.customOrder(g, order$1);
                return;
              }
              let maxRank$1 = util$4.maxRank(g),
                downLayerGraphs = buildLayerGraphs(g, util$4.range(1, maxRank$1 + 1), "inEdges"),
                upLayerGraphs = buildLayerGraphs(g, util$4.range(maxRank$1 - 1, -1, -1), "outEdges");
              let layering = initOrder(g);
              assignOrder(g, layering);
              if (opts && opts.disableOptimalOrderHeuristic) return;
              let bestCC = Number.POSITIVE_INFINITY,
                best;
              for (let i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {
                sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);
                layering = util$4.buildLayerMatrix(g);
                let cc = crossCount(g, layering);
                if (cc < bestCC) {
                  lastBest = 0;
                  best = Object.assign({}, layering);
                  bestCC = cc;
                }
              }
              assignOrder(g, best);
            }
            function buildLayerGraphs(g, ranks, relationship) {
              return ranks.map(function (rank$2) {
                return buildLayerGraph(g, rank$2, relationship);
              });
            }
            function sweepLayerGraphs(layerGraphs, biasRight) {
              let cg = new Graph$3();
              layerGraphs.forEach(function (lg) {
                let root$2 = lg.graph().root;
                let sorted = sortSubgraph(lg, root$2, cg, biasRight);
                sorted.vs.forEach((v, i) => lg.node(v).order = i);
                addSubgraphConstraints(lg, cg, sorted.vs);
              });
            }
            function assignOrder(g, layering) {
              Object.values(layering).forEach(layer => layer.forEach((v, i) => g.node(v).order = i));
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/position/bk.js
        require_bk = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/position/bk.js": (exports, module) => {
            var Graph$2 = require_graphlib().Graph;
            var util$3 = require_util$1();
            module.exports = {
              positionX: positionX$1,
              findType1Conflicts,
              findType2Conflicts,
              addConflict,
              hasConflict,
              verticalAlignment,
              horizontalCompaction,
              alignCoordinates,
              findSmallestWidthAlignment,
              balance
            };
            function findType1Conflicts(g, layering) {
              let conflicts = {};
              function visitLayer(prevLayer, layer) {
                let k0 = 0,
                  scanPos = 0,
                  prevLayerLength = prevLayer.length,
                  lastNode = layer[layer.length - 1];
                layer.forEach((v, i) => {
                  let w = findOtherInnerSegmentNode(g, v),
                    k1 = w ? g.node(w).order : prevLayerLength;
                  if (w || v === lastNode) {
                    layer.slice(scanPos, i + 1).forEach(scanNode => {
                      g.predecessors(scanNode).forEach(u => {
                        let uLabel = g.node(u),
                          uPos = uLabel.order;
                        if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) addConflict(conflicts, u, scanNode);
                      });
                    });
                    scanPos = i + 1;
                    k0 = k1;
                  }
                });
                return layer;
              }
              layering.length && layering.reduce(visitLayer);
              return conflicts;
            }
            function findType2Conflicts(g, layering) {
              let conflicts = {};
              function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {
                let v;
                util$3.range(southPos, southEnd).forEach(i => {
                  v = south[i];
                  if (g.node(v).dummy) g.predecessors(v).forEach(u => {
                    let uNode = g.node(u);
                    if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) addConflict(conflicts, u, v);
                  });
                });
              }
              function visitLayer(north, south) {
                let prevNorthPos = -1,
                  nextNorthPos,
                  southPos = 0;
                south.forEach((v, southLookahead) => {
                  if (g.node(v).dummy === "border") {
                    let predecessors = g.predecessors(v);
                    if (predecessors.length) {
                      nextNorthPos = g.node(predecessors[0]).order;
                      scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);
                      southPos = southLookahead;
                      prevNorthPos = nextNorthPos;
                    }
                  }
                  scan(south, southPos, south.length, nextNorthPos, north.length);
                });
                return south;
              }
              layering.length && layering.reduce(visitLayer);
              return conflicts;
            }
            function findOtherInnerSegmentNode(g, v) {
              if (g.node(v).dummy) return g.predecessors(v).find(u => g.node(u).dummy);
            }
            function addConflict(conflicts, v, w) {
              if (v > w) {
                let tmp = v;
                v = w;
                w = tmp;
              }
              let conflictsV = conflicts[v];
              if (!conflictsV) conflicts[v] = conflictsV = {};
              conflictsV[w] = true;
            }
            function hasConflict(conflicts, v, w) {
              if (v > w) {
                let tmp = v;
                v = w;
                w = tmp;
              }
              return !!conflicts[v] && Object.hasOwn(conflicts[v], w);
            }
            function verticalAlignment(g, layering, conflicts, neighborFn) {
              let root$2 = {},
                align = {},
                pos = {};
              layering.forEach(layer => {
                layer.forEach((v, order$2) => {
                  root$2[v] = v;
                  align[v] = v;
                  pos[v] = order$2;
                });
              });
              layering.forEach(layer => {
                let prevIdx = -1;
                layer.forEach(v => {
                  let ws = neighborFn(v);
                  if (ws.length) {
                    ws = ws.sort((a, b) => pos[a] - pos[b]);
                    let mp = (ws.length - 1) / 2;
                    for (let i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {
                      let w = ws[i];
                      if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) {
                        align[w] = v;
                        align[v] = root$2[v] = root$2[w];
                        prevIdx = pos[w];
                      }
                    }
                  }
                });
              });
              return {
                root: root$2,
                align
              };
            }
            function horizontalCompaction(g, layering, root$2, align, reverseSep) {
              let xs = {},
                blockG = buildBlockGraph(g, layering, root$2, reverseSep),
                borderType = reverseSep ? "borderLeft" : "borderRight";
              function iterate(setXsFunc, nextNodesFunc) {
                let stack = blockG.nodes();
                let elem = stack.pop();
                let visited = {};
                while (elem) {
                  if (visited[elem]) setXsFunc(elem);else {
                    visited[elem] = true;
                    stack.push(elem);
                    stack = stack.concat(nextNodesFunc(elem));
                  }
                  elem = stack.pop();
                }
              }
              function pass1(elem) {
                xs[elem] = blockG.inEdges(elem).reduce((acc, e) => {
                  return Math.max(acc, xs[e.v] + blockG.edge(e));
                }, 0);
              }
              function pass2(elem) {
                let min = blockG.outEdges(elem).reduce((acc, e) => {
                  return Math.min(acc, xs[e.w] - blockG.edge(e));
                }, Number.POSITIVE_INFINITY);
                let node$1 = g.node(elem);
                if (min !== Number.POSITIVE_INFINITY && node$1.borderType !== borderType) xs[elem] = Math.max(xs[elem], min);
              }
              iterate(pass1, blockG.predecessors.bind(blockG));
              iterate(pass2, blockG.successors.bind(blockG));
              Object.keys(align).forEach(v => xs[v] = xs[root$2[v]]);
              return xs;
            }
            function buildBlockGraph(g, layering, root$2, reverseSep) {
              let blockGraph = new Graph$2(),
                graphLabel = g.graph(),
                sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);
              layering.forEach(layer => {
                let u;
                layer.forEach(v => {
                  let vRoot = root$2[v];
                  blockGraph.setNode(vRoot);
                  if (u) {
                    var uRoot = root$2[u],
                      prevMax = blockGraph.edge(uRoot, vRoot);
                    blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));
                  }
                  u = v;
                });
              });
              return blockGraph;
            }
            function findSmallestWidthAlignment(g, xss) {
              return Object.values(xss).reduce((currentMinAndXs, xs) => {
                let max = Number.NEGATIVE_INFINITY;
                let min = Number.POSITIVE_INFINITY;
                Object.entries(xs).forEach(([v, x]) => {
                  let halfWidth = width(g, v) / 2;
                  max = Math.max(x + halfWidth, max);
                  min = Math.min(x - halfWidth, min);
                });
                const newMin = max - min;
                if (newMin < currentMinAndXs[0]) currentMinAndXs = [newMin, xs];
                return currentMinAndXs;
              }, [Number.POSITIVE_INFINITY, null])[1];
            }
            function alignCoordinates(xss, alignTo) {
              let alignToVals = Object.values(alignTo),
                alignToMin = util$3.applyWithChunking(Math.min, alignToVals),
                alignToMax = util$3.applyWithChunking(Math.max, alignToVals);
              ["u", "d"].forEach(vert => {
                ["l", "r"].forEach(horiz => {
                  let alignment = vert + horiz,
                    xs = xss[alignment];
                  if (xs === alignTo) return;
                  let xsVals = Object.values(xs);
                  let delta = alignToMin - util$3.applyWithChunking(Math.min, xsVals);
                  if (horiz !== "l") delta = alignToMax - util$3.applyWithChunking(Math.max, xsVals);
                  if (delta) xss[alignment] = util$3.mapValues(xs, x => x + delta);
                });
              });
            }
            function balance(xss, align) {
              return util$3.mapValues(xss.ul, (num, v) => {
                if (align) return xss[align.toLowerCase()][v];else {
                  let xs = Object.values(xss).map(xs$1 => xs$1[v]).sort((a, b) => a - b);
                  return (xs[1] + xs[2]) / 2;
                }
              });
            }
            function positionX$1(g) {
              let layering = util$3.buildLayerMatrix(g);
              let conflicts = Object.assign(findType1Conflicts(g, layering), findType2Conflicts(g, layering));
              let xss = {};
              let adjustedLayering;
              ["u", "d"].forEach(vert => {
                adjustedLayering = vert === "u" ? layering : Object.values(layering).reverse();
                ["l", "r"].forEach(horiz => {
                  if (horiz === "r") adjustedLayering = adjustedLayering.map(inner => {
                    return Object.values(inner).reverse();
                  });
                  let neighborFn = (vert === "u" ? g.predecessors : g.successors).bind(g);
                  let align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);
                  let xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === "r");
                  if (horiz === "r") xs = util$3.mapValues(xs, x => -x);
                  xss[vert + horiz] = xs;
                });
              });
              alignCoordinates(xss, findSmallestWidthAlignment(g, xss));
              return balance(xss, g.graph().align);
            }
            function sep(nodeSep, edgeSep, reverseSep) {
              return (g, v, w) => {
                let vLabel = g.node(v);
                let wLabel = g.node(w);
                let sum = 0;
                let delta;
                sum += vLabel.width / 2;
                if (Object.hasOwn(vLabel, "labelpos")) switch (vLabel.labelpos.toLowerCase()) {
                  case "l":
                    delta = -vLabel.width / 2;
                    break;
                  case "r":
                    delta = vLabel.width / 2;
                    break;
                }
                if (delta) sum += reverseSep ? delta : -delta;
                delta = 0;
                sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;
                sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;
                sum += wLabel.width / 2;
                if (Object.hasOwn(wLabel, "labelpos")) switch (wLabel.labelpos.toLowerCase()) {
                  case "l":
                    delta = wLabel.width / 2;
                    break;
                  case "r":
                    delta = -wLabel.width / 2;
                    break;
                }
                if (delta) sum += reverseSep ? delta : -delta;
                delta = 0;
                return sum;
              };
            }
            function width(g, v) {
              return g.node(v).width;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/position/index.js
        require_position = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/position/index.js": (exports, module) => {
            var util$2 = require_util$1();
            var positionX = require_bk().positionX;
            module.exports = position$1;
            function position$1(g) {
              g = util$2.asNonCompoundGraph(g);
              positionY(g);
              Object.entries(positionX(g)).forEach(([v, x]) => g.node(v).x = x);
            }
            function positionY(g) {
              let layering = util$2.buildLayerMatrix(g);
              let rankSep = g.graph().ranksep;
              let prevY = 0;
              layering.forEach(layer => {
                const maxHeight = layer.reduce((acc, v) => {
                  const height = g.node(v).height;
                  if (acc > height) return acc;else return height;
                }, 0);
                layer.forEach(v => g.node(v).y = prevY + maxHeight / 2);
                prevY += maxHeight + rankSep;
              });
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/layout.js
        require_layout = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/layout.js": (exports, module) => {
            var acyclic = require_acyclic();
            var normalize = require_normalize();
            var rank = require_rank();
            var normalizeRanks = require_util$1().normalizeRanks;
            var parentDummyChains = require_parent_dummy_chains();
            var removeEmptyRanks = require_util$1().removeEmptyRanks;
            var nestingGraph = require_nesting_graph();
            var addBorderSegments = require_add_border_segments();
            var coordinateSystem = require_coordinate_system();
            var order = require_order();
            var position = require_position();
            var util$1 = require_util$1();
            var Graph$1 = require_graphlib().Graph;
            module.exports = layout;
            function layout(g, opts) {
              let time$1 = opts && opts.debugTiming ? util$1.time : util$1.notime;
              time$1("layout", () => {
                let layoutGraph = time$1("  buildLayoutGraph", () => buildLayoutGraph(g));
                time$1("  runLayout", () => runLayout(layoutGraph, time$1, opts));
                time$1("  updateInputGraph", () => updateInputGraph(g, layoutGraph));
              });
            }
            function runLayout(g, time$1, opts) {
              time$1("    makeSpaceForEdgeLabels", () => makeSpaceForEdgeLabels(g));
              time$1("    removeSelfEdges", () => removeSelfEdges(g));
              time$1("    acyclic", () => acyclic.run(g));
              time$1("    nestingGraph.run", () => nestingGraph.run(g));
              time$1("    rank", () => rank(util$1.asNonCompoundGraph(g)));
              time$1("    injectEdgeLabelProxies", () => injectEdgeLabelProxies(g));
              time$1("    removeEmptyRanks", () => removeEmptyRanks(g));
              time$1("    nestingGraph.cleanup", () => nestingGraph.cleanup(g));
              time$1("    normalizeRanks", () => normalizeRanks(g));
              time$1("    assignRankMinMax", () => assignRankMinMax(g));
              time$1("    removeEdgeLabelProxies", () => removeEdgeLabelProxies(g));
              time$1("    normalize.run", () => normalize.run(g));
              time$1("    parentDummyChains", () => parentDummyChains(g));
              time$1("    addBorderSegments", () => addBorderSegments(g));
              time$1("    order", () => order(g, opts));
              time$1("    insertSelfEdges", () => insertSelfEdges(g));
              time$1("    adjustCoordinateSystem", () => coordinateSystem.adjust(g));
              time$1("    position", () => position(g));
              time$1("    positionSelfEdges", () => positionSelfEdges(g));
              time$1("    removeBorderNodes", () => removeBorderNodes(g));
              time$1("    normalize.undo", () => normalize.undo(g));
              time$1("    fixupEdgeLabelCoords", () => fixupEdgeLabelCoords(g));
              time$1("    undoCoordinateSystem", () => coordinateSystem.undo(g));
              time$1("    translateGraph", () => translateGraph(g));
              time$1("    assignNodeIntersects", () => assignNodeIntersects(g));
              time$1("    reversePoints", () => reversePointsForReversedEdges(g));
              time$1("    acyclic.undo", () => acyclic.undo(g));
            }
            function updateInputGraph(inputGraph, layoutGraph) {
              inputGraph.nodes().forEach(v => {
                let inputLabel = inputGraph.node(v);
                let layoutLabel = layoutGraph.node(v);
                if (inputLabel) {
                  inputLabel.x = layoutLabel.x;
                  inputLabel.y = layoutLabel.y;
                  inputLabel.rank = layoutLabel.rank;
                  if (layoutGraph.children(v).length) {
                    inputLabel.width = layoutLabel.width;
                    inputLabel.height = layoutLabel.height;
                  }
                }
              });
              inputGraph.edges().forEach(e => {
                let inputLabel = inputGraph.edge(e);
                let layoutLabel = layoutGraph.edge(e);
                inputLabel.points = layoutLabel.points;
                if (Object.hasOwn(layoutLabel, "x")) {
                  inputLabel.x = layoutLabel.x;
                  inputLabel.y = layoutLabel.y;
                }
              });
              inputGraph.graph().width = layoutGraph.graph().width;
              inputGraph.graph().height = layoutGraph.graph().height;
            }
            var graphNumAttrs = ["nodesep", "edgesep", "ranksep", "marginx", "marginy"];
            var graphDefaults = {
              ranksep: 50,
              edgesep: 20,
              nodesep: 50,
              rankdir: "tb"
            };
            var graphAttrs = ["acyclicer", "ranker", "rankdir", "align"];
            var nodeNumAttrs = ["width", "height"];
            var nodeDefaults = {
              width: 0,
              height: 0
            };
            var edgeNumAttrs = ["minlen", "weight", "width", "height", "labeloffset"];
            var edgeDefaults = {
              minlen: 1,
              weight: 1,
              width: 0,
              height: 0,
              labeloffset: 10,
              labelpos: "r"
            };
            var edgeAttrs = ["labelpos"];
            function buildLayoutGraph(inputGraph) {
              let g = new Graph$1({
                multigraph: true,
                compound: true
              });
              let graph = canonicalize(inputGraph.graph());
              g.setGraph(Object.assign({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), util$1.pick(graph, graphAttrs)));
              inputGraph.nodes().forEach(v => {
                const newNode = selectNumberAttrs(canonicalize(inputGraph.node(v)), nodeNumAttrs);
                Object.keys(nodeDefaults).forEach(k => {
                  if (newNode[k] === void 0) newNode[k] = nodeDefaults[k];
                });
                g.setNode(v, newNode);
                g.setParent(v, inputGraph.parent(v));
              });
              inputGraph.edges().forEach(e => {
                let edge$2 = canonicalize(inputGraph.edge(e));
                g.setEdge(e, Object.assign({}, edgeDefaults, selectNumberAttrs(edge$2, edgeNumAttrs), util$1.pick(edge$2, edgeAttrs)));
              });
              return g;
            }
            function makeSpaceForEdgeLabels(g) {
              let graph = g.graph();
              graph.ranksep /= 2;
              g.edges().forEach(e => {
                let edge$2 = g.edge(e);
                edge$2.minlen *= 2;
                if (edge$2.labelpos.toLowerCase() !== "c") if (graph.rankdir === "TB" || graph.rankdir === "BT") edge$2.width += edge$2.labeloffset;else edge$2.height += edge$2.labeloffset;
              });
            }
            function injectEdgeLabelProxies(g) {
              g.edges().forEach(e => {
                let edge$2 = g.edge(e);
                if (edge$2.width && edge$2.height) {
                  let v = g.node(e.v);
                  let label$7 = {
                    rank: (g.node(e.w).rank - v.rank) / 2 + v.rank,
                    e
                  };
                  util$1.addDummyNode(g, "edge-proxy", label$7, "_ep");
                }
              });
            }
            function assignRankMinMax(g) {
              let maxRank$1 = 0;
              g.nodes().forEach(v => {
                let node$1 = g.node(v);
                if (node$1.borderTop) {
                  node$1.minRank = g.node(node$1.borderTop).rank;
                  node$1.maxRank = g.node(node$1.borderBottom).rank;
                  maxRank$1 = Math.max(maxRank$1, node$1.maxRank);
                }
              });
              g.graph().maxRank = maxRank$1;
            }
            function removeEdgeLabelProxies(g) {
              g.nodes().forEach(v => {
                let node$1 = g.node(v);
                if (node$1.dummy === "edge-proxy") {
                  g.edge(node$1.e).labelRank = node$1.rank;
                  g.removeNode(v);
                }
              });
            }
            function translateGraph(g) {
              let minX = Number.POSITIVE_INFINITY;
              let maxX = 0;
              let minY = Number.POSITIVE_INFINITY;
              let maxY = 0;
              let graphLabel = g.graph();
              let marginX = graphLabel.marginx || 0;
              let marginY = graphLabel.marginy || 0;
              function getExtremes(attrs) {
                let x = attrs.x;
                let y = attrs.y;
                let w = attrs.width;
                let h$1 = attrs.height;
                minX = Math.min(minX, x - w / 2);
                maxX = Math.max(maxX, x + w / 2);
                minY = Math.min(minY, y - h$1 / 2);
                maxY = Math.max(maxY, y + h$1 / 2);
              }
              g.nodes().forEach(v => getExtremes(g.node(v)));
              g.edges().forEach(e => {
                let edge$2 = g.edge(e);
                if (Object.hasOwn(edge$2, "x")) getExtremes(edge$2);
              });
              minX -= marginX;
              minY -= marginY;
              g.nodes().forEach(v => {
                let node$1 = g.node(v);
                node$1.x -= minX;
                node$1.y -= minY;
              });
              g.edges().forEach(e => {
                let edge$2 = g.edge(e);
                edge$2.points.forEach(p => {
                  p.x -= minX;
                  p.y -= minY;
                });
                if (Object.hasOwn(edge$2, "x")) edge$2.x -= minX;
                if (Object.hasOwn(edge$2, "y")) edge$2.y -= minY;
              });
              graphLabel.width = maxX - minX + marginX;
              graphLabel.height = maxY - minY + marginY;
            }
            function assignNodeIntersects(g) {
              g.edges().forEach(e => {
                let edge$2 = g.edge(e);
                let nodeV = g.node(e.v);
                let nodeW = g.node(e.w);
                let p1, p2;
                if (!edge$2.points) {
                  edge$2.points = [];
                  p1 = nodeW;
                  p2 = nodeV;
                } else {
                  p1 = edge$2.points[0];
                  p2 = edge$2.points[edge$2.points.length - 1];
                }
                edge$2.points.unshift(util$1.intersectRect(nodeV, p1));
                edge$2.points.push(util$1.intersectRect(nodeW, p2));
              });
            }
            function fixupEdgeLabelCoords(g) {
              g.edges().forEach(e => {
                let edge$2 = g.edge(e);
                if (Object.hasOwn(edge$2, "x")) {
                  if (edge$2.labelpos === "l" || edge$2.labelpos === "r") edge$2.width -= edge$2.labeloffset;
                  switch (edge$2.labelpos) {
                    case "l":
                      edge$2.x -= edge$2.width / 2 + edge$2.labeloffset;
                      break;
                    case "r":
                      edge$2.x += edge$2.width / 2 + edge$2.labeloffset;
                      break;
                  }
                }
              });
            }
            function reversePointsForReversedEdges(g) {
              g.edges().forEach(e => {
                let edge$2 = g.edge(e);
                if (edge$2.reversed) edge$2.points.reverse();
              });
            }
            function removeBorderNodes(g) {
              g.nodes().forEach(v => {
                if (g.children(v).length) {
                  let node$1 = g.node(v);
                  let t = g.node(node$1.borderTop);
                  let b = g.node(node$1.borderBottom);
                  let l = g.node(node$1.borderLeft[node$1.borderLeft.length - 1]);
                  let r = g.node(node$1.borderRight[node$1.borderRight.length - 1]);
                  node$1.width = Math.abs(r.x - l.x);
                  node$1.height = Math.abs(b.y - t.y);
                  node$1.x = l.x + node$1.width / 2;
                  node$1.y = t.y + node$1.height / 2;
                }
              });
              g.nodes().forEach(v => {
                if (g.node(v).dummy === "border") g.removeNode(v);
              });
            }
            function removeSelfEdges(g) {
              g.edges().forEach(e => {
                if (e.v === e.w) {
                  var node$1 = g.node(e.v);
                  if (!node$1.selfEdges) node$1.selfEdges = [];
                  node$1.selfEdges.push({
                    e,
                    label: g.edge(e)
                  });
                  g.removeEdge(e);
                }
              });
            }
            function insertSelfEdges(g) {
              util$1.buildLayerMatrix(g).forEach(layer => {
                var orderShift = 0;
                layer.forEach((v, i) => {
                  var node$1 = g.node(v);
                  node$1.order = i + orderShift;
                  (node$1.selfEdges || []).forEach(selfEdge => {
                    util$1.addDummyNode(g, "selfedge", {
                      width: selfEdge.label.width,
                      height: selfEdge.label.height,
                      rank: node$1.rank,
                      order: i + ++orderShift,
                      e: selfEdge.e,
                      label: selfEdge.label
                    }, "_se");
                  });
                  delete node$1.selfEdges;
                });
              });
            }
            function positionSelfEdges(g) {
              g.nodes().forEach(v => {
                var node$1 = g.node(v);
                if (node$1.dummy === "selfedge") {
                  var selfNode = g.node(node$1.e.v);
                  var x = selfNode.x + selfNode.width / 2;
                  var y = selfNode.y;
                  var dx = node$1.x - x;
                  var dy = selfNode.height / 2;
                  g.setEdge(node$1.e, node$1.label);
                  g.removeNode(v);
                  node$1.label.points = [{
                    x: x + 2 * dx / 3,
                    y: y - dy
                  }, {
                    x: x + 5 * dx / 6,
                    y: y - dy
                  }, {
                    x: x + dx,
                    y
                  }, {
                    x: x + 5 * dx / 6,
                    y: y + dy
                  }, {
                    x: x + 2 * dx / 3,
                    y: y + dy
                  }];
                  node$1.label.x = node$1.x;
                  node$1.label.y = node$1.y;
                }
              });
            }
            function selectNumberAttrs(obj, attrs) {
              return util$1.mapValues(util$1.pick(obj, attrs), Number);
            }
            function canonicalize(attrs) {
              var newAttrs = {};
              if (attrs) Object.entries(attrs).forEach(([k, v]) => {
                if (typeof k === "string") k = k.toLowerCase();
                newAttrs[k] = v;
              });
              return newAttrs;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/debug.js
        require_debug = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/debug.js": (exports, module) => {
            var util = require_util$1();
            var Graph = require_graphlib().Graph;
            module.exports = {
              debugOrdering
            };
            /* istanbul ignore next */
            function debugOrdering(g) {
              let layerMatrix = util.buildLayerMatrix(g);
              let h$1 = new Graph({
                compound: true,
                multigraph: true
              }).setGraph({});
              g.nodes().forEach(v => {
                h$1.setNode(v, {
                  label: v
                });
                h$1.setParent(v, "layer" + g.node(v).rank);
              });
              g.edges().forEach(e => h$1.setEdge(e.v, e.w, {}, e.name));
              layerMatrix.forEach((layer, i) => {
                let layerV = "layer" + i;
                h$1.setNode(layerV, {
                  rank: "same"
                });
                layer.reduce((u, v) => {
                  h$1.setEdge(u, v, {
                    style: "invis"
                  });
                  return v;
                });
              });
              return h$1;
            }
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/version.js
        require_version = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/lib/version.js": (exports, module) => {
            module.exports = "1.1.4";
          }
        }); //#endregion
        //#region ../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/index.js
        require_dagre = /* @__PURE__ */__commonJS({
          "../../../node_modules/.pnpm/@dagrejs+dagre@1.1.4/node_modules/@dagrejs/dagre/index.js": (exports, module) => {
            module.exports = {
              graphlib: require_graphlib(),
              layout: require_layout(),
              debug: require_debug(),
              util: {
                time: require_util$1().time,
                notime: require_util$1().notime
              },
              version: require_version()
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/composables/useCanvasLayout.ts
        import_dagre = /* @__PURE__ */__toESM(require_dagre());
        NODE_X_SPACING = 16 * 8;
        NODE_Y_SPACING = 16 * 6;
        SUBGRAPH_SPACING = 16 * 8;
        AI_X_SPACING = 16 * 3;
        AI_Y_SPACING = 16 * 8;
        STICKY_BOTTOM_PADDING = 16 * 4;
        noop = {
          value: () => {}
        };
        Dispatch.prototype = dispatch.prototype = {
          constructor: Dispatch,
          on: function (typename, callback) {
            var _ = this._,
              T = parseTypenames$1(typename + "", _),
              t,
              i = -1,
              n = T.length;
            if (arguments.length < 2) {
              while (++i < n) if ((t = (typename = T[i]).type) && (t = get$1(_[t], typename.name))) return t;
              return;
            }
            if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
            while (++i < n) if (t = (typename = T[i]).type) _[t] = set$1(_[t], typename.name, callback);else if (callback == null) for (t in _) _[t] = set$1(_[t], typename.name, null);
            return this;
          },
          copy: function () {
            var copy = {},
              _ = this._;
            for (var t in _) copy[t] = _[t].slice();
            return new Dispatch(copy);
          },
          call: function (type, that) {
            if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
            if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
            for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
          },
          apply: function (type, that, args) {
            if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
            for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
          }
        };
        xhtml = "http://www.w3.org/1999/xhtml";
        namespaces = {
          svg: "http://www.w3.org/2000/svg",
          xhtml,
          xlink: "http://www.w3.org/1999/xlink",
          xml: "http://www.w3.org/XML/1998/namespace",
          xmlns: "http://www.w3.org/2000/xmlns/"
        };
        find = Array.prototype.find;
        filter = Array.prototype.filter;
        EnterNode.prototype = {
          constructor: EnterNode,
          appendChild: function (child) {
            return this._parent.insertBefore(child, this._next);
          },
          insertBefore: function (child, next) {
            return this._parent.insertBefore(child, next);
          },
          querySelector: function (selector2) {
            return this._parent.querySelector(selector2);
          },
          querySelectorAll: function (selector2) {
            return this._parent.querySelectorAll(selector2);
          }
        };
        ClassList.prototype = {
          add: function (name) {
            if (this._names.indexOf(name) < 0) {
              this._names.push(name);
              this._node.setAttribute("class", this._names.join(" "));
            }
          },
          remove: function (name) {
            var i = this._names.indexOf(name);
            if (i >= 0) {
              this._names.splice(i, 1);
              this._node.setAttribute("class", this._names.join(" "));
            }
          },
          contains: function (name) {
            return this._names.indexOf(name) >= 0;
          }
        };
        root = [null];
        Selection$1.prototype = selection.prototype = {
          constructor: Selection$1,
          select: selection_select,
          selectAll: selection_selectAll,
          selectChild: selection_selectChild,
          selectChildren: selection_selectChildren,
          filter: selection_filter,
          data: selection_data,
          enter: selection_enter,
          exit: selection_exit,
          join: selection_join,
          merge: selection_merge,
          selection: selection_selection,
          order: selection_order,
          sort: selection_sort,
          call: selection_call,
          nodes: selection_nodes,
          node: selection_node,
          size: selection_size,
          empty: selection_empty,
          each: selection_each,
          attr: selection_attr,
          style: selection_style,
          property: selection_property,
          classed: selection_classed,
          text: selection_text,
          html: selection_html,
          raise: selection_raise,
          lower: selection_lower,
          append: selection_append,
          insert: selection_insert,
          remove: selection_remove,
          clone: selection_clone,
          datum: selection_datum,
          on: selection_on,
          dispatch: selection_dispatch,
          [Symbol.iterator]: selection_iterator
        };
        nonpassivecapture = {
          capture: true,
          passive: false
        };
        darker = .7;
        brighter = 1 / darker;
        reI = "\\s*([+-]?\\d+)\\s*", reN = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*", reP = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*", reHex = /^#([0-9a-f]{3,8})$/, reRgbInteger = /* @__PURE__ */new RegExp(`^rgb\\(${reI},${reI},${reI}\\)$`), reRgbPercent = /* @__PURE__ */new RegExp(`^rgb\\(${reP},${reP},${reP}\\)$`), reRgbaInteger = /* @__PURE__ */new RegExp(`^rgba\\(${reI},${reI},${reI},${reN}\\)$`), reRgbaPercent = /* @__PURE__ */new RegExp(`^rgba\\(${reP},${reP},${reP},${reN}\\)$`), reHslPercent = /* @__PURE__ */new RegExp(`^hsl\\(${reN},${reP},${reP}\\)$`), reHslaPercent = /* @__PURE__ */new RegExp(`^hsla\\(${reN},${reP},${reP},${reN}\\)$`);
        named = {
          aliceblue: 15792383,
          antiquewhite: 16444375,
          aqua: 65535,
          aquamarine: 8388564,
          azure: 15794175,
          beige: 16119260,
          bisque: 16770244,
          black: 0,
          blanchedalmond: 16772045,
          blue: 255,
          blueviolet: 9055202,
          brown: 10824234,
          burlywood: 14596231,
          cadetblue: 6266528,
          chartreuse: 8388352,
          chocolate: 13789470,
          coral: 16744272,
          cornflowerblue: 6591981,
          cornsilk: 16775388,
          crimson: 14423100,
          cyan: 65535,
          darkblue: 139,
          darkcyan: 35723,
          darkgoldenrod: 12092939,
          darkgray: 11119017,
          darkgreen: 25600,
          darkgrey: 11119017,
          darkkhaki: 12433259,
          darkmagenta: 9109643,
          darkolivegreen: 5597999,
          darkorange: 16747520,
          darkorchid: 10040012,
          darkred: 9109504,
          darksalmon: 15308410,
          darkseagreen: 9419919,
          darkslateblue: 4734347,
          darkslategray: 3100495,
          darkslategrey: 3100495,
          darkturquoise: 52945,
          darkviolet: 9699539,
          deeppink: 16716947,
          deepskyblue: 49151,
          dimgray: 6908265,
          dimgrey: 6908265,
          dodgerblue: 2003199,
          firebrick: 11674146,
          floralwhite: 16775920,
          forestgreen: 2263842,
          fuchsia: 16711935,
          gainsboro: 14474460,
          ghostwhite: 16316671,
          gold: 16766720,
          goldenrod: 14329120,
          gray: 8421504,
          green: 32768,
          greenyellow: 11403055,
          grey: 8421504,
          honeydew: 15794160,
          hotpink: 16738740,
          indianred: 13458524,
          indigo: 4915330,
          ivory: 16777200,
          khaki: 15787660,
          lavender: 15132410,
          lavenderblush: 16773365,
          lawngreen: 8190976,
          lemonchiffon: 16775885,
          lightblue: 11393254,
          lightcoral: 15761536,
          lightcyan: 14745599,
          lightgoldenrodyellow: 16448210,
          lightgray: 13882323,
          lightgreen: 9498256,
          lightgrey: 13882323,
          lightpink: 16758465,
          lightsalmon: 16752762,
          lightseagreen: 2142890,
          lightskyblue: 8900346,
          lightslategray: 7833753,
          lightslategrey: 7833753,
          lightsteelblue: 11584734,
          lightyellow: 16777184,
          lime: 65280,
          limegreen: 3329330,
          linen: 16445670,
          magenta: 16711935,
          maroon: 8388608,
          mediumaquamarine: 6737322,
          mediumblue: 205,
          mediumorchid: 12211667,
          mediumpurple: 9662683,
          mediumseagreen: 3978097,
          mediumslateblue: 8087790,
          mediumspringgreen: 64154,
          mediumturquoise: 4772300,
          mediumvioletred: 13047173,
          midnightblue: 1644912,
          mintcream: 16121850,
          mistyrose: 16770273,
          moccasin: 16770229,
          navajowhite: 16768685,
          navy: 128,
          oldlace: 16643558,
          olive: 8421376,
          olivedrab: 7048739,
          orange: 16753920,
          orangered: 16729344,
          orchid: 14315734,
          palegoldenrod: 15657130,
          palegreen: 10025880,
          paleturquoise: 11529966,
          palevioletred: 14381203,
          papayawhip: 16773077,
          peachpuff: 16767673,
          peru: 13468991,
          pink: 16761035,
          plum: 14524637,
          powderblue: 11591910,
          purple: 8388736,
          rebeccapurple: 6697881,
          red: 16711680,
          rosybrown: 12357519,
          royalblue: 4286945,
          saddlebrown: 9127187,
          salmon: 16416882,
          sandybrown: 16032864,
          seagreen: 3050327,
          seashell: 16774638,
          sienna: 10506797,
          silver: 12632256,
          skyblue: 8900331,
          slateblue: 6970061,
          slategray: 7372944,
          slategrey: 7372944,
          snow: 16775930,
          springgreen: 65407,
          steelblue: 4620980,
          tan: 13808780,
          teal: 32896,
          thistle: 14204888,
          tomato: 16737095,
          turquoise: 4251856,
          violet: 15631086,
          wheat: 16113331,
          white: 16777215,
          whitesmoke: 16119285,
          yellow: 16776960,
          yellowgreen: 10145074
        };
        define(Color, color, {
          copy(channels) {
            return Object.assign(new this.constructor(), this, channels);
          },
          displayable() {
            return this.rgb().displayable();
          },
          hex: color_formatHex,
          formatHex: color_formatHex,
          formatHex8: color_formatHex8,
          formatHsl: color_formatHsl,
          formatRgb: color_formatRgb,
          toString: color_formatRgb
        });
        define(Rgb, rgb, extend(Color, {
          brighter(k) {
            k = k == null ? brighter : Math.pow(brighter, k);
            return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
          },
          darker(k) {
            k = k == null ? darker : Math.pow(darker, k);
            return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
          },
          rgb() {
            return this;
          },
          clamp() {
            return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));
          },
          displayable() {
            return -.5 <= this.r && this.r < 255.5 && -.5 <= this.g && this.g < 255.5 && -.5 <= this.b && this.b < 255.5 && 0 <= this.opacity && this.opacity <= 1;
          },
          hex: rgb_formatHex,
          formatHex: rgb_formatHex,
          formatHex8: rgb_formatHex8,
          formatRgb: rgb_formatRgb,
          toString: rgb_formatRgb
        }));
        define(Hsl, hsl, extend(Color, {
          brighter(k) {
            k = k == null ? brighter : Math.pow(brighter, k);
            return new Hsl(this.h, this.s, this.l * k, this.opacity);
          },
          darker(k) {
            k = k == null ? darker : Math.pow(darker, k);
            return new Hsl(this.h, this.s, this.l * k, this.opacity);
          },
          rgb() {
            var h$1 = this.h % 360 + (this.h < 0) * 360,
              s = isNaN(h$1) || isNaN(this.s) ? 0 : this.s,
              l = this.l,
              m2 = l + (l < .5 ? l : 1 - l) * s,
              m1 = 2 * l - m2;
            return new Rgb(hsl2rgb(h$1 >= 240 ? h$1 - 240 : h$1 + 120, m1, m2), hsl2rgb(h$1, m1, m2), hsl2rgb(h$1 < 120 ? h$1 + 240 : h$1 - 120, m1, m2), this.opacity);
          },
          clamp() {
            return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));
          },
          displayable() {
            return (0 <= this.s && this.s <= 1 || isNaN(this.s)) && 0 <= this.l && this.l <= 1 && 0 <= this.opacity && this.opacity <= 1;
          },
          formatHsl() {
            const a = clampa(this.opacity);
            return `${a === 1 ? "hsl(" : "hsla("}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? ")" : `, ${a})`}`;
          }
        }));
        constant$1 = x => () => x;
        interpolateRgb = function rgbGamma(y) {
          var color2 = gamma(y);
          function rgb$1(start2, end) {
            var r = color2((start2 = rgb(start2)).r, (end = rgb(end)).r),
              g = color2(start2.g, end.g),
              b = color2(start2.b, end.b),
              opacity = nogamma(start2.opacity, end.opacity);
            return function (t) {
              start2.r = r(t);
              start2.g = g(t);
              start2.b = b(t);
              start2.opacity = opacity(t);
              return start2 + "";
            };
          }
          rgb$1.gamma = rgbGamma;
          return rgb$1;
        }(1);
        reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, reB = new RegExp(reA.source, "g");
        degrees = 180 / Math.PI;
        identity$1 = {
          translateX: 0,
          translateY: 0,
          rotate: 0,
          skewX: 0,
          scaleX: 1,
          scaleY: 1
        };
        interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
        interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
        epsilon2 = 1e-12;
        interpolateZoom = function zoomRho(rho, rho2, rho4) {
          function zoom2(p0, p1) {
            var ux0 = p0[0],
              uy0 = p0[1],
              w0 = p0[2],
              ux1 = p1[0],
              uy1 = p1[1],
              w1 = p1[2],
              dx = ux1 - ux0,
              dy = uy1 - uy0,
              d2 = dx * dx + dy * dy,
              i,
              S;
            if (d2 < epsilon2) {
              S = Math.log(w1 / w0) / rho;
              i = function (t) {
                return [ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(rho * t * S)];
              };
            } else {
              var d1 = Math.sqrt(d2),
                b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
                b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
                r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0);
              S = (Math.log(Math.sqrt(b1 * b1 + 1) - b1) - r0) / rho;
              i = function (t) {
                var s = t * S,
                  coshr0 = cosh(r0),
                  u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
                return [ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / cosh(rho * s + r0)];
              };
            }
            i.duration = S * 1e3 * rho / Math.SQRT2;
            return i;
          }
          zoom2.rho = function (_) {
            var _1 = Math.max(.001, +_),
              _2 = _1 * _1;
            return zoomRho(_1, _2, _2 * _2);
          };
          return zoom2;
        }(Math.SQRT2, 2, 4);
        frame = 0, timeout$1 = 0, interval = 0, pokeDelay = 1e3, clockLast = 0, clockNow = 0, clockSkew = 0, clock = typeof performance === "object" && performance.now ? performance : Date, setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function (f) {
          setTimeout(f, 17);
        };
        Timer.prototype = timer.prototype = {
          constructor: Timer,
          restart: function (callback, delay, time$1) {
            if (typeof callback !== "function") throw new TypeError("callback is not a function");
            time$1 = (time$1 == null ? now() : +time$1) + (delay == null ? 0 : +delay);
            if (!this._next && taskTail !== this) {
              if (taskTail) taskTail._next = this;else taskHead = this;
              taskTail = this;
            }
            this._call = callback;
            this._time = time$1;
            sleep();
          },
          stop: function () {
            if (this._call) {
              this._call = null;
              this._time = Infinity;
              sleep();
            }
          }
        };
        emptyOn = dispatch("start", "end", "cancel", "interrupt");
        emptyTween = [];
        CREATED = 0;
        SCHEDULED = 1;
        STARTING = 2;
        STARTED = 3;
        RUNNING = 4;
        ENDING = 5;
        ENDED = 6;
        Selection = selection.prototype.constructor;
        id = 0;
        selection_prototype = selection.prototype;
        Transition$1.prototype = {
          constructor: Transition$1,
          select: transition_select,
          selectAll: transition_selectAll,
          selectChild: selection_prototype.selectChild,
          selectChildren: selection_prototype.selectChildren,
          filter: transition_filter,
          merge: transition_merge,
          selection: transition_selection,
          transition: transition_transition,
          call: selection_prototype.call,
          nodes: selection_prototype.nodes,
          node: selection_prototype.node,
          size: selection_prototype.size,
          empty: selection_prototype.empty,
          each: selection_prototype.each,
          on: transition_on,
          attr: transition_attr,
          attrTween: transition_attrTween,
          style: transition_style,
          styleTween: transition_styleTween,
          text: transition_text,
          textTween: transition_textTween,
          remove: transition_remove,
          tween: transition_tween,
          delay: transition_delay,
          duration: transition_duration,
          ease: transition_ease,
          easeVarying: transition_easeVarying,
          end: transition_end,
          [Symbol.iterator]: selection_prototype[Symbol.iterator]
        };
        defaultTiming = {
          time: null,
          delay: 0,
          duration: 250,
          ease: cubicInOut
        };
        selection.prototype.interrupt = selection_interrupt;
        selection.prototype.transition = selection_transition;
        constant = x => () => x;
        Transform.prototype = {
          constructor: Transform,
          scale: function (k) {
            return k === 1 ? this : new Transform(this.k * k, this.x, this.y);
          },
          translate: function (x, y) {
            return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);
          },
          apply: function (point) {
            return [point[0] * this.k + this.x, point[1] * this.k + this.y];
          },
          applyX: function (x) {
            return x * this.k + this.x;
          },
          applyY: function (y) {
            return y * this.k + this.y;
          },
          invert: function (location) {
            return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];
          },
          invertX: function (x) {
            return (x - this.x) / this.k;
          },
          invertY: function (y) {
            return (y - this.y) / this.k;
          },
          rescaleX: function (x) {
            return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));
          },
          rescaleY: function (y) {
            return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));
          },
          toString: function () {
            return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
          }
        };
        identity = new Transform(1, 0, 0);
        Transform.prototype;
        Slots = Symbol("MiniMapSlots");
        _hoisted_1$1$9 = ["id", "x", "y", "rx", "ry", "width", "height", "fill", "stroke", "stroke-width", "shape-rendering"];
        _sfc_main$1$7 = /* @__PURE__ */defineComponent({
          name: "MiniMapNode",
          compatConfig: {
            MODE: 3
          },
          inheritAttrs: false,
          props: {
            id: {},
            type: {},
            selected: {
              type: Boolean
            },
            dragging: {
              type: Boolean
            },
            position: {},
            dimensions: {},
            borderRadius: {},
            color: {},
            shapeRendering: {},
            strokeColor: {},
            strokeWidth: {},
            hidden: {
              type: Boolean
            }
          },
          emits: ["click", "dblclick", "mouseenter", "mousemove", "mouseleave"],
          setup(__props, {
            emit: emits
          }) {
            const props = __props;
            const miniMapSlots = inject(Slots);
            const attrs = useAttrs();
            const style = toRef(() => attrs.style ?? {});
            function onClick(event) {
              emits("click", event);
            }
            function onDblclick(event) {
              emits("dblclick", event);
            }
            function onMouseEnter(event) {
              emits("mouseenter", event);
            }
            function onMouseMove(event) {
              emits("mousemove", event);
            }
            function onMouseLeave(event) {
              emits("mouseleave", event);
            }
            return (_ctx, _cache) => {
              return !_ctx.hidden && _ctx.dimensions.width !== 0 && _ctx.dimensions.height !== 0 ? (openBlock(), createElementBlock(Fragment, {
                key: 0
              }, [unref(miniMapSlots)[`node-${props.type}`] ? (openBlock(), createBlock(resolveDynamicComponent(unref(miniMapSlots)[`node-${props.type}`]), normalizeProps(mergeProps({
                key: 0
              }, {
                ...props,
                ..._ctx.$attrs
              })), null, 16)) : (openBlock(), createElementBlock("rect", mergeProps({
                key: 1,
                id: _ctx.id
              }, _ctx.$attrs, {
                class: ["vue-flow__minimap-node", {
                  selected: _ctx.selected,
                  dragging: _ctx.dragging
                }],
                x: _ctx.position.x,
                y: _ctx.position.y,
                rx: _ctx.borderRadius,
                ry: _ctx.borderRadius,
                width: _ctx.dimensions.width,
                height: _ctx.dimensions.height,
                fill: _ctx.color || style.value.background || style.value.backgroundColor,
                stroke: _ctx.strokeColor,
                "stroke-width": _ctx.strokeWidth,
                "shape-rendering": _ctx.shapeRendering,
                onClick,
                onDblclick,
                onMouseenter: onMouseEnter,
                onMousemove: onMouseMove,
                onMouseleave: onMouseLeave
              }), null, 16, _hoisted_1$1$9))], 64)) : createCommentVNode("", true);
            };
          }
        });
        _hoisted_1$10 = ["width", "height", "viewBox", "aria-labelledby"];
        _hoisted_2$1 = ["id"];
        _hoisted_3$5 = ["d", "fill", "stroke", "stroke-width"];
        _sfc_main = /* @__PURE__ */defineComponent({
          name: "MiniMap",
          compatConfig: {
            MODE: 3
          },
          props: {
            nodeColor: {
              type: [String, Function],
              default: "#e2e2e2"
            },
            nodeStrokeColor: {
              type: [String, Function],
              default: "transparent"
            },
            nodeClassName: {
              type: [String, Function]
            },
            nodeBorderRadius: {
              default: 5
            },
            nodeStrokeWidth: {
              default: 2
            },
            maskColor: {
              default: "rgb(240, 240, 240, 0.6)"
            },
            maskStrokeColor: {
              default: "none"
            },
            maskStrokeWidth: {
              default: 1
            },
            position: {
              default: "bottom-right"
            },
            pannable: {
              type: Boolean,
              default: false
            },
            zoomable: {
              type: Boolean,
              default: false
            },
            width: {},
            height: {},
            ariaLabel: {
              default: "Vue Flow mini map"
            },
            inversePan: {
              type: Boolean,
              default: false
            },
            zoomStep: {
              default: 1
            },
            offsetScale: {
              default: 5
            },
            maskBorderRadius: {
              default: 0
            }
          },
          emits: ["click", "nodeClick", "nodeDblclick", "nodeMouseenter", "nodeMousemove", "nodeMouseleave"],
          setup(__props, {
            emit
          }) {
            const slots = useSlots();
            const attrs = useAttrs();
            const defaultWidth = 200;
            const defaultHeight = 150;
            const {
              id: id2,
              edges,
              viewport,
              translateExtent,
              dimensions,
              emits,
              d3Selection,
              d3Zoom,
              getNodesInitialized
            } = useVueFlow();
            const el = ref();
            provide(Slots, slots);
            const elementWidth = toRef(() => {
              var _a;
              return __props.width ?? ((_a = attrs.style) == null ? void 0 : _a.width) ?? defaultWidth;
            });
            const elementHeight = toRef(() => {
              var _a;
              return __props.height ?? ((_a = attrs.style) == null ? void 0 : _a.height) ?? defaultHeight;
            });
            const shapeRendering = typeof window === "undefined" || !!window.chrome ? "crispEdges" : "geometricPrecision";
            const nodeColorFunc = computed(() => typeof __props.nodeColor === "string" ? () => __props.nodeColor : __props.nodeColor);
            const nodeStrokeColorFunc = computed(() => typeof __props.nodeStrokeColor === "string" ? () => __props.nodeStrokeColor : __props.nodeStrokeColor);
            const nodeClassNameFunc = computed(() => typeof __props.nodeClassName === "string" ? () => __props.nodeClassName : typeof __props.nodeClassName === "function" ? __props.nodeClassName : () => "");
            const bb = computed(() => getRectOfNodes(getNodesInitialized.value.filter(node$1 => !node$1.hidden)));
            const viewBB = computed(() => ({
              x: -viewport.value.x / viewport.value.zoom,
              y: -viewport.value.y / viewport.value.zoom,
              width: dimensions.value.width / viewport.value.zoom,
              height: dimensions.value.height / viewport.value.zoom
            }));
            const boundingRect = computed(() => getNodesInitialized.value && getNodesInitialized.value.length ? getBoundsofRects(bb.value, viewBB.value) : viewBB.value);
            const viewScale = computed(() => {
              const scaledWidth = boundingRect.value.width / elementWidth.value;
              const scaledHeight = boundingRect.value.height / elementHeight.value;
              return Math.max(scaledWidth, scaledHeight);
            });
            const viewBox = computed(() => {
              const viewWidth = viewScale.value * elementWidth.value;
              const viewHeight = viewScale.value * elementHeight.value;
              const offset = __props.offsetScale * viewScale.value;
              return {
                offset,
                x: boundingRect.value.x - (viewWidth - boundingRect.value.width) / 2 - offset,
                y: boundingRect.value.y - (viewHeight - boundingRect.value.height) / 2 - offset,
                width: viewWidth + offset * 2,
                height: viewHeight + offset * 2
              };
            });
            const d = computed(() => {
              if (!viewBox.value.x || !viewBox.value.y) return "";
              return `
    M${viewBox.value.x - viewBox.value.offset},${viewBox.value.y - viewBox.value.offset}
    h${viewBox.value.width + viewBox.value.offset * 2}
    v${viewBox.value.height + viewBox.value.offset * 2}
    h${-viewBox.value.width - viewBox.value.offset * 2}z
    M${viewBB.value.x + __props.maskBorderRadius},${viewBB.value.y}
    h${viewBB.value.width - 2 * __props.maskBorderRadius}
    a${__props.maskBorderRadius},${__props.maskBorderRadius} 0 0 1 ${__props.maskBorderRadius},${__props.maskBorderRadius}
    v${viewBB.value.height - 2 * __props.maskBorderRadius}
    a${__props.maskBorderRadius},${__props.maskBorderRadius} 0 0 1 -${__props.maskBorderRadius},${__props.maskBorderRadius}
    h${-(viewBB.value.width - 2 * __props.maskBorderRadius)}
    a${__props.maskBorderRadius},${__props.maskBorderRadius} 0 0 1 -${__props.maskBorderRadius},-${__props.maskBorderRadius}
    v${-(viewBB.value.height - 2 * __props.maskBorderRadius)}
    a${__props.maskBorderRadius},${__props.maskBorderRadius} 0 0 1 ${__props.maskBorderRadius},-${__props.maskBorderRadius}z`;
            });
            watchEffect(onCleanup => {
              if (el.value) {
                const selection2 = select(el.value);
                const zoomHandler = event => {
                  if (event.sourceEvent.type !== "wheel" || !d3Selection.value || !d3Zoom.value) return;
                  const factor = event.sourceEvent.ctrlKey && isMacOs() ? 10 : 1;
                  const pinchDelta = -event.sourceEvent.deltaY * (event.sourceEvent.deltaMode === 1 ? .05 : event.sourceEvent.deltaMode ? 1 : .002) * __props.zoomStep;
                  const nextZoom = viewport.value.zoom * 2 ** (pinchDelta * factor);
                  d3Zoom.value.scaleTo(d3Selection.value, nextZoom);
                };
                const panHandler = event => {
                  if (event.sourceEvent.type !== "mousemove" || !d3Selection.value || !d3Zoom.value) return;
                  const moveScale = viewScale.value * Math.max(1, viewport.value.zoom) * (__props.inversePan ? -1 : 1);
                  const position$3 = {
                    x: viewport.value.x - event.sourceEvent.movementX * moveScale,
                    y: viewport.value.y - event.sourceEvent.movementY * moveScale
                  };
                  const extent = [[0, 0], [dimensions.value.width, dimensions.value.height]];
                  const nextTransform = identity.translate(position$3.x, position$3.y).scale(viewport.value.zoom);
                  const constrainedTransform = d3Zoom.value.constrain()(nextTransform, extent, translateExtent.value);
                  d3Zoom.value.transform(d3Selection.value, constrainedTransform);
                };
                const zoomAndPanHandler = zoom().wheelDelta(event => wheelDelta(event) * (__props.zoomStep / 10)).on("zoom", __props.pannable ? panHandler : () => {}).on("zoom.wheel", __props.zoomable ? zoomHandler : () => {});
                selection2.call(zoomAndPanHandler);
                onCleanup(() => {
                  selection2.on("zoom", null);
                });
              }
            }, {
              flush: "post"
            });
            function onSvgClick(event) {
              const [x, y] = pointer(event);
              emit("click", {
                event,
                position: {
                  x,
                  y
                }
              });
            }
            function onNodeClick(event, node$1) {
              const param = {
                event,
                node: node$1,
                connectedEdges: getConnectedEdges([node$1], edges.value)
              };
              emits.miniMapNodeClick(param);
              emit("nodeClick", param);
            }
            function onNodeDblClick(event, node$1) {
              const param = {
                event,
                node: node$1,
                connectedEdges: getConnectedEdges([node$1], edges.value)
              };
              emits.miniMapNodeDoubleClick(param);
              emit("nodeDblclick", param);
            }
            function onNodeMouseEnter(event, node$1) {
              const param = {
                event,
                node: node$1,
                connectedEdges: getConnectedEdges([node$1], edges.value)
              };
              emits.miniMapNodeMouseEnter(param);
              emit("nodeMouseenter", param);
            }
            function onNodeMouseMove(event, node$1) {
              const param = {
                event,
                node: node$1,
                connectedEdges: getConnectedEdges([node$1], edges.value)
              };
              emits.miniMapNodeMouseMove(param);
              emit("nodeMousemove", param);
            }
            function onNodeMouseLeave(event, node$1) {
              const param = {
                event,
                node: node$1,
                connectedEdges: getConnectedEdges([node$1], edges.value)
              };
              emits.miniMapNodeMouseLeave(param);
              emit("nodeMouseleave", param);
            }
            return (_ctx, _cache) => {
              return openBlock(), createBlock(unref(_sfc_main$4), {
                position: _ctx.position,
                class: normalizeClass(["vue-flow__minimap", {
                  pannable: _ctx.pannable,
                  zoomable: _ctx.zoomable
                }])
              }, {
                default: withCtx(() => [(openBlock(), createElementBlock("svg", {
                  ref_key: "el",
                  ref: el,
                  width: elementWidth.value,
                  height: elementHeight.value,
                  viewBox: [viewBox.value.x, viewBox.value.y, viewBox.value.width, viewBox.value.height].join(" "),
                  role: "img",
                  "aria-labelledby": `vue-flow__minimap-${unref(id2)}`,
                  onClick: onSvgClick
                }, [_ctx.ariaLabel ? (openBlock(), createElementBlock("title", {
                  key: 0,
                  id: `vue-flow__minimap-${unref(id2)}`
                }, toDisplayString(_ctx.ariaLabel), 9, _hoisted_2$1)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(unref(getNodesInitialized), node$1 => {
                  return openBlock(), createBlock(_sfc_main$1$7, {
                    id: node$1.id,
                    key: node$1.id,
                    f: "",
                    position: node$1.computedPosition,
                    dimensions: node$1.dimensions,
                    selected: node$1.selected,
                    dragging: node$1.dragging,
                    style: normalizeStyle(node$1.style),
                    class: normalizeClass(nodeClassNameFunc.value(node$1)),
                    color: nodeColorFunc.value(node$1),
                    "border-radius": _ctx.nodeBorderRadius,
                    "stroke-color": nodeStrokeColorFunc.value(node$1),
                    "stroke-width": _ctx.nodeStrokeWidth,
                    "shape-rendering": unref(shapeRendering),
                    type: node$1.type,
                    hidden: node$1.hidden,
                    onClick: $event => onNodeClick($event, node$1),
                    onDblclick: $event => onNodeDblClick($event, node$1),
                    onMouseenter: $event => onNodeMouseEnter($event, node$1),
                    onMousemove: $event => onNodeMouseMove($event, node$1),
                    onMouseleave: $event => onNodeMouseLeave($event, node$1)
                  }, null, 8, ["id", "position", "dimensions", "selected", "dragging", "style", "class", "color", "border-radius", "stroke-color", "stroke-width", "shape-rendering", "type", "hidden", "onClick", "onDblclick", "onMouseenter", "onMousemove", "onMouseleave"]);
                }), 128)), createBaseVNode("path", {
                  class: "vue-flow__minimap-mask",
                  d: d.value,
                  fill: _ctx.maskColor,
                  stroke: _ctx.maskStrokeColor,
                  "stroke-width": _ctx.maskStrokeWidth,
                  "fill-rule": "evenodd"
                }, null, 8, _hoisted_3$5)], 8, _hoisted_1$10))]),
                _: 1
              }, 8, ["position", "class"]);
            };
          }
        });
        _hoisted_1$8 = ["id"];
        CanvasArrowHeadMarker_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasArrowHeadMarker",
          props: {
            id: {}
          },
          setup(__props) {
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("svg", null, [createBaseVNode("defs", null, [createBaseVNode("marker", {
                id: _ctx.id,
                viewBox: "-10 -10 20 20",
                refX: "0",
                refY: "0",
                markerWidth: "12.5",
                markerHeight: "12.5",
                markerUnits: "strokeWidth",
                orient: "auto-start-reverse"
              }, _cache[0] || (_cache[0] = [createBaseVNode("polyline", {
                "stroke-linecap": "round",
                "stroke-linejoin": "round",
                points: "-5,-4 0,0 -5,4 -5,-4",
                "stroke-width": "2",
                stroke: "context-stroke",
                fill: "context-stroke"
              }, null, -1)]), 8, _hoisted_1$8)])]);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/edges/CanvasArrowHeadMarker.vue
        CanvasArrowHeadMarker_default = CanvasArrowHeadMarker_vue_vue_type_script_setup_true_lang_default; //#endregion
        //#region src/features/workflows/canvas/components/elements/edges/utils/getEdgeRenderData.ts
        EDGE_PADDING_BOTTOM = 130;
        EDGE_PADDING_X = 40;
        EDGE_BORDER_RADIUS = 16;
        HANDLE_SIZE = 20;
        isRightOfSourceHandle = (sourceX, targetX) => sourceX - HANDLE_SIZE > targetX;
        CanvasConnectionLine_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasConnectionLine",
          props: {
            sourceX: {},
            sourceY: {},
            sourcePosition: {},
            targetX: {},
            targetY: {},
            targetPosition: {},
            sourceNode: {},
            sourceHandle: {},
            targetNode: {},
            targetHandle: {},
            markerStart: {},
            markerEnd: {},
            connectionStatus: {}
          },
          setup(__props) {
            const props = __props;
            const $style = useCssModule();
            const {
              connectingHandle
            } = useCanvas();
            const connectionType = computed(() => parseCanvasConnectionHandleString(connectingHandle.value?.handleId).type);
            const classes = computed(() => {
              return {
                [$style.edge]: true,
                [$style.visible]: isVisible.value
              };
            });
            const edgeColor = computed(() => {
              if (connectionType.value !== NodeConnectionTypes.Main) return "var(--node-type--supplemental--color)";else return "var(--color--foreground--shade-2)";
            });
            const edgeStyle = computed(() => ({
              ...(connectionType.value === NodeConnectionTypes.Main ? {} : {
                strokeDasharray: "8,8"
              }),
              strokeWidth: 2,
              stroke: edgeColor.value
            }));
            const renderData = computed(() => getEdgeRenderData(props, {
              connectionType: connectionType.value
            }));
            const segments = computed(() => renderData.value.segments);
            /**
            * Used to delay the visibility of the connection line to prevent flickering
            * when the actual user intent is to click the plus button
            */
            const isVisible = ref(false);
            onMounted(() => {
              setTimeout(() => {
                isVisible.value = true;
              }, 300);
            });
            return (_ctx, _cache) => {
              return openBlock(true), createElementBlock(Fragment, null, renderList(segments.value, segment => {
                return openBlock(), createBlock(unref(_sfc_main$d), {
                  key: segment[0],
                  class: normalizeClass(classes.value),
                  style: normalizeStyle(edgeStyle.value),
                  path: segment[0],
                  "marker-end": _ctx.markerEnd
                }, null, 8, ["class", "style", "path", "marker-end"]);
              }), 128);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/edges/CanvasConnectionLine.vue?vue&type=style&index=0&lang.module.scss
        edge$1 = "_edge_cbk94_123";
        visible = "_visible_cbk94_129";
        CanvasConnectionLine_vue_vue_type_style_index_0_lang_module_default = {
          edge: edge$1,
          visible
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/edges/CanvasConnectionLine.vue
        cssModules$4 = {
          "$style": CanvasConnectionLine_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasConnectionLine_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasConnectionLine_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$4]]); //#endregion
        //#region src/app/components/TidyUpIcon.vue
        _sfc_main$6 = {};
        _hoisted_1$7 = {
          xmlns: "http://www.w3.org/2000/svg",
          viewBox: "0 0 16 16"
        };
        TidyUpIcon_default = /* @__PURE__ */__plugin_vue_export_helper_default(_sfc_main$6, [["render", _sfc_render$1]]); //#endregion
        //#region ../../../node_modules/.pnpm/@vue-flow+controls@1.1.3_@vue-flow+core@1.48.0_vue@3.5.13_typescript@5.9.2___vue@3.5.13_typescript@5.9.2_/node_modules/@vue-flow/controls/dist/vue-flow-controls.mjs
        _sfc_main$1$5 = {
          name: "ControlButton",
          compatConfig: {
            MODE: 3
          }
        };
        _export_sfc = (sfc, props) => {
          const target$1 = sfc.__vccOpts || sfc;
          for (const [key, val] of props) target$1[key] = val;
          return target$1;
        };
        _hoisted_1$5 = {
          type: "button",
          class: "vue-flow__controls-button"
        };
        ControlButton = /* @__PURE__ */_export_sfc(_sfc_main$1$5, [["render", _sfc_render]]);
        _hoisted_1$4 = {
          xmlns: "http://www.w3.org/2000/svg",
          viewBox: "0 0 32 32"
        };
        _hoisted_3$4 = [/* @__PURE__ */createBaseVNode("path", {
          d: "M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"
        }, null, -1)];
        PlusIcon = {
          render: render$4
        };
        _hoisted_1$3 = {
          xmlns: "http://www.w3.org/2000/svg",
          viewBox: "0 0 32 5"
        };
        _hoisted_3$3 = [/* @__PURE__ */createBaseVNode("path", {
          d: "M0 0h32v4.2H0z"
        }, null, -1)];
        MinusIcon = {
          render: render$3
        };
        _hoisted_1$2 = {
          xmlns: "http://www.w3.org/2000/svg",
          viewBox: "0 0 32 30"
        };
        _hoisted_3$2 = [/* @__PURE__ */createBaseVNode("path", {
          d: "M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0 0 27.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94a.919.919 0 0 1-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z"
        }, null, -1)];
        FitView = {
          render: render$2
        };
        _hoisted_1$1 = {
          xmlns: "http://www.w3.org/2000/svg",
          viewBox: "0 0 25 32"
        };
        _hoisted_3$1 = [/* @__PURE__ */createBaseVNode("path", {
          d: "M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 0 0 0 13.714v15.238A3.056 3.056 0 0 0 3.048 32h18.285a3.056 3.056 0 0 0 3.048-3.048V13.714a3.056 3.056 0 0 0-3.048-3.047zM12.19 24.533a3.056 3.056 0 0 1-3.047-3.047 3.056 3.056 0 0 1 3.047-3.048 3.056 3.056 0 0 1 3.048 3.048 3.056 3.056 0 0 1-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z"
        }, null, -1)];
        Lock = {
          render: render$1
        };
        _hoisted_1$6 = {
          xmlns: "http://www.w3.org/2000/svg",
          viewBox: "0 0 25 32"
        };
        _hoisted_3 = [/* @__PURE__ */createBaseVNode("path", {
          d: "M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 0 0 0 13.714v15.238A3.056 3.056 0 0 0 3.048 32h18.285a3.056 3.056 0 0 0 3.048-3.048V13.714a3.056 3.056 0 0 0-3.048-3.047zM12.19 24.533a3.056 3.056 0 0 1-3.047-3.047 3.056 3.056 0 0 1 3.047-3.048 3.056 3.056 0 0 1 3.048 3.048 3.056 3.056 0 0 1-3.048 3.047z"
        }, null, -1)];
        Unlock = {
          render
        };
        _sfc_main$2 = /* @__PURE__ */defineComponent({
          name: "Controls",
          compatConfig: {
            MODE: 3
          },
          props: {
            showZoom: {
              type: Boolean,
              default: true
            },
            showFitView: {
              type: Boolean,
              default: true
            },
            showInteractive: {
              type: Boolean,
              default: true
            },
            fitViewParams: {},
            position: {
              default: () => PanelPosition.BottomLeft
            }
          },
          emits: ["zoomIn", "zoomOut", "fitView", "interactionChange"],
          setup(__props, {
            emit
          }) {
            const {
              nodesDraggable,
              nodesConnectable,
              elementsSelectable,
              setInteractive,
              zoomIn,
              zoomOut,
              fitView,
              viewport,
              minZoom,
              maxZoom
            } = useVueFlow();
            const isInteractive = toRef(() => nodesDraggable.value || nodesConnectable.value || elementsSelectable.value);
            const minZoomReached = toRef(() => viewport.value.zoom <= minZoom.value);
            const maxZoomReached = toRef(() => viewport.value.zoom >= maxZoom.value);
            function onZoomInHandler() {
              zoomIn();
              emit("zoomIn");
            }
            function onZoomOutHandler() {
              zoomOut();
              emit("zoomOut");
            }
            function onFitViewHandler() {
              fitView(__props.fitViewParams);
              emit("fitView");
            }
            function onInteractiveChangeHandler() {
              setInteractive(!isInteractive.value);
              emit("interactionChange", !isInteractive.value);
            }
            return (_ctx, _cache) => {
              return openBlock(), createBlock(unref(_sfc_main$4), {
                class: "vue-flow__controls",
                position: _ctx.position
              }, {
                default: withCtx(() => [renderSlot(_ctx.$slots, "top"), _ctx.showZoom ? (openBlock(), createElementBlock(Fragment, {
                  key: 0
                }, [renderSlot(_ctx.$slots, "control-zoom-in", {}, () => [createVNode(ControlButton, {
                  class: "vue-flow__controls-zoomin",
                  disabled: maxZoomReached.value,
                  onClick: onZoomInHandler
                }, {
                  default: withCtx(() => [renderSlot(_ctx.$slots, "icon-zoom-in", {}, () => [(openBlock(), createBlock(resolveDynamicComponent(unref(PlusIcon))))])]),
                  _: 3
                }, 8, ["disabled"])]), renderSlot(_ctx.$slots, "control-zoom-out", {}, () => [createVNode(ControlButton, {
                  class: "vue-flow__controls-zoomout",
                  disabled: minZoomReached.value,
                  onClick: onZoomOutHandler
                }, {
                  default: withCtx(() => [renderSlot(_ctx.$slots, "icon-zoom-out", {}, () => [(openBlock(), createBlock(resolveDynamicComponent(unref(MinusIcon))))])]),
                  _: 3
                }, 8, ["disabled"])])], 64)) : createCommentVNode("", true), _ctx.showFitView ? renderSlot(_ctx.$slots, "control-fit-view", {
                  key: 1
                }, () => [createVNode(ControlButton, {
                  class: "vue-flow__controls-fitview",
                  onClick: onFitViewHandler
                }, {
                  default: withCtx(() => [renderSlot(_ctx.$slots, "icon-fit-view", {}, () => [(openBlock(), createBlock(resolveDynamicComponent(unref(FitView))))])]),
                  _: 3
                })]) : createCommentVNode("", true), _ctx.showInteractive ? renderSlot(_ctx.$slots, "control-interactive", {
                  key: 2
                }, () => [_ctx.showInteractive ? (openBlock(), createBlock(ControlButton, {
                  key: 0,
                  class: "vue-flow__controls-interactive",
                  onClick: onInteractiveChangeHandler
                }, {
                  default: withCtx(() => [isInteractive.value ? renderSlot(_ctx.$slots, "icon-unlock", {
                    key: 0
                  }, () => [(openBlock(), createBlock(resolveDynamicComponent(unref(Unlock))))]) : createCommentVNode("", true), !isInteractive.value ? renderSlot(_ctx.$slots, "icon-lock", {
                    key: 1
                  }, () => [(openBlock(), createBlock(resolveDynamicComponent(unref(Lock))))]) : createCommentVNode("", true)]),
                  _: 3
                })) : createCommentVNode("", true)]) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")]),
                _: 3
              }, 8, ["position"]);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/buttons/CanvasControlButtons.vue?vue&type=script&setup=true&lang.ts
        CanvasControlButtons_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasControlButtons",
          props: {
            zoom: {
              default: 1
            },
            readOnly: {
              type: Boolean,
              default: false
            }
          },
          emits: ["reset-zoom", "zoom-in", "zoom-out", "zoom-to-fit", "tidy-up", "toggle-zoom-mode"],
          setup(__props, {
            emit: __emit
          }) {
            const props = __props;
            const emit = __emit;
            const i18n = useI18n();
            const experimentalNdvStore = useExperimentalNdvStore();
            const isExperimentalNdvActive$3 = computed(() => experimentalNdvStore.isActive(props.zoom));
            const isToggleZoomVisible = computed(() => experimentalNdvStore.isZoomedViewEnabled);
            const isResetZoomVisible = computed(() => !isToggleZoomVisible.value && props.zoom !== 1);
            function onResetZoom() {
              emit("reset-zoom");
            }
            function onZoomIn() {
              emit("zoom-in");
            }
            function onZoomOut() {
              emit("zoom-out");
            }
            function onZoomToFit() {
              emit("zoom-to-fit");
            }
            function onTidyUp() {
              emit("tidy-up");
            }
            return (_ctx, _cache) => {
              return openBlock(), createBlock(unref(_sfc_main$2), {
                "show-zoom": false,
                "show-fit-view": false
              }, {
                default: withCtx(() => [createVNode(KeyboardShortcutTooltip_default, {
                  label: unref(i18n).baseText("nodeView.zoomToFit"),
                  shortcut: {
                    keys: ["1"]
                  }
                }, {
                  default: withCtx(() => [createVNode(unref(N8nIconButton_default), {
                    type: "tertiary",
                    size: "large",
                    icon: "maximize",
                    "data-test-id": "zoom-to-fit",
                    onClick: onZoomToFit
                  })]),
                  _: 1
                }, 8, ["label"]), createVNode(KeyboardShortcutTooltip_default, {
                  label: unref(i18n).baseText("nodeView.zoomIn"),
                  shortcut: {
                    keys: ["+"]
                  }
                }, {
                  default: withCtx(() => [createVNode(unref(N8nIconButton_default), {
                    type: "tertiary",
                    size: "large",
                    icon: "zoom-in",
                    "data-test-id": "zoom-in-button",
                    onClick: onZoomIn
                  })]),
                  _: 1
                }, 8, ["label"]), createVNode(KeyboardShortcutTooltip_default, {
                  label: unref(i18n).baseText("nodeView.zoomOut"),
                  shortcut: {
                    keys: ["-"]
                  }
                }, {
                  default: withCtx(() => [createVNode(unref(N8nIconButton_default), {
                    type: "tertiary",
                    size: "large",
                    icon: "zoom-out",
                    "data-test-id": "zoom-out-button",
                    onClick: onZoomOut
                  })]),
                  _: 1
                }, 8, ["label"]), isToggleZoomVisible.value ? (openBlock(), createBlock(KeyboardShortcutTooltip_default, {
                  key: 0,
                  label: unref(i18n).baseText(isExperimentalNdvActive$3.value ? "nodeView.leaveZoomMode" : "nodeView.enterZoomMode"),
                  shortcut: {
                    keys: ["Z"]
                  }
                }, {
                  default: withCtx(() => [createVNode(unref(N8nIconButton_default), {
                    square: "",
                    type: "tertiary",
                    size: "large",
                    class: normalizeClass(_ctx.$style.iconButton),
                    icon: isExperimentalNdvActive$3.value ? "undo-2" : "crosshair",
                    onClick: _cache[0] || (_cache[0] = $event => emit("toggle-zoom-mode"))
                  }, null, 8, ["class", "icon"])]),
                  _: 1
                }, 8, ["label"])) : createCommentVNode("", true), isResetZoomVisible.value ? (openBlock(), createBlock(KeyboardShortcutTooltip_default, {
                  key: 1,
                  label: unref(i18n).baseText("nodeView.resetZoom"),
                  shortcut: {
                    keys: ["0"]
                  }
                }, {
                  default: withCtx(() => [createVNode(unref(N8nIconButton_default), {
                    type: "tertiary",
                    size: "large",
                    icon: "undo-2",
                    "data-test-id": "reset-zoom-button",
                    onClick: onResetZoom
                  })]),
                  _: 1
                }, 8, ["label"])) : createCommentVNode("", true), !_ctx.readOnly ? (openBlock(), createBlock(KeyboardShortcutTooltip_default, {
                  key: 2,
                  label: unref(i18n).baseText("nodeView.tidyUp"),
                  shortcut: {
                    shiftKey: true,
                    altKey: true,
                    keys: ["T"]
                  }
                }, {
                  default: withCtx(() => [createVNode(unref(N8nButton_default), {
                    square: "",
                    type: "tertiary",
                    size: "large",
                    "data-test-id": "tidy-up-button",
                    class: normalizeClass(_ctx.$style.iconButton),
                    onClick: onTidyUp
                  }, {
                    default: withCtx(() => [createVNode(TidyUpIcon_default)]),
                    _: 1
                  }, 8, ["class"])]),
                  _: 1
                }, 8, ["label"])) : createCommentVNode("", true), isExperimentalNdvActive$3.value ? (openBlock(), createBlock(unref(N8nTooltip_default), {
                  key: 3,
                  placement: "top",
                  content: unref(i18n).baseText("nodeView.expandAllNodes")
                }, {
                  default: withCtx(() => [createVNode(unref(N8nIconButton_default), {
                    type: "tertiary",
                    size: "large",
                    icon: "maximize-2",
                    onClick: unref(experimentalNdvStore).expandAllNodes
                  }, null, 8, ["onClick"])]),
                  _: 1
                }, 8, ["content"])) : createCommentVNode("", true), isExperimentalNdvActive$3.value ? (openBlock(), createBlock(unref(N8nTooltip_default), {
                  key: 4,
                  placement: "top",
                  content: unref(i18n).baseText("nodeView.collapseAllNodes")
                }, {
                  default: withCtx(() => [createVNode(unref(N8nIconButton_default), {
                    type: "tertiary",
                    size: "large",
                    icon: "minimize-2",
                    onClick: unref(experimentalNdvStore).collapseAllNodes
                  }, null, 8, ["onClick"])]),
                  _: 1
                }, 8, ["content"])) : createCommentVNode("", true)]),
                _: 1
              });
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/buttons/CanvasControlButtons.vue?vue&type=style&index=0&lang.module.scss
        iconButton = "_iconButton_fx9xi_123";
        CanvasControlButtons_vue_vue_type_style_index_0_lang_module_default = {
          iconButton
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/buttons/CanvasControlButtons.vue
        cssModules$3 = {
          "$style": CanvasControlButtons_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasControlButtons_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasControlButtons_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$3]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/edges/CanvasEdgeToolbar.vue?vue&type=script&setup=true&lang.ts
        CanvasEdgeToolbar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasEdgeToolbar",
          props: {
            type: {}
          },
          emits: ["add", "delete"],
          setup(__props, {
            emit: __emit
          }) {
            const emit = __emit;
            const props = __props;
            const $style = useCssModule();
            const i18n = useI18n();
            const classes = computed(() => ({
              [$style.canvasEdgeToolbar]: true
            }));
            const isAddButtonVisible = computed(() => props.type === NodeConnectionTypes.Main);
            function onAdd$2() {
              emit("add");
            }
            function onDelete() {
              emit("delete");
            }
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock("div", {
                class: normalizeClass(classes.value),
                "data-test-id": "canvas-edge-toolbar"
              }, [isAddButtonVisible.value ? (openBlock(), createBlock(unref(N8nIconButton_default), {
                key: 0,
                class: "canvas-edge-toolbar-button",
                "data-test-id": "add-connection-button",
                type: "tertiary",
                size: "small",
                "icon-size": "medium",
                icon: "plus",
                title: unref(i18n).baseText("node.add"),
                onClick: onAdd$2
              }, null, 8, ["title"])) : createCommentVNode("", true), createVNode(unref(N8nIconButton_default), {
                "data-test-id": "delete-connection-button",
                class: "canvas-edge-toolbar-button",
                type: "tertiary",
                size: "small",
                "icon-size": "medium",
                icon: "trash-2",
                title: unref(i18n).baseText("node.delete"),
                onClick: onDelete
              }, null, 8, ["title"])], 2);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/edges/CanvasEdgeToolbar.vue?vue&type=style&index=0&lang.module.scss
        canvasEdgeToolbar = "_canvasEdgeToolbar_1hcsv_123";
        CanvasEdgeToolbar_vue_vue_type_style_index_0_lang_module_default = {
          canvasEdgeToolbar
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/edges/CanvasEdgeToolbar.vue
        cssModules$2 = {
          "$style": CanvasEdgeToolbar_vue_vue_type_style_index_0_lang_module_default
        };
        CanvasEdgeToolbar_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasEdgeToolbar_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$2]]); //#endregion
        //#region src/features/workflows/canvas/components/elements/edges/CanvasEdge.vue?vue&type=script&setup=true&lang.ts
        _hoisted_1 = ["data-source-node-name", "data-target-node-name"];
        _hoisted_2 = ["data-source-node-name", "data-target-node-name", "data-edge-status"];
        delayedHoveredTimeout = 600;
        CanvasEdge_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "CanvasEdge",
          props: {
            id: {},
            sourceNode: {},
            targetNode: {},
            source: {},
            target: {},
            type: {},
            label: {},
            style: {},
            selected: {
              type: Boolean
            },
            sourcePosition: {},
            targetPosition: {},
            sourceHandleId: {},
            targetHandleId: {},
            animated: {
              type: Boolean
            },
            updatable: {
              type: Boolean
            },
            markerStart: {},
            markerEnd: {},
            curvature: {},
            interactionWidth: {},
            data: {},
            events: {},
            labelStyle: {},
            labelShowBg: {
              type: Boolean
            },
            labelBgStyle: {},
            labelBgPadding: {},
            labelBgBorderRadius: {},
            sourceX: {},
            sourceY: {},
            targetX: {},
            targetY: {},
            readOnly: {
              type: Boolean
            },
            hovered: {
              type: Boolean
            },
            bringToFront: {
              type: Boolean
            }
          },
          emits: ["add", "delete", "update:label:hovered"],
          setup(__props, {
            emit: __emit
          }) {
            useCssVars(_ctx => ({
              "5e8a20b0": edgeStroke.value
            }));
            const emit = __emit;
            const props = __props;
            const data = toRef(props, "data");
            const $style = useCssModule();
            const connectionType = computed(() => isValidNodeConnectionType(props.data.source.type) ? props.data.source.type : NodeConnectionTypes.Main);
            const delayedHovered = ref(props.hovered);
            const delayedHoveredSetTimeoutRef = ref(null);
            watch(() => props.hovered, isHovered => {
              if (isHovered) {
                if (delayedHoveredSetTimeoutRef.value) clearTimeout(delayedHoveredSetTimeoutRef.value);
                delayedHovered.value = true;
              } else delayedHoveredSetTimeoutRef.value = setTimeout(() => {
                delayedHovered.value = false;
              }, delayedHoveredTimeout);
            }, {
              immediate: true
            });
            const renderToolbar = computed(() => (props.selected || delayedHovered.value) && !props.readOnly);
            const isMainConnection = computed(() => data.value.source.type === NodeConnectionTypes.Main);
            const status$1 = computed(() => props.data.status);
            const edgeColor = computed(() => {
              if (status$1.value === "success") return "var(--color--success)";else if (status$1.value === "pinned") return "var(--color--secondary)";else if (!isMainConnection.value) return "var(--node-type--supplemental--color)";else if (props.selected) return "var(--color--background--shade-2)";else return "var(--color--foreground--shade-2)";
            });
            const edgeStyle = computed(() => ({
              ...props.style,
              ...(isMainConnection.value ? {} : {
                strokeDasharray: "8,8"
              })
            }));
            const edgeStroke = computed(() => delayedHovered.value ? "var(--color--primary)" : edgeColor.value);
            const edgeClasses = computed(() => ({
              [$style.edge]: true,
              hovered: delayedHovered.value,
              "bring-to-front": props.bringToFront
            }));
            const edgeToolbarStyle = computed(() => ({
              transform: `translate(-50%, -50%) translate(${labelPosition.value[0]}px, ${labelPosition.value[1]}px)`,
              ...(delayedHovered.value ? {
                zIndex: 1
              } : {})
            }));
            const edgeToolbarClasses = computed(() => ({
              [$style.edgeLabelWrapper]: true,
              "vue-flow__edge-label": true,
              selected: props.selected,
              [$style.straight]: renderData.value.isConnectorStraight
            }));
            const renderData = computed(() => getEdgeRenderData(props, {
              connectionType: connectionType.value
            }));
            const segments = computed(() => renderData.value.segments);
            const labelPosition = computed(() => renderData.value.labelPosition);
            const connection = computed(() => ({
              source: props.source,
              target: props.target,
              sourceHandle: props.sourceHandleId,
              targetHandle: props.targetHandleId
            }));
            function onAdd$2() {
              emit("add", connection.value);
            }
            function onDelete() {
              emit("delete", connection.value);
            }
            function onEdgeLabelMouseEnter() {
              emit("update:label:hovered", true);
            }
            function onEdgeLabelMouseLeave() {
              emit("update:label:hovered", false);
            }
            return (_ctx, _cache) => {
              return openBlock(), createElementBlock(Fragment, null, [createBaseVNode("g", mergeProps({
                "data-test-id": "edge",
                "data-source-node-name": data.value.source?.node,
                "data-target-node-name": data.value.target?.node
              }, _ctx.$attrs), [renderSlot(_ctx.$slots, "highlight", normalizeProps(guardReactiveProps({
                segments: segments.value
              }))), (openBlock(true), createElementBlock(Fragment, null, renderList(segments.value, (segment, index) => {
                return openBlock(), createBlock(unref(_sfc_main$d), {
                  id: `${_ctx.id}-${index}`,
                  key: segment[0],
                  class: normalizeClass(edgeClasses.value),
                  style: normalizeStyle(edgeStyle.value),
                  path: segment[0],
                  "marker-end": _ctx.markerEnd,
                  "interaction-width": 40
                }, null, 8, ["id", "class", "style", "path", "marker-end"]);
              }), 128))], 16, _hoisted_1), createVNode(unref(_sfc_main$3), null, {
                default: withCtx(() => [createBaseVNode("div", {
                  "data-test-id": "edge-label",
                  "data-source-node-name": data.value.source?.node,
                  "data-target-node-name": data.value.target?.node,
                  "data-edge-status": status$1.value,
                  style: normalizeStyle(edgeToolbarStyle.value),
                  class: normalizeClass(edgeToolbarClasses.value),
                  onMouseenter: onEdgeLabelMouseEnter,
                  onMouseleave: onEdgeLabelMouseLeave
                }, [renderToolbar.value ? (openBlock(), createBlock(CanvasEdgeToolbar_default, {
                  key: 0,
                  type: connectionType.value,
                  onAdd: onAdd$2,
                  onDelete
                }, null, 8, ["type"])) : (openBlock(), createElementBlock("div", {
                  key: 1,
                  class: normalizeClass(unref($style).edgeLabel)
                }, toDisplayString(_ctx.label), 3))], 46, _hoisted_2)]),
                _: 1
              })], 64);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/elements/edges/CanvasEdge.vue?vue&type=style&index=0&lang.module.scss
        edge = "_edge_ahl09_123";
        edgeLabelWrapper = "_edgeLabelWrapper_ahl09_131";
        straight = "_straight_ahl09_137";
        edgeLabel = "_edgeLabel_ahl09_131";
        CanvasEdge_vue_vue_type_style_index_0_lang_module_default = {
          edge,
          edgeLabelWrapper,
          straight,
          edgeLabel
        }; //#endregion
        //#region src/features/workflows/canvas/components/elements/edges/CanvasEdge.vue
        cssModules$1 = {
          "$style": CanvasEdge_vue_vue_type_style_index_0_lang_module_default
        };
        _export("r", CanvasEdge_default = /* @__PURE__ */__plugin_vue_export_helper_default(CanvasEdge_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$1]])); //#endregion
        //#region src/features/workflows/canvas/components/Canvas.vue?vue&type=script&setup=true&lang.ts
        renameKeyCode = " ";
        defaultZoom = 1;
        minimapVisibilityDelay = 1e3;
        Canvas_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
          __name: "Canvas",
          props: {
            id: {
              default: "canvas"
            },
            nodes: {
              default: () => []
            },
            connections: {
              default: () => []
            },
            controlsPosition: {
              default: PanelPosition.BottomLeft
            },
            eventBus: {
              default: () => createEventBus()
            },
            readOnly: {
              type: Boolean,
              default: false
            },
            executing: {
              type: Boolean,
              default: false
            },
            keyBindings: {
              type: Boolean,
              default: true
            },
            loading: {
              type: Boolean,
              default: false
            },
            suppressInteraction: {
              type: Boolean,
              default: false
            }
          },
          emits: ["update:modelValue", "update:node:position", "update:nodes:position", "update:node:activated", "update:node:deactivated", "update:node:enabled", "update:node:selected", "update:node:name", "update:node:parameters", "update:node:inputs", "update:node:outputs", "update:logs-open", "update:logs:input-open", "update:logs:output-open", "update:has-range-selection", "click:node", "click:node:add", "run:node", "copy:production:url", "copy:test:url", "delete:node", "replace:node", "create:node", "create:sticky", "delete:nodes", "update:nodes:enabled", "copy:nodes", "duplicate:nodes", "update:nodes:pin", "cut:nodes", "delete:connection", "create:connection:start", "create:connection", "create:connection:end", "create:connection:cancelled", "click:connection:add", "click:pane", "run:workflow", "save:workflow", "create:workflow", "drag-and-drop", "tidy-up", "toggle:focus-panel", "viewport:change", "selection:end", "open:sub-workflow", "start-chat", "extract-workflow"],
          setup(__props, {
            expose: __expose,
            emit: __emit
          }) {
            const $style = useCssModule();
            const emit = __emit;
            const props = __props;
            const {
              isMobileDevice,
              controlKeyCode
            } = useDeviceSupport();
            const experimentalNdvStore = useExperimentalNdvStore();
            const isExperimentalNdvActive$3 = computed(() => experimentalNdvStore.isActive(viewport.value.zoom));
            const vueFlow = useVueFlow(props.id);
            const {
              getSelectedNodes: selectedNodes,
              addSelectedNodes,
              removeSelectedNodes,
              viewportRef,
              fitView,
              fitBounds,
              zoomIn,
              zoomOut,
              zoomTo,
              setInteractive,
              elementsSelectable,
              project,
              nodes: graphNodes,
              onPaneReady,
              onNodesInitialized,
              findNode,
              viewport,
              dimensions,
              nodesSelectionActive,
              userSelectionRect,
              setViewport,
              setCenter,
              onEdgeMouseLeave,
              onEdgeMouseEnter,
              onEdgeMouseMove,
              onNodeMouseEnter,
              onNodeMouseLeave
            } = vueFlow;
            const {
              getIncomingNodes,
              getOutgoingNodes,
              getSiblingNodes,
              getDownstreamNodes,
              getUpstreamNodes
            } = useCanvasTraversal(vueFlow);
            const {
              layout: layout$1
            } = useCanvasLayout(props.id, isExperimentalNdvActive$3);
            const isPaneReady = ref(false);
            const classes = computed(() => ({
              [$style.canvas]: true,
              [$style.ready]: !props.loading && isPaneReady.value,
              [$style.isExperimentalNdvActive]: isExperimentalNdvActive$3.value
            }));
            /**
            * Panning and Selection key bindings
            */
            const panningKeyCode = ref(isMobileDevice ? true : [" ", controlKeyCode]);
            const panningMouseButton = ref(isMobileDevice ? true : [1]);
            const selectionKeyCode = ref(isMobileDevice ? "Shift" : true);
            const isInPanningMode = ref(false);
            function switchToPanningMode() {
              selectionKeyCode.value = null;
              panningMouseButton.value = [0, 1];
              isInPanningMode.value = true;
            }
            function switchToSelectionMode() {
              selectionKeyCode.value = true;
              panningMouseButton.value = [1];
              isInPanningMode.value = false;
            }
            onKeyDown(panningKeyCode.value, switchToPanningMode, {
              dedupe: true
            });
            onKeyUp(panningKeyCode.value, switchToSelectionMode);
            /**
            * Rename node key bindings
            * We differentiate between short and long press because the space key is also used for activating panning
            */
            useShortKeyPress(renameKeyCode, () => {
              if (lastSelectedNode.value) emit("update:node:name", lastSelectedNode.value.id);
            }, {
              disabled: toRef(props, "readOnly")
            });
            /**
            * Key bindings
            */
            const disableKeyBindings = computed(() => !props.keyBindings);
            function selectLeftNode(id$1) {
              const previousNode = getIncomingNodes(id$1)[0];
              if (previousNode) onSelectNodes({
                ids: [previousNode.id]
              });
            }
            function selectRightNode(id$1) {
              const nextNode = getOutgoingNodes(id$1)[0];
              if (nextNode) onSelectNodes({
                ids: [nextNode.id]
              });
            }
            function selectLowerSiblingNode(id$1) {
              const siblingNodes = getSiblingNodes(id$1);
              const nextNode = siblingNodes[siblingNodes.findIndex(n => n.id === id$1) + 1] ?? siblingNodes[0];
              if (nextNode) onSelectNodes({
                ids: [nextNode.id]
              });
            }
            function selectUpperSiblingNode(id$1) {
              const siblingNodes = getSiblingNodes(id$1);
              const previousNode = siblingNodes[siblingNodes.findIndex(n => n.id === id$1) - 1] ?? siblingNodes[siblingNodes.length - 1];
              if (previousNode) onSelectNodes({
                ids: [previousNode.id]
              });
            }
            function selectDownstreamNodes(id$1) {
              onSelectNodes({
                ids: [...getDownstreamNodes(id$1).map(node$1 => node$1.id), id$1]
              });
            }
            function selectUpstreamNodes(id$1) {
              onSelectNodes({
                ids: [...getUpstreamNodes(id$1).map(node$1 => node$1.id), id$1]
              });
            }
            function onToggleZoomMode() {
              experimentalNdvStore.toggleZoomMode({
                canvasViewport: viewport.value,
                canvasDimensions: dimensions.value,
                selectedNodes: selectedNodes.value,
                setViewport,
                fitView,
                zoomTo,
                setCenter
              });
            }
            useKeybindings(computed(() => {
              const readOnlyKeymap = {
                ctrl_shift_o: emitWithLastSelectedNode(id$1 => emit("open:sub-workflow", id$1)),
                ctrl_c: {
                  disabled: () => isOutsideSelected(viewportRef.value),
                  run: emitWithSelectedNodes(ids => emit("copy:nodes", ids))
                },
                enter: emitWithLastSelectedNode(id$1 => onSetNodeActivated(id$1)),
                ctrl_a: () => addSelectedNodes(graphNodes.value),
                "shift_+|+|=|shift_Equal|Equal": async () => await onZoomIn(),
                "shift+_|-|_|shift_Minus|Minus": async () => await onZoomOut(),
                0: async () => await onResetZoom(),
                1: async () => await onFitView(),
                ArrowUp: emitWithLastSelectedNode(selectUpperSiblingNode),
                ArrowDown: emitWithLastSelectedNode(selectLowerSiblingNode),
                ArrowLeft: emitWithLastSelectedNode(selectLeftNode),
                ArrowRight: emitWithLastSelectedNode(selectRightNode),
                shift_ArrowLeft: emitWithLastSelectedNode(selectUpstreamNodes),
                shift_ArrowRight: emitWithLastSelectedNode(selectDownstreamNodes),
                l: () => emit("update:logs-open"),
                i: () => emit("update:logs:input-open"),
                o: () => emit("update:logs:output-open"),
                z: onToggleZoomMode
              };
              if (props.readOnly) return readOnlyKeymap;
              return {
                ...readOnlyKeymap,
                ctrl_x: emitWithSelectedNodes(ids => emit("cut:nodes", ids)),
                "delete|backspace": emitWithSelectedNodes(ids => emit("delete:nodes", ids)),
                ctrl_d: emitWithSelectedNodes(ids => emit("duplicate:nodes", ids)),
                d: emitWithSelectedNodes(ids => emit("update:nodes:enabled", ids)),
                p: emitWithSelectedNodes(ids => emit("update:nodes:pin", ids, "keyboard-shortcut")),
                f2: emitWithLastSelectedNode(id$1 => emit("update:node:name", id$1)),
                tab: () => emit("create:node", "tab"),
                shift_s: () => emit("create:sticky"),
                shift_f: () => emit("toggle:focus-panel"),
                ctrl_alt_n: () => emit("create:workflow"),
                ctrl_enter: () => emit("run:workflow"),
                ctrl_s: () => emit("save:workflow"),
                shift_alt_t: async () => await onTidyUp({
                  source: "keyboard-shortcut"
                }),
                alt_x: emitWithSelectedNodes(ids => emit("extract-workflow", ids)),
                c: () => emit("start-chat"),
                r: emitWithLastSelectedNode(id$1 => emit("replace:node", id$1)),
                shift_alt_u: emitWithLastSelectedNode(id$1 => emit("copy:test:url", id$1)),
                alt_u: emitWithLastSelectedNode(id$1 => emit("copy:production:url", id$1))
              };
            }), {
              disabled: disableKeyBindings
            });
            /**
            * Nodes
            */
            const hasSelection = computed(() => selectedNodes.value.length > 0);
            const selectedNodeIds = computed(() => selectedNodes.value.map(node$1 => node$1.id));
            const lastSelectedNode = ref();
            const hoveredTriggerNode = useCanvasNodeHover(computed(() => props.nodes.filter(node$1 => node$1.data?.render.type === CanvasNodeRenderType.Default && node$1.data.render.options.trigger)), vueFlow, nodeRect => ({
              x: nodeRect.x - nodeRect.width * 2,
              y: nodeRect.y - nodeRect.height,
              width: nodeRect.width * 4,
              height: nodeRect.height * 3
            }));
            watch(selectedNodes, nodes => {
              if (!lastSelectedNode.value || !nodes.find(node$1 => node$1.id === lastSelectedNode.value?.id)) lastSelectedNode.value = nodes[nodes.length - 1];
            });
            function onClickNodeAdd(id$1, handle$5) {
              emit("click:node:add", id$1, handle$5);
            }
            function onUpdateNodesPosition(events) {
              emit("update:nodes:position", events);
            }
            function onUpdateNodePosition(id$1, position$3) {
              emit("update:node:position", id$1, position$3);
            }
            function onNodeDragStop(event) {
              onUpdateNodesPosition(event.nodes.map(({
                id: id$1,
                position: position$3
              }) => ({
                id: id$1,
                position: position$3
              })));
            }
            function onNodeClick({
              event,
              node: node$1
            }) {
              emit("click:node", node$1.id, getProjectedPosition(event));
              if (event.ctrlKey || event.metaKey || selectedNodes.value.length < 2) return;
              onSelectNodes({
                ids: [node$1.id]
              });
            }
            function onSelectionDragStop(event) {
              onUpdateNodesPosition(event.nodes.map(({
                id: id$1,
                position: position$3
              }) => ({
                id: id$1,
                position: position$3
              })));
            }
            function onSelectionEnd(event) {
              if (selectedNodes.value.length === 1) nodesSelectionActive.value = false;
              emit("selection:end", getProjectedPosition(event));
            }
            function onSetNodeActivated(id$1, event) {
              props.eventBus.emit("nodes:action", {
                ids: [id$1],
                action: "update:node:activated"
              });
              emit("update:node:activated", id$1, event);
            }
            function onSetNodeDeactivated(id$1) {
              emit("update:node:deactivated", id$1);
            }
            function clearSelectedNodes() {
              removeSelectedNodes(selectedNodes.value);
            }
            function onSelectNode() {
              emit("update:node:selected", lastSelectedNode.value?.id);
            }
            function onSelectNodes({
              ids,
              panIntoView
            }) {
              clearSelectedNodes();
              addSelectedNodes(ids.map(findNode).filter(isPresent));
              if (panIntoView) {
                const nodes = ids.map(findNode).filter(isPresent);
                if (nodes.length === 0) return;
                setViewport(updateViewportToContainNodes(viewport.value, dimensions.value, nodes, 100), {
                  duration: 200,
                  interpolate: "linear"
                });
              }
            }
            function onToggleNodeEnabled(id$1) {
              emit("update:node:enabled", id$1);
            }
            function onDeleteNode(id$1) {
              emit("delete:node", id$1);
            }
            function onUpdateNodeParameters(id$1, parameters) {
              emit("update:node:parameters", id$1, parameters);
            }
            function onUpdateNodeInputs(id$1) {
              emit("update:node:inputs", id$1);
              nextTick(() => vueFlow.updateNodeInternals([id$1]));
            }
            function onUpdateNodeOutputs(id$1) {
              emit("update:node:outputs", id$1);
              nextTick(() => vueFlow.updateNodeInternals([id$1]));
            }
            function onFocusNode(id$1) {
              const node$1 = vueFlow.nodeLookup.value.get(id$1);
              if (node$1) {
                addSelectedNodes([node$1]);
                experimentalNdvStore.focusNode(node$1, {
                  canvasViewport: viewport.value,
                  canvasDimensions: dimensions.value,
                  setCenter
                });
              }
            }
            /**
            * Connections / Edges
            */
            const connectionCreated = ref(false);
            const connectingHandle = ref();
            const connectedHandle = ref();
            function onConnectStart(handle$5) {
              emit("create:connection:start", handle$5);
              connectingHandle.value = handle$5;
              connectionCreated.value = false;
            }
            function onConnect(connection) {
              emit("create:connection", connection);
              connectedHandle.value = connection;
              connectionCreated.value = true;
            }
            function onConnectEnd(event) {
              if (connectedHandle.value) emit("create:connection:end", connectedHandle.value, event);else if (connectingHandle.value) emit("create:connection:cancelled", connectingHandle.value, getProjectedPosition(event), event);
              connectedHandle.value = void 0;
              connectingHandle.value = void 0;
            }
            function onDeleteConnection(connection) {
              emit("delete:connection", connection);
            }
            function onClickConnectionAdd(connection) {
              emit("click:connection:add", connection);
            }
            const arrowHeadMarkerId = ref("custom-arrow-head");
            /**
            * Edge and Nodes Hovering
            */
            const edgesHoveredById = ref({});
            const edgesBringToFrontById = ref({});
            onEdgeMouseEnter(({
              edge: edge$2
            }) => {
              edgesBringToFrontById.value = {
                [edge$2.id]: true
              };
              edgesHoveredById.value = {
                [edge$2.id]: true
              };
            });
            onEdgeMouseMove(useThrottleFn(({
              edge: edge$2,
              event
            }) => {
              if (edge$2.data.source.type !== NodeConnectionTypes.AiTool) return;
              if (!edge$2.data.maxConnections || edge$2.data.maxConnections > 1) if (getProjectedPosition(event).y - edge$2.targetY < 4 * 16) edgesBringToFrontById.value = {
                [edge$2.id]: false
              };else edgesBringToFrontById.value = {
                [edge$2.id]: true
              };
            }, 100));
            onEdgeMouseLeave(({
              edge: edge$2
            }) => {
              edgesBringToFrontById.value = {
                [edge$2.id]: false
              };
              edgesHoveredById.value = {
                [edge$2.id]: false
              };
            });
            function onUpdateEdgeLabelHovered(id$1, hovered$1) {
              edgesBringToFrontById.value = {
                [id$1]: true
              };
              edgesHoveredById.value[id$1] = hovered$1;
            }
            const nodesHoveredById = ref({});
            onNodeMouseEnter(({
              node: node$1
            }) => {
              nodesHoveredById.value = {
                [node$1.id]: true
              };
            });
            onNodeMouseLeave(({
              node: node$1
            }) => {
              nodesHoveredById.value = {
                [node$1.id]: false
              };
            });
            /**
            * Executions
            */
            function onRunNode(id$1) {
              emit("run:node", id$1);
            }
            /**
            * Emit helpers
            */
            function emitWithSelectedNodes(emitFn) {
              return () => {
                if (hasSelection.value) emitFn(selectedNodeIds.value);
              };
            }
            function emitWithLastSelectedNode(emitFn) {
              return () => {
                if (lastSelectedNode.value) emitFn(lastSelectedNode.value.id);
              };
            }
            /**
            * View
            */
            const isPaneMoving = ref(false);
            useViewportAutoAdjust(viewportRef, viewport, setViewport);
            function getProjectedPosition(event) {
              const bounds = viewportRef.value?.getBoundingClientRect() ?? {
                left: 0,
                top: 0
              };
              const [offsetX, offsetY] = event ? getMousePosition(event) : [0, 0];
              return project({
                x: offsetX - bounds.left,
                y: offsetY - bounds.top
              });
            }
            function onClickPane(event) {
              emit("click:pane", getProjectedPosition(event));
            }
            async function onFitBounds(nodes) {
              await fitBounds(getRectOfNodes(nodes), {
                padding: 2
              });
            }
            async function onFitView() {
              await fitView({
                maxZoom: defaultZoom,
                padding: .2
              });
            }
            async function onZoomTo(zoomLevel) {
              await zoomTo(zoomLevel);
            }
            async function onZoomIn() {
              await zoomIn();
            }
            async function onZoomOut() {
              await zoomOut();
            }
            async function onResetZoom() {
              await onZoomTo(defaultZoom);
            }
            function onPaneMove({
              event
            }) {
              if (isInPanningMode.value || event instanceof WheelEvent) isPaneMoving.value = true;
            }
            function onPaneMoveEnd() {
              isPaneMoving.value = false;
            }
            function onViewportChange() {
              emit("viewport:change", viewport.value, dimensions.value);
            }
            const nodeDataById = computed(() => {
              return props.nodes.reduce((acc, node$1) => {
                acc[node$1.id] = node$1.data;
                return acc;
              }, {});
            });
            /**
            * Context menu
            */
            const contextMenu$1 = useContextMenu();
            function onOpenContextMenu(event, target$1) {
              contextMenu$1.open(event, {
                source: "canvas",
                nodeIds: selectedNodeIds.value,
                ...target$1
              });
            }
            function onOpenSelectionContextMenu({
              event
            }) {
              onOpenContextMenu(event);
            }
            function onOpenNodeContextMenu(id$1, event, source) {
              if (source === "node-button") contextMenu$1.open(event, {
                source,
                nodeId: id$1
              });else if (selectedNodeIds.value.length > 1 && selectedNodeIds.value.includes(id$1)) onOpenContextMenu(event, {
                nodeId: id$1
              });else {
                onSelectNodes({
                  ids: [id$1]
                });
                contextMenu$1.open(event, {
                  source,
                  nodeId: id$1
                });
              }
            }
            async function onContextMenuAction(action, nodeIds) {
              switch (action) {
                case "add_node":
                  return emit("create:node", "context_menu");
                case "add_sticky":
                  return emit("create:sticky");
                case "copy":
                  return emit("copy:nodes", nodeIds);
                case "delete":
                  return emit("delete:nodes", nodeIds);
                case "select_all":
                  return addSelectedNodes(graphNodes.value);
                case "deselect_all":
                  return clearSelectedNodes();
                case "duplicate":
                  return emit("duplicate:nodes", nodeIds);
                case "toggle_pin":
                  return emit("update:nodes:pin", nodeIds, "context-menu");
                case "execute":
                  return emit("run:node", nodeIds[0]);
                case "copy_production_url":
                  return emit("copy:production:url", nodeIds[0]);
                case "copy_test_url":
                  return emit("copy:test:url", nodeIds[0]);
                case "toggle_activation":
                  return emit("update:nodes:enabled", nodeIds);
                case "open":
                  return onSetNodeActivated(nodeIds[0]);
                case "rename":
                  return emit("update:node:name", nodeIds[0]);
                case "replace":
                  return emit("replace:node", nodeIds[0]);
                case "change_color":
                  return props.eventBus.emit("nodes:action", {
                    ids: nodeIds,
                    action: "update:sticky:color"
                  });
                case "tidy_up":
                  return await onTidyUp({
                    source: "context-menu"
                  });
                case "extract_sub_workflow":
                  return emit("extract-workflow", nodeIds);
                case "open_sub_workflow":
                  return emit("open:sub-workflow", nodeIds[0]);
              }
            }
            async function onTidyUp(payload) {
              if (payload.nodeIdsFilter && payload.nodeIdsFilter.length > 0) {
                clearSelectedNodes();
                addSelectedNodes(payload.nodeIdsFilter.map(findNode).filter(isPresent));
              }
              const applyOnSelection = selectedNodes.value.length > 1;
              const target$1 = applyOnSelection ? "selection" : "all";
              emit("tidy-up", {
                result: layout$1(target$1),
                target: target$1,
                source: payload.source
              }, {
                trackEvents: payload.trackEvents
              });
              await nextTick();
              if (applyOnSelection) await onFitBounds(selectedNodes.value);else await onFitView();
            }
            /**
            * Drag and drop
            */
            function onDragOver(event) {
              event.preventDefault();
            }
            function onDrop(event) {
              emit("drag-and-drop", getProjectedPosition(event), event);
            }
            /**
            * Minimap
            */
            const minimapHideTimeout = ref(null);
            const isMinimapVisible = ref(false);
            function minimapNodeClassnameFn(node$1) {
              return `minimap-node-${node$1.data?.render.type.replace(/\./g, "-") ?? "default"}`;
            }
            watch(isPaneMoving, value => {
              if (value) showMinimap();else hideMinimap();
            });
            function showMinimap() {
              if (minimapHideTimeout.value) {
                clearTimeout(minimapHideTimeout.value);
                minimapHideTimeout.value = null;
              }
              isMinimapVisible.value = true;
            }
            function hideMinimap() {
              minimapHideTimeout.value = setTimeout(() => {
                isMinimapVisible.value = false;
              }, minimapVisibilityDelay);
            }
            function onMinimapMouseEnter() {
              showMinimap();
            }
            function onMinimapMouseLeave() {
              hideMinimap();
            }
            /**
            * Window Events
            */
            function onWindowBlur() {
              switchToSelectionMode();
            }
            /**
            * Lifecycle
            */
            const initialized = ref(false);
            onMounted(() => {
              props.eventBus.on("fitView", onFitView);
              props.eventBus.on("nodes:select", onSelectNodes);
              props.eventBus.on("nodes:selectAll", () => addSelectedNodes(graphNodes.value));
              props.eventBus.on("tidyUp", onTidyUp);
              window.addEventListener("blur", onWindowBlur);
            });
            onUnmounted(() => {
              props.eventBus.off("fitView", onFitView);
              props.eventBus.off("nodes:select", onSelectNodes);
              props.eventBus.off("tidyUp", onTidyUp);
              window.removeEventListener("blur", onWindowBlur);
            });
            onPaneReady(async () => {
              await onFitView();
              isPaneReady.value = true;
            });
            onNodesInitialized(() => {
              initialized.value = true;
            });
            watch([() => props.readOnly, () => props.suppressInteraction], ([readOnly, suppressInteraction]) => {
              setInteractive(!readOnly && !suppressInteraction);
              elementsSelectable.value = !suppressInteraction;
            }, {
              immediate: true
            });
            watch([nodesSelectionActive, userSelectionRect], ([isActive, rect]) => emit("update:has-range-selection", isActive || (rect?.width ?? 0) > 0 || (rect?.height ?? 0) > 0));
            watch([vueFlow.nodes, () => experimentalNdvStore.nodeNameToBeFocused], ([nodes, toFocusName]) => {
              const toFocusNode = toFocusName && nodes.find(n => n.data.name === toFocusName);
              if (!toFocusNode) return;
              setTimeout(() => {
                experimentalNdvStore.focusNode(toFocusNode, {
                  canvasViewport: viewport.value,
                  canvasDimensions: dimensions.value,
                  setCenter
                });
              });
            });
            provide(CanvasKey, {
              connectingHandle,
              isExecuting: toRef(props, "executing"),
              initialized,
              viewport,
              isExperimentalNdvActive: isExperimentalNdvActive$3,
              isPaneMoving
            });
            __expose({
              executeContextMenuAction: onContextMenuAction
            });
            return (_ctx, _cache) => {
              return openBlock(), createBlock(unref(_sfc_main$1), {
                id: _ctx.id,
                nodes: _ctx.nodes,
                edges: _ctx.connections,
                class: normalizeClass(classes.value),
                "apply-changes": false,
                "connection-line-options": {
                  markerEnd: unref(MarkerType).ArrowClosed
                },
                "connection-radius": 60,
                "pan-on-drag": panningMouseButton.value,
                "pan-on-scroll": "",
                "snap-to-grid": "",
                "snap-grid": [unref(16), unref(16)],
                "min-zoom": 0,
                "max-zoom": unref(experimentalNdvStore).isZoomedViewEnabled ? unref(experimentalNdvStore).maxCanvasZoom : 4,
                "selection-key-code": selectionKeyCode.value,
                "zoom-activation-key-code": panningKeyCode.value,
                "pan-activation-key-code": panningKeyCode.value,
                "disable-keyboard-a11y": true,
                "delete-key-code": null,
                "data-test-id": "canvas",
                onConnectStart,
                onConnect,
                onConnectEnd,
                onPaneClick: onClickPane,
                onPaneContextMenu: onOpenContextMenu,
                onMove: onPaneMove,
                onMoveEnd: onPaneMoveEnd,
                onNodeDragStop,
                onNodeClick,
                onSelectionDragStop,
                onSelectionEnd,
                onSelectionContextMenu: onOpenSelectionContextMenu,
                onDragover: onDragOver,
                onDrop,
                onViewportChange
              }, {
                "node-canvas-node": withCtx(nodeProps => [renderSlot(_ctx.$slots, "node", normalizeProps(guardReactiveProps({
                  nodeProps
                })), () => [createVNode(CanvasNode_default, mergeProps(nodeProps, {
                  data: nodeDataById.value[nodeProps.id],
                  "read-only": _ctx.readOnly,
                  "event-bus": _ctx.eventBus,
                  hovered: nodesHoveredById.value[nodeProps.id],
                  "nearby-hovered": nodeProps.id === unref(hoveredTriggerNode).id.value,
                  onDelete: onDeleteNode,
                  onRun: onRunNode,
                  onSelect: onSelectNode,
                  onToggle: onToggleNodeEnabled,
                  onActivate: onSetNodeActivated,
                  onDeactivate: onSetNodeDeactivated,
                  "onOpen:contextmenu": onOpenNodeContextMenu,
                  onUpdate: onUpdateNodeParameters,
                  "onUpdate:inputs": onUpdateNodeInputs,
                  "onUpdate:outputs": onUpdateNodeOutputs,
                  onMove: onUpdateNodePosition,
                  onAdd: onClickNodeAdd,
                  onFocus: onFocusNode
                }), createSlots({
                  _: 2
                }, [_ctx.$slots.nodeToolbar ? {
                  name: "toolbar",
                  fn: withCtx(toolbarProps => [renderSlot(_ctx.$slots, "nodeToolbar", normalizeProps(guardReactiveProps(toolbarProps)), void 0, true)]),
                  key: "0"
                } : void 0]), 1040, ["data", "read-only", "event-bus", "hovered", "nearby-hovered"])], true)]),
                "edge-canvas-edge": withCtx(edgeProps => [renderSlot(_ctx.$slots, "edge", normalizeProps(guardReactiveProps({
                  edgeProps,
                  arrowHeadMarkerId: arrowHeadMarkerId.value
                })), () => [createVNode(CanvasEdge_default, mergeProps(edgeProps, {
                  "marker-end": `url(#${arrowHeadMarkerId.value})`,
                  "read-only": _ctx.readOnly,
                  hovered: edgesHoveredById.value[edgeProps.id],
                  "bring-to-front": edgesBringToFrontById.value[edgeProps.id],
                  onAdd: onClickConnectionAdd,
                  onDelete: onDeleteConnection,
                  "onUpdate:label:hovered": $event => onUpdateEdgeLabelHovered(edgeProps.id, $event)
                }), null, 16, ["marker-end", "read-only", "hovered", "bring-to-front", "onUpdate:label:hovered"])], true)]),
                "connection-line": withCtx(connectionLineProps => [createVNode(CanvasConnectionLine_default, normalizeProps(guardReactiveProps(connectionLineProps)), null, 16)]),
                default: withCtx(() => [createVNode(CanvasArrowHeadMarker_default, {
                  id: arrowHeadMarkerId.value
                }, null, 8, ["id"]), renderSlot(_ctx.$slots, "canvas-background", normalizeProps(guardReactiveProps({
                  viewport: unref(viewport)
                })), () => [createVNode(CanvasBackground_default, {
                  viewport: unref(viewport),
                  striped: _ctx.readOnly
                }, null, 8, ["viewport", "striped"])], true), createVNode(Transition, {
                  name: "minimap"
                }, {
                  default: withCtx(() => [withDirectives(createVNode(unref(_sfc_main), {
                    "data-test-id": "canvas-minimap",
                    "aria-label": "n8n Minimap",
                    height: 120,
                    width: 200,
                    position: unref(PanelPosition).BottomLeft,
                    pannable: "",
                    zoomable: "",
                    "node-class-name": minimapNodeClassnameFn,
                    "node-border-radius": 16,
                    onMouseenter: onMinimapMouseEnter,
                    onMouseleave: onMinimapMouseLeave
                  }, null, 8, ["position"]), [[vShow, isMinimapVisible.value]])]),
                  _: 1
                }), createVNode(CanvasControlButtons_default, {
                  "data-test-id": "canvas-controls",
                  class: normalizeClass(unref($style).canvasControls),
                  position: _ctx.controlsPosition,
                  "show-interactive": false,
                  zoom: unref(viewport).zoom,
                  "read-only": _ctx.readOnly,
                  "is-experimental-ndv-active": isExperimentalNdvActive$3.value,
                  onZoomToFit: onFitView,
                  onZoomIn,
                  onZoomOut,
                  onResetZoom,
                  onTidyUp: _cache[0] || (_cache[0] = $event => onTidyUp({
                    source: "canvas-button"
                  })),
                  onToggleZoomMode
                }, null, 8, ["class", "position", "zoom", "read-only", "is-experimental-ndv-active"]), (openBlock(), createBlock(Suspense, null, {
                  default: withCtx(() => [createVNode(ContextMenu_default, {
                    onAction: onContextMenuAction
                  })]),
                  _: 1
                }))]),
                _: 3
              }, 8, ["id", "nodes", "edges", "class", "connection-line-options", "pan-on-drag", "snap-grid", "max-zoom", "selection-key-code", "zoom-activation-key-code", "pan-activation-key-code"]);
            };
          }
        }); //#endregion
        //#region src/features/workflows/canvas/components/Canvas.vue?vue&type=style&index=0&lang.module.scss
        canvas = "_canvas_rygeb_123";
        ready = "_ready_rygeb_129";
        isExperimentalNdvActive = "_isExperimentalNdvActive_rygeb_132";
        Canvas_vue_vue_type_style_index_0_lang_module_default = {
          canvas,
          ready,
          isExperimentalNdvActive
        }; //#endregion
        //#region src/features/workflows/canvas/components/Canvas.vue
        cssModules = {
          "$style": Canvas_vue_vue_type_style_index_0_lang_module_default
        };
        _export("n", Canvas_default = /* @__PURE__ */__plugin_vue_export_helper_default(Canvas_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules], ["__scopeId", "data-v-3dfb422b"]]));
      }
    };
  });
})();