PageSourceSearch

https://www.getminerhub.com/assets/TestPipelinePage-jDnIz1UA.js

js getminerhub.com collected 2026-09-24 14:44:08 UTC 23,893 bytes, 2 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CreateTestItemModal-DdaVRUfc.js","assets/vendor-motion-C5FObYmw.js","assets/vendor-helmet-C1O7rrm-.js","assets/index-D5Z3iEdy.js","assets/vendor-ui-DH9CwqBQ.js","assets/vendor-charts-sgZODtTB.js","assets/vendor-query-S2mA_Wh8.js","assets/vendor-react-B8Ra2ABZ.js","assets/vendor-flow-4lyVEpXM.js","assets/vendor-dnd-BVlXN6uJ.js","assets/index-BMb6Tzqt.css","assets/FunnelUrlsEditor-CgbaJCfy.js","assets/genId-D4nms6rA.js","assets/PencilSimple.es-DG0tjm84.js","assets/CalendarBlank.es-B7GRnNyx.js","assets/CopySimple.es-fs4AEtEF.js","assets/ModuleGuard-DnNVRKGt.js","assets/ArrowLeft.es-jcOm_wmj.js","assets/EditTestItemModal-DXVjeJYD.js","assets/ReadinessChecklistModal-C3kLVpqB.js","assets/TestConfigModal-D4L6ACiG.js","assets/ValidationReasonModal-DOeFQbx-.js","assets/PreScaleAdjustmentModal-ChUzy8mb.js","assets/ScaleDecisionModal-B3ttUJ20.js"])))=>i.map(i=>d[i]);
2import{j as r}from"./vendor-motion-C5FObYmw.js";import{G as Q,aY as G,C as x,aT as j,P as y,c as O,bX as ie,bY as le,j as Ie,aQ as Pe,b7 as Me,k as Ne,l as qe,m as ke,p as Oe,a7 as Re,Q as K,bZ as ce,b_ as Z,cw as Le,q as Ue,B as Fe,b9 as ae,N as Be,A as $e,r as Ke,t as Qe,v as Ve,w as ze,x as Ye,y as Ge,z as Xe,cn as q,a$ as He,b0 as Je}from"./index-D5Z3iEdy.js";import{r as _}from"./vendor-helmet-C1O7rrm-.js";import{u as We,C as Ze,a as et,S as tt,v as rt,b as st,c as at,D as nt,r as ot,d as it,P as lt}from"./vendor-dnd-BVlXN6uJ.js";import{a as X,u as E,b as S}from"./vendor-query-S2mA_Wh8.js";import{c as ct}from"./CalendarBlank.es-B7GRnNyx.js";import{c as dt}from"./CopySimple.es-fs4AEtEF.js";import{M as ut}from"./ModuleGuard-DnNVRKGt.js";const k={draft:{label:"Rascunho",color:"text-muted-foreground",bgClass:"bg-muted/30",cardBgClass:"bg-muted/6"},ready:{label:"Pronto para Anunciar",color:"text-purple-500",bgClass:"bg-purple-500/10",cardBgClass:"bg-purple-500/2"},testing:{label:"Em fase de teste",color:"text-amber-500",bgClass:"bg-amber-500/10",cardBgClass:"bg-amber-500/2"},validated:{label:"Validado",color:"text-green-500",bgClass:"bg-green-500/10",cardBgClass:"bg-green-500/2"},pre_scale:{label:"Em pré-escala",color:"text-blue-500",bgClass:"bg-blue-500/10",cardBgClass:"bg-blue-500/2"},scaling:{label:"Em escala",color:"text-emerald-500",bgClass:"bg-emerald-500/10",cardBgClass:"bg-emerald-500/2"},discarded:{label:"Descartado",color:"text-red-500",bgClass:"bg-red-500/10",cardBgClass:"bg-red-500/2"}},ne=["draft","ready","testing","validated","pre_scale","scaling","discarded"],ee=["testing","validated","pre_scale","scaling"];function de(e){let t=e.total_active_days||0;if(ee.includes(e.status)&&e.active_since){const a=new Date,n=new Date(e.active_since),s=Math.max(0,Math.floor((a.getTime()-n.getTime())/(1e3*60*60*24)));t+=s}return t}function mt(e){if(e.status==="discarded")return!1;const t=de(e);return ee.includes(e.status)||t>0}function pt(e){var t;if(e.urls&&e.urls.length>0){const a=["landing_page","vsl","quiz","advertorial"],n=e.urls.find(s=>a.includes(s.type));if(n!=null&&n.url)return n.url;if((t=e.urls[0])!=null&&t.url)return e.urls[0].url}return e.url}function Gt(e){var n;const t=["landing_page","vsl","quiz","advertorial"],a=e.find(s=>t.includes(s.type)&&s.url.trim()!=="");return a?a.url:((n=e.find(s=>s.url.trim()!==""))==null?void 0:n.url)??null}function Xt(e){const t=new Set;return e.map(a=>({...a,url:a.url.trim()})).filter(a=>{if(!a.url)return!1;const n=a.url.toLowerCase();return t.has(n)?!1:(t.add(n),!0)})}function Ht(e){const t=/^https?:\/\//i.test(e)?e:`https://${e}`;try{return new URL(t).hostname.includes(".")}catch{return!1}}const T="test-pipeline-items";function ft(e){return!e||!Array.isArray(e)?[]:e}function V(e){return{...e,urls:ft(e.urls)}}function gt(e){return ee.includes(e)}async function te(e,t,a,n,s,l){try{let i;s?i="Oferta criada como Rascunho":a==="discarded"?i=`Oferta descartada${n?` (estava em ${k[n].label})`:""}`:n?i=`${k[n].label} → ${k[a].label}`:i=`Movido para ${k[a].label}`;const{error:c}=await y.from("test_pipeline_adjustments").insert({test_item_id:t,user_id:e,adjustment_type:"status_change",description:i,from_status:n||null,to_status:a,metadata:{triggered_by:e,...l}});c&&console.error("Error creating status checkpoint (non-blocking):",c)}catch(i){console.error("Error creating status checkpoint (non-blocking):",i)}}function _t(){const{user:e}=Q(),{boardOwnerId:t}=G(),a=t||(e==null?void 0:e.id);return X({queryKey:[T,a],queryFn:async()=>
2{if(!a)return[];const{data:n,error:s}=await y.from("test_pipeline_items").select("*").eq("user_id",a).order("position",{ascending:!0});if(s)throw s;return(n||[]).map(V)},enabled:!!a})}function Jt(){const e=E(),{user:t}=Q(),{boardOwnerId:a}=G();return S({mutationFn:async n=>{var v;const s=a||(t==null?void 0:t.id);if(!s)throw new Error("User not authenticated");const l=n.status||"draft",{data:i,error:c}=await y.from("test_pipeline_items").select("position").eq("user_id",s).eq("status",l).order("position",{ascending:!1}).limit(1);if(c)throw c;const g=((v=i==null?void 0:i[0])==null?void 0:v.position)??-1,h=gt(l)?new Date().toISOString():null,{data:p,error:u}=await y.from("test_pipeline_items").insert({user_id:s,title:n.title,url:n.url||null,urls:n.urls||[],notes:n.notes||null,category:n.category||null,status:l,position:g+1,active_since:h}).select().single();if(u)throw u;const b=V(p);return te((t==null?void 0:t.id)||s,b.id,l,void 0,!0),b},onSuccess:()=>{e.invalidateQueries({queryKey:[T]}),x.success(j().itemCreated)},onError:n=>{console.error("Error creating item:",n),x.error(j().itemCreateError)}})}function ht(){const e=E();return S({mutationFn:async({id:t,updates:a,previousStatus:n})=>{const s={...a,urls:a.urls?a.urls:void 0},{data:l,error:i}=await y.from("test_pipeline_items").update(s).eq("id",t).select().single();if(i)throw i;return V(l)},onSuccess:()=>{e.invalidateQueries({queryKey:[T]})},onError:t=>{console.error("Error updating item:",t),x.error(j().itemUpdateError)}})}function yt(){const e=E();return S({mutationFn:async t=>{const{error:a}=await y.from("test_pipeline_items").delete().eq("id",t);if(a)throw a},onSuccess:()=>{e.invalidateQueries({queryKey:[T]}),x.success(j().itemDeleted)},onError:t=>{console.error("Error deleting item:",t),x.error(j().itemDeleteError)}})}function vt(){const e=E(),{user:t}=Q(),{boardOwnerId:a}=G(),{language:n}=O();return S({mutationFn:async s=>{var b;const l=a||(t==null?void 0:t.id);if(!l)throw new Error("User not authenticated");const{data:i,error:c}=await y.from("test_pipeline_items").select("position").eq("user_id",l).eq("status","draft").order("position",{ascending:!1}).limit(1);if(c)throw c;const g=((b=i==null?void 0:i[0])==null?void 0:b.position)??-1,{data:h,error:p}=await y.from("test_pipeline_items").insert({user_id:l,title:`${s.title} ${n==="en"?"(copy)":n==="es"?"(copia)":"(cópia)"}`,url:s.url||null,urls:s.urls||[],notes:s.notes||null,category:s.category||null,status:"draft",position:g+1,test_hypothesis:s.test_hypothesis||null,traffic_channel:s.traffic_channel||null,main_metric:s.main_metric||null,validation_criteria:s.validation_criteria||null}).select().single();if(p)throw p;const u=V(h);return te((t==null?void 0:t.id)||l,u.id,"draft",void 0,!0),u},onSuccess:()=>{e.invalidateQueries({queryKey:[T]}),x.success(j().itemDuplicated)},onError:s=>{console.error("Error duplicating item:",s),x.error(j().itemDuplicateError)}})}function xt(){const e=E(),{user:t}=Q(),{boardOwnerId:a}=G(),n=a||(t==null?void 0:t.id);return S({mutationFn:async({id:s,newStatus:l,newPosition:i,previousStatus:c})=>{const{data:g,error:h}=await y.rpc("move_test_pipeline_item",{_item_id:s,_new_status:l,_new_position:i});if(h)throw new Error(h.message);const p=(Array.isArray(g)?g:[g]).filter(Boolean),u=p[0]?V(p[0]):null;return l!==c&&(t!=null&&t.id)&&te(t.id,s,l,c),u},onMutate:async({id:s,newStatus:l,newPosition:i})=>{await e.cancelQueries({queryKey:[T,n]});const c=e.getQueryData([T,n]);if(c){const g=c.find(h=>h.id===s);if(g){const h=c.map(p=>{if(p.id===s)return{...p,status:l,position:i};let u=p.position;return p.status===g.status&&u>g.position&&(u-=1),p.status===l&&u>=i&&(u+=1),u===p.position?p:{...p,position:u}});e.setQueryData([T,n],h)}}return{previous:c}},onError:(s,l,i)=>{i!=null&&i.previous&&e.setQueryData([T,n],i.previous),console.error("Error moving item:",s),x.error(j().itemMoveError)},onSettled:()=>{e.invalidateQueries({queryKey:[T,n]})}})}const oe={pt:{created:"Ajuste registrado",createError:"Erro ao registrar ajuste",removed:"Ajuste removido",removeError:"Erro ao remover ajuste"},en:{created:"Adjustment logged",createError:"Error logging adjustment",removed:"Adjustment removed",removeError:"Error removing adjustment"},es:{created:"Ajuste registrado",createError:"Error al registrar el ajuste",removed:"Ajuste eliminado",removeError:"Error al eliminar el ajuste"}},ue="test-adjustments";function bt(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function me(e){return{...e,from_status:e.from_status,to_status:e.to_status,metadata:bt(e.metadata)}}function Wt(e){return X({queryKey:[ue,e],queryFn:async()=>
2{if(!e)return[];const{data:t,error:a}=await y.from("test_pipeline_adjustments").select("*").eq("test_item_id",e).order("created_at",{ascending:!1});if(a)throw a;return(t||[]).map(n=>me(n))},enabled:!!e})}function jt(){const e=E(),{user:t}=Q(),{language:a}=O(),n=oe[a]??oe.pt;return S({mutationFn:async s=>{if(!(t!=null&&t.id))throw new Error("User not authenticated");const{data:l,error:i}=await y.from("test_pipeline_adjustments").insert({test_item_id:s.test_item_id,user_id:t.id,adjustment_type:s.adjustment_type,description:s.description,reason:s.reason||null,expected_result:s.expected_result||null,transition_type:s.transition_type||null}).select().single();if(i)throw i;return me(l)},onSuccess:s=>{e.invalidateQueries({queryKey:[ue,s.test_item_id]}),x.success(n.created)},onError:s=>{console.error("Error creating adjustment:",s),x.error(n.createError)}})}const pe=5*60*1e3,fe=10*60*1e3;function Zt(){return X({queryKey:["test_tags"],queryFn:async()=>{const{data:e,error:t}=await y.from("test_tags").select("*").order("name");if(t)throw t;return e||[]},staleTime:pe,gcTime:fe})}function Ct(e){return X({queryKey:["test_item_tags",e],queryFn:async()=>{if(!e)return[];const{data:t,error:a}=await y.from("test_item_tags").select("tag_id, test_tags(*)").eq("test_item_id",e);if(a)throw a;return(t||[]).map(n=>n.test_tags).filter(Boolean)},enabled:!!e,staleTime:pe,gcTime:fe})}function er(){const e=E();return S({mutationFn:async({name:t,color:a})=>{const{data:{user:n}}=await y.auth.getUser();if(!n)throw new Error("Not authenticated");const{data:s,error:l}=await y.from("test_tags").insert({name:t,color:a,user_id:n.id}).select().maybeSingle();if(l)throw l;if(!s)throw new Error("Não foi possível criar a tag");return s},onSuccess:()=>{e.invalidateQueries({queryKey:["test_tags"]})},onError:()=>{x.error(j().errorCreatingTag)}})}function tr(){const e=E();return S({mutationFn:async({id:t,name:a,color:n})=>{const{data:s,error:l}=await y.from("test_tags").update({name:a,color:n}).eq("id",t).select().maybeSingle();if(l)throw l;if(!s)throw new Error("Não foi possível atualizar a tag");return s},onSuccess:()=>{e.invalidateQueries({queryKey:["test_tags"]}),e.invalidateQueries({queryKey:["test_item_tags"]})},onError:()=>{x.error(j().errorUpdatingTag)}})}function rr(){const e=E();return S({mutationFn:async({testItemId:t,tagId:a})=>{const{data:n,error:s}=await y.from("test_item_tags").insert({test_item_id:t,tag_id:a}).select().maybeSingle();if(s)throw s;if(!n)throw new Error("Não foi possível adicionar a tag");return n},onSuccess:(t,{testItemId:a})=>{e.invalidateQueries({queryKey:["test_item_tags",a]})},onError:()=>{x.error(j().errorAddingTag)}})}function sr(){const e=E();return S({mutationFn:async({testItemId:t,tagId:a})=>{const{error:n}=await y.from("test_item_tags").delete().eq("test_item_id",t).eq("tag_id",a);if(n)throw n},onSuccess:(t,{testItemId:a})=>{e.invalidateQueries({queryKey:["test_item_tags",a]})}})}function wt({tag:e}){return r.jsx("span",{className:"inline-flex items-center px-2.5 py-0.5 rounded-lg text-[10px] font-medium border border-border/60 bg-muted/50",style:{color:e.color},children:e.name})}function ge({item:e,onClick:t,onDuplicate:a,onDelete:n}){var I;const{data:s=[]}=Ct(e.id),{t:l,language:i}=O(),c=l.testPipeline,g={infoprodutos:c.categoryInfoprodutos,nutraceuticos:c.categoryNutraceuticos,ecommerce:c.categoryEcommerce,outro:c.categoryOutro},h=i==="en"?qe:i==="es"?ke:Oe,{attributes:p,listeners:u,setNodeRef:b,transform:v,transition:R,isDragging:z}=We({id:e.id}),L={transform:Ze.Transform.toString(v),transition:R},A=de(e),U=k[e.status],d=pt(e),F=d?(()=>{try{return new URL(d).hostname.replace("www.","")}catch{return null}})():null,B=((I=e.urls)==null?void 0:I.length)||0,H=mt(e);return r.jsxs(ie,{children:[r.jsx(le,{asChild:!0,children:r.jsx("div",{ref:b,style:L,className:K("kanban-card",z&&"opacity-50 ring-2 ring-primary"),...p,...u,onClick:t,children:r.jsxs("div",{className:"space-y-1.5",children:[r.jsx("h3",{className:"font-medium text-sm leading-tight line-clamp-2",children:e.title}),(e.category||s.length>0)&&r.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap",children:[e.category&&r.jsx(Ie,{variant:"secondary",className:"text-[10px] font-medium px-1.5 py-0.5 dark:border dark:border-white/20",children:g[e.category]||c.categoryOutro}),s.slice(0,3).map(P=>r.jsx(wt,{tag:P},P.id)),s.length>3&&r.jsxs("span",{className:"text-[10px] text-muted-foreground",children:["+",s.length-3]})]}),F&&r.jsxs("div",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[r.jsx(Pe,{className:"h-3 w-3 flex-shrink-0"}),r.jsx("span",{className:"truncate",children:F}),B>1&&r.jsxs("span",{className:"flex items-center gap-0.5 text-primary/70",children:[r.jsx(Me,{className:"h-3 w-3"}),"+",B-1]})]}),r.jsxs("div",{className:"flex items-center justify-between text-[11px] text-muted-foreground pt-1.5 border-t border-border/50",children:[r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx(ct,{className:"w-3 h-3 flex-shrink-0"}),r.jsx("span",{className:"leading-none",children:Ne(new Date(e.created_at),"dd MMM",{locale:h})})]}),H&&r.jsxs("div",{className:K("flex items-center gap-1 text-[11px] font-medium",U.color),children:[r.jsx(Re,{className:"h-3 w-3"}),r.jsx("span",{children:A===0?c.firstDay:`${A}d`})]})]})]})})}),r.jsxs(ce,{children:[r.jsxs(Z,{onClick:P=>{P.stopPropagation(),a==null||a()},children:[r.jsx(dt,{className:"h-4 w-4 mr-2"}),c.duplicate]}),r.jsx(Le,{}),r.jsxs(Z,{className:"text-white focus:text-white [&>svg]:text-white",onClick:P=>{P.stopPropagation(),n==null||n()},children:[r.jsx(Ue,{className:"h-4 w-4 mr-2"}),c.delete]})]})]})}const Tt={draft:"statusDraft",ready:"statusReady",testing:"statusTesting",validated:"statusValidated",pre_scale:"statusPreScale",scaling:"statusScaling",discarded:"statusDiscarded"};function Et({status:e,items:t,onCardClick:a,onAddClick:n,onCreateClick:s,onDuplicate:l,onDelete:i}){const{setNodeRef:c,isOver:g}=et({id:e}),h=k[e],{t:p}=O(),u=p.testPipeline,b=u[Tt[e]];return r.jsxs(ie,{children:[r.jsx(le,{asChild:!0,children:r.jsxs("div",{className:"kanban-column",children:[r.jsxs("div",{className:K("flex items-center justify-between px-3 py-2 rounded-t-lg border-b h-10",h.bgClass),children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:K("font-semibold text-sm",h.color),children:b}),r.jsx("span",{className:"text-xs text-muted-foreground bg-muted/50 px-1.5 py-0.5 rounded",children:t.length})]}),e==="draft"&&n&&r.jsx(Fe,{size:"sm",variant:"ghost",className:"h-7 w-7 p-0",onClick:n,children:r.jsx(ae,{className:"h-4 w-4"})})]}),r.jsxs("div",{ref:c,className:K("flex-1 p-2 space-y-2 overflow-y-auto transition-colors",g&&"bg-primary/5 ring-2 ring-primary/20"),style:{touchAction:"pan-y"},children:[r.jsx(tt,{items:t.map(v=>v.id),strategy:rt,children:t.map(v=>r.jsx(ge,{item:v,onClick:()=>a(v),onDuplicate:l?()=>l(v):void 0,onDelete:i?()=>i(v):void 0},v.id))}),t.length===0&&r.jsx("div",{className:"flex items-center justify-center h-20 text-xs text-muted-foreground",children:u.dragItemsHere})]})]})}),r.jsx(ce,{children:r.jsxs(Z,{onClick:s,children:[r.jsx(ae,{className:"h-4 w-4 mr-2"}
2),u.addNewTest]})})]})}const ar=[{value:"meta_ads",label:"Meta Ads"},{value:"google_ads",label:"Google Ads"},{value:"tiktok_ads",label:"TikTok Ads"},{value:"other",label:"Outro"}],nr=[{value:"cpa",label:"CPA"},{value:"ctr",label:"CTR"},{value:"roas",label:"ROAS"},{value:"conversion",label:"Conversão"}],or=[{value:"creative",label:"Criativo"},{value:"audience",label:"Público"},{value:"copy",label:"Copy"},{value:"page",label:"Página"},{value:"budget",label:"Orçamento"},{value:"none",label:"Nenhum ajuste (validou direto)"}],St=[{value:"cpa_consistency",label:"Consistência de CPA"},{value:"conversion_volume",label:"Volume de conversões"},{value:"stable_roas",label:"ROAS estável"},{value:"delivery_capacity",label:"Capacidade de entrega"}],At={"draft->ready":"readiness","ready->testing":"test_config","testing->validated":"validation","validated->pre_scale":"pre_scale","pre_scale->scaling":"scale"};function Dt(e,t){return`${e}->${t}`}function It(e,t){const a=Dt(e,t);return At[a]}const Pt=_.lazy(()=>q(()=>import("./CreateTestItemModal-DdaVRUfc.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17])).then(e=>({default:e.CreateTestItemModal}))),Mt=_.lazy(()=>q(()=>import("./EditTestItemModal-DXVjeJYD.js"),__vite__mapDeps([18,1,2,3,4,5,6,7,8,9,10,12,11,13,14,15,16,17])).then(e=>({default:e.EditTestItemModal}))),Nt=_.lazy(()=>q(()=>import("./ReadinessChecklistModal-C3kLVpqB.js"),__vite__mapDeps([19,1,2,3,4,5,6,7,8,9,10])).then(e=>({default:e.ReadinessChecklistModal}))),qt=_.lazy(()=>q(()=>import("./TestConfigModal-D4L6ACiG.js"),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9,10,14,15,16,17])).then(e=>({default:e.TestConfigModal}))),kt=_.lazy(()=>q(()=>import("./ValidationReasonModal-DOeFQbx-.js"),__vite__mapDeps([21,1,2,3,4,5,6,7,8,9,10,14,15,16,17])).then(e=>({default:e.ValidationReasonModal}))),Ot=_.lazy(()=>q(()=>import("./PreScaleAdjustmentModal-ChUzy8mb.js"),__vite__mapDeps([22,1,2,3,4,5,6,7,8,9,10])).then(e=>({default:e.PreScaleAdjustmentModal}))),Rt=_.lazy(()=>q(()=>import("./ScaleDecisionModal-B3ttUJ20.js"),__vite__mapDeps([23,1,2,3,4,5,6,7,8,9,10,14,15,16,17])).then(e=>({default:e.ScaleDecisionModal})));function Lt(){const{data:e=[],isLoading:t}=_t(),a=xt(),n=ht(),s=jt(),l=yt(),i=vt(),{t:c}=O(),g=c.testPipeline,[h,p]=_.useState(null),[u,b]=_.useState(null),[v,R]=_.useState(!1),[z,L]=_.useState(!1),[A,U]=_.useState(null),[d,F]=_.useState(null),B=_.useMemo(()=>u?e.find(o=>o.id===u)??null:null,[e,u]),H=_.useRef(null),I=_.useRef({isDown:!1,isDragging:!1,startX:0,scrollLeft:0,pointerId:null}),P=st(at(lt,{activationConstraint:{distance:8}})),re=_.useMemo(()=>{const o={draft:[],ready:[],testing:[],validated:[],pre_scale:[],scaling:[],discarded:[]};return e.forEach(m=>{o[m.status]&&o[m.status].push(m)}),Object.keys(o).forEach(m=>{o[m].sort((f,M)=>f.position-M.position)}),o},[e]),C=_.useCallback(()=>{F(null)},[]),_e=o=>{const m=e.find(f=>f.id===o.active.id);p(m||null)},he=o=>{p(null);const{active:m,over:f}=o;if(!f)return;const M=m.id,$=f.id,N=e.find(w=>w.id===M);if(!N)return;let D;if(ne.includes($))D=$;else{const w=e.find(W=>W.id===$);if(!w)return;D=w.status}const J=re[D];let Y=0;if($===D)Y=J.length;else{const w=J.findIndex(W=>W.id===$);Y=w>=0?w:J.length}if(N.status!==D||N.position!==Y){a.mutate({id:M,newStatus:D,newPosition:Y,previousStatus:N.status});const w=It(N.status,D);w&&F({itemId:M,item:{...N,status:D},modalType:w,fromStatus:N.status,toStatus:D})}},ye=()=>{C()},ve=o=>{d&&(n.mutate({id:d.itemId,updates:{test_hypothesis:o.test_hypothesis,traffic_channel:o.traffic_channel,main_metric:o.main_metric,validation_criteria:o.validation_criteria}}),C())},xe=o=>{if(!d)return;const m=o.validation_factor==="none"?"other":o.validation_factor;s.mutate({test_item_id:d.itemId,adjustment_type:m,description:o.what_was_done,reason:o.supporting_data,transition_type:"validation"}),C()},be=o=>{d&&(s.mutate({test_item_id:d.itemId,adjustment_type:"other",description:o.what_was_adjusted,reason:o.risk_reduced,transition_type:"pre_scale"}),C())},je=o=>{var m;d&&(s.mutate({test_item_id:d.itemId,adjustment_type:"budget",description:o.what_was_adjusted,reason:`${g.scaleFactorPrefix}: ${((m=St.find(f=>f.value===o.scale_factor))==null?void 0:m.label)||o.scale_factor}`,transition_type:"scale"}),C())},Ce=o=>{b(o.id),L(!0)}
2,we=o=>{i.mutate(o)},Te=o=>{U(o)},Ee=()=>{A&&(l.mutate(A.id),u===A.id&&L(!1),U(null))},Se=o=>!!(o.closest(".pipeline-card")||o.closest("[data-drag-handle]")||o.closest('button, a, input, textarea, select, [role="button"], [role="menuitem"]')),Ae=o=>{if(o.button!==0)return;const m=o.currentTarget;if(!m)return;const f=o.target;if(!(!f||Se(f))){I.current={isDown:!0,isDragging:!1,startX:o.clientX,scrollLeft:m.scrollLeft,pointerId:o.pointerId};try{m.setPointerCapture(o.pointerId)}catch{}}},De=o=>{const m=o.currentTarget,f=I.current;if(!m||!f.isDown)return;const M=o.clientX-f.startX;!f.isDragging&&Math.abs(M)<3||(f.isDragging||(f.isDragging=!0,o.preventDefault()),m.scrollLeft=f.scrollLeft-M,o.preventDefault())},se=o=>{const m=o.currentTarget,f=I.current;if(!(!m||!f.isDown)&&(I.current.isDown=!1,I.current.isDragging=!1,f.pointerId!=null))try{m.releasePointerCapture(f.pointerId)}catch{}};return t?r.jsx("div",{className:"flex items-center justify-center h-64",children:r.jsx(Be,{className:"h-8 w-8 animate-spin text-muted-foreground"})}):r.jsxs(r.Fragment,{children:[r.jsxs(nt,{sensors:P,collisionDetection:ot,onDragStart:_e,onDragEnd:he,children:[r.jsx("main",{ref:H,className:"flex gap-4 h-full overflow-x-auto pb-4 px-1 cursor-grab active:cursor-grabbing select-none",style:{WebkitUserSelect:"none",userSelect:"none",touchAction:"pan-y"},onPointerDownCapture:Ae,onPointerMoveCapture:De,onPointerUpCapture:se,onPointerCancelCapture:se,children:ne.map(o=>r.jsx(Et,{status:o,items:re[o],onCardClick:Ce,onAddClick:o==="draft"?()=>R(!0):void 0,onCreateClick:()=>R(!0),onDuplicate:we,onDelete:Te},o))}),r.jsx(it,{children:h&&r.jsx("div",{className:"opacity-90 rotate-2 scale-105",children:r.jsx(ge,{item:h,onClick:()=>{}})})})]}),r.jsxs(_.Suspense,{fallback:null,children:[v&&r.jsx(Pt,{open:v,onOpenChange:R}),z&&B&&r.jsx(Mt,{item:B,open:z,onOpenChange:L}),(d==null?void 0:d.modalType)==="readiness"&&r.jsx(Nt,{open:!0,onConfirm:ye,onSkip:C}),(d==null?void 0:d.modalType)==="test_config"&&r.jsx(qt,{open:!0,onConfirm:ve,onSkip:C}),(d==null?void 0:d.modalType)==="validation"&&r.jsx(kt,{open:!0,onConfirm:xe,onSkip:C}),(d==null?void 0:d.modalType)==="pre_scale"&&r.jsx(Ot,{open:!0,onConfirm:be,onSkip:C}),(d==null?void 0:d.modalType)==="scale"&&r.jsx(Rt,{open:!0,onConfirm:je,onSkip:C})]}),r.jsx($e,{open:A!==null,onOpenChange:o=>!o&&U(null),children:r.jsxs(Ke,{children:[r.jsxs(Qe,{children:[r.jsx(Ve,{children:A?`${g.delete}: ${A.title}`:""}),r.jsx(ze,{children:g.confirmDeleteDesc})]}),r.jsxs(Ye,{children:[r.jsx(Ge,{children:g.cancel}),r.jsx(Xe,{className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",onClick:Ee,children:g.delete})]})]})})]})}function Ut(){const{t:e}=O();return r.jsxs(ut,{module:"test_pipeline",children:[r.jsx(He,{title:e.testPipeline.title,description:e.testPipeline.subtitle,path:"/test-pipeline"}),r.jsxs("div",{className:"flex flex-col h-full overflow-hidden",children:[r.jsx(Je,{title:e.testPipeline.title,subtitle:e.testPipeline.subtitle}),r.jsx("div",{className:"flex-1 overflow-hidden p-4",children:r.jsx(Lt,{})})]})]})}const ir=Object.freeze(Object.defineProperty({__proto__:null,default:Ut},Symbol.toStringTag,{value:"Module"}));export{nr as M,k as S,ar as T,or as V,rr as a,Zt as b,er as c,tr as d,Gt as e,jt as f,Wt as g,Ct as h,Ht as i,sr as j,ht as k,yt as l,de as m,ne as n,St as o,ir as p,Xt as s,Jt as u};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.