@jaeungkim/gantt-chart 1.3.0 → 1.5.0

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.
Files changed (66) hide show
  1. package/README.md +25 -16
  2. package/dist/gantt-chart.css +1 -1
  3. package/dist/index.cjs +1 -1
  4. package/dist/index.d.cts +428 -12
  5. package/dist/index.d.ts +428 -12
  6. package/dist/index.js +2499 -2682
  7. package/package.json +12 -10
  8. package/dist/Gantt.d.ts +0 -5
  9. package/dist/bars/components/GanttBar.d.ts +0 -20
  10. package/dist/bars/components/GanttBarsLayer.d.ts +0 -24
  11. package/dist/bars/components/GanttDragGuides.d.ts +0 -1
  12. package/dist/bars/hooks/useGanttBarDrag.d.ts +0 -15
  13. package/dist/bars/hooks/useGanttDrawCreate.d.ts +0 -25
  14. package/dist/bars/hooks/useGanttProgressDrag.d.ts +0 -11
  15. package/dist/core/calendar.d.ts +0 -27
  16. package/dist/core/dates.d.ts +0 -16
  17. package/dist/core/reorder.d.ts +0 -55
  18. package/dist/core/tree.d.ts +0 -34
  19. package/dist/core/types.d.ts +0 -43
  20. package/dist/dependencies/components/GanttDependencyArrows.d.ts +0 -13
  21. package/dist/dependencies/hooks/useGanttLinkDrag.d.ts +0 -20
  22. package/dist/dependencies/utils/arrowPath.d.ts +0 -20
  23. package/dist/dependencies/utils/link.d.ts +0 -16
  24. package/dist/detail/components/GanttDetailPanel.d.ts +0 -21
  25. package/dist/detail/hooks/useGanttDetail.d.ts +0 -42
  26. package/dist/detail/utils/edit.d.ts +0 -21
  27. package/dist/interaction/hooks/useGanttInteraction.d.ts +0 -2
  28. package/dist/interaction/hooks/useGanttKeyboardNav.d.ts +0 -33
  29. package/dist/interaction/hooks/useGanttSelection.d.ts +0 -12
  30. package/dist/interaction/utils/a11y.d.ts +0 -84
  31. package/dist/props.d.ts +0 -121
  32. package/dist/rows/components/GanttRowsLayer.d.ts +0 -13
  33. package/dist/rows/hooks/useGanttCollapse.d.ts +0 -18
  34. package/dist/rows/hooks/useGanttRowModel.d.ts +0 -19
  35. package/dist/rows/utils/rows.d.ts +0 -21
  36. package/dist/shared/constants.d.ts +0 -24
  37. package/dist/shared/context.d.ts +0 -4
  38. package/dist/shared/hooks/useLatestRef.d.ts +0 -2
  39. package/dist/shared/hooks/useResolvedTheme.d.ts +0 -8
  40. package/dist/shared/store.d.ts +0 -80
  41. package/dist/shared/task.d.ts +0 -55
  42. package/dist/shared/types.d.ts +0 -117
  43. package/dist/shared/utils/holidays.d.ts +0 -12
  44. package/dist/shared/utils/i18n.d.ts +0 -5
  45. package/dist/shared/utils/pointerGesture.d.ts +0 -11
  46. package/dist/shared/virtual/axis.d.ts +0 -13
  47. package/dist/shared/virtual/useVirtualWindow.d.ts +0 -16
  48. package/dist/shared/virtual/window.d.ts +0 -31
  49. package/dist/task-list/components/GanttGridSplitter.d.ts +0 -6
  50. package/dist/task-list/components/GanttTaskAddRow.d.ts +0 -7
  51. package/dist/task-list/components/GanttTaskGrid.d.ts +0 -24
  52. package/dist/task-list/hooks/useGanttRowDrag.d.ts +0 -17
  53. package/dist/task-list/hooks/useGanttTaskListPane.d.ts +0 -11
  54. package/dist/task-list/hooks/useGanttTaskMove.d.ts +0 -16
  55. package/dist/timeline/components/GanttChartHeader.d.ts +0 -10
  56. package/dist/timeline/components/GanttHolidayLabels.d.ts +0 -6
  57. package/dist/timeline/components/GanttNonWorkingLayer.d.ts +0 -6
  58. package/dist/timeline/components/GanttTodayLine.d.ts +0 -6
  59. package/dist/timeline/hooks/useGanttScrollApi.d.ts +0 -62
  60. package/dist/timeline/hooks/useGanttViewport.d.ts +0 -47
  61. package/dist/timeline/hooks/useGanttVirtualization.d.ts +0 -28
  62. package/dist/timeline/utils/geometry.d.ts +0 -49
  63. package/dist/timeline/utils/header.d.ts +0 -8
  64. package/dist/timeline/utils/transform.d.ts +0 -9
  65. package/dist/timeline/utils/viewport.d.ts +0 -31
  66. package/dist/useGanttSelectors.d.ts +0 -11
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("react/jsx-runtime"),p=require("react"),Ne=t=>{let e;const r=new Set,s=(u,l)=>{const f=typeof u=="function"?u(e):u;if(!Object.is(f,e)){const h=e;e=l??(typeof f!="object"||f===null)?f:Object.assign({},e,f),r.forEach(w=>w(e,h))}},a=()=>e,i={setState:s,getState:a,getInitialState:()=>c,subscribe:u=>(r.add(u),()=>r.delete(u))},c=e=t(s,a,i);return i},Xn=(t=>t?Ne(t):Ne),Bn=t=>t;function zn(t,e=Bn){const r=p.useSyncExternalStore(t.subscribe,p.useCallback(()=>e(t.getState()),[t,e]),p.useCallback(()=>e(t.getInitialState()),[t,e]));return p.useDebugValue(r),r}const ln=p.createContext(null);function $t(){const t=p.useContext(ln);if(!t)throw new Error("Gantt store is missing. Render this component inside <ReactGanttChart>.");return t}function K(t){return zn($t(),t)}function qn(t){const e=[];for(const r of t){const s=e[e.length-1];s&&s.label===r.label?s.widthPx+=r.widthPx:e.push({...r})}return e}function un(t){const e=[0];let r=0;for(const s of t)r+=s.widthPx,e.push(r);return e}function Qt(t,e){if(t.length<2)return null;let r=0,s=t.length-2;for(;r<s;){const a=Math.ceil((r+s)/2);t[a]<=e?r=a:s=a-1}return{index:r,left:t[r],width:t[r+1]-t[r]}}function dn(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Kt={exports:{}},Kn=Kt.exports,je;function Vn(){return je||(je=1,(function(t,e){(function(r,s){t.exports=s()})(Kn,(function(){var r=1e3,s=6e4,a=36e5,n="millisecond",o="second",i="minute",c="hour",u="day",l="week",f="month",h="quarter",w="year",g="date",d="Invalid Date",m=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,v=/\[([^\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,S={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(I){var E=["th","st","nd","rd"],k=I%100;return"["+I+(E[(k-20)%10]||E[k]||E[0])+"]"}},D=function(I,E,k){var y=String(I);return!y||y.length>=E?I:""+Array(E+1-y.length).join(k)+I},R={s:D,z:function(I){var E=-I.utcOffset(),k=Math.abs(E),y=Math.floor(k/60),x=k%60;return(E<=0?"+":"-")+D(y,2,"0")+":"+D(x,2,"0")},m:function I(E,k){if(E.date()<k.date())return-I(k,E);var y=12*(k.year()-E.year())+(k.month()-E.month()),x=E.clone().add(y,f),T=k-x<0,A=E.clone().add(y+(T?-1:1),f);return+(-(y+(k-x)/(T?x-A:A-x))||0)},a:function(I){return I<0?Math.ceil(I)||0:Math.floor(I)},p:function(I){return{M:f,y:w,w:l,d:u,D:g,h:c,m:i,s:o,ms:n,Q:h}[I]||String(I||"").toLowerCase().replace(/s$/,"")},u:function(I){return I===void 0}},N="en",O={};O[N]=S;var _="$isDayjsObject",L=function(I){return I instanceof F||!(!I||!I[_])},M=function I(E,k,y){var x;if(!E)return N;if(typeof E=="string"){var T=E.toLowerCase();O[T]&&(x=T),k&&(O[T]=k,x=T);var A=E.split("-");if(!x&&A.length>1)return I(A[0])}else{var C=E.name;O[C]=E,x=C}return!y&&x&&(N=x),x||!y&&N},$=function(I,E){if(L(I))return I.clone();var k=typeof E=="object"?E:{};return k.date=I,k.args=arguments,new F(k)},j=R;j.l=M,j.i=L,j.w=function(I,E){return $(I,{locale:E.$L,utc:E.$u,x:E.$x,$offset:E.$offset})};var F=(function(){function I(k){this.$L=M(k.locale,null,!0),this.parse(k),this.$x=this.$x||k.x||{},this[_]=!0}var E=I.prototype;return E.parse=function(k){this.$d=(function(y){var x=y.date,T=y.utc;if(x===null)return new Date(NaN);if(j.u(x))return new Date;if(x instanceof Date)return new Date(x);if(typeof x=="string"&&!/Z$/i.test(x)){var A=x.match(m);if(A){var C=A[2]-1||0,X=(A[7]||"0").substring(0,3);return T?new Date(Date.UTC(A[1],C,A[3]||1,A[4]||0,A[5]||0,A[6]||0,X)):new Date(A[1],C,A[3]||1,A[4]||0,A[5]||0,A[6]||0,X)}}return new Date(x)})(k),this.init()},E.init=function(){var k=this.$d;this.$y=k.getFullYear(),this.$M=k.getMonth(),this.$D=k.getDate(),this.$W=k.getDay(),this.$H=k.getHours(),this.$m=k.getMinutes(),this.$s=k.getSeconds(),this.$ms=k.getMilliseconds()},E.$utils=function(){return j},E.isValid=function(){return this.$d.toString()!==d},E.isSame=function(k,y){var x=$(k);return this.startOf(y)<=x&&x<=this.endOf(y)},E.isAfter=function(k,y){return $(k)<this.startOf(y)},E.isBefore=function(k,y){return this.endOf(y)<$(k)},E.$g=function(k,y,x){return j.u(k)?this[y]:this.set(x,k)},E.unix=function(){return Math.floor(this.valueOf()/1e3)},E.valueOf=function(){return this.$d.getTime()},E.startOf=function(k,y){var x=this,T=!!j.u(y)||y,A=j.p(k),C=function(B,W){var rt=j.w(x.$u?Date.UTC(x.$y,W,B):new Date(x.$y,W,B),x);return T?rt:rt.endOf(u)},X=function(B,W){return j.w(x.toDate()[B].apply(x.toDate("s"),(T?[0,0,0,0]:[23,59,59,999]).slice(W)),x)},z=this.$W,J=this.$M,tt=this.$D,ht="set"+(this.$u?"UTC":"");switch(A){case w:return T?C(1,0):C(31,11);case f:return T?C(1,J):C(0,J+1);case l:var et=this.$locale().weekStart||0,P=(z<et?z+7:z)-et;return C(T?tt-P:tt+(6-P),J);case u:case g:return X(ht+"Hours",0);case c:return X(ht+"Minutes",1);case i:return X(ht+"Seconds",2);case o:return X(ht+"Milliseconds",3);default:return this.clone()}},E.endOf=function(k){return this.startOf(k,!1)},E.$set=function(k,y){var x,T=j.p(k),A="set"+(this.$u?"UTC":""),C=(x={},x[u]=A+"Date",x[g]=A+"Date",x[f]=A+"Month",x[w]=A+"FullYear",x[c]=A+"Hours",x[i]=A+"Minutes",x[o]=A+"Seconds",x[n]=A+"Milliseconds",x)[T],X=T===u?this.$D+(y-this.$W):y;if(T===f||T===w){var z=this.clone().set(g,1);z.$d[C](X),z.init(),this.$d=z.set(g,Math.min(this.$D,z.daysInMonth())).$d}else C&&this.$d[C](X);return this.init(),this},E.set=function(k,y){return this.clone().$set(k,y)},E.get=function(k){return this[j.p(k)]()},E.add=function(k,y){var x,T=this;k=Number(k);var A=j.p(y),C=function(J){var tt=$(T);return j.w(tt.date(tt.date()+Math.round(J*k)),T)};if(A===f)return this.set(f,this.$M+k);if(A===w)return this.set(w,this.$y+k);if(A===u)return C(1);if(A===l)return C(7);var X=(x={},x[i]=s,x[c]=a,x[o]=r,x)[A]||1,z=this.$d.getTime()+k*X;return j.w(z,this)},E.subtract=function(k,y){return this.add(-1*k,y)},E.format=function(k){var y=this,x=this.$locale();if(!this.isValid())return x.invalidDate||d;var T=k||"YYYY-MM-DDTHH:mm:ssZ",A=j.z(this),C=this.$H,X=this.$m,z=this.$M,J=x.weekdays,tt=x.months,ht=x.meridiem,et=function(W,rt,nt,at){return W&&(W[rt]||W(y,T))||nt[rt].slice(0,at)},P=function(W){return j.s(C%12||12,W,"0")},B=ht||function(W,rt,nt){var at=W<12?"AM":"PM";return nt?at.toLowerCase():at};return T.replace(v,(function(W,rt){return rt||(function(nt){switch(nt){case"YY":return String(y.$y).slice(-2);case"YYYY":return j.s(y.$y,4,"0");case"M":return z+1;case"MM":return j.s(z+1,2,"0");case"MMM":return et(x.monthsShort,z,tt,3);case"MMMM":return et(tt,z);case"D":return y.$D;case"DD":return j.s(y.$D,2,"0");case"d":return String(y.$W);case"dd":return et(x.weekdaysMin,y.$W,J,2);case"ddd":return et(x.weekdaysShort,y.$W,J,3);case"dddd":return J[y.$W];case"H":return String(C);case"HH":return j.s(C,2,"0");case"h":return P(1);case"hh":return P(2);case"a":return B(C,X,!0);case"A":return B(C,X,!1);case"m":return String(X);case"mm":return j.s(X,2,"0");case"s":return String(y.$s);case"ss":return j.s(y.$s,2,"0");case"SSS":return j.s(y.$ms,3,"0");case"Z":return A}return null})(W)||A.replace(":","")}))},E.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},E.diff=function(k,y,x){var T,A=this,C=j.p(y),X=$(k),z=(X.utcOffset()-this.utcOffset())*s,J=this-X,tt=function(){return j.m(A,X)};switch(C){case w:T=tt()/12;break;case f:T=tt();break;case h:T=tt()/3;break;case l:T=(J-z)/6048e5;break;case u:T=(J-z)/864e5;break;case c:T=J/a;break;case i:T=J/s;break;case o:T=J/r;break;default:T=J}return x?T:j.a(T)},E.daysInMonth=function(){return this.endOf(f).$D},E.$locale=function(){return O[this.$L]},E.locale=function(k,y){if(!k)return this.$L;var x=this.clone(),T=M(k,y,!0);return T&&(x.$L=T),x},E.clone=function(){return j.w(this.$d,this)},E.toDate=function(){return new Date(this.valueOf())},E.toJSON=function(){return this.isValid()?this.toISOString():null},E.toISOString=function(){return this.$d.toISOString()},E.toString=function(){return this.$d.toUTCString()},I})(),U=F.prototype;return $.prototype=U,[["$ms",n],["$s",o],["$m",i],["$H",c],["$W",u],["$M",f],["$y",w],["$D",g]].forEach((function(I){U[I[1]]=function(E){return this.$g(E,I[0],I[1])}})),$.extend=function(I,E){return I.$i||(I(E,F,$),I.$i=!0),$},$.locale=M,$.isDayjs=L,$.unix=function(I){return $(1e3*I)},$.en=O[N],$.Ls=O,$.p={},$}))})(Kt)),Kt.exports}var Zn=Vn();const te=dn(Zn);var Vt={exports:{}},Jn=Vt.exports,_e;function Qn(){return _e||(_e=1,(function(t,e){(function(r,s){t.exports=s()})(Jn,(function(){var r="minute",s=/[+-]\d\d(?::?\d\d)?/g,a=/([+-]|\d\d)/g;return function(n,o,i){var c=o.prototype;i.utc=function(d){var m={date:d,utc:!0,args:arguments};return new o(m)},c.utc=function(d){var m=i(this.toDate(),{locale:this.$L,utc:!0});return d?m.add(this.utcOffset(),r):m},c.local=function(){return i(this.toDate(),{locale:this.$L,utc:!1})};var u=c.parse;c.parse=function(d){d.utc&&(this.$u=!0),this.$utils().u(d.$offset)||(this.$offset=d.$offset),u.call(this,d)};var l=c.init;c.init=function(){if(this.$u){var d=this.$d;this.$y=d.getUTCFullYear(),this.$M=d.getUTCMonth(),this.$D=d.getUTCDate(),this.$W=d.getUTCDay(),this.$H=d.getUTCHours(),this.$m=d.getUTCMinutes(),this.$s=d.getUTCSeconds(),this.$ms=d.getUTCMilliseconds()}else l.call(this)};var f=c.utcOffset;c.utcOffset=function(d,m){var v=this.$utils().u;if(v(d))return this.$u?0:v(this.$offset)?f.call(this):this.$offset;if(typeof d=="string"&&(d=(function(N){N===void 0&&(N="");var O=N.match(s);if(!O)return null;var _=(""+O[0]).match(a)||["-",0,0],L=_[0],M=60*+_[1]+ +_[2];return M===0?0:L==="+"?M:-M})(d),d===null))return this;var S=Math.abs(d)<=16?60*d:d;if(S===0)return this.utc(m);var D=this.clone();if(m)return D.$offset=S,D.$u=!1,D;var R=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(D=this.local().add(S+R,r)).$offset=S,D.$x.$localOffset=R,D};var h=c.format;c.format=function(d){var m=d||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return h.call(this,m)},c.valueOf=function(){var d=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*d},c.isUTC=function(){return!!this.$u},c.toISOString=function(){return this.toDate().toISOString()},c.toString=function(){return this.toDate().toUTCString()};var w=c.toDate;c.toDate=function(d){return d==="s"&&this.$offset?i(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():w.call(this)};var g=c.diff;c.diff=function(d,m,v){if(d&&this.$u===d.$u)return g.call(this,d,m,v);var S=this.local(),D=i(d).local();return g.call(S,D,m,v)}}}))})(Vt)),Vt.exports}var tr=Qn();const er=dn(tr);te.extend(er);const H=te.utc;function fn(t){return Math.floor(t.month()/3)+1}function nr(t){return t.startOf("month").month(Math.floor(t.month()/3)*3)}function rr(t,e=0){const r=(t.day()-e+7)%7;return t.startOf("day").subtract(r,"day")}const bt=38,fe=28,sr=18,or=73,Ye=120,Ce=800,He=16,ar=220,ir=5,cr=56,jt=8,Fe=jt+5,hn=44,we=jt*3,lr=hn*3,ur=we,dr=24,Ue=4,fr=450,hr={day:"MMM D, YYYY HH:mm [UTC]",week:"MMM D, YYYY",month:"MMM D, YYYY",quarter:"MMM YYYY",year:"MMM YYYY"},mr={day:"HH:mm [UTC]",week:"MMM D",month:"MMM D",quarter:"MMM YYYY",year:"MMM YYYY"},pr=44,it={day:{labelUnit:"day",tickUnit:"hour",unitPerTick:6,tickAlign:"day",dragStepUnit:"hour",dragStepAmount:1,basePxPerDragStep:12,formatTickLabel:t=>t.format("HH"),formatHeaderLabel:t=>t.format("MMM D, YYYY")},week:{labelUnit:"month",tickUnit:"day",unitPerTick:1,dragStepUnit:"hour",dragStepAmount:6,basePxPerDragStep:18,formatTickLabel:t=>t.format("D"),formatHeaderLabel:t=>t.format("MMM YYYY")},month:{labelUnit:"month",tickUnit:"day",unitPerTick:7,tickAlign:"week",dragStepUnit:"day",dragStepAmount:1,basePxPerDragStep:18,formatTickLabel:t=>t.format("MMM D"),formatHeaderLabel:t=>t.format("MMM YYYY")},quarter:{labelUnit:"quarter",tickUnit:"month",unitPerTick:1,dragStepUnit:"day",dragStepAmount:7,basePxPerDragStep:28,formatTickLabel:t=>t.format("MMM"),formatHeaderLabel:t=>`Q${fn(t)} ${t.format("YYYY")}`},year:{labelUnit:"year",tickUnit:"month",unitPerTick:3,tickAlign:"quarter",dragStepUnit:"day",dragStepAmount:28,basePxPerDragStep:28,formatTickLabel:t=>t.format("MMM"),formatHeaderLabel:t=>t.format("YYYY")}},Zt={year:"numeric",month:"short",day:"numeric"},Tt={year:"numeric",month:"short"},he={year:"numeric"},mn={hour:"2-digit",minute:"2-digit",hourCycle:"h23"},gr={day:{hour:"2-digit",hourCycle:"h23"},week:{day:"numeric"},month:{month:"short",day:"numeric"},quarter:{month:"short"},year:{month:"short"}},$r={day:Zt,week:Tt,month:Tt,quarter:he,year:he},xr={day:{...Zt,...mn,timeZoneName:"short"},week:Zt,month:Zt,quarter:Tt,year:Tt},We={day:{...mn,timeZoneName:"short"},week:{month:"short",day:"numeric"},month:{month:"short",day:"numeric"},quarter:Tt,year:Tt},Dr=" – ",Ge=new Set;function Nt(t,e){const r=new Intl.DateTimeFormat(t,{timeZone:"UTC",...e});return s=>r.format(s.toDate())}function br(t){return(e,r)=>{try{return t.formatRange(e.toDate(),r.toDate())}catch{return pn(t.format(e.toDate()),t.format(r.toDate()))}}}function pn(t,e){return t===e?t:`${t}${Dr}${e}`}function wr(t){const e=Nt(t,he);return r=>{const s=e(r),a=`Q${fn(r)}`;return/\d$/.test(s)?`${a} ${s}`:`${s} ${a}`}}function gn(t,e){return t==="week"&&(e==null?void 0:e.firstDayOfWeek)!==void 0?"week":it[t].labelUnit}function Lt(t,e){var l;const r=(l=e==null?void 0:e.formats)==null?void 0:l[t],s=gn(t,e)==="week"?"day":t,a=it[t],n=it[s],o=e!=null&&e.locale?vr(e.locale,t,s):null,i=r==null?void 0:r.tooltip,c=i??(o==null?void 0:o.edge)??(f=>f.format(mr[t])),u=!i&&(o!=null&&o.range)?o.range:(f,h)=>pn(c(f),c(h));return{edge:c,range:u,tick:(r==null?void 0:r.tick)??(o==null?void 0:o.tick)??(f=>{var h;return((h=a.formatTickLabel)==null?void 0:h.call(a,f))??""}),header:(r==null?void 0:r.header)??(o==null?void 0:o.header)??(f=>{var h;return((h=n.formatHeaderLabel)==null?void 0:h.call(n,f))??f.format()}),tooltip:(r==null?void 0:r.tooltip)??(o==null?void 0:o.tooltip)??(f=>f.format(hr[t]))}}function vr(t,e,r){try{return{tick:Nt(t,gr[e]),header:r==="quarter"?wr(t):Nt(t,$r[r]),tooltip:Nt(t,xr[e]),edge:Nt(t,We[e]),range:br(new Intl.DateTimeFormat(t,{timeZone:"UTC",...We[e]}))}}catch{return Ge.has(t)||(Ge.add(t),console.warn(`[gantt-chart] Unusable locale "${t}" - falling back to the built-in labels.`)),null}}function $n(t){const e=Math.max(0,Math.round(t/36e5));return e<24?`${e}h`:`${Math.round(e/24)}d`}const Et=Object.keys(it),yr={minute:6e4,hour:36e5,day:864e5,week:6048e5};function Sr(t){const{basePxPerDragStep:e,dragStepUnit:r,dragStepAmount:s}=it[t];return e/(s*yr[r])}function xn(t,e){const r=Et.indexOf(t);if(r===-1)return t;const s=Math.min(Et.length-1,Math.max(0,r+e));return Et[s]}function Mr(t,e){for(const r of Et)if(t*Sr(r)<=e)return r;return Et[Et.length-1]}const Or=24,kr=120,Ir={delta:0,lastEventAt:0,locked:!1};function Er(t,e,r){const s=r-t.lastEventAt>=kr;if(!s&&t.locked)return{state:{delta:0,lastEventAt:r,locked:!0},step:0};const a=(s?0:t.delta)+e;return Math.abs(a)<Or?{state:{delta:a,lastEventAt:r,locked:!1},step:0}:{state:{delta:0,lastEventAt:r,locked:!0},step:Math.sign(a)}}const Pr=48,Xe=22;function me(t,e,r){const s=r-e;if(s<=0)return 0;const a=Math.min(Pr,s/2);return a<=0?0:t<e+a?-Xe*Math.min(1,(e+a-t)/a):t>r-a?Xe*Math.min(1,(t-(r-a))/a):0}const pe={before:0,after:0},zt=2e3;function Tr({current:t,scrollLeft:e,viewportPx:r,totalPx:s,pxPerTick:a,canExtend:n}){if(a<=0||r<=0)return null;const o=Math.max(1,Math.ceil(r/a)),i=r/2;return(n==null?void 0:n.before)!==!1&&e<=i&&t.before<zt?{...t,before:Math.min(zt,t.before+o)}:(n==null?void 0:n.after)!==!1&&s-(e+r)<=i&&t.after<zt?{...t,after:Math.min(zt,t.after+o)}:null}function _t(t){return typeof t!="number"||Number.isNaN(t)?null:Math.min(100,Math.max(0,t))}function Ot(t){const e=new Map(t.map(i=>[i.id,i])),r=new Map,s=new Map,a=new Map,n=[],o=i=>{const c=i.parentId;if(!c||c===i.id||!e.has(c))return null;const u=new Set([i.id]);let l=e.get(c);for(;l;){if(u.has(l.id))return null;if(u.add(l.id),!l.parentId)break;l=e.get(l.parentId)}return c};for(const i of t)r.set(i.id,o(i));for(const i of t){const c=r.get(i.id);if(!c){n.push(i.id);continue}const u=s.get(c);u?u.push(i.id):s.set(c,[i.id])}for(const i of t){let c=0,u=r.get(i.id)??null;for(;u;)c++,u=r.get(u)??null;a.set(i.id,c)}return{childIds:s,parentOf:r,depthOf:a,rootIds:n}}function Yt(t,e,r=Ot(t)){if(!r.parentOf.has(e))return[];const s=[e];for(let a=0;a<s.length;a++){const n=r.childIds.get(s[a]);n&&s.push(...n)}return s}function Lr(t,e,r=Ot(t)){const s=e instanceof Set?e:new Set(e);if(!s.size)return t;const a=n=>{let o=r.parentOf.get(n)??null;for(;o;){if(s.has(o))return!0;o=r.parentOf.get(o)??null}return!1};return t.filter(n=>!a(n.id))}function Ar(t){let e=0,r=0,s=0,a=!1;for(const o of t){const i=_t(o.progress);i!==null&&(a=!0);const c=i??0,u=Math.max(0,H(o.endDate).valueOf()-H(o.startDate).valueOf());e+=c*u,r+=u,s+=c}if(!a)return;const n=r>0?e/r:s/t.length;return Math.round(n)}function Dn(t,e=Ot(t)){if(!e.childIds.size)return t;const r=new Map(t.map(o=>[o.id,o])),s=[...e.childIds.keys()].filter(o=>r.has(o)).sort((o,i)=>(e.depthOf.get(i)??0)-(e.depthOf.get(o)??0)),a=new Map,n=o=>a.get(o)??r.get(o);for(const o of s){const i=r.get(o);if(!i)continue;const c=(e.childIds.get(o)??[]).map(n).filter(f=>f!==void 0);if(!c.length)continue;let u=1/0,l=-1/0;for(const f of c){const h=H(f.startDate).valueOf(),w=H(f.endDate).valueOf();Number.isNaN(h)||(u=Math.min(u,h)),Number.isNaN(w)||(l=Math.max(l,w))}!Number.isFinite(u)||!Number.isFinite(l)||a.set(o,{...i,startDate:H(u).toISOString(),endDate:H(l).toISOString(),progress:i.progress??Ar(c)})}return a.size?t.map(o=>a.get(o.id)??o):t}function Be(t){return t.split(".").map(Number)}function Ct(t){return[...t].sort((e,r)=>{const s=Be(e.sequence),a=Be(r.sequence),n=Math.max(s.length,a.length);for(let o=0;o<n;o++){const i=s[o]||0,c=a[o]||0;if(i!==c)return i-c}return 0})}const Pt="";function ve(t,e,r){const s=new Map,a=new Map;if(e)for(const[n,o]of(r??Ot(t)).parentOf)s.set(n,o);else{const n=new Map;for(const o of t)n.has(o.sequence)||n.set(o.sequence,o.id);for(const o of t){const i=o.sequence.lastIndexOf("."),c=i===-1?null:o.sequence.slice(0,i),u=c?n.get(c)??null:null;s.set(o.id,u===o.id?null:u)}}for(const n of t){const o=s.get(n.id)??Pt,i=a.get(o);i?i.push(n.id):a.set(o,[n.id])}return{children:a,parentOf:s}}const Rr=[];function Jt(t,e){const{children:r,parentOf:s}=ve(Ct(t),e);return{parentOf:s,childrenOf:a=>r.get(a??Pt)??Rr}}function Nr(t,e,r,s){const a=s==="child"?r:t.parentOf.get(r)??null,n=t.childrenOf(a),o=s==="child"?n.length:n.indexOf(r)+(s==="after"?1:0),i=n.indexOf(e);return{taskId:e,toParentId:a,toIndex:i!==-1&&i<o?o-1:o}}function ye(t,e,r){const s=new Map(t.map(w=>[w.id,w])),a=s.get(e.taskId);if(!a)return"unknown-task";const n=e.toParentId?s.get(e.toParentId):null;if(e.toParentId&&!n)return"unknown-parent";if(r.canReorder&&!r.canReorder(a))return"read-only";const o=Ct(t),i=r.hierarchy?Ot(o):void 0,{children:c,parentOf:u}=ve(o,r.hierarchy,i),l=u.get(a.id)??null;if(!r.hierarchy&&e.toParentId!==l)return"reparent-disabled";if(e.toParentId&&new Set(Yt(o,a.id,i)).has(e.toParentId))return"cycle";const h=(c.get(l??Pt)??[]).indexOf(a.id);return e.toParentId===l&&e.toIndex===h?"no-op":null}function bn(t,e,r){if(ye(t,e,r))return null;const s=Ct(t),{children:a,parentOf:n}=ve(s,r.hierarchy),o=n.get(e.taskId)??null,i=o??Pt,c=e.toParentId??Pt,u=[...a.get(i)??[]],l=u.indexOf(e.taskId);u.splice(l,1),a.set(i,u);const f=c===i?u:[...a.get(c)??[]],h=Math.min(Math.max(e.toIndex,0),f.length);f.splice(h,0,e.taskId),a.set(c,f);const w=new Map,g=(m,v)=>{(a.get(m)??[]).forEach((D,R)=>{const N=v?`${v}.${R+1}`:`${R+1}`;w.set(D,N),g(D,N)})};return g(Pt,""),{tasks:t.map(m=>{const v=w.get(m.id)??m.sequence,S=r.hierarchy&&m.id===e.taskId?e.toParentId:m.parentId;return v===m.sequence&&S===m.parentId?m:{...m,sequence:v,parentId:S}}),change:{taskId:e.taskId,fromParentId:o,fromIndex:l,toParentId:e.toParentId,toIndex:h,afterId:f[h-1]??null,beforeId:f[h+1]??null}}}function jr(t,e,r,s){if(!r.length)return{barMarginLeftAmount:0,barWidthSize:0};const a=it[s],{tickUnit:n,unitPerTick:o}=a;let i=0,c=0,u=!1;const l=t.valueOf(),f=e.valueOf();for(const h of r){const w=h.startDate,g=w.add(o,n),d=h.widthPx,m=w.valueOf(),v=g.valueOf();if(v<=l){i+=d;continue}if(m>=f)break;const S=l>m?t:w,D=f<v?e:g,R=v-m,O=(D.valueOf()-S.valueOf())/R;if(!u&&S.valueOf()>m){const _=(S.valueOf()-m)/R;i+=_*d}c+=O*d,u=!0}return{barMarginLeftAmount:i,barWidthSize:Math.max(c,1)}}function _r(t){return t.split(".").length-1}function Yr(t,e,r,s){return Ct(t).map((n,o)=>{var h;const i=s?s.depthOf.get(n.id)??0:_r(n.sequence),c=(((h=s==null?void 0:s.childIds.get(n.id))==null?void 0:h.length)??0)>0,u=o+1,{barMarginLeftAmount:l,barWidthSize:f}=jr(H(n.startDate),H(n.endDate),e,r);return{...n,barLeft:l,barWidth:f,depth:i,isSummary:c,order:u,originalOrder:u}})}const Cr="off";function Hr(t,e,r){if(!t.length||!e.length)return 0;const s=t[0].startDate,a=e[0].startDate,n=s.valueOf()-a.valueOf();return n===0?0:n>0?It(s,e,r)??0:-(It(a,t,r)??0)}function Fr(t,e,r){const{tickUnit:s,unitPerTick:a}=it[e];if(s!=="day"&&s!=="hour")return[];const n=s==="day"?a:1,o=[];let i=0,c=null;for(const u of t){const l=u.widthPx/n;for(let f=0;f<n;f++){const h=r(u.startDate.add(f,"day"));h&&(h.key===c?o[o.length-1].width+=l:o.push({left:i+f*l,width:l,...h.label!==void 0&&{label:h.label},...h.color!==void 0&&{color:h.color}})),c=(h==null?void 0:h.key)??null}i+=u.widthPx}return o}function kt(t,e,r){const{dragStepUnit:s,dragStepAmount:a}=it[r];return t.add(e*a,s)}function ce(t,e,r){const{dragStepUnit:s,dragStepAmount:a,basePxPerDragStep:n}=it[r];return e.diff(t,s,!0)/a*n}function ee(t,e){return!t&&!e?null:{min:t?H(t):void 0,max:e?H(e):void 0}}function Se(t,e,r,s,a){const{min:n,max:o}=s;if(!n&&!o)return{startDate:e,endDate:r};if(t==="bar"){let u=e,l=r;if(o&&l.valueOf()>o.valueOf()){const f=l.valueOf()-o.valueOf();u=u.subtract(f,"millisecond"),l=o}if(n&&u.valueOf()<n.valueOf()){const f=n.valueOf()-u.valueOf();u=n,l=l.add(f,"millisecond")}return{startDate:u,endDate:l}}if(t==="left"){let u=e;n&&u.valueOf()<n.valueOf()&&(u=n),o&&u.valueOf()>o.valueOf()&&(u=o);const l=kt(r,-1,a);return u.valueOf()>l.valueOf()&&(u=l),{startDate:u,endDate:r}}let i=r;o&&i.valueOf()>o.valueOf()&&(i=o),n&&i.valueOf()<n.valueOf()&&(i=n);const c=kt(e,1,a);return i.valueOf()<c.valueOf()&&(i=c),{startDate:e,endDate:i}}function wn(t,e,r){const s=Math.min(0,e),a=Math.max(0,e);let n=e;for(const o of t){const{startDate:i}=Se("bar",o.start.add(e,"millisecond"),o.end.add(e,"millisecond"),o.bounds,r),c=Math.min(a,Math.max(s,i.valueOf()-o.start.valueOf()));Math.abs(c)<Math.abs(n)&&(n=c)}return n}function It(t,e,r){if(!e.length)return null;const{tickUnit:s,unitPerTick:a}=it[r],n=t.valueOf();if(n<e[0].startDate.valueOf())return null;let o=0;for(const i of e){const c=i.startDate.valueOf(),u=i.startDate.add(a,s).valueOf();if(n<u)return o+(n-c)/(u-c)*i.widthPx;o+=i.widthPx}return null}function vn(t,e,r){if(!e.length||t<0)return null;const{tickUnit:s,unitPerTick:a}=it[r];let n=0;for(const o of e){if(t<n+o.widthPx){const i=o.startDate.valueOf(),c=o.startDate.add(a,s).valueOf()-i,u=o.widthPx>0?(t-n)/o.widthPx:0;return H(i+u*c)}n+=o.widthPx}return null}function Ur(t,e){if(!t.length)return null;const{tickUnit:r,unitPerTick:s}=it[e],a=t[t.length-1];return{start:t[0].startDate,end:a.startDate.add(s,r)}}function ze(t,e){if(t<=0)return 0;let r=0;for(let s=0;s<e.length;s++)if(r+=e[s].widthPx,t<r)return s;return e.length-1}function yn(t,e,r,s){if(!r.length)return null;const{tickUnit:a,unitPerTick:n}=it[s],o=ze(Math.min(t,e),r),i=ze(Math.max(t,e),r);let c=0;for(let l=0;l<o;l++)c+=r[l].widthPx;let u=0;for(let l=o;l<=i;l++)u+=r[l].widthPx;return{startDate:r[o].startDate,endDate:r[i].startDate.add(n,a),leftPx:c,widthPx:u}}function Wr(t){let e=1/0,r=-1/0;for(const s of t){const a=s.startDate?H(s.startDate).valueOf():NaN;Number.isNaN(a)||(e=Math.min(e,a));const n=s.endDate?H(s.endDate).valueOf():NaN;Number.isNaN(n)||(r=Math.max(r,n))}return{minDate:H(e),maxDate:H(r)}}function Gr(t,e,r,s){const a=it[r],{tickUnit:n,unitPerTick:o}=a,i=ir*o;return{paddedMinDate:t.subtract(i+s.before*o,n),paddedMaxDate:e.add(i+s.after*o,n)}}function Xr(t,e,r){const s=it[r],{tickUnit:a,unitPerTick:n,basePxPerDragStep:o,dragStepUnit:i,dragStepAmount:c}=s,u=[];let l=s.tickAlign?Sn(t,s.tickAlign):t.startOf(a);const f=e.valueOf(),h=o/c;for(;l.valueOf()<f;){const w=l.add(n,a),d=w.diff(l,i)*h;u.push({startDate:l,widthPx:d}),l=w}return u}function Sn(t,e,r){return e==="quarter"?nr(t):e==="week"?rr(t,r):t.startOf(e)}function Br(t,e,r){const s=gn(e,r),{header:a}=Lt(e,r);if(t.length===0)return[];const n=[];let o=null;for(const i of t){const c=Sn(i.startDate,s,r==null?void 0:r.firstDayOfWeek),u=c.valueOf(),l=a(c);o&&o.startDate.valueOf()===u?o.widthPx+=i.widthPx:(o&&n.push(o),o={label:l,widthPx:i.widthPx,startDate:c})}return o&&n.push(o),n}function zr(t,e,r,s=!1,a=pe){const n=r==null?void 0:r.start,o=r==null?void 0:r.end;if(!t.length&&!(n&&o))return{bottomCells:[],transformedTasks:[]};const i=s?Ot(t):void 0,c=i?Dn(t,i):t;let u=n,l=o;if(!u||!l){const{minDate:w,maxDate:g}=Wr(c),{paddedMinDate:d,paddedMaxDate:m}=Gr(w,g,e,a);u=u??d,l=l??m}const f=Xr(u,l,e),h=Yr(c,f,e,i);return{bottomCells:f,transformedTasks:h}}function qr({bottomRowCells:t,selectedScale:e,width:r,virtual:s}){const a=K(u=>u.localeOptions),n=p.useMemo(()=>Lt(e,a),[e,a]),{virtualCells:o,leadingCellPx:i}=s,c=p.useMemo(()=>qn(Br(t,e,a)),[t,e,a]);return b.jsx("header",{className:"gantt-header",style:{width:`${r}px`},children:b.jsxs("div",{className:"gantt-header-content",children:[b.jsx("div",{className:"gantt-top-header",children:b.jsx("div",{className:"gantt-top-groups",children:c.map((u,l)=>b.jsx("div",{className:"gantt-top-group",style:{width:`${u.widthPx}px`},children:b.jsx("p",{className:"gantt-top-group-label",children:u.label})},`${u.label}-${l}`))})}),b.jsxs("div",{className:"gantt-bottom-row",children:[b.jsx("div",{style:{width:`${i}px`},"aria-hidden":"true"}),o.map(u=>{const l=t[u.index];return l?b.jsx("div",{className:"gantt-bottom-cell",style:{width:`${u.size}px`},children:n.tick(l.startDate)},`bottom-${u.index}`):null})]})]})})}const Mn={};function ft(t,e=Mn){const r=(n,o)=>n!==void 0?n:t.readOnly!==void 0?!t.readOnly:o!==void 0?o:!e.readOnly,s=t.allowReorder??(t.readOnly===!0?!1:e.allowReorder??!1),a=t.isSummary===!0;return{canMove:r(t.allowMove,e.allowMove),canResize:!a&&r(t.allowResize,e.allowResize),canChangeProgress:!a&&r(t.allowProgressChange,e.allowProgressChange),canCreateLink:r(t.allowLinkCreate,e.allowLinkCreate),canDeleteLink:r(t.allowLinkDelete,e.allowLinkDelete),canReorder:s,minDate:t.minDate??e.minDate,maxDate:t.maxDate??e.maxDate}}function Kr(t=Mn){return t.allowTaskCreate??!t.readOnly}function Vr(t){const e=t==null?void 0:t.trim();return e?{"--gantt-bar-color":e,"--gantt-bar-color-hover":`color-mix(in srgb, ${e} 86%, #000)`,"--gantt-progress-color":`color-mix(in srgb, ${e} 62%, #000)`,"--gantt-bar-text-color":`oklch(from ${e} clamp(0, (l / 0.5637 - 1) * -infinity, 1) 0 h)`}:{}}const ge={offsetX:0,offsetWidth:0};function qe(t,e,r,s,a){if(r<0||a<0)return`M ${e} ${r} h ${(s-e)/2}`;const n=7,o=11,i=25,c=20,u=`M ${e} ${r}`,l=s-e,f=a-r,h=Math.abs(l),w=Math.abs(f),g=a<=r,d=a>=r,m=s>=e,v=s<=e,S=h>c,D=Math.abs(l/2),R=Math.abs(f/2);function N(){function M(){return(m||v)&&d&&!S?"downSmallHorizontal":(m||v)&&g&&!S?"upSmallHorizontal":d&&v?"downLeft":d&&m?"downRight":g&&v?"upLeft":g&&m?"upRight":""}let $=u;switch(M()){case"downRight":{$+=` h ${D-n}`,$+=` a ${n} ${n} 0 0 1 ${n} ${n}`,$+=` v ${f-n*2}`,$+=` a ${n} ${n} 0 0 0 ${n} ${n}`,$+=` h ${D-n}`;break}case"upRight":{$+=` h ${D-n}`,$+=` a ${n} ${n} 0 0 0 ${n} -${n}`,$+=` v -${w-n*2}`,$+=` a ${n} ${n} 0 0 1 ${n} -${n}`,$+=` h ${D-n}`;break}case"downLeft":case"downSmallHorizontal":{const F=r+f/2;$+=` h ${o}`,$+=` a ${n} ${n} 0 0 1 ${n} ${n}`,$+=` v ${F-r-n*2}`,$+=` a ${n} ${n} 0 0 1 -${n} ${n}`,$+=` h ${l-2*o}`,$+=` a ${n} ${n} 0 0 0 -${n} ${n}`,$+=` v ${F-r-n*2}`,$+=` a ${n} ${n} 0 0 0 ${n} ${n}`,$+=` h ${o}`;break}case"upLeft":case"upSmallHorizontal":{const F=r+f/2;$+=` h ${o}`,$+=` a ${n} ${n} 0 0 0 ${n} -${n}`,$+=` v -${r-F-n*2}`,$+=` a ${n} ${n} 0 0 0 -${n} -${n}`,$+=` h ${l-2*o}`,$+=` a ${n} ${n} 0 0 1 -${n} -${n}`,$+=` v -${r-F-n*2}`,$+=` a ${n} ${n} 0 0 1 ${n} -${n}`,$+=` h ${o}`;break}default:return $}return $}function O(){let M=u;return d&&v?(M+=` h ${i-o}`,M+=` a ${n} ${n} 0 0 1 ${n} ${n}`,M+=` v ${f-n*2}`,M+=` a ${n} ${n} 0 0 1 -${n} ${n}`,M+=` h ${l-n*2}`):d&&m?(M+=` h ${l+i-o}`,M+=` a ${n} ${n} 0 0 1 ${n} ${n}`,M+=` v ${f-n*2}`,M+=` a ${n} ${n} 0 0 1 -${n} ${n}`,M+=` h -${i-o}`):g&&v?(M+=` h ${i-o}`,M+=` a ${n} ${n} 0 0 0 ${n} -${n}`,M+=` v ${f+n*2}`,M+=` a ${n} ${n} 0 0 0 -${n} -${n}`,M+=` h ${l-i+o}`):g&&m&&(M+=` h ${l+i-o}`,M+=` a ${n} ${n} 0 0 0 ${n} -${n}`,M+=` v ${f+n*2}`,M+=` a ${n} ${n} 0 0 0 -${n} -${n}`,M+=` h -${i-o}`),M}function _(){function M(){return(m||v)&&d&&!S?"downSmallHorizontal":(m||v)&&g&&!S?"upSmallHorizontal":d&&v?"downLeft":d&&m?"downRight":g&&v?"upLeft":g&&m?"upRight":""}let $=u;switch(M()){case"downRight":case"downSmallHorizontal":{$+=` h ${-o}`,$+=` a ${n} ${n} 0 0 0 -${n} ${n}`,$+=` v ${R-n*2}`,$+=` a ${n} ${n} 0 0 0 ${n} ${n}`,$+=` h ${o*2+l}`,$+=` a ${n} ${n} 0 0 1 ${n} ${n}`,$+=` v ${R-n*2}`,$+=` a ${n} ${n} 0 0 1 -${n} ${n}`,$+=` h ${-o}`;break}case"upRight":case"upSmallHorizontal":{$+=` h ${-o}`,$+=` a ${n} ${n} 0 0 1 -${n} -${n}`,$+=` v ${-(R-n*2)}`,$+=` a ${n} ${n} 0 0 1 ${n} -${n}`,$+=` h ${o*2+l}`,$+=` a ${n} ${n} 0 0 0 ${n} -${n}`,$+=` v ${-(R-n*2)}`,$+=` a ${n} ${n} 0 0 0 -${n} -${n}`,$+=` h ${-o}`;break}case"downLeft":{$+=` h ${-D+n}`,$+=` a ${n} ${n} 0 0 0 -${n} ${n}`,$+=` v ${w-n*2}`,$+=` a ${n} ${n} 0 0 1 -${n} ${n}`,$+=` h ${-D+n}`;break}case"upLeft":{$+=` h ${-(D-n)}`,$+=` a ${n} ${n} 0 0 1 -${n} -${n}`,$+=` v ${-(w-n*2)}`,$+=` a ${n} ${n} 0 0 0 -${n} -${n}`,$+=` h ${-D+n}`;break}default:return $}return $}function L(){let M=u;return d&&v?(M+=` h ${l-i}`,M+=` a ${n} ${n} 0 0 0 -${n} ${n}`,M+=` v ${f-n*2}`,M+=` a ${n} ${n} 0 0 0 ${n} ${n}`,M+=` h ${i}`):d&&m?(M+=` h ${-i}`,M+=` a ${n} ${n} 0 0 0 -${n} ${n}`,M+=` v ${f-n*2}`,M+=` a ${n} ${n} 0 0 0 ${n} ${n}`,M+=` h ${l+i}`):g&&v?(M+=` h ${l-i}`,M+=` a ${n} ${n} 0 0 1 -${n} -${n}`,M+=` v ${f+n*2}`,M+=` a ${n} ${n} 0 0 1 ${n} -${n}`,M+=` h ${i}`):g&&m&&(M+=` h ${-i}`,M+=` a ${n} ${n} 0 0 1 -${n} -${n}`,M+=` v ${f+n*2}`,M+=` a ${n} ${n} 0 0 1 ${n} -${n}`,M+=` h ${l+i}`),M}switch(t){case"FS":return N();case"FF":return O();case"SF":return _();case"SS":return L();default:return`${u} L ${s} ${a}`}}function $e(t,e){const r=t.barLeft+e.offsetX;return{startX:r,endX:r+t.barWidth+e.offsetWidth}}function Ke(t,e,r=ge){const{startX:s,endX:a}=$e(t,r);return{x:e==="start"?s:a,y:(t.order-1)*bt+bt/2}}function Zr(t,e,r,s,a){const n=bt,o=t.order-1,i=e.order-1,c=n/2,u=i*n+c,l=o*n+c,f=$e(e,s),h=$e(t,r),g={FS:[f.endX,h.startX],SS:[f.startX,h.startX],FF:[f.endX,h.endX],SF:[f.startX,h.endX]}[a];if(!g)return null;const[d,m]=g;return{fromX:d,fromY:u,toX:m,toY:l}}function Jr(t){return new Map(t.map(e=>[e.id,e]))}const qt=32;function Qr(t,e){const r=Math.min(t.fromY,t.toY)-qt;if(Math.max(t.fromY,t.toY)+qt<e.topPx||r>e.bottomPx)return!1;const a=Math.min(t.fromX,t.toX)-qt,n=Math.max(t.fromX,t.toX)+qt;return e.isBarVisible(a,n-a)}function ts(t,e){const r=[];for(const s of t.values()){const a=e[s.id]??ge;for(const n of s.dependencies??[]){const o=t.get(n.targetId);if(!o)continue;const i=Zr(s,o,a,e[o.id]??ge,n.type);i&&r.push({...n,sourceId:s.id,...i})}}return r}function On(t,e){const r=s=>s==="end"?"F":"S";return`${r(t)}${r(e)}`}function es(t,e,r,s,a){const n=Math.floor(r/s);if(n<0)return null;let o=null,i=1/0;for(const f of t){if(f.order-1!==n)continue;const h=f.barLeft??0,w=h+(f.barWidth??0),g=e<h?h-e:Math.max(0,e-w);g<i&&(i=g,o=f)}if(!o)return null;const c=o.barLeft??0,u=o.barWidth??0,l=Math.min(a,u/3);return{task:o,anchor:e>c+u-l?"end":"start"}}function ns(t,e,r){var i;if(e===r)return"self";const s=new Map(t.map(c=>[c.id,c])),a=(i=s.get(r))==null?void 0:i.dependencies;if(a!=null&&a.some(c=>c.targetId===e))return"duplicate";const n=new Set([e]),o=[e];for(;o.length;){const c=s.get(o.pop());for(const u of(c==null?void 0:c.dependencies)??[]){if(u.targetId===r)return"cycle";n.has(u.targetId)||(n.add(u.targetId),o.push(u.targetId))}}return null}const rs={self:"Cannot link a task to itself",duplicate:"These tasks are already linked",cycle:"That would create a circular dependency"};function ss(t,e,r,s){let a=!1;const n=t.map(o=>o.id!==r?o:(a=!0,{...o,dependencies:[...o.dependencies??[],{targetId:e,type:s}]}));return a?n:t}function os(t,e,r){let s=!1;const a=t.map(n=>{if(n.id!==r||!n.dependencies)return n;const o=n.dependencies.filter(i=>i.targetId!==e);return o.length===n.dependencies.length?n:(s=!0,{...n,dependencies:o})});return s?a:t}const as=8,is=14,cs=220;function ls(t){const e=t;return e?e.isContentEditable||e.tagName==="INPUT"||e.tagName==="TEXTAREA"||e.tagName==="SELECT":!1}function us({transformedTasks:t,rowCount:e,virtual:r,interaction:s,onTasksChange:a,onDependencyDelete:n}){const o=$t(),i=K(O=>O.dragOffsets),c=K(O=>O.linkDraft),u=K(O=>O.getTotalWidth()),l=K(O=>O.selectedDependency),f=K(O=>O.selectedTaskId),h=K(O=>O.hoveredTaskId),w=p.useMemo(()=>Jr(t),[t]),g={topPx:r.rowStartPx,bottomPx:r.rowEndPx,isBarVisible:r.isBarVisible},d=ts(w,i).filter(O=>Qr(O,g)),m=O=>(l==null?void 0:l.sourceId)===O.sourceId&&(l==null?void 0:l.targetId)===O.targetId,v=O=>h!==null&&(O.sourceId===h||O.targetId===h)||f!==null&&(O.sourceId===f||O.targetId===f),S=p.useCallback(()=>{var k;const{rawTasks:O,selectedDependency:_,setRawTasks:L,setSelectedDependency:M}=o.getState();if(!_)return;const{sourceId:$,targetId:j}=_,F=O.find(y=>y.id===$),U=(k=F==null?void 0:F.dependencies)==null?void 0:k.find(y=>y.targetId===j);if(!F||!U||!ft(F,s).canDeleteLink)return;const I={predecessorId:j,successorId:$,type:U.type};if((n==null?void 0:n(I))===!1)return;M(null);const E=os(O,j,$);L(E),a==null||a(E)},[o,s,n,a]);p.useEffect(()=>{if(!l)return;const O=L=>{ls(L.target)||(L.key==="Delete"||L.key==="Backspace"?(L.preventDefault(),S()):L.key==="Escape"&&o.getState().setSelectedDependency(null))},_=()=>{o.getState().setSelectedDependency(null)};return document.addEventListener("keydown",O),document.addEventListener("pointerdown",_),()=>{document.removeEventListener("keydown",O),document.removeEventListener("pointerdown",_)}},[l,S,o]);const D=p.useMemo(()=>{if(!c)return null;const O=w.get(c.fromTaskId);if(!O)return null;const _=Ke(O,c.fromAnchor,i[O.id]),L=c.hoverTaskId?w.get(c.hoverTaskId):void 0,M=c.hoverAnchor&&On(c.fromAnchor,c.hoverAnchor),$=!c.rejection&&L!==void 0&&c.hoverAnchor!==null,j=$&&L&&c.hoverAnchor?Ke(L,c.hoverAnchor,i[L.id]):{x:c.toX,y:c.toY},F=j.x>u-cs;return{from:_,d:$&&M?qe(M,_.x,_.y,j.x,j.y):`M ${_.x} ${_.y} L ${j.x} ${j.y}`,armed:$,type:M,rejection:c.rejection,label:{x:F?j.x-12:j.x+12,y:Math.max(is,j.y-8),anchor:F?"end":"start"}}},[c,w,i,u]),N=`gantt-arrowhead-${p.useId().replace(/[^a-zA-Z0-9]/g,"")}`;return b.jsxs("svg",{className:`gantt-dependency-arrows${c?" linking":""}`,style:{height:`${e*bt}px`},children:[b.jsx("defs",{children:b.jsx("marker",{id:N,markerWidth:"5",markerHeight:"5",refX:"4.5",refY:"2.5",orient:"auto",children:b.jsx("polygon",{className:"gantt-dependency-arrow-head",points:"0 0, 5 2.5, 0 5"})})}),d.map((O,_)=>{const L=qe(O.type,O.fromX,O.fromY,O.toX,O.toY),M=m(O),$=w.get(O.sourceId),j=$!==void 0&&ft($,s).canDeleteLink;return b.jsxs("g",{children:[j&&b.jsx("path",{className:"gantt-dependency-hit",d:L,fill:"none",onPointerDown:F=>{F.stopPropagation(),o.getState().setSelectedDependency({sourceId:O.sourceId,targetId:O.targetId})}}),b.jsx("path",{className:`gantt-dependency-arrow${M?" selected":""}${v(O)?" related":""}`,d:L,markerEnd:`url(#${N})`,fill:"none"}),M&&b.jsxs("g",{className:"gantt-dependency-delete",transform:`translate(${(O.fromX+O.toX)/2} ${(O.fromY+O.toY)/2})`,role:"button","aria-label":`Delete ${O.type} dependency`,onPointerDown:F=>{F.stopPropagation(),S()},children:[b.jsx("circle",{r:as}),b.jsx("path",{d:"M -3 -3 L 3 3 M 3 -3 L -3 3"})]})]},`arrow-${_}`)}),D&&b.jsxs("g",{className:"gantt-link-preview",children:[b.jsx("path",{className:`gantt-link-preview-line${D.rejection?" invalid":""}${D.armed?" armed":""}`,d:D.d,fill:"none",markerEnd:D.rejection?void 0:`url(#${N})`}),b.jsx("circle",{className:"gantt-link-preview-origin",cx:D.from.x,cy:D.from.y,r:"3"}),D.armed&&D.type&&b.jsx("text",{className:"gantt-link-preview-type",x:D.label.x,y:D.label.y,textAnchor:D.label.anchor,children:D.type}),D.rejection&&b.jsx("text",{className:"gantt-link-preview-reason",x:D.label.x,y:D.label.y,textAnchor:D.label.anchor,children:rs[D.rejection]})]})]})}function ds(){const t=K(d=>d.currentTask),e=K(d=>d.dragOffsets),r=K(d=>d.dragMode),s=K(d=>d.selectedScale),a=K(d=>d.localeOptions),n=K(d=>d.bottomRowCells),{edge:o,range:i}=p.useMemo(()=>Lt(s,a),[s,a]),c=p.useMemo(()=>un(n),[n]),u=t?e[t.id]:void 0;if(!t||!u)return null;const l=t.barLeft+u.offsetX,f=l+t.barWidth+u.offsetWidth,h=Qt(c,l),w=Qt(c,f);if(!h||!w)return null;const g=r==="left"?[{cell:h,label:o(u.offsetStartDate)}]:r==="right"?[{cell:w,label:o(u.offsetEndDate)}]:h.index===w.index?[{cell:h,label:i(u.offsetStartDate,u.offsetEndDate)}]:[{cell:h,label:o(u.offsetStartDate)},{cell:w,label:o(u.offsetEndDate)}];return b.jsxs("div",{className:"gantt-drag-guides","aria-hidden":"true",children:[g.map(({cell:d,label:m})=>b.jsx("div",{className:"gantt-drag-cell",style:{left:`${d.left}px`,width:`${d.width}px`},children:b.jsx("span",{children:m})},d.index)),b.jsx("div",{className:"gantt-drag-footprint",style:{left:`${l}px`,width:`${Math.max(f-l,2)}px`}})]})}function fs({width:t,onWidthChange:e}){const r=o=>Math.min(Ce,Math.max(Ye,o)),s=o=>{if(!o.isPrimary||o.button!==0)return;const i=o.clientX,c=t;o.currentTarget.setPointerCapture(o.pointerId);const u=f=>{f.pointerId===o.pointerId&&e(r(c+f.clientX-i))},l=f=>{f.pointerId===o.pointerId&&(document.removeEventListener("pointermove",u),document.removeEventListener("pointerup",l),document.removeEventListener("pointercancel",l))};document.addEventListener("pointermove",u),document.addEventListener("pointerup",l),document.addEventListener("pointercancel",l)},a=o=>{var h,w;const i=(h=o.parentElement)==null?void 0:h.querySelectorAll(".gantt-grid-cell-text");if(!(i!=null&&i.length))return;const c=(w=o.parentElement)==null?void 0:w.querySelector(".gantt-grid");if(!c)return;const u=c.getBoundingClientRect().width/c.offsetWidth||1,l=document.createRange();let f=0;i.forEach(g=>{const d=g.closest(".gantt-grid-row");if(!d)return;l.selectNodeContents(g);const m=l.getBoundingClientRect().width;let S=g.getBoundingClientRect().left-d.getBoundingClientRect().left+m;for(let D=g.nextElementSibling;D;D=D.nextElementSibling)S+=D.getBoundingClientRect().width;f=Math.max(f,S)}),e(r(Math.ceil(f/u+10)+1))},n=o=>{if(o.key==="Enter"){o.preventDefault(),a(o.currentTarget);return}o.key!=="ArrowLeft"&&o.key!=="ArrowRight"||(o.preventDefault(),e(r(t+(o.key==="ArrowLeft"?-16:16))))};return b.jsx("div",{className:"gantt-grid-splitter",style:{left:`${t-2}px`},onPointerDown:s,onDoubleClick:o=>a(o.currentTarget),onKeyDown:n,role:"separator","aria-orientation":"vertical","aria-label":"Resize task list","aria-valuenow":t,"aria-valuemin":Ye,"aria-valuemax":Ce,tabIndex:0})}function hs({width:t,onAdd:e}){return b.jsx("div",{className:"gantt-grid-footer",style:{width:`${t}px`},children:b.jsxs("button",{type:"button",className:"gantt-grid-add",onClick:e,children:[b.jsx("svg",{viewBox:"0 0 12 12","aria-hidden":"true",children:b.jsx("path",{d:"M6 2.5 V9.5 M2.5 6 H9.5"})}),"Add task"]})})}function ms({leftPx:t}){return t===null?null:b.jsx("div",{className:"gantt-today-marker",style:{left:`${t}px`},"aria-hidden":"true"})}function ps({leftPx:t}){return t===null?null:b.jsx("div",{className:"gantt-today-dot",style:{left:`${t}px`},"aria-hidden":"true"})}function ut(t){const e=p.useRef(t);return p.useLayoutEffect(()=>{e.current=t}),e}const gs=400,$s=10;function ne(t,e,r=document){if(t.pointerType==="mouse")return e(t.clientX,t.clientY),null;let s=t.clientX,a=t.clientY,n;const o=()=>{n!==void 0&&clearTimeout(n),n=void 0,r.removeEventListener("pointermove",i),r.removeEventListener("pointerup",c),r.removeEventListener("pointercancel",c)};function i(u){const l=u;if(l.pointerId!==t.pointerId)return;if(Math.abs(l.clientX-t.clientX)+Math.abs(l.clientY-t.clientY)>$s){o();return}s=l.clientX,a=l.clientY}function c(u){u.pointerId===t.pointerId&&o()}return r.addEventListener("pointermove",i),r.addEventListener("pointerup",c),r.addEventListener("pointercancel",c),n=setTimeout(()=>{o(),e(s,a)},gs),o}function re(){const t=e=>e.preventDefault();return document.addEventListener("touchmove",t,{passive:!1}),()=>document.removeEventListener("touchmove",t)}const Ve=.25;function xs({rows:t,virtualItems:e,bodyRef:r,hierarchy:s,move:a}){const n=$t(),o=K(g=>g.reorderDraft),i=ut(t),c=ut(e),u=ut(a),l=p.useRef(null),f=p.useRef(null);p.useEffect(()=>()=>{var g,d;(g=l.current)==null||g.call(l),(d=f.current)==null||d.call(f)},[]);const h=(g,d,m,v)=>{const S=Jt(n.getState().rawTasks,s);try{v.setPointerCapture(d)}catch{}const D=m==="mouse"?null:re(),R=document.body.style.cursor;document.body.style.cursor="grabbing";const N=U=>{const I=r.current;if(!I)return null;const E=U-I.getBoundingClientRect().top,k=c.current.find(X=>E>=X.start&&E<X.start+X.size);if(!k)return null;const y=i.current[k.index],x=y==null?void 0:y.tasks[0];if(!y||!x||y.tasks.length>1)return null;const T=(E-k.start)/k.size,A=T<Ve?"before":T>1-Ve?"after":"child",C=Nr(S,g,x.id,A);return{taskId:g,rowIndex:k.index,mode:A,depth:A==="child"?y.depth+1:y.depth,move:C,rejection:u.current.validate(C)}};let O=null;const _=U=>{U.pointerId===d&&(O=U.clientY,n.getState().setReorderDraft(N(U.clientY)))},L=()=>{D==null||D(),document.body.style.cursor=R,document.removeEventListener("pointermove",_),document.removeEventListener("pointerup",F),document.removeEventListener("pointercancel",$),document.removeEventListener("keydown",j);try{v.releasePointerCapture(d)}catch{}},M=()=>{L(),f.current=null,n.getState().setReorderDraft(null)},$=U=>{U.pointerId===d&&M()};function j(U){U.key==="Escape"&&M()}function F(U){if(U.pointerId!==d)return;const I=O===null?null:N(O)??n.getState().reorderDraft;M(),I!=null&&I.move&&!I.rejection&&u.current.apply(I.move)}f.current=M,document.addEventListener("pointermove",_),document.addEventListener("pointerup",F),document.addEventListener("pointercancel",$),document.addEventListener("keydown",j)};return{onGripPointerDown:(g,d)=>{var R,N;if(!d.isPrimary||d.button!==0||f.current)return;(R=l.current)==null||R.call(l),l.current=null;const m=(N=i.current[g])==null?void 0:N.tasks[0];if(!m)return;const v=d.currentTarget,{pointerId:S,pointerType:D}=d;l.current=ne({pointerType:D,pointerId:S,clientX:d.clientX,clientY:d.clientY},()=>{l.current=null,h(m.id,S,D,v)})},draft:o}}const Ze=5,le=(t,e)=>Math.min(Math.max(t,0),Math.max(e,0));function Ds(t,e,r){var c;const s=r[e.row];if(!s)return null;const a=r.length-1,n=le(e.col,s.cells-1),o=t.key==="ArrowRight"?1:-1,i=t.key==="ArrowLeft"||t.key==="ArrowRight";if(i&&(t.altKey||t.shiftKey)){let u="right";return t.altKey&&(u=t.shiftKey?"left":"bar"),{kind:"nudge",row:e.row,col:n,mode:u,steps:o}}if(t.altKey&&(t.key==="ArrowUp"||t.key==="ArrowDown"))return{kind:"reorder",row:e.row,col:n,delta:t.key==="ArrowDown"?1:-1};if(i&&(t.ctrlKey||t.metaKey))return{kind:"reparent",row:e.row,col:n,direction:o};if((t.ctrlKey||t.metaKey)&&(t.key==="ArrowUp"||t.key==="ArrowDown"))return{kind:"zoom",direction:t.key==="ArrowUp"?-1:1};switch(t.key){case"ArrowDown":return{kind:"focus",focus:{row:Math.min(e.row+1,a),col:n}};case"ArrowUp":return{kind:"focus",focus:{row:Math.max(e.row-1,0),col:n}};case"ArrowRight":return n===0&&s.expandable&&!s.expanded?{kind:"toggle",row:e.row,col:n}:{kind:"focus",focus:{row:e.row,col:le(n+1,s.cells-1)}};case"ArrowLeft":return n===0&&s.expandable&&s.expanded?{kind:"toggle",row:e.row,col:n}:{kind:"focus",focus:{row:e.row,col:le(n-1,s.cells-1)}};case"Home":return t.ctrlKey||t.metaKey?{kind:"focus",focus:{row:0,col:0}}:{kind:"focus",focus:{row:e.row,col:0}};case"End":{const u=t.ctrlKey||t.metaKey?a:e.row;return{kind:"focus",focus:{row:u,col:Math.max((((c=r[u])==null?void 0:c.cells)??1)-1,0)}}}case"Enter":case" ":return s.expandable?{kind:"toggle",row:e.row,col:n}:{kind:"activate",row:e.row,col:n};case"Delete":case"Backspace":return{kind:"delete",row:e.row,col:n};case"+":case"=":return{kind:"progress",row:e.row,col:n,delta:Ze};case"-":case"_":return{kind:"progress",row:e.row,col:n,delta:-Ze};default:return null}}function bs(t,e,r){if(!(!t||!t.tasks.length))return t.tasks[Math.max(0,e-r)]??t.tasks[0]}function kn(t,e,r=null){const s=[t.name];return t.isSummary&&s.push("summary"),s.push(`${e(H(t.startDate))} to ${e(H(t.endDate))}`),r!==null&&s.push(`${r}% complete`),s.join(", ")}function ws(t,e,r,s){const a=s?`under ${s}`:"at the top level";return`${t} moved to ${e} of ${r} ${a}`}function In(t,e,r){var s;return{role:"row","aria-level":t.level,"aria-posinset":t.posinset,"aria-setsize":t.setsize,"aria-rowindex":e+1+r.headerOffset,...r.expandable?{"aria-expanded":r.expanded}:null,...(s=r.ownedIds)!=null&&s.length?{"aria-owns":r.ownedIds.join(" ")}:null}}function vs(t,e,r,s,a,n){const{canMove:o,canResize:i,minDate:c,maxDate:u}=ft(e,n);if((r==="bar"?!o:!i)||!s)return null;const l=new Set(e.isSummary&&r==="bar"?Yt(t,e.id):[e.id]),f=ee(c,u),h=H(e.startDate),w=H(e.endDate);let g=r==="right"?h:kt(h,s,a),d=r==="left"?w:kt(w,s,a),m=null;if(r==="bar"){const S=[];for(const D of t){if(!l.has(D.id))continue;const R=ft(D,n),N=D.id===e.id?f:ee(R.minDate,R.maxDate);N&&S.push({start:D.id===e.id?h:H(D.startDate),end:D.id===e.id?w:H(D.endDate),bounds:N})}if(S.length){if(m=wn(S,g.valueOf()-h.valueOf(),a),m===0)return null;g=h.add(m,"millisecond"),d=w.add(m,"millisecond")}}else if(f){const S=Se(r,g,d,f,a);g=S.startDate,d=S.endDate}if(r!=="bar"&&!d.isAfter(g)||r==="left"&&g.valueOf()===h.valueOf()||r==="right"&&d.valueOf()===w.valueOf())return null;const v=S=>m!==null?H(S).add(m,"millisecond").toISOString():kt(H(S),s,a).toISOString();return t.map(S=>{if(!l.has(S.id))return S;switch(r){case"bar":return{...S,startDate:v(S.startDate),endDate:v(S.endDate)};case"left":return{...S,startDate:g.toISOString()};default:return{...S,endDate:d.toISOString()}}})}function ys(t,e,r,s){if(!ft(e,s).canChangeProgress)return null;const a=_t(e.progress);if(a===null)return null;const n=Math.min(100,Math.max(0,a+r));return n===a?null:t.map(o=>o.id===e.id?{...o,progress:n}:o)}function Ss(t,e,r){if(!ft(e,r).canMove)return null;const s=new Set(Yt(t,e.id));if(!s.size)return null;const a=t.filter(n=>!s.has(n.id));return a.length===t.length?null:a}function Me(t,e){var r;return e&&!!((r=t.tasks[0])!=null&&r.isSummary)}function Je(t){return H(t.endDate).valueOf()}function Ms(t){if(t.length<2)return t.length?[[...t]]:[];const e=t.map((a,n)=>({task:a,index:n})).sort((a,n)=>{const o=H(a.task.startDate).valueOf()-H(n.task.startDate).valueOf();return o!==0?o:a.index-n.index}),r=[],s=[];for(const{task:a}of e){const n=H(a.startDate).valueOf(),o=s.findIndex(i=>i<=n);o===-1?(r.push([a]),s.push(Je(a))):(r[o].push(a),s[o]=Math.max(s[o],Je(a)))}return r}function Os(t){const e=new Map;for(const a of t){if(!a.lane)continue;const n=e.get(a.lane);n?n.push(a):e.set(a.lane,[a])}if(!e.size)return t.map(a=>[a]);const r=[],s=new Set;for(const a of t){if(!a.lane){r.push([a]);continue}s.has(a.lane)||(s.add(a.lane),r.push(...Ms(e.get(a.lane)??[])))}return r}function ks(t){const e=Os(t),r=e.map(i=>i.map(c=>c.id).join("+")),s=[],a=new Map,n=[];e.forEach((i,c)=>{const u=i[0].depth,l=u===0?"":n[u-1]??"";s.push(l),a.set(l,(a.get(l)??0)+1),n[u]=r[c],n.length=u+1});const o=new Map;return e.map((i,c)=>{const u=s[c],l=(o.get(u)??0)+1;o.set(u,l);const f=i[0].depth,h=c+1;return{id:r[c],tasks:i.map(w=>w.order===h?w:{...w,order:h}),depth:f,level:f+1,posinset:l,setsize:a.get(u)??1}})}function Is({rows:t,virtualItems:e,totalHeight:r,width:s,showRowNumbers:a,hierarchy:n,collapsedIds:o,onToggleCollapse:i,focus:c,reorderEnabled:u,interaction:l,move:f,selectedTaskId:h,onRowClick:w,onRowDoubleClick:g}){const d=p.useRef(null),{onGripPointerDown:m,draft:v}=xs({rows:t,virtualItems:e,bodyRef:d,hierarchy:n,move:f}),S=v?e.find(D=>D.index===v.rowIndex):void 0;return b.jsxs("div",{className:"gantt-grid",style:{width:`${s}px`},role:"presentation",children:[b.jsxs("div",{className:"gantt-grid-header",style:{height:`${or}px`},role:"row","aria-rowindex":1,children:[b.jsx("div",{className:"gantt-grid-header-cell",role:"columnheader",children:b.jsx("span",{className:"gantt-sr-only",children:"Task name"})}),b.jsx("span",{className:"gantt-sr-only",role:"columnheader",children:"Timeline"})]}),b.jsxs("div",{ref:d,className:"gantt-grid-body",style:{height:`${r}px`},role:"rowgroup",children:[e.map(D=>{const R=t[D.index];if(!R)return null;const N=R.tasks[0],O=Me(R,n),_=o.has(R.id),L=c.row===D.index,M=In(R,D.index,{headerOffset:1,expandable:O,expanded:!_,ownedIds:R.tasks.map(F=>`task-${F.id}`)}),$={height:`${D.size}px`,transform:`translateY(${D.start}px)`};if(!N)return null;const j=u&&R.tasks.length===1&&ft(N,l).canReorder;return b.jsx("div",{"data-row-id":R.id,className:["gantt-grid-row",N.isSummary?"summary":"",N.id===h?"selected":"",N.id===(v==null?void 0:v.taskId)?"dragging":"",N.className??""].filter(Boolean).join(" "),style:$,onClick:w&&(F=>w(N,F)),onDoubleClick:g&&(F=>g(N,F)),...M,children:b.jsxs("div",{className:"gantt-grid-cell",title:N.name,role:"gridcell",tabIndex:L&&c.col===0?0:-1,"data-gantt-cell":`${D.index}:0`,children:[u&&(j?b.jsx("button",{type:"button",className:"gantt-grid-grip",onPointerDown:F=>{F.stopPropagation(),m(D.index,F)},tabIndex:-1,"aria-hidden":"true",children:b.jsxs("svg",{viewBox:"0 0 12 12","aria-hidden":"true",children:[b.jsx("circle",{cx:"4.5",cy:"2.5",r:"1.1"}),b.jsx("circle",{cx:"7.5",cy:"2.5",r:"1.1"}),b.jsx("circle",{cx:"4.5",cy:"6",r:"1.1"}),b.jsx("circle",{cx:"7.5",cy:"6",r:"1.1"}),b.jsx("circle",{cx:"4.5",cy:"9.5",r:"1.1"}),b.jsx("circle",{cx:"7.5",cy:"9.5",r:"1.1"})]})}):b.jsx("span",{className:"gantt-grid-grip-spacer"})),a&&b.jsx("span",{className:"gantt-grid-no",children:N.sequence}),b.jsx("span",{className:"gantt-grid-indent",style:{width:`${R.depth*He}px`}}),O?b.jsx("button",{type:"button",className:`gantt-grid-expander${_?"":" open"}`,onClick:F=>{F.stopPropagation(),i(R.id)},tabIndex:-1,"aria-hidden":"true",children:b.jsx("svg",{viewBox:"0 0 12 12","aria-hidden":"true",children:b.jsx("path",{d:"M4 2.5 L8 6 L4 9.5"})})}):b.jsx("span",{className:"gantt-grid-expander-spacer"}),b.jsx("span",{className:"gantt-grid-cell-text",children:N.name}),R.tasks.length>1&&b.jsxs("span",{className:"gantt-grid-lane-count",children:["+",R.tasks.length-1]})]})},`grid-row-${R.id}`)}),v&&S&&b.jsx("div",{className:["gantt-grid-drop",v.mode==="child"?"child":"",v.rejection?"blocked":""].filter(Boolean).join(" "),style:v.mode==="child"?{top:`${S.start}px`,height:`${S.size}px`}:{top:`${S.start+(v.mode==="after"?S.size:0)}px`,marginLeft:`${v.depth*He}px`},"aria-hidden":"true"})]})]})}function Es(t,e={},r,s){const a=$t(),n=p.useRef(null),o=p.useRef(!1),i=p.useRef(null),c=p.useRef(e);c.current=e,p.useEffect(()=>()=>{var D;return(D=i.current)==null?void 0:D.call(i)},[]);const u=K(D=>D.selectedScale),{basePxPerDragStep:l}=it[u],{canMove:f,canResize:h,minDate:w,maxDate:g}=ft(t,r),d=D=>{const R=D.currentTarget.getBoundingClientRect(),N=D.pointerType!=="mouse",O=N?hn:jt,_=N?lr:we;if(h&&R.width>=_){const L=D.clientX-R.left;if(L<=O)return"left";if(L>=R.width-O)return"right"}return f?"bar":null},m=D=>{var L;if(!D.isPrimary||D.button!==0||n.current)return;(L=i.current)==null||L.call(i),i.current=null;const R=d(D);if(!R)return;const N=D.currentTarget,{pointerId:O,pointerType:_}=D;i.current=ne({pointerType:_,pointerId:O,clientX:D.clientX,clientY:D.clientY},M=>{i.current=null,v(R,O,_,M,N)})},v=(D,R,N,O,_)=>{o.current=!1;const L=_.closest(".gantt-scroll-container"),M=a.getState().rawTasks,$=t.isSummary?Yt(M,t.id):[t.id],j=new Set($),F=new Map(M.filter(P=>j.has(P.id)).map(P=>[P.id,{start:H(P.startDate),end:H(P.endDate)}]));F.set(t.id,{start:H(t.startDate),end:H(t.endDate)});const U=ee(w,g),I=[];for(const P of M){if(!j.has(P.id))continue;const B=F.get(P.id);if(!B)continue;const W=ft(P,r),rt=P.id===t.id?U:ee(W.minDate,W.maxDate);rt&&I.push({start:B.start,end:B.end,bounds:rt})}n.current={mode:D,pointerId:R,initialClientX:O,initialStartDate:H(t.startDate),initialEndDate:H(t.endDate),initialBarWidth:t.barWidth,dragSteps:0,basePxPerDragStep:l,lastClientX:O,autoScrollPx:0,scaleKey:u,taskId:t.id,taskIds:$,initialDates:F,snapDays:0,bounds:U,boundedMembers:I,moveDeltaMs:null,clamped:null},a.getState().setCurrentTask(t),a.getState().setDragMode(D),_.focus({preventScroll:!0});try{_.setPointerCapture(R)}catch{}const E=N==="mouse"?null:re(),k=()=>{const P=n.current;if(!P)return;const B=P.lastClientX-P.initialClientX+P.autoScrollPx,W=Math.round(B/P.basePxPerDragStep),rt=Math.floor((P.initialBarWidth-P.basePxPerDragStep)/P.basePxPerDragStep);let nt=W;if(P.mode==="left"&&(nt=Math.min(W,rt)),P.mode==="right"&&(nt=Math.max(W,-rt)),nt===P.dragSteps)return;P.dragSteps=nt,o.current=!0;const at=nt*P.basePxPerDragStep,xt=Y=>kt(Y,nt,P.scaleKey);let V,st,Q=0,q=0;switch(P.mode){case"bar":V=xt(P.initialStartDate),st=xt(P.initialEndDate),Q=at,q=0;break;case"left":V=xt(P.initialStartDate),st=P.initialEndDate,Q=at,q=-at;break;case"right":V=P.initialStartDate,st=xt(P.initialEndDate),Q=0,q=at;break}let ct=0;if(s!=null&&s.skipsNonWorkingDays){const Y=P.mode==="right"?st:V,G=s.snapForward(Y);ct=G.diff(Y,"day"),P.mode==="left"&&G.valueOf()>=st.valueOf()&&(ct=0)}P.snapDays=ct;const mt=ct?ce(V,V.add(ct,"day"),P.scaleKey):0;if(ct&&(P.mode!=="right"&&(V=V.add(ct,"day"),Q+=mt),P.mode!=="left"&&(st=st.add(ct,"day")),P.mode==="left"&&(q-=mt),P.mode==="right"&&(q+=mt)),P.mode==="bar"){if(P.boundedMembers.length){const Y=V.valueOf()-P.initialStartDate.valueOf(),G=wn(P.boundedMembers,Y,P.scaleKey);P.moveDeltaMs=G,V=P.initialStartDate.add(G,"millisecond"),st=P.initialEndDate.add(G,"millisecond")}}else if(P.bounds){const Y=Se(P.mode,V,st,P.bounds,P.scaleKey);P.clamped=Y,V=Y.startDate,st=Y.endDate}if(P.moveDeltaMs!==null||P.clamped){const Y=ce(P.initialStartDate,V,P.scaleKey),G=ce(P.initialEndDate,st,P.scaleKey);Q=Y,q=G-Y}const wt=P.moveDeltaMs!==null?Y=>Y.add(P.moveDeltaMs,"millisecond"):Y=>xt(Y).add(ct,"day"),Dt=P.moveDeltaMs!==null?Q:at+mt,Z={};for(const Y of P.taskIds){const G=P.initialDates.get(Y),ot=Y===P.taskId||!G,pt=ot?V:wt(G.start),lt=ot?st:wt(G.end);Z[Y]={offsetX:ot?Q:Dt,offsetWidth:ot?q:0,offsetStartDate:pt,offsetEndDate:lt}}a.getState().setDragOffsets(Z)};let y=null,x=0;const T=()=>{y!==null&&cancelAnimationFrame(y),y=null,x=0},A=P=>{!L||!P.autoScrollPx||(L.scrollBy({left:-P.autoScrollPx,behavior:"smooth"}),P.autoScrollPx=0)},C=()=>{y=null;const P=n.current;if(!P||!L||x===0)return;const B=L.scrollLeft;L.scrollLeft=B+x;const W=L.scrollLeft-B;W!==0&&(P.autoScrollPx+=W,k()),y=requestAnimationFrame(C)},X=P=>{if(c.current.autoScroll===!1||!L)return;const B=L.getBoundingClientRect(),W=L.querySelector(".gantt-grid");x=me(P,B.left+((W==null?void 0:W.offsetWidth)??0),B.right),x===0?T():y===null&&(y=requestAnimationFrame(C))},z=P=>{const B=n.current;!B||P.pointerId!==B.pointerId||(B.lastClientX=P.clientX,X(P.clientX),k())},J=()=>{T(),document.removeEventListener("pointermove",z),document.removeEventListener("pointerup",et),document.removeEventListener("pointercancel",ht),E==null||E()},tt=P=>{A(P),n.current=null,a.getState().setCurrentTask(null),a.getState().setDragMode(null),a.getState().clearDragOffsets(P.taskIds)},ht=P=>{const B=n.current;B&&P.pointerId!==B.pointerId||(J(),B&&tt(B))},et=P=>{var ct,mt,wt,Dt;const B=n.current;if(B&&P.pointerId!==B.pointerId)return;J();const W=B;if(!W)return;if(W.dragSteps===0){tt(W);return}const rt=a.getState().rawTasks,nt=Z=>W.moveDeltaMs!==null?H(Z).add(W.moveDeltaMs,"millisecond").toISOString():kt(H(Z),W.dragSteps,W.scaleKey).add(W.snapDays,"day").toISOString(),at=(ct=W.clamped)==null?void 0:ct.startDate.toISOString(),xt=(mt=W.clamped)==null?void 0:mt.endDate.toISOString(),V=new Set(W.taskIds),st=rt.map(Z=>{if(!V.has(Z.id))return Z;switch(W.mode){case"bar":return{...Z,startDate:nt(Z.startDate),endDate:nt(Z.endDate)};case"left":return{...Z,startDate:at??nt(Z.startDate)};case"right":return{...Z,endDate:xt??nt(Z.endDate)}}});n.current=null,a.getState().setCurrentTask(null),a.getState().setDragMode(null);const Q=new Map(st.filter(Z=>V.has(Z.id)).map(Z=>[Z.id,Z])),q=a.getState().rawTasks.map(Z=>Q.get(Z.id)??Z);a.getState().setRawTasks(q),(Dt=(wt=c.current).onTasksChange)==null||Dt.call(wt,q)};document.addEventListener("pointermove",z),document.addEventListener("pointerup",et),document.addEventListener("pointercancel",ht)};return{onPointerDown:m,consumeDragClick:()=>o.current?(o.current=!1,!0):!1}}const ue={hoverTaskId:null,hoverAnchor:null,rejection:null};function Ps({task:t,interaction:e,onTasksChange:r,onDependencyCreate:s}){const a=$t(),n=p.useRef(null),o=p.useRef(null);return p.useEffect(()=>()=>{var c;return(c=o.current)==null?void 0:c.call(o)},[]),{startLink:c=>u=>{if(!u.isPrimary||u.button!==0||n.current!==null)return;u.stopPropagation(),u.preventDefault();const l=u.currentTarget,f=l.closest(".gantt-content"),h=l.closest(".gantt-scroll-container");if(!f)return;const w=u.pointerId;n.current=w;try{l.setPointerCapture(w)}catch{}const g=u.clientX,d=u.clientY;let m=!1,v=g,S=d;const D=document.body.style.cursor,R=(x,T)=>{const A=f.getBoundingClientRect(),C=es(a.getState().rowTasks,x-A.left,T-A.top,bt,dr);if(!C)return ue;const X=a.getState().rawTasks,z=X.find(tt=>tt.id===C.task.id);return C.task.id===t.id||z!==void 0&&ft(z,e).canCreateLink?{hoverTaskId:C.task.id,hoverAnchor:C.anchor,rejection:ns(X,t.id,C.task.id)}:ue},N=(x,T)=>{const A=f.getBoundingClientRect();a.getState().setLinkDraft({fromTaskId:t.id,fromAnchor:c,toX:x-A.left,toY:T-A.top,...R(x,T)})};let O=null,_=0,L=0;const M=()=>{O!==null&&cancelAnimationFrame(O),O=null,_=0,L=0},$=()=>{if(O=null,!h||_===0&&L===0)return;const x=h.scrollLeft,T=h.scrollTop;if(h.scrollLeft=x+_,h.scrollTop=T+L,h.scrollLeft===x&&h.scrollTop===T){M();return}N(v,S),O=requestAnimationFrame($)},j=(x,T)=>{if(!h)return;const A=h.getBoundingClientRect(),C=h.querySelector(".gantt-grid");_=me(x,A.left+((C==null?void 0:C.offsetWidth)??0),A.right),L=me(T,A.top,A.bottom),_===0&&L===0?M():O===null&&(O=requestAnimationFrame($))},F=x=>{if(x.pointerId===w){if(v=x.clientX,S=x.clientY,!m){if(Math.abs(v-g)<Ue&&Math.abs(S-d)<Ue)return;m=!0,a.getState().setSelectedDependency(null),document.body.style.cursor="crosshair"}j(v,S),N(v,S)}},U=()=>{M(),document.body.style.cursor=D,document.removeEventListener("pointermove",F),document.removeEventListener("pointerup",y),document.removeEventListener("pointercancel",E),document.removeEventListener("keydown",k);try{l.releasePointerCapture(w)}catch{}},I=()=>{U(),o.current=null,n.current=null,a.getState().setLinkDraft(null)},E=x=>{x.pointerId===w&&I()};function k(x){x.key==="Escape"&&I()}function y(x){if(x.pointerId!==w)return;const A=m?R(x.clientX,x.clientY):ue;if(I(),!A.hoverTaskId||!A.hoverAnchor||A.rejection)return;const C={predecessorId:t.id,successorId:A.hoverTaskId,type:On(c,A.hoverAnchor)};if((s==null?void 0:s(C))===!1)return;const X=ss(a.getState().rawTasks,C.predecessorId,C.successorId,C.type);a.getState().setRawTasks(X),r==null||r(X)}o.current=I,document.addEventListener("pointermove",F),document.addEventListener("pointerup",y),document.addEventListener("pointercancel",E),document.addEventListener("keydown",k)}}}function Ts(t,e,r={}){const s=$t(),[a,n]=p.useState(null),o=p.useRef(null),i=p.useRef(null);p.useEffect(()=>()=>{var h;return(h=i.current)==null?void 0:h.call(i)},[]);const c=h=>{const w=e.current;if(!w)return null;const g=w.getBoundingClientRect();if(g.width===0)return null;const d=(h-g.left)/g.width;return Math.round(Math.min(1,Math.max(0,d))*100)},{onTasksChange:u}=r,l=h=>{var g;h.stopPropagation(),h.preventDefault(),(g=i.current)==null||g.call(i),i.current=null;const{pointerType:w}=h;i.current=ne({pointerType:w,pointerId:h.pointerId,clientX:h.clientX,clientY:h.clientY},()=>{i.current=null,f(w)})},f=h=>{const w=h==="mouse"?null:re(),g=m=>{const v=c(m.clientX);v!==null&&(o.current=v,n(v))},d=()=>{document.removeEventListener("pointermove",g),document.removeEventListener("pointerup",d),document.removeEventListener("pointercancel",d),w==null||w();const m=o.current;if(o.current=null,m===null){n(null);return}const v=s.getState().rawTasks.map(S=>S.id===t.id?{...S,progress:m}:S);s.getState().setRawTasks(v),n(null),u==null||u(v)};document.addEventListener("pointermove",g),document.addEventListener("pointerup",d),document.addEventListener("pointercancel",d)};return{onProgressPointerDown:l,progress:a??_t(t.progress),isDraggingProgress:a!==null}}function Ls({currentTask:t,options:e,interaction:r,tabIndex:s,cellCoord:a,calendar:n,autoScrollOnDrag:o,onDependencyCreate:i}){const{onTasksChange:c,onTaskActivate:u,onTaskDoubleClick:l,showTooltip:f=!0}=e,h=p.useRef(null),{onPointerDown:w,consumeDragClick:g}=Es(t,{onTasksChange:c,autoScroll:o},r,n),{canMove:d,canResize:m,canChangeProgress:v,canCreateLink:S}=ft(t,r),[D,R]=p.useState(!1),[N,O]=p.useState(!1),_=$t(),L=K(Y=>Y.setHoveredTaskId),M=p.useRef(null),$=p.useCallback(()=>{M.current!==null&&(clearTimeout(M.current),M.current=null)},[]);p.useEffect(()=>{const Y=t.id;return()=>{$(),_.getState().hoveredTaskId===Y&&_.getState().setHoveredTaskId(null)}},[t.id,$,_]);const{startLink:j}=Ps({task:t,interaction:r,onTasksChange:c,onDependencyCreate:i}),F=K(Y=>{const G=Y.linkDraft;return G?G.hoverTaskId===t.id?` link-${G.rejection?"invalid":"valid"} link-at-${G.hoverAnchor}`:G.fromTaskId===t.id?` link-source link-at-${G.fromAnchor}`:"":""}),U=S&&b.jsx(b.Fragment,{children:["start","end"].map(Y=>b.jsx("span",{className:`gantt-link-handle ${Y}`,onPointerDown:j(Y),role:"button",tabIndex:-1,"aria-label":`Link from the ${Y} of ${t.name}`},Y))}),I=K(Y=>Y.dragOffsets[t.id]),E=K(Y=>{var G;return((G=Y.currentTask)==null?void 0:G.id)===t.id}),k=K(Y=>Y.dragMode),y=K(Y=>Y.selectedScale),x=K(Y=>Y.localeOptions),T=K(Y=>Y.selectedTaskId===t.id),A=(I==null?void 0:I.offsetX)??0,C=(I==null?void 0:I.offsetWidth)??0,X=t.barLeft+A,z=t.barWidth+C,J=Math.max(z,ur),tt=J<cr,{onProgressPointerDown:ht,progress:et,isDraggingProgress:P}=Ts(t,h,{onTasksChange:c}),B=et!==null,W=p.useCallback(Y=>{const G=h.current;if(!G)return;const ot=G.getBoundingClientRect();if(ot.width<we){R(!1);return}const pt=Y.clientX-ot.left;R(pt<=jt||pt>=ot.width-jt)},[]),rt=Y=>{g()||u==null||u(t,Y)},nt=Y=>{l==null||l(t,Y)},at=d?"grab":"default",xt=E?d||m?"grabbing":at:D&&m?"ew-resize":at,{tooltip:V}=p.useMemo(()=>Lt(y,x),[y,x]),st=kn(t,V,B?et:null),Q=Y=>{if(!I)return"";const G=V(I.offsetStartDate),ot=V(I.offsetEndDate);switch(Y){case"left":return`Start: ${G}`;case"right":return`End: ${ot}`;case"bar":default:return`${G} → ${ot}`}},q=f?P?"progress":E&&I?k==="left"||k==="right"?"resize":"move":N?"hover":null:null;p.useEffect(()=>{if(!N)return;const Y=G=>{G.key==="Escape"&&O(!1)};return document.addEventListener("keydown",Y),()=>document.removeEventListener("keydown",Y)},[N]);const ct=()=>{if(!q)return null;const Y=q!=="hover",G=Y&&I?I.offsetStartDate:H(t.startDate),ot=Y&&I?I.offsetEndDate:H(t.endDate);return q==="progress"?b.jsxs("div",{className:"gantt-bar-tooltip",role:"status","aria-live":"polite",children:[et,"%"]}):Y?b.jsx("div",{className:"gantt-bar-tooltip gantt-sr-only",role:"status","aria-live":"polite",children:Q(k)}):b.jsxs("div",{className:"gantt-bar-tooltip gantt-bar-tooltip-detail",role:"tooltip",children:[b.jsx("span",{className:"gantt-tooltip-name",children:t.name}),b.jsx("span",{className:"gantt-tooltip-meta",children:`${V(G)} → ${V(ot)}`}),b.jsxs("span",{className:"gantt-tooltip-meta",children:[$n(ot.valueOf()-G.valueOf()),et!==null?` · ${et}%`:""]})]})},mt=Vr(t.color),wt={transform:`translateX(${X}px)`,width:J,height:t.isSummary?sr:fe,cursor:xt,...mt},Dt=[T?"selected":"",t.className??""].filter(Boolean).join(" "),Z=Dt?` ${Dt}`:"";return b.jsxs("div",{ref:h,id:`task-${t.id}`,"data-task-id":t.id,className:`gantt-task-bar${E?" dragging":""}${q?" has-tooltip":""}${tt?" compact":""}${t.isSummary?" summary":""}${m?"":" no-resize"}${F}${Z}`,onPointerDown:w,onClick:rt,onDoubleClick:nt,onMouseMove:W,onPointerEnter:Y=>{Y.pointerType==="mouse"&&(L(t.id),$(),M.current=setTimeout(()=>O(!0),fr))},onMouseLeave:()=>{R(!1),L(null),$(),O(!1)},style:wt,role:"gridcell",tabIndex:s,"data-gantt-cell":a,"aria-label":st,children:[B&&b.jsxs(b.Fragment,{children:[b.jsx("div",{className:"gantt-progress-fill",style:{width:`${et}%`}}),v&&b.jsx("div",{className:`gantt-progress-handle${P?" dragging":""}`,style:{left:`clamp(${Fe}px, ${et}%, calc(100% - ${Fe}px))`},onPointerDown:ht,role:"slider",tabIndex:-1,"aria-label":`${t.name} progress`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":et})]}),b.jsx("span",{className:`gantt-task-name${tt?" outside":""}`,children:t.name}),U,ct()]})}function As({rows:t,virtualItems:e,gridColumnCount:r,focus:s,isBarVisible:a,options:n,interaction:o,calendar:i,autoScrollOnDrag:c,onDependencyCreate:u}){return e.flatMap(l=>{const f=t[l.index];return f?f.tasks.map((h,w)=>{if(!a(h.barLeft,h.barWidth))return null;const g=r+w;return b.jsx("div",{className:"gantt-bar-wrap",style:{position:"absolute",top:0,left:0,height:`${l.size-1}px`,transform:`translateY(${l.start}px)`,display:"flex",alignItems:"center"},children:b.jsx(Ls,{currentTask:h,options:n,interaction:o,calendar:i,autoScrollOnDrag:c,onDependencyCreate:u,tabIndex:s.row===l.index&&s.col===g?0:-1,cellCoord:`${l.index}:${g}`})},h.id)}):[]})}function Rs({ranges:t}){const e=K(a=>a.bottomRowCells),r=p.useMemo(()=>un(e),[e]),s=p.useMemo(()=>{const a=new Set;return t.flatMap(n=>{if(!n.label)return[];const o=Qt(r,n.left),i=Qt(r,n.left+n.width-1);if(!o||!i)return[];const c=n.width>=pr&&!a.has(o.index);return c&&a.add(o.index),[{label:n.label,shown:c,left:n.left,width:n.width,cellLeft:o.left-n.left,cellWidth:i.left+i.width-o.left}]})},[t,r]);return s.length?b.jsx("div",{className:"gantt-holiday-labels",children:s.map(a=>b.jsx("div",{className:"gantt-holiday-band",style:{left:`${a.left}px`,width:`${a.width}px`},children:b.jsx("div",{className:`gantt-holiday-cell${a.shown?" shown":""}`,style:{left:`${a.cellLeft}px`,width:`${a.cellWidth}px`},children:b.jsx("span",{children:a.label})})},a.left))}):null}function Ns({ranges:t}){return t.length?b.jsx("div",{className:"gantt-non-working-layer","aria-hidden":"true",children:t.map(e=>b.jsx("div",{className:"gantt-non-working-range",style:{left:`${e.left}px`,width:`${e.width}px`,...e.color&&{background:`color-mix(in srgb, ${e.color} 14%, transparent)`}}},e.left))}):null}function js({rows:t,virtualItems:e,ownedByTaskList:r,hierarchy:s,collapsedIds:a}){return b.jsx("div",{className:"gantt-rows",role:"presentation",children:e.map(n=>{const o=t[n.index];if(!o)return null;const i={height:`${n.size}px`,transform:`translateY(${n.start}px)`};return r?b.jsx("div",{className:"gantt-task-row",style:i,"aria-hidden":"true"},`row-${o.id}`):b.jsx("div",{className:"gantt-task-row",style:i,...In(o,n.index,{headerOffset:0,expandable:Me(o,s),expanded:!a.has(o.id),ownedIds:o.tasks.map(c=>`task-${c.id}`)})},`row-${o.id}`)})})}const _s=[];function Ys({collapsedIds:t,defaultCollapsedIds:e,onCollapsedChange:r}){const[s,a]=p.useState(()=>e??_s),n=t??s,o=p.useMemo(()=>new Set(n),[n]),i=p.useCallback(l=>{t===void 0&&a(l),r==null||r(l)},[t,r]),c=p.useCallback(l=>{i(n.includes(l)?n.filter(f=>f!==l):[...n,l])},[n,i]),u=p.useCallback(l=>{n.includes(l)&&i(n.filter(f=>f!==l))},[n,i]);return{collapsedIds:o,toggle:c,expand:u}}const Qe=4;function Cs(t,e,r){const s=It(t,e,r)??0,a=yn(s,s,e,r);return a?{startDate:a.startDate.toISOString(),endDate:a.endDate.toISOString()}:null}function Hs(t,e){const r=e*bt;return t<r?null:r}function Fs({enabled:t,rowCount:e,onTaskCreate:r}){const s=$t(),[a,n]=p.useState(null),o=p.useRef(null),i=p.useRef(null),c=l=>{var w;if(!t||!l.isPrimary||l.button!==0||o.current!==null||l.target!==l.currentTarget)return;(w=i.current)==null||w.call(i),i.current=null;const f=l.currentTarget,h=l.pointerId;i.current=ne({pointerType:l.pointerType,pointerId:h,clientX:l.clientX,clientY:l.clientY},(g,d)=>{i.current=null,u(f,h,l.pointerType,g,d)})},u=(l,f,h,w,g)=>{const d=l.getBoundingClientRect(),m=w-d.left,v=Hs(g-d.top,e);if(v===null)return;o.current=f;const S=h==="mouse"?null:re(),D=$=>{const{bottomRowCells:j,selectedScale:F}=s.getState(),U=l.getBoundingClientRect();return yn(m,$-U.left,j,F)},R=$=>{if($.pointerId!==f)return;const j=l.getBoundingClientRect();if(Math.abs($.clientX-j.left-m)<Qe){n(null);return}const F=D($.clientX);n(F&&{leftPx:F.leftPx,widthPx:F.widthPx,topPx:v})},N=()=>{document.removeEventListener("pointermove",R),document.removeEventListener("pointerup",M),document.removeEventListener("pointercancel",_),document.removeEventListener("keydown",L)},O=()=>{N(),S==null||S(),o.current=null,n(null)},_=$=>{$.pointerId===f&&O()},L=$=>{$.key==="Escape"&&O()},M=$=>{if($.pointerId!==f)return;const j=l.getBoundingClientRect(),U=Math.abs($.clientX-j.left-m)>=Qe?D($.clientX):null;O(),U&&(r==null||r({startDate:U.startDate.toISOString(),endDate:U.endDate.toISOString()}))};document.addEventListener("pointermove",R),document.addEventListener("pointerup",M),document.addEventListener("pointercancel",_),document.addEventListener("keydown",L)};return{onDrawPointerDown:c,ghost:a}}function Us({readOnly:t,allowMove:e,allowResize:r,allowProgressChange:s,allowLinkCreate:a,allowLinkDelete:n,allowTaskCreate:o,allowReorder:i,minDate:c,maxDate:u}){return p.useMemo(()=>({readOnly:t,allowMove:e,allowResize:r,allowProgressChange:s,allowLinkCreate:a,allowLinkDelete:n,allowTaskCreate:o,allowReorder:i,minDate:c,maxDate:u}),[t,e,r,s,a,n,o,i,c,u])}const Ws=3;function Gs({rows:t,rawTasks:e,gridColumnCount:r,hierarchy:s,collapsedIds:a,selectedScale:n,localeOptions:o,interaction:i,onActivate:c,onToggleCollapse:u,onTasksChange:l,move:f,scrollToRow:h,scrollApi:w,bodyRef:g}){const d=$t(),[m,v]=p.useState({row:0,col:0}),[S,D]=p.useState(0),[R,N]=p.useState(""),O=p.useMemo(()=>({row:Math.min(m.row,Math.max(t.length-1,0)),col:m.col}),[m,t.length]),_=p.useMemo(()=>t.map(U=>({cells:Math.max(r+U.tasks.length,1),firstBarCell:r,expandable:Me(U,s),expanded:!a.has(U.id)})),[t,r,s,a]),{tooltip:L}=p.useMemo(()=>Lt(n,o),[n,o]),M=p.useCallback(U=>{d.getState().setRawTasks(U),l==null||l(U)},[d,l]),$=p.useCallback(U=>{const I=d.getState().rawTasks,E=Jt(I,s),k=E.parentOf.get(U.id)??null,y=E.childrenOf(k),x=I.find(T=>T.id===k);N(ws(U.name,y.indexOf(U.id)+1,y.length,(x==null?void 0:x.name)??null)),D(T=>T+1)},[d,s]),j=p.useCallback(U=>{const I=Ds(U,O,_);if(!I)return;if(U.preventDefault(),I.kind==="zoom"){const x=xn(n,I.direction);x!==n&&(w.setScale(x),N(`${x} scale`));return}const E=t[I.kind==="focus"?O.row:I.row],k=_[O.row],y=I.kind==="focus"?void 0:bs(E,I.col,(k==null?void 0:k.firstBarCell)??0);switch(I.kind){case"focus":v(I.focus),D(x=>x+1);break;case"toggle":E&&u(E.id);break;case"activate":y&&(c==null||c(y.id),N(kn(y,L,null)));break;case"delete":{if(!y)return;const x=Ss(e,y,i);if(!x){N(`${y.name} cannot be deleted`);break}M(x),N(`${y.name} deleted`);break}case"nudge":{if(!y)return;const x=vs(e,y,I.mode,I.steps,n,i);if(!x){N(`${y.name} cannot be changed`);break}M(x);const T=x.find(A=>A.id===y.id);T&&N(`${y.name}, ${L(H(T.startDate))} to ${L(H(T.endDate))}`),D(A=>A+1);break}case"progress":{if(!y)return;const x=ys(e,y,I.delta,i);if(!x){N(`${y.name} progress cannot be changed`);break}M(x);const T=x.find(A=>A.id===y.id);N(`${y.name}, ${(T==null?void 0:T.progress)??0}% complete`),D(A=>A+1);break}case"reorder":{if(!y)return;const x=Jt(e,s),T=x.parentOf.get(y.id)??null,A=x.childrenOf(T),C=A.indexOf(y.id)+I.delta;if(C<0||C>=A.length)break;f.apply({taskId:y.id,toParentId:T,toIndex:C})&&$(y);break}case"reparent":{if(!y||!s)return;const x=Jt(e,s),T=x.parentOf.get(y.id)??null,A=x.childrenOf(T);if(I.direction>0){const z=A[A.indexOf(y.id)-1];if(!z)break;f.apply({taskId:y.id,toParentId:z,toIndex:x.childrenOf(z).length})&&$(y);break}if(!T)break;const C=x.parentOf.get(T)??null,X=x.childrenOf(C);f.apply({taskId:y.id,toParentId:C,toIndex:X.indexOf(T)+1})&&$(y);break}}},[O,_,t,c,u,e,i,n,w,M,L,s,f,$]),F=p.useCallback(U=>{var y,x,T;const I=(T=(x=(y=U.target).closest)==null?void 0:x.call(y,"[data-gantt-cell]"))==null?void 0:T.getAttribute("data-gantt-cell");if(!I)return;const[E,k]=I.split(":").map(Number);v(A=>A.row===E&&A.col===k?A:{row:E,col:k})},[]);return p.useEffect(()=>{if(!S)return;let U=Ws,I=0;const E=()=>{var x,T;const k=(x=g.current)==null?void 0:x.querySelector(`[data-gantt-cell="${O.row}:${O.col}"]`);if(k){k.focus({preventScroll:!0}),k.scrollIntoView({block:"nearest",inline:"nearest"});return}if(--U<=0)return;h(O.row,"auto");const y=(T=t[O.row])==null?void 0:T.tasks[0];y&&w.scrollToTask(y.id,{smooth:!1}),I=requestAnimationFrame(E)};return E(),()=>cancelAnimationFrame(I)},[S]),{focus:O,announcement:R,onKeyDown:j,onFocusCapture:F}}function Xs({rawTasks:t,tasks:e,hierarchy:r,collapsedIds:s}){const a=p.useMemo(()=>r?Ot(t):void 0,[r,t]),n=p.useMemo(()=>!r||!s.size?e:Lr(e,s,a),[r,s,e,a]),o=p.useMemo(()=>ks(n),[n]),i=p.useMemo(()=>o.flatMap(c=>c.tasks),[o]);return{rows:o,tasks:i}}const tn=t=>Symbol.iterator in t,en=t=>"entries"in t,nn=(t,e)=>{const r=t instanceof Map?t:new Map(t.entries()),s=e instanceof Map?e:new Map(e.entries());if(r.size!==s.size)return!1;for(const[a,n]of r)if(!s.has(a)||!Object.is(n,s.get(a)))return!1;return!0},Bs=(t,e)=>{const r=t[Symbol.iterator](),s=e[Symbol.iterator]();let a=r.next(),n=s.next();for(;!a.done&&!n.done;){if(!Object.is(a.value,n.value))return!1;a=r.next(),n=s.next()}return!!a.done&&!!n.done};function zs(t,e){return Object.is(t,e)?!0:typeof t!="object"||t===null||typeof e!="object"||e===null||Object.getPrototypeOf(t)!==Object.getPrototypeOf(e)?!1:tn(t)&&tn(e)?en(t)&&en(e)?nn(t,e):Bs(t,e):nn({entries:()=>Object.entries(t)},{entries:()=>Object.entries(e)})}function qs(t){const e=p.useRef(void 0);return r=>{const s=t(r);return zs(e.current,s)?e.current:e.current=s}}function Ks(){return K(qs(t=>({rawTasks:t.rawTasks,transformedTasks:t.transformedTasks,bottomRowCells:t.bottomRowCells,selectedScale:t.selectedScale,selectedTaskId:t.selectedTaskId,syncTasksFromProps:t.syncTasksFromProps,setSelectedScale:t.setSelectedScale,setLocaleOptions:t.setLocaleOptions,getTotalWidth:t.getTotalWidth})))}function Vs({selectable:t,onTaskSelect:e,onTaskClick:r}){const s=$t(),a=t??e!==void 0,n=p.useCallback(i=>{if(!a)return;const c=(i==null?void 0:i.id)??null;s.getState().selectedTaskId!==c&&(s.getState().setSelectedTaskId(c),e==null||e(i))},[a,e,s]),o=p.useCallback((i,c)=>{r==null||r(i,c),n(i)},[r,n]);return{select:n,onTaskActivate:o}}function Zs(t,e){const{canResize:r,canChangeProgress:s}=ft(t,e);return{name:!(t.readOnly??(e==null?void 0:e.readOnly)??!1),dates:r,progress:s}}function Js(t,e){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return null;const r=H(`${e}T${H(t).format("HH:mm:ss.SSS")}`);return r.isValid()?r:null}const Qs=(t,e,r)=>e&&t.isBefore(H(e))?H(e):r&&t.isAfter(H(r))?H(r):t;function to(t,e,r,s){switch(e){case"name":return r.trim()===""?null:{name:r};case"progress":{const a=r.trim()===""?null:_t(Number(r));return a===null?null:{progress:a}}default:{const{minDate:a,maxDate:n}=ft(t,s),o=Js(t[e],r);if(o===null)return null;const i=Qs(o,a,n),c=e==="startDate"?i:H(t.startDate);return(e==="endDate"?i:H(t.endDate)).isAfter(c)?{[e]:i.toISOString()}:null}}}function eo(t,e,r){return t.map(s=>s.id===e?{...s,...r}:s)}function no(t,e,r,s){const{rawTasks:a,setRawTasks:n}=t.getState(),o=eo(a,e,r);n(o),s==null||s(o)}function de({value:t,commit:e,...r}){const[s,a]=p.useState(t),[n,o]=p.useState(t);n!==t&&(o(t),a(t));const i=()=>{s!==t&&e(s),a(t)};return b.jsx("input",{className:"gantt-detail-input",...r,value:s,onChange:c=>a(c.target.value),onBlur:i,onKeyDown:c=>{c.key==="Enter"&&i(),c.key==="Escape"&&(c.stopPropagation(),a(t))}})}function ro({task:t,tasks:e,scale:r,localeOptions:s,interaction:a,onClose:n,onTasksChange:o,render:i,open:c,onTransitionEnd:u}){const l=p.useRef(null),f=$t(),h=p.useId(),w=p.useRef(null);p.useEffect(()=>{const L=l.current;return w.current=document.activeElement,()=>{const M=document.activeElement;if(!(M===null||M===document.body||((L==null?void 0:L.contains(M))??!1)))return;const j=w.current;j instanceof HTMLElement&&j.isConnected&&j.focus({preventScroll:!0})}},[]),p.useEffect(()=>{const L=M=>{M.key==="Escape"&&n()};return document.addEventListener("keydown",L),()=>document.removeEventListener("keydown",L)},[n]);const{tooltip:g}=p.useMemo(()=>Lt(r,s),[r,s]),d=p.useCallback(L=>no(f,t.id,L,o),[f,t.id,o]),m=p.useCallback((L,M)=>{const $=to(t,L,M,a);$&&d($)},[t,a,d]),v=Zs(t,a),S=_t(t.progress),D=H(t.startDate),R=H(t.endDate),N=(t.dependencies??[]).map(L=>{var M;return((M=e.find($=>$.id===L.targetId))==null?void 0:M.name)??L.targetId}),O=(L,M)=>b.jsx(de,{id:`${h}-${L}`,type:"date",value:H(M).format("YYYY-MM-DD"),commit:$=>m(L,$)}),_=[v.dates?{caption:"Start",inputId:`${h}-startDate`,value:O("startDate",t.startDate)}:{caption:"Start",value:g(D)},v.dates?{caption:"End",inputId:`${h}-endDate`,value:O("endDate",t.endDate)}:{caption:"End",value:g(R)},{caption:"Duration",value:$n(R.valueOf()-D.valueOf())}];return S!==null&&_.push(v.progress?{caption:"Progress",inputId:`${h}-progress`,value:b.jsx(de,{id:`${h}-progress`,type:"number",min:0,max:100,step:1,value:String(S),commit:L=>m("progress",L)})}:{caption:"Progress",value:`${S}%`}),N.length>0&&_.push({caption:"Depends on",value:N.join(", ")}),b.jsx("aside",{ref:l,className:c?"gantt-detail gantt-detail-open":"gantt-detail",role:"complementary","aria-label":"Task details",onTransitionEnd:u,children:i?i({task:t,close:n,scale:r,update:d}):b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:"gantt-detail-header",children:[v.name?b.jsx(de,{type:"text","aria-label":"Task name",value:t.name,commit:L=>m("name",L)}):b.jsx("h2",{className:"gantt-detail-title",children:t.name}),b.jsx("button",{type:"button",className:"gantt-detail-close",onClick:n,"aria-label":"Close task details",children:"✕"})]}),b.jsx("dl",{className:"gantt-detail-fields",children:_.map(({caption:L,value:M,inputId:$})=>b.jsxs(p.Fragment,{children:[b.jsx("dt",{children:$?b.jsx("label",{htmlFor:$,children:L}):L}),b.jsx("dd",{children:M})]},L))})]})})}function so({enabled:t,detailTaskId:e,uncontrolled:r,tasks:s}){if(!t)return{openId:null,task:null,stale:!1};const a=e!==void 0?e:r;if(a===null)return{openId:null,task:null,stale:!1};const n=s.find(o=>o.id===a)??null;return{openId:a,task:n,stale:n===null}}function oo({enabled:t,tasks:e,detailTaskId:r,onDetailChange:s,onTaskActivate:a}){const[n,o]=p.useState(null),i=r!==void 0,{openId:c,task:u}=p.useMemo(()=>so({enabled:t,detailTaskId:r,uncontrolled:n,tasks:e}),[t,r,n,e]),l=p.useCallback(g=>{t&&g!==c&&(i||o(g),s==null||s(g?e.find(d=>d.id===g)??null:null))},[t,c,i,s,e]),f=p.useCallback(g=>{e.some(d=>d.id===g)&&l(g)},[l,e]),h=p.useCallback(()=>l(null),[l]),w=p.useCallback((g,d)=>{a==null||a(g,d),l(g.id)},[a,l]);return{task:u,open:f,close:h,onTaskActivate:w}}const ao=400;function io(t){const[e,r]=p.useState(t),[s,a]=p.useState(!1);t!==null&&t!==e&&r(t);const n=t!==null;p.useEffect(()=>{let i=requestAnimationFrame(()=>{if(!n){a(!1);return}i=requestAnimationFrame(()=>a(!0))});return()=>cancelAnimationFrame(i)},[n]),p.useEffect(()=>{if(n||e===null)return;const i=setTimeout(()=>r(null),ao);return()=>clearTimeout(i)},[n,e]);const o=p.useCallback(i=>{i.target===i.currentTarget&&i.propertyName==="flex-basis"&&(n||r(null))},[n]);return{task:e,open:s,onTransitionEnd:o}}function co({scrollRef:t,bottomRowCells:e,transformedTasks:r,selectedScale:s,rowHeight:a,viewportInsetPx:n=0,zoomTo:o,setSelectedScale:i}){const c=p.useCallback((g,d)=>{const m=t.current;if(!m)return;const v=(d==null?void 0:d.align)==="start"?g:g-(m.clientWidth-n)/2;m.scrollTo({left:Math.max(0,v),behavior:(d==null?void 0:d.smooth)===!1?"auto":"smooth"})},[t,n]),u=p.useCallback((g,d)=>{const m=It(H(g),e,s);m!==null&&c(m,d)},[e,s,c]),l=p.useCallback(g=>u(H(),g),[u]),f=p.useCallback((g,d)=>{const m=r.findIndex(N=>N.id===g);if(m===-1)return;const v=r[m],S=t.current;if(!S)return;const D=(v.order-1)*a,R=D<S.scrollTop||D+a>S.scrollTop+S.clientHeight;S.scrollTo({top:R?Math.max(0,D-S.clientHeight/2+a/2):S.scrollTop,left:Math.max(0,(d==null?void 0:d.align)==="start"?v.barLeft:v.barLeft+v.barWidth/2-(S.clientWidth-n)/2),behavior:(d==null?void 0:d.smooth)===!1?"auto":"smooth"})},[r,a,t,n]),h=p.useCallback(g=>{if(!(g in it))return;const d=t.current,m=d?Math.max(0,d.clientWidth-n)/2:0,v=d?vn(d.scrollLeft+m,e,s):null;if(!v){i(g);return}o(g,{date:v,viewportX:m})},[t,n,e,s,i,o]),w=p.useCallback(()=>{const g=t.current;if(!g||!r.length)return;let d=1/0,m=-1/0;for(const v of r)d=Math.min(d,H(v.startDate).valueOf()),m=Math.max(m,H(v.endDate).valueOf());!Number.isFinite(d)||!Number.isFinite(m)||o(Mr(m-d,g.clientWidth-n),{date:H(d),viewportX:0})},[r,t,n,o]);return p.useMemo(()=>({scrollToDate:u,scrollToToday:l,scrollToTask:f,setScale:h,zoomToFit:w,getScrollElement:()=>t.current}),[u,l,f,h,w,t])}function lo({showTaskList:t}){const e=t??!1,[r,s]=p.useState(ar);return{width:r,setWidth:s,visible:e,inset:e?r:0}}function uo({hierarchy:t,interaction:e,collapsedIds:r,onTasksChange:s,onTaskMove:a,onExpand:n}){const o=$t(),i=p.useMemo(()=>({hierarchy:t,canReorder:l=>ft(l,e).canReorder}),[t,e]),c=p.useCallback(l=>ye(o.getState().rawTasks,l,i),[o,i]),u=p.useCallback(l=>{const f=bn(o.getState().rawTasks,l,i);return!f||(a==null?void 0:a(f.change))===!1?!1:(o.getState().setRawTasks(f.tasks),s==null||s(f.tasks),l.toParentId&&r.has(l.toParentId)&&(n==null||n(l.toParentId)),!0)},[o,i,a,s,r,n]);return{validate:c,apply:u}}function En(t,e){const r=Math.max(1,e);return{count:t,total:t*r,sizeAt:()=>r,offsetAt:s=>xe(s,0,t)*r,indexAt:s=>xe(Math.floor(s/r),0,t-1)}}function fo(t,e){const r=new Float64Array(t+1);for(let s=0;s<t;s+=1)r[s+1]=r[s]+Math.max(0,e(s));return{count:t,total:r[t],sizeAt:s=>s>=0&&s<t?r[s+1]-r[s]:0,offsetAt:s=>r[xe(s,0,t)],indexAt:s=>{if(t===0)return 0;let a=0,n=t-1;for(;a<n;){const o=a+n>>1;r[o+1]<=s?a=o+1:n=o}return a}}}function ho(t,e,r=0){return typeof e=="number"?En(t,e):fo(t,s=>e[s]??r)}function xe(t,e,r){return t<e?e:t>r?r:t}const mo=24,De=5;function be(t){return{start:0,end:t-1,padStart:0,padEnd:0,virtualized:!1}}function rn(t,e,r,s=De,a=0){if(t.count===0||t.count<=mo||r<=0||t.total<=r)return be(t.count);const n=s+(a<0?s:0),o=s+(a>0?s:0),i=Math.max(0,e),c=Math.max(0,t.indexAt(i)-n),u=Math.min(t.count-1,t.indexAt(i+r)+o);return{start:c,end:u,padStart:t.offsetAt(c),padEnd:Math.max(0,t.total-t.offsetAt(u+1)),virtualized:!0}}function sn(t,e){const r=[];for(let s=e.start;s<=e.end;s+=1){const a=t.offsetAt(s),n=t.sizeAt(s);r.push({index:s,key:s,start:a,end:a+n,size:n})}return r}function po(t,e){return e.end<e.start?{startPx:0,endPx:0}:{startPx:t.offsetAt(e.start),endPx:t.offsetAt(e.end+1)}}function on(t,e){return t.start===e.start&&t.end===e.end&&t.virtualized===e.virtualized&&t.padStart===e.padStart&&t.padEnd===e.padEnd}function go({scrollRef:t,row:e,col:r}){const[s,a]=p.useState(()=>({row:be(e.count),col:be(r.count)})),n=p.useRef({top:0,left:0}),o=p.useRef(0),i=p.useCallback(()=>{const l=t.current;if(!l)return;const{scrollTop:f,scrollLeft:h,clientHeight:w,clientWidth:g}=l,d=an(f,n.current.top),m=an(h,n.current.left);n.current={top:f,left:h};const v={row:rn(e,f,w,De,d),col:rn(r,h,g,De,m)};a(S=>on(S.row,v.row)&&on(S.col,v.col)?S:v)},[t,e,r]),c=p.useCallback(()=>{o.current===0&&(o.current=requestAnimationFrame(()=>{o.current=0,i()}))},[i]);p.useLayoutEffect(()=>{const l=t.current;if(!l)return;i(),l.addEventListener("scroll",c,{passive:!0});const f=new ResizeObserver(i);return f.observe(l),()=>{l.removeEventListener("scroll",c),f.disconnect()}},[t,c,i]),p.useEffect(()=>()=>{o.current!==0&&cancelAnimationFrame(o.current)},[]);const u=p.useCallback((l,f="start")=>{const h=t.current;if(!h||l<0||l>=e.count)return;const w=h.clientHeight,g=e.offsetAt(l),d=e.sizeAt(l),m=h.scrollTop;let v=g;if(f==="center")v=g-(w-d)/2;else if(f==="end")v=g-w+d;else if(f==="auto"){if(g>=m&&g+d<=m+w)return;v=g<m?g:g-w+d}h.scrollTo({top:Math.max(0,v)})},[t,e]);return{row:s.row,col:s.col,scrollToRow:u}}function an(t,e){return t>e?1:t<e?-1:0}function $o({rowCount:t,bottomRowCells:e,scrollRef:r}){var w;const s=p.useMemo(()=>En(t,bt),[t]),a=p.useMemo(()=>{const g=e.map(d=>d.widthPx);return ho(g.length,g)},[e]),{row:n,col:o,scrollToRow:i}=go({scrollRef:r,row:s,col:a}),c=p.useMemo(()=>sn(s,n),[s,n]),u=p.useMemo(()=>sn(a,o),[a,o]),{startPx:l,endPx:f}=po(a,o),h=p.useCallback((g,d)=>g+d>=l&&g<=f,[l,f]);return{virtualRows:c,totalHeight:s.total,virtualCells:u,leadingCellPx:((w=u[0])==null?void 0:w.start)??0,rowStartPx:n.padStart,rowEndPx:s.offsetAt(n.end+1),isBarVisible:h,scrollToRow:i}}function xo({enabled:t,scrollRef:e,selectedScale:r,bottomRowCells:s,totalWidth:a,viewportInsetPx:n,pinnedStart:o,pinnedEnd:i}){const[c,u]=p.useState({scale:r,value:pe}),l=c.scale===r?c.value:pe,f=ut(r),h=ut(s),w=ut(a),g=ut(n),d=ut(l);return p.useEffect(()=>{if(!t)return;const m=e.current;if(!m)return;const v=()=>{const S=h.current,D=w.current;if(!S.length||D<=0)return;const R=Tr({current:d.current,scrollLeft:m.scrollLeft,viewportPx:m.clientWidth-g.current,totalPx:D,pxPerTick:D/S.length,canExtend:{before:!o,after:!i}});R&&(d.current=R,u({scale:f.current,value:R}))};return v(),m.addEventListener("scroll",v,{passive:!0}),()=>m.removeEventListener("scroll",v)},[t,s,o,i,e,h,w,d,g,f]),l}function Do({rawTasks:t,selectedScale:e,visibleRange:r,hierarchy:s,extension:a,scrollRef:n,bottomRowCells:o}){const i=ut(e),c=ut(o),u=K(m=>m.setBottomRowCells),l=K(m=>m.setTransformedTasks),f=K(m=>m.clearAllDragOffsets),h=K(m=>m.setSelectedScale),w=p.useRef([]),g=p.useRef(0),d=p.useRef(null);return p.useLayoutEffect(()=>{const{bottomCells:m,transformedTasks:v}=zr(t,e,r,s,a),S=w.current;S.length&&m.length&&(g.current+=Hr(S,m,e)),w.current=m,u(m),l(v),f()},[t,e,r,s,a,u,l,f]),p.useLayoutEffect(()=>{const m=n.current,v=d.current;if(v){d.current=null,g.current=0;const D=It(v.date,o,i.current);if(m&&D!==null){m.scrollLeft=Math.max(0,D-v.viewportX);return}}const S=g.current;S&&(g.current=0,m&&(m.scrollLeft+=S))},[o,n,i]),p.useCallback((m,v)=>{if(m===i.current){const S=n.current,D=It(v.date,c.current,m);S&&D!==null&&(S.scrollLeft=Math.max(0,D-v.viewportX));return}d.current=v,h(m)},[h,n,i,c])}function bo({enabled:t,scrollRef:e,selectedScale:r,bottomRowCells:s,viewportInsetPx:a,zoomTo:n}){const o=ut(r),i=ut(s),c=ut(a);p.useEffect(()=>{if(!t)return;const u=e.current;if(!u)return;const l={...Ir},f=h=>{if(!h.ctrlKey&&!h.metaKey)return;h.preventDefault();const{state:w,step:g}=Er(l,h.deltaY,h.timeStamp);if(Object.assign(l,w),!g)return;const d=xn(o.current,g);if(d===o.current)return;const m=u.getBoundingClientRect(),v=c.current,S=Math.min(Math.max(h.clientX-m.left,v),u.clientWidth)-v,D=vn(u.scrollLeft+S,i.current,o.current);D&&n(d,{date:D,viewportX:S})};return u.addEventListener("wheel",f,{passive:!1}),()=>u.removeEventListener("wheel",f)},[t,n,e,o,i,c])}function wo(t,e){const r=ut(e),s=p.useRef(t);p.useEffect(()=>{var a;t!==s.current&&(s.current=t,(a=r.current)==null||a.call(r,t))},[t,r])}function vo(t,e,r){const s=ut(e),a=ut(r),n=p.useRef("");p.useEffect(()=>{const o=a.current;if(!o)return;const i=Ur(t,s.current);if(!i)return;const c=`${i.start.valueOf()}:${i.end.valueOf()}`;c!==n.current&&(n.current=c,o(i))},[t,s,a])}function yo(t,e,r){const s=p.useRef(!1);p.useEffect(()=>{if(s.current||!t||!e.length)return;s.current=!0;const a=t==="today"?H():t;r.scrollToDate(a,{smooth:!1})},[t,e,r])}const Pn="(prefers-color-scheme: dark)",Tn=()=>typeof window<"u"&&typeof window.matchMedia=="function",Ln=()=>Tn()&&window.matchMedia(Pn).matches,So=()=>{if(typeof document>"u")return"light";const t=getComputedStyle(document.documentElement).colorScheme,e=t.includes("light"),r=t.includes("dark");return e&&r?Ln()?"dark":"light":r?"dark":"light"},Mo=t=>{if(typeof window>"u")return()=>{};const e=Tn()?window.matchMedia(Pn):null;e==null||e.addEventListener("change",t);const r=new MutationObserver(t);return r.observe(document.documentElement,{attributes:!0,attributeFilter:["class","style","data-theme"]}),()=>{e==null||e.removeEventListener("change",t),r.disconnect()}},Oo=()=>"light";function ko(t){const e=p.useSyncExternalStore(Mo,t==="system"?()=>Ln()?"dark":"light":So,Oo);return t==="light"||t==="dark"?t:e}function Io(t="month"){return Xn()((e,r)=>({rawTasks:[],transformedTasks:[],rowTasks:[],bottomRowCells:[],selectedScale:t,currentTask:null,dragMode:null,dragOffsets:{},localeOptions:void 0,linkDraft:null,reorderDraft:null,selectedDependency:null,selectedTaskId:null,hoveredTaskId:null,setCurrentTask:s=>e({currentTask:s}),setDragMode:s=>{r().dragMode!==s&&e({dragMode:s})},setLinkDraft:s=>e({linkDraft:s}),setReorderDraft:s=>e({reorderDraft:s}),setSelectedDependency:s=>e(a=>{var n,o;return((n=a.selectedDependency)==null?void 0:n.sourceId)===(s==null?void 0:s.sourceId)&&((o=a.selectedDependency)==null?void 0:o.targetId)===(s==null?void 0:s.targetId)?a:{selectedDependency:s}}),setLocaleOptions:s=>e({localeOptions:s}),setSelectedTaskId:s=>{r().selectedTaskId!==s&&e({selectedTaskId:s})},setHoveredTaskId:s=>{r().hoveredTaskId!==s&&e({hoveredTaskId:s})},setSelectedScale:s=>{r().selectedScale!==s&&e({selectedScale:s})},setRawTasks:s=>e({rawTasks:s}),syncTasksFromProps:s=>e(a=>JSON.stringify(a.rawTasks)===JSON.stringify(s)?a:{rawTasks:s}),setBottomRowCells:s=>e({bottomRowCells:s}),setTransformedTasks:s=>e({transformedTasks:s}),setRowTasks:s=>e({rowTasks:s}),setDragOffsets:s=>e(a=>({dragOffsets:{...a.dragOffsets,...s}})),clearDragOffsets:s=>e(a=>{const n={...a.dragOffsets};let o=!1;for(const i of s)i in n&&(delete n[i],o=!0);return o?{dragOffsets:n}:a}),clearAllDragOffsets:()=>e(s=>{var o;const a=(o=s.currentTask)==null?void 0:o.id,n=Object.keys(s.dragOffsets);return n.length?!a||!s.dragOffsets[a]?{dragOffsets:{}}:n.length===1?s:{dragOffsets:{[a]:s.dragOffsets[a]}}:s}),getTotalWidth:()=>r().bottomRowCells.reduce((a,n)=>a+n.widthPx,0)}))}const Mt="day",cn=366,Eo=18263,Po="YYYY-MM-DD",To=[1,2,3,4,5];function An(t){const e=t?a=>!t(a):()=>!0,r=(a,n)=>{if(!n||!t)return a.add(n,Mt);const o=n>0?1:-1;let i=Math.abs(n),c=a,u=Math.abs(n)+cn*Math.abs(n);for(;i>0;)if(c=c.add(o,Mt),e(c)&&i--,u--<=0)return a.add(n,Mt);return c},s=(a,n)=>{const o=a.startOf(Mt),i=n.startOf(Mt),c=i.diff(o,Mt);if(!t||c===0||Math.abs(c)>Eo)return c;const u=c>0?1:-1;let l=u>0?o:i;const f=u>0?i:o;let h=0;for(;l.valueOf()<f.valueOf();)l=l.add(1,Mt),e(l)&&h++;return h===0?0:h*u};return{skipsNonWorkingDays:t!==null,isWorkingDay:e,addDays:r,daysBetween:s,daysUntil(a,n){let o=s(a,n);const i=n.valueOf();for(let c=0;c<2&&r(a,o).valueOf()<i;c++)o++;for(let c=0;c<2&&r(a,o-1).valueOf()>=i;c++)o--;return o},daysUpTo(a,n){let o=s(a,n);const i=n.valueOf();for(let c=0;c<2&&r(a,o).valueOf()>i;c++)o--;for(let c=0;c<2&&r(a,o+1).valueOf()<=i;c++)o++;return o},snapForward(a){if(!t||e(a))return a;let n=a;for(let o=0;o<cn;o++)if(n=n.add(1,Mt),e(n))return n;return a}}}const Rn=An(null);function Nn(t={}){const e=new Set(t.workingWeekdays??To),r=new Set(t.holidays??[]);return An(s=>!e.has(s.day())||r.has(s.format(Po)))}const Lo="YYYY-MM-DD",Ao=366,Ro={byDate:new Map,dates:[]};function No(t){if(!(t!=null&&t.length))return Ro;const e=new Map;for(const r of t){const s=typeof r=="string"?{date:r}:r,a=te(s.date);if(!a.isValid())continue;const n=s.endDate?te(s.endDate):a,o=n.isValid()&&!n.isBefore(a,"day")?Math.min(n.diff(a,"day"),Ao-1):0;for(let i=0;i<=o;i++){const c=a.add(i,"day").format(Lo);e.has(c)||e.set(c,s)}}return{byDate:e,dates:[...e.keys()]}}const jo=600,_o="100%",Yo=[],Co=p.forwardRef(function(e,r){const[s]=p.useState(()=>Io(e.defaultScale));return b.jsx(ln.Provider,{value:s,children:b.jsx(Ho,{...e,forwardedRef:r})})});function Ho({tasks:t=Yo,onTasksChange:e,height:r=jo,width:s=_o,theme:a,className:n,showNonWorkingDays:o=!0,workingWeekdays:i,holidays:c,initialScrollTo:u,readOnly:l,allowMove:f,allowResize:h,allowProgressChange:w,minDate:g,maxDate:d,visibleStart:m,visibleEnd:v,locale:S,formats:D,firstDayOfWeek:R,showTaskList:N,showRowNumbers:O=!1,hierarchy:_=!1,collapsedIds:L,defaultCollapsedIds:M,onCollapsedChange:$,workingCalendar:j=!1,allowLinkCreate:F,allowLinkDelete:U,allowTaskCreate:I,allowReorder:E,onTaskMove:k,onDependencyCreate:y,onDependencyDelete:x,onTaskCreate:T,onTaskClick:A,onTaskDoubleClick:C,onTaskSelect:X,selectable:z,renderDetail:J,showDetail:tt,detailTaskId:ht,onDetailChange:et,showTooltip:P,zoomOnWheel:B=!1,infiniteScroll:W=!1,onRangeChange:rt,onScaleChange:nt,autoScrollOnDrag:at=!0,forwardedRef:xt}){const{rawTasks:V,transformedTasks:st,bottomRowCells:Q,selectedScale:q,selectedTaskId:ct,syncTasksFromProps:mt,setSelectedScale:wt,setLocaleOptions:Dt,getTotalWidth:Z}=Ks(),Y=p.useMemo(()=>S===void 0&&D===void 0&&R===void 0?void 0:{locale:S,formats:D,firstDayOfWeek:R},[S,D,R]);p.useLayoutEffect(()=>{Dt(Y)},[Y,Dt]);const G=p.useRef(null),ot=p.useRef(null),pt=Us({readOnly:l,allowMove:f,allowResize:h,allowProgressChange:w,allowLinkCreate:F,allowLinkDelete:U,allowTaskCreate:I,allowReorder:E,minDate:g,maxDate:d}),lt=lo({showTaskList:N}),Oe=lt.visible?1:0,Ht=Z(),jn=xo({enabled:W,scrollRef:G,selectedScale:q,bottomRowCells:Q,totalWidth:Ht,viewportInsetPx:lt.inset,pinnedStart:!!m,pinnedEnd:!!v}),yt=Ys({collapsedIds:L,defaultCollapsedIds:M,onCollapsedChange:$}),ke=uo({hierarchy:_,interaction:pt,collapsedIds:yt.collapsedIds,onTasksChange:e,onTaskMove:k,onExpand:yt.expand}),_n=p.useMemo(()=>E===!0||V.some(dt=>dt.allowReorder===!0),[E,V]),Ft=p.useMemo(()=>No(c),[c]),se=p.useMemo(()=>Nn({workingWeekdays:i,holidays:Ft.dates}),[i,Ft]),Ie=p.useCallback(dt=>{if(se.isWorkingDay(dt))return null;const Bt=Ft.byDate.get(dt.format("YYYY-MM-DD"));return Bt?{key:Bt.date,label:Bt.label,color:Bt.color}:{key:Cr}},[se,Ft]),Yn=j?se:Rn,oe=tt??J!==void 0,ae=Vs({selectable:z??(oe?!0:void 0),onTaskSelect:X,onTaskClick:A}),gt=oo({enabled:oe,tasks:st,detailTaskId:ht,onDetailChange:et,onTaskActivate:ae.onTaskActivate}),Ut=io(gt.task),Cn=p.useMemo(()=>({onTasksChange:e,onTaskActivate:gt.onTaskActivate,onTaskDoubleClick:C,showTooltip:P}),[e,gt.onTaskActivate,C,P]),{rows:St,tasks:Wt}=Xs({rawTasks:V,tasks:st,hierarchy:_,collapsedIds:yt.collapsedIds}),Ee=K(dt=>dt.setRowTasks);p.useLayoutEffect(()=>{Ee(Wt)},[Wt,Ee]);const At=T!==void 0&&Kr(pt),{onDrawPointerDown:Hn,ghost:Gt}=Fs({enabled:At,rowCount:St.length,onTaskCreate:T}),ie=p.useCallback(()=>{if(!At)return;const dt=Cs(H(),Q,q);dt&&(T==null||T(dt))},[At,Q,q,T]),vt=$o({rowCount:St.length,bottomRowCells:Q,scrollRef:G}),Fn=ko(a),Pe=p.useRef(null);p.useEffect(()=>{const dt=JSON.stringify(t);dt!==Pe.current&&(Pe.current=dt,mt(t))},[t,mt]);const Un=p.useMemo(()=>m||v?{start:m?H(m):void 0,end:v?H(v):void 0}:void 0,[m,v]),Te=Do({rawTasks:V,selectedScale:q,visibleRange:Un,hierarchy:_,extension:jn,scrollRef:G,bottomRowCells:Q});bo({enabled:B,scrollRef:G,selectedScale:q,bottomRowCells:Q,viewportInsetPx:lt.inset,zoomTo:Te}),vo(Q,q,rt),wo(q,nt);const Le=p.useMemo(()=>It(H(),Q,q),[Q,q]),Ae=p.useMemo(()=>o?Fr(Q,q,Ie):[],[o,Ie,Q,q]),Xt=co({scrollRef:G,bottomRowCells:Q,transformedTasks:Wt,selectedScale:q,rowHeight:bt,viewportInsetPx:lt.inset,zoomTo:Te,setSelectedScale:wt});p.useImperativeHandle(xt,()=>({...Xt,openDetail:gt.open,closeDetail:gt.close,addTask:ie}),[Xt,gt.open,gt.close,ie]);const Rt=Gs({onActivate:oe?gt.open:void 0,rows:St,rawTasks:V,gridColumnCount:Oe,hierarchy:_,collapsedIds:yt.collapsedIds,selectedScale:q,localeOptions:Y,interaction:pt,onToggleCollapse:yt.toggle,onTasksChange:e,move:ke,scrollToRow:vt.scrollToRow,scrollApi:Xt,bodyRef:ot});yo(u,Q,Xt);const Wn=p.useCallback(dt=>{dt.target===dt.currentTarget&&(ae.select(null),gt.close())},[ae,gt]),Gn={height:typeof r=="number"?`${r}px`:r,width:typeof s=="number"?`${s}px`:s,"--gantt-pane-inset":`${lt.inset}px`,"--gantt-row-height":`${bt}px`},Re={width:`${Ht}px`};return b.jsxs("section",{className:n?`gantt-container ${n}`:"gantt-container","data-theme":Fn,style:Gn,children:[b.jsx("div",{className:"gantt-sr-only",role:"status","aria-live":"polite",children:Rt.announcement}),b.jsxs("div",{className:"gantt-layout",children:[b.jsxs("div",{className:"gantt-main",children:[b.jsx("div",{ref:G,className:"gantt-scroll-container",children:b.jsxs("div",{ref:ot,className:"gantt-body",role:"treegrid","aria-label":"Gantt chart","aria-rowcount":St.length+(lt.visible?1:0),onKeyDown:Rt.onKeyDown,onFocusCapture:Rt.onFocusCapture,children:[lt.visible&&b.jsx(Is,{rows:St,virtualItems:vt.virtualRows,totalHeight:vt.totalHeight,width:lt.width,showRowNumbers:O,hierarchy:_,collapsedIds:yt.collapsedIds,onToggleCollapse:yt.toggle,focus:Rt.focus,selectedTaskId:ct,onRowClick:gt.onTaskActivate,onRowDoubleClick:C,reorderEnabled:_n,interaction:pt,move:ke}),b.jsxs("div",{className:"gantt-timeline",style:Re,role:"presentation",children:[b.jsxs("div",{className:"gantt-header-wrapper",style:Re,children:[b.jsx(qr,{bottomRowCells:Q,selectedScale:q,width:Ht,virtual:vt}),b.jsx(Rs,{ranges:Ae}),b.jsx(ds,{}),b.jsx(ps,{leftPx:Le})]}),b.jsxs("div",{className:`gantt-content${At?" drawable":""}`,style:{height:`${vt.totalHeight}px`,width:`${Ht}px`},role:"presentation",onPointerDown:Hn,onClick:Wn,children:[b.jsx(Ns,{ranges:Ae}),b.jsx(js,{rows:St,virtualItems:vt.virtualRows,ownedByTaskList:lt.visible,hierarchy:_,collapsedIds:yt.collapsedIds}),b.jsx(ms,{leftPx:Le}),Gt&&b.jsx("div",{className:"gantt-draw-ghost",style:{left:`${Gt.leftPx}px`,width:`${Gt.widthPx}px`,height:`${fe}px`,marginTop:`${(bt-fe)/2}px`,transform:`translateY(${Gt.topPx}px)`},"aria-hidden":"true"}),b.jsx(us,{transformedTasks:Wt,rowCount:St.length,virtual:vt,interaction:pt,onTasksChange:e,onDependencyDelete:x}),b.jsx(As,{rows:St,virtualItems:vt.virtualRows,gridColumnCount:Oe,focus:Rt.focus,isBarVisible:vt.isBarVisible,options:Cn,interaction:pt,calendar:Yn,autoScrollOnDrag:at,onDependencyCreate:y})]})]})]})}),lt.visible&&b.jsx(fs,{width:lt.width,onWidthChange:lt.setWidth}),lt.visible&&At&&b.jsx(hs,{width:lt.width,onAdd:ie})]}),Ut.task&&b.jsx(ro,{task:Ut.task,tasks:st,scale:q,localeOptions:Y,interaction:pt,onClose:gt.close,onTasksChange:e,render:J,open:Ut.open,onTransitionEnd:Ut.onTransitionEnd})]})]})}exports.CALENDAR_DAYS=Rn;exports.ReactGanttChart=Co;exports.buildTaskTree=Ot;exports.collectSubtreeIds=Yt;exports.createWorkingCalendar=Nn;exports.moveTask=bn;exports.rollUpTasks=Dn;exports.sortTasksBySequence=Ct;exports.validateMove=ye;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("react/jsx-runtime"),p=require("react"),Ie=t=>{let n;const r=new Set,s=(u,l)=>{const f=typeof u=="function"?u(n):u;if(!Object.is(f,n)){const m=n;n=l??(typeof f!="object"||f===null)?f:Object.assign({},n,f),r.forEach(v=>v(n,m))}},a=()=>n,i={setState:s,getState:a,getInitialState:()=>c,subscribe:u=>(r.add(u),()=>r.delete(u))},c=n=t(s,a,i);return i},Hn=(t=>t?Ie(t):Ie),Wn=t=>t;function Fn(t,n=Wn){const r=p.useSyncExternalStore(t.subscribe,p.useCallback(()=>n(t.getState()),[t,n]),p.useCallback(()=>n(t.getInitialState()),[t,n]));return p.useDebugValue(r),r}const en=p.createContext(null);function $t(){const t=p.useContext(en);if(!t)throw new Error("Gantt store is missing. Render this component inside <ReactGanttChart>.");return t}function K(t){return Fn($t(),t)}function Un(t,n){const r=Math.max(1,n);return{count:t,total:t*r,sizeAt:()=>r,offsetAt:s=>oe(s,0,t)*r,indexAt:s=>oe(Math.floor(s/r),0,t-1)}}function nn(t,n){const r=new Float64Array(t+1);for(let s=0;s<t;s+=1)r[s+1]=r[s]+Math.max(0,n(s));return{count:t,total:r[t],sizeAt:s=>s>=0&&s<t?r[s+1]-r[s]:0,offsetAt:s=>r[oe(s,0,t)],indexAt:s=>{if(t===0)return 0;let a=0,e=t-1;for(;a<e;){const o=a+e>>1;r[o+1]<=s?a=o+1:e=o}return a}}}function oe(t,n,r){return t<n?n:t>r?r:t}function Gn(t){const n=[];for(const r of t){const s=n[n.length-1];s&&s.label===r.label?s.widthPx+=r.widthPx:n.push({...r})}return n}function pe(t){return nn(t.length,n=>t[n].widthPx)}function Ot(t,n){if(!t.count)return null;const r=t.indexAt(n);return{index:r,left:t.offsetAt(r),width:t.sizeAt(r)}}function rn(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Gt={exports:{}},Xn=Gt.exports,Ee;function Bn(){return Ee||(Ee=1,(function(t,n){(function(r,s){t.exports=s()})(Xn,(function(){var r=1e3,s=6e4,a=36e5,e="millisecond",o="second",i="minute",c="hour",u="day",l="week",f="month",m="quarter",v="year",$="date",d="Invalid Date",g=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,x=/\[([^\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,w={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(E){var O=["th","st","nd","rd"],D=E%100;return"["+E+(O[(D-20)%10]||O[D]||O[0])+"]"}},M=function(E,O,D){var k=String(E);return!k||k.length>=O?E:""+Array(O+1-k.length).join(D)+E},S={s:M,z:function(E){var O=-E.utcOffset(),D=Math.abs(O),k=Math.floor(D/60),b=D%60;return(O<=0?"+":"-")+M(k,2,"0")+":"+M(b,2,"0")},m:function E(O,D){if(O.date()<D.date())return-E(D,O);var k=12*(D.year()-O.year())+(D.month()-O.month()),b=O.clone().add(k,f),T=D-b<0,N=O.clone().add(k+(T?-1:1),f);return+(-(k+(D-b)/(T?b-N:N-b))||0)},a:function(E){return E<0?Math.ceil(E)||0:Math.floor(E)},p:function(E){return{M:f,y:v,w:l,d:u,D:$,h:c,m:i,s:o,ms:e,Q:m}[E]||String(E||"").toLowerCase().replace(/s$/,"")},u:function(E){return E===void 0}},L="en",j={};j[L]=w;var C="$isDayjsObject",P=function(E){return E instanceof U||!(!E||!E[C])},h=function E(O,D,k){var b;if(!O)return L;if(typeof O=="string"){var T=O.toLowerCase();j[T]&&(b=T),D&&(j[T]=D,b=T);var N=O.split("-");if(!b&&N.length>1)return E(N[0])}else{var H=O.name;j[H]=O,b=H}return!k&&b&&(L=b),b||!k&&L},A=function(E,O){if(P(E))return E.clone();var D=typeof O=="object"?O:{};return D.date=E,D.args=arguments,new U(D)},R=S;R.l=h,R.i=P,R.w=function(E,O){return A(E,{locale:O.$L,utc:O.$u,x:O.$x,$offset:O.$offset})};var U=(function(){function E(D){this.$L=h(D.locale,null,!0),this.parse(D),this.$x=this.$x||D.x||{},this[C]=!0}var O=E.prototype;return O.parse=function(D){this.$d=(function(k){var b=k.date,T=k.utc;if(b===null)return new Date(NaN);if(R.u(b))return new Date;if(b instanceof Date)return new Date(b);if(typeof b=="string"&&!/Z$/i.test(b)){var N=b.match(g);if(N){var H=N[2]-1||0,G=(N[7]||"0").substring(0,3);return T?new Date(Date.UTC(N[1],H,N[3]||1,N[4]||0,N[5]||0,N[6]||0,G)):new Date(N[1],H,N[3]||1,N[4]||0,N[5]||0,N[6]||0,G)}}return new Date(b)})(D),this.init()},O.init=function(){var D=this.$d;this.$y=D.getFullYear(),this.$M=D.getMonth(),this.$D=D.getDate(),this.$W=D.getDay(),this.$H=D.getHours(),this.$m=D.getMinutes(),this.$s=D.getSeconds(),this.$ms=D.getMilliseconds()},O.$utils=function(){return R},O.isValid=function(){return this.$d.toString()!==d},O.isSame=function(D,k){var b=A(D);return this.startOf(k)<=b&&b<=this.endOf(k)},O.isAfter=function(D,k){return A(D)<this.startOf(k)},O.isBefore=function(D,k){return this.endOf(k)<A(D)},O.$g=function(D,k,b){return R.u(D)?this[k]:this.set(b,D)},O.unix=function(){return Math.floor(this.valueOf()/1e3)},O.valueOf=function(){return this.$d.getTime()},O.startOf=function(D,k){var b=this,T=!!R.u(k)||k,N=R.p(D),H=function(_,W){var at=R.w(b.$u?Date.UTC(b.$y,W,_):new Date(b.$y,W,_),b);return T?at:at.endOf(u)},G=function(_,W){return R.w(b.toDate()[_].apply(b.toDate("s"),(T?[0,0,0,0]:[23,59,59,999]).slice(W)),b)},q=this.$W,J=this.$M,tt=this.$D,et="set"+(this.$u?"UTC":"");switch(N){case v:return T?H(1,0):H(31,11);case f:return T?H(1,J):H(0,J+1);case l:var st=this.$locale().weekStart||0,I=(q<st?q+7:q)-st;return H(T?tt-I:tt+(6-I),J);case u:case $:return G(et+"Hours",0);case c:return G(et+"Minutes",1);case i:return G(et+"Seconds",2);case o:return G(et+"Milliseconds",3);default:return this.clone()}},O.endOf=function(D){return this.startOf(D,!1)},O.$set=function(D,k){var b,T=R.p(D),N="set"+(this.$u?"UTC":""),H=(b={},b[u]=N+"Date",b[$]=N+"Date",b[f]=N+"Month",b[v]=N+"FullYear",b[c]=N+"Hours",b[i]=N+"Minutes",b[o]=N+"Seconds",b[e]=N+"Milliseconds",b)[T],G=T===u?this.$D+(k-this.$W):k;if(T===f||T===v){var q=this.clone().set($,1);q.$d[H](G),q.init(),this.$d=q.set($,Math.min(this.$D,q.daysInMonth())).$d}else H&&this.$d[H](G);return this.init(),this},O.set=function(D,k){return this.clone().$set(D,k)},O.get=function(D){return this[R.p(D)]()},O.add=function(D,k){var b,T=this;D=Number(D);var N=R.p(k),H=function(J){var tt=A(T);return R.w(tt.date(tt.date()+Math.round(J*D)),T)};if(N===f)return this.set(f,this.$M+D);if(N===v)return this.set(v,this.$y+D);if(N===u)return H(1);if(N===l)return H(7);var G=(b={},b[i]=s,b[c]=a,b[o]=r,b)[N]||1,q=this.$d.getTime()+D*G;return R.w(q,this)},O.subtract=function(D,k){return this.add(-1*D,k)},O.format=function(D){var k=this,b=this.$locale();if(!this.isValid())return b.invalidDate||d;var T=D||"YYYY-MM-DDTHH:mm:ssZ",N=R.z(this),H=this.$H,G=this.$m,q=this.$M,J=b.weekdays,tt=b.months,et=b.meridiem,st=function(W,at,ot,it){return W&&(W[at]||W(k,T))||ot[at].slice(0,it)},I=function(W){return R.s(H%12||12,W,"0")},_=et||function(W,at,ot){var it=W<12?"AM":"PM";return ot?it.toLowerCase():it};return T.replace(x,(function(W,at){return at||(function(ot){switch(ot){case"YY":return String(k.$y).slice(-2);case"YYYY":return R.s(k.$y,4,"0");case"M":return q+1;case"MM":return R.s(q+1,2,"0");case"MMM":return st(b.monthsShort,q,tt,3);case"MMMM":return st(tt,q);case"D":return k.$D;case"DD":return R.s(k.$D,2,"0");case"d":return String(k.$W);case"dd":return st(b.weekdaysMin,k.$W,J,2);case"ddd":return st(b.weekdaysShort,k.$W,J,3);case"dddd":return J[k.$W];case"H":return String(H);case"HH":return R.s(H,2,"0");case"h":return I(1);case"hh":return I(2);case"a":return _(H,G,!0);case"A":return _(H,G,!1);case"m":return String(G);case"mm":return R.s(G,2,"0");case"s":return String(k.$s);case"ss":return R.s(k.$s,2,"0");case"SSS":return R.s(k.$ms,3,"0");case"Z":return N}return null})(W)||N.replace(":","")}))},O.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},O.diff=function(D,k,b){var T,N=this,H=R.p(k),G=A(D),q=(G.utcOffset()-this.utcOffset())*s,J=this-G,tt=function(){return R.m(N,G)};switch(H){case v:T=tt()/12;break;case f:T=tt();break;case m:T=tt()/3;break;case l:T=(J-q)/6048e5;break;case u:T=(J-q)/864e5;break;case c:T=J/a;break;case i:T=J/s;break;case o:T=J/r;break;default:T=J}return b?T:R.a(T)},O.daysInMonth=function(){return this.endOf(f).$D},O.$locale=function(){return j[this.$L]},O.locale=function(D,k){if(!D)return this.$L;var b=this.clone(),T=h(D,k,!0);return T&&(b.$L=T),b},O.clone=function(){return R.w(this.$d,this)},O.toDate=function(){return new Date(this.valueOf())},O.toJSON=function(){return this.isValid()?this.toISOString():null},O.toISOString=function(){return this.$d.toISOString()},O.toString=function(){return this.$d.toUTCString()},E})(),F=U.prototype;return A.prototype=F,[["$ms",e],["$s",o],["$m",i],["$H",c],["$W",u],["$M",f],["$y",v],["$D",$]].forEach((function(E){F[E[1]]=function(O){return this.$g(O,E[0],E[1])}})),A.extend=function(E,O){return E.$i||(E(O,U,A),E.$i=!0),A},A.locale=h,A.isDayjs=P,A.unix=function(E){return A(1e3*E)},A.en=j[L],A.Ls=j,A.p={},A}))})(Gt)),Gt.exports}var zn=Bn();const sn=rn(zn);var Xt={exports:{}},qn=Xt.exports,Te;function Kn(){return Te||(Te=1,(function(t,n){(function(r,s){t.exports=s()})(qn,(function(){var r="minute",s=/[+-]\d\d(?::?\d\d)?/g,a=/([+-]|\d\d)/g;return function(e,o,i){var c=o.prototype;i.utc=function(d){var g={date:d,utc:!0,args:arguments};return new o(g)},c.utc=function(d){var g=i(this.toDate(),{locale:this.$L,utc:!0});return d?g.add(this.utcOffset(),r):g},c.local=function(){return i(this.toDate(),{locale:this.$L,utc:!1})};var u=c.parse;c.parse=function(d){d.utc&&(this.$u=!0),this.$utils().u(d.$offset)||(this.$offset=d.$offset),u.call(this,d)};var l=c.init;c.init=function(){if(this.$u){var d=this.$d;this.$y=d.getUTCFullYear(),this.$M=d.getUTCMonth(),this.$D=d.getUTCDate(),this.$W=d.getUTCDay(),this.$H=d.getUTCHours(),this.$m=d.getUTCMinutes(),this.$s=d.getUTCSeconds(),this.$ms=d.getUTCMilliseconds()}else l.call(this)};var f=c.utcOffset;c.utcOffset=function(d,g){var x=this.$utils().u;if(x(d))return this.$u?0:x(this.$offset)?f.call(this):this.$offset;if(typeof d=="string"&&(d=(function(L){L===void 0&&(L="");var j=L.match(s);if(!j)return null;var C=(""+j[0]).match(a)||["-",0,0],P=C[0],h=60*+C[1]+ +C[2];return h===0?0:P==="+"?h:-h})(d),d===null))return this;var w=Math.abs(d)<=16?60*d:d;if(w===0)return this.utc(g);var M=this.clone();if(g)return M.$offset=w,M.$u=!1,M;var S=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(M=this.local().add(w+S,r)).$offset=w,M.$x.$localOffset=S,M};var m=c.format;c.format=function(d){var g=d||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return m.call(this,g)},c.valueOf=function(){var d=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*d},c.isUTC=function(){return!!this.$u},c.toISOString=function(){return this.toDate().toISOString()},c.toString=function(){return this.toDate().toUTCString()};var v=c.toDate;c.toDate=function(d){return d==="s"&&this.$offset?i(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():v.call(this)};var $=c.diff;c.diff=function(d,g,x){if(d&&this.$u===d.$u)return $.call(this,d,g,x);var w=this.local(),M=i(d).local();return $.call(w,M,g,x)}}}))})(Xt)),Xt.exports}var Vn=Kn();const Zn=rn(Vn);sn.extend(Zn);const Y=sn.utc;function on(t){return Math.floor(t.month()/3)+1}function Jn(t){return t.startOf("month").month(Math.floor(t.month()/3)*3)}function Qn(t,n=0){const r=(t.day()-n+7)%7;return t.startOf("day").subtract(r,"day")}const xt=38,ae=28,tr=18,er=73,Pe=120,Le=800,Ae=16,nr=220,rr=5,sr=56,Nt=8,Ne=Nt+5,an=44,ie=Nt*3,or=an*3,ar=24,Re=4,ir=450,cr={day:"MMM D, YYYY HH:mm [UTC]",week:"MMM D, YYYY",month:"MMM D, YYYY",quarter:"MMM YYYY",year:"MMM YYYY"},lr={day:"HH:mm [UTC]",week:"MMM D",month:"MMM D",quarter:"MMM YYYY",year:"MMM YYYY"},ur=44,ut={day:{labelUnit:"day",tickUnit:"hour",unitPerTick:6,tickAlign:"day",dragStepUnit:"hour",dragStepAmount:1,basePxPerDragStep:12,formatTickLabel:t=>t.format("HH"),formatHeaderLabel:t=>t.format("MMM D, YYYY")},week:{labelUnit:"month",tickUnit:"day",unitPerTick:1,dragStepUnit:"hour",dragStepAmount:6,basePxPerDragStep:18,formatTickLabel:t=>t.format("D"),formatHeaderLabel:t=>t.format("MMM YYYY")},month:{labelUnit:"month",tickUnit:"day",unitPerTick:7,tickAlign:"week",dragStepUnit:"day",dragStepAmount:1,basePxPerDragStep:18,formatTickLabel:t=>t.format("MMM D"),formatHeaderLabel:t=>t.format("MMM YYYY")},quarter:{labelUnit:"quarter",tickUnit:"month",unitPerTick:1,dragStepUnit:"day",dragStepAmount:7,basePxPerDragStep:28,formatTickLabel:t=>t.format("MMM"),formatHeaderLabel:t=>`Q${on(t)} ${t.format("YYYY")}`},year:{labelUnit:"year",tickUnit:"month",unitPerTick:3,tickAlign:"quarter",dragStepUnit:"day",dragStepAmount:28,basePxPerDragStep:28,formatTickLabel:t=>t.format("MMM"),formatHeaderLabel:t=>t.format("YYYY")}},Bt={year:"numeric",month:"short",day:"numeric"},It={year:"numeric",month:"short"},ce={year:"numeric"},cn={hour:"2-digit",minute:"2-digit",hourCycle:"h23"},dr={day:{hour:"2-digit",hourCycle:"h23"},week:{day:"numeric"},month:{month:"short",day:"numeric"},quarter:{month:"short"},year:{month:"short"}},fr={day:Bt,week:It,month:It,quarter:ce,year:ce},hr={day:{...Bt,...cn,timeZoneName:"short"},week:Bt,month:Bt,quarter:It,year:It},je={day:{...cn,timeZoneName:"short"},week:{month:"short",day:"numeric"},month:{month:"short",day:"numeric"},quarter:It,year:It},mr=" – ",Ce=new Set;function Lt(t,n){const r=new Intl.DateTimeFormat(t,{timeZone:"UTC",...n});return s=>r.format(s.toDate())}function pr(t,n){const r=new Intl.DateTimeFormat(t,{timeZone:"UTC",...n});return(s,a)=>{try{return r.formatRange(s.toDate(),a.toDate())}catch{return ln(r.format(s.toDate()),r.format(a.toDate()))}}}function ln(t,n){return t===n?t:`${t}${mr}${n}`}function gr(t){const n=Lt(t,ce);return r=>{const s=n(r),a=`Q${on(r)}`;return/\d$/.test(s)?`${a} ${s}`:`${s} ${a}`}}function un(t,n){return t==="week"&&(n==null?void 0:n.firstDayOfWeek)!==void 0?"week":ut[t].labelUnit}function Et(t,n){var l;const r=(l=n==null?void 0:n.formats)==null?void 0:l[t],s=un(t,n)==="week"?"day":t,a=ut[t],e=ut[s],o=n!=null&&n.locale?$r(n.locale,t,s):null,i=r==null?void 0:r.tooltip,c=i??(o==null?void 0:o.edge)??(f=>f.format(lr[t])),u=!i&&(o!=null&&o.range)?o.range:(f,m)=>ln(c(f),c(m));return{edge:c,range:u,tick:(r==null?void 0:r.tick)??(o==null?void 0:o.tick)??a.formatTickLabel,header:(r==null?void 0:r.header)??(o==null?void 0:o.header)??e.formatHeaderLabel,tooltip:(r==null?void 0:r.tooltip)??(o==null?void 0:o.tooltip)??(f=>f.format(cr[t]))}}function $r(t,n,r){try{return{tick:Lt(t,dr[n]),header:r==="quarter"?gr(t):Lt(t,fr[r]),tooltip:Lt(t,hr[n]),edge:Lt(t,je[n]),range:pr(t,je[n])}}catch{return Ce.has(t)||(Ce.add(t),console.warn(`[gantt-chart] Unusable locale "${t}" - falling back to the built-in labels.`)),null}}function dn(t){const n=Math.max(0,Math.round(t/36e5));return n<24?`${n}h`:`${Math.round(n/24)}d`}function Rt(t){return typeof t!="number"||Number.isNaN(t)?null:Math.min(100,Math.max(0,t))}const fn={};function pt(t,n=fn){const r=(e,o)=>e!==void 0?e:t.readOnly!==void 0?!t.readOnly:o!==void 0?o:!n.readOnly,s=t.allowReorder??(t.readOnly===!0?!1:n.allowReorder??!1),a=t.isSummary===!0;return{canMove:r(t.allowMove,n.allowMove),canResize:!a&&r(t.allowResize,n.allowResize),canChangeProgress:!a&&r(t.allowProgressChange,n.allowProgressChange),canCreateLink:r(t.allowLinkCreate,n.allowLinkCreate),canDeleteLink:r(t.allowLinkDelete,n.allowLinkDelete),canReorder:s,minDate:t.minDate??n.minDate,maxDate:t.maxDate??n.maxDate}}function Dr(t=fn){return t.allowTaskCreate??!t.readOnly}function xr(t){const n=t==null?void 0:t.trim();return n?{"--gantt-bar-color":n,"--gantt-bar-color-hover":`color-mix(in srgb, ${n} 86%, #000)`,"--gantt-progress-color":`color-mix(in srgb, ${n} 62%, #000)`,"--gantt-bar-text-color":`oklch(from ${n} clamp(0, (l / 0.5637 - 1) * -infinity, 1) 0 h)`}:{}}const Mt=Object.keys(ut),br={minute:6e4,hour:36e5,day:864e5,week:6048e5};function yr(t){const{basePxPerDragStep:n,dragStepUnit:r,dragStepAmount:s}=ut[t];return n/(s*br[r])}function hn(t,n){const r=Mt.indexOf(t);if(r===-1)return t;const s=Math.min(Mt.length-1,Math.max(0,r+n));return Mt[s]}function vr(t,n){for(const r of Mt)if(t*yr(r)<=n)return r;return Mt[Mt.length-1]}const Sr=24,wr=120,Mr={delta:0,lastEventAt:0,locked:!1};function kr(t,n,r){const s=r-t.lastEventAt>=wr;if(!s&&t.locked)return{state:{delta:0,lastEventAt:r,locked:!0},step:0};const a=(s?0:t.delta)+n;return Math.abs(a)<Sr?{state:{delta:a,lastEventAt:r,locked:!1},step:0}:{state:{delta:0,lastEventAt:r,locked:!0},step:Math.sign(a)}}const Or=48,Ye=22;function le(t,n,r){const s=r-n;if(s<=0)return 0;const a=Math.min(Or,s/2);return a<=0?0:t<n+a?-Ye*Math.min(1,(n+a-t)/a):t>r-a?Ye*Math.min(1,(t-(r-a))/a):0}function mn(t){const n=t.getBoundingClientRect(),r=t.querySelector(".gantt-grid");return{left:n.left+((r==null?void 0:r.offsetWidth)??0),right:n.right,top:n.top,bottom:n.bottom}}const ue={before:0,after:0},Ft=2e3;function Ir({current:t,scrollLeft:n,viewportPx:r,totalPx:s,pxPerTick:a,canExtend:e}){if(a<=0||r<=0)return null;const o=Math.max(1,Math.ceil(r/a)),i=r/2;return(e==null?void 0:e.before)!==!1&&n<=i&&t.before<Ft?{...t,before:Math.min(Ft,t.before+o)}:(e==null?void 0:e.after)!==!1&&s-(n+r)<=i&&t.after<Ft?{...t,after:Math.min(Ft,t.after+o)}:null}function yt(t){const n=new Map(t.map(i=>[i.id,i])),r=new Map,s=new Map,a=new Map,e=[],o=i=>{const c=i.parentId;if(!c||c===i.id||!n.has(c))return null;const u=new Set([i.id]);let l=n.get(c);for(;l;){if(u.has(l.id))return null;if(u.add(l.id),!l.parentId)break;l=n.get(l.parentId)}return c};for(const i of t)r.set(i.id,o(i));for(const i of t){const c=r.get(i.id);if(!c){e.push(i.id);continue}const u=s.get(c);u?u.push(i.id):s.set(c,[i.id])}for(const i of t){let c=0,u=r.get(i.id)??null;for(;u;)c++,u=r.get(u)??null;a.set(i.id,c)}return{childIds:s,parentOf:r,depthOf:a,rootIds:e}}function jt(t,n,r=yt(t)){if(!r.parentOf.has(n))return[];const s=[n];for(let a=0;a<s.length;a++){const e=r.childIds.get(s[a]);e&&s.push(...e)}return s}function Er(t,n,r=yt(t)){const s=n instanceof Set?n:new Set(n);if(!s.size)return t;const a=e=>{let o=r.parentOf.get(e)??null;for(;o;){if(s.has(o))return!0;o=r.parentOf.get(o)??null}return!1};return t.filter(e=>!a(e.id))}function pn(t,n=yt(t)){if(!n.childIds.size)return t;const r=new Map(t.map(o=>[o.id,o])),s=[...n.childIds.keys()].filter(o=>r.has(o)).sort((o,i)=>(n.depthOf.get(i)??0)-(n.depthOf.get(o)??0)),a=new Map,e=o=>a.get(o)??r.get(o);for(const o of s){const i=r.get(o);if(!i)continue;const c=(n.childIds.get(o)??[]).map(e).filter(g=>g!==void 0);if(!c.length)continue;let u=1/0,l=-1/0,f=0,m=0,v=0,$=!1;for(const g of c){const x=Y(g.startDate).valueOf(),w=Y(g.endDate).valueOf();Number.isNaN(x)||(u=Math.min(u,x)),Number.isNaN(w)||(l=Math.max(l,w));const M=Rt(g.progress);M!==null&&($=!0);const S=M??0,L=Math.max(0,w-x);f+=S*L,m+=L,v+=S}if(!Number.isFinite(u)||!Number.isFinite(l))continue;const d=m>0?f/m:v/c.length;a.set(o,{...i,startDate:Y(u).toISOString(),endDate:Y(l).toISOString(),progress:i.progress??($?Math.round(d):void 0)})}return a.size?t.map(o=>a.get(o.id)??o):t}function _e(t){return t.split(".").map(Number)}function Ct(t){return[...t].sort((n,r)=>{const s=_e(n.sequence),a=_e(r.sequence),e=Math.max(s.length,a.length);for(let o=0;o<e;o++){const i=s[o]||0,c=a[o]||0;if(i!==c)return i-c}return 0})}const kt="";function ge(t,n,r){const s=new Map,a=new Map;if(n)for(const[e,o]of(r??yt(t)).parentOf)s.set(e,o);else{const e=new Map;for(const o of t)e.has(o.sequence)||e.set(o.sequence,o.id);for(const o of t){const i=o.sequence.lastIndexOf("."),c=i===-1?null:o.sequence.slice(0,i),u=c?e.get(c)??null:null;s.set(o.id,u===o.id?null:u)}}for(const e of t){const o=s.get(e.id)??kt,i=a.get(o);i?i.push(e.id):a.set(o,[e.id])}return{children:a,parentOf:s}}const Tr=[];function zt(t,n){const{children:r,parentOf:s}=ge(Ct(t),n);return{parentOf:s,childrenOf:a=>r.get(a??kt)??Tr}}function Pr(t,n,r,s){const a=s==="child"?r:t.parentOf.get(r)??null,e=t.childrenOf(a),o=s==="child"?e.length:e.indexOf(r)+(s==="after"?1:0),i=e.indexOf(n);return{taskId:n,toParentId:a,toIndex:i!==-1&&i<o?o-1:o}}function $e(t,n,r){const s=new Map(t.map(v=>[v.id,v])),a=s.get(n.taskId);if(!a)return"unknown-task";const e=n.toParentId?s.get(n.toParentId):null;if(n.toParentId&&!e)return"unknown-parent";if(r.canReorder&&!r.canReorder(a))return"read-only";const o=Ct(t),i=r.hierarchy?yt(o):void 0,{children:c,parentOf:u}=ge(o,r.hierarchy,i),l=u.get(a.id)??null;if(!r.hierarchy&&n.toParentId!==l)return"reparent-disabled";if(r.hierarchy&&n.toParentId&&new Set(jt(o,a.id,i)).has(n.toParentId))return"cycle";const m=(c.get(l??kt)??[]).indexOf(a.id);return n.toParentId===l&&n.toIndex===m?"no-op":null}function gn(t,n,r){if($e(t,n,r))return null;const s=Ct(t),{children:a,parentOf:e}=ge(s,r.hierarchy),o=e.get(n.taskId)??null,i=o??kt,c=n.toParentId??kt,u=[...a.get(i)??[]],l=u.indexOf(n.taskId);u.splice(l,1),a.set(i,u);const f=c===i?u:[...a.get(c)??[]],m=Math.min(Math.max(n.toIndex,0),f.length);f.splice(m,0,n.taskId),a.set(c,f);const v=new Map,$=(g,x)=>{(a.get(g)??[]).forEach((M,S)=>{const L=x?`${x}.${S+1}`:`${S+1}`;v.set(M,L),$(M,L)})};return $(kt,""),{tasks:t.map(g=>{const x=v.get(g.id)??g.sequence,w=r.hierarchy&&g.id===n.taskId?n.toParentId:g.parentId;return x===g.sequence&&w===g.parentId?g:{...g,sequence:x,parentId:w}}),change:{taskId:n.taskId,fromParentId:o,fromIndex:l,toParentId:n.toParentId,toIndex:m,afterId:f[m-1]??null,beforeId:f[m+1]??null}}}function Lr(t,n,r,s){if(!r.length)return{barMarginLeftAmount:0,barWidthSize:0};const a=ut[s],{tickUnit:e,unitPerTick:o}=a;let i=0,c=0,u=!1;const l=t.valueOf(),f=n.valueOf();for(const m of r){const v=m.startDate,$=v.add(o,e),d=m.widthPx,g=v.valueOf(),x=$.valueOf();if(x<=l){i+=d;continue}if(g>=f)break;const w=l>g?t:v,M=f<x?n:$,S=x-g,j=(M.valueOf()-w.valueOf())/S;if(!u&&w.valueOf()>g){const C=(w.valueOf()-g)/S;i+=C*d}c+=j*d,u=!0}return{barMarginLeftAmount:i,barWidthSize:Math.max(c,1)}}function Ar(t){return t.split(".").length-1}function Nr(t,n,r,s){return Ct(t).map((e,o)=>{var m;const i=s?s.depthOf.get(e.id)??0:Ar(e.sequence),c=(((m=s==null?void 0:s.childIds.get(e.id))==null?void 0:m.length)??0)>0,u=o+1,{barMarginLeftAmount:l,barWidthSize:f}=Lr(Y(e.startDate),Y(e.endDate),n,r);return{...e,barLeft:l,barWidth:f,depth:i,isSummary:c,order:u,originalOrder:u}})}const Rr="off";function jr(t,n,r){if(!t.length||!n.length)return 0;const s=t[0].startDate,a=n[0].startDate,e=s.valueOf()-a.valueOf();return e===0?0:e>0?wt(s,n,r)??0:-(wt(a,t,r)??0)}function Cr(t,n,r){const{tickUnit:s,unitPerTick:a}=ut[n];if(s!=="day"&&s!=="hour")return[];const e=s==="day"?a:1,o=[];let i=0,c=null;for(const u of t){const l=u.widthPx/e;for(let f=0;f<e;f++){const m=r(u.startDate.add(f,"day"));m&&(m.key===c?o[o.length-1].width+=l:o.push({left:i+f*l,width:l,...m.label!==void 0&&{label:m.label},...m.color!==void 0&&{color:m.color}})),c=(m==null?void 0:m.key)??null}i+=u.widthPx}return o}function St(t,n,r){const{dragStepUnit:s,dragStepAmount:a}=ut[r];return t.add(n*a,s)}function ne(t,n,r){const{dragStepUnit:s,dragStepAmount:a,basePxPerDragStep:e}=ut[r];return n.diff(t,s,!0)/a*e}function De(t,n){return!t&&!n?null:{min:t?Y(t):void 0,max:n?Y(n):void 0}}function xe(t,n,r,s,a){const{min:e,max:o}=s;if(!e&&!o)return{startDate:n,endDate:r};if(t==="bar"){let u=n,l=r;if(o&&l.valueOf()>o.valueOf()){const f=l.valueOf()-o.valueOf();u=u.subtract(f,"millisecond"),l=o}if(e&&u.valueOf()<e.valueOf()){const f=e.valueOf()-u.valueOf();u=e,l=l.add(f,"millisecond")}return{startDate:u,endDate:l}}if(t==="left"){let u=n;e&&u.valueOf()<e.valueOf()&&(u=e),o&&u.valueOf()>o.valueOf()&&(u=o);const l=St(r,-1,a);return u.valueOf()>l.valueOf()&&(u=l),{startDate:u,endDate:r}}let i=r;o&&i.valueOf()>o.valueOf()&&(i=o),e&&i.valueOf()<e.valueOf()&&(i=e);const c=St(n,1,a);return i.valueOf()<c.valueOf()&&(i=c),{startDate:n,endDate:i}}function $n(t,n,r,s,a){const e=[];for(const o of t){if(!n.has(o.id))continue;const i=o.id===r.id,c=pt(o,a),u=i?s:De(c.minDate,c.maxDate);u&&e.push({start:Y(i?r.startDate:o.startDate),end:Y(i?r.endDate:o.endDate),bounds:u})}return e}function Dn(t,n,r){const s=Math.min(0,n),a=Math.max(0,n);let e=n;for(const o of t){const{startDate:i}=xe("bar",o.start.add(n,"millisecond"),o.end.add(n,"millisecond"),o.bounds,r),c=Math.min(a,Math.max(s,i.valueOf()-o.start.valueOf()));Math.abs(c)<Math.abs(e)&&(e=c)}return e}function wt(t,n,r){if(!n.length)return null;const{tickUnit:s,unitPerTick:a}=ut[r],e=t.valueOf();if(e<n[0].startDate.valueOf())return null;let o=0;for(const i of n){const c=i.startDate.valueOf(),u=i.startDate.add(a,s).valueOf();if(e<u)return o+(e-c)/(u-c)*i.widthPx;o+=i.widthPx}return null}function xn(t,n,r){if(!n.length||t<0)return null;const{tickUnit:s,unitPerTick:a}=ut[r];let e=0;for(const o of n){if(t<e+o.widthPx){const i=o.startDate.valueOf(),c=o.startDate.add(a,s).valueOf()-i,u=o.widthPx>0?(t-e)/o.widthPx:0;return Y(i+u*c)}e+=o.widthPx}return null}function Yr(t,n){if(!t.length)return null;const{tickUnit:r,unitPerTick:s}=ut[n],a=t[t.length-1];return{start:t[0].startDate,end:a.startDate.add(s,r)}}function bn(t,n,r,s){if(!r.length)return null;const{tickUnit:a,unitPerTick:e}=ut[s],o=pe(r),i=Ot(o,Math.min(t,n)),c=Ot(o,Math.max(t,n));return!i||!c?null:{startDate:r[i.index].startDate,endDate:r[c.index].startDate.add(e,a),leftPx:i.left,widthPx:c.left+c.width-i.left}}function yn(t){let n=1/0,r=-1/0;for(const s of t){const a=s.startDate?Y(s.startDate).valueOf():NaN;Number.isNaN(a)||(n=Math.min(n,a));const e=s.endDate?Y(s.endDate).valueOf():NaN;Number.isNaN(e)||(r=Math.max(r,e))}return{minDate:Y(n),maxDate:Y(r)}}function _r(t,n,r,s){const a=ut[r],{tickUnit:e,unitPerTick:o}=a,i=rr*o;return{paddedMinDate:t.subtract(i+s.before*o,e),paddedMaxDate:n.add(i+s.after*o,e)}}function Hr(t,n,r){const s=ut[r],{tickUnit:a,unitPerTick:e,basePxPerDragStep:o,dragStepUnit:i,dragStepAmount:c}=s,u=[];let l=s.tickAlign?vn(t,s.tickAlign):t.startOf(a);const f=n.valueOf(),m=o/c;for(;l.valueOf()<f;){const v=l.add(e,a),d=v.diff(l,i)*m;u.push({startDate:l,widthPx:d}),l=v}return u}function vn(t,n,r){return n==="quarter"?Jn(t):n==="week"?Qn(t,r):t.startOf(n)}function Wr(t,n,r){const s=un(n,r),{header:a}=Et(n,r);if(t.length===0)return[];const e=[];let o=null;for(const i of t){const c=vn(i.startDate,s,r==null?void 0:r.firstDayOfWeek),u=c.valueOf(),l=a(c);o&&o.startDate.valueOf()===u?o.widthPx+=i.widthPx:(o&&e.push(o),o={label:l,widthPx:i.widthPx,startDate:c})}return o&&e.push(o),e}function Fr(t,n,r,s=!1,a=ue){const e=r==null?void 0:r.start,o=r==null?void 0:r.end;if(!t.length&&!(e&&o))return{bottomCells:[],transformedTasks:[]};const i=s?yt(t):void 0,c=i?pn(t,i):t;let u=e,l=o;if(!u||!l){const{minDate:v,maxDate:$}=yn(c),{paddedMinDate:d,paddedMaxDate:g}=_r(v,$,n,a);u=u??d,l=l??g}const f=Hr(u,l,n),m=Nr(c,f,n,i);return{bottomCells:f,transformedTasks:m}}function Ur({bottomRowCells:t,selectedScale:n,width:r,virtual:s}){const a=K(u=>u.localeOptions),e=p.useMemo(()=>Et(n,a),[n,a]),{virtualCells:o,leadingCellPx:i}=s,c=p.useMemo(()=>Gn(Wr(t,n,a)),[t,n,a]);return y.jsx("header",{className:"gantt-header",style:{width:`${r}px`},children:y.jsxs("div",{className:"gantt-header-content",children:[y.jsx("div",{className:"gantt-top-header",children:y.jsx("div",{className:"gantt-top-groups",children:c.map((u,l)=>y.jsx("div",{className:"gantt-top-group",style:{width:`${u.widthPx}px`},children:y.jsx("p",{className:"gantt-top-group-label",children:u.label})},`${u.label}-${l}`))})}),y.jsxs("div",{className:"gantt-bottom-row",children:[y.jsx("div",{style:{width:`${i}px`},"aria-hidden":"true"}),o.map(u=>{const l=t[u.index];return l?y.jsx("div",{className:"gantt-bottom-cell",style:{width:`${u.size}px`},children:e.tick(l.startDate)},`bottom-${u.index}`):null})]})]})})}const de={offsetX:0,offsetWidth:0};function He(t,n,r,s,a){if(r<0||a<0)return`M ${n} ${r} h ${(s-n)/2}`;const e=7,o=11,i=25,c=20,u=`M ${n} ${r}`,l=s-n,f=a-r,m=Math.abs(l),v=Math.abs(f),$=a<=r,d=a>=r,g=s>=n,x=s<=n,w=m>c,M=Math.abs(l/2),S=Math.abs(f/2);function L(){let h=u;const A=w&&g;if(A&&d)h+=` h ${M-e}`,h+=` a ${e} ${e} 0 0 1 ${e} ${e}`,h+=` v ${f-e*2}`,h+=` a ${e} ${e} 0 0 0 ${e} ${e}`,h+=` h ${M-e}`;else if(A)h+=` h ${M-e}`,h+=` a ${e} ${e} 0 0 0 ${e} -${e}`,h+=` v -${v-e*2}`,h+=` a ${e} ${e} 0 0 1 ${e} -${e}`,h+=` h ${M-e}`;else if(d){const R=r+f/2;h+=` h ${o}`,h+=` a ${e} ${e} 0 0 1 ${e} ${e}`,h+=` v ${R-r-e*2}`,h+=` a ${e} ${e} 0 0 1 -${e} ${e}`,h+=` h ${l-2*o}`,h+=` a ${e} ${e} 0 0 0 -${e} ${e}`,h+=` v ${R-r-e*2}`,h+=` a ${e} ${e} 0 0 0 ${e} ${e}`,h+=` h ${o}`}else{const R=r+f/2;h+=` h ${o}`,h+=` a ${e} ${e} 0 0 0 ${e} -${e}`,h+=` v -${r-R-e*2}`,h+=` a ${e} ${e} 0 0 0 -${e} -${e}`,h+=` h ${l-2*o}`,h+=` a ${e} ${e} 0 0 1 -${e} -${e}`,h+=` v -${r-R-e*2}`,h+=` a ${e} ${e} 0 0 1 ${e} -${e}`,h+=` h ${o}`}return h}function j(){let h=u;return d&&x?(h+=` h ${i-o}`,h+=` a ${e} ${e} 0 0 1 ${e} ${e}`,h+=` v ${f-e*2}`,h+=` a ${e} ${e} 0 0 1 -${e} ${e}`,h+=` h ${l-e*2}`):d&&g?(h+=` h ${l+i-o}`,h+=` a ${e} ${e} 0 0 1 ${e} ${e}`,h+=` v ${f-e*2}`,h+=` a ${e} ${e} 0 0 1 -${e} ${e}`,h+=` h -${i-o}`):$&&x?(h+=` h ${i-o}`,h+=` a ${e} ${e} 0 0 0 ${e} -${e}`,h+=` v ${f+e*2}`,h+=` a ${e} ${e} 0 0 0 -${e} -${e}`,h+=` h ${l-i+o}`):$&&g&&(h+=` h ${l+i-o}`,h+=` a ${e} ${e} 0 0 0 ${e} -${e}`,h+=` v ${f+e*2}`,h+=` a ${e} ${e} 0 0 0 -${e} -${e}`,h+=` h -${i-o}`),h}function C(){let h=u;const A=w&&x;return A&&d?(h+=` h ${-M+e}`,h+=` a ${e} ${e} 0 0 0 -${e} ${e}`,h+=` v ${v-e*2}`,h+=` a ${e} ${e} 0 0 1 -${e} ${e}`,h+=` h ${-M+e}`):A?(h+=` h ${-(M-e)}`,h+=` a ${e} ${e} 0 0 1 -${e} -${e}`,h+=` v ${-(v-e*2)}`,h+=` a ${e} ${e} 0 0 0 -${e} -${e}`,h+=` h ${-M+e}`):d?(h+=` h ${-o}`,h+=` a ${e} ${e} 0 0 0 -${e} ${e}`,h+=` v ${S-e*2}`,h+=` a ${e} ${e} 0 0 0 ${e} ${e}`,h+=` h ${o*2+l}`,h+=` a ${e} ${e} 0 0 1 ${e} ${e}`,h+=` v ${S-e*2}`,h+=` a ${e} ${e} 0 0 1 -${e} ${e}`,h+=` h ${-o}`):(h+=` h ${-o}`,h+=` a ${e} ${e} 0 0 1 -${e} -${e}`,h+=` v ${-(S-e*2)}`,h+=` a ${e} ${e} 0 0 1 ${e} -${e}`,h+=` h ${o*2+l}`,h+=` a ${e} ${e} 0 0 0 ${e} -${e}`,h+=` v ${-(S-e*2)}`,h+=` a ${e} ${e} 0 0 0 -${e} -${e}`,h+=` h ${-o}`),h}function P(){let h=u;return d&&x?(h+=` h ${l-i}`,h+=` a ${e} ${e} 0 0 0 -${e} ${e}`,h+=` v ${f-e*2}`,h+=` a ${e} ${e} 0 0 0 ${e} ${e}`,h+=` h ${i}`):d&&g?(h+=` h ${-i}`,h+=` a ${e} ${e} 0 0 0 -${e} ${e}`,h+=` v ${f-e*2}`,h+=` a ${e} ${e} 0 0 0 ${e} ${e}`,h+=` h ${l+i}`):$&&x?(h+=` h ${l-i}`,h+=` a ${e} ${e} 0 0 1 -${e} -${e}`,h+=` v ${f+e*2}`,h+=` a ${e} ${e} 0 0 1 ${e} -${e}`,h+=` h ${i}`):$&&g&&(h+=` h ${-i}`,h+=` a ${e} ${e} 0 0 1 -${e} -${e}`,h+=` v ${f+e*2}`,h+=` a ${e} ${e} 0 0 1 ${e} -${e}`,h+=` h ${l+i}`),h}switch(t){case"FS":return L();case"FF":return j();case"SF":return C();case"SS":return P();default:return`${u} L ${s} ${a}`}}function fe(t,n){const r=t.barLeft+n.offsetX;return{startX:r,endX:r+t.barWidth+n.offsetWidth}}function We(t,n,r=de){const{startX:s,endX:a}=fe(t,r);return{x:n==="start"?s:a,y:(t.order-1)*xt+xt/2}}function Gr(t,n,r,s,a){const e=xt,o=t.order-1,i=n.order-1,c=e/2,u=i*e+c,l=o*e+c,f=fe(n,s),m=fe(t,r),$={FS:[f.endX,m.startX],SS:[f.startX,m.startX],FF:[f.endX,m.endX],SF:[f.startX,m.endX]}[a];if(!$)return null;const[d,g]=$;return{fromX:d,fromY:u,toX:g,toY:l}}function Xr(t){return new Map(t.map(n=>[n.id,n]))}const Ut=32;function Br(t,n){const r=Math.min(t.fromY,t.toY)-Ut;if(Math.max(t.fromY,t.toY)+Ut<n.topPx||r>n.bottomPx)return!1;const a=Math.min(t.fromX,t.toX)-Ut,e=Math.max(t.fromX,t.toX)+Ut;return n.isBarVisible(a,e-a)}function zr(t,n){const r=[];for(const s of t.values()){const a=n[s.id]??de;for(const e of s.dependencies??[]){const o=t.get(e.targetId);if(!o)continue;const i=Gr(s,o,a,n[o.id]??de,e.type);i&&r.push({...e,sourceId:s.id,...i})}}return r}function Sn(t,n){const r=s=>s==="end"?"F":"S";return`${r(t)}${r(n)}`}function qr(t,n,r,s,a){const e=Math.floor(r/s);if(e<0)return null;let o=null,i=1/0;for(const f of t){if(f.order-1!==e)continue;const m=f.barLeft,v=m+f.barWidth,$=n<m?m-n:Math.max(0,n-v);$<i&&(i=$,o=f)}if(!o)return null;const c=o.barLeft,u=o.barWidth,l=Math.min(a,u/3);return{task:o,anchor:n>c+u-l?"end":"start"}}function Kr(t,n,r){var i;if(n===r)return"self";const s=new Map(t.map(c=>[c.id,c])),a=(i=s.get(r))==null?void 0:i.dependencies;if(a!=null&&a.some(c=>c.targetId===n))return"duplicate";const e=new Set([n]),o=[n];for(;o.length;){const c=s.get(o.pop());for(const u of(c==null?void 0:c.dependencies)??[]){if(u.targetId===r)return"cycle";e.has(u.targetId)||(e.add(u.targetId),o.push(u.targetId))}}return null}const Vr={self:"Cannot link a task to itself",duplicate:"These tasks are already linked",cycle:"That would create a circular dependency"};function Zr(t,n,r,s){let a=!1;const e=t.map(o=>o.id!==r?o:(a=!0,{...o,dependencies:[...o.dependencies??[],{targetId:n,type:s}]}));return a?e:t}function Jr(t,n,r){let s=!1;const a=t.map(e=>{if(e.id!==r||!e.dependencies)return e;const o=e.dependencies.filter(i=>i.targetId!==n);return o.length===e.dependencies.length?e:(s=!0,{...e,dependencies:o})});return s?a:t}const Qr=8,ts=14,es=220;function ns(t){const n=t;return n?n.isContentEditable||n.tagName==="INPUT"||n.tagName==="TEXTAREA"||n.tagName==="SELECT":!1}function rs({transformedTasks:t,virtual:n,interaction:r,onTasksChange:s,onDependencyDelete:a}){const e=$t(),o=K(S=>S.dragOffsets),i=K(S=>S.linkDraft),c=K(S=>S.selectedDependency),u=K(S=>S.selectedTaskId),l=K(S=>S.hoveredTaskId),f=p.useMemo(()=>Xr(t),[t]),m={topPx:n.rowStartPx,bottomPx:n.rowEndPx,isBarVisible:n.isBarVisible},v=zr(f,o).filter(S=>Br(S,m)),$=S=>(c==null?void 0:c.sourceId)===S.sourceId&&(c==null?void 0:c.targetId)===S.targetId,d=S=>l!==null&&(S.sourceId===l||S.targetId===l)||u!==null&&(S.sourceId===u||S.targetId===u),g=p.useCallback(()=>{var E;const{rawTasks:S,selectedDependency:L,setRawTasks:j,setSelectedDependency:C}=e.getState();if(!L)return;const{sourceId:P,targetId:h}=L,A=S.find(O=>O.id===P),R=(E=A==null?void 0:A.dependencies)==null?void 0:E.find(O=>O.targetId===h);if(!A||!R||!pt(A,r).canDeleteLink)return;const U={predecessorId:h,successorId:P,type:R.type};if((a==null?void 0:a(U))===!1)return;C(null);const F=Jr(S,h,P);j(F),s==null||s(F)},[e,r,a,s]);p.useEffect(()=>{if(!c)return;const S=j=>{ns(j.target)||(j.key==="Delete"||j.key==="Backspace"?(j.preventDefault(),g()):j.key==="Escape"&&e.getState().setSelectedDependency(null))},L=()=>{e.getState().setSelectedDependency(null)};return document.addEventListener("keydown",S),document.addEventListener("pointerdown",L),()=>{document.removeEventListener("keydown",S),document.removeEventListener("pointerdown",L)}},[c,g,e]);const x=p.useMemo(()=>{if(!i)return null;const S=f.get(i.fromTaskId);if(!S)return null;const L=We(S,i.fromAnchor,o[S.id]),j=i.hoverTaskId?f.get(i.hoverTaskId):void 0,C=i.hoverAnchor&&Sn(i.fromAnchor,i.hoverAnchor),P=!i.rejection&&j!==void 0&&i.hoverAnchor!==null,h=P&&j&&i.hoverAnchor?We(j,i.hoverAnchor,o[j.id]):{x:i.toX,y:i.toY},A=h.x>n.totalWidth-es;return{from:L,d:P&&C?He(C,L.x,L.y,h.x,h.y):`M ${L.x} ${L.y} L ${h.x} ${h.y}`,armed:P,type:C,rejection:i.rejection,label:{x:A?h.x-12:h.x+12,y:Math.max(ts,h.y-8),anchor:A?"end":"start"}}},[i,f,o,n.totalWidth]),M=`gantt-arrowhead-${p.useId().replace(/[^a-zA-Z0-9]/g,"")}`;return y.jsxs("svg",{className:`gantt-dependency-arrows${i?" linking":""}`,style:{height:`${n.totalHeight}px`},children:[y.jsx("defs",{children:y.jsx("marker",{id:M,markerWidth:"5",markerHeight:"5",refX:"4.5",refY:"2.5",orient:"auto",children:y.jsx("polygon",{className:"gantt-dependency-arrow-head",points:"0 0, 5 2.5, 0 5"})})}),v.map((S,L)=>{const j=He(S.type,S.fromX,S.fromY,S.toX,S.toY),C=$(S),P=f.get(S.sourceId),h=P!==void 0&&pt(P,r).canDeleteLink;return y.jsxs("g",{children:[h&&y.jsx("path",{className:"gantt-dependency-hit",d:j,fill:"none",onPointerDown:A=>{A.stopPropagation(),e.getState().setSelectedDependency({sourceId:S.sourceId,targetId:S.targetId})}}),y.jsx("path",{className:`gantt-dependency-arrow${C?" selected":""}${d(S)?" related":""}`,d:j,markerEnd:`url(#${M})`,fill:"none"}),C&&y.jsxs("g",{className:"gantt-dependency-delete",transform:`translate(${(S.fromX+S.toX)/2} ${(S.fromY+S.toY)/2})`,role:"button","aria-label":`Delete ${S.type} dependency`,onPointerDown:A=>{A.stopPropagation(),g()},children:[y.jsx("circle",{r:Qr}),y.jsx("path",{d:"M -3 -3 L 3 3 M 3 -3 L -3 3"})]})]},`arrow-${L}`)}),x&&y.jsxs("g",{className:"gantt-link-preview",children:[y.jsx("path",{className:`gantt-link-preview-line${x.rejection?" invalid":""}${x.armed?" armed":""}`,d:x.d,fill:"none",markerEnd:x.rejection?void 0:`url(#${M})`}),y.jsx("circle",{className:"gantt-link-preview-origin",cx:x.from.x,cy:x.from.y,r:"3"}),x.armed&&x.type&&y.jsx("text",{className:"gantt-link-preview-type",x:x.label.x,y:x.label.y,textAnchor:x.label.anchor,children:x.type}),x.rejection&&y.jsx("text",{className:"gantt-link-preview-reason",x:x.label.x,y:x.label.y,textAnchor:x.label.anchor,children:Vr[x.rejection]})]})]})}function ss(){const t=K(d=>d.currentTask),n=K(d=>d.dragOffsets),r=K(d=>d.dragMode),s=K(d=>d.selectedScale),a=K(d=>d.localeOptions),e=K(d=>d.bottomRowCells),{edge:o,range:i}=p.useMemo(()=>Et(s,a),[s,a]),c=p.useMemo(()=>pe(e),[e]),u=t?n[t.id]:void 0;if(!t||!u)return null;const l=t.barLeft+u.offsetX,f=l+t.barWidth+u.offsetWidth,m=Ot(c,l),v=Ot(c,f);if(!m||!v)return null;const $=r==="left"?[{cell:m,label:o(u.offsetStartDate)}]:r==="right"?[{cell:v,label:o(u.offsetEndDate)}]:m.index===v.index?[{cell:m,label:i(u.offsetStartDate,u.offsetEndDate)}]:[{cell:m,label:o(u.offsetStartDate)},{cell:v,label:o(u.offsetEndDate)}];return y.jsxs("div",{className:"gantt-drag-guides","aria-hidden":"true",children:[$.map(({cell:d,label:g})=>y.jsx("div",{className:"gantt-drag-cell",style:{left:`${d.left}px`,width:`${d.width}px`},children:y.jsx("span",{children:g})},d.index)),y.jsx("div",{className:"gantt-drag-footprint",style:{left:`${l}px`,width:`${Math.max(f-l,2)}px`}})]})}function os({width:t,onWidthChange:n}){const r=o=>Math.min(Le,Math.max(Pe,o)),s=o=>{if(!o.isPrimary||o.button!==0)return;const i=o.clientX,c=t;o.currentTarget.setPointerCapture(o.pointerId);const u=f=>{f.pointerId===o.pointerId&&n(r(c+f.clientX-i))},l=f=>{f.pointerId===o.pointerId&&(document.removeEventListener("pointermove",u),document.removeEventListener("pointerup",l),document.removeEventListener("pointercancel",l))};document.addEventListener("pointermove",u),document.addEventListener("pointerup",l),document.addEventListener("pointercancel",l)},a=o=>{var m,v;const i=(m=o.parentElement)==null?void 0:m.querySelectorAll(".gantt-grid-cell-text");if(!(i!=null&&i.length))return;const c=(v=o.parentElement)==null?void 0:v.querySelector(".gantt-grid");if(!c)return;const u=c.getBoundingClientRect().width/c.offsetWidth||1,l=document.createRange();let f=0;i.forEach($=>{const d=$.closest(".gantt-grid-row");if(!d)return;l.selectNodeContents($);const g=l.getBoundingClientRect().width;let w=$.getBoundingClientRect().left-d.getBoundingClientRect().left+g;for(let M=$.nextElementSibling;M;M=M.nextElementSibling)w+=M.getBoundingClientRect().width;f=Math.max(f,w)}),n(r(Math.ceil(f/u+10)+1))},e=o=>{if(o.key==="Enter"){o.preventDefault(),a(o.currentTarget);return}o.key!=="ArrowLeft"&&o.key!=="ArrowRight"||(o.preventDefault(),n(r(t+(o.key==="ArrowLeft"?-16:16))))};return y.jsx("div",{className:"gantt-grid-splitter",style:{left:`${t-2}px`},onPointerDown:s,onDoubleClick:o=>a(o.currentTarget),onKeyDown:e,role:"separator","aria-orientation":"vertical","aria-label":"Resize task list","aria-valuenow":t,"aria-valuemin":Pe,"aria-valuemax":Le,tabIndex:0})}function as({width:t,onAdd:n}){return y.jsx("div",{className:"gantt-grid-footer",style:{width:`${t}px`},children:y.jsxs("button",{type:"button",className:"gantt-grid-add",onClick:n,children:[y.jsx("svg",{viewBox:"0 0 12 12","aria-hidden":"true",children:y.jsx("path",{d:"M6 2.5 V9.5 M2.5 6 H9.5"})}),"Add task"]})})}function is({leftPx:t}){return t===null?null:y.jsx("div",{className:"gantt-today-marker",style:{left:`${t}px`},"aria-hidden":"true"})}function cs({leftPx:t}){return t===null?null:y.jsx("div",{className:"gantt-today-dot",style:{left:`${t}px`},"aria-hidden":"true"})}function dt(t){const n=p.useRef(t);return p.useLayoutEffect(()=>{n.current=t}),n}const ls=400,us=10;function qt(t,n,r=document){if(t.pointerType==="mouse")return n(t.clientX,t.clientY),null;let s=t.clientX,a=t.clientY,e;const o=()=>{e!==void 0&&clearTimeout(e),e=void 0,r.removeEventListener("pointermove",i),r.removeEventListener("pointerup",c),r.removeEventListener("pointercancel",c)};function i(u){const l=u;if(l.pointerId!==t.pointerId)return;if(Math.abs(l.clientX-t.clientX)+Math.abs(l.clientY-t.clientY)>us){o();return}s=l.clientX,a=l.clientY}function c(u){u.pointerId===t.pointerId&&o()}return r.addEventListener("pointermove",i),r.addEventListener("pointerup",c),r.addEventListener("pointercancel",c),e=setTimeout(()=>{o(),n(s,a)},ls),o}function Kt(){const t=n=>n.preventDefault();return document.addEventListener("touchmove",t,{passive:!1}),()=>document.removeEventListener("touchmove",t)}const Fe=.25;function ds({rows:t,virtualItems:n,bodyRef:r,hierarchy:s,move:a}){const e=$t(),o=K($=>$.reorderDraft),i=dt(t),c=dt(n),u=dt(a),l=p.useRef(null),f=p.useRef(null);p.useEffect(()=>()=>{var $,d;($=l.current)==null||$.call(l),(d=f.current)==null||d.call(f)},[]);const m=($,d,g,x)=>{const w=zt(e.getState().rawTasks,s);try{x.setPointerCapture(d)}catch{}const M=g==="mouse"?null:Kt(),S=document.body.style.cursor;document.body.style.cursor="grabbing";const L=F=>{const E=r.current;if(!E)return null;const O=F-E.getBoundingClientRect().top,D=c.current.find(G=>O>=G.start&&O<G.start+G.size);if(!D)return null;const k=i.current[D.index],b=k==null?void 0:k.tasks[0];if(!k||!b||k.tasks.length>1)return null;const T=(O-D.start)/D.size,N=T<Fe?"before":T>1-Fe?"after":"child",H=Pr(w,$,b.id,N);return{taskId:$,rowIndex:D.index,mode:N,depth:N==="child"?k.depth+1:k.depth,move:H,rejection:u.current.validate(H)}};let j=null;const C=F=>{F.pointerId===d&&(j=F.clientY,e.getState().setReorderDraft(L(F.clientY)))},P=()=>{M==null||M(),document.body.style.cursor=S,document.removeEventListener("pointermove",C),document.removeEventListener("pointerup",U),document.removeEventListener("pointercancel",A),document.removeEventListener("keydown",R);try{x.releasePointerCapture(d)}catch{}},h=()=>{P(),f.current=null,e.getState().setReorderDraft(null)},A=F=>{F.pointerId===d&&h()};function R(F){F.key==="Escape"&&h()}function U(F){if(F.pointerId!==d)return;const E=j===null?null:L(j)??e.getState().reorderDraft;h(),E!=null&&E.move&&!E.rejection&&u.current.apply(E.move)}f.current=h,document.addEventListener("pointermove",C),document.addEventListener("pointerup",U),document.addEventListener("pointercancel",A),document.addEventListener("keydown",R)};return{onGripPointerDown:($,d)=>{var S,L;if(!d.isPrimary||d.button!==0||f.current)return;(S=l.current)==null||S.call(l),l.current=null;const g=(L=i.current[$])==null?void 0:L.tasks[0];if(!g)return;const x=d.currentTarget,{pointerId:w,pointerType:M}=d;l.current=qt({pointerType:M,pointerId:w,clientX:d.clientX,clientY:d.clientY},()=>{l.current=null,m(g.id,w,M,x)})},draft:o}}const Ue=5,At=(t,n)=>Math.min(Math.max(t,0),Math.max(n,0));function fs(t,n){var s;const r=At(t.row,n.length-1);return{row:r,col:At(t.col,(((s=n[r])==null?void 0:s.cells)??1)-1)}}function hs(t,n,r){var c;const s=r[n.row];if(!s)return null;const a=r.length-1,e=At(n.col,s.cells-1),o=t.key==="ArrowRight"?1:-1,i=t.key==="ArrowLeft"||t.key==="ArrowRight";if(i&&(t.altKey||t.shiftKey)){let u="right";return t.altKey&&(u=t.shiftKey?"left":"bar"),{kind:"nudge",col:e,mode:u,steps:o}}if(t.altKey&&(t.key==="ArrowUp"||t.key==="ArrowDown"))return{kind:"reorder",col:e,delta:t.key==="ArrowDown"?1:-1};if(i&&(t.ctrlKey||t.metaKey))return{kind:"reparent",col:e,direction:o};if((t.ctrlKey||t.metaKey)&&(t.key==="ArrowUp"||t.key==="ArrowDown"))return{kind:"zoom",direction:t.key==="ArrowUp"?-1:1};switch(t.key){case"ArrowDown":return{kind:"focus",focus:{row:Math.min(n.row+1,a),col:e}};case"ArrowUp":return{kind:"focus",focus:{row:Math.max(n.row-1,0),col:e}};case"ArrowRight":return e===0&&s.expandable&&!s.expanded?{kind:"toggle",col:e}:{kind:"focus",focus:{row:n.row,col:At(e+1,s.cells-1)}};case"ArrowLeft":return e===0&&s.expandable&&s.expanded?{kind:"toggle",col:e}:{kind:"focus",focus:{row:n.row,col:At(e-1,s.cells-1)}};case"Home":return t.ctrlKey||t.metaKey?{kind:"focus",focus:{row:0,col:0}}:{kind:"focus",focus:{row:n.row,col:0}};case"End":{const u=t.ctrlKey||t.metaKey?a:n.row;return{kind:"focus",focus:{row:u,col:Math.max((((c=r[u])==null?void 0:c.cells)??1)-1,0)}}}case"Enter":case" ":return s.expandable?{kind:"toggle",col:e}:{kind:"activate",col:e};case"Delete":case"Backspace":return{kind:"delete",col:e};case"+":case"=":return{kind:"progress",col:e,delta:Ue};case"-":case"_":return{kind:"progress",col:e,delta:-Ue};default:return null}}function ms(t,n,r){if(!(!t||!t.tasks.length))return t.tasks[Math.max(0,n-r)]??t.tasks[0]}function wn(t,n,r=null){const s=[t.name];return t.isSummary&&s.push("summary"),s.push(`${n(Y(t.startDate))} to ${n(Y(t.endDate))}`),r!==null&&s.push(`${r}% complete`),s.join(", ")}function ps(t,n,r,s){const a=s?`under ${s}`:"at the top level";return`${t} moved to ${n} of ${r} ${a}`}function Mn(t,n,r){var s;return{role:"row","aria-level":t.level,"aria-posinset":t.posinset,"aria-setsize":t.setsize,"aria-rowindex":n+1+r.headerOffset,...r.expandable?{"aria-expanded":r.expanded}:null,...(s=r.ownedIds)!=null&&s.length?{"aria-owns":r.ownedIds.join(" ")}:null}}function gs(t,n,r,s,a,e){const{canMove:o,canResize:i,minDate:c,maxDate:u}=pt(n,e);if((r==="bar"?!o:!i)||!s)return null;const l=new Set(n.isSummary&&r==="bar"?jt(t,n.id):[n.id]),f=De(c,u),m=Y(n.startDate),v=Y(n.endDate);let $=r==="right"?m:St(m,s,a),d=r==="left"?v:St(v,s,a),g=null;if(r==="bar"){const w=$n(t,l,n,f,e);if(w.length){if(g=Dn(w,$.valueOf()-m.valueOf(),a),g===0)return null;$=m.add(g,"millisecond"),d=v.add(g,"millisecond")}}else if(f){const w=xe(r,$,d,f,a);$=w.startDate,d=w.endDate}if(r!=="bar"&&!d.isAfter($)||r==="left"&&$.valueOf()===m.valueOf()||r==="right"&&d.valueOf()===v.valueOf())return null;const x=w=>g!==null?Y(w).add(g,"millisecond").toISOString():St(Y(w),s,a).toISOString();return t.map(w=>{if(!l.has(w.id))return w;switch(r){case"bar":return{...w,startDate:x(w.startDate),endDate:x(w.endDate)};case"left":return{...w,startDate:$.toISOString()};default:return{...w,endDate:d.toISOString()}}})}function $s(t,n,r,s){if(!pt(n,s).canChangeProgress)return null;const a=Rt(n.progress);if(a===null)return null;const e=Math.min(100,Math.max(0,a+r));return e===a?null:t.map(o=>o.id===n.id?{...o,progress:e}:o)}function Ds(t,n,r){if(!pt(n,r).canMove)return null;const s=new Set(jt(t,n.id));if(!s.size)return null;const a=t.filter(e=>!s.has(e.id));return a.length===t.length?null:a}function be(t,n){var r;return n&&!!((r=t.tasks[0])!=null&&r.isSummary)}function Ge(t){return Y(t.endDate).valueOf()}function xs(t){if(t.length<2)return t.length?[[...t]]:[];const n=t.map((a,e)=>({task:a,index:e})).sort((a,e)=>{const o=Y(a.task.startDate).valueOf()-Y(e.task.startDate).valueOf();return o!==0?o:a.index-e.index}),r=[],s=[];for(const{task:a}of n){const e=Y(a.startDate).valueOf(),o=s.findIndex(i=>i<=e);o===-1?(r.push([a]),s.push(Ge(a))):(r[o].push(a),s[o]=Math.max(s[o],Ge(a)))}return r}function bs(t){const n=new Map;for(const a of t){if(!a.lane)continue;const e=n.get(a.lane);e?e.push(a):n.set(a.lane,[a])}if(!n.size)return t.map(a=>[a]);const r=[],s=new Set;for(const a of t){if(!a.lane){r.push([a]);continue}s.has(a.lane)||(s.add(a.lane),r.push(...xs(n.get(a.lane)??[])))}return r}function ys(t){const n=bs(t),r=n.map(i=>i.map(c=>c.id).join("+")),s=[],a=new Map,e=[];n.forEach((i,c)=>{const u=i[0].depth,l=u===0?"":e[u-1]??"";s.push(l),a.set(l,(a.get(l)??0)+1),e[u]=r[c],e.length=u+1});const o=new Map;return n.map((i,c)=>{const u=s[c],l=(o.get(u)??0)+1;o.set(u,l);const f=i[0].depth,m=c+1;return{id:r[c],tasks:i.map(v=>v.order===m?v:{...v,order:m}),depth:f,level:f+1,posinset:l,setsize:a.get(u)??1}})}function vs({rows:t,virtualItems:n,totalHeight:r,width:s,showRowNumbers:a,hierarchy:e,collapsedIds:o,onToggleCollapse:i,focus:c,reorderEnabled:u,interaction:l,move:f,onRowClick:m,onRowDoubleClick:v}){const $=p.useRef(null),d=K(M=>M.selectedTaskId),{onGripPointerDown:g,draft:x}=ds({rows:t,virtualItems:n,bodyRef:$,hierarchy:e,move:f}),w=x?n.find(M=>M.index===x.rowIndex):void 0;return y.jsxs("div",{className:"gantt-grid",style:{width:`${s}px`},role:"presentation",children:[y.jsxs("div",{className:"gantt-grid-header",style:{height:`${er}px`},role:"row","aria-rowindex":1,children:[y.jsx("div",{className:"gantt-grid-header-cell",role:"columnheader",children:y.jsx("span",{className:"gantt-sr-only",children:"Task name"})}),y.jsx("span",{className:"gantt-sr-only",role:"columnheader",children:"Timeline"})]}),y.jsxs("div",{ref:$,className:"gantt-grid-body",style:{height:`${r}px`},role:"rowgroup",children:[n.map(M=>{const S=t[M.index];if(!S)return null;const L=S.tasks[0],j=be(S,e),C=o.has(S.id),P=c.row===M.index,h=Mn(S,M.index,{headerOffset:1,expandable:j,expanded:!C,ownedIds:S.tasks.map(U=>`task-${U.id}`)}),A={height:`${M.size}px`,transform:`translateY(${M.start}px)`};if(!L)return null;const R=u&&S.tasks.length===1&&pt(L,l).canReorder;return y.jsx("div",{"data-row-id":S.id,className:["gantt-grid-row",L.isSummary?"summary":"",L.id===d?"selected":"",L.id===(x==null?void 0:x.taskId)?"dragging":"",L.className??""].filter(Boolean).join(" "),style:A,onClick:m&&(U=>m(L,U)),onDoubleClick:v&&(U=>v(L,U)),...h,children:y.jsxs("div",{className:"gantt-grid-cell",title:L.name,role:"gridcell",tabIndex:P&&c.col===0?0:-1,"data-gantt-cell":`${M.index}:0`,children:[u&&(R?y.jsx("button",{type:"button",className:"gantt-grid-grip",onPointerDown:U=>{U.stopPropagation(),g(M.index,U)},tabIndex:-1,"aria-hidden":"true",children:y.jsxs("svg",{viewBox:"0 0 12 12","aria-hidden":"true",children:[y.jsx("circle",{cx:"4.5",cy:"2.5",r:"1.1"}),y.jsx("circle",{cx:"7.5",cy:"2.5",r:"1.1"}),y.jsx("circle",{cx:"4.5",cy:"6",r:"1.1"}),y.jsx("circle",{cx:"7.5",cy:"6",r:"1.1"}),y.jsx("circle",{cx:"4.5",cy:"9.5",r:"1.1"}),y.jsx("circle",{cx:"7.5",cy:"9.5",r:"1.1"})]})}):y.jsx("span",{className:"gantt-grid-grip-spacer"})),a&&y.jsx("span",{className:"gantt-grid-no",children:L.sequence}),y.jsx("span",{className:"gantt-grid-indent",style:{width:`${S.depth*Ae}px`}}),j?y.jsx("button",{type:"button",className:`gantt-grid-expander${C?"":" open"}`,onClick:U=>{U.stopPropagation(),i(S.id)},tabIndex:-1,"aria-hidden":"true",children:y.jsx("svg",{viewBox:"0 0 12 12","aria-hidden":"true",children:y.jsx("path",{d:"M4 2.5 L8 6 L4 9.5"})})}):y.jsx("span",{className:"gantt-grid-expander-spacer"}),y.jsx("span",{className:"gantt-grid-cell-text",children:L.name}),S.tasks.length>1&&y.jsxs("span",{className:"gantt-grid-lane-count",children:["+",S.tasks.length-1]})]})},`grid-row-${S.id}`)}),x&&w&&y.jsx("div",{className:["gantt-grid-drop",x.mode==="child"?"child":"",x.rejection?"blocked":""].filter(Boolean).join(" "),style:x.mode==="child"?{top:`${w.start}px`,height:`${w.size}px`}:{top:`${w.start+(x.mode==="after"?w.size:0)}px`,marginLeft:`${x.depth*Ae}px`},"aria-hidden":"true"})]})]})}function Ss(t,n={},r,s){const a=$t(),e=p.useRef(null),o=p.useRef(!1),i=p.useRef(null),c=p.useRef(n);c.current=n,p.useEffect(()=>()=>{var M;return(M=i.current)==null?void 0:M.call(i)},[]);const u=K(M=>M.selectedScale),{basePxPerDragStep:l}=ut[u],{canMove:f,canResize:m,minDate:v,maxDate:$}=pt(t,r),d=M=>{const S=M.currentTarget.getBoundingClientRect(),L=M.pointerType!=="mouse",j=L?an:Nt,C=L?or:ie;if(m&&S.width>=C){const P=M.clientX-S.left;if(P<=j)return"left";if(P>=S.width-j)return"right"}return f?"bar":null},g=M=>{var P;if(!M.isPrimary||M.button!==0||e.current)return;(P=i.current)==null||P.call(i),i.current=null;const S=d(M);if(!S)return;const L=M.currentTarget,{pointerId:j,pointerType:C}=M;i.current=qt({pointerType:C,pointerId:j,clientX:M.clientX,clientY:M.clientY},h=>{i.current=null,x(S,j,C,h,L)})},x=(M,S,L,j,C)=>{o.current=!1;const P=C.closest(".gantt-scroll-container"),h=a.getState().rawTasks,A=t.isSummary?jt(h,t.id):[t.id],R=new Set(A),U=new Map(h.filter(I=>R.has(I.id)).map(I=>[I.id,{start:Y(I.startDate),end:Y(I.endDate)}]));U.set(t.id,{start:Y(t.startDate),end:Y(t.endDate)});const F=De(v,$),E=$n(h,R,t,F,r);e.current={mode:M,pointerId:S,initialClientX:j,initialStartDate:Y(t.startDate),initialEndDate:Y(t.endDate),initialBarWidth:t.barWidth,dragSteps:0,basePxPerDragStep:l,lastClientX:j,autoScrollPx:0,scaleKey:u,taskId:t.id,taskIds:A,initialDates:U,snapDays:0,bounds:F,boundedMembers:E,moveDeltaMs:null,clamped:null},a.getState().setCurrentTask(t),a.getState().setDragMode(M),C.focus({preventScroll:!0});try{C.setPointerCapture(S)}catch{}const O=L==="mouse"?null:Kt(),D=()=>{const I=e.current;if(!I)return;const _=I.lastClientX-I.initialClientX+I.autoScrollPx,W=Math.round(_/I.basePxPerDragStep),at=Math.floor((I.initialBarWidth-I.basePxPerDragStep)/I.basePxPerDragStep);let ot=W;if(I.mode==="left"&&(ot=Math.min(W,at)),I.mode==="right"&&(ot=Math.max(W,-at)),ot===I.dragSteps)return;I.dragSteps=ot,o.current=!0;const it=ot*I.basePxPerDragStep,ct=X=>St(X,ot,I.scaleKey);let V,Q,nt=0,lt=0;switch(I.mode){case"bar":V=ct(I.initialStartDate),Q=ct(I.initialEndDate),nt=it,lt=0;break;case"left":V=ct(I.initialStartDate),Q=I.initialEndDate,nt=it,lt=-it;break;case"right":V=I.initialStartDate,Q=ct(I.initialEndDate),nt=0,lt=it;break}let Z=0;if(s!=null&&s.skipsNonWorkingDays){const X=I.mode==="right"?Q:V,rt=s.snapForward(X);Z=rt.diff(X,"day"),I.mode==="left"&&rt.valueOf()>=Q.valueOf()&&(Z=0)}I.snapDays=Z;const ft=Z?ne(V,V.add(Z,"day"),I.scaleKey):0;if(Z&&(I.mode!=="right"&&(V=V.add(Z,"day"),nt+=ft),I.mode!=="left"&&(Q=Q.add(Z,"day")),I.mode==="left"&&(lt-=ft),I.mode==="right"&&(lt+=ft)),I.mode==="bar"){if(I.boundedMembers.length){const X=V.valueOf()-I.initialStartDate.valueOf(),rt=Dn(I.boundedMembers,X,I.scaleKey);I.moveDeltaMs=rt,V=I.initialStartDate.add(rt,"millisecond"),Q=I.initialEndDate.add(rt,"millisecond")}}else if(I.bounds){const X=xe(I.mode,V,Q,I.bounds,I.scaleKey);I.clamped=X,V=X.startDate,Q=X.endDate}if(I.moveDeltaMs!==null||I.clamped){const X=ne(I.initialStartDate,V,I.scaleKey),rt=ne(I.initialEndDate,Q,I.scaleKey);nt=X,lt=rt-X}const Dt=I.moveDeltaMs!==null?X=>X.add(I.moveDeltaMs,"millisecond"):X=>ct(X).add(Z,"day"),B=I.moveDeltaMs!==null?nt:it+ft,z={};for(const X of I.taskIds){const rt=I.initialDates.get(X),vt=X===I.taskId||!rt,ht=vt?V:Dt(rt.start),Vt=vt?Q:Dt(rt.end);z[X]={offsetX:vt?nt:B,offsetWidth:vt?lt:0,offsetStartDate:ht,offsetEndDate:Vt}}a.getState().setDragOffsets(z)};let k=null,b=0;const T=()=>{k!==null&&cancelAnimationFrame(k),k=null,b=0},N=I=>{!P||!I.autoScrollPx||(P.scrollBy({left:-I.autoScrollPx,behavior:"smooth"}),I.autoScrollPx=0)},H=()=>{k=null;const I=e.current;if(!I||!P||b===0)return;const _=P.scrollLeft;P.scrollLeft=_+b;const W=P.scrollLeft-_;W!==0&&(I.autoScrollPx+=W,D()),k=requestAnimationFrame(H)},G=I=>{if(c.current.autoScroll===!1||!P)return;const{left:_,right:W}=mn(P);b=le(I,_,W),b===0?T():k===null&&(k=requestAnimationFrame(H))},q=I=>{const _=e.current;!_||I.pointerId!==_.pointerId||(_.lastClientX=I.clientX,G(I.clientX),D())},J=()=>{T(),document.removeEventListener("pointermove",q),document.removeEventListener("pointerup",st),document.removeEventListener("pointercancel",et),O==null||O()},tt=I=>{N(I),e.current=null,a.getState().setCurrentTask(null),a.getState().setDragMode(null),a.getState().clearDragOffsets(I.taskIds)},et=I=>{const _=e.current;!_||I.pointerId!==_.pointerId||(J(),tt(_))},st=I=>{var V,Q,nt,lt;const _=e.current;if(!_||I.pointerId!==_.pointerId)return;if(J(),_.dragSteps===0){tt(_);return}const W=Z=>_.moveDeltaMs!==null?Y(Z).add(_.moveDeltaMs,"millisecond").toISOString():St(Y(Z),_.dragSteps,_.scaleKey).add(_.snapDays,"day").toISOString(),at=(V=_.clamped)==null?void 0:V.startDate.toISOString(),ot=(Q=_.clamped)==null?void 0:Q.endDate.toISOString(),it=new Set(_.taskIds),ct=a.getState().rawTasks.map(Z=>{if(!it.has(Z.id))return Z;switch(_.mode){case"bar":return{...Z,startDate:W(Z.startDate),endDate:W(Z.endDate)};case"left":return{...Z,startDate:at??W(Z.startDate)};case"right":return{...Z,endDate:ot??W(Z.endDate)}}});e.current=null,a.getState().setCurrentTask(null),a.getState().setDragMode(null),a.getState().setRawTasks(ct),(lt=(nt=c.current).onTasksChange)==null||lt.call(nt,ct)};document.addEventListener("pointermove",q),document.addEventListener("pointerup",st),document.addEventListener("pointercancel",et)};return{onPointerDown:g,consumeDragClick:()=>o.current?(o.current=!1,!0):!1}}const re={hoverTaskId:null,hoverAnchor:null,rejection:null};function ws({task:t,interaction:n,onTasksChange:r,onDependencyCreate:s}){const a=$t(),e=p.useRef(null),o=p.useRef(null);return p.useEffect(()=>()=>{var c;return(c=o.current)==null?void 0:c.call(o)},[]),{startLink:c=>u=>{if(!u.isPrimary||u.button!==0||e.current!==null)return;u.stopPropagation(),u.preventDefault();const l=u.currentTarget,f=l.closest(".gantt-content"),m=l.closest(".gantt-scroll-container");if(!f)return;const v=u.pointerId;e.current=v;try{l.setPointerCapture(v)}catch{}const $=u.clientX,d=u.clientY;let g=!1,x=$,w=d;const M=document.body.style.cursor,S=(b,T)=>{const N=f.getBoundingClientRect(),H=qr(a.getState().rowTasks,b-N.left,T-N.top,xt,ar);if(!H)return re;const G=a.getState().rawTasks,q=G.find(tt=>tt.id===H.task.id);return H.task.id===t.id||q!==void 0&&pt(q,n).canCreateLink?{hoverTaskId:H.task.id,hoverAnchor:H.anchor,rejection:Kr(G,t.id,H.task.id)}:re},L=(b,T)=>{const N=f.getBoundingClientRect();a.getState().setLinkDraft({fromTaskId:t.id,fromAnchor:c,toX:b-N.left,toY:T-N.top,...S(b,T)})};let j=null,C=0,P=0;const h=()=>{j!==null&&cancelAnimationFrame(j),j=null,C=0,P=0},A=()=>{if(j=null,!m||C===0&&P===0)return;const b=m.scrollLeft,T=m.scrollTop;if(m.scrollLeft=b+C,m.scrollTop=T+P,m.scrollLeft===b&&m.scrollTop===T){h();return}L(x,w),j=requestAnimationFrame(A)},R=(b,T)=>{if(!m)return;const N=mn(m);C=le(b,N.left,N.right),P=le(T,N.top,N.bottom),C===0&&P===0?h():j===null&&(j=requestAnimationFrame(A))},U=b=>{if(b.pointerId===v){if(x=b.clientX,w=b.clientY,!g){if(Math.abs(x-$)<Re&&Math.abs(w-d)<Re)return;g=!0,a.getState().setSelectedDependency(null),document.body.style.cursor="crosshair"}R(x,w),L(x,w)}},F=()=>{h(),document.body.style.cursor=M,document.removeEventListener("pointermove",U),document.removeEventListener("pointerup",k),document.removeEventListener("pointercancel",O),document.removeEventListener("keydown",D);try{l.releasePointerCapture(v)}catch{}},E=()=>{F(),o.current=null,e.current=null,a.getState().setLinkDraft(null)},O=b=>{b.pointerId===v&&E()};function D(b){b.key==="Escape"&&E()}function k(b){if(b.pointerId!==v)return;const N=g?S(b.clientX,b.clientY):re;if(E(),!N.hoverTaskId||!N.hoverAnchor||N.rejection)return;const H={predecessorId:t.id,successorId:N.hoverTaskId,type:Sn(c,N.hoverAnchor)};if((s==null?void 0:s(H))===!1)return;const G=Zr(a.getState().rawTasks,H.predecessorId,H.successorId,H.type);a.getState().setRawTasks(G),r==null||r(G)}o.current=E,document.addEventListener("pointermove",U),document.addEventListener("pointerup",k),document.addEventListener("pointercancel",O),document.addEventListener("keydown",D)}}}function Ms(t,n,r={}){const s=$t(),[a,e]=p.useState(null),o=p.useRef(null),i=p.useRef(null);p.useEffect(()=>()=>{var m;return(m=i.current)==null?void 0:m.call(i)},[]);const c=m=>{const v=n.current;if(!v)return null;const $=v.getBoundingClientRect();if($.width===0)return null;const d=(m-$.left)/$.width;return Math.round(Math.min(1,Math.max(0,d))*100)},{onTasksChange:u}=r,l=m=>{var d;if(!m.isPrimary||m.button!==0)return;m.stopPropagation(),m.preventDefault(),(d=i.current)==null||d.call(i),i.current=null;const{pointerId:v,pointerType:$}=m;i.current=qt({pointerType:$,pointerId:v,clientX:m.clientX,clientY:m.clientY},()=>{i.current=null,f(v,$)})},f=(m,v)=>{const $=v==="mouse"?null:Kt(),d=x=>{if(x.pointerId!==m)return;const w=c(x.clientX);w!==null&&(o.current=w,e(w))},g=x=>{if(x.pointerId!==m)return;document.removeEventListener("pointermove",d),document.removeEventListener("pointerup",g),document.removeEventListener("pointercancel",g),$==null||$();const w=o.current;if(o.current=null,w===null){e(null);return}const M=s.getState().rawTasks.map(S=>S.id===t.id?{...S,progress:w}:S);s.getState().setRawTasks(M),e(null),u==null||u(M)};document.addEventListener("pointermove",d),document.addEventListener("pointerup",g),document.addEventListener("pointercancel",g)};return{onProgressPointerDown:l,progress:a??Rt(t.progress),isDraggingProgress:a!==null}}function ks({currentTask:t,options:n,interaction:r,tabIndex:s,cellCoord:a,calendar:e,autoScrollOnDrag:o,onDependencyCreate:i}){const{onTasksChange:c,onTaskActivate:u,onTaskDoubleClick:l,showTooltip:f=!0,tooltip:m}=n,v=p.useRef(null),{onPointerDown:$,consumeDragClick:d}=Ss(t,{onTasksChange:c,autoScroll:o},r,e),{canMove:g,canResize:x,canChangeProgress:w,canCreateLink:M}=pt(t,r),[S,L]=p.useState(!1),[j,C]=p.useState(!1),P=$t(),h=K(B=>B.setHoveredTaskId),A=p.useRef(null),R=p.useCallback(()=>{A.current!==null&&(clearTimeout(A.current),A.current=null)},[]);p.useEffect(()=>{const B=t.id;return()=>{R(),P.getState().hoveredTaskId===B&&P.getState().setHoveredTaskId(null)}},[t.id,R,P]);const{startLink:U}=ws({task:t,interaction:r,onTasksChange:c,onDependencyCreate:i}),F=K(B=>{const z=B.linkDraft;return z?z.hoverTaskId===t.id?` link-${z.rejection?"invalid":"valid"} link-at-${z.hoverAnchor}`:z.fromTaskId===t.id?` link-source link-at-${z.fromAnchor}`:"":""}),E=M&&y.jsx(y.Fragment,{children:["start","end"].map(B=>y.jsx("span",{className:`gantt-link-handle ${B}`,onPointerDown:U(B),role:"button",tabIndex:-1,"aria-label":`Link from the ${B} of ${t.name}`},B))}),O=K(B=>B.dragOffsets[t.id]),D=K(B=>{var z;return((z=B.currentTask)==null?void 0:z.id)===t.id}),k=K(B=>B.dragMode),b=K(B=>B.selectedTaskId===t.id),T=(O==null?void 0:O.offsetX)??0,N=(O==null?void 0:O.offsetWidth)??0,H=t.barLeft+T,G=t.barWidth+N,q=Math.max(G,ie),J=q<sr,{onProgressPointerDown:tt,progress:et,isDraggingProgress:st}=Ms(t,v,{onTasksChange:c}),I=et!==null,_=p.useCallback(B=>{const z=v.current;if(!z)return;const X=z.getBoundingClientRect();if(X.width<ie){L(!1);return}const rt=B.clientX-X.left;L(rt<=Nt||rt>=X.width-Nt)},[]),W=B=>{d()||u==null||u(t,B)},at=B=>{l==null||l(t,B)},ot=g?"grab":"default",it=D?g||x?"grabbing":ot:S&&x?"ew-resize":ot,ct=wn(t,m,et),V=B=>{if(!O)return"";const z=m(O.offsetStartDate),X=m(O.offsetEndDate);switch(B){case"left":return`Start: ${z}`;case"right":return`End: ${X}`;case"bar":default:return`${z} → ${X}`}},Q=f?st?"progress":D&&O?k==="left"||k==="right"?"resize":"move":j?"hover":null:null;p.useEffect(()=>{if(!j)return;const B=z=>{z.key==="Escape"&&C(!1)};return document.addEventListener("keydown",B),()=>document.removeEventListener("keydown",B)},[j]);const nt=()=>{if(!Q)return null;const B=Q!=="hover",z=Y(t.startDate),X=Y(t.endDate);return Q==="progress"?y.jsxs("div",{className:"gantt-bar-tooltip",role:"status","aria-live":"polite",children:[et,"%"]}):B?y.jsx("div",{className:"gantt-bar-tooltip gantt-sr-only",role:"status","aria-live":"polite",children:V(k)}):y.jsxs("div",{className:"gantt-bar-tooltip gantt-bar-tooltip-detail",role:"tooltip",children:[y.jsx("span",{className:"gantt-tooltip-name",children:t.name}),y.jsx("span",{className:"gantt-tooltip-meta",children:`${m(z)} → ${m(X)}`}),y.jsxs("span",{className:"gantt-tooltip-meta",children:[dn(X.valueOf()-z.valueOf()),et!==null?` · ${et}%`:""]})]})},lt=xr(t.color),Z={transform:`translateX(${H}px)`,width:q,height:t.isSummary?tr:ae,cursor:it,...lt},ft=[b?"selected":"",t.className??""].filter(Boolean).join(" "),Dt=ft?` ${ft}`:"";return y.jsxs("div",{ref:v,id:`task-${t.id}`,"data-task-id":t.id,className:`gantt-task-bar${D?" dragging":""}${Q?" has-tooltip":""}${J?" compact":""}${t.isSummary?" summary":""}${x?"":" no-resize"}${F}${Dt}`,onPointerDown:$,onClick:W,onDoubleClick:at,onMouseMove:_,onPointerEnter:B=>{B.pointerType==="mouse"&&(h(t.id),R(),A.current=setTimeout(()=>C(!0),ir))},onMouseLeave:()=>{L(!1),h(null),R(),C(!1)},style:Z,role:"gridcell",tabIndex:s,"data-gantt-cell":a,"aria-label":ct,children:[I&&y.jsxs(y.Fragment,{children:[y.jsx("div",{className:"gantt-progress-fill",style:{width:`${et}%`}}),w&&y.jsx("div",{className:`gantt-progress-handle${st?" dragging":""}`,style:{left:`clamp(${Ne}px, ${et}%, calc(100% - ${Ne}px))`},onPointerDown:tt,role:"slider",tabIndex:-1,"aria-label":`${t.name} progress`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":et})]}),y.jsx("span",{className:`gantt-task-name${J?" outside":""}`,children:t.name}),E,nt()]})}function Os({rows:t,virtualItems:n,gridColumnCount:r,focus:s,isBarVisible:a,options:e,interaction:o,calendar:i,autoScrollOnDrag:c,onDependencyCreate:u}){return n.flatMap(l=>{const f=t[l.index];return f?f.tasks.map((m,v)=>{if(!a(m.barLeft,m.barWidth))return null;const $=r+v;return y.jsx("div",{className:"gantt-bar-wrap",style:{height:`${l.size-1}px`,transform:`translateY(${l.start}px)`},children:y.jsx(ks,{currentTask:m,options:e,interaction:o,calendar:i,autoScrollOnDrag:c,onDependencyCreate:u,tabIndex:s.row===l.index&&s.col===$?0:-1,cellCoord:`${l.index}:${$}`})},m.id)}):[]})}function Is({ranges:t}){const n=K(a=>a.bottomRowCells),r=p.useMemo(()=>pe(n),[n]),s=p.useMemo(()=>{const a=new Set;return t.flatMap(e=>{if(!e.label)return[];const o=Ot(r,e.left),i=Ot(r,e.left+e.width-1);if(!o||!i)return[];const c=e.width>=ur&&!a.has(o.index);return c&&a.add(o.index),[{label:e.label,shown:c,left:e.left,width:e.width,cellLeft:o.left-e.left,cellWidth:i.left+i.width-o.left}]})},[t,r]);return s.length?y.jsx("div",{className:"gantt-holiday-labels",children:s.map(a=>y.jsx("div",{className:"gantt-holiday-band",style:{left:`${a.left}px`,width:`${a.width}px`},children:y.jsx("div",{className:`gantt-holiday-cell${a.shown?" shown":""}`,style:{left:`${a.cellLeft}px`,width:`${a.cellWidth}px`},children:y.jsx("span",{children:a.label})})},a.left))}):null}function Es({ranges:t}){return t.length?y.jsx("div",{className:"gantt-non-working-layer","aria-hidden":"true",children:t.map(n=>y.jsx("div",{className:"gantt-non-working-range",style:{left:`${n.left}px`,width:`${n.width}px`,...n.color&&{background:`color-mix(in srgb, ${n.color} 14%, transparent)`}}},n.left))}):null}function Ts({rows:t,virtualItems:n,ownedByTaskList:r,hierarchy:s,collapsedIds:a}){return y.jsx("div",{className:"gantt-rows",role:"presentation",children:n.map(e=>{const o=t[e.index];if(!o)return null;const i={height:`${e.size}px`,transform:`translateY(${e.start}px)`},c=r?{"aria-hidden":"true"}:Mn(o,e.index,{headerOffset:0,expandable:be(o,s),expanded:!a.has(o.id),ownedIds:o.tasks.map(u=>`task-${u.id}`)});return y.jsx("div",{className:"gantt-task-row",style:i,...c},`row-${o.id}`)})})}function Ps({collapsedIds:t,defaultCollapsedIds:n,onCollapsedChange:r}){const[s,a]=p.useState(()=>n??[]),e=t??s,o=p.useMemo(()=>new Set(e),[e]),i=p.useCallback(l=>{t===void 0&&a(l),r==null||r(l)},[t,r]),c=p.useCallback(l=>{i(e.includes(l)?e.filter(f=>f!==l):[...e,l])},[e,i]),u=p.useCallback(l=>{e.includes(l)&&i(e.filter(f=>f!==l))},[e,i]);return{collapsedIds:o,toggle:c,expand:u}}const Xe=4;function Ls(t,n,r){const s=wt(t,n,r)??0,a=bn(s,s,n,r);return a?{startDate:a.startDate.toISOString(),endDate:a.endDate.toISOString()}:null}function As(t,n){const r=n*xt;return t<r?null:r}function Ns({enabled:t,rowCount:n,onTaskCreate:r}){const s=$t(),[a,e]=p.useState(null),o=p.useRef(null),i=p.useRef(null),c=l=>{var v;if(!t||!l.isPrimary||l.button!==0||o.current!==null||l.target!==l.currentTarget)return;(v=i.current)==null||v.call(i),i.current=null;const f=l.currentTarget,m=l.pointerId;i.current=qt({pointerType:l.pointerType,pointerId:m,clientX:l.clientX,clientY:l.clientY},($,d)=>{i.current=null,u(f,m,l.pointerType,$,d)})},u=(l,f,m,v,$)=>{const d=l.getBoundingClientRect(),g=v-d.left,x=As($-d.top,n);if(x===null)return;o.current=f;const w=m==="mouse"?null:Kt(),M=A=>{const{bottomRowCells:R,selectedScale:U}=s.getState();return bn(g,A,R,U)},S=A=>{if(A.pointerId!==f)return;const R=A.clientX-l.getBoundingClientRect().left;if(Math.abs(R-g)<Xe){e(null);return}const U=M(R);e(U&&{leftPx:U.leftPx,widthPx:U.widthPx,topPx:x})},L=()=>{document.removeEventListener("pointermove",S),document.removeEventListener("pointerup",h),document.removeEventListener("pointercancel",C),document.removeEventListener("keydown",P)},j=()=>{L(),w==null||w(),o.current=null,e(null)},C=A=>{A.pointerId===f&&j()},P=A=>{A.key==="Escape"&&j()},h=A=>{if(A.pointerId!==f)return;const R=A.clientX-l.getBoundingClientRect().left,U=Math.abs(R-g)>=Xe?M(R):null;j(),U&&(r==null||r({startDate:U.startDate.toISOString(),endDate:U.endDate.toISOString()}))};document.addEventListener("pointermove",S),document.addEventListener("pointerup",h),document.addEventListener("pointercancel",C),document.addEventListener("keydown",P)};return{onDrawPointerDown:c,ghost:a}}function Rs({readOnly:t,allowMove:n,allowResize:r,allowProgressChange:s,allowLinkCreate:a,allowLinkDelete:e,allowTaskCreate:o,allowReorder:i,minDate:c,maxDate:u}){return p.useMemo(()=>({readOnly:t,allowMove:n,allowResize:r,allowProgressChange:s,allowLinkCreate:a,allowLinkDelete:e,allowTaskCreate:o,allowReorder:i,minDate:c,maxDate:u}),[t,n,r,s,a,e,o,i,c,u])}const js=3;function Cs({rows:t,rawTasks:n,gridColumnCount:r,hierarchy:s,collapsedIds:a,selectedScale:e,localeOptions:o,interaction:i,onActivate:c,onToggleCollapse:u,onTasksChange:l,move:f,scrollToRow:m,scrollApi:v,bodyRef:$}){const d=$t(),[g,x]=p.useState({row:0,col:0}),[w,M]=p.useState(0),[S,L]=p.useState(""),j=p.useMemo(()=>t.map(F=>({cells:Math.max(r+F.tasks.length,1),expandable:be(F,s),expanded:!a.has(F.id)})),[t,r,s,a]),C=p.useMemo(()=>fs(g,j),[g,j]),{tooltip:P}=p.useMemo(()=>Et(e,o),[e,o]),h=p.useCallback(F=>{d.getState().setRawTasks(F),l==null||l(F)},[d,l]),A=p.useCallback(F=>{const E=d.getState().rawTasks,O=zt(E,s),D=O.parentOf.get(F.id)??null,k=O.childrenOf(D),b=E.find(T=>T.id===D);L(ps(F.name,k.indexOf(F.id)+1,k.length,(b==null?void 0:b.name)??null)),M(T=>T+1)},[d,s]),R=p.useCallback(F=>{const E=hs(F,C,j);if(!E)return;if(F.preventDefault(),E.kind==="zoom"){const k=hn(e,E.direction);k!==e&&(v.setScale(k),L(`${k} scale`));return}const O=t[C.row],D=E.kind==="focus"?void 0:ms(O,E.col,r);switch(E.kind){case"focus":x(E.focus),M(k=>k+1);break;case"toggle":O&&u(O.id);break;case"activate":D&&(c==null||c(D.id),L(wn(D,P,null)));break;case"delete":{if(!D)return;const k=Ds(n,D,i);if(!k){L(`${D.name} cannot be deleted`);break}h(k),L(`${D.name} deleted`);break}case"nudge":{if(!D)return;const k=gs(n,D,E.mode,E.steps,e,i);if(!k){L(`${D.name} cannot be changed`);break}h(k);const b=k.find(T=>T.id===D.id);b&&L(`${D.name}, ${P(Y(b.startDate))} to ${P(Y(b.endDate))}`),M(T=>T+1);break}case"progress":{if(!D)return;const k=$s(n,D,E.delta,i);if(!k){L(`${D.name} progress cannot be changed`);break}h(k);const b=k.find(T=>T.id===D.id);L(`${D.name}, ${(b==null?void 0:b.progress)??0}% complete`),M(T=>T+1);break}case"reorder":{if(!D)return;const k=zt(n,s),b=k.parentOf.get(D.id)??null,T=k.childrenOf(b),N=T.indexOf(D.id)+E.delta;if(N<0||N>=T.length)break;f.apply({taskId:D.id,toParentId:b,toIndex:N})&&A(D);break}case"reparent":{if(!D||!s)return;const k=zt(n,s),b=k.parentOf.get(D.id)??null,T=k.childrenOf(b);if(E.direction>0){const G=T[T.indexOf(D.id)-1];if(!G)break;f.apply({taskId:D.id,toParentId:G,toIndex:k.childrenOf(G).length})&&A(D);break}if(!b)break;const N=k.parentOf.get(b)??null,H=k.childrenOf(N);f.apply({taskId:D.id,toParentId:N,toIndex:H.indexOf(b)+1})&&A(D);break}}},[C,j,t,r,c,u,n,i,e,v,h,P,s,f,A]),U=p.useCallback(F=>{var k,b,T;const E=(T=(b=(k=F.target).closest)==null?void 0:b.call(k,"[data-gantt-cell]"))==null?void 0:T.getAttribute("data-gantt-cell");if(!E)return;const[O,D]=E.split(":").map(Number);x(N=>N.row===O&&N.col===D?N:{row:O,col:D})},[]);return p.useEffect(()=>{if(!w)return;let F=js,E=0;const O=()=>{var b,T;const D=(b=$.current)==null?void 0:b.querySelector(`[data-gantt-cell="${C.row}:${C.col}"]`);if(D){D.focus({preventScroll:!0}),D.scrollIntoView({block:"nearest",inline:"nearest"});return}if(--F<=0)return;m(C.row);const k=(T=t[C.row])==null?void 0:T.tasks[0];k&&v.scrollToTask(k.id,{smooth:!1}),E=requestAnimationFrame(O)};return O(),()=>cancelAnimationFrame(E)},[w]),{focus:C,announcement:S,onKeyDown:R,onFocusCapture:U}}function Ys({rawTasks:t,tasks:n,hierarchy:r,collapsedIds:s}){const a=p.useMemo(()=>r?yt(t):void 0,[r,t]),e=p.useMemo(()=>!r||!s.size?n:Er(n,s,a),[r,s,n,a]),o=p.useMemo(()=>ys(e),[e]),i=p.useMemo(()=>o.flatMap(c=>c.tasks),[o]);return{rows:o,tasks:i}}const Be=t=>Symbol.iterator in t,ze=t=>"entries"in t,qe=(t,n)=>{const r=t instanceof Map?t:new Map(t.entries()),s=n instanceof Map?n:new Map(n.entries());if(r.size!==s.size)return!1;for(const[a,e]of r)if(!s.has(a)||!Object.is(e,s.get(a)))return!1;return!0},_s=(t,n)=>{const r=t[Symbol.iterator](),s=n[Symbol.iterator]();let a=r.next(),e=s.next();for(;!a.done&&!e.done;){if(!Object.is(a.value,e.value))return!1;a=r.next(),e=s.next()}return!!a.done&&!!e.done};function Hs(t,n){return Object.is(t,n)?!0:typeof t!="object"||t===null||typeof n!="object"||n===null||Object.getPrototypeOf(t)!==Object.getPrototypeOf(n)?!1:Be(t)&&Be(n)?ze(t)&&ze(n)?qe(t,n):_s(t,n):qe({entries:()=>Object.entries(t)},{entries:()=>Object.entries(n)})}function Ws(t){const n=p.useRef(void 0);return r=>{const s=t(r);return Hs(n.current,s)?n.current:n.current=s}}function Fs(){return K(Ws(t=>({rawTasks:t.rawTasks,transformedTasks:t.transformedTasks,bottomRowCells:t.bottomRowCells,selectedScale:t.selectedScale,syncTasksFromProps:t.syncTasksFromProps,setSelectedScale:t.setSelectedScale,setLocaleOptions:t.setLocaleOptions})))}function Us({selectable:t,onTaskSelect:n,onTaskClick:r}){const s=$t(),a=t??n!==void 0,e=p.useCallback(i=>{if(!a)return;const c=(i==null?void 0:i.id)??null;s.getState().selectedTaskId!==c&&(s.getState().setSelectedTaskId(c),n==null||n(i))},[a,n,s]),o=p.useCallback((i,c)=>{r==null||r(i,c),e(i)},[r,e]);return{select:e,onTaskActivate:o}}function Gs(t,n){const{canResize:r,canChangeProgress:s}=pt(t,n);return{name:!(t.readOnly??(n==null?void 0:n.readOnly)??!1),dates:r,progress:s}}function Xs(t,n){if(!/^\d{4}-\d{2}-\d{2}$/.test(n))return null;const r=Y(`${n}T${Y(t).format("HH:mm:ss.SSS")}`);return r.isValid()?r:null}const Bs=(t,n,r)=>n&&t.isBefore(Y(n))?Y(n):r&&t.isAfter(Y(r))?Y(r):t;function zs(t,n,r,s){switch(n){case"name":return r.trim()===""?null:{name:r};case"progress":{const a=r.trim()===""?null:Rt(Number(r));return a===null?null:{progress:a}}default:{const{minDate:a,maxDate:e}=pt(t,s),o=Xs(t[n],r);if(o===null)return null;const i=Bs(o,a,e),c=n==="startDate"?i:Y(t.startDate);return(n==="endDate"?i:Y(t.endDate)).isAfter(c)?{[n]:i.toISOString()}:null}}}function qs(t,n,r){return t.map(s=>s.id===n?{...s,...r}:s)}function Ks(t,n,r,s){const{rawTasks:a,setRawTasks:e}=t.getState(),o=qs(a,n,r);e(o),s==null||s(o)}function se({value:t,commit:n,...r}){const[s,a]=p.useState(t),[e,o]=p.useState(t);e!==t&&(o(t),a(t));const i=()=>{s!==t&&n(s),a(t)};return y.jsx("input",{className:"gantt-detail-input",...r,value:s,onChange:c=>a(c.target.value),onBlur:i,onKeyDown:c=>{c.key==="Enter"&&i(),c.key==="Escape"&&(c.stopPropagation(),a(t))}})}function Vs({task:t,tasks:n,scale:r,localeOptions:s,interaction:a,onClose:e,onTasksChange:o,render:i,open:c}){const u=p.useRef(null),l=$t(),f=p.useId(),m=P=>`${f}-${P}`,v=p.useRef(null);p.useEffect(()=>{const P=u.current;return v.current=document.activeElement,()=>{const h=document.activeElement;if(!(h===null||h===document.body||((P==null?void 0:P.contains(h))??!1)))return;const R=v.current;R instanceof HTMLElement&&R.isConnected&&R.focus({preventScroll:!0})}},[]),p.useEffect(()=>{const P=h=>{h.key==="Escape"&&e()};return document.addEventListener("keydown",P),()=>document.removeEventListener("keydown",P)},[e]);const{tooltip:$}=p.useMemo(()=>Et(r,s),[r,s]),d=p.useCallback(P=>Ks(l,t.id,P,o),[l,t.id,o]),g=p.useCallback((P,h)=>{const A=zs(t,P,h,a);A&&d(A)},[t,a,d]),x=Gs(t,a),w=Rt(t.progress),M=Y(t.startDate),S=Y(t.endDate),L=(t.dependencies??[]).map(P=>{var h;return((h=n.find(A=>A.id===P.targetId))==null?void 0:h.name)??P.targetId}),j=(P,h)=>y.jsx(se,{id:m(P),type:"date",value:Y(h).format("YYYY-MM-DD"),commit:A=>g(P,A)}),C=[x.dates?{caption:"Start",inputId:m("startDate"),value:j("startDate",t.startDate)}:{caption:"Start",value:$(M)},x.dates?{caption:"End",inputId:m("endDate"),value:j("endDate",t.endDate)}:{caption:"End",value:$(S)},{caption:"Duration",value:dn(S.valueOf()-M.valueOf())}];return w!==null&&C.push(x.progress?{caption:"Progress",inputId:m("progress"),value:y.jsx(se,{id:m("progress"),type:"number",min:0,max:100,step:1,value:String(w),commit:P=>g("progress",P)})}:{caption:"Progress",value:`${w}%`}),L.length>0&&C.push({caption:"Depends on",value:L.join(", ")}),y.jsx("aside",{ref:u,className:c?"gantt-detail gantt-detail-open":"gantt-detail",role:"complementary","aria-label":"Task details",children:i?i({task:t,close:e,scale:r,update:d}):y.jsxs(y.Fragment,{children:[y.jsxs("div",{className:"gantt-detail-header",children:[x.name?y.jsx(se,{type:"text","aria-label":"Task name",value:t.name,commit:P=>g("name",P)}):y.jsx("h2",{className:"gantt-detail-title",children:t.name}),y.jsx("button",{type:"button",className:"gantt-detail-close",onClick:e,"aria-label":"Close task details",children:"✕"})]}),y.jsx("dl",{className:"gantt-detail-fields",children:C.map(({caption:P,value:h,inputId:A})=>y.jsxs(p.Fragment,{children:[y.jsx("dt",{children:A?y.jsx("label",{htmlFor:A,children:P}):P}),y.jsx("dd",{children:h})]},P))})]})})}function Zs({enabled:t,detailTaskId:n,uncontrolled:r,tasks:s}){if(!t)return{openId:null,task:null};const a=n!==void 0?n:r;if(a===null)return{openId:null,task:null};const e=s.find(o=>o.id===a)??null;return{openId:a,task:e}}function Js({enabled:t,tasks:n,detailTaskId:r,onDetailChange:s,onTaskActivate:a}){const[e,o]=p.useState(null),i=r!==void 0,{openId:c,task:u}=p.useMemo(()=>Zs({enabled:t,detailTaskId:r,uncontrolled:e,tasks:n}),[t,r,e,n]),l=p.useCallback($=>{t&&$!==c&&(i||o($),s==null||s($?n.find(d=>d.id===$)??null:null))},[t,c,i,s,n]),f=p.useCallback($=>{n.some(d=>d.id===$)&&l($)},[l,n]),m=p.useCallback(()=>l(null),[l]),v=p.useCallback(($,d)=>{a==null||a($,d),l($.id)},[a,l]);return{task:u,open:f,close:m,onTaskActivate:v}}const Qs=400;function to(t){const[n,r]=p.useState(t),[s,a]=p.useState(!1);t!==null&&t!==n&&r(t);const e=t!==null;return p.useEffect(()=>{let o=requestAnimationFrame(()=>{if(!e){a(!1);return}o=requestAnimationFrame(()=>a(!0))});return()=>cancelAnimationFrame(o)},[e]),p.useEffect(()=>{if(e||n===null)return;const o=setTimeout(()=>r(null),Qs);return()=>clearTimeout(o)},[e,n]),{task:n,open:s}}function eo({scrollRef:t,bottomRowCells:n,transformedTasks:r,selectedScale:s,rowHeight:a,viewportInsetPx:e=0,zoomTo:o,setSelectedScale:i}){const c=p.useCallback(($,d)=>{const g=t.current;if(!g)return;const x=(d==null?void 0:d.align)==="start"?$:$-(g.clientWidth-e)/2;g.scrollTo({left:Math.max(0,x),behavior:(d==null?void 0:d.smooth)===!1?"auto":"smooth"})},[t,e]),u=p.useCallback(($,d)=>{const g=wt(Y($),n,s);g!==null&&c(g,d)},[n,s,c]),l=p.useCallback($=>u(Y(),$),[u]),f=p.useCallback(($,d)=>{const g=r.findIndex(L=>L.id===$);if(g===-1)return;const x=r[g],w=t.current;if(!w)return;const M=(x.order-1)*a,S=M<w.scrollTop||M+a>w.scrollTop+w.clientHeight;w.scrollTo({top:S?Math.max(0,M-w.clientHeight/2+a/2):w.scrollTop,left:Math.max(0,(d==null?void 0:d.align)==="start"?x.barLeft:x.barLeft+x.barWidth/2-(w.clientWidth-e)/2),behavior:(d==null?void 0:d.smooth)===!1?"auto":"smooth"})},[r,a,t,e]),m=p.useCallback($=>{if(!($ in ut))return;const d=t.current,g=d?Math.max(0,d.clientWidth-e)/2:0,x=d?xn(d.scrollLeft+g,n,s):null;if(!x){i($);return}o($,{date:x,viewportX:g})},[t,e,n,s,i,o]),v=p.useCallback(()=>{const $=t.current;if(!$||!r.length)return;const{minDate:d,maxDate:g}=yn(r);!d.isValid()||!g.isValid()||o(vr(g.diff(d),$.clientWidth-e),{date:d,viewportX:0})},[r,t,e,o]);return p.useMemo(()=>({scrollToDate:u,scrollToToday:l,scrollToTask:f,setScale:m,zoomToFit:v,getScrollElement:()=>t.current}),[u,l,f,m,v,t])}function no({hierarchy:t,interaction:n,collapsedIds:r,onTasksChange:s,onTaskMove:a,onExpand:e}){const o=$t(),i=p.useMemo(()=>({hierarchy:t,canReorder:l=>pt(l,n).canReorder}),[t,n]),c=p.useCallback(l=>$e(o.getState().rawTasks,l,i),[o,i]),u=p.useCallback(l=>{const f=gn(o.getState().rawTasks,l,i);return!f||(a==null?void 0:a(f.change))===!1?!1:(o.getState().setRawTasks(f.tasks),s==null||s(f.tasks),l.toParentId&&r.has(l.toParentId)&&(e==null||e(l.toParentId)),!0)},[o,i,a,s,r,e]);return{validate:c,apply:u}}const ro=24,he=5;function me(t){return{start:0,end:t-1,padStart:0,padEnd:0,virtualized:!1}}function Ke(t,n,r,s=he,a=0){if(t.count===0||t.count<=ro||r<=0||t.total<=r)return me(t.count);const e=s+(a<0?s:0),o=s+(a>0?s:0),i=Math.max(0,n),c=Math.max(0,t.indexAt(i)-e),u=Math.min(t.count-1,t.indexAt(i+r)+o);return{start:c,end:u,padStart:t.offsetAt(c),padEnd:Math.max(0,t.total-t.offsetAt(u+1)),virtualized:!0}}function Ve(t,n){const r=[];for(let s=n.start;s<=n.end;s+=1){const a=t.offsetAt(s),e=t.sizeAt(s);r.push({index:s,start:a,size:e})}return r}function Ze(t,n){return n.end<n.start?{startPx:0,endPx:0}:{startPx:t.offsetAt(n.start),endPx:t.offsetAt(n.end+1)}}function Je(t,n){return t.start===n.start&&t.end===n.end&&t.virtualized===n.virtualized&&t.padStart===n.padStart&&t.padEnd===n.padEnd}function so({scrollRef:t,row:n,col:r}){const[s,a]=p.useState(()=>({row:me(n.count),col:me(r.count)})),e=p.useRef({top:0,left:0}),o=p.useRef(0),i=p.useCallback(()=>{const l=t.current;if(!l)return;const{scrollTop:f,scrollLeft:m,clientHeight:v,clientWidth:$}=l,d=Qe(f,e.current.top),g=Qe(m,e.current.left);e.current={top:f,left:m};const x={row:Ke(n,f,v,he,d),col:Ke(r,m,$,he,g)};a(w=>Je(w.row,x.row)&&Je(w.col,x.col)?w:x)},[t,n,r]),c=p.useCallback(()=>{o.current===0&&(o.current=requestAnimationFrame(()=>{o.current=0,i()}))},[i]);p.useLayoutEffect(()=>{const l=t.current;if(!l)return;i(),l.addEventListener("scroll",c,{passive:!0});const f=new ResizeObserver(i);return f.observe(l),()=>{l.removeEventListener("scroll",c),f.disconnect()}},[t,c,i]),p.useEffect(()=>()=>{o.current!==0&&cancelAnimationFrame(o.current)},[]);const u=p.useCallback(l=>{const f=t.current;if(!f||l<0||l>=n.count)return;const m=f.clientHeight,v=n.offsetAt(l),$=n.sizeAt(l),d=f.scrollTop;if(v>=d&&v+$<=d+m)return;const g=v<d?v:v-m+$;f.scrollTo({top:Math.max(0,g)})},[t,n]);return{row:s.row,col:s.col,scrollToRow:u}}function Qe(t,n){return t>n?1:t<n?-1:0}function oo({rowCount:t,bottomRowCells:n,scrollRef:r}){const s=p.useMemo(()=>Un(t,xt),[t]),a=p.useMemo(()=>nn(n.length,d=>n[d].widthPx),[n]),{row:e,col:o,scrollToRow:i}=so({scrollRef:r,row:s,col:a}),c=p.useMemo(()=>Ve(s,e),[s,e]),u=p.useMemo(()=>Ve(a,o),[a,o]),{startPx:l,endPx:f}=Ze(a,o),{startPx:m,endPx:v}=Ze(s,e),$=p.useCallback((d,g)=>d+g>=l&&d<=f,[l,f]);return{virtualRows:c,totalHeight:s.total,virtualCells:u,totalWidth:a.total,leadingCellPx:l,rowStartPx:m,rowEndPx:v,isBarVisible:$,scrollToRow:i}}function ao({enabled:t,scrollRef:n,selectedScale:r,bottomRowCells:s,totalWidth:a,viewportInsetPx:e,pinnedStart:o,pinnedEnd:i}){const[c,u]=p.useState({scale:r,value:ue}),l=c.scale===r?c.value:ue,f=dt(r),m=dt(s),v=dt(a),$=dt(e),d=dt(l);return p.useEffect(()=>{if(!t)return;const g=n.current;if(!g)return;const x=()=>{const w=m.current,M=v.current;if(!w.length||M<=0)return;const S=Ir({current:d.current,scrollLeft:g.scrollLeft,viewportPx:g.clientWidth-$.current,totalPx:M,pxPerTick:M/w.length,canExtend:{before:!o,after:!i}});S&&(d.current=S,u({scale:f.current,value:S}))};return x(),g.addEventListener("scroll",x,{passive:!0}),()=>g.removeEventListener("scroll",x)},[t,s,o,i,n,m,v,d,$,f]),l}function io({rawTasks:t,selectedScale:n,visibleRange:r,hierarchy:s,extension:a,scrollRef:e,bottomRowCells:o}){const i=dt(n),c=dt(o),u=K(g=>g.setBottomRowCells),l=K(g=>g.setTransformedTasks),f=K(g=>g.clearAllDragOffsets),m=K(g=>g.setSelectedScale),v=p.useRef([]),$=p.useRef(0),d=p.useRef(null);return p.useLayoutEffect(()=>{const{bottomCells:g,transformedTasks:x}=Fr(t,n,r,s,a),w=v.current;w.length&&g.length&&($.current+=jr(w,g,n)),v.current=g,u(g),l(x),f()},[t,n,r,s,a,u,l,f]),p.useLayoutEffect(()=>{const g=e.current,x=d.current;if(x){d.current=null,$.current=0;const M=wt(x.date,o,i.current);if(g&&M!==null){g.scrollLeft=Math.max(0,M-x.viewportX);return}}const w=$.current;w&&($.current=0,g&&(g.scrollLeft+=w))},[o,e,i]),p.useCallback((g,x)=>{if(g===i.current){const w=e.current,M=wt(x.date,c.current,g);w&&M!==null&&(w.scrollLeft=Math.max(0,M-x.viewportX));return}d.current=x,m(g)},[m,e,i,c])}function co({enabled:t,scrollRef:n,selectedScale:r,bottomRowCells:s,viewportInsetPx:a,zoomTo:e}){const o=dt(r),i=dt(s),c=dt(a);p.useEffect(()=>{if(!t)return;const u=n.current;if(!u)return;const l={...Mr},f=m=>{if(!m.ctrlKey&&!m.metaKey)return;m.preventDefault();const{state:v,step:$}=kr(l,m.deltaY,m.timeStamp);if(Object.assign(l,v),!$)return;const d=hn(o.current,$);if(d===o.current)return;const g=u.getBoundingClientRect(),x=c.current,w=Math.min(Math.max(m.clientX-g.left,x),u.clientWidth)-x,M=xn(u.scrollLeft+w,i.current,o.current);M&&e(d,{date:M,viewportX:w})};return u.addEventListener("wheel",f,{passive:!1}),()=>u.removeEventListener("wheel",f)},[t,e,n,o,i,c])}function lo(t,n){const r=dt(n),s=p.useRef(t);p.useEffect(()=>{var a;t!==s.current&&(s.current=t,(a=r.current)==null||a.call(r,t))},[t,r])}function uo(t,n,r){const s=dt(n),a=dt(r),e=p.useRef("");p.useEffect(()=>{const o=a.current;if(!o)return;const i=Yr(t,s.current);if(!i)return;const c=`${i.start.valueOf()}:${i.end.valueOf()}`;c!==e.current&&(e.current=c,o(i))},[t,s,a])}function fo(t,n,r){const s=p.useRef(!1);p.useEffect(()=>{if(s.current||!t||!n.length)return;s.current=!0;const a=t==="today"?Y():t;r.scrollToDate(a,{smooth:!1})},[t,n,r])}const kn="(prefers-color-scheme: dark)",On=()=>typeof window<"u"&&typeof window.matchMedia=="function",In=()=>On()&&window.matchMedia(kn).matches,ho=()=>{if(typeof document>"u")return"light";const t=getComputedStyle(document.documentElement).colorScheme,n=t.includes("light"),r=t.includes("dark");return n&&r?In()?"dark":"light":r?"dark":"light"},mo=t=>{if(typeof window>"u")return()=>{};const n=On()?window.matchMedia(kn):null;n==null||n.addEventListener("change",t);const r=new MutationObserver(t);return r.observe(document.documentElement,{attributes:!0,attributeFilter:["class","style","data-theme"]}),()=>{n==null||n.removeEventListener("change",t),r.disconnect()}},po=()=>"light";function go(t){const n=p.useSyncExternalStore(mo,t==="system"?()=>In()?"dark":"light":ho,po);return t==="light"||t==="dark"?t:n}function $o(t="month"){return Hn()((n,r)=>({rawTasks:[],transformedTasks:[],rowTasks:[],bottomRowCells:[],selectedScale:t,currentTask:null,dragMode:null,dragOffsets:{},localeOptions:void 0,linkDraft:null,reorderDraft:null,selectedDependency:null,selectedTaskId:null,hoveredTaskId:null,setCurrentTask:s=>n({currentTask:s}),setDragMode:s=>{r().dragMode!==s&&n({dragMode:s})},setLinkDraft:s=>n({linkDraft:s}),setReorderDraft:s=>n({reorderDraft:s}),setSelectedDependency:s=>n(a=>{var e,o;return((e=a.selectedDependency)==null?void 0:e.sourceId)===(s==null?void 0:s.sourceId)&&((o=a.selectedDependency)==null?void 0:o.targetId)===(s==null?void 0:s.targetId)?a:{selectedDependency:s}}),setLocaleOptions:s=>n({localeOptions:s}),setSelectedTaskId:s=>{r().selectedTaskId!==s&&n({selectedTaskId:s})},setHoveredTaskId:s=>{r().hoveredTaskId!==s&&n({hoveredTaskId:s})},setSelectedScale:s=>{r().selectedScale!==s&&n({selectedScale:s})},setRawTasks:s=>n({rawTasks:s}),syncTasksFromProps:s=>n(a=>JSON.stringify(a.rawTasks)===JSON.stringify(s)?a:{rawTasks:s}),setBottomRowCells:s=>n({bottomRowCells:s}),setTransformedTasks:s=>n({transformedTasks:s}),setRowTasks:s=>n({rowTasks:s}),setDragOffsets:s=>n(a=>({dragOffsets:{...a.dragOffsets,...s}})),clearDragOffsets:s=>n(a=>{const e={...a.dragOffsets};let o=!1;for(const i of s)i in e&&(delete e[i],o=!0);return o?{dragOffsets:e}:a}),clearAllDragOffsets:()=>n(s=>{var o;const a=(o=s.currentTask)==null?void 0:o.id,e=Object.keys(s.dragOffsets);return e.length?!a||!s.dragOffsets[a]?{dragOffsets:{}}:e.length===1?s:{dragOffsets:{[a]:s.dragOffsets[a]}}:s})}))}const bt="day",tn=366,Do=18263,xo="YYYY-MM-DD",bo=[1,2,3,4,5];function En(t){const n=t?a=>!t(a):()=>!0;return{skipsNonWorkingDays:t!==null,isWorkingDay:n,addDays:(a,e)=>{if(!e||!t)return a.add(e,bt);const o=e>0?1:-1;let i=Math.abs(e),c=a,u=Math.abs(e)+tn*Math.abs(e);for(;i>0;)if(c=c.add(o,bt),n(c)&&i--,u--<=0)return a.add(e,bt);return c},daysBetween:(a,e)=>{const o=a.startOf(bt),i=e.startOf(bt),c=i.diff(o,bt);if(!t||c===0||Math.abs(c)>Do)return c;const u=c>0?1:-1;let l=u>0?o:i;const f=u>0?i:o;let m=0;for(;l.valueOf()<f.valueOf();)l=l.add(1,bt),n(l)&&m++;return m===0?0:m*u},snapForward(a){if(!t||n(a))return a;let e=a;for(let o=0;o<tn;o++)if(e=e.add(1,bt),n(e))return e;return a}}}const Tn=En(null);function Pn(t={}){const n=new Set(t.workingWeekdays??bo),r=new Set(t.holidays??[]);return En(s=>!n.has(s.day())||r.has(s.format(xo)))}const yo="YYYY-MM-DD",vo=366,So={byDate:new Map,dates:[]};function wo(t){if(!(t!=null&&t.length))return So;const n=new Map;for(const r of t){const s=typeof r=="string"?{date:r}:r,a=Y(s.date);if(!a.isValid())continue;const e=s.endDate?Y(s.endDate):a,o=e.isValid()&&!e.isBefore(a,"day")?Math.min(e.diff(a,"day"),vo-1):0;for(let i=0;i<=o;i++){const c=a.add(i,"day").format(yo);n.has(c)||n.set(c,s)}}return{byDate:n,dates:[...n.keys()]}}const Mo=600,ko="100%",Oo=[],Io=p.forwardRef(function(n,r){const[s]=p.useState(()=>$o(n.defaultScale));return y.jsx(en.Provider,{value:s,children:y.jsx(Eo,{...n,forwardedRef:r})})});function Eo(t){const{tasks:n=Oo,onTasksChange:r,height:s=Mo,width:a=ko,theme:e,className:o,showNonWorkingDays:i=!0,workingWeekdays:c,holidays:u,initialScrollTo:l,visibleStart:f,visibleEnd:m,locale:v,formats:$,firstDayOfWeek:d,showTaskList:g,showRowNumbers:x=!1,hierarchy:w=!1,collapsedIds:M,defaultCollapsedIds:S,onCollapsedChange:L,workingCalendar:j=!1,allowReorder:C,onTaskMove:P,onDependencyCreate:h,onDependencyDelete:A,onTaskCreate:R,onTaskClick:U,onTaskDoubleClick:F,onTaskSelect:E,selectable:O,renderDetail:D,showDetail:k,detailTaskId:b,onDetailChange:T,showTooltip:N,zoomOnWheel:H=!1,infiniteScroll:G=!1,onRangeChange:q,onScaleChange:J,autoScrollOnDrag:tt=!0,forwardedRef:et}=t,{rawTasks:st,transformedTasks:I,bottomRowCells:_,selectedScale:W,syncTasksFromProps:at,setSelectedScale:ot,setLocaleOptions:it}=Fs(),ct=p.useMemo(()=>v===void 0&&$===void 0&&d===void 0?void 0:{locale:v,formats:$,firstDayOfWeek:d},[v,$,d]);p.useLayoutEffect(()=>{it(ct)},[ct,it]);const V=p.useRef(null),Q=p.useRef(null),nt=Rs(t),[lt,Z]=p.useState(nr),ft=g??!1,Dt=ft?lt:0,B=ft?1:0,z=Ps({collapsedIds:M,defaultCollapsedIds:S,onCollapsedChange:L}),{rows:X,tasks:rt}=Ys({rawTasks:st,tasks:I,hierarchy:w,collapsedIds:z.collapsedIds}),vt=K(mt=>mt.setRowTasks);p.useLayoutEffect(()=>{vt(rt)},[rt,vt]);const ht=oo({rowCount:X.length,bottomRowCells:_,scrollRef:V}),Vt=ao({enabled:G,scrollRef:V,selectedScale:W,bottomRowCells:_,totalWidth:ht.totalWidth,viewportInsetPx:Dt,pinnedStart:!!f,pinnedEnd:!!m}),ye=no({hierarchy:w,interaction:nt,collapsedIds:z.collapsedIds,onTasksChange:r,onTaskMove:P,onExpand:z.expand}),Ln=p.useMemo(()=>C===!0||st.some(mt=>mt.allowReorder===!0),[C,st]),Yt=p.useMemo(()=>wo(u),[u]),Zt=p.useMemo(()=>Pn({workingWeekdays:c,holidays:Yt.dates}),[c,Yt]),ve=p.useCallback(mt=>{if(Zt.isWorkingDay(mt))return null;const Wt=Yt.byDate.get(mt.format("YYYY-MM-DD"));return Wt?{key:Wt.date,label:Wt.label,color:Wt.color}:{key:Rr}},[Zt,Yt]),An=j?Zt:Tn,Jt=k??D!==void 0,Qt=Us({selectable:O??(Jt?!0:void 0),onTaskSelect:E,onTaskClick:U}),gt=Js({enabled:Jt,tasks:I,detailTaskId:b,onDetailChange:T,onTaskActivate:Qt.onTaskActivate}),te=to(gt.task),Nn=p.useMemo(()=>({onTasksChange:r,onTaskActivate:gt.onTaskActivate,onTaskDoubleClick:F,showTooltip:N,tooltip:Et(W,ct).tooltip}),[r,gt.onTaskActivate,F,N,W,ct]),Tt=R!==void 0&&Dr(nt),{onDrawPointerDown:Rn,ghost:_t}=Ns({enabled:Tt,rowCount:X.length,onTaskCreate:R}),ee=p.useCallback(()=>{if(!Tt)return;const mt=Ls(Y(),_,W);mt&&(R==null||R(mt))},[Tt,_,W,R]),jn=go(e),Se=p.useRef(null);p.useEffect(()=>{const mt=JSON.stringify(n);mt!==Se.current&&(Se.current=mt,at(n))},[n,at]);const Cn=p.useMemo(()=>f||m?{start:f?Y(f):void 0,end:m?Y(m):void 0}:void 0,[f,m]),we=io({rawTasks:st,selectedScale:W,visibleRange:Cn,hierarchy:w,extension:Vt,scrollRef:V,bottomRowCells:_});co({enabled:H,scrollRef:V,selectedScale:W,bottomRowCells:_,viewportInsetPx:Dt,zoomTo:we}),uo(_,W,q),lo(W,J);const Me=p.useMemo(()=>wt(Y(),_,W),[_,W]),ke=p.useMemo(()=>i?Cr(_,W,ve):[],[i,ve,_,W]),Ht=eo({scrollRef:V,bottomRowCells:_,transformedTasks:rt,selectedScale:W,rowHeight:xt,viewportInsetPx:Dt,zoomTo:we,setSelectedScale:ot});p.useImperativeHandle(et,()=>({...Ht,openDetail:gt.open,closeDetail:gt.close,addTask:ee}),[Ht,gt.open,gt.close,ee]);const Pt=Cs({onActivate:Jt?gt.open:void 0,rows:X,rawTasks:st,gridColumnCount:B,hierarchy:w,collapsedIds:z.collapsedIds,selectedScale:W,localeOptions:ct,interaction:nt,onToggleCollapse:z.toggle,onTasksChange:r,move:ye,scrollToRow:ht.scrollToRow,scrollApi:Ht,bodyRef:Q});fo(l,_,Ht);const Yn=p.useCallback(mt=>{mt.target===mt.currentTarget&&(Qt.select(null),gt.close())},[Qt,gt]),_n={height:typeof s=="number"?`${s}px`:s,width:typeof a=="number"?`${a}px`:a,"--gantt-pane-inset":`${Dt}px`,"--gantt-row-height":`${xt}px`},Oe={width:`${ht.totalWidth}px`};return y.jsxs("section",{className:o?`gantt-container ${o}`:"gantt-container","data-theme":jn,style:_n,children:[y.jsx("div",{className:"gantt-sr-only",role:"status","aria-live":"polite",children:Pt.announcement}),y.jsxs("div",{className:"gantt-layout",children:[y.jsxs("div",{className:"gantt-main",children:[y.jsx("div",{ref:V,className:"gantt-scroll-container",children:y.jsxs("div",{ref:Q,className:"gantt-body",role:"treegrid","aria-label":"Gantt chart","aria-rowcount":X.length+(ft?1:0),onKeyDown:Pt.onKeyDown,onFocusCapture:Pt.onFocusCapture,children:[ft&&y.jsx(vs,{rows:X,virtualItems:ht.virtualRows,totalHeight:ht.totalHeight,width:lt,showRowNumbers:x,hierarchy:w,collapsedIds:z.collapsedIds,onToggleCollapse:z.toggle,focus:Pt.focus,onRowClick:gt.onTaskActivate,onRowDoubleClick:F,reorderEnabled:Ln,interaction:nt,move:ye}),y.jsxs("div",{className:"gantt-timeline",style:Oe,role:"presentation",children:[y.jsxs("div",{className:"gantt-header-wrapper",style:Oe,children:[y.jsx(Ur,{bottomRowCells:_,selectedScale:W,width:ht.totalWidth,virtual:ht}),y.jsx(Is,{ranges:ke}),y.jsx(ss,{}),y.jsx(cs,{leftPx:Me})]}),y.jsxs("div",{className:`gantt-content${Tt?" drawable":""}`,style:{height:`${ht.totalHeight}px`,width:`${ht.totalWidth}px`},role:"presentation",onPointerDown:Rn,onClick:Yn,children:[y.jsx(Es,{ranges:ke}),y.jsx(Ts,{rows:X,virtualItems:ht.virtualRows,ownedByTaskList:ft,hierarchy:w,collapsedIds:z.collapsedIds}),y.jsx(is,{leftPx:Me}),_t&&y.jsx("div",{className:"gantt-draw-ghost",style:{left:`${_t.leftPx}px`,width:`${_t.widthPx}px`,height:`${ae}px`,marginTop:`${(xt-ae)/2}px`,transform:`translateY(${_t.topPx}px)`},"aria-hidden":"true"}),y.jsx(rs,{transformedTasks:rt,virtual:ht,interaction:nt,onTasksChange:r,onDependencyDelete:A}),y.jsx(Os,{rows:X,virtualItems:ht.virtualRows,gridColumnCount:B,focus:Pt.focus,isBarVisible:ht.isBarVisible,options:Nn,interaction:nt,calendar:An,autoScrollOnDrag:tt,onDependencyCreate:h})]})]})]})}),ft&&y.jsx(os,{width:lt,onWidthChange:Z}),ft&&Tt&&y.jsx(as,{width:lt,onAdd:ee})]}),te.task&&y.jsx(Vs,{task:te.task,tasks:I,scale:W,localeOptions:ct,interaction:nt,onClose:gt.close,onTasksChange:r,render:D,open:te.open})]})]})}exports.CALENDAR_DAYS=Tn;exports.ReactGanttChart=Io;exports.buildTaskTree=yt;exports.collectSubtreeIds=jt;exports.createWorkingCalendar=Pn;exports.moveTask=gn;exports.rollUpTasks=pn;exports.sortTasksBySequence=Ct;exports.validateMove=$e;