@libxai/board 0.16.13 → 0.16.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -273,7 +273,7 @@
273
273
  </Calendars>
274
274
  <Tasks>${d}
275
275
  </Tasks>
276
- </Project>`,u=new Blob([i],{type:"application/xml;charset=utf-8;"}),l=document.createElement("a");l.href=URL.createObjectURL(u),l.download=r,l.click(),URL.revokeObjectURL(l.href);},calculateCriticalPath:e=>{let t=K.flattenTasks(e),r=t.filter(i=>i.startDate&&i.endDate);if(r.length===0)return [];let a=new Map,n=i=>{if(a.has(i.id))return;let u=i.startDate&&i.endDate?K.calculateDuration(i.startDate,i.endDate):0,l=0;if(i.dependencies&&i.dependencies.length>0)for(let m of i.dependencies){let b=t.find(x=>x.id===m);if(b){n(b);let x=a.get(m)?.ef||0;l=Math.max(l,x);}}let p=l+u;a.set(i.id,{es:l,ef:p});};r.forEach(n);let o=Math.max(...Array.from(a.values()).map(i=>i.ef)),s=new Map,c=i=>{if(s.has(i.id))return;let u=i.startDate&&i.endDate?K.calculateDuration(i.startDate,i.endDate):0,l=t.filter(b=>b.dependencies&&b.dependencies.includes(i.id)),p=o;if(l.length>0)for(let b of l){c(b);let x=s.get(b.id)?.ls||0;p=Math.min(p,x);}let m=p-u;s.set(i.id,{ls:m,lf:p});};r.forEach(c);let d=[];for(let i of r){let u=a.get(i.id),l=s.get(i.id);if(u&&l){let p=l.ls-u.es;Math.abs(p)<.01&&d.push(i.id);}}return d},calculateSlack:(e,t)=>{let r=K.findTaskById(e,t);if(!r||!r.startDate||!r.endDate)return null;if(K.calculateCriticalPath(e).includes(t))return 0;let n=K.getDependentTasks(e,t);if(n.length===0){let c=K.getLatestEndDate(e);if(!c)return null;let d=K.calculateDuration(r.endDate,c);return Math.max(0,d)}let o=n.filter(c=>c.startDate).map(c=>c.startDate.getTime()).sort((c,d)=>c-d)[0];if(!o)return null;let s=K.calculateDuration(r.endDate,new Date(o));return Math.max(0,s)},isOnCriticalPath:(e,t)=>K.calculateCriticalPath(e).includes(t),autoScheduleDependents:(e,t,r)=>{let a=K.findTaskById(e,t);if(!a||!a.endDate)return e;let n=K.getDependentTasks(e,t);if(n.length===0)return e;let o=[...e];for(let s of n){if(!s.startDate||!s.endDate)continue;let c=K.calculateDuration(s.startDate,s.endDate),d;r!==void 0?(d=new Date(s.startDate),d.setDate(d.getDate()+r)):(d=new Date(a.endDate),d.setDate(d.getDate()+1));let i=K.calculateEndDate(d,c),u=l=>l.map(p=>p.id===s.id?{...p,startDate:d,endDate:i}:p.subtasks?{...p,subtasks:u(p.subtasks)}:p);o=u(o),o=K.autoScheduleDependents(o,s.id,r);}return o},calculateCascadePreview:(e,t,r,a,n,o,s,c)=>{if(r===0)return [];let d=[],i=n.getTime(),u=1e3*60*60*24,l=K.findTaskById(e,t);if(!l||!l.endDate)return [];let p=(m,b,x=new Set)=>{if(x.has(m))return;x.add(m);let h=K.getDependentTasks(e,m);for(let g of h){if(!g.startDate||!g.endDate)continue;let v=a.findIndex(U=>U.id===g.id);if(v===-1)continue;let f=g.startDate.getTime(),k=(g.endDate.getTime()-f)/u,C=(f-i)/u*o,T=C+b*o,N=Math.max(k*o,o),R=c+v*s+12;d.push({taskId:g.id,taskName:g.name,originalX:C,previewX:T,width:N,y:R,rowIndex:v,daysDelta:b,color:g.color}),p(g.id,b,x);}};return p(t,r),d},splitTask:(e,t,r,a=3)=>{let n=K.findTaskById(e,t);if(!n||!n.startDate||!n.endDate)return e;if(r<=n.startDate||r>=n.endDate)return console.warn("Split date must be between task start and end dates"),e;let o=new Date(r);o.setDate(o.getDate()-1);let s=new Date(r);s.setDate(s.getDate()+a);let c=new Date(n.endDate);c.setDate(c.getDate()+a);let d=[{startDate:new Date(n.startDate),endDate:o},{startDate:s,endDate:c}],i=u=>u.map(l=>l.id===n.id?{...l,endDate:c,segments:d}:l.subtasks?{...l,subtasks:i(l.subtasks)}:l);return i(e)}};function _n({tasks:e,theme:t,rowHeight:r,timeScale:a,startDate:n,endDate:o,zoom:s,templates:c,onTaskClick:d,onTaskDblClick:i,onTaskContextMenu:u,onTaskDateChange:l,onDependencyCreate:p,onDependencyDelete:m}){let[x,h]=Ce.useState([]),g=Math.ceil((o.getTime()-n.getTime())/(1e3*60*60*24)),v=a==="day"?60:a==="week"?20:8,f=g*v*s,w=E=>{let B=new Date(Date.UTC(E.getFullYear(),E.getMonth(),E.getDate())),G=B.getUTCDay()||7;B.setUTCDate(B.getUTCDate()+4-G);let O=new Date(Date.UTC(B.getUTCFullYear(),0,1));return Math.ceil(((B.getTime()-O.getTime())/864e5+1)/7)},k=E=>{let B=E.getDay();return B===0||B===6},y=Ce.useCallback(E=>{let B=Math.round(E/(v*s)),G=new Date(n);return G.setDate(G.getDate()+B),G},[n,v,s]),C=Ce.useCallback((E,B)=>{if(B.startDate&&B.endDate)return;let G=E.currentTarget.ownerSVGElement;if(!G)return;let O=G.createSVGPoint();O.x=E.clientX,O.y=E.clientY;let F=O.matrixTransform(G.getScreenCTM()?.inverse()),Q=y(F.x),Y=new Date(Q);Y.setDate(Y.getDate()+1),l?.(B,Q,Y);},[y,l]),T=Ce.useMemo(()=>{let E=F=>F.map(Q=>{if(Q.subtasks&&Q.subtasks.length>0){let Y=E(Q.subtasks),pe=Y.filter(I=>I.startDate&&I.endDate);if(pe.length>0){let I=pe.map(Ze=>Ze.startDate.getTime()),le=pe.map(Ze=>Ze.endDate.getTime()),se=new Date(Math.min(...I)),bt=new Date(Math.max(...le));return {...Q,subtasks:Y,startDate:Q.startDate||se,endDate:Q.endDate||bt}}return {...Q,subtasks:Y}}return Q}),B=(F,Q=[])=>{for(let Y of F)Q.push(Y),Y.subtasks&&Y.subtasks.length>0&&(Y.isExpanded===void 0||Y.isExpanded)&&B(Y.subtasks,Q);return Q},G=E(e);return B(G)},[e]),N=Ce.useCallback(E=>{if(!E.startDate||!E.endDate)return {x:0,width:0};let B=E.startDate.getTime(),G=E.endDate.getTime(),O=n.getTime(),F=(B-O)/(1e3*60*60*24),Q=(G-B)/(1e3*60*60*24),Y=F*v*s,pe=Math.max(v*s,40),I=Math.max(Q*v*s,pe);return {x:Y,width:I}},[n,v,s]),R=Ce.useMemo(()=>T.filter(E=>E.startDate&&E.endDate).map(E=>{let{x:B,width:G}=N(E),F=T.findIndex(Q=>Q.id===E.id)*r+12;return {id:E.id,x:B,y:F,width:G,height:32}}),[T,N]),U=Ce.useCallback((E,B,G)=>{if(!G||B===0){h([]);return}let O=K.calculateCascadePreview(e,E,B,T,n,v*s,r,48);h(O);},[e,T,n,v,s,r,48]),H=Ce.useMemo(()=>{let E=[],B=new Date(n);for(;B<=o;){let F=(B.getTime()-n.getTime())/864e5*v*s;if(a==="day")E.push({date:new Date(B),label:B.toLocaleDateString("en-US",{day:"numeric",month:"short"}),x:F}),B.setDate(B.getDate()+1);else if(a==="week"){let Q=w(B);E.push({date:new Date(B),label:`Week ${Q}`,x:F}),B.setDate(B.getDate()+7);}else E.push({date:new Date(B),label:B.toLocaleDateString("en-US",{month:"short",year:"numeric"}),x:F}),B.setMonth(B.getMonth()+1);}return E},[n,o,a,v,s]),M=Ce.useMemo(()=>(new Date().getTime()-n.getTime())/(1e3*60*60*24)*v*s,[n,v,s]),$=Math.max(T.length*r,552);return jsxRuntime.jsxs("div",{className:"w-full h-full flex flex-col","data-gantt-chart":true,style:{backgroundColor:t.bgPrimary},children:[jsxRuntime.jsx("div",{style:{position:"sticky",top:0,zIndex:10,backgroundColor:t.bgGrid,flexShrink:0,height:"48px",borderBottom:`1px solid ${t.border}`,boxSizing:"border-box"},children:jsxRuntime.jsxs("svg",{width:Math.max(f,1e3),height:47,style:{display:"block"},children:[jsxRuntime.jsx("rect",{x:0,y:0,width:Math.max(f,1e3),height:48,fill:t.bgGrid}),H.map((E,B)=>jsxRuntime.jsxs("g",{children:[jsxRuntime.jsx("line",{x1:E.x,y1:0,x2:E.x,y2:48,stroke:t.border,strokeWidth:1,opacity:.1}),jsxRuntime.jsx("text",{x:E.x+8,y:48/2,fill:t.textTertiary,fontSize:"11",fontFamily:"'JetBrains Mono', ui-monospace, monospace",fontWeight:"500",dominantBaseline:"middle",children:E.label})]},`header-${B}`)),M>=0&&M<=f&&jsxRuntime.jsx("circle",{cx:M,cy:38,r:6,fill:t.today,opacity:1})]})}),jsxRuntime.jsxs("svg",{width:Math.max(f,1e3),height:$,style:{display:"block",flexShrink:0},children:[jsxRuntime.jsxs("defs",{children:[jsxRuntime.jsx("filter",{id:"shadow",children:jsxRuntime.jsx("feDropShadow",{dx:"0",dy:"1",stdDeviation:"2",floodOpacity:"0.1"})}),jsxRuntime.jsx("pattern",{id:"diagonal-stripes",width:"8",height:"8",patternUnits:"userSpaceOnUse",patternTransform:"rotate(45)",children:jsxRuntime.jsx("line",{x1:"0",y1:"0",x2:"0",y2:"8",stroke:t.border,strokeWidth:"2"})})]}),jsxRuntime.jsx("rect",{x:0,y:0,width:Math.max(f,1e3),height:$,fill:t.bgPrimary}),H.map((E,B)=>{let G=H[B+1]?.x||f,O=k(E.date);return jsxRuntime.jsxs("g",{children:[O&&jsxRuntime.jsx("rect",{x:E.x,y:0,width:G-E.x,height:T.length*r,fill:t.bgWeekend,opacity:1}),jsxRuntime.jsx("line",{x1:E.x,y1:0,x2:E.x,y2:T.length*r,stroke:t.border,strokeWidth:1,opacity:.1})]},B)}),M>=0&&M<=f&&jsxRuntime.jsx("line",{x1:M,y1:0,x2:M,y2:T.length*r,stroke:t.today,strokeWidth:2,opacity:1}),T.map((E,B)=>{let G=E.startDate&&E.endDate;return jsxRuntime.jsxs("g",{children:[jsxRuntime.jsx("rect",{x:0,y:B*r,width:f,height:r,fill:B%2===0?"transparent":t.bgSecondary,opacity:1,style:{pointerEvents:"none"}},`row-${E.id}`),!G&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:0,y:B*r,width:f,height:r,fill:"transparent",style:{cursor:"pointer",pointerEvents:"all"},onClick:O=>C(O,E),onMouseEnter:O=>{O.currentTarget.setAttribute("fill",t.accentLight),O.currentTarget.setAttribute("opacity","0.5");},onMouseLeave:O=>{O.currentTarget.setAttribute("fill","transparent"),O.currentTarget.setAttribute("opacity","1");}},`clickable-${E.id}`),jsxRuntime.jsx("text",{x:M>0?M:100,y:B*r+r/2,fill:t.textTertiary,fontSize:"12",fontFamily:"Inter, sans-serif",fontStyle:"italic",dominantBaseline:"middle",opacity:.4,style:{pointerEvents:"none",userSelect:"none"},children:"Click to set dates..."},`placeholder-${E.id}`)]})]},`row-group-${E.id}`)}),T.map((E,B)=>!E.dependencies||E.dependencies.length===0||!E.startDate||!E.endDate?null:E.dependencies.map(G=>{let O=T.find(pe=>pe.id===G);if(!O||!O.startDate||!O.endDate)return null;let F=T.findIndex(pe=>pe.id===G),Q=N(O),Y=N(E);return jsxRuntime.jsx(On,{x1:Q.x+Q.width,y1:F*r+r/2,x2:Y.x,y2:B*r+r/2,theme:t,onDelete:()=>m?.(E.id,G)},`dep-${G}-${E.id}`)})),T.map((E,B)=>{if(!E.startDate||!E.endDate)return null;let{x:G,width:O}=N(E),F=B*r+12,Q=E.subtasks&&E.subtasks.length>0&&!E.isMilestone;return E.isMilestone?jsxRuntime.jsx($n,{task:E,x:G+O/2,y:F+16,theme:t,onClick:d},E.id):Q?jsxRuntime.jsxs("g",{onClick:()=>d?.(E),style:{cursor:"pointer"},children:[jsxRuntime.jsx("rect",{x:G,y:F,width:O,height:32,fill:t.primary,opacity:.25,rx:6}),jsxRuntime.jsx("line",{x1:G,y1:F,x2:G+O,y2:F,stroke:t.primary,strokeWidth:3,opacity:.9,strokeLinecap:"round"}),jsxRuntime.jsx("line",{x1:G,y1:F,x2:G,y2:F+32,stroke:t.primary,strokeWidth:3,opacity:.9,strokeLinecap:"round"}),jsxRuntime.jsx("line",{x1:G+O,y1:F,x2:G+O,y2:F+32,stroke:t.primary,strokeWidth:3,opacity:.9,strokeLinecap:"round"}),jsxRuntime.jsx("line",{x1:G,y1:F+32,x2:G+O,y2:F+32,stroke:t.primary,strokeWidth:3,opacity:.9,strokeLinecap:"round"}),O>60&&jsxRuntime.jsx("text",{x:G+12,y:F+16,dominantBaseline:"middle",fill:"#FFFFFF",fontSize:"13",fontWeight:"500",fontFamily:"Inter, sans-serif",style:{pointerEvents:"none",userSelect:"none"},children:E.name})]},E.id):jsxRuntime.jsx(Fn,{task:E,x:G,y:F,width:O,theme:t,dayWidth:v*s,startDate:n,templates:c,onClick:d,onDoubleClick:i,onContextMenu:u,onDateChange:l,onDependencyCreate:p,allTaskPositions:R,onDragMove:U},E.id)}),x.map(E=>jsxRuntime.jsxs("g",{style:{pointerEvents:"none"},children:[jsxRuntime.jsx("rect",{x:E.previewX,y:E.y-48,width:E.width,height:32,rx:8,fill:E.color||t.accent,opacity:.3,stroke:t.accent,strokeWidth:2,strokeDasharray:"4 2"}),Math.abs(E.daysDelta)>0&&jsxRuntime.jsx("text",{x:E.previewX+E.width/2,y:E.y-48+16,textAnchor:"middle",dominantBaseline:"middle",fill:t.accent,fontSize:"10",fontWeight:"600",fontFamily:"Inter, sans-serif",style:{userSelect:"none"},children:E.daysDelta>0?`+${E.daysDelta}d`:`${E.daysDelta}d`})]},`cascade-preview-${E.taskId}`))]})]})}var oc=[{name:"Azul",value:"#6366F1",light:"#818CF8"},{name:"P\xFArpura",value:"#A855F7",light:"#C084FC"},{name:"Rosa",value:"#EC4899",light:"#F472B6"},{name:"Rojo",value:"#EF4444",light:"#F87171"},{name:"Naranja",value:"#F59E0B",light:"#FBBF24"},{name:"Amarillo",value:"#EAB308",light:"#FACC15"},{name:"Lima",value:"#84CC16",light:"#A3E635"},{name:"Verde",value:"#10B981",light:"#34D399"},{name:"Esmeralda",value:"#059669",light:"#10B981"},{name:"Cyan",value:"#06B6D4",light:"#22D3EE"},{name:"Azul Cielo",value:"#0EA5E9",light:"#38BDF8"},{name:"\xCDndigo",value:"#4F46E5",light:"#6366F1"},{name:"Violeta",value:"#8B5CF6",light:"#A78BFA"},{name:"Fucsia",value:"#D946EF",light:"#E879F9"},{name:"Gris",value:"#6B7280",light:"#9CA3AF"},{name:"Piedra",value:"#78716C",light:"#A8A29E"}];function sc({value:e="#6366F1",onChange:t,disabled:r=false}){return jsxRuntime.jsxs("div",{className:"space-y-2",children:[jsxRuntime.jsx("div",{className:"flex flex-wrap gap-2",children:oc.map(a=>{let n=e===a.value;return jsxRuntime.jsx(framerMotion.motion.button,{type:"button",onClick:()=>!r&&t(a.value),className:"relative rounded-full transition-all focus:outline-none focus:ring-2 focus:ring-offset-2",style:{width:"32px",height:"32px",backgroundColor:a.value,boxShadow:n?`0 0 0 2px #FFFFFF, 0 0 0 4px ${a.value}`:"0 1px 3px rgba(0, 0, 0, 0.12)",opacity:r?.5:1,cursor:r?"not-allowed":"pointer"},whileHover:r?{}:{scale:1.1},whileTap:r?{}:{scale:.95},title:a.name,disabled:r,children:n&&jsxRuntime.jsx(framerMotion.motion.div,{initial:{scale:0},animate:{scale:1},className:"absolute inset-0 flex items-center justify-center",children:jsxRuntime.jsx(lucideReact.Check,{className:"w-4 h-4 text-white drop-shadow-md",strokeWidth:3})})},a.value)})}),e&&jsxRuntime.jsx("div",{className:"text-xs text-center font-medium",style:{color:e},children:oc.find(a=>a.value===e)?.name||"Personalizado"})]})}function Wn({isOpen:e,onClose:t,task:r,availableTasks:a=[],availableUsers:n=[],onSubmit:o,isLoading:s=false,mode:c=r?"edit":"create",theme:d="dark"}){let i=ke[d]||ke.dark,u={backgroundColor:i.bgSecondary,border:`1px solid ${i.borderLight}`,color:i.textPrimary},l={color:i.textSecondary},[p,m]=Ce.useState({name:"",progress:0,status:"todo",isMilestone:false,color:"#6366F1",assignees:[],dependencies:[]}),[b,x]=Ce.useState({});Ce.useEffect(()=>{m(r?{name:r.name,startDate:r.startDate,endDate:r.endDate,progress:r.progress,status:r.status||"todo",isMilestone:r.isMilestone||false,color:r.color||"#6366F1",assignees:r.assignees||[],dependencies:r.dependencies||[]}:{name:"",progress:0,status:"todo",isMilestone:false,color:"#6366F1",assignees:[],dependencies:[]});},[r,e]);let h=()=>{let f={};return p.name.trim()||(f.name="El nombre es requerido"),p.startDate&&p.endDate&&p.startDate>p.endDate&&(f.endDate="La fecha de fin debe ser posterior a la de inicio"),x(f),Object.keys(f).length===0},g=async f=>{if(f.preventDefault(),!!h())try{await o(p),t();}catch(w){console.error("Error submitting task:",w);}},v=(f,w)=>{m(k=>{let y={...k,[f]:w};if(f==="progress"){let C=typeof w=="number"?w:parseInt(w,10);C===100&&k.status!=="completed"?y.status="completed":C>0&&C<100&&k.status==="todo"?y.status="in-progress":C===0&&k.status==="in-progress"&&(y.status="todo");}return y}),b[f]&&x(k=>{let y={...k};return delete y[f],y});};return jsxRuntime.jsx(framerMotion.AnimatePresence,{children:e&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(framerMotion.motion.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},className:"fixed inset-0 bg-black/50 z-50",onClick:t}),jsxRuntime.jsx(framerMotion.motion.div,{initial:{opacity:0,scale:.95,y:20},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.95,y:20},transition:{duration:.2,ease:[.4,0,.2,1]},className:"fixed inset-0 z-50 flex items-center justify-center p-4 pointer-events-none",children:jsxRuntime.jsxs("div",{className:"w-full max-w-2xl rounded-xl shadow-2xl pointer-events-auto overflow-hidden",style:{backgroundColor:i.bgPrimary,border:`1px solid ${i.border}`},onClick:f=>f.stopPropagation(),children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between px-6 py-4",style:{borderBottom:`1px solid ${i.border}`},children:[jsxRuntime.jsx("h2",{className:"text-lg font-semibold",style:{color:i.textPrimary},children:c==="create"?"Crear Nueva Tarea":"Editar Tarea"}),jsxRuntime.jsx("button",{onClick:t,className:"p-2 rounded-lg transition-colors",style:{color:i.textSecondary},onMouseEnter:f=>f.currentTarget.style.backgroundColor=i.hoverBg,onMouseLeave:f=>f.currentTarget.style.backgroundColor="transparent",disabled:s,children:jsxRuntime.jsx(lucideReact.X,{className:"w-5 h-5"})})]}),jsxRuntime.jsxs("form",{onSubmit:g,className:"p-6 space-y-6 max-h-[calc(100vh-200px)] overflow-y-auto",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{className:"block text-sm font-medium mb-2",style:l,children:"Nombre de la Tarea *"}),jsxRuntime.jsx("input",{type:"text",value:p.name,onChange:f=>v("name",f.target.value),className:"w-full px-4 py-2.5 rounded-lg focus:outline-none focus:ring-2 focus:border-transparent",style:u,onFocus:f=>f.currentTarget.style.borderColor=i.accent,onBlur:f=>f.currentTarget.style.borderColor=i.borderLight,placeholder:"Ej: Dise\xF1ar mockups de la aplicaci\xF3n",disabled:s}),b.name&&jsxRuntime.jsxs("p",{className:"mt-1 text-sm text-red-400 flex items-center gap-1",children:[jsxRuntime.jsx(lucideReact.AlertCircle,{className:"w-4 h-4"}),b.name]})]}),jsxRuntime.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{className:"block text-sm font-medium mb-2 flex items-center gap-2",style:l,children:[jsxRuntime.jsx(lucideReact.Calendar,{className:"w-4 h-4"}),"Fecha de Inicio"]}),jsxRuntime.jsx("input",{type:"date",value:p.startDate?p.startDate.toISOString().split("T")[0]:"",onChange:f=>v("startDate",f.target.value?new Date(f.target.value):void 0),className:"w-full px-4 py-2.5 rounded-lg focus:outline-none focus:ring-2 focus:border-transparent",style:u,disabled:s||p.isMilestone})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{className:"block text-sm font-medium mb-2 flex items-center gap-2",style:l,children:[jsxRuntime.jsx(lucideReact.Calendar,{className:"w-4 h-4"}),"Fecha de Fin"]}),jsxRuntime.jsx("input",{type:"date",value:p.endDate?p.endDate.toISOString().split("T")[0]:"",onChange:f=>v("endDate",f.target.value?new Date(f.target.value):void 0),className:"w-full px-4 py-2.5 rounded-lg focus:outline-none focus:ring-2 focus:border-transparent",style:u,disabled:s||p.isMilestone}),b.endDate&&jsxRuntime.jsxs("p",{className:"mt-1 text-sm text-red-400 flex items-center gap-1",children:[jsxRuntime.jsx(lucideReact.AlertCircle,{className:"w-4 h-4"}),b.endDate]})]})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{className:"block text-sm font-medium mb-2 flex items-center gap-2",style:l,children:[jsxRuntime.jsx(lucideReact.CheckCircle2,{className:"w-4 h-4"}),"Estado"]}),jsxRuntime.jsxs("select",{value:p.status,onChange:f=>v("status",f.target.value),className:"w-full px-4 py-2.5 rounded-lg focus:outline-none focus:ring-2 focus:border-transparent",style:u,disabled:s,children:[jsxRuntime.jsx("option",{value:"todo",children:"Por Hacer"}),jsxRuntime.jsx("option",{value:"in-progress",children:"En Progreso"}),jsxRuntime.jsx("option",{value:"completed",children:"Completada"})]})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{className:"block text-sm font-medium mb-3 flex items-center gap-2",style:l,children:[jsxRuntime.jsx(lucideReact.Palette,{className:"w-4 h-4"}),"Color de la Tarea"]}),jsxRuntime.jsx(sc,{value:p.color,onChange:f=>v("color",f),disabled:s}),jsxRuntime.jsx("p",{className:"text-xs mt-2",style:{color:i.textTertiary},children:r?.parentId?"Esta subtarea hereda el color de su tarea padre":r?.subtasks&&r.subtasks.length>0?"Las subtareas heredar\xE1n este color con menor opacidad":"Elige un color para organizar visualmente tus tareas"})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{className:"block text-sm font-medium mb-2 flex items-center justify-between",style:l,children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(lucideReact.Clock,{className:"w-4 h-4"}),"Progreso"]}),jsxRuntime.jsxs("span",{className:"font-semibold px-2 py-0.5 rounded text-sm",style:{color:p.progress<30?"#EF4444":p.progress<70?"#F59E0B":"#10B981",backgroundColor:p.progress<30?"rgba(239, 68, 68, 0.1)":p.progress<70?"rgba(245, 158, 11, 0.1)":"rgba(16, 185, 129, 0.1)"},children:[p.progress,"%"]})]}),jsxRuntime.jsxs("div",{className:"relative",children:[jsxRuntime.jsx("input",{type:"range",min:"0",max:"100",step:"5",value:p.progress,onChange:f=>v("progress",parseInt(f.target.value)),className:"w-full h-2 rounded-lg appearance-none cursor-pointer",style:{backgroundColor:i.bgSecondary,accentColor:p.progress<30?"#EF4444":p.progress<70?"#F59E0B":"#10B981"},disabled:s}),jsxRuntime.jsx("div",{className:"absolute top-0 left-0 h-2 rounded-lg pointer-events-none transition-all duration-300",style:{width:`${p.progress}%`,backgroundColor:p.progress<30?"rgba(239, 68, 68, 0.3)":p.progress<70?"rgba(245, 158, 11, 0.3)":"rgba(16, 185, 129, 0.3)"}})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between mt-3 gap-2",children:[jsxRuntime.jsx("span",{className:"text-xs",style:{color:i.textTertiary},children:"Accesos r\xE1pidos:"}),jsxRuntime.jsx("div",{className:"flex gap-1.5",children:[0,25,50,75,100].map(f=>jsxRuntime.jsxs("button",{type:"button",onClick:()=>v("progress",f),disabled:s,className:"px-3 py-1 text-xs font-medium rounded-md transition-all duration-200 hover:scale-105 active:scale-95",style:{backgroundColor:p.progress===f?f<30?"#EF4444":f<70?"#F59E0B":"#10B981":i.bgSecondary,color:p.progress===f?"#FFFFFF":i.textSecondary,border:`1px solid ${p.progress===f?f<30?"#EF4444":f<70?"#F59E0B":"#10B981":i.borderLight}`},children:[f,"%"]},f))})]}),jsxRuntime.jsxs("div",{className:"flex justify-between text-xs mt-2",style:{color:i.textTertiary},children:[jsxRuntime.jsx("span",{children:"0%"}),jsxRuntime.jsx("span",{children:"25%"}),jsxRuntime.jsx("span",{children:"50%"}),jsxRuntime.jsx("span",{children:"75%"}),jsxRuntime.jsx("span",{children:"100%"})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-3 p-4 rounded-lg",style:{backgroundColor:i.bgSecondary,border:`1px solid ${i.borderLight}`},children:[jsxRuntime.jsx("input",{type:"checkbox",id:"isMilestone",checked:p.isMilestone,onChange:f=>v("isMilestone",f.target.checked),className:"w-4 h-4 rounded focus:ring-2",style:{accentColor:i.accent},disabled:s}),jsxRuntime.jsxs("label",{htmlFor:"isMilestone",className:"flex items-center gap-2 text-sm cursor-pointer",style:{color:i.textPrimary},children:[jsxRuntime.jsx(lucideReact.Milestone,{className:"w-4 h-4 text-yellow-500"}),"Marcar como Hito (Milestone)"]})]}),n.length>0&&jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{className:"block text-sm font-medium mb-2 flex items-center gap-2",style:l,children:[jsxRuntime.jsx(lucideReact.Users,{className:"w-4 h-4"}),"Asignar a"]}),jsxRuntime.jsx("div",{className:"space-y-2 max-h-32 overflow-y-auto p-3 rounded-lg",style:{backgroundColor:i.bgSecondary,border:`1px solid ${i.borderLight}`},children:n.map(f=>jsxRuntime.jsxs("label",{className:"flex items-center gap-3 cursor-pointer p-2 rounded",onMouseEnter:w=>w.currentTarget.style.backgroundColor=i.hoverBg,onMouseLeave:w=>w.currentTarget.style.backgroundColor="transparent",children:[jsxRuntime.jsx("input",{type:"checkbox",checked:p.assignees?.some(w=>w.name===f.name),onChange:w=>{let k=w.target.checked?[...p.assignees||[],{name:f.name,avatar:f.avatar,initials:f.name.split(" ").map(y=>y[0]).join("").toUpperCase().slice(0,2),color:i.accent}]:(p.assignees||[]).filter(y=>y.name!==f.name);v("assignees",k);},className:"w-4 h-4 rounded",style:{accentColor:i.accent},disabled:s}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"w-6 h-6 rounded-full flex items-center justify-center text-xs text-white font-semibold",style:{backgroundColor:i.accent},children:f.name.charAt(0).toUpperCase()}),jsxRuntime.jsx("span",{className:"text-sm",style:{color:i.textPrimary},children:f.name})]})]},f.id))})]}),a.length>0&&jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{className:"block text-sm font-medium mb-2 flex items-center gap-2",style:l,children:[jsxRuntime.jsx(lucideReact.Link2,{className:"w-4 h-4"}),"Dependencias"]}),jsxRuntime.jsx("div",{className:"space-y-2 max-h-32 overflow-y-auto p-3 rounded-lg",style:{backgroundColor:i.bgSecondary,border:`1px solid ${i.borderLight}`},children:a.filter(f=>f.id!==r?.id).map(f=>jsxRuntime.jsxs("label",{className:"flex items-center gap-3 cursor-pointer p-2 rounded",onMouseEnter:w=>w.currentTarget.style.backgroundColor=i.hoverBg,onMouseLeave:w=>w.currentTarget.style.backgroundColor="transparent",children:[jsxRuntime.jsx("input",{type:"checkbox",checked:p.dependencies?.includes(f.id),onChange:w=>{let k=w.target.checked?[...p.dependencies||[],f.id]:(p.dependencies||[]).filter(y=>y!==f.id);v("dependencies",k);},className:"w-4 h-4 rounded",style:{accentColor:i.accent},disabled:s}),jsxRuntime.jsx("span",{className:"text-sm",style:{color:i.textPrimary},children:f.name})]},f.id))})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-end gap-3 px-6 py-4",style:{borderTop:`1px solid ${i.border}`,backgroundColor:i.bgPrimary},children:[jsxRuntime.jsx("button",{type:"button",onClick:t,className:"px-4 py-2 text-sm font-medium rounded-lg transition-colors",style:{color:i.textSecondary},onMouseEnter:f=>{f.currentTarget.style.color=i.textPrimary,f.currentTarget.style.backgroundColor=i.hoverBg;},onMouseLeave:f=>{f.currentTarget.style.color=i.textSecondary,f.currentTarget.style.backgroundColor="transparent";},disabled:s,children:"Cancelar"}),jsxRuntime.jsx("button",{onClick:g,disabled:s,className:"px-4 py-2 text-sm font-medium rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-2",style:{backgroundColor:i.accent,color:"#FFFFFF"},onMouseEnter:f=>!s&&(f.currentTarget.style.backgroundColor=i.accentHover),onMouseLeave:f=>!s&&(f.currentTarget.style.backgroundColor=i.accent),children:s?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:"w-4 h-4 border-2 border-white/30 border-t-white rounded-full animate-spin"}),"Guardando..."]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(lucideReact.CheckCircle2,{className:"w-4 h-4"}),c==="create"?"Crear Tarea":"Guardar Cambios"]})})]})]})})]})})}var Dg=['Move "Task Name" to next Monday','Extend "Task Name" by 3 days','Rename "Old Name" to "New Name"','Set "Task Name" progress to 50%','Link "Task A" to "Task B"','Create a new task called "New Task"','Delete "Task Name"','Assign John to "Task Name"'],mc=()=>jsxRuntime.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[jsxRuntime.jsx("path",{d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707"}),jsxRuntime.jsx("circle",{cx:"12",cy:"12",r:"4"})]}),Sg=()=>jsxRuntime.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:jsxRuntime.jsx("path",{d:"M22 2L11 13M22 2L15 22L11 13M22 2L2 9L11 13"})}),Ng=()=>jsxRuntime.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:jsxRuntime.jsx("path",{d:"M18 6L6 18M6 6L18 18"})}),Eg=()=>jsxRuntime.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:jsxRuntime.jsx("path",{d:"M5 12h14"})}),Rg=()=>jsxRuntime.jsx("div",{className:"flex gap-1 items-center",children:[0,1,2].map(e=>jsxRuntime.jsx(framerMotion.motion.div,{className:"w-2 h-2 rounded-full bg-current",animate:{scale:[1,1.2,1],opacity:[.5,1,.5]},transition:{duration:.8,repeat:1/0,delay:e*.15}},e))});function Hn({tasks:e,theme:t,config:r,onTasksUpdate:a,onTaskUpdate:n,onTaskCreate:o,onTaskDelete:s,onDependencyCreate:c,onDependencyDelete:d}){let[i,u]=Ce.useState(false),[l,p]=Ce.useState(false),[m,b]=Ce.useState([]),[x,h]=Ce.useState(""),[g,v]=Ce.useState(false),[f,w]=Ce.useState(true),k=Ce.useRef(null),y=Ce.useRef(null),C=Ce.useRef(null),{enabled:T=true,placeholder:N='Ask AI to edit tasks... (e.g., "Move Design to next week")',position:R="bottom-right",onCommand:U,suggestions:H=Dg,maxHistory:M=50}=r;Ce.useEffect(()=>{y.current&&y.current.scrollIntoView({behavior:"smooth"});},[m]),Ce.useEffect(()=>{i&&!l&&k.current&&setTimeout(()=>k.current?.focus(),100);},[i,l]);let $=Ce.useCallback(F=>{if(F.success)switch(F.type){case "move_task":case "resize_task":case "rename_task":case "set_progress":case "set_status":case "assign_task":F.taskId&&F.updates&&n?.(F.taskId,F.updates);break;case "create_task":F.newTask&&o?.(F.newTask);break;case "delete_task":F.taskId&&s?.(F.taskId);break;case "link_tasks":F.dependencyFrom&&F.dependencyTo&&c?.(F.dependencyFrom,F.dependencyTo);break;case "unlink_tasks":F.taskId&&F.dependencyFrom&&d?.(F.taskId,F.dependencyFrom);break}},[n,o,s,c,d]),E=Ce.useCallback(async F=>{if(!F.trim()||g)return;let Q={id:`user-${Date.now()}`,role:"user",content:F,timestamp:new Date};b(pe=>[...pe.slice(-(M-1)),Q]),h(""),w(false),v(true);let Y={id:`loading-${Date.now()}`,role:"assistant",content:"",timestamp:new Date,isLoading:true};b(pe=>[...pe,Y]);try{if(U){let pe=await U(F,e);b(I=>{let le=I.filter(bt=>!bt.isLoading),se={id:`assistant-${Date.now()}`,role:"assistant",content:pe.message,timestamp:new Date,command:pe};return [...le,se]}),$(pe);}else b(pe=>[...pe.filter(le=>!le.isLoading),{id:`assistant-${Date.now()}`,role:"assistant",content:"AI handler not configured. Please provide an onCommand handler in the aiAssistant config.",timestamp:new Date}]);}catch(pe){b(I=>[...I.filter(se=>!se.isLoading),{id:`error-${Date.now()}`,role:"assistant",content:`Sorry, I encountered an error: ${pe instanceof Error?pe.message:"Unknown error"}`,timestamp:new Date}]);}finally{v(false);}},[g,M,U,e,$]),B=F=>{F.preventDefault(),E(x);},G=F=>{h(F),k.current?.focus();};if(Ce.useEffect(()=>{let F=Q=>{(Q.metaKey||Q.ctrlKey)&&Q.key==="k"&&(Q.preventDefault(),u(Y=>!Y),i||p(false)),Q.key==="Escape"&&i&&u(false);};return document.addEventListener("keydown",F),()=>document.removeEventListener("keydown",F)},[i]),!T)return null;let O={"bottom-right":"bottom-4 right-4","bottom-left":"bottom-4 left-4","top-right":"top-4 right-4","top-left":"top-4 left-4"};return jsxRuntime.jsxs(Ve,{children:[jsxRuntime.jsx(framerMotion.AnimatePresence,{children:!i&&jsxRuntime.jsxs(framerMotion.motion.button,{initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},whileHover:{scale:1.05},whileTap:{scale:.95},className:`fixed ${O[R]} z-[99999] flex items-center gap-2 px-4 py-3 rounded-full shadow-lg transition-colors`,style:{background:"linear-gradient(135deg, #3B82F6 0%, #2563EB 100%)",color:"white",boxShadow:"0 4px 20px rgba(59, 130, 246, 0.4)"},onClick:()=>u(true),children:[jsxRuntime.jsx(mc,{}),jsxRuntime.jsx("span",{className:"text-sm font-medium",children:"AI Assistant"}),jsxRuntime.jsx("kbd",{className:"hidden sm:inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[10px] font-mono rounded bg-white/20",children:"\u2318K"})]})}),jsxRuntime.jsx(framerMotion.AnimatePresence,{children:i&&jsxRuntime.jsxs(framerMotion.motion.div,{ref:C,initial:{opacity:0,y:20,scale:.95},animate:{opacity:1,y:0,scale:1,height:l?"auto":500},exit:{opacity:0,y:20,scale:.95},transition:{type:"spring",damping:25,stiffness:300},className:`fixed ${O[R]} z-[99999] w-96 rounded-2xl overflow-hidden shadow-2xl flex flex-col`,style:{background:t.bgPrimary,border:`1px solid ${t.border}`,boxShadow:`0 20px 60px rgba(0, 0, 0, 0.3), 0 0 0 1px ${t.border}`},children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between px-4 py-3",style:{background:"linear-gradient(135deg, #3B82F6 0%, #2563EB 100%)"},children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2 text-white",children:[jsxRuntime.jsx(mc,{}),jsxRuntime.jsx("span",{className:"font-semibold",children:"Gantt AI Assistant"})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-1",children:[jsxRuntime.jsx("button",{onClick:()=>p(F=>!F),className:"p-1.5 rounded-lg hover:bg-white/20 text-white/80 hover:text-white transition-colors",children:jsxRuntime.jsx(Eg,{})}),jsxRuntime.jsx("button",{onClick:()=>u(false),className:"p-1.5 rounded-lg hover:bg-white/20 text-white/80 hover:text-white transition-colors",children:jsxRuntime.jsx(Ng,{})})]})]}),jsxRuntime.jsx(framerMotion.AnimatePresence,{children:!l&&jsxRuntime.jsxs(framerMotion.motion.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},className:"flex flex-col flex-1 min-h-0",children:[jsxRuntime.jsxs("div",{className:"flex-1 overflow-y-auto p-4 space-y-4",style:{maxHeight:350},children:[m.length===0&&f&&jsxRuntime.jsxs("div",{className:"space-y-3",children:[jsxRuntime.jsx("p",{className:"text-sm text-center",style:{color:t.textSecondary},children:"Try asking me to edit your Gantt chart:"}),jsxRuntime.jsx("div",{className:"flex flex-wrap gap-2",children:H.slice(0,4).map((F,Q)=>jsxRuntime.jsx("button",{onClick:()=>G(F),className:"text-xs px-3 py-1.5 rounded-full transition-colors",style:{background:t.bgSecondary,color:t.textSecondary,border:`1px solid ${t.border}`},children:F.length>30?F.slice(0,30)+"...":F},Q))})]}),m.map(F=>jsxRuntime.jsx(framerMotion.motion.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},className:`flex ${F.role==="user"?"justify-end":"justify-start"}`,children:jsxRuntime.jsxs("div",{className:`max-w-[85%] rounded-2xl px-4 py-2.5 ${F.role==="user"?"rounded-br-md":"rounded-bl-md"}`,style:{background:F.role==="user"?"linear-gradient(135deg, #6366F1 0%, #8B5CF6 100%)":t.bgSecondary,color:F.role==="user"?"white":t.textPrimary},children:[F.isLoading?jsxRuntime.jsx(Rg,{}):jsxRuntime.jsx("p",{className:"text-sm whitespace-pre-wrap",children:F.content}),F.command&&jsxRuntime.jsxs("div",{className:"mt-2 text-xs px-2 py-1 rounded-md inline-flex items-center gap-1",style:{background:F.command.success?"rgba(16, 185, 129, 0.2)":"rgba(239, 68, 68, 0.2)",color:F.command.success?"#10B981":"#EF4444"},children:[F.command.success?"\u2713":"\u2717",jsxRuntime.jsx("span",{className:"capitalize",children:F.command.type.replace(/_/g," ")})]})]})},F.id)),jsxRuntime.jsx("div",{ref:y})]}),jsxRuntime.jsxs("form",{onSubmit:B,className:"p-3 border-t",style:{borderColor:t.border},children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2 rounded-xl px-4 py-2",style:{background:t.bgSecondary,border:`1px solid ${t.border}`},children:[jsxRuntime.jsx("input",{ref:k,type:"text",value:x,onChange:F=>h(F.target.value),placeholder:N,disabled:g,className:"flex-1 bg-transparent text-sm outline-none",style:{color:t.textPrimary}}),jsxRuntime.jsx("button",{type:"submit",disabled:!x.trim()||g,className:"p-2 rounded-lg transition-all disabled:opacity-50",style:{background:x.trim()?"linear-gradient(135deg, #6366F1 0%, #8B5CF6 100%)":"transparent",color:x.trim()?"white":t.textSecondary},children:jsxRuntime.jsx(Sg,{})})]}),jsxRuntime.jsx("p",{className:"text-[10px] text-center mt-2",style:{color:t.textTertiary},children:"Press Enter to send \u2022 Esc to close"})]})]})})]})})]})}function fc(e,t=50){let[r,a]=Ce.useState({past:[],present:e,future:[]}),n=Ce.useRef(false),o=Ce.useCallback((i,u=true)=>{a(l=>{let p=typeof i=="function"?i(l.present):i;if(n.current)return {...l,present:p};if(!u)return {...l,present:p};let m=[...l.past,l.present];return m.length>t&&m.shift(),{past:m,present:p,future:[]}});},[t]),s=Ce.useCallback(()=>{a(i=>{if(i.past.length===0)return i;let u=i.past[i.past.length-1],l=i.past.slice(0,i.past.length-1);return n.current=true,setTimeout(()=>{n.current=false;},0),{past:l,present:u,future:[i.present,...i.future]}});},[]),c=Ce.useCallback(()=>{a(i=>{if(i.future.length===0)return i;let u=i.future[0],l=i.future.slice(1);return n.current=true,setTimeout(()=>{n.current=false;},0),{past:[...i.past,i.present],present:u,future:l}});},[]),d=Ce.useCallback(()=>{a(i=>({past:[],present:i.present,future:[]}));},[]);return {state:r.present,setState:o,undo:s,redo:c,canUndo:r.past.length>0,canRedo:r.future.length>0,clearHistory:d}}function gc({undo:e,redo:t,canUndo:r,canRedo:a,enabled:n=true}){Ce.useEffect(()=>{if(!n)return;let o=s=>{let c=navigator.platform.toUpperCase().indexOf("MAC")>=0,d=c?s.metaKey:s.ctrlKey;if(d&&s.key==="z"&&!s.shiftKey&&r){s.preventDefault(),e();return}if(a){if(!c&&d&&s.key==="y"){s.preventDefault(),t();return}if(c&&d&&s.shiftKey&&s.key==="z"){s.preventDefault(),t();return}}};return window.addEventListener("keydown",o),()=>{window.removeEventListener("keydown",o);}},[e,t,r,a,n]);}var Ag={taskTooltip:e=>{let t=[`<strong>${e.name}</strong>`];if(e.startDate&&e.endDate){t.push(`${K.formatDate(e.startDate)} - ${K.formatDate(e.endDate)}`);let r=K.calculateDuration(e.startDate,e.endDate);t.push(`Duration: ${r} days`);}if(e.progress!==void 0&&t.push(`Progress: ${e.progress}%`),e.status&&t.push(`Status: ${e.status}`),e.assignees&&e.assignees.length>0){let r=e.assignees.map(a=>a.name).join(", ");t.push(`Assigned: ${r}`);}return e.dependencies&&e.dependencies.length>0&&t.push(`Dependencies: ${e.dependencies.length}`),t.join("<br/>")},taskLabel:e=>e.name,gridCell:(e,t,r)=>r,taskClass:e=>{let t=[];return e.isCriticalPath&&t.push("critical-path"),e.status==="completed"?t.push("completed"):e.status==="in-progress"?t.push("in-progress"):e.status==="todo"&&t.push("todo"),e.isMilestone&&t.push("milestone"),t.join(" ")},milestoneContent:e=>`\u25C6 ${e.name}`,dateFormat:e=>K.formatDate(e),durationFormat:e=>e===1?"1 day":`${e} days`,progressFormat:e=>`${e}%`};function hc(e){return {...Ag,...e}}var Og=e=>{switch(e){case "compact":return 40;case "comfortable":return 48;case "spacious":return 56;default:return 48}},yc=Ce.forwardRef(function({tasks:t,config:r={},onTasksChange:a},n){let{theme:o,timeScale:s="week",rowDensity:c="comfortable",showThemeSelector:d=true,showExportButton:i=true,availableUsers:u=[],templates:l,enableAutoCriticalPath:p=true,aiAssistant:m,locale:b="en",customTranslations:x,showCreateTaskButton:h=false,createTaskLabel:g,onCreateTask:v,onThemeChange:f,onTaskClick:w,onTaskDblClick:k,onTaskContextMenu:y,onTaskUpdate:C,onProgressChange:T,onTaskEdit:N,onTaskAddSubtask:R,onTaskMarkIncomplete:U,onTaskSetInProgress:H,onDependencyCreate:M,onDependencyDelete:$,onBeforeTaskAdd:E,onAfterTaskAdd:B,onBeforeTaskUpdate:G,onAfterTaskUpdate:O}=r,Q=Ce.useContext(Rn)?.theme,[Y,pe]=Ce.useState(Q||o||"dark"),[I,le]=Ce.useState(s),[se,bt]=Ce.useState(c),[Ze,ar]=Ce.useState(1),[we,mt]=Ce.useState(0),[ft,_t]=Ce.useState(false),[pr,Lr]=Ce.useState(null),[ge,Qe]=Ce.useState({isOpen:false,x:0,y:0,task:null}),[Wt,Bt]=Ce.useState(null);Ce.useEffect(()=>{Q&&Q!==Y&&pe(Q);},[Q]),Ce.useEffect(()=>{o&&o!==Y&&pe(o);},[o]);let Fr=Ce.useCallback(S=>{pe(S),f?.(S);},[f]),{state:ne,setState:me,undo:j,redo:z,canUndo:Fe,canRedo:ze,clearHistory:te}=fc(t,50);Ce.useEffect(()=>{me(t);},[t,me]),Ce.useEffect(()=>{a&&a(ne);},[ne,a]);let ce=Ce.useMemo(()=>Zo(b,x),[b,x]),nr=Ce.useCallback(S=>[{id:"name",label:S.columns.taskName,width:320,minWidth:180,maxWidth:800,visible:true,sortable:true,resizable:true},{id:"startDate",label:S.columns.startDate,width:110,visible:false,sortable:true},{id:"endDate",label:S.columns.endDate,width:110,visible:false,sortable:true},{id:"duration",label:S.columns.duration,width:80,visible:false,sortable:true},{id:"assignees",label:S.columns.assignees,width:120,visible:false,sortable:false},{id:"status",label:S.columns.status,width:80,visible:false,sortable:true},{id:"progress",label:S.columns.progress,width:120,visible:false,sortable:true}],[]),[Ot,q]=Ce.useState(()=>nr(ce));Ce.useEffect(()=>{q(S=>S.map(P=>({...P,label:ce.columns[P.id==="name"?"taskName":P.id]||P.label})));},[ce]);let V=Ce.useMemo(()=>Ot.filter(S=>S.visible).reduce((S,P)=>S+P.width,0)+60,[Ot]),ve=pr||V,D=Ce.useRef(null),_=Ce.useRef(null),de=Ce.useRef(null),he=Ce.useMemo(()=>Il(Y),[Y]),Ae=Ce.useMemo(()=>({theme:he,themeName:Y}),[he,Y]),$e=Ce.useMemo(()=>hc(l),[l]),Nt=Ce.useMemo(()=>{if(!p)return ne;let S=K.calculateCriticalPath(ne),P=W=>W.map(Z=>({...Z,isCriticalPath:S.includes(Z.id),subtasks:Z.subtasks?P(Z.subtasks):void 0}));return P(ne)},[ne,p]),wt=Og(se);gc({undo:j,redo:z,canUndo:Fe,canRedo:ze,enabled:true}),Ce.useImperativeHandle(n,()=>({getTask:S=>K.findTaskById(ne,S),addTask:(S,P)=>{me(W=>{if(!P)return [...W,{...S,level:0}];let Z=ae=>ae.map(ie=>ie.id===P?{...ie,subtasks:[...ie.subtasks||[],{...S,parentId:P,level:(ie.level||0)+1}],isExpanded:true}:ie.subtasks?{...ie,subtasks:Z(ie.subtasks)}:ie);return Z(W)});},updateTask:(S,P)=>{me(W=>{let Z=ae=>ae.map(ie=>ie.id===S?{...ie,...P}:ie.subtasks?{...ie,subtasks:Z(ie.subtasks)}:ie);return Z(W)});},deleteTask:S=>{me(P=>{let W=Z=>Z.filter(ae=>ae.id===S?false:(ae.subtasks&&(ae.subtasks=W(ae.subtasks)),true));return W(P)});},deleteTasks:S=>{me(P=>An(P,S));},duplicateTask:S=>{me(P=>os(P,[S]));},splitTask:(S,P,W=3)=>{me(Z=>K.splitTask(Z,S,P,W));},calculateEndDate:K.calculateEndDate,calculateDuration:K.calculateDuration,validateDependency:(S,P)=>!K.validateDependencies(ne,S,P),getAllTasks:()=>K.flattenTasks(ne),getTasksByStatus:S=>K.flattenTasks(ne).filter(P=>P.status===S),getTasksByParent:S=>S?K.findTaskById(ne,S)?.subtasks||[]:ne.filter(W=>!W.parentId),getCriticalPath:()=>K.flattenTasks(ne).filter(S=>S.isCriticalPath),indentTask:S=>{me(P=>rs(P,[S]));},outdentTask:S=>{me(P=>as(P,[S]));},moveTask:(S,P)=>{me(W=>ns(W,[S],P));},createSubtask:async S=>{let{tasks:P,newTask:W}=ls(ne,S);if(E){let Z=E({...W,parentId:S});if((Z instanceof Promise?await Z:Z)===false)return}me(P),B&&B({...W,parentId:S});},scrollToTask:S=>{let W=K.flattenTasks(ne).findIndex(Z=>Z.id===S);if(W!==-1&&D.current){let Z=W*wt;D.current.scrollTo({top:Z,behavior:"smooth"}),_.current&&_.current.scrollTo({top:Z,behavior:"smooth"});}},highlightTask:(S,P=2e3)=>{},expandTask:S=>{me(P=>{let W=Z=>Z.map(ae=>ae.id===S?{...ae,isExpanded:true}:ae.subtasks?{...ae,subtasks:W(ae.subtasks)}:ae);return W(P)});},collapseTask:S=>{me(P=>{let W=Z=>Z.map(ae=>ae.id===S?{...ae,isExpanded:false}:ae.subtasks?{...ae,subtasks:W(ae.subtasks)}:ae);return W(P)});},expandAll:()=>{me(S=>{let P=W=>W.map(Z=>({...Z,isExpanded:true,subtasks:Z.subtasks?P(Z.subtasks):void 0}));return P(S)});},collapseAll:()=>{me(S=>{let P=W=>W.map(Z=>({...Z,isExpanded:false,subtasks:Z.subtasks?P(Z.subtasks):void 0}));return P(S)});},undo:j,redo:z,canUndo:()=>Fe,canRedo:()=>ze,clearHistory:te,exportToPNG:async()=>{if(!de.current)throw new Error("Gantt container not found");let S=await vc__default.default(de.current,{backgroundColor:he.bgPrimary,scale:2});return new Promise((P,W)=>{S.toBlob(Z=>{Z?P(Z):W(new Error("Failed to create blob from canvas"));},"image/png");})},exportToPDF:async S=>{await K.exportToPDF(ne,S);},exportToExcel:async S=>{await K.exportToExcel(ne,S);},exportToJSON:()=>K.exportToJSON(ne),exportToCSV:()=>K.exportToCSV(ne),importFromJSON:S=>{let P=K.importFromJSON(S);me(P);},getTasks:()=>ne,refresh:()=>{me(S=>[...S]);},clearAll:()=>{me([]);}}),[ne,j,z,Fe,ze,te,he,wt]);let eo=Ce.useCallback(S=>{q(P=>P.map(W=>W.id===S?{...W,visible:!W.visible}:W));},[]),ba=Ce.useCallback((S,P)=>{q(W=>W.map(Z=>{if(Z.id!==S)return Z;let ae=Z.minWidth??100,ie=Z.maxWidth??800,et=Math.max(ae,Math.min(ie,P));return {...Z,width:et}}));},[]),ya=Ce.useCallback(S=>{me(P=>is(P,S)),r.onTaskToggleExpand?.(S);},[r]),Qr=Ce.useCallback((S,P)=>{if(G&&G(S,P)===false)return;let Z=K.findTaskById(ne,S)?.progress,ae=et=>et.map(gt=>gt.id===S?{...gt,...P}:gt.subtasks?{...gt,subtasks:ae(gt.subtasks)}:gt);me(ae(ne));let ie=K.findTaskById(ae(ne),S);ie&&(C?.(ie),O?.(ie),P.progress!==void 0&&Z!==void 0&&P.progress!==Z&&T?.(S,Z,P.progress));},[ne,C,G,O,T]),yd=Ce.useCallback(S=>{S.length!==0&&(me(P=>rs(P,S)),r.onTaskIndent?.(S[0]));},[r]),xd=Ce.useCallback(S=>{S.length!==0&&(me(P=>as(P,S)),r.onTaskOutdent?.(S[0]));},[r]),kd=Ce.useCallback((S,P)=>{S.length!==0&&(me(W=>ns(W,S,P)),r.onTaskMove?.(S[0],P));},[r]),Ys=Ce.useCallback(S=>{r.onMultiTaskDelete?r.onMultiTaskDelete(S):(me(P=>An(P,S)),S.forEach(P=>r.onTaskDelete?.(P)));},[r]),wd=Ce.useCallback(S=>{me(P=>os(P,S)),S.forEach(P=>r.onTaskDuplicate?.(P));},[r]),Cd=Ce.useCallback((S,P)=>{me(W=>{let{tasks:Z,newTask:ae}=Yl(W,S,P);return E&&E(ae)===false?W:(r.onTaskCreate?.(ae.parentId,ae.position||0),B?.(ae),Z)});},[r,E,B]),Td=Ce.useCallback((S,P)=>{me(W=>ss(W,S,P)),r.onTaskRename?.(S,P);},[r]),qs=Ce.useCallback(S=>{me(P=>{let{tasks:W}=ls(P,S);return r.onTaskCreate?.(S,0),W});},[r]),Dd=Ce.useCallback((S,P,W)=>{let Z=S.startDate?Math.round((P.getTime()-S.startDate.getTime())/864e5):0,ae=gt=>gt.map(Ht=>Ht.id===S.id?{...Ht,startDate:P,endDate:W,...S.segments&&{segments:S.segments}}:Ht.subtasks?{...Ht,subtasks:ae(Ht.subtasks)}:Ht),ie=ae(ne);ie=K.autoScheduleDependents(ie,S.id,Z),me(ie);let et={...S,startDate:P,endDate:W};C?.(et);},[ne,C]),Sd=Ce.useCallback((S,P)=>{y?.(S,P),Qe({isOpen:true,x:P.clientX,y:P.clientY,task:S});},[y]),Nd=Ce.useCallback((S,P)=>{let W=K.splitTask(ne,S.id,P);me(W),Qe({isOpen:false,x:0,y:0,task:null});},[ne]),Xs=Ce.useCallback(S=>{k?.(S),N||Bt(S);},[k,N]),Js=Ce.useCallback((S,P,W)=>{let Z=new Map,ae=Vt=>{Vt.forEach(mr=>{mr.dependencies&&Z.set(mr.id,mr.dependencies),mr.subtasks&&ae(mr.subtasks);});};ae(W);let ie=Z.get(P)||[];Z.set(P,[...ie,S]);let et=new Set,gt=new Set,Ht=Vt=>{if(!et.has(Vt)){et.add(Vt),gt.add(Vt);let mr=Z.get(Vt)||[];for(let xa of mr){if(!et.has(xa)&&Ht(xa))return true;if(gt.has(xa))return true}}return gt.delete(Vt),false};return Ht(P)},[]),Zs=Ce.useCallback((S,P)=>{if(Js(S.id,P,ne)){console.warn("Cannot create dependency: would create a circular dependency"),alert(`Cannot create this dependency: it would create a circular dependency chain.
276
+ </Project>`,u=new Blob([i],{type:"application/xml;charset=utf-8;"}),l=document.createElement("a");l.href=URL.createObjectURL(u),l.download=r,l.click(),URL.revokeObjectURL(l.href);},calculateCriticalPath:e=>{let t=K.flattenTasks(e),r=t.filter(i=>i.startDate&&i.endDate);if(r.length===0)return [];let a=new Map,n=i=>{if(a.has(i.id))return;let u=i.startDate&&i.endDate?K.calculateDuration(i.startDate,i.endDate):0,l=0;if(i.dependencies&&i.dependencies.length>0)for(let m of i.dependencies){let b=t.find(x=>x.id===m);if(b){n(b);let x=a.get(m)?.ef||0;l=Math.max(l,x);}}let p=l+u;a.set(i.id,{es:l,ef:p});};r.forEach(n);let o=Math.max(...Array.from(a.values()).map(i=>i.ef)),s=new Map,c=i=>{if(s.has(i.id))return;let u=i.startDate&&i.endDate?K.calculateDuration(i.startDate,i.endDate):0,l=t.filter(b=>b.dependencies&&b.dependencies.includes(i.id)),p=o;if(l.length>0)for(let b of l){c(b);let x=s.get(b.id)?.ls||0;p=Math.min(p,x);}let m=p-u;s.set(i.id,{ls:m,lf:p});};r.forEach(c);let d=[];for(let i of r){let u=a.get(i.id),l=s.get(i.id);if(u&&l){let p=l.ls-u.es;Math.abs(p)<.01&&d.push(i.id);}}return d},calculateSlack:(e,t)=>{let r=K.findTaskById(e,t);if(!r||!r.startDate||!r.endDate)return null;if(K.calculateCriticalPath(e).includes(t))return 0;let n=K.getDependentTasks(e,t);if(n.length===0){let c=K.getLatestEndDate(e);if(!c)return null;let d=K.calculateDuration(r.endDate,c);return Math.max(0,d)}let o=n.filter(c=>c.startDate).map(c=>c.startDate.getTime()).sort((c,d)=>c-d)[0];if(!o)return null;let s=K.calculateDuration(r.endDate,new Date(o));return Math.max(0,s)},isOnCriticalPath:(e,t)=>K.calculateCriticalPath(e).includes(t),autoScheduleDependents:(e,t,r)=>{let a=K.findTaskById(e,t);if(!a||!a.endDate)return e;let n=K.getDependentTasks(e,t);if(n.length===0)return e;let o=[...e];for(let s of n){if(!s.startDate||!s.endDate)continue;let c=K.calculateDuration(s.startDate,s.endDate),d;r!==void 0?(d=new Date(s.startDate),d.setDate(d.getDate()+r)):(d=new Date(a.endDate),d.setDate(d.getDate()+1));let i=K.calculateEndDate(d,c),u=l=>l.map(p=>p.id===s.id?{...p,startDate:d,endDate:i}:p.subtasks?{...p,subtasks:u(p.subtasks)}:p);o=u(o),o=K.autoScheduleDependents(o,s.id,r);}return o},calculateCascadePreview:(e,t,r,a,n,o,s,c)=>{if(r===0)return [];let d=[],i=n.getTime(),u=1e3*60*60*24,l=K.findTaskById(e,t);if(!l||!l.endDate)return [];let p=(m,b,x=new Set)=>{if(x.has(m))return;x.add(m);let h=K.getDependentTasks(e,m);for(let g of h){if(!g.startDate||!g.endDate)continue;let v=a.findIndex(U=>U.id===g.id);if(v===-1)continue;let f=g.startDate.getTime(),k=(g.endDate.getTime()-f)/u,C=(f-i)/u*o,T=C+b*o,N=Math.max(k*o,o),R=c+v*s+12;d.push({taskId:g.id,taskName:g.name,originalX:C,previewX:T,width:N,y:R,rowIndex:v,daysDelta:b,color:g.color}),p(g.id,b,x);}};return p(t,r),d},splitTask:(e,t,r,a=3)=>{let n=K.findTaskById(e,t);if(!n||!n.startDate||!n.endDate)return e;if(r<=n.startDate||r>=n.endDate)return console.warn("Split date must be between task start and end dates"),e;let o=new Date(r);o.setDate(o.getDate()-1);let s=new Date(r);s.setDate(s.getDate()+a);let c=new Date(n.endDate);c.setDate(c.getDate()+a);let d=[{startDate:new Date(n.startDate),endDate:o},{startDate:s,endDate:c}],i=u=>u.map(l=>l.id===n.id?{...l,endDate:c,segments:d}:l.subtasks?{...l,subtasks:i(l.subtasks)}:l);return i(e)}};function _n({tasks:e,theme:t,rowHeight:r,timeScale:a,startDate:n,endDate:o,zoom:s,templates:c,onTaskClick:d,onTaskDblClick:i,onTaskContextMenu:u,onTaskDateChange:l,onDependencyCreate:p,onDependencyDelete:m}){let[x,h]=Ce.useState([]),g=Math.ceil((o.getTime()-n.getTime())/(1e3*60*60*24)),v=a==="day"?60:a==="week"?20:8,f=g*v*s,w=E=>{let B=new Date(Date.UTC(E.getFullYear(),E.getMonth(),E.getDate())),G=B.getUTCDay()||7;B.setUTCDate(B.getUTCDate()+4-G);let O=new Date(Date.UTC(B.getUTCFullYear(),0,1));return Math.ceil(((B.getTime()-O.getTime())/864e5+1)/7)},k=E=>{let B=E.getDay();return B===0||B===6},y=Ce.useCallback(E=>{let B=Math.round(E/(v*s)),G=new Date(n);return G.setDate(G.getDate()+B),G},[n,v,s]),C=Ce.useCallback((E,B)=>{if(B.startDate&&B.endDate)return;let G=E.currentTarget.ownerSVGElement;if(!G)return;let O=G.createSVGPoint();O.x=E.clientX,O.y=E.clientY;let F=O.matrixTransform(G.getScreenCTM()?.inverse()),Q=y(F.x),Y=new Date(Q);Y.setDate(Y.getDate()+1),l?.(B,Q,Y);},[y,l]),T=Ce.useMemo(()=>{let E=F=>F.map(Q=>{if(Q.subtasks&&Q.subtasks.length>0){let Y=E(Q.subtasks),pe=Y.filter(I=>I.startDate&&I.endDate);if(pe.length>0){let I=pe.map(Ze=>Ze.startDate.getTime()),le=pe.map(Ze=>Ze.endDate.getTime()),se=new Date(Math.min(...I)),bt=new Date(Math.max(...le));return {...Q,subtasks:Y,startDate:Q.startDate||se,endDate:Q.endDate||bt}}return {...Q,subtasks:Y}}return Q}),B=(F,Q=[])=>{for(let Y of F)Q.push(Y),Y.subtasks&&Y.subtasks.length>0&&(Y.isExpanded===void 0||Y.isExpanded)&&B(Y.subtasks,Q);return Q},G=E(e);return B(G)},[e]),N=Ce.useCallback(E=>{if(!E.startDate||!E.endDate)return {x:0,width:0};let B=E.startDate.getTime(),G=E.endDate.getTime(),O=n.getTime(),F=(B-O)/(1e3*60*60*24),Q=(G-B)/(1e3*60*60*24),Y=F*v*s,pe=Math.max(v*s,40),I=Math.max(Q*v*s,pe);return {x:Y,width:I}},[n,v,s]),R=Ce.useMemo(()=>T.filter(E=>E.startDate&&E.endDate).map(E=>{let{x:B,width:G}=N(E),F=T.findIndex(Q=>Q.id===E.id)*r+12;return {id:E.id,x:B,y:F,width:G,height:32}}),[T,N]),U=Ce.useCallback((E,B,G)=>{if(!G||B===0){h([]);return}let O=K.calculateCascadePreview(e,E,B,T,n,v*s,r,48);h(O);},[e,T,n,v,s,r,48]),H=Ce.useMemo(()=>{let E=[],B=new Date(n);for(;B<=o;){let F=(B.getTime()-n.getTime())/864e5*v*s;if(a==="day")E.push({date:new Date(B),label:B.toLocaleDateString("en-US",{day:"numeric",month:"short"}),x:F}),B.setDate(B.getDate()+1);else if(a==="week"){let Q=w(B);E.push({date:new Date(B),label:`Week ${Q}`,x:F}),B.setDate(B.getDate()+7);}else E.push({date:new Date(B),label:B.toLocaleDateString("en-US",{month:"short",year:"numeric"}),x:F}),B.setMonth(B.getMonth()+1);}return E},[n,o,a,v,s]),M=Ce.useMemo(()=>(new Date().getTime()-n.getTime())/(1e3*60*60*24)*v*s,[n,v,s]),$=Math.max(T.length*r,552);return jsxRuntime.jsxs("div",{className:"w-full h-full flex flex-col","data-gantt-chart":true,style:{backgroundColor:t.bgPrimary},children:[jsxRuntime.jsx("div",{style:{position:"sticky",top:0,zIndex:10,backgroundColor:t.bgGrid,flexShrink:0,height:"48px",borderBottom:`1px solid ${t.border}`,boxSizing:"border-box"},children:jsxRuntime.jsxs("svg",{width:Math.max(f,1e3),height:47,style:{display:"block"},children:[jsxRuntime.jsx("rect",{x:0,y:0,width:Math.max(f,1e3),height:48,fill:t.bgGrid}),H.map((E,B)=>jsxRuntime.jsxs("g",{children:[B>0&&jsxRuntime.jsx("line",{x1:E.x,y1:0,x2:E.x,y2:48,stroke:t.border,strokeWidth:1,opacity:.1}),jsxRuntime.jsx("text",{x:E.x+8,y:48/2,fill:t.textTertiary,fontSize:"11",fontFamily:"'JetBrains Mono', ui-monospace, monospace",fontWeight:"500",dominantBaseline:"middle",children:E.label})]},`header-${B}`)),M>=0&&M<=f&&jsxRuntime.jsx("circle",{cx:M,cy:38,r:6,fill:t.today,opacity:1})]})}),jsxRuntime.jsxs("svg",{width:Math.max(f,1e3),height:$,style:{display:"block",flexShrink:0},children:[jsxRuntime.jsxs("defs",{children:[jsxRuntime.jsx("filter",{id:"shadow",children:jsxRuntime.jsx("feDropShadow",{dx:"0",dy:"1",stdDeviation:"2",floodOpacity:"0.1"})}),jsxRuntime.jsx("pattern",{id:"diagonal-stripes",width:"8",height:"8",patternUnits:"userSpaceOnUse",patternTransform:"rotate(45)",children:jsxRuntime.jsx("line",{x1:"0",y1:"0",x2:"0",y2:"8",stroke:t.border,strokeWidth:"2"})})]}),jsxRuntime.jsx("rect",{x:0,y:0,width:Math.max(f,1e3),height:$,fill:t.bgPrimary}),H.map((E,B)=>{let G=H[B+1]?.x||f,O=k(E.date);return jsxRuntime.jsxs("g",{children:[O&&jsxRuntime.jsx("rect",{x:E.x,y:0,width:G-E.x,height:T.length*r,fill:t.bgWeekend,opacity:1}),B>0&&jsxRuntime.jsx("line",{x1:E.x,y1:0,x2:E.x,y2:T.length*r,stroke:t.border,strokeWidth:1,opacity:.1})]},B)}),M>=0&&M<=f&&jsxRuntime.jsx("line",{x1:M,y1:0,x2:M,y2:T.length*r,stroke:t.today,strokeWidth:2,opacity:1}),T.map((E,B)=>{let G=E.startDate&&E.endDate;return jsxRuntime.jsxs("g",{children:[jsxRuntime.jsx("rect",{x:0,y:B*r,width:f,height:r,fill:B%2===0?"transparent":t.bgSecondary,opacity:1,style:{pointerEvents:"none"}},`row-${E.id}`),!G&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("rect",{x:0,y:B*r,width:f,height:r,fill:"transparent",style:{cursor:"pointer",pointerEvents:"all"},onClick:O=>C(O,E),onMouseEnter:O=>{O.currentTarget.setAttribute("fill",t.accentLight),O.currentTarget.setAttribute("opacity","0.5");},onMouseLeave:O=>{O.currentTarget.setAttribute("fill","transparent"),O.currentTarget.setAttribute("opacity","1");}},`clickable-${E.id}`),jsxRuntime.jsx("text",{x:M>0?M:100,y:B*r+r/2,fill:t.textTertiary,fontSize:"12",fontFamily:"Inter, sans-serif",fontStyle:"italic",dominantBaseline:"middle",opacity:.4,style:{pointerEvents:"none",userSelect:"none"},children:"Click to set dates..."},`placeholder-${E.id}`)]})]},`row-group-${E.id}`)}),T.map((E,B)=>!E.dependencies||E.dependencies.length===0||!E.startDate||!E.endDate?null:E.dependencies.map(G=>{let O=T.find(pe=>pe.id===G);if(!O||!O.startDate||!O.endDate)return null;let F=T.findIndex(pe=>pe.id===G),Q=N(O),Y=N(E);return jsxRuntime.jsx(On,{x1:Q.x+Q.width,y1:F*r+r/2,x2:Y.x,y2:B*r+r/2,theme:t,onDelete:()=>m?.(E.id,G)},`dep-${G}-${E.id}`)})),T.map((E,B)=>{if(!E.startDate||!E.endDate)return null;let{x:G,width:O}=N(E),F=B*r+12,Q=E.subtasks&&E.subtasks.length>0&&!E.isMilestone;return E.isMilestone?jsxRuntime.jsx($n,{task:E,x:G+O/2,y:F+16,theme:t,onClick:d},E.id):Q?jsxRuntime.jsxs("g",{onClick:()=>d?.(E),style:{cursor:"pointer"},children:[jsxRuntime.jsx("rect",{x:G,y:F,width:O,height:32,fill:t.primary,opacity:.25,rx:6}),jsxRuntime.jsx("line",{x1:G,y1:F,x2:G+O,y2:F,stroke:t.primary,strokeWidth:3,opacity:.9,strokeLinecap:"round"}),jsxRuntime.jsx("line",{x1:G,y1:F,x2:G,y2:F+32,stroke:t.primary,strokeWidth:3,opacity:.9,strokeLinecap:"round"}),jsxRuntime.jsx("line",{x1:G+O,y1:F,x2:G+O,y2:F+32,stroke:t.primary,strokeWidth:3,opacity:.9,strokeLinecap:"round"}),jsxRuntime.jsx("line",{x1:G,y1:F+32,x2:G+O,y2:F+32,stroke:t.primary,strokeWidth:3,opacity:.9,strokeLinecap:"round"}),O>60&&jsxRuntime.jsx("text",{x:G+12,y:F+16,dominantBaseline:"middle",fill:"#FFFFFF",fontSize:"13",fontWeight:"500",fontFamily:"Inter, sans-serif",style:{pointerEvents:"none",userSelect:"none"},children:E.name})]},E.id):jsxRuntime.jsx(Fn,{task:E,x:G,y:F,width:O,theme:t,dayWidth:v*s,startDate:n,templates:c,onClick:d,onDoubleClick:i,onContextMenu:u,onDateChange:l,onDependencyCreate:p,allTaskPositions:R,onDragMove:U},E.id)}),x.map(E=>jsxRuntime.jsxs("g",{style:{pointerEvents:"none"},children:[jsxRuntime.jsx("rect",{x:E.previewX,y:E.y-48,width:E.width,height:32,rx:8,fill:E.color||t.accent,opacity:.3,stroke:t.accent,strokeWidth:2,strokeDasharray:"4 2"}),Math.abs(E.daysDelta)>0&&jsxRuntime.jsx("text",{x:E.previewX+E.width/2,y:E.y-48+16,textAnchor:"middle",dominantBaseline:"middle",fill:t.accent,fontSize:"10",fontWeight:"600",fontFamily:"Inter, sans-serif",style:{userSelect:"none"},children:E.daysDelta>0?`+${E.daysDelta}d`:`${E.daysDelta}d`})]},`cascade-preview-${E.taskId}`))]})]})}var oc=[{name:"Azul",value:"#6366F1",light:"#818CF8"},{name:"P\xFArpura",value:"#A855F7",light:"#C084FC"},{name:"Rosa",value:"#EC4899",light:"#F472B6"},{name:"Rojo",value:"#EF4444",light:"#F87171"},{name:"Naranja",value:"#F59E0B",light:"#FBBF24"},{name:"Amarillo",value:"#EAB308",light:"#FACC15"},{name:"Lima",value:"#84CC16",light:"#A3E635"},{name:"Verde",value:"#10B981",light:"#34D399"},{name:"Esmeralda",value:"#059669",light:"#10B981"},{name:"Cyan",value:"#06B6D4",light:"#22D3EE"},{name:"Azul Cielo",value:"#0EA5E9",light:"#38BDF8"},{name:"\xCDndigo",value:"#4F46E5",light:"#6366F1"},{name:"Violeta",value:"#8B5CF6",light:"#A78BFA"},{name:"Fucsia",value:"#D946EF",light:"#E879F9"},{name:"Gris",value:"#6B7280",light:"#9CA3AF"},{name:"Piedra",value:"#78716C",light:"#A8A29E"}];function sc({value:e="#6366F1",onChange:t,disabled:r=false}){return jsxRuntime.jsxs("div",{className:"space-y-2",children:[jsxRuntime.jsx("div",{className:"flex flex-wrap gap-2",children:oc.map(a=>{let n=e===a.value;return jsxRuntime.jsx(framerMotion.motion.button,{type:"button",onClick:()=>!r&&t(a.value),className:"relative rounded-full transition-all focus:outline-none focus:ring-2 focus:ring-offset-2",style:{width:"32px",height:"32px",backgroundColor:a.value,boxShadow:n?`0 0 0 2px #FFFFFF, 0 0 0 4px ${a.value}`:"0 1px 3px rgba(0, 0, 0, 0.12)",opacity:r?.5:1,cursor:r?"not-allowed":"pointer"},whileHover:r?{}:{scale:1.1},whileTap:r?{}:{scale:.95},title:a.name,disabled:r,children:n&&jsxRuntime.jsx(framerMotion.motion.div,{initial:{scale:0},animate:{scale:1},className:"absolute inset-0 flex items-center justify-center",children:jsxRuntime.jsx(lucideReact.Check,{className:"w-4 h-4 text-white drop-shadow-md",strokeWidth:3})})},a.value)})}),e&&jsxRuntime.jsx("div",{className:"text-xs text-center font-medium",style:{color:e},children:oc.find(a=>a.value===e)?.name||"Personalizado"})]})}function Wn({isOpen:e,onClose:t,task:r,availableTasks:a=[],availableUsers:n=[],onSubmit:o,isLoading:s=false,mode:c=r?"edit":"create",theme:d="dark"}){let i=ke[d]||ke.dark,u={backgroundColor:i.bgSecondary,border:`1px solid ${i.borderLight}`,color:i.textPrimary},l={color:i.textSecondary},[p,m]=Ce.useState({name:"",progress:0,status:"todo",isMilestone:false,color:"#6366F1",assignees:[],dependencies:[]}),[b,x]=Ce.useState({});Ce.useEffect(()=>{m(r?{name:r.name,startDate:r.startDate,endDate:r.endDate,progress:r.progress,status:r.status||"todo",isMilestone:r.isMilestone||false,color:r.color||"#6366F1",assignees:r.assignees||[],dependencies:r.dependencies||[]}:{name:"",progress:0,status:"todo",isMilestone:false,color:"#6366F1",assignees:[],dependencies:[]});},[r,e]);let h=()=>{let f={};return p.name.trim()||(f.name="El nombre es requerido"),p.startDate&&p.endDate&&p.startDate>p.endDate&&(f.endDate="La fecha de fin debe ser posterior a la de inicio"),x(f),Object.keys(f).length===0},g=async f=>{if(f.preventDefault(),!!h())try{await o(p),t();}catch(w){console.error("Error submitting task:",w);}},v=(f,w)=>{m(k=>{let y={...k,[f]:w};if(f==="progress"){let C=typeof w=="number"?w:parseInt(w,10);C===100&&k.status!=="completed"?y.status="completed":C>0&&C<100&&k.status==="todo"?y.status="in-progress":C===0&&k.status==="in-progress"&&(y.status="todo");}return y}),b[f]&&x(k=>{let y={...k};return delete y[f],y});};return jsxRuntime.jsx(framerMotion.AnimatePresence,{children:e&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(framerMotion.motion.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},className:"fixed inset-0 bg-black/50 z-50",onClick:t}),jsxRuntime.jsx(framerMotion.motion.div,{initial:{opacity:0,scale:.95,y:20},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.95,y:20},transition:{duration:.2,ease:[.4,0,.2,1]},className:"fixed inset-0 z-50 flex items-center justify-center p-4 pointer-events-none",children:jsxRuntime.jsxs("div",{className:"w-full max-w-2xl rounded-xl shadow-2xl pointer-events-auto overflow-hidden",style:{backgroundColor:i.bgPrimary,border:`1px solid ${i.border}`},onClick:f=>f.stopPropagation(),children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between px-6 py-4",style:{borderBottom:`1px solid ${i.border}`},children:[jsxRuntime.jsx("h2",{className:"text-lg font-semibold",style:{color:i.textPrimary},children:c==="create"?"Crear Nueva Tarea":"Editar Tarea"}),jsxRuntime.jsx("button",{onClick:t,className:"p-2 rounded-lg transition-colors",style:{color:i.textSecondary},onMouseEnter:f=>f.currentTarget.style.backgroundColor=i.hoverBg,onMouseLeave:f=>f.currentTarget.style.backgroundColor="transparent",disabled:s,children:jsxRuntime.jsx(lucideReact.X,{className:"w-5 h-5"})})]}),jsxRuntime.jsxs("form",{onSubmit:g,className:"p-6 space-y-6 max-h-[calc(100vh-200px)] overflow-y-auto",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{className:"block text-sm font-medium mb-2",style:l,children:"Nombre de la Tarea *"}),jsxRuntime.jsx("input",{type:"text",value:p.name,onChange:f=>v("name",f.target.value),className:"w-full px-4 py-2.5 rounded-lg focus:outline-none focus:ring-2 focus:border-transparent",style:u,onFocus:f=>f.currentTarget.style.borderColor=i.accent,onBlur:f=>f.currentTarget.style.borderColor=i.borderLight,placeholder:"Ej: Dise\xF1ar mockups de la aplicaci\xF3n",disabled:s}),b.name&&jsxRuntime.jsxs("p",{className:"mt-1 text-sm text-red-400 flex items-center gap-1",children:[jsxRuntime.jsx(lucideReact.AlertCircle,{className:"w-4 h-4"}),b.name]})]}),jsxRuntime.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{className:"block text-sm font-medium mb-2 flex items-center gap-2",style:l,children:[jsxRuntime.jsx(lucideReact.Calendar,{className:"w-4 h-4"}),"Fecha de Inicio"]}),jsxRuntime.jsx("input",{type:"date",value:p.startDate?p.startDate.toISOString().split("T")[0]:"",onChange:f=>v("startDate",f.target.value?new Date(f.target.value):void 0),className:"w-full px-4 py-2.5 rounded-lg focus:outline-none focus:ring-2 focus:border-transparent",style:u,disabled:s||p.isMilestone})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{className:"block text-sm font-medium mb-2 flex items-center gap-2",style:l,children:[jsxRuntime.jsx(lucideReact.Calendar,{className:"w-4 h-4"}),"Fecha de Fin"]}),jsxRuntime.jsx("input",{type:"date",value:p.endDate?p.endDate.toISOString().split("T")[0]:"",onChange:f=>v("endDate",f.target.value?new Date(f.target.value):void 0),className:"w-full px-4 py-2.5 rounded-lg focus:outline-none focus:ring-2 focus:border-transparent",style:u,disabled:s||p.isMilestone}),b.endDate&&jsxRuntime.jsxs("p",{className:"mt-1 text-sm text-red-400 flex items-center gap-1",children:[jsxRuntime.jsx(lucideReact.AlertCircle,{className:"w-4 h-4"}),b.endDate]})]})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{className:"block text-sm font-medium mb-2 flex items-center gap-2",style:l,children:[jsxRuntime.jsx(lucideReact.CheckCircle2,{className:"w-4 h-4"}),"Estado"]}),jsxRuntime.jsxs("select",{value:p.status,onChange:f=>v("status",f.target.value),className:"w-full px-4 py-2.5 rounded-lg focus:outline-none focus:ring-2 focus:border-transparent",style:u,disabled:s,children:[jsxRuntime.jsx("option",{value:"todo",children:"Por Hacer"}),jsxRuntime.jsx("option",{value:"in-progress",children:"En Progreso"}),jsxRuntime.jsx("option",{value:"completed",children:"Completada"})]})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{className:"block text-sm font-medium mb-3 flex items-center gap-2",style:l,children:[jsxRuntime.jsx(lucideReact.Palette,{className:"w-4 h-4"}),"Color de la Tarea"]}),jsxRuntime.jsx(sc,{value:p.color,onChange:f=>v("color",f),disabled:s}),jsxRuntime.jsx("p",{className:"text-xs mt-2",style:{color:i.textTertiary},children:r?.parentId?"Esta subtarea hereda el color de su tarea padre":r?.subtasks&&r.subtasks.length>0?"Las subtareas heredar\xE1n este color con menor opacidad":"Elige un color para organizar visualmente tus tareas"})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{className:"block text-sm font-medium mb-2 flex items-center justify-between",style:l,children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(lucideReact.Clock,{className:"w-4 h-4"}),"Progreso"]}),jsxRuntime.jsxs("span",{className:"font-semibold px-2 py-0.5 rounded text-sm",style:{color:p.progress<30?"#EF4444":p.progress<70?"#F59E0B":"#10B981",backgroundColor:p.progress<30?"rgba(239, 68, 68, 0.1)":p.progress<70?"rgba(245, 158, 11, 0.1)":"rgba(16, 185, 129, 0.1)"},children:[p.progress,"%"]})]}),jsxRuntime.jsxs("div",{className:"relative",children:[jsxRuntime.jsx("input",{type:"range",min:"0",max:"100",step:"5",value:p.progress,onChange:f=>v("progress",parseInt(f.target.value)),className:"w-full h-2 rounded-lg appearance-none cursor-pointer",style:{backgroundColor:i.bgSecondary,accentColor:p.progress<30?"#EF4444":p.progress<70?"#F59E0B":"#10B981"},disabled:s}),jsxRuntime.jsx("div",{className:"absolute top-0 left-0 h-2 rounded-lg pointer-events-none transition-all duration-300",style:{width:`${p.progress}%`,backgroundColor:p.progress<30?"rgba(239, 68, 68, 0.3)":p.progress<70?"rgba(245, 158, 11, 0.3)":"rgba(16, 185, 129, 0.3)"}})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between mt-3 gap-2",children:[jsxRuntime.jsx("span",{className:"text-xs",style:{color:i.textTertiary},children:"Accesos r\xE1pidos:"}),jsxRuntime.jsx("div",{className:"flex gap-1.5",children:[0,25,50,75,100].map(f=>jsxRuntime.jsxs("button",{type:"button",onClick:()=>v("progress",f),disabled:s,className:"px-3 py-1 text-xs font-medium rounded-md transition-all duration-200 hover:scale-105 active:scale-95",style:{backgroundColor:p.progress===f?f<30?"#EF4444":f<70?"#F59E0B":"#10B981":i.bgSecondary,color:p.progress===f?"#FFFFFF":i.textSecondary,border:`1px solid ${p.progress===f?f<30?"#EF4444":f<70?"#F59E0B":"#10B981":i.borderLight}`},children:[f,"%"]},f))})]}),jsxRuntime.jsxs("div",{className:"flex justify-between text-xs mt-2",style:{color:i.textTertiary},children:[jsxRuntime.jsx("span",{children:"0%"}),jsxRuntime.jsx("span",{children:"25%"}),jsxRuntime.jsx("span",{children:"50%"}),jsxRuntime.jsx("span",{children:"75%"}),jsxRuntime.jsx("span",{children:"100%"})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-3 p-4 rounded-lg",style:{backgroundColor:i.bgSecondary,border:`1px solid ${i.borderLight}`},children:[jsxRuntime.jsx("input",{type:"checkbox",id:"isMilestone",checked:p.isMilestone,onChange:f=>v("isMilestone",f.target.checked),className:"w-4 h-4 rounded focus:ring-2",style:{accentColor:i.accent},disabled:s}),jsxRuntime.jsxs("label",{htmlFor:"isMilestone",className:"flex items-center gap-2 text-sm cursor-pointer",style:{color:i.textPrimary},children:[jsxRuntime.jsx(lucideReact.Milestone,{className:"w-4 h-4 text-yellow-500"}),"Marcar como Hito (Milestone)"]})]}),n.length>0&&jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{className:"block text-sm font-medium mb-2 flex items-center gap-2",style:l,children:[jsxRuntime.jsx(lucideReact.Users,{className:"w-4 h-4"}),"Asignar a"]}),jsxRuntime.jsx("div",{className:"space-y-2 max-h-32 overflow-y-auto p-3 rounded-lg",style:{backgroundColor:i.bgSecondary,border:`1px solid ${i.borderLight}`},children:n.map(f=>jsxRuntime.jsxs("label",{className:"flex items-center gap-3 cursor-pointer p-2 rounded",onMouseEnter:w=>w.currentTarget.style.backgroundColor=i.hoverBg,onMouseLeave:w=>w.currentTarget.style.backgroundColor="transparent",children:[jsxRuntime.jsx("input",{type:"checkbox",checked:p.assignees?.some(w=>w.name===f.name),onChange:w=>{let k=w.target.checked?[...p.assignees||[],{name:f.name,avatar:f.avatar,initials:f.name.split(" ").map(y=>y[0]).join("").toUpperCase().slice(0,2),color:i.accent}]:(p.assignees||[]).filter(y=>y.name!==f.name);v("assignees",k);},className:"w-4 h-4 rounded",style:{accentColor:i.accent},disabled:s}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"w-6 h-6 rounded-full flex items-center justify-center text-xs text-white font-semibold",style:{backgroundColor:i.accent},children:f.name.charAt(0).toUpperCase()}),jsxRuntime.jsx("span",{className:"text-sm",style:{color:i.textPrimary},children:f.name})]})]},f.id))})]}),a.length>0&&jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{className:"block text-sm font-medium mb-2 flex items-center gap-2",style:l,children:[jsxRuntime.jsx(lucideReact.Link2,{className:"w-4 h-4"}),"Dependencias"]}),jsxRuntime.jsx("div",{className:"space-y-2 max-h-32 overflow-y-auto p-3 rounded-lg",style:{backgroundColor:i.bgSecondary,border:`1px solid ${i.borderLight}`},children:a.filter(f=>f.id!==r?.id).map(f=>jsxRuntime.jsxs("label",{className:"flex items-center gap-3 cursor-pointer p-2 rounded",onMouseEnter:w=>w.currentTarget.style.backgroundColor=i.hoverBg,onMouseLeave:w=>w.currentTarget.style.backgroundColor="transparent",children:[jsxRuntime.jsx("input",{type:"checkbox",checked:p.dependencies?.includes(f.id),onChange:w=>{let k=w.target.checked?[...p.dependencies||[],f.id]:(p.dependencies||[]).filter(y=>y!==f.id);v("dependencies",k);},className:"w-4 h-4 rounded",style:{accentColor:i.accent},disabled:s}),jsxRuntime.jsx("span",{className:"text-sm",style:{color:i.textPrimary},children:f.name})]},f.id))})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-end gap-3 px-6 py-4",style:{borderTop:`1px solid ${i.border}`,backgroundColor:i.bgPrimary},children:[jsxRuntime.jsx("button",{type:"button",onClick:t,className:"px-4 py-2 text-sm font-medium rounded-lg transition-colors",style:{color:i.textSecondary},onMouseEnter:f=>{f.currentTarget.style.color=i.textPrimary,f.currentTarget.style.backgroundColor=i.hoverBg;},onMouseLeave:f=>{f.currentTarget.style.color=i.textSecondary,f.currentTarget.style.backgroundColor="transparent";},disabled:s,children:"Cancelar"}),jsxRuntime.jsx("button",{onClick:g,disabled:s,className:"px-4 py-2 text-sm font-medium rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-2",style:{backgroundColor:i.accent,color:"#FFFFFF"},onMouseEnter:f=>!s&&(f.currentTarget.style.backgroundColor=i.accentHover),onMouseLeave:f=>!s&&(f.currentTarget.style.backgroundColor=i.accent),children:s?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:"w-4 h-4 border-2 border-white/30 border-t-white rounded-full animate-spin"}),"Guardando..."]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(lucideReact.CheckCircle2,{className:"w-4 h-4"}),c==="create"?"Crear Tarea":"Guardar Cambios"]})})]})]})})]})})}var Dg=['Move "Task Name" to next Monday','Extend "Task Name" by 3 days','Rename "Old Name" to "New Name"','Set "Task Name" progress to 50%','Link "Task A" to "Task B"','Create a new task called "New Task"','Delete "Task Name"','Assign John to "Task Name"'],mc=()=>jsxRuntime.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[jsxRuntime.jsx("path",{d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707"}),jsxRuntime.jsx("circle",{cx:"12",cy:"12",r:"4"})]}),Sg=()=>jsxRuntime.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:jsxRuntime.jsx("path",{d:"M22 2L11 13M22 2L15 22L11 13M22 2L2 9L11 13"})}),Ng=()=>jsxRuntime.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:jsxRuntime.jsx("path",{d:"M18 6L6 18M6 6L18 18"})}),Eg=()=>jsxRuntime.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:jsxRuntime.jsx("path",{d:"M5 12h14"})}),Rg=()=>jsxRuntime.jsx("div",{className:"flex gap-1 items-center",children:[0,1,2].map(e=>jsxRuntime.jsx(framerMotion.motion.div,{className:"w-2 h-2 rounded-full bg-current",animate:{scale:[1,1.2,1],opacity:[.5,1,.5]},transition:{duration:.8,repeat:1/0,delay:e*.15}},e))});function Hn({tasks:e,theme:t,config:r,onTasksUpdate:a,onTaskUpdate:n,onTaskCreate:o,onTaskDelete:s,onDependencyCreate:c,onDependencyDelete:d}){let[i,u]=Ce.useState(false),[l,p]=Ce.useState(false),[m,b]=Ce.useState([]),[x,h]=Ce.useState(""),[g,v]=Ce.useState(false),[f,w]=Ce.useState(true),k=Ce.useRef(null),y=Ce.useRef(null),C=Ce.useRef(null),{enabled:T=true,placeholder:N='Ask AI to edit tasks... (e.g., "Move Design to next week")',position:R="bottom-right",onCommand:U,suggestions:H=Dg,maxHistory:M=50}=r;Ce.useEffect(()=>{y.current&&y.current.scrollIntoView({behavior:"smooth"});},[m]),Ce.useEffect(()=>{i&&!l&&k.current&&setTimeout(()=>k.current?.focus(),100);},[i,l]);let $=Ce.useCallback(F=>{if(F.success)switch(F.type){case "move_task":case "resize_task":case "rename_task":case "set_progress":case "set_status":case "assign_task":F.taskId&&F.updates&&n?.(F.taskId,F.updates);break;case "create_task":F.newTask&&o?.(F.newTask);break;case "delete_task":F.taskId&&s?.(F.taskId);break;case "link_tasks":F.dependencyFrom&&F.dependencyTo&&c?.(F.dependencyFrom,F.dependencyTo);break;case "unlink_tasks":F.taskId&&F.dependencyFrom&&d?.(F.taskId,F.dependencyFrom);break}},[n,o,s,c,d]),E=Ce.useCallback(async F=>{if(!F.trim()||g)return;let Q={id:`user-${Date.now()}`,role:"user",content:F,timestamp:new Date};b(pe=>[...pe.slice(-(M-1)),Q]),h(""),w(false),v(true);let Y={id:`loading-${Date.now()}`,role:"assistant",content:"",timestamp:new Date,isLoading:true};b(pe=>[...pe,Y]);try{if(U){let pe=await U(F,e);b(I=>{let le=I.filter(bt=>!bt.isLoading),se={id:`assistant-${Date.now()}`,role:"assistant",content:pe.message,timestamp:new Date,command:pe};return [...le,se]}),$(pe);}else b(pe=>[...pe.filter(le=>!le.isLoading),{id:`assistant-${Date.now()}`,role:"assistant",content:"AI handler not configured. Please provide an onCommand handler in the aiAssistant config.",timestamp:new Date}]);}catch(pe){b(I=>[...I.filter(se=>!se.isLoading),{id:`error-${Date.now()}`,role:"assistant",content:`Sorry, I encountered an error: ${pe instanceof Error?pe.message:"Unknown error"}`,timestamp:new Date}]);}finally{v(false);}},[g,M,U,e,$]),B=F=>{F.preventDefault(),E(x);},G=F=>{h(F),k.current?.focus();};if(Ce.useEffect(()=>{let F=Q=>{(Q.metaKey||Q.ctrlKey)&&Q.key==="k"&&(Q.preventDefault(),u(Y=>!Y),i||p(false)),Q.key==="Escape"&&i&&u(false);};return document.addEventListener("keydown",F),()=>document.removeEventListener("keydown",F)},[i]),!T)return null;let O={"bottom-right":"bottom-4 right-4","bottom-left":"bottom-4 left-4","top-right":"top-4 right-4","top-left":"top-4 left-4"};return jsxRuntime.jsxs(Ve,{children:[jsxRuntime.jsx(framerMotion.AnimatePresence,{children:!i&&jsxRuntime.jsxs(framerMotion.motion.button,{initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},whileHover:{scale:1.05},whileTap:{scale:.95},className:`fixed ${O[R]} z-[99999] flex items-center gap-2 px-4 py-3 rounded-full shadow-lg transition-colors`,style:{background:"linear-gradient(135deg, #3B82F6 0%, #2563EB 100%)",color:"white",boxShadow:"0 4px 20px rgba(59, 130, 246, 0.4)"},onClick:()=>u(true),children:[jsxRuntime.jsx(mc,{}),jsxRuntime.jsx("span",{className:"text-sm font-medium",children:"AI Assistant"}),jsxRuntime.jsx("kbd",{className:"hidden sm:inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[10px] font-mono rounded bg-white/20",children:"\u2318K"})]})}),jsxRuntime.jsx(framerMotion.AnimatePresence,{children:i&&jsxRuntime.jsxs(framerMotion.motion.div,{ref:C,initial:{opacity:0,y:20,scale:.95},animate:{opacity:1,y:0,scale:1,height:l?"auto":500},exit:{opacity:0,y:20,scale:.95},transition:{type:"spring",damping:25,stiffness:300},className:`fixed ${O[R]} z-[99999] w-96 rounded-2xl overflow-hidden shadow-2xl flex flex-col`,style:{background:t.bgPrimary,border:`1px solid ${t.border}`,boxShadow:`0 20px 60px rgba(0, 0, 0, 0.3), 0 0 0 1px ${t.border}`},children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between px-4 py-3",style:{background:"linear-gradient(135deg, #3B82F6 0%, #2563EB 100%)"},children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2 text-white",children:[jsxRuntime.jsx(mc,{}),jsxRuntime.jsx("span",{className:"font-semibold",children:"Gantt AI Assistant"})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-1",children:[jsxRuntime.jsx("button",{onClick:()=>p(F=>!F),className:"p-1.5 rounded-lg hover:bg-white/20 text-white/80 hover:text-white transition-colors",children:jsxRuntime.jsx(Eg,{})}),jsxRuntime.jsx("button",{onClick:()=>u(false),className:"p-1.5 rounded-lg hover:bg-white/20 text-white/80 hover:text-white transition-colors",children:jsxRuntime.jsx(Ng,{})})]})]}),jsxRuntime.jsx(framerMotion.AnimatePresence,{children:!l&&jsxRuntime.jsxs(framerMotion.motion.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},className:"flex flex-col flex-1 min-h-0",children:[jsxRuntime.jsxs("div",{className:"flex-1 overflow-y-auto p-4 space-y-4",style:{maxHeight:350},children:[m.length===0&&f&&jsxRuntime.jsxs("div",{className:"space-y-3",children:[jsxRuntime.jsx("p",{className:"text-sm text-center",style:{color:t.textSecondary},children:"Try asking me to edit your Gantt chart:"}),jsxRuntime.jsx("div",{className:"flex flex-wrap gap-2",children:H.slice(0,4).map((F,Q)=>jsxRuntime.jsx("button",{onClick:()=>G(F),className:"text-xs px-3 py-1.5 rounded-full transition-colors",style:{background:t.bgSecondary,color:t.textSecondary,border:`1px solid ${t.border}`},children:F.length>30?F.slice(0,30)+"...":F},Q))})]}),m.map(F=>jsxRuntime.jsx(framerMotion.motion.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},className:`flex ${F.role==="user"?"justify-end":"justify-start"}`,children:jsxRuntime.jsxs("div",{className:`max-w-[85%] rounded-2xl px-4 py-2.5 ${F.role==="user"?"rounded-br-md":"rounded-bl-md"}`,style:{background:F.role==="user"?"linear-gradient(135deg, #6366F1 0%, #8B5CF6 100%)":t.bgSecondary,color:F.role==="user"?"white":t.textPrimary},children:[F.isLoading?jsxRuntime.jsx(Rg,{}):jsxRuntime.jsx("p",{className:"text-sm whitespace-pre-wrap",children:F.content}),F.command&&jsxRuntime.jsxs("div",{className:"mt-2 text-xs px-2 py-1 rounded-md inline-flex items-center gap-1",style:{background:F.command.success?"rgba(16, 185, 129, 0.2)":"rgba(239, 68, 68, 0.2)",color:F.command.success?"#10B981":"#EF4444"},children:[F.command.success?"\u2713":"\u2717",jsxRuntime.jsx("span",{className:"capitalize",children:F.command.type.replace(/_/g," ")})]})]})},F.id)),jsxRuntime.jsx("div",{ref:y})]}),jsxRuntime.jsxs("form",{onSubmit:B,className:"p-3 border-t",style:{borderColor:t.border},children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2 rounded-xl px-4 py-2",style:{background:t.bgSecondary,border:`1px solid ${t.border}`},children:[jsxRuntime.jsx("input",{ref:k,type:"text",value:x,onChange:F=>h(F.target.value),placeholder:N,disabled:g,className:"flex-1 bg-transparent text-sm outline-none",style:{color:t.textPrimary}}),jsxRuntime.jsx("button",{type:"submit",disabled:!x.trim()||g,className:"p-2 rounded-lg transition-all disabled:opacity-50",style:{background:x.trim()?"linear-gradient(135deg, #6366F1 0%, #8B5CF6 100%)":"transparent",color:x.trim()?"white":t.textSecondary},children:jsxRuntime.jsx(Sg,{})})]}),jsxRuntime.jsx("p",{className:"text-[10px] text-center mt-2",style:{color:t.textTertiary},children:"Press Enter to send \u2022 Esc to close"})]})]})})]})})]})}function fc(e,t=50){let[r,a]=Ce.useState({past:[],present:e,future:[]}),n=Ce.useRef(false),o=Ce.useCallback((i,u=true)=>{a(l=>{let p=typeof i=="function"?i(l.present):i;if(n.current)return {...l,present:p};if(!u)return {...l,present:p};let m=[...l.past,l.present];return m.length>t&&m.shift(),{past:m,present:p,future:[]}});},[t]),s=Ce.useCallback(()=>{a(i=>{if(i.past.length===0)return i;let u=i.past[i.past.length-1],l=i.past.slice(0,i.past.length-1);return n.current=true,setTimeout(()=>{n.current=false;},0),{past:l,present:u,future:[i.present,...i.future]}});},[]),c=Ce.useCallback(()=>{a(i=>{if(i.future.length===0)return i;let u=i.future[0],l=i.future.slice(1);return n.current=true,setTimeout(()=>{n.current=false;},0),{past:[...i.past,i.present],present:u,future:l}});},[]),d=Ce.useCallback(()=>{a(i=>({past:[],present:i.present,future:[]}));},[]);return {state:r.present,setState:o,undo:s,redo:c,canUndo:r.past.length>0,canRedo:r.future.length>0,clearHistory:d}}function gc({undo:e,redo:t,canUndo:r,canRedo:a,enabled:n=true}){Ce.useEffect(()=>{if(!n)return;let o=s=>{let c=navigator.platform.toUpperCase().indexOf("MAC")>=0,d=c?s.metaKey:s.ctrlKey;if(d&&s.key==="z"&&!s.shiftKey&&r){s.preventDefault(),e();return}if(a){if(!c&&d&&s.key==="y"){s.preventDefault(),t();return}if(c&&d&&s.shiftKey&&s.key==="z"){s.preventDefault(),t();return}}};return window.addEventListener("keydown",o),()=>{window.removeEventListener("keydown",o);}},[e,t,r,a,n]);}var Ag={taskTooltip:e=>{let t=[`<strong>${e.name}</strong>`];if(e.startDate&&e.endDate){t.push(`${K.formatDate(e.startDate)} - ${K.formatDate(e.endDate)}`);let r=K.calculateDuration(e.startDate,e.endDate);t.push(`Duration: ${r} days`);}if(e.progress!==void 0&&t.push(`Progress: ${e.progress}%`),e.status&&t.push(`Status: ${e.status}`),e.assignees&&e.assignees.length>0){let r=e.assignees.map(a=>a.name).join(", ");t.push(`Assigned: ${r}`);}return e.dependencies&&e.dependencies.length>0&&t.push(`Dependencies: ${e.dependencies.length}`),t.join("<br/>")},taskLabel:e=>e.name,gridCell:(e,t,r)=>r,taskClass:e=>{let t=[];return e.isCriticalPath&&t.push("critical-path"),e.status==="completed"?t.push("completed"):e.status==="in-progress"?t.push("in-progress"):e.status==="todo"&&t.push("todo"),e.isMilestone&&t.push("milestone"),t.join(" ")},milestoneContent:e=>`\u25C6 ${e.name}`,dateFormat:e=>K.formatDate(e),durationFormat:e=>e===1?"1 day":`${e} days`,progressFormat:e=>`${e}%`};function hc(e){return {...Ag,...e}}var Og=e=>{switch(e){case "compact":return 40;case "comfortable":return 48;case "spacious":return 56;default:return 48}},yc=Ce.forwardRef(function({tasks:t,config:r={},onTasksChange:a},n){let{theme:o,timeScale:s="week",rowDensity:c="comfortable",showThemeSelector:d=true,showExportButton:i=true,availableUsers:u=[],templates:l,enableAutoCriticalPath:p=true,aiAssistant:m,locale:b="en",customTranslations:x,showCreateTaskButton:h=false,createTaskLabel:g,onCreateTask:v,onThemeChange:f,onTaskClick:w,onTaskDblClick:k,onTaskContextMenu:y,onTaskUpdate:C,onProgressChange:T,onTaskEdit:N,onTaskAddSubtask:R,onTaskMarkIncomplete:U,onTaskSetInProgress:H,onDependencyCreate:M,onDependencyDelete:$,onBeforeTaskAdd:E,onAfterTaskAdd:B,onBeforeTaskUpdate:G,onAfterTaskUpdate:O}=r,Q=Ce.useContext(Rn)?.theme,[Y,pe]=Ce.useState(Q||o||"dark"),[I,le]=Ce.useState(s),[se,bt]=Ce.useState(c),[Ze,ar]=Ce.useState(1),[we,mt]=Ce.useState(0),[ft,_t]=Ce.useState(false),[pr,Lr]=Ce.useState(null),[ge,Qe]=Ce.useState({isOpen:false,x:0,y:0,task:null}),[Wt,Bt]=Ce.useState(null);Ce.useEffect(()=>{Q&&Q!==Y&&pe(Q);},[Q]),Ce.useEffect(()=>{o&&o!==Y&&pe(o);},[o]);let Fr=Ce.useCallback(S=>{pe(S),f?.(S);},[f]),{state:ne,setState:me,undo:j,redo:z,canUndo:Fe,canRedo:ze,clearHistory:te}=fc(t,50);Ce.useEffect(()=>{me(t);},[t,me]),Ce.useEffect(()=>{a&&a(ne);},[ne,a]);let ce=Ce.useMemo(()=>Zo(b,x),[b,x]),nr=Ce.useCallback(S=>[{id:"name",label:S.columns.taskName,width:320,minWidth:180,maxWidth:800,visible:true,sortable:true,resizable:true},{id:"startDate",label:S.columns.startDate,width:110,visible:false,sortable:true},{id:"endDate",label:S.columns.endDate,width:110,visible:false,sortable:true},{id:"duration",label:S.columns.duration,width:80,visible:false,sortable:true},{id:"assignees",label:S.columns.assignees,width:120,visible:false,sortable:false},{id:"status",label:S.columns.status,width:80,visible:false,sortable:true},{id:"progress",label:S.columns.progress,width:120,visible:false,sortable:true}],[]),[Ot,q]=Ce.useState(()=>nr(ce));Ce.useEffect(()=>{q(S=>S.map(P=>({...P,label:ce.columns[P.id==="name"?"taskName":P.id]||P.label})));},[ce]);let V=Ce.useMemo(()=>Ot.filter(S=>S.visible).reduce((S,P)=>S+P.width,0)+60,[Ot]),ve=pr||V,D=Ce.useRef(null),_=Ce.useRef(null),de=Ce.useRef(null),he=Ce.useMemo(()=>Il(Y),[Y]),Ae=Ce.useMemo(()=>({theme:he,themeName:Y}),[he,Y]),$e=Ce.useMemo(()=>hc(l),[l]),Nt=Ce.useMemo(()=>{if(!p)return ne;let S=K.calculateCriticalPath(ne),P=W=>W.map(Z=>({...Z,isCriticalPath:S.includes(Z.id),subtasks:Z.subtasks?P(Z.subtasks):void 0}));return P(ne)},[ne,p]),wt=Og(se);gc({undo:j,redo:z,canUndo:Fe,canRedo:ze,enabled:true}),Ce.useImperativeHandle(n,()=>({getTask:S=>K.findTaskById(ne,S),addTask:(S,P)=>{me(W=>{if(!P)return [...W,{...S,level:0}];let Z=ae=>ae.map(ie=>ie.id===P?{...ie,subtasks:[...ie.subtasks||[],{...S,parentId:P,level:(ie.level||0)+1}],isExpanded:true}:ie.subtasks?{...ie,subtasks:Z(ie.subtasks)}:ie);return Z(W)});},updateTask:(S,P)=>{me(W=>{let Z=ae=>ae.map(ie=>ie.id===S?{...ie,...P}:ie.subtasks?{...ie,subtasks:Z(ie.subtasks)}:ie);return Z(W)});},deleteTask:S=>{me(P=>{let W=Z=>Z.filter(ae=>ae.id===S?false:(ae.subtasks&&(ae.subtasks=W(ae.subtasks)),true));return W(P)});},deleteTasks:S=>{me(P=>An(P,S));},duplicateTask:S=>{me(P=>os(P,[S]));},splitTask:(S,P,W=3)=>{me(Z=>K.splitTask(Z,S,P,W));},calculateEndDate:K.calculateEndDate,calculateDuration:K.calculateDuration,validateDependency:(S,P)=>!K.validateDependencies(ne,S,P),getAllTasks:()=>K.flattenTasks(ne),getTasksByStatus:S=>K.flattenTasks(ne).filter(P=>P.status===S),getTasksByParent:S=>S?K.findTaskById(ne,S)?.subtasks||[]:ne.filter(W=>!W.parentId),getCriticalPath:()=>K.flattenTasks(ne).filter(S=>S.isCriticalPath),indentTask:S=>{me(P=>rs(P,[S]));},outdentTask:S=>{me(P=>as(P,[S]));},moveTask:(S,P)=>{me(W=>ns(W,[S],P));},createSubtask:async S=>{let{tasks:P,newTask:W}=ls(ne,S);if(E){let Z=E({...W,parentId:S});if((Z instanceof Promise?await Z:Z)===false)return}me(P),B&&B({...W,parentId:S});},scrollToTask:S=>{let W=K.flattenTasks(ne).findIndex(Z=>Z.id===S);if(W!==-1&&D.current){let Z=W*wt;D.current.scrollTo({top:Z,behavior:"smooth"}),_.current&&_.current.scrollTo({top:Z,behavior:"smooth"});}},highlightTask:(S,P=2e3)=>{},expandTask:S=>{me(P=>{let W=Z=>Z.map(ae=>ae.id===S?{...ae,isExpanded:true}:ae.subtasks?{...ae,subtasks:W(ae.subtasks)}:ae);return W(P)});},collapseTask:S=>{me(P=>{let W=Z=>Z.map(ae=>ae.id===S?{...ae,isExpanded:false}:ae.subtasks?{...ae,subtasks:W(ae.subtasks)}:ae);return W(P)});},expandAll:()=>{me(S=>{let P=W=>W.map(Z=>({...Z,isExpanded:true,subtasks:Z.subtasks?P(Z.subtasks):void 0}));return P(S)});},collapseAll:()=>{me(S=>{let P=W=>W.map(Z=>({...Z,isExpanded:false,subtasks:Z.subtasks?P(Z.subtasks):void 0}));return P(S)});},undo:j,redo:z,canUndo:()=>Fe,canRedo:()=>ze,clearHistory:te,exportToPNG:async()=>{if(!de.current)throw new Error("Gantt container not found");let S=await vc__default.default(de.current,{backgroundColor:he.bgPrimary,scale:2});return new Promise((P,W)=>{S.toBlob(Z=>{Z?P(Z):W(new Error("Failed to create blob from canvas"));},"image/png");})},exportToPDF:async S=>{await K.exportToPDF(ne,S);},exportToExcel:async S=>{await K.exportToExcel(ne,S);},exportToJSON:()=>K.exportToJSON(ne),exportToCSV:()=>K.exportToCSV(ne),importFromJSON:S=>{let P=K.importFromJSON(S);me(P);},getTasks:()=>ne,refresh:()=>{me(S=>[...S]);},clearAll:()=>{me([]);}}),[ne,j,z,Fe,ze,te,he,wt]);let eo=Ce.useCallback(S=>{q(P=>P.map(W=>W.id===S?{...W,visible:!W.visible}:W));},[]),ba=Ce.useCallback((S,P)=>{q(W=>W.map(Z=>{if(Z.id!==S)return Z;let ae=Z.minWidth??100,ie=Z.maxWidth??800,et=Math.max(ae,Math.min(ie,P));return {...Z,width:et}}));},[]),ya=Ce.useCallback(S=>{me(P=>is(P,S)),r.onTaskToggleExpand?.(S);},[r]),Qr=Ce.useCallback((S,P)=>{if(G&&G(S,P)===false)return;let Z=K.findTaskById(ne,S)?.progress,ae=et=>et.map(gt=>gt.id===S?{...gt,...P}:gt.subtasks?{...gt,subtasks:ae(gt.subtasks)}:gt);me(ae(ne));let ie=K.findTaskById(ae(ne),S);ie&&(C?.(ie),O?.(ie),P.progress!==void 0&&Z!==void 0&&P.progress!==Z&&T?.(S,Z,P.progress));},[ne,C,G,O,T]),yd=Ce.useCallback(S=>{S.length!==0&&(me(P=>rs(P,S)),r.onTaskIndent?.(S[0]));},[r]),xd=Ce.useCallback(S=>{S.length!==0&&(me(P=>as(P,S)),r.onTaskOutdent?.(S[0]));},[r]),kd=Ce.useCallback((S,P)=>{S.length!==0&&(me(W=>ns(W,S,P)),r.onTaskMove?.(S[0],P));},[r]),Ys=Ce.useCallback(S=>{r.onMultiTaskDelete?r.onMultiTaskDelete(S):(me(P=>An(P,S)),S.forEach(P=>r.onTaskDelete?.(P)));},[r]),wd=Ce.useCallback(S=>{me(P=>os(P,S)),S.forEach(P=>r.onTaskDuplicate?.(P));},[r]),Cd=Ce.useCallback((S,P)=>{me(W=>{let{tasks:Z,newTask:ae}=Yl(W,S,P);return E&&E(ae)===false?W:(r.onTaskCreate?.(ae.parentId,ae.position||0),B?.(ae),Z)});},[r,E,B]),Td=Ce.useCallback((S,P)=>{me(W=>ss(W,S,P)),r.onTaskRename?.(S,P);},[r]),qs=Ce.useCallback(S=>{me(P=>{let{tasks:W}=ls(P,S);return r.onTaskCreate?.(S,0),W});},[r]),Dd=Ce.useCallback((S,P,W)=>{let Z=S.startDate?Math.round((P.getTime()-S.startDate.getTime())/864e5):0,ae=gt=>gt.map(Ht=>Ht.id===S.id?{...Ht,startDate:P,endDate:W,...S.segments&&{segments:S.segments}}:Ht.subtasks?{...Ht,subtasks:ae(Ht.subtasks)}:Ht),ie=ae(ne);ie=K.autoScheduleDependents(ie,S.id,Z),me(ie);let et={...S,startDate:P,endDate:W};C?.(et);},[ne,C]),Sd=Ce.useCallback((S,P)=>{y?.(S,P),Qe({isOpen:true,x:P.clientX,y:P.clientY,task:S});},[y]),Nd=Ce.useCallback((S,P)=>{let W=K.splitTask(ne,S.id,P);me(W),Qe({isOpen:false,x:0,y:0,task:null});},[ne]),Xs=Ce.useCallback(S=>{k?.(S),N||Bt(S);},[k,N]),Js=Ce.useCallback((S,P,W)=>{let Z=new Map,ae=Vt=>{Vt.forEach(mr=>{mr.dependencies&&Z.set(mr.id,mr.dependencies),mr.subtasks&&ae(mr.subtasks);});};ae(W);let ie=Z.get(P)||[];Z.set(P,[...ie,S]);let et=new Set,gt=new Set,Ht=Vt=>{if(!et.has(Vt)){et.add(Vt),gt.add(Vt);let mr=Z.get(Vt)||[];for(let xa of mr){if(!et.has(xa)&&Ht(xa))return true;if(gt.has(xa))return true}}return gt.delete(Vt),false};return Ht(P)},[]),Zs=Ce.useCallback((S,P)=>{if(Js(S.id,P,ne)){console.warn("Cannot create dependency: would create a circular dependency"),alert(`Cannot create this dependency: it would create a circular dependency chain.
277
277
 
