next-workflow-builder 0.7.6 → 0.7.7

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.
@@ -1,17 +1,17 @@
1
- "use client";import{a as qo,b as jo,c as Jo}from"../chunk-NI6U7PHC.js";import{i as gr}from"../chunk-VUDOAZ3W.js";import{a as oi,b as yr}from"../chunk-3YVRTDK2.js";import{a as N}from"../chunk-6UXAINJQ.js";import{d as Js,h as Rt,i as Ys,k as Xs,l as Qs,m as ge,n as to,o as Zs,p as ei,v as ti,w as Aa,y as Ko}from"../chunk-QRG4O4PE.js";import{AuthView as Af}from"@daveyplate/better-auth-ui";import{useParams as If}from"next/navigation";import{useAtom as Ut,useAtomValue as pf,useSetAtom as At}from"jotai";import{ChevronLeft as ff,ChevronRight as gf}from"lucide-react";import yf from"next/link";import{useSearchParams as vf}from"next/navigation";import{useCallback as yo,useEffect as It,useRef as Fo,useState as us}from"react";import{toast as ms}from"sonner";var Ia=class extends Error{status;constructor(t,o){super(o),this.status=t,this.name="ApiError"}};async function ye(e,t){let o=await fetch(e,{...t,headers:{"Content-Type":"application/json",...t?.headers}});if(!o.ok){let n=await o.json().catch(()=>({error:"Unknown error"}));throw new Ia(o.status,n.error||"Request failed")}return o.json()}function Bc(e,t){e?.name&&(t.currentData.name=e.name)}function Vc(e,t){e?.description&&(t.currentData.description=e.description)}function Hc(e,t){e?.node&&(t.currentData.nodes=[...t.currentData.nodes,e.node])}function Gc(e,t){e?.edge&&(t.currentData.edges=[...t.currentData.edges,e.edge])}function $c(e,t){e?.nodeId&&(t.currentData.nodes=t.currentData.nodes.filter(o=>o.id!==e.nodeId),t.currentData.edges=t.currentData.edges.filter(o=>o.source!==e.nodeId&&o.target!==e.nodeId))}function _c(e,t){e?.edgeId&&(t.currentData.edges=t.currentData.edges.filter(o=>o.id!==e.edgeId))}function Uc(e,t){e?.nodeId&&e.updates&&(t.currentData.nodes=t.currentData.nodes.map(o=>o.id===e.nodeId?{...o,...e.updates?.position?{position:e.updates.position}:{},...e.updates?.data?{data:{...o.data,...e.updates.data}}:{}}:o))}var Kc={setName:Bc,setDescription:Vc,addNode:Hc,addEdge:Gc,removeNode:$c,removeEdge:_c,updateNode:Uc};function qc(e,t){if(!e?.op)return;let o=Kc[e.op];o&&o(e,t)}function jc(e,t,o){if(e.trim())try{let n=JSON.parse(e);if(n.type==="operation"&&n.operation)qc(n.operation,o),t({...o.currentData});else if(n.type==="error")throw console.error("[API Client] Error:",n.error),new Error(n.error)}catch(n){console.error("[API Client] Failed to parse JSONL line:",n)}}function Jc(e,t,o,n){n.buffer+=t.decode(e,{stream:!0});let r=n.buffer.split(`
2
- `);n.buffer=r.pop()||"";for(let i of r)jc(i,o,n)}var Yc={generate:(e,t)=>ye("/api/ai/generate",{method:"POST",body:JSON.stringify({prompt:e,existingWorkflow:t})}),generateStream:async(e,t,o)=>{let n=await fetch("/api/ai/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:e,existingWorkflow:o})});if(!n.ok)throw new Error(`HTTP error! status: ${n.status}`);if(!n.body)throw new Error("No response body");let r=n.body.getReader(),i=new TextDecoder,a={buffer:"",currentData:o?{nodes:o.nodes||[],edges:o.edges||[],name:o.name}:{nodes:[],edges:[]}};try{for(;;){let{done:l,value:s}=await r.read();if(l)break;Jc(s,i,t,a)}return a.currentData}finally{r.releaseLock()}}},Xc={getAll:e=>ye(`/api/integrations${e?`?type=${e}`:""}`),get:e=>ye(`/api/integrations/${e}`),create:e=>ye("/api/integrations",{method:"POST",body:JSON.stringify(e)}),update:(e,t)=>ye(`/api/integrations/${e}`,{method:"PUT",body:JSON.stringify(t)}),delete:e=>ye(`/api/integrations/${e}`,{method:"DELETE"}),testConnection:e=>ye(`/api/integrations/${e}/test`,{method:"POST"}),testCredentials:e=>ye("/api/integrations/test",{method:"POST",body:JSON.stringify(e)})},Qc={get:()=>ye("/api/user"),update:e=>ye("/api/user",{method:"PATCH",body:JSON.stringify(e)})},vr={getAll:()=>ye("/api/workflows"),getById:e=>ye(`/api/workflows/${e}`),create:e=>ye("/api/workflows/create",{method:"POST",body:JSON.stringify(e)}),update:(e,t)=>ye(`/api/workflows/${e}`,{method:"PATCH",body:JSON.stringify(t)}),delete:e=>ye(`/api/workflows/${e}`,{method:"DELETE"}),duplicate:e=>ye(`/api/workflows/${e}/duplicate`,{method:"POST"}),getCurrent:()=>ye("/api/workflows/current"),saveCurrent:(e,t)=>ye("/api/workflows/current",{method:"POST",body:JSON.stringify({nodes:e,edges:t})}),execute:(e,t={})=>ye(`/api/workflow/${e}/execute`,{method:"POST",body:JSON.stringify({input:t})}),triggerWebhook:(e,t={})=>ye(`/api/workflows/${e}/webhook`,{method:"POST",body:JSON.stringify(t)}),getCode:e=>ye(`/api/workflows/${e}/code`),getExecutions:e=>ye(`/api/workflows/${e}/executions`),deleteExecutions:e=>ye(`/api/workflows/${e}/executions`,{method:"DELETE"}),getExecutionLogs:e=>ye(`/api/workflows/executions/${e}/logs`),getExecutionStatus:e=>ye(`/api/workflows/executions/${e}/status`),cancelExecution:e=>ye(`/api/workflows/executions/${e}/cancel`,{method:"POST"}),download:e=>ye(`/api/workflows/${e}/download`),autoSaveCurrent:(()=>{let e=null,t=2e3;return(o,n)=>{e&&clearTimeout(e),e=setTimeout(()=>{vr.saveCurrent(o,n).catch(r=>{console.error("Auto-save failed:",r)})},t)}})(),autoSaveWorkflow:(()=>{let e=null,t=2e3;return(o,n,r=!0)=>{if(!r)return vr.update(o,n);e&&clearTimeout(e),e=setTimeout(()=>{vr.update(o,n).catch(i=>{console.error("Auto-save failed:",i)})},t)}})()},Zc={getStatus:()=>ye("/api/ai-gateway/status"),getTeams:()=>ye("/api/ai-gateway/teams"),consent:(e,t)=>ye("/api/ai-gateway/consent",{method:"POST",body:JSON.stringify({teamId:e,teamName:t})}),revokeConsent:()=>ye("/api/ai-gateway/consent",{method:"DELETE"})},j={ai:Yc,aiGateway:Zc,integration:Xc,user:Qc,workflow:vr};import{atom as Hn}from"jotai";var ft=Hn([]),hr=Hn(!1),uh=Hn(null),Ot=Hn(0),ni=Hn(e=>{let t=e(ft);return new Set(t.map(o=>o.id))});import{applyEdgeChanges as eu,applyNodeChanges as tu}from"@xyflow/react";import{atom as ie}from"jotai";var re=ie([]),ce=ie([]),Ce=ie(null),_e=ie(null),si=ie(!1),ri=ie(!1),kt=ie(!1),Ue=ie(null),gt=ie(""),br=ie("private"),no=ie(!0),Yo=ie({snapToGrid:!0,edgeStyle:"smoothstep"}),Ht=ie("properties"),wr=ie(!1),ro=ie(null),xr=ie(null),Nr=ie(!1),kr=ie(!1),ii=ie(!1),Cr=ie(!1),Tr=ie(new Set),oo=ie(null),Sr=ie(!1),Xo=ie({}),Pa=null,ou=1e3,Lt=ie(null,async(e,t,o)=>{let n=e(Ue),r=e(re),i=e(ce);if(!n)return;let a=async()=>{try{await j.workflow.update(n,{nodes:r,edges:i}),t(rt,!1)}catch(l){console.error("Autosave failed:",l)}};o?.immediate?await a():(Pa&&clearTimeout(Pa),Pa=setTimeout(a,ou))}),li=ie(null,(e,t,o)=>{let n=e(re),r=o.filter(d=>d.type==="remove"?n.find(u=>u.id===d.id)?.data.type!=="trigger":!0),i=tu(r,n);t(re,i);let a=i.find(d=>d.selected);if(a){t(Ce,a.id),t(_e,null);let d=e(oo);d&&d!==a.id&&t(oo,null)}else if(e(Ce)){let d=e(Ce);i.find(u=>u.id===d)||t(Ce,null),t(oo,null)}if(r.some(d=>d.type==="remove")){t(Lt,{immediate:!0});return}r.some(d=>d.type==="position"&&d.dragging===!1)&&t(Lt)}),di=ie(null,(e,t,o)=>{let n=e(ce),r=eu(o,n);t(ce,r);let i=r.find(l=>l.selected);if(i)t(_e,i.id),t(Ce,null);else if(e(_e)){let l=e(_e);r.find(d=>d.id===l)||t(_e,null)}o.some(l=>l.type==="remove")&&t(Lt,{immediate:!0})}),Qo=ie(null,(e,t,o)=>{let n=e(re),r=e(ce),i=e(nt);t(nt,[...i,{nodes:n,edges:r}]),t(Vt,[]);let a=n.map(d=>({...d,selected:!1})),l={...o,selected:!0},s=[...a,l];t(re,s),t(Ce,o.id),o.data.type==="action"&&!o.data.config?.actionType&&t(oo,o.id),t(rt,!0),t(Lt,{immediate:!0})}),ao=ie(null,(e,t,{id:o,data:n})=>{let r=e(re),a=r.find(c=>c.id===o)?.data.label,l=n.label,s=l!==void 0&&a!==l,d=r.map(c=>{if(c.id===o)return{...c,data:{...c.data,...n}};if(s&&a){let u=ci(c.data.config||{},o,a,l);if(u!==c.data.config)return{...c,data:{...c.data,config:u}}}return c});t(re,d),n.status||(t(rt,!0),t(Lt))});function ci(e,t,o,n){let r=!1,i={};for(let[a,l]of Object.entries(e))if(typeof l=="string"){let s=new RegExp(`\\{\\{@${ai(t)}:${ai(o)}(\\.[^}]+)?\\}\\}`,"g"),d=l.replace(s,(c,u)=>(r=!0,`{{@${t}:${n}${u||""}}}`));i[a]=d}else if(typeof l=="object"&&l!==null&&!Array.isArray(l)){let s=ci(l,t,o,n);s!==l&&(r=!0),i[a]=s}else i[a]=l;return r?i:e}function ai(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var so=ie(null,(e,t,o)=>{let n=e(re);if(n.find(d=>d.id===o)?.data.type==="trigger")return;let i=e(ce),a=e(nt);t(nt,[...a,{nodes:n,edges:i}]),t(Vt,[]);let l=n.filter(d=>d.id!==o),s=i.filter(d=>d.source!==o&&d.target!==o);t(re,l),t(ce,s),e(Ce)===o&&t(Ce,null),t(rt,!0),t(Lt,{immediate:!0})}),io=ie(null,(e,t,o)=>{let n=e(re),r=e(ce),i=e(nt);t(nt,[...i,{nodes:n,edges:r}]),t(Vt,[]);let a=r.filter(l=>l.id!==o);t(ce,a),e(_e)===o&&t(_e,null),t(rt,!0),t(Lt,{immediate:!0})}),ui=ie(null,(e,t)=>{let o=e(re),n=e(ce),r=e(nt);t(nt,[...r,{nodes:o,edges:n}]),t(Vt,[]);let i=o.filter(s=>s.selected&&s.data.type!=="trigger").map(s=>s.id),a=o.filter(s=>s.data.type==="trigger"?!0:!s.selected),l=n.filter(s=>!(s.selected||i.includes(s.source)||i.includes(s.target)));t(re,a),t(ce,l),t(Ce,null),t(_e,null),t(rt,!0),t(Lt,{immediate:!0})}),Zo=ie(null,(e,t)=>{let o=e(re),n=e(ce),r=e(nt);t(nt,[...r,{nodes:o,edges:n}]),t(Vt,[]);let i=o.filter(a=>a.data.type==="trigger");t(re,i),t(ce,[]),t(Ce,null),t(_e,null),t(rt,!0),t(Lt,{immediate:!0})}),yh=ie(null,async(e,t)=>{try{t(ri,!0);let o=await j.workflow.getCurrent();t(re,o.nodes),t(ce,o.edges),o.id&&t(Ue,o.id)}catch(o){console.error("Failed to load workflow:",o)}finally{t(ri,!1)}}),vh=ie(null,async(e,t,{name:o,description:n})=>{let r=e(re),i=e(ce);try{return await j.workflow.create({name:o,description:n,nodes:r,edges:i})}catch(a){throw console.error("Failed to save workflow:",a),a}}),Ar=ie(!1),rt=ie(!1),mi=ie(!1),nt=ie([]),Vt=ie([]),pi=ie(null,(e,t)=>{let o=e(nt);if(o.length===0)return;let n=e(re),r=e(ce),i=e(Vt);t(Vt,[...i,{nodes:n,edges:r}]);let a=[...o],l=a.pop();l&&(t(nt,a),t(re,l.nodes),t(ce,l.edges),t(rt,!0))}),fi=ie(null,(e,t)=>{let o=e(Vt);if(o.length===0)return;let n=e(re),r=e(ce),i=e(nt);t(nt,[...i,{nodes:n,edges:r}]);let a=[...o],l=a.pop();l&&(t(Vt,a),t(re,l.nodes),t(ce,l.edges),t(rt,!0))}),gi=ie(e=>e(nt).length>0),yi=ie(e=>e(Vt).length>0),Ir=ie(null,(e,t)=>{let n=e(re).map(r=>({...r,data:{...r.data,status:"idle"}}));t(re,n)});import*as Pr from"react";var Ea=768;function Gt(){let[e,t]=Pr.useState(void 0);return Pr.useEffect(()=>{let o=window.matchMedia(`(max-width: ${Ea-1}px)`),n=()=>{t(window.innerWidth<Ea)};return o.addEventListener("change",n),t(window.innerWidth<Ea),()=>o.removeEventListener("change",n)},[]),!!e}import{Slot as nu}from"radix-ui";import{cva as ru}from"class-variance-authority";import{jsx as au}from"react/jsx-runtime";var Er=ru("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function E({className:e,variant:t,size:o,asChild:n=!1,...r}){let i=n?nu.Slot:"button";return au(i,{"data-slot":"button",className:N(Er({variant:t,size:o,className:e})),...r})}var su={"Database Query":"database"};function iu(e){return ge(e)?.integration||su[e]}function vi(e,t,o){let n=e.data.config?.actionType;if(!n)return null;let r=iu(n);if(!r)return null;let i=e.data.config?.integrationId;if(i&&o.has(i))return null;let l=t.filter(s=>s.type===r);return l.length===1?{nodeId:e.id,newIntegrationId:l[0].id}:l.length===0&&i?{nodeId:e.id,newIntegrationId:void 0}:null}import{useAtom as fo,useAtomValue as ls,useSetAtom as Wo}from"jotai";import{Copy as Vl,Eraser as ds,Eye as rf,EyeOff as af,FileCode as Hl,RefreshCw as Gl,Trash2 as na}from"lucide-react";import{useCallback as sf,useEffect as $l,useMemo as lf,useRef as _l,useState as or}from"react";import{toast as Tn}from"sonner";import{AlertTriangleIcon as yu}from"lucide-react";import{Loader2 as lu}from"lucide-react";import{jsx as en,jsxs as Ra}from"react/jsx-runtime";function Da({action:e}){return Ra(E,{disabled:e.disabled||e.loading,onClick:e.onClick,variant:e.variant??"default",children:[e.loading&&en(lu,{className:"mr-2 size-4 animate-spin"}),e.label]})}function hi({actions:e,className:t,children:o}){if(o)return en("div",{className:N("flex flex-col-reverse gap-2 p-6 pt-4 sm:flex-row sm:justify-end",t),children:o});if(!e||e.length===0)return null;let n=e.filter(s=>s.variant==="ghost"),r=e.filter(s=>s.variant==="outline"||s.variant==="secondary"),i=e.filter(s=>!s.variant||s.variant==="default"||s.variant==="destructive"),a=n.length>0,l=r.length>0||i.length>0;return Ra("div",{className:N("flex flex-col-reverse gap-2 p-6 pt-4 sm:flex-row",a&&l?"sm:justify-between":"sm:justify-end",t),children:[a&&en("div",{className:"flex flex-col-reverse gap-2 sm:flex-row",children:n.map(s=>en(Da,{action:s},s.label))}),l&&Ra("div",{className:"flex flex-col-reverse gap-2 sm:flex-row",children:[r.map(s=>en(Da,{action:s},s.label)),i.map(s=>en(Da,{action:s},s.label))]})]})}import{ChevronLeftIcon as mu,XIcon as pu}from"lucide-react";import{createContext as wi,useCallback as tn,useContext as xi,useMemo as du,useRef as cu,useState as uu}from"react";import{jsx as bi}from"react/jsx-runtime";var Ni=wi(null),ki=wi([]);function Oa(){return`overlay-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function Ci({children:e}){let[t,o]=uu([]),n=cu([]);t.length>0&&(n.current=t);let r=tn((u,f,v)=>{let C=Oa();return o([{id:C,component:u,props:f??{},options:v??{}}]),C},[]),i=tn((u,f,v)=>{let C=Oa(),h={id:C,component:u,props:f??{},options:v??{}};return o(y=>[...y,h]),C},[]),a=tn(()=>{o(u=>u.length<=1?(u[0]?.options.onClose?.(),[]):(u[u.length-1]?.options.onClose?.(),u.slice(0,-1)))},[]),l=tn((u,f,v)=>{let C=Oa(),h={id:C,component:u,props:f??{},options:v??{}};return o(y=>y.length===0?[h]:(y[y.length-1]?.options.onClose?.(),[...y.slice(0,-1),h])),C},[]),s=tn(()=>{o(u=>{for(let f of u)f.options.onClose?.();return[]})},[]),d=tn(u=>{o(f=>{let v=f.findIndex(C=>C.id===u);if(v===-1)return f;for(let C=v;C<f.length;C++)f[C].options.onClose?.();return f.slice(0,v)})},[]),c=du(()=>({stack:t,open:r,push:i,pop:a,replace:l,closeAll:s,close:d,hasOverlays:t.length>0,depth:t.length}),[t,r,i,a,l,s,d]);return bi(Ni.Provider,{value:c,children:bi(ki.Provider,{value:n.current,children:e})})}function oe(){let e=xi(Ni);if(!e)throw new Error("useOverlay must be used within an OverlayProvider");return e}function Ti(e){let{stack:t}=oe(),o=xi(ki),n=t.length>0?t:o,r=n.findIndex(i=>i.id===e);return{index:r,isFirst:r===0,isLast:r===n.length-1,depth:n.length,showBackButton:r>0}}import{jsx as Co,jsxs as Si}from"react/jsx-runtime";function fu({title:e,description:t,showBackButton:o,showCloseButton:n=!0,onBack:r,onClose:i,className:a}){let{pop:l,closeAll:s}=oe(),d=o??!1,c=()=>{r?r():l()},u=()=>{i?i():s()};return Si("div",{className:N("relative flex flex-col gap-1.5 p-6 pb-0",a),children:[Si("div",{className:"flex min-h-8 items-center gap-2",children:[d&&Co(E,{"aria-label":"Go back",className:"ml-[-8px] size-8 shrink-0",onClick:c,size:"icon",variant:"ghost",children:Co(mu,{className:"size-5"})}),e&&Co("h2",{className:"flex-1 font-semibold text-lg leading-none tracking-tight",children:e}),n&&Co(E,{"aria-label":"Close",className:"absolute top-4 right-4 size-8 shrink-0 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",onClick:u,size:"icon",variant:"ghost",children:Co(pu,{className:"size-4"})})]}),t&&Co("p",{className:"text-muted-foreground text-sm",children:t})]})}function on({overlayId:e,showBackButton:t,...o}){let{showBackButton:n}=Ti(e);return Co(fu,{...o,showBackButton:t??n})}import{jsx as La,jsxs as gu}from"react/jsx-runtime";function Re({overlayId:e,title:t,description:o,actions:n,children:r,className:i}){return gu("div",{className:N("flex flex-col",i),children:[(t||o)&&La(on,{description:o,overlayId:e,title:t}),r&&La("div",{className:"flex-1 overflow-y-auto p-6",children:r}),La(hi,{actions:n})]})}import{jsx as Dr,jsxs as vu}from"react/jsx-runtime";function Pe({overlayId:e,title:t="Confirm",message:o,confirmLabel:n="Confirm",cancelLabel:r="Cancel",confirmVariant:i="default",destructive:a=!1,onConfirm:l,onCancel:s}){let{pop:d}=oe();return Dr(Re,{actions:[{label:r,variant:"outline",onClick:()=>{s?.(),d()}},{label:n,variant:a?"destructive":i,onClick:async()=>{await l(),d()}}],overlayId:e,title:t,children:vu("div",{className:"flex gap-4",children:[a&&Dr("div",{className:"flex size-10 shrink-0 items-center justify-center rounded-full bg-destructive/10",children:Dr(yu,{className:"size-5 text-destructive"})}),Dr("p",{className:N("text-muted-foreground text-sm",a&&"pt-2"),children:o})]})})}import{AlertDialog as lo}from"radix-ui";import{jsx as Mt,jsxs as wu}from"react/jsx-runtime";function nn({...e}){return Mt(lo.Root,{"data-slot":"alert-dialog",...e})}function hu({...e}){return Mt(lo.Portal,{"data-slot":"alert-dialog-portal",...e})}function bu({className:e,...t}){return Mt(lo.Overlay,{"data-slot":"alert-dialog-overlay",className:N("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",e),...t})}function rn({className:e,...t}){return wu(hu,{children:[Mt(bu,{}),Mt(lo.Content,{"data-slot":"alert-dialog-content",className:N("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",e),...t})]})}function an({className:e,...t}){return Mt("div",{"data-slot":"alert-dialog-header",className:N("flex flex-col gap-2 text-center sm:text-left",e),...t})}function sn({className:e,...t}){return Mt("div",{"data-slot":"alert-dialog-footer",className:N("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",e),...t})}function ln({className:e,...t}){return Mt(lo.Title,{"data-slot":"alert-dialog-title",className:N("text-lg font-semibold",e),...t})}function dn({className:e,...t}){return Mt(lo.Description,{"data-slot":"alert-dialog-description",className:N("text-muted-foreground text-sm",e),...t})}function cn({className:e,...t}){return Mt(lo.Action,{className:N(Er(),e),...t})}function un({className:e,...t}){return Mt(lo.Cancel,{className:N(Er({variant:"outline"}),e),...t})}import xu from"@monaco-editor/react";import{useTheme as Nu}from"next-themes";var Ai={base:"vs-dark",inherit:!0,rules:[{token:"",foreground:"ededed"},{token:"comment",foreground:"a1a1a1",fontStyle:"italic"},{token:"keyword",foreground:"ff4d8d"},{token:"keyword.operator",foreground:"ff4d8d"},{token:"string",foreground:"00ca50"},{token:"string.escape",foreground:"00ca50"},{token:"number",foreground:"ffffff"},{token:"type",foreground:"47a8ff"},{token:"type.identifier",foreground:"47a8ff"},{token:"identifier",foreground:"ededed"},{token:"parameter",foreground:"ededed"},{token:"variable",foreground:"ededed"},{token:"variable.parameter",foreground:"ededed"},{token:"function",foreground:"c472fb"},{token:"identifier.function",foreground:"c472fb"},{token:"member.function",foreground:"c472fb"},{token:"constant.language",foreground:"47a8ff"},{token:"keyword.json",foreground:"47a8ff"},{token:"variable.predefined",foreground:"ededed"},{token:"support.variable",foreground:"ededed"},{token:"support.constant",foreground:"ededed"},{token:"delimiter",foreground:"ededed"},{token:"delimiter.bracket",foreground:"ededed"},{token:"delimiter.parenthesis",foreground:"ededed"},{token:"delimiter.curly",foreground:"ededed"},{token:"delimiter.array",foreground:"ededed"},{token:"punctuation",foreground:"ededed"},{token:"operator",foreground:"ededed"},{token:"string.key.json",foreground:"47a8ff"},{token:"string.value.json",foreground:"00ca50"},{token:"number.json",foreground:"ffffff"},{token:"keyword.json",foreground:"47a8ff"}],colors:{"editor.background":"#000000","editor.foreground":"#ededed","editorLineNumber.foreground":"#444444","editorLineNumber.activeForeground":"#888888","editor.lineHighlightBackground":"#0A0A0A","editor.selectionBackground":"#264F78","editor.inactiveSelectionBackground":"#1A1A1A","editorCursor.foreground":"#FFFFFF","editorWhitespace.foreground":"#333333","editorIndentGuide.background":"#1A1A1A","editorIndentGuide.activeBackground":"#333333","editorBracketMatch.background":"#0A0A0A","editorBracketMatch.border":"#444444"}};import{jsx as ku}from"react/jsx-runtime";function yt(e){let{resolvedTheme:t}=Nu();return ku(xu,{...e,onMount:(n,r)=>{r.editor.defineTheme("vercel-dark",Ai),r.editor.setTheme(t==="dark"?"vercel-dark":"light"),e.onMount&&e.onMount(n,r)},theme:t==="dark"?"vercel-dark":"light"})}import{jsx as Cu}from"react/jsx-runtime";function ae({className:e,type:t,...o}){return Cu("input",{type:t,"data-slot":"input",className:N("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground bg-transparent border-input h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",e),...o})}import{Label as Tu}from"radix-ui";import{jsx as Su}from"react/jsx-runtime";function M({className:e,...t}){return Su(Tu.Root,{"data-slot":"label",className:N("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",e),...t})}import{Tabs as Rr}from"radix-ui";import{jsx as Or}from"react/jsx-runtime";function Ma({className:e,...t}){return Or(Rr.Root,{"data-slot":"tabs",className:N("flex flex-col gap-2",e),...t})}function Wa({className:e,...t}){return Or(Rr.List,{"data-slot":"tabs-list",className:N("bg-muted text-muted-foreground inline-flex h-10 w-fit items-center justify-center rounded-lg p-[3px]",e),...t})}function To({className:e,...t}){return Or(Rr.Trigger,{"data-slot":"tabs-trigger",className:N("data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-sm border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...t})}function So({className:e,...t}){return Or(Rr.Content,{"data-slot":"tabs-content",className:N("flex-1 outline-none",e),...t})}import{useAtomValue as fl,useSetAtom as Ym}from"jotai";import{HelpCircle as Xm,Plus as Qm,Settings as Zm}from"lucide-react";import{useEffect as ep,useMemo as Kr,useState as tp}from"react";import{Select as at}from"radix-ui";import{CheckIcon as Au,ChevronDownIcon as Ii,ChevronUpIcon as Iu}from"lucide-react";import{jsx as Be,jsxs as Fa}from"react/jsx-runtime";function ve({...e}){return Be(at.Root,{"data-slot":"select",...e})}function Pi({...e}){return Be(at.Group,{"data-slot":"select-group",...e})}function xe({...e}){return Be(at.Value,{"data-slot":"select-value",...e})}function he({className:e,size:t="default",children:o,...n}){return Fa(at.Trigger,{"data-slot":"select-trigger","data-size":t,className:N("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-transparent hover:bg-accent/50 flex w-fit items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...n,children:[o,Be(at.Icon,{asChild:!0,children:Be(Ii,{className:"size-4 opacity-50"})})]})}function be({className:e,children:t,position:o="popper",align:n="center",...r}){return Be(at.Portal,{children:Fa(at.Content,{"data-slot":"select-content",className:N("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",o==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:o,align:n,...r,children:[Be(Pu,{}),Be(at.Viewport,{className:N("p-1",o==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:t}),Be(Eu,{})]})})}function Ei({className:e,...t}){return Be(at.Label,{"data-slot":"select-label",className:N("text-muted-foreground px-2 py-1.5 text-xs",e),...t})}function Z({className:e,children:t,...o}){return Fa(at.Item,{"data-slot":"select-item",className:N("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...o,children:[Be("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:Be(at.ItemIndicator,{children:Be(Au,{className:"size-4"})})}),Be(at.ItemText,{children:t})]})}function Lr({className:e,...t}){return Be(at.Separator,{"data-slot":"select-separator",className:N("bg-border pointer-events-none -mx-1 my-1 h-px",e),...t})}function Pu({className:e,...t}){return Be(at.ScrollUpButton,{"data-slot":"select-scroll-up-button",className:N("flex cursor-default items-center justify-center py-1",e),...t,children:Be(Iu,{className:"size-4"})})}function Eu({className:e,...t}){return Be(at.ScrollDownButton,{"data-slot":"select-scroll-down-button",className:N("flex cursor-default items-center justify-center py-1",e),...t,children:Be(Ii,{className:"size-4"})})}import{useAtom as Oi}from"jotai";import{useEffect as za,useRef as Ba,useState as mn}from"react";import{useAtom as Di}from"jotai";import{Check as Du}from"lucide-react";import{useEffect as Mr,useRef as Ru,useState as Ri}from"react";import{createPortal as Ou}from"react-dom";import{Fragment as Fu,jsx as Gn,jsxs as Wr}from"react/jsx-runtime";var Lu=e=>{if(e.data.label)return e.data.label;if(e.data.type==="action"){let t=e.data.config?.actionType;if(t){let o=ge(t);if(o?.label)return o.label}return t||"HTTP Request"}return e.data.type==="trigger"?e.data.config?.triggerType||"Manual":"Node"},$n=(e,t="")=>{let o=[];for(let n of e){let r=t?`${t}.${n.name}`:n.name,i=n.type==="array"?`${n.itemType}[]`:n.type==="enum"?`enum<${(n.enumValues||[]).join(" | ")||n.enumItemType||"string"}>`:n.type,a=n.description||`${i}`;if(o.push({field:r,description:a}),n.type==="object"&&n.fields&&n.fields.length>0&&o.push(...$n(n.fields,r)),n.type==="array"&&n.itemType==="object"&&n.fields&&n.fields.length>0){let l=`${r}[0]`;o.push(...$n(n.fields,l))}}return o},Mu=(e,...t)=>e?t.some(o=>e===o||e.endsWith(`/${o.toLowerCase().replace(/\s+/g,"-")}`)):!1,Wu=e=>{let t=e.data.config?.actionType;if(t==="HTTP Request")return[{field:"data",description:"Response data"},{field:"status",description:"HTTP status code"}];if(t==="Database Query"){let o=e.data.config?.dbSchema;if(o)try{let n=JSON.parse(o);if(n.length>0)return $n(n)}catch{}return[{field:"rows",description:"Query result rows"},{field:"count",description:"Number of rows"}]}if(Mu(t,"Generate Text","ai-gateway/generate-text")){let o=e.data.config?.aiFormat,n=e.data.config?.aiSchema;if(o==="object"&&n)try{let r=JSON.parse(n);if(r.length>0)return $n(r,"object")}catch{}return[{field:"text",description:"Generated text"}]}if(t){let o=ge(t);if(o?.outputFields&&o.outputFields.length>0)return o.outputFields}if(e.data.type==="trigger"){let o=e.data.config?.triggerType,n=e.data.config?.webhookSchema;if(o==="Webhook"&&n)try{let r=JSON.parse(n);if(r.length>0)return $n(r)}catch{}return[{field:"triggered",description:"Trigger status"},{field:"timestamp",description:"Trigger timestamp"},{field:"input",description:"Input data"}]}return[{field:"data",description:"Output data"}]};function Fr({isOpen:e,position:t,onSelect:o,onClose:n,currentNodeId:r,filter:i=""}){let[a]=Di(re),[l]=Di(ce),[s,d]=Ri(0),c=Ru(null),[u,f]=Ri(!1);Mr(()=>(f(!0),()=>f(!1)),[]);let C=(()=>{if(!r)return[];let g=new Set,S=[],D=I=>{if(g.has(I))return;g.add(I);let x=l.filter(p=>p.target===I);for(let p of x)S.push(p.source),D(p.source)};return D(r),a.filter(I=>S.includes(I.id))})(),h=[];for(let g of C){let S=Lu(g),D=Wu(g);h.push({type:"node",nodeId:g.id,nodeName:S,template:`{{@${g.id}:${S}}}`});for(let I of D)h.push({type:"field",nodeId:g.id,nodeName:S,field:I.field,description:I.description,template:`{{@${g.id}:${S}.${I.field}}}`})}let y=i?h.filter(g=>g.nodeName.toLowerCase().includes(i.toLowerCase())||g.field&&g.field.toLowerCase().includes(i.toLowerCase())):h;if(Mr(()=>{d(0)},[i]),Mr(()=>{let g=S=>{if(e)switch(S.key){case"ArrowDown":S.preventDefault(),d(D=>D<y.length-1?D+1:D);break;case"ArrowUp":S.preventDefault(),d(D=>D>0?D-1:D);break;case"Enter":S.preventDefault(),y[s]&&o(y[s].template);break;case"Escape":S.preventDefault(),n();break}};return window.addEventListener("keydown",g),()=>window.removeEventListener("keydown",g)},[e,y,s,o,n]),Mr(()=>{if(c.current){let g=c.current.children[s];g&&g.scrollIntoView({block:"nearest"})}},[s]),!e||y.length===0||!u)return null;let m={top:Math.min(t.top,window.innerHeight-300),left:Math.min(t.left,window.innerWidth-320)},b=Gn("div",{className:"fixed z-[9999] w-80 rounded-lg border bg-popover p-1 text-popover-foreground shadow-md",ref:c,style:{top:`${m.top}px`,left:`${m.left}px`},children:Gn("div",{className:"max-h-60 overflow-y-auto",children:y.map((g,S)=>Wr("div",{className:N("flex cursor-pointer items-center justify-between rounded px-2 py-1.5 text-sm transition-colors",S===s?"bg-accent text-accent-foreground":"hover:bg-accent/50"),onClick:()=>o(g.template),onMouseEnter:()=>d(S),children:[Wr("div",{className:"flex-1",children:[Gn("div",{className:"font-medium",children:g.type==="node"?g.nodeName:Wr(Fu,{children:[Wr("span",{className:"text-muted-foreground",children:[g.nodeName,"."]}),g.field]})}),g.description&&Gn("div",{className:"text-muted-foreground text-xs",children:g.description})]}),S===s&&Gn(Du,{className:"h-4 w-4"})]},`${g.nodeId}-${g.field||"root"}`))})});return Ou(b,document.body)}import{Fragment as Vu,jsx as Va,jsxs as Hu}from"react/jsx-runtime";function zu(e,t){let o=e.match(/\{\{@([^:]+):([^}]+)\}\}/);if(!o)return!1;let n=o[1];return t.some(r=>r.id===n)}function Bu(e,t){let o=e.match(/\{\{@([^:]+):([^}]+)\}\}/);if(!o)return e;let n=o[1],r=o[2],i=t.find(d=>d.id===n);if(!i)return r;let a=i.data.label;if(!a&&i.data.type==="action"){let d=i.data.config?.actionType;d&&(a=ge(d)?.label)}let l=r.indexOf(".");if(l===-1)return a??r;let s=r.substring(l+1);return a?`${a}.${s}`:r}function Le({value:e="",onChange:t,placeholder:o,disabled:n,className:r,id:i}){let[a,l]=mn(!1),s=Ba(null),[d,c]=mn(e),u=Ba(!0),[f]=Oi(Ce),[v]=Oi(re),[C,h]=mn(!1),[y,m]=mn({top:0,left:0}),[b,g]=mn(""),[S,D]=mn(null),I=Ba(null);za(()=>{e!==d&&!a&&(c(e),u.current=!0)},[e,a,d]),za(()=>{!a&&d&&(u.current=!0)},[v,a,d]);let x=()=>{if(!s.current)return null;let H=window.getSelection();if(!H||H.rangeCount===0)return null;let X=H.getRangeAt(0),z=X.cloneRange();z.selectNodeContents(s.current),z.setEnd(X.endContainer,X.endOffset);let q=0,A=document.createTreeWalker(s.current,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,null),B,k=!1;for(;(B=A.nextNode())&&!k;)if(B.nodeType===Node.TEXT_NODE)if(B===X.endContainer)q+=X.endOffset,k=!0;else{let R=(B.textContent||"").length;q+=R}else if(B.nodeType===Node.ELEMENT_NODE){let R=B,_=R.getAttribute("data-template");_&&(R.contains(X.endContainer)||R===X.endContainer?(q+=_.length,k=!0):q+=_.length)}return{offset:q}},p=H=>{if(!s.current||!H)return;let X=0,z=document.createTreeWalker(s.current,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,null),q,A=null,B=0;for(;q=z.nextNode();)if(q.nodeType===Node.TEXT_NODE){let k=(q.textContent||"").length;if(X+k>=H.offset){A=q,B=H.offset-X;break}X+=k}else if(q.nodeType===Node.ELEMENT_NODE){let k=q,R=k.getAttribute("data-template");if(R){if(X+R.length>=H.offset){A=k.nextSibling,B=0,!A&&k.parentNode&&(A=document.createTextNode(""),k.parentNode.appendChild(A));break}X+=R.length}}if(A){let k=document.createRange(),R=window.getSelection();try{let _=Math.min(B,A.textContent?.length||0);k.setStart(A,_),k.collapse(!0),R?.removeAllRanges(),R?.addRange(k),s.current.focus()}catch{s.current.focus()}}},w=()=>{if(!s.current||!u.current)return;let H=s.current,X=d||"",z=a?x():null;if(I.current!==null&&(z={offset:I.current},I.current=null),H.innerHTML="",!X&&!a){H.innerHTML=`<span class="text-muted-foreground pointer-events-none">${o||""}</span>`;return}let q=/\{\{@([^:]+):([^}]+)\}\}/g,A=0,B;for(;(B=q.exec(X))!==null;){let[k]=B,R=B.index;if(R>A){let le=X.slice(A,R),V=document.createTextNode(le);H.appendChild(V)}let _=document.createElement("span"),ne=zu(k,v);_.className=ne?"inline-flex items-center gap-1 rounded bg-blue-500/10 px-1.5 py-0.5 text-blue-600 dark:text-blue-400 font-mono text-xs border border-blue-500/20 mx-0.5":"inline-flex items-center gap-1 rounded bg-red-500/10 px-1.5 py-0.5 text-red-600 dark:text-red-400 font-mono text-xs border border-red-500/20 mx-0.5",_.contentEditable="false",_.setAttribute("data-template",k),_.textContent=Bu(k,v),H.appendChild(_),A=q.lastIndex}if(A<X.length){let k=X.slice(A),R=document.createTextNode(k);H.appendChild(R)}H.innerHTML===""&&a&&(H.innerHTML="<br>"),u.current=!1,z&&requestAnimationFrame(()=>p(z))},G=()=>{if(!s.current)return"";let H="",X=document.createTreeWalker(s.current,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,null),z;for(;z=X.nextNode();)if(z.nodeType===Node.TEXT_NODE){let q=z.parentElement,A=!1;for(;q&&q!==s.current;){if(q.getAttribute("data-template")){A=!0;break}q=q.parentElement}A||(H+=z.textContent)}else if(z.nodeType===Node.ELEMENT_NODE){let A=z.getAttribute("data-template");A&&(H+=A)}return H},te=()=>{let H=G();if(H===d)return;let X=(d.match(/\{\{@([^:]+):([^}]+)\}\}/g)||[]).length,z=(H.match(/\{\{@([^:]+):([^}]+)\}\}/g)||[]).length;if(z>X){c(H),t?.(H),u.current=!0,h(!1),requestAnimationFrame(()=>w());return}if(z===X&&z>0){c(H),t?.(H);let A=H.lastIndexOf("@");if(A!==-1){let B=H.slice(A+1);if(B.includes(" "))h(!1);else{if(g(B),D(A),s.current){let k=s.current.getBoundingClientRect(),R={top:k.bottom+window.scrollY+4,left:k.left+window.scrollX};m(R)}h(!0)}}else h(!1);return}if(z<X){c(H),t?.(H),u.current=!0,requestAnimationFrame(()=>w());return}c(H),t?.(H);let q=H.lastIndexOf("@");if(q!==-1){let A=H.slice(q+1);if(A.includes(" "))h(!1);else{if(g(A),D(q),s.current){let B=s.current.getBoundingClientRect(),k={top:B.bottom+window.scrollY+4,left:B.left+window.scrollX};m(k)}h(!0)}}else h(!1)},O=H=>{if(!s.current||S===null)return;let X=G(),z=X.slice(0,S),q=X.slice(S+1+b.length),A=z+H+q,B=z.length+H.length;c(A),t?.(A),u.current=!0,h(!1),D(null),I.current=B,s.current.focus()},W=()=>{l(!0),u.current=!0},$=()=>{setTimeout(()=>{document.activeElement!==s.current&&(l(!1),u.current=!0,h(!1))},200)},T=H=>{H.preventDefault();let X=H.clipboardData.getData("text/plain");document.execCommand("insertText",!1,X)};return za(()=>{u.current&&w()},[d,a]),Hu(Vu,{children:[Va("div",{className:N("flex min-h-9 w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm transition-colors focus-within:outline-none focus-within:ring-1 focus-within:ring-ring",n&&"cursor-not-allowed opacity-50",r),children:Va("div",{className:"w-full outline-none",contentEditable:!n,id:i,onBlur:$,onFocus:W,onInput:te,onPaste:T,ref:s,role:"textbox",suppressContentEditableWarning:!0})}),Va(Fr,{currentNodeId:f||void 0,filter:b,isOpen:C,onClose:()=>h(!1),onSelect:O,position:y})]})}import{jsx as st,jsxs as Ao}from"react/jsx-runtime";function Li({config:e,onUpdateConfig:t,onUpdateMultipleConfig:o,disabled:n}){let r=e?.dataType||"string",i=e?.operator||yr[r][0].value,a=yr[r],s=a.find(c=>c.value===i)?.unary??!1;function d(c){let f=yr[c]?.[0]?.value??"";o?o({dataType:c,operator:f}):(t("dataType",c),f&&t("operator",f))}return Ao("div",{className:"space-y-4",children:[Ao("div",{className:"space-y-2",children:[st(M,{htmlFor:"leftValue",children:"Value to Test"}),st(Le,{disabled:n,id:"leftValue",onChange:c=>t("leftValue",c),placeholder:"e.g., {{PreviousNode.status}}",value:e?.leftValue||""}),st("p",{className:"text-muted-foreground text-xs",children:"Use @ to reference previous node outputs."})]}),Ao("div",{className:"space-y-2",children:[st(M,{htmlFor:"dataType",children:"Data Type"}),Ao(ve,{disabled:n,onValueChange:d,value:r,children:[st(he,{id:"dataType",children:st(xe,{placeholder:"Select data type"})}),st(be,{children:oi.map(c=>st(Z,{value:c.value,children:c.label},c.value))})]})]}),Ao("div",{className:"space-y-2",children:[st(M,{htmlFor:"operator",children:"Operator"}),Ao(ve,{disabled:n,onValueChange:c=>t("operator",c),value:i,children:[st(he,{id:"operator",children:st(xe,{placeholder:"Select operator"})}),st(be,{children:a.map(c=>st(Z,{value:c.value,children:c.label},c.value))})]})]}),!s&&Ao("div",{className:"space-y-2",children:[st(M,{htmlFor:"rightValue",children:"Compare Value"}),st(Le,{disabled:n,id:"rightValue",onChange:c=>t("rightValue",c),placeholder:"e.g., 200 or {{OtherNode.field}}",value:e?.rightValue||""})]})]})}import{Plus as Mi,Trash2 as Wi}from"lucide-react";import{nanoid as Gu}from"nanoid";import{jsx as de,jsxs as Me}from"react/jsx-runtime";function co({schema:e,onChange:t,disabled:o,level:n=0}){let r=()=>{t([...e,{id:Gu(),name:"",type:"string"}])},i=(c,u)=>{let f={...c};return u!=="array"&&(f.itemType=void 0),u!=="object"&&(f.fields=void 0),u!=="enum"&&(f.enumValues=void 0,f.enumItemType=void 0),u==="array"&&!f.itemType&&(f.itemType="string"),u==="object"&&!f.fields&&(f.fields=[]),u==="enum"&&!f.enumValues&&(f.enumValues=[],f.enumItemType="string"),f},a=(c,u)=>{let f=[...e];f[c]={...f[c],...u},u.type&&(f[c]=i(f[c],u.type)),t(f)},l=c=>{t(e.filter((u,f)=>f!==c))},s=(c,u)=>{let f=[...e];f[c].fields=u,t(f)},d=n>0?"ml-4 border-l-2 border-muted pl-4":"";return Me("div",{className:`space-y-3 ${d}`,children:[e.map((c,u)=>{let f=c.id||`field-${n}-${u}`;return Me("div",{className:"space-y-2 rounded-md border p-3",children:[Me("div",{className:"flex gap-2",children:[Me("div",{className:"flex-1 space-y-2",children:[de(M,{className:"ml-1",htmlFor:`field-name-${n}-${u}`,children:"Property Name"}),de(ae,{disabled:o,id:`field-name-${n}-${u}`,onChange:v=>a(u,{name:v.target.value}),placeholder:"propertyName",value:c.name})]}),Me("div",{className:"flex-1 space-y-2",children:[de(M,{className:"ml-1",htmlFor:`field-type-${n}-${u}`,children:"Type"}),Me(ve,{disabled:o,onValueChange:v=>a(u,{type:v}),value:c.type,children:[de(he,{className:"w-full",id:`field-type-${n}-${u}`,children:de(xe,{})}),Me(be,{children:[de(Z,{value:"string",children:"String"}),de(Z,{value:"number",children:"Number"}),de(Z,{value:"boolean",children:"Boolean"}),de(Z,{value:"enum",children:"Enum"}),de(Z,{value:"array",children:"Array"}),de(Z,{value:"object",children:"Object"})]})]})]}),de("div",{className:"flex items-end",children:de(E,{disabled:o,onClick:()=>l(u),size:"icon",variant:"ghost",children:de(Wi,{className:"h-4 w-4"})})})]}),c.type==="array"&&Me("div",{className:"space-y-2",children:[de(M,{className:"ml-1",htmlFor:`field-item-type-${n}-${u}`,children:"Array Item Type"}),Me(ve,{disabled:o,onValueChange:v=>a(u,{itemType:v}),value:c.itemType||"string",children:[de(he,{className:"w-full",id:`field-item-type-${n}-${u}`,children:de(xe,{})}),Me(be,{children:[de(Z,{value:"string",children:"String"}),de(Z,{value:"number",children:"Number"}),de(Z,{value:"boolean",children:"Boolean"}),de(Z,{value:"object",children:"Object"})]})]})]}),c.type==="enum"&&Me("div",{className:"space-y-3",children:[Me("div",{className:"space-y-2",children:[de(M,{className:"ml-1",htmlFor:`field-enum-type-${n}-${u}`,children:"Value Type"}),Me(ve,{disabled:o,onValueChange:v=>a(u,{enumItemType:v}),value:c.enumItemType||"string",children:[de(he,{className:"w-full",id:`field-enum-type-${n}-${u}`,children:de(xe,{})}),Me(be,{children:[de(Z,{value:"string",children:"String"}),de(Z,{value:"number",children:"Number"}),de(Z,{value:"boolean",children:"Boolean"})]})]})]}),Me("div",{className:"space-y-2",children:[de(M,{className:"ml-1",children:"Allowed Values"}),(c.enumValues||[]).map((v,C)=>Me("div",{className:"flex gap-2",children:[de(ae,{disabled:o,onChange:h=>{let y=[...c.enumValues||[]];y[C]=h.target.value,a(u,{enumValues:y})},placeholder:c.enumItemType==="boolean"?"true or false":c.enumItemType==="number"?"e.g. 42":"e.g. active",value:v}),de(E,{disabled:o,onClick:()=>{let h=(c.enumValues||[]).filter((y,m)=>m!==C);a(u,{enumValues:h})},size:"icon",variant:"ghost",children:de(Wi,{className:"h-4 w-4"})})]},C)),Me(E,{className:"w-full",disabled:o,onClick:()=>{let v=[...c.enumValues||[],""];a(u,{enumValues:v})},type:"button",variant:"outline",children:[de(Mi,{className:"size-4"}),"Add Value"]})]})]}),c.type==="object"&&Me("div",{className:"mt-2",children:[de(M,{className:"mb-2 block",children:"Object Properties"}),de(co,{disabled:o,level:n+1,onChange:v=>s(u,v),schema:c.fields||[]})]}),c.type==="array"&&c.itemType==="object"&&Me("div",{className:"mt-2",children:[de(M,{className:"mb-2 block",children:"Array Item Properties"}),de(co,{disabled:o,level:n+1,onChange:v=>s(u,v),schema:c.fields||[]})]}),Me("div",{className:"space-y-2",children:[de(M,{className:"ml-1",htmlFor:`field-desc-${n}-${u}`,children:"Description (optional)"}),de(ae,{disabled:o,id:`field-desc-${n}-${u}`,onChange:v=>a(u,{description:v.target.value}),placeholder:"Description for the AI",value:c.description||""})]})]},f)}),Me(E,{className:"w-full",disabled:o,onClick:r,type:"button",variant:"outline",children:[de(Mi,{className:"size-4"}),"Add Property"]})]})}import{Fragment as $u,jsx as pn,jsxs as Ha}from"react/jsx-runtime";function Fi({config:e,onUpdateConfig:t,disabled:o}){return Ha($u,{children:[Ha("div",{className:"space-y-2",children:[pn(M,{htmlFor:"dbQuery",children:"SQL Query"}),pn("div",{className:"overflow-hidden rounded-md border",children:pn(yt,{defaultLanguage:"sql",height:"150px",onChange:n=>t("dbQuery",n||""),options:{minimap:{enabled:!1},lineNumbers:"on",scrollBeyondLastLine:!1,fontSize:12,readOnly:o,wordWrap:"off"},value:e?.dbQuery||""})}),pn("p",{className:"text-muted-foreground text-xs",children:"The DATABASE_URL from your project integrations will be used to execute this query."})]}),Ha("div",{className:"space-y-2",children:[pn(M,{children:"Schema (Optional)"}),pn(co,{disabled:o,onChange:n=>t("dbSchema",JSON.stringify(n)),schema:e?.dbSchema?JSON.parse(e.dbSchema):[]})]})]})}import{Fragment as _u,jsx as Ke,jsxs as Io}from"react/jsx-runtime";function zi({config:e,onUpdateConfig:t,disabled:o}){return Io(_u,{children:[Io("div",{className:"space-y-2",children:[Ke(M,{htmlFor:"httpMethod",children:"HTTP Method"}),Io(ve,{disabled:o,onValueChange:n=>t("httpMethod",n),value:e?.httpMethod||"POST",children:[Ke(he,{className:"w-full",id:"httpMethod",children:Ke(xe,{placeholder:"Select method"})}),Io(be,{children:[Ke(Z,{value:"GET",children:"GET"}),Ke(Z,{value:"POST",children:"POST"}),Ke(Z,{value:"PUT",children:"PUT"}),Ke(Z,{value:"PATCH",children:"PATCH"}),Ke(Z,{value:"DELETE",children:"DELETE"})]})]})]}),Io("div",{className:"space-y-2",children:[Ke(M,{htmlFor:"endpoint",children:"URL"}),Ke(Le,{disabled:o,id:"endpoint",onChange:n=>t("endpoint",n),placeholder:"https://api.example.com/endpoint or {{NodeName.url}}",value:e?.endpoint||""})]}),Io("div",{className:"space-y-2",children:[Ke(M,{htmlFor:"httpHeaders",children:"Headers (JSON)"}),Ke("div",{className:"overflow-hidden rounded-md border",children:Ke(yt,{defaultLanguage:"json",height:"100px",onChange:n=>t("httpHeaders",n||"{}"),options:{minimap:{enabled:!1},lineNumbers:"off",scrollBeyondLastLine:!1,fontSize:12,readOnly:o,wordWrap:"off"},value:e?.httpHeaders||"{}"})})]}),Io("div",{className:"space-y-2",children:[Ke(M,{htmlFor:"httpBody",children:"Body (JSON)"}),Ke("div",{className:`overflow-hidden rounded-md border ${e?.httpMethod==="GET"?"opacity-50":""}`,children:Ke(yt,{defaultLanguage:"json",height:"120px",onChange:n=>t("httpBody",n||"{}"),options:{minimap:{enabled:!1},lineNumbers:"off",scrollBeyondLastLine:!1,fontSize:12,readOnly:e?.httpMethod==="GET"||o,domReadOnly:e?.httpMethod==="GET"||o,wordWrap:"off"},value:e?.httpBody||"{}"})}),e?.httpMethod==="GET"&&Ke("p",{className:"text-muted-foreground text-xs",children:"Body is disabled for GET requests"})]})]})}import{jsx as fn,jsxs as Ga}from"react/jsx-runtime";function Bi({config:e,onUpdateConfig:t,disabled:o}){return Ga("div",{className:"space-y-4",children:[Ga("div",{className:"space-y-2",children:[fn(M,{htmlFor:"items",children:"Items to Iterate"}),fn(Le,{disabled:o,id:"items",onChange:n=>t("items",n),placeholder:"e.g., {{PreviousNode.rows}}, {{DatabaseQuery.results}}",value:e?.items||""}),fn("p",{className:"text-muted-foreground text-xs",children:"Reference an array from a previous node. Use @ to reference outputs."})]}),Ga("div",{className:"space-y-2",children:[fn(M,{htmlFor:"batchSize",children:"Batch Size (optional)"}),fn(Le,{disabled:o,id:"batchSize",onChange:n=>t("batchSize",n),placeholder:"1",value:e?.batchSize||""}),fn("p",{className:"text-muted-foreground text-xs",children:"Number of items per batch. Default is 1 (process one item at a time)."})]})]})}import{Minus as Uu,Plus as Ku}from"lucide-react";import{Fragment as qu,jsx as Te,jsxs as qe}from"react/jsx-runtime";function Vi({config:e,onUpdateConfig:t,disabled:o}){let n=e?.mode||"append",r=Number(e?.inputCount)||2,i=()=>{t("inputCount",String(r+1))},a=()=>{if(r<=2)return;t(`input${r}`,""),t("inputCount",String(r-1))};return qe("div",{className:"space-y-4",children:[qe("div",{className:"space-y-2",children:[Te(M,{htmlFor:"mode",children:"Mode"}),qe(ve,{disabled:o,onValueChange:l=>t("mode",l),value:n,children:[Te(he,{id:"mode",children:Te(xe,{placeholder:"Select mode"})}),qe(be,{children:[Te(Z,{value:"append",children:"Append"}),Te(Z,{value:"combineByPosition",children:"Combine by Position"}),Te(Z,{value:"combineByFields",children:"Combine by Fields"})]})]}),qe("p",{className:"text-muted-foreground text-xs",children:[n==="append"&&"Concatenate all lists into one.",n==="combineByPosition"&&"Merge items at the same index from all inputs.",n==="combineByFields"&&"Match and merge items based on a common field."]})]}),Array.from({length:r},(l,s)=>qe("div",{className:"space-y-2",children:[qe(M,{htmlFor:`input${s+1}`,children:["Input ",s+1]}),Te(Le,{disabled:o,id:`input${s+1}`,onChange:d=>t(`input${s+1}`,d),placeholder:"e.g., {{Node.rows}}",value:e?.[`input${s+1}`]||""}),s===0&&Te("p",{className:"text-muted-foreground text-xs",children:"Use @ to reference outputs from previous nodes."})]},s)),qe("div",{className:"flex gap-2",children:[qe(E,{className:"flex-1",disabled:o,onClick:i,type:"button",variant:"outline",children:[Te(Ku,{className:"mr-2 size-4"}),"Add Input"]}),Te(E,{disabled:o||r<=2,onClick:a,type:"button",variant:"outline",children:Te(Uu,{className:"size-4"})})]}),n==="combineByPosition"&&qe("div",{className:"space-y-2",children:[Te(M,{htmlFor:"unmatchedHandling",children:"When arrays have different lengths"}),qe(ve,{disabled:o,onValueChange:l=>t("unmatchedHandling",l),value:e?.unmatchedHandling||"useNull",children:[Te(he,{id:"unmatchedHandling",children:Te(xe,{})}),qe(be,{children:[Te(Z,{value:"useNull",children:"Fill with null"}),Te(Z,{value:"discard",children:"Discard extra items"})]})]})]}),n==="combineByFields"&&qe(qu,{children:[qe("div",{className:"space-y-2",children:[Te(M,{htmlFor:"matchField",children:"Match Field"}),Te(Le,{disabled:o,id:"matchField",onChange:l=>t("matchField1",l),placeholder:"e.g., id",value:e?.matchField1||""}),Te("p",{className:"text-muted-foreground text-xs",children:"Field name to match items on across all inputs."})]}),qe("div",{className:"space-y-2",children:[Te(M,{htmlFor:"joinType",children:"Join Type"}),qe(ve,{disabled:o,onValueChange:l=>t("joinType",l),value:e?.joinType||"inner",children:[Te(he,{id:"joinType",children:Te(xe,{})}),qe(be,{children:[Te(Z,{value:"inner",children:"Inner Join"}),Te(Z,{value:"leftOuter",children:"Left Outer Join"}),Te(Z,{value:"rightOuter",children:"Right Outer Join"}),Te(Z,{value:"fullOuter",children:"Full Outer Join"})]})]}),Te("p",{className:"text-muted-foreground text-xs",children:"Inner keeps only matches. Left/Right keeps all items from that input. Full keeps everything."})]})]})]})}import{Loader2 as ju}from"lucide-react";import{useEffect as Ju,useState as Hi}from"react";import{jsx as $t,jsxs as _n}from"react/jsx-runtime";function Gi({config:e,onUpdateConfig:t,disabled:o}){let[n,r]=Hi([]),[i,a]=Hi(!0);Ju(()=>{async function s(){try{let d=await fetch("/api/workflow-builder/workflows");if(d.ok){let c=await d.json();r((c.workflows||c||[]).map(u=>({id:u.id,name:u.name})))}}catch{}finally{a(!1)}}s()},[]);let l=e?.workflowId||"";return _n("div",{className:"space-y-4",children:[_n("div",{className:"space-y-2",children:[$t(M,{htmlFor:"workflowId",children:"Workflow"}),i?_n("div",{className:"flex items-center gap-2 rounded-md border px-3 py-2 text-muted-foreground text-sm",children:[$t(ju,{className:"size-4 animate-spin"}),"Loading workflows..."]}):_n(ve,{disabled:o||n.length===0,onValueChange:s=>t("workflowId",s),value:l||void 0,children:[$t(he,{className:"w-full",id:"workflowId",children:$t(xe,{placeholder:n.length===0?"No workflows found":"Select a workflow"})}),$t(be,{children:n.map(s=>$t(Z,{value:s.id,children:s.name},s.id))})]}),$t("p",{className:"text-muted-foreground text-xs",children:"The workflow to execute. It will run inline and wait for completion."})]}),_n("div",{className:"space-y-2",children:[$t(M,{htmlFor:"input",children:"Input (optional JSON)"}),$t(Le,{disabled:o,id:"input",onChange:s=>t("input",s),placeholder:'{"key": "value"} or {{PreviousNode.field}}',value:e?.input||""}),$t("p",{className:"text-muted-foreground text-xs",children:"Optional JSON passed as trigger input to the sub-workflow."})]})]})}import{ArrowDown as Yu,ArrowUp as Xu,Loader2 as Qu,Plus as Zu,Trash2 as em}from"lucide-react";import{useEffect as tm,useState as $i}from"react";import{jsx as Oe,jsxs as Ct}from"react/jsx-runtime";function _i({config:e,onUpdateConfig:t,disabled:o}){let[n,r]=$i([]),[i,a]=$i(!0);tm(()=>{async function m(){try{let b=await fetch("/api/workflow-builder/workflows");if(b.ok){let g=await b.json();r((g.workflows||g||[]).map(S=>({id:S.id,name:S.name})))}}catch{}finally{a(!1)}}m()},[]);let l=e?.workflowIds||"[]",s=[];try{let m=JSON.parse(l);Array.isArray(m)&&(s=m)}catch{s=l.split(",").map(m=>m.trim()).filter(Boolean)}let d=m=>{t("workflowIds",JSON.stringify(m))},c=m=>{m&&!s.includes(m)&&d([...s,m])},u=m=>{let b=[...s];b.splice(m,1),d(b)},f=m=>{if(m===0)return;let b=[...s];[b[m-1],b[m]]=[b[m],b[m-1]],d(b)},v=m=>{if(m===s.length-1)return;let b=[...s];[b[m],b[m+1]]=[b[m+1],b[m]],d(b)},C=m=>n.find(b=>b.id===m)?.name||m,h=n.filter(m=>!s.includes(m.id)),y=e?.continueOnFailure||"false";return Ct("div",{className:"space-y-4",children:[Ct("div",{className:"space-y-2",children:[Oe(M,{children:"Workflows (executed in order)"}),i?Ct("div",{className:"flex items-center gap-2 rounded-md border px-3 py-2 text-muted-foreground text-sm",children:[Oe(Qu,{className:"size-4 animate-spin"}),"Loading workflows..."]}):Ct("div",{className:"space-y-1",children:[s.map((m,b)=>Ct("div",{className:"flex items-center gap-1 rounded-md border bg-muted/30 px-2 py-1.5 text-sm",children:[Ct("span",{className:"w-5 shrink-0 text-center text-muted-foreground text-xs",children:[b+1,"."]}),Oe("span",{className:"min-w-0 flex-1 truncate",children:C(m)}),Oe(E,{className:"size-6",disabled:o||b===0,onClick:()=>f(b),size:"icon",variant:"ghost",children:Oe(Xu,{className:"size-3"})}),Oe(E,{className:"size-6",disabled:o||b===s.length-1,onClick:()=>v(b),size:"icon",variant:"ghost",children:Oe(Yu,{className:"size-3"})}),Oe(E,{className:"size-6 text-destructive hover:text-destructive",disabled:o,onClick:()=>u(b),size:"icon",variant:"ghost",children:Oe(em,{className:"size-3"})})]},`${m}-${b}`)),h.length>0&&Ct(ve,{disabled:o,onValueChange:c,value:"",children:[Oe(he,{className:N("w-full",s.length>0&&"border-dashed"),children:Ct("div",{className:"flex items-center gap-1.5 text-muted-foreground",children:[Oe(Zu,{className:"size-3.5"}),Oe("span",{children:"Add workflow..."})]})}),Oe(be,{children:h.map(m=>Oe(Z,{value:m.id,children:m.name},m.id))})]}),!i&&n.length===0&&Oe("p",{className:"text-muted-foreground text-xs",children:"No workflows found."})]})]}),Ct("div",{className:"space-y-2",children:[Oe(M,{htmlFor:"continueOnFailure",children:"On failure"}),Ct(ve,{disabled:o,onValueChange:m=>t("continueOnFailure",m),value:y,children:[Oe(he,{className:"w-full",id:"continueOnFailure",children:Oe(xe,{})}),Ct(be,{children:[Oe(Z,{value:"false",children:"Stop sequence"}),Oe(Z,{value:"true",children:"Continue with next workflow"})]})]})]}),Ct("div",{className:"space-y-2",children:[Oe(M,{htmlFor:"sequenceInput",children:"Input (optional JSON, passed to all workflows)"}),Oe(Le,{disabled:o,id:"sequenceInput",onChange:m=>t("input",m),placeholder:'{"key": "value"} or {{PreviousNode.field}}',value:e?.input||""}),Oe("p",{className:"text-muted-foreground text-xs",children:"Optional JSON passed as trigger input to every workflow in the sequence."})]})]})}import{Minus as om,Plus as nm}from"lucide-react";import{jsx as He,jsxs as vt}from"react/jsx-runtime";function Ui({config:e,onUpdateConfig:t,disabled:o}){let n=e?.mode||"rules",r=Number(e?.routeCount)||4,i=()=>{t("routeCount",String(r+1))},a=()=>{if(r<=1)return;let l=r-1;t(`routeName${l}`,""),t(`routeCondition${l}`,""),t(`routeCaseValue${l}`,""),t("routeCount",String(r-1))};return vt("div",{className:"space-y-4",children:[vt("div",{className:"space-y-2",children:[He(M,{htmlFor:"mode",children:"Mode"}),vt(ve,{disabled:o,onValueChange:l=>t("mode",l),value:n,children:[He(he,{id:"mode",children:He(xe,{placeholder:"Select mode"})}),vt(be,{children:[He(Z,{value:"rules",children:"Rules"}),He(Z,{value:"expression",children:"Expression"})]})]}),vt("p",{className:"text-muted-foreground text-xs",children:[n==="rules"&&"Each route has a condition. The first route whose condition is true wins.",n==="expression"&&"Compare a value against each route's case value. First match wins."]})]}),n==="expression"&&vt("div",{className:"space-y-2",children:[He(M,{htmlFor:"switchValue",children:"Value to Switch On"}),He(Le,{disabled:o,id:"switchValue",onChange:l=>t("switchValue",l),placeholder:"e.g., {{PreviousNode.statusCode}}",value:e?.switchValue||""}),He("p",{className:"text-muted-foreground text-xs",children:"The value to compare against each route's case value. Use @ to reference previous node outputs."})]}),Array.from({length:r},(l,s)=>vt("div",{className:"space-y-3 rounded-md border p-3",children:[vt("p",{className:"font-medium text-sm",children:["Route ",s+1]}),vt("div",{className:"space-y-2",children:[He(M,{htmlFor:`routeName${s}`,children:"Name (optional)"}),He(ae,{disabled:o,id:`routeName${s}`,onChange:d=>t(`routeName${s}`,d.target.value),placeholder:`Route ${s+1}`,value:e?.[`routeName${s}`]||""})]}),n==="rules"&&vt("div",{className:"space-y-2",children:[He(M,{htmlFor:`routeCondition${s}`,children:"Condition"}),He(Le,{disabled:o,id:`routeCondition${s}`,onChange:d=>t(`routeCondition${s}`,d),placeholder:"e.g., {{PreviousNode.status}} === 200",value:e?.[`routeCondition${s}`]||""})]}),n==="expression"&&vt("div",{className:"space-y-2",children:[He(M,{htmlFor:`routeCaseValue${s}`,children:"Case Value"}),He(Le,{disabled:o,id:`routeCaseValue${s}`,onChange:d=>t(`routeCaseValue${s}`,d),placeholder:`e.g., ${s===0?"200":s===1?"404":"500"}`,value:e?.[`routeCaseValue${s}`]||""})]})]},s)),vt("div",{className:"flex gap-2",children:[vt(E,{className:"flex-1",disabled:o,onClick:i,type:"button",variant:"outline",children:[He(nm,{className:"mr-2 size-4"}),"Add Route"]}),He(E,{disabled:o||r<=1,onClick:a,type:"button",variant:"outline",children:He(om,{className:"size-4"})})]}),He("p",{className:"text-muted-foreground text-xs",children:'Routes are evaluated in order. The first matching route wins. If no route matches, the result falls back to "Default".'})]})}import{atom as zr}from"jotai";var Br=zr(null),Ki=zr([]),qi=zr(!1),Yw=zr(!1);import{useAtomValue as Qi,useSetAtom as $a}from"jotai";import{Search as dm}from"lucide-react";import{useCallback as cm,useMemo as um,useState as gn}from"react";import{toast as Eo}from"sonner";import{atom as Un,useSetAtom as rm}from"jotai";import*as Ji from"react";var ji=null;var Po=Un(null),Vr=Un([]),Hr=Un(!1),Yi=Un(!1),jt=Un(null);function Xi(){let e=rm(jt);Ji.useEffect(()=>{ji&&e(ji)},[e])}import{Database as am,HelpCircle as sm}from"lucide-react";import{jsx as Kn}from"react/jsx-runtime";function im({className:e}){return Kn("svg",{className:e,fill:"currentColor",height:"12",viewBox:"0 0 1155 1000",width:"12",xmlns:"http://www.w3.org/2000/svg",children:Kn("path",{d:"m577.3 0 577.4 1000H0z"})})}var lm={database:am,vercel:im};function Wt({integration:e,className:t="h-3 w-3"}){let o=lm[e];if(o)return Kn(o,{className:N("text-foreground",t)});let n=Rt(e);if(n?.icon){let r=n.icon;return Kn(r,{className:N("text-foreground",t)})}return Kn(sm,{className:N("text-foreground",t)})}import{jsx as Ge,jsxs as ht}from"react/jsx-runtime";var mm=["database"],pm={database:"Database"},fm={database:"Connect to PostgreSQL databases"},gm=()=>[...ei(),...mm],_a=e=>to()[e]||pm[e]||e,ym=e=>Zs()[e]||fm[e]||"";function el({overlayId:e,onSuccess:t}){let{push:o,closeAll:n}=oe(),[r,i]=gn(""),a=Gt(),l=Qi(jt),s=Qi(Po),d=$a(Po),c=$a(Vr),u=$a(Hr),f=gm(),v=um(()=>{if(!r.trim())return f;let y=r.toLowerCase();return f.filter(m=>_a(m).toLowerCase().includes(y))},[f,r]),C=cm(()=>{l&&o(l.ConsentOverlay,{onConsent:y=>{t?.(y),n()}})},[l,o,n,t]),h=y=>{let m=l?.integrationType===y;if(m&&s?.enabled&&s?.isVercelUser){C();return}if(m&&s===null){l.api.getStatus().then(g=>{d(g),g?.enabled&&g?.isVercelUser?(u(!0),l.api.getTeams().then(S=>{c(S.teams)}).finally(()=>{u(!1),C()})):o(uo,{type:y,onSuccess:t})});return}o(uo,{type:y,onSuccess:t})};return ht(Re,{overlayId:e,title:"Add Connection",children:[Ge("p",{className:"-mt-2 mb-4 text-muted-foreground text-sm",children:"Select a service to connect"}),ht("div",{className:"space-y-3",children:[ht("div",{className:"relative",children:[Ge(dm,{className:"absolute top-1/2 left-3 size-4 -translate-y-1/2 text-muted-foreground"}),Ge(ae,{autoFocus:!a,className:"pl-9",onChange:y=>i(y.target.value),placeholder:"Search services...",value:r})]}),Ge("div",{className:"max-h-[300px] space-y-1 overflow-y-auto",children:v.length===0?Ge("p",{className:"py-4 text-center text-muted-foreground text-sm",children:"No services found"}):v.map(y=>{let m=ym(y);return ht("button",{className:"flex w-full items-center gap-3 rounded-md px-3 py-2 text-left text-sm transition-colors hover:bg-muted/50",onClick:()=>h(y),type:"button",children:[Ge(Wt,{className:"size-5 shrink-0",integration:y==="ai-gateway"?"vercel":y}),ht("span",{className:"min-w-0 flex-1 truncate",children:[Ge("span",{className:"font-medium",children:_a(y)}),m&&ht("span",{className:"text-muted-foreground text-xs",children:[" ","- ",m]})]})]},y)})})]})]})}function Zi({fieldId:e,label:t,configKey:o,placeholder:n,helpText:r,helpLink:i,value:a,onChange:l}){return ht("div",{className:"space-y-2",children:[Ge(M,{htmlFor:e,children:t}),Ge(ae,{className:"flex-1",id:e,onChange:s=>l(o,s.target.value),placeholder:n,type:"password",value:a}),(r||i)&&ht("p",{className:"text-muted-foreground text-xs",children:[r,i&&Ge("a",{className:"underline hover:text-foreground",href:i.url,rel:"noopener noreferrer",target:"_blank",children:i.text})]})]})}function uo({overlayId:e,type:t,onSuccess:o}){let{push:n,closeAll:r}=oe(),[i,a]=gn(!1),[l,s]=gn(!1),[d,c]=gn(null),[u,f]=gn(""),[v,C]=gn({}),h=(I,x)=>{C(p=>({...p,[I]:x}))},y=async()=>{try{a(!0);let I=await j.integration.create({name:u.trim(),type:t,config:v});Eo.success("Connection created"),o?.(I.id),r()}catch(I){console.error("Failed to save integration:",I),Eo.error("Failed to save connection")}finally{a(!1)}},m=async()=>{if(!Object.values(v).some(x=>x&&x.length>0)){Eo.error("Please enter credentials");return}try{a(!0),c(null);let x=await j.integration.testCredentials({type:t,config:v});if(x.status==="error"){n(Pe,{title:"Connection Test Failed",message:`The test failed: ${x.message}
1
+ "use client";import{a as Yo,b as Xo,c as Qo}from"../chunk-NI6U7PHC.js";import{i as vr}from"../chunk-VUDOAZ3W.js";import{a as ii,b as hr}from"../chunk-3YVRTDK2.js";import{a as N}from"../chunk-6UXAINJQ.js";import{d as ei,h as Mt,i as ti,k as oi,l as ni,m as ye,n as no,o as ri,p as ai,v as si,w as Ea,y as Jo}from"../chunk-QRG4O4PE.js";import{Check as cu,Clock as di,Loader2 as uu,Play as mu,Square as ci,Trash2 as pu,X as fu}from"lucide-react";import gu from"next/link";import{useCallback as yu,useEffect as li,useState as Ra}from"react";var Da=class extends Error{status;constructor(t,o){super(o),this.status=t,this.name="ApiError"}};async function ve(e,t){let o=await fetch(e,{...t,headers:{"Content-Type":"application/json",...t?.headers}});if(!o.ok){let n=await o.json().catch(()=>({error:"Unknown error"}));throw new Da(o.status,n.error||"Request failed")}return o.json()}function qc(e,t){e?.name&&(t.currentData.name=e.name)}function jc(e,t){e?.description&&(t.currentData.description=e.description)}function Jc(e,t){e?.node&&(t.currentData.nodes=[...t.currentData.nodes,e.node])}function Yc(e,t){e?.edge&&(t.currentData.edges=[...t.currentData.edges,e.edge])}function Xc(e,t){e?.nodeId&&(t.currentData.nodes=t.currentData.nodes.filter(o=>o.id!==e.nodeId),t.currentData.edges=t.currentData.edges.filter(o=>o.source!==e.nodeId&&o.target!==e.nodeId))}function Qc(e,t){e?.edgeId&&(t.currentData.edges=t.currentData.edges.filter(o=>o.id!==e.edgeId))}function Zc(e,t){e?.nodeId&&e.updates&&(t.currentData.nodes=t.currentData.nodes.map(o=>o.id===e.nodeId?{...o,...e.updates?.position?{position:e.updates.position}:{},...e.updates?.data?{data:{...o.data,...e.updates.data}}:{}}:o))}var eu={setName:qc,setDescription:jc,addNode:Jc,addEdge:Yc,removeNode:Xc,removeEdge:Qc,updateNode:Zc};function tu(e,t){if(!e?.op)return;let o=eu[e.op];o&&o(e,t)}function ou(e,t,o){if(e.trim())try{let n=JSON.parse(e);if(n.type==="operation"&&n.operation)tu(n.operation,o),t({...o.currentData});else if(n.type==="error")throw console.error("[API Client] Error:",n.error),new Error(n.error)}catch(n){console.error("[API Client] Failed to parse JSONL line:",n)}}function nu(e,t,o,n){n.buffer+=t.decode(e,{stream:!0});let r=n.buffer.split(`
2
+ `);n.buffer=r.pop()||"";for(let s of r)ou(s,o,n)}var ru={generate:(e,t)=>ve("/api/ai/generate",{method:"POST",body:JSON.stringify({prompt:e,existingWorkflow:t})}),generateStream:async(e,t,o)=>{let n=await fetch("/api/ai/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:e,existingWorkflow:o})});if(!n.ok)throw new Error(`HTTP error! status: ${n.status}`);if(!n.body)throw new Error("No response body");let r=n.body.getReader(),s=new TextDecoder,a={buffer:"",currentData:o?{nodes:o.nodes||[],edges:o.edges||[],name:o.name}:{nodes:[],edges:[]}};try{for(;;){let{done:d,value:i}=await r.read();if(d)break;nu(i,s,t,a)}return a.currentData}finally{r.releaseLock()}}},au={getAll:e=>ve(`/api/integrations${e?`?type=${e}`:""}`),get:e=>ve(`/api/integrations/${e}`),create:e=>ve("/api/integrations",{method:"POST",body:JSON.stringify(e)}),update:(e,t)=>ve(`/api/integrations/${e}`,{method:"PUT",body:JSON.stringify(t)}),delete:e=>ve(`/api/integrations/${e}`,{method:"DELETE"}),testConnection:e=>ve(`/api/integrations/${e}/test`,{method:"POST"}),testCredentials:e=>ve("/api/integrations/test",{method:"POST",body:JSON.stringify(e)})},su={get:()=>ve("/api/user"),update:e=>ve("/api/user",{method:"PATCH",body:JSON.stringify(e)})},br={getDashboardWorkflows:()=>ve("/api/workflows/dashboard"),getAll:()=>ve("/api/workflows"),getById:e=>ve(`/api/workflows/${e}`),create:e=>ve("/api/workflows/create",{method:"POST",body:JSON.stringify(e)}),update:(e,t)=>ve(`/api/workflows/${e}`,{method:"PATCH",body:JSON.stringify(t)}),delete:e=>ve(`/api/workflows/${e}`,{method:"DELETE"}),duplicate:e=>ve(`/api/workflows/${e}/duplicate`,{method:"POST"}),getCurrent:()=>ve("/api/workflows/current"),saveCurrent:(e,t)=>ve("/api/workflows/current",{method:"POST",body:JSON.stringify({nodes:e,edges:t})}),execute:(e,t={})=>ve(`/api/workflow/${e}/execute`,{method:"POST",body:JSON.stringify({input:t})}),triggerWebhook:(e,t={})=>ve(`/api/workflows/${e}/webhook`,{method:"POST",body:JSON.stringify(t)}),getCode:e=>ve(`/api/workflows/${e}/code`),getExecutions:e=>ve(`/api/workflows/${e}/executions`),deleteExecutions:e=>ve(`/api/workflows/${e}/executions`,{method:"DELETE"}),getExecutionLogs:e=>ve(`/api/workflows/executions/${e}/logs`),getExecutionStatus:e=>ve(`/api/workflows/executions/${e}/status`),cancelExecution:e=>ve(`/api/workflows/executions/${e}/cancel`,{method:"POST"}),download:e=>ve(`/api/workflows/${e}/download`),autoSaveCurrent:(()=>{let e=null,t=2e3;return(o,n)=>{e&&clearTimeout(e),e=setTimeout(()=>{br.saveCurrent(o,n).catch(r=>{console.error("Auto-save failed:",r)})},t)}})(),autoSaveWorkflow:(()=>{let e=null,t=2e3;return(o,n,r=!0)=>{if(!r)return br.update(o,n);e&&clearTimeout(e),e=setTimeout(()=>{br.update(o,n).catch(s=>{console.error("Auto-save failed:",s)})},t)}})()},iu={getStatus:()=>ve("/api/ai-gateway/status"),getTeams:()=>ve("/api/ai-gateway/teams"),consent:(e,t)=>ve("/api/ai-gateway/consent",{method:"POST",body:JSON.stringify({teamId:e,teamName:t})}),revokeConsent:()=>ve("/api/ai-gateway/consent",{method:"DELETE"})},U={ai:ru,aiGateway:iu,integration:au,user:su,workflow:br};function Zo(e,t){return`${e} ${t}${e===1?"":"s"} ago`}function wr(e){let t=new Date,o=new Date(e),n=Math.floor((t.getTime()-o.getTime())/1e3);if(n<60)return"just now";let r=Math.floor(n/60);if(r<60)return Zo(r,"min");let s=Math.floor(r/60);if(s<24)return Zo(s,"hour");let a=Math.floor(s/24);if(a<7)return Zo(a,"day");let d=Math.floor(a/7);if(d<4)return Zo(d,"week");let i=Math.floor(a/30);if(i<12)return Zo(i,"month");let l=Math.floor(a/365);return Zo(l,"year")}import{Loader2Icon as lu}from"lucide-react";import{jsx as du}from"react/jsx-runtime";function pt({className:e,...t}){let{ref:o,...n}=t;return du(lu,{role:"status","aria-label":"Loading",className:N("size-4 animate-spin",e),...n})}import{jsx as se,jsxs as ft}from"react/jsx-runtime";function vu({status:e}){let t={success:{class:"bg-green-600/15 text-green-600",icon:se(cu,{className:"h-3 w-3"}),label:"Success"},error:{class:"bg-red-600/15 text-red-600",icon:se(fu,{className:"h-3 w-3"}),label:"Error"},running:{class:"bg-blue-600/15 text-blue-600",icon:se(uu,{className:"h-3 w-3 animate-spin"}),label:"Running"},cancelled:{class:"bg-gray-600/15 text-gray-500",icon:se(ci,{className:"h-3 w-3"}),label:"Cancelled"},pending:{class:"bg-yellow-600/15 text-yellow-600",icon:se(di,{className:"h-3 w-3"}),label:"Pending"}},o=t[e]||t.pending;return ft("span",{className:N("inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",o.class),children:[o.icon,o.label]})}function Oa(){let[e,t]=Ra([]),[o,n]=Ra(!0),[r,s]=Ra({}),a=yu(async(y=!0)=>{try{y&&n(!0);let v=await U.workflow.getDashboardWorkflows();t(v)}catch(v){console.error("Failed to load workflows:",v)}finally{y&&n(!1)}},[]);li(()=>{a()},[a]),li(()=>{let y=setInterval(()=>a(!1),5e3);return()=>clearInterval(y)},[a]);let d=async y=>{s(v=>({...v,[y]:!0}));try{await U.workflow.execute(y),await a(!1)}catch(v){console.error("Failed to execute workflow:",v)}finally{s(v=>({...v,[y]:!1}))}},i=async(y,v)=>{s(p=>({...p,[v]:!0}));try{await U.workflow.cancelExecution(y),await a(!1)}catch(p){console.error("Failed to cancel execution:",p)}finally{s(p=>({...p,[v]:!1}))}},l=async(y,v)=>{if(confirm(`Delete "${v}"? This will also delete all its executions.`)){s(p=>({...p,[y]:!0}));try{await U.workflow.delete(y),t(p=>p.filter(m=>m.id!==y))}catch(p){console.error("Failed to delete workflow:",p)}finally{s(p=>({...p,[y]:!1}))}}},c=e.length,u=e.reduce((y,v)=>y+v.totalRuns,0),g=e.reduce((y,v)=>y+v.successCount,0),b=e.reduce((y,v)=>y+v.errorCount,0);return o?se("div",{className:"flex items-center justify-center py-24",children:se(pt,{})}):ft("div",{className:"pointer-events-auto mx-auto max-w-5xl px-6 py-10",children:[se("h1",{className:"mb-6 text-2xl font-bold",children:"Dashboard"}),ft("div",{className:"mb-8 grid grid-cols-2 gap-4 sm:grid-cols-4",children:[ft("div",{className:"rounded-lg border bg-card p-4",children:[se("div",{className:"text-sm text-muted-foreground",children:"Workflows"}),se("div",{className:"mt-1 text-2xl font-semibold",children:c})]}),ft("div",{className:"rounded-lg border bg-card p-4",children:[se("div",{className:"text-sm text-muted-foreground",children:"Total Runs"}),se("div",{className:"mt-1 text-2xl font-semibold",children:u})]}),ft("div",{className:"rounded-lg border bg-card p-4",children:[se("div",{className:"text-sm text-muted-foreground",children:"Successful"}),se("div",{className:"mt-1 text-2xl font-semibold text-green-600",children:g})]}),ft("div",{className:"rounded-lg border bg-card p-4",children:[se("div",{className:"text-sm text-muted-foreground",children:"Failed"}),se("div",{className:"mt-1 text-2xl font-semibold text-red-600",children:b})]})]}),e.length===0?ft("div",{className:"flex flex-col items-center justify-center rounded-lg border border-dashed py-16",children:[se(di,{className:"mb-3 h-8 w-8 text-muted-foreground"}),se("div",{className:"font-medium text-sm",children:"No workflows yet"}),se("div",{className:"mt-1 text-muted-foreground text-xs",children:"Create a workflow to get started"})]}):se("div",{className:"overflow-hidden rounded-lg border",children:ft("table",{className:"w-full",children:[se("thead",{children:ft("tr",{className:"border-b bg-muted/50 text-left text-xs font-medium text-muted-foreground",children:[se("th",{className:"px-4 py-3",children:"Workflow"}),se("th",{className:"px-4 py-3",children:"Runs"}),se("th",{className:"px-4 py-3",children:"Success"}),se("th",{className:"px-4 py-3",children:"Error"}),se("th",{className:"px-4 py-3",children:"Stopped"}),se("th",{className:"px-4 py-3",children:"Latest Run"}),se("th",{className:"px-4 py-3 text-right",children:"Actions"})]})}),se("tbody",{children:e.map(y=>ft("tr",{className:"border-b last:border-b-0 transition-colors hover:bg-muted/30",children:[ft("td",{className:"px-4 py-3",children:[se(gu,{className:"font-medium text-sm hover:underline",href:`/workflows/${y.id}`,children:y.name}),y.description&&se("div",{className:"mt-0.5 text-xs text-muted-foreground truncate max-w-[200px]",children:y.description})]}),se("td",{className:"px-4 py-3 text-sm tabular-nums",children:y.totalRuns}),se("td",{className:"px-4 py-3 text-sm tabular-nums text-green-600",children:y.successCount}),se("td",{className:"px-4 py-3 text-sm tabular-nums text-red-600",children:y.errorCount}),se("td",{className:"px-4 py-3 text-sm tabular-nums text-gray-500",children:y.cancelledCount}),se("td",{className:"px-4 py-3",children:y.latestRunStatus?ft("div",{className:"flex items-center gap-2",children:[se(vu,{status:y.latestRunStatus}),se("span",{className:"text-xs text-muted-foreground",children:y.latestRunStartedAt&&wr(y.latestRunStartedAt)})]}):se("span",{className:"text-xs text-muted-foreground",children:"-"})}),se("td",{className:"px-4 py-3 text-right",children:ft("div",{className:"inline-flex items-center gap-1",children:[y.runningExecutionId?se("button",{type:"button",className:"rounded p-1.5 text-orange-600 hover:bg-orange-600/10 disabled:opacity-50",title:"Stop running execution",disabled:r[y.id],onClick:()=>i(y.runningExecutionId,y.id),children:se(ci,{className:"h-3.5 w-3.5"})}):se("button",{type:"button",className:"rounded p-1.5 text-green-600 hover:bg-green-600/10 disabled:opacity-50",title:"Execute workflow",disabled:r[y.id],onClick:()=>d(y.id),children:se(mu,{className:"h-3.5 w-3.5"})}),se("button",{type:"button",className:"rounded p-1.5 text-red-600 hover:bg-red-600/10 disabled:opacity-50",title:"Delete workflow",disabled:r[y.id],onClick:()=>l(y.id,y.name),children:se(pu,{className:"h-3.5 w-3.5"})})]})})]},y.id))})]})})]})}import{AuthView as $f}from"@daveyplate/better-auth-ui";import{useParams as _f}from"next/navigation";import{useAtom as qt,useAtomValue as Pf,useSetAtom as Pt}from"jotai";import{ChevronLeft as Ef,ChevronRight as Df}from"lucide-react";import Rf from"next/link";import{useSearchParams as Of}from"next/navigation";import{useCallback as ho,useEffect as Et,useRef as Bo,useState as ys}from"react";import{toast as vs}from"sonner";import{atom as $n}from"jotai";var bt=$n([]),xr=$n(!1),Hh=$n(null),Wt=$n(0),ui=$n(e=>{let t=e(bt);return new Set(t.map(o=>o.id))});import{applyEdgeChanges as hu,applyNodeChanges as bu}from"@xyflow/react";import{atom as le}from"jotai";var re=le([]),ue=le([]),Te=le(null),Ue=le(null),fi=le(!1),mi=le(!1),St=le(!1),Ke=le(null),wt=le(""),Nr=le("private"),ao=le(!0),en=le({snapToGrid:!0,edgeStyle:"smoothstep"}),$t=le("properties"),kr=le(!1),so=le(null),Cr=le(null),Tr=le(!1),Sr=le(!1),gi=le(!1),Ar=le(!1),Ir=le(new Set),ro=le(null),Pr=le(!1),tn=le({}),La=null,wu=1e3,Ft=le(null,async(e,t,o)=>{let n=e(Ke),r=e(re),s=e(ue);if(!n)return;let a=async()=>{try{await U.workflow.update(n,{nodes:r,edges:s}),t(st,!1)}catch(d){console.error("Autosave failed:",d)}};o?.immediate?await a():(La&&clearTimeout(La),La=setTimeout(a,wu))}),yi=le(null,(e,t,o)=>{let n=e(re),r=o.filter(l=>l.type==="remove"?n.find(u=>u.id===l.id)?.data.type!=="trigger":!0),s=bu(r,n);t(re,s);let a=s.find(l=>l.selected);if(a){t(Te,a.id),t(Ue,null);let l=e(ro);l&&l!==a.id&&t(ro,null)}else if(e(Te)){let l=e(Te);s.find(u=>u.id===l)||t(Te,null),t(ro,null)}if(r.some(l=>l.type==="remove")){t(Ft,{immediate:!0});return}r.some(l=>l.type==="position"&&l.dragging===!1)&&t(Ft)}),vi=le(null,(e,t,o)=>{let n=e(ue),r=hu(o,n);t(ue,r);let s=r.find(d=>d.selected);if(s)t(Ue,s.id),t(Te,null);else if(e(Ue)){let d=e(Ue);r.find(l=>l.id===d)||t(Ue,null)}o.some(d=>d.type==="remove")&&t(Ft,{immediate:!0})}),on=le(null,(e,t,o)=>{let n=e(re),r=e(ue),s=e(at);t(at,[...s,{nodes:n,edges:r}]),t(Gt,[]);let a=n.map(l=>({...l,selected:!1})),d={...o,selected:!0},i=[...a,d];t(re,i),t(Te,o.id),o.data.type==="action"&&!o.data.config?.actionType&&t(ro,o.id),t(st,!0),t(Ft,{immediate:!0})}),io=le(null,(e,t,{id:o,data:n})=>{let r=e(re),a=r.find(c=>c.id===o)?.data.label,d=n.label,i=d!==void 0&&a!==d,l=r.map(c=>{if(c.id===o)return{...c,data:{...c.data,...n}};if(i&&a){let u=hi(c.data.config||{},o,a,d);if(u!==c.data.config)return{...c,data:{...c.data,config:u}}}return c});t(re,l),n.status||(t(st,!0),t(Ft))});function hi(e,t,o,n){let r=!1,s={};for(let[a,d]of Object.entries(e))if(typeof d=="string"){let i=new RegExp(`\\{\\{@${pi(t)}:${pi(o)}(\\.[^}]+)?\\}\\}`,"g"),l=d.replace(i,(c,u)=>(r=!0,`{{@${t}:${n}${u||""}}}`));s[a]=l}else if(typeof d=="object"&&d!==null&&!Array.isArray(d)){let i=hi(d,t,o,n);i!==d&&(r=!0),s[a]=i}else s[a]=d;return r?s:e}function pi(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var lo=le(null,(e,t,o)=>{let n=e(re);if(n.find(l=>l.id===o)?.data.type==="trigger")return;let s=e(ue),a=e(at);t(at,[...a,{nodes:n,edges:s}]),t(Gt,[]);let d=n.filter(l=>l.id!==o),i=s.filter(l=>l.source!==o&&l.target!==o);t(re,d),t(ue,i),e(Te)===o&&t(Te,null),t(st,!0),t(Ft,{immediate:!0})}),co=le(null,(e,t,o)=>{let n=e(re),r=e(ue),s=e(at);t(at,[...s,{nodes:n,edges:r}]),t(Gt,[]);let a=r.filter(d=>d.id!==o);t(ue,a),e(Ue)===o&&t(Ue,null),t(st,!0),t(Ft,{immediate:!0})}),bi=le(null,(e,t)=>{let o=e(re),n=e(ue),r=e(at);t(at,[...r,{nodes:o,edges:n}]),t(Gt,[]);let s=o.filter(i=>i.selected&&i.data.type!=="trigger").map(i=>i.id),a=o.filter(i=>i.data.type==="trigger"?!0:!i.selected),d=n.filter(i=>!(i.selected||s.includes(i.source)||s.includes(i.target)));t(re,a),t(ue,d),t(Te,null),t(Ue,null),t(st,!0),t(Ft,{immediate:!0})}),nn=le(null,(e,t)=>{let o=e(re),n=e(ue),r=e(at);t(at,[...r,{nodes:o,edges:n}]),t(Gt,[]);let s=o.filter(a=>a.data.type==="trigger");t(re,s),t(ue,[]),t(Te,null),t(Ue,null),t(st,!0),t(Ft,{immediate:!0})}),Kh=le(null,async(e,t)=>{try{t(mi,!0);let o=await U.workflow.getCurrent();t(re,o.nodes),t(ue,o.edges),o.id&&t(Ke,o.id)}catch(o){console.error("Failed to load workflow:",o)}finally{t(mi,!1)}}),qh=le(null,async(e,t,{name:o,description:n})=>{let r=e(re),s=e(ue);try{return await U.workflow.create({name:o,description:n,nodes:r,edges:s})}catch(a){throw console.error("Failed to save workflow:",a),a}}),Er=le(!1),st=le(!1),wi=le(!1),at=le([]),Gt=le([]),xi=le(null,(e,t)=>{let o=e(at);if(o.length===0)return;let n=e(re),r=e(ue),s=e(Gt);t(Gt,[...s,{nodes:n,edges:r}]);let a=[...o],d=a.pop();d&&(t(at,a),t(re,d.nodes),t(ue,d.edges),t(st,!0))}),Ni=le(null,(e,t)=>{let o=e(Gt);if(o.length===0)return;let n=e(re),r=e(ue),s=e(at);t(at,[...s,{nodes:n,edges:r}]);let a=[...o],d=a.pop();d&&(t(Gt,a),t(re,d.nodes),t(ue,d.edges),t(st,!0))}),ki=le(e=>e(at).length>0),Ci=le(e=>e(Gt).length>0),Dr=le(null,(e,t)=>{let n=e(re).map(r=>({...r,data:{...r.data,status:"idle"}}));t(re,n)});import*as Rr from"react";var Ma=768;function _t(){let[e,t]=Rr.useState(void 0);return Rr.useEffect(()=>{let o=window.matchMedia(`(max-width: ${Ma-1}px)`),n=()=>{t(window.innerWidth<Ma)};return o.addEventListener("change",n),t(window.innerWidth<Ma),()=>o.removeEventListener("change",n)},[]),!!e}import{Slot as xu}from"radix-ui";import{cva as Nu}from"class-variance-authority";import{jsx as ku}from"react/jsx-runtime";var Or=Nu("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function E({className:e,variant:t,size:o,asChild:n=!1,...r}){let s=n?xu.Slot:"button";return ku(s,{"data-slot":"button",className:N(Or({variant:t,size:o,className:e})),...r})}var Cu={"Database Query":"database"};function Tu(e){return ye(e)?.integration||Cu[e]}function Ti(e,t,o){let n=e.data.config?.actionType;if(!n)return null;let r=Tu(n);if(!r)return null;let s=e.data.config?.integrationId;if(s&&o.has(s))return null;let d=t.filter(i=>i.type===r);return d.length===1?{nodeId:e.id,newIntegrationId:d[0].id}:d.length===0&&s?{nodeId:e.id,newIntegrationId:void 0}:null}import{useAtom as yo,useAtomValue as ps,useSetAtom as zo}from"jotai";import{Copy as ql,Eraser as fs,Eye as xf,EyeOff as Nf,FileCode as jl,RefreshCw as Jl,Trash2 as sa}from"lucide-react";import{useCallback as kf,useEffect as Yl,useMemo as Cf,useRef as Xl,useState as rr}from"react";import{toast as In}from"sonner";import{AlertTriangleIcon as Lu}from"lucide-react";import{Loader2 as Su}from"lucide-react";import{jsx as rn,jsxs as Fa}from"react/jsx-runtime";function Wa({action:e}){return Fa(E,{disabled:e.disabled||e.loading,onClick:e.onClick,variant:e.variant??"default",children:[e.loading&&rn(Su,{className:"mr-2 size-4 animate-spin"}),e.label]})}function Si({actions:e,className:t,children:o}){if(o)return rn("div",{className:N("flex flex-col-reverse gap-2 p-6 pt-4 sm:flex-row sm:justify-end",t),children:o});if(!e||e.length===0)return null;let n=e.filter(i=>i.variant==="ghost"),r=e.filter(i=>i.variant==="outline"||i.variant==="secondary"),s=e.filter(i=>!i.variant||i.variant==="default"||i.variant==="destructive"),a=n.length>0,d=r.length>0||s.length>0;return Fa("div",{className:N("flex flex-col-reverse gap-2 p-6 pt-4 sm:flex-row",a&&d?"sm:justify-between":"sm:justify-end",t),children:[a&&rn("div",{className:"flex flex-col-reverse gap-2 sm:flex-row",children:n.map(i=>rn(Wa,{action:i},i.label))}),d&&Fa("div",{className:"flex flex-col-reverse gap-2 sm:flex-row",children:[r.map(i=>rn(Wa,{action:i},i.label)),s.map(i=>rn(Wa,{action:i},i.label))]})]})}import{ChevronLeftIcon as Eu,XIcon as Du}from"lucide-react";import{createContext as Ii,useCallback as an,useContext as Pi,useMemo as Au,useRef as Iu,useState as Pu}from"react";import{jsx as Ai}from"react/jsx-runtime";var Ei=Ii(null),Di=Ii([]);function za(){return`overlay-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function Ri({children:e}){let[t,o]=Pu([]),n=Iu([]);t.length>0&&(n.current=t);let r=an((u,g,b)=>{let y=za();return o([{id:y,component:u,props:g??{},options:b??{}}]),y},[]),s=an((u,g,b)=>{let y=za(),v={id:y,component:u,props:g??{},options:b??{}};return o(p=>[...p,v]),y},[]),a=an(()=>{o(u=>u.length<=1?(u[0]?.options.onClose?.(),[]):(u[u.length-1]?.options.onClose?.(),u.slice(0,-1)))},[]),d=an((u,g,b)=>{let y=za(),v={id:y,component:u,props:g??{},options:b??{}};return o(p=>p.length===0?[v]:(p[p.length-1]?.options.onClose?.(),[...p.slice(0,-1),v])),y},[]),i=an(()=>{o(u=>{for(let g of u)g.options.onClose?.();return[]})},[]),l=an(u=>{o(g=>{let b=g.findIndex(y=>y.id===u);if(b===-1)return g;for(let y=b;y<g.length;y++)g[y].options.onClose?.();return g.slice(0,b)})},[]),c=Au(()=>({stack:t,open:r,push:s,pop:a,replace:d,closeAll:i,close:l,hasOverlays:t.length>0,depth:t.length}),[t,r,s,a,d,i,l]);return Ai(Ei.Provider,{value:c,children:Ai(Di.Provider,{value:n.current,children:e})})}function oe(){let e=Pi(Ei);if(!e)throw new Error("useOverlay must be used within an OverlayProvider");return e}function Oi(e){let{stack:t}=oe(),o=Pi(Di),n=t.length>0?t:o,r=n.findIndex(s=>s.id===e);return{index:r,isFirst:r===0,isLast:r===n.length-1,depth:n.length,showBackButton:r>0}}import{jsx as So,jsxs as Li}from"react/jsx-runtime";function Ru({title:e,description:t,showBackButton:o,showCloseButton:n=!0,onBack:r,onClose:s,className:a}){let{pop:d,closeAll:i}=oe(),l=o??!1,c=()=>{r?r():d()},u=()=>{s?s():i()};return Li("div",{className:N("relative flex flex-col gap-1.5 p-6 pb-0",a),children:[Li("div",{className:"flex min-h-8 items-center gap-2",children:[l&&So(E,{"aria-label":"Go back",className:"ml-[-8px] size-8 shrink-0",onClick:c,size:"icon",variant:"ghost",children:So(Eu,{className:"size-5"})}),e&&So("h2",{className:"flex-1 font-semibold text-lg leading-none tracking-tight",children:e}),n&&So(E,{"aria-label":"Close",className:"absolute top-4 right-4 size-8 shrink-0 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",onClick:u,size:"icon",variant:"ghost",children:So(Du,{className:"size-4"})})]}),t&&So("p",{className:"text-muted-foreground text-sm",children:t})]})}function sn({overlayId:e,showBackButton:t,...o}){let{showBackButton:n}=Oi(e);return So(Ru,{...o,showBackButton:t??n})}import{jsx as Ba,jsxs as Ou}from"react/jsx-runtime";function Oe({overlayId:e,title:t,description:o,actions:n,children:r,className:s}){return Ou("div",{className:N("flex flex-col",s),children:[(t||o)&&Ba(sn,{description:o,overlayId:e,title:t}),r&&Ba("div",{className:"flex-1 overflow-y-auto p-6",children:r}),Ba(Si,{actions:n})]})}import{jsx as Lr,jsxs as Mu}from"react/jsx-runtime";function Ee({overlayId:e,title:t="Confirm",message:o,confirmLabel:n="Confirm",cancelLabel:r="Cancel",confirmVariant:s="default",destructive:a=!1,onConfirm:d,onCancel:i}){let{pop:l}=oe();return Lr(Oe,{actions:[{label:r,variant:"outline",onClick:()=>{i?.(),l()}},{label:n,variant:a?"destructive":s,onClick:async()=>{await d(),l()}}],overlayId:e,title:t,children:Mu("div",{className:"flex gap-4",children:[a&&Lr("div",{className:"flex size-10 shrink-0 items-center justify-center rounded-full bg-destructive/10",children:Lr(Lu,{className:"size-5 text-destructive"})}),Lr("p",{className:N("text-muted-foreground text-sm",a&&"pt-2"),children:o})]})})}import{AlertDialog as uo}from"radix-ui";import{jsx as zt,jsxs as zu}from"react/jsx-runtime";function ln({...e}){return zt(uo.Root,{"data-slot":"alert-dialog",...e})}function Wu({...e}){return zt(uo.Portal,{"data-slot":"alert-dialog-portal",...e})}function Fu({className:e,...t}){return zt(uo.Overlay,{"data-slot":"alert-dialog-overlay",className:N("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",e),...t})}function dn({className:e,...t}){return zu(Wu,{children:[zt(Fu,{}),zt(uo.Content,{"data-slot":"alert-dialog-content",className:N("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",e),...t})]})}function cn({className:e,...t}){return zt("div",{"data-slot":"alert-dialog-header",className:N("flex flex-col gap-2 text-center sm:text-left",e),...t})}function un({className:e,...t}){return zt("div",{"data-slot":"alert-dialog-footer",className:N("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",e),...t})}function mn({className:e,...t}){return zt(uo.Title,{"data-slot":"alert-dialog-title",className:N("text-lg font-semibold",e),...t})}function pn({className:e,...t}){return zt(uo.Description,{"data-slot":"alert-dialog-description",className:N("text-muted-foreground text-sm",e),...t})}function fn({className:e,...t}){return zt(uo.Action,{className:N(Or(),e),...t})}function gn({className:e,...t}){return zt(uo.Cancel,{className:N(Or({variant:"outline"}),e),...t})}import Bu from"@monaco-editor/react";import{useTheme as Vu}from"next-themes";var Mi={base:"vs-dark",inherit:!0,rules:[{token:"",foreground:"ededed"},{token:"comment",foreground:"a1a1a1",fontStyle:"italic"},{token:"keyword",foreground:"ff4d8d"},{token:"keyword.operator",foreground:"ff4d8d"},{token:"string",foreground:"00ca50"},{token:"string.escape",foreground:"00ca50"},{token:"number",foreground:"ffffff"},{token:"type",foreground:"47a8ff"},{token:"type.identifier",foreground:"47a8ff"},{token:"identifier",foreground:"ededed"},{token:"parameter",foreground:"ededed"},{token:"variable",foreground:"ededed"},{token:"variable.parameter",foreground:"ededed"},{token:"function",foreground:"c472fb"},{token:"identifier.function",foreground:"c472fb"},{token:"member.function",foreground:"c472fb"},{token:"constant.language",foreground:"47a8ff"},{token:"keyword.json",foreground:"47a8ff"},{token:"variable.predefined",foreground:"ededed"},{token:"support.variable",foreground:"ededed"},{token:"support.constant",foreground:"ededed"},{token:"delimiter",foreground:"ededed"},{token:"delimiter.bracket",foreground:"ededed"},{token:"delimiter.parenthesis",foreground:"ededed"},{token:"delimiter.curly",foreground:"ededed"},{token:"delimiter.array",foreground:"ededed"},{token:"punctuation",foreground:"ededed"},{token:"operator",foreground:"ededed"},{token:"string.key.json",foreground:"47a8ff"},{token:"string.value.json",foreground:"00ca50"},{token:"number.json",foreground:"ffffff"},{token:"keyword.json",foreground:"47a8ff"}],colors:{"editor.background":"#000000","editor.foreground":"#ededed","editorLineNumber.foreground":"#444444","editorLineNumber.activeForeground":"#888888","editor.lineHighlightBackground":"#0A0A0A","editor.selectionBackground":"#264F78","editor.inactiveSelectionBackground":"#1A1A1A","editorCursor.foreground":"#FFFFFF","editorWhitespace.foreground":"#333333","editorIndentGuide.background":"#1A1A1A","editorIndentGuide.activeBackground":"#333333","editorBracketMatch.background":"#0A0A0A","editorBracketMatch.border":"#444444"}};import{jsx as Hu}from"react/jsx-runtime";function xt(e){let{resolvedTheme:t}=Vu();return Hu(Bu,{...e,onMount:(n,r)=>{r.editor.defineTheme("vercel-dark",Mi),r.editor.setTheme(t==="dark"?"vercel-dark":"light"),e.onMount&&e.onMount(n,r)},theme:t==="dark"?"vercel-dark":"light"})}import{jsx as Gu}from"react/jsx-runtime";function ae({className:e,type:t,...o}){return Gu("input",{type:t,"data-slot":"input",className:N("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground bg-transparent border-input h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",e),...o})}import{Label as $u}from"radix-ui";import{jsx as _u}from"react/jsx-runtime";function L({className:e,...t}){return _u($u.Root,{"data-slot":"label",className:N("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",e),...t})}import{Tabs as Mr}from"radix-ui";import{jsx as Wr}from"react/jsx-runtime";function Va({className:e,...t}){return Wr(Mr.Root,{"data-slot":"tabs",className:N("flex flex-col gap-2",e),...t})}function Ha({className:e,...t}){return Wr(Mr.List,{"data-slot":"tabs-list",className:N("bg-muted text-muted-foreground inline-flex h-10 w-fit items-center justify-center rounded-lg p-[3px]",e),...t})}function Ao({className:e,...t}){return Wr(Mr.Trigger,{"data-slot":"tabs-trigger",className:N("data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-sm border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...t})}function Io({className:e,...t}){return Wr(Mr.Content,{"data-slot":"tabs-content",className:N("flex-1 outline-none",e),...t})}import{useAtomValue as Nl,useSetAtom as fp}from"jotai";import{HelpCircle as gp,Plus as yp,Settings as vp}from"lucide-react";import{useEffect as hp,useMemo as Jr,useState as bp}from"react";import{Select as it}from"radix-ui";import{CheckIcon as Uu,ChevronDownIcon as Wi,ChevronUpIcon as Ku}from"lucide-react";import{jsx as He,jsxs as Ga}from"react/jsx-runtime";function he({...e}){return He(it.Root,{"data-slot":"select",...e})}function Fi({...e}){return He(it.Group,{"data-slot":"select-group",...e})}function xe({...e}){return He(it.Value,{"data-slot":"select-value",...e})}function be({className:e,size:t="default",children:o,...n}){return Ga(it.Trigger,{"data-slot":"select-trigger","data-size":t,className:N("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-transparent hover:bg-accent/50 flex w-fit items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...n,children:[o,He(it.Icon,{asChild:!0,children:He(Wi,{className:"size-4 opacity-50"})})]})}function we({className:e,children:t,position:o="popper",align:n="center",...r}){return He(it.Portal,{children:Ga(it.Content,{"data-slot":"select-content",className:N("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",o==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:o,align:n,...r,children:[He(qu,{}),He(it.Viewport,{className:N("p-1",o==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:t}),He(ju,{})]})})}function zi({className:e,...t}){return He(it.Label,{"data-slot":"select-label",className:N("text-muted-foreground px-2 py-1.5 text-xs",e),...t})}function Q({className:e,children:t,...o}){return Ga(it.Item,{"data-slot":"select-item",className:N("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...o,children:[He("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:He(it.ItemIndicator,{children:He(Uu,{className:"size-4"})})}),He(it.ItemText,{children:t})]})}function Fr({className:e,...t}){return He(it.Separator,{"data-slot":"select-separator",className:N("bg-border pointer-events-none -mx-1 my-1 h-px",e),...t})}function qu({className:e,...t}){return He(it.ScrollUpButton,{"data-slot":"select-scroll-up-button",className:N("flex cursor-default items-center justify-center py-1",e),...t,children:He(Ku,{className:"size-4"})})}function ju({className:e,...t}){return He(it.ScrollDownButton,{"data-slot":"select-scroll-down-button",className:N("flex cursor-default items-center justify-center py-1",e),...t,children:He(Wi,{className:"size-4"})})}import{useAtom as Hi}from"jotai";import{useEffect as $a,useRef as _a,useState as yn}from"react";import{useAtom as Bi}from"jotai";import{Check as Ju}from"lucide-react";import{useEffect as zr,useRef as Yu,useState as Vi}from"react";import{createPortal as Xu}from"react-dom";import{Fragment as tm,jsx as _n,jsxs as Br}from"react/jsx-runtime";var Qu=e=>{if(e.data.label)return e.data.label;if(e.data.type==="action"){let t=e.data.config?.actionType;if(t){let o=ye(t);if(o?.label)return o.label}return t||"HTTP Request"}return e.data.type==="trigger"?e.data.config?.triggerType||"Manual":"Node"},Un=(e,t="")=>{let o=[];for(let n of e){let r=t?`${t}.${n.name}`:n.name,s=n.type==="array"?`${n.itemType}[]`:n.type==="enum"?`enum<${(n.enumValues||[]).join(" | ")||n.enumItemType||"string"}>`:n.type,a=n.description||`${s}`;if(o.push({field:r,description:a}),n.type==="object"&&n.fields&&n.fields.length>0&&o.push(...Un(n.fields,r)),n.type==="array"&&n.itemType==="object"&&n.fields&&n.fields.length>0){let d=`${r}[0]`;o.push(...Un(n.fields,d))}}return o},Zu=(e,...t)=>e?t.some(o=>e===o||e.endsWith(`/${o.toLowerCase().replace(/\s+/g,"-")}`)):!1,em=e=>{let t=e.data.config?.actionType;if(t==="HTTP Request")return[{field:"data",description:"Response data"},{field:"status",description:"HTTP status code"}];if(t==="Database Query"){let o=e.data.config?.dbSchema;if(o)try{let n=JSON.parse(o);if(n.length>0)return Un(n)}catch{}return[{field:"rows",description:"Query result rows"},{field:"count",description:"Number of rows"}]}if(Zu(t,"Generate Text","ai-gateway/generate-text")){let o=e.data.config?.aiFormat,n=e.data.config?.aiSchema;if(o==="object"&&n)try{let r=JSON.parse(n);if(r.length>0)return Un(r,"object")}catch{}return[{field:"text",description:"Generated text"}]}if(t){let o=ye(t);if(o?.outputFields&&o.outputFields.length>0)return o.outputFields}if(e.data.type==="trigger"){let o=e.data.config?.triggerType,n=e.data.config?.webhookSchema;if(o==="Webhook"&&n)try{let r=JSON.parse(n);if(r.length>0)return Un(r)}catch{}return[{field:"triggered",description:"Trigger status"},{field:"timestamp",description:"Trigger timestamp"},{field:"input",description:"Input data"}]}return[{field:"data",description:"Output data"}]};function Vr({isOpen:e,position:t,onSelect:o,onClose:n,currentNodeId:r,filter:s=""}){let[a]=Bi(re),[d]=Bi(ue),[i,l]=Vi(0),c=Yu(null),[u,g]=Vi(!1);zr(()=>(g(!0),()=>g(!1)),[]);let y=(()=>{if(!r)return[];let h=new Set,S=[],D=I=>{if(h.has(I))return;h.add(I);let k=d.filter(f=>f.target===I);for(let f of k)S.push(f.source),D(f.source)};return D(r),a.filter(I=>S.includes(I.id))})(),v=[];for(let h of y){let S=Qu(h),D=em(h);v.push({type:"node",nodeId:h.id,nodeName:S,template:`{{@${h.id}:${S}}}`});for(let I of D)v.push({type:"field",nodeId:h.id,nodeName:S,field:I.field,description:I.description,template:`{{@${h.id}:${S}.${I.field}}}`})}let p=s?v.filter(h=>h.nodeName.toLowerCase().includes(s.toLowerCase())||h.field&&h.field.toLowerCase().includes(s.toLowerCase())):v;if(zr(()=>{l(0)},[s]),zr(()=>{let h=S=>{if(e)switch(S.key){case"ArrowDown":S.preventDefault(),l(D=>D<p.length-1?D+1:D);break;case"ArrowUp":S.preventDefault(),l(D=>D>0?D-1:D);break;case"Enter":S.preventDefault(),p[i]&&o(p[i].template);break;case"Escape":S.preventDefault(),n();break}};return window.addEventListener("keydown",h),()=>window.removeEventListener("keydown",h)},[e,p,i,o,n]),zr(()=>{if(c.current){let h=c.current.children[i];h&&h.scrollIntoView({block:"nearest"})}},[i]),!e||p.length===0||!u)return null;let m={top:Math.min(t.top,window.innerHeight-300),left:Math.min(t.left,window.innerWidth-320)},w=_n("div",{className:"fixed z-[9999] w-80 rounded-lg border bg-popover p-1 text-popover-foreground shadow-md",ref:c,style:{top:`${m.top}px`,left:`${m.left}px`},children:_n("div",{className:"max-h-60 overflow-y-auto",children:p.map((h,S)=>Br("div",{className:N("flex cursor-pointer items-center justify-between rounded px-2 py-1.5 text-sm transition-colors",S===i?"bg-accent text-accent-foreground":"hover:bg-accent/50"),onClick:()=>o(h.template),onMouseEnter:()=>l(S),children:[Br("div",{className:"flex-1",children:[_n("div",{className:"font-medium",children:h.type==="node"?h.nodeName:Br(tm,{children:[Br("span",{className:"text-muted-foreground",children:[h.nodeName,"."]}),h.field]})}),h.description&&_n("div",{className:"text-muted-foreground text-xs",children:h.description})]}),S===i&&_n(Ju,{className:"h-4 w-4"})]},`${h.nodeId}-${h.field||"root"}`))})});return Xu(w,document.body)}import{Fragment as rm,jsx as Ua,jsxs as am}from"react/jsx-runtime";function om(e,t){let o=e.match(/\{\{@([^:]+):([^}]+)\}\}/);if(!o)return!1;let n=o[1];return t.some(r=>r.id===n)}function nm(e,t){let o=e.match(/\{\{@([^:]+):([^}]+)\}\}/);if(!o)return e;let n=o[1],r=o[2],s=t.find(l=>l.id===n);if(!s)return r;let a=s.data.label;if(!a&&s.data.type==="action"){let l=s.data.config?.actionType;l&&(a=ye(l)?.label)}let d=r.indexOf(".");if(d===-1)return a??r;let i=r.substring(d+1);return a?`${a}.${i}`:r}function We({value:e="",onChange:t,placeholder:o,disabled:n,className:r,id:s}){let[a,d]=yn(!1),i=_a(null),[l,c]=yn(e),u=_a(!0),[g]=Hi(Te),[b]=Hi(re),[y,v]=yn(!1),[p,m]=yn({top:0,left:0}),[w,h]=yn(""),[S,D]=yn(null),I=_a(null);$a(()=>{e!==l&&!a&&(c(e),u.current=!0)},[e,a,l]),$a(()=>{!a&&l&&(u.current=!0)},[b,a,l]);let k=()=>{if(!i.current)return null;let H=window.getSelection();if(!H||H.rangeCount===0)return null;let X=H.getRangeAt(0),z=X.cloneRange();z.selectNodeContents(i.current),z.setEnd(X.endContainer,X.endOffset);let j=0,A=document.createTreeWalker(i.current,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,null),B,C=!1;for(;(B=A.nextNode())&&!C;)if(B.nodeType===Node.TEXT_NODE)if(B===X.endContainer)j+=X.endOffset,C=!0;else{let R=(B.textContent||"").length;j+=R}else if(B.nodeType===Node.ELEMENT_NODE){let R=B,_=R.getAttribute("data-template");_&&(R.contains(X.endContainer)||R===X.endContainer?(j+=_.length,C=!0):j+=_.length)}return{offset:j}},f=H=>{if(!i.current||!H)return;let X=0,z=document.createTreeWalker(i.current,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,null),j,A=null,B=0;for(;j=z.nextNode();)if(j.nodeType===Node.TEXT_NODE){let C=(j.textContent||"").length;if(X+C>=H.offset){A=j,B=H.offset-X;break}X+=C}else if(j.nodeType===Node.ELEMENT_NODE){let C=j,R=C.getAttribute("data-template");if(R){if(X+R.length>=H.offset){A=C.nextSibling,B=0,!A&&C.parentNode&&(A=document.createTextNode(""),C.parentNode.appendChild(A));break}X+=R.length}}if(A){let C=document.createRange(),R=window.getSelection();try{let _=Math.min(B,A.textContent?.length||0);C.setStart(A,_),C.collapse(!0),R?.removeAllRanges(),R?.addRange(C),i.current.focus()}catch{i.current.focus()}}},x=()=>{if(!i.current||!u.current)return;let H=i.current,X=l||"",z=a?k():null;if(I.current!==null&&(z={offset:I.current},I.current=null),H.innerHTML="",!X&&!a){H.innerHTML=`<span class="text-muted-foreground pointer-events-none">${o||""}</span>`;return}let j=/\{\{@([^:]+):([^}]+)\}\}/g,A=0,B;for(;(B=j.exec(X))!==null;){let[C]=B,R=B.index;if(R>A){let de=X.slice(A,R),V=document.createTextNode(de);H.appendChild(V)}let _=document.createElement("span"),ne=om(C,b);_.className=ne?"inline-flex items-center gap-1 rounded bg-blue-500/10 px-1.5 py-0.5 text-blue-600 dark:text-blue-400 font-mono text-xs border border-blue-500/20 mx-0.5":"inline-flex items-center gap-1 rounded bg-red-500/10 px-1.5 py-0.5 text-red-600 dark:text-red-400 font-mono text-xs border border-red-500/20 mx-0.5",_.contentEditable="false",_.setAttribute("data-template",C),_.textContent=nm(C,b),H.appendChild(_),A=j.lastIndex}if(A<X.length){let C=X.slice(A),R=document.createTextNode(C);H.appendChild(R)}H.innerHTML===""&&a&&(H.innerHTML="<br>"),u.current=!1,z&&requestAnimationFrame(()=>f(z))},G=()=>{if(!i.current)return"";let H="",X=document.createTreeWalker(i.current,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,null),z;for(;z=X.nextNode();)if(z.nodeType===Node.TEXT_NODE){let j=z.parentElement,A=!1;for(;j&&j!==i.current;){if(j.getAttribute("data-template")){A=!0;break}j=j.parentElement}A||(H+=z.textContent)}else if(z.nodeType===Node.ELEMENT_NODE){let A=z.getAttribute("data-template");A&&(H+=A)}return H},te=()=>{let H=G();if(H===l)return;let X=(l.match(/\{\{@([^:]+):([^}]+)\}\}/g)||[]).length,z=(H.match(/\{\{@([^:]+):([^}]+)\}\}/g)||[]).length;if(z>X){c(H),t?.(H),u.current=!0,v(!1),requestAnimationFrame(()=>x());return}if(z===X&&z>0){c(H),t?.(H);let A=H.lastIndexOf("@");if(A!==-1){let B=H.slice(A+1);if(B.includes(" "))v(!1);else{if(h(B),D(A),i.current){let C=i.current.getBoundingClientRect(),R={top:C.bottom+window.scrollY+4,left:C.left+window.scrollX};m(R)}v(!0)}}else v(!1);return}if(z<X){c(H),t?.(H),u.current=!0,requestAnimationFrame(()=>x());return}c(H),t?.(H);let j=H.lastIndexOf("@");if(j!==-1){let A=H.slice(j+1);if(A.includes(" "))v(!1);else{if(h(A),D(j),i.current){let B=i.current.getBoundingClientRect(),C={top:B.bottom+window.scrollY+4,left:B.left+window.scrollX};m(C)}v(!0)}}else v(!1)},O=H=>{if(!i.current||S===null)return;let X=G(),z=X.slice(0,S),j=X.slice(S+1+w.length),A=z+H+j,B=z.length+H.length;c(A),t?.(A),u.current=!0,v(!1),D(null),I.current=B,i.current.focus()},W=()=>{d(!0),u.current=!0},$=()=>{setTimeout(()=>{document.activeElement!==i.current&&(d(!1),u.current=!0,v(!1))},200)},T=H=>{H.preventDefault();let X=H.clipboardData.getData("text/plain");document.execCommand("insertText",!1,X)};return $a(()=>{u.current&&x()},[l,a]),am(rm,{children:[Ua("div",{className:N("flex min-h-9 w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm transition-colors focus-within:outline-none focus-within:ring-1 focus-within:ring-ring",n&&"cursor-not-allowed opacity-50",r),children:Ua("div",{className:"w-full outline-none",contentEditable:!n,id:s,onBlur:$,onFocus:W,onInput:te,onPaste:T,ref:i,role:"textbox",suppressContentEditableWarning:!0})}),Ua(Vr,{currentNodeId:g||void 0,filter:w,isOpen:y,onClose:()=>v(!1),onSelect:O,position:p})]})}import{jsx as lt,jsxs as Po}from"react/jsx-runtime";function Gi({config:e,onUpdateConfig:t,onUpdateMultipleConfig:o,disabled:n}){let r=e?.dataType||"string",s=e?.operator||hr[r][0].value,a=hr[r],i=a.find(c=>c.value===s)?.unary??!1;function l(c){let g=hr[c]?.[0]?.value??"";o?o({dataType:c,operator:g}):(t("dataType",c),g&&t("operator",g))}return Po("div",{className:"space-y-4",children:[Po("div",{className:"space-y-2",children:[lt(L,{htmlFor:"leftValue",children:"Value to Test"}),lt(We,{disabled:n,id:"leftValue",onChange:c=>t("leftValue",c),placeholder:"e.g., {{PreviousNode.status}}",value:e?.leftValue||""}),lt("p",{className:"text-muted-foreground text-xs",children:"Use @ to reference previous node outputs."})]}),Po("div",{className:"space-y-2",children:[lt(L,{htmlFor:"dataType",children:"Data Type"}),Po(he,{disabled:n,onValueChange:l,value:r,children:[lt(be,{id:"dataType",children:lt(xe,{placeholder:"Select data type"})}),lt(we,{children:ii.map(c=>lt(Q,{value:c.value,children:c.label},c.value))})]})]}),Po("div",{className:"space-y-2",children:[lt(L,{htmlFor:"operator",children:"Operator"}),Po(he,{disabled:n,onValueChange:c=>t("operator",c),value:s,children:[lt(be,{id:"operator",children:lt(xe,{placeholder:"Select operator"})}),lt(we,{children:a.map(c=>lt(Q,{value:c.value,children:c.label},c.value))})]})]}),!i&&Po("div",{className:"space-y-2",children:[lt(L,{htmlFor:"rightValue",children:"Compare Value"}),lt(We,{disabled:n,id:"rightValue",onChange:c=>t("rightValue",c),placeholder:"e.g., 200 or {{OtherNode.field}}",value:e?.rightValue||""})]})]})}import{Plus as $i,Trash2 as _i}from"lucide-react";import{nanoid as sm}from"nanoid";import{jsx as ce,jsxs as Fe}from"react/jsx-runtime";function mo({schema:e,onChange:t,disabled:o,level:n=0}){let r=()=>{t([...e,{id:sm(),name:"",type:"string"}])},s=(c,u)=>{let g={...c};return u!=="array"&&(g.itemType=void 0),u!=="object"&&(g.fields=void 0),u!=="enum"&&(g.enumValues=void 0,g.enumItemType=void 0),u==="array"&&!g.itemType&&(g.itemType="string"),u==="object"&&!g.fields&&(g.fields=[]),u==="enum"&&!g.enumValues&&(g.enumValues=[],g.enumItemType="string"),g},a=(c,u)=>{let g=[...e];g[c]={...g[c],...u},u.type&&(g[c]=s(g[c],u.type)),t(g)},d=c=>{t(e.filter((u,g)=>g!==c))},i=(c,u)=>{let g=[...e];g[c].fields=u,t(g)},l=n>0?"ml-4 border-l-2 border-muted pl-4":"";return Fe("div",{className:`space-y-3 ${l}`,children:[e.map((c,u)=>{let g=c.id||`field-${n}-${u}`;return Fe("div",{className:"space-y-2 rounded-md border p-3",children:[Fe("div",{className:"flex gap-2",children:[Fe("div",{className:"flex-1 space-y-2",children:[ce(L,{className:"ml-1",htmlFor:`field-name-${n}-${u}`,children:"Property Name"}),ce(ae,{disabled:o,id:`field-name-${n}-${u}`,onChange:b=>a(u,{name:b.target.value}),placeholder:"propertyName",value:c.name})]}),Fe("div",{className:"flex-1 space-y-2",children:[ce(L,{className:"ml-1",htmlFor:`field-type-${n}-${u}`,children:"Type"}),Fe(he,{disabled:o,onValueChange:b=>a(u,{type:b}),value:c.type,children:[ce(be,{className:"w-full",id:`field-type-${n}-${u}`,children:ce(xe,{})}),Fe(we,{children:[ce(Q,{value:"string",children:"String"}),ce(Q,{value:"number",children:"Number"}),ce(Q,{value:"boolean",children:"Boolean"}),ce(Q,{value:"enum",children:"Enum"}),ce(Q,{value:"array",children:"Array"}),ce(Q,{value:"object",children:"Object"})]})]})]}),ce("div",{className:"flex items-end",children:ce(E,{disabled:o,onClick:()=>d(u),size:"icon",variant:"ghost",children:ce(_i,{className:"h-4 w-4"})})})]}),c.type==="array"&&Fe("div",{className:"space-y-2",children:[ce(L,{className:"ml-1",htmlFor:`field-item-type-${n}-${u}`,children:"Array Item Type"}),Fe(he,{disabled:o,onValueChange:b=>a(u,{itemType:b}),value:c.itemType||"string",children:[ce(be,{className:"w-full",id:`field-item-type-${n}-${u}`,children:ce(xe,{})}),Fe(we,{children:[ce(Q,{value:"string",children:"String"}),ce(Q,{value:"number",children:"Number"}),ce(Q,{value:"boolean",children:"Boolean"}),ce(Q,{value:"object",children:"Object"})]})]})]}),c.type==="enum"&&Fe("div",{className:"space-y-3",children:[Fe("div",{className:"space-y-2",children:[ce(L,{className:"ml-1",htmlFor:`field-enum-type-${n}-${u}`,children:"Value Type"}),Fe(he,{disabled:o,onValueChange:b=>a(u,{enumItemType:b}),value:c.enumItemType||"string",children:[ce(be,{className:"w-full",id:`field-enum-type-${n}-${u}`,children:ce(xe,{})}),Fe(we,{children:[ce(Q,{value:"string",children:"String"}),ce(Q,{value:"number",children:"Number"}),ce(Q,{value:"boolean",children:"Boolean"})]})]})]}),Fe("div",{className:"space-y-2",children:[ce(L,{className:"ml-1",children:"Allowed Values"}),(c.enumValues||[]).map((b,y)=>Fe("div",{className:"flex gap-2",children:[ce(ae,{disabled:o,onChange:v=>{let p=[...c.enumValues||[]];p[y]=v.target.value,a(u,{enumValues:p})},placeholder:c.enumItemType==="boolean"?"true or false":c.enumItemType==="number"?"e.g. 42":"e.g. active",value:b}),ce(E,{disabled:o,onClick:()=>{let v=(c.enumValues||[]).filter((p,m)=>m!==y);a(u,{enumValues:v})},size:"icon",variant:"ghost",children:ce(_i,{className:"h-4 w-4"})})]},y)),Fe(E,{className:"w-full",disabled:o,onClick:()=>{let b=[...c.enumValues||[],""];a(u,{enumValues:b})},type:"button",variant:"outline",children:[ce($i,{className:"size-4"}),"Add Value"]})]})]}),c.type==="object"&&Fe("div",{className:"mt-2",children:[ce(L,{className:"mb-2 block",children:"Object Properties"}),ce(mo,{disabled:o,level:n+1,onChange:b=>i(u,b),schema:c.fields||[]})]}),c.type==="array"&&c.itemType==="object"&&Fe("div",{className:"mt-2",children:[ce(L,{className:"mb-2 block",children:"Array Item Properties"}),ce(mo,{disabled:o,level:n+1,onChange:b=>i(u,b),schema:c.fields||[]})]}),Fe("div",{className:"space-y-2",children:[ce(L,{className:"ml-1",htmlFor:`field-desc-${n}-${u}`,children:"Description (optional)"}),ce(ae,{disabled:o,id:`field-desc-${n}-${u}`,onChange:b=>a(u,{description:b.target.value}),placeholder:"Description for the AI",value:c.description||""})]})]},g)}),Fe(E,{className:"w-full",disabled:o,onClick:r,type:"button",variant:"outline",children:[ce($i,{className:"size-4"}),"Add Property"]})]})}import{Fragment as im,jsx as vn,jsxs as Ka}from"react/jsx-runtime";function Ui({config:e,onUpdateConfig:t,disabled:o}){return Ka(im,{children:[Ka("div",{className:"space-y-2",children:[vn(L,{htmlFor:"dbQuery",children:"SQL Query"}),vn("div",{className:"overflow-hidden rounded-md border",children:vn(xt,{defaultLanguage:"sql",height:"150px",onChange:n=>t("dbQuery",n||""),options:{minimap:{enabled:!1},lineNumbers:"on",scrollBeyondLastLine:!1,fontSize:12,readOnly:o,wordWrap:"off"},value:e?.dbQuery||""})}),vn("p",{className:"text-muted-foreground text-xs",children:"The DATABASE_URL from your project integrations will be used to execute this query."})]}),Ka("div",{className:"space-y-2",children:[vn(L,{children:"Schema (Optional)"}),vn(mo,{disabled:o,onChange:n=>t("dbSchema",JSON.stringify(n)),schema:e?.dbSchema?JSON.parse(e.dbSchema):[]})]})]})}import{Fragment as lm,jsx as qe,jsxs as Eo}from"react/jsx-runtime";function Ki({config:e,onUpdateConfig:t,disabled:o}){return Eo(lm,{children:[Eo("div",{className:"space-y-2",children:[qe(L,{htmlFor:"httpMethod",children:"HTTP Method"}),Eo(he,{disabled:o,onValueChange:n=>t("httpMethod",n),value:e?.httpMethod||"POST",children:[qe(be,{className:"w-full",id:"httpMethod",children:qe(xe,{placeholder:"Select method"})}),Eo(we,{children:[qe(Q,{value:"GET",children:"GET"}),qe(Q,{value:"POST",children:"POST"}),qe(Q,{value:"PUT",children:"PUT"}),qe(Q,{value:"PATCH",children:"PATCH"}),qe(Q,{value:"DELETE",children:"DELETE"})]})]})]}),Eo("div",{className:"space-y-2",children:[qe(L,{htmlFor:"endpoint",children:"URL"}),qe(We,{disabled:o,id:"endpoint",onChange:n=>t("endpoint",n),placeholder:"https://api.example.com/endpoint or {{NodeName.url}}",value:e?.endpoint||""})]}),Eo("div",{className:"space-y-2",children:[qe(L,{htmlFor:"httpHeaders",children:"Headers (JSON)"}),qe("div",{className:"overflow-hidden rounded-md border",children:qe(xt,{defaultLanguage:"json",height:"100px",onChange:n=>t("httpHeaders",n||"{}"),options:{minimap:{enabled:!1},lineNumbers:"off",scrollBeyondLastLine:!1,fontSize:12,readOnly:o,wordWrap:"off"},value:e?.httpHeaders||"{}"})})]}),Eo("div",{className:"space-y-2",children:[qe(L,{htmlFor:"httpBody",children:"Body (JSON)"}),qe("div",{className:`overflow-hidden rounded-md border ${e?.httpMethod==="GET"?"opacity-50":""}`,children:qe(xt,{defaultLanguage:"json",height:"120px",onChange:n=>t("httpBody",n||"{}"),options:{minimap:{enabled:!1},lineNumbers:"off",scrollBeyondLastLine:!1,fontSize:12,readOnly:e?.httpMethod==="GET"||o,domReadOnly:e?.httpMethod==="GET"||o,wordWrap:"off"},value:e?.httpBody||"{}"})}),e?.httpMethod==="GET"&&qe("p",{className:"text-muted-foreground text-xs",children:"Body is disabled for GET requests"})]})]})}import{jsx as hn,jsxs as qa}from"react/jsx-runtime";function qi({config:e,onUpdateConfig:t,disabled:o}){return qa("div",{className:"space-y-4",children:[qa("div",{className:"space-y-2",children:[hn(L,{htmlFor:"items",children:"Items to Iterate"}),hn(We,{disabled:o,id:"items",onChange:n=>t("items",n),placeholder:"e.g., {{PreviousNode.rows}}, {{DatabaseQuery.results}}",value:e?.items||""}),hn("p",{className:"text-muted-foreground text-xs",children:"Reference an array from a previous node. Use @ to reference outputs."})]}),qa("div",{className:"space-y-2",children:[hn(L,{htmlFor:"batchSize",children:"Batch Size (optional)"}),hn(We,{disabled:o,id:"batchSize",onChange:n=>t("batchSize",n),placeholder:"1",value:e?.batchSize||""}),hn("p",{className:"text-muted-foreground text-xs",children:"Number of items per batch. Default is 1 (process one item at a time)."})]})]})}import{Minus as dm,Plus as cm}from"lucide-react";import{Fragment as um,jsx as Se,jsxs as je}from"react/jsx-runtime";function ji({config:e,onUpdateConfig:t,disabled:o}){let n=e?.mode||"append",r=Number(e?.inputCount)||2,s=()=>{t("inputCount",String(r+1))},a=()=>{if(r<=2)return;t(`input${r}`,""),t("inputCount",String(r-1))};return je("div",{className:"space-y-4",children:[je("div",{className:"space-y-2",children:[Se(L,{htmlFor:"mode",children:"Mode"}),je(he,{disabled:o,onValueChange:d=>t("mode",d),value:n,children:[Se(be,{id:"mode",children:Se(xe,{placeholder:"Select mode"})}),je(we,{children:[Se(Q,{value:"append",children:"Append"}),Se(Q,{value:"combineByPosition",children:"Combine by Position"}),Se(Q,{value:"combineByFields",children:"Combine by Fields"})]})]}),je("p",{className:"text-muted-foreground text-xs",children:[n==="append"&&"Concatenate all lists into one.",n==="combineByPosition"&&"Merge items at the same index from all inputs.",n==="combineByFields"&&"Match and merge items based on a common field."]})]}),Array.from({length:r},(d,i)=>je("div",{className:"space-y-2",children:[je(L,{htmlFor:`input${i+1}`,children:["Input ",i+1]}),Se(We,{disabled:o,id:`input${i+1}`,onChange:l=>t(`input${i+1}`,l),placeholder:"e.g., {{Node.rows}}",value:e?.[`input${i+1}`]||""}),i===0&&Se("p",{className:"text-muted-foreground text-xs",children:"Use @ to reference outputs from previous nodes."})]},i)),je("div",{className:"flex gap-2",children:[je(E,{className:"flex-1",disabled:o,onClick:s,type:"button",variant:"outline",children:[Se(cm,{className:"mr-2 size-4"}),"Add Input"]}),Se(E,{disabled:o||r<=2,onClick:a,type:"button",variant:"outline",children:Se(dm,{className:"size-4"})})]}),n==="combineByPosition"&&je("div",{className:"space-y-2",children:[Se(L,{htmlFor:"unmatchedHandling",children:"When arrays have different lengths"}),je(he,{disabled:o,onValueChange:d=>t("unmatchedHandling",d),value:e?.unmatchedHandling||"useNull",children:[Se(be,{id:"unmatchedHandling",children:Se(xe,{})}),je(we,{children:[Se(Q,{value:"useNull",children:"Fill with null"}),Se(Q,{value:"discard",children:"Discard extra items"})]})]})]}),n==="combineByFields"&&je(um,{children:[je("div",{className:"space-y-2",children:[Se(L,{htmlFor:"matchField",children:"Match Field"}),Se(We,{disabled:o,id:"matchField",onChange:d=>t("matchField1",d),placeholder:"e.g., id",value:e?.matchField1||""}),Se("p",{className:"text-muted-foreground text-xs",children:"Field name to match items on across all inputs."})]}),je("div",{className:"space-y-2",children:[Se(L,{htmlFor:"joinType",children:"Join Type"}),je(he,{disabled:o,onValueChange:d=>t("joinType",d),value:e?.joinType||"inner",children:[Se(be,{id:"joinType",children:Se(xe,{})}),je(we,{children:[Se(Q,{value:"inner",children:"Inner Join"}),Se(Q,{value:"leftOuter",children:"Left Outer Join"}),Se(Q,{value:"rightOuter",children:"Right Outer Join"}),Se(Q,{value:"fullOuter",children:"Full Outer Join"})]})]}),Se("p",{className:"text-muted-foreground text-xs",children:"Inner keeps only matches. Left/Right keeps all items from that input. Full keeps everything."})]})]})]})}import{Loader2 as mm}from"lucide-react";import{useEffect as pm,useState as Ji}from"react";import{jsx as Ut,jsxs as Kn}from"react/jsx-runtime";function Yi({config:e,onUpdateConfig:t,disabled:o}){let[n,r]=Ji([]),[s,a]=Ji(!0);pm(()=>{async function i(){try{let l=await fetch("/api/workflow-builder/workflows");if(l.ok){let c=await l.json();r((c.workflows||c||[]).map(u=>({id:u.id,name:u.name})))}}catch{}finally{a(!1)}}i()},[]);let d=e?.workflowId||"";return Kn("div",{className:"space-y-4",children:[Kn("div",{className:"space-y-2",children:[Ut(L,{htmlFor:"workflowId",children:"Workflow"}),s?Kn("div",{className:"flex items-center gap-2 rounded-md border px-3 py-2 text-muted-foreground text-sm",children:[Ut(mm,{className:"size-4 animate-spin"}),"Loading workflows..."]}):Kn(he,{disabled:o||n.length===0,onValueChange:i=>t("workflowId",i),value:d||void 0,children:[Ut(be,{className:"w-full",id:"workflowId",children:Ut(xe,{placeholder:n.length===0?"No workflows found":"Select a workflow"})}),Ut(we,{children:n.map(i=>Ut(Q,{value:i.id,children:i.name},i.id))})]}),Ut("p",{className:"text-muted-foreground text-xs",children:"The workflow to execute. It will run inline and wait for completion."})]}),Kn("div",{className:"space-y-2",children:[Ut(L,{htmlFor:"input",children:"Input (optional JSON)"}),Ut(We,{disabled:o,id:"input",onChange:i=>t("input",i),placeholder:'{"key": "value"} or {{PreviousNode.field}}',value:e?.input||""}),Ut("p",{className:"text-muted-foreground text-xs",children:"Optional JSON passed as trigger input to the sub-workflow."})]})]})}import{ArrowDown as fm,ArrowUp as gm,Loader2 as ym,Plus as vm,Trash2 as hm}from"lucide-react";import{useEffect as bm,useState as Xi}from"react";import{jsx as Le,jsxs as At}from"react/jsx-runtime";function Qi({config:e,onUpdateConfig:t,disabled:o}){let[n,r]=Xi([]),[s,a]=Xi(!0);bm(()=>{async function m(){try{let w=await fetch("/api/workflow-builder/workflows");if(w.ok){let h=await w.json();r((h.workflows||h||[]).map(S=>({id:S.id,name:S.name})))}}catch{}finally{a(!1)}}m()},[]);let d=e?.workflowIds||"[]",i=[];try{let m=JSON.parse(d);Array.isArray(m)&&(i=m)}catch{i=d.split(",").map(m=>m.trim()).filter(Boolean)}let l=m=>{t("workflowIds",JSON.stringify(m))},c=m=>{m&&!i.includes(m)&&l([...i,m])},u=m=>{let w=[...i];w.splice(m,1),l(w)},g=m=>{if(m===0)return;let w=[...i];[w[m-1],w[m]]=[w[m],w[m-1]],l(w)},b=m=>{if(m===i.length-1)return;let w=[...i];[w[m],w[m+1]]=[w[m+1],w[m]],l(w)},y=m=>n.find(w=>w.id===m)?.name||m,v=n.filter(m=>!i.includes(m.id)),p=e?.continueOnFailure||"false";return At("div",{className:"space-y-4",children:[At("div",{className:"space-y-2",children:[Le(L,{children:"Workflows (executed in order)"}),s?At("div",{className:"flex items-center gap-2 rounded-md border px-3 py-2 text-muted-foreground text-sm",children:[Le(ym,{className:"size-4 animate-spin"}),"Loading workflows..."]}):At("div",{className:"space-y-1",children:[i.map((m,w)=>At("div",{className:"flex items-center gap-1 rounded-md border bg-muted/30 px-2 py-1.5 text-sm",children:[At("span",{className:"w-5 shrink-0 text-center text-muted-foreground text-xs",children:[w+1,"."]}),Le("span",{className:"min-w-0 flex-1 truncate",children:y(m)}),Le(E,{className:"size-6",disabled:o||w===0,onClick:()=>g(w),size:"icon",variant:"ghost",children:Le(gm,{className:"size-3"})}),Le(E,{className:"size-6",disabled:o||w===i.length-1,onClick:()=>b(w),size:"icon",variant:"ghost",children:Le(fm,{className:"size-3"})}),Le(E,{className:"size-6 text-destructive hover:text-destructive",disabled:o,onClick:()=>u(w),size:"icon",variant:"ghost",children:Le(hm,{className:"size-3"})})]},`${m}-${w}`)),v.length>0&&At(he,{disabled:o,onValueChange:c,value:"",children:[Le(be,{className:N("w-full",i.length>0&&"border-dashed"),children:At("div",{className:"flex items-center gap-1.5 text-muted-foreground",children:[Le(vm,{className:"size-3.5"}),Le("span",{children:"Add workflow..."})]})}),Le(we,{children:v.map(m=>Le(Q,{value:m.id,children:m.name},m.id))})]}),!s&&n.length===0&&Le("p",{className:"text-muted-foreground text-xs",children:"No workflows found."})]})]}),At("div",{className:"space-y-2",children:[Le(L,{htmlFor:"continueOnFailure",children:"On failure"}),At(he,{disabled:o,onValueChange:m=>t("continueOnFailure",m),value:p,children:[Le(be,{className:"w-full",id:"continueOnFailure",children:Le(xe,{})}),At(we,{children:[Le(Q,{value:"false",children:"Stop sequence"}),Le(Q,{value:"true",children:"Continue with next workflow"})]})]})]}),At("div",{className:"space-y-2",children:[Le(L,{htmlFor:"sequenceInput",children:"Input (optional JSON, passed to all workflows)"}),Le(We,{disabled:o,id:"sequenceInput",onChange:m=>t("input",m),placeholder:'{"key": "value"} or {{PreviousNode.field}}',value:e?.input||""}),Le("p",{className:"text-muted-foreground text-xs",children:"Optional JSON passed as trigger input to every workflow in the sequence."})]})]})}import{Minus as wm,Plus as xm}from"lucide-react";import{jsx as Me,jsxs as Je}from"react/jsx-runtime";function Zi({config:e,onUpdateConfig:t,disabled:o}){let n=e?.mode||"rules",r=e?.matchMode||"first",s=Number(e?.routeCount)||4,a=()=>{t("routeCount",String(s+1))},d=()=>{if(s<=1)return;let i=s-1;t(`routeName${i}`,""),t(`routeCondition${i}`,""),t(`routeCaseValue${i}`,""),t("routeCount",String(s-1))};return Je("div",{className:"space-y-4",children:[Je("div",{className:"space-y-2",children:[Me(L,{htmlFor:"mode",children:"Mode"}),Je(he,{disabled:o,onValueChange:i=>t("mode",i),value:n,children:[Me(be,{id:"mode",children:Me(xe,{placeholder:"Select mode"})}),Je(we,{children:[Me(Q,{value:"rules",children:"Rules"}),Me(Q,{value:"expression",children:"Expression"})]})]}),Je("p",{className:"text-muted-foreground text-xs",children:[n==="rules"&&"Each route has a condition that is evaluated.",n==="expression"&&"Compare a value against each route's case value."]})]}),Je("div",{className:"space-y-2",children:[Me(L,{htmlFor:"matchMode",children:"Match"}),Je(he,{disabled:o,onValueChange:i=>t("matchMode",i),value:r,children:[Me(be,{id:"matchMode",children:Me(xe,{placeholder:"Select match mode"})}),Je(we,{children:[Me(Q,{value:"first",children:"First match"}),Me(Q,{value:"all",children:"All matches"})]})]}),Je("p",{className:"text-muted-foreground text-xs",children:[r==="first"&&"Stop at the first matching route.",r==="all"&&"Execute all routes whose condition is true."]})]}),n==="expression"&&Je("div",{className:"space-y-2",children:[Me(L,{htmlFor:"switchValue",children:"Value to Switch On"}),Me(We,{disabled:o,id:"switchValue",onChange:i=>t("switchValue",i),placeholder:"e.g., {{PreviousNode.statusCode}}",value:e?.switchValue||""}),Me("p",{className:"text-muted-foreground text-xs",children:"The value to compare against each route's case value. Use @ to reference previous node outputs."})]}),Array.from({length:s},(i,l)=>Je("div",{className:"space-y-3 rounded-md border p-3",children:[Je("p",{className:"font-medium text-sm",children:["Route ",l+1]}),Je("div",{className:"space-y-2",children:[Me(L,{htmlFor:`routeName${l}`,children:"Name (optional)"}),Me(ae,{disabled:o,id:`routeName${l}`,onChange:c=>t(`routeName${l}`,c.target.value),placeholder:`Route ${l+1}`,value:e?.[`routeName${l}`]||""})]}),n==="rules"&&Je("div",{className:"space-y-2",children:[Me(L,{htmlFor:`routeCondition${l}`,children:"Condition"}),Me(We,{disabled:o,id:`routeCondition${l}`,onChange:c=>t(`routeCondition${l}`,c),placeholder:"e.g., {{PreviousNode.status}} === 200",value:e?.[`routeCondition${l}`]||""})]}),n==="expression"&&Je("div",{className:"space-y-2",children:[Me(L,{htmlFor:`routeCaseValue${l}`,children:"Case Value"}),Me(We,{disabled:o,id:`routeCaseValue${l}`,onChange:c=>t(`routeCaseValue${l}`,c),placeholder:`e.g., ${l===0?"200":l===1?"404":"500"}`,value:e?.[`routeCaseValue${l}`]||""})]})]},l)),Je("div",{className:"flex gap-2",children:[Je(E,{className:"flex-1",disabled:o,onClick:a,type:"button",variant:"outline",children:[Me(xm,{className:"mr-2 size-4"}),"Add Route"]}),Me(E,{disabled:o||s<=1,onClick:d,type:"button",variant:"outline",children:Me(wm,{className:"size-4"})})]}),Me("p",{className:"text-muted-foreground text-xs",children:'Routes are evaluated in order. If no route matches, the result falls back to "Default".'})]})}import{atom as Hr}from"jotai";var Gr=Hr(null),el=Hr([]),tl=Hr(!1),Sx=Hr(!1);import{useAtomValue as sl,useSetAtom as ja}from"jotai";import{Search as Am}from"lucide-react";import{useCallback as Im,useMemo as Pm,useState as bn}from"react";import{toast as Ro}from"sonner";import{atom as qn,useSetAtom as Nm}from"jotai";import*as nl from"react";var ol=null;var Do=qn(null),$r=qn([]),_r=qn(!1),rl=qn(!1),Yt=qn(null);function al(){let e=Nm(Yt);nl.useEffect(()=>{ol&&e(ol)},[e])}import{Database as km,HelpCircle as Cm}from"lucide-react";import{jsx as jn}from"react/jsx-runtime";function Tm({className:e}){return jn("svg",{className:e,fill:"currentColor",height:"12",viewBox:"0 0 1155 1000",width:"12",xmlns:"http://www.w3.org/2000/svg",children:jn("path",{d:"m577.3 0 577.4 1000H0z"})})}var Sm={database:km,vercel:Tm};function Bt({integration:e,className:t="h-3 w-3"}){let o=Sm[e];if(o)return jn(o,{className:N("text-foreground",t)});let n=Mt(e);if(n?.icon){let r=n.icon;return jn(r,{className:N("text-foreground",t)})}return jn(Cm,{className:N("text-foreground",t)})}import{jsx as $e,jsxs as Nt}from"react/jsx-runtime";var Em=["database"],Dm={database:"Database"},Rm={database:"Connect to PostgreSQL databases"},Om=()=>[...ai(),...Em],Ja=e=>no()[e]||Dm[e]||e,Lm=e=>ri()[e]||Rm[e]||"";function ll({overlayId:e,onSuccess:t}){let{push:o,closeAll:n}=oe(),[r,s]=bn(""),a=_t(),d=sl(Yt),i=sl(Do),l=ja(Do),c=ja($r),u=ja(_r),g=Om(),b=Pm(()=>{if(!r.trim())return g;let p=r.toLowerCase();return g.filter(m=>Ja(m).toLowerCase().includes(p))},[g,r]),y=Im(()=>{d&&o(d.ConsentOverlay,{onConsent:p=>{t?.(p),n()}})},[d,o,n,t]),v=p=>{let m=d?.integrationType===p;if(m&&i?.enabled&&i?.isVercelUser){y();return}if(m&&i===null){d.api.getStatus().then(h=>{l(h),h?.enabled&&h?.isVercelUser?(u(!0),d.api.getTeams().then(S=>{c(S.teams)}).finally(()=>{u(!1),y()})):o(po,{type:p,onSuccess:t})});return}o(po,{type:p,onSuccess:t})};return Nt(Oe,{overlayId:e,title:"Add Connection",children:[$e("p",{className:"-mt-2 mb-4 text-muted-foreground text-sm",children:"Select a service to connect"}),Nt("div",{className:"space-y-3",children:[Nt("div",{className:"relative",children:[$e(Am,{className:"absolute top-1/2 left-3 size-4 -translate-y-1/2 text-muted-foreground"}),$e(ae,{autoFocus:!a,className:"pl-9",onChange:p=>s(p.target.value),placeholder:"Search services...",value:r})]}),$e("div",{className:"max-h-[300px] space-y-1 overflow-y-auto",children:b.length===0?$e("p",{className:"py-4 text-center text-muted-foreground text-sm",children:"No services found"}):b.map(p=>{let m=Lm(p);return Nt("button",{className:"flex w-full items-center gap-3 rounded-md px-3 py-2 text-left text-sm transition-colors hover:bg-muted/50",onClick:()=>v(p),type:"button",children:[$e(Bt,{className:"size-5 shrink-0",integration:p==="ai-gateway"?"vercel":p}),Nt("span",{className:"min-w-0 flex-1 truncate",children:[$e("span",{className:"font-medium",children:Ja(p)}),m&&Nt("span",{className:"text-muted-foreground text-xs",children:[" ","- ",m]})]})]},p)})})]})]})}function il({fieldId:e,label:t,configKey:o,placeholder:n,helpText:r,helpLink:s,value:a,onChange:d}){return Nt("div",{className:"space-y-2",children:[$e(L,{htmlFor:e,children:t}),$e(ae,{className:"flex-1",id:e,onChange:i=>d(o,i.target.value),placeholder:n,type:"password",value:a}),(r||s)&&Nt("p",{className:"text-muted-foreground text-xs",children:[r,s&&$e("a",{className:"underline hover:text-foreground",href:s.url,rel:"noopener noreferrer",target:"_blank",children:s.text})]})]})}function po({overlayId:e,type:t,onSuccess:o}){let{push:n,closeAll:r}=oe(),[s,a]=bn(!1),[d,i]=bn(!1),[l,c]=bn(null),[u,g]=bn(""),[b,y]=bn({}),v=(I,k)=>{y(f=>({...f,[I]:k}))},p=async()=>{try{a(!0);let I=await U.integration.create({name:u.trim(),type:t,config:b});Ro.success("Connection created"),o?.(I.id),r()}catch(I){console.error("Failed to save integration:",I),Ro.error("Failed to save connection")}finally{a(!1)}},m=async()=>{if(!Object.values(b).some(k=>k&&k.length>0)){Ro.error("Please enter credentials");return}try{a(!0),c(null);let k=await U.integration.testCredentials({type:t,config:b});if(k.status==="error"){n(Ee,{title:"Connection Test Failed",message:`The test failed: ${k.message}
3
3
 
4
- Do you want to save anyway?`,confirmLabel:"Save Anyway",onConfirm:async()=>{await y()}}),a(!1);return}await y()}catch(x){let p=x instanceof Error?x.message:"Failed to test connection";n(Pe,{title:"Connection Test Failed",message:`${p}
4
+ Do you want to save anyway?`,confirmLabel:"Save Anyway",onConfirm:async()=>{await p()}}),a(!1);return}await p()}catch(k){let f=k instanceof Error?k.message:"Failed to test connection";n(Ee,{title:"Connection Test Failed",message:`${f}
5
5
 
6
- Do you want to save anyway?`,confirmLabel:"Save Anyway",onConfirm:async()=>{await y()}}),a(!1)}},b=async()=>{if(!Object.values(v).some(x=>x&&x.length>0)){Eo.error("Please enter credentials first");return}try{s(!0),c(null);let x=await j.integration.testCredentials({type:t,config:v});c(x),x.status==="success"?Eo.success(x.message||"Connection successful"):Eo.error(x.message||"Connection failed")}catch(x){let p=x instanceof Error?x.message:"Connection test failed";c({status:"error",message:p}),Eo.error(p)}finally{s(!1)}},S=Rt(t)?.formFields,D=()=>t==="database"?Ge(Zi,{configKey:"url",fieldId:"url",helpText:"Connection string in the format: postgresql://user:password@host:port/database",label:"Database URL",onChange:h,placeholder:"postgresql://user:password@host:port/database",value:v.url||""}):S?S.map(I=>I.type==="password"?Ge(Zi,{configKey:I.configKey,fieldId:I.id,helpLink:I.helpLink,helpText:I.helpText,label:I.label,onChange:h,placeholder:I.placeholder,value:v[I.configKey]||""},I.id):ht("div",{className:"space-y-2",children:[Ge(M,{htmlFor:I.id,children:I.label}),Ge(ae,{id:I.id,onChange:x=>h(I.configKey,x.target.value),placeholder:I.placeholder,type:I.type,value:v[I.configKey]||""}),(I.helpText||I.helpLink)&&ht("p",{className:"text-muted-foreground text-xs",children:[I.helpText,I.helpLink&&Ge("a",{className:"underline hover:text-foreground",href:I.helpLink.url,rel:"noopener noreferrer",target:"_blank",children:I.helpLink.text})]})]},I.id)):null;return ht(Re,{actions:[{label:"Test",variant:"outline",onClick:b,loading:l,disabled:i},{label:"Create",onClick:m,loading:i}],overlayId:e,title:`Add ${_a(t)}`,children:[Ge("p",{className:"-mt-2 mb-4 text-muted-foreground text-sm",children:"Enter your credentials"}),ht("div",{className:"space-y-4",children:[D(),ht("div",{className:"space-y-2",children:[Ge(M,{htmlFor:"name",children:"Label (Optional)"}),Ge(ae,{id:"name",onChange:I=>f(I.target.value),placeholder:"e.g. Production, Personal, Work",value:u})]})]})]})}import{useAtomValue as tl,useSetAtom as vm}from"jotai";import{Loader2 as hm,Sparkles as bm,X as wm}from"lucide-react";import{useCallback as Gr,useEffect as xm,useState as Ua}from"react";import{jsx as je,jsxs as mo}from"react/jsx-runtime";function ol({overlayId:e,onConsent:t,onManualEntry:o,onDecline:n}){let{pop:r}=oe(),i=vm(Br),[a,l]=Ua(!1),[s,d]=Ua(null),[c,u]=Ua(""),f=tl(Ki),v=tl(qi);xm(()=>{f.length>0&&!c&&u(f[0].id)},[f,c]);let C=Gr(g=>{l(!1),t?.(g),r()},[t,r]),h=Gr(async()=>{if(!c){d("Please select a team");return}let S=f.find(D=>D.id===c)?.name||"AI Gateway";l(!0),d(null);try{let D=await j.aiGateway.consent(c,S);if(!D.success)throw new Error(D.error||"Failed to set up AI Gateway");let I=D.managedIntegrationId||"";i(x=>x?{...x,hasManagedKey:D.hasManagedKey,managedIntegrationId:I}:null),C(I)}catch(D){d(D instanceof Error?D.message:"An error occurred"),l(!1)}},[c,f,i,C]),y=Gr(()=>{n?.(),r()},[n,r]),m=Gr(()=>{o?.()},[o]),b=[...o?[{label:"Enter manually",variant:"ghost",onClick:m,disabled:a}]:[],{label:"Cancel",variant:"outline",onClick:y,disabled:a},{label:a?"Setting up...":"Agree & Connect",variant:"default",onClick:h,disabled:a||v&&f.length===0||!c,loading:a}];return je(Re,{actions:b,description:"Connect your Vercel account to use your own AI Gateway balance",overlayId:e,title:"Use Your AI Gateway Credits",children:mo("div",{className:"space-y-4",children:[mo("div",{className:"flex items-start gap-3",children:[je("div",{className:"flex size-10 shrink-0 items-center justify-center rounded-full bg-primary/10",children:je(bm,{className:"size-5 text-primary"})}),je("p",{className:"pt-2 text-muted-foreground text-sm",children:"This will create an API key on your Vercel account that uses your AI Gateway credits for AI operations in workflows."})]}),mo("div",{className:"space-y-2",children:[je(M,{htmlFor:"team-select",children:"Vercel Team"}),v&&f.length===0?mo("div",{className:"flex h-10 items-center gap-2 rounded-md border px-3 text-muted-foreground text-sm",children:[je(hm,{className:"size-4 animate-spin"}),"Loading teams..."]}):mo(ve,{disabled:a,onValueChange:u,value:c,children:[je(he,{id:"team-select",children:je(xe,{placeholder:"Select a team"})}),je(be,{children:f.map((g,S)=>mo("div",{children:[je(Z,{value:g.id,children:mo("div",{className:"flex items-center gap-2",children:[g.avatar?je("img",{alt:"",className:"size-4 rounded-full bg-white",src:g.avatar}):je("div",{className:"size-4 rounded-full bg-white"}),je("span",{children:g.name}),g.isPersonal&&je("span",{className:"text-muted-foreground text-xs",children:"(Personal)"})]})}),g.isPersonal&&S<f.length-1&&je(Lr,{})]},g.id))})]})]}),s&&mo("div",{className:"flex items-start gap-3 rounded-md border border-red-500/30 bg-red-500/10 p-3",children:[je(wm,{className:"mt-0.5 size-4 shrink-0 text-red-500"}),je("p",{className:"text-red-700 text-sm dark:text-red-400",children:s})]})]})})}import{useAtom as Ur,useAtomValue as al,useSetAtom as sl}from"jotai";import{AlertTriangle as Pm,Check as ja,Circle as il,Pencil as Ja,Plus as Em,Settings as Dm}from"lucide-react";import{useCallback as qn,useEffect as yn,useMemo as Rm,useRef as Om,useState as ll}from"react";import{useAtomValue as km}from"jotai";import{Check as Cm,Pencil as Tm,X as Sm}from"lucide-react";import{useState as po}from"react";import{toast as Do}from"sonner";import*as $r from"@radix-ui/react-checkbox";import{CheckIcon as Nm}from"lucide-react";import{jsx as Ka}from"react/jsx-runtime";function nl({className:e,...t}){return Ka($r.Root,{"data-slot":"checkbox",className:N("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",e),...t,children:Ka($r.Indicator,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-current transition-none",children:Ka(Nm,{className:"size-3.5"})})})}import{jsx as Fe,jsxs as ut}from"react/jsx-runtime";var Am={database:"Database"},Im=e=>to()[e]||Am[e]||e;function rl({fieldId:e,label:t,configKey:o,placeholder:n,helpText:r,helpLink:i,value:a,onChange:l}){let[s,d]=po(!1),c=Gt(),u=a.length>0;return s||u?ut("div",{className:"space-y-2",children:[Fe(M,{htmlFor:e,children:t}),ut("div",{className:"flex items-center gap-2",children:[Fe(ae,{autoFocus:s&&!c,className:"flex-1",id:e,onChange:f=>l(o,f.target.value),placeholder:n,type:"password",value:a}),(s||u)&&Fe(E,{onClick:()=>{l(o,""),d(!1)},size:"icon",type:"button",variant:"ghost",children:Fe(Sm,{className:"size-4"})})]}),(r||i)&&ut("p",{className:"text-muted-foreground text-xs",children:[r,i&&Fe("a",{className:"underline hover:text-foreground",href:i.url,rel:"noopener noreferrer",target:"_blank",children:i.text})]})]}):ut("div",{className:"space-y-2",children:[Fe(M,{htmlFor:e,children:t}),ut("div",{className:"flex items-center gap-2",children:[ut("div",{className:"flex h-9 flex-1 items-center gap-2 rounded-md border bg-muted/30 px-3",children:[Fe(Cm,{className:"size-4 text-green-600"}),Fe("span",{className:"text-muted-foreground text-sm",children:"Configured"})]}),ut(E,{onClick:()=>d(!0),type:"button",variant:"outline",children:[Fe(Tm,{className:"mr-1.5 size-3"}),"Change"]})]})]})}function _r({overlayId:e,integration:t,onSuccess:o,onDelete:n}){let{push:r,closeAll:i}=oe(),[a,l]=po(!1),[s,d]=po(!1),[c,u]=po(null),[f,v]=po(t.name),[C,h]=po({}),y=(p,w)=>{h(G=>({...G,[p]:w}))},m=async()=>{try{l(!0);let p=Object.values(C).some(w=>w&&w.length>0);await j.integration.update(t.id,{name:f.trim(),...p?{config:C}:{}}),Do.success("Connection updated"),o?.(),i()}catch(p){console.error("Failed to update integration:",p),Do.error("Failed to update connection")}finally{l(!1)}},b=async()=>{if(!Object.values(C).some(w=>w&&w.length>0)){await m();return}try{l(!0),u(null);let w=await j.integration.testCredentials({type:t.type,config:C});if(w.status==="error"){r(Pe,{title:"Connection Test Failed",message:`The test failed: ${w.message}
6
+ Do you want to save anyway?`,confirmLabel:"Save Anyway",onConfirm:async()=>{await p()}}),a(!1)}},w=async()=>{if(!Object.values(b).some(k=>k&&k.length>0)){Ro.error("Please enter credentials first");return}try{i(!0),c(null);let k=await U.integration.testCredentials({type:t,config:b});c(k),k.status==="success"?Ro.success(k.message||"Connection successful"):Ro.error(k.message||"Connection failed")}catch(k){let f=k instanceof Error?k.message:"Connection test failed";c({status:"error",message:f}),Ro.error(f)}finally{i(!1)}},S=Mt(t)?.formFields,D=()=>t==="database"?$e(il,{configKey:"url",fieldId:"url",helpText:"Connection string in the format: postgresql://user:password@host:port/database",label:"Database URL",onChange:v,placeholder:"postgresql://user:password@host:port/database",value:b.url||""}):S?S.map(I=>I.type==="password"?$e(il,{configKey:I.configKey,fieldId:I.id,helpLink:I.helpLink,helpText:I.helpText,label:I.label,onChange:v,placeholder:I.placeholder,value:b[I.configKey]||""},I.id):Nt("div",{className:"space-y-2",children:[$e(L,{htmlFor:I.id,children:I.label}),$e(ae,{id:I.id,onChange:k=>v(I.configKey,k.target.value),placeholder:I.placeholder,type:I.type,value:b[I.configKey]||""}),(I.helpText||I.helpLink)&&Nt("p",{className:"text-muted-foreground text-xs",children:[I.helpText,I.helpLink&&$e("a",{className:"underline hover:text-foreground",href:I.helpLink.url,rel:"noopener noreferrer",target:"_blank",children:I.helpLink.text})]})]},I.id)):null;return Nt(Oe,{actions:[{label:"Test",variant:"outline",onClick:w,loading:d,disabled:s},{label:"Create",onClick:m,loading:s}],overlayId:e,title:`Add ${Ja(t)}`,children:[$e("p",{className:"-mt-2 mb-4 text-muted-foreground text-sm",children:"Enter your credentials"}),Nt("div",{className:"space-y-4",children:[D(),Nt("div",{className:"space-y-2",children:[$e(L,{htmlFor:"name",children:"Label (Optional)"}),$e(ae,{id:"name",onChange:I=>g(I.target.value),placeholder:"e.g. Production, Personal, Work",value:u})]})]})]})}import{useAtomValue as dl,useSetAtom as Mm}from"jotai";import{Loader2 as Wm,Sparkles as Fm,X as zm}from"lucide-react";import{useCallback as Ur,useEffect as Bm,useState as Ya}from"react";import{jsx as Ye,jsxs as fo}from"react/jsx-runtime";function cl({overlayId:e,onConsent:t,onManualEntry:o,onDecline:n}){let{pop:r}=oe(),s=Mm(Gr),[a,d]=Ya(!1),[i,l]=Ya(null),[c,u]=Ya(""),g=dl(el),b=dl(tl);Bm(()=>{g.length>0&&!c&&u(g[0].id)},[g,c]);let y=Ur(h=>{d(!1),t?.(h),r()},[t,r]),v=Ur(async()=>{if(!c){l("Please select a team");return}let S=g.find(D=>D.id===c)?.name||"AI Gateway";d(!0),l(null);try{let D=await U.aiGateway.consent(c,S);if(!D.success)throw new Error(D.error||"Failed to set up AI Gateway");let I=D.managedIntegrationId||"";s(k=>k?{...k,hasManagedKey:D.hasManagedKey,managedIntegrationId:I}:null),y(I)}catch(D){l(D instanceof Error?D.message:"An error occurred"),d(!1)}},[c,g,s,y]),p=Ur(()=>{n?.(),r()},[n,r]),m=Ur(()=>{o?.()},[o]),w=[...o?[{label:"Enter manually",variant:"ghost",onClick:m,disabled:a}]:[],{label:"Cancel",variant:"outline",onClick:p,disabled:a},{label:a?"Setting up...":"Agree & Connect",variant:"default",onClick:v,disabled:a||b&&g.length===0||!c,loading:a}];return Ye(Oe,{actions:w,description:"Connect your Vercel account to use your own AI Gateway balance",overlayId:e,title:"Use Your AI Gateway Credits",children:fo("div",{className:"space-y-4",children:[fo("div",{className:"flex items-start gap-3",children:[Ye("div",{className:"flex size-10 shrink-0 items-center justify-center rounded-full bg-primary/10",children:Ye(Fm,{className:"size-5 text-primary"})}),Ye("p",{className:"pt-2 text-muted-foreground text-sm",children:"This will create an API key on your Vercel account that uses your AI Gateway credits for AI operations in workflows."})]}),fo("div",{className:"space-y-2",children:[Ye(L,{htmlFor:"team-select",children:"Vercel Team"}),b&&g.length===0?fo("div",{className:"flex h-10 items-center gap-2 rounded-md border px-3 text-muted-foreground text-sm",children:[Ye(Wm,{className:"size-4 animate-spin"}),"Loading teams..."]}):fo(he,{disabled:a,onValueChange:u,value:c,children:[Ye(be,{id:"team-select",children:Ye(xe,{placeholder:"Select a team"})}),Ye(we,{children:g.map((h,S)=>fo("div",{children:[Ye(Q,{value:h.id,children:fo("div",{className:"flex items-center gap-2",children:[h.avatar?Ye("img",{alt:"",className:"size-4 rounded-full bg-white",src:h.avatar}):Ye("div",{className:"size-4 rounded-full bg-white"}),Ye("span",{children:h.name}),h.isPersonal&&Ye("span",{className:"text-muted-foreground text-xs",children:"(Personal)"})]})}),h.isPersonal&&S<g.length-1&&Ye(Fr,{})]},h.id))})]})]}),i&&fo("div",{className:"flex items-start gap-3 rounded-md border border-red-500/30 bg-red-500/10 p-3",children:[Ye(zm,{className:"mt-0.5 size-4 shrink-0 text-red-500"}),Ye("p",{className:"text-red-700 text-sm dark:text-red-400",children:i})]})]})})}import{useAtom as jr,useAtomValue as pl,useSetAtom as fl}from"jotai";import{AlertTriangle as qm,Check as Za,Circle as gl,Pencil as es,Plus as jm,Settings as Jm}from"lucide-react";import{useCallback as Jn,useEffect as wn,useMemo as Ym,useRef as Xm,useState as yl}from"react";import{useAtomValue as Hm}from"jotai";import{Check as Gm,Pencil as $m,X as _m}from"lucide-react";import{useState as go}from"react";import{toast as Oo}from"sonner";import*as Kr from"@radix-ui/react-checkbox";import{CheckIcon as Vm}from"lucide-react";import{jsx as Xa}from"react/jsx-runtime";function ul({className:e,...t}){return Xa(Kr.Root,{"data-slot":"checkbox",className:N("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",e),...t,children:Xa(Kr.Indicator,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-current transition-none",children:Xa(Vm,{className:"size-3.5"})})})}import{jsx as Be,jsxs as gt}from"react/jsx-runtime";var Um={database:"Database"},Km=e=>no()[e]||Um[e]||e;function ml({fieldId:e,label:t,configKey:o,placeholder:n,helpText:r,helpLink:s,value:a,onChange:d}){let[i,l]=go(!1),c=_t(),u=a.length>0;return i||u?gt("div",{className:"space-y-2",children:[Be(L,{htmlFor:e,children:t}),gt("div",{className:"flex items-center gap-2",children:[Be(ae,{autoFocus:i&&!c,className:"flex-1",id:e,onChange:g=>d(o,g.target.value),placeholder:n,type:"password",value:a}),(i||u)&&Be(E,{onClick:()=>{d(o,""),l(!1)},size:"icon",type:"button",variant:"ghost",children:Be(_m,{className:"size-4"})})]}),(r||s)&&gt("p",{className:"text-muted-foreground text-xs",children:[r,s&&Be("a",{className:"underline hover:text-foreground",href:s.url,rel:"noopener noreferrer",target:"_blank",children:s.text})]})]}):gt("div",{className:"space-y-2",children:[Be(L,{htmlFor:e,children:t}),gt("div",{className:"flex items-center gap-2",children:[gt("div",{className:"flex h-9 flex-1 items-center gap-2 rounded-md border bg-muted/30 px-3",children:[Be(Gm,{className:"size-4 text-green-600"}),Be("span",{className:"text-muted-foreground text-sm",children:"Configured"})]}),gt(E,{onClick:()=>l(!0),type:"button",variant:"outline",children:[Be($m,{className:"mr-1.5 size-3"}),"Change"]})]})]})}function qr({overlayId:e,integration:t,onSuccess:o,onDelete:n}){let{push:r,closeAll:s}=oe(),[a,d]=go(!1),[i,l]=go(!1),[c,u]=go(null),[g,b]=go(t.name),[y,v]=go({}),p=(f,x)=>{v(G=>({...G,[f]:x}))},m=async()=>{try{d(!0);let f=Object.values(y).some(x=>x&&x.length>0);await U.integration.update(t.id,{name:g.trim(),...f?{config:y}:{}}),Oo.success("Connection updated"),o?.(),s()}catch(f){console.error("Failed to update integration:",f),Oo.error("Failed to update connection")}finally{d(!1)}},w=async()=>{if(!Object.values(y).some(x=>x&&x.length>0)){await m();return}try{d(!0),u(null);let x=await U.integration.testCredentials({type:t.type,config:y});if(x.status==="error"){r(Ee,{title:"Connection Test Failed",message:`The test failed: ${x.message}
7
7
 
8
- Do you want to save anyway?`,confirmLabel:"Save Anyway",onConfirm:async()=>{await m()}}),l(!1);return}await m()}catch(w){let G=w instanceof Error?w.message:"Failed to test connection";r(Pe,{title:"Connection Test Failed",message:`${G}
8
+ Do you want to save anyway?`,confirmLabel:"Save Anyway",onConfirm:async()=>{await m()}}),d(!1);return}await m()}catch(x){let G=x instanceof Error?x.message:"Failed to test connection";r(Ee,{title:"Connection Test Failed",message:`${G}
9
9
 
10
- Do you want to save anyway?`,confirmLabel:"Save Anyway",onConfirm:async()=>{await m()}}),l(!1)}},g=async()=>{let p=Object.values(C).some(w=>w&&w.length>0);try{d(!0),u(null);let w;p?w=await j.integration.testCredentials({type:t.type,config:C}):w=await j.integration.testConnection(t.id),u(w),w.status==="success"?Do.success(w.message||"Connection successful"):Do.error(w.message||"Connection failed")}catch(w){let G=w instanceof Error?w.message:"Connection test failed";u({status:"error",message:G}),Do.error(G)}finally{d(!1)}},S=()=>{r(qa,{integration:t,onSuccess:()=>{n?.(),i()}})},I=Rt(t.type)?.formFields,x=()=>t.type==="database"?Fe(rl,{configKey:"url",fieldId:"url",helpText:"Connection string in the format: postgresql://user:password@host:port/database",label:"Database URL",onChange:y,placeholder:"postgresql://user:password@host:port/database",value:C.url||""}):I?I.map(p=>p.type==="password"?Fe(rl,{configKey:p.configKey,fieldId:p.id,helpLink:p.helpLink,helpText:p.helpText,label:p.label,onChange:y,placeholder:p.placeholder,value:C[p.configKey]||""},p.id):ut("div",{className:"space-y-2",children:[Fe(M,{htmlFor:p.id,children:p.label}),Fe(ae,{id:p.id,onChange:w=>y(p.configKey,w.target.value),placeholder:p.placeholder,type:p.type,value:C[p.configKey]||""}),(p.helpText||p.helpLink)&&ut("p",{className:"text-muted-foreground text-xs",children:[p.helpText,p.helpLink&&Fe("a",{className:"underline hover:text-foreground",href:p.helpLink.url,rel:"noopener noreferrer",target:"_blank",children:p.helpLink.text})]})]},p.id)):null;return ut(Re,{actions:[{label:"Delete",variant:"ghost",onClick:S,disabled:a||s},{label:"Test",variant:"outline",onClick:g,loading:s,disabled:a},{label:"Update",onClick:b,loading:a}],overlayId:e,title:`Edit ${Im(t.type)}`,children:[Fe("p",{className:"-mt-2 mb-4 text-muted-foreground text-sm",children:"Update your connection credentials"}),ut("div",{className:"space-y-4",children:[x(),ut("div",{className:"space-y-2",children:[Fe(M,{htmlFor:"name",children:"Label (Optional)"}),Fe(ae,{id:"name",onChange:p=>v(p.target.value),placeholder:"e.g. Production, Personal, Work",value:f})]})]})]})}function qa({overlayId:e,integration:t,onSuccess:o}){let{pop:n}=oe(),r=km(jt),[i,a]=po(!1),[l,s]=po(!0);return ut(Re,{actions:[{label:"Cancel",variant:"outline",onClick:n},{label:"Delete",variant:"destructive",onClick:async()=>{try{a(!0),t.isManaged&&l&&r?await r.api.revokeConsent():await j.integration.delete(t.id),Do.success("Connection deleted"),o?.()}catch(c){console.error("Failed to delete integration:",c),Do.error("Failed to delete connection"),a(!1)}},loading:i}],overlayId:e,title:"Delete Connection",children:[Fe("p",{className:"text-muted-foreground text-sm",children:"Are you sure you want to delete this connection? Workflows using it will fail until a new one is configured."}),t.isManaged&&ut("div",{className:"mt-4 flex items-center gap-2",children:[Fe(nl,{checked:l,id:"revoke-key",onCheckedChange:c=>s(c)}),Fe(M,{className:"cursor-pointer font-normal",htmlFor:"revoke-key",children:"Revoke API key from Vercel"})]})]})}import{Fragment as Ya,jsx as Ie,jsxs as _t}from"react/jsx-runtime";function dl({integrationType:e,value:t,onChange:o,onOpenSettings:n,disabled:r,onAddConnection:i}){let{push:a}=oe(),[l,s]=Ur(ft),d=al(Ot),c=sl(Ot),u=Om(d),[f,v]=ll(!1),C=al(jt),[h,y]=Ur(Po),[m,b]=ll(!1),[g,S]=Ur(Vr),[D,I]=Ur(Yi),x=sl(Hr),p=Rm(()=>l.filter(k=>k.type===e),[l,e]),w=l.length>0,G=qn(async()=>{try{let k=await j.integration.getAll();s(k),v(!0)}catch(k){console.error("Failed to load integrations:",k)}},[s]);yn(()=>{C?.integrationType===e&&!m&&C.api.getStatus().then(k=>{y(k),b(!0)}).catch(()=>{b(!0)})},[e,m,C,y]),yn(()=>{C?.integrationType===e&&h?.enabled&&h?.isVercelUser&&!D&&(x(!0),C.api.getTeams().then(k=>{S(k.teams),k.teams.length>0&&I(!0)}).catch(()=>{}).finally(()=>{x(!1)}))},[e,C,h,D,S,I,x]),yn(()=>{C?.integrationType===e&&h?.enabled&&h?.isVercelUser&&C.api.getTeams().then(k=>{k.teams.length>0&&(S(k.teams),I(!0))}).catch(()=>{})},[e,C,h?.enabled,h?.isVercelUser]),yn(()=>{G()},[G,e]),yn(()=>{d!==u.current&&(u.current=d,G())},[d,G]),yn(()=>{if(p.length>0&&!r&&!(t&&p.some(R=>R.id===t))){let R=p.find(_=>_.isManaged);o(R?.id||p[0].id)}},[p,t,r,o]);let te=async k=>{await G(),o(k),c(R=>R+1)},O=async()=>{if(await G(),c(k=>k+1),C?.integrationType===e){let k=await C.api.getStatus();y(k)}},W=qn(()=>{a(uo,{type:e,onSuccess:te})},[e,a,te]),$=qn(k=>{a(_r,{integration:k,onSuccess:O,onDelete:O})},[a,O]),T=C?.integrationType===e&&h?.enabled&&h?.isVercelUser&&!h?.hasManagedKey,H=qn(async k=>{if(await G(),o(k),c(R=>R+1),C){let R=await C.api.getStatus();y(R)}},[G,o,c,C,y]),X=qn(()=>{i?i():T&&C?a(C.ConsentOverlay,{onConsent:H,onManualEntry:W}):W()},[i,T,C,a,H,W]);if(!w&&!f)return Ie("div",{className:"flex flex-col gap-1",children:_t("div",{className:"flex items-center gap-2 rounded-md px-2 py-1.5",children:[Ie("div",{className:"size-4 shrink-0 animate-pulse rounded-full bg-muted"}),Ie("div",{className:"h-4 flex-1 animate-pulse rounded bg-muted"}),Ie("div",{className:"size-6 shrink-0 animate-pulse rounded bg-muted"})]})});let q=Rt(e)?.label||e,A=p.filter(k=>k.isManaged),B=p.filter(k=>!k.isManaged);if(p.length===0)return Ie(Ya,{children:_t(E,{className:"w-full justify-start gap-2 border-orange-500/50 bg-orange-500/10 text-orange-600 hover:bg-orange-500/20 dark:text-orange-400",disabled:r,onClick:X,variant:"outline",children:[Ie(Pm,{className:"size-4"}),_t("span",{className:"flex-1 text-left",children:["Add ",q," connection"]}),Ie(Em,{className:"size-4"})]})});if(p.length===1){let k=p[0],R=k.name||`${q} API Key`;return Ie(Ya,{children:_t("div",{className:N("flex h-9 w-full items-center gap-2 rounded-md border px-3 text-sm",r&&"cursor-not-allowed opacity-50"),children:[Ie(ja,{className:"size-4 shrink-0 text-green-600"}),Ie("span",{className:"flex-1 truncate",children:R}),Ie(E,{className:"size-6 shrink-0",disabled:r,onClick:()=>$(k),size:"icon",variant:"ghost",children:Ie(Ja,{className:"size-3"})})]})})}return Ie(Ya,{children:_t("div",{className:"flex flex-col gap-1",children:[A.map(k=>{let R=t===k.id,_=k.name||`${q} API Key`;return _t("div",{className:N("flex w-full items-center gap-2 rounded-md px-[13px] py-1.5 text-sm transition-colors",R?"bg-primary/10 text-primary":"hover:bg-muted/50",r&&"cursor-not-allowed opacity-50"),children:[_t("button",{className:"flex flex-1 items-center gap-2 text-left",disabled:r,onClick:()=>o(k.id),type:"button",children:[R?Ie(ja,{className:"size-4 shrink-0"}):Ie(il,{className:"size-4 shrink-0 text-muted-foreground"}),Ie("span",{className:"truncate",children:_})]}),Ie(E,{className:"size-6 shrink-0",disabled:r,onClick:ne=>{ne.stopPropagation(),$(k)},size:"icon",variant:"ghost",children:Ie(Ja,{className:"size-3"})})]},k.id)}),B.map(k=>{let R=t===k.id,_=k.name||`${q} API Key`;return _t("div",{className:N("flex w-full items-center gap-2 rounded-md px-[13px] py-1.5 text-sm transition-colors",R?"bg-primary/10 text-primary":"hover:bg-muted/50",r&&"cursor-not-allowed opacity-50"),children:[_t("button",{className:"flex flex-1 items-center gap-2 text-left",disabled:r,onClick:()=>o(k.id),type:"button",children:[R?Ie(ja,{className:"size-4 shrink-0"}):Ie(il,{className:"size-4 shrink-0 text-muted-foreground"}),Ie("span",{className:"truncate",children:_})]}),Ie(E,{className:"size-6 shrink-0",disabled:r,onClick:ne=>{ne.stopPropagation(),$(k)},size:"icon",variant:"ghost",children:Ie(Ja,{className:"size-3"})})]},k.id)}),n&&_t("button",{className:"flex w-full items-center gap-2 rounded-md px-[13px] py-1.5 text-muted-foreground text-sm transition-colors hover:bg-muted/50 hover:text-foreground",disabled:r,onClick:n,type:"button",children:[Ie(Dm,{className:"size-4 shrink-0"}),Ie("span",{children:"Manage all connections"})]})]})})}import*as Tt from"@radix-ui/react-tooltip";import{jsx as vn,jsxs as Lm}from"react/jsx-runtime";function hn({delayDuration:e=0,...t}){return vn(Tt.Provider,{"data-slot":"tooltip-provider",delayDuration:e,...t})}function jn({...e}){return vn(hn,{children:vn(Tt.Root,{"data-slot":"tooltip",...e})})}function Jn({...e}){return vn(Tt.Trigger,{"data-slot":"tooltip-trigger",...e})}function Yn({className:e,sideOffset:t=0,children:o,...n}){return vn(Tt.Portal,{children:Lm(Tt.Content,{"data-slot":"tooltip-content",sideOffset:t,className:N("bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",e),...n,children:[o,vn(Tt.Arrow,{className:"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]"})]})})}import{ChevronDown as Bm}from"lucide-react";import{useState as Vm}from"react";import{useAtom as cl}from"jotai";import{useEffect as Xa,useRef as Qa,useState as bn}from"react";import{Fragment as Fm,jsx as Za,jsxs as zm}from"react/jsx-runtime";function Mm(e,t){let o=e.match(/\{\{@([^:]+):([^}]+)\}\}/);if(!o)return!1;let n=o[1];return t.some(r=>r.id===n)}function Wm(e,t){let o=e.match(/\{\{@([^:]+):([^}]+)\}\}/);if(!o)return e;let n=o[1],r=o[2],i=t.find(d=>d.id===n);if(!i)return r;let a=i.data.label;if(!a&&i.data.type==="action"){let d=i.data.config?.actionType;d&&(a=ge(d)?.label)}let l=r.indexOf(".");if(l===-1)return a??r;let s=r.substring(l+1);return a?`${a}.${s}`:r}function ul({value:e="",onChange:t,placeholder:o,disabled:n,className:r,id:i,rows:a=3}){let[l,s]=bn(!1),d=Qa(null),[c,u]=bn(e),f=Qa(!0),[v]=cl(Ce),[C]=cl(re),[h,y]=bn(!1),[m,b]=bn({top:0,left:0}),[g,S]=bn(""),[D,I]=bn(null),x=Qa(null);Xa(()=>{e!==c&&!l&&(u(e),f.current=!0)},[e,l,c]),Xa(()=>{!l&&c&&(f.current=!0)},[C,l,c]);let p=()=>{if(!d.current)return null;let A=window.getSelection();if(!A||A.rangeCount===0)return console.log("[Textarea] saveCursorPosition: No selection"),null;let B=A.getRangeAt(0),k=B.cloneRange();k.selectNodeContents(d.current),k.setEnd(B.endContainer,B.endOffset),console.log("[Textarea] saveCursorPosition: range.endContainer",B.endContainer,"endOffset",B.endOffset);let R=0,_=document.createTreeWalker(d.current,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,null),ne,le=!1;for(;(ne=_.nextNode())&&!le;)if(ne.nodeType===Node.TEXT_NODE)if(ne===B.endContainer)R+=B.endOffset,le=!0,console.log("[Textarea] saveCursorPosition: Found cursor in text node, offset:",R);else{let V=(ne.textContent||"").length;R+=V,console.log("[Textarea] saveCursorPosition: Text node before cursor, length:",V)}else if(ne.nodeType===Node.ELEMENT_NODE){let V=ne,Ae=V.getAttribute("data-template");Ae?V.contains(B.endContainer)||V===B.endContainer?(R+=Ae.length,le=!0,console.log("[Textarea] saveCursorPosition: Found cursor in badge, offset:",R)):(R+=Ae.length,console.log("[Textarea] saveCursorPosition: Badge before cursor, length:",Ae.length)):V.tagName==="BR"&&(V===B.endContainer||V.contains(B.endContainer)?le=!0:(R+=1,console.log("[Textarea] saveCursorPosition: BR before cursor")))}return console.log("[Textarea] saveCursorPosition: Final offset:",R),{offset:R}},w=A=>{if(!d.current||!A)return;let B=0,k=document.createTreeWalker(d.current,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,null),R,_=null,ne=0;for(;R=k.nextNode();)if(R.nodeType===Node.TEXT_NODE){let le=(R.textContent||"").length;if(B+le>=A.offset){_=R,ne=A.offset-B;break}B+=le}else if(R.nodeType===Node.ELEMENT_NODE){let le=R,V=le.getAttribute("data-template");if(V){if(B+V.length>=A.offset){_=le.nextSibling,ne=0,!_&&le.parentNode&&(_=document.createTextNode(""),le.parentNode.appendChild(_));break}B+=V.length}else if(le.tagName==="BR"){if(B+1>=A.offset){_=le.nextSibling,ne=0,!_&&le.parentNode&&(_=document.createTextNode(""),le.parentNode.appendChild(_));break}B+=1}}if(_){let le=document.createRange(),V=window.getSelection();try{le.setStart(_,Math.min(ne,_.textContent?.length||0)),le.collapse(!0),V?.removeAllRanges(),V?.addRange(le),d.current.focus()}catch{d.current.focus()}}},G=()=>{if(!d.current||!f.current)return;let A=d.current,B=c||"",k=l?p():null;if(x.current!==null&&(k={offset:x.current},x.current=null),A.innerHTML="",!B&&!l){A.innerHTML=`<span class="text-muted-foreground pointer-events-none">${o||""}</span>`;return}let R=/\{\{@([^:]+):([^}]+)\}\}/g,_=0,ne;for(;(ne=R.exec(B))!==null;){let[le,,V]=ne,Ae=ne.index;if(Ae>_){let ot=B.slice(_,Ae);te(A,ot)}let tt=document.createElement("span"),Ye=Mm(le,C);tt.className=Ye?"inline-flex items-center gap-1 rounded bg-blue-500/10 px-1.5 py-0.5 text-blue-600 dark:text-blue-400 font-mono text-xs border border-blue-500/20 mx-0.5":"inline-flex items-center gap-1 rounded bg-red-500/10 px-1.5 py-0.5 text-red-600 dark:text-red-400 font-mono text-xs border border-red-500/20 mx-0.5",tt.contentEditable="false",tt.setAttribute("data-template",le),tt.textContent=Wm(le,C),A.appendChild(tt),_=R.lastIndex}if(_<B.length){let le=B.slice(_);te(A,le)}A.innerHTML===""&&l&&(A.innerHTML="<br>"),f.current=!1,k&&requestAnimationFrame(()=>w(k))},te=(A,B)=>{let k=B.split(`
11
- `);k.forEach((R,_)=>{R&&A.appendChild(document.createTextNode(R)),_<k.length-1&&A.appendChild(document.createElement("br"))})},O=()=>{if(!d.current)return"";let A="",B=document.createTreeWalker(d.current,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,null),k;for(;k=B.nextNode();)if(k.nodeType===Node.TEXT_NODE){let R=k.parentElement,_=!1;for(;R&&R!==d.current;){if(R.getAttribute("data-template")){_=!0;break}R=R.parentElement}_?console.log("[Textarea] extractValue: Skipping text inside badge:",k.textContent):(A+=k.textContent,console.log("[Textarea] extractValue: Adding text node:",k.textContent))}else if(k.nodeType===Node.ELEMENT_NODE){let R=k,_=R.getAttribute("data-template");_?(A+=_,console.log("[Textarea] extractValue: Adding template:",_)):R.tagName==="BR"&&(A+=`
12
- `,console.log("[Textarea] extractValue: Adding line break"))}return console.log("[Textarea] extractValue: Final result:",A),A},W=()=>{let A=O();if(console.log("[Textarea] handleInput: newValue:",A),console.log("[Textarea] handleInput: internalValue:",c),console.log("[Textarea] handleInput: DOM innerHTML:",d.current?.innerHTML),A===c){console.log("[Textarea] handleInput: No change detected, ignoring");return}let B=(c.match(/\{\{@([^:]+):([^}]+)\}\}/g)||[]).length,k=(A.match(/\{\{@([^:]+):([^}]+)\}\}/g)||[]).length;if(console.log("[Textarea] handleInput: oldTemplates:",B,"newTemplates:",k),k>B){console.log("[Textarea] handleInput: New template added, rendering badge"),u(A),t?.(A),f.current=!0,y(!1),requestAnimationFrame(()=>G());return}if(k===B&&k>0){console.log("[Textarea] handleInput: Typing around existing badges, NOT updating display"),u(A),t?.(A);let _=A.lastIndexOf("@");if(_!==-1){let ne=A.slice(_+1);if(!ne.includes(" ")&&!ne.includes(`
13
- `)){if(S(ne),I(_),d.current){let le=d.current.getBoundingClientRect(),V={top:le.bottom+window.scrollY+4,left:le.left+window.scrollX};b(V)}y(!0)}else y(!1)}else y(!1);return}if(k<B){console.log("[Textarea] handleInput: Template removed, updating display"),u(A),t?.(A),f.current=!0,requestAnimationFrame(()=>G());return}console.log("[Textarea] handleInput: Normal typing, no badges"),u(A),t?.(A);let R=A.lastIndexOf("@");if(R!==-1){let _=A.slice(R+1);if(!_.includes(" ")&&!_.includes(`
14
- `)){if(S(_),I(R),d.current){let ne=d.current.getBoundingClientRect(),le={top:ne.bottom+window.scrollY+4,left:ne.left+window.scrollX};b(le)}y(!0)}else y(!1)}else y(!1)},$=A=>{if(!d.current||D===null)return;let B=O(),k=B.slice(0,D),R=B.slice(D+1+g.length),_=k+A+R,ne=k.length+A.length;console.log("[Textarea] Autocomplete select:",{currentText:B,atSignPosition:D,filter:g,template:A,beforeAt:k,afterFilter:R,newText:_,targetCursorPosition:ne}),u(_),t?.(_),f.current=!0,y(!1),I(null),x.current=ne,d.current.focus()},T=()=>{s(!0),f.current=!0},H=()=>{setTimeout(()=>{document.activeElement!==d.current&&(s(!1),f.current=!0,y(!1))},200)},X=A=>{A.preventDefault();let B=A.clipboardData.getData("text/plain");document.execCommand("insertText",!1,B)},z=A=>{A.key==="Enter"&&(A.preventDefault(),document.execCommand("insertLineBreak"))};Xa(()=>{f.current&&G()},[c,l]);let q=`${a*1.5}rem`;return zm(Fm,{children:[Za("div",{className:N("flex w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm transition-colors focus-within:outline-none focus-within:ring-1 focus-within:ring-ring",n&&"cursor-not-allowed opacity-50",r),style:{minHeight:q},children:Za("div",{className:"w-full outline-none whitespace-pre-wrap break-words",contentEditable:!n,id:i,onBlur:H,onFocus:T,onInput:W,onKeyDown:z,onPaste:X,ref:d,role:"textbox",suppressContentEditableWarning:!0})}),Za(Fr,{currentNodeId:v||void 0,filter:g,isOpen:h,onClose:()=>y(!1),onSelect:$,position:m})]})}import{Fragment as Jm,jsx as Xe,jsxs as Xn}from"react/jsx-runtime";function Hm({field:e,value:t,onChange:o,disabled:n}){return Xe(Le,{disabled:n,id:e.key,onChange:o,placeholder:e.placeholder,value:t})}function Gm({field:e,value:t,onChange:o,disabled:n}){return Xe(ul,{disabled:n,id:e.key,onChange:o,placeholder:e.placeholder,rows:e.rows||4,value:t})}function $m({field:e,value:t,onChange:o,disabled:n}){return Xe(ae,{disabled:n,id:e.key,onChange:r=>o(r.target.value),placeholder:e.placeholder,value:t})}function _m({field:e,value:t,onChange:o,disabled:n}){return Xe(ae,{disabled:n,id:e.key,min:e.min,onChange:r=>o(r.target.value),placeholder:e.placeholder,type:"number",value:t})}function Um({field:e,value:t,onChange:o,disabled:n}){return e.options?Xn(ve,{disabled:n,onValueChange:o,value:t,children:[Xe(he,{className:"w-full",id:e.key,children:Xe(xe,{placeholder:e.placeholder})}),Xe(be,{children:e.options.map(r=>Xe(Z,{value:r.value,children:r.label},r.value))})]}):null}function Km(e){return Xe(co,{disabled:e.disabled,onChange:t=>e.onChange(JSON.stringify(t)),schema:e.value?JSON.parse(e.value):[]})}var qm={"template-input":Hm,"template-textarea":Gm,text:$m,number:_m,select:Um,"schema-builder":Km};function ml(e,t,o,n){if(e.showWhen&&t[e.showWhen.field]!==e.showWhen.equals)return null;let r=t[e.key]||e.defaultValue||"",i=qm[e.type];return Xn("div",{className:"space-y-2",children:[Xn(M,{className:"ml-1",htmlFor:e.key,children:[e.label,e.required&&Xe("span",{className:"text-red-500",children:"*"})]}),Xe(i,{disabled:n,field:e,onChange:a=>o(e.key,a),value:r})]},e.key)}function jm({label:e,fields:t,config:o,onUpdateConfig:n,disabled:r,defaultExpanded:i=!1}){let[a,l]=Vm(i);return Xn("div",{className:"space-y-2",children:[Xn("button",{className:"ml-1 flex items-center gap-1 text-left",onClick:()=>l(!a),type:"button",children:[Xe("span",{className:"font-medium text-sm",children:e}),Xe(Bm,{className:`h-3.5 w-3.5 text-muted-foreground transition-transform duration-200 ${a?"":"-rotate-90"}`})]}),a&&Xe("div",{className:"ml-1 space-y-4 border-primary/50 border-l-2 py-2 pl-3",children:t.map(s=>ml(s,o,n,r))})]})}function pl({fields:e,config:t,onUpdateConfig:o,disabled:n}){return Xe(Jm,{children:e.map(r=>ti(r)?Xe(jm,{config:t,defaultExpanded:r.defaultExpanded,disabled:n,fields:r.fields,label:r.label,onUpdateConfig:o},`group-${r.label}`):ml(r,t,o,n))})}import{Fragment as ap,jsx as fe,jsxs as bt}from"react/jsx-runtime";function op({actionType:e,config:t,onUpdateConfig:o,onUpdateMultipleConfig:n,disabled:r}){switch(e){case"HTTP Request":return fe(zi,{config:t,disabled:r,onUpdateConfig:o});case"Database Query":return fe(Fi,{config:t,disabled:r,onUpdateConfig:o});case"Condition":return fe(Li,{config:t,disabled:r,onUpdateConfig:o,onUpdateMultipleConfig:n});case"Loop":return fe(Bi,{config:t,disabled:r,onUpdateConfig:o});case"Merge":return fe(Vi,{config:t,disabled:r,onUpdateConfig:o});case"Switch":return fe(Ui,{config:t,disabled:r,onUpdateConfig:o});case"Run Workflow":return fe(Gi,{config:t,disabled:r,onUpdateConfig:o});case"Run Workflows in Sequence":return fe(_i,{config:t,disabled:r,onUpdateConfig:o});default:return null}}var vl=[{id:"HTTP Request",label:"HTTP Request"},{id:"Database Query",label:"Database Query"},{id:"Condition",label:"Condition"},{id:"Loop",label:"Loop"},{id:"Merge",label:"Merge"},{id:"Switch",label:"Switch"},{id:"Run Workflow",label:"Run Workflow"},{id:"Run Workflows in Sequence",label:"Run Workflows in Sequence"}],es=vl.map(e=>e.id),gl={"Database Query":"database"};function np(){return Kr(()=>{let e=Qs(),t={System:vl};for(let[o,n]of Object.entries(e))t[o]=n.map(r=>({id:r.id,label:r.label}));return t},[])}function yl(e){if(es.includes(e))return"System";let t=ge(e);return t?.category?t.category:null}function rp(e){if(es.includes(e))return e;let t=ge(e);return t?t.id:e}function qr({config:e,onUpdateConfig:t,onUpdateMultipleConfig:o,disabled:n,isOwner:r=!0}){let i=e?.actionType||"",a=np(),l=Kr(()=>Ys(),[]),s=i?yl(i):null,[d,c]=tp(s||""),u=Ym(Ot),f=fl(ft),{push:v}=oe(),C=fl(Br);ep(()=>{let w=i?yl(i):null;c(w||"")},[i]);let h=w=>{c(w);let G=a[w]?.[0];G&&t("actionType",G.id)},y=w=>{t("actionType",w)},m=(w,G)=>{t(w,String(G))},b=i?ge(i):null,g=Kr(()=>{if(!i)return;if(gl[i])return gl[i];let G=ge(i)?.integration;if(!(G&&!Ko(G)))return G},[i]),S=g==="ai-gateway"&&C?.enabled&&C?.isVercelUser,D=Kr(()=>g?f.some(w=>w.type===g):!1,[g,f]),I=w=>{t("integrationId",w),u(G=>G+1)},x=()=>{g&&v(uo,{type:g,onSuccess:w=>{u(G=>G+1),t("integrationId",w)}})},p=()=>{S?v(ol,{onConsent:I,onManualEntry:x}):x()};return bt(ap,{children:[bt("div",{className:"grid grid-cols-2 gap-2",children:[bt("div",{className:"space-y-2",children:[fe(M,{className:"ml-1",htmlFor:"actionCategory",children:"Service"}),bt(ve,{disabled:n,onValueChange:h,value:d||void 0,children:[fe(he,{className:"w-full",id:"actionCategory",children:fe(xe,{placeholder:"Select category"})}),bt(be,{children:[fe(Z,{value:"System",children:bt("div",{className:"flex items-center gap-2",children:[fe(Zm,{className:"size-4"}),fe("span",{children:"System"})]})}),fe(Lr,{}),l.map(w=>fe(Z,{value:w.label,children:bt("div",{className:"flex items-center gap-2",children:[fe(Wt,{className:"size-4",integration:w.type}),fe("span",{children:w.label})]})},w.type))]})]})]}),bt("div",{className:"space-y-2",children:[fe(M,{className:"ml-1",htmlFor:"actionType",children:"Action"}),bt(ve,{disabled:n||!d,onValueChange:y,value:rp(i)||void 0,children:[fe(he,{className:"w-full",id:"actionType",children:fe(xe,{placeholder:"Select action"})}),fe(be,{children:d&&a[d]?.map(w=>fe(Z,{value:w.id,children:w.label},w.id))})]})]})]}),g&&r&&bt("div",{className:"space-y-2",children:[bt("div",{className:"ml-1 flex items-center justify-between",children:[bt("div",{className:"flex items-center gap-1",children:[fe(M,{children:"Connection"}),fe(hn,{children:bt(jn,{children:[fe(Jn,{asChild:!0,children:fe(Xm,{className:"size-3.5 text-muted-foreground"})}),fe(Yn,{children:fe("p",{children:"API key or OAuth credentials for this service"})})]})})]}),D&&fe(E,{className:"size-6",disabled:n,onClick:p,size:"icon",variant:"ghost",children:fe(Qm,{className:"size-4"})})]}),fe(dl,{disabled:n,integrationType:g,onChange:w=>t("integrationId",w),value:e?.integrationId||""})]}),fe(op,{actionType:e?.actionType||"",config:e,disabled:n,onUpdateConfig:t,onUpdateMultipleConfig:o}),b&&!es.includes(i)&&fe(pl,{config:e,disabled:n,fields:b.configFields,onUpdateConfig:m})]})}import{ChevronRight as wp,Eye as Tl,EyeOff as Sl,Grid3X3 as xp,List as Np,MoreHorizontal as kp,Search as Cp,Settings as Il,Zap as Pl}from"lucide-react";import{useEffect as Tp,useMemo as ts,useRef as Sp,useState as Zn}from"react";import{Repeat as sp}from"lucide-react";import{jsx as ip}from"react/jsx-runtime";var jr={id:"Loop",label:"Loop",description:"Loop through a list of items",category:"System",icon:ip(sp,{className:"size-12 text-cyan-300",strokeWidth:1.5}),codeGenerator:`export async function loopStep(input: {
10
+ Do you want to save anyway?`,confirmLabel:"Save Anyway",onConfirm:async()=>{await m()}}),d(!1)}},h=async()=>{let f=Object.values(y).some(x=>x&&x.length>0);try{l(!0),u(null);let x;f?x=await U.integration.testCredentials({type:t.type,config:y}):x=await U.integration.testConnection(t.id),u(x),x.status==="success"?Oo.success(x.message||"Connection successful"):Oo.error(x.message||"Connection failed")}catch(x){let G=x instanceof Error?x.message:"Connection test failed";u({status:"error",message:G}),Oo.error(G)}finally{l(!1)}},S=()=>{r(Qa,{integration:t,onSuccess:()=>{n?.(),s()}})},I=Mt(t.type)?.formFields,k=()=>t.type==="database"?Be(ml,{configKey:"url",fieldId:"url",helpText:"Connection string in the format: postgresql://user:password@host:port/database",label:"Database URL",onChange:p,placeholder:"postgresql://user:password@host:port/database",value:y.url||""}):I?I.map(f=>f.type==="password"?Be(ml,{configKey:f.configKey,fieldId:f.id,helpLink:f.helpLink,helpText:f.helpText,label:f.label,onChange:p,placeholder:f.placeholder,value:y[f.configKey]||""},f.id):gt("div",{className:"space-y-2",children:[Be(L,{htmlFor:f.id,children:f.label}),Be(ae,{id:f.id,onChange:x=>p(f.configKey,x.target.value),placeholder:f.placeholder,type:f.type,value:y[f.configKey]||""}),(f.helpText||f.helpLink)&&gt("p",{className:"text-muted-foreground text-xs",children:[f.helpText,f.helpLink&&Be("a",{className:"underline hover:text-foreground",href:f.helpLink.url,rel:"noopener noreferrer",target:"_blank",children:f.helpLink.text})]})]},f.id)):null;return gt(Oe,{actions:[{label:"Delete",variant:"ghost",onClick:S,disabled:a||i},{label:"Test",variant:"outline",onClick:h,loading:i,disabled:a},{label:"Update",onClick:w,loading:a}],overlayId:e,title:`Edit ${Km(t.type)}`,children:[Be("p",{className:"-mt-2 mb-4 text-muted-foreground text-sm",children:"Update your connection credentials"}),gt("div",{className:"space-y-4",children:[k(),gt("div",{className:"space-y-2",children:[Be(L,{htmlFor:"name",children:"Label (Optional)"}),Be(ae,{id:"name",onChange:f=>b(f.target.value),placeholder:"e.g. Production, Personal, Work",value:g})]})]})]})}function Qa({overlayId:e,integration:t,onSuccess:o}){let{pop:n}=oe(),r=Hm(Yt),[s,a]=go(!1),[d,i]=go(!0);return gt(Oe,{actions:[{label:"Cancel",variant:"outline",onClick:n},{label:"Delete",variant:"destructive",onClick:async()=>{try{a(!0),t.isManaged&&d&&r?await r.api.revokeConsent():await U.integration.delete(t.id),Oo.success("Connection deleted"),o?.()}catch(c){console.error("Failed to delete integration:",c),Oo.error("Failed to delete connection"),a(!1)}},loading:s}],overlayId:e,title:"Delete Connection",children:[Be("p",{className:"text-muted-foreground text-sm",children:"Are you sure you want to delete this connection? Workflows using it will fail until a new one is configured."}),t.isManaged&&gt("div",{className:"mt-4 flex items-center gap-2",children:[Be(ul,{checked:d,id:"revoke-key",onCheckedChange:c=>i(c)}),Be(L,{className:"cursor-pointer font-normal",htmlFor:"revoke-key",children:"Revoke API key from Vercel"})]})]})}import{Fragment as ts,jsx as Pe,jsxs as Kt}from"react/jsx-runtime";function vl({integrationType:e,value:t,onChange:o,onOpenSettings:n,disabled:r,onAddConnection:s}){let{push:a}=oe(),[d,i]=jr(bt),l=pl(Wt),c=fl(Wt),u=Xm(l),[g,b]=yl(!1),y=pl(Yt),[v,p]=jr(Do),[m,w]=yl(!1),[h,S]=jr($r),[D,I]=jr(rl),k=fl(_r),f=Ym(()=>d.filter(C=>C.type===e),[d,e]),x=d.length>0,G=Jn(async()=>{try{let C=await U.integration.getAll();i(C),b(!0)}catch(C){console.error("Failed to load integrations:",C)}},[i]);wn(()=>{y?.integrationType===e&&!m&&y.api.getStatus().then(C=>{p(C),w(!0)}).catch(()=>{w(!0)})},[e,m,y,p]),wn(()=>{y?.integrationType===e&&v?.enabled&&v?.isVercelUser&&!D&&(k(!0),y.api.getTeams().then(C=>{S(C.teams),C.teams.length>0&&I(!0)}).catch(()=>{}).finally(()=>{k(!1)}))},[e,y,v,D,S,I,k]),wn(()=>{y?.integrationType===e&&v?.enabled&&v?.isVercelUser&&y.api.getTeams().then(C=>{C.teams.length>0&&(S(C.teams),I(!0))}).catch(()=>{})},[e,y,v?.enabled,v?.isVercelUser]),wn(()=>{G()},[G,e]),wn(()=>{l!==u.current&&(u.current=l,G())},[l,G]),wn(()=>{if(f.length>0&&!r&&!(t&&f.some(R=>R.id===t))){let R=f.find(_=>_.isManaged);o(R?.id||f[0].id)}},[f,t,r,o]);let te=async C=>{await G(),o(C),c(R=>R+1)},O=async()=>{if(await G(),c(C=>C+1),y?.integrationType===e){let C=await y.api.getStatus();p(C)}},W=Jn(()=>{a(po,{type:e,onSuccess:te})},[e,a,te]),$=Jn(C=>{a(qr,{integration:C,onSuccess:O,onDelete:O})},[a,O]),T=y?.integrationType===e&&v?.enabled&&v?.isVercelUser&&!v?.hasManagedKey,H=Jn(async C=>{if(await G(),o(C),c(R=>R+1),y){let R=await y.api.getStatus();p(R)}},[G,o,c,y,p]),X=Jn(()=>{s?s():T&&y?a(y.ConsentOverlay,{onConsent:H,onManualEntry:W}):W()},[s,T,y,a,H,W]);if(!x&&!g)return Pe("div",{className:"flex flex-col gap-1",children:Kt("div",{className:"flex items-center gap-2 rounded-md px-2 py-1.5",children:[Pe("div",{className:"size-4 shrink-0 animate-pulse rounded-full bg-muted"}),Pe("div",{className:"h-4 flex-1 animate-pulse rounded bg-muted"}),Pe("div",{className:"size-6 shrink-0 animate-pulse rounded bg-muted"})]})});let j=Mt(e)?.label||e,A=f.filter(C=>C.isManaged),B=f.filter(C=>!C.isManaged);if(f.length===0)return Pe(ts,{children:Kt(E,{className:"w-full justify-start gap-2 border-orange-500/50 bg-orange-500/10 text-orange-600 hover:bg-orange-500/20 dark:text-orange-400",disabled:r,onClick:X,variant:"outline",children:[Pe(qm,{className:"size-4"}),Kt("span",{className:"flex-1 text-left",children:["Add ",j," connection"]}),Pe(jm,{className:"size-4"})]})});if(f.length===1){let C=f[0],R=C.name||`${j} API Key`;return Pe(ts,{children:Kt("div",{className:N("flex h-9 w-full items-center gap-2 rounded-md border px-3 text-sm",r&&"cursor-not-allowed opacity-50"),children:[Pe(Za,{className:"size-4 shrink-0 text-green-600"}),Pe("span",{className:"flex-1 truncate",children:R}),Pe(E,{className:"size-6 shrink-0",disabled:r,onClick:()=>$(C),size:"icon",variant:"ghost",children:Pe(es,{className:"size-3"})})]})})}return Pe(ts,{children:Kt("div",{className:"flex flex-col gap-1",children:[A.map(C=>{let R=t===C.id,_=C.name||`${j} API Key`;return Kt("div",{className:N("flex w-full items-center gap-2 rounded-md px-[13px] py-1.5 text-sm transition-colors",R?"bg-primary/10 text-primary":"hover:bg-muted/50",r&&"cursor-not-allowed opacity-50"),children:[Kt("button",{className:"flex flex-1 items-center gap-2 text-left",disabled:r,onClick:()=>o(C.id),type:"button",children:[R?Pe(Za,{className:"size-4 shrink-0"}):Pe(gl,{className:"size-4 shrink-0 text-muted-foreground"}),Pe("span",{className:"truncate",children:_})]}),Pe(E,{className:"size-6 shrink-0",disabled:r,onClick:ne=>{ne.stopPropagation(),$(C)},size:"icon",variant:"ghost",children:Pe(es,{className:"size-3"})})]},C.id)}),B.map(C=>{let R=t===C.id,_=C.name||`${j} API Key`;return Kt("div",{className:N("flex w-full items-center gap-2 rounded-md px-[13px] py-1.5 text-sm transition-colors",R?"bg-primary/10 text-primary":"hover:bg-muted/50",r&&"cursor-not-allowed opacity-50"),children:[Kt("button",{className:"flex flex-1 items-center gap-2 text-left",disabled:r,onClick:()=>o(C.id),type:"button",children:[R?Pe(Za,{className:"size-4 shrink-0"}):Pe(gl,{className:"size-4 shrink-0 text-muted-foreground"}),Pe("span",{className:"truncate",children:_})]}),Pe(E,{className:"size-6 shrink-0",disabled:r,onClick:ne=>{ne.stopPropagation(),$(C)},size:"icon",variant:"ghost",children:Pe(es,{className:"size-3"})})]},C.id)}),n&&Kt("button",{className:"flex w-full items-center gap-2 rounded-md px-[13px] py-1.5 text-muted-foreground text-sm transition-colors hover:bg-muted/50 hover:text-foreground",disabled:r,onClick:n,type:"button",children:[Pe(Jm,{className:"size-4 shrink-0"}),Pe("span",{children:"Manage all connections"})]})]})})}import*as It from"@radix-ui/react-tooltip";import{jsx as xn,jsxs as Qm}from"react/jsx-runtime";function Nn({delayDuration:e=0,...t}){return xn(It.Provider,{"data-slot":"tooltip-provider",delayDuration:e,...t})}function Yn({...e}){return xn(Nn,{children:xn(It.Root,{"data-slot":"tooltip",...e})})}function Xn({...e}){return xn(It.Trigger,{"data-slot":"tooltip-trigger",...e})}function Qn({className:e,sideOffset:t=0,children:o,...n}){return xn(It.Portal,{children:Qm(It.Content,{"data-slot":"tooltip-content",sideOffset:t,className:N("bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",e),...n,children:[o,xn(It.Arrow,{className:"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]"})]})})}import{ChevronDown as np}from"lucide-react";import{useState as rp}from"react";import{useAtom as hl}from"jotai";import{useEffect as os,useRef as ns,useState as kn}from"react";import{Fragment as tp,jsx as rs,jsxs as op}from"react/jsx-runtime";function Zm(e,t){let o=e.match(/\{\{@([^:]+):([^}]+)\}\}/);if(!o)return!1;let n=o[1];return t.some(r=>r.id===n)}function ep(e,t){let o=e.match(/\{\{@([^:]+):([^}]+)\}\}/);if(!o)return e;let n=o[1],r=o[2],s=t.find(l=>l.id===n);if(!s)return r;let a=s.data.label;if(!a&&s.data.type==="action"){let l=s.data.config?.actionType;l&&(a=ye(l)?.label)}let d=r.indexOf(".");if(d===-1)return a??r;let i=r.substring(d+1);return a?`${a}.${i}`:r}function bl({value:e="",onChange:t,placeholder:o,disabled:n,className:r,id:s,rows:a=3}){let[d,i]=kn(!1),l=ns(null),[c,u]=kn(e),g=ns(!0),[b]=hl(Te),[y]=hl(re),[v,p]=kn(!1),[m,w]=kn({top:0,left:0}),[h,S]=kn(""),[D,I]=kn(null),k=ns(null);os(()=>{e!==c&&!d&&(u(e),g.current=!0)},[e,d,c]),os(()=>{!d&&c&&(g.current=!0)},[y,d,c]);let f=()=>{if(!l.current)return null;let A=window.getSelection();if(!A||A.rangeCount===0)return console.log("[Textarea] saveCursorPosition: No selection"),null;let B=A.getRangeAt(0),C=B.cloneRange();C.selectNodeContents(l.current),C.setEnd(B.endContainer,B.endOffset),console.log("[Textarea] saveCursorPosition: range.endContainer",B.endContainer,"endOffset",B.endOffset);let R=0,_=document.createTreeWalker(l.current,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,null),ne,de=!1;for(;(ne=_.nextNode())&&!de;)if(ne.nodeType===Node.TEXT_NODE)if(ne===B.endContainer)R+=B.endOffset,de=!0,console.log("[Textarea] saveCursorPosition: Found cursor in text node, offset:",R);else{let V=(ne.textContent||"").length;R+=V,console.log("[Textarea] saveCursorPosition: Text node before cursor, length:",V)}else if(ne.nodeType===Node.ELEMENT_NODE){let V=ne,Ie=V.getAttribute("data-template");Ie?V.contains(B.endContainer)||V===B.endContainer?(R+=Ie.length,de=!0,console.log("[Textarea] saveCursorPosition: Found cursor in badge, offset:",R)):(R+=Ie.length,console.log("[Textarea] saveCursorPosition: Badge before cursor, length:",Ie.length)):V.tagName==="BR"&&(V===B.endContainer||V.contains(B.endContainer)?de=!0:(R+=1,console.log("[Textarea] saveCursorPosition: BR before cursor")))}return console.log("[Textarea] saveCursorPosition: Final offset:",R),{offset:R}},x=A=>{if(!l.current||!A)return;let B=0,C=document.createTreeWalker(l.current,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,null),R,_=null,ne=0;for(;R=C.nextNode();)if(R.nodeType===Node.TEXT_NODE){let de=(R.textContent||"").length;if(B+de>=A.offset){_=R,ne=A.offset-B;break}B+=de}else if(R.nodeType===Node.ELEMENT_NODE){let de=R,V=de.getAttribute("data-template");if(V){if(B+V.length>=A.offset){_=de.nextSibling,ne=0,!_&&de.parentNode&&(_=document.createTextNode(""),de.parentNode.appendChild(_));break}B+=V.length}else if(de.tagName==="BR"){if(B+1>=A.offset){_=de.nextSibling,ne=0,!_&&de.parentNode&&(_=document.createTextNode(""),de.parentNode.appendChild(_));break}B+=1}}if(_){let de=document.createRange(),V=window.getSelection();try{de.setStart(_,Math.min(ne,_.textContent?.length||0)),de.collapse(!0),V?.removeAllRanges(),V?.addRange(de),l.current.focus()}catch{l.current.focus()}}},G=()=>{if(!l.current||!g.current)return;let A=l.current,B=c||"",C=d?f():null;if(k.current!==null&&(C={offset:k.current},k.current=null),A.innerHTML="",!B&&!d){A.innerHTML=`<span class="text-muted-foreground pointer-events-none">${o||""}</span>`;return}let R=/\{\{@([^:]+):([^}]+)\}\}/g,_=0,ne;for(;(ne=R.exec(B))!==null;){let[de,,V]=ne,Ie=ne.index;if(Ie>_){let rt=B.slice(_,Ie);te(A,rt)}let nt=document.createElement("span"),Qe=Zm(de,y);nt.className=Qe?"inline-flex items-center gap-1 rounded bg-blue-500/10 px-1.5 py-0.5 text-blue-600 dark:text-blue-400 font-mono text-xs border border-blue-500/20 mx-0.5":"inline-flex items-center gap-1 rounded bg-red-500/10 px-1.5 py-0.5 text-red-600 dark:text-red-400 font-mono text-xs border border-red-500/20 mx-0.5",nt.contentEditable="false",nt.setAttribute("data-template",de),nt.textContent=ep(de,y),A.appendChild(nt),_=R.lastIndex}if(_<B.length){let de=B.slice(_);te(A,de)}A.innerHTML===""&&d&&(A.innerHTML="<br>"),g.current=!1,C&&requestAnimationFrame(()=>x(C))},te=(A,B)=>{let C=B.split(`
11
+ `);C.forEach((R,_)=>{R&&A.appendChild(document.createTextNode(R)),_<C.length-1&&A.appendChild(document.createElement("br"))})},O=()=>{if(!l.current)return"";let A="",B=document.createTreeWalker(l.current,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,null),C;for(;C=B.nextNode();)if(C.nodeType===Node.TEXT_NODE){let R=C.parentElement,_=!1;for(;R&&R!==l.current;){if(R.getAttribute("data-template")){_=!0;break}R=R.parentElement}_?console.log("[Textarea] extractValue: Skipping text inside badge:",C.textContent):(A+=C.textContent,console.log("[Textarea] extractValue: Adding text node:",C.textContent))}else if(C.nodeType===Node.ELEMENT_NODE){let R=C,_=R.getAttribute("data-template");_?(A+=_,console.log("[Textarea] extractValue: Adding template:",_)):R.tagName==="BR"&&(A+=`
12
+ `,console.log("[Textarea] extractValue: Adding line break"))}return console.log("[Textarea] extractValue: Final result:",A),A},W=()=>{let A=O();if(console.log("[Textarea] handleInput: newValue:",A),console.log("[Textarea] handleInput: internalValue:",c),console.log("[Textarea] handleInput: DOM innerHTML:",l.current?.innerHTML),A===c){console.log("[Textarea] handleInput: No change detected, ignoring");return}let B=(c.match(/\{\{@([^:]+):([^}]+)\}\}/g)||[]).length,C=(A.match(/\{\{@([^:]+):([^}]+)\}\}/g)||[]).length;if(console.log("[Textarea] handleInput: oldTemplates:",B,"newTemplates:",C),C>B){console.log("[Textarea] handleInput: New template added, rendering badge"),u(A),t?.(A),g.current=!0,p(!1),requestAnimationFrame(()=>G());return}if(C===B&&C>0){console.log("[Textarea] handleInput: Typing around existing badges, NOT updating display"),u(A),t?.(A);let _=A.lastIndexOf("@");if(_!==-1){let ne=A.slice(_+1);if(!ne.includes(" ")&&!ne.includes(`
13
+ `)){if(S(ne),I(_),l.current){let de=l.current.getBoundingClientRect(),V={top:de.bottom+window.scrollY+4,left:de.left+window.scrollX};w(V)}p(!0)}else p(!1)}else p(!1);return}if(C<B){console.log("[Textarea] handleInput: Template removed, updating display"),u(A),t?.(A),g.current=!0,requestAnimationFrame(()=>G());return}console.log("[Textarea] handleInput: Normal typing, no badges"),u(A),t?.(A);let R=A.lastIndexOf("@");if(R!==-1){let _=A.slice(R+1);if(!_.includes(" ")&&!_.includes(`
14
+ `)){if(S(_),I(R),l.current){let ne=l.current.getBoundingClientRect(),de={top:ne.bottom+window.scrollY+4,left:ne.left+window.scrollX};w(de)}p(!0)}else p(!1)}else p(!1)},$=A=>{if(!l.current||D===null)return;let B=O(),C=B.slice(0,D),R=B.slice(D+1+h.length),_=C+A+R,ne=C.length+A.length;console.log("[Textarea] Autocomplete select:",{currentText:B,atSignPosition:D,filter:h,template:A,beforeAt:C,afterFilter:R,newText:_,targetCursorPosition:ne}),u(_),t?.(_),g.current=!0,p(!1),I(null),k.current=ne,l.current.focus()},T=()=>{i(!0),g.current=!0},H=()=>{setTimeout(()=>{document.activeElement!==l.current&&(i(!1),g.current=!0,p(!1))},200)},X=A=>{A.preventDefault();let B=A.clipboardData.getData("text/plain");document.execCommand("insertText",!1,B)},z=A=>{A.key==="Enter"&&(A.preventDefault(),document.execCommand("insertLineBreak"))};os(()=>{g.current&&G()},[c,d]);let j=`${a*1.5}rem`;return op(tp,{children:[rs("div",{className:N("flex w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm transition-colors focus-within:outline-none focus-within:ring-1 focus-within:ring-ring",n&&"cursor-not-allowed opacity-50",r),style:{minHeight:j},children:rs("div",{className:"w-full outline-none whitespace-pre-wrap break-words",contentEditable:!n,id:s,onBlur:H,onFocus:T,onInput:W,onKeyDown:z,onPaste:X,ref:l,role:"textbox",suppressContentEditableWarning:!0})}),rs(Vr,{currentNodeId:b||void 0,filter:h,isOpen:v,onClose:()=>p(!1),onSelect:$,position:m})]})}import{Fragment as pp,jsx as Ze,jsxs as Zn}from"react/jsx-runtime";function ap({field:e,value:t,onChange:o,disabled:n}){return Ze(We,{disabled:n,id:e.key,onChange:o,placeholder:e.placeholder,value:t})}function sp({field:e,value:t,onChange:o,disabled:n}){return Ze(bl,{disabled:n,id:e.key,onChange:o,placeholder:e.placeholder,rows:e.rows||4,value:t})}function ip({field:e,value:t,onChange:o,disabled:n}){return Ze(ae,{disabled:n,id:e.key,onChange:r=>o(r.target.value),placeholder:e.placeholder,value:t})}function lp({field:e,value:t,onChange:o,disabled:n}){return Ze(ae,{disabled:n,id:e.key,min:e.min,onChange:r=>o(r.target.value),placeholder:e.placeholder,type:"number",value:t})}function dp({field:e,value:t,onChange:o,disabled:n}){return e.options?Zn(he,{disabled:n,onValueChange:o,value:t,children:[Ze(be,{className:"w-full",id:e.key,children:Ze(xe,{placeholder:e.placeholder})}),Ze(we,{children:e.options.map(r=>Ze(Q,{value:r.value,children:r.label},r.value))})]}):null}function cp(e){return Ze(mo,{disabled:e.disabled,onChange:t=>e.onChange(JSON.stringify(t)),schema:e.value?JSON.parse(e.value):[]})}var up={"template-input":ap,"template-textarea":sp,text:ip,number:lp,select:dp,"schema-builder":cp};function wl(e,t,o,n){if(e.showWhen&&t[e.showWhen.field]!==e.showWhen.equals)return null;let r=t[e.key]||e.defaultValue||"",s=up[e.type];return Zn("div",{className:"space-y-2",children:[Zn(L,{className:"ml-1",htmlFor:e.key,children:[e.label,e.required&&Ze("span",{className:"text-red-500",children:"*"})]}),Ze(s,{disabled:n,field:e,onChange:a=>o(e.key,a),value:r})]},e.key)}function mp({label:e,fields:t,config:o,onUpdateConfig:n,disabled:r,defaultExpanded:s=!1}){let[a,d]=rp(s);return Zn("div",{className:"space-y-2",children:[Zn("button",{className:"ml-1 flex items-center gap-1 text-left",onClick:()=>d(!a),type:"button",children:[Ze("span",{className:"font-medium text-sm",children:e}),Ze(np,{className:`h-3.5 w-3.5 text-muted-foreground transition-transform duration-200 ${a?"":"-rotate-90"}`})]}),a&&Ze("div",{className:"ml-1 space-y-4 border-primary/50 border-l-2 py-2 pl-3",children:t.map(i=>wl(i,o,n,r))})]})}function xl({fields:e,config:t,onUpdateConfig:o,disabled:n}){return Ze(pp,{children:e.map(r=>si(r)?Ze(mp,{config:t,defaultExpanded:r.defaultExpanded,disabled:n,fields:r.fields,label:r.label,onUpdateConfig:o},`group-${r.label}`):wl(r,t,o,n))})}import{Fragment as kp,jsx as ge,jsxs as kt}from"react/jsx-runtime";function wp({actionType:e,config:t,onUpdateConfig:o,onUpdateMultipleConfig:n,disabled:r}){switch(e){case"HTTP Request":return ge(Ki,{config:t,disabled:r,onUpdateConfig:o});case"Database Query":return ge(Ui,{config:t,disabled:r,onUpdateConfig:o});case"Condition":return ge(Gi,{config:t,disabled:r,onUpdateConfig:o,onUpdateMultipleConfig:n});case"Loop":return ge(qi,{config:t,disabled:r,onUpdateConfig:o});case"Merge":return ge(ji,{config:t,disabled:r,onUpdateConfig:o});case"Switch":return ge(Zi,{config:t,disabled:r,onUpdateConfig:o});case"Run Workflow":return ge(Yi,{config:t,disabled:r,onUpdateConfig:o});case"Run Workflows in Sequence":return ge(Qi,{config:t,disabled:r,onUpdateConfig:o});default:return null}}var Tl=[{id:"HTTP Request",label:"HTTP Request"},{id:"Database Query",label:"Database Query"},{id:"Condition",label:"Condition"},{id:"Loop",label:"Loop"},{id:"Merge",label:"Merge"},{id:"Switch",label:"Switch"},{id:"Run Workflow",label:"Run Workflow"},{id:"Run Workflows in Sequence",label:"Run Workflows in Sequence"}],as=Tl.map(e=>e.id),kl={"Database Query":"database"};function xp(){return Jr(()=>{let e=ni(),t={System:Tl};for(let[o,n]of Object.entries(e))t[o]=n.map(r=>({id:r.id,label:r.label}));return t},[])}function Cl(e){if(as.includes(e))return"System";let t=ye(e);return t?.category?t.category:null}function Np(e){if(as.includes(e))return e;let t=ye(e);return t?t.id:e}function Yr({config:e,onUpdateConfig:t,onUpdateMultipleConfig:o,disabled:n,isOwner:r=!0}){let s=e?.actionType||"",a=xp(),d=Jr(()=>ti(),[]),i=s?Cl(s):null,[l,c]=bp(i||""),u=fp(Wt),g=Nl(bt),{push:b}=oe(),y=Nl(Gr);hp(()=>{let x=s?Cl(s):null;c(x||"")},[s]);let v=x=>{c(x);let G=a[x]?.[0];G&&t("actionType",G.id)},p=x=>{t("actionType",x)},m=(x,G)=>{t(x,String(G))},w=s?ye(s):null,h=Jr(()=>{if(!s)return;if(kl[s])return kl[s];let G=ye(s)?.integration;if(!(G&&!Jo(G)))return G},[s]),S=h==="ai-gateway"&&y?.enabled&&y?.isVercelUser,D=Jr(()=>h?g.some(x=>x.type===h):!1,[h,g]),I=x=>{t("integrationId",x),u(G=>G+1)},k=()=>{h&&b(po,{type:h,onSuccess:x=>{u(G=>G+1),t("integrationId",x)}})},f=()=>{S?b(cl,{onConsent:I,onManualEntry:k}):k()};return kt(kp,{children:[kt("div",{className:"grid grid-cols-2 gap-2",children:[kt("div",{className:"space-y-2",children:[ge(L,{className:"ml-1",htmlFor:"actionCategory",children:"Service"}),kt(he,{disabled:n,onValueChange:v,value:l||void 0,children:[ge(be,{className:"w-full",id:"actionCategory",children:ge(xe,{placeholder:"Select category"})}),kt(we,{children:[ge(Q,{value:"System",children:kt("div",{className:"flex items-center gap-2",children:[ge(vp,{className:"size-4"}),ge("span",{children:"System"})]})}),ge(Fr,{}),d.map(x=>ge(Q,{value:x.label,children:kt("div",{className:"flex items-center gap-2",children:[ge(Bt,{className:"size-4",integration:x.type}),ge("span",{children:x.label})]})},x.type))]})]})]}),kt("div",{className:"space-y-2",children:[ge(L,{className:"ml-1",htmlFor:"actionType",children:"Action"}),kt(he,{disabled:n||!l,onValueChange:p,value:Np(s)||void 0,children:[ge(be,{className:"w-full",id:"actionType",children:ge(xe,{placeholder:"Select action"})}),ge(we,{children:l&&a[l]?.map(x=>ge(Q,{value:x.id,children:x.label},x.id))})]})]})]}),h&&r&&kt("div",{className:"space-y-2",children:[kt("div",{className:"ml-1 flex items-center justify-between",children:[kt("div",{className:"flex items-center gap-1",children:[ge(L,{children:"Connection"}),ge(Nn,{children:kt(Yn,{children:[ge(Xn,{asChild:!0,children:ge(gp,{className:"size-3.5 text-muted-foreground"})}),ge(Qn,{children:ge("p",{children:"API key or OAuth credentials for this service"})})]})})]}),D&&ge(E,{className:"size-6",disabled:n,onClick:f,size:"icon",variant:"ghost",children:ge(yp,{className:"size-4"})})]}),ge(vl,{disabled:n,integrationType:h,onChange:x=>t("integrationId",x),value:e?.integrationId||""})]}),ge(wp,{actionType:e?.actionType||"",config:e,disabled:n,onUpdateConfig:t,onUpdateMultipleConfig:o}),w&&!as.includes(s)&&ge(xl,{config:e,disabled:n,fields:w.configFields,onUpdateConfig:m})]})}import{ChevronRight as zp,Eye as Ol,EyeOff as Ll,Grid3X3 as Bp,List as Vp,MoreHorizontal as Hp,Search as Gp,Settings as Wl,Zap as Fl}from"lucide-react";import{useEffect as $p,useMemo as ss,useRef as _p,useState as tr}from"react";import{Repeat as Cp}from"lucide-react";import{jsx as Tp}from"react/jsx-runtime";var Xr={id:"Loop",label:"Loop",description:"Loop through a list of items",category:"System",icon:Tp(Cp,{className:"size-12 text-cyan-300",strokeWidth:1.5}),codeGenerator:`export async function loopStep(input: {
15
15
  items: unknown[];
16
16
  batchSize?: number;
17
17
  currentBatchIndex?: number;
@@ -39,7 +39,7 @@ Do you want to save anyway?`,confirmLabel:"Save Anyway",onConfirm:async()=>{awai
39
39
  items,
40
40
  batchSize,
41
41
  };
42
- }`};import{Merge as lp}from"lucide-react";import{jsx as dp}from"react/jsx-runtime";var wn={id:"Merge",label:"Merge",description:"Combine data from multiple inputs",category:"System",icon:dp(lp,{className:"size-12 text-orange-300",strokeWidth:1.5}),codeGenerator:`export async function mergeStep(input: {
42
+ }`};import{Merge as Sp}from"lucide-react";import{jsx as Ap}from"react/jsx-runtime";var Cn={id:"Merge",label:"Merge",description:"Combine data from multiple inputs",category:"System",icon:Ap(Sp,{className:"size-12 text-orange-300",strokeWidth:1.5}),codeGenerator:`export async function mergeStep(input: {
43
43
  inputCount?: number;
44
44
  [key: string]: unknown;
45
45
  mode: "append" | "combineByPosition" | "combineByFields";
@@ -120,7 +120,7 @@ Do you want to save anyway?`,confirmLabel:"Save Anyway",onConfirm:async()=>{awai
120
120
  }
121
121
 
122
122
  return { merged: inputs.flat(), totalItems: inputs.flat().length };
123
- }`};import{WorkflowIcon as cp}from"lucide-react";import{jsx as up}from"react/jsx-runtime";var Jr={id:"Run Workflow",label:"Run Workflow",description:"Execute another workflow and wait for it to complete",category:"System",icon:up(cp,{className:"size-12 text-emerald-300",strokeWidth:1.5}),codeGenerator:`export async function runWorkflowStep(input: {
123
+ }`};import{WorkflowIcon as Ip}from"lucide-react";import{jsx as Pp}from"react/jsx-runtime";var Qr={id:"Run Workflow",label:"Run Workflow",description:"Execute another workflow and wait for it to complete",category:"System",icon:Pp(Ip,{className:"size-12 text-emerald-300",strokeWidth:1.5}),codeGenerator:`export async function runWorkflowStep(input: {
124
124
  workflowId: string;
125
125
  input?: string;
126
126
  }) {
@@ -129,7 +129,7 @@ Do you want to save anyway?`,confirmLabel:"Save Anyway",onConfirm:async()=>{awai
129
129
  // Note: Run Workflow is only available in the visual builder.
130
130
  // It executes another workflow internally and returns its output.
131
131
  throw new Error("Run Workflow is not supported in exported code. Use HTTP Request instead.");
132
- }`};import{ListOrdered as mp}from"lucide-react";import{jsx as pp}from"react/jsx-runtime";var Yr={id:"Run Workflows in Sequence",label:"Run Workflows in Sequence",description:"Execute multiple workflows one after another in order",category:"System",icon:pp(mp,{className:"size-12 text-emerald-300",strokeWidth:1.5}),codeGenerator:`export async function runWorkflowsInSequenceStep(input: {
132
+ }`};import{ListOrdered as Ep}from"lucide-react";import{jsx as Dp}from"react/jsx-runtime";var Zr={id:"Run Workflows in Sequence",label:"Run Workflows in Sequence",description:"Execute multiple workflows one after another in order",category:"System",icon:Dp(Ep,{className:"size-12 text-emerald-300",strokeWidth:1.5}),codeGenerator:`export async function runWorkflowsInSequenceStep(input: {
133
133
  workflowIds: string[];
134
134
  continueOnFailure?: boolean;
135
135
  input?: string;
@@ -139,7 +139,7 @@ Do you want to save anyway?`,confirmLabel:"Save Anyway",onConfirm:async()=>{awai
139
139
  // Note: Run Workflows in Sequence is only available in the visual builder.
140
140
  // It executes multiple workflows internally in order and returns their outputs.
141
141
  throw new Error("Run Workflows in Sequence is not supported in exported code. Use HTTP Request instead.");
142
- }`};import{ArrowLeftRight as fp}from"lucide-react";import{jsx as gp}from"react/jsx-runtime";var xn={id:"Switch",label:"Switch",description:"Route based on rules or values",category:"System",icon:gp(fp,{className:"size-12 text-violet-300",strokeWidth:1.5}),codeGenerator:`export async function switchStep(input: {
142
+ }`};import{ArrowLeftRight as Rp}from"lucide-react";import{jsx as Op}from"react/jsx-runtime";var Tn={id:"Switch",label:"Switch",description:"Route based on rules or values",category:"System",icon:Op(Rp,{className:"size-12 text-violet-300",strokeWidth:1.5}),codeGenerator:`export async function switchStep(input: {
143
143
  mode: "rules" | "expression";
144
144
  switchValue?: string;
145
145
  routeCount?: number;
@@ -173,16 +173,16 @@ Do you want to save anyway?`,confirmLabel:"Save Anyway",onConfirm:async()=>{awai
173
173
  }
174
174
 
175
175
  return { matchedRouteIndex: -1, matchedRouteName: "Default", isDefault: true };
176
- }`};import{useEffect as yp,useState as vp}from"react";function hl(){let[e,t]=vp(void 0);return yp(()=>{let o="ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0;t(o)},[]),e}import{DropdownMenu as wt}from"radix-ui";import{CheckIcon as Sk,ChevronRightIcon as hp,CircleIcon as bp}from"lucide-react";import{jsx as mt,jsxs as Cl}from"react/jsx-runtime";function Ro({...e}){return mt(wt.Root,{"data-slot":"dropdown-menu",...e})}function Oo({...e}){return mt(wt.Trigger,{"data-slot":"dropdown-menu-trigger",...e})}function Lo({className:e,sideOffset:t=4,...o}){return mt(wt.Portal,{children:mt(wt.Content,{"data-slot":"dropdown-menu-content",sideOffset:t,className:N("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",e),...o})})}function xt({className:e,inset:t,variant:o="default",...n}){return mt(wt.Item,{"data-slot":"dropdown-menu-item","data-inset":t,"data-variant":o,className:N("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...n})}function bl({...e}){return mt(wt.RadioGroup,{"data-slot":"dropdown-menu-radio-group",...e})}function Xr({className:e,children:t,...o}){return Cl(wt.RadioItem,{"data-slot":"dropdown-menu-radio-item",className:N("focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...o,children:[mt("span",{className:"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center",children:mt(wt.ItemIndicator,{children:mt(bp,{className:"size-2 fill-current"})})}),t]})}function wl({className:e,inset:t,...o}){return mt(wt.Label,{"data-slot":"dropdown-menu-label","data-inset":t,className:N("px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",e),...o})}function Qn({className:e,...t}){return mt(wt.Separator,{"data-slot":"dropdown-menu-separator",className:N("bg-border -mx-1 my-1 h-px",e),...t})}function xl({...e}){return mt(wt.Sub,{"data-slot":"dropdown-menu-sub",...e})}function Nl({className:e,inset:t,children:o,...n}){return Cl(wt.SubTrigger,{"data-slot":"dropdown-menu-sub-trigger","data-inset":t,className:N("focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...n,children:[o,mt(hp,{className:"ml-auto size-4"})]})}function kl({className:e,...t}){return mt(wt.SubContent,{"data-slot":"dropdown-menu-sub-content",className:N("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",e),...t})}import{Fragment as Al,jsx as ue,jsxs as it}from"react/jsx-runtime";var Ap=[Jo,qo,jo,jr,wn,xn,Jr,Yr];function Ip(){return ts(()=>{let t=Xs().map(o=>({id:o.id,label:o.label,description:o.description,category:o.category,integration:o.integration}));return[...Ap,...t]},[])}function Pp({group:e}){let t=e.actions[0];return t?.integration?ue(Wt,{className:"size-4",integration:t.integration}):e.category==="System"?ue(Il,{className:"size-4"}):ue(Pl,{className:"size-4"})}function Ep({action:e,className:t}){return e.integration?ue(Wt,{className:t,integration:e.integration}):e.category==="System"?ue(Il,{className:N(t,"text-muted-foreground")}):ue(Pl,{className:N(t,"text-muted-foreground")})}var El="workflow-action-grid-hidden-groups",Dl="workflow-action-grid-view-mode";function Dp(){if(typeof window>"u")return new Set;try{let e=localStorage.getItem(El);return e?new Set(JSON.parse(e)):new Set}catch{return new Set}}function Rp(){if(typeof window>"u")return"list";try{return localStorage.getItem(Dl)==="grid"?"grid":"list"}catch{return"list"}}function Qr({onSelectAction:e,disabled:t,isNewlyCreated:o}){let[n,r]=Zn(""),[i,a]=Zn(new Set),[l,s]=Zn(Dp),[d,c]=Zn(!1),[u,f]=Zn(Rp),v=Ip(),C=Sp(null),h=hl(),y=()=>{let x=u==="list"?"grid":"list";f(x),localStorage.setItem(Dl,x)},m=x=>{a(p=>{let w=new Set(p);return w.has(x)?w.delete(x):w.add(x),w})},b=x=>{s(p=>{let w=new Set(p);return w.has(x)?w.delete(x):w.add(x),localStorage.setItem(El,JSON.stringify([...w])),w})};Tp(()=>{o&&h===!1&&C.current&&C.current.focus()},[o,h]);let g=v.filter(x=>{let p=n.toLowerCase();return x.label.toLowerCase().includes(p)||x.description.toLowerCase().includes(p)||x.category.toLowerCase().includes(p)}),S=ts(()=>{let x={};for(let w of g){let G=w.category;x[G]||(x[G]=[]),x[G].push(w)}return Object.keys(x).sort((w,G)=>w==="System"?-1:G==="System"?1:w.localeCompare(G)).map(w=>({category:w,actions:x[w]}))},[g]),D=ts(()=>d?S:S.filter(x=>!l.has(x.category)),[S,l,d]),I=l.size;return it("div",{className:"flex min-h-0 flex-1 flex-col gap-3",children:[it("div",{className:"flex shrink-0 gap-2",children:[it("div",{className:"relative flex-1",children:[ue(Cp,{className:"absolute top-1/2 left-3 size-4 -translate-y-1/2 text-muted-foreground"}),ue(ae,{className:"pl-9","data-testid":"action-search-input",disabled:t,id:"action-filter",onChange:x=>r(x.target.value),placeholder:"Search actions...",ref:C,value:n})]}),ue(hn,{children:it(jn,{children:[ue(Jn,{asChild:!0,children:ue(E,{className:"shrink-0",onClick:y,size:"icon",variant:"ghost",children:u==="list"?ue(xp,{className:"size-4"}):ue(Np,{className:"size-4"})})}),ue(Yn,{children:u==="list"?"Grid view":"List view"})]})}),I>0&&ue(hn,{children:it(jn,{children:[ue(Jn,{asChild:!0,children:ue(E,{className:N("shrink-0",d&&"bg-muted"),onClick:()=>c(!d),size:"icon",variant:"ghost",children:d?ue(Tl,{className:"size-4"}):ue(Sl,{className:"size-4"})})}),ue(Yn,{children:d?"Hide hidden groups":`Show ${I} hidden group${I>1?"s":""}`})]})})]}),it("div",{className:"min-h-0 flex-1 overflow-y-auto pb-4","data-testid":"action-grid",children:[g.length===0&&ue("p",{className:"py-4 text-center text-muted-foreground text-sm",children:"No actions found"}),g.length>0&&D.length===0&&ue("p",{className:"py-4 text-center text-muted-foreground text-sm",children:"All groups are hidden"}),u==="grid"&&D.length>0&&ue("div",{className:"grid gap-2 p-1",style:{gridTemplateColumns:"repeat(auto-fill, minmax(72px, 1fr))"},children:g.filter(x=>d||!l.has(x.category)).map(x=>it("button",{className:N("flex aspect-square flex-col items-center justify-center gap-1.5 rounded-lg border border-transparent p-2 text-center transition-colors hover:border-border hover:bg-muted",t&&"pointer-events-none opacity-50"),"data-testid":`action-option-${x.id.toLowerCase().replace(/\s+/g,"-")}`,disabled:t,onClick:()=>e(x.id),type:"button",children:[ue(Ep,{action:x,className:"size-6"}),ue("span",{className:"line-clamp-2 font-medium text-xs leading-tight",children:x.label})]},x.id))}),u==="list"&&D.length>0&&D.map((x,p)=>{let w=i.has(x.category),G=l.has(x.category);return it("div",{children:[p>0&&ue("div",{className:"my-2 h-px bg-border"}),it("div",{className:N("sticky top-0 z-10 mb-1 flex items-center gap-2 bg-background px-3 py-2 font-medium text-muted-foreground text-xs uppercase tracking-wider",G&&"opacity-50"),children:[it("button",{className:"flex flex-1 items-center gap-2 text-left hover:text-foreground",onClick:()=>m(x.category),type:"button",children:[ue(wp,{className:N("size-3.5 transition-transform",!w&&"rotate-90")}),ue(Pp,{group:x}),x.category]}),it(Ro,{children:[ue(Oo,{asChild:!0,children:ue("button",{className:"rounded p-0.5 hover:bg-muted hover:text-foreground",type:"button",children:ue(kp,{className:"size-4"})})}),ue(Lo,{align:"end",children:ue(xt,{onClick:()=>b(x.category),children:G?it(Al,{children:[ue(Tl,{className:"mr-2 size-4"}),"Show group"]}):it(Al,{children:[ue(Sl,{className:"mr-2 size-4"}),"Hide group"]})})})]})]}),!w&&x.actions.map(te=>ue("button",{className:N("flex w-full items-center rounded-md px-3 py-2 text-left text-sm transition-colors hover:bg-muted",t&&"pointer-events-none opacity-50"),"data-testid":`action-option-${te.id.toLowerCase().replace(/\s+/g,"-")}`,disabled:t,onClick:()=>e(te.id),type:"button",children:it("span",{className:"min-w-0 flex-1 truncate",children:[ue("span",{className:"font-medium",children:te.label}),te.description&&it("span",{className:"text-muted-foreground text-xs",children:[" ","- ",te.description]})]})},te.id))]},x.category)})]})]})}import{Clock as Lp,Copy as Mp,Play as Wp,Webhook as Fp}from"lucide-react";import{toast as zp}from"sonner";import{jsx as er,jsxs as Rl}from"react/jsx-runtime";var Op=[{label:"North America",zones:[{value:"America/New_York",label:"Eastern Time (ET)"},{value:"America/Chicago",label:"Central Time (CT)"},{value:"America/Denver",label:"Mountain Time (MT)"},{value:"America/Phoenix",label:"Arizona Time (MST)"},{value:"America/Los_Angeles",label:"Pacific Time (PT)"},{value:"America/Anchorage",label:"Alaska Time (AKT)"},{value:"Pacific/Honolulu",label:"Hawaii Time (HST)"},{value:"America/Toronto",label:"Toronto"},{value:"America/Vancouver",label:"Vancouver"}]},{label:"Europe",zones:[{value:"Europe/London",label:"London (GMT/BST)"},{value:"Europe/Paris",label:"Paris (CET/CEST)"},{value:"Europe/Berlin",label:"Berlin (CET/CEST)"},{value:"Europe/Rome",label:"Rome (CET/CEST)"},{value:"Europe/Madrid",label:"Madrid (CET/CEST)"},{value:"Europe/Amsterdam",label:"Amsterdam (CET/CEST)"},{value:"Europe/Brussels",label:"Brussels (CET/CEST)"},{value:"Europe/Stockholm",label:"Stockholm (CET/CEST)"},{value:"Europe/Warsaw",label:"Warsaw (CET/CEST)"},{value:"Europe/Athens",label:"Athens (EET/EEST)"},{value:"Europe/Moscow",label:"Moscow (MSK)"}]},{label:"Asia",zones:[{value:"Asia/Dubai",label:"Dubai (GST)"},{value:"Asia/Kolkata",label:"India (IST)"},{value:"Asia/Shanghai",label:"China (CST)"},{value:"Asia/Hong_Kong",label:"Hong Kong (HKT)"},{value:"Asia/Tokyo",label:"Tokyo (JST)"},{value:"Asia/Seoul",label:"Seoul (KST)"},{value:"Asia/Singapore",label:"Singapore (SGT)"},{value:"Asia/Bangkok",label:"Bangkok (ICT)"},{value:"Asia/Jakarta",label:"Jakarta (WIB)"}]},{label:"Australia & Pacific",zones:[{value:"Australia/Sydney",label:"Sydney (AEDT/AEST)"},{value:"Australia/Melbourne",label:"Melbourne (AEDT/AEST)"},{value:"Australia/Brisbane",label:"Brisbane (AEST)"},{value:"Australia/Perth",label:"Perth (AWST)"},{value:"Pacific/Auckland",label:"Auckland (NZDT/NZST)"}]},{label:"South America",zones:[{value:"America/Sao_Paulo",label:"S\xE3o Paulo (BRT)"},{value:"America/Argentina/Buenos_Aires",label:"Buenos Aires (ART)"},{value:"America/Santiago",label:"Santiago (CLT)"},{value:"America/Bogota",label:"Bogot\xE1 (COT)"},{value:"America/Lima",label:"Lima (PET)"}]},{label:"Africa & Middle East",zones:[{value:"Africa/Cairo",label:"Cairo (EET)"},{value:"Africa/Johannesburg",label:"Johannesburg (SAST)"},{value:"Africa/Lagos",label:"Lagos (WAT)"},{value:"Africa/Nairobi",label:"Nairobi (EAT)"},{value:"Asia/Jerusalem",label:"Jerusalem (IST)"}]},{label:"Other",zones:[{value:"UTC",label:"UTC (Coordinated Universal Time)"}]}];function Ol({value:e,onValueChange:t,disabled:o,id:n}){return Rl(ve,{value:e,onValueChange:t,disabled:o,children:[er(he,{id:n,children:er(xe,{placeholder:"Select timezone"})}),er(be,{children:Op.map(r=>Rl(Pi,{children:[er(Ei,{children:r.label}),r.zones.map(i=>er(Z,{value:i.value,children:i.label},i.value))]},r.label))})]})}import{Fragment as os,jsx as Ee,jsxs as lt}from"react/jsx-runtime";function Zr({config:e,onUpdateConfig:t,disabled:o,workflowId:n}){let r=n?`${typeof window<"u"?window.location.origin:""}/api/workflows/${n}/webhook`:"",i=()=>{r&&(navigator.clipboard.writeText(r),zp.success("Webhook URL copied to clipboard"))};return lt(os,{children:[lt("div",{className:"space-y-2",children:[Ee(M,{className:"ml-1",htmlFor:"triggerType",children:"Trigger Type"}),lt(ve,{disabled:o,onValueChange:a=>t("triggerType",a),value:e?.triggerType||"Manual",children:[Ee(he,{className:"w-full",id:"triggerType",children:Ee(xe,{placeholder:"Select trigger type"})}),lt(be,{children:[Ee(Z,{value:"Manual",children:lt("div",{className:"flex items-center gap-2",children:[Ee(Wp,{className:"h-4 w-4"}),"Manual"]})}),Ee(Z,{value:"Schedule",children:lt("div",{className:"flex items-center gap-2",children:[Ee(Lp,{className:"h-4 w-4"}),"Schedule"]})}),Ee(Z,{value:"Webhook",children:lt("div",{className:"flex items-center gap-2",children:[Ee(Fp,{className:"h-4 w-4"}),"Webhook"]})})]})]})]}),e?.triggerType==="Webhook"&&lt(os,{children:[lt("div",{className:"space-y-2",children:[Ee(M,{className:"ml-1",children:"Webhook URL"}),lt("div",{className:"flex gap-2",children:[Ee(ae,{className:"font-mono text-xs",disabled:!0,value:r||"Save workflow to generate webhook URL"}),Ee(E,{disabled:!r,onClick:i,size:"icon",variant:"outline",children:Ee(Mp,{className:"h-4 w-4"})})]})]}),lt("div",{className:"space-y-2",children:[Ee(M,{children:"Request Schema (Optional)"}),Ee(co,{disabled:o,onChange:a=>t("webhookSchema",JSON.stringify(a)),schema:e?.webhookSchema?JSON.parse(e.webhookSchema):[]}),Ee("p",{className:"text-muted-foreground text-xs",children:"Define the expected structure of the incoming webhook payload."})]}),lt("div",{className:"space-y-2",children:[Ee(M,{htmlFor:"webhookMockRequest",children:"Mock Request (Optional)"}),Ee("div",{className:"overflow-hidden rounded-md border",children:Ee(yt,{defaultLanguage:"json",height:"150px",onChange:a=>t("webhookMockRequest",a||""),options:{minimap:{enabled:!1},lineNumbers:"on",scrollBeyondLastLine:!1,fontSize:12,readOnly:o,wordWrap:"on"},value:e?.webhookMockRequest||""})}),Ee("p",{className:"text-muted-foreground text-xs",children:"Enter a sample JSON payload to test the webhook trigger."})]})]}),e?.triggerType==="Schedule"&&lt(os,{children:[lt("div",{className:"space-y-2",children:[Ee(M,{className:"ml-1",htmlFor:"scheduleCron",children:"Cron Expression"}),Ee(ae,{disabled:o,id:"scheduleCron",onChange:a=>t("scheduleCron",a.target.value),placeholder:"0 9 * * * (every day at 9am)",value:e?.scheduleCron||""})]}),lt("div",{className:"space-y-2",children:[Ee(M,{className:"ml-1",htmlFor:"scheduleTimezone",children:"Timezone"}),Ee(Ol,{disabled:o,id:"scheduleTimezone",onValueChange:a=>t("scheduleTimezone",a),value:e?.scheduleTimezone||"America/New_York"})]})]})]})}var Ll={"Database Query":jo.codeGenerator,"HTTP Request":Jo.codeGenerator,Condition:qo.codeGenerator,Switch:xn.codeGenerator,Merge:wn.codeGenerator},ns=`async function actionStep(input: Record<string, unknown>) {
176
+ }`};import{useEffect as Lp,useState as Mp}from"react";function Sl(){let[e,t]=Mp(void 0);return Lp(()=>{let o="ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0;t(o)},[]),e}import{DropdownMenu as Ct}from"radix-ui";import{CheckIcon as oC,ChevronRightIcon as Wp,CircleIcon as Fp}from"lucide-react";import{jsx as yt,jsxs as Rl}from"react/jsx-runtime";function Lo({...e}){return yt(Ct.Root,{"data-slot":"dropdown-menu",...e})}function Mo({...e}){return yt(Ct.Trigger,{"data-slot":"dropdown-menu-trigger",...e})}function Wo({className:e,sideOffset:t=4,...o}){return yt(Ct.Portal,{children:yt(Ct.Content,{"data-slot":"dropdown-menu-content",sideOffset:t,className:N("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",e),...o})})}function vt({className:e,inset:t,variant:o="default",...n}){return yt(Ct.Item,{"data-slot":"dropdown-menu-item","data-inset":t,"data-variant":o,className:N("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...n})}function Al({...e}){return yt(Ct.RadioGroup,{"data-slot":"dropdown-menu-radio-group",...e})}function ea({className:e,children:t,...o}){return Rl(Ct.RadioItem,{"data-slot":"dropdown-menu-radio-item",className:N("focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...o,children:[yt("span",{className:"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center",children:yt(Ct.ItemIndicator,{children:yt(Fp,{className:"size-2 fill-current"})})}),t]})}function Il({className:e,inset:t,...o}){return yt(Ct.Label,{"data-slot":"dropdown-menu-label","data-inset":t,className:N("px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",e),...o})}function er({className:e,...t}){return yt(Ct.Separator,{"data-slot":"dropdown-menu-separator",className:N("bg-border -mx-1 my-1 h-px",e),...t})}function Pl({...e}){return yt(Ct.Sub,{"data-slot":"dropdown-menu-sub",...e})}function El({className:e,inset:t,children:o,...n}){return Rl(Ct.SubTrigger,{"data-slot":"dropdown-menu-sub-trigger","data-inset":t,className:N("focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...n,children:[o,yt(Wp,{className:"ml-auto size-4"})]})}function Dl({className:e,...t}){return yt(Ct.SubContent,{"data-slot":"dropdown-menu-sub-content",className:N("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",e),...t})}import{Fragment as Ml,jsx as me,jsxs as dt}from"react/jsx-runtime";var Up=[Qo,Yo,Xo,Xr,Cn,Tn,Qr,Zr];function Kp(){return ss(()=>{let t=oi().map(o=>({id:o.id,label:o.label,description:o.description,category:o.category,integration:o.integration}));return[...Up,...t]},[])}function qp({group:e}){let t=e.actions[0];return t?.integration?me(Bt,{className:"size-4",integration:t.integration}):e.category==="System"?me(Wl,{className:"size-4"}):me(Fl,{className:"size-4"})}function jp({action:e,className:t}){return e.integration?me(Bt,{className:t,integration:e.integration}):e.category==="System"?me(Wl,{className:N(t,"text-muted-foreground")}):me(Fl,{className:N(t,"text-muted-foreground")})}var zl="workflow-action-grid-hidden-groups",Bl="workflow-action-grid-view-mode";function Jp(){if(typeof window>"u")return new Set;try{let e=localStorage.getItem(zl);return e?new Set(JSON.parse(e)):new Set}catch{return new Set}}function Yp(){if(typeof window>"u")return"list";try{return localStorage.getItem(Bl)==="grid"?"grid":"list"}catch{return"list"}}function ta({onSelectAction:e,disabled:t,isNewlyCreated:o}){let[n,r]=tr(""),[s,a]=tr(new Set),[d,i]=tr(Jp),[l,c]=tr(!1),[u,g]=tr(Yp),b=Kp(),y=_p(null),v=Sl(),p=()=>{let k=u==="list"?"grid":"list";g(k),localStorage.setItem(Bl,k)},m=k=>{a(f=>{let x=new Set(f);return x.has(k)?x.delete(k):x.add(k),x})},w=k=>{i(f=>{let x=new Set(f);return x.has(k)?x.delete(k):x.add(k),localStorage.setItem(zl,JSON.stringify([...x])),x})};$p(()=>{o&&v===!1&&y.current&&y.current.focus()},[o,v]);let h=b.filter(k=>{let f=n.toLowerCase();return k.label.toLowerCase().includes(f)||k.description.toLowerCase().includes(f)||k.category.toLowerCase().includes(f)}),S=ss(()=>{let k={};for(let x of h){let G=x.category;k[G]||(k[G]=[]),k[G].push(x)}return Object.keys(k).sort((x,G)=>x==="System"?-1:G==="System"?1:x.localeCompare(G)).map(x=>({category:x,actions:k[x]}))},[h]),D=ss(()=>l?S:S.filter(k=>!d.has(k.category)),[S,d,l]),I=d.size;return dt("div",{className:"flex min-h-0 flex-1 flex-col gap-3",children:[dt("div",{className:"flex shrink-0 gap-2",children:[dt("div",{className:"relative flex-1",children:[me(Gp,{className:"absolute top-1/2 left-3 size-4 -translate-y-1/2 text-muted-foreground"}),me(ae,{className:"pl-9","data-testid":"action-search-input",disabled:t,id:"action-filter",onChange:k=>r(k.target.value),placeholder:"Search actions...",ref:y,value:n})]}),me(Nn,{children:dt(Yn,{children:[me(Xn,{asChild:!0,children:me(E,{className:"shrink-0",onClick:p,size:"icon",variant:"ghost",children:u==="list"?me(Bp,{className:"size-4"}):me(Vp,{className:"size-4"})})}),me(Qn,{children:u==="list"?"Grid view":"List view"})]})}),I>0&&me(Nn,{children:dt(Yn,{children:[me(Xn,{asChild:!0,children:me(E,{className:N("shrink-0",l&&"bg-muted"),onClick:()=>c(!l),size:"icon",variant:"ghost",children:l?me(Ol,{className:"size-4"}):me(Ll,{className:"size-4"})})}),me(Qn,{children:l?"Hide hidden groups":`Show ${I} hidden group${I>1?"s":""}`})]})})]}),dt("div",{className:"min-h-0 flex-1 overflow-y-auto pb-4","data-testid":"action-grid",children:[h.length===0&&me("p",{className:"py-4 text-center text-muted-foreground text-sm",children:"No actions found"}),h.length>0&&D.length===0&&me("p",{className:"py-4 text-center text-muted-foreground text-sm",children:"All groups are hidden"}),u==="grid"&&D.length>0&&me("div",{className:"grid gap-2 p-1",style:{gridTemplateColumns:"repeat(auto-fill, minmax(72px, 1fr))"},children:h.filter(k=>l||!d.has(k.category)).map(k=>dt("button",{className:N("flex aspect-square flex-col items-center justify-center gap-1.5 rounded-lg border border-transparent p-2 text-center transition-colors hover:border-border hover:bg-muted",t&&"pointer-events-none opacity-50"),"data-testid":`action-option-${k.id.toLowerCase().replace(/\s+/g,"-")}`,disabled:t,onClick:()=>e(k.id),type:"button",children:[me(jp,{action:k,className:"size-6"}),me("span",{className:"line-clamp-2 font-medium text-xs leading-tight",children:k.label})]},k.id))}),u==="list"&&D.length>0&&D.map((k,f)=>{let x=s.has(k.category),G=d.has(k.category);return dt("div",{children:[f>0&&me("div",{className:"my-2 h-px bg-border"}),dt("div",{className:N("sticky top-0 z-10 mb-1 flex items-center gap-2 bg-background px-3 py-2 font-medium text-muted-foreground text-xs uppercase tracking-wider",G&&"opacity-50"),children:[dt("button",{className:"flex flex-1 items-center gap-2 text-left hover:text-foreground",onClick:()=>m(k.category),type:"button",children:[me(zp,{className:N("size-3.5 transition-transform",!x&&"rotate-90")}),me(qp,{group:k}),k.category]}),dt(Lo,{children:[me(Mo,{asChild:!0,children:me("button",{className:"rounded p-0.5 hover:bg-muted hover:text-foreground",type:"button",children:me(Hp,{className:"size-4"})})}),me(Wo,{align:"end",children:me(vt,{onClick:()=>w(k.category),children:G?dt(Ml,{children:[me(Ol,{className:"mr-2 size-4"}),"Show group"]}):dt(Ml,{children:[me(Ll,{className:"mr-2 size-4"}),"Hide group"]})})})]})]}),!x&&k.actions.map(te=>me("button",{className:N("flex w-full items-center rounded-md px-3 py-2 text-left text-sm transition-colors hover:bg-muted",t&&"pointer-events-none opacity-50"),"data-testid":`action-option-${te.id.toLowerCase().replace(/\s+/g,"-")}`,disabled:t,onClick:()=>e(te.id),type:"button",children:dt("span",{className:"min-w-0 flex-1 truncate",children:[me("span",{className:"font-medium",children:te.label}),te.description&&dt("span",{className:"text-muted-foreground text-xs",children:[" ","- ",te.description]})]})},te.id))]},k.category)})]})]})}import{Clock as Qp,Copy as Zp,Play as ef,Webhook as tf}from"lucide-react";import{toast as of}from"sonner";import{jsx as or,jsxs as Vl}from"react/jsx-runtime";var Xp=[{label:"North America",zones:[{value:"America/New_York",label:"Eastern Time (ET)"},{value:"America/Chicago",label:"Central Time (CT)"},{value:"America/Denver",label:"Mountain Time (MT)"},{value:"America/Phoenix",label:"Arizona Time (MST)"},{value:"America/Los_Angeles",label:"Pacific Time (PT)"},{value:"America/Anchorage",label:"Alaska Time (AKT)"},{value:"Pacific/Honolulu",label:"Hawaii Time (HST)"},{value:"America/Toronto",label:"Toronto"},{value:"America/Vancouver",label:"Vancouver"}]},{label:"Europe",zones:[{value:"Europe/London",label:"London (GMT/BST)"},{value:"Europe/Paris",label:"Paris (CET/CEST)"},{value:"Europe/Berlin",label:"Berlin (CET/CEST)"},{value:"Europe/Rome",label:"Rome (CET/CEST)"},{value:"Europe/Madrid",label:"Madrid (CET/CEST)"},{value:"Europe/Amsterdam",label:"Amsterdam (CET/CEST)"},{value:"Europe/Brussels",label:"Brussels (CET/CEST)"},{value:"Europe/Stockholm",label:"Stockholm (CET/CEST)"},{value:"Europe/Warsaw",label:"Warsaw (CET/CEST)"},{value:"Europe/Athens",label:"Athens (EET/EEST)"},{value:"Europe/Moscow",label:"Moscow (MSK)"}]},{label:"Asia",zones:[{value:"Asia/Dubai",label:"Dubai (GST)"},{value:"Asia/Kolkata",label:"India (IST)"},{value:"Asia/Shanghai",label:"China (CST)"},{value:"Asia/Hong_Kong",label:"Hong Kong (HKT)"},{value:"Asia/Tokyo",label:"Tokyo (JST)"},{value:"Asia/Seoul",label:"Seoul (KST)"},{value:"Asia/Singapore",label:"Singapore (SGT)"},{value:"Asia/Bangkok",label:"Bangkok (ICT)"},{value:"Asia/Jakarta",label:"Jakarta (WIB)"}]},{label:"Australia & Pacific",zones:[{value:"Australia/Sydney",label:"Sydney (AEDT/AEST)"},{value:"Australia/Melbourne",label:"Melbourne (AEDT/AEST)"},{value:"Australia/Brisbane",label:"Brisbane (AEST)"},{value:"Australia/Perth",label:"Perth (AWST)"},{value:"Pacific/Auckland",label:"Auckland (NZDT/NZST)"}]},{label:"South America",zones:[{value:"America/Sao_Paulo",label:"S\xE3o Paulo (BRT)"},{value:"America/Argentina/Buenos_Aires",label:"Buenos Aires (ART)"},{value:"America/Santiago",label:"Santiago (CLT)"},{value:"America/Bogota",label:"Bogot\xE1 (COT)"},{value:"America/Lima",label:"Lima (PET)"}]},{label:"Africa & Middle East",zones:[{value:"Africa/Cairo",label:"Cairo (EET)"},{value:"Africa/Johannesburg",label:"Johannesburg (SAST)"},{value:"Africa/Lagos",label:"Lagos (WAT)"},{value:"Africa/Nairobi",label:"Nairobi (EAT)"},{value:"Asia/Jerusalem",label:"Jerusalem (IST)"}]},{label:"Other",zones:[{value:"UTC",label:"UTC (Coordinated Universal Time)"}]}];function Hl({value:e,onValueChange:t,disabled:o,id:n}){return Vl(he,{value:e,onValueChange:t,disabled:o,children:[or(be,{id:n,children:or(xe,{placeholder:"Select timezone"})}),or(we,{children:Xp.map(r=>Vl(Fi,{children:[or(zi,{children:r.label}),r.zones.map(s=>or(Q,{value:s.value,children:s.label},s.value))]},r.label))})]})}import{Fragment as is,jsx as De,jsxs as ct}from"react/jsx-runtime";function oa({config:e,onUpdateConfig:t,disabled:o,workflowId:n}){let r=n?`${typeof window<"u"?window.location.origin:""}/api/workflows/${n}/webhook`:"",s=()=>{r&&(navigator.clipboard.writeText(r),of.success("Webhook URL copied to clipboard"))};return ct(is,{children:[ct("div",{className:"space-y-2",children:[De(L,{className:"ml-1",htmlFor:"triggerType",children:"Trigger Type"}),ct(he,{disabled:o,onValueChange:a=>t("triggerType",a),value:e?.triggerType||"Manual",children:[De(be,{className:"w-full",id:"triggerType",children:De(xe,{placeholder:"Select trigger type"})}),ct(we,{children:[De(Q,{value:"Manual",children:ct("div",{className:"flex items-center gap-2",children:[De(ef,{className:"h-4 w-4"}),"Manual"]})}),De(Q,{value:"Schedule",children:ct("div",{className:"flex items-center gap-2",children:[De(Qp,{className:"h-4 w-4"}),"Schedule"]})}),De(Q,{value:"Webhook",children:ct("div",{className:"flex items-center gap-2",children:[De(tf,{className:"h-4 w-4"}),"Webhook"]})})]})]})]}),e?.triggerType==="Webhook"&&ct(is,{children:[ct("div",{className:"space-y-2",children:[De(L,{className:"ml-1",children:"Webhook URL"}),ct("div",{className:"flex gap-2",children:[De(ae,{className:"font-mono text-xs",disabled:!0,value:r||"Save workflow to generate webhook URL"}),De(E,{disabled:!r,onClick:s,size:"icon",variant:"outline",children:De(Zp,{className:"h-4 w-4"})})]})]}),ct("div",{className:"space-y-2",children:[De(L,{children:"Request Schema (Optional)"}),De(mo,{disabled:o,onChange:a=>t("webhookSchema",JSON.stringify(a)),schema:e?.webhookSchema?JSON.parse(e.webhookSchema):[]}),De("p",{className:"text-muted-foreground text-xs",children:"Define the expected structure of the incoming webhook payload."})]}),ct("div",{className:"space-y-2",children:[De(L,{htmlFor:"webhookMockRequest",children:"Mock Request (Optional)"}),De("div",{className:"overflow-hidden rounded-md border",children:De(xt,{defaultLanguage:"json",height:"150px",onChange:a=>t("webhookMockRequest",a||""),options:{minimap:{enabled:!1},lineNumbers:"on",scrollBeyondLastLine:!1,fontSize:12,readOnly:o,wordWrap:"on"},value:e?.webhookMockRequest||""})}),De("p",{className:"text-muted-foreground text-xs",children:"Enter a sample JSON payload to test the webhook trigger."})]})]}),e?.triggerType==="Schedule"&&ct(is,{children:[ct("div",{className:"space-y-2",children:[De(L,{className:"ml-1",htmlFor:"scheduleCron",children:"Cron Expression"}),De(ae,{disabled:o,id:"scheduleCron",onChange:a=>t("scheduleCron",a.target.value),placeholder:"0 9 * * * (every day at 9am)",value:e?.scheduleCron||""})]}),ct("div",{className:"space-y-2",children:[De(L,{className:"ml-1",htmlFor:"scheduleTimezone",children:"Timezone"}),De(Hl,{disabled:o,id:"scheduleTimezone",onValueChange:a=>t("scheduleTimezone",a),value:e?.scheduleTimezone||"America/New_York"})]})]})]})}var Gl={"Database Query":Xo.codeGenerator,"HTTP Request":Qo.codeGenerator,Condition:Yo.codeGenerator,Switch:Tn.codeGenerator,Merge:Cn.codeGenerator},ls=`async function actionStep(input: Record<string, unknown>) {
177
177
  "use step";
178
178
 
179
179
  console.log('Executing action');
180
180
  return { success: true };
181
- }`,Bp=`async function unknownStep(input: Record<string, unknown>) {
181
+ }`,nf=`async function unknownStep(input: Record<string, unknown>) {
182
182
  "use step";
183
183
 
184
184
  return input;
185
- }`;function Vp(e,t){let o=e?.triggerType||"Manual";if(o==="Schedule"){let n=e?.scheduleCron||"0 9 * * *";return`{
185
+ }`;function rf(e,t){let o=e?.triggerType||"Manual";if(o==="Schedule"){let n=e?.scheduleCron||"0 9 * * *";return`{
186
186
  "crons": [
187
187
  {
188
188
  "path": "${t?`/api/workflow-builder/workflow/${t}/cron`:"/api/workflow-builder/workflow/<workflowId>/cron"}",
@@ -198,7 +198,7 @@ export async function POST(request: NextRequest) {
198
198
  await executeWorkflow(body);
199
199
 
200
200
  return Response.json({ success: true });
201
- }`:""}function Hp(e){if(!e)return ns;if(Ll[e])return Ll[e];let t=ge(e);return t&&t.codegenTemplate||ns}var Nn=(e,t)=>e.data.type==="trigger"?Vp(e.data.config,t):e.data.type==="action"?Hp(e.data.config?.actionType):Bp;import{useAtom as rs}from"jotai";import{Check as zl,ChevronDown as ss,ChevronRight as is,Clock as _p,Copy as Up,ExternalLink as Kp,Loader2 as qp,Play as jp,Square as Wl,X as Jp}from"lucide-react";import Fl from"next/image";import{useCallback as tr,useEffect as ea,useRef as Yp,useState as Mo}from"react";function kn(e,t){return`${e} ${t}${e===1?"":"s"} ago`}function Ml(e){let t=new Date,o=new Date(e),n=Math.floor((t.getTime()-o.getTime())/1e3);if(n<60)return"just now";let r=Math.floor(n/60);if(r<60)return kn(r,"min");let i=Math.floor(r/60);if(i<24)return kn(i,"hour");let a=Math.floor(i/24);if(a<7)return kn(a,"day");let l=Math.floor(a/7);if(l<4)return kn(l,"week");let s=Math.floor(a/30);if(s<12)return kn(s,"month");let d=Math.floor(a/365);return kn(d,"year")}import{Loader2Icon as Gp}from"lucide-react";import{jsx as $p}from"react/jsx-runtime";function St({className:e,...t}){let{ref:o,...n}=t;return $p(Gp,{role:"status","aria-label":"Loading",className:N("size-4 animate-spin",e),...n})}import{Fragment as oa,jsx as U,jsxs as ze}from"react/jsx-runtime";function Xp(e){return Js(e)}function Qp(e,t){if(typeof e!="object"||e===null)return;let o=e[t.field];if(typeof o=="string"&&o.length>0)return o}function Zp(e){return typeof e=="object"&&e!==null&&"base64"in e&&typeof e.base64=="string"&&e.base64.length>100}function as(e){let t={};for(let o of e)t[o.nodeId]={nodeId:o.nodeId,nodeName:o.nodeName,nodeType:o.nodeType,status:o.status,output:o.output};return t}function ef(e){try{let t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"}catch{return!1}}function Bl({data:e}){let o=JSON.stringify(e,null,2).split(/("https?:\/\/[^"]+"|"[^"]*")/g);return U(oa,{children:o.map(n=>{if(n.startsWith('"')&&n.endsWith('"')){let r=n.slice(1,-1);if(ef(r))return U("a",{className:"text-blue-500 underline hover:text-blue-400",href:r,rel:"noopener noreferrer",target:"_blank",children:n},r)}return n})})}function tf({data:e,isError:t=!1}){let[o,n]=Mo(!1);return U(E,{className:"h-7 px-2",onClick:async i=>{i.stopPropagation();try{let a=t?String(e):JSON.stringify(e,null,2);await navigator.clipboard.writeText(a),n(!0),setTimeout(()=>n(!1),2e3)}catch(a){console.error("Failed to copy:",a)}},size:"sm",type:"button",variant:"ghost",children:o?U(zl,{className:"h-3 w-3 text-green-600"}):U(Up,{className:"h-3 w-3"})})}function ta({title:e,children:t,defaultExpanded:o=!1,copyData:n,isError:r=!1,externalLink:i}){let[a,l]=Mo(o);return ze("div",{children:[ze("div",{className:"mb-2 flex w-full items-center justify-between",children:[ze("button",{className:"flex items-center gap-1.5",onClick:()=>l(!a),type:"button",children:[a?U(ss,{className:"h-3 w-3 text-muted-foreground"}):U(is,{className:"h-3 w-3 text-muted-foreground"}),U("span",{className:"font-medium text-muted-foreground text-xs uppercase tracking-wide",children:e})]}),ze("div",{className:"flex items-center gap-1",children:[i&&U(E,{asChild:!0,className:"h-7 px-2",size:"sm",variant:"ghost",children:U("a",{href:i,rel:"noopener noreferrer",target:"_blank",children:U(Kp,{className:"h-3 w-3"})})}),n!==void 0&&U(tf,{data:n,isError:r})]})]}),a&&t]})}function of({output:e,input:t,actionType:o}){let r=(o?ge(o):void 0)?.outputConfig,i=o?Xp(o):void 0,a=r?.type!=="component"?r:i,l=a?Qp(e,a):void 0,s=!(r||i)&&Zp(e),c=(()=>{if(r?.type==="component"){let v=r.component;return U("div",{className:"overflow-hidden rounded-lg border bg-muted/50 p-3",children:U(v,{input:t,output:e})})}if(a&&l)switch(a.type){case"image":{let v=a.field==="base64"&&!l.startsWith("data:")?`data:image/png;base64,${l}`:l;return U("div",{className:"overflow-hidden rounded-lg border bg-muted/50 p-3",children:U(Fl,{alt:"Generated image",className:"max-h-96 w-auto rounded",height:384,src:v,unoptimized:!0,width:384})})}case"video":return U("div",{className:"overflow-hidden rounded-lg border bg-muted/50 p-3",children:U("video",{className:"max-h-96 w-auto rounded",controls:!0,src:l,children:U("track",{kind:"captions"})})});case"url":return U("div",{className:"overflow-hidden rounded-lg border bg-muted/50",children:U("iframe",{className:"h-96 w-full rounded",sandbox:"allow-scripts allow-same-origin",src:l,title:"Output preview"})});default:return null}return s?U("div",{className:"overflow-hidden rounded-lg border bg-muted/50 p-3",children:U(Fl,{alt:"AI generated output",className:"max-h-96 w-auto rounded",height:384,src:`data:image/png;base64,${e.base64}`,unoptimized:!0,width:384})}):null})(),u=c!==null,f=a?.type==="url"&&l?l:void 0;return ze(oa,{children:[U(ta,{copyData:e,title:"Output",children:U("pre",{className:"overflow-auto rounded-lg border bg-muted/50 p-3 font-mono text-xs leading-relaxed",children:U(Bl,{data:e})})}),u&&U(ta,{defaultExpanded:!0,externalLink:f,title:"Result",children:c})]})}function nf({log:e,isExpanded:t,onToggle:o,getStatusIcon:n,getStatusDotClass:r,isFirst:i,isLast:a}){return ze("div",{className:"relative flex gap-3",children:[ze("div",{className:"relative -ml-px flex flex-col items-center pt-2",children:[!i&&U("div",{className:"absolute bottom-full h-2 w-px bg-border"}),U("div",{className:N("z-10 flex h-5 w-5 shrink-0 items-center justify-center rounded-full border-0",r(e.status)),children:n(e.status)}),!a&&U("div",{className:"absolute top-[calc(0.5rem+1.25rem)] bottom-0 w-px bg-border"})]}),ze("div",{className:"min-w-0 flex-1",children:[U("button",{className:"group w-full rounded-lg py-2 text-left transition-colors hover:bg-muted/50",onClick:o,type:"button",children:ze("div",{className:"flex items-center gap-3",children:[U("div",{className:"min-w-0 flex-1",children:ze("div",{className:"flex items-center gap-2",children:[t?U(ss,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground"}):U(is,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground"}),U("span",{className:"truncate font-medium text-sm transition-colors group-hover:text-foreground",children:e.nodeName||e.nodeType})]})}),e.duration&&U("span",{className:"shrink-0 font-mono text-muted-foreground text-xs tabular-nums",children:Number.parseInt(e.duration,10)<1e3?`${e.duration}ms`:`${(Number.parseInt(e.duration,10)/1e3).toFixed(2)}s`})]})}),t&&ze("div",{className:"mt-2 mb-2 space-y-3 px-3",children:[e.input!==null&&e.input!==void 0&&U(ta,{copyData:e.input,title:"Input",children:U("pre",{className:"overflow-auto rounded-lg border bg-muted/50 p-3 font-mono text-xs leading-relaxed",children:U(Bl,{data:e.input})})}),e.output!==null&&e.output!==void 0&&U(of,{actionType:e.nodeType,input:e.input,output:e.output}),e.error&&U(ta,{copyData:e.error,defaultExpanded:!0,isError:!0,title:"Error",children:U("pre",{className:"overflow-auto rounded-lg border border-red-500/20 bg-red-500/5 p-3 font-mono text-red-600 text-xs leading-relaxed",children:e.error})}),!(e.input||e.output||e.error)&&U("div",{className:"rounded-lg border bg-muted/30 py-4 text-center text-muted-foreground text-xs",children:"No data recorded"})]})]})]},e.id)}function Cn({isActive:e=!1,onRefreshRef:t,onStartRun:o}){let[n]=rs(Ue),[r,i]=rs(ro),[,a]=rs(Xo),[l,s]=Mo([]),[d,c]=Mo({}),[u,f]=Mo(new Set),[v,C]=Mo(new Set),[h,y]=Mo(!0),m=Yp(null),b=tr(async(O=!0)=>{if(!n){y(!1);return}try{O&&y(!0);let W=await j.workflow.getExecutions(n);s(W)}catch(W){console.error("Failed to load executions:",W),s([])}finally{O&&y(!1)}},[n]);ea(()=>{t&&(t.current=()=>b(!1))},[b,t]),ea(()=>{b()},[b]);let g=tr((O,W)=>O.map($=>({id:$.id,nodeId:$.nodeId,nodeName:$.nodeName,nodeType:$.nodeType,status:$.status,startedAt:new Date($.startedAt),completedAt:$.completedAt?new Date($.completedAt):null,duration:$.duration,input:$.input,output:$.output,error:$.error})),[]),S=tr(async O=>{try{let W=await j.workflow.getExecutionLogs(O),$=g(W.logs,W.execution.workflow);c(T=>({...T,[O]:$})),O===r&&a(as($))}catch(W){console.error("Failed to load execution logs:",W),c($=>({...$,[O]:[]}))}},[g,r,a]);ea(()=>{if(l.length===0)return;let O=l[0];O.status==="running"&&O.id!==m.current&&(m.current=O.id,i(O.id),f(W=>{let $=new Set(W);return $.add(O.id),$}),S(O.id),o&&o(O.id))},[l,i,S,o]);let D=tr(async O=>{try{let W=await j.workflow.getExecutionLogs(O),$=g(W.logs,W.execution.workflow);c(T=>({...T,[O]:$})),O===r&&a(as($))}catch(W){console.error(`Failed to refresh logs for ${O}:`,W)}},[g,r,a]);ea(()=>{if(!(e&&n))return;let W=setInterval(async()=>{try{let $=await j.workflow.getExecutions(n);s($);for(let T of u)await D(T)}catch($){console.error("Failed to poll executions:",$)}},2e3);return()=>clearInterval(W)},[e,n,u,D]);let I=tr(async O=>{try{await j.workflow.cancelExecution(O),await b(!1)}catch(W){console.error("Failed to cancel execution:",W)}},[b]),x=async O=>{let W=new Set(u);W.has(O)?W.delete(O):(W.add(O),await S(O)),f(W)},p=O=>{if(r===O){i(null),a({});return}i(O);let W=d[O]||[];a(as(W))},w=O=>{let W=new Set(v);W.has(O)?W.delete(O):W.add(O),C(W)},G=O=>{switch(O){case"success":return U(zl,{className:"h-3 w-3 text-white"});case"error":return U(Jp,{className:"h-3 w-3 text-white"});case"cancelled":return U(Wl,{className:"h-3 w-3 text-white"});case"running":return U(qp,{className:"h-3 w-3 animate-spin text-white"});default:return U(_p,{className:"h-3 w-3 text-white"})}},te=O=>{switch(O){case"success":return"bg-green-600";case"error":return"bg-red-600";case"cancelled":return"bg-yellow-600";case"running":return"bg-blue-600";default:return"bg-muted-foreground"}};return h?U("div",{className:"flex items-center justify-center py-12",children:U(St,{})}):l.length===0?ze("div",{className:"flex flex-col items-center justify-center py-16",children:[U("div",{className:"mb-3 rounded-lg border border-dashed p-4",children:U(jp,{className:"h-6 w-6 text-muted-foreground"})}),U("div",{className:"font-medium text-foreground text-sm",children:"No runs yet"}),U("div",{className:"mt-1 text-muted-foreground text-xs",children:"Execute your workflow to see runs here"})]}):U("div",{className:"space-y-3",children:l.map((O,W)=>{let $=u.has(O.id),T=r===O.id,H=(d[O.id]||[]).sort((X,z)=>new Date(X.startedAt).getTime()-new Date(z.startedAt).getTime());return ze("div",{className:N("overflow-hidden rounded-lg border bg-card transition-all",T&&"ring-2 ring-primary ring-offset-2 ring-offset-background"),children:[ze("div",{className:"flex w-full items-center gap-3 p-4",children:[U("button",{className:"flex size-5 shrink-0 items-center justify-center rounded-full border-0 transition-colors hover:bg-muted",onClick:()=>x(O.id),type:"button",children:U("div",{className:N("flex size-5 items-center justify-center rounded-full border-0",te(O.status)),children:G(O.status)})}),ze("button",{className:"min-w-0 flex-1 text-left transition-colors hover:opacity-80",onClick:()=>p(O.id),type:"button",children:[U("div",{className:"mb-1 flex items-center gap-2",children:ze("span",{className:"font-semibold text-sm",children:["Run #",l.length-W]})}),ze("div",{className:"flex items-center gap-2 font-mono text-muted-foreground text-xs",children:[U("span",{children:Ml(O.startedAt)}),O.duration&&ze(oa,{children:[U("span",{children:"\u2022"}),U("span",{className:"tabular-nums",children:Number.parseInt(O.duration,10)<1e3?`${O.duration}ms`:`${(Number.parseInt(O.duration,10)/1e3).toFixed(2)}s`})]}),H.length>0&&ze(oa,{children:[U("span",{children:"\u2022"}),ze("span",{children:[H.length," ",H.length===1?"step":"steps"]})]})]})]}),(O.status==="running"||O.status==="pending")&&U("button",{className:"flex shrink-0 items-center justify-center rounded p-1 text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive",onClick:X=>{X.stopPropagation(),I(O.id)},title:"Stop execution",type:"button",children:U(Wl,{className:"h-3.5 w-3.5"})}),U("button",{className:"flex shrink-0 items-center justify-center rounded p-1 transition-colors hover:bg-muted",onClick:()=>x(O.id),type:"button",children:$?U(ss,{className:"h-4 w-4 text-muted-foreground"}):U(is,{className:"h-4 w-4 text-muted-foreground"})})]}),$&&U("div",{className:"border-t bg-muted/20",children:H.length===0?U("div",{className:"py-8 text-center text-muted-foreground text-xs",children:"No steps recorded"}):U("div",{className:"p-4",children:H.map((X,z)=>U(nf,{getStatusDotClass:te,getStatusIcon:G,isExpanded:v.has(X.id),isFirst:z===0,isLast:z===H.length-1,log:X,onToggle:()=>w(X.id)},X.id))})})]},O.id)})})}import{Fragment as go,jsx as L,jsxs as K}from"react/jsx-runtime";var df=/[^a-zA-Z0-9\s]/g,cf=/\s+/,Ul={"Database Query":"database"},uf=({selectedNodes:e,selectedEdges:t,onDelete:o})=>{let[n,r]=or(!1),i=e.length===1?"node":"nodes",a=t.length===1?"line":"lines",l=[];e.length>0&&l.push(`${e.length} ${i}`),t.length>0&&l.push(`${t.length} ${a}`);let s=l.join(" and ");return K(go,{children:[K("div",{className:"flex size-full flex-col",children:[L("div",{className:"flex h-14 w-full shrink-0 items-center border-b bg-transparent px-4",children:L("h2",{className:"font-semibold text-foreground",children:"Properties"})}),K("div",{className:"flex-1 space-y-4 overflow-y-auto p-4",children:[K("div",{className:"space-y-2",children:[L(M,{children:"Selection"}),K("p",{className:"text-muted-foreground text-sm",children:[s," selected"]})]}),L("div",{className:"flex items-center gap-2 pt-4",children:K(E,{className:"text-muted-foreground",onClick:()=>r(!0),size:"sm",variant:"ghost",children:[L(na,{className:"mr-2 size-4"}),"Delete"]})})]})]}),L(nn,{onOpenChange:r,open:n,children:K(rn,{children:[K(an,{children:[L(ln,{children:"Delete Selected Items"}),K(dn,{children:["Are you sure you want to delete ",s,"? This action cannot be undone."]})]}),K(sn,{children:[L(un,{children:"Cancel"}),L(cn,{onClick:()=>{o(),r(!1)},children:"Delete"})]})]})})]})},mf=()=>{let[e]=fo(Ce),[t]=fo(_e),[o]=fo(re),n=ls(ce),[r]=fo(kt),[i]=fo(Ue),[a,l]=fo(gt),s=ls(no),d=Wo(ao),c=Wo(so),u=Wo(io),f=Wo(ui),v=Wo(Zo),{open:C}=oe(),h=Wo(Ir),y=Wo(Tr),[m,b]=fo(oo),[g,S]=or(!1),[D,I]=or(!1),[x,p]=or(!1),[w,G]=or(!1),[te,O]=fo(Ht),W=_l(null),$=_l({}),T=o.find(Q=>Q.id===e),H=n.find(Q=>Q.id===t),X=o.filter(Q=>Q.selected),z=n.filter(Q=>Q.selected),q=X.length+z.length>1;$l(()=>{if(!T||te!=="code")return;let Q=T.data.config?.actionType==="Condition",we=T.data.type==="trigger"&&T.data.config?.triggerType==="Manual";(Q||we)&&O("properties")},[T,te,O]);let A=ls(ft);$l(()=>{if(!(T&&s))return;let Q=T.data.config?.actionType,we=T.data.config?.integrationId;if(!(Q&&we))return;let F=ge(Q)?.integration||Ul[Q];if(!F||A.some(me=>me.id===we))return;let pe=A.filter(me=>me.type===F);if(pe.length===1){let me={...T.data.config,integrationId:pe[0].id};d({id:T.id,data:{config:me}})}else if(pe.length===0){let me={...T.data.config,integrationId:void 0};d({id:T.id,data:{config:me}})}},[T,A,s,d]);let B=lf(()=>{let we=`${a.replace(df,"").split(cf).map((F,Y)=>Y===0?F.toLowerCase():F.charAt(0).toUpperCase()+F.slice(1).toLowerCase()).join("")||"execute"}Workflow`,{code:P}=gr(o,n,{functionName:we});return P},[o,n,a]),k=()=>{T&&navigator.clipboard.writeText(Nn(T))},R=()=>{navigator.clipboard.writeText(B),Tn.success("Code copied to clipboard")},_=()=>{e&&(c(e),S(!1))},ne=()=>{if(T){let Q=T.data.enabled??!0;d({id:T.id,data:{enabled:!Q}})}},le=()=>{t&&(u(t),I(!1))},V=async()=>{if(i)try{await j.workflow.deleteExecutions(i),h(),p(!1)}catch(Q){console.error("Failed to delete runs:",Q);let we=Q instanceof Error?Q.message:"Failed to delete runs";Tn.error(we)}},Ae=Q=>{T&&d({id:T.id,data:{label:Q}})},tt=Q=>{T&&d({id:T.id,data:{description:Q}})},Ye=sf(async(Q,we,P,F)=>{let pe=ge(we)?.integration||Ul[we];if(!pe){y(me=>{let Ne=new Set(me);return Ne.delete(Q),Ne});return}try{let me=await j.integration.getAll();if(F.aborted)return;let Ne=me.filter(ct=>ct.type===pe);if(Ne.length===1&&!F.aborted){let ct={...P,actionType:we,integrationId:Ne[0].id};d({id:Q,data:{config:ct}})}}catch(me){console.error("Failed to auto-select integration:",me)}finally{F.aborted||y(me=>{let Ne=new Set(me);return Ne.delete(Q),Ne})}},[d,y]),ot=Q=>{if(T){let we={...T.data.config,...Q};d({id:T.id,data:{config:we}})}},Bt=(Q,we)=>{if(T){let P={...T.data.config,[Q]:we};if(Q==="actionType"&&T.data.config?.integrationId&&(P={...P,integrationId:void 0}),d({id:T.id,data:{config:P}}),Q==="actionType"){let F=$.current[T.id];F&&F.abort();let Y=new AbortController;$.current[T.id]=Y,y(pe=>new Set(pe).add(T.id)),Ye(T.id,we,P,Y.signal)}}},Dt=async Q=>{if(l(Q),i)try{await j.workflow.update(i,{name:Q,nodes:o,edges:n})}catch(we){console.error("Failed to update workflow name:",we),Tn.error("Failed to update workspace name")}},ko=async()=>{G(!0);try{W.current&&await W.current()}catch(Q){console.error("Failed to refresh runs:",Q),Tn.error("Failed to refresh runs")}finally{G(!1)}};return q?L(uf,{onDelete:f,selectedEdges:z,selectedNodes:X}):H?K(go,{children:[K("div",{className:"flex size-full flex-col",children:[L("div",{className:"flex h-14 w-full shrink-0 items-center border-b bg-transparent px-4",children:L("h2",{className:"font-semibold text-foreground",children:"Properties"})}),K("div",{className:"flex-1 space-y-4 overflow-y-auto p-4",children:[K("div",{className:"space-y-2",children:[L(M,{className:"ml-1",htmlFor:"edge-id",children:"Edge ID"}),L(ae,{disabled:!0,id:"edge-id",value:H.id})]}),K("div",{className:"space-y-2",children:[L(M,{className:"ml-1",htmlFor:"edge-source",children:"Source"}),L(ae,{disabled:!0,id:"edge-source",value:H.source})]}),K("div",{className:"space-y-2",children:[L(M,{className:"ml-1",htmlFor:"edge-target",children:"Target"}),L(ae,{disabled:!0,id:"edge-target",value:H.target})]}),s&&L("div",{className:"flex items-center gap-2 pt-4",children:K(E,{className:"text-muted-foreground",onClick:()=>I(!0),size:"sm",variant:"ghost",children:[L(na,{className:"mr-2 size-4"}),"Delete"]})})]})]}),L(nn,{onOpenChange:I,open:D,children:K(rn,{children:[K(an,{children:[L(ln,{children:"Delete Edge"}),L(dn,{children:"Are you sure you want to delete this connection? This action cannot be undone."})]}),K(sn,{children:[L(un,{children:"Cancel"}),L(cn,{onClick:le,children:"Delete"})]})]})})]}):T?K(go,{children:[K(Ma,{className:"size-full","data-testid":"properties-panel",defaultValue:"properties",onValueChange:O,value:te,children:[K(Wa,{className:"h-14 w-full shrink-0 rounded-none border-b bg-transparent px-4 py-2.5",children:[L(To,{className:"bg-transparent text-muted-foreground data-[state=active]:text-foreground data-[state=active]:shadow-none",value:"properties",children:"Properties"}),(T.data.type!=="trigger"||T.data.config?.triggerType!=="Manual")&&T.data.config?.actionType!=="Condition"?L(To,{className:"bg-transparent text-muted-foreground data-[state=active]:text-foreground data-[state=active]:shadow-none",value:"code",children:"Code"}):null,s&&L(To,{className:"bg-transparent text-muted-foreground data-[state=active]:text-foreground data-[state=active]:shadow-none",value:"runs",children:"Runs"})]}),K(So,{className:"flex flex-col overflow-hidden",value:"properties",children:[T.data.type==="action"&&!T.data.config?.actionType&&s&&L("div",{className:"flex min-h-0 flex-1 flex-col px-4 pt-4",children:L(Qr,{disabled:r,isNewlyCreated:T?.id===m,onSelectAction:Q=>{Bt("actionType",Q),T?.id===m&&b(null)}})}),!(T.data.type==="action"&&!T.data.config?.actionType&&s)&&K("div",{className:"flex-1 space-y-4 overflow-y-auto p-4",children:[K("div",{className:"space-y-2",children:[L(M,{className:"ml-1",htmlFor:"node-id",children:"Node ID"}),L(ae,{readOnly:!0,id:"node-id",value:T?.id||""})]}),T.data.type==="trigger"&&L(Zr,{config:T.data.config||{},disabled:r||!s,onUpdateConfig:Bt,workflowId:i??void 0}),T.data.type==="action"&&!T.data.config?.actionType&&!s&&L("div",{className:"rounded-lg border border-muted bg-muted/30 p-3",children:L("p",{className:"text-muted-foreground text-sm",children:"No action configured for this step."})}),T.data.type==="action"&&T.data.config?.actionType?L(qr,{config:T.data.config||{},disabled:r||!s,isOwner:s,onUpdateConfig:Bt,onUpdateMultipleConfig:ot}):null,T.data.type!=="action"||T.data.config?.actionType?K(go,{children:[K("div",{className:"space-y-2",children:[L(M,{className:"ml-1",htmlFor:"label",children:"Label"}),L(ae,{disabled:r||!s,id:"label",onChange:Q=>Ae(Q.target.value),value:T.data.label})]}),K("div",{className:"space-y-2",children:[L(M,{className:"ml-1",htmlFor:"description",children:"Description"}),L(ae,{disabled:r||!s,id:"description",onChange:Q=>tt(Q.target.value),placeholder:"Optional description",value:T.data.description||""})]})]}):null,!s&&L("div",{className:"rounded-lg border border-muted bg-muted/30 p-3",children:L("p",{className:"text-muted-foreground text-sm",children:"You are viewing a public workflow. Duplicate it to make changes."})}),s&&K("div",{className:"flex items-center gap-2 pt-4",children:[T.data.type==="action"&&L(E,{className:"text-muted-foreground",onClick:ne,size:"sm",variant:"ghost",children:T.data.enabled===!1?K(go,{children:[L(af,{className:"mr-2 size-4"}),"Disabled"]}):K(go,{children:[L(rf,{className:"mr-2 size-4"}),"Enabled"]})}),K(E,{className:"text-muted-foreground",onClick:()=>S(!0),size:"sm",variant:"ghost",children:[L(na,{className:"mr-2 size-4"}),"Delete"]})]})]})]}),L(So,{className:"flex flex-col overflow-hidden data-[state=inactive]:hidden",forceMount:!0,value:"code",children:(()=>{let Q=T.data.config?.triggerType,we="",P="typescript";return T.data.type==="trigger"?Q==="Schedule"?(we="vercel.json",P="json"):Q==="Webhook"&&(we=`app/api${T.data.config?.webhookPath||"/webhook"}/route.ts`,P="typescript"):we=`steps/${T.data.config?.actionType?.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"")||"action"}-step.ts`,K(go,{children:[we&&K("div",{className:"flex shrink-0 items-center justify-between border-b bg-muted/30 px-3 pb-2",children:[K("div",{className:"flex items-center gap-2",children:[L(Hl,{className:"size-3.5 text-muted-foreground"}),L("code",{className:"text-muted-foreground text-xs",children:we})]}),K(E,{className:"text-muted-foreground",onClick:k,size:"sm",variant:"ghost",children:[L(Vl,{className:"mr-2 size-4"}),"Copy"]})]}),L("div",{className:"flex-1 overflow-hidden",children:L(yt,{height:"100%",language:P,options:{readOnly:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,fontSize:13,lineNumbers:"on",folding:!1,wordWrap:"off",padding:{top:16,bottom:16}},value:Nn(T)})})]})})()}),s&&K(So,{className:"flex flex-col overflow-hidden",value:"runs",children:[K("div",{className:"flex shrink-0 items-center gap-2 border-b px-4 py-2",children:[K(E,{className:"text-muted-foreground",disabled:w,onClick:ko,size:"sm",variant:"ghost",children:[L(Gl,{className:`mr-2 size-4 ${w?"animate-spin":""}`}),"Refresh"]}),K(E,{className:"text-muted-foreground",onClick:()=>p(!0),size:"sm",variant:"ghost",children:[L(ds,{className:"mr-2 size-4"}),"Clear All"]})]}),L("div",{className:"flex-1 space-y-4 overflow-y-auto p-4",children:L(Cn,{isActive:te==="runs",onRefreshRef:W})})]})]}),L(nn,{onOpenChange:p,open:x,children:K(rn,{children:[K(an,{children:[L(ln,{children:"Delete All Runs"}),L(dn,{children:"Are you sure you want to delete all workflow runs? This action cannot be undone."})]}),K(sn,{children:[L(un,{children:"Cancel"}),L(cn,{onClick:V,children:"Delete"})]})]})}),L(nn,{onOpenChange:S,open:g,children:K(rn,{children:[K(an,{children:[L(ln,{children:"Delete Step"}),L(dn,{children:"Are you sure you want to delete this node? This action cannot be undone."})]}),K(sn,{children:[L(un,{children:"Cancel"}),L(cn,{onClick:_,children:"Delete"})]})]})})]}):K(go,{children:[K(Ma,{className:"size-full",defaultValue:"properties",onValueChange:O,value:te,children:[K(Wa,{className:"h-14 w-full shrink-0 rounded-none border-b bg-transparent px-4 py-2.5",children:[L(To,{className:"bg-transparent text-muted-foreground data-[state=active]:text-foreground data-[state=active]:shadow-none",value:"properties",children:"Properties"}),L(To,{className:"bg-transparent text-muted-foreground data-[state=active]:text-foreground data-[state=active]:shadow-none",value:"code",children:"Code"}),s&&L(To,{className:"bg-transparent text-muted-foreground data-[state=active]:text-foreground data-[state=active]:shadow-none",value:"runs",children:"Runs"})]}),L(So,{className:"flex flex-col overflow-hidden",value:"properties",children:K("div",{className:"flex-1 space-y-4 overflow-y-auto p-4",children:[K("div",{className:"space-y-2",children:[L(M,{className:"ml-1",htmlFor:"workflow-name",children:"Workflow Name"}),L(ae,{disabled:!s,id:"workflow-name",onChange:Q=>Dt(Q.target.value),value:a})]}),K("div",{className:"space-y-2",children:[L(M,{className:"ml-1",htmlFor:"workflow-id",children:"Workflow ID"}),L(ae,{disabled:!0,id:"workflow-id",value:i||"Not saved"})]}),!s&&L("div",{className:"rounded-lg border border-muted bg-muted/30 p-3",children:L("p",{className:"text-muted-foreground text-sm",children:"You are viewing a public workflow. Duplicate it to make changes."})}),s&&K("div",{className:"flex items-center gap-2 pt-4",children:[K(E,{className:"text-muted-foreground",onClick:()=>{C(Pe,{title:"Clear Workflow",message:"Are you sure you want to clear all nodes and connections? This action cannot be undone.",confirmLabel:"Clear Workflow",confirmVariant:"destructive",destructive:!0,onConfirm:()=>{v()}})},size:"sm",variant:"ghost",children:[L(ds,{className:"mr-2 size-4"}),"Clear"]}),K(E,{className:"text-muted-foreground",onClick:()=>{C(Pe,{title:"Delete Workflow",message:`Are you sure you want to delete "${a}"? This will permanently delete the workflow. This cannot be undone.`,confirmLabel:"Delete Workflow",confirmVariant:"destructive",destructive:!0,onConfirm:async()=>{if(i)try{await j.workflow.delete(i),Tn.success("Workflow deleted successfully"),window.location.href="/"}catch(Q){console.error("Failed to delete workflow:",Q),Tn.error("Failed to delete workflow. Please try again.")}}})},size:"sm",variant:"ghost",children:[L(na,{className:"mr-2 size-4"}),"Delete"]})]})]})}),s&&K(So,{className:"flex flex-col overflow-hidden",value:"runs",children:[K("div",{className:"flex shrink-0 items-center gap-2 border-b px-4 py-2",children:[K(E,{className:"text-muted-foreground",disabled:w,onClick:ko,size:"sm",variant:"ghost",children:[L(Gl,{className:`mr-2 size-4 ${w?"animate-spin":""}`}),"Refresh"]}),K(E,{className:"text-muted-foreground",onClick:()=>p(!0),size:"sm",variant:"ghost",children:[L(ds,{className:"mr-2 size-4"}),"Clear All"]})]}),L("div",{className:"flex-1 space-y-4 overflow-y-auto p-4",children:L(Cn,{isActive:te==="runs",onRefreshRef:W})})]}),K(So,{className:"flex flex-col overflow-hidden data-[state=inactive]:hidden",forceMount:!0,value:"code",children:[K("div",{className:"flex shrink-0 items-center justify-between border-b bg-muted/30 px-3 pb-2",children:[K("div",{className:"flex items-center gap-2",children:[L(Hl,{className:"size-3.5 text-muted-foreground"}),K("code",{className:"text-muted-foreground text-xs",children:["workflows/",a.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"")||"workflow",".ts"]})]}),K(E,{className:"text-muted-foreground",onClick:R,size:"sm",variant:"ghost",children:[L(Vl,{className:"mr-2 size-4"}),"Copy"]})]}),L("div",{className:"flex-1 overflow-hidden",children:L(yt,{height:"100%",language:"typescript",options:{readOnly:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,fontSize:13,lineNumbers:"on",folding:!0,wordWrap:"off",padding:{top:16,bottom:16}},value:B})})]})]}),L(nn,{onOpenChange:p,open:x,children:K(rn,{children:[K(an,{children:[L(ln,{children:"Delete All Runs"}),L(dn,{children:"Are you sure you want to delete all workflow runs? This action cannot be undone."})]}),K(sn,{children:[L(un,{children:"Cancel"}),L(cn,{onClick:V,children:"Delete"})]})]})})]})},cs=()=>L("div",{className:"hidden size-full flex-col bg-background md:flex",children:L(mf,{})});import{jsx as Pt,jsxs as ra}from"react/jsx-runtime";var ps=({workflowId:e})=>{let t=vf(),o=Gt(),[n,r]=Ut(kt),[i,a]=Ut(Ar),[l]=Ut(re),[s]=Ut(ce),[d]=Ut(Ue),[c]=Ut(ro),u=At(re),f=At(ce),v=At(Ue),C=At(gt),h=At(ao),y=At(rt),[m,b]=Ut(mi),g=At(Sr),S=At(xr),D=At(Nr),[I,x]=Ut(kr),[p,w]=Ut(ii),G=At(br),[te,O]=Ut(no),W=At(ft),$=At(hr),T=pf(Ot),[H,X]=us(30),[z,q]=us(I),[A,B]=us(!1),k=Fo(!1),R=Fo(!1);It(()=>{if(R.current)return;R.current=!0;let P=document.cookie.split("; ").find(Y=>Y.startsWith("sidebar-width="));if(P){let Y=Number.parseFloat(P.split("=")[1]);!Number.isNaN(Y)&&Y>=20&&Y<=50&&X(Y)}let F=document.cookie.split("; ").find(Y=>Y.startsWith("sidebar-collapsed="));F&&w(F.split("=")[1]==="true")},[w]);let _=Fo(!1);It(()=>{if(!_.current){_.current=!0;return}document.cookie=`sidebar-width=${H}; path=/; max-age=31536000`},[H]),It(()=>{R.current&&(document.cookie=`sidebar-collapsed=${p}; path=/; max-age=31536000`)},[p]),It(()=>{let P=sessionStorage.getItem("animate-sidebar")==="true";if(sessionStorage.removeItem("animate-sidebar"),I||!P){q(!0),x(!0);return}D(!0);let F=setTimeout(()=>{q(!0),x(!0)},100),Y=setTimeout(()=>D(!1),400);return()=>{clearTimeout(F),clearTimeout(Y),D(!1)}},[I,x,D]),It(()=>{let P=F=>{(F.metaKey||F.ctrlKey)&&F.key==="b"&&(F.preventDefault(),D(!0),w(Y=>!Y),setTimeout(()=>D(!1),350))};return window.addEventListener("keydown",P),()=>window.removeEventListener("keydown",P)},[D,w]),It(()=>(S(!o&&z&&!p?`${H}%`:null),()=>{S(null)}),[o,S,H,z,p]);let ne=yo(P=>{P.preventDefault(),k.current=!0,B(!0);let F=pe=>{if(!k.current)return;let me=(window.innerWidth-pe.clientX)/window.innerWidth*100;X(Math.min(50,Math.max(20,me)))},Y=()=>{k.current=!1,B(!1),document.removeEventListener("mousemove",F),document.removeEventListener("mouseup",Y),document.body.style.cursor="",document.body.style.userSelect=""};document.addEventListener("mousemove",F),document.addEventListener("mouseup",Y),document.body.style.cursor="col-resize",document.body.style.userSelect="none"},[]),le=Fo(null),V=Fo(null),Ae=Fo(l);It(()=>{Ae.current=l},[l]);let tt=yo(async P=>{r(!0),v(e),C("AI Generated Workflow");try{let F=await j.ai.generate(P),Y=(F.nodes||[]).map(pe=>({...pe,selected:!1}));u(Y),f(F.edges||[]),C(F.name||"AI Generated Workflow"),await j.workflow.update(e,{name:F.name,description:F.description,nodes:F.nodes,edges:F.edges})}catch(F){console.error("Failed to generate workflow:",F),ms.error("Failed to generate workflow")}finally{r(!1)}},[e,r,v,C,u,f]),Ye=yo(async()=>{try{let P=await j.workflow.getById(e);if(!P){b(!0);return}let F=P.nodes.map(Y=>({...Y,selected:!1,data:{...Y.data,status:"idle"}}));u(F),f(P.edges),v(P.id),C(P.name),G(P.visibility??"private"),O(P.isOwner!==!1),y(!1),b(!1)}catch(P){console.error("Failed to load workflow:",P),ms.error("Failed to load workflow")}},[e,u,f,v,C,G,O,y,b]),ot=Fo(null);It(()=>{(async()=>{let F=t?.get("generating")==="true",Y=sessionStorage.getItem("ai-prompt"),pe=sessionStorage.getItem("generating-workflow-id");d===e&&l.length>0||(F&&Y&&pe===e?(sessionStorage.removeItem("ai-prompt"),sessionStorage.removeItem("generating-workflow-id"),await tt(Y)):await Ye())})()},[e,t,d,l.length,tt,Ye]),It(()=>{if(l.length===0||!d||!te)return;let P=ot.current;if(P&&P.workflowId===d&&P.version===T)return;(async()=>{try{let Y=await j.integration.getAll();W(Y),$(!0);let pe=new Set(Y.map(Ne=>Ne.id)),me=l.map(Ne=>vi(Ne,Y,pe)).filter(Ne=>Ne!==null);for(let Ne of me){let ct=l.find(fr=>fr.id===Ne.nodeId);ct&&h({id:Ne.nodeId,data:{config:{...ct.data.config,integrationId:Ne.newIntegrationId}}})}ot.current={workflowId:d,version:T},me.length>0&&y(!0)}catch(Y){console.error("Failed to auto-fix integrations:",Y)}})()},[l,d,T,te,h,W,$,y]);let Bt=yo(async()=>{if(!(!d||n)){a(!0);try{await j.workflow.update(d,{nodes:l,edges:s}),y(!1)}catch(P){console.error("Failed to save workflow:",P),ms.error("Failed to save workflow")}finally{a(!1)}}},[d,l,s,n,a,y]),Dt=yo(P=>P.tagName==="INPUT"||P.tagName==="TEXTAREA",[]),ko=yo(P=>P.closest(".monaco-editor")!==null,[]),Q=yo(P=>(P.metaKey||P.ctrlKey)&&P.key==="s"?(P.preventDefault(),P.stopPropagation(),Bt(),!0):!1,[Bt]),we=yo((P,F)=>(P.metaKey||P.ctrlKey)&&P.key==="Enter"?(Dt(F)||ko(F)||(P.preventDefault(),P.stopPropagation(),g(!0)),!0):!1,[g,Dt,ko]);return It(()=>{let P=F=>{let Y=F.target;Q(F)||we(F,Y)};return document.addEventListener("keydown",P,!0),()=>document.removeEventListener("keydown",P,!0)},[Q,we]),It(()=>()=>{le.current&&clearInterval(le.current),V.current&&clearInterval(V.current)},[]),It(()=>{if(V.current&&(clearInterval(V.current),V.current=null),!c){for(let F of Ae.current)h({id:F.id,data:{status:"idle"}});return}let P=async()=>{try{let F=await j.workflow.getExecutionStatus(c);for(let Y of F.nodeStatuses)h({id:Y.nodeId,data:{status:Y.status}});F.status!=="running"&&V.current&&(clearInterval(V.current),V.current=null)}catch(F){console.error("Failed to poll selected execution status:",F),V.current&&(clearInterval(V.current),V.current=null)}};return P(),V.current=setInterval(P,500),()=>{V.current&&(clearInterval(V.current),V.current=null)}},[c,h]),ra("div",{className:"flex h-dvh w-full flex-col overflow-hidden",children:[m&&Pt("div",{className:"pointer-events-auto absolute inset-0 z-20 flex items-center justify-center",children:ra("div",{className:"rounded-lg border bg-background p-8 text-center shadow-lg",children:[Pt("h1",{className:"mb-2 font-semibold text-2xl",children:"Workflow Not Found"}),Pt("p",{className:"mb-6 text-muted-foreground",children:"The workflow you're looking for doesn't exist or has been deleted."}),Pt(E,{asChild:!0,children:Pt(yf,{href:"/",children:"New Workflow"})})]})}),!o&&p&&Pt("button",{className:"pointer-events-auto absolute top-1/2 right-0 z-20 flex size-6 -translate-y-1/2 items-center justify-center rounded-l-full border border-r-0 bg-background shadow-sm transition-colors hover:bg-muted",onClick:()=>{D(!0),w(!1),setTimeout(()=>D(!1),350)},type:"button",children:Pt(ff,{className:"size-4"})}),!o&&ra("div",{className:"pointer-events-auto absolute inset-y-0 right-0 z-20 border-l bg-background transition-transform duration-300 ease-out",style:{width:`${H}%`,transform:z&&!p?"translateX(0)":"translateX(100%)"},children:[ra("div",{"aria-orientation":"vertical","aria-valuenow":H,className:"group absolute inset-y-0 left-0 z-10 w-3 cursor-col-resize",onMouseDown:ne,role:"separator",tabIndex:0,children:[Pt("div",{className:"absolute inset-y-0 left-0 w-1 bg-transparent transition-colors group-hover:bg-blue-500 group-active:bg-blue-600"}),!(A||p)&&Pt("button",{className:"absolute top-1/2 left-0 flex size-6 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full border bg-background opacity-0 shadow-sm transition-opacity hover:bg-muted group-hover:opacity-100",onClick:P=>{P.stopPropagation(),D(!0),w(!0),setTimeout(()=>D(!1),350)},onMouseDown:P=>P.stopPropagation(),type:"button",children:Pt(gf,{className:"size-4"})})]}),Pt(cs,{})]}),o&&Pt(cs,{})]})};import{useAtomValue as fs,useSetAtom as nr}from"jotai";import{nanoid as wf}from"nanoid";import{useRouter as xf}from"next/navigation";import{useCallback as ql,useEffect as aa,useRef as Nf}from"react";import{toast as kf}from"sonner";import{anonymousClient as hf}from"better-auth/client/plugins";import{createAuthClient as bf}from"better-auth/react";var zo=bf({baseURL:typeof window<"u"?window.location.origin:"http://localhost:3000",plugins:[hf()]}),{signIn:k0,signOut:Kl,signUp:C0,useSession:Sn}=zo;function Cf(){return{id:wf(),type:"trigger",position:{x:0,y:0},data:{label:"",description:"",type:"trigger",config:{triggerType:"Manual"},status:"idle"}}}var jl=()=>{let e=xf(),{data:t}=Sn(),o=fs(re),n=fs(ce),r=nr(re),i=nr(ce),a=nr(gt),l=nr(kr),s=nr(Cr),d=Nf(!1),c=fs(gt);aa(()=>{l(!1)},[l]),aa(()=>{document.title=`${c} - AI Workflow Builder`},[c]);let u=ql(async()=>{t||(await zo.signIn.anonymous(),await new Promise(v=>setTimeout(v,100)))},[t]),f=ql(()=>{let v=Cf();r([v])},[r]);return aa(()=>{r([{id:"add-node-placeholder",type:"add",position:{x:0,y:0},data:{label:"",type:"add",onClick:f},draggable:!1,selectable:!1}]),i([]),a("New Workflow"),d.current=!1},[r,i,a,f]),aa(()=>{(async()=>{let C=o.filter(h=>h.type!=="add");if(!(C.length===0||d.current)){d.current=!0;try{await u();let h=await j.workflow.create({name:"Untitled Workflow",description:"",nodes:C,edges:n});sessionStorage.setItem("animate-sidebar","true"),s(!0),console.log("[Homepage] Navigating to workflow page"),e.replace(`/workflows/${h.id}`)}catch(h){console.error("Failed to create workflow:",h),kf.error("Failed to create workflow")}}})()},[o,n,e,u,s]),null};import{useRouter as Tf}from"next/navigation";import{useEffect as Sf}from"react";var Jl=()=>{let e=Tf();return Sf(()=>{(async()=>{try{let n=(await j.workflow.getAll()).filter(r=>r.name!=="__current__");if(n.length>0){let r=n.sort((i,a)=>new Date(a.updatedAt).getTime()-new Date(i.updatedAt).getTime())[0];e.replace(`/workflows/${r.id}`)}else e.replace("/")}catch(o){console.error("Failed to load workflows:",o),e.replace("/")}})()},[e]),null};import{jsx as An}from"react/jsx-runtime";var Pf=()=>{let t=If().slug;return!t||t.length===0?An(jl,{}):t[0]==="auth"&&t.length===2?An("main",{className:"flex items-center justify-center min-h-screen",children:An(Af,{path:t[1]})}):t[0]==="workflows"&&t.length===1?An(Jl,{}):t[0]==="workflows"&&t.length===2?An("div",{className:"pointer-events-none relative z-10",children:An(ps,{workflowId:t[1]})}):null};import"virtual:workflow-builder-plugins";import{ReactFlowProvider as th}from"@xyflow/react";import{Provider as oh,useSetAtom as nh}from"jotai";import*as Ca from"react";import{AnimatePresence as Rf,LayoutGroup as Ql,motion as Pn,useReducedMotion as Zl}from"motion/react";import{useCallback as ar,useLayoutEffect as sr,useRef as vo,useState as ed}from"react";import{Drawer as rr}from"vaul";import{Dialog as In}from"radix-ui";import{XIcon as Ef}from"lucide-react";import{jsx as Bo,jsxs as gs}from"react/jsx-runtime";function sa({...e}){return Bo(In.Root,{"data-slot":"dialog",...e})}function ys({...e}){return Bo(In.Portal,{"data-slot":"dialog-portal",...e})}function Df({className:e,...t}){return Bo(In.Overlay,{"data-slot":"dialog-overlay",className:N("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",e),...t})}function Yl({className:e,children:t,showCloseButton:o=!0,...n}){return gs(ys,{"data-slot":"dialog-portal",children:[Bo(Df,{}),gs(In.Content,{"data-slot":"dialog-content",className:N("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",e),...n,children:[t,o&&gs(In.Close,{"data-slot":"dialog-close",className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[Bo(Ef,{}),Bo("span",{className:"sr-only",children:"Close"})]})]})]})}function Xl({className:e,...t}){return Bo(In.Title,{"data-slot":"dialog-title",className:N("text-lg leading-none font-semibold",e),...t})}import{jsx as We,jsxs as hs}from"react/jsx-runtime";var vs={type:"spring",stiffness:400,damping:35,mass:.8},Of={type:"spring",stiffness:350,damping:30,mass:.8},Lf={hidden:{opacity:0,scale:.95},visible:{opacity:1,scale:1,transition:{type:"spring",stiffness:400,damping:30}},exit:{opacity:0,scale:.95,transition:{duration:.15,ease:[.4,0,1,1]}}};function td(e,t){return e?"0%":t?"-35%":"100%"}function od(e){let t=vo(e),o=vo(1);return e>t.current?o.current=1:e<t.current&&(o.current=-1),sr(()=>{t.current=e},[e]),o.current}function Mf(){let{stack:e,closeAll:t,pop:o}=oe(),n=Zl(),[r,i]=ed(0),a=vo(null),l=vo(!1),s=vo(e),d=od(e.length),c=e.length>0;c&&(s.current=e);let u=s.current,f=u.length-1;console.log("[DesktopOverlay]",{isOpen:c,stackLength:e.length,frozenStackLength:s.current.length,renderStackLength:u.length}),sr(()=>{let g=c&&!l.current;if(l.current=c,g&&i(0),a.current){let S=a.current.offsetHeight;S>0&&i(S)}},[e,c]);let v=e[e.length-1],C=n?{duration:.01}:vs,h=d===1,y=ar(()=>{v?.options.closeOnBackdropClick!==!1&&t()},[v?.options.closeOnBackdropClick,t]),m=ar(g=>{g.key==="Escape"&&v?.options.closeOnEscape!==!1&&o()},[v?.options.closeOnEscape,o]);sr(()=>{if(c)return document.addEventListener("keydown",m),()=>document.removeEventListener("keydown",m)},[c,m]);let b=ar(()=>{console.log("[DesktopOverlay] handleExitComplete called"),s.current=[]},[]);return console.log("[DesktopOverlay] Rendering, isOpen:",c),!c&&s.current.length===0?null:We(Rf,{onExitComplete:b,children:c&&We(sa,{modal:!1,open:!0,children:hs(ys,{forceMount:!0,children:[We(Pn.div,{animate:{opacity:1},className:"fixed inset-0 z-50 bg-black/60",exit:{opacity:0},initial:{opacity:0},onClick:y,transition:{duration:.2}}),We(Pn.div,{animate:"visible",className:"fixed top-1/2 left-1/2 z-50 w-full max-w-lg -translate-x-1/2 -translate-y-1/2 px-4",exit:"exit",initial:"hidden",variants:Lf,children:We(Ql,{children:We(Pn.div,{className:"relative overflow-hidden rounded-xl border bg-background shadow-2xl ring-1 ring-black/5",layout:c,style:{minHeight:r>0?r:"auto"},transition:vs,children:We("div",{className:"relative",ref:a,children:u.map((g,S)=>{let D=S===f,I=S<f,p=D&&h&&u.length>1?{x:"100%",scale:1,opacity:1}:!1;return We(Pn.div,{animate:{x:td(D,I),scale:D?1:.94,opacity:D?1:0},"aria-hidden":!D,className:N("w-full",D?"relative":"pointer-events-none absolute inset-0"),initial:p,transition:C,children:We(g.component,{overlayId:g.id,...g.props})},g.id)})})})})})]})})})}function Wf(){let{stack:e,closeAll:t,pop:o}=oe(),n=Zl(),[r,i]=ed(0),a=vo(null),l=vo(!1),s=vo(e),d=od(e.length),c=e.length>0;c&&(s.current=e);let u=s.current,f=u.length-1;sr(()=>{let g=c&&!l.current;if(l.current=c,g&&i(0),a.current){let S=a.current.offsetHeight;S>0&&i(S)}},[e,c]);let v=e[e.length-1],C=u[f],h=n?{duration:.01}:vs,y=d===1,m=ar(g=>{g.key==="Escape"&&v?.options.closeOnEscape!==!1&&o()},[v?.options.closeOnEscape,o]);sr(()=>{if(c)return document.addEventListener("keydown",m),()=>document.removeEventListener("keydown",m)},[c,m]);let b=ar(()=>{c||(s.current=[])},[c]);return We(rr.Root,{onAnimationEnd:b,onOpenChange:g=>{g||t()},open:c,children:hs(rr.Portal,{children:[We(rr.Overlay,{className:"fixed inset-0 z-50 bg-black/60"}),hs(rr.Content,{className:N("fixed inset-x-0 bottom-0 z-50 flex max-h-[90vh] flex-col","rounded-t-2xl border-t bg-background shadow-2xl"),children:[We(rr.Title,{className:"sr-only",children:C?.options.title||"Dialog"}),We("div",{className:"mx-auto mt-3 h-1.5 w-12 shrink-0 rounded-full bg-muted-foreground/20"}),We(Ql,{children:We(Pn.div,{className:"relative flex-1 overflow-hidden",layout:c,style:{minHeight:r>0?r:"auto"},transition:Of,children:We("div",{className:"relative",ref:a,children:u.map((g,S)=>{let D=S===f,I=S<f,p=D&&y&&u.length>1?{x:"100%",scale:1,opacity:1}:!1;return We(Pn.div,{animate:{x:td(D,I),scale:D?1:.94,opacity:D?1:0},"aria-hidden":!D,className:N("w-full",D?"relative":"pointer-events-none absolute inset-0"),initial:p,transition:h,children:We(g.component,{overlayId:g.id,...g.props})},g.id)})})})}),We("div",{className:"h-safe-area-inset-bottom"})]})]})})}function nd(){return Gt()?We(Wf,{}):We(Mf,{})}import{useAtom as Ff}from"jotai";import{useEffect as zf,useRef as rd}from"react";import{atom as Jt}from"jotai";var Je=Jt([]),iT=Jt(e=>e(Je).length>0),lT=Jt(e=>e(Je).length);function bs(){return`overlay-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}var dT=Jt(null,(e,t,o)=>{let n=bs(),r={id:n,component:o.component,props:o.props??{},options:o.options??{}};return t(Je,[r]),n}),cT=Jt(null,(e,t,o)=>{let n=bs(),r={id:n,component:o.component,props:o.props??{},options:o.options??{}};return t(Je,[...e(Je),r]),n}),uT=Jt(null,(e,t)=>{let o=e(Je);if(o.length<=1){o[0]?.options.onClose?.(),t(Je,[]);return}o[o.length-1]?.options.onClose?.(),t(Je,o.slice(0,-1))}),mT=Jt(null,(e,t,o)=>{let n=e(Je),r=bs(),i={id:r,component:o.component,props:o.props??{},options:o.options??{}};return n.length===0?t(Je,[i]):(n[n.length-1]?.options.onClose?.(),t(Je,[...n.slice(0,-1),i])),r}),pT=Jt(null,(e,t)=>{let o=e(Je);for(let n of o)n.options.onClose?.();t(Je,[])}),fT=Jt(null,(e,t,o)=>{let n=e(Je),r=n.findIndex(i=>i.id===o);if(r!==-1){for(let i=r;i<n.length;i++)n[i].options.onClose?.();t(Je,n.slice(0,r))}});function ad(){let{stack:e}=oe(),[t,o]=Ff(Je),n=rd(!1),r=rd(!1);return zf(()=>{if(n.current){n.current=!1;return}r.current=!0,o(e)},[e,o]),null}import{Fragment as Bf,jsx as sd,jsxs as Vf}from"react/jsx-runtime";var id=()=>Vf(Bf,{children:[sd(nd,{}),sd(ad,{})]});import{CircleCheckIcon as Hf,InfoIcon as Gf,Loader2Icon as $f,OctagonXIcon as _f,TriangleAlertIcon as Uf}from"lucide-react";import{useTheme as Kf}from"next-themes";import{Toaster as qf}from"sonner";import{jsx as En}from"react/jsx-runtime";var ld=({...e})=>{let{theme:t="system"}=Kf();return En(qf,{theme:t,className:"toaster group",icons:{success:En(Hf,{className:"size-4"}),info:En(Gf,{className:"size-4"}),warning:En(Uf,{className:"size-4"}),error:En(_f,{className:"size-4"}),loading:En($f,{className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--border-radius":"var(--radius)"},...e})};import{usePathname as jv}from"next/navigation";import{ConnectionMode as Vv,MiniMap as Hv,useReactFlow as Gv}from"@xyflow/react";import{useAtom as pr,useAtomValue as Ks,useSetAtom as wo}from"jotai";import{useCallback as Nt,useEffect as ka,useMemo as $v,useRef as xo,useState as Ic}from"react";import{Background as jf,ReactFlow as Jf}from"@xyflow/react";import{useAtomValue as Yf}from"jotai";import"@xyflow/react/dist/style.css";import{jsx as Xf,jsxs as Qf}from"react/jsx-runtime";var dd=({children:e,...t})=>{let o=Yf(Yo);return Qf(Jf,{deleteKeyCode:["Backspace","Delete"],fitView:!0,panActivationKeyCode:null,selectionOnDrag:!1,snapToGrid:o.snapToGrid??!0,zoomOnDoubleClick:!1,zoomOnPinch:!0,...t,children:[Xf(jf,{bgColor:"var(--sidebar)",color:"var(--border)",gap:24,size:2}),e]})};import{jsx as cd,jsxs as Zf}from"react/jsx-runtime";var ud=({fromX:e,fromY:t,toX:o,toY:n})=>Zf("g",{children:[cd("path",{className:"animated",d:`M${e},${t} C ${e+(o-e)*.5},${t} ${e+(o-e)*.5},${n} ${o},${n}`,fill:"none",stroke:"var(--color-ring)",strokeWidth:1}),cd("circle",{cx:o,cy:n,fill:"#fff",r:3,stroke:"var(--color-ring)",strokeWidth:1})]});import{useReactFlow as ng}from"@xyflow/react";import{useAtom as rg}from"jotai";import{MapPin as ag,MapPinXInside as sg,Maximize2 as ig,ZoomIn as lg,ZoomOut as dg}from"lucide-react";import{cva as eg}from"class-variance-authority";import{Slot as VT}from"radix-ui";import{jsx as og}from"react/jsx-runtime";var tg=eg("flex w-fit items-stretch [&>*]:focus-visible:z-10 [&>*]:focus-visible:relative [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md has-[>[data-slot=button-group]]:gap-2",{variants:{orientation:{horizontal:"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none",vertical:"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none"}},defaultVariants:{orientation:"horizontal"}});function Kt({className:e,orientation:t,...o}){return og("div",{role:"group","data-slot":"button-group","data-orientation":t,className:N(tg({orientation:t}),e),...o})}import{jsx as Yt,jsxs as cg}from"react/jsx-runtime";var md=()=>{let{zoomIn:e,zoomOut:t,fitView:o}=ng(),[n,r]=rg(wr);return cg(Kt,{orientation:"vertical",children:[Yt(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",onClick:()=>{e()},size:"icon",title:"Zoom in",variant:"secondary",children:Yt(lg,{className:"size-4"})}),Yt(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",onClick:()=>{t()},size:"icon",title:"Zoom out",variant:"secondary",children:Yt(dg,{className:"size-4"})}),Yt(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",onClick:()=>{o({padding:.2,duration:300})},size:"icon",title:"Fit view",variant:"secondary",children:Yt(ig,{className:"size-4"})}),Yt(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",onClick:()=>{r(!n)},size:"icon",title:n?"Hide minimap":"Show minimap",variant:"secondary",children:n?Yt(ag,{className:"size-4"}):Yt(sg,{className:"size-4"})})]})};import{useReactFlow as yg}from"@xyflow/react";import{useAtom as Dn,useAtomValue as vg}from"jotai";import{ArrowUp as hg}from"lucide-react";import{useCallback as bg,useEffect as wg,useRef as fd,useState as ws}from"react";import{toast as xs}from"sonner";import{motion as ug}from"motion/react";import{memo as mg,useMemo as pg}from"react";import{jsx as gg}from"react/jsx-runtime";var fg=({children:e,as:t="p",className:o,duration:n=2,spread:r=2})=>{let i=ug.create(t),a=pg(()=>(e?.length??0)*r,[e,r]);return gg(i,{animate:{backgroundPosition:"0% center"},className:N("relative inline-block bg-[length:250%_100%,auto] bg-clip-text text-transparent","[--bg:linear-gradient(90deg,#0000_calc(50%-var(--spread)),var(--color-background),#0000_calc(50%+var(--spread)))] [background-repeat:no-repeat,padding-box]",o),initial:{backgroundPosition:"100% center"},style:{"--spread":`${a}px`,backgroundImage:"var(--bg), linear-gradient(var(--color-muted-foreground), var(--color-muted-foreground))"},transition:{repeat:Number.POSITIVE_INFINITY,duration:n,ease:"linear"},children:e})},pd=mg(fg);import{Fragment as xg,jsx as Xt,jsxs as Ns}from"react/jsx-runtime";function gd({workflowId:e,onWorkflowCreated:t}){let[o,n]=Dn(kt),[r,i]=ws(""),[a,l]=ws(!1),[s,d]=ws(!1),c=fd(null),u=fd(null),f=vg(re),[v,C]=Dn(ce),[h,y]=Dn(re),[m,b]=Dn(Ue),[g,S]=Dn(gt),[D,I]=Dn(Ce),{fitView:x}=yg(),p=f.filter(W=>W.type!=="add"),w=p.length>0;wg(()=>{let W=$=>{($.metaKey||$.ctrlKey)&&$.key==="k"&&($.preventDefault(),c.current?.focus())};return window.addEventListener("keydown",W),()=>{window.removeEventListener("keydown",W)}},[]);let G=()=>{l(!0),d(!0)},te=W=>{u.current?.contains(W.relatedTarget)||(d(!1),r.trim()||l(!1))},O=bg(async W=>{if(W.preventDefault(),!(!r.trim()||o)){n(!0);try{let $=w?{nodes:p,edges:v,name:g}:void 0;console.log("[AI Prompt] Generating workflow"),console.log("[AI Prompt] Has nodes:",w),console.log("[AI Prompt] Sending existing workflow:",!!$),$&&console.log("[AI Prompt] Existing workflow:",$.nodes.length,"nodes,",$.edges.length,"edges");let T=await j.ai.generateStream(r,z=>{let q=(z.edges||[]).map(k=>({...k,type:"animated"})),A=(z.nodes||[]).filter(k=>k.data?.type==="trigger"),B=q;if(A.length>1){let k=A[0],R=(z.nodes||[]).filter(ne=>ne.data?.type!=="trigger");z.nodes=[k,...R];let _=A.slice(1).map(ne=>ne.id);B=q.filter(ne=>!_.includes(ne.source)&&!_.includes(ne.target))}y(z.nodes||[]),C(B),z.name&&S(z.name),setTimeout(()=>{x({padding:.2,duration:200})},0)},$);console.log("[AI Prompt] Received final workflow data"),console.log("[AI Prompt] Nodes:",T.nodes?.length||0),console.log("[AI Prompt] Edges:",T.edges?.length||0);let H=(T.edges||[]).map(z=>({...z,type:"animated"}));console.log("[AI Prompt] Validating nodes:",T.nodes);let X=(T.nodes||[]).filter(z=>{let q=z.data?.type,A=z.data?.config||{};return console.log(`[AI Prompt] Checking node ${z.id}:`,{type:q,config:A,hasActionType:!!A.actionType,hasTriggerType:!!A.triggerType}),q==="trigger"?!A.triggerType:q==="action"?!A.actionType:!1});if(X.length>0)throw console.error("[AI Prompt] AI generated incomplete nodes:",X),console.error("[AI Prompt] Full workflow data:",JSON.stringify(T,null,2)),new Error(`Cannot create workflow: The AI tried to create ${X.length} incomplete node(s). The requested action type may not be supported. Please try a different description using supported actions: Send Email, Send Slack Message, Create Ticket, Database Query, HTTP Request, Generate Text, Generate Image, Scrape, or Search.`);if(e){b(e),console.log("[AI Prompt] Updating existing workflow:",e),console.log("[AI Prompt] Has existingWorkflow context:",!!$),$?(console.log("[AI Prompt] REPLACING workflow with AI response"),console.log("[AI Prompt] Replacing",p.length,"nodes with",T.nodes?.length||0,"nodes")):(console.log("[AI Prompt] Setting workflow for empty canvas"),xs.success("Generated workflow"));let z=T.nodes?.find(q=>q.selected);z&&I(z.id),await j.workflow.update(e,{name:T.name,description:T.description,nodes:T.nodes,edges:H})}else{let z=await j.workflow.create({name:T.name||"AI Generated Workflow",description:T.description||"",nodes:T.nodes||[],edges:H});b(z.id),xs.success("Created workflow"),t&&t(z.id)}i(""),l(!1),d(!1),c.current?.blur()}catch($){console.error("Failed to generate workflow:",$),xs.error("Failed to generate workflow")}finally{n(!1)}}},[r,o,e,w,f,v,n,b,y,C,S,I,t,x]);return Xt(xg,{children:Xt("div",{ref:u,className:"pointer-events-auto absolute bottom-4 left-1/2 z-10 -translate-x-1/2 px-4",style:{width:a?"min(100%, 42rem)":"20rem",transition:"width 150ms ease-out"},children:Ns("form",{"aria-busy":o,"aria-label":"AI workflow prompt",className:"relative flex items-center gap-2 rounded-lg border bg-background pl-3 pr-2 py-2 shadow-lg cursor-text",onClick:W=>{(W.target===W.currentTarget||W.target.tagName!=="BUTTON")&&c.current?.focus()},onMouseDown:W=>{W.target===W.currentTarget&&W.preventDefault()},onSubmit:O,role:"search",children:[o&&r?Xt(pd,{className:"flex-1 text-sm whitespace-pre-wrap",duration:2,children:r}):Xt("textarea",{"aria-label":"Describe your workflow",className:"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground resize-none h-[22px] min-h-[22px] max-h-[200px] py-0 leading-[22px]",disabled:o,onBlur:te,onChange:W=>{i(W.target.value),W.target.style.height="auto",W.target.style.height=`${W.target.scrollHeight}px`},onFocus:G,onKeyDown:W=>{W.key==="Enter"&&!W.shiftKey?(W.preventDefault(),O(W)):W.key==="Escape"&&(W.preventDefault(),i(""),l(!1),d(!1),c.current?.blur())},placeholder:s?"Describe your workflow with natural language...":"Ask AI...",ref:c,rows:1,value:r}),Xt("div",{className:"sr-only",children:o?"Generating workflow, please wait...":""}),Ns("div",{className:"relative size-8 shrink-0 self-end",children:[Xt(E,{"aria-label":"Focus prompt input (\u2318K)",className:"absolute inset-0 h-8 px-0 text-xs text-muted-foreground hover:bg-transparent transition-[opacity,filter] ease-out",onClick:()=>c.current?.focus(),style:!r.trim()&&!o&&!s?{opacity:1,filter:"blur(0px)",pointerEvents:"auto",visibility:"visible"}:{opacity:0,filter:"blur(2px)",pointerEvents:"none",visibility:"hidden"},type:"button",variant:"ghost",children:Ns("kbd",{"aria-hidden":"true",className:"pointer-events-none inline-flex h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium text-muted-foreground opacity-100",children:[Xt("span",{className:"text-xs",children:"\u2318"}),"K"]})}),Xt(E,{"aria-label":o?"Generating workflow...":"Generate workflow",className:"size-8 transition-[opacity,filter] ease-out shrink-0",disabled:!r.trim()||o,size:"sm",style:!r.trim()&&!o&&!s?{opacity:0,filter:"blur(2px)",pointerEvents:"none",visibility:"hidden"}:{opacity:1,filter:"blur(0px)",pointerEvents:"auto",visibility:"visible"},type:"submit",children:Xt(hg,{"aria-hidden":"true",className:"size-4"})})]})]})})})}import{useReactFlow as vy}from"@xyflow/react";import{useAtom as Ze,useAtomValue as oc,useSetAtom as qt}from"jotai";import{Check as ya,ChevronDown as hy,Copy as by,Download as wy,Globe as nc,Loader2 as ha,Lock as rc,Play as xy,Plus as ac,Redo2 as sc,Save as Ny,Settings2 as ky,Trash2 as Cy,Undo2 as ic}from"lucide-react";import{nanoid as Ty}from"nanoid";import{useRouter as Sy}from"next/navigation";import{useEffect as zs,useRef as Ay,useState as Fs}from"react";import{toast as dt}from"sonner";import{Panel as Ng}from"@xyflow/react";import{jsx as kg}from"react/jsx-runtime";var ia=({className:e,...t})=>kg(Ng,{className:N("m-4 rounded-md border bg-card p-1",e),...t});var ks="https://vercel.new/workflow-builder",hS=`[![Deploy with Vercel](https://vercel.com/button)](${ks})`;import{jsx as ir,jsxs as yd}from"react/jsx-runtime";function vd(){return ir(E,{asChild:!0,className:"h-9 gap-1.5 border px-2 sm:px-3",size:"sm",variant:"secondary",children:yd("a",{href:ks,rel:"noopener noreferrer",target:"_blank",children:[yd("svg",{"aria-label":"Vercel logomark",className:"size-3.5",fill:"currentColor",viewBox:"0 0 76 76",children:[ir("title",{children:"Vercel logomark"}),ir("path",{d:"m38 0 38 66H0z"})]}),ir("span",{className:"text-sm sm:hidden",children:"Deploy"}),ir("span",{className:"hidden text-sm sm:inline",children:"Deploy Your Own"})]})})}import{jsx as hd}from"react/jsx-runtime";function bd({className:e}){return hd("svg",{"aria-label":"GitHub",className:e,fill:"currentColor",role:"img",viewBox:"0 0 24 24",children:hd("path",{d:"M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z"})})}function wd(e){if(e>=1e6){let t=(e/1e6).toFixed(1);return t.endsWith(".0")?`${Math.floor(e/1e6)}M`:`${t}M`}if(e>=1e3){let t=(e/1e3).toFixed(1);return t.endsWith(".0")?`${Math.floor(e/1e3)}k`:`${t}k`}return e.toString()}import{createContext as Cg,useContext as Tg}from"react";import{jsx as PS}from"react/jsx-runtime";var Sg=Cg(null);function xd(){return Tg(Sg)}import{jsx as Nd,jsxs as kd}from"react/jsx-runtime";var Ag="https://github.com/vercel-labs/workflow-builder-template";function Cd(){let e=xd();return Nd(E,{asChild:!0,className:"h-9 gap-1.5 px-2 sm:px-3",size:"sm",variant:"ghost",children:kd("a",{className:"flex items-center",href:Ag,rel:"noopener noreferrer",target:"_blank",children:[Nd(bd,{className:"size-4.5"}),e!==null&&kd("span",{className:"hidden text-sm sm:inline",children:[wd(e)," stars"]})]})})}import{useAtom as Qt,useAtomValue as Td,useSetAtom as lr}from"jotai";import{Code as Sd,Copy as Ad,Eraser as Cs,Eye as Ig,EyeOff as Pg,FileCode as Id,Play as Pd,RefreshCw as Ed,Settings2 as Dd,Trash2 as Ts}from"lucide-react";import{useCallback as Rn,useEffect as Eg,useRef as Dg,useState as Rg}from"react";import{toast as On}from"sonner";import{Fragment as Ss,jsx as ee,jsxs as se}from"react/jsx-runtime";var Og={"Database Query":"database"},Lg=/[^a-zA-Z0-9\s]/g,Mg=/\s+/;function Wg(e){return e.data.type==="trigger"?e.data.config?.triggerType==="Schedule"?"vercel.json":`app/api${e.data.config?.webhookPath||"/webhook"}/route.ts`:`steps/${(e.data.config?.actionType||"action").toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"")}-step.ts`}function la({overlayId:e}){let{push:t,closeAll:o}=oe(),[n]=Qt(Ce),[r]=Qt(_e),[i]=Qt(re),[a]=Qt(ce),[l]=Qt(kt),[s]=Qt(Ue),[d,c]=Qt(gt),u=Td(no),f=lr(ao),v=lr(so),C=lr(io),h=lr(Ir),y=lr(Zo),[m,b]=Qt(oo),[g,S]=Qt(Ht),[D,I]=Rg(!1),x=Dg(null),p=i.find(V=>V.id===n),w=a.find(V=>V.id===r),G=Td(ft);Eg(()=>{if(!(p&&u))return;let V=p.data.config?.actionType,Ae=p.data.config?.integrationId;if(!(V&&Ae))return;let Ye=ge(V)?.integration||Og[V];if(!Ye)return;let ot=G.filter(Dt=>Dt.type===Ye);!ot.some(Dt=>Dt.id===Ae)&&ot.length>0&&f({id:p.id,data:{config:{...p.data.config,integrationId:ot[0].id}}})},[p,G,u,f]);let te=Rn((V,Ae)=>{p&&f({id:p.id,data:{config:{...p.data.config,[V]:Ae}}})},[p,f]),O=Rn(V=>{p&&f({id:p.id,data:{label:V}})},[p,f]),W=Rn(V=>{p&&f({id:p.id,data:{description:V}})},[p,f]),$=Rn(()=>{p&&f({id:p.id,data:{enabled:p.data.enabled===!1}})},[p,f]),T=Rn(()=>{t(Pe,{title:"Delete Step",message:"Are you sure you want to delete this node? This action cannot be undone.",confirmLabel:"Delete",confirmVariant:"destructive",onConfirm:()=>{p&&(v(p.id),o())}})},[p,v,o,t]),H=Rn(()=>{p&&(navigator.clipboard.writeText(Nn(p,s)),On.success("Code copied to clipboard"))},[p]),X=async()=>{x.current&&(I(!0),await x.current(),I(!1))},z=()=>{t(Pe,{title:"Delete All Runs",message:"Are you sure you want to delete all workflow runs? This action cannot be undone.",confirmLabel:"Delete",confirmVariant:"destructive",onConfirm:async()=>{if(s)try{await j.workflow.deleteExecutions(s),h(),x.current&&await x.current(),On.success("All runs deleted")}catch(V){console.error("Failed to delete runs:",V),On.error("Failed to delete runs")}}})},q=p&&(p.data.type!=="trigger"||p.data.config?.triggerType!=="Manual")&&p.data.config?.actionType!=="Condition",A=()=>{if(!p)switch(g==="properties"||g==="code"||g==="runs"&&u?g:"properties"){case"properties":return"Workflow";case"code":return"Code";case"runs":return"Runs";default:return"Workflow"}switch(g){case"properties":return"Properties";case"code":return"Code";case"runs":return"Runs";default:return"Properties"}},B=async V=>{if(c(V),s)try{await j.workflow.update(s,{name:V})}catch(Ae){console.error("Failed to update workflow name:",Ae)}},k=()=>{t(Pe,{title:"Clear Workflow",message:"Are you sure you want to clear all nodes and connections? This action cannot be undone.",confirmLabel:"Clear Workflow",confirmVariant:"destructive",destructive:!0,onConfirm:()=>{y()}})},R=()=>{t(Pe,{title:"Delete Workflow",message:`Are you sure you want to delete "${d}"? This will permanently delete the workflow. This cannot be undone.`,confirmLabel:"Delete Workflow",confirmVariant:"destructive",destructive:!0,onConfirm:async()=>{if(s)try{await j.workflow.delete(s),o(),On.success("Workflow deleted successfully"),window.location.href="/"}catch(V){console.error("Failed to delete workflow:",V),On.error("Failed to delete workflow. Please try again.")}}})},_=(()=>{let Ae=`${d.replace(Lg,"").split(Mg).map((Ye,ot)=>ot===0?Ye.toLowerCase():Ye.charAt(0).toUpperCase()+Ye.slice(1).toLowerCase()).join("")}Workflow`,{code:tt}=gr(i,a,{functionName:Ae});return tt})(),ne=()=>{navigator.clipboard.writeText(_),On.success("Code copied to clipboard")},le=()=>{r&&t(Pe,{title:"Delete Connection",message:"Are you sure you want to delete this connection? This action cannot be undone.",confirmLabel:"Delete",confirmVariant:"destructive",onConfirm:()=>{C(r),o()}})};if(w&&!p)return se("div",{className:"flex h-full max-h-[80vh] flex-col",children:[ee(on,{overlayId:e,title:"Connection"}),se("div",{className:"flex-1 space-y-4 overflow-y-auto px-6 pt-4 pb-6",children:[se("div",{className:"space-y-2",children:[ee(M,{htmlFor:"edge-id",children:"Connection ID"}),ee(ae,{disabled:!0,id:"edge-id",value:w.id})]}),se("div",{className:"space-y-2",children:[ee(M,{htmlFor:"edge-source",children:"Source"}),ee(ae,{disabled:!0,id:"edge-source",value:w.source})]}),se("div",{className:"space-y-2",children:[ee(M,{htmlFor:"edge-target",children:"Target"}),ee(ae,{disabled:!0,id:"edge-target",value:w.target})]}),u&&ee("div",{className:"pt-2",children:se(E,{onClick:le,variant:"ghost",children:[ee(Ts,{className:"mr-2 size-4"}),"Delete Connection"]})})]})]});if(!p){let V=g==="properties"||g==="code"||g==="runs"&&u?g:"properties";return se("div",{className:"flex h-full max-h-[80vh] flex-col",children:[ee(on,{overlayId:e,title:A()}),se("div",{className:"flex-1 overflow-y-auto",children:[V==="properties"&&se("div",{className:"space-y-4 px-6 pt-4 pb-6",children:[se("div",{className:"space-y-2",children:[ee(M,{htmlFor:"workflow-name",children:"Workflow Name"}),ee(ae,{disabled:!u,id:"workflow-name",onChange:Ae=>B(Ae.target.value),value:d})]}),se("div",{className:"space-y-2",children:[ee(M,{htmlFor:"workflow-id",children:"Workflow ID"}),ee(ae,{disabled:!0,id:"workflow-id",value:s||"Not saved"})]}),!u&&ee("div",{className:"rounded-lg border border-muted bg-muted/30 p-3",children:ee("p",{className:"text-muted-foreground text-sm",children:"You are viewing a public workflow. Duplicate it to make changes."})}),u&&se("div",{className:"flex items-center gap-2 pt-2",children:[se(E,{onClick:k,variant:"ghost",children:[ee(Cs,{className:"mr-2 size-4"}),"Clear"]}),se(E,{onClick:R,variant:"ghost",children:[ee(Ts,{className:"mr-2 size-4"}),"Delete"]})]})]}),V==="code"&&se("div",{className:"flex flex-col",children:[se("div",{className:"flex shrink-0 items-center justify-between border-b bg-muted/30 px-3 py-2",children:[se("div",{className:"flex items-center gap-2",children:[ee(Id,{className:"size-3.5 text-muted-foreground"}),ee("code",{className:"text-muted-foreground text-xs",children:"workflow.ts"})]}),se(E,{className:"h-7 text-xs",onClick:ne,size:"sm",variant:"ghost",children:[ee(Ad,{className:"mr-1 size-3"}),"Copy"]})]}),ee("div",{className:"h-[400px]",children:ee(yt,{defaultLanguage:"typescript",height:"100%",options:{readOnly:!0,minimap:{enabled:!1},lineNumbers:"on",scrollBeyondLastLine:!1,fontSize:12,wordWrap:"on"},value:_})})]}),V==="runs"&&u&&se("div",{className:"flex h-full flex-col",children:[se("div",{className:"flex shrink-0 items-center gap-2 border-b px-4 py-2",children:[ee(E,{className:"text-muted-foreground",disabled:D,onClick:X,size:"icon",variant:"ghost",children:ee(Ed,{className:`size-4 ${D?"animate-spin":""}`})}),ee(E,{className:"text-muted-foreground",onClick:z,size:"icon",variant:"ghost",children:ee(Cs,{className:"size-4"})})]}),ee("div",{className:"flex-1 overflow-y-auto p-4",children:ee(Cn,{isActive:V==="runs",onRefreshRef:x})})]})]}),se("div",{className:"flex shrink-0 items-center justify-around border-t bg-background pb-safe",children:[se("button",{className:`flex flex-1 flex-col items-center gap-1 py-3 font-medium text-xs transition-colors ${V==="properties"?"text-foreground":"text-muted-foreground"}`,onClick:()=>S("properties"),type:"button",children:[ee(Dd,{className:"size-5"}),"Workflow"]}),se("button",{className:`flex flex-1 flex-col items-center gap-1 py-3 font-medium text-xs transition-colors ${V==="code"?"text-foreground":"text-muted-foreground"}`,onClick:()=>S("code"),type:"button",children:[ee(Sd,{className:"size-5"}),"Code"]}),u&&se("button",{className:`flex flex-1 flex-col items-center gap-1 py-3 font-medium text-xs transition-colors ${V==="runs"?"text-foreground":"text-muted-foreground"}`,onClick:()=>S("runs"),type:"button",children:[ee(Pd,{className:"size-5"}),"Runs"]})]})]})}return se("div",{className:"flex h-full max-h-[80vh] flex-col",children:[ee(on,{overlayId:e,title:A()}),se("div",{className:"flex-1 overflow-y-auto",children:[g==="properties"&&se("div",{className:"space-y-4 px-6 pt-4 pb-6",children:[p.data.type==="action"&&!p.data.config?.actionType&&u&&ee(Qr,{disabled:l,isNewlyCreated:p?.id===m,onSelectAction:V=>{te("actionType",V),p?.id===m&&b(null)}}),p.data.type==="trigger"&&ee(Zr,{config:p.data.config||{},disabled:l||!u,onUpdateConfig:te,workflowId:s??void 0}),p.data.type==="action"&&p.data.config?.actionType!==void 0&&ee(qr,{config:p.data.config||{},disabled:l||!u,isOwner:u,onUpdateConfig:te}),(p.data.type!=="action"||p.data.config?.actionType!==void 0)&&se(Ss,{children:[se("div",{className:"space-y-2",children:[ee(M,{htmlFor:"label",children:"Label"}),ee(ae,{disabled:l||!u,id:"label",onChange:V=>O(V.target.value),value:p.data.label})]}),se("div",{className:"space-y-2",children:[ee(M,{htmlFor:"description",children:"Description"}),ee(ae,{disabled:l||!u,id:"description",onChange:V=>W(V.target.value),placeholder:"Optional description",value:p.data.description||""})]})]}),u&&se("div",{className:"flex items-center gap-2 pt-2",children:[p.data.type==="action"&&ee(E,{className:"text-muted-foreground",onClick:$,size:"sm",variant:"ghost",children:p.data.enabled===!1?se(Ss,{children:[ee(Pg,{className:"mr-2 size-4"}),"Disabled"]}):se(Ss,{children:[ee(Ig,{className:"mr-2 size-4"}),"Enabled"]})}),se(E,{className:"text-muted-foreground",onClick:T,size:"sm",variant:"ghost",children:[ee(Ts,{className:"mr-2 size-4"}),"Delete"]})]})]}),q&&se("div",{className:`flex flex-col ${g==="code"?"":"invisible absolute -z-10"}`,children:[se("div",{className:"flex shrink-0 items-center justify-between border-b bg-muted/30 px-3 py-2",children:[se("div",{className:"flex items-center gap-2",children:[ee(Id,{className:"size-3.5 text-muted-foreground"}),ee("code",{className:"text-muted-foreground text-xs",children:Wg(p)})]}),se(E,{className:"text-muted-foreground",onClick:H,size:"sm",variant:"ghost",children:[ee(Ad,{className:"mr-2 size-4"}),"Copy"]})]}),ee("div",{className:"h-[400px]",children:ee(yt,{height:"100%",language:p.data.type==="trigger"&&p.data.config?.triggerType==="Schedule"?"json":"typescript",options:{readOnly:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,fontSize:13,lineNumbers:"on",folding:!1,wordWrap:"off",padding:{top:16,bottom:16}},value:Nn(p,s)})})]}),g==="runs"&&u&&se("div",{className:"flex h-full flex-col",children:[se("div",{className:"flex shrink-0 items-center gap-2 border-b px-4 py-2",children:[se(E,{className:"text-muted-foreground",disabled:D,onClick:X,size:"sm",variant:"ghost",children:[ee(Ed,{className:`mr-2 size-4 ${D?"animate-spin":""}`}),"Refresh"]}),se(E,{className:"text-muted-foreground",onClick:z,size:"sm",variant:"ghost",children:[ee(Cs,{className:"mr-2 size-4"}),"Clear All"]})]}),ee("div",{className:"flex-1 overflow-y-auto p-4",children:ee(Cn,{isActive:g==="runs",onRefreshRef:x})})]})]}),se("div",{className:"flex shrink-0 items-center justify-around border-t bg-background pb-safe",children:[se("button",{className:`flex flex-1 flex-col items-center gap-1 py-3 font-medium text-xs transition-colors ${g==="properties"?"text-foreground":"text-muted-foreground"}`,onClick:()=>S("properties"),type:"button",children:[ee(Dd,{className:"size-5"}),"Properties"]}),q&&se("button",{className:`flex flex-1 flex-col items-center gap-1 py-3 font-medium text-xs transition-colors ${g==="code"?"text-foreground":"text-muted-foreground"}`,onClick:()=>S("code"),type:"button",children:[ee(Sd,{className:"size-5"}),"Code"]}),u&&se("button",{className:`flex flex-1 flex-col items-center gap-1 py-3 font-medium text-xs transition-colors ${g==="runs"?"text-foreground":"text-muted-foreground"}`,onClick:()=>S("runs"),type:"button",children:[ee(Pd,{className:"size-5"}),"Runs"]})]})]})}import{Download as Bg,FlaskConical as Vg}from"lucide-react";import{cva as Fg}from"class-variance-authority";import{jsx as As}from"react/jsx-runtime";var zg=Fg("relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90"}},defaultVariants:{variant:"default"}});function Rd({className:e,variant:t,...o}){return As("div",{"data-slot":"alert",role:"alert",className:N(zg({variant:t}),e),...o})}function Od({className:e,...t}){return As("div",{"data-slot":"alert-title",className:N("col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",e),...t})}function Ld({className:e,...t}){return As("div",{"data-slot":"alert-description",className:N("text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",e),...t})}import{jsx as Ln,jsxs as da}from"react/jsx-runtime";function Md({overlayId:e,onExport:t,isDownloading:o}){let{closeAll:n}=oe();return da(Re,{actions:[{label:"Cancel",variant:"outline",onClick:n},{label:o?"Exporting...":"Export Project",onClick:()=>{n(),t()},loading:o}],overlayId:e,title:"Export Workflow as Code",children:[da("div",{className:"flex items-center gap-2 text-muted-foreground",children:[Ln(Bg,{className:"size-5"}),Ln("p",{className:"text-sm",children:"Export your workflow as a standalone Next.js project that you can run independently."})]}),Ln("p",{className:"mt-4 text-muted-foreground text-sm",children:"This will generate a complete Next.js project containing your workflow code. Once exported, you can run your workflow outside of the Workflow Builder, deploy it to Vercel, or integrate it into your existing applications."}),da(Rd,{className:"mt-4",children:[Ln(Vg,{className:"size-4"}),Ln(Od,{children:"Experimental Feature"}),da(Ld,{className:"block",children:["This feature is experimental and may have limitations. If you encounter any issues, please"," ",Ln("a",{className:"font-medium text-foreground underline underline-offset-4 hover:text-primary",href:"https://github.com/vercel-labs/workflow-builder-template/issues",rel:"noopener noreferrer",target:"_blank",children:"report them on GitHub"}),"."]})]})]})}import{Globe as Hg}from"lucide-react";import{jsx as ho,jsxs as ca}from"react/jsx-runtime";function Wd({overlayId:e,onConfirm:t}){let{closeAll:o}=oe();return ca(Re,{actions:[{label:"Cancel",variant:"outline",onClick:o},{label:"Make Public",onClick:()=>{o(),t()}}],overlayId:e,title:"Make Workflow Public?",children:[ca("div",{className:"flex items-center gap-2 text-muted-foreground",children:[ho(Hg,{className:"size-5 shrink-0"}),ho("p",{className:"text-sm",children:"Making this workflow public means anyone with the link can:"})]}),ca("ul",{className:"mt-3 list-inside list-disc space-y-1 text-muted-foreground text-sm",children:[ho("li",{children:"View the workflow structure and steps"}),ho("li",{children:"See action types and configurations"}),ho("li",{children:"Duplicate the workflow to their own account"})]}),ho("p",{className:"mt-4 font-medium text-foreground text-sm",children:"The following will remain private:"}),ca("ul",{className:"mt-2 list-inside list-disc space-y-1 text-muted-foreground text-sm",children:[ho("li",{children:"Your integration credentials (API keys, tokens)"}),ho("li",{children:"Execution logs and run history"})]})]})}import{useAtomValue as Fd,useSetAtom as Gg}from"jotai";import{AlertTriangle as $g}from"lucide-react";import{jsx as Qe,jsxs as pt}from"react/jsx-runtime";function zd({overlayId:e,issues:t,onGoToStep:o,onRunAnyway:n}){let{push:r,closeAll:i}=oe(),a=Gg(Ot),l=Gt(),s=Fd(jt),d=Fd(Po),{brokenReferences:c,missingRequiredFields:u,missingIntegrations:f}=t,v=c.length+u.length+f.length,C=(b,g)=>{o(b,g),l?r(la,{}):i()},h=b=>{r(uo,{type:b,onSuccess:()=>{a(g=>g+1)}})},y=b=>{s?.integrationType===b&&d?.enabled&&d?.isVercelUser&&s?r(s.ConsentOverlay,{onConsent:()=>{a(D=>D+1)},onManualEntry:()=>h(b)}):h(b)};return pt(Re,{actions:[{label:"Run Anyway",variant:"outline",onClick:()=>{i(),n()}},{label:"Cancel",onClick:i}],overlayId:e,title:`Workflow Issues (${v})`,children:[pt("div",{className:"flex items-center gap-2 text-orange-500",children:[Qe($g,{className:"size-5"}),Qe("p",{className:"text-muted-foreground text-sm",children:"This workflow has issues that may cause it to fail."})]}),pt("div",{className:"mt-4 space-y-4",children:[f.length>0&&pt("div",{className:"space-y-1",children:[Qe("h4",{className:"font-medium text-muted-foreground text-xs uppercase tracking-wide",children:"Missing Connections"}),f.map(b=>pt("div",{className:"flex items-center gap-3 py-1",children:[Qe(Wt,{className:"size-4 shrink-0",integration:b.integrationType}),pt("p",{className:"min-w-0 flex-1 text-sm",children:[Qe("span",{className:"font-medium",children:b.integrationLabel}),pt("span",{className:"text-muted-foreground",children:[" \u2014 ",b.nodeNames.length>3?`${b.nodeNames.slice(0,3).join(", ")} +${b.nodeNames.length-3} more`:b.nodeNames.join(", ")]})]}),Qe(E,{className:"shrink-0",onClick:()=>y(b.integrationType),size:"sm",variant:"outline",children:"Add"})]},b.integrationType))]}),c.length>0&&pt("div",{className:"space-y-2",children:[Qe("h4",{className:"font-medium text-muted-foreground text-xs uppercase tracking-wide",children:"Broken References"}),c.map(b=>pt("div",{children:[Qe("p",{className:"font-medium text-sm",children:b.nodeLabel}),Qe("div",{className:"mt-1 space-y-0.5",children:b.brokenReferences.map((g,S)=>pt("div",{className:"flex items-center gap-3 py-0.5 pl-3",children:[pt("p",{className:"min-w-0 flex-1 text-muted-foreground text-sm",children:[Qe("span",{className:"font-mono",children:g.displayText})," in ",g.fieldLabel]}),Qe(E,{className:"shrink-0",onClick:()=>C(b.nodeId,g.fieldKey),size:"sm",variant:"outline",children:"Fix"})]},`${b.nodeId}-${g.fieldKey}-${S}`))})]},b.nodeId))]}),u.length>0&&pt("div",{className:"space-y-2",children:[Qe("h4",{className:"font-medium text-muted-foreground text-xs uppercase tracking-wide",children:"Missing Required Fields"}),u.map(b=>pt("div",{children:[Qe("p",{className:"font-medium text-sm",children:b.nodeLabel}),Qe("div",{className:"mt-1 space-y-0.5",children:b.missingFields.map(g=>pt("div",{className:"flex items-center gap-3 py-0.5 pl-3",children:[Qe("p",{className:"min-w-0 flex-1 text-muted-foreground text-sm",children:g.fieldLabel}),Qe(E,{className:"shrink-0",onClick:()=>C(b.nodeId,g.fieldKey),size:"sm",variant:"outline",children:"Fix"})]},`${b.nodeId}-${g.fieldKey}`))})]},b.nodeId))]})]})]})}import{jsx as Is,jsxs as _g}from"react/jsx-runtime";function Bd({className:e}){return _g("svg",{className:e,fill:"none",height:"16",viewBox:"0 0 305 234",width:"16",xmlns:"http://www.w3.org/2000/svg",children:[Is("path",{className:"fill-foreground",d:"M125.776 0C120.929 1.64945e-05 117 3.9291 117 8.77539V61.4248C117 66.2711 120.929 70.2002 125.776 70.2002H160.875L161.253 70.2051C169.032 70.4023 175.301 76.6734 175.495 84.4531L175.5 84.8252V143.325C175.5 148.171 179.429 152.101 184.276 152.101H219.375L219.753 152.105C227.53 152.303 233.798 158.571 233.995 166.348L234 166.726V225.225C234 230.071 237.929 234 242.776 234H295.425C300.271 234 304.2 230.071 304.2 225.225V172.575C304.2 167.729 300.271 163.8 295.425 163.8H260.25C252.334 163.76 245.905 157.43 245.705 149.553L245.7 149.176V90.6758C245.7 85.8295 241.771 81.9004 236.925 81.9004H201.825C193.874 81.9004 187.405 75.5551 187.205 67.6523L187.2 67.2754V8.77539C187.2 3.9291 183.271 1.64951e-05 178.425 0H125.776Z"}),Is("path",{className:"fill-foreground",d:"M67.2755 81.9004C62.4293 81.9004 58.5002 85.8295 58.5002 90.6758V143.325C58.5004 148.171 62.4294 152.101 67.2755 152.101H102.375L102.753 152.105C110.53 152.303 116.798 158.571 116.995 166.348L117 166.726V225.225C117 230.071 120.929 234 125.776 234H178.425C183.271 234 187.2 230.071 187.2 225.225V172.575C187.2 167.729 183.271 163.8 178.425 163.8H143.25C135.334 163.76 128.905 157.43 128.705 149.553L128.7 149.176V90.6758C128.7 85.8295 124.771 81.9004 119.925 81.9004H67.2755Z"}),Is("path",{className:"fill-foreground",d:"M8.77454 163.8C3.92844 163.8 0.00012207 167.729 0.00012207 172.575V225.225C0.00012207 230.071 3.92844 234 8.77454 234H61.4249C66.2712 234 70.2003 230.071 70.2003 225.225V172.575C70.2003 167.729 66.2712 163.8 61.4249 163.8H8.77454Z"})]})}import{Key as dy,LogOut as cy,Moon as uy,Plug as my,Settings as py,Sun as fy}from"lucide-react";import{useTheme as gy}from"next-themes";import yy from"next/link";import{useEffect as Zd,useState as ec}from"react";import{Copy as Ug,Key as Kg,Trash2 as qg}from"lucide-react";import{useCallback as jg,useEffect as Jg,useState as Mn}from"react";import{toast as Wn}from"sonner";import{jsx as Ve,jsxs as Et}from"react/jsx-runtime";function Yg({overlayId:e,onCreated:t}){let{pop:o}=oe(),[n,r]=Mn(""),[i,a]=Mn(!1);return Et(Re,{actions:[{label:"Create",onClick:async()=>{a(!0);try{let s=await fetch("/api/api-keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:n||null})});if(!s.ok){let c=await s.json();throw new Error(c.error||"Failed to create API key")}let d=await s.json();t(d),Wn.success("API key created successfully"),o()}catch(s){console.error("Failed to create API key:",s),Wn.error(s instanceof Error?s.message:"Failed to create API key")}finally{a(!1)}},loading:i}],overlayId:e,title:"Create API Key",children:[Ve("p",{className:"mb-4 text-muted-foreground text-sm",children:"Create a new API key for webhook authentication"}),Et("div",{className:"space-y-2",children:[Ve(M,{htmlFor:"key-name",children:"Label (optional)"}),Ve(ae,{id:"key-name",onChange:s=>r(s.target.value),placeholder:"e.g., Production, Testing",value:n})]})]})}function Vd({overlayId:e}){let{push:t,closeAll:o}=oe(),[n,r]=Mn(!0),[i,a]=Mn([]),[l,s]=Mn(null),[d,c]=Mn(null),u=jg(async()=>{r(!0);try{let m=await fetch("/api/api-keys");if(!m.ok)throw new Error("Failed to load API keys");let b=await m.json();a(b)}catch(m){console.error("Failed to load API keys:",m),Wn.error("Failed to load API keys")}finally{r(!1)}},[]);Jg(()=>{u()},[u]);let f=m=>{s(m.key??null),a(b=>[m,...b])},v=async m=>{c(m);try{if(!(await fetch(`/api/api-keys/${m}`,{method:"DELETE"})).ok)throw new Error("Failed to delete API key");a(g=>g.filter(S=>S.id!==m)),Wn.success("API key deleted")}catch(b){console.error("Failed to delete API key:",b),Wn.error("Failed to delete API key")}finally{c(null)}},C=m=>{t(Pe,{title:"Delete API Key",message:"Are you sure you want to delete this API key? Any webhooks using this key will stop working immediately.",confirmLabel:"Delete",confirmVariant:"destructive",destructive:!0,onConfirm:()=>v(m)})},h=m=>{navigator.clipboard.writeText(m),Wn.success("Copied to clipboard")},y=m=>new Date(m).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"});return Et(Re,{actions:[{label:"New API Key",variant:"outline",onClick:()=>t(Yg,{onCreated:f})},{label:"Done",onClick:o}],overlayId:e,title:"API Keys",children:[Ve("p",{className:"-mt-2 mb-4 text-muted-foreground text-sm",children:"Manage API keys for webhook authentication"}),n?Ve("div",{className:"flex items-center justify-center py-8",children:Ve(St,{})}):Et("div",{className:"space-y-4",children:[l&&Et("div",{className:"rounded-md border border-yellow-500/50 bg-yellow-500/10 p-3",children:[Ve("p",{className:"mb-2 font-medium text-sm text-yellow-600 dark:text-yellow-400",children:"Copy your API key now. You won't be able to see it again!"}),Et("div",{className:"flex items-center gap-2",children:[Ve("code",{className:"flex-1 rounded bg-muted px-2 py-1 font-mono text-xs",children:l}),Ve(E,{onClick:()=>h(l),size:"sm",variant:"outline",children:Ve(Ug,{className:"size-4"})})]}),Ve(E,{className:"mt-2",onClick:()=>s(null),size:"sm",variant:"ghost",children:"Dismiss"})]}),i.length===0?Et("div",{className:"py-8 text-center text-muted-foreground text-sm",children:[Ve(Kg,{className:"mx-auto mb-2 size-8 opacity-50"}),Ve("p",{children:"No API keys yet"}),Ve("p",{className:"text-xs",children:"Create an API key to authenticate webhook requests"})]}):Ve("div",{className:"space-y-2",children:i.map(m=>Et("div",{className:"flex items-center justify-between rounded-md border p-3",children:[Et("div",{className:"min-w-0 flex-1",children:[Et("div",{className:"flex items-center gap-2",children:[Et("code",{className:"rounded bg-muted px-1.5 py-0.5 font-mono text-xs",children:[m.keyPrefix,"..."]}),m.name&&Ve("span",{className:"truncate text-sm",children:m.name})]}),Et("p",{className:"mt-1 text-muted-foreground text-xs",children:["Created ",y(m.createdAt),m.lastUsedAt&&` \xB7 Last used ${y(m.lastUsedAt)}`]})]}),Ve(E,{disabled:d===m.id,onClick:()=>C(m.id),size:"sm",variant:"ghost",children:d===m.id?Ve(St,{className:"size-4"}):Ve(qg,{className:"size-4 text-destructive"})})]},m.id))})]})]})}import{useSetAtom as ny}from"jotai";import{Search as ry}from"lucide-react";import{useCallback as Ds,useEffect as ay,useRef as sy,useState as Gd}from"react";import{Pencil as Xg,Trash2 as Qg}from"lucide-react";import{useCallback as Zg,useEffect as ey,useMemo as ty,useState as Ps}from"react";import{toast as ua}from"sonner";import{jsx as $e,jsxs as Es}from"react/jsx-runtime";var oy={database:"Database"};function Hd({onIntegrationChange:e,filter:t=""}){let{push:o}=oe(),[n,r]=Ps([]),[i,a]=Ps(!0),[l,s]=Ps(null),d=Zg(async()=>{try{a(!0);let h=await j.integration.getAll();r(h)}catch(h){console.error("Failed to load integrations:",h),ua.error("Failed to load integrations")}finally{a(!1)}},[]);ey(()=>{d()},[d]);let c=ty(()=>{let h=to(),y=t.toLowerCase();return n.map(m=>({...m,label:h[m.type]||oy[m.type]||m.type})).filter(m=>t?m.label.toLowerCase().includes(y)||m.name.toLowerCase().includes(y)||m.type.toLowerCase().includes(y):!0).sort((m,b)=>{let g=m.label.localeCompare(b.label);return g!==0?g:m.name.localeCompare(b.name)})},[n,t]),u=h=>{o(_r,{integration:h,onSuccess:()=>{d(),e?.()},onDelete:()=>{d(),e?.()}})},f=h=>{o(qa,{integration:h,onSuccess:()=>{d(),e?.()}})},v=async h=>{try{s(h);let y=await j.integration.testConnection(h);y.status==="success"?ua.success(y.message||"Connection successful"):ua.error(y.message||"Connection test failed")}catch(y){console.error("Connection test failed:",y),ua.error(y instanceof Error?y.message:"Connection test failed")}finally{s(null)}};return i?$e("div",{className:"flex items-center justify-center py-8",children:$e(St,{})}):$e("div",{className:"space-y-1",children:n.length===0?$e("div",{className:"py-8 text-center",children:$e("p",{className:"text-muted-foreground text-sm",children:"No connections configured yet"})}):c.length===0?$e("div",{className:"py-8 text-center",children:$e("p",{className:"text-muted-foreground text-sm",children:"No connections match your filter"})}):$e("div",{className:"space-y-1",children:c.map(h=>Es("div",{className:"flex items-center justify-between rounded-md px-2 py-1.5",children:[Es("div",{className:"flex items-center gap-2",children:[$e(Wt,{className:"size-4",integration:h.type==="ai-gateway"?"vercel":h.type}),$e("span",{className:"font-medium text-sm",children:h.label}),$e("span",{className:"text-muted-foreground text-sm",children:h.name})]}),Es("div",{className:"flex items-center gap-1",children:[$e(E,{className:"h-7 px-2",disabled:l===h.id,onClick:()=>v(h.id),size:"sm",variant:"outline",children:l===h.id?$e(St,{className:"size-3"}):$e("span",{className:"text-xs",children:"Test"})}),$e(E,{className:"size-7",onClick:()=>u(h),size:"icon",variant:"outline",children:$e(Xg,{className:"size-3"})}),$e(E,{className:"size-7",onClick:()=>f(h),size:"icon",variant:"outline",children:$e(Qg,{className:"size-3"})})]})]},h.id))})})}import{jsx as Vo,jsxs as Rs}from"react/jsx-runtime";function $d({overlayId:e}){let{push:t,closeAll:o}=oe(),[n,r]=Gd(!0),[i,a]=Gd(""),l=ny(Ot),s=sy(!1),d=Ds(async()=>{r(!0);try{await new Promise(v=>setTimeout(v,0))}finally{r(!1)}},[]);ay(()=>{d(),s.current=!1,a("")},[d]);let c=Ds(()=>{s.current&&l(v=>v+1),o()},[o,l]),u=Ds(()=>{s.current=!0},[]);return Rs(Re,{actions:[{label:"Add Connection",variant:"outline",onClick:()=>{t(el,{onSuccess:u})}},{label:"Done",onClick:c}],overlayId:e,title:"Connections",children:[Vo("p",{className:"-mt-2 mb-4 text-muted-foreground text-sm",children:"Manage API keys and credentials used by your workflows"}),n?Vo("div",{className:"flex items-center justify-center py-8",children:Vo(St,{})}):Rs("div",{className:"space-y-4",children:[Rs("div",{className:"relative",children:[Vo(ry,{className:"absolute top-1/2 left-3 size-4 -translate-y-1/2 text-muted-foreground"}),Vo(ae,{className:"pl-9",onChange:v=>a(v.target.value),placeholder:"Filter connections...",value:i})]}),Vo("div",{className:"max-h-[300px] overflow-y-auto",children:Vo(Hd,{filter:i,onIntegrationChange:u})})]})]})}import{useCallback as qd,useEffect as iy,useState as fa}from"react";import{toast as jd}from"sonner";import{jsx as pa}from"react/jsx-runtime";function ma({className:e,...t}){return pa("div",{"data-slot":"card",className:N("text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",e),...t})}function _d({className:e,...t}){return pa("div",{"data-slot":"card-title",className:N("leading-none font-semibold",e),...t})}function Ud({className:e,...t}){return pa("div",{"data-slot":"card-description",className:N("text-muted-foreground text-sm",e),...t})}function Os({className:e,...t}){return pa("div",{"data-slot":"card-content",className:N("px-6",e),...t})}import{jsx as dr,jsxs as Ls}from"react/jsx-runtime";function Kd({accountName:e,accountEmail:t,onNameChange:o,onEmailChange:n}){return dr(ma,{className:"border-0 py-0 shadow-none",children:Ls(Os,{className:"space-y-4 p-0",children:[Ls("div",{className:"space-y-2",children:[dr(M,{className:"ml-1",htmlFor:"accountName",children:"Name"}),dr(ae,{id:"accountName",onChange:r=>o(r.target.value),placeholder:"Your name",value:e})]}),Ls("div",{className:"space-y-2",children:[dr(M,{className:"ml-1",htmlFor:"accountEmail",children:"Email"}),dr(ae,{id:"accountEmail",onChange:r=>n(r.target.value),placeholder:"your.email@example.com",type:"email",value:t})]})]})})}import{jsx as ga,jsxs as ly}from"react/jsx-runtime";function Jd({overlayId:e}){let{closeAll:t}=oe(),[o,n]=fa(!0),[r,i]=fa(!1),[a,l]=fa(""),[s,d]=fa(""),c=qd(async()=>{try{let v=await j.user.get();l(v.name||""),d(v.email||"")}catch(v){console.error("Failed to load account:",v)}},[]),u=qd(async()=>{n(!0);try{await c()}finally{n(!1)}},[c]);return iy(()=>{u()},[u]),ly(Re,{actions:[{label:"Cancel",variant:"outline",onClick:t},{label:"Save",onClick:async()=>{try{i(!0),await j.user.update({name:a,email:s}),await c(),jd.success("Settings saved"),t()}catch(v){console.error("Failed to save account:",v),jd.error("Failed to save settings")}finally{i(!1)}},loading:r,disabled:o}],overlayId:e,title:"Settings",children:[ga("p",{className:"-mt-2 mb-4 text-muted-foreground text-sm",children:"Update your personal information"}),o?ga("div",{className:"flex items-center justify-center py-8",children:ga(St,{})}):ga(Kd,{accountEmail:s,accountName:a,onEmailChange:d,onNameChange:l})]})}import{Avatar as Ms}from"radix-ui";import{jsx as Ws}from"react/jsx-runtime";function Yd({className:e,...t}){return Ws(Ms.Root,{"data-slot":"avatar",className:N("relative flex size-8 shrink-0 overflow-hidden rounded-full",e),...t})}function Xd({className:e,...t}){return Ws(Ms.Image,{"data-slot":"avatar-image",className:N("aspect-square size-full",e),...t})}function Qd({className:e,...t}){return Ws(Ms.Fallback,{"data-slot":"avatar-fallback",className:N("bg-muted flex size-full items-center justify-center rounded-full",e),...t})}import{jsx as ke,jsxs as Ft}from"react/jsx-runtime";var tc=()=>{let{data:e,isPending:t}=Sn(),{theme:o,setTheme:n}=gy(),{open:r}=oe(),[i,a]=ec(null),[l,s]=ec(!1);Zd(()=>{s(!0)},[]),Zd(()=>{e?.user&&!e.user.name?.startsWith("Anonymous")&&j.user.get().then(v=>a(v.providerId)).catch(()=>a(null))},[e?.user]);let d=async()=>{await Kl()},c=i==="vercel"||i==="github"||i==="google",u=()=>e?.user?.name?e.user.name.split(" ").map(v=>v[0]).join("").toUpperCase().slice(0,2):e?.user?.email?e.user.email.slice(0,2).toUpperCase():"U";return t||!l?ke("div",{className:"h-9 w-9"}):!e?.user||e.user.name==="Anonymous"||e.user.email?.startsWith("temp-")?ke("div",{className:"flex items-center gap-2",children:ke(E,{className:"h-9 disabled:opacity-100 disabled:[&>*]:text-muted-foreground",size:"sm",variant:"default",asChild:!0,children:ke(yy,{href:"/auth/sign-in",children:"Sign In"})})}):Ft(Ro,{children:[ke(Oo,{asChild:!0,children:ke(E,{className:"relative h-9 w-9 rounded-full border p-0",variant:"ghost",children:Ft(Yd,{className:"h-9 w-9",children:[ke(Xd,{alt:e?.user?.name||"",src:e?.user?.image||""}),ke(Qd,{children:u()})]})})}),Ft(Lo,{align:"end",className:"w-56",children:[ke(wl,{children:Ft("div",{className:"flex flex-col space-y-1",children:[ke("p",{className:"font-medium text-sm leading-none",children:e?.user?.name||"User"}),ke("p",{className:"text-muted-foreground text-xs leading-none",children:e?.user?.email})]})}),ke(Qn,{}),!c&&Ft(xt,{onClick:()=>r(Jd),children:[ke(py,{className:"size-4"}),ke("span",{children:"Settings"})]}),Ft(xt,{onClick:()=>r($d),children:[ke(my,{className:"size-4"}),ke("span",{children:"Connections"})]}),Ft(xt,{onClick:()=>r(Vd),children:[ke(dy,{className:"size-4"}),ke("span",{children:"API Keys"})]}),Ft(xl,{children:[Ft(Nl,{children:[ke(fy,{className:"size-4 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0"}),ke(uy,{className:"absolute size-4 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100"}),ke("span",{children:"Theme"})]}),ke(kl,{children:Ft(bl,{onValueChange:n,value:o,children:[ke(Xr,{value:"light",children:"Light"}),ke(Xr,{value:"dark",children:"Dark"}),ke(Xr,{value:"system",children:"System"})]})})]}),ke(Qn,{}),Ft(xt,{onClick:d,children:[ke(cy,{className:"size-4"}),ke("span",{children:"Logout"})]})]})]})};import{Fragment as va,jsx as J,jsxs as De}from"react/jsx-runtime";function lc(e,t,o){for(let n of e)t({id:n.id,data:{status:o}})}var Iy={"Database Query":"database"},Py={database:"Database"};function Ey(e){if(typeof e!="string")return[];let t=/\{\{@([^:]+):([^}]+)\}\}/g,o=e.matchAll(t);return Array.from(o).map(n=>({nodeId:n[1],displayText:n[2]}))}function uc(e,t=""){let o=[];for(let[n,r]of Object.entries(e)){let i=t?`${t}.${n}`:n;if(typeof r=="string"){let a=Ey(r);for(let l of a)o.push({field:i,...l})}else typeof r=="object"&&r!==null&&!Array.isArray(r)&&o.push(...uc(r,i))}return o}function Dy(e){let t=new Set(e.map(n=>n.id)),o=[];for(let n of e){if(n.data.enabled===!1)continue;let r=n.data.config;if(!r||typeof r!="object")continue;let a=uc(r).filter(l=>!t.has(l.nodeId));if(a.length>0){let l=r.actionType,s=l?ge(l):void 0,d=s?Aa(s.configFields):[];o.push({nodeId:n.id,nodeLabel:n.data.label||s?.label||"Unnamed Step",brokenReferences:a.map(c=>{let u=d.find(f=>f.key===c.field);return{fieldKey:c.field,fieldLabel:u?.label||c.field,referencedNodeId:c.nodeId,displayText:c.displayText}})})}}return o}function Ry(e){return e==null||typeof e=="string"&&e.trim()===""}function Oy(e,t){return e.showWhen?t[e.showWhen.field]===e.showWhen.equals:!0}function Ly(e){if(e.data.enabled===!1)return null;let t=e.data.config,o=t?.actionType;if(!o)return null;let n=ge(o);if(!n)return null;let i=Aa(n.configFields).filter(a=>a.required&&Oy(a,t||{})&&Ry(t?.[a.key])).map(a=>({fieldKey:a.key,fieldLabel:a.label}));return i.length===0?null:{nodeId:e.id,nodeLabel:e.data.label||n.label||"Unnamed Step",missingFields:i}}function My(e){return e.map(Ly).filter(t=>t!==null)}function Wy(e,t){let o=new Set(t.map(a=>a.type)),n=new Set(t.map(a=>a.id)),r=new Map,i=to();for(let a of e){if(a.data.enabled===!1)continue;let l=a.data.config?.actionType;if(!l)continue;let d=ge(l)?.integration||Iy[l];if(!d||!Ko(d))continue;let c=a.data.config?.integrationId;if(!(c&&n.has(c))&&!o.has(d)){let f=r.get(d)||[],v=ge(l);f.push(a.data.label||v?.label||l),r.set(d,f)}}return Array.from(r.entries()).map(([a,l])=>({integrationType:a,integrationLabel:i[a]||Py[a]||a,nodeNames:l}))}async function Fy({workflowId:e,nodes:t,updateNodeData:o,pollingIntervalRef:n,setIsExecuting:r,setSelectedExecutionId:i}){lc(t,o,"idle");for(let a of t)a.data.type==="trigger"&&o({id:a.id,data:{status:"running"}});try{let a=await fetch(`/api/workflow/${e}/execute`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({input:{}})});if(!a.ok)throw new Error("Failed to execute workflow");let l=await a.json();i(l.executionId);let s=setInterval(async()=>{try{let d=await j.workflow.getExecutionStatus(l.executionId);for(let c of d.nodeStatuses)o({id:c.nodeId,data:{status:c.status}});d.status!=="running"&&(n.current&&(clearInterval(n.current),n.current=null),r(!1))}catch(d){console.error("Failed to poll execution status:",d)}},500);n.current=s}catch(a){console.error("Failed to execute workflow:",a),dt.error(a instanceof Error?a.message:"Failed to execute workflow"),lc(t,o,"error"),r(!1)}}function zy({currentWorkflowId:e,nodes:t,edges:o,updateNodeData:n,isExecuting:r,setIsExecuting:i,setIsSaving:a,setHasUnsavedChanges:l,setActiveTab:s,setNodes:d,setEdges:c,setSelectedNodeId:u,setSelectedExecutionId:f,userIntegrations:v}){let{open:C}=oe(),h=Ay(null);zs(()=>()=>{h.current&&clearInterval(h.current)},[]);let y=async()=>{if(e){a(!0);try{await j.workflow.update(e,{nodes:t,edges:o}),l(!1)}catch(S){console.error("Failed to save workflow:",S),dt.error("Failed to save workflow. Please try again.")}finally{a(!1)}}},m=async()=>{if(!e){dt.error("Please save the workflow before executing");return}s("runs"),d(t.map(S=>({...S,selected:!1}))),c(o.map(S=>({...S,selected:!1}))),u(null),i(!0),await Fy({workflowId:e,nodes:t,updateNodeData:n,pollingIntervalRef:h,setIsExecuting:i,setSelectedExecutionId:f})},b=(S,D)=>{u(S),s("properties"),D&&setTimeout(()=>{let I=document.getElementById(D);I&&(I.focus(),I.scrollIntoView({behavior:"smooth",block:"center"}))},100)};return{handleSave:y,handleExecute:async()=>{if(r)return;let S=Dy(t),D=My(t),I=Wy(t,v);if(S.length>0||D.length>0||I.length>0){C(zd,{issues:{brokenReferences:S,missingRequiredFields:D,missingIntegrations:I},onGoToStep:b,onRunAnyway:m});return}await m()}}}function By(){let[e,t]=Ze(re),[o,n]=Ze(ce),[r,i]=Ze(si),[a]=Ze(kt),l=qt(Zo),s=qt(ao),[d]=Ze(Ue),[c,u]=Ze(gt),[f,v]=Ze(br),C=oc(no),h=Sy(),[y,m]=Ze(Ar),[b,g]=Ze(rt),S=qt(pi),D=qt(fi),I=qt(Qo),[x]=Ze(gi),[p]=Ze(yi),{data:w}=Sn(),G=qt(Ht),te=qt(Ce),O=qt(ro),W=oc(ft),[$,T]=Ze(Sr),[H,X]=Fs(!1),[z,q]=Fs(!1),[A,B]=Fs([]);return zs(()=>{(async()=>{try{let R=await j.workflow.getAll();B(R)}catch(R){console.error("Failed to load workflows:",R)}})()},[]),{nodes:e,edges:o,isExecuting:r,setIsExecuting:i,isGenerating:a,clearWorkflow:l,updateNodeData:s,currentWorkflowId:d,workflowName:c,setCurrentWorkflowName:u,workflowVisibility:f,setWorkflowVisibility:v,isOwner:C,router:h,isSaving:y,setIsSaving:m,hasUnsavedChanges:b,setHasUnsavedChanges:g,undo:S,redo:D,addNode:I,canUndo:x,canRedo:p,session:w,isDownloading:H,setIsDownloading:X,isDuplicating:z,setIsDuplicating:q,allWorkflows:A,setAllWorkflows:B,setActiveTab:G,setNodes:t,setEdges:n,setSelectedNodeId:te,setSelectedExecutionId:O,userIntegrations:W,triggerExecute:$,setTriggerExecute:T}}function Vy(e){let{open:t}=oe(),{currentWorkflowId:o,workflowName:n,nodes:r,edges:i,updateNodeData:a,isExecuting:l,setIsExecuting:s,setIsSaving:d,setHasUnsavedChanges:c,clearWorkflow:u,setWorkflowVisibility:f,setAllWorkflows:v,setIsDownloading:C,setIsDuplicating:h,setActiveTab:y,setNodes:m,setEdges:b,setSelectedNodeId:g,setSelectedExecutionId:S,userIntegrations:D,triggerExecute:I,setTriggerExecute:x,router:p,session:w}=e,{handleSave:G,handleExecute:te}=zy({currentWorkflowId:o,nodes:r,edges:i,updateNodeData:a,isExecuting:l,setIsExecuting:s,setIsSaving:d,setHasUnsavedChanges:c,setActiveTab:y,setNodes:m,setEdges:b,setSelectedNodeId:g,setSelectedExecutionId:S,userIntegrations:D});return zs(()=>{I&&(x(!1),te())},[I,x,te]),{handleSave:G,handleExecute:te,handleClearWorkflow:()=>{t(Pe,{title:"Clear Workflow",message:"Are you sure you want to clear all nodes and connections? This action cannot be undone.",confirmLabel:"Clear Workflow",confirmVariant:"destructive",destructive:!0,onConfirm:()=>{u()}})},handleDeleteWorkflow:()=>{t(Pe,{title:"Delete Workflow",message:`Are you sure you want to delete "${n}"? This will permanently delete the workflow. This cannot be undone.`,confirmLabel:"Delete Workflow",confirmVariant:"destructive",destructive:!0,onConfirm:async()=>{if(o)try{await j.workflow.delete(o),dt.success("Workflow deleted successfully"),window.location.href="/"}catch(z){console.error("Failed to delete workflow:",z),dt.error("Failed to delete workflow. Please try again.")}}})},handleDownload:async()=>{if(!o){dt.error("Please save the workflow before downloading");return}C(!0),dt.info("Preparing workflow files for download...");try{let z=await j.workflow.download(o);if(!z.success)throw new Error(z.error||"Failed to prepare download");if(!z.files)throw new Error("No files to download");let q=(await import("jszip")).default,A=new q;for(let[_,ne]of Object.entries(z.files))A.file(_,ne);let B=await A.generateAsync({type:"blob"}),k=URL.createObjectURL(B),R=document.createElement("a");R.href=k,R.download=`${n.toLowerCase().replace(/[^a-z0-9]/g,"-")}-workflow.zip`,document.body.appendChild(R),R.click(),document.body.removeChild(R),URL.revokeObjectURL(k),dt.success("Workflow downloaded successfully!")}catch(z){dt.error(z instanceof Error?z.message:"Failed to download workflow")}finally{C(!1)}},loadWorkflows:async()=>{try{let z=await j.workflow.getAll();v(z)}catch(z){console.error("Failed to load workflows:",z)}},handleToggleVisibility:async z=>{if(o){if(z==="public"){t(Wd,{onConfirm:async()=>{try{await j.workflow.update(o,{visibility:"public"}),f("public"),dt.success("Workflow is now public")}catch(q){console.error("Failed to update visibility:",q),dt.error("Failed to update visibility. Please try again.")}}});return}try{await j.workflow.update(o,{visibility:z}),f(z),dt.success("Workflow is now private")}catch(q){console.error("Failed to update visibility:",q),dt.error("Failed to update visibility. Please try again.")}}},handleDuplicate:async()=>{if(o){h(!0);try{w?.user||(await zo.signIn.anonymous(),await new Promise(q=>setTimeout(q,100)));let z=await j.workflow.duplicate(o);dt.success("Workflow duplicated successfully"),p.push(`/workflows/${z.id}`)}catch(z){console.error("Failed to duplicate workflow:",z),dt.error("Failed to duplicate workflow. Please try again.")}finally{h(!1)}}}}}function Hy({workflowId:e,state:t,actions:o}){let{open:n,push:r}=oe(),[i]=Ze(Ce),[a]=Ze(_e),[l]=Ze(re),[s]=Ze(ce),d=qt(so),c=qt(io),{screenToFlowPosition:u}=vy(),f=l.find(m=>m.id===i),v=s.find(m=>m.id===a),C=f||v;if(e&&!t.isOwner||!e)return null;let h=()=>{let b=!!i?"Node":"Connection";r(Pe,{title:`Delete ${b}`,message:`Are you sure you want to delete this ${b.toLowerCase()}? This action cannot be undone.`,confirmLabel:"Delete",confirmVariant:"destructive",onConfirm:()=>{i?d(i):a&&c(a)}})},y=()=>{let m=document.querySelector(".react-flow");if(!m)return;let b=m.getBoundingClientRect(),g=b.left+b.width/2,S=b.top+b.height/2,D=u({x:g,y:S}),I=192,x=192;D.x-=I/2,D.y-=x/2;let p=20,w=20,G={...D},te=!0,O=0,W=20;for(;te&&O<W;)te=t.nodes.some(T=>{let H=Math.abs(T.position.x-G.x),X=Math.abs(T.position.y-G.y);return H<w&&X<w}),te&&(G.x+=p,G.y+=p,O+=1);let $={id:Ty(),type:"action",position:G,data:{label:"",description:"",type:"action",config:{},status:"idle"}};t.addNode($),t.setSelectedNodeId($.id),t.setActiveTab("properties")};return De(va,{children:[J(Kt,{className:"flex lg:hidden",orientation:"vertical",children:J(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:t.isGenerating,onClick:y,size:"icon",title:"Add Step",variant:"secondary",children:J(ac,{className:"size-4"})})}),De(Kt,{className:"flex lg:hidden",orientation:"vertical",children:[J(E,{className:"border hover:bg-black/5 dark:hover:bg-white/5",onClick:()=>n(la,{}),size:"icon",title:"Configuration",variant:"secondary",children:J(ky,{className:"size-4"})}),C&&J(E,{className:"border hover:bg-black/5 dark:hover:bg-white/5",onClick:h,size:"icon",title:"Delete",variant:"secondary",children:J(Cy,{className:"size-4"})})]}),J(Kt,{className:"hidden lg:flex",orientation:"horizontal",children:J(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:t.isGenerating,onClick:y,size:"icon",title:"Add Step",variant:"secondary",children:J(ac,{className:"size-4"})})}),De(Kt,{className:"flex lg:hidden",orientation:"vertical",children:[J(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:!t.canUndo||t.isGenerating,onClick:()=>t.undo(),size:"icon",title:"Undo",variant:"secondary",children:J(ic,{className:"size-4"})}),J(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:!t.canRedo||t.isGenerating,onClick:()=>t.redo(),size:"icon",title:"Redo",variant:"secondary",children:J(sc,{className:"size-4"})})]}),De(Kt,{className:"hidden lg:flex",orientation:"horizontal",children:[J(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:!t.canUndo||t.isGenerating,onClick:()=>t.undo(),size:"icon",title:"Undo",variant:"secondary",children:J(ic,{className:"size-4"})}),J(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:!t.canRedo||t.isGenerating,onClick:()=>t.redo(),size:"icon",title:"Redo",variant:"secondary",children:J(sc,{className:"size-4"})})]}),De(Kt,{className:"flex lg:hidden",orientation:"vertical",children:[J(dc,{handleSave:o.handleSave,state:t}),J(cc,{actions:o,state:t})]}),De(Kt,{className:"hidden lg:flex",orientation:"horizontal",children:[J(dc,{handleSave:o.handleSave,state:t}),J(cc,{actions:o,state:t})]}),J(Gy,{actions:o,state:t}),J($y,{actions:o,state:t})]})}function dc({state:e,handleSave:t}){return De(E,{className:"relative border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:!e.currentWorkflowId||e.isGenerating||e.isSaving,onClick:t,size:"icon",title:e.isSaving?"Saving...":"Save workflow",variant:"secondary",children:[e.isSaving?J(ha,{className:"size-4 animate-spin"}):J(Ny,{className:"size-4"}),e.hasUnsavedChanges&&!e.isSaving&&J("div",{className:"absolute top-1.5 right-1.5 size-2 rounded-full bg-primary"})]})}function cc({state:e,actions:t}){let{open:o}=oe(),n=()=>{o(Md,{onExport:t.handleDownload,isDownloading:e.isDownloading})};return J(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:e.isDownloading||e.nodes.length===0||e.isGenerating||!e.currentWorkflowId,onClick:n,size:"icon",title:e.isDownloading?"Preparing download...":"Export workflow as code",variant:"secondary",children:e.isDownloading?J(ha,{className:"size-4 animate-spin"}):J(wy,{className:"size-4"})})}function Gy({state:e,actions:t}){let o=e.workflowVisibility==="public";return De(Ro,{children:[J(Oo,{asChild:!0,children:J(E,{className:"border hover:bg-black/5 dark:hover:bg-white/5",disabled:!e.currentWorkflowId||e.isGenerating,size:"icon",title:o?"Public workflow":"Private workflow",variant:"secondary",children:o?J(nc,{className:"size-4"}):J(rc,{className:"size-4"})})}),De(Lo,{align:"end",children:[De(xt,{className:"flex items-center gap-2",onClick:()=>t.handleToggleVisibility("private"),children:[J(rc,{className:"size-4"}),"Private",!o&&J(ya,{className:"ml-auto size-4"})]}),De(xt,{className:"flex items-center gap-2",onClick:()=>t.handleToggleVisibility("public"),children:[J(nc,{className:"size-4"}),"Public",o&&J(ya,{className:"ml-auto size-4"})]})]})]})}function $y({state:e,actions:t}){return J(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:e.isExecuting||e.nodes.length===0||e.isGenerating,onClick:()=>t.handleExecute(),size:"icon",title:"Run Workflow",variant:"secondary",children:e.isExecuting?J(ha,{className:"size-4 animate-spin"}):J(xy,{className:"size-4"})})}function _y({isDuplicating:e,onDuplicate:t}){return De(E,{className:"h-9 border hover:bg-black/5 dark:hover:bg-white/5",disabled:e,onClick:t,size:"sm",title:"Duplicate to your workflows",variant:"secondary",children:[e?J(ha,{className:"mr-2 size-4 animate-spin"}):J(by,{className:"mr-2 size-4"}),"Duplicate"]})}function Uy({workflowId:e,state:t,actions:o}){return De("div",{className:"flex flex-col gap-1",children:[J("div",{className:"flex h-9 max-w-[160px] items-center overflow-hidden rounded-md border bg-secondary text-secondary-foreground sm:max-w-none",children:De(Ro,{onOpenChange:n=>n&&o.loadWorkflows(),children:[De(Oo,{className:"flex h-full cursor-pointer items-center gap-2 px-3 font-medium text-sm transition-all hover:bg-black/5 dark:hover:bg-white/5",children:[J(Bd,{className:"size-4 shrink-0"}),J("p",{className:"truncate font-medium text-sm",children:e?t.workflowName:De(va,{children:[J("span",{className:"sm:hidden",children:"New"}),J("span",{className:"hidden sm:inline",children:"New Workflow"})]})}),J(hy,{className:"size-3 shrink-0 opacity-50"})]}),De(Lo,{align:"start",className:"w-64",children:[J(xt,{asChild:!0,className:"flex items-center justify-between",children:De("a",{href:"/",children:["New Workflow"," ",!e&&J(ya,{className:"size-4 shrink-0"})]})}),J(Qn,{}),t.allWorkflows.length===0?J(xt,{disabled:!0,children:"No workflows found"}):t.allWorkflows.filter(n=>n.name!=="__current__").map(n=>De(xt,{className:"flex items-center justify-between",onClick:()=>t.router.push(`/workflows/${n.id}`),children:[J("span",{className:"truncate",children:n.name}),n.id===t.currentWorkflowId&&J(ya,{className:"size-4 shrink-0"})]},n.id))]})]})}),e&&!t.isOwner&&J("span",{className:"text-muted-foreground text-xs uppercase lg:hidden",children:"Read-only"})]})}var mc=({workflowId:e})=>{let t=By(),o=Vy(t);return De(va,{children:[J(ia,{className:"flex flex-col gap-2 rounded-none border-none bg-transparent p-0 lg:flex-row lg:items-center",position:"top-left",children:De("div",{className:"flex items-center gap-2",children:[J(Uy,{actions:o,state:t,workflowId:e}),e&&!t.isOwner&&J("span",{className:"hidden text-muted-foreground text-xs uppercase lg:inline",children:"Read-only"})]})}),J("div",{className:"pointer-events-auto absolute top-4 right-4 z-10",children:De("div",{className:"flex flex-col-reverse items-end gap-2 lg:flex-row lg:items-center",children:[J(Hy,{actions:o,state:t,workflowId:e}),De("div",{className:"flex items-center gap-2",children:[!e&&De(va,{children:[J(Cd,{}),J(vd,{})]}),e&&!t.isOwner&&J(_y,{isDuplicating:t.isDuplicating,onDuplicate:o.handleDuplicate}),J(tc,{})]})]})})]})};import"@xyflow/react/dist/style.css";import{PlayCircle as _v,Zap as Uv}from"lucide-react";import{nanoid as qs}from"nanoid";import{BaseEdge as gc,getBezierPath as Ky,getSimpleBezierPath as qy,getSmoothStepPath as jy,Position as Ho,useInternalNode as pc}from"@xyflow/react";import{useAtomValue as Jy}from"jotai";import{jsx as yc}from"react/jsx-runtime";var Yy=({id:e,sourceX:t,sourceY:o,targetX:n,targetY:r,sourcePosition:i,targetPosition:a,selected:l})=>{let[s]=qy({sourceX:t,sourceY:o,sourcePosition:i,targetX:n,targetY:r,targetPosition:a});return yc(gc,{className:"stroke-1",id:e,path:s,style:{stroke:l?"var(--muted-foreground)":"var(--border)",strokeDasharray:"5, 5"}})},fc=(e,t,o)=>{let n=t===Ho.Left?"target":"source",r=e.internals.handleBounds?.[n],i=o?r?.find(c=>c.id===o):r?.find(c=>c.position===t);if(!i)return[0,0];let a=i.width/2,l=i.height/2;switch(t){case Ho.Left:a=0;break;case Ho.Right:a=i.width;break;case Ho.Top:l=0;break;case Ho.Bottom:l=i.height;break;default:throw new Error(`Invalid handle position: ${t}`)}let s=e.internals.positionAbsolute.x+i.x+a,d=e.internals.positionAbsolute.y+i.y+l;return[s,d]},Xy=(e,t,o,n)=>{let r=Ho.Right,[i,a]=fc(e,r,o),l=Ho.Left,[s,d]=fc(t,l,n);return{sx:i,sy:a,tx:s,ty:d,sourcePos:r,targetPos:l}},Qy=({id:e,source:t,target:o,sourceHandleId:n,targetHandleId:r,style:i,selected:a})=>{let l=Jy(Yo),s=pc(t),d=pc(o);if(!(s&&d))return null;let{sx:c,sy:u,tx:f,ty:v,sourcePos:C,targetPos:h}=Xy(s,d,n,r),y={sourceX:c,sourceY:u,sourcePosition:C,targetX:f,targetY:v,targetPosition:h},[m]=l.edgeStyle==="bezier"?Ky(y):jy(y);return yc(gc,{id:e,path:m,style:{...i,stroke:a?"var(--muted-foreground)":"var(--border)",strokeWidth:2,animation:"dashdraw 0.5s linear infinite",strokeDasharray:5}})},Bs={Temporary:Yy,Animated:Qy};import{useAtomValue as cr}from"jotai";import{AlertTriangle as uv,Check as mv,Code as pv,EyeOff as wc,XCircle as fv,Zap as kc}from"lucide-react";import xc from"next/image";import{memo as gv,useState as yv}from"react";import{useAtomValue as ev}from"jotai";import{Check as hc,Circle as tv,EyeOff as ov,ListOrdered as nv,Loader2 as rv,XCircle as bc}from"lucide-react";import{memo as av,useEffect as sv,useState as iv}from"react";import{Handle as ba,Position as wa}from"@xyflow/react";import{Fragment as Zy,jsx as bo,jsxs as Vs}from"react/jsx-runtime";var vc=({className:e})=>Vs(Zy,{children:[bo("style",{children:`
201
+ }`:""}function af(e){if(!e)return ls;if(Gl[e])return Gl[e];let t=ye(e);return t&&t.codegenTemplate||ls}var Sn=(e,t)=>e.data.type==="trigger"?rf(e.data.config,t):e.data.type==="action"?af(e.data.config?.actionType):nf;import{useAtom as ds}from"jotai";import{Check as Ul,ChevronDown as us,ChevronRight as ms,Clock as sf,Copy as lf,ExternalLink as df,Loader2 as cf,Play as uf,Square as $l,X as mf}from"lucide-react";import _l from"next/image";import{useCallback as nr,useEffect as na,useRef as pf,useState as Fo}from"react";import{Fragment as aa,jsx as K,jsxs as Ve}from"react/jsx-runtime";function ff(e){return ei(e)}function gf(e,t){if(typeof e!="object"||e===null)return;let o=e[t.field];if(typeof o=="string"&&o.length>0)return o}function yf(e){return typeof e=="object"&&e!==null&&"base64"in e&&typeof e.base64=="string"&&e.base64.length>100}function cs(e){let t={};for(let o of e)t[o.nodeId]={nodeId:o.nodeId,nodeName:o.nodeName,nodeType:o.nodeType,status:o.status,output:o.output};return t}function vf(e){try{let t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"}catch{return!1}}function Kl({data:e}){let o=JSON.stringify(e,null,2).split(/("https?:\/\/[^"]+"|"[^"]*")/g);return K(aa,{children:o.map(n=>{if(n.startsWith('"')&&n.endsWith('"')){let r=n.slice(1,-1);if(vf(r))return K("a",{className:"text-blue-500 underline hover:text-blue-400",href:r,rel:"noopener noreferrer",target:"_blank",children:n},r)}return n})})}function hf({data:e,isError:t=!1}){let[o,n]=Fo(!1);return K(E,{className:"h-7 px-2",onClick:async s=>{s.stopPropagation();try{let a=t?String(e):JSON.stringify(e,null,2);await navigator.clipboard.writeText(a),n(!0),setTimeout(()=>n(!1),2e3)}catch(a){console.error("Failed to copy:",a)}},size:"sm",type:"button",variant:"ghost",children:o?K(Ul,{className:"h-3 w-3 text-green-600"}):K(lf,{className:"h-3 w-3"})})}function ra({title:e,children:t,defaultExpanded:o=!1,copyData:n,isError:r=!1,externalLink:s}){let[a,d]=Fo(o);return Ve("div",{children:[Ve("div",{className:"mb-2 flex w-full items-center justify-between",children:[Ve("button",{className:"flex items-center gap-1.5",onClick:()=>d(!a),type:"button",children:[a?K(us,{className:"h-3 w-3 text-muted-foreground"}):K(ms,{className:"h-3 w-3 text-muted-foreground"}),K("span",{className:"font-medium text-muted-foreground text-xs uppercase tracking-wide",children:e})]}),Ve("div",{className:"flex items-center gap-1",children:[s&&K(E,{asChild:!0,className:"h-7 px-2",size:"sm",variant:"ghost",children:K("a",{href:s,rel:"noopener noreferrer",target:"_blank",children:K(df,{className:"h-3 w-3"})})}),n!==void 0&&K(hf,{data:n,isError:r})]})]}),a&&t]})}function bf({output:e,input:t,actionType:o}){let r=(o?ye(o):void 0)?.outputConfig,s=o?ff(o):void 0,a=r?.type!=="component"?r:s,d=a?gf(e,a):void 0,i=!(r||s)&&yf(e),c=(()=>{if(r?.type==="component"){let b=r.component;return K("div",{className:"overflow-hidden rounded-lg border bg-muted/50 p-3",children:K(b,{input:t,output:e})})}if(a&&d)switch(a.type){case"image":{let b=a.field==="base64"&&!d.startsWith("data:")?`data:image/png;base64,${d}`:d;return K("div",{className:"overflow-hidden rounded-lg border bg-muted/50 p-3",children:K(_l,{alt:"Generated image",className:"max-h-96 w-auto rounded",height:384,src:b,unoptimized:!0,width:384})})}case"video":return K("div",{className:"overflow-hidden rounded-lg border bg-muted/50 p-3",children:K("video",{className:"max-h-96 w-auto rounded",controls:!0,src:d,children:K("track",{kind:"captions"})})});case"url":return K("div",{className:"overflow-hidden rounded-lg border bg-muted/50",children:K("iframe",{className:"h-96 w-full rounded",sandbox:"allow-scripts allow-same-origin",src:d,title:"Output preview"})});default:return null}return i?K("div",{className:"overflow-hidden rounded-lg border bg-muted/50 p-3",children:K(_l,{alt:"AI generated output",className:"max-h-96 w-auto rounded",height:384,src:`data:image/png;base64,${e.base64}`,unoptimized:!0,width:384})}):null})(),u=c!==null,g=a?.type==="url"&&d?d:void 0;return Ve(aa,{children:[K(ra,{copyData:e,title:"Output",children:K("pre",{className:"overflow-auto rounded-lg border bg-muted/50 p-3 font-mono text-xs leading-relaxed",children:K(Kl,{data:e})})}),u&&K(ra,{defaultExpanded:!0,externalLink:g,title:"Result",children:c})]})}function wf({log:e,isExpanded:t,onToggle:o,getStatusIcon:n,getStatusDotClass:r,isFirst:s,isLast:a}){return Ve("div",{className:"relative flex gap-3",children:[Ve("div",{className:"relative -ml-px flex flex-col items-center pt-2",children:[!s&&K("div",{className:"absolute bottom-full h-2 w-px bg-border"}),K("div",{className:N("z-10 flex h-5 w-5 shrink-0 items-center justify-center rounded-full border-0",r(e.status)),children:n(e.status)}),!a&&K("div",{className:"absolute top-[calc(0.5rem+1.25rem)] bottom-0 w-px bg-border"})]}),Ve("div",{className:"min-w-0 flex-1",children:[K("button",{className:"group w-full rounded-lg py-2 text-left transition-colors hover:bg-muted/50",onClick:o,type:"button",children:Ve("div",{className:"flex items-center gap-3",children:[K("div",{className:"min-w-0 flex-1",children:Ve("div",{className:"flex items-center gap-2",children:[t?K(us,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground"}):K(ms,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground"}),K("span",{className:"truncate font-medium text-sm transition-colors group-hover:text-foreground",children:e.nodeName||e.nodeType})]})}),e.duration&&K("span",{className:"shrink-0 font-mono text-muted-foreground text-xs tabular-nums",children:Number.parseInt(e.duration,10)<1e3?`${e.duration}ms`:`${(Number.parseInt(e.duration,10)/1e3).toFixed(2)}s`})]})}),t&&Ve("div",{className:"mt-2 mb-2 space-y-3 px-3",children:[e.input!==null&&e.input!==void 0&&K(ra,{copyData:e.input,title:"Input",children:K("pre",{className:"overflow-auto rounded-lg border bg-muted/50 p-3 font-mono text-xs leading-relaxed",children:K(Kl,{data:e.input})})}),e.output!==null&&e.output!==void 0&&K(bf,{actionType:e.nodeType,input:e.input,output:e.output}),e.error&&K(ra,{copyData:e.error,defaultExpanded:!0,isError:!0,title:"Error",children:K("pre",{className:"overflow-auto rounded-lg border border-red-500/20 bg-red-500/5 p-3 font-mono text-red-600 text-xs leading-relaxed",children:e.error})}),!(e.input||e.output||e.error)&&K("div",{className:"rounded-lg border bg-muted/30 py-4 text-center text-muted-foreground text-xs",children:"No data recorded"})]})]})]},e.id)}function An({isActive:e=!1,onRefreshRef:t,onStartRun:o}){let[n]=ds(Ke),[r,s]=ds(so),[,a]=ds(tn),[d,i]=Fo([]),[l,c]=Fo({}),[u,g]=Fo(new Set),[b,y]=Fo(new Set),[v,p]=Fo(!0),m=pf(null),w=nr(async(O=!0)=>{if(!n){p(!1);return}try{O&&p(!0);let W=await U.workflow.getExecutions(n);i(W)}catch(W){console.error("Failed to load executions:",W),i([])}finally{O&&p(!1)}},[n]);na(()=>{t&&(t.current=()=>w(!1))},[w,t]),na(()=>{w()},[w]);let h=nr((O,W)=>O.map($=>({id:$.id,nodeId:$.nodeId,nodeName:$.nodeName,nodeType:$.nodeType,status:$.status,startedAt:new Date($.startedAt),completedAt:$.completedAt?new Date($.completedAt):null,duration:$.duration,input:$.input,output:$.output,error:$.error})),[]),S=nr(async O=>{try{let W=await U.workflow.getExecutionLogs(O),$=h(W.logs,W.execution.workflow);c(T=>({...T,[O]:$})),O===r&&a(cs($))}catch(W){console.error("Failed to load execution logs:",W),c($=>({...$,[O]:[]}))}},[h,r,a]);na(()=>{if(d.length===0)return;let O=d[0];O.status==="running"&&O.id!==m.current&&(m.current=O.id,s(O.id),g(W=>{let $=new Set(W);return $.add(O.id),$}),S(O.id),o&&o(O.id))},[d,s,S,o]);let D=nr(async O=>{try{let W=await U.workflow.getExecutionLogs(O),$=h(W.logs,W.execution.workflow);c(T=>({...T,[O]:$})),O===r&&a(cs($))}catch(W){console.error(`Failed to refresh logs for ${O}:`,W)}},[h,r,a]);na(()=>{if(!(e&&n))return;let W=setInterval(async()=>{try{let $=await U.workflow.getExecutions(n);i($);for(let T of u)await D(T)}catch($){console.error("Failed to poll executions:",$)}},2e3);return()=>clearInterval(W)},[e,n,u,D]);let I=nr(async O=>{try{await U.workflow.cancelExecution(O),await w(!1)}catch(W){console.error("Failed to cancel execution:",W)}},[w]),k=async O=>{let W=new Set(u);W.has(O)?W.delete(O):(W.add(O),await S(O)),g(W)},f=O=>{if(r===O){s(null),a({});return}s(O);let W=l[O]||[];a(cs(W))},x=O=>{let W=new Set(b);W.has(O)?W.delete(O):W.add(O),y(W)},G=O=>{switch(O){case"success":return K(Ul,{className:"h-3 w-3 text-white"});case"error":return K(mf,{className:"h-3 w-3 text-white"});case"cancelled":return K($l,{className:"h-3 w-3 text-white"});case"running":return K(cf,{className:"h-3 w-3 animate-spin text-white"});default:return K(sf,{className:"h-3 w-3 text-white"})}},te=O=>{switch(O){case"success":return"bg-green-600";case"error":return"bg-red-600";case"cancelled":return"bg-yellow-600";case"running":return"bg-blue-600";default:return"bg-muted-foreground"}};return v?K("div",{className:"flex items-center justify-center py-12",children:K(pt,{})}):d.length===0?Ve("div",{className:"flex flex-col items-center justify-center py-16",children:[K("div",{className:"mb-3 rounded-lg border border-dashed p-4",children:K(uf,{className:"h-6 w-6 text-muted-foreground"})}),K("div",{className:"font-medium text-foreground text-sm",children:"No runs yet"}),K("div",{className:"mt-1 text-muted-foreground text-xs",children:"Execute your workflow to see runs here"})]}):K("div",{className:"space-y-3",children:d.map((O,W)=>{let $=u.has(O.id),T=r===O.id,H=(l[O.id]||[]).sort((X,z)=>new Date(X.startedAt).getTime()-new Date(z.startedAt).getTime());return Ve("div",{className:N("overflow-hidden rounded-lg border bg-card transition-all",T&&"ring-2 ring-primary ring-offset-2 ring-offset-background"),children:[Ve("div",{className:"flex w-full items-center gap-3 p-4",children:[K("button",{className:"flex size-5 shrink-0 items-center justify-center rounded-full border-0 transition-colors hover:bg-muted",onClick:()=>k(O.id),type:"button",children:K("div",{className:N("flex size-5 items-center justify-center rounded-full border-0",te(O.status)),children:G(O.status)})}),Ve("button",{className:"min-w-0 flex-1 text-left transition-colors hover:opacity-80",onClick:()=>f(O.id),type:"button",children:[K("div",{className:"mb-1 flex items-center gap-2",children:Ve("span",{className:"font-semibold text-sm",children:["Run #",d.length-W]})}),Ve("div",{className:"flex items-center gap-2 font-mono text-muted-foreground text-xs",children:[K("span",{children:wr(O.startedAt)}),O.duration&&Ve(aa,{children:[K("span",{children:"\u2022"}),K("span",{className:"tabular-nums",children:Number.parseInt(O.duration,10)<1e3?`${O.duration}ms`:`${(Number.parseInt(O.duration,10)/1e3).toFixed(2)}s`})]}),H.length>0&&Ve(aa,{children:[K("span",{children:"\u2022"}),Ve("span",{children:[H.length," ",H.length===1?"step":"steps"]})]})]})]}),(O.status==="running"||O.status==="pending")&&K("button",{className:"flex shrink-0 items-center justify-center rounded p-1 text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive",onClick:X=>{X.stopPropagation(),I(O.id)},title:"Stop execution",type:"button",children:K($l,{className:"h-3.5 w-3.5"})}),K("button",{className:"flex shrink-0 items-center justify-center rounded p-1 transition-colors hover:bg-muted",onClick:()=>k(O.id),type:"button",children:$?K(us,{className:"h-4 w-4 text-muted-foreground"}):K(ms,{className:"h-4 w-4 text-muted-foreground"})})]}),$&&K("div",{className:"border-t bg-muted/20",children:H.length===0?K("div",{className:"py-8 text-center text-muted-foreground text-xs",children:"No steps recorded"}):K("div",{className:"p-4",children:H.map((X,z)=>K(wf,{getStatusDotClass:te,getStatusIcon:G,isExpanded:b.has(X.id),isFirst:z===0,isLast:z===H.length-1,log:X,onToggle:()=>x(X.id)},X.id))})})]},O.id)})})}import{Fragment as vo,jsx as M,jsxs as q}from"react/jsx-runtime";var Tf=/[^a-zA-Z0-9\s]/g,Sf=/\s+/,Ql={"Database Query":"database"},Af=({selectedNodes:e,selectedEdges:t,onDelete:o})=>{let[n,r]=rr(!1),s=e.length===1?"node":"nodes",a=t.length===1?"line":"lines",d=[];e.length>0&&d.push(`${e.length} ${s}`),t.length>0&&d.push(`${t.length} ${a}`);let i=d.join(" and ");return q(vo,{children:[q("div",{className:"flex size-full flex-col",children:[M("div",{className:"flex h-14 w-full shrink-0 items-center border-b bg-transparent px-4",children:M("h2",{className:"font-semibold text-foreground",children:"Properties"})}),q("div",{className:"flex-1 space-y-4 overflow-y-auto p-4",children:[q("div",{className:"space-y-2",children:[M(L,{children:"Selection"}),q("p",{className:"text-muted-foreground text-sm",children:[i," selected"]})]}),M("div",{className:"flex items-center gap-2 pt-4",children:q(E,{className:"text-muted-foreground",onClick:()=>r(!0),size:"sm",variant:"ghost",children:[M(sa,{className:"mr-2 size-4"}),"Delete"]})})]})]}),M(ln,{onOpenChange:r,open:n,children:q(dn,{children:[q(cn,{children:[M(mn,{children:"Delete Selected Items"}),q(pn,{children:["Are you sure you want to delete ",i,"? This action cannot be undone."]})]}),q(un,{children:[M(gn,{children:"Cancel"}),M(fn,{onClick:()=>{o(),r(!1)},children:"Delete"})]})]})})]})},If=()=>{let[e]=yo(Te),[t]=yo(Ue),[o]=yo(re),n=ps(ue),[r]=yo(St),[s]=yo(Ke),[a,d]=yo(wt),i=ps(ao),l=zo(io),c=zo(lo),u=zo(co),g=zo(bi),b=zo(nn),{open:y}=oe(),v=zo(Dr),p=zo(Ir),[m,w]=yo(ro),[h,S]=rr(!1),[D,I]=rr(!1),[k,f]=rr(!1),[x,G]=rr(!1),[te,O]=yo($t),W=Xl(null),$=Xl({}),T=o.find(Z=>Z.id===e),H=n.find(Z=>Z.id===t),X=o.filter(Z=>Z.selected),z=n.filter(Z=>Z.selected),j=X.length+z.length>1;Yl(()=>{if(!T||te!=="code")return;let Z=T.data.config?.actionType==="Condition",ke=T.data.type==="trigger"&&T.data.config?.triggerType==="Manual";(Z||ke)&&O("properties")},[T,te,O]);let A=ps(bt);Yl(()=>{if(!(T&&i))return;let Z=T.data.config?.actionType,ke=T.data.config?.integrationId;if(!(Z&&ke))return;let F=ye(Z)?.integration||Ql[Z];if(!F||A.some(pe=>pe.id===ke))return;let fe=A.filter(pe=>pe.type===F);if(fe.length===1){let pe={...T.data.config,integrationId:fe[0].id};l({id:T.id,data:{config:pe}})}else if(fe.length===0){let pe={...T.data.config,integrationId:void 0};l({id:T.id,data:{config:pe}})}},[T,A,i,l]);let B=Cf(()=>{let ke=`${a.replace(Tf,"").split(Sf).map((F,Y)=>Y===0?F.toLowerCase():F.charAt(0).toUpperCase()+F.slice(1).toLowerCase()).join("")||"execute"}Workflow`,{code:P}=vr(o,n,{functionName:ke});return P},[o,n,a]),C=()=>{T&&navigator.clipboard.writeText(Sn(T))},R=()=>{navigator.clipboard.writeText(B),In.success("Code copied to clipboard")},_=()=>{e&&(c(e),S(!1))},ne=()=>{if(T){let Z=T.data.enabled??!0;l({id:T.id,data:{enabled:!Z}})}},de=()=>{t&&(u(t),I(!1))},V=async()=>{if(s)try{await U.workflow.deleteExecutions(s),v(),f(!1)}catch(Z){console.error("Failed to delete runs:",Z);let ke=Z instanceof Error?Z.message:"Failed to delete runs";In.error(ke)}},Ie=Z=>{T&&l({id:T.id,data:{label:Z}})},nt=Z=>{T&&l({id:T.id,data:{description:Z}})},Qe=kf(async(Z,ke,P,F)=>{let fe=ye(ke)?.integration||Ql[ke];if(!fe){p(pe=>{let Ce=new Set(pe);return Ce.delete(Z),Ce});return}try{let pe=await U.integration.getAll();if(F.aborted)return;let Ce=pe.filter(mt=>mt.type===fe);if(Ce.length===1&&!F.aborted){let mt={...P,actionType:ke,integrationId:Ce[0].id};l({id:Z,data:{config:mt}})}}catch(pe){console.error("Failed to auto-select integration:",pe)}finally{F.aborted||p(pe=>{let Ce=new Set(pe);return Ce.delete(Z),Ce})}},[l,p]),rt=Z=>{if(T){let ke={...T.data.config,...Z};l({id:T.id,data:{config:ke}})}},Ht=(Z,ke)=>{if(T){let P={...T.data.config,[Z]:ke};if(Z==="actionType"&&T.data.config?.integrationId&&(P={...P,integrationId:void 0}),l({id:T.id,data:{config:P}}),Z==="actionType"){let F=$.current[T.id];F&&F.abort();let Y=new AbortController;$.current[T.id]=Y,p(fe=>new Set(fe).add(T.id)),Qe(T.id,ke,P,Y.signal)}}},Lt=async Z=>{if(d(Z),s)try{await U.workflow.update(s,{name:Z,nodes:o,edges:n})}catch(ke){console.error("Failed to update workflow name:",ke),In.error("Failed to update workspace name")}},To=async()=>{G(!0);try{W.current&&await W.current()}catch(Z){console.error("Failed to refresh runs:",Z),In.error("Failed to refresh runs")}finally{G(!1)}};return j?M(Af,{onDelete:g,selectedEdges:z,selectedNodes:X}):H?q(vo,{children:[q("div",{className:"flex size-full flex-col",children:[M("div",{className:"flex h-14 w-full shrink-0 items-center border-b bg-transparent px-4",children:M("h2",{className:"font-semibold text-foreground",children:"Properties"})}),q("div",{className:"flex-1 space-y-4 overflow-y-auto p-4",children:[q("div",{className:"space-y-2",children:[M(L,{className:"ml-1",htmlFor:"edge-id",children:"Edge ID"}),M(ae,{disabled:!0,id:"edge-id",value:H.id})]}),q("div",{className:"space-y-2",children:[M(L,{className:"ml-1",htmlFor:"edge-source",children:"Source"}),M(ae,{disabled:!0,id:"edge-source",value:H.source})]}),q("div",{className:"space-y-2",children:[M(L,{className:"ml-1",htmlFor:"edge-target",children:"Target"}),M(ae,{disabled:!0,id:"edge-target",value:H.target})]}),i&&M("div",{className:"flex items-center gap-2 pt-4",children:q(E,{className:"text-muted-foreground",onClick:()=>I(!0),size:"sm",variant:"ghost",children:[M(sa,{className:"mr-2 size-4"}),"Delete"]})})]})]}),M(ln,{onOpenChange:I,open:D,children:q(dn,{children:[q(cn,{children:[M(mn,{children:"Delete Edge"}),M(pn,{children:"Are you sure you want to delete this connection? This action cannot be undone."})]}),q(un,{children:[M(gn,{children:"Cancel"}),M(fn,{onClick:de,children:"Delete"})]})]})})]}):T?q(vo,{children:[q(Va,{className:"size-full","data-testid":"properties-panel",defaultValue:"properties",onValueChange:O,value:te,children:[q(Ha,{className:"h-14 w-full shrink-0 rounded-none border-b bg-transparent px-4 py-2.5",children:[M(Ao,{className:"bg-transparent text-muted-foreground data-[state=active]:text-foreground data-[state=active]:shadow-none",value:"properties",children:"Properties"}),(T.data.type!=="trigger"||T.data.config?.triggerType!=="Manual")&&T.data.config?.actionType!=="Condition"?M(Ao,{className:"bg-transparent text-muted-foreground data-[state=active]:text-foreground data-[state=active]:shadow-none",value:"code",children:"Code"}):null,i&&M(Ao,{className:"bg-transparent text-muted-foreground data-[state=active]:text-foreground data-[state=active]:shadow-none",value:"runs",children:"Runs"})]}),q(Io,{className:"flex flex-col overflow-hidden",value:"properties",children:[T.data.type==="action"&&!T.data.config?.actionType&&i&&M("div",{className:"flex min-h-0 flex-1 flex-col px-4 pt-4",children:M(ta,{disabled:r,isNewlyCreated:T?.id===m,onSelectAction:Z=>{Ht("actionType",Z),T?.id===m&&w(null)}})}),!(T.data.type==="action"&&!T.data.config?.actionType&&i)&&q("div",{className:"flex-1 space-y-4 overflow-y-auto p-4",children:[q("div",{className:"space-y-2",children:[M(L,{className:"ml-1",htmlFor:"node-id",children:"Node ID"}),M(ae,{readOnly:!0,id:"node-id",value:T?.id||""})]}),T.data.type==="trigger"&&M(oa,{config:T.data.config||{},disabled:r||!i,onUpdateConfig:Ht,workflowId:s??void 0}),T.data.type==="action"&&!T.data.config?.actionType&&!i&&M("div",{className:"rounded-lg border border-muted bg-muted/30 p-3",children:M("p",{className:"text-muted-foreground text-sm",children:"No action configured for this step."})}),T.data.type==="action"&&T.data.config?.actionType?M(Yr,{config:T.data.config||{},disabled:r||!i,isOwner:i,onUpdateConfig:Ht,onUpdateMultipleConfig:rt}):null,T.data.type!=="action"||T.data.config?.actionType?q(vo,{children:[q("div",{className:"space-y-2",children:[M(L,{className:"ml-1",htmlFor:"label",children:"Label"}),M(ae,{disabled:r||!i,id:"label",onChange:Z=>Ie(Z.target.value),value:T.data.label})]}),q("div",{className:"space-y-2",children:[M(L,{className:"ml-1",htmlFor:"description",children:"Description"}),M(ae,{disabled:r||!i,id:"description",onChange:Z=>nt(Z.target.value),placeholder:"Optional description",value:T.data.description||""})]})]}):null,!i&&M("div",{className:"rounded-lg border border-muted bg-muted/30 p-3",children:M("p",{className:"text-muted-foreground text-sm",children:"You are viewing a public workflow. Duplicate it to make changes."})}),i&&q("div",{className:"flex items-center gap-2 pt-4",children:[T.data.type==="action"&&M(E,{className:"text-muted-foreground",onClick:ne,size:"sm",variant:"ghost",children:T.data.enabled===!1?q(vo,{children:[M(Nf,{className:"mr-2 size-4"}),"Disabled"]}):q(vo,{children:[M(xf,{className:"mr-2 size-4"}),"Enabled"]})}),q(E,{className:"text-muted-foreground",onClick:()=>S(!0),size:"sm",variant:"ghost",children:[M(sa,{className:"mr-2 size-4"}),"Delete"]})]})]})]}),M(Io,{className:"flex flex-col overflow-hidden data-[state=inactive]:hidden",forceMount:!0,value:"code",children:(()=>{let Z=T.data.config?.triggerType,ke="",P="typescript";return T.data.type==="trigger"?Z==="Schedule"?(ke="vercel.json",P="json"):Z==="Webhook"&&(ke=`app/api${T.data.config?.webhookPath||"/webhook"}/route.ts`,P="typescript"):ke=`steps/${T.data.config?.actionType?.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"")||"action"}-step.ts`,q(vo,{children:[ke&&q("div",{className:"flex shrink-0 items-center justify-between border-b bg-muted/30 px-3 pb-2",children:[q("div",{className:"flex items-center gap-2",children:[M(jl,{className:"size-3.5 text-muted-foreground"}),M("code",{className:"text-muted-foreground text-xs",children:ke})]}),q(E,{className:"text-muted-foreground",onClick:C,size:"sm",variant:"ghost",children:[M(ql,{className:"mr-2 size-4"}),"Copy"]})]}),M("div",{className:"flex-1 overflow-hidden",children:M(xt,{height:"100%",language:P,options:{readOnly:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,fontSize:13,lineNumbers:"on",folding:!1,wordWrap:"off",padding:{top:16,bottom:16}},value:Sn(T)})})]})})()}),i&&q(Io,{className:"flex flex-col overflow-hidden",value:"runs",children:[q("div",{className:"flex shrink-0 items-center gap-2 border-b px-4 py-2",children:[q(E,{className:"text-muted-foreground",disabled:x,onClick:To,size:"sm",variant:"ghost",children:[M(Jl,{className:`mr-2 size-4 ${x?"animate-spin":""}`}),"Refresh"]}),q(E,{className:"text-muted-foreground",onClick:()=>f(!0),size:"sm",variant:"ghost",children:[M(fs,{className:"mr-2 size-4"}),"Clear All"]})]}),M("div",{className:"flex-1 space-y-4 overflow-y-auto p-4",children:M(An,{isActive:te==="runs",onRefreshRef:W})})]})]}),M(ln,{onOpenChange:f,open:k,children:q(dn,{children:[q(cn,{children:[M(mn,{children:"Delete All Runs"}),M(pn,{children:"Are you sure you want to delete all workflow runs? This action cannot be undone."})]}),q(un,{children:[M(gn,{children:"Cancel"}),M(fn,{onClick:V,children:"Delete"})]})]})}),M(ln,{onOpenChange:S,open:h,children:q(dn,{children:[q(cn,{children:[M(mn,{children:"Delete Step"}),M(pn,{children:"Are you sure you want to delete this node? This action cannot be undone."})]}),q(un,{children:[M(gn,{children:"Cancel"}),M(fn,{onClick:_,children:"Delete"})]})]})})]}):q(vo,{children:[q(Va,{className:"size-full",defaultValue:"properties",onValueChange:O,value:te,children:[q(Ha,{className:"h-14 w-full shrink-0 rounded-none border-b bg-transparent px-4 py-2.5",children:[M(Ao,{className:"bg-transparent text-muted-foreground data-[state=active]:text-foreground data-[state=active]:shadow-none",value:"properties",children:"Properties"}),M(Ao,{className:"bg-transparent text-muted-foreground data-[state=active]:text-foreground data-[state=active]:shadow-none",value:"code",children:"Code"}),i&&M(Ao,{className:"bg-transparent text-muted-foreground data-[state=active]:text-foreground data-[state=active]:shadow-none",value:"runs",children:"Runs"})]}),M(Io,{className:"flex flex-col overflow-hidden",value:"properties",children:q("div",{className:"flex-1 space-y-4 overflow-y-auto p-4",children:[q("div",{className:"space-y-2",children:[M(L,{className:"ml-1",htmlFor:"workflow-name",children:"Workflow Name"}),M(ae,{disabled:!i,id:"workflow-name",onChange:Z=>Lt(Z.target.value),value:a})]}),q("div",{className:"space-y-2",children:[M(L,{className:"ml-1",htmlFor:"workflow-id",children:"Workflow ID"}),M(ae,{disabled:!0,id:"workflow-id",value:s||"Not saved"})]}),!i&&M("div",{className:"rounded-lg border border-muted bg-muted/30 p-3",children:M("p",{className:"text-muted-foreground text-sm",children:"You are viewing a public workflow. Duplicate it to make changes."})}),i&&q("div",{className:"flex items-center gap-2 pt-4",children:[q(E,{className:"text-muted-foreground",onClick:()=>{y(Ee,{title:"Clear Workflow",message:"Are you sure you want to clear all nodes and connections? This action cannot be undone.",confirmLabel:"Clear Workflow",confirmVariant:"destructive",destructive:!0,onConfirm:()=>{b()}})},size:"sm",variant:"ghost",children:[M(fs,{className:"mr-2 size-4"}),"Clear"]}),q(E,{className:"text-muted-foreground",onClick:()=>{y(Ee,{title:"Delete Workflow",message:`Are you sure you want to delete "${a}"? This will permanently delete the workflow. This cannot be undone.`,confirmLabel:"Delete Workflow",confirmVariant:"destructive",destructive:!0,onConfirm:async()=>{if(s)try{await U.workflow.delete(s),In.success("Workflow deleted successfully"),window.location.href="/"}catch(Z){console.error("Failed to delete workflow:",Z),In.error("Failed to delete workflow. Please try again.")}}})},size:"sm",variant:"ghost",children:[M(sa,{className:"mr-2 size-4"}),"Delete"]})]})]})}),i&&q(Io,{className:"flex flex-col overflow-hidden",value:"runs",children:[q("div",{className:"flex shrink-0 items-center gap-2 border-b px-4 py-2",children:[q(E,{className:"text-muted-foreground",disabled:x,onClick:To,size:"sm",variant:"ghost",children:[M(Jl,{className:`mr-2 size-4 ${x?"animate-spin":""}`}),"Refresh"]}),q(E,{className:"text-muted-foreground",onClick:()=>f(!0),size:"sm",variant:"ghost",children:[M(fs,{className:"mr-2 size-4"}),"Clear All"]})]}),M("div",{className:"flex-1 space-y-4 overflow-y-auto p-4",children:M(An,{isActive:te==="runs",onRefreshRef:W})})]}),q(Io,{className:"flex flex-col overflow-hidden data-[state=inactive]:hidden",forceMount:!0,value:"code",children:[q("div",{className:"flex shrink-0 items-center justify-between border-b bg-muted/30 px-3 pb-2",children:[q("div",{className:"flex items-center gap-2",children:[M(jl,{className:"size-3.5 text-muted-foreground"}),q("code",{className:"text-muted-foreground text-xs",children:["workflows/",a.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"")||"workflow",".ts"]})]}),q(E,{className:"text-muted-foreground",onClick:R,size:"sm",variant:"ghost",children:[M(ql,{className:"mr-2 size-4"}),"Copy"]})]}),M("div",{className:"flex-1 overflow-hidden",children:M(xt,{height:"100%",language:"typescript",options:{readOnly:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,fontSize:13,lineNumbers:"on",folding:!0,wordWrap:"off",padding:{top:16,bottom:16}},value:B})})]})]}),M(ln,{onOpenChange:f,open:k,children:q(dn,{children:[q(cn,{children:[M(mn,{children:"Delete All Runs"}),M(pn,{children:"Are you sure you want to delete all workflow runs? This action cannot be undone."})]}),q(un,{children:[M(gn,{children:"Cancel"}),M(fn,{onClick:V,children:"Delete"})]})]})})]})},gs=()=>M("div",{className:"hidden size-full flex-col bg-background md:flex",children:M(If,{})});import{jsx as Dt,jsxs as ia}from"react/jsx-runtime";var hs=({workflowId:e})=>{let t=Of(),o=_t(),[n,r]=qt(St),[s,a]=qt(Er),[d]=qt(re),[i]=qt(ue),[l]=qt(Ke),[c]=qt(so),u=Pt(re),g=Pt(ue),b=Pt(Ke),y=Pt(wt),v=Pt(io),p=Pt(st),[m,w]=qt(wi),h=Pt(Pr),S=Pt(Cr),D=Pt(Tr),[I,k]=qt(Sr),[f,x]=qt(gi),G=Pt(Nr),[te,O]=qt(ao),W=Pt(bt),$=Pt(xr),T=Pf(Wt),[H,X]=ys(30),[z,j]=ys(I),[A,B]=ys(!1),C=Bo(!1),R=Bo(!1);Et(()=>{if(R.current)return;R.current=!0;let P=document.cookie.split("; ").find(Y=>Y.startsWith("sidebar-width="));if(P){let Y=Number.parseFloat(P.split("=")[1]);!Number.isNaN(Y)&&Y>=20&&Y<=50&&X(Y)}let F=document.cookie.split("; ").find(Y=>Y.startsWith("sidebar-collapsed="));F&&x(F.split("=")[1]==="true")},[x]);let _=Bo(!1);Et(()=>{if(!_.current){_.current=!0;return}document.cookie=`sidebar-width=${H}; path=/; max-age=31536000`},[H]),Et(()=>{R.current&&(document.cookie=`sidebar-collapsed=${f}; path=/; max-age=31536000`)},[f]),Et(()=>{let P=sessionStorage.getItem("animate-sidebar")==="true";if(sessionStorage.removeItem("animate-sidebar"),I||!P){j(!0),k(!0);return}D(!0);let F=setTimeout(()=>{j(!0),k(!0)},100),Y=setTimeout(()=>D(!1),400);return()=>{clearTimeout(F),clearTimeout(Y),D(!1)}},[I,k,D]),Et(()=>{let P=F=>{(F.metaKey||F.ctrlKey)&&F.key==="b"&&(F.preventDefault(),D(!0),x(Y=>!Y),setTimeout(()=>D(!1),350))};return window.addEventListener("keydown",P),()=>window.removeEventListener("keydown",P)},[D,x]),Et(()=>(S(!o&&z&&!f?`${H}%`:null),()=>{S(null)}),[o,S,H,z,f]);let ne=ho(P=>{P.preventDefault(),C.current=!0,B(!0);let F=fe=>{if(!C.current)return;let pe=(window.innerWidth-fe.clientX)/window.innerWidth*100;X(Math.min(50,Math.max(20,pe)))},Y=()=>{C.current=!1,B(!1),document.removeEventListener("mousemove",F),document.removeEventListener("mouseup",Y),document.body.style.cursor="",document.body.style.userSelect=""};document.addEventListener("mousemove",F),document.addEventListener("mouseup",Y),document.body.style.cursor="col-resize",document.body.style.userSelect="none"},[]),de=Bo(null),V=Bo(null),Ie=Bo(d);Et(()=>{Ie.current=d},[d]);let nt=ho(async P=>{r(!0),b(e),y("AI Generated Workflow");try{let F=await U.ai.generate(P),Y=(F.nodes||[]).map(fe=>({...fe,selected:!1}));u(Y),g(F.edges||[]),y(F.name||"AI Generated Workflow"),await U.workflow.update(e,{name:F.name,description:F.description,nodes:F.nodes,edges:F.edges})}catch(F){console.error("Failed to generate workflow:",F),vs.error("Failed to generate workflow")}finally{r(!1)}},[e,r,b,y,u,g]),Qe=ho(async()=>{try{let P=await U.workflow.getById(e);if(!P){w(!0);return}let F=P.nodes.map(Y=>({...Y,selected:!1,data:{...Y.data,status:"idle"}}));u(F),g(P.edges),b(P.id),y(P.name),G(P.visibility??"private"),O(P.isOwner!==!1),p(!1),w(!1)}catch(P){console.error("Failed to load workflow:",P),vs.error("Failed to load workflow")}},[e,u,g,b,y,G,O,p,w]),rt=Bo(null);Et(()=>{(async()=>{let F=t?.get("generating")==="true",Y=sessionStorage.getItem("ai-prompt"),fe=sessionStorage.getItem("generating-workflow-id");l===e&&d.length>0||(F&&Y&&fe===e?(sessionStorage.removeItem("ai-prompt"),sessionStorage.removeItem("generating-workflow-id"),await nt(Y)):await Qe())})()},[e,t,l,d.length,nt,Qe]),Et(()=>{if(d.length===0||!l||!te)return;let P=rt.current;if(P&&P.workflowId===l&&P.version===T)return;(async()=>{try{let Y=await U.integration.getAll();W(Y),$(!0);let fe=new Set(Y.map(Ce=>Ce.id)),pe=d.map(Ce=>Ti(Ce,Y,fe)).filter(Ce=>Ce!==null);for(let Ce of pe){let mt=d.find(yr=>yr.id===Ce.nodeId);mt&&v({id:Ce.nodeId,data:{config:{...mt.data.config,integrationId:Ce.newIntegrationId}}})}rt.current={workflowId:l,version:T},pe.length>0&&p(!0)}catch(Y){console.error("Failed to auto-fix integrations:",Y)}})()},[d,l,T,te,v,W,$,p]);let Ht=ho(async()=>{if(!(!l||n)){a(!0);try{await U.workflow.update(l,{nodes:d,edges:i}),p(!1)}catch(P){console.error("Failed to save workflow:",P),vs.error("Failed to save workflow")}finally{a(!1)}}},[l,d,i,n,a,p]),Lt=ho(P=>P.tagName==="INPUT"||P.tagName==="TEXTAREA",[]),To=ho(P=>P.closest(".monaco-editor")!==null,[]),Z=ho(P=>(P.metaKey||P.ctrlKey)&&P.key==="s"?(P.preventDefault(),P.stopPropagation(),Ht(),!0):!1,[Ht]),ke=ho((P,F)=>(P.metaKey||P.ctrlKey)&&P.key==="Enter"?(Lt(F)||To(F)||(P.preventDefault(),P.stopPropagation(),h(!0)),!0):!1,[h,Lt,To]);return Et(()=>{let P=F=>{let Y=F.target;Z(F)||ke(F,Y)};return document.addEventListener("keydown",P,!0),()=>document.removeEventListener("keydown",P,!0)},[Z,ke]),Et(()=>()=>{de.current&&clearInterval(de.current),V.current&&clearInterval(V.current)},[]),Et(()=>{if(V.current&&(clearInterval(V.current),V.current=null),!c){for(let F of Ie.current)v({id:F.id,data:{status:"idle"}});return}let P=async()=>{try{let F=await U.workflow.getExecutionStatus(c);for(let Y of F.nodeStatuses)v({id:Y.nodeId,data:{status:Y.status}});F.status!=="running"&&V.current&&(clearInterval(V.current),V.current=null)}catch(F){console.error("Failed to poll selected execution status:",F),V.current&&(clearInterval(V.current),V.current=null)}};return P(),V.current=setInterval(P,500),()=>{V.current&&(clearInterval(V.current),V.current=null)}},[c,v]),ia("div",{className:"flex h-dvh w-full flex-col overflow-hidden",children:[m&&Dt("div",{className:"pointer-events-auto absolute inset-0 z-20 flex items-center justify-center",children:ia("div",{className:"rounded-lg border bg-background p-8 text-center shadow-lg",children:[Dt("h1",{className:"mb-2 font-semibold text-2xl",children:"Workflow Not Found"}),Dt("p",{className:"mb-6 text-muted-foreground",children:"The workflow you're looking for doesn't exist or has been deleted."}),Dt(E,{asChild:!0,children:Dt(Rf,{href:"/",children:"New Workflow"})})]})}),!o&&f&&Dt("button",{className:"pointer-events-auto absolute top-1/2 right-0 z-20 flex size-6 -translate-y-1/2 items-center justify-center rounded-l-full border border-r-0 bg-background shadow-sm transition-colors hover:bg-muted",onClick:()=>{D(!0),x(!1),setTimeout(()=>D(!1),350)},type:"button",children:Dt(Ef,{className:"size-4"})}),!o&&ia("div",{className:"pointer-events-auto absolute inset-y-0 right-0 z-20 border-l bg-background transition-transform duration-300 ease-out",style:{width:`${H}%`,transform:z&&!f?"translateX(0)":"translateX(100%)"},children:[ia("div",{"aria-orientation":"vertical","aria-valuenow":H,className:"group absolute inset-y-0 left-0 z-10 w-3 cursor-col-resize",onMouseDown:ne,role:"separator",tabIndex:0,children:[Dt("div",{className:"absolute inset-y-0 left-0 w-1 bg-transparent transition-colors group-hover:bg-blue-500 group-active:bg-blue-600"}),!(A||f)&&Dt("button",{className:"absolute top-1/2 left-0 flex size-6 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full border bg-background opacity-0 shadow-sm transition-opacity hover:bg-muted group-hover:opacity-100",onClick:P=>{P.stopPropagation(),D(!0),x(!0),setTimeout(()=>D(!1),350)},onMouseDown:P=>P.stopPropagation(),type:"button",children:Dt(Df,{className:"size-4"})})]}),Dt(gs,{})]}),o&&Dt(gs,{})]})};import{useAtomValue as bs,useSetAtom as ar}from"jotai";import{nanoid as Wf}from"nanoid";import{useRouter as Ff}from"next/navigation";import{useCallback as ed,useEffect as la,useRef as zf}from"react";import{toast as Bf}from"sonner";import{anonymousClient as Lf}from"better-auth/client/plugins";import{createAuthClient as Mf}from"better-auth/react";var Vo=Mf({baseURL:typeof window<"u"?window.location.origin:"http://localhost:3000",plugins:[Lf()]}),{signIn:j0,signOut:Zl,signUp:J0,useSession:Pn}=Vo;function Vf(){return{id:Wf(),type:"trigger",position:{x:0,y:0},data:{label:"",description:"",type:"trigger",config:{triggerType:"Manual"},status:"idle"}}}var td=()=>{let e=Ff(),{data:t}=Pn(),o=bs(re),n=bs(ue),r=ar(re),s=ar(ue),a=ar(wt),d=ar(Sr),i=ar(Ar),l=zf(!1),c=bs(wt);la(()=>{d(!1)},[d]),la(()=>{document.title=`${c} - AI Workflow Builder`},[c]);let u=ed(async()=>{t||(await Vo.signIn.anonymous(),await new Promise(b=>setTimeout(b,100)))},[t]),g=ed(()=>{let b=Vf();r([b])},[r]);return la(()=>{r([{id:"add-node-placeholder",type:"add",position:{x:0,y:0},data:{label:"",type:"add",onClick:g},draggable:!1,selectable:!1}]),s([]),a("New Workflow"),l.current=!1},[r,s,a,g]),la(()=>{(async()=>{let y=o.filter(v=>v.type!=="add");if(!(y.length===0||l.current)){l.current=!0;try{await u();let v=await U.workflow.create({name:"Untitled Workflow",description:"",nodes:y,edges:n});sessionStorage.setItem("animate-sidebar","true"),i(!0),console.log("[Homepage] Navigating to workflow page"),e.replace(`/workflows/${v.id}`)}catch(v){console.error("Failed to create workflow:",v),Bf.error("Failed to create workflow")}}})()},[o,n,e,u,i]),null};import{useRouter as Hf}from"next/navigation";import{useEffect as Gf}from"react";var od=()=>{let e=Hf();return Gf(()=>{(async()=>{try{let n=(await U.workflow.getAll()).filter(r=>r.name!=="__current__");if(n.length>0){let r=n.sort((s,a)=>new Date(a.updatedAt).getTime()-new Date(s.updatedAt).getTime())[0];e.replace(`/workflows/${r.id}`)}else e.replace("/")}catch(o){console.error("Failed to load workflows:",o),e.replace("/")}})()},[e]),null};import{jsx as Ho}from"react/jsx-runtime";var Uf=()=>{let t=_f().slug;return!t||t.length===0?Ho(td,{}):t[0]==="dashboard"?Ho(Oa,{}):t[0]==="auth"&&t.length===2?Ho("main",{className:"flex items-center justify-center min-h-screen",children:Ho($f,{path:t[1]})}):t[0]==="workflows"&&t.length===1?Ho(od,{}):t[0]==="workflows"&&t.length===2?Ho("div",{className:"pointer-events-none relative z-10",children:Ho(hs,{workflowId:t[1]})}):null};import"virtual:workflow-builder-plugins";import{ReactFlowProvider as vh}from"@xyflow/react";import{Provider as hh,useSetAtom as bh}from"jotai";import*as Aa from"react";import{AnimatePresence as jf,LayoutGroup as ad,motion as Dn,useReducedMotion as sd}from"motion/react";import{useCallback as ir,useLayoutEffect as lr,useRef as bo,useState as id}from"react";import{Drawer as sr}from"vaul";import{Dialog as En}from"radix-ui";import{XIcon as Kf}from"lucide-react";import{jsx as Go,jsxs as ws}from"react/jsx-runtime";function da({...e}){return Go(En.Root,{"data-slot":"dialog",...e})}function xs({...e}){return Go(En.Portal,{"data-slot":"dialog-portal",...e})}function qf({className:e,...t}){return Go(En.Overlay,{"data-slot":"dialog-overlay",className:N("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",e),...t})}function nd({className:e,children:t,showCloseButton:o=!0,...n}){return ws(xs,{"data-slot":"dialog-portal",children:[Go(qf,{}),ws(En.Content,{"data-slot":"dialog-content",className:N("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",e),...n,children:[t,o&&ws(En.Close,{"data-slot":"dialog-close",className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[Go(Kf,{}),Go("span",{className:"sr-only",children:"Close"})]})]})]})}function rd({className:e,...t}){return Go(En.Title,{"data-slot":"dialog-title",className:N("text-lg leading-none font-semibold",e),...t})}import{jsx as ze,jsxs as ks}from"react/jsx-runtime";var Ns={type:"spring",stiffness:400,damping:35,mass:.8},Jf={type:"spring",stiffness:350,damping:30,mass:.8},Yf={hidden:{opacity:0,scale:.95},visible:{opacity:1,scale:1,transition:{type:"spring",stiffness:400,damping:30}},exit:{opacity:0,scale:.95,transition:{duration:.15,ease:[.4,0,1,1]}}};function ld(e,t){return e?"0%":t?"-35%":"100%"}function dd(e){let t=bo(e),o=bo(1);return e>t.current?o.current=1:e<t.current&&(o.current=-1),lr(()=>{t.current=e},[e]),o.current}function Xf(){let{stack:e,closeAll:t,pop:o}=oe(),n=sd(),[r,s]=id(0),a=bo(null),d=bo(!1),i=bo(e),l=dd(e.length),c=e.length>0;c&&(i.current=e);let u=i.current,g=u.length-1;console.log("[DesktopOverlay]",{isOpen:c,stackLength:e.length,frozenStackLength:i.current.length,renderStackLength:u.length}),lr(()=>{let h=c&&!d.current;if(d.current=c,h&&s(0),a.current){let S=a.current.offsetHeight;S>0&&s(S)}},[e,c]);let b=e[e.length-1],y=n?{duration:.01}:Ns,v=l===1,p=ir(()=>{b?.options.closeOnBackdropClick!==!1&&t()},[b?.options.closeOnBackdropClick,t]),m=ir(h=>{h.key==="Escape"&&b?.options.closeOnEscape!==!1&&o()},[b?.options.closeOnEscape,o]);lr(()=>{if(c)return document.addEventListener("keydown",m),()=>document.removeEventListener("keydown",m)},[c,m]);let w=ir(()=>{console.log("[DesktopOverlay] handleExitComplete called"),i.current=[]},[]);return console.log("[DesktopOverlay] Rendering, isOpen:",c),!c&&i.current.length===0?null:ze(jf,{onExitComplete:w,children:c&&ze(da,{modal:!1,open:!0,children:ks(xs,{forceMount:!0,children:[ze(Dn.div,{animate:{opacity:1},className:"fixed inset-0 z-50 bg-black/60",exit:{opacity:0},initial:{opacity:0},onClick:p,transition:{duration:.2}}),ze(Dn.div,{animate:"visible",className:"fixed top-1/2 left-1/2 z-50 w-full max-w-lg -translate-x-1/2 -translate-y-1/2 px-4",exit:"exit",initial:"hidden",variants:Yf,children:ze(ad,{children:ze(Dn.div,{className:"relative overflow-hidden rounded-xl border bg-background shadow-2xl ring-1 ring-black/5",layout:c,style:{minHeight:r>0?r:"auto"},transition:Ns,children:ze("div",{className:"relative",ref:a,children:u.map((h,S)=>{let D=S===g,I=S<g,f=D&&v&&u.length>1?{x:"100%",scale:1,opacity:1}:!1;return ze(Dn.div,{animate:{x:ld(D,I),scale:D?1:.94,opacity:D?1:0},"aria-hidden":!D,className:N("w-full",D?"relative":"pointer-events-none absolute inset-0"),initial:f,transition:y,children:ze(h.component,{overlayId:h.id,...h.props})},h.id)})})})})})]})})})}function Qf(){let{stack:e,closeAll:t,pop:o}=oe(),n=sd(),[r,s]=id(0),a=bo(null),d=bo(!1),i=bo(e),l=dd(e.length),c=e.length>0;c&&(i.current=e);let u=i.current,g=u.length-1;lr(()=>{let h=c&&!d.current;if(d.current=c,h&&s(0),a.current){let S=a.current.offsetHeight;S>0&&s(S)}},[e,c]);let b=e[e.length-1],y=u[g],v=n?{duration:.01}:Ns,p=l===1,m=ir(h=>{h.key==="Escape"&&b?.options.closeOnEscape!==!1&&o()},[b?.options.closeOnEscape,o]);lr(()=>{if(c)return document.addEventListener("keydown",m),()=>document.removeEventListener("keydown",m)},[c,m]);let w=ir(()=>{c||(i.current=[])},[c]);return ze(sr.Root,{onAnimationEnd:w,onOpenChange:h=>{h||t()},open:c,children:ks(sr.Portal,{children:[ze(sr.Overlay,{className:"fixed inset-0 z-50 bg-black/60"}),ks(sr.Content,{className:N("fixed inset-x-0 bottom-0 z-50 flex max-h-[90vh] flex-col","rounded-t-2xl border-t bg-background shadow-2xl"),children:[ze(sr.Title,{className:"sr-only",children:y?.options.title||"Dialog"}),ze("div",{className:"mx-auto mt-3 h-1.5 w-12 shrink-0 rounded-full bg-muted-foreground/20"}),ze(ad,{children:ze(Dn.div,{className:"relative flex-1 overflow-hidden",layout:c,style:{minHeight:r>0?r:"auto"},transition:Jf,children:ze("div",{className:"relative",ref:a,children:u.map((h,S)=>{let D=S===g,I=S<g,f=D&&p&&u.length>1?{x:"100%",scale:1,opacity:1}:!1;return ze(Dn.div,{animate:{x:ld(D,I),scale:D?1:.94,opacity:D?1:0},"aria-hidden":!D,className:N("w-full",D?"relative":"pointer-events-none absolute inset-0"),initial:f,transition:v,children:ze(h.component,{overlayId:h.id,...h.props})},h.id)})})})}),ze("div",{className:"h-safe-area-inset-bottom"})]})]})})}function cd(){return _t()?ze(Qf,{}):ze(Xf,{})}import{useAtom as Zf}from"jotai";import{useEffect as eg,useRef as ud}from"react";import{atom as Xt}from"jotai";var Xe=Xt([]),OT=Xt(e=>e(Xe).length>0),LT=Xt(e=>e(Xe).length);function Cs(){return`overlay-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}var MT=Xt(null,(e,t,o)=>{let n=Cs(),r={id:n,component:o.component,props:o.props??{},options:o.options??{}};return t(Xe,[r]),n}),WT=Xt(null,(e,t,o)=>{let n=Cs(),r={id:n,component:o.component,props:o.props??{},options:o.options??{}};return t(Xe,[...e(Xe),r]),n}),FT=Xt(null,(e,t)=>{let o=e(Xe);if(o.length<=1){o[0]?.options.onClose?.(),t(Xe,[]);return}o[o.length-1]?.options.onClose?.(),t(Xe,o.slice(0,-1))}),zT=Xt(null,(e,t,o)=>{let n=e(Xe),r=Cs(),s={id:r,component:o.component,props:o.props??{},options:o.options??{}};return n.length===0?t(Xe,[s]):(n[n.length-1]?.options.onClose?.(),t(Xe,[...n.slice(0,-1),s])),r}),BT=Xt(null,(e,t)=>{let o=e(Xe);for(let n of o)n.options.onClose?.();t(Xe,[])}),VT=Xt(null,(e,t,o)=>{let n=e(Xe),r=n.findIndex(s=>s.id===o);if(r!==-1){for(let s=r;s<n.length;s++)n[s].options.onClose?.();t(Xe,n.slice(0,r))}});function md(){let{stack:e}=oe(),[t,o]=Zf(Xe),n=ud(!1),r=ud(!1);return eg(()=>{if(n.current){n.current=!1;return}r.current=!0,o(e)},[e,o]),null}import{Fragment as tg,jsx as pd,jsxs as og}from"react/jsx-runtime";var fd=()=>og(tg,{children:[pd(cd,{}),pd(md,{})]});import{CircleCheckIcon as ng,InfoIcon as rg,Loader2Icon as ag,OctagonXIcon as sg,TriangleAlertIcon as ig}from"lucide-react";import{useTheme as lg}from"next-themes";import{Toaster as dg}from"sonner";import{jsx as Rn}from"react/jsx-runtime";var gd=({...e})=>{let{theme:t="system"}=lg();return Rn(dg,{theme:t,className:"toaster group",icons:{success:Rn(ng,{className:"size-4"}),info:Rn(rg,{className:"size-4"}),warning:Rn(ig,{className:"size-4"}),error:Rn(sg,{className:"size-4"}),loading:Rn(ag,{className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--border-radius":"var(--radius)"},...e})};import{usePathname as ch}from"next/navigation";import{ConnectionMode as oh,MiniMap as nh,useReactFlow as rh}from"@xyflow/react";import{useAtom as gr,useAtomValue as Xs,useSetAtom as No}from"jotai";import{useCallback as Tt,useEffect as Sa,useMemo as ah,useRef as ko,useState as Wc}from"react";import{Background as cg,ReactFlow as ug}from"@xyflow/react";import{useAtomValue as mg}from"jotai";import"@xyflow/react/dist/style.css";import{jsx as pg,jsxs as fg}from"react/jsx-runtime";var yd=({children:e,...t})=>{let o=mg(en);return fg(ug,{deleteKeyCode:["Backspace","Delete"],fitView:!0,panActivationKeyCode:null,selectionOnDrag:!1,snapToGrid:o.snapToGrid??!0,zoomOnDoubleClick:!1,zoomOnPinch:!0,...t,children:[pg(cg,{bgColor:"var(--sidebar)",color:"var(--border)",gap:24,size:2}),e]})};import{jsx as vd,jsxs as gg}from"react/jsx-runtime";var hd=({fromX:e,fromY:t,toX:o,toY:n})=>gg("g",{children:[vd("path",{className:"animated",d:`M${e},${t} C ${e+(o-e)*.5},${t} ${e+(o-e)*.5},${n} ${o},${n}`,fill:"none",stroke:"var(--color-ring)",strokeWidth:1}),vd("circle",{cx:o,cy:n,fill:"#fff",r:3,stroke:"var(--color-ring)",strokeWidth:1})]});import{useReactFlow as bg}from"@xyflow/react";import{useAtom as wg}from"jotai";import{MapPin as xg,MapPinXInside as Ng,Maximize2 as kg,ZoomIn as Cg,ZoomOut as Tg}from"lucide-react";import{cva as yg}from"class-variance-authority";import{Slot as mS}from"radix-ui";import{jsx as hg}from"react/jsx-runtime";var vg=yg("flex w-fit items-stretch [&>*]:focus-visible:z-10 [&>*]:focus-visible:relative [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md has-[>[data-slot=button-group]]:gap-2",{variants:{orientation:{horizontal:"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none",vertical:"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none"}},defaultVariants:{orientation:"horizontal"}});function jt({className:e,orientation:t,...o}){return hg("div",{role:"group","data-slot":"button-group","data-orientation":t,className:N(vg({orientation:t}),e),...o})}import{jsx as Qt,jsxs as Sg}from"react/jsx-runtime";var bd=()=>{let{zoomIn:e,zoomOut:t,fitView:o}=bg(),[n,r]=wg(kr);return Sg(jt,{orientation:"vertical",children:[Qt(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",onClick:()=>{e()},size:"icon",title:"Zoom in",variant:"secondary",children:Qt(Cg,{className:"size-4"})}),Qt(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",onClick:()=>{t()},size:"icon",title:"Zoom out",variant:"secondary",children:Qt(Tg,{className:"size-4"})}),Qt(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",onClick:()=>{o({padding:.2,duration:300})},size:"icon",title:"Fit view",variant:"secondary",children:Qt(kg,{className:"size-4"})}),Qt(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",onClick:()=>{r(!n)},size:"icon",title:n?"Hide minimap":"Show minimap",variant:"secondary",children:n?Qt(xg,{className:"size-4"}):Qt(Ng,{className:"size-4"})})]})};import{useReactFlow as Rg}from"@xyflow/react";import{useAtom as On,useAtomValue as Og}from"jotai";import{ArrowUp as Lg}from"lucide-react";import{useCallback as Mg,useEffect as Wg,useRef as xd,useState as Ts}from"react";import{toast as Ss}from"sonner";import{motion as Ag}from"motion/react";import{memo as Ig,useMemo as Pg}from"react";import{jsx as Dg}from"react/jsx-runtime";var Eg=({children:e,as:t="p",className:o,duration:n=2,spread:r=2})=>{let s=Ag.create(t),a=Pg(()=>(e?.length??0)*r,[e,r]);return Dg(s,{animate:{backgroundPosition:"0% center"},className:N("relative inline-block bg-[length:250%_100%,auto] bg-clip-text text-transparent","[--bg:linear-gradient(90deg,#0000_calc(50%-var(--spread)),var(--color-background),#0000_calc(50%+var(--spread)))] [background-repeat:no-repeat,padding-box]",o),initial:{backgroundPosition:"100% center"},style:{"--spread":`${a}px`,backgroundImage:"var(--bg), linear-gradient(var(--color-muted-foreground), var(--color-muted-foreground))"},transition:{repeat:Number.POSITIVE_INFINITY,duration:n,ease:"linear"},children:e})},wd=Ig(Eg);import{Fragment as Fg,jsx as Zt,jsxs as As}from"react/jsx-runtime";function Nd({workflowId:e,onWorkflowCreated:t}){let[o,n]=On(St),[r,s]=Ts(""),[a,d]=Ts(!1),[i,l]=Ts(!1),c=xd(null),u=xd(null),g=Og(re),[b,y]=On(ue),[v,p]=On(re),[m,w]=On(Ke),[h,S]=On(wt),[D,I]=On(Te),{fitView:k}=Rg(),f=g.filter(W=>W.type!=="add"),x=f.length>0;Wg(()=>{let W=$=>{($.metaKey||$.ctrlKey)&&$.key==="k"&&($.preventDefault(),c.current?.focus())};return window.addEventListener("keydown",W),()=>{window.removeEventListener("keydown",W)}},[]);let G=()=>{d(!0),l(!0)},te=W=>{u.current?.contains(W.relatedTarget)||(l(!1),r.trim()||d(!1))},O=Mg(async W=>{if(W.preventDefault(),!(!r.trim()||o)){n(!0);try{let $=x?{nodes:f,edges:b,name:h}:void 0;console.log("[AI Prompt] Generating workflow"),console.log("[AI Prompt] Has nodes:",x),console.log("[AI Prompt] Sending existing workflow:",!!$),$&&console.log("[AI Prompt] Existing workflow:",$.nodes.length,"nodes,",$.edges.length,"edges");let T=await U.ai.generateStream(r,z=>{let j=(z.edges||[]).map(C=>({...C,type:"animated"})),A=(z.nodes||[]).filter(C=>C.data?.type==="trigger"),B=j;if(A.length>1){let C=A[0],R=(z.nodes||[]).filter(ne=>ne.data?.type!=="trigger");z.nodes=[C,...R];let _=A.slice(1).map(ne=>ne.id);B=j.filter(ne=>!_.includes(ne.source)&&!_.includes(ne.target))}p(z.nodes||[]),y(B),z.name&&S(z.name),setTimeout(()=>{k({padding:.2,duration:200})},0)},$);console.log("[AI Prompt] Received final workflow data"),console.log("[AI Prompt] Nodes:",T.nodes?.length||0),console.log("[AI Prompt] Edges:",T.edges?.length||0);let H=(T.edges||[]).map(z=>({...z,type:"animated"}));console.log("[AI Prompt] Validating nodes:",T.nodes);let X=(T.nodes||[]).filter(z=>{let j=z.data?.type,A=z.data?.config||{};return console.log(`[AI Prompt] Checking node ${z.id}:`,{type:j,config:A,hasActionType:!!A.actionType,hasTriggerType:!!A.triggerType}),j==="trigger"?!A.triggerType:j==="action"?!A.actionType:!1});if(X.length>0)throw console.error("[AI Prompt] AI generated incomplete nodes:",X),console.error("[AI Prompt] Full workflow data:",JSON.stringify(T,null,2)),new Error(`Cannot create workflow: The AI tried to create ${X.length} incomplete node(s). The requested action type may not be supported. Please try a different description using supported actions: Send Email, Send Slack Message, Create Ticket, Database Query, HTTP Request, Generate Text, Generate Image, Scrape, or Search.`);if(e){w(e),console.log("[AI Prompt] Updating existing workflow:",e),console.log("[AI Prompt] Has existingWorkflow context:",!!$),$?(console.log("[AI Prompt] REPLACING workflow with AI response"),console.log("[AI Prompt] Replacing",f.length,"nodes with",T.nodes?.length||0,"nodes")):(console.log("[AI Prompt] Setting workflow for empty canvas"),Ss.success("Generated workflow"));let z=T.nodes?.find(j=>j.selected);z&&I(z.id),await U.workflow.update(e,{name:T.name,description:T.description,nodes:T.nodes,edges:H})}else{let z=await U.workflow.create({name:T.name||"AI Generated Workflow",description:T.description||"",nodes:T.nodes||[],edges:H});w(z.id),Ss.success("Created workflow"),t&&t(z.id)}s(""),d(!1),l(!1),c.current?.blur()}catch($){console.error("Failed to generate workflow:",$),Ss.error("Failed to generate workflow")}finally{n(!1)}}},[r,o,e,x,g,b,n,w,p,y,S,I,t,k]);return Zt(Fg,{children:Zt("div",{ref:u,className:"pointer-events-auto absolute bottom-4 left-1/2 z-10 -translate-x-1/2 px-4",style:{width:a?"min(100%, 42rem)":"20rem",transition:"width 150ms ease-out"},children:As("form",{"aria-busy":o,"aria-label":"AI workflow prompt",className:"relative flex items-center gap-2 rounded-lg border bg-background pl-3 pr-2 py-2 shadow-lg cursor-text",onClick:W=>{(W.target===W.currentTarget||W.target.tagName!=="BUTTON")&&c.current?.focus()},onMouseDown:W=>{W.target===W.currentTarget&&W.preventDefault()},onSubmit:O,role:"search",children:[o&&r?Zt(wd,{className:"flex-1 text-sm whitespace-pre-wrap",duration:2,children:r}):Zt("textarea",{"aria-label":"Describe your workflow",className:"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground resize-none h-[22px] min-h-[22px] max-h-[200px] py-0 leading-[22px]",disabled:o,onBlur:te,onChange:W=>{s(W.target.value),W.target.style.height="auto",W.target.style.height=`${W.target.scrollHeight}px`},onFocus:G,onKeyDown:W=>{W.key==="Enter"&&!W.shiftKey?(W.preventDefault(),O(W)):W.key==="Escape"&&(W.preventDefault(),s(""),d(!1),l(!1),c.current?.blur())},placeholder:i?"Describe your workflow with natural language...":"Ask AI...",ref:c,rows:1,value:r}),Zt("div",{className:"sr-only",children:o?"Generating workflow, please wait...":""}),As("div",{className:"relative size-8 shrink-0 self-end",children:[Zt(E,{"aria-label":"Focus prompt input (\u2318K)",className:"absolute inset-0 h-8 px-0 text-xs text-muted-foreground hover:bg-transparent transition-[opacity,filter] ease-out",onClick:()=>c.current?.focus(),style:!r.trim()&&!o&&!i?{opacity:1,filter:"blur(0px)",pointerEvents:"auto",visibility:"visible"}:{opacity:0,filter:"blur(2px)",pointerEvents:"none",visibility:"hidden"},type:"button",variant:"ghost",children:As("kbd",{"aria-hidden":"true",className:"pointer-events-none inline-flex h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium text-muted-foreground opacity-100",children:[Zt("span",{className:"text-xs",children:"\u2318"}),"K"]})}),Zt(E,{"aria-label":o?"Generating workflow...":"Generate workflow",className:"size-8 transition-[opacity,filter] ease-out shrink-0",disabled:!r.trim()||o,size:"sm",style:!r.trim()&&!o&&!i?{opacity:0,filter:"blur(2px)",pointerEvents:"none",visibility:"hidden"}:{opacity:1,filter:"blur(0px)",pointerEvents:"auto",visibility:"visible"},type:"submit",children:Zt(Lg,{"aria-hidden":"true",className:"size-4"})})]})]})})})}import{useReactFlow as Oy}from"@xyflow/react";import{useAtom as tt,useAtomValue as cc,useSetAtom as Jt}from"jotai";import{Check as ba,ChevronDown as Ly,Copy as My,Download as Wy,Globe as uc,Loader2 as xa,Lock as mc,Play as Fy,Plus as pc,Redo2 as fc,Save as zy,Settings2 as By,Trash2 as Vy,Undo2 as gc}from"lucide-react";import{nanoid as Hy}from"nanoid";import{useRouter as Gy}from"next/navigation";import{useEffect as $s,useRef as $y,useState as Gs}from"react";import{toast as ut}from"sonner";import{Panel as zg}from"@xyflow/react";import{jsx as Bg}from"react/jsx-runtime";var ca=({className:e,...t})=>Bg(zg,{className:N("m-4 rounded-md border bg-card p-1",e),...t});var Is="https://vercel.new/workflow-builder",_S=`[![Deploy with Vercel](https://vercel.com/button)](${Is})`;import{jsx as dr,jsxs as kd}from"react/jsx-runtime";function Cd(){return dr(E,{asChild:!0,className:"h-9 gap-1.5 border px-2 sm:px-3",size:"sm",variant:"secondary",children:kd("a",{href:Is,rel:"noopener noreferrer",target:"_blank",children:[kd("svg",{"aria-label":"Vercel logomark",className:"size-3.5",fill:"currentColor",viewBox:"0 0 76 76",children:[dr("title",{children:"Vercel logomark"}),dr("path",{d:"m38 0 38 66H0z"})]}),dr("span",{className:"text-sm sm:hidden",children:"Deploy"}),dr("span",{className:"hidden text-sm sm:inline",children:"Deploy Your Own"})]})})}import{jsx as Td}from"react/jsx-runtime";function Sd({className:e}){return Td("svg",{"aria-label":"GitHub",className:e,fill:"currentColor",role:"img",viewBox:"0 0 24 24",children:Td("path",{d:"M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z"})})}function Ad(e){if(e>=1e6){let t=(e/1e6).toFixed(1);return t.endsWith(".0")?`${Math.floor(e/1e6)}M`:`${t}M`}if(e>=1e3){let t=(e/1e3).toFixed(1);return t.endsWith(".0")?`${Math.floor(e/1e3)}k`:`${t}k`}return e.toString()}import{createContext as Vg,useContext as Hg}from"react";import{jsx as tA}from"react/jsx-runtime";var Gg=Vg(null);function Id(){return Hg(Gg)}import{jsx as Pd,jsxs as Ed}from"react/jsx-runtime";var $g="https://github.com/vercel-labs/workflow-builder-template";function Dd(){let e=Id();return Pd(E,{asChild:!0,className:"h-9 gap-1.5 px-2 sm:px-3",size:"sm",variant:"ghost",children:Ed("a",{className:"flex items-center",href:$g,rel:"noopener noreferrer",target:"_blank",children:[Pd(Sd,{className:"size-4.5"}),e!==null&&Ed("span",{className:"hidden text-sm sm:inline",children:[Ad(e)," stars"]})]})})}import{useAtom as eo,useAtomValue as Rd,useSetAtom as cr}from"jotai";import{Code as Od,Copy as Ld,Eraser as Ps,Eye as _g,EyeOff as Ug,FileCode as Md,Play as Wd,RefreshCw as Fd,Settings2 as zd,Trash2 as Es}from"lucide-react";import{useCallback as Ln,useEffect as Kg,useRef as qg,useState as jg}from"react";import{toast as Mn}from"sonner";import{Fragment as Ds,jsx as ee,jsxs as ie}from"react/jsx-runtime";var Jg={"Database Query":"database"},Yg=/[^a-zA-Z0-9\s]/g,Xg=/\s+/;function Qg(e){return e.data.type==="trigger"?e.data.config?.triggerType==="Schedule"?"vercel.json":`app/api${e.data.config?.webhookPath||"/webhook"}/route.ts`:`steps/${(e.data.config?.actionType||"action").toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"")}-step.ts`}function ua({overlayId:e}){let{push:t,closeAll:o}=oe(),[n]=eo(Te),[r]=eo(Ue),[s]=eo(re),[a]=eo(ue),[d]=eo(St),[i]=eo(Ke),[l,c]=eo(wt),u=Rd(ao),g=cr(io),b=cr(lo),y=cr(co),v=cr(Dr),p=cr(nn),[m,w]=eo(ro),[h,S]=eo($t),[D,I]=jg(!1),k=qg(null),f=s.find(V=>V.id===n),x=a.find(V=>V.id===r),G=Rd(bt);Kg(()=>{if(!(f&&u))return;let V=f.data.config?.actionType,Ie=f.data.config?.integrationId;if(!(V&&Ie))return;let Qe=ye(V)?.integration||Jg[V];if(!Qe)return;let rt=G.filter(Lt=>Lt.type===Qe);!rt.some(Lt=>Lt.id===Ie)&&rt.length>0&&g({id:f.id,data:{config:{...f.data.config,integrationId:rt[0].id}}})},[f,G,u,g]);let te=Ln((V,Ie)=>{f&&g({id:f.id,data:{config:{...f.data.config,[V]:Ie}}})},[f,g]),O=Ln(V=>{f&&g({id:f.id,data:{label:V}})},[f,g]),W=Ln(V=>{f&&g({id:f.id,data:{description:V}})},[f,g]),$=Ln(()=>{f&&g({id:f.id,data:{enabled:f.data.enabled===!1}})},[f,g]),T=Ln(()=>{t(Ee,{title:"Delete Step",message:"Are you sure you want to delete this node? This action cannot be undone.",confirmLabel:"Delete",confirmVariant:"destructive",onConfirm:()=>{f&&(b(f.id),o())}})},[f,b,o,t]),H=Ln(()=>{f&&(navigator.clipboard.writeText(Sn(f,i)),Mn.success("Code copied to clipboard"))},[f]),X=async()=>{k.current&&(I(!0),await k.current(),I(!1))},z=()=>{t(Ee,{title:"Delete All Runs",message:"Are you sure you want to delete all workflow runs? This action cannot be undone.",confirmLabel:"Delete",confirmVariant:"destructive",onConfirm:async()=>{if(i)try{await U.workflow.deleteExecutions(i),v(),k.current&&await k.current(),Mn.success("All runs deleted")}catch(V){console.error("Failed to delete runs:",V),Mn.error("Failed to delete runs")}}})},j=f&&(f.data.type!=="trigger"||f.data.config?.triggerType!=="Manual")&&f.data.config?.actionType!=="Condition",A=()=>{if(!f)switch(h==="properties"||h==="code"||h==="runs"&&u?h:"properties"){case"properties":return"Workflow";case"code":return"Code";case"runs":return"Runs";default:return"Workflow"}switch(h){case"properties":return"Properties";case"code":return"Code";case"runs":return"Runs";default:return"Properties"}},B=async V=>{if(c(V),i)try{await U.workflow.update(i,{name:V})}catch(Ie){console.error("Failed to update workflow name:",Ie)}},C=()=>{t(Ee,{title:"Clear Workflow",message:"Are you sure you want to clear all nodes and connections? This action cannot be undone.",confirmLabel:"Clear Workflow",confirmVariant:"destructive",destructive:!0,onConfirm:()=>{p()}})},R=()=>{t(Ee,{title:"Delete Workflow",message:`Are you sure you want to delete "${l}"? This will permanently delete the workflow. This cannot be undone.`,confirmLabel:"Delete Workflow",confirmVariant:"destructive",destructive:!0,onConfirm:async()=>{if(i)try{await U.workflow.delete(i),o(),Mn.success("Workflow deleted successfully"),window.location.href="/"}catch(V){console.error("Failed to delete workflow:",V),Mn.error("Failed to delete workflow. Please try again.")}}})},_=(()=>{let Ie=`${l.replace(Yg,"").split(Xg).map((Qe,rt)=>rt===0?Qe.toLowerCase():Qe.charAt(0).toUpperCase()+Qe.slice(1).toLowerCase()).join("")}Workflow`,{code:nt}=vr(s,a,{functionName:Ie});return nt})(),ne=()=>{navigator.clipboard.writeText(_),Mn.success("Code copied to clipboard")},de=()=>{r&&t(Ee,{title:"Delete Connection",message:"Are you sure you want to delete this connection? This action cannot be undone.",confirmLabel:"Delete",confirmVariant:"destructive",onConfirm:()=>{y(r),o()}})};if(x&&!f)return ie("div",{className:"flex h-full max-h-[80vh] flex-col",children:[ee(sn,{overlayId:e,title:"Connection"}),ie("div",{className:"flex-1 space-y-4 overflow-y-auto px-6 pt-4 pb-6",children:[ie("div",{className:"space-y-2",children:[ee(L,{htmlFor:"edge-id",children:"Connection ID"}),ee(ae,{disabled:!0,id:"edge-id",value:x.id})]}),ie("div",{className:"space-y-2",children:[ee(L,{htmlFor:"edge-source",children:"Source"}),ee(ae,{disabled:!0,id:"edge-source",value:x.source})]}),ie("div",{className:"space-y-2",children:[ee(L,{htmlFor:"edge-target",children:"Target"}),ee(ae,{disabled:!0,id:"edge-target",value:x.target})]}),u&&ee("div",{className:"pt-2",children:ie(E,{onClick:de,variant:"ghost",children:[ee(Es,{className:"mr-2 size-4"}),"Delete Connection"]})})]})]});if(!f){let V=h==="properties"||h==="code"||h==="runs"&&u?h:"properties";return ie("div",{className:"flex h-full max-h-[80vh] flex-col",children:[ee(sn,{overlayId:e,title:A()}),ie("div",{className:"flex-1 overflow-y-auto",children:[V==="properties"&&ie("div",{className:"space-y-4 px-6 pt-4 pb-6",children:[ie("div",{className:"space-y-2",children:[ee(L,{htmlFor:"workflow-name",children:"Workflow Name"}),ee(ae,{disabled:!u,id:"workflow-name",onChange:Ie=>B(Ie.target.value),value:l})]}),ie("div",{className:"space-y-2",children:[ee(L,{htmlFor:"workflow-id",children:"Workflow ID"}),ee(ae,{disabled:!0,id:"workflow-id",value:i||"Not saved"})]}),!u&&ee("div",{className:"rounded-lg border border-muted bg-muted/30 p-3",children:ee("p",{className:"text-muted-foreground text-sm",children:"You are viewing a public workflow. Duplicate it to make changes."})}),u&&ie("div",{className:"flex items-center gap-2 pt-2",children:[ie(E,{onClick:C,variant:"ghost",children:[ee(Ps,{className:"mr-2 size-4"}),"Clear"]}),ie(E,{onClick:R,variant:"ghost",children:[ee(Es,{className:"mr-2 size-4"}),"Delete"]})]})]}),V==="code"&&ie("div",{className:"flex flex-col",children:[ie("div",{className:"flex shrink-0 items-center justify-between border-b bg-muted/30 px-3 py-2",children:[ie("div",{className:"flex items-center gap-2",children:[ee(Md,{className:"size-3.5 text-muted-foreground"}),ee("code",{className:"text-muted-foreground text-xs",children:"workflow.ts"})]}),ie(E,{className:"h-7 text-xs",onClick:ne,size:"sm",variant:"ghost",children:[ee(Ld,{className:"mr-1 size-3"}),"Copy"]})]}),ee("div",{className:"h-[400px]",children:ee(xt,{defaultLanguage:"typescript",height:"100%",options:{readOnly:!0,minimap:{enabled:!1},lineNumbers:"on",scrollBeyondLastLine:!1,fontSize:12,wordWrap:"on"},value:_})})]}),V==="runs"&&u&&ie("div",{className:"flex h-full flex-col",children:[ie("div",{className:"flex shrink-0 items-center gap-2 border-b px-4 py-2",children:[ee(E,{className:"text-muted-foreground",disabled:D,onClick:X,size:"icon",variant:"ghost",children:ee(Fd,{className:`size-4 ${D?"animate-spin":""}`})}),ee(E,{className:"text-muted-foreground",onClick:z,size:"icon",variant:"ghost",children:ee(Ps,{className:"size-4"})})]}),ee("div",{className:"flex-1 overflow-y-auto p-4",children:ee(An,{isActive:V==="runs",onRefreshRef:k})})]})]}),ie("div",{className:"flex shrink-0 items-center justify-around border-t bg-background pb-safe",children:[ie("button",{className:`flex flex-1 flex-col items-center gap-1 py-3 font-medium text-xs transition-colors ${V==="properties"?"text-foreground":"text-muted-foreground"}`,onClick:()=>S("properties"),type:"button",children:[ee(zd,{className:"size-5"}),"Workflow"]}),ie("button",{className:`flex flex-1 flex-col items-center gap-1 py-3 font-medium text-xs transition-colors ${V==="code"?"text-foreground":"text-muted-foreground"}`,onClick:()=>S("code"),type:"button",children:[ee(Od,{className:"size-5"}),"Code"]}),u&&ie("button",{className:`flex flex-1 flex-col items-center gap-1 py-3 font-medium text-xs transition-colors ${V==="runs"?"text-foreground":"text-muted-foreground"}`,onClick:()=>S("runs"),type:"button",children:[ee(Wd,{className:"size-5"}),"Runs"]})]})]})}return ie("div",{className:"flex h-full max-h-[80vh] flex-col",children:[ee(sn,{overlayId:e,title:A()}),ie("div",{className:"flex-1 overflow-y-auto",children:[h==="properties"&&ie("div",{className:"space-y-4 px-6 pt-4 pb-6",children:[f.data.type==="action"&&!f.data.config?.actionType&&u&&ee(ta,{disabled:d,isNewlyCreated:f?.id===m,onSelectAction:V=>{te("actionType",V),f?.id===m&&w(null)}}),f.data.type==="trigger"&&ee(oa,{config:f.data.config||{},disabled:d||!u,onUpdateConfig:te,workflowId:i??void 0}),f.data.type==="action"&&f.data.config?.actionType!==void 0&&ee(Yr,{config:f.data.config||{},disabled:d||!u,isOwner:u,onUpdateConfig:te}),(f.data.type!=="action"||f.data.config?.actionType!==void 0)&&ie(Ds,{children:[ie("div",{className:"space-y-2",children:[ee(L,{htmlFor:"label",children:"Label"}),ee(ae,{disabled:d||!u,id:"label",onChange:V=>O(V.target.value),value:f.data.label})]}),ie("div",{className:"space-y-2",children:[ee(L,{htmlFor:"description",children:"Description"}),ee(ae,{disabled:d||!u,id:"description",onChange:V=>W(V.target.value),placeholder:"Optional description",value:f.data.description||""})]})]}),u&&ie("div",{className:"flex items-center gap-2 pt-2",children:[f.data.type==="action"&&ee(E,{className:"text-muted-foreground",onClick:$,size:"sm",variant:"ghost",children:f.data.enabled===!1?ie(Ds,{children:[ee(Ug,{className:"mr-2 size-4"}),"Disabled"]}):ie(Ds,{children:[ee(_g,{className:"mr-2 size-4"}),"Enabled"]})}),ie(E,{className:"text-muted-foreground",onClick:T,size:"sm",variant:"ghost",children:[ee(Es,{className:"mr-2 size-4"}),"Delete"]})]})]}),j&&ie("div",{className:`flex flex-col ${h==="code"?"":"invisible absolute -z-10"}`,children:[ie("div",{className:"flex shrink-0 items-center justify-between border-b bg-muted/30 px-3 py-2",children:[ie("div",{className:"flex items-center gap-2",children:[ee(Md,{className:"size-3.5 text-muted-foreground"}),ee("code",{className:"text-muted-foreground text-xs",children:Qg(f)})]}),ie(E,{className:"text-muted-foreground",onClick:H,size:"sm",variant:"ghost",children:[ee(Ld,{className:"mr-2 size-4"}),"Copy"]})]}),ee("div",{className:"h-[400px]",children:ee(xt,{height:"100%",language:f.data.type==="trigger"&&f.data.config?.triggerType==="Schedule"?"json":"typescript",options:{readOnly:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,fontSize:13,lineNumbers:"on",folding:!1,wordWrap:"off",padding:{top:16,bottom:16}},value:Sn(f,i)})})]}),h==="runs"&&u&&ie("div",{className:"flex h-full flex-col",children:[ie("div",{className:"flex shrink-0 items-center gap-2 border-b px-4 py-2",children:[ie(E,{className:"text-muted-foreground",disabled:D,onClick:X,size:"sm",variant:"ghost",children:[ee(Fd,{className:`mr-2 size-4 ${D?"animate-spin":""}`}),"Refresh"]}),ie(E,{className:"text-muted-foreground",onClick:z,size:"sm",variant:"ghost",children:[ee(Ps,{className:"mr-2 size-4"}),"Clear All"]})]}),ee("div",{className:"flex-1 overflow-y-auto p-4",children:ee(An,{isActive:h==="runs",onRefreshRef:k})})]})]}),ie("div",{className:"flex shrink-0 items-center justify-around border-t bg-background pb-safe",children:[ie("button",{className:`flex flex-1 flex-col items-center gap-1 py-3 font-medium text-xs transition-colors ${h==="properties"?"text-foreground":"text-muted-foreground"}`,onClick:()=>S("properties"),type:"button",children:[ee(zd,{className:"size-5"}),"Properties"]}),j&&ie("button",{className:`flex flex-1 flex-col items-center gap-1 py-3 font-medium text-xs transition-colors ${h==="code"?"text-foreground":"text-muted-foreground"}`,onClick:()=>S("code"),type:"button",children:[ee(Od,{className:"size-5"}),"Code"]}),u&&ie("button",{className:`flex flex-1 flex-col items-center gap-1 py-3 font-medium text-xs transition-colors ${h==="runs"?"text-foreground":"text-muted-foreground"}`,onClick:()=>S("runs"),type:"button",children:[ee(Wd,{className:"size-5"}),"Runs"]})]})]})}import{Download as ty,FlaskConical as oy}from"lucide-react";import{cva as Zg}from"class-variance-authority";import{jsx as Rs}from"react/jsx-runtime";var ey=Zg("relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90"}},defaultVariants:{variant:"default"}});function Bd({className:e,variant:t,...o}){return Rs("div",{"data-slot":"alert",role:"alert",className:N(ey({variant:t}),e),...o})}function Vd({className:e,...t}){return Rs("div",{"data-slot":"alert-title",className:N("col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",e),...t})}function Hd({className:e,...t}){return Rs("div",{"data-slot":"alert-description",className:N("text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",e),...t})}import{jsx as Wn,jsxs as ma}from"react/jsx-runtime";function Gd({overlayId:e,onExport:t,isDownloading:o}){let{closeAll:n}=oe();return ma(Oe,{actions:[{label:"Cancel",variant:"outline",onClick:n},{label:o?"Exporting...":"Export Project",onClick:()=>{n(),t()},loading:o}],overlayId:e,title:"Export Workflow as Code",children:[ma("div",{className:"flex items-center gap-2 text-muted-foreground",children:[Wn(ty,{className:"size-5"}),Wn("p",{className:"text-sm",children:"Export your workflow as a standalone Next.js project that you can run independently."})]}),Wn("p",{className:"mt-4 text-muted-foreground text-sm",children:"This will generate a complete Next.js project containing your workflow code. Once exported, you can run your workflow outside of the Workflow Builder, deploy it to Vercel, or integrate it into your existing applications."}),ma(Bd,{className:"mt-4",children:[Wn(oy,{className:"size-4"}),Wn(Vd,{children:"Experimental Feature"}),ma(Hd,{className:"block",children:["This feature is experimental and may have limitations. If you encounter any issues, please"," ",Wn("a",{className:"font-medium text-foreground underline underline-offset-4 hover:text-primary",href:"https://github.com/vercel-labs/workflow-builder-template/issues",rel:"noopener noreferrer",target:"_blank",children:"report them on GitHub"}),"."]})]})]})}import{Globe as ny}from"lucide-react";import{jsx as wo,jsxs as pa}from"react/jsx-runtime";function $d({overlayId:e,onConfirm:t}){let{closeAll:o}=oe();return pa(Oe,{actions:[{label:"Cancel",variant:"outline",onClick:o},{label:"Make Public",onClick:()=>{o(),t()}}],overlayId:e,title:"Make Workflow Public?",children:[pa("div",{className:"flex items-center gap-2 text-muted-foreground",children:[wo(ny,{className:"size-5 shrink-0"}),wo("p",{className:"text-sm",children:"Making this workflow public means anyone with the link can:"})]}),pa("ul",{className:"mt-3 list-inside list-disc space-y-1 text-muted-foreground text-sm",children:[wo("li",{children:"View the workflow structure and steps"}),wo("li",{children:"See action types and configurations"}),wo("li",{children:"Duplicate the workflow to their own account"})]}),wo("p",{className:"mt-4 font-medium text-foreground text-sm",children:"The following will remain private:"}),pa("ul",{className:"mt-2 list-inside list-disc space-y-1 text-muted-foreground text-sm",children:[wo("li",{children:"Your integration credentials (API keys, tokens)"}),wo("li",{children:"Execution logs and run history"})]})]})}import{useAtomValue as _d,useSetAtom as ry}from"jotai";import{AlertTriangle as ay}from"lucide-react";import{jsx as et,jsxs as ht}from"react/jsx-runtime";function Ud({overlayId:e,issues:t,onGoToStep:o,onRunAnyway:n}){let{push:r,closeAll:s}=oe(),a=ry(Wt),d=_t(),i=_d(Yt),l=_d(Do),{brokenReferences:c,missingRequiredFields:u,missingIntegrations:g}=t,b=c.length+u.length+g.length,y=(w,h)=>{o(w,h),d?r(ua,{}):s()},v=w=>{r(po,{type:w,onSuccess:()=>{a(h=>h+1)}})},p=w=>{i?.integrationType===w&&l?.enabled&&l?.isVercelUser&&i?r(i.ConsentOverlay,{onConsent:()=>{a(D=>D+1)},onManualEntry:()=>v(w)}):v(w)};return ht(Oe,{actions:[{label:"Run Anyway",variant:"outline",onClick:()=>{s(),n()}},{label:"Cancel",onClick:s}],overlayId:e,title:`Workflow Issues (${b})`,children:[ht("div",{className:"flex items-center gap-2 text-orange-500",children:[et(ay,{className:"size-5"}),et("p",{className:"text-muted-foreground text-sm",children:"This workflow has issues that may cause it to fail."})]}),ht("div",{className:"mt-4 space-y-4",children:[g.length>0&&ht("div",{className:"space-y-1",children:[et("h4",{className:"font-medium text-muted-foreground text-xs uppercase tracking-wide",children:"Missing Connections"}),g.map(w=>ht("div",{className:"flex items-center gap-3 py-1",children:[et(Bt,{className:"size-4 shrink-0",integration:w.integrationType}),ht("p",{className:"min-w-0 flex-1 text-sm",children:[et("span",{className:"font-medium",children:w.integrationLabel}),ht("span",{className:"text-muted-foreground",children:[" \u2014 ",w.nodeNames.length>3?`${w.nodeNames.slice(0,3).join(", ")} +${w.nodeNames.length-3} more`:w.nodeNames.join(", ")]})]}),et(E,{className:"shrink-0",onClick:()=>p(w.integrationType),size:"sm",variant:"outline",children:"Add"})]},w.integrationType))]}),c.length>0&&ht("div",{className:"space-y-2",children:[et("h4",{className:"font-medium text-muted-foreground text-xs uppercase tracking-wide",children:"Broken References"}),c.map(w=>ht("div",{children:[et("p",{className:"font-medium text-sm",children:w.nodeLabel}),et("div",{className:"mt-1 space-y-0.5",children:w.brokenReferences.map((h,S)=>ht("div",{className:"flex items-center gap-3 py-0.5 pl-3",children:[ht("p",{className:"min-w-0 flex-1 text-muted-foreground text-sm",children:[et("span",{className:"font-mono",children:h.displayText})," in ",h.fieldLabel]}),et(E,{className:"shrink-0",onClick:()=>y(w.nodeId,h.fieldKey),size:"sm",variant:"outline",children:"Fix"})]},`${w.nodeId}-${h.fieldKey}-${S}`))})]},w.nodeId))]}),u.length>0&&ht("div",{className:"space-y-2",children:[et("h4",{className:"font-medium text-muted-foreground text-xs uppercase tracking-wide",children:"Missing Required Fields"}),u.map(w=>ht("div",{children:[et("p",{className:"font-medium text-sm",children:w.nodeLabel}),et("div",{className:"mt-1 space-y-0.5",children:w.missingFields.map(h=>ht("div",{className:"flex items-center gap-3 py-0.5 pl-3",children:[et("p",{className:"min-w-0 flex-1 text-muted-foreground text-sm",children:h.fieldLabel}),et(E,{className:"shrink-0",onClick:()=>y(w.nodeId,h.fieldKey),size:"sm",variant:"outline",children:"Fix"})]},`${w.nodeId}-${h.fieldKey}`))})]},w.nodeId))]})]})]})}import{jsx as Os,jsxs as sy}from"react/jsx-runtime";function Kd({className:e}){return sy("svg",{className:e,fill:"none",height:"16",viewBox:"0 0 305 234",width:"16",xmlns:"http://www.w3.org/2000/svg",children:[Os("path",{className:"fill-foreground",d:"M125.776 0C120.929 1.64945e-05 117 3.9291 117 8.77539V61.4248C117 66.2711 120.929 70.2002 125.776 70.2002H160.875L161.253 70.2051C169.032 70.4023 175.301 76.6734 175.495 84.4531L175.5 84.8252V143.325C175.5 148.171 179.429 152.101 184.276 152.101H219.375L219.753 152.105C227.53 152.303 233.798 158.571 233.995 166.348L234 166.726V225.225C234 230.071 237.929 234 242.776 234H295.425C300.271 234 304.2 230.071 304.2 225.225V172.575C304.2 167.729 300.271 163.8 295.425 163.8H260.25C252.334 163.76 245.905 157.43 245.705 149.553L245.7 149.176V90.6758C245.7 85.8295 241.771 81.9004 236.925 81.9004H201.825C193.874 81.9004 187.405 75.5551 187.205 67.6523L187.2 67.2754V8.77539C187.2 3.9291 183.271 1.64951e-05 178.425 0H125.776Z"}),Os("path",{className:"fill-foreground",d:"M67.2755 81.9004C62.4293 81.9004 58.5002 85.8295 58.5002 90.6758V143.325C58.5004 148.171 62.4294 152.101 67.2755 152.101H102.375L102.753 152.105C110.53 152.303 116.798 158.571 116.995 166.348L117 166.726V225.225C117 230.071 120.929 234 125.776 234H178.425C183.271 234 187.2 230.071 187.2 225.225V172.575C187.2 167.729 183.271 163.8 178.425 163.8H143.25C135.334 163.76 128.905 157.43 128.705 149.553L128.7 149.176V90.6758C128.7 85.8295 124.771 81.9004 119.925 81.9004H67.2755Z"}),Os("path",{className:"fill-foreground",d:"M8.77454 163.8C3.92844 163.8 0.00012207 167.729 0.00012207 172.575V225.225C0.00012207 230.071 3.92844 234 8.77454 234H61.4249C66.2712 234 70.2003 230.071 70.2003 225.225V172.575C70.2003 167.729 66.2712 163.8 61.4249 163.8H8.77454Z"})]})}import{Key as Ty,LayoutDashboard as Sy,LogOut as Ay,Moon as Iy,Plug as Py,Settings as Ey,Sun as Dy}from"lucide-react";import{useTheme as Ry}from"next-themes";import sc from"next/link";import{useEffect as ic,useState as lc}from"react";import{Copy as iy,Key as ly,Trash2 as dy}from"lucide-react";import{useCallback as cy,useEffect as uy,useState as Fn}from"react";import{toast as zn}from"sonner";import{jsx as Ge,jsxs as Rt}from"react/jsx-runtime";function my({overlayId:e,onCreated:t}){let{pop:o}=oe(),[n,r]=Fn(""),[s,a]=Fn(!1);return Rt(Oe,{actions:[{label:"Create",onClick:async()=>{a(!0);try{let i=await fetch("/api/api-keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:n||null})});if(!i.ok){let c=await i.json();throw new Error(c.error||"Failed to create API key")}let l=await i.json();t(l),zn.success("API key created successfully"),o()}catch(i){console.error("Failed to create API key:",i),zn.error(i instanceof Error?i.message:"Failed to create API key")}finally{a(!1)}},loading:s}],overlayId:e,title:"Create API Key",children:[Ge("p",{className:"mb-4 text-muted-foreground text-sm",children:"Create a new API key for webhook authentication"}),Rt("div",{className:"space-y-2",children:[Ge(L,{htmlFor:"key-name",children:"Label (optional)"}),Ge(ae,{id:"key-name",onChange:i=>r(i.target.value),placeholder:"e.g., Production, Testing",value:n})]})]})}function qd({overlayId:e}){let{push:t,closeAll:o}=oe(),[n,r]=Fn(!0),[s,a]=Fn([]),[d,i]=Fn(null),[l,c]=Fn(null),u=cy(async()=>{r(!0);try{let m=await fetch("/api/api-keys");if(!m.ok)throw new Error("Failed to load API keys");let w=await m.json();a(w)}catch(m){console.error("Failed to load API keys:",m),zn.error("Failed to load API keys")}finally{r(!1)}},[]);uy(()=>{u()},[u]);let g=m=>{i(m.key??null),a(w=>[m,...w])},b=async m=>{c(m);try{if(!(await fetch(`/api/api-keys/${m}`,{method:"DELETE"})).ok)throw new Error("Failed to delete API key");a(h=>h.filter(S=>S.id!==m)),zn.success("API key deleted")}catch(w){console.error("Failed to delete API key:",w),zn.error("Failed to delete API key")}finally{c(null)}},y=m=>{t(Ee,{title:"Delete API Key",message:"Are you sure you want to delete this API key? Any webhooks using this key will stop working immediately.",confirmLabel:"Delete",confirmVariant:"destructive",destructive:!0,onConfirm:()=>b(m)})},v=m=>{navigator.clipboard.writeText(m),zn.success("Copied to clipboard")},p=m=>new Date(m).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"});return Rt(Oe,{actions:[{label:"New API Key",variant:"outline",onClick:()=>t(my,{onCreated:g})},{label:"Done",onClick:o}],overlayId:e,title:"API Keys",children:[Ge("p",{className:"-mt-2 mb-4 text-muted-foreground text-sm",children:"Manage API keys for webhook authentication"}),n?Ge("div",{className:"flex items-center justify-center py-8",children:Ge(pt,{})}):Rt("div",{className:"space-y-4",children:[d&&Rt("div",{className:"rounded-md border border-yellow-500/50 bg-yellow-500/10 p-3",children:[Ge("p",{className:"mb-2 font-medium text-sm text-yellow-600 dark:text-yellow-400",children:"Copy your API key now. You won't be able to see it again!"}),Rt("div",{className:"flex items-center gap-2",children:[Ge("code",{className:"flex-1 rounded bg-muted px-2 py-1 font-mono text-xs",children:d}),Ge(E,{onClick:()=>v(d),size:"sm",variant:"outline",children:Ge(iy,{className:"size-4"})})]}),Ge(E,{className:"mt-2",onClick:()=>i(null),size:"sm",variant:"ghost",children:"Dismiss"})]}),s.length===0?Rt("div",{className:"py-8 text-center text-muted-foreground text-sm",children:[Ge(ly,{className:"mx-auto mb-2 size-8 opacity-50"}),Ge("p",{children:"No API keys yet"}),Ge("p",{className:"text-xs",children:"Create an API key to authenticate webhook requests"})]}):Ge("div",{className:"space-y-2",children:s.map(m=>Rt("div",{className:"flex items-center justify-between rounded-md border p-3",children:[Rt("div",{className:"min-w-0 flex-1",children:[Rt("div",{className:"flex items-center gap-2",children:[Rt("code",{className:"rounded bg-muted px-1.5 py-0.5 font-mono text-xs",children:[m.keyPrefix,"..."]}),m.name&&Ge("span",{className:"truncate text-sm",children:m.name})]}),Rt("p",{className:"mt-1 text-muted-foreground text-xs",children:["Created ",p(m.createdAt),m.lastUsedAt&&` \xB7 Last used ${p(m.lastUsedAt)}`]})]}),Ge(E,{disabled:l===m.id,onClick:()=>y(m.id),size:"sm",variant:"ghost",children:l===m.id?Ge(pt,{className:"size-4"}):Ge(dy,{className:"size-4 text-destructive"})})]},m.id))})]})]})}import{useSetAtom as by}from"jotai";import{Search as wy}from"lucide-react";import{useCallback as Ws,useEffect as xy,useRef as Ny,useState as Jd}from"react";import{Pencil as py,Trash2 as fy}from"lucide-react";import{useCallback as gy,useEffect as yy,useMemo as vy,useState as Ls}from"react";import{toast as fa}from"sonner";import{jsx as _e,jsxs as Ms}from"react/jsx-runtime";var hy={database:"Database"};function jd({onIntegrationChange:e,filter:t=""}){let{push:o}=oe(),[n,r]=Ls([]),[s,a]=Ls(!0),[d,i]=Ls(null),l=gy(async()=>{try{a(!0);let v=await U.integration.getAll();r(v)}catch(v){console.error("Failed to load integrations:",v),fa.error("Failed to load integrations")}finally{a(!1)}},[]);yy(()=>{l()},[l]);let c=vy(()=>{let v=no(),p=t.toLowerCase();return n.map(m=>({...m,label:v[m.type]||hy[m.type]||m.type})).filter(m=>t?m.label.toLowerCase().includes(p)||m.name.toLowerCase().includes(p)||m.type.toLowerCase().includes(p):!0).sort((m,w)=>{let h=m.label.localeCompare(w.label);return h!==0?h:m.name.localeCompare(w.name)})},[n,t]),u=v=>{o(qr,{integration:v,onSuccess:()=>{l(),e?.()},onDelete:()=>{l(),e?.()}})},g=v=>{o(Qa,{integration:v,onSuccess:()=>{l(),e?.()}})},b=async v=>{try{i(v);let p=await U.integration.testConnection(v);p.status==="success"?fa.success(p.message||"Connection successful"):fa.error(p.message||"Connection test failed")}catch(p){console.error("Connection test failed:",p),fa.error(p instanceof Error?p.message:"Connection test failed")}finally{i(null)}};return s?_e("div",{className:"flex items-center justify-center py-8",children:_e(pt,{})}):_e("div",{className:"space-y-1",children:n.length===0?_e("div",{className:"py-8 text-center",children:_e("p",{className:"text-muted-foreground text-sm",children:"No connections configured yet"})}):c.length===0?_e("div",{className:"py-8 text-center",children:_e("p",{className:"text-muted-foreground text-sm",children:"No connections match your filter"})}):_e("div",{className:"space-y-1",children:c.map(v=>Ms("div",{className:"flex items-center justify-between rounded-md px-2 py-1.5",children:[Ms("div",{className:"flex items-center gap-2",children:[_e(Bt,{className:"size-4",integration:v.type==="ai-gateway"?"vercel":v.type}),_e("span",{className:"font-medium text-sm",children:v.label}),_e("span",{className:"text-muted-foreground text-sm",children:v.name})]}),Ms("div",{className:"flex items-center gap-1",children:[_e(E,{className:"h-7 px-2",disabled:d===v.id,onClick:()=>b(v.id),size:"sm",variant:"outline",children:d===v.id?_e(pt,{className:"size-3"}):_e("span",{className:"text-xs",children:"Test"})}),_e(E,{className:"size-7",onClick:()=>u(v),size:"icon",variant:"outline",children:_e(py,{className:"size-3"})}),_e(E,{className:"size-7",onClick:()=>g(v),size:"icon",variant:"outline",children:_e(fy,{className:"size-3"})})]})]},v.id))})})}import{jsx as $o,jsxs as Fs}from"react/jsx-runtime";function Yd({overlayId:e}){let{push:t,closeAll:o}=oe(),[n,r]=Jd(!0),[s,a]=Jd(""),d=by(Wt),i=Ny(!1),l=Ws(async()=>{r(!0);try{await new Promise(b=>setTimeout(b,0))}finally{r(!1)}},[]);xy(()=>{l(),i.current=!1,a("")},[l]);let c=Ws(()=>{i.current&&d(b=>b+1),o()},[o,d]),u=Ws(()=>{i.current=!0},[]);return Fs(Oe,{actions:[{label:"Add Connection",variant:"outline",onClick:()=>{t(ll,{onSuccess:u})}},{label:"Done",onClick:c}],overlayId:e,title:"Connections",children:[$o("p",{className:"-mt-2 mb-4 text-muted-foreground text-sm",children:"Manage API keys and credentials used by your workflows"}),n?$o("div",{className:"flex items-center justify-center py-8",children:$o(pt,{})}):Fs("div",{className:"space-y-4",children:[Fs("div",{className:"relative",children:[$o(wy,{className:"absolute top-1/2 left-3 size-4 -translate-y-1/2 text-muted-foreground"}),$o(ae,{className:"pl-9",onChange:b=>a(b.target.value),placeholder:"Filter connections...",value:s})]}),$o("div",{className:"max-h-[300px] overflow-y-auto",children:$o(jd,{filter:s,onIntegrationChange:u})})]})]})}import{useCallback as ec,useEffect as ky,useState as va}from"react";import{toast as tc}from"sonner";import{jsx as ya}from"react/jsx-runtime";function ga({className:e,...t}){return ya("div",{"data-slot":"card",className:N("text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",e),...t})}function Xd({className:e,...t}){return ya("div",{"data-slot":"card-title",className:N("leading-none font-semibold",e),...t})}function Qd({className:e,...t}){return ya("div",{"data-slot":"card-description",className:N("text-muted-foreground text-sm",e),...t})}function zs({className:e,...t}){return ya("div",{"data-slot":"card-content",className:N("px-6",e),...t})}import{jsx as ur,jsxs as Bs}from"react/jsx-runtime";function Zd({accountName:e,accountEmail:t,onNameChange:o,onEmailChange:n}){return ur(ga,{className:"border-0 py-0 shadow-none",children:Bs(zs,{className:"space-y-4 p-0",children:[Bs("div",{className:"space-y-2",children:[ur(L,{className:"ml-1",htmlFor:"accountName",children:"Name"}),ur(ae,{id:"accountName",onChange:r=>o(r.target.value),placeholder:"Your name",value:e})]}),Bs("div",{className:"space-y-2",children:[ur(L,{className:"ml-1",htmlFor:"accountEmail",children:"Email"}),ur(ae,{id:"accountEmail",onChange:r=>n(r.target.value),placeholder:"your.email@example.com",type:"email",value:t})]})]})})}import{jsx as ha,jsxs as Cy}from"react/jsx-runtime";function oc({overlayId:e}){let{closeAll:t}=oe(),[o,n]=va(!0),[r,s]=va(!1),[a,d]=va(""),[i,l]=va(""),c=ec(async()=>{try{let b=await U.user.get();d(b.name||""),l(b.email||"")}catch(b){console.error("Failed to load account:",b)}},[]),u=ec(async()=>{n(!0);try{await c()}finally{n(!1)}},[c]);return ky(()=>{u()},[u]),Cy(Oe,{actions:[{label:"Cancel",variant:"outline",onClick:t},{label:"Save",onClick:async()=>{try{s(!0),await U.user.update({name:a,email:i}),await c(),tc.success("Settings saved"),t()}catch(b){console.error("Failed to save account:",b),tc.error("Failed to save settings")}finally{s(!1)}},loading:r,disabled:o}],overlayId:e,title:"Settings",children:[ha("p",{className:"-mt-2 mb-4 text-muted-foreground text-sm",children:"Update your personal information"}),o?ha("div",{className:"flex items-center justify-center py-8",children:ha(pt,{})}):ha(Zd,{accountEmail:i,accountName:a,onEmailChange:l,onNameChange:d})]})}import{Avatar as Vs}from"radix-ui";import{jsx as Hs}from"react/jsx-runtime";function nc({className:e,...t}){return Hs(Vs.Root,{"data-slot":"avatar",className:N("relative flex size-8 shrink-0 overflow-hidden rounded-full",e),...t})}function rc({className:e,...t}){return Hs(Vs.Image,{"data-slot":"avatar-image",className:N("aspect-square size-full",e),...t})}function ac({className:e,...t}){return Hs(Vs.Fallback,{"data-slot":"avatar-fallback",className:N("bg-muted flex size-full items-center justify-center rounded-full",e),...t})}import{jsx as Ne,jsxs as Ot}from"react/jsx-runtime";var dc=()=>{let{data:e,isPending:t}=Pn(),{theme:o,setTheme:n}=Ry(),{open:r}=oe(),[s,a]=lc(null),[d,i]=lc(!1);ic(()=>{i(!0)},[]),ic(()=>{e?.user&&!e.user.name?.startsWith("Anonymous")&&U.user.get().then(b=>a(b.providerId)).catch(()=>a(null))},[e?.user]);let l=async()=>{await Zl()},c=s==="vercel"||s==="github"||s==="google",u=()=>e?.user?.name?e.user.name.split(" ").map(b=>b[0]).join("").toUpperCase().slice(0,2):e?.user?.email?e.user.email.slice(0,2).toUpperCase():"U";return t||!d?Ne("div",{className:"h-9 w-9"}):!e?.user||e.user.name==="Anonymous"||e.user.email?.startsWith("temp-")?Ne("div",{className:"flex items-center gap-2",children:Ne(E,{className:"h-9 disabled:opacity-100 disabled:[&>*]:text-muted-foreground",size:"sm",variant:"default",asChild:!0,children:Ne(sc,{href:"/auth/sign-in",children:"Sign In"})})}):Ot(Lo,{children:[Ne(Mo,{asChild:!0,children:Ne(E,{className:"relative h-9 w-9 rounded-full border p-0",variant:"ghost",children:Ot(nc,{className:"h-9 w-9",children:[Ne(rc,{alt:e?.user?.name||"",src:e?.user?.image||""}),Ne(ac,{children:u()})]})})}),Ot(Wo,{align:"end",className:"w-56",children:[Ne(Il,{children:Ot("div",{className:"flex flex-col space-y-1",children:[Ne("p",{className:"font-medium text-sm leading-none",children:e?.user?.name||"User"}),Ne("p",{className:"text-muted-foreground text-xs leading-none",children:e?.user?.email})]})}),Ne(er,{}),Ne(vt,{asChild:!0,children:Ot(sc,{href:"/dashboard",children:[Ne(Sy,{className:"size-4"}),Ne("span",{children:"Dashboard"})]})}),!c&&Ot(vt,{onClick:()=>r(oc),children:[Ne(Ey,{className:"size-4"}),Ne("span",{children:"Settings"})]}),Ot(vt,{onClick:()=>r(Yd),children:[Ne(Py,{className:"size-4"}),Ne("span",{children:"Connections"})]}),Ot(vt,{onClick:()=>r(qd),children:[Ne(Ty,{className:"size-4"}),Ne("span",{children:"API Keys"})]}),Ot(Pl,{children:[Ot(El,{children:[Ne(Dy,{className:"size-4 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0"}),Ne(Iy,{className:"absolute size-4 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100"}),Ne("span",{children:"Theme"})]}),Ne(Dl,{children:Ot(Al,{onValueChange:n,value:o,children:[Ne(ea,{value:"light",children:"Light"}),Ne(ea,{value:"dark",children:"Dark"}),Ne(ea,{value:"system",children:"System"})]})})]}),Ne(er,{}),Ot(vt,{onClick:l,children:[Ne(Ay,{className:"size-4"}),Ne("span",{children:"Logout"})]})]})]})};import{Fragment as wa,jsx as J,jsxs as Re}from"react/jsx-runtime";function yc(e,t,o){for(let n of e)t({id:n.id,data:{status:o}})}var _y={"Database Query":"database"},Uy={database:"Database"};function Ky(e){if(typeof e!="string")return[];let t=/\{\{@([^:]+):([^}]+)\}\}/g,o=e.matchAll(t);return Array.from(o).map(n=>({nodeId:n[1],displayText:n[2]}))}function bc(e,t=""){let o=[];for(let[n,r]of Object.entries(e)){let s=t?`${t}.${n}`:n;if(typeof r=="string"){let a=Ky(r);for(let d of a)o.push({field:s,...d})}else typeof r=="object"&&r!==null&&!Array.isArray(r)&&o.push(...bc(r,s))}return o}function qy(e){let t=new Set(e.map(n=>n.id)),o=[];for(let n of e){if(n.data.enabled===!1)continue;let r=n.data.config;if(!r||typeof r!="object")continue;let a=bc(r).filter(d=>!t.has(d.nodeId));if(a.length>0){let d=r.actionType,i=d?ye(d):void 0,l=i?Ea(i.configFields):[];o.push({nodeId:n.id,nodeLabel:n.data.label||i?.label||"Unnamed Step",brokenReferences:a.map(c=>{let u=l.find(g=>g.key===c.field);return{fieldKey:c.field,fieldLabel:u?.label||c.field,referencedNodeId:c.nodeId,displayText:c.displayText}})})}}return o}function jy(e){return e==null||typeof e=="string"&&e.trim()===""}function Jy(e,t){return e.showWhen?t[e.showWhen.field]===e.showWhen.equals:!0}function Yy(e){if(e.data.enabled===!1)return null;let t=e.data.config,o=t?.actionType;if(!o)return null;let n=ye(o);if(!n)return null;let s=Ea(n.configFields).filter(a=>a.required&&Jy(a,t||{})&&jy(t?.[a.key])).map(a=>({fieldKey:a.key,fieldLabel:a.label}));return s.length===0?null:{nodeId:e.id,nodeLabel:e.data.label||n.label||"Unnamed Step",missingFields:s}}function Xy(e){return e.map(Yy).filter(t=>t!==null)}function Qy(e,t){let o=new Set(t.map(a=>a.type)),n=new Set(t.map(a=>a.id)),r=new Map,s=no();for(let a of e){if(a.data.enabled===!1)continue;let d=a.data.config?.actionType;if(!d)continue;let l=ye(d)?.integration||_y[d];if(!l||!Jo(l))continue;let c=a.data.config?.integrationId;if(!(c&&n.has(c))&&!o.has(l)){let g=r.get(l)||[],b=ye(d);g.push(a.data.label||b?.label||d),r.set(l,g)}}return Array.from(r.entries()).map(([a,d])=>({integrationType:a,integrationLabel:s[a]||Uy[a]||a,nodeNames:d}))}async function Zy({workflowId:e,nodes:t,updateNodeData:o,pollingIntervalRef:n,setIsExecuting:r,setSelectedExecutionId:s}){yc(t,o,"idle");for(let a of t)a.data.type==="trigger"&&o({id:a.id,data:{status:"running"}});try{let a=await fetch(`/api/workflow/${e}/execute`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({input:{}})});if(!a.ok)throw new Error("Failed to execute workflow");let d=await a.json();s(d.executionId);let i=setInterval(async()=>{try{let l=await U.workflow.getExecutionStatus(d.executionId);for(let c of l.nodeStatuses)o({id:c.nodeId,data:{status:c.status}});l.status!=="running"&&(n.current&&(clearInterval(n.current),n.current=null),r(!1))}catch(l){console.error("Failed to poll execution status:",l)}},500);n.current=i}catch(a){console.error("Failed to execute workflow:",a),ut.error(a instanceof Error?a.message:"Failed to execute workflow"),yc(t,o,"error"),r(!1)}}function ev({currentWorkflowId:e,nodes:t,edges:o,updateNodeData:n,isExecuting:r,setIsExecuting:s,setIsSaving:a,setHasUnsavedChanges:d,setActiveTab:i,setNodes:l,setEdges:c,setSelectedNodeId:u,setSelectedExecutionId:g,userIntegrations:b}){let{open:y}=oe(),v=$y(null);$s(()=>()=>{v.current&&clearInterval(v.current)},[]);let p=async()=>{if(e){a(!0);try{await U.workflow.update(e,{nodes:t,edges:o}),d(!1)}catch(S){console.error("Failed to save workflow:",S),ut.error("Failed to save workflow. Please try again.")}finally{a(!1)}}},m=async()=>{if(!e){ut.error("Please save the workflow before executing");return}i("runs"),l(t.map(S=>({...S,selected:!1}))),c(o.map(S=>({...S,selected:!1}))),u(null),s(!0),await Zy({workflowId:e,nodes:t,updateNodeData:n,pollingIntervalRef:v,setIsExecuting:s,setSelectedExecutionId:g})},w=(S,D)=>{u(S),i("properties"),D&&setTimeout(()=>{let I=document.getElementById(D);I&&(I.focus(),I.scrollIntoView({behavior:"smooth",block:"center"}))},100)};return{handleSave:p,handleExecute:async()=>{if(r)return;let S=qy(t),D=Xy(t),I=Qy(t,b);if(S.length>0||D.length>0||I.length>0){y(Ud,{issues:{brokenReferences:S,missingRequiredFields:D,missingIntegrations:I},onGoToStep:w,onRunAnyway:m});return}await m()}}}function tv(){let[e,t]=tt(re),[o,n]=tt(ue),[r,s]=tt(fi),[a]=tt(St),d=Jt(nn),i=Jt(io),[l]=tt(Ke),[c,u]=tt(wt),[g,b]=tt(Nr),y=cc(ao),v=Gy(),[p,m]=tt(Er),[w,h]=tt(st),S=Jt(xi),D=Jt(Ni),I=Jt(on),[k]=tt(ki),[f]=tt(Ci),{data:x}=Pn(),G=Jt($t),te=Jt(Te),O=Jt(so),W=cc(bt),[$,T]=tt(Pr),[H,X]=Gs(!1),[z,j]=Gs(!1),[A,B]=Gs([]);return $s(()=>{(async()=>{try{let R=await U.workflow.getAll();B(R)}catch(R){console.error("Failed to load workflows:",R)}})()},[]),{nodes:e,edges:o,isExecuting:r,setIsExecuting:s,isGenerating:a,clearWorkflow:d,updateNodeData:i,currentWorkflowId:l,workflowName:c,setCurrentWorkflowName:u,workflowVisibility:g,setWorkflowVisibility:b,isOwner:y,router:v,isSaving:p,setIsSaving:m,hasUnsavedChanges:w,setHasUnsavedChanges:h,undo:S,redo:D,addNode:I,canUndo:k,canRedo:f,session:x,isDownloading:H,setIsDownloading:X,isDuplicating:z,setIsDuplicating:j,allWorkflows:A,setAllWorkflows:B,setActiveTab:G,setNodes:t,setEdges:n,setSelectedNodeId:te,setSelectedExecutionId:O,userIntegrations:W,triggerExecute:$,setTriggerExecute:T}}function ov(e){let{open:t}=oe(),{currentWorkflowId:o,workflowName:n,nodes:r,edges:s,updateNodeData:a,isExecuting:d,setIsExecuting:i,setIsSaving:l,setHasUnsavedChanges:c,clearWorkflow:u,setWorkflowVisibility:g,setAllWorkflows:b,setIsDownloading:y,setIsDuplicating:v,setActiveTab:p,setNodes:m,setEdges:w,setSelectedNodeId:h,setSelectedExecutionId:S,userIntegrations:D,triggerExecute:I,setTriggerExecute:k,router:f,session:x}=e,{handleSave:G,handleExecute:te}=ev({currentWorkflowId:o,nodes:r,edges:s,updateNodeData:a,isExecuting:d,setIsExecuting:i,setIsSaving:l,setHasUnsavedChanges:c,setActiveTab:p,setNodes:m,setEdges:w,setSelectedNodeId:h,setSelectedExecutionId:S,userIntegrations:D});return $s(()=>{I&&(k(!1),te())},[I,k,te]),{handleSave:G,handleExecute:te,handleClearWorkflow:()=>{t(Ee,{title:"Clear Workflow",message:"Are you sure you want to clear all nodes and connections? This action cannot be undone.",confirmLabel:"Clear Workflow",confirmVariant:"destructive",destructive:!0,onConfirm:()=>{u()}})},handleDeleteWorkflow:()=>{t(Ee,{title:"Delete Workflow",message:`Are you sure you want to delete "${n}"? This will permanently delete the workflow. This cannot be undone.`,confirmLabel:"Delete Workflow",confirmVariant:"destructive",destructive:!0,onConfirm:async()=>{if(o)try{await U.workflow.delete(o),ut.success("Workflow deleted successfully"),window.location.href="/"}catch(z){console.error("Failed to delete workflow:",z),ut.error("Failed to delete workflow. Please try again.")}}})},handleDownload:async()=>{if(!o){ut.error("Please save the workflow before downloading");return}y(!0),ut.info("Preparing workflow files for download...");try{let z=await U.workflow.download(o);if(!z.success)throw new Error(z.error||"Failed to prepare download");if(!z.files)throw new Error("No files to download");let j=(await import("jszip")).default,A=new j;for(let[_,ne]of Object.entries(z.files))A.file(_,ne);let B=await A.generateAsync({type:"blob"}),C=URL.createObjectURL(B),R=document.createElement("a");R.href=C,R.download=`${n.toLowerCase().replace(/[^a-z0-9]/g,"-")}-workflow.zip`,document.body.appendChild(R),R.click(),document.body.removeChild(R),URL.revokeObjectURL(C),ut.success("Workflow downloaded successfully!")}catch(z){ut.error(z instanceof Error?z.message:"Failed to download workflow")}finally{y(!1)}},loadWorkflows:async()=>{try{let z=await U.workflow.getAll();b(z)}catch(z){console.error("Failed to load workflows:",z)}},handleToggleVisibility:async z=>{if(o){if(z==="public"){t($d,{onConfirm:async()=>{try{await U.workflow.update(o,{visibility:"public"}),g("public"),ut.success("Workflow is now public")}catch(j){console.error("Failed to update visibility:",j),ut.error("Failed to update visibility. Please try again.")}}});return}try{await U.workflow.update(o,{visibility:z}),g(z),ut.success("Workflow is now private")}catch(j){console.error("Failed to update visibility:",j),ut.error("Failed to update visibility. Please try again.")}}},handleDuplicate:async()=>{if(o){v(!0);try{x?.user||(await Vo.signIn.anonymous(),await new Promise(j=>setTimeout(j,100)));let z=await U.workflow.duplicate(o);ut.success("Workflow duplicated successfully"),f.push(`/workflows/${z.id}`)}catch(z){console.error("Failed to duplicate workflow:",z),ut.error("Failed to duplicate workflow. Please try again.")}finally{v(!1)}}}}}function nv({workflowId:e,state:t,actions:o}){let{open:n,push:r}=oe(),[s]=tt(Te),[a]=tt(Ue),[d]=tt(re),[i]=tt(ue),l=Jt(lo),c=Jt(co),{screenToFlowPosition:u}=Oy(),g=d.find(m=>m.id===s),b=i.find(m=>m.id===a),y=g||b;if(e&&!t.isOwner||!e)return null;let v=()=>{let w=!!s?"Node":"Connection";r(Ee,{title:`Delete ${w}`,message:`Are you sure you want to delete this ${w.toLowerCase()}? This action cannot be undone.`,confirmLabel:"Delete",confirmVariant:"destructive",onConfirm:()=>{s?l(s):a&&c(a)}})},p=()=>{let m=document.querySelector(".react-flow");if(!m)return;let w=m.getBoundingClientRect(),h=w.left+w.width/2,S=w.top+w.height/2,D=u({x:h,y:S}),I=192,k=192;D.x-=I/2,D.y-=k/2;let f=20,x=20,G={...D},te=!0,O=0,W=20;for(;te&&O<W;)te=t.nodes.some(T=>{let H=Math.abs(T.position.x-G.x),X=Math.abs(T.position.y-G.y);return H<x&&X<x}),te&&(G.x+=f,G.y+=f,O+=1);let $={id:Hy(),type:"action",position:G,data:{label:"",description:"",type:"action",config:{},status:"idle"}};t.addNode($),t.setSelectedNodeId($.id),t.setActiveTab("properties")};return Re(wa,{children:[J(jt,{className:"flex lg:hidden",orientation:"vertical",children:J(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:t.isGenerating,onClick:p,size:"icon",title:"Add Step",variant:"secondary",children:J(pc,{className:"size-4"})})}),Re(jt,{className:"flex lg:hidden",orientation:"vertical",children:[J(E,{className:"border hover:bg-black/5 dark:hover:bg-white/5",onClick:()=>n(ua,{}),size:"icon",title:"Configuration",variant:"secondary",children:J(By,{className:"size-4"})}),y&&J(E,{className:"border hover:bg-black/5 dark:hover:bg-white/5",onClick:v,size:"icon",title:"Delete",variant:"secondary",children:J(Vy,{className:"size-4"})})]}),J(jt,{className:"hidden lg:flex",orientation:"horizontal",children:J(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:t.isGenerating,onClick:p,size:"icon",title:"Add Step",variant:"secondary",children:J(pc,{className:"size-4"})})}),Re(jt,{className:"flex lg:hidden",orientation:"vertical",children:[J(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:!t.canUndo||t.isGenerating,onClick:()=>t.undo(),size:"icon",title:"Undo",variant:"secondary",children:J(gc,{className:"size-4"})}),J(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:!t.canRedo||t.isGenerating,onClick:()=>t.redo(),size:"icon",title:"Redo",variant:"secondary",children:J(fc,{className:"size-4"})})]}),Re(jt,{className:"hidden lg:flex",orientation:"horizontal",children:[J(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:!t.canUndo||t.isGenerating,onClick:()=>t.undo(),size:"icon",title:"Undo",variant:"secondary",children:J(gc,{className:"size-4"})}),J(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:!t.canRedo||t.isGenerating,onClick:()=>t.redo(),size:"icon",title:"Redo",variant:"secondary",children:J(fc,{className:"size-4"})})]}),Re(jt,{className:"flex lg:hidden",orientation:"vertical",children:[J(vc,{handleSave:o.handleSave,state:t}),J(hc,{actions:o,state:t})]}),Re(jt,{className:"hidden lg:flex",orientation:"horizontal",children:[J(vc,{handleSave:o.handleSave,state:t}),J(hc,{actions:o,state:t})]}),J(rv,{actions:o,state:t}),J(av,{actions:o,state:t})]})}function vc({state:e,handleSave:t}){return Re(E,{className:"relative border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:!e.currentWorkflowId||e.isGenerating||e.isSaving,onClick:t,size:"icon",title:e.isSaving?"Saving...":"Save workflow",variant:"secondary",children:[e.isSaving?J(xa,{className:"size-4 animate-spin"}):J(zy,{className:"size-4"}),e.hasUnsavedChanges&&!e.isSaving&&J("div",{className:"absolute top-1.5 right-1.5 size-2 rounded-full bg-primary"})]})}function hc({state:e,actions:t}){let{open:o}=oe(),n=()=>{o(Gd,{onExport:t.handleDownload,isDownloading:e.isDownloading})};return J(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:e.isDownloading||e.nodes.length===0||e.isGenerating||!e.currentWorkflowId,onClick:n,size:"icon",title:e.isDownloading?"Preparing download...":"Export workflow as code",variant:"secondary",children:e.isDownloading?J(xa,{className:"size-4 animate-spin"}):J(Wy,{className:"size-4"})})}function rv({state:e,actions:t}){let o=e.workflowVisibility==="public";return Re(Lo,{children:[J(Mo,{asChild:!0,children:J(E,{className:"border hover:bg-black/5 dark:hover:bg-white/5",disabled:!e.currentWorkflowId||e.isGenerating,size:"icon",title:o?"Public workflow":"Private workflow",variant:"secondary",children:o?J(uc,{className:"size-4"}):J(mc,{className:"size-4"})})}),Re(Wo,{align:"end",children:[Re(vt,{className:"flex items-center gap-2",onClick:()=>t.handleToggleVisibility("private"),children:[J(mc,{className:"size-4"}),"Private",!o&&J(ba,{className:"ml-auto size-4"})]}),Re(vt,{className:"flex items-center gap-2",onClick:()=>t.handleToggleVisibility("public"),children:[J(uc,{className:"size-4"}),"Public",o&&J(ba,{className:"ml-auto size-4"})]})]})]})}function av({state:e,actions:t}){return J(E,{className:"border hover:bg-black/5 disabled:opacity-100 dark:hover:bg-white/5 disabled:[&>svg]:text-muted-foreground",disabled:e.isExecuting||e.nodes.length===0||e.isGenerating,onClick:()=>t.handleExecute(),size:"icon",title:"Run Workflow",variant:"secondary",children:e.isExecuting?J(xa,{className:"size-4 animate-spin"}):J(Fy,{className:"size-4"})})}function sv({isDuplicating:e,onDuplicate:t}){return Re(E,{className:"h-9 border hover:bg-black/5 dark:hover:bg-white/5",disabled:e,onClick:t,size:"sm",title:"Duplicate to your workflows",variant:"secondary",children:[e?J(xa,{className:"mr-2 size-4 animate-spin"}):J(My,{className:"mr-2 size-4"}),"Duplicate"]})}function iv({workflowId:e,state:t,actions:o}){return Re("div",{className:"flex flex-col gap-1",children:[J("div",{className:"flex h-9 max-w-[160px] items-center overflow-hidden rounded-md border bg-secondary text-secondary-foreground sm:max-w-none",children:Re(Lo,{onOpenChange:n=>n&&o.loadWorkflows(),children:[Re(Mo,{className:"flex h-full cursor-pointer items-center gap-2 px-3 font-medium text-sm transition-all hover:bg-black/5 dark:hover:bg-white/5",children:[J(Kd,{className:"size-4 shrink-0"}),J("p",{className:"truncate font-medium text-sm",children:e?t.workflowName:Re(wa,{children:[J("span",{className:"sm:hidden",children:"New"}),J("span",{className:"hidden sm:inline",children:"New Workflow"})]})}),J(Ly,{className:"size-3 shrink-0 opacity-50"})]}),Re(Wo,{align:"start",className:"w-64",children:[J(vt,{asChild:!0,className:"flex items-center justify-between",children:Re("a",{href:"/",children:["New Workflow"," ",!e&&J(ba,{className:"size-4 shrink-0"})]})}),J(er,{}),t.allWorkflows.length===0?J(vt,{disabled:!0,children:"No workflows found"}):t.allWorkflows.filter(n=>n.name!=="__current__").map(n=>Re(vt,{className:"flex items-center justify-between",onClick:()=>t.router.push(`/workflows/${n.id}`),children:[J("span",{className:"truncate",children:n.name}),n.id===t.currentWorkflowId&&J(ba,{className:"size-4 shrink-0"})]},n.id))]})]})}),e&&!t.isOwner&&J("span",{className:"text-muted-foreground text-xs uppercase lg:hidden",children:"Read-only"})]})}var wc=({workflowId:e})=>{let t=tv(),o=ov(t);return Re(wa,{children:[J(ca,{className:"flex flex-col gap-2 rounded-none border-none bg-transparent p-0 lg:flex-row lg:items-center",position:"top-left",children:Re("div",{className:"flex items-center gap-2",children:[J(iv,{actions:o,state:t,workflowId:e}),e&&!t.isOwner&&J("span",{className:"hidden text-muted-foreground text-xs uppercase lg:inline",children:"Read-only"})]})}),J("div",{className:"pointer-events-auto absolute top-4 right-4 z-10",children:Re("div",{className:"flex flex-col-reverse items-end gap-2 lg:flex-row lg:items-center",children:[J(nv,{actions:o,state:t,workflowId:e}),Re("div",{className:"flex items-center gap-2",children:[!e&&Re(wa,{children:[J(Dd,{}),J(Cd,{})]}),e&&!t.isOwner&&J(sv,{isDuplicating:t.isDuplicating,onDuplicate:o.handleDuplicate}),J(dc,{})]})]})})]})};import"@xyflow/react/dist/style.css";import{PlayCircle as sh,Zap as ih}from"lucide-react";import{nanoid as Qs}from"nanoid";import{BaseEdge as kc,getBezierPath as lv,getSimpleBezierPath as dv,getSmoothStepPath as cv,Position as _o,useInternalNode as xc}from"@xyflow/react";import{useAtomValue as uv}from"jotai";import{jsx as Cc}from"react/jsx-runtime";var mv=({id:e,sourceX:t,sourceY:o,targetX:n,targetY:r,sourcePosition:s,targetPosition:a,selected:d})=>{let[i]=dv({sourceX:t,sourceY:o,sourcePosition:s,targetX:n,targetY:r,targetPosition:a});return Cc(kc,{className:"stroke-1",id:e,path:i,style:{stroke:d?"var(--muted-foreground)":"var(--border)",strokeDasharray:"5, 5"}})},Nc=(e,t,o)=>{let n=t===_o.Left?"target":"source",r=e.internals.handleBounds?.[n],s=o?r?.find(c=>c.id===o):r?.find(c=>c.position===t);if(!s)return[0,0];let a=s.width/2,d=s.height/2;switch(t){case _o.Left:a=0;break;case _o.Right:a=s.width;break;case _o.Top:d=0;break;case _o.Bottom:d=s.height;break;default:throw new Error(`Invalid handle position: ${t}`)}let i=e.internals.positionAbsolute.x+s.x+a,l=e.internals.positionAbsolute.y+s.y+d;return[i,l]},pv=(e,t,o,n)=>{let r=_o.Right,[s,a]=Nc(e,r,o),d=_o.Left,[i,l]=Nc(t,d,n);return{sx:s,sy:a,tx:i,ty:l,sourcePos:r,targetPos:d}},fv=({id:e,source:t,target:o,sourceHandleId:n,targetHandleId:r,style:s,selected:a})=>{let d=uv(en),i=xc(t),l=xc(o);if(!(i&&l))return null;let{sx:c,sy:u,tx:g,ty:b,sourcePos:y,targetPos:v}=pv(i,l,n,r),p={sourceX:c,sourceY:u,sourcePosition:y,targetX:g,targetY:b,targetPosition:v},[m]=d.edgeStyle==="bezier"?lv(p):cv(p);return Cc(kc,{id:e,path:m,style:{...s,stroke:a?"var(--muted-foreground)":"var(--border)",strokeWidth:2,animation:"dashdraw 0.5s linear infinite",strokeDasharray:5}})},_s={Temporary:mv,Animated:fv};import{useAtomValue as mr}from"jotai";import{AlertTriangle as Av,Check as Iv,Code as Pv,EyeOff as Ic,XCircle as Ev,Zap as Dc}from"lucide-react";import Pc from"next/image";import{memo as Dv,useState as Rv}from"react";import{useAtomValue as yv}from"jotai";import{Check as Sc,Circle as vv,EyeOff as hv,ListOrdered as bv,Loader2 as wv,XCircle as Ac}from"lucide-react";import{memo as xv,useEffect as Nv,useState as kv}from"react";import{Handle as Na,Position as ka}from"@xyflow/react";import{Fragment as gv,jsx as xo,jsxs as Us}from"react/jsx-runtime";var Tc=({className:e})=>Us(gv,{children:[xo("style",{children:`
202
202
  @property --angle {
203
203
  syntax: "<angle>";
204
204
  initial-value: 0deg;
@@ -223,4 +223,4 @@ export async function POST(request: NextRequest) {
223
223
  transparent 100%
224
224
  );
225
225
  }
226
- `}),bo("div",{className:N("pointer-events-none absolute inset-0 rounded-[inherit] animate-border-mask",e),children:Vs("svg",{className:"h-full w-full overflow-visible",xmlns:"http://www.w3.org/2000/svg",children:[bo("defs",{children:Vs("linearGradient",{id:"gradient-glow",x1:"0%",y1:"0%",x2:"100%",y2:"100%",children:[bo("stop",{offset:"0%",stopColor:"#60a5fa"}),bo("stop",{offset:"50%",stopColor:"#3b82f6"}),bo("stop",{offset:"100%",stopColor:"#60a5fa"})]})}),bo("rect",{x:"1",y:"1",width:"calc(100% - 2px)",height:"calc(100% - 2px)",rx:"6",fill:"none",stroke:"url(#gradient-glow)",strokeWidth:"2",style:{filter:"drop-shadow(0 0 4px #3b82f6)"}})]})}),bo("div",{className:N("pointer-events-none absolute inset-0 rounded-[inherit] border-2 border-blue-500/10",e)})]});import{jsx as zt,jsxs as Hs}from"react/jsx-runtime";var Go=({handles:e,className:t,status:o,...n})=>Hs(ma,{className:N("node-container relative gap-0 rounded-md bg-card p-0 transition-all duration-200",o==="success"&&"border-green-500 border-2",o==="error"&&"border-red-500 border-2",t),...n,children:[o==="running"&&zt(vc,{}),e.targetHandles&&e.targetHandles.length>0?zt("div",{className:"absolute top-0 -left-[4px] flex h-full flex-col items-start justify-center gap-1",children:e.targetHandles.map(r=>Hs("div",{className:"relative flex items-center",children:[zt(ba,{id:r.id,position:wa.Left,style:{position:"relative",top:"auto",left:"auto",transform:"none"},type:"target"}),r.label&&zt("span",{className:"ml-1.5 text-muted-foreground text-[9px] leading-none",children:r.label})]},r.id))}):e.target&&zt(ba,{position:wa.Left,type:"target"}),e.sourceHandles&&e.sourceHandles.length>0?zt("div",{className:"absolute top-0 -right-[4px] flex h-full flex-col items-end justify-center gap-1",children:e.sourceHandles.map((r,i)=>Hs("div",{className:"relative flex items-center",children:[r.label&&zt("span",{className:"mr-1.5 text-muted-foreground text-[9px] leading-none",children:r.label}),zt(ba,{id:r.id,position:wa.Right,style:{position:"relative",top:"auto",right:"auto",transform:"none"},type:"source"})]},r.id))}):e.source&&zt(ba,{position:wa.Right,type:"source"}),n.children]});var $o=e=>zt(_d,{...e}),_o=e=>zt(Ud,{...e});import{jsx as et,jsxs as Zt}from"react/jsx-runtime";function lv({status:e}){switch(e){case"pending":return et(tv,{className:"size-3 text-muted-foreground"});case"running":return et(rv,{className:"size-3 animate-spin text-blue-400"});case"success":return et(hc,{className:"size-3 text-green-400"});case"error":return et(bc,{className:"size-3 text-red-400"})}}function dv({index:e,name:t,status:o}){return Zt("div",{className:N("flex items-center gap-1.5 rounded px-1.5 py-0.5 text-[10px] leading-tight transition-colors",o==="running"&&"bg-blue-500/10",o==="success"&&"bg-green-500/10",o==="error"&&"bg-red-500/10"),children:[Zt("span",{className:"w-3 shrink-0 text-right text-muted-foreground",children:[e,"."]}),et(lv,{status:o}),et("span",{className:"min-w-0 flex-1 truncate",children:t})]})}function cv({status:e}){return!e||e==="idle"||e==="running"?null:Zt("div",{className:N("absolute top-2 right-2 rounded-full p-1",e==="success"&&"bg-green-500/50",e==="error"&&"bg-red-500/50"),children:[e==="success"&&et(hc,{className:"size-3.5 text-white",strokeWidth:2.5}),e==="error"&&et(bc,{className:"size-3.5 text-white",strokeWidth:2.5})]})}var Gs=av(({data:e,selected:t,id:o})=>{let n=ev(Xo),[r,i]=iv({}),a=e.status,l=e.enabled===!1,s=e.config?.workflowIds||"[]",d=[];try{let y=JSON.parse(s);Array.isArray(y)&&(d=y)}catch{d=s.split(",").map(y=>y.trim()).filter(Boolean)}sv(()=>{if(d.length===0)return;let y=!1;async function m(){try{let b=await fetch("/api/workflow-builder/workflows");if(!b.ok)return;let g=await b.json(),S=g.workflows||g||[],D={};for(let I of S)D[I.id]=I.name;y||i(D)}catch{}}return m(),()=>{y=!0}},[s]);let u=n[o]?.output,f=u?.results,v=new Map;if(f)for(let y of f)v.set(y.workflowId,y.success?"success":"error");function C(y,m){return f&&v.get(y)||"pending"}let h=d.length===0;return Zt(Go,{className:N("relative flex w-56 flex-col shadow-none transition-all duration-150 ease-out",t&&"border-primary",l&&"opacity-50"),"data-testid":`action-node-${o}`,handles:{target:!0,source:!0},status:a,children:[l&&et("div",{className:"absolute top-2 left-2 rounded-full bg-gray-500/50 p-1",children:et(ov,{className:"size-3.5 text-white"})}),et(cv,{status:a}),Zt("div",{className:"flex items-center gap-2 border-b px-3 py-2.5",children:[et(nv,{className:"size-4 shrink-0 text-emerald-300",strokeWidth:1.5}),Zt("div",{className:"min-w-0 flex-1",children:[et($o,{className:"truncate text-xs font-medium",children:e.label||"Run Workflows in Sequence"}),!h&&Zt(_o,{className:"text-[10px]",children:[d.length," workflow",d.length!==1?"s":""]})]})]}),et("div",{className:"flex flex-col gap-0.5 px-2 py-2",children:h?et("p",{className:"px-1 py-2 text-center text-[10px] text-muted-foreground",children:"No workflows configured"}):d.map((y,m)=>et(dv,{index:m+1,name:r[y]||y.slice(0,12)+"...",status:C(y,m)},`${y}-${m}`))}),u&&f&&Zt("div",{className:"border-t px-3 py-1.5 text-[10px] text-muted-foreground",children:[u.succeeded||0," passed",(u.failed||0)>0&&Zt("span",{className:"text-red-400",children:[" / ",u.failed," failed"]})]})]})});Gs.displayName="SequenceNode";import{Fragment as Tv,jsx as Se,jsxs as eo}from"react/jsx-runtime";var vv=e=>({"gpt-5":"GPT-5","openai/gpt-5.1-instant":"GPT-5.1 Instant","openai/gpt-5.1-codex":"GPT-5.1 Codex","openai/gpt-5.1-codex-mini":"GPT-5.1 Codex Mini","openai/gpt-5.1-thinking":"GPT-5.1 Thinking","gpt-4":"GPT-4","gpt-4o":"GPT-4o","gpt-4o-mini":"GPT-4o Mini","claude-3-5-sonnet":"Claude 3.5","claude-3-opus":"Claude 3 Opus","anthropic/claude-opus-4.5":"Claude Opus 4.5","anthropic/claude-sonnet-4.5":"Claude Sonnet 4.5","anthropic/claude-haiku-4.5":"Claude Haiku 4.5","google/gemini-3-pro-preview":"Gemini 3 Pro Preview","google/gemini-2.5-flash-lite":"Gemini 2.5 Flash Lite","google/gemini-2.5-flash":"Gemini 2.5 Flash","google/gemini-2.5-pro":"Gemini 2.5 Pro","meta/llama-4-scout":"Llama 4 Scout","meta/llama-3.3-70b":"Llama 3.3 70B","meta/llama-3.1-8b":"Llama 3.1 8B","moonshotai/kimi-k2-0905":"Kimi K2","openai/gpt-oss-120b":"GPT OSS 120B","openai/gpt-oss-safeguard-20b":"GPT OSS Safeguard 20B","openai/gpt-oss-20b":"GPT OSS 20B","o1-preview":"o1 Preview","o1-mini":"o1 Mini","bfl/flux-2-pro":"FLUX.2 Pro","bfl/flux-1-pro":"FLUX.1 Pro","openai/dall-e-3":"DALL-E 3","google/imagen-4.0-generate":"Imagen 4.0"})[e]||e,Nc={"HTTP Request":"System","Database Query":"Database",Condition:"Condition","Execute Code":"System",Loop:"Loop",Switch:"Switch",Merge:"Merge","Run Workflow":"System","Run Workflows in Sequence":"System"},hv=e=>{if(Nc[e])return Nc[e];let t=ge(e);return t?.integration&&Rt(t.integration)?.label||"System"};function bv(e){return typeof e=="object"&&e!==null&&"base64"in e&&typeof e.base64=="string"&&e.base64.length>100}var wv=e=>{if(["Database Query"].includes(e))return!0;let o=ge(e);return o?Ko(o.integration):!1},xv=e=>{switch(e){case"HTTP Request":return Jo.icon;case"Database Query":return jo.icon;case"Execute Code":return Se(pv,{className:"size-12 text-green-300",strokeWidth:1.5});case"Condition":return qo.icon;case"Loop":return jr.icon;case"Merge":return wn.icon;case"Switch":return xn.icon;case"Run Workflow":return Jr.icon;case"Run Workflows in Sequence":return Yr.icon;default:break}let t=ge(e);if(t){let o=Rt(t.integration);if(o?.icon){let n=o.icon;return Se(n,{className:"size-12"})}}return Se(kc,{className:"size-12 text-amber-300",strokeWidth:1.5})},Nv=({status:e})=>!e||e==="idle"||e==="running"?null:eo("div",{className:N("absolute top-2 right-2 rounded-full p-1",e==="success"&&"bg-green-500/50",e==="error"&&"bg-red-500/50"),children:[e==="success"&&Se(mv,{className:"size-3.5 text-white",strokeWidth:2.5}),e==="error"&&Se(fv,{className:"size-3.5 text-white",strokeWidth:2.5})]}),kv=({model:e})=>e?Se("div",{className:"rounded-full border border-muted-foreground/50 px-2 py-0.5 font-medium text-[10px] text-muted-foreground",children:vv(e)}):null;function Cv({base64:e}){let[t,o]=yv(!1);return eo(Tv,{children:[Se("button",{className:"relative size-12 cursor-zoom-in overflow-hidden rounded-lg transition-transform hover:scale-105",onClick:n=>{n.stopPropagation(),o(!0)},type:"button",children:Se(xc,{alt:"Generated image",className:"object-cover",fill:!0,sizes:"48px",src:`data:image/png;base64,${e}`,unoptimized:!0})}),Se(sa,{onOpenChange:o,open:t,children:eo(Yl,{className:"max-w-3xl p-2",showCloseButton:!1,children:[Se(Xl,{className:"sr-only",children:"Generated Image"}),Se("div",{className:"relative aspect-square w-full overflow-hidden rounded-lg",children:Se(xc,{alt:"Generated image",className:"object-contain",fill:!0,sizes:"(max-width: 768px) 100vw, 768px",src:`data:image/png;base64,${e}`,unoptimized:!0})})]})})]})}var $s=gv(({data:e,selected:t,id:o})=>{let n=cr(ro),r=cr(Xo),i=cr(Tr),a=cr(ni),l=cr(hr);if(!e)return null;let s=e.config?.actionType||"",d=e.status;if(s==="Run Workflows in Sequence")return Se(Gs,{data:e,id:o,selected:t});let c=r[o],u=n&&s==="Generate Image"&&c?.output&&bv(c.output);if(!s){let $=e.enabled===!1;return eo(Go,{className:N("flex h-48 w-48 flex-col items-center justify-center shadow-none transition-all duration-150 ease-out",t&&"border-primary",$&&"opacity-50"),"data-testid":`action-node-${o}`,handles:{target:!0,source:!0},status:d,children:[$&&Se("div",{className:"absolute top-2 left-2 rounded-full bg-gray-500/50 p-1",children:Se(wc,{className:"size-3.5 text-white"})}),eo("div",{className:"flex flex-col items-center justify-center gap-3 p-6",children:[Se(kc,{className:"size-12 text-muted-foreground",strokeWidth:1.5}),eo("div",{className:"flex flex-col items-center gap-1 text-center",children:[Se($o,{className:"text-base",children:e.label||"Action"}),Se(_o,{className:"text-xs",children:"Select an action"})]})]})]})}let f=ge(s),v=e.label||f?.label||s,C=e.description||hv(s),h=wv(s),y=i.has(o),m=e.config?.integrationId,b=m&&a.has(m),g=l&&h&&!b&&!y,D=s==="Generate Text"?e.config?.aiModel||"meta/llama-4-scout":s==="Generate Image"?e.config?.imageModel||"google/imagen-4.0-generate":null,I=e.enabled===!1,x=s==="Switch",p=s==="Condition",w;if(x){let $=Number(e.config?.routeCount)||4;w=[];for(let T=0;T<$;T++){let H=e.config?.[`routeName${T}`]||`Route ${T+1}`;w.push({id:`route-${T}`,label:H})}w.push({id:"route-default",label:"Default"})}else p&&(w=[{id:"condition-true",label:"True"},{id:"condition-false",label:"False"}]);let G=x||p,te=s==="Merge",O;if(te){let $=Number(e.config?.inputCount)||2;O=[];for(let T=0;T<$;T++)O.push({id:`input-${T}`,label:`Input ${T+1}`})}return eo(Go,{className:N("relative flex flex-col items-center justify-center shadow-none transition-all duration-150 ease-out",G||te?"min-h-48 w-48":"h-48 w-48",t&&"border-primary",I&&"opacity-50"),"data-testid":`action-node-${o}`,handles:{target:!te,source:!G,sourceHandles:w,targetHandles:O},status:d,children:[I&&Se("div",{className:"absolute top-2 left-2 rounded-full bg-gray-500/50 p-1",children:Se(wc,{className:"size-3.5 text-white"})}),!I&&g&&Se("div",{className:"absolute top-2 left-2 rounded-full bg-orange-500/50 p-1",children:Se(uv,{className:"size-3.5 text-white"})}),Se(Nv,{status:d}),eo("div",{className:"flex flex-col items-center justify-center gap-3 p-6",children:[u?Se(Cv,{base64:c.output.base64}):xv(s),eo("div",{className:"flex flex-col items-center gap-1 text-center",children:[Se($o,{className:"text-base",children:v}),C&&Se(_o,{className:"text-xs",children:C}),D&&Se(kv,{model:D})]})]})]})});$s.displayName="ActionNode";import{Plus as Sv}from"lucide-react";import{jsx as Fn,jsxs as xa}from"react/jsx-runtime";function Cc({data:e}){return xa("div",{className:"flex flex-col items-center justify-center gap-8 rounded-lg border border-border border-dashed bg-background/50 p-8 backdrop-blur-sm",children:[xa("div",{className:"text-center",children:[Fn("h1",{className:"mb-2 font-bold text-3xl",children:"AI Workflow Builder Template"}),xa("p",{className:"text-muted-foreground text-sm",children:["Powered by"," ",Fn("a",{className:"underline underline-offset-2 transition duration-200 ease-out hover:text-foreground",href:"https://useworkflow.dev/",rel:"noopener noreferrer",target:"_blank",children:"Workflow"}),","," ",Fn("a",{className:"underline underline-offset-2 transition duration-200 ease-out hover:text-foreground",href:"https://ai-sdk.dev/",rel:"noopener noreferrer",target:"_blank",children:"AI SDK"}),","," ",Fn("a",{className:"underline underline-offset-2 transition duration-200 ease-out hover:text-foreground",href:"https://vercel.com/ai-gateway",rel:"noopener noreferrer",target:"_blank",children:"AI Gateway"})," ","and"," ",Fn("a",{className:"underline underline-offset-2 transition duration-200 ease-out hover:text-foreground",href:"https://ai-sdk.dev/elements",rel:"noopener noreferrer",target:"_blank",children:"AI Elements"})]})]}),xa(E,{className:"gap-2 shadow-lg",onClick:e.onClick,size:"default",children:[Fn(Sv,{className:"size-4"}),"Add a Step"]})]})}import{Check as Av,Clock as Iv,Play as Pv,Webhook as Ev,XCircle as Dv}from"lucide-react";import{memo as Rv}from"react";import{jsx as ur,jsxs as Na}from"react/jsx-runtime";var _s=Rv(({data:e,selected:t})=>{if(!e)return null;let o=e.config?.triggerType||"Manual",n=e.label||o,r=e.description||"Trigger",i=e.status,a=Pv;return o==="Schedule"?a=Iv:o==="Webhook"&&(a=Ev),Na(Go,{className:N("flex h-48 w-48 flex-col items-center justify-center shadow-none transition-all duration-150 ease-out",t&&"border-primary"),handles:{target:!1,source:!0},status:i,children:[i&&i!=="idle"&&i!=="running"&&Na("div",{className:N("absolute top-2 right-2 rounded-full p-1",i==="success"&&"bg-green-500/50",i==="error"&&"bg-red-500/50"),children:[i==="success"&&ur(Av,{className:"size-3.5 text-white",strokeWidth:2.5}),i==="error"&&ur(Dv,{className:"size-3.5 text-white",strokeWidth:2.5})]}),Na("div",{className:"flex flex-col items-center justify-center gap-3 p-6",children:[ur(a,{className:"size-12 text-blue-500",strokeWidth:1.5}),Na("div",{className:"flex flex-col items-center gap-1 text-center",children:[ur($o,{className:"text-base",children:n}),r&&ur(_o,{className:"text-xs",children:r})]})]})]})});_s.displayName="TriggerNode";import{useAtomValue as Ov,useSetAtom as mr}from"jotai";import{Link2Off as Lv,Plus as Mv,Trash2 as Wv}from"lucide-react";import{nanoid as Fv}from"nanoid";import{useCallback as Bn,useEffect as zv,useRef as Bv}from"react";import{jsx as zn,jsxs as Ac}from"react/jsx-runtime";function Tc({menuState:e,onClose:t}){let o=Ov(re),n=mr(so),r=mr(io),i=mr(Qo),a=mr(Ce),l=mr(Ht),{open:s}=oe(),d=Bv(null),c=Bn(()=>{if(e?.nodeId){let h=e.nodeId;t(),s(Pe,{title:"Delete Step",message:"Are you sure you want to delete this node? This action cannot be undone.",confirmLabel:"Delete",confirmVariant:"destructive",onConfirm:()=>{n(h)}})}},[e,n,t,s]),u=Bn(()=>{if(e?.edgeId){let h=e.edgeId;t(),s(Pe,{title:"Delete Connection",message:"Are you sure you want to delete this connection? This action cannot be undone.",confirmLabel:"Delete",confirmVariant:"destructive",onConfirm:()=>{r(h)}})}},[e,r,t,s]),f=Bn(()=>{if(e?.flowPosition){let y={id:Fv(),type:"action",position:{x:e.flowPosition.x,y:e.flowPosition.y-96},data:{label:"",description:"",type:"action",config:{},status:"idle"},selected:!0};i(y),a(y.id),l("properties")}t()},[e,i,a,l,t]);if(zv(()=>{if(!e)return;let h=b=>{d.current&&!d.current.contains(b.target)&&t()},y=b=>{b.key==="Escape"&&t()},m=setTimeout(()=>{document.addEventListener("mousedown",h),document.addEventListener("keydown",y)},0);return()=>{clearTimeout(m),document.removeEventListener("mousedown",h),document.removeEventListener("keydown",y)}},[e,t]),!e)return null;let v=!!(e.nodeId&&o.find(h=>h.id===e.nodeId)?.data.type==="trigger"),C=()=>e.nodeId&&o.find(y=>y.id===e.nodeId)?.data.label||"Step";return Ac("div",{className:"fade-in-0 zoom-in-95 fixed z-50 min-w-[8rem] animate-in overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md",ref:d,style:{left:e.position.x,top:e.position.y},children:[e.type==="node"&&zn(Us,{disabled:v,icon:zn(Wv,{className:"size-4"}),label:`Delete ${C()}`,onClick:c,variant:"destructive"}),e.type==="edge"&&zn(Us,{icon:zn(Lv,{className:"size-4"}),label:"Delete Connection",onClick:u,variant:"destructive"}),e.type==="pane"&&zn(Us,{icon:zn(Mv,{className:"size-4"}),label:"Add Step",onClick:f})]})}function Us({icon:e,label:t,onClick:o,variant:n="default",disabled:r}){return Ac("button",{className:N("relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none","hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground",n==="destructive"&&"text-destructive hover:bg-destructive/10 hover:text-destructive focus:bg-destructive/10 focus:text-destructive",r&&"pointer-events-none opacity-50"),disabled:r,onClick:o,type:"button",children:[e,t]})}function Sc(e,t){let o=Bn((i,a)=>{i.preventDefault(),t({type:"node",position:{x:i.clientX,y:i.clientY},nodeId:a.id})},[t]),n=Bn((i,a)=>{i.preventDefault(),t({type:"edge",position:{x:i.clientX,y:i.clientY},edgeId:a.id})},[t]),r=Bn(i=>{i.preventDefault();let a=e({x:i.clientX,y:i.clientY});t({type:"pane",position:{x:i.clientX,y:i.clientY},flowPosition:a})},[e,t]);return{onNodeContextMenu:o,onEdgeContextMenu:n,onPaneContextMenu:r}}import{jsx as Uo,jsxs as Pc}from"react/jsx-runtime";var Kv=[{type:"trigger",label:"",description:"",displayLabel:"Trigger",icon:_v,defaultConfig:{triggerType:"Manual"}},{type:"action",label:"",description:"",displayLabel:"Action",icon:Uv,defaultConfig:{}}],qv={animated:Bs.Animated,temporary:Bs.Temporary};function Ec(){let[e,t]=pr(re),[o,n]=pr(ce),[r]=pr(kt),i=Ks(Ue),[a]=pr(wr),l=Ks(xr),s=Ks(Nr),[d,c]=pr(Cr),u=wo(li),f=wo(di),v=wo(Ce),C=wo(_e),h=wo(Qo),y=wo(rt),m=wo(Lt),b=wo(Ht),{screenToFlowPosition:g,fitView:S,getViewport:D,setViewport:I}=Gv(),x=xo(null),p=xo(null),w=xo(null),G=xo(!1),te=xo(!1),[O,W]=Ic(!1),[$,T]=Ic(null),{onNodeContextMenu:H,onEdgeContextMenu:X,onPaneContextMenu:z}=Sc(g,T),q=Nt(()=>{T(null)},[]),A=xo(void 0),B=e.some(P=>P.type!=="add"),k=xo(!1),R=xo(!1);ka(()=>{if(d&&!R.current){if(R.current=!0,document.cookie.split("; ").find(Ne=>Ne.startsWith("sidebar-collapsed="))?.split("=")[1]==="true")return;let Y=D(),me=window.innerWidth*.3/2;I({...Y,x:Y.x-me},{duration:0})}},[d,D,I]),ka(()=>{if(A.current!==i){if(d&&te.current){A.current=i,W(!0),c(!1);return}setTimeout(()=>{S({maxZoom:1,minZoom:.5,padding:.2,duration:0}),A.current=i,te.current=!0,W(!0),c(!1)},0)}},[i,S,d,c]),ka(()=>{i||(B&&!k.current?(k.current=!0,setTimeout(()=>{S({maxZoom:1,minZoom:.5,padding:.2,duration:0}),te.current=!0,W(!0)},0)):B||(k.current=!1))},[i,B,S]),ka(()=>{let P=F=>{(F.metaKey||F.ctrlKey)&&F.key==="/"&&(F.preventDefault(),S({padding:.2,duration:300}))};return window.addEventListener("keydown",P),()=>{window.removeEventListener("keydown",P)}},[S]);let _=$v(()=>({trigger:_s,action:$s,add:Cc}),[]),ne=Nt((P,F)=>{let Y=e.find(pe=>pe.id===P);return!Y||Y.type==="add"?!1:F==="target"?Y.type!=="trigger":!0},[e]),le=Nt(P=>!(!(P.source&&P.target)||P.source===P.target),[]),V=Nt(P=>{let F={id:qs(),...P,type:"animated"};n([...o,F]),y(!0),m({immediate:!0})},[o,n,y,m]),Ae=Nt((P,F)=>{v(F.id)},[v]),tt=Nt((P,F)=>{x.current=F.nodeId,p.current=F.handleType,w.current=F.handleId},[]),Ye=Nt(P=>{let F="changedTouches"in P?P.changedTouches[0].clientX:P.clientX,Y="changedTouches"in P?P.changedTouches[0].clientY:P.clientY;return{clientX:F,clientY:Y}},[]),ot=Nt((P,F,Y)=>{let pe=P.target.closest(".react-flow")?.getBoundingClientRect(),me=pe?F-pe.left:F,Ne=pe?Y-pe.top:Y;return{adjustedX:me,adjustedY:Ne}},[]),Bt=Nt(P=>{let F=P.getAttribute("data-id"),Y=p.current==="source",pe=Y?"target":"source",me=x.current;F&&me&&F!==me&&ne(F,pe)&&V({source:Y?me:F,target:Y?F:me,sourceHandle:Y?w.current:null,targetHandle:Y?null:w.current})},[ne,V]),Dt=Nt((P,F,Y)=>{let pe=x.current;if(!pe)return;let{adjustedX:me,adjustedY:Ne}=ot(P,F,Y),ct=Kv.find(Sa=>Sa.type==="action");if(!ct)return;let fr=g({x:me,y:Ne}),Fc=192;fr.y-=Fc/2;let Vn={id:qs(),type:ct.type,position:fr,data:{label:ct.label,description:ct.description,type:ct.type,config:ct.defaultConfig,status:"idle"},selected:!0};h(Vn),v(Vn.id),b("properties"),setTimeout(()=>{t(Sa=>Sa.map(js=>({...js,selected:js.id===Vn.id})))},50);let Ta=p.current==="source",zc={id:qs(),source:Ta?pe:Vn.id,target:Ta?Vn.id:pe,sourceHandle:Ta?w.current:null,type:"animated"};n([...o,zc]),y(!0),m({immediate:!0}),G.current=!0,setTimeout(()=>{G.current=!1},100)},[ot,g,h,o,n,t,v,b,y,m]),ko=Nt(P=>{if(!x.current)return;let{clientX:F,clientY:Y}=Ye(P),pe="changedTouches"in P?document.elementFromPoint(F,Y):P.target;if(!pe){x.current=null;return}let me=pe.closest(".react-flow__node"),Ne=pe.closest(".react-flow__handle");if(me&&!Ne&&p.current){Bt(me),x.current=null,p.current=null;return}me||Ne||Dt(P,F,Y),x.current=null,p.current=null},[Ye,Bt,Dt]),Q=Nt(()=>{G.current||(v(null),C(null),q())},[v,C,q]),we=Nt(({nodes:P})=>{G.current&&P.length===0||(P.length===0?v(null):P.length===1&&v(P[0].id))},[v]);return Pc("div",{className:"relative h-full bg-background","data-testid":"workflow-canvas",style:{opacity:O?1:0,width:l?`calc(100% - ${l})`:"100%",transition:s?"width 300ms ease-out, opacity 300ms":"opacity 300ms"},children:[Uo("div",{className:"pointer-events-auto",children:Uo(mc,{workflowId:i??void 0})}),Pc(dd,{className:"bg-background",connectionLineComponent:ud,connectionMode:Vv.Strict,edges:o,edgeTypes:qv,elementsSelectable:!r,isValidConnection:le,nodes:e,nodesConnectable:!r,nodesDraggable:!r,nodeTypes:_,onConnect:r?void 0:V,onConnectEnd:r?void 0:ko,onConnectStart:r?void 0:tt,onEdgeContextMenu:r?void 0:X,onEdgesChange:r?void 0:f,onNodeClick:r?void 0:Ae,onNodeContextMenu:r?void 0:H,onNodesChange:r?void 0:u,onPaneClick:Q,onPaneContextMenu:r?void 0:z,onSelectionChange:r?void 0:we,children:[Uo(ia,{className:"workflow-controls-panel border-none bg-transparent p-0",position:"bottom-right",children:Uo(md,{})}),a&&Uo(Hv,{bgColor:"var(--sidebar)",nodeStrokeColor:"var(--border)"})]}),i&&Uo(gd,{workflowId:i}),Uo(Tc,{menuState:$,onClose:q})]})}import{jsx as Dc}from"react/jsx-runtime";function Rc(){let e=jv();return e==="/"||e.startsWith("/workflows/")?Dc("div",{className:"fixed inset-0 z-0",children:Dc(Ec,{})}):null}import{AuthUIProvider as Jv}from"@daveyplate/better-auth-ui";import Yv from"next/link";import{useRouter as Xv}from"next/navigation";import{jsx as Qv}from"react/jsx-runtime";var Oc=e=>{let t=Xv(),{children:o,...n}=e;return Qv(Jv,{...n,authClient:zo,navigate:t.push,replace:t.replace,onSessionChange:()=>{t.refresh()},Link:Yv,children:o})};import{ThemeProvider as Zv}from"next-themes";import{jsx as eh}from"react/jsx-runtime";var Lc=({children:e,...t})=>eh(Zv,{...t,children:e});import{jsx as No,jsxs as Mc}from"react/jsx-runtime";function rh(e){Xi();let t=nh(Yo);return Ca.useEffect(()=>{e.canvas&&t(o=>({...o,...e.canvas}))},[e.canvas,t]),Mc(Ci,{children:[No(Ca.Suspense,{children:Mc(th,{children:[No(Rc,{}),e.children]})}),No(ld,{}),No(id,{})]})}var Wc=e=>{let{children:t,canvas:o,...n}=e;return No(Lc,{attribute:"class",defaultTheme:"system",disableTransitionOnChange:!0,enableSystem:!0,children:No(Oc,{...n,children:No(oh,{children:No(rh,{canvas:o,children:t})})})})};import{jsx as sh}from"react/jsx-runtime";var ah=e=>{let{children:t,canvas:o,...n}=e;return sh(Wc,{canvas:o,...n,children:t})};function ih(){return process.env.AI_GATEWAY_MANAGED_KEYS_ENABLED==="true"}function lh(){return typeof window>"u"?process.env.AI_GATEWAY_MANAGED_KEYS_ENABLED==="true":process.env.NEXT_PUBLIC_AI_GATEWAY_MANAGED_KEYS_ENABLED==="true"}export{ah as Layout,ps as WorkflowEditor,Pf as WorkflowPage,ih as isAiGatewayManagedKeysEnabled,lh as isAiGatewayManagedKeysEnabledClient};
226
+ `}),xo("div",{className:N("pointer-events-none absolute inset-0 rounded-[inherit] animate-border-mask",e),children:Us("svg",{className:"h-full w-full overflow-visible",xmlns:"http://www.w3.org/2000/svg",children:[xo("defs",{children:Us("linearGradient",{id:"gradient-glow",x1:"0%",y1:"0%",x2:"100%",y2:"100%",children:[xo("stop",{offset:"0%",stopColor:"#60a5fa"}),xo("stop",{offset:"50%",stopColor:"#3b82f6"}),xo("stop",{offset:"100%",stopColor:"#60a5fa"})]})}),xo("rect",{x:"1",y:"1",width:"calc(100% - 2px)",height:"calc(100% - 2px)",rx:"6",fill:"none",stroke:"url(#gradient-glow)",strokeWidth:"2",style:{filter:"drop-shadow(0 0 4px #3b82f6)"}})]})}),xo("div",{className:N("pointer-events-none absolute inset-0 rounded-[inherit] border-2 border-blue-500/10",e)})]});import{jsx as Vt,jsxs as Ks}from"react/jsx-runtime";var Uo=({handles:e,className:t,status:o,...n})=>Ks(ga,{className:N("node-container relative gap-0 rounded-md bg-card p-0 transition-all duration-200",o==="success"&&"border-green-500 border-2",o==="error"&&"border-red-500 border-2",t),...n,children:[o==="running"&&Vt(Tc,{}),e.targetHandles&&e.targetHandles.length>0?Vt("div",{className:"absolute top-0 -left-[4px] flex h-full flex-col items-start justify-center gap-1",children:e.targetHandles.map(r=>Ks("div",{className:"relative flex items-center",children:[Vt(Na,{id:r.id,position:ka.Left,style:{position:"relative",top:"auto",left:"auto",transform:"none"},type:"target"}),r.label&&Vt("span",{className:"ml-1.5 text-muted-foreground text-[9px] leading-none",children:r.label})]},r.id))}):e.target&&Vt(Na,{position:ka.Left,type:"target"}),e.sourceHandles&&e.sourceHandles.length>0?Vt("div",{className:"absolute top-0 -right-[4px] flex h-full flex-col items-end justify-center gap-1",children:e.sourceHandles.map((r,s)=>Ks("div",{className:"relative flex items-center",children:[r.label&&Vt("span",{className:"mr-1.5 text-muted-foreground text-[9px] leading-none",children:r.label}),Vt(Na,{id:r.id,position:ka.Right,style:{position:"relative",top:"auto",right:"auto",transform:"none"},type:"source"})]},r.id))}):e.source&&Vt(Na,{position:ka.Right,type:"source"}),n.children]});var Ko=e=>Vt(Xd,{...e}),qo=e=>Vt(Qd,{...e});import{jsx as ot,jsxs as to}from"react/jsx-runtime";function Cv({status:e}){switch(e){case"pending":return ot(vv,{className:"size-3 text-muted-foreground"});case"running":return ot(wv,{className:"size-3 animate-spin text-blue-400"});case"success":return ot(Sc,{className:"size-3 text-green-400"});case"error":return ot(Ac,{className:"size-3 text-red-400"})}}function Tv({index:e,name:t,status:o}){return to("div",{className:N("flex items-center gap-1.5 rounded px-1.5 py-0.5 text-[10px] leading-tight transition-colors",o==="running"&&"bg-blue-500/10",o==="success"&&"bg-green-500/10",o==="error"&&"bg-red-500/10"),children:[to("span",{className:"w-3 shrink-0 text-right text-muted-foreground",children:[e,"."]}),ot(Cv,{status:o}),ot("span",{className:"min-w-0 flex-1 truncate",children:t})]})}function Sv({status:e}){return!e||e==="idle"||e==="running"?null:to("div",{className:N("absolute top-2 right-2 rounded-full p-1",e==="success"&&"bg-green-500/50",e==="error"&&"bg-red-500/50"),children:[e==="success"&&ot(Sc,{className:"size-3.5 text-white",strokeWidth:2.5}),e==="error"&&ot(Ac,{className:"size-3.5 text-white",strokeWidth:2.5})]})}var qs=xv(({data:e,selected:t,id:o})=>{let n=yv(tn),[r,s]=kv({}),a=e.status,d=e.enabled===!1,i=e.config?.workflowIds||"[]",l=[];try{let p=JSON.parse(i);Array.isArray(p)&&(l=p)}catch{l=i.split(",").map(p=>p.trim()).filter(Boolean)}Nv(()=>{if(l.length===0)return;let p=!1;async function m(){try{let w=await fetch("/api/workflow-builder/workflows");if(!w.ok)return;let h=await w.json(),S=h.workflows||h||[],D={};for(let I of S)D[I.id]=I.name;p||s(D)}catch{}}return m(),()=>{p=!0}},[i]);let u=n[o]?.output,g=u?.results,b=new Map;if(g)for(let p of g)b.set(p.workflowId,p.success?"success":"error");function y(p,m){return g&&b.get(p)||"pending"}let v=l.length===0;return to(Uo,{className:N("relative flex w-56 flex-col shadow-none transition-all duration-150 ease-out",t&&"border-primary",d&&"opacity-50"),"data-testid":`action-node-${o}`,handles:{target:!0,source:!0},status:a,children:[d&&ot("div",{className:"absolute top-2 left-2 rounded-full bg-gray-500/50 p-1",children:ot(hv,{className:"size-3.5 text-white"})}),ot(Sv,{status:a}),to("div",{className:"flex items-center gap-2 border-b px-3 py-2.5",children:[ot(bv,{className:"size-4 shrink-0 text-emerald-300",strokeWidth:1.5}),to("div",{className:"min-w-0 flex-1",children:[ot(Ko,{className:"truncate text-xs font-medium",children:e.label||"Run Workflows in Sequence"}),!v&&to(qo,{className:"text-[10px]",children:[l.length," workflow",l.length!==1?"s":""]})]})]}),ot("div",{className:"flex flex-col gap-0.5 px-2 py-2",children:v?ot("p",{className:"px-1 py-2 text-center text-[10px] text-muted-foreground",children:"No workflows configured"}):l.map((p,m)=>ot(Tv,{index:m+1,name:r[p]||p.slice(0,12)+"...",status:y(p,m)},`${p}-${m}`))}),u&&g&&to("div",{className:"border-t px-3 py-1.5 text-[10px] text-muted-foreground",children:[u.succeeded||0," passed",(u.failed||0)>0&&to("span",{className:"text-red-400",children:[" / ",u.failed," failed"]})]})]})});qs.displayName="SequenceNode";import{Fragment as Hv,jsx as Ae,jsxs as oo}from"react/jsx-runtime";var Ov=e=>({"gpt-5":"GPT-5","openai/gpt-5.1-instant":"GPT-5.1 Instant","openai/gpt-5.1-codex":"GPT-5.1 Codex","openai/gpt-5.1-codex-mini":"GPT-5.1 Codex Mini","openai/gpt-5.1-thinking":"GPT-5.1 Thinking","gpt-4":"GPT-4","gpt-4o":"GPT-4o","gpt-4o-mini":"GPT-4o Mini","claude-3-5-sonnet":"Claude 3.5","claude-3-opus":"Claude 3 Opus","anthropic/claude-opus-4.5":"Claude Opus 4.5","anthropic/claude-sonnet-4.5":"Claude Sonnet 4.5","anthropic/claude-haiku-4.5":"Claude Haiku 4.5","google/gemini-3-pro-preview":"Gemini 3 Pro Preview","google/gemini-2.5-flash-lite":"Gemini 2.5 Flash Lite","google/gemini-2.5-flash":"Gemini 2.5 Flash","google/gemini-2.5-pro":"Gemini 2.5 Pro","meta/llama-4-scout":"Llama 4 Scout","meta/llama-3.3-70b":"Llama 3.3 70B","meta/llama-3.1-8b":"Llama 3.1 8B","moonshotai/kimi-k2-0905":"Kimi K2","openai/gpt-oss-120b":"GPT OSS 120B","openai/gpt-oss-safeguard-20b":"GPT OSS Safeguard 20B","openai/gpt-oss-20b":"GPT OSS 20B","o1-preview":"o1 Preview","o1-mini":"o1 Mini","bfl/flux-2-pro":"FLUX.2 Pro","bfl/flux-1-pro":"FLUX.1 Pro","openai/dall-e-3":"DALL-E 3","google/imagen-4.0-generate":"Imagen 4.0"})[e]||e,Ec={"HTTP Request":"System","Database Query":"Database",Condition:"Condition","Execute Code":"System",Loop:"Loop",Switch:"Switch",Merge:"Merge","Run Workflow":"System","Run Workflows in Sequence":"System"},Lv=e=>{if(Ec[e])return Ec[e];let t=ye(e);return t?.integration&&Mt(t.integration)?.label||"System"};function Mv(e){return typeof e=="object"&&e!==null&&"base64"in e&&typeof e.base64=="string"&&e.base64.length>100}var Wv=e=>{if(["Database Query"].includes(e))return!0;let o=ye(e);return o?Jo(o.integration):!1},Fv=e=>{switch(e){case"HTTP Request":return Qo.icon;case"Database Query":return Xo.icon;case"Execute Code":return Ae(Pv,{className:"size-12 text-green-300",strokeWidth:1.5});case"Condition":return Yo.icon;case"Loop":return Xr.icon;case"Merge":return Cn.icon;case"Switch":return Tn.icon;case"Run Workflow":return Qr.icon;case"Run Workflows in Sequence":return Zr.icon;default:break}let t=ye(e);if(t){let o=Mt(t.integration);if(o?.icon){let n=o.icon;return Ae(n,{className:"size-12"})}}return Ae(Dc,{className:"size-12 text-amber-300",strokeWidth:1.5})},zv=({status:e})=>!e||e==="idle"||e==="running"?null:oo("div",{className:N("absolute top-2 right-2 rounded-full p-1",e==="success"&&"bg-green-500/50",e==="error"&&"bg-red-500/50"),children:[e==="success"&&Ae(Iv,{className:"size-3.5 text-white",strokeWidth:2.5}),e==="error"&&Ae(Ev,{className:"size-3.5 text-white",strokeWidth:2.5})]}),Bv=({model:e})=>e?Ae("div",{className:"rounded-full border border-muted-foreground/50 px-2 py-0.5 font-medium text-[10px] text-muted-foreground",children:Ov(e)}):null;function Vv({base64:e}){let[t,o]=Rv(!1);return oo(Hv,{children:[Ae("button",{className:"relative size-12 cursor-zoom-in overflow-hidden rounded-lg transition-transform hover:scale-105",onClick:n=>{n.stopPropagation(),o(!0)},type:"button",children:Ae(Pc,{alt:"Generated image",className:"object-cover",fill:!0,sizes:"48px",src:`data:image/png;base64,${e}`,unoptimized:!0})}),Ae(da,{onOpenChange:o,open:t,children:oo(nd,{className:"max-w-3xl p-2",showCloseButton:!1,children:[Ae(rd,{className:"sr-only",children:"Generated Image"}),Ae("div",{className:"relative aspect-square w-full overflow-hidden rounded-lg",children:Ae(Pc,{alt:"Generated image",className:"object-contain",fill:!0,sizes:"(max-width: 768px) 100vw, 768px",src:`data:image/png;base64,${e}`,unoptimized:!0})})]})})]})}var js=Dv(({data:e,selected:t,id:o})=>{let n=mr(so),r=mr(tn),s=mr(Ir),a=mr(ui),d=mr(xr);if(!e)return null;let i=e.config?.actionType||"",l=e.status;if(i==="Run Workflows in Sequence")return Ae(qs,{data:e,id:o,selected:t});let c=r[o],u=n&&i==="Generate Image"&&c?.output&&Mv(c.output);if(!i){let $=e.enabled===!1;return oo(Uo,{className:N("flex h-48 w-48 flex-col items-center justify-center shadow-none transition-all duration-150 ease-out",t&&"border-primary",$&&"opacity-50"),"data-testid":`action-node-${o}`,handles:{target:!0,source:!0},status:l,children:[$&&Ae("div",{className:"absolute top-2 left-2 rounded-full bg-gray-500/50 p-1",children:Ae(Ic,{className:"size-3.5 text-white"})}),oo("div",{className:"flex flex-col items-center justify-center gap-3 p-6",children:[Ae(Dc,{className:"size-12 text-muted-foreground",strokeWidth:1.5}),oo("div",{className:"flex flex-col items-center gap-1 text-center",children:[Ae(Ko,{className:"text-base",children:e.label||"Action"}),Ae(qo,{className:"text-xs",children:"Select an action"})]})]})]})}let g=ye(i),b=e.label||g?.label||i,y=e.description||Lv(i),v=Wv(i),p=s.has(o),m=e.config?.integrationId,w=m&&a.has(m),h=d&&v&&!w&&!p,D=i==="Generate Text"?e.config?.aiModel||"meta/llama-4-scout":i==="Generate Image"?e.config?.imageModel||"google/imagen-4.0-generate":null,I=e.enabled===!1,k=i==="Switch",f=i==="Condition",x;if(k){let $=Number(e.config?.routeCount)||4;x=[];for(let T=0;T<$;T++){let H=e.config?.[`routeName${T}`]||`Route ${T+1}`;x.push({id:`route-${T}`,label:H})}x.push({id:"route-default",label:"Default"})}else f&&(x=[{id:"condition-true",label:"True"},{id:"condition-false",label:"False"}]);let G=k||f,te=i==="Merge",O;if(te){let $=Number(e.config?.inputCount)||2;O=[];for(let T=0;T<$;T++)O.push({id:`input-${T}`,label:`Input ${T+1}`})}return oo(Uo,{className:N("relative flex flex-col items-center justify-center shadow-none transition-all duration-150 ease-out",G||te?"min-h-48 w-48":"h-48 w-48",t&&"border-primary",I&&"opacity-50"),"data-testid":`action-node-${o}`,handles:{target:!te,source:!G,sourceHandles:x,targetHandles:O},status:l,children:[I&&Ae("div",{className:"absolute top-2 left-2 rounded-full bg-gray-500/50 p-1",children:Ae(Ic,{className:"size-3.5 text-white"})}),!I&&h&&Ae("div",{className:"absolute top-2 left-2 rounded-full bg-orange-500/50 p-1",children:Ae(Av,{className:"size-3.5 text-white"})}),Ae(zv,{status:l}),oo("div",{className:"flex flex-col items-center justify-center gap-3 p-6",children:[u?Ae(Vv,{base64:c.output.base64}):Fv(i),oo("div",{className:"flex flex-col items-center gap-1 text-center",children:[Ae(Ko,{className:"text-base",children:b}),y&&Ae(qo,{className:"text-xs",children:y}),D&&Ae(Bv,{model:D})]})]})]})});js.displayName="ActionNode";import{Plus as Gv}from"lucide-react";import{jsx as Bn,jsxs as Ca}from"react/jsx-runtime";function Rc({data:e}){return Ca("div",{className:"flex flex-col items-center justify-center gap-8 rounded-lg border border-border border-dashed bg-background/50 p-8 backdrop-blur-sm",children:[Ca("div",{className:"text-center",children:[Bn("h1",{className:"mb-2 font-bold text-3xl",children:"AI Workflow Builder Template"}),Ca("p",{className:"text-muted-foreground text-sm",children:["Powered by"," ",Bn("a",{className:"underline underline-offset-2 transition duration-200 ease-out hover:text-foreground",href:"https://useworkflow.dev/",rel:"noopener noreferrer",target:"_blank",children:"Workflow"}),","," ",Bn("a",{className:"underline underline-offset-2 transition duration-200 ease-out hover:text-foreground",href:"https://ai-sdk.dev/",rel:"noopener noreferrer",target:"_blank",children:"AI SDK"}),","," ",Bn("a",{className:"underline underline-offset-2 transition duration-200 ease-out hover:text-foreground",href:"https://vercel.com/ai-gateway",rel:"noopener noreferrer",target:"_blank",children:"AI Gateway"})," ","and"," ",Bn("a",{className:"underline underline-offset-2 transition duration-200 ease-out hover:text-foreground",href:"https://ai-sdk.dev/elements",rel:"noopener noreferrer",target:"_blank",children:"AI Elements"})]})]}),Ca(E,{className:"gap-2 shadow-lg",onClick:e.onClick,size:"default",children:[Bn(Gv,{className:"size-4"}),"Add a Step"]})]})}import{Check as $v,Clock as _v,Play as Uv,Webhook as Kv,XCircle as qv}from"lucide-react";import{memo as jv}from"react";import{jsx as pr,jsxs as Ta}from"react/jsx-runtime";var Js=jv(({data:e,selected:t})=>{if(!e)return null;let o=e.config?.triggerType||"Manual",n=e.label||o,r=e.description||"Trigger",s=e.status,a=Uv;return o==="Schedule"?a=_v:o==="Webhook"&&(a=Kv),Ta(Uo,{className:N("flex h-48 w-48 flex-col items-center justify-center shadow-none transition-all duration-150 ease-out",t&&"border-primary"),handles:{target:!1,source:!0},status:s,children:[s&&s!=="idle"&&s!=="running"&&Ta("div",{className:N("absolute top-2 right-2 rounded-full p-1",s==="success"&&"bg-green-500/50",s==="error"&&"bg-red-500/50"),children:[s==="success"&&pr($v,{className:"size-3.5 text-white",strokeWidth:2.5}),s==="error"&&pr(qv,{className:"size-3.5 text-white",strokeWidth:2.5})]}),Ta("div",{className:"flex flex-col items-center justify-center gap-3 p-6",children:[pr(a,{className:"size-12 text-blue-500",strokeWidth:1.5}),Ta("div",{className:"flex flex-col items-center gap-1 text-center",children:[pr(Ko,{className:"text-base",children:n}),r&&pr(qo,{className:"text-xs",children:r})]})]})]})});Js.displayName="TriggerNode";import{useAtomValue as Jv,useSetAtom as fr}from"jotai";import{Link2Off as Yv,Plus as Xv,Trash2 as Qv}from"lucide-react";import{nanoid as Zv}from"nanoid";import{useCallback as Hn,useEffect as eh,useRef as th}from"react";import{jsx as Vn,jsxs as Mc}from"react/jsx-runtime";function Oc({menuState:e,onClose:t}){let o=Jv(re),n=fr(lo),r=fr(co),s=fr(on),a=fr(Te),d=fr($t),{open:i}=oe(),l=th(null),c=Hn(()=>{if(e?.nodeId){let v=e.nodeId;t(),i(Ee,{title:"Delete Step",message:"Are you sure you want to delete this node? This action cannot be undone.",confirmLabel:"Delete",confirmVariant:"destructive",onConfirm:()=>{n(v)}})}},[e,n,t,i]),u=Hn(()=>{if(e?.edgeId){let v=e.edgeId;t(),i(Ee,{title:"Delete Connection",message:"Are you sure you want to delete this connection? This action cannot be undone.",confirmLabel:"Delete",confirmVariant:"destructive",onConfirm:()=>{r(v)}})}},[e,r,t,i]),g=Hn(()=>{if(e?.flowPosition){let p={id:Zv(),type:"action",position:{x:e.flowPosition.x,y:e.flowPosition.y-96},data:{label:"",description:"",type:"action",config:{},status:"idle"},selected:!0};s(p),a(p.id),d("properties")}t()},[e,s,a,d,t]);if(eh(()=>{if(!e)return;let v=w=>{l.current&&!l.current.contains(w.target)&&t()},p=w=>{w.key==="Escape"&&t()},m=setTimeout(()=>{document.addEventListener("mousedown",v),document.addEventListener("keydown",p)},0);return()=>{clearTimeout(m),document.removeEventListener("mousedown",v),document.removeEventListener("keydown",p)}},[e,t]),!e)return null;let b=!!(e.nodeId&&o.find(v=>v.id===e.nodeId)?.data.type==="trigger"),y=()=>e.nodeId&&o.find(p=>p.id===e.nodeId)?.data.label||"Step";return Mc("div",{className:"fade-in-0 zoom-in-95 fixed z-50 min-w-[8rem] animate-in overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md",ref:l,style:{left:e.position.x,top:e.position.y},children:[e.type==="node"&&Vn(Ys,{disabled:b,icon:Vn(Qv,{className:"size-4"}),label:`Delete ${y()}`,onClick:c,variant:"destructive"}),e.type==="edge"&&Vn(Ys,{icon:Vn(Yv,{className:"size-4"}),label:"Delete Connection",onClick:u,variant:"destructive"}),e.type==="pane"&&Vn(Ys,{icon:Vn(Xv,{className:"size-4"}),label:"Add Step",onClick:g})]})}function Ys({icon:e,label:t,onClick:o,variant:n="default",disabled:r}){return Mc("button",{className:N("relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none","hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground",n==="destructive"&&"text-destructive hover:bg-destructive/10 hover:text-destructive focus:bg-destructive/10 focus:text-destructive",r&&"pointer-events-none opacity-50"),disabled:r,onClick:o,type:"button",children:[e,t]})}function Lc(e,t){let o=Hn((s,a)=>{s.preventDefault(),t({type:"node",position:{x:s.clientX,y:s.clientY},nodeId:a.id})},[t]),n=Hn((s,a)=>{s.preventDefault(),t({type:"edge",position:{x:s.clientX,y:s.clientY},edgeId:a.id})},[t]),r=Hn(s=>{s.preventDefault();let a=e({x:s.clientX,y:s.clientY});t({type:"pane",position:{x:s.clientX,y:s.clientY},flowPosition:a})},[e,t]);return{onNodeContextMenu:o,onEdgeContextMenu:n,onPaneContextMenu:r}}import{jsx as jo,jsxs as Fc}from"react/jsx-runtime";var lh=[{type:"trigger",label:"",description:"",displayLabel:"Trigger",icon:sh,defaultConfig:{triggerType:"Manual"}},{type:"action",label:"",description:"",displayLabel:"Action",icon:ih,defaultConfig:{}}],dh={animated:_s.Animated,temporary:_s.Temporary};function zc(){let[e,t]=gr(re),[o,n]=gr(ue),[r]=gr(St),s=Xs(Ke),[a]=gr(kr),d=Xs(Cr),i=Xs(Tr),[l,c]=gr(Ar),u=No(yi),g=No(vi),b=No(Te),y=No(Ue),v=No(on),p=No(st),m=No(Ft),w=No($t),{screenToFlowPosition:h,fitView:S,getViewport:D,setViewport:I}=rh(),k=ko(null),f=ko(null),x=ko(null),G=ko(!1),te=ko(!1),[O,W]=Wc(!1),[$,T]=Wc(null),{onNodeContextMenu:H,onEdgeContextMenu:X,onPaneContextMenu:z}=Lc(h,T),j=Tt(()=>{T(null)},[]),A=ko(void 0),B=e.some(P=>P.type!=="add"),C=ko(!1),R=ko(!1);Sa(()=>{if(l&&!R.current){if(R.current=!0,document.cookie.split("; ").find(Ce=>Ce.startsWith("sidebar-collapsed="))?.split("=")[1]==="true")return;let Y=D(),pe=window.innerWidth*.3/2;I({...Y,x:Y.x-pe},{duration:0})}},[l,D,I]),Sa(()=>{if(A.current!==s){if(l&&te.current){A.current=s,W(!0),c(!1);return}setTimeout(()=>{S({maxZoom:1,minZoom:.5,padding:.2,duration:0}),A.current=s,te.current=!0,W(!0),c(!1)},0)}},[s,S,l,c]),Sa(()=>{s||(B&&!C.current?(C.current=!0,setTimeout(()=>{S({maxZoom:1,minZoom:.5,padding:.2,duration:0}),te.current=!0,W(!0)},0)):B||(C.current=!1))},[s,B,S]),Sa(()=>{let P=F=>{(F.metaKey||F.ctrlKey)&&F.key==="/"&&(F.preventDefault(),S({padding:.2,duration:300}))};return window.addEventListener("keydown",P),()=>{window.removeEventListener("keydown",P)}},[S]);let _=ah(()=>({trigger:Js,action:js,add:Rc}),[]),ne=Tt((P,F)=>{let Y=e.find(fe=>fe.id===P);return!Y||Y.type==="add"?!1:F==="target"?Y.type!=="trigger":!0},[e]),de=Tt(P=>!(!(P.source&&P.target)||P.source===P.target),[]),V=Tt(P=>{let F={id:Qs(),...P,type:"animated"};n([...o,F]),p(!0),m({immediate:!0})},[o,n,p,m]),Ie=Tt((P,F)=>{b(F.id)},[b]),nt=Tt((P,F)=>{k.current=F.nodeId,f.current=F.handleType,x.current=F.handleId},[]),Qe=Tt(P=>{let F="changedTouches"in P?P.changedTouches[0].clientX:P.clientX,Y="changedTouches"in P?P.changedTouches[0].clientY:P.clientY;return{clientX:F,clientY:Y}},[]),rt=Tt((P,F,Y)=>{let fe=P.target.closest(".react-flow")?.getBoundingClientRect(),pe=fe?F-fe.left:F,Ce=fe?Y-fe.top:Y;return{adjustedX:pe,adjustedY:Ce}},[]),Ht=Tt(P=>{let F=P.getAttribute("data-id"),Y=f.current==="source",fe=Y?"target":"source",pe=k.current;F&&pe&&F!==pe&&ne(F,fe)&&V({source:Y?pe:F,target:Y?F:pe,sourceHandle:Y?x.current:null,targetHandle:Y?null:x.current})},[ne,V]),Lt=Tt((P,F,Y)=>{let fe=k.current;if(!fe)return;let{adjustedX:pe,adjustedY:Ce}=rt(P,F,Y),mt=lh.find(Pa=>Pa.type==="action");if(!mt)return;let yr=h({x:pe,y:Ce}),Uc=192;yr.y-=Uc/2;let Gn={id:Qs(),type:mt.type,position:yr,data:{label:mt.label,description:mt.description,type:mt.type,config:mt.defaultConfig,status:"idle"},selected:!0};v(Gn),b(Gn.id),w("properties"),setTimeout(()=>{t(Pa=>Pa.map(Zs=>({...Zs,selected:Zs.id===Gn.id})))},50);let Ia=f.current==="source",Kc={id:Qs(),source:Ia?fe:Gn.id,target:Ia?Gn.id:fe,sourceHandle:Ia?x.current:null,type:"animated"};n([...o,Kc]),p(!0),m({immediate:!0}),G.current=!0,setTimeout(()=>{G.current=!1},100)},[rt,h,v,o,n,t,b,w,p,m]),To=Tt(P=>{if(!k.current)return;let{clientX:F,clientY:Y}=Qe(P),fe="changedTouches"in P?document.elementFromPoint(F,Y):P.target;if(!fe){k.current=null;return}let pe=fe.closest(".react-flow__node"),Ce=fe.closest(".react-flow__handle");if(pe&&!Ce&&f.current){Ht(pe),k.current=null,f.current=null;return}pe||Ce||Lt(P,F,Y),k.current=null,f.current=null},[Qe,Ht,Lt]),Z=Tt(()=>{G.current||(b(null),y(null),j())},[b,y,j]),ke=Tt(({nodes:P})=>{G.current&&P.length===0||(P.length===0?b(null):P.length===1&&b(P[0].id))},[b]);return Fc("div",{className:"relative h-full bg-background","data-testid":"workflow-canvas",style:{opacity:O?1:0,width:d?`calc(100% - ${d})`:"100%",transition:i?"width 300ms ease-out, opacity 300ms":"opacity 300ms"},children:[jo("div",{className:"pointer-events-auto",children:jo(wc,{workflowId:s??void 0})}),Fc(yd,{className:"bg-background",connectionLineComponent:hd,connectionMode:oh.Strict,edges:o,edgeTypes:dh,elementsSelectable:!r,isValidConnection:de,nodes:e,nodesConnectable:!r,nodesDraggable:!r,nodeTypes:_,onConnect:r?void 0:V,onConnectEnd:r?void 0:To,onConnectStart:r?void 0:nt,onEdgeContextMenu:r?void 0:X,onEdgesChange:r?void 0:g,onNodeClick:r?void 0:Ie,onNodeContextMenu:r?void 0:H,onNodesChange:r?void 0:u,onPaneClick:Z,onPaneContextMenu:r?void 0:z,onSelectionChange:r?void 0:ke,children:[jo(ca,{className:"workflow-controls-panel border-none bg-transparent p-0",position:"bottom-right",children:jo(bd,{})}),a&&jo(nh,{bgColor:"var(--sidebar)",nodeStrokeColor:"var(--border)"})]}),s&&jo(Nd,{workflowId:s}),jo(Oc,{menuState:$,onClose:j})]})}import{jsx as Bc}from"react/jsx-runtime";function Vc(){let e=ch();return e==="/"||e.startsWith("/workflows/")?Bc("div",{className:"fixed inset-0 z-0",children:Bc(zc,{})}):null}import{AuthUIProvider as uh}from"@daveyplate/better-auth-ui";import mh from"next/link";import{useRouter as ph}from"next/navigation";import{jsx as fh}from"react/jsx-runtime";var Hc=e=>{let t=ph(),{children:o,...n}=e;return fh(uh,{...n,authClient:Vo,navigate:t.push,replace:t.replace,onSessionChange:()=>{t.refresh()},Link:mh,children:o})};import{ThemeProvider as gh}from"next-themes";import{jsx as yh}from"react/jsx-runtime";var Gc=({children:e,...t})=>yh(gh,{...t,children:e});import{jsx as Co,jsxs as $c}from"react/jsx-runtime";function wh(e){al();let t=bh(en);return Aa.useEffect(()=>{e.canvas&&t(o=>({...o,...e.canvas}))},[e.canvas,t]),$c(Ri,{children:[Co(Aa.Suspense,{children:$c(vh,{children:[Co(Vc,{}),e.children]})}),Co(gd,{}),Co(fd,{})]})}var _c=e=>{let{children:t,canvas:o,...n}=e;return Co(Gc,{attribute:"class",defaultTheme:"system",disableTransitionOnChange:!0,enableSystem:!0,children:Co(Hc,{...n,children:Co(hh,{children:Co(wh,{canvas:o,children:t})})})})};import{jsx as Nh}from"react/jsx-runtime";var xh=e=>{let{children:t,canvas:o,...n}=e;return Nh(_c,{canvas:o,...n,children:t})};function kh(){return process.env.AI_GATEWAY_MANAGED_KEYS_ENABLED==="true"}function Ch(){return typeof window>"u"?process.env.AI_GATEWAY_MANAGED_KEYS_ENABLED==="true":process.env.NEXT_PUBLIC_AI_GATEWAY_MANAGED_KEYS_ENABLED==="true"}export{Oa as DashboardPage,xh as Layout,hs as WorkflowEditor,Uf as WorkflowPage,kh as isAiGatewayManagedKeysEnabled,Ch as isAiGatewayManagedKeysEnabledClient};