1import{a as v,j as e}from"./trpc-vendor-Bta84Nsh.js";import{t as f,D as Ne,a as ye,b as we,c as ke,B as H,I as Y,T as Ue,u as at,g as ne,d as it,C as lt,h as dt}from"./index-C-uN9Pur.js";import{S as X,a as ee,b as te,c as se,d as O}from"./select-CTuz-Yt-.js";import{t as j,at as ot,ce as Ve,bN as ct,a_ as ut,ap as xe,j as ie,aj as Se,Z as Le,au as Me,cf as Oe,p as Ke,n as Re,bP as _e,D as $e,a8 as mt,g as xt,cg as We,ch as gt,o as me,bB as He,aa as Pe,ci as Be,X as ht}from"./ui-vendor-NEZNvIbV.js";import{r as pt,n as bt}from"./controlChecklists-D9SK4nz8.js";import"./react-vendor-DpXpH6G7.js";const Ee=[["low","Niedrig"],["medium","Mittel"],["high","Hoch"],["urgent","Dringend"]];function ft({open:s,onOpenChange:S,onApplied:N}){const u=f.useUtils(),{data:b=[]}=f.tasks.templates.list.useQuery(void 0,{enabled:s}),{data:w=[]}=f.brands.list.useQuery(void 0,{enabled:s,staleTime:5*6e4}),{data:k=[]}=f.users.list.useQuery(void 0,{enabled:s,staleTime:5*6e4}),C=()=>u.tasks.templates.list.invalidate(),m=f.tasks.templates.create.useMutation({onSuccess:()=>{C(),g("list"),j.success("Vorlage gespeichert")},onError:p=>j.error(p?.message??"Fehler")}),h=f.tasks.templates.update.useMutation({onSuccess:()=>{C(),g("list"),j.success("Vorlage aktualisiert")},onError:p=>j.error(p?.message??"Fehler")}),x=f.tasks.templates.delete.useMutation({onSuccess:()=>{C(),j.success("Vorlage gelöscht")},onError:p=>j.error(p?.message??"Fehler")}),d=f.tasks.templates.instantiate.useMutation({onSuccess:p=>{j.success(`Aufgabe erstellt (${p.subtaskCount} Unteraufgaben)`),N?.(),S(!1)},onError:p=>j.error(p?.message??"Fehler")}),[l,g]=v.useState("list"),[I,T]=v.useState(null),[M,$]=v.useState(""),[P,W]=v.useState(""),[n,y]=v.useState("medium"),[z,o]=v.useState([{title:""}]),[B,U]=v.useState(null),[V,K]=v.useState("none"),[J,Z]=v.useState("none"),[c,a]=v.useState(""),A=()=>{T(null),$(""),W(""),y("medium"),o([{title:""}]),g("edit")},G=p=>{T(p.id),$(p.title),W(p.description??""),y(p.priority??"medium"),o((p.subtasks??[]).map(R=>({title:R.title})).concat({title:""})),g("edit")},E=()=>{const p=z.map(Q=>({title:Q.title.trim()})).filter(Q=>Q.title),R={title:M.trim(),description:P.trim()||null,priority:n,subtasks:p};if(!R.title){j.error("Titel fehlt");return}I?h.mutate({id:I,...R}):m.mutate(R)},le=p=>d.mutate({templateId:p,brandId:V==="none"?null:Number(V),assignedTo:J==="none"?null:Number(J),dueDate:c?new Date(c+"T00:00:00").getTime():null});return e.jsx(Ne,{open:s,onOpenChange:S,children:e.jsxs(ye,{className:"sm:max-w-lg max-h-[88vh] overflow-y-auto",children:[e.jsx(we,{children:e.jsxs(ke,{className:"flex items-center gap-2",children:[l==="edit"&&e.jsx("button",{onClick:()=>g("list"),children:e.jsx(ot,{className:"w-4 h-4"})}),e.jsx(Ve,{className:"w-4 h-4"})," Aufgaben-Vorlagen"]})}),l==="list"?e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"Wiederkehrende Aufgaben einmal definieren (Hauptaufgabe + Unteraufgaben) und mit einem Klick anlegen."}),b.length===0&&e.jsx("p",{className:"text-sm text-muted-foreground text-center py-6",children:"Noch keine Vorlagen."}),b.map(p=>{const R=(p.subtasks??[]).length,Q=B===p.id;return e.jsxs("div",{className:"rounded-lg border border-border p-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-sm font-medium text-foreground truncate",children:p.title}),e.jsxs("div",{className:"text-xs text-muted-foreground",children:[R," Unteraufgabe(n) · Priorität ",Ee.find(F=>F[0]===p.priority)?.[1]??p.priority]})]}),e.jsxs(H,{size:"sm",variant:"default",className:"gap-1 h-8",onClick:()=>{U(Q?null:p.id),K("none"),Z("none"),a("")},children:[e.jsx(ct,{className:"w-3.5 h-3.5"})," Anwenden"]}),e.jsx(H,{size:"icon",variant:"ghost",className:"h-8 w-8",onClick:()=>G(p),children:e.jsx(ut,{className:"w-3.5 h-3.5"})}),e.jsx(H,{size:"icon",variant:"ghost",className:"h-8 w-8 text-red-500",onClick:()=>{confirm("Vorlage löschen?")&&x.mutate({id:p.id})},children:e.jsx(xe,{className:"w-3.5 h-3.5"})})]}),R>0&&e.jsx("ul",{className:"mt-2 ml-1 text-xs text-muted-foreground space-y-0.5",children:(p.subtasks??[]).map((F,q)=>e.jsxs("li",{children:["⢠",F.title]},q))}),Q&&e.jsxs("div",{className:"mt-3 rounded-md bg-muted/30 p-2 space-y-2",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsxs(X,{value:V,onValueChange:K,children:[e.jsx(ee,{className:"h-8 text-xs",children:e.jsx(te,{placeholder:"Marke"})}),e.jsxs(se,{children:[e.jsx(O,{value:"none",children:"Ohne Marke"}),w.map(F=>e.jsx(O,{value:String(F.id),children:F.studioName??F.name},F.id))]})]}),e.jsxs(X,{value:J,onValueChange:Z,children:[e.jsx(ee,{className:"h-8 text-xs",children:e.jsx(te,{placeholder:"Zuständig"})}),e.jsxs(se,{children:[e.jsx(O,{value:"none",children:"Niemand"}),k.map(F=>e.jsx(O,{value:String(F.id),children:F.name??F.email},F.id))]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Y,{type:"date",value:c,onChange:F=>a(F.target.value),className:"h-8 text-xs"}),e.jsx(H,{size:"sm",className:"h-8 shrink-0",disabled:d.isPending,onClick:()=>le(p.id),children:d.isPending?"Erstelleâ¦":"Aufgabe erstellen"})]})]})]}
1,p.id)}),e.jsxs(H,{onClick:A,variant:"outline",size:"sm",className:"w-full gap-1.5 mt-1",children:[e.jsx(ie,{className:"w-4 h-4"})," Neue Vorlage"]})]}):e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-xs text-muted-foreground",children:"Hauptaufgabe"}),e.jsx(Y,{value:M,onChange:p=>$(p.target.value),placeholder:"z.B. Neues Studio onboarden"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs text-muted-foreground",children:"Beschreibung (optional)"}),e.jsx(Ue,{value:P,onChange:p=>W(p.target.value),rows:2})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs text-muted-foreground",children:"Priorität"}),e.jsxs(X,{value:n,onValueChange:y,children:[e.jsx(ee,{className:"h-9",children:e.jsx(te,{})}),e.jsx(se,{children:Ee.map(([p,R])=>e.jsx(O,{value:p,children:R},p))})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs text-muted-foreground",children:"Unteraufgaben"}),e.jsx("div",{className:"space-y-1.5 mt-1",children:z.map((p,R)=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Y,{value:p.title,placeholder:`Unteraufgabe ${R+1}`,onChange:Q=>o(F=>F.map((q,de)=>de===R?{title:Q.target.value}:q)),onKeyDown:Q=>{Q.key==="Enter"&&R===z.length-1&&p.title.trim()&&o(F=>[...F,{title:""}])}}),e.jsx(H,{size:"icon",variant:"ghost",className:"h-8 w-8 text-red-500 shrink-0",onClick:()=>o(Q=>Q.length>1?Q.filter((F,q)=>q!==R):[{title:""}]),children:e.jsx(xe,{className:"w-3.5 h-3.5"})})]},R))}),e.jsxs(H,{size:"sm",variant:"ghost",className:"gap-1 mt-1 text-xs",onClick:()=>o(p=>[...p,{title:""}]),children:[e.jsx(ie,{className:"w-3.5 h-3.5"})," Unteraufgabe"]})]}),e.jsxs("div",{className:"flex justify-end gap-2 pt-1",children:[e.jsx(H,{variant:"outline",size:"sm",onClick:()=>g("list"),children:"Abbrechen"}),e.jsx(H,{size:"sm",disabled:m.isPending||h.isPending,onClick:E,children:"Speichern"})]})]})]})})}async function Fe(s,S){try{const N=await fetch(s);if(!N.ok)throw new Error(String(N.status));const u=await N.blob(),b=URL.createObjectURL(u),w=document.createElement("a");w.href=b,w.download=S||s.split("/").pop()||"download",document.body.appendChild(w),w.click(),w.remove(),setTimeout(()=>URL.revokeObjectURL(b),5e3)}catch{window.open(s,"_blank","noopener")}}const ue=[{id:"open",label:"Offen",color:"text-muted-foreground"},{id:"in_progress",label:"In Arbeit",color:"text-amber-400"},{id:"kontrolle",label:"Kontrolle",color:"text-blue-400"},{id:"freigabe",label:"Finale Freigabe (Tim)",color:"text-purple-400"},{id:"done",label:"Erledigt",color:"text-green-400"}],Qe={low:"bg-muted text-muted-foreground",medium:"bg-blue-500/20 text-blue-400",high:"bg-amber-500/20 text-amber-400",urgent:"bg-red-500/20 text-red-400"},Ze={low:"Niedrig",medium:"Mittel",high:"Hoch",urgent:"Dringend"},ze=["bg-violet-600","bg-orange-500","bg-teal-600","bg-blue-600","bg-rose-600","bg-emerald-600","bg-fuchsia-600","bg-amber-600"],jt=s=>s==null?"bg-slate-400":ze[Math.abs(Number(s))%ze.length],vt=s=>s?.name?.split(" ").map(S=>S[0]).join("").slice(0,2).toUpperCase()||s?.email?.slice(0,2).toUpperCase()||"?",Nt={open:"border-l-slate-300 dark:border-l-slate-600",in_progress:"border-l-amber-500",kontrolle:"border-l-blue-500",freigabe:"border-l-purple-500",done:"border-l-emerald-500"},Ce=({user:s,size:S="sm"})=>e.jsx("span",{className:`inline-flex items-center justify-center rounded-full text-white font-bold ${jt(s?.id)} ${S==="lg"?"w-9 h-9 text-xs":"w-5 h-5 text-[8.5px]"}`,children:vt(s)}),yt=s=>new Promise((S,N)=>{const u=new FileReader;u.onerror=()=>N(new Error("read")),u.onloadend=()=>S(String(u.result)),u.readAsDataURL(s)});function Ge({onText:s,title:S}){const[N,u]=v.useState(!1),[b,w]=v.useState(!1),k=v.useRef(null),C=v.useRef([]),m=f.campaignPlanner.transcribe.useMutation(),h=async()=>{try{const d=await navigator.mediaDevices.getUserMedia({audio:!0}),l=new MediaRecorder(d);C.current=[],l.ondataavailable=g=>{g.data.size&&C.current.push(g.data)},l.onstop=async()=>{d.getTracks().forEach(I=>I.stop());const g=new Blob(C.current,{type:l.mimeType||"audio/webm"});w(!0);try{const I=await yt(g),T=await m.mutateAsync({audioBase64:I,mimeType:g.type||"audio/webm"});T?.transcript?s(T.transcript):j.error("Nichts erkannt â nochmal?")}catch(I){j.error(I?.message??"Transkription fehlgeschlagen")}finally{w(!1)}},l.start(),k.current=l,u(!0)}catch{j.error("Kein Mikrofon-Zugriff")}},x=()=>{try{k.current?.stop()}catch{}u(!1)};return e.jsx("button",{type:"button",onClick:N?x:h,disabled:b,title:S??"Per Sprache diktieren",className:`shrink-0 h-8 w-8 rounded-md border inline-flex items-center justify-center ${N?"border-red-500 bg-red-500/10 text-red-500 animate-pulse":"border-border text-muted-foreground hover:text-foreground"}`,children:b?e.jsx(Se,{className:"w-4 h-4 animate-spin"}):N?"â¹":"ð¤"})}function wt({task:s,users:S,onChange:N}){const u=f.useUtils(),b=f.tasks.update.useMutation({onSuccess:()=>
1u.tasks.list.invalidate(),onError:n=>j.error(n?.message??"Fehler")}),{data:w=[]}=f.tasks.getComments.useQuery({taskId:s.id},{staleTime:1e4}),k=f.tasks.addComment.useMutation({onSuccess:()=>{u.tasks.getComments.invalidate({taskId:s.id}),h(""),d(null)},onError:n=>j.error(n?.message??"Fehler")}),C=f.tasks.uploadAttachment.useMutation(),[m,h]=v.useState(""),[x,d]=v.useState(null),l=(n,y)=>y?y.startsWith("image/"):/\.(png|jpe?g|gif|webp|bmp|svg)(\?|$)/i.test(String(n??"")),[g,I]=v.useState(!1),T=v.useRef(null),M=n=>{const y=n==="none"?null:parseInt(n);b.mutate({id:s.id,assignedTo:y}),N({assignedTo:y}),j.success("Zuständigkeit gespeichert")},$=async n=>{if(n){if(n.size>50*1024*1024){j.error("Datei zu groà (max. 50 MB)");return}I(!0);try{const y=await new Promise((o,B)=>{const U=new FileReader;U.onerror=B,U.onload=()=>o(String(U.result).split(",")[1]??""),U.readAsDataURL(n)}),z=await C.mutateAsync({fileBase64:y,fileName:n.name,mimeType:n.type,taskId:s.id});d({url:z.url,name:z.name,mime:z.mimeType})}catch(y){j.error(y?.message??"Upload fehlgeschlagen")}finally{I(!1)}}},P=()=>{!m.trim()&&!x||k.mutate({taskId:s.id,content:m.trim(),imageUrl:x?.url??null})},W=n=>S.find(y=>y.id===n);return e.jsxs("div",{className:"border-t border-border pt-3 space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"text-xs font-semibold text-foreground shrink-0",children:"Wer bearbeitet das?"}),e.jsxs(X,{value:s.assignedTo?String(s.assignedTo):"none",onValueChange:M,children:[e.jsx(ee,{className:"h-8 text-xs w-56 border-border",children:e.jsx(te,{placeholder:"Niemand zugewiesen"})}),e.jsxs(se,{children:[e.jsx(O,{value:"none",children:"Niemand"}),S.map(n=>e.jsx(O,{value:String(n.id),children:n.name||n.email},n.id))]})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs font-semibold text-foreground mb-1.5",children:["Kommentare ",w.length>0&&e.jsxs("span",{className:"text-muted-foreground font-normal",children:["(",w.length,")"]})]}),e.jsxs("div",{className:"space-y-2 max-h-52 overflow-y-auto pr-1",children:[w.length===0&&e.jsx("div",{className:"text-[11px] text-muted-foreground italic",children:"Noch keine Kommentare â woran hakt es? Hier notieren."}),w.map(n=>{const y=W(n.userId)??{id:n.userId,name:n.userName,email:n.userEmail};return e.jsxs("div",{className:"flex gap-2",children:[e.jsx(Ce,{user:y}),e.jsxs("div",{className:"flex-1 min-w-0 bg-muted/40 rounded-lg px-2.5 py-1.5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-[11px] font-bold text-foreground",children:n.userName||y?.name||y?.email||"Jemand"}),e.jsx("span",{className:"text-[9.5px] text-muted-foreground",children:n.createdAt?new Date(n.createdAt).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit"}):""})]}),n.content&&e.jsx("div",{className:"text-[11.5px] text-foreground whitespace-pre-wrap mt-0.5",children:n.content}),n.imageUrl&&(l(n.imageUrl)?e.jsx("a",{href:n.imageUrl,target:"_blank",rel:"noreferrer",children:e.jsx("img",{src:n.imageUrl,alt:"",className:"mt-1.5 rounded-md max-h-40 border border-border"})}):e.jsxs("a",{href:n.imageUrl,target:"_blank",rel:"noreferrer",className:"mt-1.5 inline-flex items-center gap-1.5 text-[11px] font-semibold text-primary border border-border rounded-md px-2 py-1 hover:bg-muted/40",children:[e.jsx(Be,{className:"w-3 h-3"})," Anhang öffnen (PDF/Datei)"]}))]})]},n.id)})]}),x&&e.jsxs("div",{className:"mt-2 flex items-center gap-2 text-[11px] text-muted-foreground",children:[l(x.url,x.mime)?e.jsx("img",{src:x.url,alt:"",className:"h-10 w-10 object-cover rounded border border-border"}):e.jsx("span",{className:"h-10 w-10 rounded border border-border flex items-center justify-center text-base",children:"ð"}),e.jsx("span",{className:"truncate flex-1",children:x.name}),e.jsx("button",{onClick:()=>d(null),className:"text-red-500",children:"entfernen"})]}),e.jsxs("div",{className:"flex items-center gap-1.5 mt-2",children:[e.jsx("input",{value:m,onChange:n=>h(n.target.value),onKeyDown:n=>{n.key==="Enter"&&P()},placeholder:"Kommentar â was ist das Problem? (auch per ð¤)",className:"flex-1 h-8 rounded-md border border-border bg-background text-foreground text-xs px-2.5"}),e.jsx(Ge,{title:"Kommentar einsprechen",onText:n=>h(y=>(y?y+" ":"")+n)}),e.jsx("input",{ref:T,type:"file",accept:"image/*,application/pdf",className:"hidden",onChange:n=>$(n.target.files?.[0]??null)}),e.jsx("button",{type:"button",onClick:()=>T.current?.click(),disabled:g,title:"Bild oder PDF anhängen",className:"shrink-0 h-8 w-8 rounded-md border border-border text-muted-foreground hover:text-foreground inline-flex items-center justify-center",children:g?e.jsx(Se,{className:"w-4 h-4 animate-spin"}):e.jsx(Be,{className:"w-4 h-4"})}),e.jsx("button",{onClick:P,disabled:!m.trim()&&!x||k.isPending,className:"h-8 px-3 rounded-md bg-primary text-primary-foreground text-xs font-semibold disabled:opacity-40",children:"Senden"})]})]})]})}const kt=["Hook in die Kamera (Coach/Inhaber) · 15â20 Sek. · 2 Takes","Angebots-Ansage: Was, wie lange, für wen · 15 Sek.","Trainingsfläche mit Betrieb (B-Roll) · 3â4à 5 Sek.","Mitglied-Testimonial · 20 Sek. · Einverständnis abfragen","AuÃenansicht + Logo · 5 Sek."],St="Hochkant 9:16 · neuestes Handy · Fenster vor dir (kein Gegenlicht) · Ansteckmikro · Originaldateien hochladen · kurz & knackig, auf die USPs fokussiert.";function Ct(s,S,N){const u=g=>String(g??"").replace(/[&<>]/g,I=>({"&":"&","<":"<",">":">"})[I]),b=S.find(g=>g.id===s.brandId),w=b?.studioName||b?.name||"Studio",k=(s.description||"[Angebot hier eintragen]").trim(),C=N?.intro&&Str
1ing(N.intro).trim()||`Ziel: Leads über Meta-Ads. Kernbotschaft (muss in jedem Video fallen): ${k}. Sprechtexte in eigenen Worten, jeden Text 2â3à aufnehmen.`,m=Array.isArray(N?.shots)&&N.shots.length?N.shots:kt,h=N?.rules&&String(N.rules).trim()||St,x=[{t:"Spot 1 â Das Angebot (Preis-Hook)",set:"Mitten auf der Trainingsfläche.",txt:`â${k}. Fang jetzt an â Link ist unten."`,reg:"Angebot am Anfang mit kurzer Pause."},{t:"Spot 2 â Warum wir (USP)",set:"Start am Check-in, dann Cut auf die Fläche.",txt:`âModerne Geräte, faire Preise, du trainierst wann du willst â kein Verkaufsdruck. ${k}."`,reg:"Echtes Einchecken filmen."},{t:"Spot 3 â Der Einwand",set:"Ruhiger Bereich, direkt in die Kamera.",txt:`ââKeine Zeit fürs Studio?' Früh offen, spät offen. ${k} â mehr kann's dich nicht kosten."`,reg:"Letzter Satz mit Lächeln."}],d=`<!doctype html><html lang="de"><head><meta charset="utf-8"><title>Video-Briefing · ${u(w)}</title><style> 2 @page{size:A4;margin:14mm}*{box-sizing:border-box;margin:0;padding:0;font-family:'Segoe UI',Arial,sans-serif;color:#14161c} 3 .head{border-bottom:2px solid #14161c;padding-bottom:10px;margin-bottom:12px;display:flex;justify-content:space-between;align-items:flex-end}.wm{font-size:15px;font-weight:800}.wm span{color:#c99c2d}.k{font-size:9px;letter-spacing:2px;text-transform:uppercase;color:#b98f00;font-weight:800}h1{font-size:17px;font-weight:900;margin-top:2px} 4 .meta{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}.chip{font-size:10px;border:1px solid #e2ded6;border-radius:20px;padding:3px 10px;color:#33424e} 5 h2{font-size:13px;font-weight:800;margin:14px 0 5px}.box{border:1px solid #e2ded6;border-radius:9px;padding:9px 12px;font-size:11.5px;line-height:1.55;color:#33424e}ul{margin:2px 0 0 16px}li{font-size:11px;margin-bottom:2px} 6 .kb{background:#fff7d6;border:1px solid #ecd98a;border-radius:9px;padding:9px 12px;font-size:11.5px;color:#6b5518} 7 .spot{border:1px solid #e2ded6;border-radius:9px;padding:9px 12px;margin-top:7px;page-break-inside:avoid}.spot .st{font-size:12px;font-weight:800}.spot .set{font-size:10px;color:#8a94a0;margin-top:1px}.spot .txt{font-size:12px;font-style:italic;margin-top:5px;padding-left:9px;border-left:2px solid #F0C000}.spot .reg{font-size:10px;color:#8a5a12;margin-top:4px} 8 .foot{margin-top:16px;border-top:1px solid #e2ded6;padding-top:7px;font-size:9px;color:#9aa6ae} 9 </style></head><body> 10 <div class="head"><div class="wm">More<span>Members</span></div><div style="text-align:right"><div class="k">Video-Briefing</div><h1>${u(s.title||"Kampagne")}</h1></div></div> 11 <div class="meta"><span class="chip">Studio: <b>${u(w)}</b></span><span class="chip">Format: <b>9:16 hochkant</b></span><span class="chip"><b>3 Video-Varianten</b></span></div> 12 <h2>Ziel & Kernbotschaft</h2><div class="box">${u(C).replace(/\n/g,"<br>")}</div> 13 <h2>Shotliste</h2><div class="box"><ul>${m.map(g=>`<li>${u(g)}</li>`).join("")}</ul></div> 14 <h2>3 Video-Varianten (Spots) â je ein eigenes Video</h2>${x.map(g=>`<div class="spot"><div class="st">${u(g.t)}</div><div class="set">Setting: ${u(g.set)}</div><div class="txt">${u(g.txt)}</div><div class="reg">Regie: ${u(g.reg)}</div></div>`).join("")} 15 <h2>Testimonial</h2><div class="kb"><b>Wichtig:</b> Frage wird rausgeschnitten â Antwort muss für sich stehen. âBau meine Frage in deine Antwort ein." Statt â5 Jahre" â âIch trainiere seit 5 Jahren hier â¦". Leicht seitlich, 2 Anläufe.</div> 16 <h2>Formatregeln</h2><div class="box">${u(h)}</div> 17 <div class="foot">MoreMembers · Video-Briefing · [email protected]</div> 18 </body></html>`,l=window.open("","_blank");if(!l){j.error("Bitte Popups erlauben.");return}l.document.write(d),l.document.close(),l.focus(),setTimeout(()=>{try{l.print()}catch{}},400)}function At({task:s,userRole:S,onChange:N}){const u=f.useUtils(),b=["admin","manager","marketing"].includes(S),[w,k]=v.useState(!0),{data:C}=f.tasks.getControlChecklists.useQuery(void 0,{staleTime:6e4}),m=f.tasks.setControlChecklist.useMutation({onSuccess:()=>
18u.tasks.list.invalidate(),onError:c=>j.error(c?.message??"Fehler")}),h=f.tasks.review.useMutation({onSuccess:()=>u.tasks.list.invalidate(),onError:c=>j.error(c?.message??"Fehler")}),[x,d]=v.useState([]),[l,g]=v.useState(""),[I,T]=v.useState(!1),[M,$]=v.useState(!1),[P,W]=v.useState("");v.useEffect(()=>{let c=null;try{c=s.controlChecklist?JSON.parse(s.controlChecklist):null}catch{c=null}if(Array.isArray(c)&&c.length){d(c.map(A=>({text:String(A.text??""),done:!!A.done})));return}const a=pt(s,bt(C));d((a.items??[]).map(A=>({text:A,done:!1})))},[s.id,s.controlChecklist,C]);const n=c=>{if(!b)return;const a=x.map((A,G)=>G===c?{...A,done:!A.done}:A);d(a),m.mutate({id:s.id,items:a})},y=c=>{d(c),m.mutate({id:s.id,items:c})},z=()=>{const c=P.trim();c&&(y([...x,{text:c.slice(0,300),done:!1}]),W(""))},o=c=>y(x.filter((a,A)=>A!==c)),B=(c,a)=>d(x.map((A,G)=>G===c?{...A,text:a}:A)),U=()=>m.mutate({id:s.id,items:x}),V=x.length>0&&x.every(c=>c.done),K=x.filter(c=>c.done).length,J=()=>{if(!V){j.error("Erst alle Punkte abhaken.");return}h.mutate({id:s.id,decision:"approve"},{onSuccess:()=>{N({status:"done"}),j.success("Freigegeben â")}})},Z=()=>{if(!l.trim()){j.error("Bitte Feedback angeben.");return}h.mutate({id:s.id,decision:"reject",feedback:l.trim()},{onSuccess:()=>{N({status:"in_progress"}),T(!1),g(""),j.success("Zurück an die Bearbeitung")}})};return e.jsxs("div",{className:"border border-blue-500/40 bg-blue-500/5 rounded-xl overflow-hidden",children:[e.jsxs("div",{className:"w-full flex items-center gap-2 px-3 py-2.5",children:[e.jsxs("button",{onClick:()=>k(c=>!c),className:"flex-1 text-left text-blue-600 dark:text-blue-400 font-bold text-sm",children:["ð Kontrolle ",x.length>0&&e.jsxs("span",{className:"font-normal text-muted-foreground",children:["· ",K,"/",x.length]})]}),b&&w&&e.jsx("button",{onClick:()=>{M&&U(),$(c=>!c)},className:"text-[11px] font-semibold text-blue-600 dark:text-blue-400 px-2 py-0.5 rounded hover:bg-blue-500/10",children:M?"â fertig":"â bearbeiten"}),e.jsx("button",{onClick:()=>k(c=>!c),className:"text-xs text-muted-foreground",children:w?"â¾":"â¸"})]}),w&&e.jsxs("div",{className:"px-3 pb-3 space-y-2",children:[!b&&e.jsx("div",{className:"text-[11px] text-muted-foreground italic",children:"Die Kontrolle macht der Admin oder Marketing-Lead."}),M&&b&&e.jsx("div",{className:"text-[11px] text-muted-foreground",children:"Punkte als Hilfestellung/Fehlerquellen â Leonie hakt sie später ab. Ãnderungen gelten für diese Aufgabe."}),e.jsx("div",{className:"space-y-1",children:x.map((c,a)=>M&&b?e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("input",{value:c.text,onChange:A=>B(a,A.target.value),onBlur:U,className:"flex-1 h-8 rounded-md border border-border bg-background text-foreground text-[12.5px] px-2"}),e.jsx("button",{onClick:()=>o(a),className:"text-red-500 hover:text-red-600 shrink-0 px-1",title:"Punkt löschen",children:e.jsx(xe,{className:"w-3.5 h-3.5"})})]},a):e.jsxs("button",{onClick:()=>n(a),disabled:!b,className:`flex items-start gap-2 w-full text-left rounded-md px-1.5 py-1 ${b?"hover:bg-blue-500/10":"cursor-default"}`,children:[e.jsx("span",{className:`w-4 h-4 rounded border-2 shrink-0 mt-0.5 text-[11px] text-center leading-[13px] ${c.done?"bg-emerald-500 border-emerald-500 text-white":"border-blue-400"}`,children:c.done?"â":""}),e.jsx("span",{className:`text-[12.5px] ${c.done?"line-through text-muted-foreground":"text-foreground"}`,children:c.text})]},a))}),M&&b&&e.jsxs("div",{className:"flex items-center gap-1.5 pt-1",children:[e.jsx("input",{value:P,onChange:c=>W(c.target.value),onKeyDown:c=>{c.key==="Enter"&&z()},placeholder:"Neuen Prüfpunkt hinzufügenâ¦",className:"flex-1 h-8 rounded-md border border-border bg-background text-foreground text-[12.5px] px-2"}),e.jsx("button",{onClick:z,disabled:!P.trim(),className:"text-xs font-semibold px-2.5 h-8 rounded-md bg-blue-600 text-white disabled:opacity-40",children:"+ Hinzufügen"})]}),b&&!M&&e.jsx("div",{className:"pt-1",children:I?e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("input",{value:l,onCh
18ange:c=>g(c.target.value),placeholder:"Was muss korrigiert werden? (auch per ð¤)",className:"flex-1 h-8 rounded-md border border-border bg-background text-foreground text-xs px-2.5"}),e.jsx(Ge,{title:"Feedback einsprechen",onText:c=>g(a=>(a?a+" ":"")+c)})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("button",{onClick:Z,disabled:!l.trim()||h.isPending,className:"flex-1 text-xs font-bold py-2 rounded-lg bg-orange-600 text-white disabled:opacity-40",children:"Zurück senden"}),e.jsx("button",{onClick:()=>{T(!1),g("")},className:"text-xs py-2 px-3 rounded-lg border border-border text-muted-foreground",children:"Abbrechen"})]})]}):e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("button",{onClick:J,disabled:!V||h.isPending,className:`flex-1 text-xs font-bold py-2 rounded-lg ${V?"bg-emerald-600 text-white":"bg-muted text-muted-foreground"}`,children:["â Freigeben",x.length?` (${K}/${x.length})`:""]}),e.jsx("button",{onClick:()=>T(!0),className:"flex-1 text-xs font-bold py-2 rounded-lg border border-orange-500/50 text-orange-600 dark:text-orange-400",children:"â© Zurück mit Feedback"})]})})]})]})}function Tt({taskId:s,taskBrandId:S,users:N=[]}){const u=f.useUtils(),{data:b=[]}=f.tasks.listSubtasks.useQuery({parentId:s}),w=f.tasks.createSubtask.useMutation({onSuccess:()=>{u.tasks.listSubtasks.invalidate({parentId:s}),u.tasks.list.invalidate(),h("")}}),k=f.tasks.update.useMutation({onSuccess:()=>{u.tasks.listSubtasks.invalidate({parentId:s}),u.tasks.list.invalidate()}}),C=f.tasks.delete.useMutation({onSuccess:()=>{u.tasks.listSubtasks.invalidate({parentId:s}),u.tasks.list.invalidate()}}),[m,h]=v.useState(""),[x,d]=v.useState({}),l=o=>d(B=>({...B,[o]:!(o in B?B[o]:y(o))})),g=()=>{const o=m.trim();o&&w.mutate({parentId:s,title:o})},I=b.filter(o=>o.status==="done").length,T=b.length,M={Studiophase:0,"Set Up":1,Vorbereitung:2,Kampagnenstart:3},$=o=>o&&o in M?M[o]:99,P=b.map((o,B)=>({s:o,i:B})).sort((o,B)=>$(o.s.phase)-$(B.s.phase)||o.i-B.i).map(o=>o.s),W=P.some(o=>!!o.phase),n=o=>o.phase||(W?"Ohne Phase":"");function y(o){const B=P.filter(U=>n(U)===o);return B.length>0&&B.every(U=>U.status==="done")}const z=o=>o in x?x[o]:y(o);return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(We,{className:"w-4 h-4 text-primary"}),e.jsx("span",{className:"text-sm font-semibold",children:"Unteraufgaben"}),T>0&&e.jsxs("span",{className:"text-xs text-muted-foreground ml-auto",children:[I,"/",T," erledigt"]})]}),e.jsxs("div",{className:"space-y-1",children:[P.map((o,B)=>{const U=o.status==="done",V=n(o),K=B>0?n(P[B-1]):null,J=!!V&&V!==K,Z=V?P.filter(E=>n(E)===V):[],c=Z.filter(E=>E.status==="done").length,a=Z.length>0&&c===Z.length,A=o.phase&&o.phase in M?M[o.phase]+1:null,G=V?z(V):!1;return e.jsxs(v.Fragment,{children:[J&&e.jsxs("button",{type:"button",onClick:()=>l(V),className:"flex items-center gap-2 pt-3 pb-0.5 w-full text-left hover:opacity-80",children:[e.jsx("span",{className:"text-[11px] shrink-0 text-primary",children:z(V)?"â¸":"â¾"}),e.jsx("span",{className:"text-[11px] font-extrabold uppercase tracking-wider text-primary whitespace-nowrap",children:A?`Phase ${A} · ${o.phase}`:V}),e.jsxs("span",{className:`text-[10px] whitespace-nowrap ${a?"text-green-500":"text-muted-foreground"}`,children:[c,"/",Z.length,a?" â":""]}),e.jsx("div",{className:"flex-1 h-px bg-primary/30"})]}),!G&&e.jsxs("div",{className:"flex items-center gap-2 rounded-md px-2 py-1.5 hover:bg-muted/30 group",children:[e.jsx("button",{onClick:()=>k.mutate({id:o.id,status:U?"open":"done"}),className:`shrink-0 transition-colors ${U?"text-green-400":"text-muted-foreground hover:text-foreground"}`,children:U?e.jsx(me,{className:"w-4 h-4"}):e.jsx(He,{className:"w-4 h-4"})}),e.jsx("span",{className:`flex-1 text-sm ${U?"line-through text-muted-foreground":"text-foreground"}`,children:o.title}),e.jsxs("select",{value:o.assignedTo??"",onClick:E=>E.stopPropagation(),onChange:E=>k.mutate({id:o.id,assignedTo:E.target.value?parseInt(E.target.value):null}),title:"Verantwortlich â wer macht das?",className:`shrink-0 h-6 max-w-[120px] text-[10px] rounded border px-1 ${o.assignedTo?"border-primary/40 bg-primary/5 text-foreground font-semibold":"border-border bg-background text-muted-foreground"}`,children:[e.jsx("option",{value:"",children:"â wer?"}),N.map(E=>e.jsx("option",{value:E.id,children:E.name||E.email},E.id))]}),o.dueDate&&e.jsx("span",{className:`text-[10px] shrink-0 ${o.dueDate<Date.now()&&
18!U?"text-red-400":"text-muted-foreground"}`,children:new Date(o.dueDate).toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit"})}),e.jsx("button",{onClick:()=>C.mutate({id:o.id}),className:"opacity-0 group-hover:opacity-100 text-muted-foreground hover:text-destructive transition-all",children:e.jsx(ht,{className:"w-3.5 h-3.5"})})]})]},o.id)}),T===0&&e.jsx("p",{className:"text-xs text-muted-foreground px-2 py-1",children:"Noch keine Unteraufgaben."})]}),e.jsxs("div",{className:"flex gap-2 items-center",children:[e.jsx(Y,{placeholder:"Unteraufgabe hinzufügenâ¦",value:m,onChange:o=>h(o.target.value),onKeyDown:o=>{o.key==="Enter"&&g()},className:"text-sm h-8"}),e.jsx(H,{size:"sm",variant:"outline",className:"h-8 px-3 shrink-0",disabled:!m.trim()||w.isPending,onClick:g,children:e.jsx(ie,{className:"w-3.5 h-3.5"})})]})]})}function Dt({task:s,brandName:S,brands:N,users:u,onEdit:b,onDelete:w,onStatusChange:k,onOpenDetail:C,userRole:m,hasUnread:h}){const x=f.useUtils(),d=f.tasks.toggleBrandChecklist.useMutation({onSuccess:()=>x.tasks.list.invalidate()}),l=s.dueDate&&s.dueDate<Date.now()&&s.status!=="done",g=s.subtaskTotal??0,I=s.subtaskDone??0,T=g>0?Math.round(I/g*100):0,M=Array.isArray(s.brandIds)?s.brandIds:[],$=s.brandChecklist??{},P=M.filter(n=>$[String(n)]==="done").length,W=M.length>=2;return e.jsx(lt,{className:`bg-card border-border border-l-[3px] ${Nt[s.status]} ${l?"border-l-red-500":""} hover:border-primary/30 hover:shadow-md transition-all cursor-pointer group rounded-xl`,onClick:()=>C(s),children:e.jsxs(dt,{className:"p-3",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2 mb-2",children:[e.jsx("p",{className:`text-sm font-medium leading-snug flex-1 ${s.status==="done"?"line-through text-muted-foreground":"text-foreground"}`,children:s.title}),h&&e.jsxs("span",{className:"relative shrink-0 mt-0.5",title:"Neuer Kommentar â zum Lesen öffnen",children:[e.jsx(mt,{className:"w-4 h-4 text-amber-500"}),e.jsx("span",{className:"absolute -top-1 -right-1 w-2 h-2 rounded-full bg-red-500 ring-2 ring-card"})]}),e.jsxs("div",{className:"flex gap-1 shrink-0",children:[s.status!=="done"&&(()=>{const n=m==="assistant";return e.jsx("button",{onClick:y=>{y.stopPropagation(),k(s.id,n?"kontrolle":"done")},className:`h-7 w-7 flex items-center justify-center rounded ${n?"hover:bg-blue-500/15 text-blue-600 dark:text-blue-400":"hover:bg-emerald-500/15 text-emerald-600 dark:text-emerald-400"}`,title:n?"Zur Kontrolle geben (Freigabe durch Admin/Marketing-Lead)":"Als erledigt markieren",children:e.jsx(xt,{className:"w-4 h-4"})})})(),e.jsx("button",{onClick:n=>{n.stopPropagation(),b(s)},className:"h-7 w-7 flex items-center justify-center rounded hover:bg-accent text-muted-foreground hover:text-foreground",title:"Bearbeiten",children:e.jsx(_e,{className:"w-3.5 h-3.5"})}),e.jsx("button",{onClick:n=>{n.stopPropagation(),w(s.id)},className:"h-7 w-7 flex items-center justify-center rounded hover:bg-destructive/20 text-muted-foreground hover:text-destructive",title:"Loeschen",children:e.jsx(xe,{className:"w-3.5 h-3.5"})})]})]}),s.description&&e.jsx("p",{className:"text-xs text-muted-foreground mb-2 line-clamp-2",children:s.description}),s.reviewFeedback&&s.status!=="done"&&e.jsxs("div",{className:"mb-2 text-[11px] rounded-md border border-red-400/40 bg-red-500/10 text-red-600 dark:text-red-300 px-2 py-1.5",children:[e.jsx("span",{className:"font-semibold",children:"Korrektur:"})," ",s.reviewFeedback]}),g>0&&e.jsxs("div",{className:"mb-2",onClick:n=>{n.stopPropagation(),C(s)},children:[e.jsxs("div",{className:"flex items-center justify-between text-[10px] text-muted-foreground mb-0.5",children:[e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(We,{className:"w-3 h-3"}),"Unteraufgaben"]}),e.jsxs("span",{children:[I,"/",g]})]}),e.jsx("div",{className:"h-1 bg-muted rounded-full overflow-hidden",children:e.jsx("div",{className:`h-full rounded-full transition-all ${T===100?"bg-green-500":"bg-primary"}`,style:{width:`${T}%`}})})]}),e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsxs(ne,{className:`text-[10px] px-1.5 py-0 h-4 ${Qe[s.priority]}`,children:[e.jsx(Oe,{className:"w-2.5 h-2.5 mr-1"}),Ze[s.priority]]}),s.autoCheckKey&&e.jsxs(ne,{className:"text-[10px] px-1.5 py-0 h-4 bg-amber-500/15 text-amber-600 dar
18k:text-amber-400 border-amber-500/30",title:"Automatisch vom System angelegt â verschwindet wenn die Einstellung erledigt ist.",children:[e.jsx(Le,{className:"w-2.5 h-2.5 mr-1"}),"System"]}),s.recurrence&&s.recurrence!=="none"&&e.jsxs(ne,{className:"text-[10px] px-1.5 py-0 h-4 bg-purple-500/15 text-purple-600 dark:text-purple-400 border-purple-500/30",title:`Wiederholung: alle ${s.recurrenceInterval??1} ${s.recurrence==="daily"?"Tag(e)":s.recurrence==="weekly"?"Woche(n)":"Monat(e)"}`,children:[e.jsx(gt,{className:"w-2.5 h-2.5 mr-1"}),s.recurrence==="daily"?"tägl.":s.recurrence==="weekly"?"wöch.":"mtl."]}),S&&e.jsxs(ne,{className:"text-[10px] px-1.5 py-0 h-4 bg-primary/10 text-primary border-primary/20",children:[e.jsx(Ke,{className:"w-2.5 h-2.5 mr-1"}),S]}),s.dueDate&&e.jsxs("span",{className:`flex items-center gap-1 text-[10px] ${l?"text-red-400":"text-muted-foreground"}`,children:[e.jsx(Re,{className:"w-2.5 h-2.5"}),new Date(s.dueDate).toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit"})]}),s.assignedTo&&(()=>{const n=u.find(y=>y.id===s.assignedTo);return n?e.jsx("span",{title:n.name||n.email,children:e.jsx(Ce,{user:n})}):null})(),W&&e.jsxs(ne,{className:"text-[10px] px-1.5 py-0 h-4 bg-blue-500/10 text-blue-600 dark:text-blue-400 border-blue-500/20",title:"Multi-Brand-Checklist",children:[e.jsx(me,{className:"w-2.5 h-2.5 mr-1"}),P,"/",M.length]})]}),s.status==="done"&&s.completedBy&&(()=>{const n=u.find(o=>o.id===s.completedBy),y=n?n.name||n.email:"jemandem",z=s.completedAt?new Date(s.completedAt).toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit",year:"2-digit"}):"";return e.jsxs("div",{className:"mt-1.5 text-[10px] text-emerald-600 dark:text-emerald-400 flex items-center gap-1",children:[e.jsx(me,{className:"w-2.5 h-2.5"})," erledigt von ",y,z?` · ${z}`:""]})})(),W&&e.jsx("div",{className:"mt-2 pt-2 border-t border-border space-y-1",onClick:n=>n.stopPropagation(),children:M.map(n=>{const y=N.find(o=>o.id===n),z=$[String(n)]==="done";return e.jsxs("button",{type:"button",onClick:()=>d.mutate({taskId:s.id,brandId:n,done:!z}),className:`flex items-center gap-2 text-[11px] w-full text-left rounded px-1.5 py-0.5 hover:bg-muted/40 transition-colors ${z?"line-through text-muted-foreground":"text-foreground"}`,children:[z?e.jsx(me,{className:"w-3 h-3 text-emerald-500"}):e.jsx(He,{className:"w-3 h-3 text-muted-foreground"}),e.jsx("span",{className:"truncate",children:y?y.studioName||y.name:`Brand #${n}`})]},n)})}),s.status!=="done"&&e.jsxs("div",{className:"mt-2 pt-2 border-t border-border flex gap-1",onClick:n=>n.stopPropagation(),children:[s.status==="open"&&e.jsxs("button",{onClick:()=>k(s.id,"in_progress"),className:"flex items-center gap-1 text-[10px] text-amber-400 hover:text-amber-300",children:[e.jsx(Pe,{className:"w-3 h-3"})," In Arbeit"]}),s.status==="in_progress"&&e.jsxs("button",{onClick:()=>k(s.id,"done"),className:"flex items-center gap-1 text-[10px] text-green-400 hover:text-green-300",children:[e.jsx(Pe,{className:"w-3 h-3"})," Erledigt"]})]})]})})}function It({tasks:s,users:S,onOpenDetail:N}){const u=Date.now(),b=s.filter(d=>d.status!=="done"),w=d=>d.dueDate!=null&&Number(d.dueDate)<u,k=new Map;for(const d of b){const l=d.assignedTo??"none";k.has(l)||k.set(l,[]),k.get(l).push(d)}const C=k.get("none")??[],m=new Map;for(const d of s)d.status==="done"&&d.assignedTo!=null&&m.set(d.assignedTo,(m.get(d.assignedTo)??0)+1);const h=S.map(d=>({u:d,list:k.get(d.id)??[],doneCount:m.get(d.id)??0})).filter(d=>d.list.length>0||d.doneCount>0).sort((d,l)=>l.list.filter(w).length-d.list.filter(w).length||l.list.length-d.list.length||l.doneCount-d.doneCount),x=({t:d})=>{const l=w(d),g=d.status==="kontrolle";return e.jsxs("button",{onClick:()=>N(d),className:`text-[11px] font-medium px-2 py-1 rounded-md border text-left transition-colors hover:bg-muted/60 ${l?"border-l-2 border-l-red-500 bg-red-500/5 text-foreground":g?"border-l-2 border-l-blue-500 bg-card text-foreground":"border-l-2 border-l-amber-500 bg-card text-foreground"} border-border`,title:d.title,children:[l&&"â° ",d.title.length>42?d.title.slice(0,40)+"â¦":d.title]})};return e.jsxs("div",{className:"space-y-2.5",children:[C.length>0&&e.jsxs("div",{className:"rounded-lg border border-red-500/40 bg-red-500/5 overflow-hidden flex flex-col sm:flex-row",children:[e.jsxs("div",{className:"sm:w-52 shrink-0 bg-red-500/10 px-4 py-3 border-b sm:border-b-0 sm:border-r border-red-500/30",children:[e.jsx("div",{className:"text-sm font-bold text-red-600 dark:text-red-400",children:"â Nicht zugewiesen"}),e.jsxs("div",{className:"text-[11px] text-red-600/80 dark:text-red-400/80 mt-0.5",children:[C.length," Aufgabe",C.length===1?"":"n"," â braucht jemanden"]})]}),e.jsx("div",{className:"flex-1 p-2.5 flex flex-wrap gap-1.5 items-center",children:C.map(d=>e.jsx(x,{t:d},d.id))})]}),h.length===0&&C.length===0&&e.jsx("div",{className:"border border-dashed border-border rounded-lg p-6 text-center text-sm text-muted-foreground",children:"Keine offenen Aufgaben."}),h.map(({u:d,list:l,doneCount:g})=>{const I=l.filter(w).length,T=l.filter(P=>P.status==="in_progress").length,M=l.filter(P=>P.status==="kontrolle").length,$=l.length===0;return e.jsxs("div",{className:"rounded-xl border border-border bg-card overflow-hidden flex flex-col sm:flex-row shadow-sm",children:[e.jsxs("div",{className:"sm:w-56 shrink-0 bg-muted/40 px-4 py-3 border-b sm:border-b-0 sm:border-r border-border flex items-center gap-3",children:[e.jsx(Ce,{user:d,size:"lg"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-sm font-bold text-foreground truncate",children:d.name||d.email}),e.jsxs("div",{className:"text-[11px] text-muted-foreground",children:[$?e.jsx("span",{className:"text-emerald-600 dark:text-emerald-400 font-semibold",children:"alles erledigt â"}):e.jsxs(e.Fragment,{children:[T," in Arbeit",M>0?` · ${M} Kontrolle`:"",I>0?e.jsxs("span",{className:"text-red-500 font-semibold",children:[" · ",I," überfällig"]}):""]}),g>0&&e.jsxs("span",{className:"opacity-70",children:[" · ",g," erledigt"]})]}),e.jsx("div",{className:"h-1.5 bg-muted rounded-full overflow-hidden mt-1.5",title:`${l.length} offene Aufgaben`,children:e.jsx("div",{className:`h-full rounded-full ${I>0?"bg-red-500":$?"bg-emerald-500":"bg-amber-500"}`,style:{width:`${$?100:Math.min(100,l.length*12)}%`}})})]})]}),e.jsx("div",{className:"flex-1 p-2.5 flex flex-wrap gap-1.5 items-center",children:$?e.jsx("span",{className:"text-[11px] text-muted-foreground italic",children:"Kein offener Ball â alles erledigt."}):l.map(P=>e.jsx(x,{t:P},P.id))})]},d.id)})]})}function Mt({tasks:s,brands:S,studioDone:N,pending:u,onToggle:b}){const w=new Set(N),k=m=>s.filter(h=>h.brandId===m||Array.isArray(h.brandIds)&&h.brandIds.includes(m)),C=S.map(m=>{const h=k(m.id),x=h.length,d=h.filter(l=>l.status==="done").length;return{b:m,total:x,done:d,pct:x>0?Math.round(d/x*100):0,markedDone:w.has(m.id)}}).filter(m=>m.total>0||m.markedDone).sort((m,h)=>m.markedDone===h.markedDone?h.pct-m.pct:m.markedDone?1:-1);return C.length===0?e.jsx("div",{className:"border border-dashed border-border rounded-lg p-6 text-center text-sm text-muted-foreground",children:"Noch keine Studio-Aufgaben."}):e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3",children:C.map(({b:m,total:h,done:x,pct:d,markedDone:l})=>{const g=l?100:d,I=l||x===h?"#16a34a":"#f59e0b";return e.jsxs("div",{className:`rounded-xl border p-4 shadow-sm ${l?"border-emerald-500/40 bg-emerald-500/5":"border-border bg-card"}`,children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"shrink-0 rounded-full",style:{width:46,height:46,background:`conic-gradient(${I} ${g*3.6}deg, rgba(120,125,140,.22) 0)`},children:e.jsx("div",{className:"w-full h-full flex items-center justify-center",children:e.jsx("div",{className:"rounded-full bg-card flex items-center justify-center",style:{width:34,he
18ight:34},children:e.jsxs("span",{className:"text-[10px] font-bold text-foreground",children:[g,"%"]})})})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-sm font-bold text-foreground truncate",children:m.studioName||m.name}),e.jsxs("div",{className:`text-xs font-semibold ${l||x===h?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground"}`,children:[x,"/",h," Aufgaben",l?" · fertig â":""]})]})]}),e.jsx("button",{onClick:()=>b(m.id,!l),disabled:u,className:`mt-3 w-full text-xs font-semibold px-2.5 py-1.5 rounded-lg border transition-colors ${l?"border-border text-muted-foreground hover:bg-muted/50":"border-emerald-500/40 text-emerald-600 dark:text-emerald-400 hover:bg-emerald-500/10"}`,children:l?"â© Als offen markieren":"â Studio als fertig markieren"}),l&&x<h&&e.jsxs("div",{className:"mt-1.5 text-[10px] text-muted-foreground text-center",children:[h-x," Task",h-x===1?"":"s"," bewusst offen"]})]},m.id)})})}function Vt(){const s=f.useUtils(),{user:S}=at(),N=S?.role??"viewer",{data:u=[]}=f.brands.list.useQuery(),{data:b=[]}=f.users.list.useQuery(),{data:w=0}=f.tasks.myOpenCount.useQuery(void 0,{refetchInterval:6e4}),[k,C]=v.useState("all"),[m,h]=v.useState("all"),{data:x=[],isLoading:d}=f.tasks.list.useQuery({brandId:k==="all"?void 0:k,assignedTo:m==="all"?void 0:m}),[l,g]=v.useState("board"),{data:I=[]}=f.tasks.studioDoneList.useQuery(),{data:T=[]}=f.tasks.templates.list.useQuery(void 0,{staleTime:6e4}),{data:M=null}=f.campaignPlanner.getDefaultVideoBriefing.useQuery(void 0,{staleTime:6e4}),{data:$=null}=f.campaignPlanner.getDefaultTodos.useQuery(void 0,{staleTime:6e4}),P=f.tasks.setStudioDone.useMutation({onSuccess:()=>
18s.tasks.studioDoneList.invalidate(),onError:t=>j.error(t?.message??"Fehler")}),W=f.tasks.createWithSubtasks.useMutation({onSuccess:t=>{s.tasks.list.invalidate(),j.success(`Aufgabe mit ${t?.subtaskCount??0} Unteraufgaben angelegt`),B(!1)},onError:t=>j.error(t?.message??"Fehler")}),n=f.tasks.create.useMutation({onSuccess:()=>{s.tasks.list.invalidate(),j.success("Aufgabe erstellt"),B(!1)},onError:t=>j.error(t.message)}),y=f.tasks.update.useMutation({onSuccess:()=>{s.tasks.list.invalidate(),J(null)},onError:t=>j.error(t.message)}),z=f.tasks.delete.useMutation({onSuccess:()=>{s.tasks.list.invalidate(),j.success("Aufgabe gelöscht")},onError:t=>j.error(t.message)}),[o,B]=v.useState(!1),[U,V]=v.useState(!1),[K,J]=v.useState(null),[Z,c]=v.useState(null),[a,A]=v.useState({title:"",description:"",priority:"medium",dueDate:"",brandId:null,brandIds:[],assignedTo:null,recurrence:"none",recurrenceInterval:1,attachments:[]}),[G,E]=v.useState([]),{data:le=[]}=f.tasks.unreadComments.useQuery(void 0,{staleTime:15e3}),p=v.useMemo(()=>new Set(le??[]),[le]),R=f.tasks.markCommentsRead.useMutation({onSuccess:()=>{s.tasks.unreadComments.invalidate()}}),Q=t=>{c(t),p.has(t.id)&&R.mutate({taskId:t.id})},F=Object.fromEntries(u.map(t=>[t.id,t.studioName||t.name])),q=u.filter(t=>t.isActive!==!1&&!t.deletedAt),de=()=>{const t=k!=="all"?k:u.length===1?u[0].id:null;A({title:"",description:"",priority:"medium",dueDate:"",brandId:t,brandIds:t?[t]:[],assignedTo:null,recurrence:"none",recurrenceInterval:1,attachments:[]}),E([]),B(!0)},Ae=t=>{c(null);let r=[];try{const i=t.attachments;typeof i=="string"&&i.trim()?r=JSON.parse(i):Array.isArray(i)&&(r=i)}catch{}A({title:t.title,description:t.description??"",priority:t.priority,dueDate:t.dueDate?new Date(t.dueDate).toISOString().split("T")[0]:"",brandId:t.brandId??null,brandIds:Array.isArray(t.brandIds)?t.brandIds:t.brandId?[t.brandId]:[],assignedTo:t.assignedTo??null,recurrence:t.recurrence??"none",recurrenceInterval:t.recurrenceInterval??1,attachments:r}),J(t)},Je=()=>{if(!a.title.trim())return j.error("Titel erforderlich");const t=G.map(r=>({...r,title:r.title.trim()})).filter(r=>r.title.length>0);if(t.length>0){W.mutate({title:a.title.trim(),description:a.description||null,priority:a.priority,brandIds:a.brandIds.length?a.brandIds:null,brandId:a.brandIds[0]??null,assignedTo:a.assignedTo??null,dueDate:a.dueDate?new Date(a.dueDate).getTime():null,subtasks:t.slice(0,60)});return}n.mutate({title:a.title.trim(),description:a.description||void 0,priority:a.priority,dueDate:a.dueDate?new Date(a.dueDate).getTime():void 0,brandId:a.brandId??void 0,brandIds:a.brandIds.length>0?a.brandIds:void 0,assignedTo:a.assignedTo??void 0,recurrence:a.recurrence,recurrenceInterval:a.recurrenceInterval,attachments:a.attachments.length>0?a.attachments:void 0})},qe=()=>{!K||!a.title.trim()||y.mutate({id:K.id,title:a.title.trim(),description:a.description||void 0,priority:a.priority,dueDate:a.dueDate?new Date(a.dueDate).getTime():null,brandId:a.brandId,brandIds:a.brandIds.length>=2?a.brandIds:null,assignedTo:a.assignedTo,recurrence:a.recurrence,recurrenceInterval:a.recurrenceInterval,attachments:a.attachments})},Te=f.tasks.uploadAttachment.useMutation(),Ye=async t=>{if(!(!t||t.length===0))for(const r of Array.from(t)){if(r.size>50*1024*1024){j.error(`${r.name}: max. 50 MB`,{duration:8e3});continue}try{const i=new FileReader,D=await new Promise((_,ve)=>{i.onload=()=>{const nt=i.result;_(nt.split(",")[1]??"")},i.onerror=ve,i.readAsDataURL(r)}),L=await Te.mutateAsync({fileBase64:D,fileName:r.name,mimeType:r.type||"application/octet-stream",taskId:K?.id});A(_=>({..._,attachments:[..._.attachments,L]})),s.tasks.list.invalidate(),j.success(`${r.name} hochgeladen`)}catch(i){j.error(`${r.name}: ${i.message}`)}}},Xe=t=>{A(r=>({...r,attachments:r.attachments.filter((i,D)=>D!==t)}))},ge=(t,r)=>{y.mutate({id:t,status:r})},[he,pe]=v.useState(null),[oe,ce]=v.useState(null),et=(t,r)=>{r.preventDefault();const i=he??(Number(r.dataTransfer.getData("text/plain"))||null);if(pe(null),ce(null),!i)return;const D=N==="assistant"&&t==="done"?"kontrolle":t,L=x.find(_=>_.id===i);L&&L.status===D||ge(i,D)},tt=t=>{confirm("Aufgabe wirklich löschen?")&&z.mutate({id:t})},De={urgent:0,high:1,medium:2,low:3},[ae,st]=v.useState("all"),be=f.tasks.runAutoChecks.useMutation({onSuccess:()=>
18{s.tasks.list.invalidate(),j.success("System-Aufgaben aktualisiert")},onError:t=>j.error(t?.message??"Fehler")}),fe=Date.now(),rt=fe+7*864e5,je=x.filter(t=>ae==="all"?!0:ae==="overdue"?t.dueDate!=null&&Number(t.dueDate)<fe&&t.status!=="done":ae==="this_week"?t.dueDate!=null&&Number(t.dueDate)>=fe&&Number(t.dueDate)<=rt:ae==="recurring"?t.recurrence&&t.recurrence!=="none":ae==="system"?!!t.autoCheckKey:!0),Ie=t=>String(t?.title??"").startsWith("Onboarding:"),re=ue.reduce((t,r)=>(t[r.id]=je.filter(i=>i.status===r.id).sort((i,D)=>(Ie(D)?1:0)-(Ie(i)?1:0)||De[i.priority]-De[D.priority]),t),{});return e.jsxs("div",{className:"agency-cockpit-dark -m-4 min-h-screen p-4 sm:p-6 space-y-5",children:[e.jsxs("div",{className:"flex items-center justify-between flex-wrap gap-3",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold text-foreground",children:"Aufgaben"}),e.jsx("div",{className:"flex items-center gap-2 mt-2",children:[{n:re.open.length,l:"Offen",c:"text-slate-500"},{n:re.in_progress.length,l:"In Arbeit",c:"text-amber-600 dark:text-amber-400"},{n:re.kontrolle.length,l:"Kontrolle",c:"text-blue-600 dark:text-blue-400"},{n:re.done.length,l:"Erledigt",c:"text-emerald-600 dark:text-emerald-400"}].map(t=>e.jsxs("div",{className:"bg-card border border-border rounded-xl px-3.5 py-1.5 text-center min-w-[68px]",children:[e.jsx("div",{className:`text-lg font-bold leading-none ${t.c}`,children:t.n}),e.jsx("div",{className:"text-[9px] font-semibold uppercase tracking-wide text-muted-foreground mt-1",children:t.l})]},t.l))})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[(N==="admin"||N==="manager")&&e.jsxs(H,{variant:"outline",size:"sm",className:"gap-1.5",disabled:be.isPending,onClick:()=>be.mutate({}),title:"Prueft alle Brands auf fehlende Einstellungen (Custom Domain, Logo, Magicline, Email-Flows ...) und legt offene Tasks an",children:[be.isPending?e.jsx(Se,{className:"w-3.5 h-3.5 animate-spin"}):e.jsx(Le,{className:"w-3.5 h-3.5"}),"System-Check"]}),e.jsxs(H,{onClick:()=>V(!0),variant:"outline",size:"sm",className:"gap-1.5",title:"Aufgaben-Vorlagen: Hauptaufgabe + Unteraufgaben vordefinieren und mit einem Klick anlegen",children:[e.jsx(Ve,{className:"w-4 h-4"}),"Vorlagen"]}),e.jsxs(H,{onClick:de,size:"sm",className:"gap-2",children:[e.jsx(ie,{className:"w-4 h-4"}),"Neue Aufgabe"]})]})]}),e.jsx(ft,{open:U,onOpenChange:V,onApplied:()=>s.tasks.list.invalidate()}),e.jsx("div",{className:"inline-flex rounded-lg border border-border bg-card p-0.5 gap-0.5",children:[{key:"board",label:"Board"},{key:"team",label:"Team · Ball bei wem"},{key:"studios",label:"Studios · Fortschritt"}].map(t=>e.jsx("button",{onClick:()=>{g(t.key),t.key!=="board"&&h("all")},className:`px-3 py-1.5 text-xs font-semibold rounded-md transition-colors ${l===t.key?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted/50"}`,children:t.label},t.key))}),e.jsx("div",{className:"flex items-center gap-1.5 flex-wrap text-xs",children:[{key:"all",label:"Alle"},{key:"overdue",label:"â Ueberfaellig"},{key:"this_week",label:"ð
Diese Woche"},{key:"recurring",label:"ð Wiederkehrend"},{key:"system",label:"â¡ System-Aufgaben"}].map(t=>e.jsx("button",{onClick:()=>st(t.key),className:`px-2.5 py-1 rounded border transition-colors ${ae===t.key?"border-primary bg-primary/10 text-primary font-semibold":"border-border hover:bg-muted/40 text-muted-foreground"}`,children:t.label},t.key))}),e.jsxs("div",{className:"flex flex-col gap-2 border-b border-border pb-2",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap justify-end",children:[S&&e.jsxs("button",{onClick:()=>h(m===S.id?"all":S.id),title:"Nur Aufgaben anzeigen, die dir zugewiesen sind",className:`flex items-center gap-1.5 h-7 px-2.5 rounded-md text-xs font-semibold border transition-colors ${m===S.id?"bg-primary text-primary-foreground border-primary":"bg-card border-border hover:bg-muted text-foreground"}`,children:[e.jsx(Me,{className:"w-3.5 h-3.5"})," Mir zugewiesen",w>0&&e.jsx("span",{className:`ml-0.5 min-w-[18px] text-center px-1 rounded-full text-[10px] ${m===S.id?"bg-primary-foreground
18/20":"bg-red-500 text-white"}`,children:w})]}),e.jsx(Me,{className:"w-3.5 h-3.5 text-muted-foreground shrink-0"}),e.jsxs(X,{value:m==="all"?"all":String(m),onValueChange:t=>h(t==="all"?"all":parseInt(t)),children:[e.jsx(ee,{className:"h-7 text-xs w-44 border-border",children:e.jsx(te,{placeholder:"Alle Mitarbeiter"})}),e.jsxs(se,{children:[e.jsx(O,{value:"all",children:"Alle Mitarbeiter"}),b.map(t=>e.jsx(O,{value:String(t.id),children:t.name||t.email},t.id))]})]})]}),e.jsxs("div",{className:"flex gap-1 overflow-x-auto pb-px -mb-px",children:[e.jsx("button",{onClick:()=>C("all"),className:`shrink-0 whitespace-nowrap px-3 py-1.5 text-xs font-medium rounded-t border-b-2 transition-colors ${k==="all"?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"}`,children:"Alle Studios"}),q.map(t=>e.jsx("button",{onClick:()=>C(t.id),className:`shrink-0 whitespace-nowrap px-3 py-1.5 text-xs font-medium rounded-t border-b-2 transition-colors ${k===t.id?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"}`,children:t.studioName||t.name},t.id))]})]}),l==="board"&&(d?e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-5 gap-4",children:ue.map(t=>e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"h-5 bg-muted animate-pulse rounded w-24"}),Array.from({length:3}).map((r,i)=>e.jsx("div",{className:"h-24 bg-muted animate-pulse rounded-lg"},i))]},t.id))}):e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5 gap-4",children:ue.map(t=>e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("span",{className:`w-2.5 h-2.5 rounded-sm ${t.id==="open"?"bg-slate-400":t.id==="in_progress"?"bg-amber-500":t.id==="kontrolle"?"bg-blue-500":t.id==="freigabe"?"bg-purple-500":"bg-emerald-500"}`}),e.jsx("h2",{className:`text-sm font-semibold ${t.color}`,children:t.label}),e.jsx("span",{className:"text-xs bg-muted text-muted-foreground rounded-full px-2 py-0.5",children:re[t.id].length})]}),e.jsxs("div",{className:`space-y-2 min-h-[100px] rounded-lg transition-colors ${oe===t.id?"bg-primary/10 outline outline-2 outline-dashed outline-primary/40":""}`,onDragOver:r=>{he!=null&&(r.preventDefault(),r.dataTransfer.dropEffect="move",oe!==t.id&&ce(t.id))},onDragLeave:r=>{!r.currentTarget.contains(r.relatedTarget)&&oe===t.id&&ce(null)},onDrop:r=>et(t.id,r),children:[re[t.id].length===0?e.jsx("div",{className:"border border-dashed border-border rounded-lg p-4 text-center text-xs text-muted-foreground",children:oe===t.id?"Hier ablegen":"Keine Aufgaben"}):re[t.id].map(r=>e.jsx("div",{draggable:!0,onDragStart:i=>{pe(r.id),i.dataTransfer.effectAllowed="move";try{i.dataTransfer.setData("text/plain",String(r.id))}catch{}},onDragEnd:()=>{pe(null),ce(null)},className:`cursor-grab active:cursor-grabbing ${he===r.id?"opacity-50":""}`,children:e.jsx(Dt,{task:r,brandName:r.brandId?F[r.brandId]:void 0,brands:u,users:b,onEdit:Ae,onDelete:tt,onStatusChange:ge,onOpenDetail:Q,userRole:N,hasUnread:p.has(r.id)})},r.id)),t.id==="open"&&e.jsxs("button",{onClick:de,className:"w-full text-xs text-muted-foreground hover:text-foreground flex items-center gap-1 py-2 px-3 rounded-lg hover:bg-muted/50 transition-colors",children:[e.jsx(ie,{className:"w-3 h-3"})," Aufgabe hinzufügen"]})]})]},t.id))})),l==="team"&&e.jsx(It,{tasks:je,users:b,onOpenDetail:c}),l==="studios"&&e.jsx(Mt,{tasks:je,brands:q,studioDone:I,pending:P.isPending,onToggle:(t,r)=>P.mutate({brandId:t,done:r})}),e.jsx(Ne,{open:!!Z,onOpenChange:t=>{t||c(null)},children:Z&&(()=>{const t=x.find(r=>r.id===Z.id)??Z;return e.jsxs(ye,{className:"sm:max-w-lg max-h-[90vh] overflow-y-auto",children:[e.jsx(we,{children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsxs("div",{className:"flex-1",children:[e.jsx(ke,{className:"text-base leading-snug",children:t.title}),e.jsxs("div",{className:"flex flex-wrap gap-2 mt-2",children:[e.jsxs(ne,{className:`text-[10px] px-1.5 py-0 h-4 ${Qe[t.priority]}`,children:[e.jsx(Oe,{className:"w-2.5 h-2.5 mr-1"}),Ze[t.priority]]}),t.brandId&&F[t.brandId]&&e.jsxs(ne,{className:"text-[10px] px-1.5 py-0 h-4 bg-primary/10 text-primary border-primary/20",children:[e.jsx(Ke,{className:"w-2.5 h-2.5 mr-1"}),F[t.brandId]]}),t.dueDate&&e.jsxs("span",{className:`flex items-center gap-1 text-[10px] ${t.dueDate<Date.now()&&t.status!=="done"?"text-red-400":"text-muted-foreground"}`,children:[e.jsx(Re,{className:"w-2.5 h-2.5"}),"Fällig: ",new Date(t.dueDate).toLocaleDateString("de-DE")]})]})]}),e.jsxs(H,{size:"sm",variant:"outline",className:"shrink-0 text-xs h-7",onClick:()=>{Ae(t)},children:[e.jsx(_e,{className:"w-3 h-3 mr-1"})," Bearbeiten"]})]})}),e.jsxs("div",{className:"space-y-4 py-2",children:[t.description&&e.jsx("div",{className:"text-sm text-muted-foreground bg-muted/30 rounded-lg p-3 whitespace-pre-wrap",children:t.description}),(()=>{let r=[];try{const i=t.attachments;typeof i=="string"&&i.trim()?r=JSON.parse(i):Array.isArray(i)&&(r=i)}catch{}return r.length===0?null:e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider",children:["Anhänge (",r.length,")"]}),e.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-2",children:r.map((i,D)=>e.jsxs("div",{className:"relative group rounded-lg border border-border bg-muted/20 hover:border-primary/50 transition-colors overflow-hidden",children:[e.jsx("a",{href:i.url,target:"_blank",rel:"noopener noreferrer",className:"block",children:i.mimeType?.startsWith("image/")?e.jsx("img",{src:i.url,alt:i.name,className:"w-full h-24 object-cover"}):e.jsx("div",{className:"w-full h-24 flex items-center justify-center bg-muted/30",children:e.jsx("span",{className:"text-xs font-mono text-muted-foreground uppercase",children:(i.name.split(".").pop()??"FILE").slice(0,4)})})}),e.jsx("button",{type:"button",onClick:L=>{L.preventDefault(),L.stopPropagation(),Fe(i.url,i.name)},title:"Herunterladen",className:"absolute top-1 right-1 p-1.5 rounded-md bg-black/55 text-white opacity-0 group-hover:opacity-100 transition-opacity hover:bg-black/75",children:e.jsx($e,{className:"w-3.5 h-3.5"})}),e.jsxs("div",{className:"flex items-center justify-between gap-1 px-2 py-1",children:[e.jsx("span",{className:"text-xs truncate group-hover:text-primary",children:i.name}),e.jsx("button",{type:"button",onClick:()=>Fe(i.url,i.name),title:"Herunterladen",className:"shrink-0 text-muted-foreground hover:text-primary",children:e.jsx($e,{className:"w-3.5 h-3.5"})})]})]},D))}),e.jsx($t,{task:t,brands:u,atts:r})]})})(),e.jsx("div",{className:"flex gap-1",children:ue.map(r=>e.jsx("button",{onClick:()=>{const i=N==="assistant"&&r.id==="done"?"kontrolle":r.id;ge(t.id,i),c({...t,status:i})},className:`text-xs px-3 py-1 rounded-full border transition-colors ${t.status===r.id?"border-primary bg-primary/10 text-primary":"border-border text-muted-foreground hover:text-foreground"}`,children:r.label},r.id))}),e.jsx("button",{onClick:()=>Ct(t,u,M),className:"w-full text-sm font-semibold px-3 py-2 rounded-lg border border-border text-foreground hover:border-primary/50 inline-flex items-center justify-center gap-1.5",children:"ð¬ Video-Briefing als PDF (3 Varianten)"}),t.status==="kontrolle"&&e.jsx(At,{task:t,userRole:N,onChange:r=>c({...t,...r})}),e.jsx(wt,{task:t,users:b,onChange:r=>c({...t,...r})}),e.jsx("div",{className:"border-t border-border pt-3",children:e.jsx(Tt,{taskId:t.id,taskBrandId:t.brandId,users:b})})]})]})})()}),e.jsx(Ne,{open:o||!!K,onOpenChange:t=>{t||(B(!1),J(null),E([]))},children:e.jsxs(ye,{className:"sm:max-w-md max-h-[90vh] overflow-y-auto",children:[e.jsx(we,{children:e.jsx(ke,{children:K?"Aufgabe bearbeiten":"Neue Aufgabe"})}),e.jsxs("div",{className:"space-y-4 py-2",children:[!K&&(T.length>0||Array.isArray($)&&$.length>0)&&e.jsxs("div",{children:[e.jsx("label",{className:"text-xs text-muted-foreground mb-1 block",children:"Aus Vorlage übernehmen (optional)"}),e.jsxs("select",{value:"",onChange:t=>{const r=t.target.value;if(r){if(r.startsWith("tpl:")){const i=T.find(D=>String(D.id)===r.slice(4));
18i&&(A(D=>({...D,title:i.title??D.title,description:i.description??D.description,priority:["low","medium","high","urgent"].includes(i.priority)?i.priority:D.priority})),j.success("Vorlage übernommen â bei Bedarf anpassen."))}else if(r==="camp:all"){const i=$??[];if(!i.length)return;const D=_=>b.find(ve=>ve.role===_)?.id??null,L=i.slice(0,60).map(_=>({title:String(_.title).slice(0,256),priority:["low","medium","high","urgent"].includes(_.priority)?_.priority:"medium",assignedTo:_.assignedRole?D(_.assignedRole):null}));E(L),j.success(`${L.length} Unteraufgaben übernommen â anpassen und dann âErstellen".`)}else if(r.startsWith("camp:")){const i=$[Number(r.slice(5))];i&&(A(D=>({...D,title:i.title??D.title,priority:["low","medium","high","urgent"].includes(i.priority)?i.priority:D.priority})),j.success("Kampagnen-Aufgabe übernommen."))}}},className:"w-full h-9 rounded-md border border-border bg-background text-foreground text-sm px-2",children:[e.jsx("option",{value:"",children:"â Vorlage wählen â"}),T.length>0&&e.jsx("optgroup",{label:"Aufgaben-Vorlagen",children:T.map(t=>e.jsx("option",{value:`tpl:${t.id}`,children:t.title},t.id))}),Array.isArray($)&&$.length>0&&e.jsxs("optgroup",{label:"Kampagnen-Aufgaben",children:[e.jsxs("option",{value:"camp:all",children:["â Ganze Kampagnen-Liste als Unteraufgaben (",$.length,")"]}),$.map((t,r)=>e.jsx("option",{value:`camp:${r}`,children:t.title},r))]})]}),e.jsxs("p",{className:"text-[10px] text-muted-foreground mt-1",children:['Einzelne Vorlage füllt Titel/Priorität vor. ââ Ganze Kampagnen-Liste als Unteraufgaben" lädt alle Kampagnen-To-dos als ',e.jsx("b",{children:"editierbare Unteraufgaben"})," unten â du kannst sie anpassen/löschen und legst sie erst mit ",e.jsx("b",{children:'âErstellen"'})," an. Volle Kampagne mit Countdowns â ",e.jsx("b",{children:"Kampagnen-Planer"}),"."]})]}),!K&&G.length>0&&e.jsxs("div",{className:"rounded-lg border border-border bg-muted/20 p-3",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsxs("span",{className:"text-xs font-semibold text-foreground",children:["Unteraufgaben (",G.length,") â vor dem Erstellen anpassbar"]}),e.jsx("button",{type:"button",onClick:()=>E([]),className:"text-[11px] text-muted-foreground hover:text-destructive",children:"Alle entfernen"})]}),e.jsx("div",{className:"space-y-1.5 max-h-64 overflow-y-auto pr-1",children:G.map((t,r)=>e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(Y,{value:t.title,onChange:i=>E(D=>D.map((L,_)=>_===r?{...L,title:i.target.value}:L)),placeholder:"Unteraufgabeâ¦",className:"h-8 text-sm flex-1"}),e.jsxs("select",{value:t.assignedTo==null?"":String(t.assignedTo),onChange:i=>E(D=>D.map((L,_)=>_===r?{...L,assignedTo:i.target.value===""?null:parseInt(i.target.value)}:L)),className:"h-8 rounded-md border border-border bg-background text-foreground text-xs px-1 max-w-[130px]",title:"Zugewiesen an",children:[e.jsx("option",{value:"",children:"â niemand â"}),b.map(i=>e.jsx("option",{value:String(i.id),children:i.name??i.email},i.id))]}),e.jsx("button",{type:"button",onClick:()=>E(i=>i.filter((D,L)=>L!==r)),className:"w-7 h-8 flex items-center justify-center rounded-md text-muted-foreground hover:text-destructive hover:bg-destructive/10",title:"Entfernen",children:"Ã"})]},r))}),e.jsx("button",{type:"button",onClick:()=>E(t=>[...t,{title:"",priority:"medium",assignedTo:null}]),className:"mt-2 text-[11px] text-primary hover:underline",children:"+ Unteraufgabe hinzufügen"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs text-muted-foreground mb-1 block",children:"Titel *"}),e.jsx(Y,{placeholder:"Was muss erledigt werden?",value:a.title,onChange:t=>A(r=>({...r,title:t.target.value})),autoFocus:!0})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs text-muted-foreground mb-1 block",children:"Beschreibung"}),e.jsx(Ue,{placeholder:"Details zur Aufgabe...",value:a.description,onChange:t=>A(r=>({...r,description:t.target.value})),rows:3})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-xs text-muted-foreground mb-1 block",children:"Priorität"}),e.jsxs(X,{value:a.priority,onValueChange:t=>A(r=>({...r,priority:t})),children:[e.jsx(ee,{children:e.jsx(te,{})}),e.jsxs(se,{children:[e.jsx(O,{value:"low",children:"Niedrig"}),e.jsx(O,{value:"medium",children:"Mittel"}),e.jsx(O,{value:"high",children:"Hoch"}),e.jsx(O,{value:"urgent",children:"Dringend"})]})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs text-muted-foreground mb-1 block",children:"Fällig am"}),e.jsx(Y,{type:"date",value:a.dueDate,onChange:t=>A(r=>({...r,dueDate:t.target.value}))})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-xs text-muted-foreground mb-1 block",children:"Wiederholung"}),e.jsxs(X,{value:a.recurrence??"none",onValueChange:t=>A(r=>({...r,recurrence:t})),children:[e.jsx(ee,{children:e.jsx(te,{})}),e.jsxs(se,{children:[e.jsx(O,{value:"none",children:"ð« Keine Wiederholung"}),e.jsx(O,{value:"daily",children:"ð Taeglich"}),e.jsx(O,{value:"weekly",children:"ð
Woechentlich"}),e.jsx(O,{value:"monthly",children:"ð Monatlich"})]})]})]}),a.recurrence&&a.recurrence!=="none"&&e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs text-muted-foreground mb-1 block",children:["Alle X ",a.recurrence==="daily"?"Tage":a.recurrence==="weekly"?"Wochen":"Monate"]}),e.jsx(Y,{type:"number",min:1,max:365,value:a.recurrenceInterval??1,onChange:t=>A(r=>({...r,recurrenceInterval:parseInt(t.target.value)||1}))})]})]}),a.recurrence&&a.recurrence!=="none"&&e.jsx("p",{className:"text-[10px] text-muted-foreground -mt-2",children:"Beim Erledigen wird automatisch ein Folge-Task mit naechstem Faelligkeitsdatum angelegt."}),u.length>0&&e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs text-muted-foreground mb-1 block",children:["Studios / Gyms ",e.jsxs("span",{className:"text-muted-foreground
18/70",children:["(",a.brandIds.length," ausgewaehlt)"]})]}),e.jsx("p",{className:"text-[10px] text-muted-foreground mb-2",children:"Mehrere Studios anhaken = Aufgabe wird zur Checklist. Pro Studio kann abgehakt werden."}),e.jsx("div",{className:"grid grid-cols-2 gap-1.5 p-2 rounded-md border border-border bg-background max-h-40 overflow-y-auto",children:q.map(t=>{const r=a.brandIds.includes(t.id);return e.jsxs("label",{className:"flex items-center gap-2 text-xs cursor-pointer hover:bg-muted/30 rounded px-1.5 py-1",children:[e.jsx("input",{type:"checkbox",checked:r,onChange:()=>{A(i=>{const D=r?i.brandIds.filter(L=>L!==t.id):[...i.brandIds,t.id];return{...i,brandIds:D,brandId:D[0]??null}})},className:"h-3 w-3"}),e.jsx("span",{className:"text-foreground truncate",children:t.studioName||t.name})]},t.id)})}),a.brandIds.length===0&&e.jsx("p",{className:"text-[10px] text-muted-foreground mt-1",children:"â Kein Studio zugewiesen (globale Aufgabe)"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs text-muted-foreground mb-1 block",children:"Zugewiesen an"}),e.jsxs(X,{value:a.assignedTo!=null?String(a.assignedTo):"none",onValueChange:t=>A(r=>({...r,assignedTo:t==="none"?null:parseInt(t)})),children:[e.jsx(ee,{children:e.jsx(te,{placeholder:"Nicht zugewiesen"})}),e.jsxs(se,{children:[e.jsx(O,{value:"none",children:"â Nicht zugewiesen â"}),b.map(t=>e.jsx(O,{value:String(t.id),children:t.name||t.email},t.id))]})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs text-muted-foreground mb-1 block",children:"Anhänge (Fotos, PDFs · max. 50 MB)"}),e.jsxs("div",{className:"space-y-2",children:[a.attachments.length>0&&e.jsx("div",{className:"space-y-1.5",children:a.attachments.map((t,r)=>e.jsxs("div",{className:"flex items-center gap-2 px-2.5 py-1.5 rounded-md border border-border bg-muted/20 text-xs",children:[t.mimeType.startsWith("image/")?e.jsx("img",{src:t.url,alt:"",className:"w-8 h-8 rounded object-cover"}):e.jsx("span",{className:"w-8 h-8 rounded bg-muted/40 flex items-center justify-center text-[10px] font-mono",children:(t.name.split(".").pop()??"FILE").toUpperCase().slice(0,4)}),e.jsx("a",{href:t.url,target:"_blank",rel:"noopener noreferrer",className:"flex-1 truncate hover:underline",children:t.name}),t.size!=null&&e.jsxs("span",{className:"text-muted-foreground",children:[Math.round(t.size/1024)," KB"]}),e.jsx("button",{type:"button",onClick:()=>Xe(r),className:"text-red-400 hover:text-red-300 px-1","aria-label":"Entfernen",children:"Ã"})]},r))}),e.jsxs("label",{className:"flex items-center justify-center gap-2 px-3 py-2 rounded-md border border-dashed border-border bg-muted/10 hover:bg-muted/20 cursor-pointer text-xs text-muted-foreground transition-colors",children:[e.jsx("input",{type:"file",multiple:!0,accept:"image/*,.pdf,.doc,.docx,.xls,.xlsx,.xlsm,.ods,.csv,.odt,.odp,.ppt,.pptx,.txt,.zip",className:"hidden",onChange:t=>{Ye(t.target.files),t.target.value=""}}),Te.isPending?"Lade hochâ¦":"Datei wählen oder hierher ziehen"]})]})]})]}),e.jsxs(it,{children:[e.jsx(H,{variant:"outline",onClick:()=>{B(!1),J(null)},children:"Abbrechen"}),e.jsx(H,{onClick:K?qe:Je,disabled:n.isPending||y.isPending||W.isPending,children:K?"Speichern":!K&&G.length>0?`Erstellen (${G.filter(t=>t.title.trim()).length} Unteraufgaben)`:"Erstellen"})]})]})})]})}function $t({task:s,brands:S,atts:N}){const[u,b]=v.useState(s?.brandId??(Array.isArray(s?.brandIds)&&s.brandIds[0])??null),[w,k]=v.useState(""),[C,m]=v.useState(null),h=f.tasks.sendAttachmentsToStudio.useMutation(),x=(S||[]).filter(l=>!l.archivedAt),d=(l,g,I)=>{if(!u){j.error("Bitte Studio wählen.");return}h.isPending||(m(I),h.mutate({taskId:s.id,brandId:u,toChat:l,toLibrary:g,message:w.trim()||void 0},{onSuccess:T=>{const M=[];T?.toChat&&M.push("Chat"),T?.toLibrary&&M.push(`Mediathek (${T.toLibrary})`),j.success(`${T?.count??N.length} Design(s) ans Studio gesendet â ${M.join(" + ")} â`),k("")},onError:T=>j.error(T?.message??"Fehler"),onSettled:()=>m(null)}))};return e.jsxs("div",{className:"mt-2 rounded-lg border border-border bg-muted/10 p-2.5 space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"text-xs font-semibold text-foreground",children:"ð¤ An Studio senden"}),e.jsxs("select",{value:u??0,onChange:l=>
18b(Number(l.target.value)||null),className:"text-xs border border-border rounded-md bg-background px-2 py-1 text-foreground",children:[e.jsx("option",{value:0,children:"Studio wählenâ¦"}),x.map(l=>e.jsx("option",{value:l.id,children:l.studioName||l.name},l.id))]})]}),e.jsx("input",{value:w,onChange:l=>k(l.target.value),placeholder:"Optionale Nachricht (z.B. âHier die September-Grafiken ðâ)",className:"w-full text-xs border border-border rounded-md bg-background px-2 py-1.5 text-foreground"}),e.jsxs("div",{className:"flex gap-2 flex-wrap",children:[e.jsx("button",{disabled:h.isPending||!u,onClick:()=>d(!0,!1,"chat"),className:"text-xs font-semibold px-3 py-1.5 rounded-lg border border-border text-foreground hover:bg-muted/40 disabled:opacity-50",children:C==="chat"?"â¦":"ð¬ In den Chat"}),e.jsx("button",{disabled:h.isPending||!u,onClick:()=>d(!1,!0,"lib"),className:"text-xs font-semibold px-3 py-1.5 rounded-lg border border-border text-foreground hover:bg-muted/40 disabled:opacity-50",children:C==="lib"?"â¦":"ð In die Mediathek"}),e.jsx("button",{disabled:h.isPending||!u,onClick:()=>d(!0,!0,"both"),className:"text-xs font-bold px-3 py-1.5 rounded-lg bg-primary text-primary-foreground disabled:opacity-50",children:C==="both"?"â¦":"⨠Beides"})]}),e.jsxs("p",{className:"text-[10px] text-muted-foreground",children:["Sendet alle ",N.length," Anhänge ans gewählte Studio â Chat (mit Mail-Weckruf) und/oder Mediathek (â im Website-Builder wählbar)."]})]})}export{Vt as default};
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.