# Copyright (c) 2025 Patrick Motsch # Flow control node definitions. FLOW_NODES = [ { "id": "flow.ifElse", "category": "flow", "label": {"en": "If / Else", "de": "Wenn / Sonst", "fr": "Si / Sinon"}, "description": {"en": "Branch based on condition", "de": "Verzweigung nach Bedingung", "fr": "Branche selon condition"}, "parameters": [ { "name": "condition", "type": "string", "required": True, "frontendType": "condition", "description": {"en": "Condition to evaluate", "de": "Bedingung", "fr": "Condition"}, }, ], "inputs": 1, "outputs": 2, "outputLabels": {"en": ["Yes", "No"], "de": ["Ja", "Nein"], "fr": ["Oui", "Non"]}, "inputPorts": {0: {"accepts": ["Transit"]}}, "outputPorts": {0: {"schema": "Transit"}, 1: {"schema": "Transit"}}, "executor": "flow", "meta": {"icon": "mdi-source-branch", "color": "#FF9800"}, }, { "id": "flow.switch", "category": "flow", "label": {"en": "Switch", "de": "Switch", "fr": "Switch"}, "description": {"en": "Multiple branches based on value", "de": "Mehrere Zweige nach Wert", "fr": "Branches multiples selon valeur"}, "parameters": [ { "name": "value", "type": "string", "required": True, "frontendType": "text", "description": {"en": "Value to match", "de": "Zu vergleichender Wert", "fr": "Valeur à comparer"}, }, { "name": "cases", "type": "array", "required": False, "frontendType": "caseList", "description": {"en": "List of cases", "de": "Fälle", "fr": "Cas"}, }, ], "inputs": 1, "outputs": 1, "inputPorts": {0: {"accepts": ["Transit"]}}, "outputPorts": {0: {"schema": "Transit"}}, "executor": "flow", "meta": {"icon": "mdi-swap-horizontal", "color": "#FF9800"}, }, { "id": "flow.loop", "category": "flow", "label": {"en": "Loop / For Each", "de": "Schleife / Für Jedes", "fr": "Boucle / Pour Chaque"}, "description": {"en": "Iterate over array items", "de": "Über Array-Elemente iterieren", "fr": "Itérer sur les éléments"}, "parameters": [ { "name": "items", "type": "string", "required": True, "frontendType": "text", "description": {"en": "Path to array (e.g. {{input.items}})", "de": "Pfad zum Array", "fr": "Chemin vers le tableau"}, }, ], "inputs": 1, "outputs": 1, "inputPorts": {0: {"accepts": ["Transit"]}}, "outputPorts": {0: {"schema": "LoopItem"}}, "executor": "flow", "meta": {"icon": "mdi-repeat", "color": "#FF9800"}, }, { "id": "flow.merge", "category": "flow", "label": {"en": "Merge", "de": "Zusammenführen", "fr": "Fusionner"}, "description": {"en": "Merge multiple branches", "de": "Mehrere Zweige zusammenführen", "fr": "Fusionner plusieurs branches"}, "parameters": [ { "name": "mode", "type": "string", "required": False, "frontendType": "select", "frontendOptions": {"options": ["first", "all", "append"]}, "description": {"en": "Merge mode", "de": "Zusammenführungsmodus", "fr": "Mode de fusion"}, "default": "first", }, ], "inputs": 2, "outputs": 1, "inputPorts": {0: {"accepts": ["Transit"]}, 1: {"accepts": ["Transit"]}}, "outputPorts": {0: {"schema": "MergeResult"}}, "executor": "flow", "meta": {"icon": "mdi-call-merge", "color": "#FF9800"}, }, ]