@libxai/board 0.16.1 → 0.16.2

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 Un({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]=Te.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 O=new Date(Date.UTC(E.getFullYear(),E.getMonth(),E.getDate())),G=O.getUTCDay()||7;O.setUTCDate(O.getUTCDate()+4-G);let z=new Date(Date.UTC(O.getUTCFullYear(),0,1));return Math.ceil(((O.getTime()-z.getTime())/864e5+1)/7)},k=E=>{let O=E.getDay();return O===0||O===6},y=Te.useCallback(E=>{let O=Math.round(E/(v*s)),G=new Date(n);return G.setDate(G.getDate()+O),G},[n,v,s]),C=Te.useCallback((E,O)=>{if(O.startDate&&O.endDate)return;let G=E.currentTarget.ownerSVGElement;if(!G)return;let z=G.createSVGPoint();z.x=E.clientX,z.y=E.clientY;let F=z.matrixTransform(G.getScreenCTM()?.inverse()),Z=y(F.x),j=new Date(Z);j.setDate(j.getDate()+1),l?.(O,Z,j);},[y,l]),T=Te.useMemo(()=>{let E=F=>F.map(Z=>{if(Z.subtasks&&Z.subtasks.length>0){let j=E(Z.subtasks),pe=j.filter(P=>P.startDate&&P.endDate);if(pe.length>0){let P=pe.map(nt=>nt.startDate.getTime()),fe=pe.map(nt=>nt.endDate.getTime()),ne=new Date(Math.min(...P)),ht=new Date(Math.max(...fe));return {...Z,subtasks:j,startDate:Z.startDate||ne,endDate:Z.endDate||ht}}return {...Z,subtasks:j}}return Z}),O=(F,Z=[])=>{for(let j of F)Z.push(j),j.subtasks&&j.subtasks.length>0&&(j.isExpanded===void 0||j.isExpanded)&&O(j.subtasks,Z);return Z},G=E(e);return O(G)},[e]),N=Te.useCallback(E=>{if(!E.startDate||!E.endDate)return {x:0,width:0};let O=E.startDate.getTime(),G=E.endDate.getTime(),z=n.getTime(),F=(O-z)/(1e3*60*60*24),Z=(G-O)/(1e3*60*60*24),j=F*v*s,pe=Math.max(v*s,40),P=Math.max(Z*v*s,pe);return {x:j,width:P}},[n,v,s]),R=Te.useMemo(()=>T.filter(E=>E.startDate&&E.endDate).map(E=>{let{x:O,width:G}=N(E),F=T.findIndex(Z=>Z.id===E.id)*r+12;return {id:E.id,x:O,y:F,width:G,height:32}}),[T,N]),U=Te.useCallback((E,O,G)=>{if(!G||O===0){h([]);return}let z=K.calculateCascadePreview(e,E,O,T,n,v*s,r,48);h(z);},[e,T,n,v,s,r,48]),V=Te.useMemo(()=>{let E=[],O=new Date(n);for(;O<=o;){let F=(O.getTime()-n.getTime())/864e5*v*s;if(a==="day")E.push({date:new Date(O),label:O.toLocaleDateString("en-US",{day:"numeric",month:"short"}),x:F}),O.setDate(O.getDate()+1);else if(a==="week"){let Z=w(O);E.push({date:new Date(O),label:`Week ${Z}`,x:F}),O.setDate(O.getDate()+7);}else E.push({date:new Date(O),label:O.toLocaleDateString("en-US",{month:"short",year:"numeric"}),x:F}),O.setMonth(O.getMonth()+1);}return E},[n,o,a,v,s]),M=Te.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,borderBottom:`1px solid ${t.border}`},children:jsxRuntime.jsxs("svg",{width:Math.max(f,1e3),height:48,style:{display:"block"},children:[jsxRuntime.jsx("rect",{x:0,y:0,width:Math.max(f,1e3),height:48,fill:t.bgGrid}),V.map((E,O)=>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-${O}`)),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}),V.map((E,O)=>{let G=V[O+1]?.x||f,z=k(E.date);return jsxRuntime.jsxs("g",{children:[z&&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})]},O)}),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,O)=>{let G=E.startDate&&E.endDate;return jsxRuntime.jsxs("g",{children:[jsxRuntime.jsx("rect",{x:0,y:O*r,width:f,height:r,fill:O%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:O*r,width:f,height:r,fill:"transparent",style:{cursor:"pointer",pointerEvents:"all"},onClick:z=>C(z,E),onMouseEnter:z=>{z.currentTarget.setAttribute("fill",t.accentLight),z.currentTarget.setAttribute("opacity","0.5");},onMouseLeave:z=>{z.currentTarget.setAttribute("fill","transparent"),z.currentTarget.setAttribute("opacity","1");}},`clickable-${E.id}`),jsxRuntime.jsx("text",{x:M>0?M:100,y:O*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,O)=>!E.dependencies||E.dependencies.length===0||!E.startDate||!E.endDate?null:E.dependencies.map(G=>{let z=T.find(pe=>pe.id===G);if(!z||!z.startDate||!z.endDate)return null;let F=T.findIndex(pe=>pe.id===G),Z=N(z),j=N(E);return jsxRuntime.jsx(Bn,{x1:Z.x+Z.width,y1:F*r+r/2,x2:j.x,y2:O*r+r/2,theme:t,onDelete:()=>m?.(E.id,G)},`dep-${G}-${E.id}`)})),T.map((E,O)=>{if(!E.startDate||!E.endDate)return null;let{x:G,width:z}=N(E),F=O*r+12,Z=E.subtasks&&E.subtasks.length>0&&!E.isMilestone;return E.isMilestone?jsxRuntime.jsx(zn,{task:E,x:G+z/2,y:F+16,theme:t,onClick:d},E.id):Z?jsxRuntime.jsxs("g",{onClick:()=>d?.(E),style:{cursor:"pointer"},children:[jsxRuntime.jsx("rect",{x:G,y:F,width:z,height:32,fill:t.primary,opacity:.25,rx:6}),jsxRuntime.jsx("line",{x1:G,y1:F,x2:G+z,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+z,y1:F,x2:G+z,y2:F+32,stroke:t.primary,strokeWidth:3,opacity:.9,strokeLinecap:"round"}),jsxRuntime.jsx("line",{x1:G,y1:F+32,x2:G+z,y2:F+32,stroke:t.primary,strokeWidth:3,opacity:.9,strokeLinecap:"round"}),z>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(Ln,{task:E,x:G,y:F,width:z,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 nc=[{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 oc({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:nc.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:nc.find(a=>a.value===e)?.name||"Personalizado"})]})}function _n({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=xe[d]||xe.dark,u={backgroundColor:i.bgSecondary,border:`1px solid ${i.borderLight}`,color:i.textPrimary},l={color:i.textSecondary},[p,m]=Te.useState({name:"",progress:0,status:"todo",isMilestone:false,color:"#6366F1",assignees:[],dependencies:[]}),[b,x]=Te.useState({});Te.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(oc,{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 Tg=['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"'],pc=()=>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"})]}),Dg=()=>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"})}),Sg=()=>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"})}),Ng=()=>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"})}),Eg=()=>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 Wn({tasks:e,theme:t,config:r,onTasksUpdate:a,onTaskUpdate:n,onTaskCreate:o,onTaskDelete:s,onDependencyCreate:c,onDependencyDelete:d}){let[i,u]=Te.useState(false),[l,p]=Te.useState(false),[m,b]=Te.useState([]),[x,h]=Te.useState(""),[g,v]=Te.useState(false),[f,w]=Te.useState(true),k=Te.useRef(null),y=Te.useRef(null),C=Te.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:V=Tg,maxHistory:M=50}=r;Te.useEffect(()=>{y.current&&y.current.scrollIntoView({behavior:"smooth"});},[m]),Te.useEffect(()=>{i&&!l&&k.current&&setTimeout(()=>k.current?.focus(),100);},[i,l]);let $=Te.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=Te.useCallback(async F=>{if(!F.trim()||g)return;let Z={id:`user-${Date.now()}`,role:"user",content:F,timestamp:new Date};b(pe=>[...pe.slice(-(M-1)),Z]),h(""),w(false),v(true);let j={id:`loading-${Date.now()}`,role:"assistant",content:"",timestamp:new Date,isLoading:true};b(pe=>[...pe,j]);try{if(U){let pe=await U(F,e);b(P=>{let fe=P.filter(ht=>!ht.isLoading),ne={id:`assistant-${Date.now()}`,role:"assistant",content:pe.message,timestamp:new Date,command:pe};return [...fe,ne]}),$(pe);}else b(pe=>[...pe.filter(fe=>!fe.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(P=>[...P.filter(ne=>!ne.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,$]),O=F=>{F.preventDefault(),E(x);},G=F=>{h(F),k.current?.focus();};if(Te.useEffect(()=>{let F=Z=>{(Z.metaKey||Z.ctrlKey)&&Z.key==="k"&&(Z.preventDefault(),u(j=>!j),i||p(false)),Z.key==="Escape"&&i&&u(false);};return document.addEventListener("keydown",F),()=>document.removeEventListener("keydown",F)},[i]),!T)return null;let z={"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(Ke,{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 ${z[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(pc,{}),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 ${z[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(pc,{}),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(Ng,{})}),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(Sg,{})})]})]}),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:V.slice(0,4).map((F,Z)=>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},Z))})]}),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(Eg,{}):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:O,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(Dg,{})})]}),jsxRuntime.jsx("p",{className:"text-[10px] text-center mt-2",style:{color:t.textTertiary},children:"Press Enter to send \u2022 Esc to close"})]})]})})]})})]})}function mc(e,t=50){let[r,a]=Te.useState({past:[],present:e,future:[]}),n=Te.useRef(false),o=Te.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=Te.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=Te.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=Te.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 fc({undo:e,redo:t,canUndo:r,canRedo:a,enabled:n=true}){Te.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 Mg={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 gc(e){return {...Mg,...e}}var Og=e=>{switch(e){case "compact":return 40;case "comfortable":return 48;case "spacious":return 56;default:return 48}},bc=Te.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:V,onDependencyCreate:M,onDependencyDelete:$,onBeforeTaskAdd:E,onAfterTaskAdd:O,onBeforeTaskUpdate:G,onAfterTaskUpdate:z}=r,Z=Te.useContext(En)?.theme,[j,pe]=Te.useState(Z||o||"dark"),[P,fe]=Te.useState(s),[ne,ht]=Te.useState(c),[nt,Ot]=Te.useState(1),[Ce,yt]=Te.useState(0),[pt,Ht]=Te.useState(false),[rr,Mr]=Te.useState(null),[me,Qe]=Te.useState({isOpen:false,x:0,y:0,task:null}),[Vt,zt]=Te.useState(null);Te.useEffect(()=>{Z&&Z!==j&&pe(Z);},[Z]),Te.useEffect(()=>{o&&o!==j&&pe(o);},[o]);let Ar=Te.useCallback(S=>{pe(S),f?.(S);},[f]),{state:re,setState:B,undo:_,redo:ke,canUndo:Fe,canRedo:Pe,clearHistory:ge}=mc(t,50);Te.useEffect(()=>{console.log("\u{1F504} GanttBoard: tasks prop changed, syncing to local state"),console.log("\u{1F4E5} Incoming tasks:",t.length,t.map(S=>({id:S.id,name:S.name,startDate:S.startDate?.toISOString?.()}))),B(t);},[t,B]),Te.useEffect(()=>{a&&a(re);},[re,a]);let oe=Te.useMemo(()=>Zo(b,x),[b,x]),dr=Te.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}],[]),[ie,be]=Te.useState(()=>dr(oe));Te.useEffect(()=>{be(S=>S.map(I=>({...I,label:oe.columns[I.id==="name"?"taskName":I.id]||I.label})));},[oe]);let Y=Te.useMemo(()=>ie.filter(S=>S.visible).reduce((S,I)=>S+I.width,0)+60,[ie]),we=rr||Y,D=Te.useRef(null),W=Te.useRef(null),le=Te.useRef(null),de=Te.useMemo(()=>Pl(j),[j]),Be=Te.useMemo(()=>({theme:de,themeName:j}),[de,j]),Ge=Te.useMemo(()=>gc(l),[l]),Et=Te.useMemo(()=>{if(!p)return re;let S=K.calculateCriticalPath(re),I=H=>H.map(J=>({...J,isCriticalPath:S.includes(J.id),subtasks:J.subtasks?I(J.subtasks):void 0}));return I(re)},[re,p]),Ct=Og(ne);fc({undo:_,redo:ke,canUndo:Fe,canRedo:Pe,enabled:true}),Te.useImperativeHandle(n,()=>({getTask:S=>K.findTaskById(re,S),addTask:(S,I)=>{B(H=>{if(!I)return [...H,{...S,level:0}];let J=te=>te.map(se=>se.id===I?{...se,subtasks:[...se.subtasks||[],{...S,parentId:I,level:(se.level||0)+1}],isExpanded:true}:se.subtasks?{...se,subtasks:J(se.subtasks)}:se);return J(H)});},updateTask:(S,I)=>{B(H=>{let J=te=>te.map(se=>se.id===S?{...se,...I}:se.subtasks?{...se,subtasks:J(se.subtasks)}:se);return J(H)});},deleteTask:S=>{B(I=>{let H=J=>J.filter(te=>te.id===S?false:(te.subtasks&&(te.subtasks=H(te.subtasks)),true));return H(I)});},deleteTasks:S=>{B(I=>Ga(I,S));},duplicateTask:S=>{B(I=>os(I,[S]));},splitTask:(S,I,H=3)=>{B(J=>K.splitTask(J,S,I,H));},calculateEndDate:K.calculateEndDate,calculateDuration:K.calculateDuration,validateDependency:(S,I)=>!K.validateDependencies(re,S,I),getAllTasks:()=>K.flattenTasks(re),getTasksByStatus:S=>K.flattenTasks(re).filter(I=>I.status===S),getTasksByParent:S=>S?K.findTaskById(re,S)?.subtasks||[]:re.filter(H=>!H.parentId),getCriticalPath:()=>K.flattenTasks(re).filter(S=>S.isCriticalPath),indentTask:S=>{B(I=>rs(I,[S]));},outdentTask:S=>{B(I=>as(I,[S]));},moveTask:(S,I)=>{B(H=>ns(H,[S],I));},createSubtask:async S=>{let{tasks:I,newTask:H}=ls(re,S);if(E){let J=E({...H,parentId:S});if((J instanceof Promise?await J:J)===false)return}B(I),O&&O({...H,parentId:S});},scrollToTask:S=>{let H=K.flattenTasks(re).findIndex(J=>J.id===S);if(H!==-1&&D.current){let J=H*Ct;D.current.scrollTo({top:J,behavior:"smooth"}),W.current&&W.current.scrollTo({top:J,behavior:"smooth"});}},highlightTask:(S,I=2e3)=>{},expandTask:S=>{B(I=>{let H=J=>J.map(te=>te.id===S?{...te,isExpanded:true}:te.subtasks?{...te,subtasks:H(te.subtasks)}:te);return H(I)});},collapseTask:S=>{B(I=>{let H=J=>J.map(te=>te.id===S?{...te,isExpanded:false}:te.subtasks?{...te,subtasks:H(te.subtasks)}:te);return H(I)});},expandAll:()=>{B(S=>{let I=H=>H.map(J=>({...J,isExpanded:true,subtasks:J.subtasks?I(J.subtasks):void 0}));return I(S)});},collapseAll:()=>{B(S=>{let I=H=>H.map(J=>({...J,isExpanded:false,subtasks:J.subtasks?I(J.subtasks):void 0}));return I(S)});},undo:_,redo:ke,canUndo:()=>Fe,canRedo:()=>Pe,clearHistory:ge,exportToPNG:async()=>{if(!le.current)throw new Error("Gantt container not found");let S=await hc__default.default(le.current,{backgroundColor:de.bgPrimary,scale:2});return new Promise((I,H)=>{S.toBlob(J=>{J?I(J):H(new Error("Failed to create blob from canvas"));},"image/png");})},exportToPDF:async S=>{await K.exportToPDF(re,S);},exportToExcel:async S=>{await K.exportToExcel(re,S);},exportToJSON:()=>K.exportToJSON(re),exportToCSV:()=>K.exportToCSV(re),importFromJSON:S=>{let I=K.importFromJSON(S);B(I);},getTasks:()=>re,refresh:()=>{B(S=>[...S]);},clearAll:()=>{B([]);}}),[re,_,ke,Fe,Pe,ge,de,Ct]);let Qn=Te.useCallback(S=>{be(I=>I.map(H=>H.id===S?{...H,visible:!H.visible}:H));},[]),va=Te.useCallback((S,I)=>{be(H=>H.map(J=>{if(J.id!==S)return J;let te=J.minWidth??100,se=J.maxWidth??800,et=Math.max(te,Math.min(se,I));return {...J,width:et}}));},[]),ba=Te.useCallback(S=>{B(I=>is(I,S)),r.onTaskToggleExpand?.(S);},[r]),Qr=Te.useCallback((S,I)=>{if(G&&G(S,I)===false)return;let J=K.findTaskById(re,S)?.progress,te=et=>et.map(ot=>ot.id===S?{...ot,...I}:ot.subtasks?{...ot,subtasks:te(ot.subtasks)}:ot);B(te(re));let se=K.findTaskById(te(re),S);se&&(C?.(se),z?.(se),I.progress!==void 0&&J!==void 0&&I.progress!==J&&T?.(S,J,I.progress));},[re,C,G,z,T]),bd=Te.useCallback(S=>{S.length!==0&&(B(I=>rs(I,S)),r.onTaskIndent?.(S[0]));},[r]),yd=Te.useCallback(S=>{S.length!==0&&(B(I=>as(I,S)),r.onTaskOutdent?.(S[0]));},[r]),xd=Te.useCallback((S,I)=>{S.length!==0&&(B(H=>ns(H,S,I)),r.onTaskMove?.(S[0],I));},[r]),kd=Te.useCallback(S=>{r.onMultiTaskDelete?r.onMultiTaskDelete(S):(B(I=>Ga(I,S)),S.forEach(I=>r.onTaskDelete?.(I)));},[r]),wd=Te.useCallback(S=>{B(I=>os(I,S)),S.forEach(I=>r.onTaskDuplicate?.(I));},[r]),Cd=Te.useCallback((S,I)=>{B(H=>{let{tasks:J,newTask:te}=jl(H,S,I);return E&&E(te)===false?H:(r.onTaskCreate?.(te.parentId,te.position||0),O?.(te),J)});},[r,E,O]),Td=Te.useCallback((S,I)=>{B(H=>ss(H,S,I)),r.onTaskRename?.(S,I);},[r]),Ys=Te.useCallback(S=>{B(I=>{let{tasks:H}=ls(I,S);return r.onTaskCreate?.(S,0),H});},[r]),Dd=Te.useCallback((S,I,H)=>{let J=S.startDate?Math.round((I.getTime()-S.startDate.getTime())/864e5):0,te=ot=>ot.map(ur=>ur.id===S.id?{...ur,startDate:I,endDate:H,...S.segments&&{segments:S.segments}}:ur.subtasks?{...ur,subtasks:te(ur.subtasks)}:ur),se=te(re);se=K.autoScheduleDependents(se,S.id,J),B(se);let et={...S,startDate:I,endDate:H};C?.(et);},[re,C]),Sd=Te.useCallback((S,I)=>{y?.(S,I),Qe({isOpen:true,x:I.clientX,y:I.clientY,task:S});},[y]),Nd=Te.useCallback((S,I)=>{let H=K.splitTask(re,S.id,I);B(H),Qe({isOpen:false,x:0,y:0,task:null});},[re]),qs=Te.useCallback(S=>{k?.(S),zt(S);},[k]),Xs=Te.useCallback((S,I,H)=>{let J=new Map,te=Lr=>{Lr.forEach(Fr=>{Fr.dependencies&&J.set(Fr.id,Fr.dependencies),Fr.subtasks&&te(Fr.subtasks);});};te(H);let se=J.get(I)||[];J.set(I,[...se,S]);let et=new Set,ot=new Set,ur=Lr=>{if(!et.has(Lr)){et.add(Lr),ot.add(Lr);let Fr=J.get(Lr)||[];for(let eo of Fr){if(!et.has(eo)&&ur(eo))return true;if(ot.has(eo))return true}}return ot.delete(Lr),false};return ur(I)},[]),Js=Te.useCallback((S,I)=>{if(Xs(S.id,I,re)){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 Un({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]=Te.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 O=new Date(Date.UTC(E.getFullYear(),E.getMonth(),E.getDate())),G=O.getUTCDay()||7;O.setUTCDate(O.getUTCDate()+4-G);let z=new Date(Date.UTC(O.getUTCFullYear(),0,1));return Math.ceil(((O.getTime()-z.getTime())/864e5+1)/7)},k=E=>{let O=E.getDay();return O===0||O===6},y=Te.useCallback(E=>{let O=Math.round(E/(v*s)),G=new Date(n);return G.setDate(G.getDate()+O),G},[n,v,s]),C=Te.useCallback((E,O)=>{if(O.startDate&&O.endDate)return;let G=E.currentTarget.ownerSVGElement;if(!G)return;let z=G.createSVGPoint();z.x=E.clientX,z.y=E.clientY;let F=z.matrixTransform(G.getScreenCTM()?.inverse()),Z=y(F.x),j=new Date(Z);j.setDate(j.getDate()+1),l?.(O,Z,j);},[y,l]),T=Te.useMemo(()=>{let E=F=>F.map(Z=>{if(Z.subtasks&&Z.subtasks.length>0){let j=E(Z.subtasks),pe=j.filter(P=>P.startDate&&P.endDate);if(pe.length>0){let P=pe.map(nt=>nt.startDate.getTime()),fe=pe.map(nt=>nt.endDate.getTime()),ne=new Date(Math.min(...P)),ht=new Date(Math.max(...fe));return {...Z,subtasks:j,startDate:Z.startDate||ne,endDate:Z.endDate||ht}}return {...Z,subtasks:j}}return Z}),O=(F,Z=[])=>{for(let j of F)Z.push(j),j.subtasks&&j.subtasks.length>0&&(j.isExpanded===void 0||j.isExpanded)&&O(j.subtasks,Z);return Z},G=E(e);return O(G)},[e]),N=Te.useCallback(E=>{if(!E.startDate||!E.endDate)return {x:0,width:0};let O=E.startDate.getTime(),G=E.endDate.getTime(),z=n.getTime(),F=(O-z)/(1e3*60*60*24),Z=(G-O)/(1e3*60*60*24),j=F*v*s,pe=Math.max(v*s,40),P=Math.max(Z*v*s,pe);return {x:j,width:P}},[n,v,s]),R=Te.useMemo(()=>T.filter(E=>E.startDate&&E.endDate).map(E=>{let{x:O,width:G}=N(E),F=T.findIndex(Z=>Z.id===E.id)*r+12;return {id:E.id,x:O,y:F,width:G,height:32}}),[T,N]),U=Te.useCallback((E,O,G)=>{if(!G||O===0){h([]);return}let z=K.calculateCascadePreview(e,E,O,T,n,v*s,r,48);h(z);},[e,T,n,v,s,r,48]),V=Te.useMemo(()=>{let E=[],O=new Date(n);for(;O<=o;){let F=(O.getTime()-n.getTime())/864e5*v*s;if(a==="day")E.push({date:new Date(O),label:O.toLocaleDateString("en-US",{day:"numeric",month:"short"}),x:F}),O.setDate(O.getDate()+1);else if(a==="week"){let Z=w(O);E.push({date:new Date(O),label:`Week ${Z}`,x:F}),O.setDate(O.getDate()+7);}else E.push({date:new Date(O),label:O.toLocaleDateString("en-US",{month:"short",year:"numeric"}),x:F}),O.setMonth(O.getMonth()+1);}return E},[n,o,a,v,s]),M=Te.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,borderBottom:`1px solid ${t.border}`},children:jsxRuntime.jsxs("svg",{width:Math.max(f,1e3),height:48,style:{display:"block"},children:[jsxRuntime.jsx("rect",{x:0,y:0,width:Math.max(f,1e3),height:48,fill:t.bgGrid}),V.map((E,O)=>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-${O}`)),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}),V.map((E,O)=>{let G=V[O+1]?.x||f,z=k(E.date);return jsxRuntime.jsxs("g",{children:[z&&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})]},O)}),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,O)=>{let G=E.startDate&&E.endDate;return jsxRuntime.jsxs("g",{children:[jsxRuntime.jsx("rect",{x:0,y:O*r,width:f,height:r,fill:O%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:O*r,width:f,height:r,fill:"transparent",style:{cursor:"pointer",pointerEvents:"all"},onClick:z=>C(z,E),onMouseEnter:z=>{z.currentTarget.setAttribute("fill",t.accentLight),z.currentTarget.setAttribute("opacity","0.5");},onMouseLeave:z=>{z.currentTarget.setAttribute("fill","transparent"),z.currentTarget.setAttribute("opacity","1");}},`clickable-${E.id}`),jsxRuntime.jsx("text",{x:M>0?M:100,y:O*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,O)=>!E.dependencies||E.dependencies.length===0||!E.startDate||!E.endDate?null:E.dependencies.map(G=>{let z=T.find(pe=>pe.id===G);if(!z||!z.startDate||!z.endDate)return null;let F=T.findIndex(pe=>pe.id===G),Z=N(z),j=N(E);return jsxRuntime.jsx(Bn,{x1:Z.x+Z.width,y1:F*r+r/2,x2:j.x,y2:O*r+r/2,theme:t,onDelete:()=>m?.(E.id,G)},`dep-${G}-${E.id}`)})),T.map((E,O)=>{if(!E.startDate||!E.endDate)return null;let{x:G,width:z}=N(E),F=O*r+12,Z=E.subtasks&&E.subtasks.length>0&&!E.isMilestone;return E.isMilestone?jsxRuntime.jsx(zn,{task:E,x:G+z/2,y:F+16,theme:t,onClick:d},E.id):Z?jsxRuntime.jsxs("g",{onClick:()=>d?.(E),style:{cursor:"pointer"},children:[jsxRuntime.jsx("rect",{x:G,y:F,width:z,height:32,fill:t.primary,opacity:.25,rx:6}),jsxRuntime.jsx("line",{x1:G,y1:F,x2:G+z,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+z,y1:F,x2:G+z,y2:F+32,stroke:t.primary,strokeWidth:3,opacity:.9,strokeLinecap:"round"}),jsxRuntime.jsx("line",{x1:G,y1:F+32,x2:G+z,y2:F+32,stroke:t.primary,strokeWidth:3,opacity:.9,strokeLinecap:"round"}),z>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(Ln,{task:E,x:G,y:F,width:z,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 nc=[{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 oc({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:nc.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:nc.find(a=>a.value===e)?.name||"Personalizado"})]})}function _n({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=xe[d]||xe.dark,u={backgroundColor:i.bgSecondary,border:`1px solid ${i.borderLight}`,color:i.textPrimary},l={color:i.textSecondary},[p,m]=Te.useState({name:"",progress:0,status:"todo",isMilestone:false,color:"#6366F1",assignees:[],dependencies:[]}),[b,x]=Te.useState({});Te.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(oc,{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 Tg=['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"'],pc=()=>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"})]}),Dg=()=>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"})}),Sg=()=>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"})}),Ng=()=>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"})}),Eg=()=>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 Wn({tasks:e,theme:t,config:r,onTasksUpdate:a,onTaskUpdate:n,onTaskCreate:o,onTaskDelete:s,onDependencyCreate:c,onDependencyDelete:d}){let[i,u]=Te.useState(false),[l,p]=Te.useState(false),[m,b]=Te.useState([]),[x,h]=Te.useState(""),[g,v]=Te.useState(false),[f,w]=Te.useState(true),k=Te.useRef(null),y=Te.useRef(null),C=Te.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:V=Tg,maxHistory:M=50}=r;Te.useEffect(()=>{y.current&&y.current.scrollIntoView({behavior:"smooth"});},[m]),Te.useEffect(()=>{i&&!l&&k.current&&setTimeout(()=>k.current?.focus(),100);},[i,l]);let $=Te.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=Te.useCallback(async F=>{if(!F.trim()||g)return;let Z={id:`user-${Date.now()}`,role:"user",content:F,timestamp:new Date};b(pe=>[...pe.slice(-(M-1)),Z]),h(""),w(false),v(true);let j={id:`loading-${Date.now()}`,role:"assistant",content:"",timestamp:new Date,isLoading:true};b(pe=>[...pe,j]);try{if(U){let pe=await U(F,e);b(P=>{let fe=P.filter(ht=>!ht.isLoading),ne={id:`assistant-${Date.now()}`,role:"assistant",content:pe.message,timestamp:new Date,command:pe};return [...fe,ne]}),$(pe);}else b(pe=>[...pe.filter(fe=>!fe.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(P=>[...P.filter(ne=>!ne.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,$]),O=F=>{F.preventDefault(),E(x);},G=F=>{h(F),k.current?.focus();};if(Te.useEffect(()=>{let F=Z=>{(Z.metaKey||Z.ctrlKey)&&Z.key==="k"&&(Z.preventDefault(),u(j=>!j),i||p(false)),Z.key==="Escape"&&i&&u(false);};return document.addEventListener("keydown",F),()=>document.removeEventListener("keydown",F)},[i]),!T)return null;let z={"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(Ke,{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 ${z[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(pc,{}),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 ${z[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(pc,{}),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(Ng,{})}),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(Sg,{})})]})]}),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:V.slice(0,4).map((F,Z)=>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},Z))})]}),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(Eg,{}):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:O,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(Dg,{})})]}),jsxRuntime.jsx("p",{className:"text-[10px] text-center mt-2",style:{color:t.textTertiary},children:"Press Enter to send \u2022 Esc to close"})]})]})})]})})]})}function mc(e,t=50){let[r,a]=Te.useState({past:[],present:e,future:[]}),n=Te.useRef(false),o=Te.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=Te.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=Te.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=Te.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 fc({undo:e,redo:t,canUndo:r,canRedo:a,enabled:n=true}){Te.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 Mg={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 gc(e){return {...Mg,...e}}var Og=e=>{switch(e){case "compact":return 40;case "comfortable":return 48;case "spacious":return 56;default:return 48}},bc=Te.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:V,onDependencyCreate:M,onDependencyDelete:$,onBeforeTaskAdd:E,onAfterTaskAdd:O,onBeforeTaskUpdate:G,onAfterTaskUpdate:z}=r,Z=Te.useContext(En)?.theme,[j,pe]=Te.useState(Z||o||"dark"),[P,fe]=Te.useState(s),[ne,ht]=Te.useState(c),[nt,Ot]=Te.useState(1),[Ce,yt]=Te.useState(0),[pt,Ht]=Te.useState(false),[rr,Mr]=Te.useState(null),[me,Qe]=Te.useState({isOpen:false,x:0,y:0,task:null}),[Vt,zt]=Te.useState(null);Te.useEffect(()=>{Z&&Z!==j&&pe(Z);},[Z]),Te.useEffect(()=>{o&&o!==j&&pe(o);},[o]);let Ar=Te.useCallback(S=>{pe(S),f?.(S);},[f]),{state:re,setState:B,undo:_,redo:ke,canUndo:Fe,canRedo:Pe,clearHistory:ge}=mc(t,50);Te.useEffect(()=>{console.log("\u{1F504} GanttBoard: tasks prop changed, syncing to local state"),console.log("\u{1F4E5} Incoming tasks:",t.length,t.map(S=>({id:S.id,name:S.name,startDate:S.startDate?.toISOString?.()}))),B(t);},[t,B]),Te.useEffect(()=>{a&&a(re);},[re,a]);let oe=Te.useMemo(()=>Zo(b,x),[b,x]),dr=Te.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}],[]),[ie,be]=Te.useState(()=>dr(oe));Te.useEffect(()=>{be(S=>S.map(I=>({...I,label:oe.columns[I.id==="name"?"taskName":I.id]||I.label})));},[oe]);let Y=Te.useMemo(()=>ie.filter(S=>S.visible).reduce((S,I)=>S+I.width,0)+60,[ie]),we=rr||Y,D=Te.useRef(null),W=Te.useRef(null),le=Te.useRef(null),de=Te.useMemo(()=>Pl(j),[j]),Be=Te.useMemo(()=>({theme:de,themeName:j}),[de,j]),Ge=Te.useMemo(()=>gc(l),[l]),Et=Te.useMemo(()=>{if(!p)return re;let S=K.calculateCriticalPath(re),I=H=>H.map(J=>({...J,isCriticalPath:S.includes(J.id),subtasks:J.subtasks?I(J.subtasks):void 0}));return I(re)},[re,p]),Ct=Og(ne);fc({undo:_,redo:ke,canUndo:Fe,canRedo:Pe,enabled:true}),Te.useImperativeHandle(n,()=>({getTask:S=>K.findTaskById(re,S),addTask:(S,I)=>{B(H=>{if(!I)return [...H,{...S,level:0}];let J=te=>te.map(se=>se.id===I?{...se,subtasks:[...se.subtasks||[],{...S,parentId:I,level:(se.level||0)+1}],isExpanded:true}:se.subtasks?{...se,subtasks:J(se.subtasks)}:se);return J(H)});},updateTask:(S,I)=>{B(H=>{let J=te=>te.map(se=>se.id===S?{...se,...I}:se.subtasks?{...se,subtasks:J(se.subtasks)}:se);return J(H)});},deleteTask:S=>{B(I=>{let H=J=>J.filter(te=>te.id===S?false:(te.subtasks&&(te.subtasks=H(te.subtasks)),true));return H(I)});},deleteTasks:S=>{B(I=>Ga(I,S));},duplicateTask:S=>{B(I=>os(I,[S]));},splitTask:(S,I,H=3)=>{B(J=>K.splitTask(J,S,I,H));},calculateEndDate:K.calculateEndDate,calculateDuration:K.calculateDuration,validateDependency:(S,I)=>!K.validateDependencies(re,S,I),getAllTasks:()=>K.flattenTasks(re),getTasksByStatus:S=>K.flattenTasks(re).filter(I=>I.status===S),getTasksByParent:S=>S?K.findTaskById(re,S)?.subtasks||[]:re.filter(H=>!H.parentId),getCriticalPath:()=>K.flattenTasks(re).filter(S=>S.isCriticalPath),indentTask:S=>{B(I=>rs(I,[S]));},outdentTask:S=>{B(I=>as(I,[S]));},moveTask:(S,I)=>{B(H=>ns(H,[S],I));},createSubtask:async S=>{let{tasks:I,newTask:H}=ls(re,S);if(E){let J=E({...H,parentId:S});if((J instanceof Promise?await J:J)===false)return}B(I),O&&O({...H,parentId:S});},scrollToTask:S=>{let H=K.flattenTasks(re).findIndex(J=>J.id===S);if(H!==-1&&D.current){let J=H*Ct;D.current.scrollTo({top:J,behavior:"smooth"}),W.current&&W.current.scrollTo({top:J,behavior:"smooth"});}},highlightTask:(S,I=2e3)=>{},expandTask:S=>{B(I=>{let H=J=>J.map(te=>te.id===S?{...te,isExpanded:true}:te.subtasks?{...te,subtasks:H(te.subtasks)}:te);return H(I)});},collapseTask:S=>{B(I=>{let H=J=>J.map(te=>te.id===S?{...te,isExpanded:false}:te.subtasks?{...te,subtasks:H(te.subtasks)}:te);return H(I)});},expandAll:()=>{B(S=>{let I=H=>H.map(J=>({...J,isExpanded:true,subtasks:J.subtasks?I(J.subtasks):void 0}));return I(S)});},collapseAll:()=>{B(S=>{let I=H=>H.map(J=>({...J,isExpanded:false,subtasks:J.subtasks?I(J.subtasks):void 0}));return I(S)});},undo:_,redo:ke,canUndo:()=>Fe,canRedo:()=>Pe,clearHistory:ge,exportToPNG:async()=>{if(!le.current)throw new Error("Gantt container not found");let S=await hc__default.default(le.current,{backgroundColor:de.bgPrimary,scale:2});return new Promise((I,H)=>{S.toBlob(J=>{J?I(J):H(new Error("Failed to create blob from canvas"));},"image/png");})},exportToPDF:async S=>{await K.exportToPDF(re,S);},exportToExcel:async S=>{await K.exportToExcel(re,S);},exportToJSON:()=>K.exportToJSON(re),exportToCSV:()=>K.exportToCSV(re),importFromJSON:S=>{let I=K.importFromJSON(S);B(I);},getTasks:()=>re,refresh:()=>{B(S=>[...S]);},clearAll:()=>{B([]);}}),[re,_,ke,Fe,Pe,ge,de,Ct]);let Qn=Te.useCallback(S=>{be(I=>I.map(H=>H.id===S?{...H,visible:!H.visible}:H));},[]),va=Te.useCallback((S,I)=>{be(H=>H.map(J=>{if(J.id!==S)return J;let te=J.minWidth??100,se=J.maxWidth??800,et=Math.max(te,Math.min(se,I));return {...J,width:et}}));},[]),ba=Te.useCallback(S=>{B(I=>is(I,S)),r.onTaskToggleExpand?.(S);},[r]),Qr=Te.useCallback((S,I)=>{if(G&&G(S,I)===false)return;let J=K.findTaskById(re,S)?.progress,te=et=>et.map(ot=>ot.id===S?{...ot,...I}:ot.subtasks?{...ot,subtasks:te(ot.subtasks)}:ot);B(te(re));let se=K.findTaskById(te(re),S);se&&(C?.(se),z?.(se),I.progress!==void 0&&J!==void 0&&I.progress!==J&&T?.(S,J,I.progress));},[re,C,G,z,T]),bd=Te.useCallback(S=>{S.length!==0&&(B(I=>rs(I,S)),r.onTaskIndent?.(S[0]));},[r]),yd=Te.useCallback(S=>{S.length!==0&&(B(I=>as(I,S)),r.onTaskOutdent?.(S[0]));},[r]),xd=Te.useCallback((S,I)=>{S.length!==0&&(B(H=>ns(H,S,I)),r.onTaskMove?.(S[0],I));},[r]),kd=Te.useCallback(S=>{r.onMultiTaskDelete?r.onMultiTaskDelete(S):(B(I=>Ga(I,S)),S.forEach(I=>r.onTaskDelete?.(I)));},[r]),wd=Te.useCallback(S=>{B(I=>os(I,S)),S.forEach(I=>r.onTaskDuplicate?.(I));},[r]),Cd=Te.useCallback((S,I)=>{B(H=>{let{tasks:J,newTask:te}=jl(H,S,I);return E&&E(te)===false?H:(r.onTaskCreate?.(te.parentId,te.position||0),O?.(te),J)});},[r,E,O]),Td=Te.useCallback((S,I)=>{B(H=>ss(H,S,I)),r.onTaskRename?.(S,I);},[r]),Ys=Te.useCallback(S=>{B(I=>{let{tasks:H}=ls(I,S);return r.onTaskCreate?.(S,0),H});},[r]),Dd=Te.useCallback((S,I,H)=>{let J=S.startDate?Math.round((I.getTime()-S.startDate.getTime())/864e5):0,te=ot=>ot.map(ur=>ur.id===S.id?{...ur,startDate:I,endDate:H,...S.segments&&{segments:S.segments}}:ur.subtasks?{...ur,subtasks:te(ur.subtasks)}:ur),se=te(re);se=K.autoScheduleDependents(se,S.id,J),B(se);let et={...S,startDate:I,endDate:H};C?.(et);},[re,C]),Sd=Te.useCallback((S,I)=>{y?.(S,I),Qe({isOpen:true,x:I.clientX,y:I.clientY,task:S});},[y]),Nd=Te.useCallback((S,I)=>{let H=K.splitTask(re,S.id,I);B(H),Qe({isOpen:false,x:0,y:0,task:null});},[re]),qs=Te.useCallback(S=>{k?.(S),N||zt(S);},[k,N]),Xs=Te.useCallback((S,I,H)=>{let J=new Map,te=Lr=>{Lr.forEach(Fr=>{Fr.dependencies&&J.set(Fr.id,Fr.dependencies),Fr.subtasks&&te(Fr.subtasks);});};te(H);let se=J.get(I)||[];J.set(I,[...se,S]);let et=new Set,ot=new Set,ur=Lr=>{if(!et.has(Lr)){et.add(Lr),ot.add(Lr);let Fr=J.get(Lr)||[];for(let eo of Fr){if(!et.has(eo)&&ur(eo))return true;if(ot.has(eo))return true}}return ot.delete(Lr),false};return ur(I)},[]),Js=Te.useCallback((S,I)=>{if(Xs(S.id,I,re)){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 H=J=>J.map(te=>{if(te.id===I){let se=te.dependencies||[];if(!se.includes(S.id))return {...te,dependencies:[...se,S.id]}}return te.subtasks?{...te,subtasks:H(te.subtasks)}:te});B(H(re)),M?.(S.id,I);},[re,M,Xs]),Zs=Te.useCallback((S,I)=>{let H=J=>J.map(te=>{if(te.id===S&&te.dependencies){let se=te.dependencies.filter(et=>et!==I);return {...te,dependencies:se}}return te.subtasks?{...te,subtasks:H(te.subtasks)}:te});B(H(re)),$?.(S,I);},[re,$]),{startDate:Ed,endDate:Rd}=Te.useMemo(()=>{let S=re.filter(se=>se.startDate&&se.endDate);if(S.length===0){let se=new Date,et=new Date(se);et.setDate(et.getDate()-30);let ot=new Date(se);return ot.setDate(ot.getDate()+60),{startDate:et,endDate:ot}}let I=S.flatMap(se=>[se.startDate,se.endDate]).filter(se=>se!==void 0),H=new Date(Math.min(...I.map(se=>se.getTime()))),J=new Date(Math.max(...I.map(se=>se.getTime()))),te=P==="day"?7:P==="week"?14:30;return H.setDate(H.getDate()-te),J.setDate(J.getDate()+te),{startDate:H,endDate:J}},[re,P]),Pd=Te.useCallback(async()=>{if(!le.current)return;let S=await hc__default.default(le.current,{backgroundColor:de.bgPrimary,scale:2}),I=document.createElement("a");I.download="gantt-chart.png",I.href=S.toDataURL("image/png"),I.click();},[de]),Id=Te.useCallback(async()=>{await K.exportToPDF(re);},[re]),Md=Te.useCallback(async()=>{await K.exportToExcel(re);},[re]),Ad=Te.useCallback(()=>{let S=K.exportToCSV(re),I=new Blob([S],{type:"text/csv;charset=utf-8;"}),H=document.createElement("a");H.href=URL.createObjectURL(I),H.download="gantt-chart.csv",H.click(),URL.revokeObjectURL(H.href);},[re]),Ld=Te.useCallback(()=>{let S=K.exportToJSON(re),I=new Blob([S],{type:"application/json;charset=utf-8;"}),H=document.createElement("a");H.href=URL.createObjectURL(I),H.download="gantt-chart.json",H.click(),URL.revokeObjectURL(H.href);},[re]),Fd=Te.useCallback(()=>{K.exportToMSProject(re,"Gantt Project","project.xml");},[re]),Bd=S=>{S.preventDefault(),Ht(true);};return Te.useEffect(()=>{let S=W.current,I=D.current;if(!S||!I)return;let H=I.querySelector(".gantt-taskgrid-content"),J=()=>{let et=S.scrollTop;yt(et),H&&(H.style.transform=`translateY(-${et}px)`);},te=et=>{if(pt){let ot=et.clientX;ot>300&&ot<window.innerWidth-400&&Mr(ot);}},se=()=>{Ht(false);};return S.addEventListener("scroll",J),document.addEventListener("mousemove",te),document.addEventListener("mouseup",se),()=>{S.removeEventListener("scroll",J),document.removeEventListener("mousemove",te),document.removeEventListener("mouseup",se);}},[pt]),jsxRuntime.jsx(Pn.Provider,{value:oe,children:jsxRuntime.jsx(yo.Provider,{value:Be,children:jsxRuntime.jsxs("div",{ref:le,className:"flex flex-col h-full w-full",style:{backgroundColor:de.bgPrimary,fontFamily:"Inter, sans-serif",minHeight:0,...r.disableScrollSync&&{scrollBehavior:"auto",overflowAnchor:"none"}},children:[jsxRuntime.jsx(In,{theme:de,timeScale:P,onTimeScaleChange:fe,zoom:nt,onZoomChange:Ot,currentTheme:j,onThemeChange:Ar,rowDensity:ne,onRowDensityChange:ht,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:we,overflow:"hidden"},children:jsxRuntime.jsx(An,{tasks:Et,theme:de,rowHeight:Ct,availableUsers:u,templates:Ge,onTaskClick:w,onTaskDblClick:qs,onTaskContextMenu:y,onTaskToggle:ba,scrollTop:Ce,columns:ie,onToggleColumn:Qn,onColumnResize:va,onTaskUpdate:Qr,onTaskIndent:bd,onTaskOutdent:yd,onTaskMove:xd,onMultiTaskDelete:kd,onTaskDuplicate:wd,onTaskCreate:Cd,onTaskRename:Td,onCreateSubtask:Ys,onOpenTaskModal:w?S=>w(S):void 0})}),jsxRuntime.jsx("div",{className:"relative flex-shrink-0 cursor-col-resize group",style:{width:8,backgroundColor:pt?de.accent:de.border,transition:"background-color 0.2s"},onMouseDown:Bd,children:jsxRuntime.jsx(framerMotion.motion.div,{className:"absolute inset-y-0 left-1/2 -translate-x-1/2",style:{width:2,backgroundColor:de.accent},initial:{opacity:0},animate:{opacity:pt?1:0},whileHover:{opacity:1}})}),jsxRuntime.jsx("div",{ref:W,className:"gantt-timeline-scroll flex-1 overflow-auto",style:{minHeight:0,...r.disableScrollSync&&{scrollBehavior:"auto",overflowAnchor:"none"}},children:jsxRuntime.jsx(Un,{tasks:Et,theme:de,rowHeight:Ct,timeScale:P,startDate:Ed,endDate:Rd,zoom:nt,templates:Ge,onTaskClick:w,onTaskDblClick:qs,onTaskContextMenu:Sd,onTaskDateChange:Dd,onDependencyCreate:Js,onDependencyDelete:Zs})})]}),me.task&&jsxRuntime.jsx(ua,{isOpen:me.isOpen,x:me.x,y:me.y,theme:de,onClose:()=>Qe({isOpen:false,x:0,y:0,task:null}),items:[{id:"edit",label:oe.contextMenu?.editTask||"Edit Task",icon:ct.Pencil,onClick:()=>{me.task&&(N?N(me.task):zt(me.task));}},{id:"addSubtask",label:oe.contextMenu?.addSubtask||"Add Subtask",icon:ct.Add,onClick:()=>{me.task&&(R?R(me.task):Ys(me.task.id));}},{id:"separator-status",label:"",separator:true,onClick:()=>{}},{id:"markIncomplete",label:oe.contextMenu?.markIncomplete||"Mark Incomplete",icon:ct.MarkIncomplete,onClick:()=>{me.task&&(U?U(me.task):Qr(me.task.id,{status:"todo",progress:0}));},disabled:me.task?.status==="todo"},{id:"setInProgress",label:oe.contextMenu?.setInProgress||"Set In Progress",icon:ct.SetInProgress,onClick:()=>{me.task&&(V?V(me.task):Qr(me.task.id,{status:"in-progress"}));},disabled:me.task?.status==="in-progress"},{id:"markComplete",label:oe.contextMenu?.markComplete||"Mark Complete",icon:ct.MarkComplete,onClick:()=>{me.task&&Qr(me.task.id,{status:"completed",progress:100});},disabled:me.task?.status==="completed"},{id:"separator-advanced",label:"",separator:true,onClick:()=>{}},{id:"split",label:oe.contextMenu?.splitTask||"Split Task",icon:ct.Split,onClick:()=>{if(!me.task?.startDate||!me.task?.endDate){console.warn("Cannot split task without dates");return}let S=me.task.startDate.getTime(),I=me.task.endDate.getTime(),H=S+(I-S)/2,J=new Date(H);Nd(me.task,J);},disabled:!me.task?.startDate||!me.task?.endDate},{id:"separator-delete",label:"",separator:true,onClick:()=>{}},{id:"delete",label:oe.contextMenu?.deleteTask||"Delete Task",icon:ct.Delete,onClick:()=>{me.task&&(r.onTaskDelete?r.onTaskDelete(me.task.id):B(S=>Ga(S,[me.task.id])));}}]}),Vt&&jsxRuntime.jsx(_n,{isOpen:true,onClose:()=>zt(null),task:Vt,onSubmit:S=>{Qr(Vt.id,S),zt(null);},mode:"edit",theme:j}),m?.enabled&&jsxRuntime.jsx(Wn,{tasks:re,theme:de,config:m,onTasksUpdate:B,onTaskUpdate:Qr,onTaskCreate:S=>{B(I=>[...I,S]);},onTaskDelete:S=>{B(I=>Ga(I,[S]));},onDependencyCreate:(S,I)=>{let H=K.findTaskById(re,S);H&&Js(H,I);},onDependencyDelete:Zs})]})})})});var yc=`You are a Gantt chart AI assistant. You help users edit project tasks using natural language commands.
279
279