@nuraly/lumenui 0.3.6 β†’ 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1266,7 +1266,7 @@ var pt,ut;ht.styles=r`
1266
1266
  * @license
1267
1267
  * Copyright 2024 Nuraly, Laabidi Aymen
1268
1268
  * SPDX-License-Identifier: MIT
1269
- */var xt,wt,kt,$t,Mt,St,Lt,Tt,Yt;!function(e){e.START="START",e.END="END",e.HTTP_START="HTTP_START",e.HTTP_END="HTTP_END",e.CHAT_START="CHAT_START",e.CHAT_OUTPUT="CHAT_OUTPUT",e.SOCIAL_POST="SOCIAL_POST",e.FUNCTION="FUNCTION",e.HTTP="HTTP",e.CONDITION="CONDITION",e.SWITCH="SWITCH",e.DELAY="DELAY",e.PARALLEL="PARALLEL",e.MERGE="MERGE",e.LOOP="LOOP",e.BREAK="BREAK",e.WAIT="WAIT",e.TRY_CATCH="TRY_CATCH",e.TRANSFORM="TRANSFORM",e.SUB_WORKFLOW="SUB_WORKFLOW",e.EMAIL="EMAIL",e.EMAIL_READER="EMAIL_READER",e.SENDGRID="SENDGRID",e.NOTIFICATION="NOTIFICATION",e.DATABASE="DATABASE",e.VARIABLE="VARIABLE",e.CHATBOT="CHATBOT",e.DEBUG="DEBUG",e.LLM="LLM",e.OCR="OCR",e.WEB_SEARCH="WEB_SEARCH",e.WEB_CRAWL="WEB_CRAWL",e.DOCUMENT_GENERATOR="DOCUMENT_GENERATOR",e.FILE_STORAGE="FILE_STORAGE",e.GOOGLE_CLOUD_STORAGE="GOOGLE_CLOUD_STORAGE",e.S3="S3",e.EMBEDDING="EMBEDDING",e.DOCUMENT_LOADER="DOCUMENT_LOADER",e.TEXT_SPLITTER="TEXT_SPLITTER",e.VECTOR_WRITE="VECTOR_WRITE",e.VECTOR_SEARCH="VECTOR_SEARCH",e.CONTEXT_BUILDER="CONTEXT_BUILDER",e.SUMMARIZATION="SUMMARIZATION",e.GUARDRAIL="GUARDRAIL",e.SLACK_SEND_MESSAGE="SLACK_SEND_MESSAGE",e.SLACK_GET_CHANNEL_INFO="SLACK_GET_CHANNEL_INFO",e.SLACK_LIST_CHANNELS="SLACK_LIST_CHANNELS",e.SLACK_ADD_REACTION="SLACK_ADD_REACTION",e.SLACK_UPLOAD_FILE="SLACK_UPLOAD_FILE",e.RERANKER="RERANKER",e.SHOPIFY="SHOPIFY",e.TELEGRAM_SEND="TELEGRAM_SEND",e.TWILIO_SMS="TWILIO_SMS",e.TWILIO_VOICE="TWILIO_VOICE",e.TELEGRAM_BOT="TELEGRAM_BOT",e.SLACK_SOCKET="SLACK_SOCKET",e.DISCORD_BOT="DISCORD_BOT",e.WHATSAPP_WEBHOOK="WHATSAPP_WEBHOOK",e.CUSTOM_WEBSOCKET="CUSTOM_WEBSOCKET",e.GOOGLE_CALENDAR="GOOGLE_CALENDAR",e.RABBITMQ_TRIGGER="RABBITMQ_TRIGGER",e.KAFKA="KAFKA",e.KAFKA_TRIGGER="KAFKA_TRIGGER",e.ZENDESK="ZENDESK",e.GITLAB="GITLAB",e.MCP="MCP",e.INFORMATION_EXTRACTOR="INFORMATION_EXTRACTOR",e.HUBSPOT="HUBSPOT",e.JIRA="JIRA",e.ELASTICSEARCH="ELASTICSEARCH",e.CALENDLY_TRIGGER="CALENDLY_TRIGGER",e.UI_TABLE="UI_TABLE",e.NOTE="NOTE",e.FRAME="FRAME",e.CRON="CRON"}(xt||(xt={})),function(e){e.AGENT="AGENT",e.TOOL="TOOL",e.MEMORY="MEMORY",e.CONTEXT_MEMORY="CONTEXT_MEMORY",e.PROMPT="PROMPT",e.LLM="AGENT_LLM",e.RETRIEVER="RETRIEVER",e.CHAIN="CHAIN",e.ROUTER="ROUTER",e.HUMAN_INPUT="HUMAN_INPUT",e.OUTPUT_PARSER="OUTPUT_PARSER",e.STRUCTURED_OUTPUT="STRUCTURED_OUTPUT"}(wt||(wt={})),function(e){e.TABLE="DB_TABLE",e.VIEW="DB_VIEW",e.INDEX="DB_INDEX",e.RELATIONSHIP="DB_RELATIONSHIP",e.CONSTRAINT="DB_CONSTRAINT",e.QUERY="DB_QUERY"}(kt||(kt={})),function(e){e.STICKY_NOTE="WB_STICKY_NOTE",e.SHAPE_RECTANGLE="WB_SHAPE_RECTANGLE",e.SHAPE_CIRCLE="WB_SHAPE_CIRCLE",e.SHAPE_DIAMOND="WB_SHAPE_DIAMOND",e.SHAPE_TRIANGLE="WB_SHAPE_TRIANGLE",e.SHAPE_ARROW="WB_SHAPE_ARROW",e.SHAPE_LINE="WB_SHAPE_LINE",e.SHAPE_STAR="WB_SHAPE_STAR",e.SHAPE_HEXAGON="WB_SHAPE_HEXAGON",e.TEXT_BLOCK="WB_TEXT_BLOCK",e.IMAGE="WB_IMAGE",e.DRAWING="WB_DRAWING",e.FRAME="WB_FRAME",e.VOTING="WB_VOTING",e.MERMAID="WB_MERMAID",e.ANCHOR="WB_ANCHOR",e.WORKFLOW="WB_WORKFLOW",e.DATABASE="WB_DATABASE"}($t||($t={})),function(e){e.WORKFLOW="WORKFLOW",e.DATABASE="DATABASE",e.WHITEBOARD="WHITEBOARD"}(Mt||(Mt={})),function(e){e.DISCONNECTED="DISCONNECTED",e.CONNECTING="CONNECTING",e.CONNECTED="CONNECTED",e.PAUSED="PAUSED",e.HANDOFF_PENDING="HANDOFF_PENDING",e.ERROR="ERROR"}(St||(St={})),function(e){e.IDLE="IDLE",e.PENDING="PENDING",e.RUNNING="RUNNING",e.COMPLETED="COMPLETED",e.FAILED="FAILED",e.CANCELLED="CANCELLED",e.PAUSED="PAUSED",e.WAITING="WAITING"}(Lt||(Lt={})),function(e){e.INPUT="INPUT",e.OUTPUT="OUTPUT",e.CONFIG="CONFIG",e.CONDITIONAL_TRUE="CONDITIONAL_TRUE",e.CONDITIONAL_FALSE="CONDITIONAL_FALSE",e.CONDITIONAL_DEFAULT="CONDITIONAL_DEFAULT",e.LOOP_ITEM="LOOP_ITEM",e.LOOP_DONE="LOOP_DONE",e.PARALLEL_BRANCH="PARALLEL_BRANCH",e.ERROR="ERROR"}(Tt||(Tt={})),function(e){e.SELECT="SELECT",e.PAN="PAN",e.CONNECT="CONNECT",e.ADD_NODE="ADD_NODE"}(Yt||(Yt={}));const Ct={[xt.START]:"#22c55e",[xt.END]:"#ef4444",[xt.HTTP_START]:"#059669",[xt.HTTP_END]:"#dc2626",[xt.CHAT_START]:"#0ea5e9",[xt.CHAT_OUTPUT]:"#06b6d4",[xt.SOCIAL_POST]:"#7c3aed",[xt.FUNCTION]:"#3b82f6",[xt.HTTP]:"#8b5cf6",[xt.CONDITION]:"#f59e0b",[xt.SWITCH]:"#eab308",[xt.DELAY]:"#6b7280",[xt.PARALLEL]:"#06b6d4",[xt.MERGE]:"#0891b2",[xt.LOOP]:"#ec4899",[xt.BREAK]:"#991b1b",[xt.WAIT]:"#a78bfa",[xt.TRY_CATCH]:"#f43f5e",[xt.TRANSFORM]:"#14b8a6",[xt.SUB_WORKFLOW]:"#6366f1",[xt.EMAIL]:"#f97316",[xt.EMAIL_READER]:"#06b6d4",[xt.SENDGRID]:"#1A82E2",[xt.NOTIFICATION]:"#84cc16",[xt.DATABASE]:"#a855f7",[xt.VARIABLE]:"#64748b",[xt.CHATBOT]:"#0ea5e9",[xt.DEBUG]:"#f97316",[xt.LLM]:"#22d3ee",[xt.OCR]:"#0d9488",[xt.INFORMATION_EXTRACTOR]:"#8B5CF6",[xt.WEB_SEARCH]:"#3b82f6",[xt.WEB_CRAWL]:"#6366f1",[xt.DOCUMENT_GENERATOR]:"#0284c7",[xt.FILE_STORAGE]:"#f59e0b",[xt.GOOGLE_CLOUD_STORAGE]:"#4285f4",[xt.S3]:"#FF9900",[xt.EMBEDDING]:"#8b5cf6",[xt.DOCUMENT_LOADER]:"#ec4899",[xt.TEXT_SPLITTER]:"#14b8a6",[xt.VECTOR_WRITE]:"#10b981",[xt.VECTOR_SEARCH]:"#06b6d4",[xt.CONTEXT_BUILDER]:"#a855f7",[xt.SUMMARIZATION]:"#8B5CF6",[xt.GUARDRAIL]:"#ef4444",[xt.SLACK_SEND_MESSAGE]:"#4A154B",[xt.SLACK_GET_CHANNEL_INFO]:"#4A154B",[xt.SLACK_LIST_CHANNELS]:"#4A154B",[xt.SLACK_ADD_REACTION]:"#4A154B",[xt.SLACK_UPLOAD_FILE]:"#4A154B",[xt.RERANKER]:"#d946ef",[xt.SHOPIFY]:"#96bf48",[xt.TELEGRAM_SEND]:"#0088cc",[xt.TWILIO_SMS]:"#F22F46",[xt.TWILIO_VOICE]:"#F22F46",[xt.TELEGRAM_BOT]:"#0088cc",[xt.SLACK_SOCKET]:"#4A154B",[xt.DISCORD_BOT]:"#5865F2",[xt.WHATSAPP_WEBHOOK]:"#25D366",[xt.CUSTOM_WEBSOCKET]:"#6366f1",[xt.GOOGLE_CALENDAR]:"#4285F4",[xt.RABBITMQ_TRIGGER]:"#FF6600",[xt.KAFKA]:"#231F20",[xt.KAFKA_TRIGGER]:"#231F20",[xt.ZENDESK]:"#03363d",[xt.GITLAB]:"#FC6D26",[xt.MCP]:"#7c3aed",[xt.HUBSPOT]:"#FF7A59",[xt.JIRA]:"#0052CC",[xt.ELASTICSEARCH]:"#00bfb3",[xt.CALENDLY_TRIGGER]:"#006BFF",[xt.UI_TABLE]:"#0891b2",[xt.NOTE]:"#fef08a",[xt.FRAME]:"#6366f1",[xt.CRON]:"#d97706",[wt.AGENT]:"#10b981",[wt.TOOL]:"#0ea5e9",[wt.MEMORY]:"#d946ef",[wt.CONTEXT_MEMORY]:"#c026d3",[wt.PROMPT]:"#f472b6",[wt.LLM]:"#22d3ee",[wt.RETRIEVER]:"#a78bfa",[wt.CHAIN]:"#fbbf24",[wt.ROUTER]:"#fb923c",[wt.HUMAN_INPUT]:"#4ade80",[wt.OUTPUT_PARSER]:"#2dd4bf",[wt.STRUCTURED_OUTPUT]:"#f59e0b",[kt.TABLE]:"#64748b",[kt.VIEW]:"#a855f7",[kt.INDEX]:"#f59e0b",[kt.RELATIONSHIP]:"#ec4899",[kt.CONSTRAINT]:"#ef4444",[kt.QUERY]:"#06b6d4",[$t.STICKY_NOTE]:"#fef08a",[$t.SHAPE_RECTANGLE]:"#3b82f6",[$t.SHAPE_CIRCLE]:"#8b5cf6",[$t.SHAPE_DIAMOND]:"#f59e0b",[$t.SHAPE_TRIANGLE]:"#22c55e",[$t.SHAPE_ARROW]:"#6b7280",[$t.SHAPE_LINE]:"#6b7280",[$t.SHAPE_STAR]:"#f97316",[$t.SHAPE_HEXAGON]:"#ec4899",[$t.TEXT_BLOCK]:"#111827",[$t.IMAGE]:"#06b6d4",[$t.DRAWING]:"#14b8a6",[$t.FRAME]:"#6366f1",[$t.VOTING]:"#ef4444",[$t.MERMAID]:"#8b5cf6",[$t.ANCHOR]:"#f59e0b",[$t.WORKFLOW]:"#6366f1",[$t.DATABASE]:"#64748b"},Dt={[xt.START]:"play",[xt.END]:"stop",[xt.HTTP_START]:"download",[xt.HTTP_END]:"upload",[xt.CHAT_START]:"message-circle",[xt.CHAT_OUTPUT]:"message-square",[xt.SOCIAL_POST]:"send",[xt.FUNCTION]:"code",[xt.HTTP]:"globe",[xt.CONDITION]:"git-branch",[xt.SWITCH]:"git-fork",[xt.DELAY]:"clock",[xt.PARALLEL]:"git-merge",[xt.MERGE]:"merge",[xt.LOOP]:"repeat",[xt.BREAK]:"circle-stop",[xt.WAIT]:"hourglass",[xt.TRY_CATCH]:"shield-alert",[xt.TRANSFORM]:"shuffle",[xt.SUB_WORKFLOW]:"layers",[xt.EMAIL]:"mail",[xt.EMAIL_READER]:"mail-open",[xt.SENDGRID]:"send",[xt.NOTIFICATION]:"bell",[xt.DATABASE]:"database",[xt.VARIABLE]:"box",[xt.CHATBOT]:"message-circle",[xt.DEBUG]:"bug",[xt.LLM]:"brain",[xt.OCR]:"scan",[xt.INFORMATION_EXTRACTOR]:"search",[xt.WEB_SEARCH]:"search",[xt.WEB_CRAWL]:"globe",[xt.DOCUMENT_GENERATOR]:"file-text",[xt.FILE_STORAGE]:"hard-drive",[xt.GOOGLE_CLOUD_STORAGE]:"cloud",[xt.S3]:"cloud",[xt.EMBEDDING]:"hash",[xt.DOCUMENT_LOADER]:"file-text",[xt.TEXT_SPLITTER]:"scissors",[xt.VECTOR_WRITE]:"database",[xt.VECTOR_SEARCH]:"search",[xt.CONTEXT_BUILDER]:"layers",[xt.SUMMARIZATION]:"file-minus",[xt.GUARDRAIL]:"shield",[xt.SLACK_SEND_MESSAGE]:"message-square",[xt.SLACK_GET_CHANNEL_INFO]:"hash",[xt.SLACK_LIST_CHANNELS]:"list",[xt.SLACK_ADD_REACTION]:"smile-plus",[xt.SLACK_UPLOAD_FILE]:"upload",[xt.RERANKER]:"arrow-up-down",[xt.SHOPIFY]:"shopping-cart",[xt.TELEGRAM_SEND]:"send",[xt.TWILIO_SMS]:"message-square",[xt.TWILIO_VOICE]:"phone",[xt.TELEGRAM_BOT]:"send",[xt.SLACK_SOCKET]:"message-square",[xt.DISCORD_BOT]:"gamepad-2",[xt.WHATSAPP_WEBHOOK]:"phone",[xt.CUSTOM_WEBSOCKET]:"radio",[xt.GOOGLE_CALENDAR]:"calendar",[xt.RABBITMQ_TRIGGER]:"inbox",[xt.KAFKA]:"message-square-share",[xt.KAFKA_TRIGGER]:"radio",[xt.ZENDESK]:"ticket",[xt.GITLAB]:"git-merge",[xt.MCP]:"plug",[xt.HUBSPOT]:"users",[xt.JIRA]:"ticket",[xt.ELASTICSEARCH]:"search",[xt.CALENDLY_TRIGGER]:"calendar",[xt.UI_TABLE]:"table",[xt.NOTE]:"sticky-note",[xt.FRAME]:"square",[xt.CRON]:"timer",[wt.AGENT]:"cpu",[wt.TOOL]:"tool",[wt.MEMORY]:"hard-drive",[wt.CONTEXT_MEMORY]:"brain",[wt.PROMPT]:"message-square",[wt.LLM]:"brain",[wt.RETRIEVER]:"search",[wt.CHAIN]:"link",[wt.ROUTER]:"git-pull-request",[wt.HUMAN_INPUT]:"user",[wt.OUTPUT_PARSER]:"file-text",[wt.STRUCTURED_OUTPUT]:"braces",[kt.TABLE]:"table",[kt.VIEW]:"eye",[kt.INDEX]:"list",[kt.RELATIONSHIP]:"git-merge",[kt.CONSTRAINT]:"shield",[kt.QUERY]:"terminal",[$t.STICKY_NOTE]:"sticky-note",[$t.SHAPE_RECTANGLE]:"square",[$t.SHAPE_CIRCLE]:"circle",[$t.SHAPE_DIAMOND]:"diamond",[$t.SHAPE_TRIANGLE]:"triangle",[$t.SHAPE_ARROW]:"arrow-right",[$t.SHAPE_LINE]:"minus",[$t.SHAPE_STAR]:"star",[$t.SHAPE_HEXAGON]:"hexagon",[$t.TEXT_BLOCK]:"type",[$t.IMAGE]:"image",[$t.DRAWING]:"pen-tool",[$t.FRAME]:"frame",[$t.VOTING]:"thumbs-up",[$t.MERMAID]:"git-branch",[$t.ANCHOR]:"anchor",[$t.WORKFLOW]:"layers",[$t.DATABASE]:"table"},zt=[{type:xt.START,name:"Start",description:"Entry point of the workflow",icon:Dt[xt.START],color:Ct[xt.START],category:"control",defaultConfig:{},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.END,name:"End",description:"Exit point of the workflow",icon:Dt[xt.END],color:Ct[xt.END],category:"control",defaultConfig:{},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[]}},{type:xt.HTTP_START,name:"HTTP Trigger",description:"Start workflow from HTTP request",icon:Dt[xt.HTTP_START],color:Ct[xt.HTTP_START],category:"trigger",defaultConfig:{httpPath:"/webhook",httpMethod:"POST",httpAuth:"none",httpCors:!0,httpRateLimit:100,httpRequestSchema:{}},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Request"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.HTTP_END,name:"HTTP Response",description:"Return HTTP response to caller",icon:Dt[xt.HTTP_END],color:Ct[xt.HTTP_END],category:"control",defaultConfig:{httpStatusCode:200,httpResponseHeaders:{"Content-Type":"application/json"},httpResponseBody:"{{data}}",httpContentType:"application/json"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[]}},{type:xt.CHAT_START,name:"Chat Trigger",description:"Start workflow from chatbot message",icon:Dt[xt.CHAT_START],color:Ct[xt.CHAT_START],category:"trigger",defaultConfig:{outputVariable:"chatInput",enableFileUpload:!1,maxFileSize:10,maxFiles:5,allowImages:!0,allowDocuments:!1,allowText:!1,allowAudio:!1,allowVideo:!1},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Message"},{id:"files",type:Tt.OUTPUT,label:"Files"}]}},{type:xt.CHAT_OUTPUT,name:"Chat Output",description:"Send message to chatbot during execution",icon:Dt[xt.CHAT_OUTPUT],color:Ct[xt.CHAT_OUTPUT],category:"action",defaultConfig:{message:"${variables.response}",messageType:"text",typing:!1,typingDelay:1e3},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.SOCIAL_POST,name:"Social Post",description:"Post to social feed on behalf of an agent",icon:Dt[xt.SOCIAL_POST],color:Ct[xt.SOCIAL_POST],category:"action",defaultConfig:{agentId:"",content:"${variables.response}",mediaUrl:"",mediaType:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.LLM,name:"LLM",description:"Call AI language model (OpenAI, Anthropic, etc.)",icon:Dt[xt.LLM],color:Ct[xt.LLM],category:"action",defaultConfig:{provider:"openai",model:"gpt-4",temperature:.7,maxTokens:2048,systemPrompt:"",userPrompt:"${variables.message}"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"},{id:"context_memory",type:Tt.INPUT,label:"Context Memory"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.OCR,name:"OCR",description:"Extract text from images using OCR",icon:Dt[xt.OCR],color:Ct[xt.OCR],category:"action",defaultConfig:{imageSource:"variable",imageField:"${input.files[0].base64}",language:"fr",detectLayout:!1,outputVariable:"ocrResult"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Image"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Text"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.INFORMATION_EXTRACTOR,name:"Information Extractor",description:"Extract structured data from unstructured text using AI",icon:Dt[xt.INFORMATION_EXTRACTOR],color:Ct[xt.INFORMATION_EXTRACTOR],category:"action",defaultConfig:{inputField:"text",schema:[{name:"field1",type:"string",description:"",required:!0}],model:"gpt-4o-mini",provider:"openai",instructions:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Extracted"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.FUNCTION,name:"Function",description:"Invoke a Nuraly function",icon:Dt[xt.FUNCTION],color:Ct[xt.FUNCTION],category:"action",defaultConfig:{functionId:"",inputMapping:{},outputMapping:{}},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.HTTP,name:"HTTP Request",description:"Make an HTTP request",icon:Dt[xt.HTTP],color:Ct[xt.HTTP],category:"action",defaultConfig:{method:"GET",url:"",headers:{},timeout:3e4},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Success"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.CONDITION,name:"Condition",description:"Branch based on a condition",icon:Dt[xt.CONDITION],color:Ct[xt.CONDITION],category:"control",defaultConfig:{expression:"",language:"javascript"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"true",type:Tt.CONDITIONAL_TRUE,label:"True"},{id:"false",type:Tt.CONDITIONAL_FALSE,label:"False"}]}},{type:xt.DELAY,name:"Delay",description:"Wait for a specified duration",icon:Dt[xt.DELAY],color:Ct[xt.DELAY],category:"control",defaultConfig:{duration:1e3,unit:"milliseconds"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.PARALLEL,name:"Parallel",description:"Execute branches in parallel",icon:Dt[xt.PARALLEL],color:Ct[xt.PARALLEL],category:"control",defaultConfig:{},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"branch1",type:Tt.PARALLEL_BRANCH,label:"Branch 1"},{id:"branch2",type:Tt.PARALLEL_BRANCH,label:"Branch 2"}]}},{type:xt.LOOP,name:"Loop",description:"Iterate over an array",icon:Dt[xt.LOOP],color:Ct[xt.LOOP],category:"control",defaultConfig:{iteratorVariable:"item",arrayExpression:"",maxIterations:100},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"item",type:Tt.LOOP_ITEM,label:"Each Item"},{id:"done",type:Tt.LOOP_DONE,label:"Done"}]}},{type:xt.SWITCH,name:"Switch",description:"Route to a branch based on a value",icon:Dt[xt.SWITCH],color:Ct[xt.SWITCH],category:"control",defaultConfig:{expression:"",language:"javascript",cases:[{value:"case1",label:"Case 1"},{value:"case2",label:"Case 2"}],includeDefault:!0},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"case1",type:Tt.OUTPUT,label:"Case 1"},{id:"case2",type:Tt.OUTPUT,label:"Case 2"},{id:"default",type:Tt.CONDITIONAL_DEFAULT,label:"Default"}]}},{type:xt.MERGE,name:"Merge",description:"Join multiple branches into one",icon:Dt[xt.MERGE],color:Ct[xt.MERGE],category:"control",defaultConfig:{mode:"waitAll"},defaultPorts:{inputs:[{id:"in1",type:Tt.INPUT,label:"Input 1",multiple:!0},{id:"in2",type:Tt.INPUT,label:"Input 2",multiple:!0}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.WAIT,name:"Wait",description:"Pause until a signal or event is received",icon:Dt[xt.WAIT],color:Ct[xt.WAIT],category:"control",defaultConfig:{signalName:"",timeout:3e5},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Signal"},{id:"timeout",type:Tt.OUTPUT,label:"Timeout"}]}},{type:xt.TRY_CATCH,name:"Try / Catch",description:"Catch errors from the connected branch",icon:Dt[xt.TRY_CATCH],color:Ct[xt.TRY_CATCH],category:"control",defaultConfig:{catchTypes:["*"],errorVariable:"error"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"try",type:Tt.OUTPUT,label:"Try"},{id:"catch",type:Tt.ERROR,label:"Catch"}]}},{type:xt.BREAK,name:"Break",description:"Exit the enclosing loop",icon:Dt[xt.BREAK],color:Ct[xt.BREAK],category:"control",defaultConfig:{},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[]}},{type:xt.TRANSFORM,name:"Transform",description:"Transform data using expressions",icon:Dt[xt.TRANSFORM],color:Ct[xt.TRANSFORM],category:"data",defaultConfig:{transformExpression:"",language:"jsonata"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.SUB_WORKFLOW,name:"Sub-Workflow",description:"Invoke another workflow",icon:Dt[xt.SUB_WORKFLOW],color:Ct[xt.SUB_WORKFLOW],category:"action",defaultConfig:{workflowId:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.EMAIL,name:"Email",description:"Send an email",icon:Dt[xt.EMAIL],color:Ct[xt.EMAIL],category:"action",defaultConfig:{to:"",cc:"",bcc:"",subject:"",body:"",bodyType:"text",fromName:"",replyTo:"",priority:"normal"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.EMAIL_READER,name:"Email Reader",description:"Read and manage emails from Gmail, Outlook, Yahoo, or IMAP",icon:Dt[xt.EMAIL_READER],color:Ct[xt.EMAIL_READER],category:"action",defaultConfig:{provider:"imap",operation:"LIST",folder:"INBOX",limit:10,includeAttachments:!1,markAsReadOnFetch:!1,searchQuery:"",host:"",port:993,tls:!0,credentialPath:"",sinceDate:"",beforeDate:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.SENDGRID,name:"SendGrid",description:"Send email via SendGrid API",icon:Dt[xt.SENDGRID],color:Ct[xt.SENDGRID],category:"action",defaultConfig:{to:"",cc:"",bcc:"",fromEmail:"",fromName:"",replyTo:"",subject:"",body:"",contentType:"text/html",templateId:"",dynamicTemplateData:"",categories:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"},{id:"error",type:Tt.OUTPUT,label:"Error"}]}},{type:xt.NOTIFICATION,name:"Notification",description:"Send a notification",icon:Dt[xt.NOTIFICATION],color:Ct[xt.NOTIFICATION],category:"action",defaultConfig:{channel:"",message:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.DATABASE,name:"Data",description:"Read and write data to databases",icon:Dt[xt.DATABASE],color:"#6366F1",category:"data",defaultConfig:{operation:pt.QUERY,dataSource:null,entity:null,filter:null,fields:{},select:[],orderBy:[],limit:null,offset:null,outputVariable:"results"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.VARIABLE,name:"Variable",description:"Set or get a workflow variable",icon:Dt[xt.VARIABLE],color:Ct[xt.VARIABLE],category:"data",defaultConfig:{variableOperation:"set",variableName:"",value:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.CHATBOT,name:"Chatbot Trigger",description:"Trigger workflow from chatbot interactions",icon:Dt[xt.CHATBOT],color:Ct[xt.CHATBOT],category:"trigger",defaultConfig:{triggerEvents:["MESSAGE_SENT"],chatbotSize:"medium",chatbotVariant:"floating",title:"Chat Assistant",subtitle:"Ask me anything",placeholder:"Type a message...",initialMessage:"",enableTypingIndicator:!0,enableSuggestions:!1,suggestions:[],loadingType:"dots",enableFileUpload:!1,maxFileSize:10,maxFiles:5,allowImages:!0,allowDocuments:!1,allowText:!1,allowAudio:!1,allowVideo:!1},defaultPorts:{inputs:[],outputs:[{id:"message",type:Tt.OUTPUT,label:"Message"},{id:"files",type:Tt.OUTPUT,label:"Files"},{id:"session",type:Tt.OUTPUT,label:"Session Start"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.DEBUG,name:"Debug",description:"Display input, output, and variables for debugging",icon:Dt[xt.DEBUG],color:Ct[xt.DEBUG],category:"data",defaultConfig:{},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.UI_TABLE,name:"Table",description:"Display data as an interactive table",icon:Dt[xt.UI_TABLE],color:Ct[xt.UI_TABLE],category:"display",defaultConfig:{tableColumns:[],dataExpression:"",tablePageSize:10,tableEnableFilter:!1,tableEnableSort:!0,tableFixedHeader:!1,tableSize:"normal",tableEmptyText:"No data available"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Data"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.WEB_SEARCH,name:"Web Search",description:"Search the web using Google, Bing, Brave, or DuckDuckGo",icon:Dt[xt.WEB_SEARCH],color:Ct[xt.WEB_SEARCH],category:"web",defaultConfig:{provider:"google",queryField:"query",numResults:10,safeSearch:!0,timeout:3e4},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Results"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.WEB_CRAWL,name:"Web Crawl",description:"Crawl web pages and extract text content",icon:Dt[xt.WEB_CRAWL],color:Ct[xt.WEB_CRAWL],category:"web",defaultConfig:{urlField:"url",maxDepth:1,maxPages:10,sameDomainOnly:!0,renderJs:!1},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Pages"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.DOCUMENT_GENERATOR,name:"Document Generator",description:"Generate Word documents from templates with dynamic data",icon:Dt[xt.DOCUMENT_GENERATOR],color:Ct[xt.DOCUMENT_GENERATOR],category:"documents",defaultConfig:{templateId:"",data:{},outputVariable:"documentResult"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Result"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.FILE_STORAGE,name:"File Storage",description:"Store files to S3, MinIO, or local filesystem",icon:Dt[xt.FILE_STORAGE],color:Ct[xt.FILE_STORAGE],category:"storage",defaultConfig:{provider:"local",bucket:"default",path:"",fileField:"file",filenameField:"filename"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Result"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.GOOGLE_CLOUD_STORAGE,name:"Google Cloud Storage",description:"Manage objects in Google Cloud Storage buckets",icon:Dt[xt.GOOGLE_CLOUD_STORAGE],color:Ct[xt.GOOGLE_CLOUD_STORAGE],category:"storage",defaultConfig:{operation:"LIST",bucketName:"",objectPath:"",serviceAccountPath:"",signedUrlExpiration:3600},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Result"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.S3,name:"AWS S3",description:"Upload, download, and manage files in Amazon S3",icon:Dt[xt.S3],color:Ct[xt.S3],category:"integrations",defaultConfig:{s3Operation:"upload",s3Bucket:"",s3Key:"",s3Region:"us-east-1",s3ContentType:"auto"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Result"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.EMBEDDING,name:"Embedding",description:"Convert text to vector embeddings",icon:Dt[xt.EMBEDDING],color:Ct[xt.EMBEDDING],category:"rag",defaultConfig:{provider:"openai",model:"text-embedding-3-small",inputField:"text",batchSize:100},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Text"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Embedding"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.DOCUMENT_LOADER,name:"Document Loader",description:"Load and parse documents (PDF, Word, HTML, etc.)",icon:Dt[xt.DOCUMENT_LOADER],color:Ct[xt.DOCUMENT_LOADER],category:"rag",defaultConfig:{sourceType:"text",contentField:"content",filenameField:"filename",defaultType:"txt",timeout:3e4},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Document"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Content"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.TEXT_SPLITTER,name:"Text Splitter",description:"Split text into chunks for embedding",icon:Dt[xt.TEXT_SPLITTER],color:Ct[xt.TEXT_SPLITTER],category:"rag",defaultConfig:{strategy:"recursive",chunkSize:1e3,chunkOverlap:200,contentField:"content"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Text"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Chunks"}]}},{type:xt.VECTOR_WRITE,name:"Vector Write",description:"Store embeddings in vector database",icon:Dt[xt.VECTOR_WRITE],color:Ct[xt.VECTOR_WRITE],category:"rag",defaultConfig:{collectionName:"",upsertMode:"replace"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Embeddings"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Result"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.VECTOR_SEARCH,name:"Vector Search",description:"Search for similar documents in vector store",icon:Dt[xt.VECTOR_SEARCH],color:Ct[xt.VECTOR_SEARCH],category:"rag",defaultConfig:{collectionName:"",topK:5,minScore:.7,includeContent:!0,includeMetadata:!0,provider:"openai",model:"text-embedding-3-small"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Query"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Results"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.CONTEXT_BUILDER,name:"Context Builder",description:"Format retrieved documents into LLM-ready context",icon:Dt[xt.CONTEXT_BUILDER],color:Ct[xt.CONTEXT_BUILDER],category:"rag",defaultConfig:{template:"default",maxTokens:4e3,maxDocuments:10,includeSourceInfo:!0,includeSimilarityScore:!1,separator:"\n\n---\n\n"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Results"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Context"}]}},{type:xt.RERANKER,name:"Reranker",description:"Re-rank search results by relevance",icon:Dt[xt.RERANKER],color:Ct[xt.RERANKER],category:"rag",defaultConfig:{model:"cross-encoder",topK:5,threshold:.5},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Results"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Reranked"}]}},{type:xt.SUMMARIZATION,name:"Summarize Document",description:"Summarize long text using AI with chunking strategies",icon:Dt[xt.SUMMARIZATION],color:Ct[xt.SUMMARIZATION],category:"action",defaultConfig:{inputField:"text",outputField:"summary",strategy:"map_reduce",chunkSize:4e3,chunkOverlap:200,model:"gpt-4o-mini"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Summary"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.GUARDRAIL,name:"Guardrail",description:"Validate and filter LLM inputs/outputs for safety",icon:Dt[xt.GUARDRAIL],color:Ct[xt.GUARDRAIL],category:"safety",defaultConfig:{mode:"input",contentField:"content",onFail:"block",checks:[]},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Passed"},{id:"blocked",type:Tt.ERROR,label:"Blocked"}]}},{type:xt.SLACK_SEND_MESSAGE,name:"Slack: Send Message",description:"Send a message to a Slack channel or user",icon:Dt[xt.SLACK_SEND_MESSAGE],color:Ct[xt.SLACK_SEND_MESSAGE],category:"slack",defaultConfig:{slackMethod:"api",botToken:"",channel:"",text:"",unfurlLinks:!0,unfurlMedia:!0},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.SLACK_GET_CHANNEL_INFO,name:"Slack: Channel Info",description:"Get information about a Slack channel",icon:Dt[xt.SLACK_GET_CHANNEL_INFO],color:Ct[xt.SLACK_GET_CHANNEL_INFO],category:"slack",defaultConfig:{botToken:"",channel:"",includeLocale:!1,includeNumMembers:!1},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Info"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.SLACK_LIST_CHANNELS,name:"Slack: List Channels",description:"List available Slack channels in the workspace",icon:Dt[xt.SLACK_LIST_CHANNELS],color:Ct[xt.SLACK_LIST_CHANNELS],category:"slack",defaultConfig:{botToken:"",types:"public_channel",excludeArchived:!0,limit:100},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Channels"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.SLACK_ADD_REACTION,name:"Slack: Add Reaction",description:"Add a reaction emoji to a Slack message",icon:Dt[xt.SLACK_ADD_REACTION],color:Ct[xt.SLACK_ADD_REACTION],category:"slack",defaultConfig:{botToken:"",channel:"",timestamp:"",name:"thumbsup"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.SLACK_UPLOAD_FILE,name:"Slack: Upload File",description:"Upload a file to a Slack channel",icon:Dt[xt.SLACK_UPLOAD_FILE],color:Ct[xt.SLACK_UPLOAD_FILE],category:"slack",defaultConfig:{botToken:"",channels:"",filename:"",content:"",title:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.GOOGLE_CALENDAR,name:"Google Calendar",description:"Create, read, update, and delete Google Calendar events",icon:Dt[xt.GOOGLE_CALENDAR],color:Ct[xt.GOOGLE_CALENDAR],category:"google-calendar",defaultConfig:{googleCalendarCredential:"",googleCalendarId:"primary",googleCalendarOperation:"getAll",googleCalendarEventSummary:"",googleCalendarEventDescription:"",googleCalendarEventStart:"",googleCalendarEventEnd:"",googleCalendarEventAttendees:"",googleCalendarEventLocation:"",googleCalendarTimeMin:"",googleCalendarTimeMax:"",googleCalendarRecurrence:"",googleCalendarConferenceData:!1},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.SHOPIFY,name:"Shopify",description:"Manage Shopify products, orders, customers, inventory, and fulfillments via the Admin API",icon:Dt[xt.SHOPIFY],color:Ct[xt.SHOPIFY],category:"shopify",defaultConfig:{resource:"ORDER",operation:pt.LIST,resourceId:"",filters:"",shopDomain:"",accessToken:""},defaultPorts:{inputs:[{id:"input",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.GITLAB,name:"GitLab",description:"Manage GitLab repositories, issues, merge requests, pipelines, and releases",icon:Dt[xt.GITLAB],color:Ct[xt.GITLAB],category:"developer",defaultConfig:{gitlabBaseUrl:"https://gitlab.com",gitlabAccessToken:"",gitlabResource:"issue",gitlabOperation:"getAll",gitlabProjectId:"",gitlabTitle:"",gitlabDescription:"",gitlabLabels:[],gitlabAssigneeIds:[],gitlabSourceBranch:"",gitlabTargetBranch:"",gitlabRef:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.TELEGRAM_SEND,name:"Telegram: Send Message",description:"Send a message to a Telegram chat with typing indicator and optional emoji reaction",icon:Dt[xt.TELEGRAM_SEND],color:Ct[xt.TELEGRAM_SEND],category:"telegram",defaultConfig:{botToken:"",chatId:"",text:"",parseMode:"",replyToMessageId:"",showTyping:!0,reaction:"",disableNotification:!1},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.ZENDESK,name:"Zendesk",description:"Manage Zendesk tickets, users, organizations, and satisfaction ratings",icon:Dt[xt.ZENDESK],color:Ct[xt.ZENDESK],category:"zendesk",defaultConfig:{zendeskResource:"TICKET",zendeskOperation:"LIST",zendeskSubdomain:"",zendeskApiToken:"",zendeskEmail:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.TWILIO_SMS,name:"Twilio: Send SMS",description:"Send an SMS or WhatsApp message via the Twilio API",icon:Dt[xt.TWILIO_SMS],color:Ct[xt.TWILIO_SMS],category:"twilio",defaultConfig:{twilioAccountSid:"",twilioAuthToken:"",twilioFromNumber:"",twilioToNumber:"",twilioMessageBody:"",twilioOperation:"send_sms",twilioStatusCallback:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.TWILIO_VOICE,name:"Twilio: Voice Call",description:"Make a voice call via the Twilio API",icon:Dt[xt.TWILIO_VOICE],color:Ct[xt.TWILIO_VOICE],category:"twilio",defaultConfig:{twilioAccountSid:"",twilioAuthToken:"",twilioFromNumber:"",twilioToNumber:"",twilioOperation:"make_call",twilioVoiceUrl:"",twilioStatusCallback:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.TELEGRAM_BOT,name:"Telegram Bot",description:"Receive messages from a Telegram bot via polling or webhook",icon:Dt[xt.TELEGRAM_BOT],color:Ct[xt.TELEGRAM_BOT],category:"trigger",defaultConfig:{botToken:"",mode:"polling",pollingTimeout:30,allowedUpdates:[],allowedChatIds:"",allowedUserIds:""},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Message"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.SLACK_SOCKET,name:"Slack Socket",description:"Receive events via Slack Socket Mode (WebSocket)",icon:Dt[xt.SLACK_SOCKET],color:Ct[xt.SLACK_SOCKET],category:"trigger",defaultConfig:{appTokenPath:"",botTokenPath:"",eventTypes:[],interactionTypes:[],slashCommands:"",allowedTeamIds:"",allowedChannelIds:"",allowedUserIds:"",ignoreBots:!0},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Event"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.DISCORD_BOT,name:"Discord Bot",description:"Receive events from a Discord bot (Gateway WebSocket)",icon:Dt[xt.DISCORD_BOT],color:Ct[xt.DISCORD_BOT],category:"trigger",defaultConfig:{botTokenPath:"",intents:["GUILDS","GUILD_MESSAGES","MESSAGE_CONTENT"],eventTypes:[],allowedGuildIds:"",allowedChannelIds:"",allowedUserIds:"",ignoreBots:!0},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Event"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.WHATSAPP_WEBHOOK,name:"WhatsApp",description:"Receive messages via WhatsApp Business API",icon:Dt[xt.WHATSAPP_WEBHOOK],color:Ct[xt.WHATSAPP_WEBHOOK],category:"trigger",defaultConfig:{phoneNumberId:"",businessAccountId:"",accessTokenPath:"",appSecretPath:"",verifyToken:"",webhookFields:["messages"],messageTypes:[],allowedSenders:"",ignoreStatusUpdates:!1},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Message"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.CUSTOM_WEBSOCKET,name:"WebSocket Listener",description:"Listen for messages on a custom WebSocket endpoint",icon:Dt[xt.CUSTOM_WEBSOCKET],color:Ct[xt.CUSTOM_WEBSOCKET],category:"trigger",defaultConfig:{url:"",subprotocol:"",authMode:"none",tokenPath:"",username:"",passwordPath:"",headerName:"",headerValuePath:"",queryParamName:"token",queryParamValuePath:"",initialMessage:"",autoReconnect:!0,reconnectDelayMs:5e3,maxReconnectAttempts:0,pingIntervalSec:30,messageFormat:"json",filterExpression:""},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Message"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.RABBITMQ_TRIGGER,name:"RabbitMQ Trigger",description:"Triggers workflow on new messages from a RabbitMQ queue",icon:Dt[xt.RABBITMQ_TRIGGER],color:Ct[xt.RABBITMQ_TRIGGER],category:"trigger",defaultConfig:{connectionUrl:"",queueName:"",exchange:"",routingKey:"#",autoAck:!1,contentType:"application/json",prefetchCount:1},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Message"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.KAFKA,name:"Kafka: Send Message",description:"Produce a message to a Kafka topic",icon:Dt[xt.KAFKA],color:Ct[xt.KAFKA],category:"messaging",defaultConfig:{kafkaBrokers:"localhost:9092",kafkaAcks:"all",kafkaCompressionType:"none"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.KAFKA_TRIGGER,name:"Kafka Trigger",description:"Triggers workflow on new messages from a Kafka topic",icon:Dt[xt.KAFKA_TRIGGER],color:Ct[xt.KAFKA_TRIGGER],category:"messaging",defaultConfig:{kafkaBrokers:"localhost:9092",kafkaConsumerGroup:"nuraly-workflow",kafkaFromBeginning:!1,kafkaSessionTimeout:3e4},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Message"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.CRON,name:"Cron Trigger",description:"Triggers workflow on a scheduled cron expression",icon:Dt[xt.CRON],color:Ct[xt.CRON],category:"trigger",defaultConfig:{cronExpression:"0 * * * *",timezone:"UTC"},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Tick"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.MCP,name:"MCP Server",description:"Connect to MCP server - provides tools to Agent/LLM nodes",icon:Dt[xt.MCP],color:Ct[xt.MCP],category:"trigger",defaultConfig:{serverUrl:"",transportType:"streamable_http"},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Event"}]}},{type:xt.HUBSPOT,name:"HubSpot",description:"Manage contacts, deals, companies, and tickets via HubSpot CRM",icon:Dt[xt.HUBSPOT],color:Ct[xt.HUBSPOT],category:"crm",defaultConfig:{hubspotAccessToken:"",hubspotResource:"contact",hubspotOperation:"getAll",hubspotProperties:{},hubspotFilterGroups:[],hubspotLimit:100,hubspotAssociations:[]},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Result"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.JIRA,name:"Jira",description:"Create, update, and manage Jira issues",icon:Dt[xt.JIRA],color:Ct[xt.JIRA],category:"jira",defaultConfig:{operation:"createIssue",jiraInstanceUrl:"",projectKey:"",issueType:"Task",summary:"",description:"",assignee:"",priority:"Medium",labels:"",jqlQuery:"",transitionId:"",issueKey:"",comment:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Result"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.ELASTICSEARCH,name:"Elasticsearch",description:"Search, index, and manage documents in Elasticsearch",icon:Dt[xt.ELASTICSEARCH],color:Ct[xt.ELASTICSEARCH],category:"integration",defaultConfig:{elasticsearchUrl:"",elasticsearchCredentialPath:"",elasticsearchOperation:"search",elasticsearchIndex:"",elasticsearchDocumentId:"",elasticsearchQueryBody:"",elasticsearchSize:10,elasticsearchFrom:0,elasticsearchRefresh:"false",elasticsearchTimeout:"30s",elasticsearchRouting:"",outputVariable:"elasticsearchResult"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Result"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.CALENDLY_TRIGGER,name:"Calendly Trigger",description:"Triggers workflow when a Calendly event is booked or cancelled",icon:Dt[xt.CALENDLY_TRIGGER],color:Ct[xt.CALENDLY_TRIGGER],category:"trigger",defaultConfig:{events:["invitee.created"],scope:"user",outputVariable:"calendlyEvent"},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Event"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.NOTE,name:"Note",description:"Add annotations and comments to your workflow",icon:Dt[xt.NOTE],color:Ct[xt.NOTE],category:"annotation",defaultConfig:{noteContent:"Add your note here...",noteBackgroundColor:"#fef08a",noteTextColor:"#713f12",noteFontSize:"medium",noteShowBorder:!1},defaultPorts:{inputs:[],outputs:[]}},{type:xt.FRAME,name:"Frame",description:"Group related nodes together with a labeled container",icon:Dt[xt.FRAME],color:Ct[xt.FRAME],category:"annotation",defaultConfig:{frameLabel:"Group",frameWidth:400,frameHeight:300,frameBackgroundColor:"rgba(99, 102, 241, 0.05)",frameBorderColor:"rgba(99, 102, 241, 0.3)",frameLabelPosition:"top-left",frameLabelPlacement:"outside",frameShowLabel:!0,frameCollapsed:!1},defaultPorts:{inputs:[],outputs:[]}},{type:wt.AGENT,name:"AI Agent",description:"Autonomous AI agent that can use tools",icon:Dt[wt.AGENT],color:Ct[wt.AGENT],category:"agent",defaultConfig:{agentId:"",maxIterations:10},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"},{id:"retriever",type:Tt.INPUT,label:"Retriever"}],configs:[{id:"llm",type:Tt.CONFIG,label:"LLM"},{id:"prompt",type:Tt.CONFIG,label:"Prompt"},{id:"memory",type:Tt.CONFIG,label:"Memory"},{id:"tools",type:Tt.CONFIG,label:"Tools",multiple:!0},{id:"structured_output",type:Tt.CONFIG,label:"Structured Output"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:wt.TOOL,name:"Tool",description:"A tool that can be used by an agent",icon:Dt[wt.TOOL],color:Ct[wt.TOOL],category:"agent",defaultConfig:{toolName:"",description:"",parameters:[]},defaultPorts:{inputs:[{id:"function",type:Tt.INPUT,label:"Function"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Tool"}]}},{type:wt.MEMORY,name:"Context Memory",description:"Conversation memory for agents - stores and retrieves chat history",icon:Dt[wt.MEMORY],color:Ct[wt.MEMORY],category:"agent",defaultConfig:{cutoffMode:"message",maxMessages:50,maxTokens:4e3,conversationIdExpression:"${input.threadId}"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Memory Config"}]}},{type:wt.CONTEXT_MEMORY,name:"Context Memory (RAG)",description:"RAG-enhanced conversation memory with buffer, semantic, or hybrid modes",icon:Dt[wt.CONTEXT_MEMORY],color:Ct[wt.CONTEXT_MEMORY],category:"agent",defaultConfig:{memoryType:"hybrid",cutoffMode:"message",maxMessages:50,maxTokens:4e3,conversationIdExpression:"${input.threadId}"},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Memory Config"}]}},{type:wt.PROMPT,name:"Prompt",description:"Prompt template for LLM",icon:Dt[wt.PROMPT],color:Ct[wt.PROMPT],category:"agent",defaultConfig:{template:"",variables:[]},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Prompt"}]}},{type:wt.LLM,name:"LLM",description:"Large Language Model call",icon:Dt[wt.LLM],color:Ct[wt.LLM],category:"agent",defaultConfig:{provider:"openai",modelName:"gpt-4",temperature:.7,maxTokens:2048},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"}]}},{type:wt.RETRIEVER,name:"Retriever",description:"Retrieve relevant documents from vector store",icon:Dt[wt.RETRIEVER],color:Ct[wt.RETRIEVER],category:"agent",defaultConfig:{vectorStoreId:"",topK:5},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Query"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Documents"}]}},{type:wt.CHAIN,name:"Chain",description:"Chain multiple LLM calls together",icon:Dt[wt.CHAIN],color:Ct[wt.CHAIN],category:"agent",defaultConfig:{chainType:"sequential"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:wt.ROUTER,name:"Router",description:"Route to different chains based on input",icon:Dt[wt.ROUTER],color:Ct[wt.ROUTER],category:"agent",defaultConfig:{routingExpression:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"route1",type:Tt.OUTPUT,label:"Route 1"},{id:"route2",type:Tt.OUTPUT,label:"Route 2"},{id:"default",type:Tt.CONDITIONAL_DEFAULT,label:"Default"}]}},{type:wt.HUMAN_INPUT,name:"Human Input",description:"Wait for human input in the workflow",icon:Dt[wt.HUMAN_INPUT],color:Ct[wt.HUMAN_INPUT],category:"agent",defaultConfig:{prompt:"",timeout:864e5},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Context"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"}]}},{type:wt.OUTPUT_PARSER,name:"Output Parser",description:"Parse LLM output into structured data",icon:Dt[wt.OUTPUT_PARSER],color:Ct[wt.OUTPUT_PARSER],category:"agent",defaultConfig:{parserType:"json",schema:{}},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Raw Output"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Parsed Data"}]}},{type:wt.STRUCTURED_OUTPUT,name:"Structured Output",description:"Define a JSON schema to enforce structured LLM output",icon:Dt[wt.STRUCTURED_OUTPUT],color:Ct[wt.STRUCTURED_OUTPUT],category:"agent",defaultConfig:{schemaName:"structured_output",strict:!0,schema:{type:"object",properties:{},required:[],additionalProperties:!1}},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Schema"}]}},{type:kt.TABLE,name:"Table",description:"Define a database table with columns",icon:Dt[kt.TABLE],color:Ct[kt.TABLE],category:"db-tables-views",defaultConfig:{tableName:"",columns:[],primaryKey:""},defaultPorts:{inputs:[],outputs:[{id:"ref",type:Tt.OUTPUT,label:"Reference"}]}},{type:kt.VIEW,name:"View",description:"Create a database view based on queries",icon:Dt[kt.VIEW],color:Ct[kt.VIEW],category:"db-tables-views",defaultConfig:{viewName:"",query:"",materialized:!1},defaultPorts:{inputs:[{id:"source",type:Tt.INPUT,label:"Source Tables"}],outputs:[{id:"ref",type:Tt.OUTPUT,label:"Reference"}]}},{type:kt.INDEX,name:"Index",description:"Create an index on table columns",icon:Dt[kt.INDEX],color:Ct[kt.INDEX],category:"db-indexes-queries",defaultConfig:{indexName:"",indexColumns:[],unique:!1,indexType:"BTREE"},defaultPorts:{inputs:[{id:"table",type:Tt.INPUT,label:"Table"}],outputs:[]}},{type:kt.RELATIONSHIP,name:"Relationship",description:"Define foreign key relationships between tables",icon:Dt[kt.RELATIONSHIP],color:Ct[kt.RELATIONSHIP],category:"db-relations-constraints",defaultConfig:{relationshipType:"ONE_TO_MANY",sourceColumn:"",targetColumn:"",onDelete:"CASCADE",onUpdate:"CASCADE"},defaultPorts:{inputs:[{id:"source",type:Tt.INPUT,label:"Source Table"},{id:"target",type:Tt.INPUT,label:"Target Table"}],outputs:[]}},{type:kt.CONSTRAINT,name:"Constraint",description:"Add constraints (unique, check, foreign_key)",icon:Dt[kt.CONSTRAINT],color:Ct[kt.CONSTRAINT],category:"db-relations-constraints",defaultConfig:{constraintName:"",constraintType:"UNIQUE",constraintColumns:[],checkExpression:""},defaultPorts:{inputs:[{id:"table",type:Tt.INPUT,label:"Table"}],outputs:[]}},{type:kt.QUERY,name:"Query",description:"Define saved queries or stored procedures",icon:Dt[kt.QUERY],color:Ct[kt.QUERY],category:"db-indexes-queries",defaultConfig:{queryName:"",queryText:"",parameters:[]},defaultPorts:{inputs:[{id:"tables",type:Tt.INPUT,label:"Tables"}],outputs:[{id:"result",type:Tt.OUTPUT,label:"Result Schema"}]}},{type:$t.STICKY_NOTE,name:"Sticky Note",description:"Add a sticky note to the whiteboard",icon:Dt[$t.STICKY_NOTE],color:Ct[$t.STICKY_NOTE],category:"wb-notes-text",defaultConfig:{textContent:"",backgroundColor:"#fef08a",textColor:"#713f12",fontSize:14,width:200,height:200},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.TEXT_BLOCK,name:"Text Block",description:"Add a text block to the whiteboard",icon:Dt[$t.TEXT_BLOCK],color:Ct[$t.TEXT_BLOCK],category:"wb-notes-text",defaultConfig:{textContent:"",fontSize:16,fontWeight:"normal",textAlign:"left",width:200,height:50},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.SHAPE_RECTANGLE,name:"Rectangle",description:"Add a rectangle shape",icon:Dt[$t.SHAPE_RECTANGLE],color:Ct[$t.SHAPE_RECTANGLE],category:"wb-shapes",defaultConfig:{width:120,height:120,fillColor:"#3b82f6"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.SHAPE_CIRCLE,name:"Circle",description:"Add a circle shape",icon:Dt[$t.SHAPE_CIRCLE],color:Ct[$t.SHAPE_CIRCLE],category:"wb-shapes",defaultConfig:{width:120,height:120,fillColor:"#8b5cf6"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.SHAPE_DIAMOND,name:"Diamond",description:"Add a diamond shape",icon:Dt[$t.SHAPE_DIAMOND],color:Ct[$t.SHAPE_DIAMOND],category:"wb-shapes",defaultConfig:{width:120,height:120,fillColor:"#f59e0b"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.SHAPE_TRIANGLE,name:"Triangle",description:"Add a triangle shape",icon:Dt[$t.SHAPE_TRIANGLE],color:Ct[$t.SHAPE_TRIANGLE],category:"wb-shapes",defaultConfig:{width:120,height:120,fillColor:"#22c55e"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.SHAPE_ARROW,name:"Arrow",description:"Add an arrow shape",icon:Dt[$t.SHAPE_ARROW],color:Ct[$t.SHAPE_ARROW],category:"wb-shapes",defaultConfig:{width:120,height:60,fillColor:"#6b7280"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.SHAPE_LINE,name:"Line",description:"Add a line shape",icon:Dt[$t.SHAPE_LINE],color:Ct[$t.SHAPE_LINE],category:"wb-shapes",defaultConfig:{width:120,height:4,fillColor:"#6b7280"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.SHAPE_STAR,name:"Star",description:"Add a star shape",icon:Dt[$t.SHAPE_STAR],color:Ct[$t.SHAPE_STAR],category:"wb-shapes",defaultConfig:{width:120,height:120,fillColor:"#f97316"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.SHAPE_HEXAGON,name:"Hexagon",description:"Add a hexagon shape",icon:Dt[$t.SHAPE_HEXAGON],color:Ct[$t.SHAPE_HEXAGON],category:"wb-shapes",defaultConfig:{width:120,height:120,fillColor:"#ec4899"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.IMAGE,name:"Image",description:"Add an image to the whiteboard",icon:Dt[$t.IMAGE],color:Ct[$t.IMAGE],category:"wb-media",defaultConfig:{imageUrl:"",width:200,height:200},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.DRAWING,name:"Drawing",description:"Add a freehand drawing area",icon:Dt[$t.DRAWING],color:Ct[$t.DRAWING],category:"wb-media",defaultConfig:{pathData:"",width:200,height:200},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.VOTING,name:"Voting",description:"Add a voting element for collaboration",icon:Dt[$t.VOTING],color:Ct[$t.VOTING],category:"wb-media",defaultConfig:{textContent:"Vote",width:200,height:150},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.MERMAID,name:"Mermaid Diagram",description:"Add a Mermaid diagram to the whiteboard",icon:Dt[$t.MERMAID],color:Ct[$t.MERMAID],category:"wb-media",defaultConfig:{textContent:"graph TD\n A[Start] --\x3e B[End]",width:400,height:300},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.ANCHOR,name:"Anchor",description:"Navigation anchor β€” other elements can link here",icon:Dt[$t.ANCHOR],color:Ct[$t.ANCHOR],category:"wb-navigation",defaultConfig:{anchorLabel:"Anchor",width:120,height:48},defaultPorts:{inputs:[],outputs:[]}},{type:$t.FRAME,name:"Frame",description:"Group whiteboard elements together",icon:Dt[$t.FRAME],color:Ct[$t.FRAME],category:"wb-layout",defaultConfig:{frameLabel:"Group",frameWidth:400,frameHeight:300,frameBackgroundColor:"rgba(99, 102, 241, 0.05)",frameBorderColor:"rgba(99, 102, 241, 0.3)",frameLabelPosition:"top-left",frameLabelPlacement:"outside",frameShowLabel:!0,frameCollapsed:!1},defaultPorts:{inputs:[],outputs:[]}},{type:$t.WORKFLOW,name:"Workflow",description:"Embed a workflow on the whiteboard",icon:Dt[$t.WORKFLOW],color:Ct[$t.WORKFLOW],category:"wb-media",defaultConfig:{workflowId:"",workflowName:"Workflow",workflowSteps:[],width:280,height:200},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.DATABASE,name:"Database Table",description:"Embed a database table on the whiteboard",icon:Dt[$t.DATABASE],color:Ct[$t.DATABASE],category:"wb-media",defaultConfig:{dbTableId:"",dbTableName:"Table",dbTableColumns:[],dbPrimaryKey:"",width:280,height:200},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}}],Et=[{id:"trigger",name:"Triggers",icon:"zap",nodeTypes:[xt.START,xt.HTTP_START,xt.CHAT_START,xt.CRON,xt.TELEGRAM_BOT,xt.SLACK_SOCKET,xt.DISCORD_BOT,xt.WHATSAPP_WEBHOOK,xt.CUSTOM_WEBSOCKET,xt.MCP,xt.CALENDLY_TRIGGER],canvasType:Mt.WORKFLOW},{id:"control",name:"Control Flow",icon:"git-branch",nodeTypes:[xt.END,xt.HTTP_END,xt.CONDITION,xt.SWITCH,xt.DELAY,xt.WAIT,xt.PARALLEL,xt.MERGE,xt.LOOP,xt.BREAK,xt.TRY_CATCH],canvasType:Mt.WORKFLOW},{id:"action",name:"Actions",icon:"zap",nodeTypes:[xt.FUNCTION,xt.HTTP,xt.INFORMATION_EXTRACTOR,xt.OCR,xt.CHAT_OUTPUT,xt.SOCIAL_POST,xt.SUB_WORKFLOW,xt.EMAIL,xt.EMAIL_READER,xt.SENDGRID,xt.NOTIFICATION,xt.DOCUMENT_GENERATOR,xt.SUMMARIZATION],canvasType:Mt.WORKFLOW},{id:"data",name:"Data",icon:"database",nodeTypes:[xt.TRANSFORM,xt.DATABASE,xt.ELASTICSEARCH,xt.VARIABLE,xt.DEBUG],canvasType:Mt.WORKFLOW},{id:"web",name:"Web",icon:"globe",nodeTypes:[xt.WEB_SEARCH,xt.WEB_CRAWL],canvasType:Mt.WORKFLOW},{id:"storage",name:"Storage",icon:"hard-drive",nodeTypes:[xt.FILE_STORAGE,xt.GOOGLE_CLOUD_STORAGE,xt.S3],canvasType:Mt.WORKFLOW},{id:"messaging",name:"Messaging",icon:"inbox",nodeTypes:[xt.RABBITMQ_TRIGGER,xt.KAFKA,xt.KAFKA_TRIGGER],canvasType:Mt.WORKFLOW},{id:"rag",name:"RAG",icon:"layers",nodeTypes:[xt.DOCUMENT_LOADER,xt.TEXT_SPLITTER,xt.EMBEDDING,xt.VECTOR_WRITE,xt.VECTOR_SEARCH,xt.CONTEXT_BUILDER,xt.RERANKER],canvasType:Mt.WORKFLOW},{id:"safety",name:"Safety",icon:"shield",nodeTypes:[xt.GUARDRAIL],canvasType:Mt.WORKFLOW},{id:"display",name:"Display",icon:"monitor",nodeTypes:[xt.UI_TABLE],canvasType:Mt.WORKFLOW},{id:"google-calendar",name:"Google Calendar",icon:"calendar",nodeTypes:[xt.GOOGLE_CALENDAR],canvasType:Mt.WORKFLOW},{id:"shopify",name:"Shopify",icon:"shopping-cart",nodeTypes:[xt.SHOPIFY],canvasType:Mt.WORKFLOW},{id:"twilio",name:"Twilio",icon:"phone",nodeTypes:[xt.TWILIO_SMS,xt.TWILIO_VOICE],canvasType:Mt.WORKFLOW},{id:"telegram",name:"Telegram",icon:"send",nodeTypes:[xt.TELEGRAM_SEND],canvasType:Mt.WORKFLOW},{id:"zendesk",name:"Zendesk",icon:"ticket",nodeTypes:[xt.ZENDESK],canvasType:Mt.WORKFLOW},{id:"slack",name:"Slack",icon:"message-square",nodeTypes:[xt.SLACK_SEND_MESSAGE,xt.SLACK_GET_CHANNEL_INFO,xt.SLACK_LIST_CHANNELS,xt.SLACK_ADD_REACTION,xt.SLACK_UPLOAD_FILE],canvasType:Mt.WORKFLOW},{id:"crm",name:"CRM",icon:"users",nodeTypes:[xt.HUBSPOT],canvasType:Mt.WORKFLOW},{id:"jira",name:"Jira",icon:"ticket",nodeTypes:[xt.JIRA],canvasType:Mt.WORKFLOW},{id:"gitlab",name:"GitLab",icon:"git-merge",nodeTypes:[xt.GITLAB],canvasType:Mt.WORKFLOW},{id:"annotation",name:"Annotations",icon:"message-square",nodeTypes:[xt.NOTE,xt.FRAME],canvasType:Mt.WORKFLOW},{id:"agent",name:"AI Agents",icon:"cpu",nodeTypes:[wt.AGENT,wt.LLM,wt.PROMPT,wt.MEMORY,wt.CONTEXT_MEMORY,wt.TOOL,wt.RETRIEVER,wt.CHAIN,wt.ROUTER,wt.HUMAN_INPUT,wt.OUTPUT_PARSER,wt.STRUCTURED_OUTPUT],canvasType:Mt.WORKFLOW},{id:"db-tables-views",name:"Tables & Views",icon:"table",nodeTypes:[kt.TABLE,kt.VIEW],canvasType:Mt.DATABASE},{id:"db-relations-constraints",name:"Relations & Constraints",icon:"git-merge",nodeTypes:[kt.RELATIONSHIP,kt.CONSTRAINT],canvasType:Mt.DATABASE},{id:"db-indexes-queries",name:"Indexes & Queries",icon:"list",nodeTypes:[kt.INDEX,kt.QUERY],canvasType:Mt.DATABASE},{id:"wb-notes-text",name:"Notes & Text",icon:"sticky-note",nodeTypes:[$t.STICKY_NOTE,$t.TEXT_BLOCK],canvasType:Mt.WHITEBOARD},{id:"wb-shapes",name:"Shapes",icon:"square",nodeTypes:[$t.SHAPE_RECTANGLE,$t.SHAPE_CIRCLE,$t.SHAPE_DIAMOND,$t.SHAPE_TRIANGLE,$t.SHAPE_ARROW,$t.SHAPE_LINE,$t.SHAPE_STAR,$t.SHAPE_HEXAGON],canvasType:Mt.WHITEBOARD},{id:"wb-media",name:"Media & Interactive",icon:"image",nodeTypes:[$t.IMAGE,$t.DRAWING,$t.VOTING,$t.MERMAID],canvasType:Mt.WHITEBOARD},{id:"wb-navigation",name:"Navigation",icon:"anchor",nodeTypes:[$t.ANCHOR],canvasType:Mt.WHITEBOARD},{id:"wb-layout",name:"Layout",icon:"frame",nodeTypes:[$t.FRAME],canvasType:Mt.WHITEBOARD}];function At(e){return zt.find(t=>t.type===e)}function Ot(e){return Object.values(wt).includes(e)}function It(e){return Object.values(xt).includes(e)}function jt(e){return Object.values(kt).includes(e)}function Pt(e){return Object.values($t).includes(e)}function Nt(e){return Et.filter(t=>t.canvasType===e)}function Ht(e,t,i){var n;const s=At(e);return s?{id:i||"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}),name:s.name,type:s.type,position:t,configuration:Object.assign({},s.defaultConfig),ports:{inputs:s.defaultPorts.inputs.map(e=>Object.assign({},e)),configs:null===(n=s.defaultPorts.configs)||void 0===n?void 0:n.map(e=>Object.assign({},e)),outputs:s.defaultPorts.outputs.map(e=>Object.assign({},e))},metadata:{icon:s.icon,color:s.color,description:s.description},status:Lt.IDLE,selected:!1}:null}const Rt=[{name:"Yellow",bg:"#fef08a",text:"#713f12"},{name:"Blue",bg:"#bfdbfe",text:"#1e3a5f"},{name:"Green",bg:"#bbf7d0",text:"#14532d"},{name:"Pink",bg:"#fbcfe8",text:"#831843"},{name:"Orange",bg:"#fed7aa",text:"#7c2d12"},{name:"Purple",bg:"#ddd6fe",text:"#4c1d95"},{name:"Gray",bg:"#e5e7eb",text:"#374151"}],Ft=[{name:"Indigo",bg:"rgba(99, 102, 241, 0.05)",border:"rgba(99, 102, 241, 0.3)",solid:"#6366f1"},{name:"Blue",bg:"rgba(59, 130, 246, 0.05)",border:"rgba(59, 130, 246, 0.3)",solid:"#3b82f6"},{name:"Green",bg:"rgba(34, 197, 94, 0.05)",border:"rgba(34, 197, 94, 0.3)",solid:"#22c55e"},{name:"Orange",bg:"rgba(249, 115, 22, 0.05)",border:"rgba(249, 115, 22, 0.3)",solid:"#f97316"},{name:"Red",bg:"rgba(239, 68, 68, 0.05)",border:"rgba(239, 68, 68, 0.3)",solid:"#ef4444"},{name:"Purple",bg:"rgba(168, 85, 247, 0.05)",border:"rgba(168, 85, 247, 0.3)",solid:"#a855f7"},{name:"Gray",bg:"rgba(107, 114, 128, 0.05)",border:"rgba(107, 114, 128, 0.3)",solid:"#6b7280"}];function Bt(e){return e===xt.NOTE||e===xt.FRAME}function Ut(e){return e===xt.FRAME}function Vt(e){return e===xt.NOTE}const qt=new Set([xt.TELEGRAM_BOT,xt.SLACK_SOCKET,xt.DISCORD_BOT,xt.WHATSAPP_WEBHOOK,xt.CUSTOM_WEBSOCKET,xt.RABBITMQ_TRIGGER,xt.CALENDLY_TRIGGER,xt.KAFKA_TRIGGER,xt.CRON]);function Wt(e){return qt.has(e)}
1269
+ */var xt,wt,kt,$t,Mt,St,Lt,Tt,Yt;!function(e){e.START="START",e.END="END",e.HTTP_START="HTTP_START",e.HTTP_END="HTTP_END",e.CHAT_START="CHAT_START",e.CHAT_OUTPUT="CHAT_OUTPUT",e.SOCIAL_POST="SOCIAL_POST",e.FUNCTION="FUNCTION",e.HTTP="HTTP",e.CONDITION="CONDITION",e.SWITCH="SWITCH",e.DELAY="DELAY",e.PARALLEL="PARALLEL",e.MERGE="MERGE",e.LOOP="LOOP",e.BREAK="BREAK",e.WAIT="WAIT",e.TRY_CATCH="TRY_CATCH",e.TRANSFORM="TRANSFORM",e.SUB_WORKFLOW="SUB_WORKFLOW",e.EMAIL="EMAIL",e.EMAIL_READER="EMAIL_READER",e.SENDGRID="SENDGRID",e.NOTIFICATION="NOTIFICATION",e.DATABASE="DATABASE",e.VARIABLE="VARIABLE",e.CHATBOT="CHATBOT",e.DEBUG="DEBUG",e.LLM="LLM",e.OCR="OCR",e.WEB_SEARCH="WEB_SEARCH",e.WEB_CRAWL="WEB_CRAWL",e.DOCUMENT_GENERATOR="DOCUMENT_GENERATOR",e.FILE_STORAGE="FILE_STORAGE",e.GOOGLE_CLOUD_STORAGE="GOOGLE_CLOUD_STORAGE",e.S3="S3",e.EMBEDDING="EMBEDDING",e.DOCUMENT_LOADER="DOCUMENT_LOADER",e.TEXT_SPLITTER="TEXT_SPLITTER",e.VECTOR_WRITE="VECTOR_WRITE",e.VECTOR_SEARCH="VECTOR_SEARCH",e.CONTEXT_BUILDER="CONTEXT_BUILDER",e.SUMMARIZATION="SUMMARIZATION",e.GUARDRAIL="GUARDRAIL",e.SLACK_SEND_MESSAGE="SLACK_SEND_MESSAGE",e.SLACK_GET_CHANNEL_INFO="SLACK_GET_CHANNEL_INFO",e.SLACK_LIST_CHANNELS="SLACK_LIST_CHANNELS",e.SLACK_ADD_REACTION="SLACK_ADD_REACTION",e.SLACK_UPLOAD_FILE="SLACK_UPLOAD_FILE",e.RERANKER="RERANKER",e.SHOPIFY="SHOPIFY",e.TELEGRAM_SEND="TELEGRAM_SEND",e.TWILIO_SMS="TWILIO_SMS",e.TWILIO_VOICE="TWILIO_VOICE",e.TELEGRAM_BOT="TELEGRAM_BOT",e.SLACK_SOCKET="SLACK_SOCKET",e.DISCORD_BOT="DISCORD_BOT",e.WHATSAPP_WEBHOOK="WHATSAPP_WEBHOOK",e.CUSTOM_WEBSOCKET="CUSTOM_WEBSOCKET",e.GOOGLE_CALENDAR="GOOGLE_CALENDAR",e.RABBITMQ_TRIGGER="RABBITMQ_TRIGGER",e.KAFKA="KAFKA",e.KAFKA_TRIGGER="KAFKA_TRIGGER",e.ZENDESK="ZENDESK",e.GITLAB="GITLAB",e.MCP="MCP",e.INFORMATION_EXTRACTOR="INFORMATION_EXTRACTOR",e.HUBSPOT="HUBSPOT",e.JIRA="JIRA",e.ELASTICSEARCH="ELASTICSEARCH",e.CALENDLY_TRIGGER="CALENDLY_TRIGGER",e.UI_TABLE="UI_TABLE",e.NOTE="NOTE",e.FRAME="FRAME",e.CRON="CRON"}(xt||(xt={})),function(e){e.AGENT="AGENT",e.TOOL="TOOL",e.MEMORY="MEMORY",e.CONTEXT_MEMORY="CONTEXT_MEMORY",e.PROMPT="PROMPT",e.LLM="AGENT_LLM",e.RETRIEVER="RETRIEVER",e.CHAIN="CHAIN",e.ROUTER="ROUTER",e.HUMAN_INPUT="HUMAN_INPUT",e.OUTPUT_PARSER="OUTPUT_PARSER",e.STRUCTURED_OUTPUT="STRUCTURED_OUTPUT"}(wt||(wt={})),function(e){e.TABLE="DB_TABLE",e.VIEW="DB_VIEW",e.INDEX="DB_INDEX",e.RELATIONSHIP="DB_RELATIONSHIP",e.CONSTRAINT="DB_CONSTRAINT",e.QUERY="DB_QUERY"}(kt||(kt={})),function(e){e.STICKY_NOTE="WB_STICKY_NOTE",e.SHAPE_RECTANGLE="WB_SHAPE_RECTANGLE",e.SHAPE_CIRCLE="WB_SHAPE_CIRCLE",e.SHAPE_DIAMOND="WB_SHAPE_DIAMOND",e.SHAPE_TRIANGLE="WB_SHAPE_TRIANGLE",e.SHAPE_ARROW="WB_SHAPE_ARROW",e.SHAPE_LINE="WB_SHAPE_LINE",e.SHAPE_STAR="WB_SHAPE_STAR",e.SHAPE_HEXAGON="WB_SHAPE_HEXAGON",e.TEXT_BLOCK="WB_TEXT_BLOCK",e.IMAGE="WB_IMAGE",e.DRAWING="WB_DRAWING",e.FRAME="WB_FRAME",e.VOTING="WB_VOTING",e.MERMAID="WB_MERMAID",e.ANCHOR="WB_ANCHOR",e.WORKFLOW="WB_WORKFLOW",e.DATABASE="WB_DATABASE"}($t||($t={})),function(e){e.WORKFLOW="WORKFLOW",e.DATABASE="DATABASE",e.WHITEBOARD="WHITEBOARD"}(Mt||(Mt={})),function(e){e.DISCONNECTED="DISCONNECTED",e.CONNECTING="CONNECTING",e.CONNECTED="CONNECTED",e.PAUSED="PAUSED",e.HANDOFF_PENDING="HANDOFF_PENDING",e.ERROR="ERROR"}(St||(St={})),function(e){e.IDLE="IDLE",e.PENDING="PENDING",e.RUNNING="RUNNING",e.COMPLETED="COMPLETED",e.FAILED="FAILED",e.CANCELLED="CANCELLED",e.PAUSED="PAUSED",e.WAITING="WAITING"}(Lt||(Lt={})),function(e){e.INPUT="INPUT",e.OUTPUT="OUTPUT",e.CONFIG="CONFIG",e.CONDITIONAL_TRUE="CONDITIONAL_TRUE",e.CONDITIONAL_FALSE="CONDITIONAL_FALSE",e.CONDITIONAL_DEFAULT="CONDITIONAL_DEFAULT",e.LOOP_ITEM="LOOP_ITEM",e.LOOP_DONE="LOOP_DONE",e.PARALLEL_BRANCH="PARALLEL_BRANCH",e.ERROR="ERROR"}(Tt||(Tt={})),function(e){e.SELECT="SELECT",e.PAN="PAN",e.CONNECT="CONNECT",e.ADD_NODE="ADD_NODE"}(Yt||(Yt={}));const Ct={[xt.START]:"#22c55e",[xt.END]:"#ef4444",[xt.HTTP_START]:"#059669",[xt.HTTP_END]:"#dc2626",[xt.CHAT_START]:"#0ea5e9",[xt.CHAT_OUTPUT]:"#06b6d4",[xt.SOCIAL_POST]:"#7c3aed",[xt.FUNCTION]:"#3b82f6",[xt.HTTP]:"#8b5cf6",[xt.CONDITION]:"#f59e0b",[xt.SWITCH]:"#eab308",[xt.DELAY]:"#6b7280",[xt.PARALLEL]:"#06b6d4",[xt.MERGE]:"#0891b2",[xt.LOOP]:"#ec4899",[xt.BREAK]:"#991b1b",[xt.WAIT]:"#a78bfa",[xt.TRY_CATCH]:"#f43f5e",[xt.TRANSFORM]:"#14b8a6",[xt.SUB_WORKFLOW]:"#6366f1",[xt.EMAIL]:"#f97316",[xt.EMAIL_READER]:"#06b6d4",[xt.SENDGRID]:"#1A82E2",[xt.NOTIFICATION]:"#84cc16",[xt.DATABASE]:"#a855f7",[xt.VARIABLE]:"#64748b",[xt.CHATBOT]:"#0ea5e9",[xt.DEBUG]:"#f97316",[xt.LLM]:"#22d3ee",[xt.OCR]:"#0d9488",[xt.INFORMATION_EXTRACTOR]:"#8B5CF6",[xt.WEB_SEARCH]:"#3b82f6",[xt.WEB_CRAWL]:"#6366f1",[xt.DOCUMENT_GENERATOR]:"#0284c7",[xt.FILE_STORAGE]:"#f59e0b",[xt.GOOGLE_CLOUD_STORAGE]:"#4285f4",[xt.S3]:"#FF9900",[xt.EMBEDDING]:"#8b5cf6",[xt.DOCUMENT_LOADER]:"#ec4899",[xt.TEXT_SPLITTER]:"#14b8a6",[xt.VECTOR_WRITE]:"#10b981",[xt.VECTOR_SEARCH]:"#06b6d4",[xt.CONTEXT_BUILDER]:"#a855f7",[xt.SUMMARIZATION]:"#8B5CF6",[xt.GUARDRAIL]:"#ef4444",[xt.SLACK_SEND_MESSAGE]:"#4A154B",[xt.SLACK_GET_CHANNEL_INFO]:"#4A154B",[xt.SLACK_LIST_CHANNELS]:"#4A154B",[xt.SLACK_ADD_REACTION]:"#4A154B",[xt.SLACK_UPLOAD_FILE]:"#4A154B",[xt.RERANKER]:"#d946ef",[xt.SHOPIFY]:"#96bf48",[xt.TELEGRAM_SEND]:"#0088cc",[xt.TWILIO_SMS]:"#F22F46",[xt.TWILIO_VOICE]:"#F22F46",[xt.TELEGRAM_BOT]:"#0088cc",[xt.SLACK_SOCKET]:"#4A154B",[xt.DISCORD_BOT]:"#5865F2",[xt.WHATSAPP_WEBHOOK]:"#25D366",[xt.CUSTOM_WEBSOCKET]:"#6366f1",[xt.GOOGLE_CALENDAR]:"#4285F4",[xt.RABBITMQ_TRIGGER]:"#FF6600",[xt.KAFKA]:"#231F20",[xt.KAFKA_TRIGGER]:"#231F20",[xt.ZENDESK]:"#03363d",[xt.GITLAB]:"#FC6D26",[xt.MCP]:"#7c3aed",[xt.HUBSPOT]:"#FF7A59",[xt.JIRA]:"#0052CC",[xt.ELASTICSEARCH]:"#00bfb3",[xt.CALENDLY_TRIGGER]:"#006BFF",[xt.UI_TABLE]:"#0891b2",[xt.NOTE]:"#fef08a",[xt.FRAME]:"#6366f1",[xt.CRON]:"#d97706",[wt.AGENT]:"#10b981",[wt.TOOL]:"#0ea5e9",[wt.MEMORY]:"#d946ef",[wt.CONTEXT_MEMORY]:"#c026d3",[wt.PROMPT]:"#f472b6",[wt.LLM]:"#22d3ee",[wt.RETRIEVER]:"#a78bfa",[wt.CHAIN]:"#fbbf24",[wt.ROUTER]:"#fb923c",[wt.HUMAN_INPUT]:"#4ade80",[wt.OUTPUT_PARSER]:"#2dd4bf",[wt.STRUCTURED_OUTPUT]:"#f59e0b",[kt.TABLE]:"#64748b",[kt.VIEW]:"#a855f7",[kt.INDEX]:"#f59e0b",[kt.RELATIONSHIP]:"#ec4899",[kt.CONSTRAINT]:"#ef4444",[kt.QUERY]:"#06b6d4",[$t.STICKY_NOTE]:"#fef08a",[$t.SHAPE_RECTANGLE]:"#3b82f6",[$t.SHAPE_CIRCLE]:"#8b5cf6",[$t.SHAPE_DIAMOND]:"#f59e0b",[$t.SHAPE_TRIANGLE]:"#22c55e",[$t.SHAPE_ARROW]:"#6b7280",[$t.SHAPE_LINE]:"#6b7280",[$t.SHAPE_STAR]:"#f97316",[$t.SHAPE_HEXAGON]:"#ec4899",[$t.TEXT_BLOCK]:"#111827",[$t.IMAGE]:"#06b6d4",[$t.DRAWING]:"#14b8a6",[$t.FRAME]:"#6366f1",[$t.VOTING]:"#ef4444",[$t.MERMAID]:"#8b5cf6",[$t.ANCHOR]:"#f59e0b",[$t.WORKFLOW]:"#6366f1",[$t.DATABASE]:"#64748b"},Dt={[xt.START]:"play",[xt.END]:"stop",[xt.HTTP_START]:"download",[xt.HTTP_END]:"upload",[xt.CHAT_START]:"message-circle",[xt.CHAT_OUTPUT]:"message-square",[xt.SOCIAL_POST]:"send",[xt.FUNCTION]:"code",[xt.HTTP]:"globe",[xt.CONDITION]:"git-branch",[xt.SWITCH]:"git-fork",[xt.DELAY]:"clock",[xt.PARALLEL]:"git-merge",[xt.MERGE]:"merge",[xt.LOOP]:"repeat",[xt.BREAK]:"circle-stop",[xt.WAIT]:"hourglass",[xt.TRY_CATCH]:"shield-alert",[xt.TRANSFORM]:"shuffle",[xt.SUB_WORKFLOW]:"layers",[xt.EMAIL]:"mail",[xt.EMAIL_READER]:"mail-open",[xt.SENDGRID]:"send",[xt.NOTIFICATION]:"bell",[xt.DATABASE]:"database",[xt.VARIABLE]:"box",[xt.CHATBOT]:"message-circle",[xt.DEBUG]:"bug",[xt.LLM]:"brain",[xt.OCR]:"scan",[xt.INFORMATION_EXTRACTOR]:"search",[xt.WEB_SEARCH]:"search",[xt.WEB_CRAWL]:"globe",[xt.DOCUMENT_GENERATOR]:"file-text",[xt.FILE_STORAGE]:"hard-drive",[xt.GOOGLE_CLOUD_STORAGE]:"cloud",[xt.S3]:"cloud",[xt.EMBEDDING]:"hash",[xt.DOCUMENT_LOADER]:"file-text",[xt.TEXT_SPLITTER]:"scissors",[xt.VECTOR_WRITE]:"database",[xt.VECTOR_SEARCH]:"search",[xt.CONTEXT_BUILDER]:"layers",[xt.SUMMARIZATION]:"file-minus",[xt.GUARDRAIL]:"shield",[xt.SLACK_SEND_MESSAGE]:"message-square",[xt.SLACK_GET_CHANNEL_INFO]:"hash",[xt.SLACK_LIST_CHANNELS]:"list",[xt.SLACK_ADD_REACTION]:"smile-plus",[xt.SLACK_UPLOAD_FILE]:"upload",[xt.RERANKER]:"arrow-up-down",[xt.SHOPIFY]:"shopping-cart",[xt.TELEGRAM_SEND]:"send",[xt.TWILIO_SMS]:"message-square",[xt.TWILIO_VOICE]:"phone",[xt.TELEGRAM_BOT]:"send",[xt.SLACK_SOCKET]:"message-square",[xt.DISCORD_BOT]:"gamepad-2",[xt.WHATSAPP_WEBHOOK]:"phone",[xt.CUSTOM_WEBSOCKET]:"radio",[xt.GOOGLE_CALENDAR]:"calendar",[xt.RABBITMQ_TRIGGER]:"inbox",[xt.KAFKA]:"message-square-share",[xt.KAFKA_TRIGGER]:"radio",[xt.ZENDESK]:"ticket",[xt.GITLAB]:"git-merge",[xt.MCP]:"plug",[xt.HUBSPOT]:"users",[xt.JIRA]:"ticket",[xt.ELASTICSEARCH]:"search",[xt.CALENDLY_TRIGGER]:"calendar",[xt.UI_TABLE]:"table",[xt.NOTE]:"sticky-note",[xt.FRAME]:"square",[xt.CRON]:"timer",[wt.AGENT]:"cpu",[wt.TOOL]:"tool",[wt.MEMORY]:"hard-drive",[wt.CONTEXT_MEMORY]:"brain",[wt.PROMPT]:"message-square",[wt.LLM]:"brain",[wt.RETRIEVER]:"search",[wt.CHAIN]:"link",[wt.ROUTER]:"git-pull-request",[wt.HUMAN_INPUT]:"user",[wt.OUTPUT_PARSER]:"file-text",[wt.STRUCTURED_OUTPUT]:"braces",[kt.TABLE]:"table",[kt.VIEW]:"eye",[kt.INDEX]:"list",[kt.RELATIONSHIP]:"git-merge",[kt.CONSTRAINT]:"shield",[kt.QUERY]:"terminal",[$t.STICKY_NOTE]:"sticky-note",[$t.SHAPE_RECTANGLE]:"square",[$t.SHAPE_CIRCLE]:"circle",[$t.SHAPE_DIAMOND]:"diamond",[$t.SHAPE_TRIANGLE]:"triangle",[$t.SHAPE_ARROW]:"arrow-right",[$t.SHAPE_LINE]:"minus",[$t.SHAPE_STAR]:"star",[$t.SHAPE_HEXAGON]:"hexagon",[$t.TEXT_BLOCK]:"type",[$t.IMAGE]:"image",[$t.DRAWING]:"pen-tool",[$t.FRAME]:"frame",[$t.VOTING]:"thumbs-up",[$t.MERMAID]:"git-branch",[$t.ANCHOR]:"anchor",[$t.WORKFLOW]:"layers",[$t.DATABASE]:"table"},zt=[{type:xt.START,name:"Start",description:"Entry point of the workflow",icon:Dt[xt.START],color:Ct[xt.START],category:"control",defaultConfig:{},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.END,name:"End",description:"Exit point of the workflow",icon:Dt[xt.END],color:Ct[xt.END],category:"control",defaultConfig:{},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[]}},{type:xt.HTTP_START,name:"HTTP Trigger",description:"Start workflow from HTTP request",icon:Dt[xt.HTTP_START],color:Ct[xt.HTTP_START],category:"trigger",defaultConfig:{httpPath:"/webhook",httpMethod:"POST",httpAuth:"none",httpAuthSecretKey:"",httpCors:!0,httpRateLimit:100,httpRequestSchema:{}},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Request"}]}},{type:xt.HTTP_END,name:"HTTP Response",description:"Return HTTP response to caller",icon:Dt[xt.HTTP_END],color:Ct[xt.HTTP_END],category:"control",defaultConfig:{httpStatusCode:200,httpResponseHeaders:{"Content-Type":"application/json"},httpResponseBody:"{{data}}",httpContentType:"application/json"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[]}},{type:xt.CHAT_START,name:"Chat Trigger",description:"Start workflow from chatbot message",icon:Dt[xt.CHAT_START],color:Ct[xt.CHAT_START],category:"trigger",defaultConfig:{outputVariable:"chatInput",enableFileUpload:!1,maxFileSize:10,maxFiles:5,allowImages:!0,allowDocuments:!1,allowText:!1,allowAudio:!1,allowVideo:!1},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Message"},{id:"files",type:Tt.OUTPUT,label:"Files"}]}},{type:xt.CHAT_OUTPUT,name:"Chat Output",description:"Send message to chatbot during execution",icon:Dt[xt.CHAT_OUTPUT],color:Ct[xt.CHAT_OUTPUT],category:"action",defaultConfig:{message:"${variables.response}",messageType:"text",typing:!1,typingDelay:1e3},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.SOCIAL_POST,name:"Social Post",description:"Post to social feed on behalf of an agent",icon:Dt[xt.SOCIAL_POST],color:Ct[xt.SOCIAL_POST],category:"action",defaultConfig:{agentId:"",content:"${variables.response}",mediaUrl:"",mediaType:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.LLM,name:"LLM",description:"Call AI language model (OpenAI, Anthropic, etc.)",icon:Dt[xt.LLM],color:Ct[xt.LLM],category:"action",defaultConfig:{provider:"openai",model:"gpt-4",temperature:.7,maxTokens:2048,systemPrompt:"",userPrompt:"${variables.message}"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"},{id:"context_memory",type:Tt.INPUT,label:"Context Memory"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.OCR,name:"OCR",description:"Extract text from images using OCR",icon:Dt[xt.OCR],color:Ct[xt.OCR],category:"action",defaultConfig:{imageSource:"variable",imageField:"${input.files[0].base64}",language:"fr",detectLayout:!1,outputVariable:"ocrResult"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Image"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Text"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.INFORMATION_EXTRACTOR,name:"Information Extractor",description:"Extract structured data from unstructured text using AI",icon:Dt[xt.INFORMATION_EXTRACTOR],color:Ct[xt.INFORMATION_EXTRACTOR],category:"action",defaultConfig:{inputField:"text",schema:[{name:"field1",type:"string",description:"",required:!0}],model:"gpt-4o-mini",provider:"openai",instructions:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Extracted"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.FUNCTION,name:"Function",description:"Invoke a Nuraly function",icon:Dt[xt.FUNCTION],color:Ct[xt.FUNCTION],category:"action",defaultConfig:{functionId:"",inputMapping:{},outputMapping:{}},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.HTTP,name:"HTTP Request",description:"Make an HTTP request",icon:Dt[xt.HTTP],color:Ct[xt.HTTP],category:"action",defaultConfig:{method:"GET",url:"",headers:{},timeout:3e4},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Success"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.CONDITION,name:"Condition",description:"Branch based on a condition",icon:Dt[xt.CONDITION],color:Ct[xt.CONDITION],category:"control",defaultConfig:{conditionMode:"expression",expression:"",language:"javascript"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"true",type:Tt.CONDITIONAL_TRUE,label:"True"},{id:"false",type:Tt.CONDITIONAL_FALSE,label:"False"}]}},{type:xt.DELAY,name:"Delay",description:"Wait for a specified duration",icon:Dt[xt.DELAY],color:Ct[xt.DELAY],category:"control",defaultConfig:{duration:1e3,unit:"milliseconds"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.PARALLEL,name:"Parallel",description:"Execute branches in parallel",icon:Dt[xt.PARALLEL],color:Ct[xt.PARALLEL],category:"control",defaultConfig:{},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"branch1",type:Tt.PARALLEL_BRANCH,label:"Branch 1"},{id:"branch2",type:Tt.PARALLEL_BRANCH,label:"Branch 2"}]}},{type:xt.LOOP,name:"Loop",description:"Iterate over an array",icon:Dt[xt.LOOP],color:Ct[xt.LOOP],category:"control",defaultConfig:{iteratorVariable:"item",arrayExpression:"",maxIterations:100},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"item",type:Tt.LOOP_ITEM,label:"Each Item"},{id:"done",type:Tt.LOOP_DONE,label:"Done"}]}},{type:xt.SWITCH,name:"Switch",description:"Route to a branch based on a value",icon:Dt[xt.SWITCH],color:Ct[xt.SWITCH],category:"control",defaultConfig:{expression:"",language:"javascript",cases:[{value:"case1",label:"Case 1"},{value:"case2",label:"Case 2"}],includeDefault:!0},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"case1",type:Tt.OUTPUT,label:"Case 1"},{id:"case2",type:Tt.OUTPUT,label:"Case 2"},{id:"default",type:Tt.CONDITIONAL_DEFAULT,label:"Default"}]}},{type:xt.MERGE,name:"Merge",description:"Join multiple branches into one",icon:Dt[xt.MERGE],color:Ct[xt.MERGE],category:"control",defaultConfig:{mode:"waitAll"},defaultPorts:{inputs:[{id:"in1",type:Tt.INPUT,label:"Input 1",multiple:!0},{id:"in2",type:Tt.INPUT,label:"Input 2",multiple:!0}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.WAIT,name:"Wait",description:"Pause until a signal or event is received",icon:Dt[xt.WAIT],color:Ct[xt.WAIT],category:"control",defaultConfig:{signalName:"",timeout:3e5},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Signal"},{id:"timeout",type:Tt.OUTPUT,label:"Timeout"}]}},{type:xt.TRY_CATCH,name:"Try / Catch",description:"Catch errors from the connected branch",icon:Dt[xt.TRY_CATCH],color:Ct[xt.TRY_CATCH],category:"control",defaultConfig:{catchTypes:["*"],errorVariable:"error"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"try",type:Tt.OUTPUT,label:"Try"},{id:"catch",type:Tt.ERROR,label:"Catch"}]}},{type:xt.BREAK,name:"Break",description:"Exit the enclosing loop",icon:Dt[xt.BREAK],color:Ct[xt.BREAK],category:"control",defaultConfig:{},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[]}},{type:xt.TRANSFORM,name:"Transform",description:"Transform data using expressions",icon:Dt[xt.TRANSFORM],color:Ct[xt.TRANSFORM],category:"data",defaultConfig:{transformExpression:"",language:"jsonata"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.SUB_WORKFLOW,name:"Sub-Workflow",description:"Invoke another workflow",icon:Dt[xt.SUB_WORKFLOW],color:Ct[xt.SUB_WORKFLOW],category:"action",defaultConfig:{workflowId:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.EMAIL,name:"Email",description:"Send an email",icon:Dt[xt.EMAIL],color:Ct[xt.EMAIL],category:"action",defaultConfig:{to:"",cc:"",bcc:"",subject:"",body:"",bodyType:"text",fromName:"",replyTo:"",priority:"normal"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.EMAIL_READER,name:"Email Reader",description:"Read and manage emails from Gmail, Outlook, Yahoo, or IMAP",icon:Dt[xt.EMAIL_READER],color:Ct[xt.EMAIL_READER],category:"action",defaultConfig:{provider:"imap",operation:"LIST",folder:"INBOX",limit:10,includeAttachments:!1,markAsReadOnFetch:!1,searchQuery:"",host:"",port:993,tls:!0,credentialPath:"",sinceDate:"",beforeDate:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.SENDGRID,name:"SendGrid",description:"Send email via SendGrid API",icon:Dt[xt.SENDGRID],color:Ct[xt.SENDGRID],category:"action",defaultConfig:{to:"",cc:"",bcc:"",fromEmail:"",fromName:"",replyTo:"",subject:"",body:"",contentType:"text/html",templateId:"",dynamicTemplateData:"",categories:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"},{id:"error",type:Tt.OUTPUT,label:"Error"}]}},{type:xt.NOTIFICATION,name:"Notification",description:"Send a notification",icon:Dt[xt.NOTIFICATION],color:Ct[xt.NOTIFICATION],category:"action",defaultConfig:{channel:"",message:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.DATABASE,name:"Data",description:"Read and write data to databases",icon:Dt[xt.DATABASE],color:"#6366F1",category:"data",defaultConfig:{operation:pt.QUERY,dataSource:null,entity:null,filter:null,fields:{},select:[],orderBy:[],limit:null,offset:null,outputVariable:"results"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.VARIABLE,name:"Variable",description:"Set or get a workflow variable",icon:Dt[xt.VARIABLE],color:Ct[xt.VARIABLE],category:"data",defaultConfig:{variableOperation:"set",variableName:"",value:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.CHATBOT,name:"Chatbot Trigger",description:"Trigger workflow from chatbot interactions",icon:Dt[xt.CHATBOT],color:Ct[xt.CHATBOT],category:"trigger",defaultConfig:{triggerEvents:["MESSAGE_SENT"],chatbotSize:"medium",chatbotVariant:"floating",title:"Chat Assistant",subtitle:"Ask me anything",placeholder:"Type a message...",initialMessage:"",enableTypingIndicator:!0,enableSuggestions:!1,suggestions:[],loadingType:"dots",enableFileUpload:!1,maxFileSize:10,maxFiles:5,allowImages:!0,allowDocuments:!1,allowText:!1,allowAudio:!1,allowVideo:!1},defaultPorts:{inputs:[],outputs:[{id:"message",type:Tt.OUTPUT,label:"Message"},{id:"files",type:Tt.OUTPUT,label:"Files"},{id:"session",type:Tt.OUTPUT,label:"Session Start"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.DEBUG,name:"Debug",description:"Display input, output, and variables for debugging",icon:Dt[xt.DEBUG],color:Ct[xt.DEBUG],category:"data",defaultConfig:{},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.UI_TABLE,name:"Table",description:"Display data as an interactive table",icon:Dt[xt.UI_TABLE],color:Ct[xt.UI_TABLE],category:"display",defaultConfig:{tableColumns:[],dataExpression:"",tablePageSize:10,tableEnableFilter:!1,tableEnableSort:!0,tableFixedHeader:!1,tableSize:"normal",tableEmptyText:"No data available"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Data"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:xt.WEB_SEARCH,name:"Web Search",description:"Search the web using Google, Bing, Brave, or DuckDuckGo",icon:Dt[xt.WEB_SEARCH],color:Ct[xt.WEB_SEARCH],category:"web",defaultConfig:{provider:"google",queryField:"query",numResults:10,safeSearch:!0,timeout:3e4},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Results"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.WEB_CRAWL,name:"Web Crawl",description:"Crawl web pages and extract text content",icon:Dt[xt.WEB_CRAWL],color:Ct[xt.WEB_CRAWL],category:"web",defaultConfig:{urlField:"url",maxDepth:1,maxPages:10,sameDomainOnly:!0,renderJs:!1},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Pages"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.DOCUMENT_GENERATOR,name:"Document Generator",description:"Generate Word documents from templates with dynamic data",icon:Dt[xt.DOCUMENT_GENERATOR],color:Ct[xt.DOCUMENT_GENERATOR],category:"documents",defaultConfig:{templateId:"",data:{},outputVariable:"documentResult"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Result"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.FILE_STORAGE,name:"File Storage",description:"Store files to S3, MinIO, or local filesystem",icon:Dt[xt.FILE_STORAGE],color:Ct[xt.FILE_STORAGE],category:"storage",defaultConfig:{provider:"local",bucket:"default",path:"",fileField:"file",filenameField:"filename"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Result"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.GOOGLE_CLOUD_STORAGE,name:"Google Cloud Storage",description:"Manage objects in Google Cloud Storage buckets",icon:Dt[xt.GOOGLE_CLOUD_STORAGE],color:Ct[xt.GOOGLE_CLOUD_STORAGE],category:"storage",defaultConfig:{operation:"LIST",bucketName:"",objectPath:"",serviceAccountPath:"",signedUrlExpiration:3600},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Result"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.S3,name:"AWS S3",description:"Upload, download, and manage files in Amazon S3",icon:Dt[xt.S3],color:Ct[xt.S3],category:"integrations",defaultConfig:{s3Operation:"upload",s3Bucket:"",s3Key:"",s3Region:"us-east-1",s3ContentType:"auto"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Result"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.EMBEDDING,name:"Embedding",description:"Convert text to vector embeddings",icon:Dt[xt.EMBEDDING],color:Ct[xt.EMBEDDING],category:"rag",defaultConfig:{provider:"openai",model:"text-embedding-3-small",inputField:"text",batchSize:100},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Text"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Embedding"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.DOCUMENT_LOADER,name:"Document Loader",description:"Load and parse documents (PDF, Word, HTML, etc.)",icon:Dt[xt.DOCUMENT_LOADER],color:Ct[xt.DOCUMENT_LOADER],category:"rag",defaultConfig:{sourceType:"text",contentField:"content",filenameField:"filename",defaultType:"txt",timeout:3e4},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Document"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Content"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.TEXT_SPLITTER,name:"Text Splitter",description:"Split text into chunks for embedding",icon:Dt[xt.TEXT_SPLITTER],color:Ct[xt.TEXT_SPLITTER],category:"rag",defaultConfig:{strategy:"recursive",chunkSize:1e3,chunkOverlap:200,contentField:"content"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Text"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Chunks"}]}},{type:xt.VECTOR_WRITE,name:"Vector Write",description:"Store embeddings in vector database",icon:Dt[xt.VECTOR_WRITE],color:Ct[xt.VECTOR_WRITE],category:"rag",defaultConfig:{collectionName:"",upsertMode:"replace"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Embeddings"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Result"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.VECTOR_SEARCH,name:"Vector Search",description:"Search for similar documents in vector store",icon:Dt[xt.VECTOR_SEARCH],color:Ct[xt.VECTOR_SEARCH],category:"rag",defaultConfig:{collectionName:"",topK:5,minScore:.7,includeContent:!0,includeMetadata:!0,provider:"openai",model:"text-embedding-3-small"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Query"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Results"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.CONTEXT_BUILDER,name:"Context Builder",description:"Format retrieved documents into LLM-ready context",icon:Dt[xt.CONTEXT_BUILDER],color:Ct[xt.CONTEXT_BUILDER],category:"rag",defaultConfig:{template:"default",maxTokens:4e3,maxDocuments:10,includeSourceInfo:!0,includeSimilarityScore:!1,separator:"\n\n---\n\n"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Results"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Context"}]}},{type:xt.RERANKER,name:"Reranker",description:"Re-rank search results by relevance",icon:Dt[xt.RERANKER],color:Ct[xt.RERANKER],category:"rag",defaultConfig:{model:"cross-encoder",topK:5,threshold:.5},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Results"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Reranked"}]}},{type:xt.SUMMARIZATION,name:"Summarize Document",description:"Summarize long text using AI with chunking strategies",icon:Dt[xt.SUMMARIZATION],color:Ct[xt.SUMMARIZATION],category:"action",defaultConfig:{inputField:"text",outputField:"summary",strategy:"map_reduce",chunkSize:4e3,chunkOverlap:200,model:"gpt-4o-mini"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Summary"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.GUARDRAIL,name:"Guardrail",description:"Validate and filter LLM inputs/outputs for safety",icon:Dt[xt.GUARDRAIL],color:Ct[xt.GUARDRAIL],category:"safety",defaultConfig:{mode:"input",contentField:"content",onFail:"block",checks:[]},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Passed"},{id:"blocked",type:Tt.ERROR,label:"Blocked"}]}},{type:xt.SLACK_SEND_MESSAGE,name:"Slack: Send Message",description:"Send a message to a Slack channel or user",icon:Dt[xt.SLACK_SEND_MESSAGE],color:Ct[xt.SLACK_SEND_MESSAGE],category:"slack",defaultConfig:{slackMethod:"api",botToken:"",channel:"",text:"",unfurlLinks:!0,unfurlMedia:!0},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.SLACK_GET_CHANNEL_INFO,name:"Slack: Channel Info",description:"Get information about a Slack channel",icon:Dt[xt.SLACK_GET_CHANNEL_INFO],color:Ct[xt.SLACK_GET_CHANNEL_INFO],category:"slack",defaultConfig:{botToken:"",channel:"",includeLocale:!1,includeNumMembers:!1},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Info"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.SLACK_LIST_CHANNELS,name:"Slack: List Channels",description:"List available Slack channels in the workspace",icon:Dt[xt.SLACK_LIST_CHANNELS],color:Ct[xt.SLACK_LIST_CHANNELS],category:"slack",defaultConfig:{botToken:"",types:"public_channel",excludeArchived:!0,limit:100},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Channels"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.SLACK_ADD_REACTION,name:"Slack: Add Reaction",description:"Add a reaction emoji to a Slack message",icon:Dt[xt.SLACK_ADD_REACTION],color:Ct[xt.SLACK_ADD_REACTION],category:"slack",defaultConfig:{botToken:"",channel:"",timestamp:"",name:"thumbsup"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.SLACK_UPLOAD_FILE,name:"Slack: Upload File",description:"Upload a file to a Slack channel",icon:Dt[xt.SLACK_UPLOAD_FILE],color:Ct[xt.SLACK_UPLOAD_FILE],category:"slack",defaultConfig:{botToken:"",channels:"",filename:"",content:"",title:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.GOOGLE_CALENDAR,name:"Google Calendar",description:"Create, read, update, and delete Google Calendar events",icon:Dt[xt.GOOGLE_CALENDAR],color:Ct[xt.GOOGLE_CALENDAR],category:"google-calendar",defaultConfig:{googleCalendarCredential:"",googleCalendarId:"primary",googleCalendarOperation:"getAll",googleCalendarEventSummary:"",googleCalendarEventDescription:"",googleCalendarEventStart:"",googleCalendarEventEnd:"",googleCalendarEventAttendees:"",googleCalendarEventLocation:"",googleCalendarTimeMin:"",googleCalendarTimeMax:"",googleCalendarRecurrence:"",googleCalendarConferenceData:!1},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.SHOPIFY,name:"Shopify",description:"Manage Shopify products, orders, customers, inventory, and fulfillments via the Admin API",icon:Dt[xt.SHOPIFY],color:Ct[xt.SHOPIFY],category:"shopify",defaultConfig:{resource:"ORDER",operation:pt.LIST,resourceId:"",filters:"",shopDomain:"",accessToken:""},defaultPorts:{inputs:[{id:"input",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.GITLAB,name:"GitLab",description:"Manage GitLab repositories, issues, merge requests, pipelines, and releases",icon:Dt[xt.GITLAB],color:Ct[xt.GITLAB],category:"developer",defaultConfig:{gitlabBaseUrl:"https://gitlab.com",gitlabAccessToken:"",gitlabResource:"issue",gitlabOperation:"getAll",gitlabProjectId:"",gitlabTitle:"",gitlabDescription:"",gitlabLabels:[],gitlabAssigneeIds:[],gitlabSourceBranch:"",gitlabTargetBranch:"",gitlabRef:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.TELEGRAM_SEND,name:"Telegram: Send Message",description:"Send a message to a Telegram chat with typing indicator and optional emoji reaction",icon:Dt[xt.TELEGRAM_SEND],color:Ct[xt.TELEGRAM_SEND],category:"telegram",defaultConfig:{botToken:"",chatId:"",text:"",parseMode:"",replyToMessageId:"",showTyping:!0,reaction:"",disableNotification:!1},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.ZENDESK,name:"Zendesk",description:"Manage Zendesk tickets, users, organizations, and satisfaction ratings",icon:Dt[xt.ZENDESK],color:Ct[xt.ZENDESK],category:"zendesk",defaultConfig:{zendeskResource:"TICKET",zendeskOperation:"LIST",zendeskSubdomain:"",zendeskApiToken:"",zendeskEmail:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.TWILIO_SMS,name:"Twilio: Send SMS",description:"Send an SMS or WhatsApp message via the Twilio API",icon:Dt[xt.TWILIO_SMS],color:Ct[xt.TWILIO_SMS],category:"twilio",defaultConfig:{twilioAccountSid:"",twilioAuthToken:"",twilioFromNumber:"",twilioToNumber:"",twilioMessageBody:"",twilioOperation:"send_sms",twilioStatusCallback:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.TWILIO_VOICE,name:"Twilio: Voice Call",description:"Make a voice call via the Twilio API",icon:Dt[xt.TWILIO_VOICE],color:Ct[xt.TWILIO_VOICE],category:"twilio",defaultConfig:{twilioAccountSid:"",twilioAuthToken:"",twilioFromNumber:"",twilioToNumber:"",twilioOperation:"make_call",twilioVoiceUrl:"",twilioStatusCallback:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.TELEGRAM_BOT,name:"Telegram Bot",description:"Receive messages from a Telegram bot via polling or webhook",icon:Dt[xt.TELEGRAM_BOT],color:Ct[xt.TELEGRAM_BOT],category:"trigger",defaultConfig:{botToken:"",mode:"polling",pollingTimeout:30,allowedUpdates:[],allowedChatIds:"",allowedUserIds:""},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Message"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.SLACK_SOCKET,name:"Slack Socket",description:"Receive events via Slack Socket Mode (WebSocket)",icon:Dt[xt.SLACK_SOCKET],color:Ct[xt.SLACK_SOCKET],category:"trigger",defaultConfig:{appTokenPath:"",botTokenPath:"",eventTypes:[],interactionTypes:[],slashCommands:"",allowedTeamIds:"",allowedChannelIds:"",allowedUserIds:"",ignoreBots:!0},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Event"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.DISCORD_BOT,name:"Discord Bot",description:"Receive events from a Discord bot (Gateway WebSocket)",icon:Dt[xt.DISCORD_BOT],color:Ct[xt.DISCORD_BOT],category:"trigger",defaultConfig:{botTokenPath:"",intents:["GUILDS","GUILD_MESSAGES","MESSAGE_CONTENT"],eventTypes:[],allowedGuildIds:"",allowedChannelIds:"",allowedUserIds:"",ignoreBots:!0},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Event"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.WHATSAPP_WEBHOOK,name:"WhatsApp",description:"Receive messages via WhatsApp Business API",icon:Dt[xt.WHATSAPP_WEBHOOK],color:Ct[xt.WHATSAPP_WEBHOOK],category:"trigger",defaultConfig:{phoneNumberId:"",businessAccountId:"",accessTokenPath:"",appSecretPath:"",verifyToken:"",webhookFields:["messages"],messageTypes:[],allowedSenders:"",ignoreStatusUpdates:!1},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Message"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.CUSTOM_WEBSOCKET,name:"WebSocket Listener",description:"Listen for messages on a custom WebSocket endpoint",icon:Dt[xt.CUSTOM_WEBSOCKET],color:Ct[xt.CUSTOM_WEBSOCKET],category:"trigger",defaultConfig:{url:"",subprotocol:"",authMode:"none",tokenPath:"",username:"",passwordPath:"",headerName:"",headerValuePath:"",queryParamName:"token",queryParamValuePath:"",initialMessage:"",autoReconnect:!0,reconnectDelayMs:5e3,maxReconnectAttempts:0,pingIntervalSec:30,messageFormat:"json",filterExpression:""},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Message"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.RABBITMQ_TRIGGER,name:"RabbitMQ Trigger",description:"Triggers workflow on new messages from a RabbitMQ queue",icon:Dt[xt.RABBITMQ_TRIGGER],color:Ct[xt.RABBITMQ_TRIGGER],category:"trigger",defaultConfig:{connectionUrl:"",queueName:"",exchange:"",routingKey:"#",autoAck:!1,contentType:"application/json",prefetchCount:1},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Message"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.KAFKA,name:"Kafka: Send Message",description:"Produce a message to a Kafka topic",icon:Dt[xt.KAFKA],color:Ct[xt.KAFKA],category:"messaging",defaultConfig:{kafkaBrokers:"localhost:9092",kafkaAcks:"all",kafkaCompressionType:"none"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.KAFKA_TRIGGER,name:"Kafka Trigger",description:"Triggers workflow on new messages from a Kafka topic",icon:Dt[xt.KAFKA_TRIGGER],color:Ct[xt.KAFKA_TRIGGER],category:"messaging",defaultConfig:{kafkaBrokers:"localhost:9092",kafkaConsumerGroup:"nuraly-workflow",kafkaFromBeginning:!1,kafkaSessionTimeout:3e4},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Message"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.CRON,name:"Cron Trigger",description:"Triggers workflow on a scheduled cron expression",icon:Dt[xt.CRON],color:Ct[xt.CRON],category:"trigger",defaultConfig:{cronExpression:"0 * * * *",timezone:"UTC"},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Tick"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.MCP,name:"MCP Server",description:"Connect to MCP server - provides tools to Agent/LLM nodes",icon:Dt[xt.MCP],color:Ct[xt.MCP],category:"trigger",defaultConfig:{serverUrl:"",transportType:"streamable_http"},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Event"}]}},{type:xt.HUBSPOT,name:"HubSpot",description:"Manage contacts, deals, companies, and tickets via HubSpot CRM",icon:Dt[xt.HUBSPOT],color:Ct[xt.HUBSPOT],category:"crm",defaultConfig:{hubspotAccessToken:"",hubspotResource:"contact",hubspotOperation:"getAll",hubspotProperties:{},hubspotFilterGroups:[],hubspotLimit:100,hubspotAssociations:[]},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Result"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.JIRA,name:"Jira",description:"Create, update, and manage Jira issues",icon:Dt[xt.JIRA],color:Ct[xt.JIRA],category:"jira",defaultConfig:{operation:"createIssue",jiraInstanceUrl:"",projectKey:"",issueType:"Task",summary:"",description:"",assignee:"",priority:"Medium",labels:"",jqlQuery:"",transitionId:"",issueKey:"",comment:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Result"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.ELASTICSEARCH,name:"Elasticsearch",description:"Search, index, and manage documents in Elasticsearch",icon:Dt[xt.ELASTICSEARCH],color:Ct[xt.ELASTICSEARCH],category:"integration",defaultConfig:{elasticsearchUrl:"",elasticsearchCredentialPath:"",elasticsearchOperation:"search",elasticsearchIndex:"",elasticsearchDocumentId:"",elasticsearchQueryBody:"",elasticsearchSize:10,elasticsearchFrom:0,elasticsearchRefresh:"false",elasticsearchTimeout:"30s",elasticsearchRouting:"",outputVariable:"elasticsearchResult"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Result"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.CALENDLY_TRIGGER,name:"Calendly Trigger",description:"Triggers workflow when a Calendly event is booked or cancelled",icon:Dt[xt.CALENDLY_TRIGGER],color:Ct[xt.CALENDLY_TRIGGER],category:"trigger",defaultConfig:{events:["invitee.created"],scope:"user",outputVariable:"calendlyEvent"},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Event"},{id:"error",type:Tt.ERROR,label:"Error"}]}},{type:xt.NOTE,name:"Note",description:"Add annotations and comments to your workflow",icon:Dt[xt.NOTE],color:Ct[xt.NOTE],category:"annotation",defaultConfig:{noteContent:"Add your note here...",noteBackgroundColor:"#fef08a",noteTextColor:"#713f12",noteFontSize:"medium",noteShowBorder:!1},defaultPorts:{inputs:[],outputs:[]}},{type:xt.FRAME,name:"Frame",description:"Group related nodes together with a labeled container",icon:Dt[xt.FRAME],color:Ct[xt.FRAME],category:"annotation",defaultConfig:{frameLabel:"Group",frameWidth:400,frameHeight:300,frameBackgroundColor:"rgba(99, 102, 241, 0.05)",frameBorderColor:"rgba(99, 102, 241, 0.3)",frameLabelPosition:"top-left",frameLabelPlacement:"outside",frameShowLabel:!0,frameCollapsed:!1},defaultPorts:{inputs:[],outputs:[]}},{type:wt.AGENT,name:"AI Agent",description:"Autonomous AI agent that can use tools",icon:Dt[wt.AGENT],color:Ct[wt.AGENT],category:"agent",defaultConfig:{agentId:"",maxIterations:10},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"},{id:"retriever",type:Tt.INPUT,label:"Retriever"}],configs:[{id:"llm",type:Tt.CONFIG,label:"LLM"},{id:"prompt",type:Tt.CONFIG,label:"Prompt"},{id:"memory",type:Tt.CONFIG,label:"Memory"},{id:"tools",type:Tt.CONFIG,label:"Tools",multiple:!0},{id:"structured_output",type:Tt.CONFIG,label:"Structured Output"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:wt.TOOL,name:"Tool",description:"A tool that can be used by an agent",icon:Dt[wt.TOOL],color:Ct[wt.TOOL],category:"agent",defaultConfig:{toolName:"",description:"",parameters:[]},defaultPorts:{inputs:[{id:"function",type:Tt.INPUT,label:"Function"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Tool"}]}},{type:wt.MEMORY,name:"Context Memory",description:"Conversation memory for agents - stores and retrieves chat history",icon:Dt[wt.MEMORY],color:Ct[wt.MEMORY],category:"agent",defaultConfig:{cutoffMode:"message",maxMessages:50,maxTokens:4e3,conversationIdExpression:"${input.threadId}"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Memory Config"}]}},{type:wt.CONTEXT_MEMORY,name:"Context Memory (RAG)",description:"RAG-enhanced conversation memory with buffer, semantic, or hybrid modes",icon:Dt[wt.CONTEXT_MEMORY],color:Ct[wt.CONTEXT_MEMORY],category:"agent",defaultConfig:{memoryType:"hybrid",cutoffMode:"message",maxMessages:50,maxTokens:4e3,conversationIdExpression:"${input.threadId}"},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Memory Config"}]}},{type:wt.PROMPT,name:"Prompt",description:"Prompt template for LLM",icon:Dt[wt.PROMPT],color:Ct[wt.PROMPT],category:"agent",defaultConfig:{template:"",variables:[]},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Prompt"}]}},{type:wt.LLM,name:"LLM",description:"Large Language Model call",icon:Dt[wt.LLM],color:Ct[wt.LLM],category:"agent",defaultConfig:{provider:"openai",modelName:"gpt-4",temperature:.7,maxTokens:2048},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"}]}},{type:wt.RETRIEVER,name:"Retriever",description:"Retrieve relevant documents from vector store",icon:Dt[wt.RETRIEVER],color:Ct[wt.RETRIEVER],category:"agent",defaultConfig:{vectorStoreId:"",topK:5},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Query"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Documents"}]}},{type:wt.CHAIN,name:"Chain",description:"Chain multiple LLM calls together",icon:Dt[wt.CHAIN],color:Ct[wt.CHAIN],category:"agent",defaultConfig:{chainType:"sequential"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Output"}]}},{type:wt.ROUTER,name:"Router",description:"Route to different chains based on input",icon:Dt[wt.ROUTER],color:Ct[wt.ROUTER],category:"agent",defaultConfig:{routingExpression:""},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Input"}],outputs:[{id:"route1",type:Tt.OUTPUT,label:"Route 1"},{id:"route2",type:Tt.OUTPUT,label:"Route 2"},{id:"default",type:Tt.CONDITIONAL_DEFAULT,label:"Default"}]}},{type:wt.HUMAN_INPUT,name:"Human Input",description:"Wait for human input in the workflow",icon:Dt[wt.HUMAN_INPUT],color:Ct[wt.HUMAN_INPUT],category:"agent",defaultConfig:{prompt:"",timeout:864e5},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Context"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Response"}]}},{type:wt.OUTPUT_PARSER,name:"Output Parser",description:"Parse LLM output into structured data",icon:Dt[wt.OUTPUT_PARSER],color:Ct[wt.OUTPUT_PARSER],category:"agent",defaultConfig:{parserType:"json",schema:{}},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"Raw Output"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Parsed Data"}]}},{type:wt.STRUCTURED_OUTPUT,name:"Structured Output",description:"Define a JSON schema to enforce structured LLM output",icon:Dt[wt.STRUCTURED_OUTPUT],color:Ct[wt.STRUCTURED_OUTPUT],category:"agent",defaultConfig:{schemaName:"structured_output",strict:!0,schema:{type:"object",properties:{},required:[],additionalProperties:!1}},defaultPorts:{inputs:[],outputs:[{id:"out",type:Tt.OUTPUT,label:"Schema"}]}},{type:kt.TABLE,name:"Table",description:"Define a database table with columns",icon:Dt[kt.TABLE],color:Ct[kt.TABLE],category:"db-tables-views",defaultConfig:{tableName:"",columns:[],primaryKey:""},defaultPorts:{inputs:[],outputs:[{id:"ref",type:Tt.OUTPUT,label:"Reference"}]}},{type:kt.VIEW,name:"View",description:"Create a database view based on queries",icon:Dt[kt.VIEW],color:Ct[kt.VIEW],category:"db-tables-views",defaultConfig:{viewName:"",query:"",materialized:!1},defaultPorts:{inputs:[{id:"source",type:Tt.INPUT,label:"Source Tables"}],outputs:[{id:"ref",type:Tt.OUTPUT,label:"Reference"}]}},{type:kt.INDEX,name:"Index",description:"Create an index on table columns",icon:Dt[kt.INDEX],color:Ct[kt.INDEX],category:"db-indexes-queries",defaultConfig:{indexName:"",indexColumns:[],unique:!1,indexType:"BTREE"},defaultPorts:{inputs:[{id:"table",type:Tt.INPUT,label:"Table"}],outputs:[]}},{type:kt.RELATIONSHIP,name:"Relationship",description:"Define foreign key relationships between tables",icon:Dt[kt.RELATIONSHIP],color:Ct[kt.RELATIONSHIP],category:"db-relations-constraints",defaultConfig:{relationshipType:"ONE_TO_MANY",sourceColumn:"",targetColumn:"",onDelete:"CASCADE",onUpdate:"CASCADE"},defaultPorts:{inputs:[{id:"source",type:Tt.INPUT,label:"Source Table"},{id:"target",type:Tt.INPUT,label:"Target Table"}],outputs:[]}},{type:kt.CONSTRAINT,name:"Constraint",description:"Add constraints (unique, check, foreign_key)",icon:Dt[kt.CONSTRAINT],color:Ct[kt.CONSTRAINT],category:"db-relations-constraints",defaultConfig:{constraintName:"",constraintType:"UNIQUE",constraintColumns:[],checkExpression:""},defaultPorts:{inputs:[{id:"table",type:Tt.INPUT,label:"Table"}],outputs:[]}},{type:kt.QUERY,name:"Query",description:"Define saved queries or stored procedures",icon:Dt[kt.QUERY],color:Ct[kt.QUERY],category:"db-indexes-queries",defaultConfig:{queryName:"",queryText:"",parameters:[]},defaultPorts:{inputs:[{id:"tables",type:Tt.INPUT,label:"Tables"}],outputs:[{id:"result",type:Tt.OUTPUT,label:"Result Schema"}]}},{type:$t.STICKY_NOTE,name:"Sticky Note",description:"Add a sticky note to the whiteboard",icon:Dt[$t.STICKY_NOTE],color:Ct[$t.STICKY_NOTE],category:"wb-notes-text",defaultConfig:{textContent:"",backgroundColor:"#fef08a",textColor:"#713f12",fontSize:14,width:200,height:200},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.TEXT_BLOCK,name:"Text Block",description:"Add a text block to the whiteboard",icon:Dt[$t.TEXT_BLOCK],color:Ct[$t.TEXT_BLOCK],category:"wb-notes-text",defaultConfig:{textContent:"",fontSize:16,fontWeight:"normal",textAlign:"left",width:200,height:50},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.SHAPE_RECTANGLE,name:"Rectangle",description:"Add a rectangle shape",icon:Dt[$t.SHAPE_RECTANGLE],color:Ct[$t.SHAPE_RECTANGLE],category:"wb-shapes",defaultConfig:{width:120,height:120,fillColor:"#3b82f6"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.SHAPE_CIRCLE,name:"Circle",description:"Add a circle shape",icon:Dt[$t.SHAPE_CIRCLE],color:Ct[$t.SHAPE_CIRCLE],category:"wb-shapes",defaultConfig:{width:120,height:120,fillColor:"#8b5cf6"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.SHAPE_DIAMOND,name:"Diamond",description:"Add a diamond shape",icon:Dt[$t.SHAPE_DIAMOND],color:Ct[$t.SHAPE_DIAMOND],category:"wb-shapes",defaultConfig:{width:120,height:120,fillColor:"#f59e0b"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.SHAPE_TRIANGLE,name:"Triangle",description:"Add a triangle shape",icon:Dt[$t.SHAPE_TRIANGLE],color:Ct[$t.SHAPE_TRIANGLE],category:"wb-shapes",defaultConfig:{width:120,height:120,fillColor:"#22c55e"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.SHAPE_ARROW,name:"Arrow",description:"Add an arrow shape",icon:Dt[$t.SHAPE_ARROW],color:Ct[$t.SHAPE_ARROW],category:"wb-shapes",defaultConfig:{width:120,height:60,fillColor:"#6b7280"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.SHAPE_LINE,name:"Line",description:"Add a line shape",icon:Dt[$t.SHAPE_LINE],color:Ct[$t.SHAPE_LINE],category:"wb-shapes",defaultConfig:{width:120,height:4,fillColor:"#6b7280"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.SHAPE_STAR,name:"Star",description:"Add a star shape",icon:Dt[$t.SHAPE_STAR],color:Ct[$t.SHAPE_STAR],category:"wb-shapes",defaultConfig:{width:120,height:120,fillColor:"#f97316"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.SHAPE_HEXAGON,name:"Hexagon",description:"Add a hexagon shape",icon:Dt[$t.SHAPE_HEXAGON],color:Ct[$t.SHAPE_HEXAGON],category:"wb-shapes",defaultConfig:{width:120,height:120,fillColor:"#ec4899"},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.IMAGE,name:"Image",description:"Add an image to the whiteboard",icon:Dt[$t.IMAGE],color:Ct[$t.IMAGE],category:"wb-media",defaultConfig:{imageUrl:"",width:200,height:200},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.DRAWING,name:"Drawing",description:"Add a freehand drawing area",icon:Dt[$t.DRAWING],color:Ct[$t.DRAWING],category:"wb-media",defaultConfig:{pathData:"",width:200,height:200},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.VOTING,name:"Voting",description:"Add a voting element for collaboration",icon:Dt[$t.VOTING],color:Ct[$t.VOTING],category:"wb-media",defaultConfig:{textContent:"Vote",width:200,height:150},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.MERMAID,name:"Mermaid Diagram",description:"Add a Mermaid diagram to the whiteboard",icon:Dt[$t.MERMAID],color:Ct[$t.MERMAID],category:"wb-media",defaultConfig:{textContent:"graph TD\n A[Start] --\x3e B[End]",width:400,height:300},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.ANCHOR,name:"Anchor",description:"Navigation anchor β€” other elements can link here",icon:Dt[$t.ANCHOR],color:Ct[$t.ANCHOR],category:"wb-navigation",defaultConfig:{anchorLabel:"Anchor",width:120,height:48},defaultPorts:{inputs:[],outputs:[]}},{type:$t.FRAME,name:"Frame",description:"Group whiteboard elements together",icon:Dt[$t.FRAME],color:Ct[$t.FRAME],category:"wb-layout",defaultConfig:{frameLabel:"Group",frameWidth:400,frameHeight:300,frameBackgroundColor:"rgba(99, 102, 241, 0.05)",frameBorderColor:"rgba(99, 102, 241, 0.3)",frameLabelPosition:"top-left",frameLabelPlacement:"outside",frameShowLabel:!0,frameCollapsed:!1},defaultPorts:{inputs:[],outputs:[]}},{type:$t.WORKFLOW,name:"Workflow",description:"Embed a workflow on the whiteboard",icon:Dt[$t.WORKFLOW],color:Ct[$t.WORKFLOW],category:"wb-media",defaultConfig:{workflowId:"",workflowName:"Workflow",workflowSteps:[],width:280,height:200},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}},{type:$t.DATABASE,name:"Database Table",description:"Embed a database table on the whiteboard",icon:Dt[$t.DATABASE],color:Ct[$t.DATABASE],category:"wb-media",defaultConfig:{dbTableId:"",dbTableName:"Table",dbTableColumns:[],dbPrimaryKey:"",width:280,height:200},defaultPorts:{inputs:[{id:"in",type:Tt.INPUT,label:"In"}],outputs:[{id:"out",type:Tt.OUTPUT,label:"Out"}]}}],Et=[{id:"trigger",name:"Triggers",icon:"zap",nodeTypes:[xt.START,xt.HTTP_START,xt.CHAT_START,xt.CRON,xt.TELEGRAM_BOT,xt.SLACK_SOCKET,xt.DISCORD_BOT,xt.WHATSAPP_WEBHOOK,xt.CUSTOM_WEBSOCKET,xt.MCP,xt.CALENDLY_TRIGGER],canvasType:Mt.WORKFLOW},{id:"control",name:"Control Flow",icon:"git-branch",nodeTypes:[xt.END,xt.HTTP_END,xt.CONDITION,xt.SWITCH,xt.DELAY,xt.WAIT,xt.PARALLEL,xt.MERGE,xt.LOOP,xt.BREAK,xt.TRY_CATCH],canvasType:Mt.WORKFLOW},{id:"action",name:"Actions",icon:"zap",nodeTypes:[xt.FUNCTION,xt.HTTP,xt.INFORMATION_EXTRACTOR,xt.OCR,xt.CHAT_OUTPUT,xt.SOCIAL_POST,xt.SUB_WORKFLOW,xt.EMAIL,xt.EMAIL_READER,xt.SENDGRID,xt.NOTIFICATION,xt.DOCUMENT_GENERATOR,xt.SUMMARIZATION],canvasType:Mt.WORKFLOW},{id:"data",name:"Data",icon:"database",nodeTypes:[xt.TRANSFORM,xt.DATABASE,xt.ELASTICSEARCH,xt.VARIABLE,xt.DEBUG],canvasType:Mt.WORKFLOW},{id:"web",name:"Web",icon:"globe",nodeTypes:[xt.WEB_SEARCH,xt.WEB_CRAWL],canvasType:Mt.WORKFLOW},{id:"storage",name:"Storage",icon:"hard-drive",nodeTypes:[xt.FILE_STORAGE,xt.GOOGLE_CLOUD_STORAGE,xt.S3],canvasType:Mt.WORKFLOW},{id:"messaging",name:"Messaging",icon:"inbox",nodeTypes:[xt.RABBITMQ_TRIGGER,xt.KAFKA,xt.KAFKA_TRIGGER],canvasType:Mt.WORKFLOW},{id:"rag",name:"RAG",icon:"layers",nodeTypes:[xt.DOCUMENT_LOADER,xt.TEXT_SPLITTER,xt.EMBEDDING,xt.VECTOR_WRITE,xt.VECTOR_SEARCH,xt.CONTEXT_BUILDER,xt.RERANKER],canvasType:Mt.WORKFLOW},{id:"safety",name:"Safety",icon:"shield",nodeTypes:[xt.GUARDRAIL],canvasType:Mt.WORKFLOW},{id:"display",name:"Display",icon:"monitor",nodeTypes:[xt.UI_TABLE],canvasType:Mt.WORKFLOW},{id:"google-calendar",name:"Google Calendar",icon:"calendar",nodeTypes:[xt.GOOGLE_CALENDAR],canvasType:Mt.WORKFLOW},{id:"shopify",name:"Shopify",icon:"shopping-cart",nodeTypes:[xt.SHOPIFY],canvasType:Mt.WORKFLOW},{id:"twilio",name:"Twilio",icon:"phone",nodeTypes:[xt.TWILIO_SMS,xt.TWILIO_VOICE],canvasType:Mt.WORKFLOW},{id:"telegram",name:"Telegram",icon:"send",nodeTypes:[xt.TELEGRAM_SEND],canvasType:Mt.WORKFLOW},{id:"zendesk",name:"Zendesk",icon:"ticket",nodeTypes:[xt.ZENDESK],canvasType:Mt.WORKFLOW},{id:"slack",name:"Slack",icon:"message-square",nodeTypes:[xt.SLACK_SEND_MESSAGE,xt.SLACK_GET_CHANNEL_INFO,xt.SLACK_LIST_CHANNELS,xt.SLACK_ADD_REACTION,xt.SLACK_UPLOAD_FILE],canvasType:Mt.WORKFLOW},{id:"crm",name:"CRM",icon:"users",nodeTypes:[xt.HUBSPOT],canvasType:Mt.WORKFLOW},{id:"jira",name:"Jira",icon:"ticket",nodeTypes:[xt.JIRA],canvasType:Mt.WORKFLOW},{id:"gitlab",name:"GitLab",icon:"git-merge",nodeTypes:[xt.GITLAB],canvasType:Mt.WORKFLOW},{id:"annotation",name:"Annotations",icon:"message-square",nodeTypes:[xt.NOTE,xt.FRAME],canvasType:Mt.WORKFLOW},{id:"agent",name:"AI Agents",icon:"cpu",nodeTypes:[wt.AGENT,wt.LLM,wt.PROMPT,wt.MEMORY,wt.CONTEXT_MEMORY,wt.TOOL,wt.RETRIEVER,wt.CHAIN,wt.ROUTER,wt.HUMAN_INPUT,wt.OUTPUT_PARSER,wt.STRUCTURED_OUTPUT],canvasType:Mt.WORKFLOW},{id:"db-tables-views",name:"Tables & Views",icon:"table",nodeTypes:[kt.TABLE,kt.VIEW],canvasType:Mt.DATABASE},{id:"db-relations-constraints",name:"Relations & Constraints",icon:"git-merge",nodeTypes:[kt.RELATIONSHIP,kt.CONSTRAINT],canvasType:Mt.DATABASE},{id:"db-indexes-queries",name:"Indexes & Queries",icon:"list",nodeTypes:[kt.INDEX,kt.QUERY],canvasType:Mt.DATABASE},{id:"wb-notes-text",name:"Notes & Text",icon:"sticky-note",nodeTypes:[$t.STICKY_NOTE,$t.TEXT_BLOCK],canvasType:Mt.WHITEBOARD},{id:"wb-shapes",name:"Shapes",icon:"square",nodeTypes:[$t.SHAPE_RECTANGLE,$t.SHAPE_CIRCLE,$t.SHAPE_DIAMOND,$t.SHAPE_TRIANGLE,$t.SHAPE_ARROW,$t.SHAPE_LINE,$t.SHAPE_STAR,$t.SHAPE_HEXAGON],canvasType:Mt.WHITEBOARD},{id:"wb-media",name:"Media & Interactive",icon:"image",nodeTypes:[$t.IMAGE,$t.DRAWING,$t.VOTING,$t.MERMAID],canvasType:Mt.WHITEBOARD},{id:"wb-navigation",name:"Navigation",icon:"anchor",nodeTypes:[$t.ANCHOR],canvasType:Mt.WHITEBOARD},{id:"wb-layout",name:"Layout",icon:"frame",nodeTypes:[$t.FRAME],canvasType:Mt.WHITEBOARD}];function At(e){return zt.find(t=>t.type===e)}function Ot(e){return Object.values(wt).includes(e)}function It(e){return Object.values(xt).includes(e)}function jt(e){return Object.values(kt).includes(e)}function Pt(e){return Object.values($t).includes(e)}function Nt(e){return Et.filter(t=>t.canvasType===e)}function Ht(e,t,i){var n;const s=At(e);return s?{id:i||"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}),name:s.name,type:s.type,position:t,configuration:Object.assign({},s.defaultConfig),ports:{inputs:s.defaultPorts.inputs.map(e=>Object.assign({},e)),configs:null===(n=s.defaultPorts.configs)||void 0===n?void 0:n.map(e=>Object.assign({},e)),outputs:s.defaultPorts.outputs.map(e=>Object.assign({},e))},metadata:{icon:s.icon,color:s.color,description:s.description},status:Lt.IDLE,selected:!1}:null}const Rt=[{name:"Yellow",bg:"#fef08a",text:"#713f12"},{name:"Blue",bg:"#bfdbfe",text:"#1e3a5f"},{name:"Green",bg:"#bbf7d0",text:"#14532d"},{name:"Pink",bg:"#fbcfe8",text:"#831843"},{name:"Orange",bg:"#fed7aa",text:"#7c2d12"},{name:"Purple",bg:"#ddd6fe",text:"#4c1d95"},{name:"Gray",bg:"#e5e7eb",text:"#374151"}],Ft=[{name:"Indigo",bg:"rgba(99, 102, 241, 0.05)",border:"rgba(99, 102, 241, 0.3)",solid:"#6366f1"},{name:"Blue",bg:"rgba(59, 130, 246, 0.05)",border:"rgba(59, 130, 246, 0.3)",solid:"#3b82f6"},{name:"Green",bg:"rgba(34, 197, 94, 0.05)",border:"rgba(34, 197, 94, 0.3)",solid:"#22c55e"},{name:"Orange",bg:"rgba(249, 115, 22, 0.05)",border:"rgba(249, 115, 22, 0.3)",solid:"#f97316"},{name:"Red",bg:"rgba(239, 68, 68, 0.05)",border:"rgba(239, 68, 68, 0.3)",solid:"#ef4444"},{name:"Purple",bg:"rgba(168, 85, 247, 0.05)",border:"rgba(168, 85, 247, 0.3)",solid:"#a855f7"},{name:"Gray",bg:"rgba(107, 114, 128, 0.05)",border:"rgba(107, 114, 128, 0.3)",solid:"#6b7280"}];function Bt(e){return e===xt.NOTE||e===xt.FRAME}function Ut(e){return e===xt.FRAME}function Vt(e){return e===xt.NOTE}const qt=new Set([xt.TELEGRAM_BOT,xt.SLACK_SOCKET,xt.DISCORD_BOT,xt.WHATSAPP_WEBHOOK,xt.CUSTOM_WEBSOCKET,xt.RABBITMQ_TRIGGER,xt.CALENDLY_TRIGGER,xt.KAFKA_TRIGGER,xt.CRON]);function Wt(e){return qt.has(e)}
1270
1270
  /**
1271
1271
  * @license
1272
1272
  * Copyright 2017 Google LLC
@@ -3808,7 +3808,6 @@ class Ai{constructor(){this.settled=!1,this.promise=new Promise((e,t)=>{this._re
3808
3808
  justify-content: center;
3809
3809
  background: #e0e0e0;
3810
3810
  transition: background 0.15s;
3811
- z-index: 1;
3812
3811
  }
3813
3812
  .artifact-panel__resize-handle:hover,
3814
3813
  .artifact-panel__resize-handle--active {
@@ -4949,7 +4948,7 @@ class Vn{constructor(){this.listeners=new Map}on(e,t){return this.listeners.has(
4949
4948
  * @license
4950
4949
  * Copyright 2023 Nuraly, Laabidi Aymen
4951
4950
  * SPDX-License-Identifier: MIT
4952
- */var ts=function(e,t,i,n){return new(i||(i=Promise))(function(s,a){function o(e){try{l(n.next(e))}catch(e){a(e)}}function r(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(o,r)}l((n=n.apply(e,t||[])).next())})};class is{constructor(e,t,i,n,s,a,o){this.stateHandler=t,this.messageHandler=i,this.fileHandler=n,this.eventBus=s,this.ui=a,this.plugins=o,this.cancelRequested=!1,this.provider=e}setProvider(e){this.provider=e}stopCurrentProcessing(){this.cancelRequested=!0,this.eventBus.emit("processing:stopped")}hasProvider(){return!!this.provider&&this.provider.isConnected()}processMessage(e){return ts(this,void 0,void 0,function*(){if(this.provider){if(!this.provider.isConnected()){this.log("Provider not connected, attempting to connect...");try{yield this.provider.connect({})}catch(e){this.logError("Failed to auto-connect provider:",e)}if(!this.provider.isConnected())return void this.log("Provider is still not connected after attempt; aborting processing")}try{this.cancelRequested=!1,this.ui.onProcessingStart&&this.ui.onProcessingStart(),this.ui.onTypingStart&&this.ui.onTypingStart(),this.stateHandler.setTyping(!0),this.stateHandler.setProcessing(!0),this.eventBus.emit("processing:start");const t=this.buildContext(),i=this.provider.sendMessage(e.text,t);yield this.processStream(i)}catch(e){throw this.logError("Provider error:",e),this.eventBus.emit("error",e),e}finally{this.ui.onProcessingEnd&&this.ui.onProcessingEnd(),this.ui.onTypingEnd&&this.ui.onTypingEnd(),this.stateHandler.updateState({statusText:void 0}),this.stateHandler.setTyping(!1),this.stateHandler.setProcessing(!1),this.eventBus.emit("processing:end"),this.fileHandler.clearFiles()}}else this.log("No provider configured")})}processStream(e){return ts(this,void 0,void 0,function*(){var t;let i=null;const n=Array.from(this.plugins.values()).filter(e=>Array.isArray(e.htmlTags)),s=[];let a="",o="",r=0;if(n.length>0)for(const e of n)for(const t of e.htmlTags)r=Math.max(r,t.open.length,t.close.length);try{let l=!1;for(;!l&&!this.cancelRequested;){const d=yield e.next();if(l=d.done||!1,l||!d.value)break;const c=String(d.value),h=c.startsWith(o)?c.slice(o.length):c;o=c,a+=h;let p="",u=!1;for(;a.length;){const e=s[s.length-1];if(e){const t=e.buffer+a,n=t.indexOf(e.close);if(-1===n){e.buffer=t,a="";break}const o=t.slice(0,n),r="function"==typeof e.plugin.renderHtmlBlock?e.plugin.renderHtmlBlock(e.name,o):"";if(r)if(e.hasPlaceholder&&i){const e=/<div data-placeholder-id="[^"]*">[\s\S]*?<\/div>/;e.test(i.text)?(i.text=i.text.replace(e,r),this.messageHandler.updateMessage(i.id,{text:i.text})):(p+=r,u=!0)}else p+=r,u=!0;s.pop(),a=t.slice(n+e.close.length);continue}if(0===n.length){p+=a,a="";break}let t=null;for(const e of n)for(const i of e.htmlTags){const n=a.indexOf(i.open);-1!==n&&(!t||n<t.idx)&&(t={idx:n,plugin:e,name:i.name,open:i.open,close:i.close})}if(!t){if(r>0&&a.length>r-1){const e=a.length-(r-1);p+=a.slice(0,e),a=a.slice(e)}break}{p+=a.slice(0,t.idx);let e=!1;if("function"==typeof t.plugin.renderHtmlBlockPlaceholder){const i=t.plugin.renderHtmlBlockPlaceholder(t.name);i&&(p+=i,u=!0,e=!0)}s.push({plugin:t.plugin,name:t.name,open:t.open,close:t.close,buffer:"",hasPlaceholder:e}),a=a.slice(t.idx+t.open.length)}}if(p)for(const e of this.plugins.values()){!(Array.isArray(e.htmlTags)&&e.htmlTags.length>0)&&e.afterReceive&&(p=yield e.afterReceive(p))}const m=u||/<\w+[^>]*>/.test(p);i?p&&(this.messageHandler.appendToBotMessage(i.id,p),i.text+=p,m&&!(null===(t=i.metadata)||void 0===t?void 0:t.renderAsHtml)&&this.messageHandler.updateMessage(i.id,{metadata:Object.assign(Object.assign({},i.metadata||{}),{renderAsHtml:!0})})):(i=this.messageHandler.createBotMessage(p,m?{renderAsHtml:!0}:void 0),this.stateHandler.addMessageToState(i),this.ui.onTypingEnd&&this.ui.onTypingEnd(),this.stateHandler.setTyping(!1))}if(!this.cancelRequested&&i&&(a&&this.messageHandler.appendToBotMessage(i.id,a),s.length>0)){const e=s.map(e=>e.open+e.buffer).join("");e&&this.messageHandler.appendToBotMessage(i.id,e)}}catch(e){throw this.logError("Error processing stream:",e),e}})}buildContext(){const e=this.stateHandler.getState(),t=e.currentThreadId?e.threads.find(t=>t.id===e.currentThreadId):void 0;return console.log("[ProviderService] buildContext state.uploadedFiles:",e.uploadedFiles),{messages:e.messages,metadata:e.metadata,selectedModules:e.selectedModules,currentThread:t,uploadedFiles:e.uploadedFiles}}uploadFileToProvider(e){return ts(this,void 0,void 0,function*(){var t,i;if(!(null===(i=null===(t=this.provider)||void 0===t?void 0:t.capabilities)||void 0===i?void 0:i.fileUpload)||!this.provider.uploadFile)throw new Error("Provider does not support file upload");const n=this.buildContext();return yield this.provider.uploadFile(e,n)})}getCapabilities(){var e;return(null===(e=this.provider)||void 0===e?void 0:e.capabilities)||{streaming:!1,fileUpload:!1,contextWindow:0}}log(e,...t){console.log(`[ProviderService] ${e}`,...t)}logError(e,t){console.error(`[ProviderService] ${e}`,t)}}
4951
+ */var ts=function(e,t,i,n){return new(i||(i=Promise))(function(s,a){function o(e){try{l(n.next(e))}catch(e){a(e)}}function r(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(o,r)}l((n=n.apply(e,t||[])).next())})};class is{constructor(e,t,i,n,s,a,o){this.stateHandler=t,this.messageHandler=i,this.fileHandler=n,this.eventBus=s,this.ui=a,this.plugins=o,this.cancelRequested=!1,this.provider=e}setProvider(e){this.provider=e}stopCurrentProcessing(){this.cancelRequested=!0,this.eventBus.emit("processing:stopped")}hasProvider(){return!!this.provider&&this.provider.isConnected()}processMessage(e){return ts(this,void 0,void 0,function*(){if(this.provider){if(!this.provider.isConnected()){this.log("Provider not connected, attempting to connect...");try{yield this.provider.connect({})}catch(e){this.logError("Failed to auto-connect provider:",e)}if(!this.provider.isConnected())return void this.log("Provider is still not connected after attempt; aborting processing")}try{this.cancelRequested=!1,this.ui.onProcessingStart&&this.ui.onProcessingStart(),this.ui.onTypingStart&&this.ui.onTypingStart(),this.stateHandler.setTyping(!0),this.stateHandler.setProcessing(!0),this.eventBus.emit("processing:start");const t=this.buildContext(),i=this.provider.sendMessage(e.text,t);yield this.processStream(i)}catch(e){throw this.logError("Provider error:",e),this.eventBus.emit("error",e),e}finally{this.ui.onProcessingEnd&&this.ui.onProcessingEnd(),this.ui.onTypingEnd&&this.ui.onTypingEnd(),this.stateHandler.updateState({statusText:void 0}),this.stateHandler.setTyping(!1),this.stateHandler.setProcessing(!1),this.eventBus.emit("processing:end"),this.fileHandler.clearFiles()}}else this.log("No provider configured")})}processStream(e){return ts(this,void 0,void 0,function*(){var t;let i=null;const n=Array.from(this.plugins.values()).filter(e=>Array.isArray(e.htmlTags)),s=[];let a="",o="",r=0;if(n.length>0)for(const e of n)for(const t of e.htmlTags)r=Math.max(r,t.open.length,t.close.length);try{let l=!1;for(;!l&&!this.cancelRequested;){const d=yield e.next();if(l=d.done||!1,l||!d.value)break;const c=String(d.value),h=c.startsWith(o)?c.slice(o.length):c;o=c,a+=h;let p="",u=!1;for(;a.length;){const e=s[s.length-1];if(e){const t=e.buffer+a,n=t.indexOf(e.close);if(-1===n){e.buffer=t,a="";break}const o=t.slice(0,n),r="function"==typeof e.plugin.renderHtmlBlock?e.plugin.renderHtmlBlock(e.name,o):"";if(r){const t=/<div data-placeholder-id="[^"]*">[\s\S]*?<\/div>/;e.hasPlaceholder&&i&&t.test(i.text)?(i.text=i.text.replace(t,r),this.messageHandler.updateMessage(i.id,{text:i.text})):e.hasPlaceholder&&t.test(p)?(p=p.replace(t,r),u=!0):(p+=r,u=!0)}s.pop(),a=t.slice(n+e.close.length);continue}if(0===n.length){p+=a,a="";break}let t=null;for(const e of n)for(const i of e.htmlTags){const n=a.indexOf(i.open);-1!==n&&(!t||n<t.idx)&&(t={idx:n,plugin:e,name:i.name,open:i.open,close:i.close})}if(!t){if(r>0&&a.length>r-1){const e=a.length-(r-1);p+=a.slice(0,e),a=a.slice(e)}break}{p+=a.slice(0,t.idx);let e=!1;if("function"==typeof t.plugin.renderHtmlBlockPlaceholder){const i=t.plugin.renderHtmlBlockPlaceholder(t.name);i&&(p+=i,u=!0,e=!0)}s.push({plugin:t.plugin,name:t.name,open:t.open,close:t.close,buffer:"",hasPlaceholder:e}),a=a.slice(t.idx+t.open.length)}}if(p)for(const e of this.plugins.values()){!(Array.isArray(e.htmlTags)&&e.htmlTags.length>0)&&e.afterReceive&&(p=yield e.afterReceive(p))}const m=u||/<\w+[^>]*>/.test(p);i?p&&(this.messageHandler.appendToBotMessage(i.id,p),i.text+=p,m&&!(null===(t=i.metadata)||void 0===t?void 0:t.renderAsHtml)&&this.messageHandler.updateMessage(i.id,{metadata:Object.assign(Object.assign({},i.metadata||{}),{renderAsHtml:!0})})):(i=this.messageHandler.createBotMessage(p,m?{renderAsHtml:!0}:void 0),this.stateHandler.addMessageToState(i),this.ui.onTypingEnd&&this.ui.onTypingEnd(),this.stateHandler.setTyping(!1))}if(!this.cancelRequested&&i&&(a&&this.messageHandler.appendToBotMessage(i.id,a),s.length>0)){const e=s.map(e=>e.open+e.buffer).join("");e&&this.messageHandler.appendToBotMessage(i.id,e)}}catch(e){throw this.logError("Error processing stream:",e),e}})}buildContext(){const e=this.stateHandler.getState(),t=e.currentThreadId?e.threads.find(t=>t.id===e.currentThreadId):void 0;return console.log("[ProviderService] buildContext state.uploadedFiles:",e.uploadedFiles),{messages:e.messages,metadata:e.metadata,selectedModules:e.selectedModules,currentThread:t,uploadedFiles:e.uploadedFiles}}uploadFileToProvider(e){return ts(this,void 0,void 0,function*(){var t,i;if(!(null===(i=null===(t=this.provider)||void 0===t?void 0:t.capabilities)||void 0===i?void 0:i.fileUpload)||!this.provider.uploadFile)throw new Error("Provider does not support file upload");const n=this.buildContext();return yield this.provider.uploadFile(e,n)})}getCapabilities(){var e;return(null===(e=this.provider)||void 0===e?void 0:e.capabilities)||{streaming:!1,fileUpload:!1,contextWindow:0}}log(e,...t){console.log(`[ProviderService] ${e}`,...t)}logError(e,t){console.error(`[ProviderService] ${e}`,t)}}
4953
4952
  /**
4954
4953
  * @license
4955
4954
  * Copyright 2023 Nuraly, Laabidi Aymen
@@ -7799,7 +7798,7 @@ function Aa(e,t){const i=document.createElement(e);return i.style.cssText=t,i}fu
7799
7798
  * @license
7800
7799
  * Copyright 2024 Nuraly, Laabidi Aymen
7801
7800
  * SPDX-License-Identifier: MIT
7802
- */const Ha=[{label:"Equals",value:"eq"},{label:"Not Equals",value:"neq"},{label:"Greater Than",value:"gt"},{label:"Greater Than or Equal",value:"gte"},{label:"Less Than",value:"lt"},{label:"Less Than or Equal",value:"lte"},{label:"Contains",value:"contains"},{label:"Does Not Contain",value:"notContains"},{label:"Starts With",value:"startsWith"},{label:"Ends With",value:"endsWith"},{label:"Is Empty",value:"isEmpty"},{label:"Is Not Empty",value:"isNotEmpty"},{label:"Matches Regex",value:"regex"}],Ra=new Set(["isEmpty","isNotEmpty"]);function Fa(e,t){var i;const n=e.conditionMode||"visual",s=e.conditionLogic||"and",a=(null===(i=e.conditions)||void 0===i?void 0:i.length)?e.conditions:[{leftValue:"",operator:"eq",rightValue:""}],o=e=>{t("conditions",e)};return q`
7801
+ */const Ha=[{label:"Equals",value:"eq"},{label:"Not Equals",value:"neq"},{label:"Greater Than",value:"gt"},{label:"Greater Than or Equal",value:"gte"},{label:"Less Than",value:"lt"},{label:"Less Than or Equal",value:"lte"},{label:"Contains",value:"contains"},{label:"Does Not Contain",value:"notContains"},{label:"Starts With",value:"startsWith"},{label:"Ends With",value:"endsWith"},{label:"Is Empty",value:"isEmpty"},{label:"Is Not Empty",value:"isNotEmpty"},{label:"Matches Regex",value:"regex"}],Ra=new Set(["isEmpty","isNotEmpty"]);function Fa(e,t){var i;const n=e.conditionMode||"expression",s=e.conditionLogic||"and",a=(null===(i=e.conditions)||void 0===i?void 0:i.length)?e.conditions:[{leftValue:"",operator:"eq",rightValue:""}],o=e=>{t("conditions",e)};return q`
7803
7802
  <div class="config-field">
7804
7803
  <label>Mode</label>
7805
7804
  <nr-select
@@ -7891,7 +7890,7 @@ function Aa(e,t){const i=document.createElement(e);return i.style.cssText=t,i}fu
7891
7890
  <label>Language</label>
7892
7891
  <nr-select
7893
7892
  .value=${e.language||"javascript"}
7894
- .options=${[{label:"JavaScript",value:"javascript"},{label:"JSONata",value:"jsonata"}]}
7893
+ .options=${[{label:"JavaScript",value:"javascript"}]}
7895
7894
  @nr-change=${e=>t("language",e.detail.value)}
7896
7895
  ></nr-select>
7897
7896
  </div>
@@ -10754,9 +10753,11 @@ return function(e,t,i,n,s){const a=i||"{workflowId}",o=e.httpPath||"/webhook",r=
10754
10753
  <label>Duration</label>
10755
10754
  <nr-input
10756
10755
  type="number"
10756
+ min="0"
10757
10757
  value=${String(e.duration||1e3)}
10758
- @nr-input=${e=>t("duration",Number.parseInt(e.detail.value))}
10758
+ @nr-input=${e=>t("duration",Number.parseInt(e.detail.value)||0)}
10759
10759
  ></nr-input>
10760
+ <small class="field-hint">Effective delay is capped at 24 hours. Delays over 10s release the worker until they elapse.</small>
10760
10761
  </div>
10761
10762
  <div class="config-field">
10762
10763
  <label>Unit</label>
@@ -26868,22 +26869,22 @@ var Kh=function(e,t,i,n){return new(i||(i=Promise))(function(s,a){function o(e){
26868
26869
  * @license
26869
26870
  * Copyright 2023 Nuraly, Laabidi Aymen
26870
26871
  * SPDX-License-Identifier: MIT
26871
- */var Sp=function(e,t,i,n){return new(i||(i=Promise))(function(s,a){function o(e){try{l(n.next(e))}catch(e){a(e)}}function r(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(o,r)}l((n=n.apply(e,t||[])).next())})};class Lp extends Mp{constructor(){super(...arguments),this.id="markdown",this.name="Markdown Plugin",this.version="2.0.0",this.htmlTags=[{name:"md",open:"[MD]",close:"[/MD]"}]}onInit(){console.log("[MarkdownPlugin] Initialized")}renderHtmlBlock(e,t){if("md"!==e)return"";const i=this.getStyles();return`${this.getOncePerConversationStyleTag(i)}${gn(t)}`}afterReceive(e){return Sp(this,void 0,void 0,function*(){return e.includes("[MD]")&&e.includes("[/MD]")?e:gn(e)})}getStyles(){return"\n .md-code { background: #f6f8fa; padding: 12px; border-radius: 6px; overflow: auto; }\n .md-inline-code { background: rgba(27,31,35,.05); padding: 0 4px; border-radius: 4px; }\n h1, h2, h3 { margin: 0.6em 0 0.4em; font-weight: 600; }\n p { margin: 0.5em 0; }\n ul { margin: 0.5em 0 0.5em 1.2em; }\n a { color: #0b5fff; text-decoration: underline; }\n @media (prefers-color-scheme: dark) {\n .md-code { background: #0f1115; color: #eaeef2; }\n .md-inline-code { background: rgba(255,255,255,.08); }\n }\n "}}
26872
+ */var Sp=function(e,t,i,n){return new(i||(i=Promise))(function(s,a){function o(e){try{l(n.next(e))}catch(e){a(e)}}function r(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(o,r)}l((n=n.apply(e,t||[])).next())})};class Lp extends Mp{constructor(){super(...arguments),this.id="markdown",this.name="Markdown Plugin",this.version="2.0.0",this.htmlTags=[{name:"md",open:"[MD]",close:"[/MD]"}]}onInit(){console.log("[MarkdownPlugin] Initialized")}renderHtmlBlock(e,t){if("md"!==e)return"";const i=this.getStyles();return`${this.getOncePerConversationStyleTag(i)}${gn(t)}`}afterReceive(e){return Sp(this,void 0,void 0,function*(){return e.includes("[MD]")&&e.includes("[/MD]")?e:gn(e)})}getStyles(){return"\n .md-code { background: #f6f8fa; padding: 12px; border-radius: 6px; overflow: auto; }\n .md-inline-code { background: rgba(27,31,35,.05); padding: 0 4px; border-radius: 4px; }\n h1, h2, h3 { margin: 0.6em 0 0.4em; font-weight: 600; }\n p { margin: 0.5em 0; }\n ul { margin: 0.5em 0 0.5em 1.2em; }\n a { color: #0b5fff; text-decoration: underline; }\n "}}
26872
26873
  /**
26873
26874
  * @license
26874
26875
  * Copyright 2023 Nuraly, Laabidi Aymen
26875
26876
  * SPDX-License-Identifier: MIT
26876
- */var Tp=function(e,t,i,n){return new(i||(i=Promise))(function(s,a){function o(e){try{l(n.next(e))}catch(e){a(e)}}function r(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(o,r)}l((n=n.apply(e,t||[])).next())})};class Yp extends Mp{constructor(){super(...arguments),this.id="flight-card",this.name="Flight Card Plugin",this.version="1.0.0",this.htmlTags=[{name:"flight",open:"[FLIGHT]",close:"[/FLIGHT]"}],this.cssPrefix="nr-flight-card"}renderHtmlBlockPlaceholder(e){if("flight"!==e.toLowerCase())return"";return`<div data-placeholder-id="${`flight-skeleton-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}"><nr-skeleton \n active \n style="min-width: 400px; max-width: 600px; margin: 16px 0;"\n ></nr-skeleton></div>`}onInit(){console.log("[FlightCardPlugin] Initialized")}afterReceive(e){return Tp(this,void 0,void 0,function*(){try{const t=JSON.parse(e);if("flight"===t.type||this.isFlightData(t))return this.renderFlightCard(t)}catch(e){}const t=/\[FLIGHT\]([\s\S]*?)\[\/FLIGHT\]/g;let i,n=e;for(;null!==(i=t.exec(e));)try{const e=JSON.parse(i[1]),t=this.renderFlightCard(e);n=n.replace(i[0],t)}catch(e){console.warn("[FlightCardPlugin] Failed to parse flight data:",e)}return n})}renderHtmlBlock(e,t){if("flight"!==e.toLowerCase())return"";try{const e=JSON.parse(t);return this.renderFlightCard(e)}catch(e){return console.warn("[FlightCardPlugin] renderHtmlBlock parse error:",e),""}}isFlightData(e){return e&&"object"==typeof e&&e.origin&&e.destination&&e.departureTime}renderFlightCard(e){const{origin:t,destination:i,departureTime:n,arrivalTime:s,departureDate:a,arrivalDate:o,terminal:r,gate:l,arrivalTerminal:d,arrivalGate:c,duration:h,flightNumber:p,airline:u,status:m,updated:f,source:b}=e;return`\n ${this.getOncePerConversationStyleTag(this.getStyles())}\n <div class="${this.cssPrefix}" data-nr-flight-card="true">\n <div class="${this.cssPrefix}__header">\n <div class="${this.cssPrefix}__route">\n <span class="${this.cssPrefix}__airport-code">${this.escapeHtml(t)}</span>\n <div class="${this.cssPrefix}__flight-line">\n <svg class="${this.cssPrefix}__plane-icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path d="M21 16v-2l-8-5V3.5c0-.83-.67-1.5-1.5-1.5S10 2.67 10 3.5V9l-8 5v2l8-2.5V19l-2 1.5V22l3.5-1 3.5 1v-1.5L13 19v-5.5l8 2.5z" fill="currentColor"/>\n </svg>\n ${h?`<span class="${this.cssPrefix}__duration">${this.escapeHtml(h)}</span>`:""}\n </div>\n <span class="${this.cssPrefix}__airport-code">${this.escapeHtml(i)}</span>\n </div>\n ${p||u?`\n <div class="${this.cssPrefix}__flight-info">\n ${u?`<span class="${this.cssPrefix}__airline">${this.escapeHtml(u)}</span>`:""}\n ${p?`<span class="${this.cssPrefix}__flight-number">${this.escapeHtml(p)}</span>`:""}\n </div>\n `:""}\n </div>\n\n <div class="${this.cssPrefix}__details">\n <div class="${this.cssPrefix}__section ${this.cssPrefix}__section--departure">\n <div class="${this.cssPrefix}__label">Infos sur l'aΓ©roport</div>\n <div class="${this.cssPrefix}__location">\n <span class="${this.cssPrefix}__city">${this.getCityName(t)}</span>\n <span class="${this.cssPrefix}__date">${a?this.escapeHtml(a):""}</span>\n </div>\n <div class="${this.cssPrefix}__time-group">\n <div class="${this.cssPrefix}__time-label">Heure de dΓ©part prΓ©vue</div>\n <div class="${this.cssPrefix}__time-value">${this.escapeHtml(n)}</div>\n </div>\n <div class="${this.cssPrefix}__terminal-gate">\n ${r?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Terminal</span>\n <span class="${this.cssPrefix}__info-value">${this.escapeHtml(r)}</span>\n </div>\n `:""}\n ${l?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Porte</span>\n <span class="${this.cssPrefix}__info-value">${this.escapeHtml(l)}</span>\n </div>\n `:void 0===l?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Porte</span>\n <span class="${this.cssPrefix}__info-value">-</span>\n </div>\n `:""}\n </div>\n </div>\n\n <div class="${this.cssPrefix}__divider"></div>\n\n <div class="${this.cssPrefix}__section ${this.cssPrefix}__section--arrival">\n <div class="${this.cssPrefix}__label">Infos sur l'aΓ©roport</div>\n <div class="${this.cssPrefix}__location">\n <span class="${this.cssPrefix}__city">${this.getCityName(i)}</span>\n <span class="${this.cssPrefix}__date">${o?this.escapeHtml(o):""}</span>\n </div>\n <div class="${this.cssPrefix}__time-group">\n <div class="${this.cssPrefix}__time-label">Heure d'arrivΓ©e prΓ©vue</div>\n <div class="${this.cssPrefix}__time-value">${this.escapeHtml(s)}</div>\n </div>\n <div class="${this.cssPrefix}__terminal-gate">\n ${d?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Terminal</span>\n <span class="${this.cssPrefix}__info-value">${this.escapeHtml(d)}</span>\n </div>\n `:""}\n ${c?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Porte</span>\n <span class="${this.cssPrefix}__info-value">${this.escapeHtml(c)}</span>\n </div>\n `:void 0===c?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Porte</span>\n <span class="${this.cssPrefix}__info-value">-</span>\n </div>\n `:""}\n </div>\n </div>\n </div>\n\n ${f||b||m?`\n <div class="${this.cssPrefix}__footer">\n ${f?`<span class="${this.cssPrefix}__updated">${this.escapeHtml(f)}</span>`:""}\n ${b?`<span class="${this.cssPrefix}__source">Source : ${this.escapeHtml(b)}</span>`:""}\n ${m?`<span class="${this.cssPrefix}__status">${this.escapeHtml(m)}</span>`:""}\n </div>\n `:""}\n </div>\n `}getCityName(e){return{JED:"Djeddah",TUN:"Tunis",CDG:"Paris",LHR:"London",JFK:"New York",DXB:"Dubai",LAX:"Los Angeles",ORD:"Chicago",ATL:"Atlanta",DFW:"Dallas",DEN:"Denver",SFO:"San Francisco",SEA:"Seattle",LAS:"Las Vegas",MCO:"Orlando",MIA:"Miami",IAH:"Houston",PHX:"Phoenix",BOS:"Boston",MSP:"Minneapolis",DTW:"Detroit",FLL:"Fort Lauderdale",PHL:"Philadelphia",LGA:"New York",BWI:"Baltimore",SLC:"Salt Lake City",SAN:"San Diego",DCA:"Washington",TPA:"Tampa",PDX:"Portland",STL:"St. Louis"}[e.toUpperCase()]||e}escapeHtml(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}getStyles(){return`\n .${this.cssPrefix} {\n background: #ffffff;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n padding: 24px;\n margin: 16px 0;\n font-family: system-ui, -apple-system, sans-serif;\n max-width: 600px;\n }\n\n .${this.cssPrefix}__header {\n margin-bottom: 24px;\n }\n\n .${this.cssPrefix}__route {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 8px;\n }\n\n .${this.cssPrefix}__airport-code {\n font-size: 32px;\n font-weight: 700;\n color: #1a1a1a;\n letter-spacing: 0.5px;\n }\n\n .${this.cssPrefix}__flight-line {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n padding: 0 16px;\n }\n\n .${this.cssPrefix}__flight-line::before {\n content: '';\n position: absolute;\n top: 50%;\n left: 0;\n right: 0;\n height: 2px;\n background: linear-gradient(to right, #e0e0e0 0%, #e0e0e0 100%);\n z-index: 0;\n }\n\n .${this.cssPrefix}__plane-icon {\n width: 24px;\n height: 24px;\n color: #666;\n background: white;\n padding: 4px;\n position: relative;\n z-index: 1;\n transform: rotate(90deg);\n }\n\n .${this.cssPrefix}__duration {\n position: absolute;\n top: -24px;\n background: white;\n padding: 2px 8px;\n font-size: 13px;\n color: #666;\n white-space: nowrap;\n }\n\n .${this.cssPrefix}__flight-info {\n display: flex;\n gap: 8px;\n align-items: center;\n font-size: 14px;\n color: #666;\n }\n\n .${this.cssPrefix}__airline {\n font-weight: 500;\n }\n\n .${this.cssPrefix}__flight-number {\n color: #999;\n }\n\n .${this.cssPrefix}__details {\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n gap: 24px;\n }\n\n .${this.cssPrefix}__divider {\n width: 1px;\n background: #e0e0e0;\n }\n\n .${this.cssPrefix}__section {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .${this.cssPrefix}__label {\n font-size: 12px;\n color: #999;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n font-weight: 500;\n text-decoration: underline;\n }\n\n .${this.cssPrefix}__location {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .${this.cssPrefix}__city {\n font-size: 16px;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n .${this.cssPrefix}__date {\n font-size: 13px;\n color: #666;\n }\n\n .${this.cssPrefix}__time-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .${this.cssPrefix}__time-label {\n font-size: 12px;\n color: #666;\n }\n\n .${this.cssPrefix}__time-value {\n font-size: 24px;\n font-weight: 700;\n color: #2d6a3e;\n }\n\n .${this.cssPrefix}__terminal-gate {\n display: flex;\n gap: 16px;\n }\n\n .${this.cssPrefix}__info-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .${this.cssPrefix}__info-label {\n font-size: 11px;\n color: #999;\n }\n\n .${this.cssPrefix}__info-value {\n font-size: 18px;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n .${this.cssPrefix}__footer {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid #e0e0e0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 12px;\n color: #666;\n gap: 12px;\n }\n\n .${this.cssPrefix}__updated {\n color: #999;\n }\n\n .${this.cssPrefix}__source {\n color: #666;\n }\n\n .${this.cssPrefix}__source::before {\n content: '';\n display: inline-block;\n width: 4px;\n height: 4px;\n background: #666;\n border-radius: 50%;\n margin-right: 8px;\n vertical-align: middle;\n }\n\n .${this.cssPrefix}__status {\n padding: 4px 8px;\n background: #e8f5e9;\n color: #2d6a3e;\n border-radius: 4px;\n font-weight: 500;\n }\n\n /* Share button styling */\n .${this.cssPrefix}__footer button {\n background: none;\n border: none;\n color: #666;\n cursor: pointer;\n padding: 4px;\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .${this.cssPrefix}__footer button:hover {\n color: #1a1a1a;\n }\n\n /* Dark mode support */\n @media (prefers-color-scheme: dark) {\n .${this.cssPrefix} {\n background: #2a2a2a;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n }\n\n .${this.cssPrefix}__airport-code,\n .${this.cssPrefix}__city,\n .${this.cssPrefix}__info-value {\n color: #ffffff;\n }\n\n .${this.cssPrefix}__flight-line::before {\n background: linear-gradient(to right, #444 0%, #444 100%);\n }\n\n .${this.cssPrefix}__plane-icon {\n background: #2a2a2a;\n color: #999;\n }\n\n .${this.cssPrefix}__duration {\n background: #2a2a2a;\n }\n\n .${this.cssPrefix}__divider {\n background: #444;\n }\n\n .${this.cssPrefix}__footer {\n border-top-color: #444;\n }\n }\n\n /* Responsive design */\n @media (max-width: 640px) {\n .${this.cssPrefix} {\n padding: 16px;\n }\n\n .${this.cssPrefix}__details {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .${this.cssPrefix}__divider {\n height: 1px;\n width: 100%;\n }\n\n .${this.cssPrefix}__airport-code {\n font-size: 24px;\n }\n\n .${this.cssPrefix}__time-value {\n font-size: 20px;\n }\n\n .${this.cssPrefix}__footer {\n flex-direction: column;\n align-items: flex-start;\n }\n }\n `}}
26877
+ */var Tp=function(e,t,i,n){return new(i||(i=Promise))(function(s,a){function o(e){try{l(n.next(e))}catch(e){a(e)}}function r(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(o,r)}l((n=n.apply(e,t||[])).next())})};class Yp extends Mp{constructor(){super(...arguments),this.id="flight-card",this.name="Flight Card Plugin",this.version="1.0.0",this.htmlTags=[{name:"flight",open:"[FLIGHT]",close:"[/FLIGHT]"}],this.cssPrefix="nr-flight-card"}renderHtmlBlockPlaceholder(e){if("flight"!==e.toLowerCase())return"";return`<div data-placeholder-id="${`flight-skeleton-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}"><nr-skeleton \n active \n style="min-width: 400px; max-width: 600px; margin: 16px 0;"\n ></nr-skeleton></div>`}onInit(){console.log("[FlightCardPlugin] Initialized")}afterReceive(e){return Tp(this,void 0,void 0,function*(){try{const t=JSON.parse(e);if("flight"===t.type||this.isFlightData(t))return this.renderFlightCard(t)}catch(e){}const t=/\[FLIGHT\]([\s\S]*?)\[\/FLIGHT\]/g;let i,n=e;for(;null!==(i=t.exec(e));)try{const e=JSON.parse(i[1]),t=this.renderFlightCard(e);n=n.replace(i[0],t)}catch(e){console.warn("[FlightCardPlugin] Failed to parse flight data:",e)}return n})}renderHtmlBlock(e,t){if("flight"!==e.toLowerCase())return"";try{const e=JSON.parse(t);return this.renderFlightCard(e)}catch(e){return console.warn("[FlightCardPlugin] renderHtmlBlock parse error:",e),""}}isFlightData(e){return e&&"object"==typeof e&&e.origin&&e.destination&&e.departureTime}renderFlightCard(e){const{origin:t,destination:i,departureTime:n,arrivalTime:s,departureDate:a,arrivalDate:o,terminal:r,gate:l,arrivalTerminal:d,arrivalGate:c,duration:h,flightNumber:p,airline:u,status:m,updated:f,source:b}=e;return`\n ${this.getOncePerConversationStyleTag(this.getStyles())}\n <div class="${this.cssPrefix}" data-nr-flight-card="true">\n <div class="${this.cssPrefix}__header">\n <div class="${this.cssPrefix}__route">\n <span class="${this.cssPrefix}__airport-code">${this.escapeHtml(t)}</span>\n <div class="${this.cssPrefix}__flight-line">\n <svg class="${this.cssPrefix}__plane-icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path d="M21 16v-2l-8-5V3.5c0-.83-.67-1.5-1.5-1.5S10 2.67 10 3.5V9l-8 5v2l8-2.5V19l-2 1.5V22l3.5-1 3.5 1v-1.5L13 19v-5.5l8 2.5z" fill="currentColor"/>\n </svg>\n ${h?`<span class="${this.cssPrefix}__duration">${this.escapeHtml(h)}</span>`:""}\n </div>\n <span class="${this.cssPrefix}__airport-code">${this.escapeHtml(i)}</span>\n </div>\n ${p||u?`\n <div class="${this.cssPrefix}__flight-info">\n ${u?`<span class="${this.cssPrefix}__airline">${this.escapeHtml(u)}</span>`:""}\n ${p?`<span class="${this.cssPrefix}__flight-number">${this.escapeHtml(p)}</span>`:""}\n </div>\n `:""}\n </div>\n\n <div class="${this.cssPrefix}__details">\n <div class="${this.cssPrefix}__section ${this.cssPrefix}__section--departure">\n <div class="${this.cssPrefix}__label">Infos sur l'aΓ©roport</div>\n <div class="${this.cssPrefix}__location">\n <span class="${this.cssPrefix}__city">${this.getCityName(t)}</span>\n <span class="${this.cssPrefix}__date">${a?this.escapeHtml(a):""}</span>\n </div>\n <div class="${this.cssPrefix}__time-group">\n <div class="${this.cssPrefix}__time-label">Heure de dΓ©part prΓ©vue</div>\n <div class="${this.cssPrefix}__time-value">${this.escapeHtml(n)}</div>\n </div>\n <div class="${this.cssPrefix}__terminal-gate">\n ${r?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Terminal</span>\n <span class="${this.cssPrefix}__info-value">${this.escapeHtml(r)}</span>\n </div>\n `:""}\n ${l?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Porte</span>\n <span class="${this.cssPrefix}__info-value">${this.escapeHtml(l)}</span>\n </div>\n `:void 0===l?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Porte</span>\n <span class="${this.cssPrefix}__info-value">-</span>\n </div>\n `:""}\n </div>\n </div>\n\n <div class="${this.cssPrefix}__divider"></div>\n\n <div class="${this.cssPrefix}__section ${this.cssPrefix}__section--arrival">\n <div class="${this.cssPrefix}__label">Infos sur l'aΓ©roport</div>\n <div class="${this.cssPrefix}__location">\n <span class="${this.cssPrefix}__city">${this.getCityName(i)}</span>\n <span class="${this.cssPrefix}__date">${o?this.escapeHtml(o):""}</span>\n </div>\n <div class="${this.cssPrefix}__time-group">\n <div class="${this.cssPrefix}__time-label">Heure d'arrivΓ©e prΓ©vue</div>\n <div class="${this.cssPrefix}__time-value">${this.escapeHtml(s)}</div>\n </div>\n <div class="${this.cssPrefix}__terminal-gate">\n ${d?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Terminal</span>\n <span class="${this.cssPrefix}__info-value">${this.escapeHtml(d)}</span>\n </div>\n `:""}\n ${c?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Porte</span>\n <span class="${this.cssPrefix}__info-value">${this.escapeHtml(c)}</span>\n </div>\n `:void 0===c?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Porte</span>\n <span class="${this.cssPrefix}__info-value">-</span>\n </div>\n `:""}\n </div>\n </div>\n </div>\n\n ${f||b||m?`\n <div class="${this.cssPrefix}__footer">\n ${f?`<span class="${this.cssPrefix}__updated">${this.escapeHtml(f)}</span>`:""}\n ${b?`<span class="${this.cssPrefix}__source">Source : ${this.escapeHtml(b)}</span>`:""}\n ${m?`<span class="${this.cssPrefix}__status">${this.escapeHtml(m)}</span>`:""}\n </div>\n `:""}\n </div>\n `}getCityName(e){return{JED:"Djeddah",TUN:"Tunis",CDG:"Paris",LHR:"London",JFK:"New York",DXB:"Dubai",LAX:"Los Angeles",ORD:"Chicago",ATL:"Atlanta",DFW:"Dallas",DEN:"Denver",SFO:"San Francisco",SEA:"Seattle",LAS:"Las Vegas",MCO:"Orlando",MIA:"Miami",IAH:"Houston",PHX:"Phoenix",BOS:"Boston",MSP:"Minneapolis",DTW:"Detroit",FLL:"Fort Lauderdale",PHL:"Philadelphia",LGA:"New York",BWI:"Baltimore",SLC:"Salt Lake City",SAN:"San Diego",DCA:"Washington",TPA:"Tampa",PDX:"Portland",STL:"St. Louis"}[e.toUpperCase()]||e}escapeHtml(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}getStyles(){return`\n .${this.cssPrefix} {\n background: #ffffff;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n padding: 24px;\n margin: 16px 0;\n font-family: system-ui, -apple-system, sans-serif;\n max-width: 600px;\n }\n\n .${this.cssPrefix}__header {\n margin-bottom: 24px;\n }\n\n .${this.cssPrefix}__route {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 8px;\n }\n\n .${this.cssPrefix}__airport-code {\n font-size: 32px;\n font-weight: 700;\n color: #1a1a1a;\n letter-spacing: 0.5px;\n }\n\n .${this.cssPrefix}__flight-line {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n padding: 0 16px;\n }\n\n .${this.cssPrefix}__flight-line::before {\n content: '';\n position: absolute;\n top: 50%;\n left: 0;\n right: 0;\n height: 2px;\n background: linear-gradient(to right, #e0e0e0 0%, #e0e0e0 100%);\n z-index: 0;\n }\n\n .${this.cssPrefix}__plane-icon {\n width: 24px;\n height: 24px;\n color: #666;\n background: white;\n padding: 4px;\n position: relative;\n z-index: 1;\n transform: rotate(90deg);\n }\n\n .${this.cssPrefix}__duration {\n position: absolute;\n top: -24px;\n background: white;\n padding: 2px 8px;\n font-size: 13px;\n color: #666;\n white-space: nowrap;\n }\n\n .${this.cssPrefix}__flight-info {\n display: flex;\n gap: 8px;\n align-items: center;\n font-size: 14px;\n color: #666;\n }\n\n .${this.cssPrefix}__airline {\n font-weight: 500;\n }\n\n .${this.cssPrefix}__flight-number {\n color: #999;\n }\n\n .${this.cssPrefix}__details {\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n gap: 24px;\n }\n\n .${this.cssPrefix}__divider {\n width: 1px;\n background: #e0e0e0;\n }\n\n .${this.cssPrefix}__section {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .${this.cssPrefix}__label {\n font-size: 12px;\n color: #999;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n font-weight: 500;\n text-decoration: underline;\n }\n\n .${this.cssPrefix}__location {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .${this.cssPrefix}__city {\n font-size: 16px;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n .${this.cssPrefix}__date {\n font-size: 13px;\n color: #666;\n }\n\n .${this.cssPrefix}__time-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .${this.cssPrefix}__time-label {\n font-size: 12px;\n color: #666;\n }\n\n .${this.cssPrefix}__time-value {\n font-size: 24px;\n font-weight: 700;\n color: #2d6a3e;\n }\n\n .${this.cssPrefix}__terminal-gate {\n display: flex;\n gap: 16px;\n }\n\n .${this.cssPrefix}__info-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .${this.cssPrefix}__info-label {\n font-size: 11px;\n color: #999;\n }\n\n .${this.cssPrefix}__info-value {\n font-size: 18px;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n .${this.cssPrefix}__footer {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid #e0e0e0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 12px;\n color: #666;\n gap: 12px;\n }\n\n .${this.cssPrefix}__updated {\n color: #999;\n }\n\n .${this.cssPrefix}__source {\n color: #666;\n }\n\n .${this.cssPrefix}__source::before {\n content: '';\n display: inline-block;\n width: 4px;\n height: 4px;\n background: #666;\n border-radius: 50%;\n margin-right: 8px;\n vertical-align: middle;\n }\n\n .${this.cssPrefix}__status {\n padding: 4px 8px;\n background: #e8f5e9;\n color: #2d6a3e;\n border-radius: 4px;\n font-weight: 500;\n }\n\n /* Share button styling */\n .${this.cssPrefix}__footer button {\n background: none;\n border: none;\n color: #666;\n cursor: pointer;\n padding: 4px;\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .${this.cssPrefix}__footer button:hover {\n color: #1a1a1a;\n }\n\n /* Responsive design */\n @media (max-width: 640px) {\n .${this.cssPrefix} {\n padding: 16px;\n }\n\n .${this.cssPrefix}__details {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .${this.cssPrefix}__divider {\n height: 1px;\n width: 100%;\n }\n\n .${this.cssPrefix}__airport-code {\n font-size: 24px;\n }\n\n .${this.cssPrefix}__time-value {\n font-size: 20px;\n }\n\n .${this.cssPrefix}__footer {\n flex-direction: column;\n align-items: flex-start;\n }\n }\n `}}
26877
26878
  /**
26878
26879
  * @license
26879
26880
  * Copyright 2023 Nuraly, Laabidi Aymen
26880
26881
  * SPDX-License-Identifier: MIT
26881
- */class Cp extends Mp{constructor(){super(...arguments),this.id="print-job-card",this.name="Print Job Card Plugin",this.version="1.0.0",this.htmlTags=[{name:"printjob",open:"[PRINTJOB]",close:"[/PRINTJOB]"}],this.cssPrefix="nr-print-job-card"}renderHtmlBlockPlaceholder(e){if("printjob"!==e.toLowerCase())return"";return`<div data-placeholder-id="${`printjob-skeleton-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}"><nr-skeleton \n active \n avatar\n paragraph='{"rows":3}'\n style="min-width: 350px; max-width: 500px; margin: 8px 0;"\n ></nr-skeleton></div>`}onInit(){console.log("[PrintJobCardPlugin] Initialized")}renderHtmlBlock(e,t){if("printjob"!==e.toLowerCase())return"";try{const e=JSON.parse(t);return this.renderPrintJobCard(e)}catch(e){return console.warn("[PrintJobCardPlugin] renderHtmlBlock parse error:",e),""}}renderPrintJobCard(e){const t=this.getStatusIcon(e.status),i=e.pagesPrinted&&e.totalPages?Math.round(e.pagesPrinted/e.totalPages*100):0;return`\n ${this.getOncePerConversationStyleTag(this.getStyles())}\n <div class="${this.cssPrefix}" data-nr-print-job-card="true">\n <div class="${this.cssPrefix}__header">\n <div class="${this.cssPrefix}__printer-icon">\n πŸ–¨οΈ\n </div>\n <div class="${this.cssPrefix}__header-content">\n <div class="${this.cssPrefix}__title">${this.escapeHtml(e.documentName)}</div>\n <div class="${this.cssPrefix}__subtitle">${this.escapeHtml(e.printerName)}</div>\n </div>\n <div class="${this.cssPrefix}__job-id">#${this.escapeHtml(e.jobId)}</div>\n </div>\n\n <div class="${this.cssPrefix}__status-row">\n <span class="${this.cssPrefix}__status-badge ${this.cssPrefix}__status-badge--${e.status}">\n ${t} ${this.formatStatus(e.status)}\n </span>\n ${e.priority&&"normal"!==e.priority?`\n <span class="${this.cssPrefix}__priority-badge ${this.cssPrefix}__priority-badge--${e.priority}">\n ${"high"===e.priority?"⚑":"πŸ”½"} ${this.capitalize(e.priority)} Priority\n </span>\n `:""}\n </div>\n\n ${"printing"===e.status&&e.pagesPrinted&&e.totalPages?`\n <div class="${this.cssPrefix}__progress">\n <div class="${this.cssPrefix}__progress-bar">\n <div class="${this.cssPrefix}__progress-fill" style="width: ${i}%"></div>\n </div>\n <div class="${this.cssPrefix}__progress-text">\n ${e.pagesPrinted} / ${e.totalPages} pages (${i}%)\n </div>\n </div>\n `:""}\n\n ${"error"===e.status&&e.errorMessage?`\n <div class="${this.cssPrefix}__error-message">\n ⚠️ ${this.escapeHtml(e.errorMessage)}\n </div>\n `:""}\n\n <div class="${this.cssPrefix}__details">\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Pages:</span>\n <span class="${this.cssPrefix}__detail-value">${e.totalPages}</span>\n </div>\n ${e.copies&&e.copies>1?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Copies:</span>\n <span class="${this.cssPrefix}__detail-value">${e.copies}</span>\n </div>\n `:""}\n ${e.colorMode?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Color Mode:</span>\n <span class="${this.cssPrefix}__detail-value">${this.capitalize(e.colorMode)}</span>\n </div>\n `:""}\n ${e.paperSize?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Paper Size:</span>\n <span class="${this.cssPrefix}__detail-value">${e.paperSize}</span>\n </div>\n `:""}\n ${e.userName?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">User:</span>\n <span class="${this.cssPrefix}__detail-value">${this.escapeHtml(e.userName)}</span>\n </div>\n `:""}\n ${e.estimatedTime&&"printing"===e.status?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Est. Time:</span>\n <span class="${this.cssPrefix}__detail-value">${e.estimatedTime}</span>\n </div>\n `:""}\n </div>\n\n <div class="${this.cssPrefix}__footer">\n <span class="${this.cssPrefix}__timestamp">\n πŸ“… Submitted: ${this.formatTimestamp(e.submittedAt)}\n </span>\n ${e.completedAt?`\n <span class="${this.cssPrefix}__timestamp">\n βœ… Completed: ${this.formatTimestamp(e.completedAt)}\n </span>\n `:""}\n </div>\n </div>\n `}getStatusColor(e){return{queued:"#ffa726",printing:"#42a5f5",completed:"#66bb6a",paused:"#ffb74d",error:"#ef5350",cancelled:"#78909c"}[e]||"#999"}getStatusIcon(e){return{queued:"⏳",printing:"πŸ”„",completed:"βœ…",paused:"⏸️",error:"❌",cancelled:"🚫"}[e]||"πŸ“„"}formatStatus(e){return e.charAt(0).toUpperCase()+e.slice(1)}capitalize(e){return e.charAt(0).toUpperCase()+e.slice(1)}formatTimestamp(e){try{return new Date(e).toLocaleString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch(t){return e}}escapeHtml(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}getStyles(){return`\n .${this.cssPrefix} {\n background: #ffffff;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n padding: 20px;\n margin: 12px 0;\n font-family: system-ui, -apple-system, sans-serif;\n max-width: 500px;\n border-left: 4px solid #42a5f5;\n }\n\n .${this.cssPrefix}__header {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n margin-bottom: 16px;\n }\n\n .${this.cssPrefix}__printer-icon {\n font-size: 32px;\n line-height: 1;\n flex-shrink: 0;\n }\n\n .${this.cssPrefix}__header-content {\n flex: 1;\n min-width: 0;\n }\n\n .${this.cssPrefix}__title {\n font-size: 16px;\n font-weight: 600;\n color: #1a1a1a;\n margin-bottom: 4px;\n word-break: break-word;\n }\n\n .${this.cssPrefix}__subtitle {\n font-size: 13px;\n color: #666;\n }\n\n .${this.cssPrefix}__job-id {\n font-size: 12px;\n color: #999;\n font-family: 'Monaco', 'Courier New', monospace;\n background: #f5f5f5;\n padding: 4px 8px;\n border-radius: 4px;\n flex-shrink: 0;\n }\n\n .${this.cssPrefix}__status-row {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n margin-bottom: 16px;\n }\n\n .${this.cssPrefix}__status-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n }\n\n .${this.cssPrefix}__status-badge--queued {\n background: #fff3e0;\n color: #e65100;\n }\n\n .${this.cssPrefix}__status-badge--printing {\n background: #e3f2fd;\n color: #0d47a1;\n }\n\n .${this.cssPrefix}__status-badge--completed {\n background: #e8f5e9;\n color: #1b5e20;\n }\n\n .${this.cssPrefix}__status-badge--paused {\n background: #fff3e0;\n color: #e65100;\n }\n\n .${this.cssPrefix}__status-badge--error {\n background: #ffebee;\n color: #b71c1c;\n }\n\n .${this.cssPrefix}__status-badge--cancelled {\n background: #f5f5f5;\n color: #616161;\n }\n\n .${this.cssPrefix}__priority-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n }\n\n .${this.cssPrefix}__priority-badge--high {\n background: #fff3e0;\n color: #e65100;\n }\n\n .${this.cssPrefix}__priority-badge--low {\n background: #f5f5f5;\n color: #666;\n }\n\n .${this.cssPrefix}__progress {\n margin-bottom: 16px;\n }\n\n .${this.cssPrefix}__progress-bar {\n width: 100%;\n height: 8px;\n background: #e0e0e0;\n border-radius: 4px;\n overflow: hidden;\n margin-bottom: 8px;\n }\n\n .${this.cssPrefix}__progress-fill {\n height: 100%;\n background: linear-gradient(90deg, #42a5f5 0%, #1976d2 100%);\n transition: width 0.3s ease;\n border-radius: 4px;\n }\n\n .${this.cssPrefix}__progress-text {\n font-size: 13px;\n color: #666;\n text-align: center;\n }\n\n .${this.cssPrefix}__error-message {\n background: #ffebee;\n border-left: 3px solid #ef5350;\n padding: 12px;\n margin-bottom: 16px;\n border-radius: 4px;\n font-size: 13px;\n color: #b71c1c;\n }\n\n .${this.cssPrefix}__details {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n margin-bottom: 16px;\n padding: 16px;\n background: #f9f9f9;\n border-radius: 8px;\n }\n\n .${this.cssPrefix}__detail-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n }\n\n .${this.cssPrefix}__detail-label {\n font-size: 12px;\n color: #666;\n }\n\n .${this.cssPrefix}__detail-value {\n font-size: 13px;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n .${this.cssPrefix}__footer {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding-top: 12px;\n border-top: 1px solid #e0e0e0;\n }\n\n .${this.cssPrefix}__timestamp {\n font-size: 11px;\n color: #999;\n }\n\n /* Dark mode support */\n @media (prefers-color-scheme: dark) {\n .${this.cssPrefix} {\n background: #2a2a2a;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n border-left-color: #42a5f5;\n }\n\n .${this.cssPrefix}__title,\n .${this.cssPrefix}__detail-value {\n color: #ffffff;\n }\n\n .${this.cssPrefix}__subtitle,\n .${this.cssPrefix}__detail-label {\n color: #b0b0b0;\n }\n\n .${this.cssPrefix}__job-id {\n background: #3a3a3a;\n color: #b0b0b0;\n }\n\n .${this.cssPrefix}__details {\n background: #333;\n }\n\n .${this.cssPrefix}__progress-bar {\n background: #444;\n }\n\n .${this.cssPrefix}__footer {\n border-top-color: #444;\n }\n }\n\n /* Responsive design */\n @media (max-width: 480px) {\n .${this.cssPrefix} {\n padding: 16px;\n }\n\n .${this.cssPrefix}__details {\n grid-template-columns: 1fr;\n }\n\n .${this.cssPrefix}__header {\n flex-wrap: wrap;\n }\n\n .${this.cssPrefix}__job-id {\n order: -1;\n width: 100%;\n }\n }\n `}}
26882
+ */class Cp extends Mp{constructor(){super(...arguments),this.id="print-job-card",this.name="Print Job Card Plugin",this.version="1.0.0",this.htmlTags=[{name:"printjob",open:"[PRINTJOB]",close:"[/PRINTJOB]"}],this.cssPrefix="nr-print-job-card"}renderHtmlBlockPlaceholder(e){if("printjob"!==e.toLowerCase())return"";return`<div data-placeholder-id="${`printjob-skeleton-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}"><nr-skeleton \n active \n avatar\n paragraph='{"rows":3}'\n style="min-width: 350px; max-width: 500px; margin: 8px 0;"\n ></nr-skeleton></div>`}onInit(){console.log("[PrintJobCardPlugin] Initialized")}renderHtmlBlock(e,t){if("printjob"!==e.toLowerCase())return"";try{const e=JSON.parse(t);return this.renderPrintJobCard(e)}catch(e){return console.warn("[PrintJobCardPlugin] renderHtmlBlock parse error:",e),""}}renderPrintJobCard(e){const t=this.getStatusIcon(e.status),i=e.pagesPrinted&&e.totalPages?Math.round(e.pagesPrinted/e.totalPages*100):0;return`\n ${this.getOncePerConversationStyleTag(this.getStyles())}\n <div class="${this.cssPrefix}" data-nr-print-job-card="true">\n <div class="${this.cssPrefix}__header">\n <div class="${this.cssPrefix}__printer-icon">\n πŸ–¨οΈ\n </div>\n <div class="${this.cssPrefix}__header-content">\n <div class="${this.cssPrefix}__title">${this.escapeHtml(e.documentName)}</div>\n <div class="${this.cssPrefix}__subtitle">${this.escapeHtml(e.printerName)}</div>\n </div>\n <div class="${this.cssPrefix}__job-id">#${this.escapeHtml(e.jobId)}</div>\n </div>\n\n <div class="${this.cssPrefix}__status-row">\n <span class="${this.cssPrefix}__status-badge ${this.cssPrefix}__status-badge--${e.status}">\n ${t} ${this.formatStatus(e.status)}\n </span>\n ${e.priority&&"normal"!==e.priority?`\n <span class="${this.cssPrefix}__priority-badge ${this.cssPrefix}__priority-badge--${e.priority}">\n ${"high"===e.priority?"⚑":"πŸ”½"} ${this.capitalize(e.priority)} Priority\n </span>\n `:""}\n </div>\n\n ${"printing"===e.status&&e.pagesPrinted&&e.totalPages?`\n <div class="${this.cssPrefix}__progress">\n <div class="${this.cssPrefix}__progress-bar">\n <div class="${this.cssPrefix}__progress-fill" style="width: ${i}%"></div>\n </div>\n <div class="${this.cssPrefix}__progress-text">\n ${e.pagesPrinted} / ${e.totalPages} pages (${i}%)\n </div>\n </div>\n `:""}\n\n ${"error"===e.status&&e.errorMessage?`\n <div class="${this.cssPrefix}__error-message">\n ⚠️ ${this.escapeHtml(e.errorMessage)}\n </div>\n `:""}\n\n <div class="${this.cssPrefix}__details">\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Pages:</span>\n <span class="${this.cssPrefix}__detail-value">${e.totalPages}</span>\n </div>\n ${e.copies&&e.copies>1?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Copies:</span>\n <span class="${this.cssPrefix}__detail-value">${e.copies}</span>\n </div>\n `:""}\n ${e.colorMode?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Color Mode:</span>\n <span class="${this.cssPrefix}__detail-value">${this.capitalize(e.colorMode)}</span>\n </div>\n `:""}\n ${e.paperSize?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Paper Size:</span>\n <span class="${this.cssPrefix}__detail-value">${e.paperSize}</span>\n </div>\n `:""}\n ${e.userName?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">User:</span>\n <span class="${this.cssPrefix}__detail-value">${this.escapeHtml(e.userName)}</span>\n </div>\n `:""}\n ${e.estimatedTime&&"printing"===e.status?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Est. Time:</span>\n <span class="${this.cssPrefix}__detail-value">${e.estimatedTime}</span>\n </div>\n `:""}\n </div>\n\n <div class="${this.cssPrefix}__footer">\n <span class="${this.cssPrefix}__timestamp">\n πŸ“… Submitted: ${this.formatTimestamp(e.submittedAt)}\n </span>\n ${e.completedAt?`\n <span class="${this.cssPrefix}__timestamp">\n βœ… Completed: ${this.formatTimestamp(e.completedAt)}\n </span>\n `:""}\n </div>\n </div>\n `}getStatusColor(e){return{queued:"#ffa726",printing:"#42a5f5",completed:"#66bb6a",paused:"#ffb74d",error:"#ef5350",cancelled:"#78909c"}[e]||"#999"}getStatusIcon(e){return{queued:"⏳",printing:"πŸ”„",completed:"βœ…",paused:"⏸️",error:"❌",cancelled:"🚫"}[e]||"πŸ“„"}formatStatus(e){return e.charAt(0).toUpperCase()+e.slice(1)}capitalize(e){return e.charAt(0).toUpperCase()+e.slice(1)}formatTimestamp(e){try{return new Date(e).toLocaleString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch(t){return e}}escapeHtml(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}getStyles(){return`\n .${this.cssPrefix} {\n background: #ffffff;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n padding: 20px;\n margin: 12px 0;\n font-family: system-ui, -apple-system, sans-serif;\n max-width: 500px;\n border-left: 4px solid #42a5f5;\n }\n\n .${this.cssPrefix}__header {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n margin-bottom: 16px;\n }\n\n .${this.cssPrefix}__printer-icon {\n font-size: 32px;\n line-height: 1;\n flex-shrink: 0;\n }\n\n .${this.cssPrefix}__header-content {\n flex: 1;\n min-width: 0;\n }\n\n .${this.cssPrefix}__title {\n font-size: 16px;\n font-weight: 600;\n color: #1a1a1a;\n margin-bottom: 4px;\n word-break: break-word;\n }\n\n .${this.cssPrefix}__subtitle {\n font-size: 13px;\n color: #666;\n }\n\n .${this.cssPrefix}__job-id {\n font-size: 12px;\n color: #999;\n font-family: 'Monaco', 'Courier New', monospace;\n background: #f5f5f5;\n padding: 4px 8px;\n border-radius: 4px;\n flex-shrink: 0;\n }\n\n .${this.cssPrefix}__status-row {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n margin-bottom: 16px;\n }\n\n .${this.cssPrefix}__status-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n }\n\n .${this.cssPrefix}__status-badge--queued {\n background: #fff3e0;\n color: #e65100;\n }\n\n .${this.cssPrefix}__status-badge--printing {\n background: #e3f2fd;\n color: #0d47a1;\n }\n\n .${this.cssPrefix}__status-badge--completed {\n background: #e8f5e9;\n color: #1b5e20;\n }\n\n .${this.cssPrefix}__status-badge--paused {\n background: #fff3e0;\n color: #e65100;\n }\n\n .${this.cssPrefix}__status-badge--error {\n background: #ffebee;\n color: #b71c1c;\n }\n\n .${this.cssPrefix}__status-badge--cancelled {\n background: #f5f5f5;\n color: #616161;\n }\n\n .${this.cssPrefix}__priority-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n }\n\n .${this.cssPrefix}__priority-badge--high {\n background: #fff3e0;\n color: #e65100;\n }\n\n .${this.cssPrefix}__priority-badge--low {\n background: #f5f5f5;\n color: #666;\n }\n\n .${this.cssPrefix}__progress {\n margin-bottom: 16px;\n }\n\n .${this.cssPrefix}__progress-bar {\n width: 100%;\n height: 8px;\n background: #e0e0e0;\n border-radius: 4px;\n overflow: hidden;\n margin-bottom: 8px;\n }\n\n .${this.cssPrefix}__progress-fill {\n height: 100%;\n background: linear-gradient(90deg, #42a5f5 0%, #1976d2 100%);\n transition: width 0.3s ease;\n border-radius: 4px;\n }\n\n .${this.cssPrefix}__progress-text {\n font-size: 13px;\n color: #666;\n text-align: center;\n }\n\n .${this.cssPrefix}__error-message {\n background: #ffebee;\n border-left: 3px solid #ef5350;\n padding: 12px;\n margin-bottom: 16px;\n border-radius: 4px;\n font-size: 13px;\n color: #b71c1c;\n }\n\n .${this.cssPrefix}__details {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n margin-bottom: 16px;\n padding: 16px;\n background: #f9f9f9;\n border-radius: 8px;\n }\n\n .${this.cssPrefix}__detail-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n }\n\n .${this.cssPrefix}__detail-label {\n font-size: 12px;\n color: #666;\n }\n\n .${this.cssPrefix}__detail-value {\n font-size: 13px;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n .${this.cssPrefix}__footer {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding-top: 12px;\n border-top: 1px solid #e0e0e0;\n }\n\n .${this.cssPrefix}__timestamp {\n font-size: 11px;\n color: #999;\n }\n\n /* Responsive design */\n @media (max-width: 480px) {\n .${this.cssPrefix} {\n padding: 16px;\n }\n\n .${this.cssPrefix}__details {\n grid-template-columns: 1fr;\n }\n\n .${this.cssPrefix}__header {\n flex-wrap: wrap;\n }\n\n .${this.cssPrefix}__job-id {\n order: -1;\n width: 100%;\n }\n }\n `}}
26882
26883
  /**
26883
26884
  * @license
26884
26885
  * Copyright 2023 Nuraly, Laabidi Aymen
26885
26886
  * SPDX-License-Identifier: MIT
26886
- */var Dp=function(e,t,i,n){return new(i||(i=Promise))(function(s,a){function o(e){try{l(n.next(e))}catch(e){a(e)}}function r(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(o,r)}l((n=n.apply(e,t||[])).next())})};class zp extends Mp{constructor(){super(...arguments),this.id="artifact",this.name="Artifact Plugin",this.version="1.0.0",this.artifacts=new Map}onInit(e){this.controller=e,e&&"function"==typeof e.on&&e.on("processing:end",()=>{var t,i;try{const n=[...(null===(t=e.getMessages)||void 0===t?void 0:t.call(e))||[]].reverse().find(e=>e.sender===Xi.Bot);n&&!(null===(i=n.metadata)||void 0===i?void 0:i.hasArtifacts)&&this.processMessage(n)}catch(e){}})}onMessageReceived(e){return Dp(this,void 0,void 0,function*(){e.sender===Xi.Bot&&this.processMessage(e)})}processMessage(e){var t;if(null===(t=e.metadata)||void 0===t?void 0:t.hasArtifacts)return void this.rebuildArtifactsFromMetadata(e);const i=e.text;if(!i)return;const n=/```(\w*)\n([\s\S]*?)```/g;let s;const a=[];let o=0;for(;null!==(s=n.exec(i));){const t=(s[1]||"text").toLowerCase(),i=s[2],n=`artifact-${e.id}-${o}`,r={id:n,language:t,content:i,title:this.extractTitle(i,t,o),messageId:e.id,index:o};a.push(r),this.artifacts.set(n,r),o++}if(0===a.length)return;let r=i,l=0;r=r.replaceAll(n,()=>`\0ARTIFACT_CARD_${a[l++].id}\0`),r=gn(r);for(const e of a)r=r.replace(`\0ARTIFACT_CARD_${e.id}\0`,this.renderPlaceholderCard(e));const d=this.getOncePerConversationStyleTag(this.getStyles());this.controller&&"function"==typeof this.controller.updateMessage&&this.controller.updateMessage(e.id,{text:d+r,metadata:Object.assign(Object.assign({},e.metadata),{renderAsHtml:!0,hasArtifacts:!0,artifactIds:a.map(e=>e.id),artifactOriginalText:i})})}rebuildArtifactsFromMetadata(e){var t,i;const n=null===(t=e.metadata)||void 0===t?void 0:t.artifactIds;if(!(null==n?void 0:n.length))return;if(n.every(e=>this.artifacts.has(e)))return;const s=null===(i=e.metadata)||void 0===i?void 0:i.artifactOriginalText;if(!s)return;const a=/```(\w*)\n([\s\S]*?)```/g;let o,r=0;for(;null!==(o=a.exec(s));){const t=(o[1]||"text").toLowerCase(),i=o[2],n=`artifact-${e.id}-${r}`,s=this.extractTitle(i,t,r);this.artifacts.set(n,{id:n,language:t,content:i,title:s,messageId:e.id,index:r}),r++}}getArtifact(e){return this.artifacts.get(e)}getAllArtifacts(){return Array.from(this.artifacts.values())}getArtifactsForMessage(e){return Array.from(this.artifacts.values()).filter(t=>t.messageId===e)}extractTitle(e,t,i){const n=e.trimStart().split("\n")[0]||"",s=[/^\/\/\s*(.+)/,/^#\s*(.+)/,/^--\s*(.+)/,/^\/\*\s*(.*?)\*\//,/^<!--\s*(.*?)-->/];for(const e of s){const t=e.exec(n);if(null==t?void 0:t[1]){const e=t[1].trim();if(e.length>0&&e.length<=60)return e}}return`${bn(t)} Snippet ${i+1}`}renderPlaceholderCard(e){const t=bn(e.language),i=mn(e.title);return`<div class="nr-artifact-card" data-artifact-id="${e.id}" role="button" tabindex="0" aria-label="View ${i}">\n <nr-icon name="code" size="small" class="nr-artifact-card__icon"></nr-icon>\n <span class="nr-artifact-card__info">\n <span class="nr-artifact-card__title">${i}</span>\n <nr-tag size="small" class="nr-artifact-card__lang">${t}</nr-tag>\n </span>\n <nr-icon name="chevron-right" size="small" class="nr-artifact-card__chevron"></nr-icon>\n</div>`}getStyles(){return"\n .nr-artifact-card {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n margin: 8px 0;\n background: #f6f8fa;\n border: 1px solid #d0d7de;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s ease, border-color 0.15s ease;\n user-select: none;\n max-width: 100%;\n }\n .nr-artifact-card:hover {\n background: #eaeef2;\n border-color: #8b949e;\n }\n .nr-artifact-card:focus-visible {\n outline: 2px solid #0b5fff;\n outline-offset: 2px;\n }\n .nr-artifact-card__icon {\n flex-shrink: 0;\n color: #57606a;\n }\n .nr-artifact-card__info {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n flex: 1;\n }\n .nr-artifact-card__title {\n font-size: 13px;\n font-weight: 500;\n color: #1f2937;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 1.3;\n }\n .nr-artifact-card__lang {\n align-self: flex-start;\n }\n .nr-artifact-card__chevron {\n flex-shrink: 0;\n color: #6c757d;\n }\n @media (prefers-color-scheme: dark) {\n .nr-artifact-card {\n background: #161b22;\n border-color: #30363d;\n }\n .nr-artifact-card:hover {\n background: #1c2128;\n border-color: #484f58;\n }\n .nr-artifact-card__icon {\n color: #c9d1d9;\n }\n .nr-artifact-card__title {\n color: #c9d1d9;\n }\n .nr-artifact-card__chevron {\n color: #8b949e;\n }\n }\n "}}
26887
+ */var Dp=function(e,t,i,n){return new(i||(i=Promise))(function(s,a){function o(e){try{l(n.next(e))}catch(e){a(e)}}function r(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(o,r)}l((n=n.apply(e,t||[])).next())})};class zp extends Mp{constructor(){super(...arguments),this.id="artifact",this.name="Artifact Plugin",this.version="1.0.0",this.artifacts=new Map}onInit(e){this.controller=e,e&&"function"==typeof e.on&&e.on("processing:end",()=>{var t,i;try{const n=[...(null===(t=e.getMessages)||void 0===t?void 0:t.call(e))||[]].reverse().find(e=>e.sender===Xi.Bot);n&&!(null===(i=n.metadata)||void 0===i?void 0:i.hasArtifacts)&&this.processMessage(n)}catch(e){}})}onMessageReceived(e){return Dp(this,void 0,void 0,function*(){e.sender===Xi.Bot&&this.processMessage(e)})}processMessage(e){var t;if(null===(t=e.metadata)||void 0===t?void 0:t.hasArtifacts)return void this.rebuildArtifactsFromMetadata(e);const i=e.text;if(!i)return;const n=/```(\w*)\n([\s\S]*?)```/g;let s;const a=[];let o=0;for(;null!==(s=n.exec(i));){const t=(s[1]||"text").toLowerCase(),i=s[2],n=`artifact-${e.id}-${o}`,r={id:n,language:t,content:i,title:this.extractTitle(i,t,o),messageId:e.id,index:o};a.push(r),this.artifacts.set(n,r),o++}if(0===a.length)return;let r=i,l=0;r=r.replaceAll(n,()=>`\0ARTIFACT_CARD_${a[l++].id}\0`),r=gn(r);for(const e of a)r=r.replace(`\0ARTIFACT_CARD_${e.id}\0`,this.renderPlaceholderCard(e));const d=this.getOncePerConversationStyleTag(this.getStyles());this.controller&&"function"==typeof this.controller.updateMessage&&this.controller.updateMessage(e.id,{text:d+r,metadata:Object.assign(Object.assign({},e.metadata),{renderAsHtml:!0,hasArtifacts:!0,artifactIds:a.map(e=>e.id),artifactOriginalText:i})})}rebuildArtifactsFromMetadata(e){var t,i;const n=null===(t=e.metadata)||void 0===t?void 0:t.artifactIds;if(!(null==n?void 0:n.length))return;if(n.every(e=>this.artifacts.has(e)))return;const s=null===(i=e.metadata)||void 0===i?void 0:i.artifactOriginalText;if(!s)return;const a=/```(\w*)\n([\s\S]*?)```/g;let o,r=0;for(;null!==(o=a.exec(s));){const t=(o[1]||"text").toLowerCase(),i=o[2],n=`artifact-${e.id}-${r}`,s=this.extractTitle(i,t,r);this.artifacts.set(n,{id:n,language:t,content:i,title:s,messageId:e.id,index:r}),r++}}getArtifact(e){return this.artifacts.get(e)}getAllArtifacts(){return Array.from(this.artifacts.values())}getArtifactsForMessage(e){return Array.from(this.artifacts.values()).filter(t=>t.messageId===e)}extractTitle(e,t,i){const n=e.trimStart().split("\n")[0]||"",s=[/^\/\/\s*(.+)/,/^#\s*(.+)/,/^--\s*(.+)/,/^\/\*\s*(.*?)\*\//,/^<!--\s*(.*?)-->/];for(const e of s){const t=e.exec(n);if(null==t?void 0:t[1]){const e=t[1].trim();if(e.length>0&&e.length<=60)return e}}return`${bn(t)} Snippet ${i+1}`}renderPlaceholderCard(e){const t=bn(e.language),i=mn(e.title);return`<div class="nr-artifact-card" data-artifact-id="${e.id}" role="button" tabindex="0" aria-label="View ${i}">\n <nr-icon name="code" size="small" class="nr-artifact-card__icon"></nr-icon>\n <span class="nr-artifact-card__info">\n <span class="nr-artifact-card__title">${i}</span>\n <nr-tag size="small" class="nr-artifact-card__lang">${t}</nr-tag>\n </span>\n <nr-icon name="chevron-right" size="small" class="nr-artifact-card__chevron"></nr-icon>\n</div>`}getStyles(){return"\n .nr-artifact-card {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n margin: 8px 0;\n background: #f6f8fa;\n border: 1px solid #d0d7de;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s ease, border-color 0.15s ease;\n user-select: none;\n max-width: 100%;\n }\n .nr-artifact-card:hover {\n background: #eaeef2;\n border-color: #8b949e;\n }\n .nr-artifact-card:focus-visible {\n outline: 2px solid #0b5fff;\n outline-offset: 2px;\n }\n .nr-artifact-card__icon {\n flex-shrink: 0;\n color: #57606a;\n }\n .nr-artifact-card__info {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n flex: 1;\n }\n .nr-artifact-card__title {\n font-size: 13px;\n font-weight: 500;\n color: #1f2937;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 1.3;\n }\n .nr-artifact-card__lang {\n align-self: flex-start;\n }\n .nr-artifact-card__chevron {\n flex-shrink: 0;\n color: #6c757d;\n }\n "}}
26887
26888
  /**
26888
26889
  * @license
26889
26890
  * Copyright 2023 Nuraly, Laabidi Aymen
@@ -26898,7 +26899,7 @@ var Kh=function(e,t,i,n){return new(i||(i=Promise))(function(s,a){function o(e){
26898
26899
  * @license
26899
26900
  * Copyright 2023 Nuraly, Laabidi Aymen
26900
26901
  * SPDX-License-Identifier: MIT
26901
- */var Np=function(e,t,i,n){return new(i||(i=Promise))(function(s,a){function o(e){try{l(n.next(e))}catch(e){a(e)}}function r(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(o,r)}l((n=n.apply(e,t||[])).next())})};class Hp extends Mp{constructor(){super(...arguments),this.id="selection-card",this.name="Selection Card Plugin",this.version="1.0.0",this.htmlTags=[{name:"selection",open:"[SELECTION]",close:"[/SELECTION]"}],this.cssPrefix="nr-selection-card"}renderHtmlBlockPlaceholder(e){if("selection"!==e.toLowerCase())return"";return`<div data-placeholder-id="${`selection-skeleton-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}"><nr-skeleton\n active\n style="min-width: 300px; max-width: 500px; height: 80px; margin: 16px 0;"\n ></nr-skeleton></div>`}onInit(){console.log("[SelectionCardPlugin] Initialized")}afterReceive(e){return Np(this,void 0,void 0,function*(){try{const t=JSON.parse(e);if("selection"===t.type||this.isSelectionData(t))return this.renderSelectionCard(t)}catch(e){}const t=/\[SELECTION\]([\s\S]*?)\[\/SELECTION\]/g;let i,n=e;for(;null!==(i=t.exec(e));)try{const e=JSON.parse(i[1]),t=this.renderSelectionCard(e);n=n.replace(i[0],t)}catch(e){console.warn("[SelectionCardPlugin] Failed to parse selection data:",e)}return n})}renderHtmlBlock(e,t){if("selection"!==e.toLowerCase())return"";try{const e=JSON.parse(t);return this.renderSelectionCard(e)}catch(e){return console.warn("[SelectionCardPlugin] renderHtmlBlock parse error:",e),""}}isSelectionData(e){return e&&"object"==typeof e&&Array.isArray(e.options)&&e.options.length>0&&e.options[0].label&&e.options[0].value}renderSelectionCard(e){const{title:t,options:i,columns:n=1}=e,s=this.getOncePerConversationStyleTag(this.getStyles()),a=i.map(e=>{const t=e.disabled?'aria-disabled="true"':"",i=e.disabled?`${this.cssPrefix}__option--disabled`:"",n=e.disabled?"-1":"0",s=e.disabled?"":`data-selection-value="${this.escapeHtml(e.value)}"`;return`\n <div class="${this.cssPrefix}__option ${i}"\n ${s}\n role="button"\n tabindex="${n}"\n ${t}>\n ${e.icon?`<nr-icon class="${this.cssPrefix}__option-icon" name="${this.escapeHtml(e.icon)}" size="small"></nr-icon>`:""}\n <div class="${this.cssPrefix}__option-content">\n <span class="${this.cssPrefix}__option-label">${this.escapeHtml(e.label)}</span>\n ${e.description?`<span class="${this.cssPrefix}__option-description">${this.escapeHtml(e.description)}</span>`:""}\n </div>\n </div>\n `}).join("");return`\n ${s}\n <div class="${this.cssPrefix}" data-nr-selection-card="true">\n ${t?`<div class="${this.cssPrefix}__title">${this.escapeHtml(t)}</div>`:""}\n <div class="${this.cssPrefix}__grid ${this.cssPrefix}__grid--cols-${n}">\n ${a}\n </div>\n </div>\n `}escapeHtml(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}getStyles(){return`\n .${this.cssPrefix} {\n margin: 12px 0;\n max-width: 500px;\n font-family: system-ui, -apple-system, sans-serif;\n }\n\n .${this.cssPrefix}__title {\n font-size: 14px;\n font-weight: 600;\n color: #1a1a1a;\n margin-bottom: 10px;\n }\n\n .${this.cssPrefix}__grid {\n display: grid;\n gap: 8px;\n }\n\n .${this.cssPrefix}__grid--cols-1 {\n grid-template-columns: 1fr;\n }\n\n .${this.cssPrefix}__grid--cols-2 {\n grid-template-columns: 1fr 1fr;\n }\n\n .${this.cssPrefix}__grid--cols-3 {\n grid-template-columns: 1fr 1fr 1fr;\n }\n\n .${this.cssPrefix}__option {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n background: #ffffff;\n border: 1px solid #e0e0e0;\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.15s ease;\n user-select: none;\n -webkit-user-select: none;\n }\n\n .${this.cssPrefix}__option:hover {\n border-color: #4f8cff;\n background: #f0f6ff;\n box-shadow: 0 1px 4px rgba(79, 140, 255, 0.12);\n }\n\n .${this.cssPrefix}__option:focus-visible {\n outline: 2px solid #4f8cff;\n outline-offset: 2px;\n }\n\n .${this.cssPrefix}__option:active:not([aria-disabled="true"]) {\n transform: scale(0.98);\n background: #dfeaff;\n }\n\n .${this.cssPrefix}__option--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n }\n\n .${this.cssPrefix}__option-icon {\n flex-shrink: 0;\n color: #555;\n }\n\n .${this.cssPrefix}__option-content {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n }\n\n .${this.cssPrefix}__option-label {\n font-size: 14px;\n font-weight: 500;\n color: #1a1a1a;\n line-height: 1.3;\n }\n\n .${this.cssPrefix}__option-description {\n font-size: 12px;\n color: #666;\n line-height: 1.3;\n }\n\n /* Dark mode support */\n @media (prefers-color-scheme: dark) {\n .${this.cssPrefix}__title {\n color: #ffffff;\n }\n\n .${this.cssPrefix}__option {\n background: #2a2a2a;\n border-color: #444;\n }\n\n .${this.cssPrefix}__option:hover {\n border-color: #5a9aff;\n background: #1e2d44;\n box-shadow: 0 1px 4px rgba(90, 154, 255, 0.15);\n }\n\n .${this.cssPrefix}__option:active:not([aria-disabled="true"]) {\n background: #1a2638;\n }\n\n .${this.cssPrefix}__option-icon {\n color: #aaa;\n }\n\n .${this.cssPrefix}__option-label {\n color: #ffffff;\n }\n\n .${this.cssPrefix}__option-description {\n color: #999;\n }\n }\n\n /* Responsive: force single column on mobile */\n @media (max-width: 480px) {\n .${this.cssPrefix}__grid--cols-2,\n .${this.cssPrefix}__grid--cols-3 {\n grid-template-columns: 1fr;\n }\n }\n `}}
26902
+ */var Np=function(e,t,i,n){return new(i||(i=Promise))(function(s,a){function o(e){try{l(n.next(e))}catch(e){a(e)}}function r(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(o,r)}l((n=n.apply(e,t||[])).next())})};class Hp extends Mp{constructor(){super(...arguments),this.id="selection-card",this.name="Selection Card Plugin",this.version="1.0.0",this.htmlTags=[{name:"selection",open:"[SELECTION]",close:"[/SELECTION]"}],this.cssPrefix="nr-selection-card"}renderHtmlBlockPlaceholder(e){if("selection"!==e.toLowerCase())return"";return`<div data-placeholder-id="${`selection-skeleton-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}"><nr-skeleton\n active\n style="min-width: 300px; max-width: 500px; height: 80px; margin: 16px 0;"\n ></nr-skeleton></div>`}onInit(){console.log("[SelectionCardPlugin] Initialized")}afterReceive(e){return Np(this,void 0,void 0,function*(){try{const t=JSON.parse(e);if("selection"===t.type||this.isSelectionData(t))return this.renderSelectionCard(t)}catch(e){}const t=/\[SELECTION\]([\s\S]*?)\[\/SELECTION\]/g;let i,n=e;for(;null!==(i=t.exec(e));)try{const e=JSON.parse(i[1]),t=this.renderSelectionCard(e);n=n.replace(i[0],t)}catch(e){console.warn("[SelectionCardPlugin] Failed to parse selection data:",e)}return n})}renderHtmlBlock(e,t){if("selection"!==e.toLowerCase())return"";try{const e=JSON.parse(t);return this.renderSelectionCard(e)}catch(e){return console.warn("[SelectionCardPlugin] renderHtmlBlock parse error:",e),""}}isSelectionData(e){return e&&"object"==typeof e&&Array.isArray(e.options)&&e.options.length>0&&e.options[0].label&&e.options[0].value}renderSelectionCard(e){const{title:t,options:i,columns:n=1}=e,s=this.getOncePerConversationStyleTag(this.getStyles()),a=i.map(e=>{const t=e.disabled?'aria-disabled="true"':"",i=e.disabled?`${this.cssPrefix}__option--disabled`:"",n=e.disabled?"-1":"0",s=e.disabled?"":`data-selection-value="${this.escapeHtml(e.value)}"`;return`\n <div class="${this.cssPrefix}__option ${i}"\n ${s}\n role="button"\n tabindex="${n}"\n ${t}>\n ${e.icon?`<nr-icon class="${this.cssPrefix}__option-icon" name="${this.escapeHtml(e.icon)}" size="small"></nr-icon>`:""}\n <div class="${this.cssPrefix}__option-content">\n <span class="${this.cssPrefix}__option-label">${this.escapeHtml(e.label)}</span>\n ${e.description?`<span class="${this.cssPrefix}__option-description">${this.escapeHtml(e.description)}</span>`:""}\n </div>\n </div>\n `}).join("");return`\n ${s}\n <div class="${this.cssPrefix}" data-nr-selection-card="true">\n ${t?`<div class="${this.cssPrefix}__title">${this.escapeHtml(t)}</div>`:""}\n <div class="${this.cssPrefix}__grid ${this.cssPrefix}__grid--cols-${n}">\n ${a}\n </div>\n </div>\n `}escapeHtml(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}getStyles(){return`\n .${this.cssPrefix} {\n margin: 12px 0;\n max-width: 500px;\n font-family: system-ui, -apple-system, sans-serif;\n }\n\n .${this.cssPrefix}__title {\n font-size: 14px;\n font-weight: 600;\n color: #1a1a1a;\n margin-bottom: 10px;\n }\n\n .${this.cssPrefix}__grid {\n display: grid;\n gap: 8px;\n }\n\n .${this.cssPrefix}__grid--cols-1 {\n grid-template-columns: 1fr;\n }\n\n .${this.cssPrefix}__grid--cols-2 {\n grid-template-columns: 1fr 1fr;\n }\n\n .${this.cssPrefix}__grid--cols-3 {\n grid-template-columns: 1fr 1fr 1fr;\n }\n\n .${this.cssPrefix}__option {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n background: #ffffff;\n border: 1px solid #e0e0e0;\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.15s ease;\n user-select: none;\n -webkit-user-select: none;\n }\n\n .${this.cssPrefix}__option:hover {\n border-color: #4f8cff;\n background: #f0f6ff;\n box-shadow: 0 1px 4px rgba(79, 140, 255, 0.12);\n }\n\n .${this.cssPrefix}__option:focus-visible {\n outline: 2px solid #4f8cff;\n outline-offset: 2px;\n }\n\n .${this.cssPrefix}__option:active:not([aria-disabled="true"]) {\n transform: scale(0.98);\n background: #dfeaff;\n }\n\n .${this.cssPrefix}__option--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n }\n\n .${this.cssPrefix}__option-icon {\n flex-shrink: 0;\n color: #555;\n }\n\n .${this.cssPrefix}__option-content {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n }\n\n .${this.cssPrefix}__option-label {\n font-size: 14px;\n font-weight: 500;\n color: #1a1a1a;\n line-height: 1.3;\n }\n\n .${this.cssPrefix}__option-description {\n font-size: 12px;\n color: #666;\n line-height: 1.3;\n }\n\n /* Responsive: force single column on mobile */\n @media (max-width: 480px) {\n .${this.cssPrefix}__grid--cols-2,\n .${this.cssPrefix}__grid--cols-3 {\n grid-template-columns: 1fr;\n }\n }\n `}}
26902
26903
  /**
26903
26904
  * @license
26904
26905
  * Copyright 2023 Nuraly, Laabidi Aymen
@@ -28528,7 +28529,7 @@ var vv=function(e,t,i,n){for(var s,a=arguments.length,o=a<3?t:null===n?n=Object.
28528
28529
 
28529
28530
  .dropdown__panel {
28530
28531
  position: fixed;
28531
- z-index: 9999;
28532
+ z-index: var(--nuraly-dropdown-z-index, 9999);
28532
28533
  background: #ffffff;
28533
28534
  border: 1px solid #e0e0e0;
28534
28535
  border-radius: 6px;
@@ -28845,7 +28846,7 @@ var vv=function(e,t,i,n){for(var s,a=arguments.length,o=a<3?t:null===n?n=Object.
28845
28846
  .dropdown__submenu {
28846
28847
  position: absolute;
28847
28848
  top: 0;
28848
- z-index: calc(9999 + 1);
28849
+ z-index: calc(var(--nuraly-dropdown-z-index, 9999) + 1);
28849
28850
  background: #ffffff;
28850
28851
  border: 1px solid #e0e0e0;
28851
28852
  border-radius: 6px;