278
278
  Task dependencies must flow in one direction only.`);return}let W=Z=>Z.map(ae=>{if(ae.id===P){let ie=ae.dependencies||[];if(!ie.includes(S.id))return {...ae,dependencies:[...ie,S.id]}}return ae.subtasks?{...ae,subtasks:W(ae.subtasks)}:ae});me(W(ne)),M?.(S.id,P);},[ne,M,Js]),Qs=Ce.useCallback((S,P)=>{let W=Z=>Z.map(ae=>{if(ae.id===S&&ae.dependencies){let ie=ae.dependencies.filter(et=>et!==P);return {...ae,dependencies:ie}}return ae.subtasks?{...ae,subtasks:W(ae.subtasks)}:ae});me(W(ne)),$?.(S,P);},[ne,$]),{startDate:Ed,endDate:Rd}=Ce.useMemo(()=>{let S=ne.filter(ie=>ie.startDate&&ie.endDate);if(S.length===0){let ie=new Date,et=new Date(ie);et.setDate(et.getDate()-30);let gt=new Date(ie);return gt.setDate(gt.getDate()+60),{startDate:et,endDate:gt}}let P=S.flatMap(ie=>[ie.startDate,ie.endDate]).filter(ie=>ie!==void 0),W=new Date(Math.min(...P.map(ie=>ie.getTime()))),Z=new Date(Math.max(...P.map(ie=>ie.getTime()))),ae=I==="day"?7:I==="week"?14:30;return W.setDate(W.getDate()-ae),Z.setDate(Z.getDate()+ae),{startDate:W,endDate:Z}},[ne,I]),Pd=Ce.useCallback(async()=>{if(!de.current)return;let S=await vc__default.default(de.current,{backgroundColor:he.bgPrimary,scale:2}),P=document.createElement("a");P.download="gantt-chart.png",P.href=S.toDataURL("image/png"),P.click();},[he]),Id=Ce.useCallback(async()=>{await K.exportToPDF(ne);},[ne]),Md=Ce.useCallback(async()=>{await K.exportToExcel(ne);},[ne]),Ad=Ce.useCallback(()=>{let S=K.exportToCSV(ne),P=new Blob([S],{type:"text/csv;charset=utf-8;"}),W=document.createElement("a");W.href=URL.createObjectURL(P),W.download="gantt-chart.csv",W.click(),URL.revokeObjectURL(W.href);},[ne]),Ld=Ce.useCallback(()=>{let S=K.exportToJSON(ne),P=new Blob([S],{type:"application/json;charset=utf-8;"}),W=document.createElement("a");W.href=URL.createObjectURL(P),W.download="gantt-chart.json",W.click(),URL.revokeObjectURL(W.href);},[ne]),Fd=Ce.useCallback(()=>{K.exportToMSProject(ne,"Gantt Project","project.xml");},[ne]),Bd=S=>{S.preventDefault(),_t(true);};return Ce.useEffect(()=>{let S=_.current,P=D.current;if(!S||!P)return;let W=P.querySelector(".gantt-taskgrid-content"),Z=()=>{let et=S.scrollTop;mt(et),W&&(W.style.transform=`translateY(-${et}px)`);},ae=et=>{if(ft&&P){let Ht=P.parentElement?.getBoundingClientRect()?.left||0,Vt=et.clientX-Ht,mr=200,xa=Math.min(window.innerWidth-300,800);Vt>=mr&&Vt<=xa&&Lr(Vt);}},ie=()=>{_t(false);};return S.addEventListener("scroll",Z),document.addEventListener("mousemove",ae),document.addEventListener("mouseup",ie),()=>{S.removeEventListener("scroll",Z),document.removeEventListener("mousemove",ae),document.removeEventListener("mouseup",ie);}},[ft]),jsxRuntime.jsx(ua.Provider,{value:ce,children:jsxRuntime.jsx(yo.Provider,{value:Ae,children:jsxRuntime.jsxs("div",{ref:de,className:"flex flex-col h-full w-full",style:{backgroundColor:he.bgPrimary,fontFamily:"Inter, sans-serif",minHeight:0,...r.disableScrollSync&&{scrollBehavior:"auto",overflowAnchor:"none"}},children:[jsxRuntime.jsx(In,{theme:he,timeScale:I,onTimeScaleChange:le,zoom:Ze,onZoomChange:ar,currentTheme:Y,onThemeChange:Fr,rowDensity:se,onRowDensityChange:bt,showThemeSelector:d,showCreateTaskButton:h,createTaskLabel:g,onCreateTask:v,onExportPNG:i?Pd:void 0,onExportPDF:i?Id:void 0,onExportExcel:i?Md:void 0,onExportCSV:i?Ad:void 0,onExportJSON:i?Ld:void 0,onExportMSProject:i?Fd:void 0}),jsxRuntime.jsxs("div",{ref:D,className:"flex-1 flex min-h-0",style:{overflow:"hidden"},children:[jsxRuntime.jsx("div",{className:"gantt-grid-scroll flex-shrink-0",style:{width:ve,overflow:"hidden",borderRight:`1px solid ${ft?he.accent:he.border}`},children:jsxRuntime.jsx(Ln,{tasks:Nt,theme:he,rowHeight:wt,availableUsers:u,templates:$e,onTaskClick:w,onTaskDblClick:Xs,onTaskContextMenu:y,onTaskToggle:ya,scrollTop:we,columns:Ot,onToggleColumn:eo,onColumnResize:ba,onTaskUpdate:Qr,onTaskIndent:yd,onTaskOutdent:xd,onTaskMove:kd,onMultiTaskDelete:Ys,onTaskDuplicate:wd,onTaskCreate:Cd,onTaskRename:Td,onCreateSubtask:qs,onOpenTaskModal:w?S=>w(S):void 0})}),jsxRuntime.jsx("div",{className:"flex-shrink-0 cursor-col-resize",style:{width:6,marginLeft:-3,zIndex:10},onMouseDown:Bd}),jsxRuntime.jsx("div",{ref:_,className:"gantt-timeline-scroll flex-1 overflow-auto",style:{minHeight:0,...r.disableScrollSync&&{scrollBehavior:"auto",overflowAnchor:"none"}},children:jsxRuntime.jsx(_n,{tasks:Nt,theme:he,rowHeight:wt,timeScale:I,startDate:Ed,endDate:Rd,zoom:Ze,templates:$e,onTaskClick:w,onTaskDblClick:Xs,onTaskContextMenu:Sd,onTaskDateChange:Dd,onDependencyCreate:Zs,onDependencyDelete:Qs})})]}),ge.task&&jsxRuntime.jsx(pa,{isOpen:ge.isOpen,x:ge.x,y:ge.y,theme:he,onClose:()=>Qe({isOpen:false,x:0,y:0,task:null}),items:[{id:"edit",label:ce.contextMenu?.editTask||"Edit Task",icon:nt.Pencil,onClick:()=>{ge.task&&(N?N(ge.task):Bt(ge.task));}},{id:"addSubtask",label:ce.contextMenu?.addSubtask||"Add Subtask",icon:nt.Add,onClick:()=>{ge.task&&(R?R(ge.task):qs(ge.task.id));}},{id:"separator-status",label:"",separator:true,onClick:()=>{}},{id:"markIncomplete",label:ce.contextMenu?.markIncomplete||"Mark Incomplete",icon:nt.MarkIncomplete,onClick:()=>{ge.task&&(U?U(ge.task):Qr(ge.task.id,{status:"todo",progress:0}));},disabled:ge.task?.status==="todo"},{id:"setInProgress",label:ce.contextMenu?.setInProgress||"Set In Progress",icon:nt.SetInProgress,onClick:()=>{ge.task&&(H?H(ge.task):Qr(ge.task.id,{status:"in-progress"}));},disabled:ge.task?.status==="in-progress"},{id:"markComplete",label:ce.contextMenu?.markComplete||"Mark Complete",icon:nt.MarkComplete,onClick:()=>{ge.task&&Qr(ge.task.id,{status:"completed",progress:100});},disabled:ge.task?.status==="completed"},{id:"separator-advanced",label:"",separator:true,onClick:()=>{}},{id:"split",label:ce.contextMenu?.splitTask||"Split Task",icon:nt.Split,onClick:()=>{if(!ge.task?.startDate||!ge.task?.endDate){console.warn("Cannot split task without dates");return}let S=ge.task.startDate.getTime(),P=ge.task.endDate.getTime(),W=S+(P-S)/2,Z=new Date(W);Nd(ge.task,Z);},disabled:!ge.task?.startDate||!ge.task?.endDate},{id:"separator-delete",label:"",separator:true,onClick:()=>{}},{id:"delete",label:ce.contextMenu?.deleteTask||"Delete Task",icon:nt.Delete,onClick:()=>{ge.task&&Ys([ge.task.id]);}}]}),Wt&&jsxRuntime.jsx(Wn,{isOpen:true,onClose:()=>Bt(null),task:Wt,onSubmit:S=>{Qr(Wt.id,S),Bt(null);},mode:"edit",theme:Y}),m?.enabled&&jsxRuntime.jsx(Hn,{tasks:ne,theme:he,config:m,onTasksUpdate:me,onTaskUpdate:Qr,onTaskCreate:S=>{me(P=>[...P,S]);},onTaskDelete:S=>{me(P=>An(P,[S]));},onDependencyCreate:(S,P)=>{let W=K.findTaskById(ne,S);W&&Zs(W,P);},onDependencyDelete:Qs})]})})})});var xc=`You are a Gantt chart AI assistant. You help users edit project tasks using natural language commands.
279
279