{
e.stopPropagation()
e.nativeEvent.stopImmediatePropagation()
}}
>
- {treeNodes.map(renderNode)}
+ {/* Search input */}
+ {enableSearch && (
+
+
+
+
setSearchQuery(e.target.value)}
+ placeholder={t('workflow.common.searchNodes') || 'Search nodes, types, inputs, outputs...'}
+ className="system-sm-regular block h-[18px] grow appearance-none border-0 bg-transparent text-components-input-text-filled outline-none placeholder:text-components-input-text-placeholder"
+ autoComplete="off"
+ />
+ {searchQuery && (
+
+
+
+ )}
+
+
+ )}
+
+ {/* Search results statistics */}
+ {enableSearch && searchQuery && (
+
+
+ {filteredNodes.length === 0
+ ? t('workflow.common.noSearchResults')
+ : t('workflow.common.searchResults', {
+ matched: searchStats.matched,
+ total: searchStats.total,
+ })}
+
+
+ )}
+
+ {/* Empty search results hint */}
+ {enableSearch && searchQuery && filteredNodes.length === 0 && (
+
+
{t('workflow.common.noSearchResults')}
+
+ {t('workflow.common.searchHint', { query: searchQuery })}
+
+
+ )}
+
+ {/* Tracing content */}
+
+ {filteredNodes.length > 0 && filteredNodes.map(renderNode)}
+
)
}
diff --git a/web/i18n/de-DE/workflow.ts b/web/i18n/de-DE/workflow.ts
index de2c3ce38d..9642394575 100644
--- a/web/i18n/de-DE/workflow.ts
+++ b/web/i18n/de-DE/workflow.ts
@@ -40,6 +40,10 @@ const translation = {
maxTreeDepth: 'Maximales Limit von {{depth}} Knoten pro Ast',
workflowProcess: 'Arbeitsablauf',
notRunning: 'Noch nicht ausgeführt',
+ searchNodes: 'Knoten, Typen, Eingaben, Ausgaben suchen...',
+ noSearchResults: 'Keine Suchergebnisse',
+ searchResults: '{{matched}} von {{total}} Knoten',
+ searchHint: 'Versuchen Sie andere Schlüsselwörter für "{{query}}"',
previewPlaceholder: 'Geben Sie den Inhalt in das Feld unten ein, um das Debuggen des Chatbots zu starten',
effectVarConfirm: {
title: 'Variable entfernen',
diff --git a/web/i18n/en-US/workflow.ts b/web/i18n/en-US/workflow.ts
index 763739ba32..5d3aa09b3d 100644
--- a/web/i18n/en-US/workflow.ts
+++ b/web/i18n/en-US/workflow.ts
@@ -50,6 +50,10 @@ const translation = {
needAnswerNode: 'The Answer node must be added',
workflowProcess: 'Workflow Process',
notRunning: 'Not running yet',
+ searchNodes: 'Search nodes, types, inputs, outputs...',
+ noSearchResults: 'No search results',
+ searchResults: '{{matched}} of {{total}} nodes',
+ searchHint: 'Try different keywords for "{{query}}"',
previewPlaceholder: 'Enter content in the box below to start debugging the Chatbot',
effectVarConfirm: {
title: 'Remove Variable',
diff --git a/web/i18n/es-ES/workflow.ts b/web/i18n/es-ES/workflow.ts
index 3c509934df..541b75d193 100644
--- a/web/i18n/es-ES/workflow.ts
+++ b/web/i18n/es-ES/workflow.ts
@@ -40,6 +40,10 @@ const translation = {
maxTreeDepth: 'Límite máximo de {{depth}} nodos por rama',
workflowProcess: 'Proceso de flujo de trabajo',
notRunning: 'Aún no se está ejecutando',
+ searchNodes: 'Buscar nodos, tipos, entradas, salidas...',
+ noSearchResults: 'Sin resultados de búsqueda',
+ searchResults: '{{matched}} de {{total}} nodos',
+ searchHint: 'Prueba con diferentes palabras clave para "{{query}}"',
previewPlaceholder: 'Ingrese contenido en el cuadro de abajo para comenzar a depurar el Chatbot',
effectVarConfirm: {
title: 'Eliminar variable',
diff --git a/web/i18n/fr-FR/workflow.ts b/web/i18n/fr-FR/workflow.ts
index 96bead7ff2..1a227b664a 100644
--- a/web/i18n/fr-FR/workflow.ts
+++ b/web/i18n/fr-FR/workflow.ts
@@ -40,6 +40,10 @@ const translation = {
maxTreeDepth: 'Limite maximale de {{depth}} nœuds par branche',
workflowProcess: 'Processus de flux de travail',
notRunning: 'Pas encore en cours d\'exécution',
+ searchNodes: 'Rechercher nœuds, types, entrées, sorties...',
+ noSearchResults: 'Aucun résultat de recherche',
+ searchResults: '{{matched}} sur {{total}} nœuds',
+ searchHint: 'Essayez des mots-clés différents pour "{{query}}"',
previewPlaceholder: 'Entrez le contenu dans la boîte ci-dessous pour commencer à déboguer le Chatbot',
effectVarConfirm: {
title: 'Supprimer la variable',
diff --git a/web/i18n/ja-JP/workflow.ts b/web/i18n/ja-JP/workflow.ts
index 035bba61a6..5e4f04800e 100644
--- a/web/i18n/ja-JP/workflow.ts
+++ b/web/i18n/ja-JP/workflow.ts
@@ -50,6 +50,10 @@ const translation = {
needAnswerNode: '回答ブロックを追加する必要があります',
workflowProcess: 'ワークフロー処理',
notRunning: 'まだ実行されていません',
+ searchNodes: 'ノード、タイプ、入力、出力を検索...',
+ noSearchResults: '検索結果がありません',
+ searchResults: '{{total}}件中{{matched}}件のノード',
+ searchHint: '"{{query}}"について別のキーワードを試してください',
previewPlaceholder: '入力欄にテキストを入力してチャットボットのデバッグを開始',
effectVarConfirm: {
title: '変数の削除',
diff --git a/web/i18n/ko-KR/workflow.ts b/web/i18n/ko-KR/workflow.ts
index be6c78f3ef..721cfc5cce 100644
--- a/web/i18n/ko-KR/workflow.ts
+++ b/web/i18n/ko-KR/workflow.ts
@@ -40,6 +40,10 @@ const translation = {
maxTreeDepth: '분기당 최대 {{depth}} 노드 제한',
workflowProcess: '워크플로우 과정',
notRunning: '아직 실행되지 않음',
+ searchNodes: '노드, 유형, 입력, 출력 검색...',
+ noSearchResults: '검색 결과 없음',
+ searchResults: '{{total}}개 중 {{matched}}개 노드',
+ searchHint: '"{{query}}"에 대해 다른 키워드를 시도해 보세요',
previewPlaceholder: '디버깅을 시작하려면 아래 상자에 내용을 입력하세요',
effectVarConfirm: {
title: '변수 제거',
diff --git a/web/i18n/ru-RU/workflow.ts b/web/i18n/ru-RU/workflow.ts
index d8452122ad..c1fc9f8620 100644
--- a/web/i18n/ru-RU/workflow.ts
+++ b/web/i18n/ru-RU/workflow.ts
@@ -40,6 +40,10 @@ const translation = {
maxTreeDepth: 'Максимальный предел {{depth}} узлов на ветку',
workflowProcess: 'Процесс рабочего процесса',
notRunning: 'Еще не запущено',
+ searchNodes: 'Поиск узлов, типов, входов, выходов...',
+ noSearchResults: 'Нет результатов поиска',
+ searchResults: '{{matched}} из {{total}} узлов',
+ searchHint: 'Попробуйте другие ключевые слова для "{{query}}"',
previewPlaceholder: 'Введите текст в поле ниже, чтобы начать отладку чат-бота',
effectVarConfirm: {
title: 'Удалить переменную',
diff --git a/web/i18n/zh-Hans/workflow.ts b/web/i18n/zh-Hans/workflow.ts
index 81e207f67e..cb5d7f36a1 100644
--- a/web/i18n/zh-Hans/workflow.ts
+++ b/web/i18n/zh-Hans/workflow.ts
@@ -49,6 +49,10 @@ const translation = {
needAnswerNode: '必须添加直接回复节点',
workflowProcess: '工作流',
notRunning: '尚未运行',
+ searchNodes: '搜索节点、类型、输入、输出...',
+ noSearchResults: '无搜索结果',
+ searchResults: '{{matched}} / {{total}} 个节点',
+ searchHint: '尝试使用不同的关键词搜索 "{{query}}"',
previewPlaceholder: '在下面的框中输入内容开始调试聊天机器人',
effectVarConfirm: {
title: '移除变量',
diff --git a/web/i18n/zh-Hant/workflow.ts b/web/i18n/zh-Hant/workflow.ts
index 0ffdde7713..dc7361bbef 100644
--- a/web/i18n/zh-Hant/workflow.ts
+++ b/web/i18n/zh-Hant/workflow.ts
@@ -42,6 +42,10 @@ const translation = {
needAnswerNode: '必須添加直接回覆節點',
workflowProcess: '工作流',
notRunning: '尚未運行',
+ searchNodes: '搜索節點、類型、輸入、輸出...',
+ noSearchResults: '無搜索結果',
+ searchResults: '{{matched}} / {{total}} 個節點',
+ searchHint: '嘗試使用不同的關鍵詞搜索 "{{query}}"',
previewPlaceholder: '在下面的框中輸入內容開始調試聊天機器人',
effectVarConfirm: {
title: '移除變量',