@art-tools/react-gantt 0.1.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.
package/dist/index.cjs ADDED
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`react`),t=require(`react-dom`),n=require(`react/jsx-runtime`);var r=class{cache=new Map;capacity;constructor(e){this.capacity=e}refreshKey(e){if(!this.cache.has(e))return;let t=this.cache.get(e);this.cache.delete(e),this.cache.set(e,t)}get(e){if(this.cache.has(e))return this.refreshKey(e),this.cache.get(e)}put(e,t){if(this.refreshKey(e),this.cache.set(e,t),this.cache.size>this.capacity){let[e]=this.cache.keys();this.cache.delete(e)}}};function i(e,t){let n=new r(t);return t=>{let r=n.get(t);if(r!=null)return r;let i=e(t);return n.put(t,i),i}}function a(e,t){return i(e,t)}var o=6e4,s=36e5,c=864e5,l={minute:o,hour:s,day:c,week:c*7};function u(e,t,n){let r=e.getFullYear(),i=e.getMonth(),a=e.getDate();switch(t){case`minute`:{let t=new Date(e);t.setSeconds(0,0);let r=Math.round(t.getTime()/o);return`mi-${Math.floor(r/n)}`}case`hour`:{let t=new Date(e);t.setMinutes(0,0,0);let r=Math.round(t.getTime()/s);return`h-${Math.floor(r/n)}`}case`day`:{let e=Math.floor(Date.UTC(r,i,a)/c);return`d-${Math.floor(e/n)}`}case`week`:{let e=new Date(r,i,a),t=e.getDay(),o=t===0?-6:1-t;e.setDate(e.getDate()+o);let s=Math.floor(e.getTime()/(c*7));return`w-${Math.floor(s/n)}`}case`month`:{let e=r*12+i;return`mo-${Math.floor(e/n)}`}case`quarter`:{let e=r*4+Math.floor(i/3);return`q-${Math.floor(e/n)}`}case`year`:return`y-${Math.floor(r/n)}`;default:throw Error(`Unsupported unit: ${t}`)}}function d(e){let t=e.getDay();return t===0||t===6}function f(e){return Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())/c}function p(e){let t=new Date(e*c);return new Date(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())}function m(e,t){let n=new Date(e);return n.setHours(0,0,0,0),new Date(n.getTime()+t*c)}function h(e,t){let n=new Date(e);switch(t){case`minute`:return n.setSeconds(0,0),n;case`hour`:return n.setMinutes(0,0,0),n;case`day`:return n.setHours(0,0,0,0),n;case`week`:{n.setHours(0,0,0,0);let e=n.getDay(),t=e===0?-6:1-e;return n.setDate(n.getDate()+t),n}case`month`:return n.setHours(0,0,0,0),n.setDate(1),n;case`quarter`:return n.setHours(0,0,0,0),n.setMonth(Math.floor(n.getMonth()/3)*3,1),n;case`year`:return n.setHours(0,0,0,0),n.setMonth(0,1),n;default:throw Error(`Unsupported unit: ${t}`)}}function g(e,t,n){let r=l[t];if(r!==void 0)return t===`day`||t===`week`?m(e,r/c*n):new Date(e.getTime()+n*r);let i=new Date(e);switch(t){case`month`:return i.setMonth(i.getMonth()+n),i;case`quarter`:return i.setMonth(i.getMonth()+n*3),i;case`year`:return i.setFullYear(i.getFullYear()+n),i;default:throw Error(`Unsupported unit: ${t}`)}}function _(e,t,n){let r=l[n];if(r!==void 0)return(t.getTime()-e.getTime())/r;let i=n===`month`?1:n===`quarter`?3:12,a=e.getFullYear()*12+e.getMonth(),o=t.getFullYear()*12+t.getMonth(),s=Math.floor((o-a)/i);for(;g(e,n,s).getTime()>t.getTime();)--s;for(;g(e,n,s+1).getTime()<=t.getTime();)s+=1;let c=g(e,n,s).getTime(),u=g(e,n,s+1).getTime();return s+(t.getTime()-c)/(u-c)}function v(e,t,n){let r=l[t];if(r!==void 0)return new Date(e.getTime()+n*r);let i=Math.floor(n),a=n-i,o=g(e,t,i).getTime(),s=g(e,t,i+1).getTime();return new Date(o+a*(s-o))}function y(e,t,n=`day`,r=1){return Array.from({length:t},(t,i)=>g(e,n,i*r))}function b(e){let t=e[0];if(!t)return null;let n=t.startDate,r=t.endDate??t.startDate;for(let t of e){t.startDate<n&&(n=t.startDate);let e=t.endDate??t.startDate;e>r&&(r=e)}return{min:n,max:r}}var x=a(b,3),S=1440,C=6e4,w=[0,S],T=/^\s*(\d{1,2}):(\d{2})\s*-\s*(\d{1,2}):(\d{2})\s*$/;function E(e){let t=T.exec(e);if(!t)throw Error(`Invalid working-hours range ${JSON.stringify(e)}: expected "H:MM-H:MM", e.g. "8:30-12:00".`);let n=Number(t[1])*60+Number(t[2]),r=Number(t[3])*60+Number(t[4]);if(n<0||n>=1440)throw Error(`Invalid working-hours range ${JSON.stringify(e)}: start must be within the day.`);if(r<=n||r>1440)throw Error(`Invalid working-hours range ${JSON.stringify(e)}: end must be after start and no later than 24:00.`);return[n,r]}function D(e){if(e===void 0)return w;if(e===!1)return[];let t=e.map(E).toSorted((e,t)=>e[0]-t[0]),n=[];for(let[e,r]of t){let t=n.length>0?n[n.length-1]:void 0;if(t!==void 0&&e<=t){r>t&&(n[n.length-1]=r);continue}n.push(e,r)}return n}function O(e,t){let n=[],r=0;for(let t=0;t<e.length;t+=2)n.push(r),r+=e[t+1]-e[t];return{intervals:e,prefix:n,totalMinutes:r,id:t}}function ee(){let e=new Map;return t=>{let n=t.join(`,`),r=e.get(n);if(r)return r;let i=O(t,e.size);return e.set(n,i),i}}function k(e){return e===void 0?`*`:e===!1?`-`:e.join(`,`)}function te(e){if(!e)return``;let t=[k(e.hours)];for(let n=0;n<7;n++){let r=e.days?.[n];r!==void 0&&t.push(`${n}=${k(r)}`)}let n=e.dates;if(n)for(let e of Object.keys(n).toSorted())t.push(`${e}=${k(n[e])}`);return t.join(`|`)}var A=/^(\d{4})-(\d{2})-(\d{2})$/;function j(e){let t=A.exec(e);if(!t)throw Error(`Invalid calendar date key ${JSON.stringify(e)}: expected a local civil date, "YYYY-MM-DD".`);return f(new Date(Number(t[1]),Number(t[2])-1,Number(t[3])))}function M(e,t){let n=ee(),r=D(e.hours),i=[];for(let t=0;t<7;t++){let a=e.days?.[t];i.push(n(a===void 0?r:D(a)))}let a=new Map;if(e.dates)for(let[t,r]of Object.entries(e.dates))a.set(j(t),n(D(r)));let o=[...a.keys()].toSorted((e,t)=>e-t),s=0,c=!0,l=a.size===0;for(let e of i)s+=e.totalMinutes,e.totalMinutes!==0&&e.totalMinutes!==1440&&(c=!1),e.totalMinutes!==1440&&(l=!1);for(let e of a.values())e.totalMinutes!==0&&e.totalMinutes!==1440&&(c=!1);let u=0;for(let e of i)e.totalMinutes>u&&(u=e.totalMinutes);return{key:t,byWeekday:i,byDate:a,overrideDays:o,isAlwaysWorking:l,isDayGranular:c,weekMinutes:s,msPerWorkingDay:u*C}}function N(e,t){return e.byDate.get(t)||e.byWeekday[((t+4)%7+7)%7]}function P(e,t){let n=e.overrideDays,r=0,i=n.length;for(;r<i;){let e=r+i>>1;n[e]<t?r=e+1:i=e}return r<n.length?n[r]:1/0}function F(e,t){let n=e.overrideDays,r=0,i=n.length;for(;r<i;){let e=r+i>>1;n[e]<=t?r=e+1:i=e}return r>0?n[r-1]:-1/0}function ne(t){let n=(0,e.useRef)(null),r=te(t);return(!n.current||n.current.key!==r)&&(n.current={key:r,value:t?M(t,r):null}),n.current.value}var I=36e5,L=864e5,R=2e4;function z(e){return(e.getHours()*I+e.getMinutes()*C+e.getSeconds()*1e3+e.getMilliseconds())/C}function B(e,t){let n=p(e);return new Date(n.getFullYear(),n.getMonth(),n.getDate(),0,0,0,Math.round(t*C))}function V(e,t){let{intervals:n,prefix:r}=e;for(let e=0,i=0;e<n.length;e+=2,i++){let a=n[e],o=n[e+1];if(t<=a)return r[i];if(t<o)return r[i]+(t-a)}return e.totalMinutes}function re(e,t){let{intervals:n,prefix:r}=e,i=n.length>0?n[0]:0;for(let e=0,a=0;e<n.length&&!(r[a]>=t);e+=2,a++)i=n[e]+(t-r[a]);return i}function ie(e,t){let{intervals:n,prefix:r}=e;for(let e=0,i=0;e<n.length;e+=2,i++){let a=n[e+1]-n[e];if(t<r[i]+a)return n[e]+(t-r[i])}return n.length>0?n[n.length-1]:0}function ae(e,t){let{intervals:n}=e;for(let e=0;e<n.length;e+=2)if(t<n[e+1])return Math.max(t,n[e]);return null}function oe(e,t){let{intervals:n}=e,r=null;for(let e=0;e<n.length;e+=2)t>n[e]&&(r=Math.min(t,n[e+1]));return r}function se(e,t){if(!e||e.isAlwaysWorking)return!0;let n=N(e,f(t)),r=z(t),{intervals:i}=n;for(let e=0;e<i.length;e+=2)if(r>=i[e]&&r<i[e+1])return!0;return!1}function H(e,t,n){if(!e||e.isAlwaysWorking||e.weekMinutes===0&&e.byDate.size===0)return t;let r=f(t),i=z(t);for(let a=0;a<R;a++){let a=N(e,r);if(n===1){let e=ae(a,i);if(e!==null)return e===i&&r===f(t)?t:B(r,e);r+=1,i=0;continue}let o=oe(a,i);if(o!==null)return o===i&&r===f(t)?t:B(r,o);--r,i=S}return t}function ce(e,t){if(!e||e.isAlwaysWorking||se(e,t))return t;let n=H(e,t,1),r=H(e,t,-1);return n.getTime()-t.getTime()<=t.getTime()-r.getTime()?n:r}function le(e,t,n){let r=f(t),i=z(t),a=n;for(let t=0;t<R;t++){let t=N(e,r),n=V(t,i),o=t.totalMinutes-n;if(a<=o)return B(r,re(t,n+a));if(a-=o,r+=1,i=0,e.weekMinutes>0&&a>e.weekMinutes){let t=P(e,r),n=t===1/0?1/0:Math.floor((t-r)/7),i=Math.ceil(a/e.weekMinutes)-1,o=Math.min(n,i);o>0&&Number.isFinite(o)&&(r+=o*7,a-=o*e.weekMinutes)}}return B(r,i)}function ue(e,t,n){let r=f(t),i=z(t),a=n;for(let t=0;t<R;t++){let t=N(e,r),n=V(t,i);if(a<=n)return B(r,ie(t,n-a));if(a-=n,--r,i=S,e.weekMinutes>0&&a>e.weekMinutes){let t=F(e,r),n=t===-1/0?1/0:Math.floor((r-t)/7),i=Math.ceil(a/e.weekMinutes)-1,o=Math.min(n,i);o>0&&Number.isFinite(o)&&(r-=o*7,a-=o*e.weekMinutes)}}return B(r,i)}function U(e,t,n,r){if(!e)return new Date(t.getTime()+n);let i=H(e,t,r??(n<0?-1:1));return n===0||e.weekMinutes===0&&e.byDate.size===0?i:n>0?le(e,i,n/C):ue(e,i,-n/C)}function de(e,t,n){if(!e)return n.getTime()-t.getTime();if(n.getTime()<t.getTime())return-de(e,n,t);let r=f(n),i=f(t),a=z(t),o=0;for(;i<r;){if(a===0&&e.weekMinutes>0){let t=P(e,i),n=Math.floor((Math.min(r,t)-i)/7);if(n>0){o+=n*e.weekMinutes,i+=n*7;continue}}let t=N(e,i);o+=t.totalMinutes-V(t,a),i+=1,a=0}let s=N(e,i);return o+=V(s,z(n))-V(s,a),o*C}var fe={isNonWorking:!1};function W(e,t,n){if(!e){let e=t.getDay();return e===0||e===6?{isNonWorking:!0,reason:`weekend`}:fe}if(de(e,t,n)>0)return fe;let r=f(t);return e.byDate.has(r)?{isNonWorking:!0,reason:`holiday`}:N(e,r).totalMinutes===0?{isNonWorking:!0,reason:`weekend`}:{isNonWorking:!0,reason:`offHours`}}function G(e,t){return t===`minute`?C:t===`hour`?I:!e||e.msPerWorkingDay===0?L:e.msPerWorkingDay}function pe(e,t,n,r,i){return U(e,t,n*G(e,r),i)}var K={calendar:null,durationUnit:`day`,snapToWorking:!0};function q(e,t){return e.type===`milestone`||e.duration===0?e.startDate:e.endDate?e.endDate:e.duration===void 0?e.startDate:pe(t.calendar,e.startDate,e.duration,t.durationUnit,1)}function me(e,t){return t.getTime()<=e.getTime()?h(e,`day`):h(new Date(t.getTime()-1),`day`)}function he(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate()+1)}function ge(e,t){let n=q(e,t);if(!(n.getTime()<=e.startDate.getTime()))return me(e.startDate,n)}function _e(e,t){return de(t.calendar,e.startDate,q(e,t))/G(t.calendar,t.durationUnit)}var ve={gantt:`Gantt chart`,taskList:`Task list`,timeline:`Timeline`,expand:`Expand`,collapse:`Collapse`,resizeTaskList:`Resize task list`,deleteDependency:`Delete dependency`,editTask:e=>`Edit ${e.name}`,addTaskAfter:e=>`Add task after ${e.name}`,deleteTask:e=>`Delete ${e.name}`,bar:(e,{progress:t})=>Se(e,t)};function ye(e){return e?{...ve,...e}:ve}function be(e){return e.toLocaleDateString(void 0,{dateStyle:`medium`})}var xe={task:`task`,milestone:`milestone`,summary:`summary`};function Se(e,t){let n=xe[e.type??`task`],r=[e.name,n];return e.endDate&&e.endDate.getTime()!==e.startDate.getTime()?r.push(`${be(e.startDate)} to ${be(e.endDate)}`):r.push(be(e.startDate)),e.type!==`milestone`&&r.push(`${Math.round(t)}% complete`),r.join(`, `)}function Ce(e,t,n){switch(t){case`minute`:case`hour`:return e.toLocaleString(void 0,{dateStyle:`long`,timeStyle:`short`});case`day`:return e.toLocaleDateString(void 0,{dateStyle:`long`});case`week`:return`Week of ${e.toLocaleDateString(void 0,{dateStyle:`long`})}`;case`month`:return e.toLocaleDateString(void 0,{month:`long`,year:`numeric`});case`quarter`:return`Q${Math.floor(e.getMonth()/3)+1} ${e.getFullYear()}`;case`year`:return n>1?`${e.getFullYear()} to ${e.getFullYear()+n-1}`:String(e.getFullYear())}}function we(e,t=K){let n=Fe(e.values()),r=n.get(null)??[],i=[];for(let e of r)Me(e,n,i,t);return i}function Te(e){let t=new Map;for(let n of e)t.set(n.id,n);return t}function Ee(e,t){return De(new Map(e),t)}function De(e,t){for(let n of t)switch(n.type){case`update`:e.has(n.task.id)&&e.set(n.task.id,n.task);break;case`delete`:e.delete(n.id);break;case`create`:e=Oe(e,n.task,n.afterId);break}return e}function Oe(e,t,n){if(n==null)return e.set(t.id,t),e;let r=new Map;e.has(n)||r.set(t.id,t);for(let[i,a]of e)r.set(i,a),i===n&&r.set(t.id,t);return r}var ke=32;function Ae(){return{seedTasks:null,snapshots:new r(ke)}}function je(e,t,n){e.seedTasks!==t&&(e.seedTasks=t,e.snapshots=new r(ke));let i=0,a=null;for(let t=n.cursor;t>=1;t--){let r=e.snapshots.get(t);if(r&&r.producedBy===n.transactions[t-1]){i=t,a=r.map;break}}if(!a){let n=e.snapshots.get(0);a=n?n.map:Te(t),n||e.snapshots.put(0,{producedBy:null,map:a})}for(let t=i;t<n.cursor;t++){let r=n.transactions[t];a=Ee(a,r),e.snapshots.put(t+1,{producedBy:r,map:a})}return a}function Me(e,t,n,r){let i=t.get(e.id);if(!i||i.length===0){let t=Ne(e,r);return n.push(t),t}let a=n.length;n.push(e);let o=[];for(let e of i)o.push(Me(e,t,n,r));let s=Pe(e,o,r);return n[a]=s,s}function Ne(e,t){let n=q(e,t);return e.endDate&&e.endDate.getTime()===n.getTime()||!e.endDate&&n===e.startDate?e:{...e,endDate:n}}function Pe(e,t,n=K){if(e.type!==`summary`||t.length===0)return Ne(e,n);let r=t[0].startDate,i=q(t[0],n),a=0,o=0;for(let e of t){e.startDate<r&&(r=e.startDate);let t=q(e,n);t>i&&(i=t),e.type!==`milestone`&&(o++,a+=e.progress??0)}let s=o===0?0:Math.round(a/o);return{...e,startDate:r,endDate:i,progress:s}}function Fe(e){let t=new Map;for(let n of e){let e=n.parentId??null,r=t.get(e)??[];r.push(n),t.set(e,r)}return t}var Ie=class{items=[];head=0;constructor(e){e&&this.items.push(...e)}get size(){return this.items.length-this.head}isEmpty(){return this.size===0}enqueue(e){this.items.push(e)}dequeue(){if(this.head>=this.items.length)return;let e=this.items[this.head];return this.head++,this.head>this.items.length>>1&&(this.items=this.items.slice(this.head),this.head=0),e}};function Le(e,t){return{start:e.startDate,end:q(e,t)}}function Re(e,t){let{start:n,end:r}=Le(e,t);return de(t.calendar,n,r)}function ze(e,t,n,r,i){let a=i.calendar;switch(t){case`FS`:return U(a,e.end,n,1);case`SS`:return U(a,e.start,n,1);case`FF`:return U(a,U(a,e.end,n,-1),-r,-1);case`SF`:return U(a,U(a,e.start,n,-1),-r,-1)}}function Be(e){let t=new Map,n=new Map;for(let r of e){let e=t.get(r.from);e?e.push(r.to):t.set(r.from,[r.to]);let i=n.get(r.to);i?i.push(r):n.set(r.to,[r])}return{successorsOf:t,predecessorDeps:n,size:e.length}}function Ve(e){let t=new Map;return{get:n=>t.get(n)??e.get(n),set:(e,n)=>{t.set(e,n)},get size(){return e.size}}}function He(e,t,n,r){let i=Re(e,r),a=G(r.calendar,r.durationUnit),o=null;for(let s of t.get(e.id)??[]){let e=n.get(s.from);if(!e)continue;let t=ze(Le(e,r),s.type,(s.lag??0)*a,i,r);(o===null||t>o)&&(o=t)}return o===null?null:H(r.calendar,o,1)}function Ue(e,t,n){return e.type===`milestone`?{...e,startDate:t,endDate:t}:{...e,startDate:t,endDate:U(n.calendar,t,Re(e,n),1)}}function We(e,t,n){let r=n.calendar,i=n.snapToWorking,a=Le(e,n);if(e.type===`milestone`){let e=t.kind===`resizeEnd`?t.endDate:t.startDate,n=i?ce(r,e):e;return{startDate:n,endDate:n}}if(t.kind===`move`){let e=de(r,a.start,a.end),n=i?H(r,t.startDate,1):t.startDate;return{startDate:n,endDate:U(r,n,e,1)}}let o=t.kind===`resizeStart`?t.startDate:a.start,s=t.kind===`resizeEnd`?t.endDate:a.end,c=i?H(r,o,1):o,l=i?H(r,s,-1):s;if(de(r,c,l)<=0){let e=G(r,n.durationUnit);return t.kind===`resizeStart`?{startDate:U(r,l,-e,-1),endDate:l}:{startDate:c,endDate:U(r,c,e,1)}}return{startDate:c,endDate:l}}function Ge(e,t,n,r=K){let{successorsOf:i,predecessorDeps:a}=t,o=new Map,s=e.get(n);if(s){let t=He(s,a,e,r);if(t!==null&&t.getTime()>s.startDate.getTime()){let i=Ue(s,t,r);e.set(n,i),o.set(n,i)}}let c=new Ie([n]),l=(t.size+1)*(e.size+1),u=0;for(;!c.isEmpty()&&!(u++>l);){let t=c.dequeue();for(let n of i.get(t)??[]){let t=e.get(n);if(!t)continue;let i=He(t,a,e,r);if(i===null||i.getTime()<=t.startDate.getTime())continue;let s=Ue(t,i,r);e.set(n,s),o.set(n,s),c.enqueue(n)}}return o}var Ke={transactions:[],cursor:0},qe=[];function Je(t){(0,e.startTransition)(t)}function Ye(e,t){let n=e.transactions.slice(0,e.cursor);return{transactions:[...n,t],cursor:n.length+1}}function Xe(e,t){return e instanceof Date&&t instanceof Date?e.getTime()===t.getTime():Object.is(e,t)}function Ze(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);for(let r of n)if(!Xe(e[r],t[r]))return!1;return!0}var Qe=(n,r=qe,i={},a=K)=>{let o=(0,e.useRef)(i);o.current=i;let s=(0,e.useRef)(a);s.current=a;let[c,l]=(0,e.useState)(Ke),u=(0,e.useMemo)(()=>Be(r),[r]),d=(0,e.useRef)(null),f=(0,e.useMemo)(()=>(d.current??=Ae(),je(d.current,n,c)),[n,c]),p=(0,e.useRef)(f);p.current=f;let m=(0,e.useMemo)(()=>we(f,a),[f,a]),h=(0,e.useCallback)((e,t)=>{let n=p.current.get(e);if(!n)return;let{startDate:r,endDate:i}=We(n,t,s.current),a={...n,startDate:r,endDate:i};if(Ze(a,n))return;let o=[{type:`update`,task:a}];if(u.size>0){let t=Ve(p.current);t.set(e,a);let n=Ge(t,u,e,s.current);for(let e of n.values())o.push({type:`update`,task:e})}Je(()=>l(e=>Ye(e,o)))},[u]),g=(0,e.useCallback)((e,t)=>{let n=p.current.get(e);if(!n)return;let r={...n};if(t.name!==void 0&&(r.name=t.name),t.startDate&&(r.startDate=t.startDate),t.endDate&&(r.endDate=t.endDate),t.progress!==void 0&&(r.progress=t.progress),Ze(r,n))return;let i=[{type:`update`,task:r}];if((t.startDate!==void 0||t.endDate!==void 0)&&u.size>0){let t=Ve(p.current);t.set(e,r);let n=Ge(t,u,e,s.current);for(let e of n.values())i.push({type:`update`,task:e})}Je(()=>l(e=>Ye(e,i)))},[u]),_=(0,e.useCallback)((e,n)=>{(0,t.flushSync)(()=>{l(t=>Ye(t,[{type:`create`,task:e,afterId:n}]))}),o.current.onTaskCreate?.(e,n)},[]),v=(0,e.useCallback)(e=>{Je(()=>l(t=>Ye(t,[{type:`delete`,id:e}]))),o.current.onTaskDelete?.(e)},[]),y=(0,e.useCallback)(()=>{Je(()=>l(e=>e.cursor>0?{...e,cursor:e.cursor-1}:e))},[]),b=(0,e.useCallback)(()=>{Je(()=>l(e=>e.cursor<e.transactions.length?{...e,cursor:e.cursor+1}:e))},[]),x=c.cursor>0,S=c.cursor<c.transactions.length,C=(0,e.useRef)(m);C.current=m;let w=(0,e.useRef)(c);return(0,e.useEffect)(()=>{w.current!==c&&(w.current=c,o.current.onTasksChange?.(C.current))},[c]),{tasksList:m,updateTask:g,commitTask:h,createTask:_,deleteTask:v,undo:y,redo:b,canUndo:x,canRedo:S}};function J(t){let n=(0,e.useRef)(t);return n.current=t,n}function $e(t){let n=(0,e.useMemo)(()=>{let e=new Set;for(let n of t)n.parentId!=null&&e.add(n.parentId);return e},[t]),[r,i]=(0,e.useState)(new Set),a=(0,e.useCallback)(e=>{i(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),o=J(t),s=(0,e.useCallback)(e=>{i(t=>{if(t.size===0)return t;let n=new Map;for(let e of o.current)n.set(e.id,e);let r=new Set(t),i=!1,a=n.get(e);for(;a&&a.parentId!=null;)r.delete(a.parentId)&&(i=!0),a=n.get(a.parentId);return i?r:t})},[o]),c=(0,e.useMemo)(()=>{let e=new Set;for(let t of n)r.has(t)||e.add(t);return e},[n,r]);return{visibleTasks:(0,e.useMemo)(()=>{if(r.size===0)return t;let e=new Set,n=[];for(let i of t){if(i.parentId!=null&&(e.has(i.parentId)||r.has(i.parentId))){e.add(i.id);continue}n.push(i)}return n},[t,r]),expandedIds:c,parentIds:n,toggleExpand:a,revealAncestors:s}}var et=typeof window<`u`?e.useLayoutEffect:e.useEffect,tt={scrollTop:0,scrollLeft:0,clientWidth:0,clientHeight:0};function nt(e){return{scrollTop:e.scrollTop,scrollLeft:e.scrollLeft,clientWidth:e.clientWidth,clientHeight:e.clientHeight}}function rt(e,t,n){return e.scrollTop!==t.scrollTop||e.clientHeight!==t.clientHeight?!1:n?e.scrollLeft===t.scrollLeft&&e.clientWidth===t.clientWidth:!0}function it(t,{trackHorizontal:n=!0}={}){let r=(0,e.useRef)(null),i=J(n),[a,o]=(0,e.useState)(tt),s=(0,e.useCallback)(()=>{r.current===null&&(r.current=requestAnimationFrame(()=>{r.current=null;let e=t.current;if(!e)return;let n=nt(e);o(e=>rt(e,n,i.current)?e:n)}))},[t,i]);return et(()=>{let e=t.current;e&&o(t=>{let n=nt(e);return rt(t,n,i.current)?t:n})},[t]),(0,e.useEffect)(()=>{let e=t.current;if(!e||typeof ResizeObserver>`u`)return;let n=new ResizeObserver(s);return n.observe(e),()=>{n.disconnect(),r.current!==null&&(cancelAnimationFrame(r.current),r.current=null)}},[s,t]),{viewport:a,scheduleMeasure:s}}function at(){let t=(0,e.useRef)(null),n=(0,e.useRef)(null),r=(0,e.useRef)(!1),{viewport:i,scheduleMeasure:a}=it(n);return{taskListRef:t,gridRef:n,onTaskListScroll:(0,e.useCallback)(()=>{r.current||!t.current||!n.current||(r.current=!0,n.current.scrollTop=t.current.scrollTop,r.current=!1,a())},[a]),onGridScroll:(0,e.useCallback)(()=>{n.current&&t.current&&!r.current&&(r.current=!0,t.current.scrollTop=n.current.scrollTop,r.current=!1),a()},[a]),viewport:i}}function ot(t){let n=(0,e.useRef)(t);n.current=t;let r=(0,e.useCallback)((...e)=>n.current?.(...e),[]);if(t)return r}function st(e,t,n,r,i=0){let a=n+r;return e-i<n?Math.max(0,e-i):e+t+i>a?e+t+i-r:n}function ct(e,t={},n,r,i=`day`){let a=t.startDate??e.startDate,o=t.endDate??e.endDate??a,s=_(n,a,i),c=_(n,o,i);return{left:s*r,width:(c-s)*r,progress:t.progress??e.progress??0}}function lt(e,t,n,r=`day`){return v(t,r,e/n)}var ut=[{unit:`month`,step:1,format:e=>e.toLocaleString(void 0,{month:`long`,year:`numeric`})},{unit:`day`,step:1,format:e=>String(e.getDate())}];function dt(e){return(e??ut).at(-1)?.unit??`day`}function ft(e){return(e??ut).at(-1)?.step??1}function pt(e,t,n){let r=x(e);return r?mt(r.min,dt(t),n,ft(t)):null}function mt(e,t,n,r){return h(g(h(e,t),t,-n*r),t)}function ht(e,t=0,n){let r=x(e);if(!r)return[];let i=dt(n),a=ft(n),o=mt(r.min,i,t,a),s=g(h(r.max,i),i,t*a);return y(o,Math.round(_(o,s,i)/a)+1,i,a)}function gt({taskListRef:t,gridRef:n,tasksList:r,visibleTasks:i,rowHeight:a,colWidth:o,scales:s,padDays:c,revealAncestors:l}){let u=J(r),d=J(i),f=(0,e.useRef)(()=>{}),p=(0,e.useRef)(null),m=e=>{let r=t.current??n.current;if(!r)return;let i=st(e*a,a,r.scrollTop,r.clientHeight,a);i!==r.scrollTop&&(r.scrollTop=i)},h=e=>{let t=n.current,r=pt(d.current,s,c);if(!t||!r)return;let{left:i,width:a}=ct(e,{},r,o,dt(s)),l=st(i,a,t.scrollLeft,t.clientWidth,o);l!==t.scrollLeft&&(t.scrollLeft=l)};return f.current=(e,t)=>{let{vertical:n=!0,horizontal:r=!1}=t??{},i=d.current.findIndex(t=>t.id===e);if(i<0){if(!u.current.some(t=>t.id===e))return;p.current={id:e,options:t},l(e);return}n&&m(i),r&&h(d.current[i])},(0,e.useLayoutEffect)(()=>{let e=p.current;e&&(p.current=null,f.current(e.id,e.options))},[i]),(0,e.useCallback)((e,t)=>f.current(e,t),[])}function _t({gridRef:t,visibleTasks:n,padDays:r,levels:i,initialIndex:a}){let o=(0,e.useCallback)(e=>Math.max(0,Math.min(i.length-1,e)),[i.length]),[s,c]=(0,e.useState)(()=>o(a)),l=J(s),u=J(n),d=J(r),f=J(i),p=(0,e.useRef)(null),m=(0,e.useCallback)((e,n)=>{let r=l.current,i=o(r+n);if(i===r)return;let a=t.current,s=f.current[r],m=pt(u.current,s.scales,d.current);a&&m?p.current={date:v(m,dt(s.scales),e/s.colWidth),viewportOffset:e-a.scrollLeft}:p.current=null,c(i)},[o,t,l,u,d,f]),h=(0,e.useCallback)(()=>{let e=t.current;return e?e.scrollLeft+e.clientWidth/2:0},[t]),g=(0,e.useCallback)(()=>m(h(),1),[m,h]),y=(0,e.useCallback)(()=>m(h(),-1),[m,h]),b=(0,e.useCallback)(e=>m(h(),o(e)-l.current),[m,h,o,l]);return(0,e.useLayoutEffect)(()=>{let e=p.current;if(e===null)return;p.current=null;let n=t.current,r=f.current[s],i=pt(u.current,r.scales,d.current);if(!n||!i)return;let a=dt(r.scales),o=_(i,e.date,a)*r.colWidth;n.scrollLeft=Math.max(0,o-e.viewportOffset)},[s]),{index:s,level:i[s],count:i.length,canZoomIn:s<i.length-1,canZoomOut:s>0,zoomIn:g,zoomOut:y,setZoom:b,zoomAt:m}}var vt=e=>String(e).padStart(2,`0`),yt=e=>String(e.getFullYear()),bt=e=>`Q${Math.floor(e.getMonth()/3)+1}`,xt=e=>e.toLocaleString(void 0,{month:`long`,year:`numeric`}),St=e=>e.toLocaleString(void 0,{month:`short`}),Ct=e=>String(e.getDate()),wt=e=>e.toLocaleString(void 0,{weekday:`short`,day:`numeric`}),Tt=[{colWidth:56,scales:[{unit:`year`,step:1,format:yt},{unit:`quarter`,step:1,format:bt}]},{colWidth:44,scales:[{unit:`year`,step:1,format:yt},{unit:`month`,step:1,format:St}]},{colWidth:60,scales:[{unit:`month`,step:1,format:xt},{unit:`week`,step:1,format:wt}]},{colWidth:40,scales:[{unit:`month`,step:1,format:xt},{unit:`day`,step:1,format:Ct}]},{colWidth:44,scales:[{unit:`day`,step:1,format:wt},{unit:`hour`,step:1,format:e=>`${vt(e.getHours())}:00`}]}],Et=3;function Dt(e,t,n){return e&&e.length>0?e:!t&&n===void 0?Tt:Tt.map((e,r)=>r===3?{scales:t??e.scales,colWidth:n??e.colWidth}:e)}var Ot={end:{start:`FS`,end:`FF`},start:{start:`SS`,end:`SF`}};function kt({gridBodyRef:t,onDependencyCreate:n}){let r=J(n),[i,a]=(0,e.useState)(null),o=J(i),s=(0,e.useRef)(null),c=(0,e.useRef)(null),l=(0,e.useRef)(null),u=(0,e.useCallback)(()=>{s.current&&=(window.removeEventListener(`mousemove`,s.current.move),window.removeEventListener(`mouseup`,s.current.up),null),c.current!==null&&(cancelAnimationFrame(c.current),c.current=null)},[]);return(0,e.useEffect)(()=>u,[u]),{drag:i,startDrag:(0,e.useCallback)(e=>{a(e);let n=e=>{l.current={x:e.clientX,y:e.clientY},c.current===null&&(c.current=requestAnimationFrame(()=>{c.current=null;let e=t.current,n=l.current;if(!e||!n)return;let r=e.getBoundingClientRect();a(e=>e?{...e,currentX:n.x-r.left,currentY:n.y-r.top}:null)}))},r=()=>{a(null),u()};s.current={move:n,up:r},window.addEventListener(`mousemove`,n),window.addEventListener(`mouseup`,r)},[u,t]),endDrag:(0,e.useCallback)((e,t)=>{let n=o.current;if(n&&e!==null&&t&&e!==n.fromTaskId){let i=Ot[n.handle][t];r.current?.({from:n.fromTaskId,to:e,type:i})}a(null),u()},[u,o,r])}}function At(t){let{createTask:n,updateTask:r,deleteTask:i,undo:a,redo:o,revealTask:s,zoomIn:c,zoomOut:l,setZoom:u}=t;return(0,e.useMemo)(()=>({createTask:n,updateTask:r,deleteTask:i,undo:a,redo:o,revealTask:s,zoomIn:c,zoomOut:l,setZoom:u}),[n,r,i,a,o,s,c,l,u])}function jt({handle:t,readOnly:n,labels:r,schedulingContext:i,onTaskEditRef:a}){return(0,e.useMemo)(()=>({...t,editTask:e=>a.current?.(e),readOnly:n,labels:r,format:{endDate:e=>ge(e,i),duration:e=>_e(e,i)}}),[t,a,n,r,i])}var Mt=(0,e.createContext)(null);function Nt(){let t=(0,e.useContext)(Mt);if(!t)throw Error(`useGanttConfig must be used within a <GanttProvider>`);return t}var Pt=(0,e.createContext)(ve);function Ft(){return(0,e.useContext)(Pt)}var It=(0,e.createContext)(K);function Lt(){return(0,e.useContext)(It)}var Rt=(0,e.createContext)(!1);function zt(){return(0,e.useContext)(Rt)}var Bt=(0,e.createContext)(null);function Vt(){let t=(0,e.useContext)(Bt);if(!t)throw Error(`useGanttTaskState must be used within a <GanttProvider>`);return t}var Ht=(0,e.createContext)(null);function Ut(){let t=(0,e.useContext)(Ht);if(!t)throw Error(`useGanttTaskActions must be used within a <GanttProvider>`);return t}var Wt=(0,e.createContext)(null);function Gt(){return(0,e.useContext)(Wt)}var Kt=(0,e.createContext)(null);function qt(){let t=(0,e.useContext)(Kt);if(!t)throw Error(`useGanttScroll must be used within a <GanttProvider>`);return t}var Jt=(0,e.createContext)(null);function Yt(){let t=(0,e.useContext)(Jt);if(!t)throw Error(`useGanttViewport must be used within a <GanttProvider>`);return t}var Xt=(0,e.createContext)(null);function Zt(){let t=(0,e.useContext)(Xt);if(!t)throw Error(`useGanttDependency must be used within a <GanttProvider>`);return t}var Qt=(0,e.createContext)(!1);function $t(){return(0,e.useContext)(Qt)}var en=(0,e.createContext)(null);function tn(){return(0,e.useContext)(en)}var nn=(0,e.createContext)(null);function rn(){let t=(0,e.useContext)(nn);if(!t)throw Error(`useGanttZoom must be used within a <GanttProvider>`);return t}function an({tasks:t,rowHeight:r=36,colWidth:i,height:a,scales:o,padDays:s=1,zoomLevels:c,defaultZoomIndex:l,onZoomChange:u,zoomWheel:d=!1,zoomKeyboard:f=!1,dependencies:p=qe,onTaskClick:m,onDependencyCreate:h,onDependencyDelete:g,onTaskCreate:_,onTaskDelete:v,onTaskEdit:y,onTasksChange:b,apiRef:x,labels:S,calendar:C,snapToWorking:w=!0,durationUnit:T=`day`,readOnly:E=!1,children:D}){let[O,ee]=(0,e.useState)(null),k=(0,e.useMemo)(()=>ye(S),[S]),te=ne(C),A=(0,e.useMemo)(()=>({calendar:te,durationUnit:T,snapToWorking:w}),[te,T,w]),j=J(y),M=ot(m),N=ot(g),{tasksList:P,updateTask:F,commitTask:I,createTask:L,deleteTask:R,undo:z,redo:B,canUndo:V,canRedo:re}=Qe(t,p,{onTaskCreate:_,onTaskDelete:v,onTasksChange:b},A),{visibleTasks:ie,expandedIds:ae,parentIds:oe,toggleExpand:se,revealAncestors:H}=$e(P),{taskListRef:ce,gridRef:le,onTaskListScroll:ue,onGridScroll:U,viewport:de}=at(),fe=(0,e.useRef)(null),W=_t({gridRef:le,visibleTasks:ie,padDays:s,levels:(0,e.useMemo)(()=>Dt(c,o,i),[c,o,i]),initialIndex:l??3}),G=gt({taskListRef:ce,gridRef:le,tasksList:P,visibleTasks:ie,rowHeight:r,colWidth:W.level.colWidth,scales:W.level.scales,padDays:s,revealAncestors:H}),pe=J(u);(0,e.useEffect)(()=>{pe.current?.({index:W.index,count:W.count})},[W.index,W.count,pe]);let K=(0,e.useCallback)((e,t)=>{L(e,t),ee(e.id),G(e.id)},[L,G]),{zoomIn:q,zoomOut:me,setZoom:he,zoomAt:ge}=W,_e=At({createTask:K,updateTask:F,deleteTask:R,undo:z,redo:B,revealTask:G,zoomIn:q,zoomOut:me,setZoom:he});(0,e.useImperativeHandle)(x,()=>_e,[_e]);let ve=jt({handle:_e,readOnly:E,labels:k,schedulingContext:A,onTaskEditRef:j}),{drag:be,startDrag:xe,endDrag:Se}=kt({gridBodyRef:fe,onDependencyCreate:h}),Ce=(0,e.useMemo)(()=>({rowHeight:r,colWidth:W.level.colWidth,scales:W.level.scales,padDays:s,height:a}),[r,W.level,s,a]),we=(0,e.useMemo)(()=>({zoomIn:q,zoomOut:me,zoomAt:ge,wheelEnabled:d,keyboardEnabled:f}),[q,me,ge,d,f]),Te=(0,e.useMemo)(()=>({tasksList:P,visibleTasks:ie,expandedIds:ae,parentIds:oe,canUndo:V,canRedo:re}),[P,ie,ae,oe,V,re]),Ee=(0,e.useMemo)(()=>({updateTask:F,commitTask:I,createTask:K,deleteTask:R,undo:z,redo:B,columnApi:ve,setSelectedId:ee,toggleExpand:se,onTaskClick:M,revealTask:G}),[F,I,K,R,z,B,ve,se,M,G]),De=(0,e.useMemo)(()=>({taskListRef:ce,gridRef:le,gridBodyRef:fe,onTaskListScroll:ue,onGridScroll:U}),[ce,le,ue,U]),Oe=(0,e.useMemo)(()=>({dependencies:p,onDependencyDelete:N,startDrag:xe,endDrag:Se}),[p,N,xe,Se]);return(0,n.jsx)(Mt.Provider,{value:Ce,children:(0,n.jsx)(Rt.Provider,{value:E,children:(0,n.jsx)(Pt.Provider,{value:k,children:(0,n.jsx)(It.Provider,{value:A,children:(0,n.jsx)(nn.Provider,{value:we,children:(0,n.jsx)(Kt.Provider,{value:De,children:(0,n.jsx)(Ht.Provider,{value:Ee,children:(0,n.jsx)(Xt.Provider,{value:Oe,children:(0,n.jsx)(Bt.Provider,{value:Te,children:(0,n.jsx)(Wt.Provider,{value:O,children:(0,n.jsx)(Qt.Provider,{value:be!==null,children:(0,n.jsx)(Jt.Provider,{value:de,children:(0,n.jsx)(en.Provider,{value:be,children:D})})})})})})})})})})})})})}var on=(0,e.createContext)({});function sn({value:e,children:t}){return(0,n.jsx)(on.Provider,{value:e,children:t})}function Y(){return(0,e.useContext)(on)}function cn(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`)if(Array.isArray(e)){var i=e.length;for(t=0;t<i;t++)e[t]&&(n=cn(e[t]))&&(r&&(r+=` `),r+=n)}else for(n in e)e[n]&&(r&&(r+=` `),r+=n);return r}function ln(){for(var e,t,n=0,r=``,i=arguments.length;n<i;n++)(e=arguments[n])&&(t=cn(e))&&(r&&(r+=` `),r+=t);return r}function X(e,t,n){let r=typeof t==`function`?t(n):t;if(!r)return e;let{className:i,style:a,...o}=r;return{...e,...o,className:ln(e.className,i),style:{...e.style,...a}}}var un={calendar:`_calendar_1ksbu_1`,row:`_row_1ksbu_19`,cell:`_cell_1ksbu_29`,cellWeekend:`_cellWeekend_1ksbu_56`};function dn(e,t){let n=[];for(let r=0;r<e.length;r++){let i=e[r],a=u(i,t.unit,t.step),o=n[n.length-1];o&&o.key===a?o.count+=1:n.push({key:a,start:i,startIndex:r,count:1})}return n}function fn(e,t){if(!t)return{start:0,end:e.length};let n=0,r=e.length;for(;n<r;){let i=n+r>>1,a=e[i];a.startIndex+a.count<=t.start?n=i+1:r=i}let i=n;for(;i<e.length&&e[i].startIndex<t.end;)i+=1;return{start:n,end:i}}function pn({scale:t,dates:r,colWidth:i,rowHeight:a,highlightWeekends:o=!1,colRange:s,rowIndex:c,slots:l,slotProps:u}){let f=Y(),p=l??f.timeline?.calendarRow?.slots,{calendar:m}=Lt(),h=u??f.timeline?.calendarRow?.slotProps,_=(0,e.useMemo)(()=>dn(r,t),[r,t]),v=fn(_,s),y=p?.row??`div`,b=p?.cell??`div`,x={scale:t,colWidth:i,rowHeight:a,highlightWeekends:o};return(0,n.jsx)(y,{...X({className:un.row,style:{height:a},role:`row`,"aria-rowindex":c},h?.row,x),children:_.slice(v.start,v.end).map(e=>{let r=o&&m?W(m,e.start,g(e.start,t.unit,t.step)):{isNonWorking:!1,reason:void 0},a=m?r.isNonWorking:o&&d(e.start),s={scale:t,date:e.start,startIndex:e.startIndex,count:e.count,isNonWorking:a,nonWorkingReason:a?r.reason??`weekend`:void 0,isWeekend:a,colWidth:i};return(0,n.jsx)(b,{...X({className:ln(un.cell,a&&un.cellWeekend),style:{left:e.startIndex*i,width:e.count*i},children:t.format(e.start),role:`columnheader`,"aria-colindex":e.startIndex+1,"aria-colspan":e.count,"aria-label":t.ariaFormat?t.ariaFormat(e.start):Ce(e.start,t.unit,t.step)},h?.cell,s)},e.key)})})}function mn({colWidth:e,rowHeight:t,scales:r=ut,dates:i,colRange:a}){let o=i.length*e;return(0,n.jsx)(`div`,{className:un.calendar,style:{width:o},role:`rowgroup`,children:r.map((r,o)=>(0,n.jsx)(pn,{scale:r,dates:i,colWidth:e,rowHeight:t,highlightWeekends:r.unit===`day`&&r.step===1,colRange:a,rowIndex:o+1},`${r.unit}-${r.step}`))})}var hn=40,gn=14;function _n(e){let t=e;for(;t;){let e=getComputedStyle(t);if((e.overflowX===`auto`||e.overflowX===`scroll`)&&t.scrollWidth>t.clientWidth)return t;t=t.parentElement}return document.scrollingElement}function vn(e){if(e===document.scrollingElement)return{left:0,right:window.innerWidth};let t=e.getBoundingClientRect();return{left:t.left,right:t.right}}function yn(e,t,n){return n<e+hn?-gn*Math.min(1,(e+hn-n)/hn):n>t-hn?gn*Math.min(1,(n-(t-hn))/hn):0}function bn({enabled:t,onScroll:n}){let r=(0,e.useRef)({container:null,scrollTarget:null,startScrollLeft:0,cursorX:0,rafId:null}),i=(0,e.useRef)(n);i.current=n;let a=(0,e.useCallback)(()=>i.current(),[]),o=(0,e.useCallback)(()=>{let e=r.current;if(!e.container){e.rafId=null;return}let{left:t,right:n}=vn(e.container),i=yn(t,n,e.cursorX);i!==0&&(e.container.scrollLeft+=i),e.rafId=requestAnimationFrame(o)},[]),s=(0,e.useCallback)(()=>{let e=r.current;e.rafId!==null&&cancelAnimationFrame(e.rafId),e.scrollTarget&&e.scrollTarget.removeEventListener(`scroll`,a),e.container=null,e.scrollTarget=null,e.rafId=null},[a]),c=(0,e.useCallback)(e=>{if(!t)return;let n=r.current,i=_n(e);n.container=i,n.startScrollLeft=i?.scrollLeft??0,i&&(n.scrollTarget=i===document.scrollingElement?window:i,n.scrollTarget.addEventListener(`scroll`,a,{passive:!0}),n.rafId=requestAnimationFrame(o))},[t,a,o]),l=(0,e.useCallback)(e=>{r.current.cursorX=e},[]),u=(0,e.useCallback)(()=>{let e=r.current;return e.container?e.container.scrollLeft-e.startScrollLeft:0},[]);return(0,e.useEffect)(()=>s,[s]),{start:c,stop:s,setCursorX:l,getScrollDelta:u}}function xn({onStart:t,onDrag:n,onEnd:r,autoScroll:i=!1}){let a=(0,e.useRef)(!1),o=(0,e.useRef)(null),s=(0,e.useRef)(0),c=(0,e.useRef)(0),l=(0,e.useRef)(0),u=(0,e.useRef)(n),d=(0,e.useRef)(r);u.current=n,d.current=r;let f=(0,e.useRef)(()=>{}),{start:p,stop:m,setCursorX:h,getScrollDelta:g}=bn({enabled:i,onScroll:()=>f.current()}),_=(0,e.useCallback)(()=>{if(!a.current||o.current===null)return;let e=c.current-s.current+g();l.current=e,u.current(e,o.current)},[g]);f.current=_;let v=(0,e.useCallback)(e=>{o.current=t(e),s.current=e.clientX,c.current=e.clientX,l.current=0,a.current=!0,h(e.clientX),p(e.currentTarget),e.preventDefault(),e.stopPropagation()},[t,h,p]);return(0,e.useEffect)(()=>{let e=e=>{!a.current||o.current===null||(c.current=e.clientX,h(e.clientX),_(),e.preventDefault())},t=()=>{a.current&&o.current!==null&&d.current?.(l.current,o.current),a.current=!1,o.current=null,m()};return window.addEventListener(`mousemove`,e),window.addEventListener(`mouseup`,t),()=>{window.removeEventListener(`mousemove`,e),window.removeEventListener(`mouseup`,t),m()}},[_,h,m]),v}function Sn({left:e,top:t,width:r,height:i,colWidth:a,dragAnchor:o,className:s,title:c,style:l,onMove:u,onMoveEnd:d,children:f,...p}){let m=!u&&!d,h=xn({onStart:()=>({start:o}),onDrag:(e,{start:t})=>u?.(t+e),onEnd:(e,{start:t})=>{let n=Math.round((t+e)/a)*a;d?.(n)},autoScroll:!0}),g=!!(u||d);return(0,n.jsx)(`div`,{...p,className:s,style:{left:e,top:t,width:r,height:i,cursor:m?`default`:`move`,...l},title:c,onMouseDown:g?h:void 0,children:f})}var Cn={milestone:`_milestone_o4jql_1`,milestoneShape:`_milestoneShape_o4jql_5`};function wn({size:e,centerLeft:t,top:r,colWidth:i,title:a,a11y:o,onMove:s,onMoveEnd:c,slots:l,slotProps:u}){let d=Y(),f=l??d.bars?.milestoneBar?.slots,p=u??d.bars?.milestoneBar?.slotProps,m={size:e,title:a},h=f?.root??Sn,g=f?.shape??`div`,_=X({className:Cn.milestone,title:a,...o},p?.root,m),v=X({className:Cn.milestoneShape,"aria-hidden":!0},p?.shape,m);return(0,n.jsx)(h,{left:t-e/2,top:r,width:e,height:e,colWidth:i,dragAnchor:t,onMove:s,onMoveEnd:c,..._,children:(0,n.jsx)(g,{...v})})}var Tn={barProgress:`_barProgress_1obm3_1`,barProgressResizeHandle:`_barProgressResizeHandle_1obm3_10`};function En({width:e,onResize:t,onResizeEnd:r,parentWidth:i,slots:a,slotProps:o}){let s=Y(),c=a??s.bars?.barProgressResizeHandle?.slots,l=o??s.bars?.barProgressResizeHandle?.slotProps,u=(e,t)=>Math.min(Math.max(0,t+e),i),d=xn({onStart:()=>({startWidth:e}),onDrag:(e,{startWidth:n})=>t(u(e,n)),onEnd:(e,{startWidth:t})=>r?.(u(e,t))}),f={width:e,parentWidth:i};return(0,n.jsx)(c?.root??`div`,{...X({className:Tn.barProgressResizeHandle,"aria-hidden":!0,tabIndex:-1,onMouseDown:d},l?.root,f)})}function Dn({progress:e,width:t,height:r,onProgressChange:i,onProgressEnd:a,slots:o,slotProps:s}){let c=Y(),l=o??c.bars?.barProgress?.slots,u=s??c.bars?.barProgress?.slotProps,d=e/100*t,f=e=>e/t*100,p={progress:e,width:d,height:r};return(0,n.jsx)(l?.root??`div`,{...X({className:Tn.barProgress,style:{width:d,height:r}},u?.root,p),children:i&&(0,n.jsx)(En,{width:d,parentWidth:t,onResize:e=>i(f(e)),onResizeEnd:a?e=>a(f(e)):void 0})})}var On={project:`_project_927ph_1`,projectInner:`_projectInner_927ph_10`,projectContent:`_projectContent_927ph_16`};function kn({width:e,height:t,left:r,top:i,colWidth:a,title:o,a11y:s,progress:c,onProgressChange:l,onProgressEnd:u,onMove:d,onMoveEnd:f,slots:p,slotProps:m}){let h=Y(),g=p??h.bars?.projectBar?.slots,_=m??h.bars?.projectBar?.slotProps,v={width:e,height:t,progress:c,title:o},y=g?.root??Sn,b=g?.inner??`div`,x=g?.label??`div`,S=X({className:On.project,style:{lineHeight:`${t}px`},...s},_?.root,v),C=X({className:On.projectInner,"aria-hidden":!0},_?.inner,v),w=X({className:On.projectContent,children:o},_?.label,v);return(0,n.jsx)(y,{left:r,top:i,width:e,height:t,colWidth:a,dragAnchor:r,onMove:d,onMoveEnd:f,...S,children:(0,n.jsxs)(b,{...C,children:[(0,n.jsx)(Dn,{width:e,height:t,progress:c,onProgressChange:l,onProgressEnd:u}),(0,n.jsx)(x,{...w})]})})}var An={task:`_task_18g5p_1`,taskInner:`_taskInner_18g5p_9`,taskContent:`_taskContent_18g5p_15`,resizer:`_resizer_18g5p_28`,startResizer:`_startResizer_18g5p_59`,endResizer:`_endResizer_18g5p_62`};function jn({width:e,left:t,colWidth:r,onResize:i,onResizeEnd:a,slots:o,slotProps:s}){let c=Y(),l=o??c.bars?.taskResizer?.slots,u=s??c.bars?.taskResizer?.slotProps,d=xn({onStart:()=>({startWidth:e,startLeft:t}),onDrag:(e,{startWidth:t,startLeft:n})=>{let r=Math.min(e,t);i(t-r,n+r)},onEnd:(e,{startWidth:t,startLeft:n})=>{let i=n+Math.min(e,t);a(`start`,Math.round(i/r)*r)}}),f=xn({onStart:()=>({startWidth:e,startLeft:t}),onDrag:(e,{startWidth:t,startLeft:n})=>{i(Math.max(0,t+e),n)},onEnd:(e,{startWidth:t,startLeft:n})=>{let i=n+Math.max(0,t+e);a(`end`,Math.round(i/r)*r)}}),p={width:e,left:t},m=l?.startHandle??`button`,h=l?.endHandle??`button`,g=X({type:`button`,"aria-hidden":!0,tabIndex:-1,className:ln(An.resizer,An.startResizer),onMouseDown:d},u?.startHandle,p),_=X({type:`button`,"aria-hidden":!0,tabIndex:-1,className:ln(An.resizer,An.endResizer),onMouseDown:f},u?.endHandle,p);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(m,{...g}),(0,n.jsx)(h,{..._})]})}function Mn({width:e,height:t,left:r,top:i,colWidth:a,title:o,a11y:s,progress:c=30,onProgressChange:l,onProgressEnd:u,onResize:d,onResizeEnd:f,onMove:p,onMoveEnd:m,slots:h,slotProps:g}){let _=Y(),v=h??_.bars?.taskBar?.slots,y=g??_.bars?.taskBar?.slotProps,b={width:e,height:t,progress:c,title:o},x=v?.root??Sn,S=v?.inner??`div`,C=v?.label??`div`,w=X({className:`${An.task} am-gantt-bar-task`,style:{lineHeight:`${t}px`},...s},y?.root,b),T=X({className:An.taskInner,"aria-hidden":!0},y?.inner,b),E=X({className:An.taskContent,title:o,children:o},y?.label,b);return(0,n.jsx)(x,{left:r,top:i,width:e,height:t,colWidth:a,dragAnchor:r,onMove:p,onMoveEnd:m,...w,children:(0,n.jsxs)(S,{...T,children:[(0,n.jsx)(Dn,{width:e,height:t,progress:c,onProgressChange:l,onProgressEnd:u}),(0,n.jsx)(C,{...E}),d&&f&&(0,n.jsx)(jn,{width:e,left:r,colWidth:a,onResize:d,onResizeEnd:f})]})})}var Nn={handle:`_handle_fw6gu_1`,visible:`_visible_fw6gu_18`},Pn=10/2;function Fn({taskId:e,barLeft:t,barWidth:r,barCenterY:i,show:a,slots:o,slotProps:s}){let c=Y(),l=o??c.bars?.connectorHandles?.slots,u=s??c.bars?.connectorHandles?.slotProps,{startDrag:d,endDrag:f}=Zt(),p=$t(),{gridBodyRef:m}=qt(),h=(e,t)=>{let n=m.current?.getBoundingClientRect();if(!n)return{x:0,y:0};let r=e.currentTarget.getBoundingClientRect();return{x:r.left+r.width/2-n.left,y:r.top+r.height/2-n.top}},g=(t,n)=>{t.stopPropagation(),t.preventDefault();let{x:r,y:i}=h(t,n);d({fromTaskId:e,handle:n,startX:r,startY:i,currentX:r,currentY:i})},_=(t,n)=>{p&&(t.stopPropagation(),f(e,n))},v={taskId:e,barLeft:t,barWidth:r,barCenterY:i,show:a,isDragging:p},y=l?.startHandle??`div`,b=l?.endHandle??`div`,x=a||p,S=X({"aria-hidden":!0,tabIndex:-1,className:ln(Nn.handle,x&&Nn.visible),style:{left:t-10,top:i-Pn},onMouseDown:e=>g(e,`start`),onMouseUp:e=>_(e,`start`)},u?.startHandle,v),C=X({"aria-hidden":!0,tabIndex:-1,className:ln(Nn.handle,x&&Nn.visible),style:{left:t+r,top:i-Pn},onMouseDown:e=>g(e,`end`),onMouseUp:e=>_(e,`end`)},u?.endHandle,v);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y,{...S}),(0,n.jsx)(b,{...C})]})}var In={row:`_row_xikao_1`},Ln=(0,e.memo)(function({task:t,index:r,origin:i,colWidth:a,rowHeight:o,unit:s,override:c,onOverride:l,onUpdate:u,onCommit:d,onTaskClick:f,rowIndexOffset:p}){let m=Ft(),h=zt(),g=Gt()===t.id,{left:_,width:v,progress:y}=ct(t,c||{},i,a,s),b=r*o,x=_,S=o-12,C=6+S/2,[w,T]=(0,e.useState)(!1),E=e=>({startDate:lt(e,i,a,s),endDate:lt(e+v,i,a,s)}),D=(e,t)=>({startDate:lt(t,i,a,s),endDate:lt(t+e,i,a,s)}),O=e=>{l(t.id,e)},ee=(t,n)=>{(0,e.startTransition)(()=>{u(t,n),l(t,null)})},k=n=>{(0,e.startTransition)(()=>{d(t.id,n),l(t.id,null)})},te=e=>({kind:`move`,startDate:lt(e,i,a,s)}),A=h?{}:{onMove:e=>O(E(e)),onMoveEnd:e=>k(te(e))},j=h?{}:{onProgressChange:e=>O({progress:e}),onProgressEnd:e=>ee(t.id,{progress:e})},M=h?{}:{onResize:(e,t)=>O(D(e,t)),onResizeEnd:(e,t)=>k(e===`start`?{kind:`resizeStart`,startDate:lt(t,i,a,s)}:{kind:`resizeEnd`,endDate:lt(t,i,a,s)})},N={role:`gridcell`,"aria-colindex":Math.max(1,Math.floor(x/a)+1),"aria-colspan":Math.max(1,Math.round(v/a)),"aria-label":m.bar(t,{progress:y}),"aria-selected":g||void 0,title:t.name};return(0,n.jsxs)(`div`,{className:In.row,style:{top:b,height:o},onClick:f?()=>f(t):void 0,onMouseEnter:()=>T(!0),onMouseLeave:()=>T(!1),role:`row`,"aria-rowindex":p+r+1,children:[!h&&(0,n.jsx)(Fn,{taskId:t.id,barLeft:x,barWidth:v,barCenterY:C,show:w}),t.type===`milestone`&&(0,n.jsx)(wn,{size:S,centerLeft:x,top:6,colWidth:a,title:t.name,a11y:N,...A}),t.type===`summary`&&(0,n.jsx)(kn,{left:x,top:6,width:v,height:S,colWidth:a,title:t.name,a11y:N,progress:y,...j,...A}),t.type===`task`||!t.type?(0,n.jsx)(Mn,{left:x,top:6,width:v,height:S,colWidth:a,title:t.name,a11y:N,progress:y,...j,...A,...M}):null]})});Ln.displayName=`Bar`;var Rn=12,zn={};function Bn(e){let t=1/0,n=1/0,r=-1/0,i=-1/0;for(let a of e)a.x<t&&(t=a.x),a.x>r&&(r=a.x),a.y<n&&(n=a.y),a.y>i&&(i=a.y);return{minX:t,minY:n,maxX:r,maxY:i}}function Vn(e){if(e.length<2)return e[0]??{x:0,y:0};let t=Math.floor((e.length-1)/2),n=e[t],r=e[t+1];return{x:(n.x+r.x)/2,y:(n.y+r.y)/2}}function Hn(e,t,n,{origin:r,colWidth:i,rowHeight:a,unit:o}){let{left:s,width:c}=ct(e,t,r,i,o);if(e.type===`milestone`){let t=(a-12)/2;return{startX:s-t,endX:s+t,centerY:n,task:e}}return{startX:s,endX:s+c,centerY:n,task:e}}function Un(e,t){let n=new Map,{rowHeight:r}=t;return e.forEach((e,i)=>{n.set(e.id,Hn(e,zn,i*r+r/2,t))}),n}function Wn(e,t){let n=(e.x+t.x)/2;return[e,{x:n,y:e.y},{x:n,y:t.y},t]}function Gn(e,t,n,r){let i=e.x+n*Rn,a=t.x-r*Rn,o=(e.y+t.y)/2;return[e,{x:i,y:e.y},{x:i,y:o},{x:a,y:o},{x:a,y:t.y},t]}function Kn(e,t,n){return[e,{x:n,y:e.y},{x:n,y:t.y},t]}function qn(e,t,n){let r=t.centerY,i=n.centerY;switch(e){case`FS`:{let e={x:t.endX,y:r},a={x:n.startX,y:i};return n.startX>=t.endX+2*Rn?Wn(e,a):Gn(e,a,1,1)}case`SS`:return Kn({x:t.startX,y:r},{x:n.startX,y:i},Math.min(t.startX,n.startX)-Rn);case`FF`:return Kn({x:t.endX,y:r},{x:n.endX,y:i},Math.max(t.endX,n.endX)+Rn);case`SF`:{let e={x:t.startX,y:r},a={x:n.endX,y:i};return n.endX<=t.startX-2*Rn?Wn(e,a):Gn(e,a,-1,-1)}}}function Jn({tasks:e,dependencies:t,...n}){let r=Un(e,n),i=[];for(let e of t){let t=r.get(e.from),n=r.get(e.to);!t||!n||i.push(Yn(e,t,n))}let a=null;return{links:i,boxes:r,linksTouching(e){return a??=Xn(i),a.get(e)}}}function Yn(e,t,n){let r=qn(e.type,t,n);return{id:`${e.from}->${e.to}`,type:e.type,points:r,bounds:Bn(r),dep:e}}function Xn(e){let t=new Map,n=(e,n)=>{let r=t.get(e);r?r.push(n):t.set(e,[n])};return e.forEach((e,t)=>{n(String(e.dep.from),t),n(String(e.dep.to),t)}),t}function Zn(e,t,n){let r=Object.keys(t);if(r.length===0)return e.links;let i=new Map,a=r=>{let a=e.boxes.get(r),o=a&&t[String(r)];if(!a||!o)return a;let s=i.get(r);return s||(s=Hn(a.task,o,a.centerY,n),i.set(r,s)),s},o=null;for(let t of r)for(let n of e.linksTouching(t)??[]){let{dep:t}=e.links[n],r=a(t.from),i=a(t.to);!r||!i||(o??=e.links.slice(),o[n]=Yn(t,r,i))}return o??e.links}var Qn=(0,e.createContext)(null);function $n({tasks:t,dependencies:r,origin:i,colWidth:a,rowHeight:o,unit:s,children:c,overrides:l}){let u=(0,e.useMemo)(()=>Jn({tasks:t,dependencies:r,origin:i,colWidth:a,rowHeight:o,unit:s}),[t,r,i,a,o,s]),d=(0,e.useMemo)(()=>Zn(u,l,{origin:i,colWidth:a,rowHeight:o,unit:s}),[u,l,i,a,o,s]);return(0,n.jsx)(Qn.Provider,{value:d,children:c})}function er(){let t=(0,e.useContext)(Qn);if(t===null)throw Error(`useDependencyLinks must be used within a <DependencyLinksProvider>`);return t}var Z={layer:`_layer_1ih9f_1`,hitArea:`_hitArea_1ih9f_8`,segment:`_segment_1ih9f_15`,segmentSelected:`_segmentSelected_1ih9f_21`,arrowRight:`_arrowRight_1ih9f_25`,arrowLeft:`_arrowLeft_1ih9f_26`,arrowSelected:`_arrowSelected_1ih9f_43`,lagLabel:`_lagLabel_1ih9f_51`,deleteBtn:`_deleteBtn_1ih9f_65`},Q=2,tr=8,nr=6;function rr(e,t){return t?e.minX<=t.maxX&&e.maxX>=t.minX&&e.minY<=t.maxY&&e.maxY>=t.minY:!0}function ir(e,t){return e.y===t.y?{left:Math.min(e.x,t.x)-Q/2,top:e.y-Q/2,width:Math.abs(t.x-e.x)+Q,height:Q}:{left:e.x-Q/2,top:Math.min(e.y,t.y)-Q/2,width:Q,height:Math.abs(t.y-e.y)+Q}}function ar(e,t){return e.y===t.y?{left:Math.min(e.x,t.x)-Q/2,top:e.y-nr,width:Math.abs(t.x-e.x)+Q,height:Q+nr*2}:{left:e.x-nr,top:Math.min(e.y,t.y)-Q/2,width:Q+nr*2,height:Math.abs(t.y-e.y)+Q}}function or(e){let t=[];for(let n=0;n+1<e.length;n++)t.push([e[n],e[n+1]]);return t}function sr(e){let t=e[e.length-1],n=e[e.length-2],r=t.x>=n.x;return{className:r?Z.arrowRight:Z.arrowLeft,style:{left:r?t.x-tr:t.x,top:t.y-tr/2}}}function cr({width:t,height:r,onDependencyDelete:i,visibleRect:a,slots:o,slotProps:s}){let c=Y(),l=o??c.dependencies?.links?.slots,u=s??c.dependencies?.links?.slotProps,d=Ft(),f=zt(),p=er(),[m,h]=(0,e.useState)(null),[g,_]=(0,e.useState)(null),v=m?p.find(e=>e.id===m):null;if((0,e.useEffect)(()=>{if(!m)return;let e=e=>{(e.key===`Delete`||e.key===`Backspace`)&&(v&&i?.(v.dep),h(null),_(null))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[m,v,i]),p.length===0)return null;let y=(e,t)=>{if(t.stopPropagation(),m===e)h(null),_(null);else{h(e);let n=t.currentTarget.closest(`.${Z.layer}`)?.getBoundingClientRect();_(n?{x:t.clientX-n.left,y:t.clientY-n.top}:null)}},b=e=>{e.stopPropagation(),v&&i?.(v.dep),h(null),_(null)},x=l?.layer??`div`,S=l?.segment??`div`,C=l?.arrow??`div`,w=l?.lagLabel??`div`,T=l?.deleteButton??`button`;return(0,n.jsxs)(x,{...X({className:Z.layer,style:{width:t,height:r},role:`presentation`,"aria-hidden":!0,onClick:()=>{h(null),_(null)}},u?.layer,{width:t,height:r,linkCount:p.length}),children:[p.map(t=>{let r=t.id===m;if(!r&&!rr(t.bounds,a))return null;let i=sr(t.points),o=or(t.points),s=t.dep.lag?Vn(t.points):null,c={link:t,isSelected:r},l=X({className:`${i.className} ${r?Z.arrowSelected:``}`,style:i.style},u?.arrow,c);return(0,n.jsxs)(e.Fragment,{children:[!f&&o.map(([e,r])=>(0,n.jsx)(`div`,{className:Z.hitArea,style:ar(e,r),onClick:e=>y(t.id,e)},`hit-${e.x},${e.y}-${r.x},${r.y}`)),o.map(([e,i],a)=>(0,n.jsx)(S,{...X({className:`${Z.segment} ${r?Z.segmentSelected:``}`,style:ir(e,i)},u?.segment,{link:t,isSelected:r,from:e,to:i,index:a})},`seg-${e.x},${e.y}-${i.x},${i.y}`)),(0,n.jsx)(C,{...l}),s&&t.dep.lag!==void 0&&t.dep.lag!==0&&(0,n.jsx)(w,{...X({className:Z.lagLabel,style:{left:s.x,top:s.y},children:t.dep.lag>0?`+${t.dep.lag}d`:`${t.dep.lag}d`},u?.lagLabel,{link:t,isSelected:r,lag:t.dep.lag})})]},t.id)}),!f&&v&&g&&(0,n.jsx)(T,{...X({className:Z.deleteBtn,type:`button`,tabIndex:-1,style:{left:g.x,top:g.y},onClick:b,"aria-label":d.deleteDependency,children:`×`},u?.deleteButton,{dependency:v.dep})})]})}var lr={preview:`_preview_1jjzd_1`};function ur({slots:e,slotProps:t}){let r=Y(),i=e??r.dependencies?.preview?.slots,a=t??r.dependencies?.preview?.slotProps,o=tn();if(!o)return null;let s=o.currentX-o.startX,c=o.currentY-o.startY,l=Math.hypot(s,c),u=180/Math.PI*Math.atan2(c,s);return(0,n.jsx)(i?.root??`div`,{...X({className:lr.preview,style:{left:o.startX,top:o.startY,width:l,transform:`rotate(${u}deg)`},"aria-hidden":!0},a?.root,{drag:o,length:l,angle:u})})}var dr={cols:`_cols_kjab1_1`,col:`_col_kjab1_1`,colWeekend:`_colWeekend_kjab1_14`};function fr({dates:e,colWidth:t,bodyHeight:r,colRange:i,unit:a=`day`,step:o=1,slots:s,slotProps:c}){let l=Y(),u=s??l.timeline?.gridColumn?.slots,f=c??l.timeline?.gridColumn?.slotProps,p=u?.column??`div`,{calendar:m}=Lt(),h=a===`day`||a===`hour`||a===`minute`;return(0,n.jsx)(`div`,{className:dr.cols,role:`presentation`,"aria-hidden":!0,children:e.slice(i.start,i.end).map((e,s)=>{let c=i.start+s,l=h?W(m,e,g(e,a,o)):{isNonWorking:!1,reason:void 0},u=m?l.isNonWorking:a===`day`&&d(e),_={date:e,index:c,isNonWorking:u,nonWorkingReason:u?l.reason??`weekend`:void 0,isWeekend:u,colWidth:t,bodyHeight:r};return(0,n.jsx)(p,{...X({className:ln(dr.col,u&&dr.colWeekend),style:{left:c*t,width:t,height:r}},f?.column,_)},e.getTime())})})}fr.displayName=`GridColumns`;var pr={gridWrapper:`_gridWrapper_1tr84_1`,grid:`_grid_1tr84_1`,body:`_body_1tr84_17`};function mr(e,t,n,r,i=0){if(r<=0)return{start:0,end:0};if(t<=0||n<=0)return{start:0,end:Math.min(r,100)};let a=Math.floor(e/n),o=Math.ceil((e+t)/n);return{start:Math.max(0,a-i),end:Math.min(r,o+i)}}function hr({slots:t,slotProps:r}={}){let i=Y(),a=t??i.timeline?.grid?.slots,o=r??i.timeline?.grid?.slotProps,{visibleTasks:s}=Vt(),{updateTask:c,commitTask:l,onTaskClick:u,setSelectedId:d}=Ut(),{colWidth:f,rowHeight:p,scales:m,padDays:h,height:g}=Nt(),_=Ft(),{gridRef:v,onGridScroll:y,gridBodyRef:b}=qt(),x=Yt(),{dependencies:S,onDependencyDelete:C}=Zt(),{zoomAt:w,zoomIn:T,zoomOut:E,wheelEnabled:D,keyboardEnabled:O}=rn();(0,e.useEffect)(()=>{let e=v.current;if(!e||!D&&!O)return;let t=t=>{if(!(t.ctrlKey||t.metaKey))return;t.preventDefault();let n=e.getBoundingClientRect();w(e.scrollLeft+(t.clientX-n.left),t.deltaY<0?1:-1)},n=e=>{e.key===`+`||e.key===`=`?(e.preventDefault(),T()):(e.key===`-`||e.key===`_`)&&(e.preventDefault(),E())};return D&&e.addEventListener(`wheel`,t,{passive:!1}),O&&(e.tabIndex=0,e.addEventListener(`keydown`,n)),()=>{e.removeEventListener(`wheel`,t),e.removeEventListener(`keydown`,n)}},[v,D,O,w,T,E,s.length]);let[ee,k]=(0,e.useState)({}),te=(0,e.useCallback)(e=>{d(e.id),u?.(e)},[d,u]),A=(0,e.useCallback)((e,t)=>{k(n=>{if(t===null){let{[e]:t,...r}=n;return r}return{...n,[e]:{...n[e],...t}}})},[]),j=(0,e.useMemo)(()=>ht(s,h,m),[s,h,m]),M=j[0]?.getTime(),N=(0,e.useMemo)(()=>M==null?void 0:new Date(M),[M]);if(!N)return null;let P=dt(m),F=j.length*f,ne=s.length*p,I=(m??ut).length,L=mr(x.scrollTop,x.clientHeight,p,s.length,6),R=mr(x.scrollLeft,x.clientWidth,f,j.length,4),z={minX:R.start*f,maxX:R.end*f,minY:L.start*p,maxY:L.end*p},B=a?.root??`div`,V=a?.body??`div`,re={totalWidth:F,bodyHeight:ne,height:g},ie=X({className:pr.gridWrapper,style:g===void 0?{}:{height:g},onScroll:y,role:`grid`,"aria-label":_.timeline,"aria-rowcount":I+s.length,"aria-colcount":j.length},o?.root,re),ae=X({className:pr.body,style:{height:ne,width:F},role:`rowgroup`},o?.body,re);return(0,n.jsx)(B,{ref:v,...ie,children:(0,n.jsxs)(`div`,{className:pr.grid,style:{width:F},role:`presentation`,children:[(0,n.jsx)(mn,{colWidth:f,rowHeight:p,dates:j,scales:m,colRange:R}),(0,n.jsx)($n,{tasks:s,dependencies:S,origin:N,colWidth:f,rowHeight:p,unit:P,overrides:ee,children:(0,n.jsxs)(V,{ref:b,...ae,children:[(0,n.jsx)(fr,{dates:j,colWidth:f,bodyHeight:ne,colRange:R,unit:P,step:ft(m)}),(0,n.jsx)(cr,{width:F,height:ne,onDependencyDelete:C,visibleRect:z}),(0,n.jsx)(ur,{}),s.slice(L.start,L.end).map((e,t)=>(0,n.jsx)(Ln,{task:e,index:L.start+t,origin:N,colWidth:f,rowHeight:p,unit:P,onUpdate:c,onCommit:l,override:ee[e.id],onOverride:A,onTaskClick:te,rowIndexOffset:I},e.id))]})})]})})}hr.displayName=`GanttGrid`;var gr={handle:`_handle_1o220_1`};function _r({onMouseDown:e,isResizing:t=!1,slots:r,slotProps:i}){let a=Y(),o=r??a.timeline?.gridResizeHandle?.slots,s=i??a.timeline?.gridResizeHandle?.slotProps,c=Ft(),l={isResizing:t};return(0,n.jsx)(o?.root??`div`,{...X({className:gr.handle,onMouseDown:e,role:`separator`,"aria-orientation":`vertical`,"aria-label":c.resizeTaskList},s?.root,l)})}var $={taskList:`_taskList_i76t8_1`,header:`_header_i76t8_10`,headerCell:`_headerCell_i76t8_22`,body:`_body_i76t8_41`,rows:`_rows_i76t8_54`,row:`_row_i76t8_54`,selected:`_selected_i76t8_70`,cell:`_cell_i76t8_74`,treeCell:`_treeCell_i76t8_91`,nameContent:`_nameContent_i76t8_95`,expandBtn:`_expandBtn_i76t8_104`,expandPlaceholder:`_expandPlaceholder_i76t8_122`,divider:`_divider_i76t8_128`};function vr({columns:e,rowHeight:t,scales:r=ut,onResizeStart:i,slots:a,slotProps:o}){let s=r.length*t+2,c=a?.header??`div`,l=a?.headerCell??`div`,u=a?.columnResizeHandle??`div`;return(0,n.jsx)(c,{...X({className:$.header,style:{minHeight:s,height:s},role:`row`,"aria-rowindex":1},o?.header,{columns:e,headerHeight:s}),children:e.map((e,t)=>{let r={column:e,index:t},a=X({className:$.headerCell,style:e.width?{width:e.width,flexShrink:0}:{flex:`1 1 auto`,minWidth:100},role:`columnheader`,"aria-colindex":t+1},o?.headerCell,r),s=X({className:$.divider,"aria-hidden":!0,onMouseDown:t=>{let n=t.currentTarget.parentElement;i(e.key,n.offsetWidth,t)}},o?.columnResizeHandle,r);return(0,n.jsxs)(l,{...a,children:[e.header,(0,n.jsx)(u,{...s})]},e.key)})})}var yr=16;function br({taskId:e,depth:t,isParent:r,isExpanded:i,onToggleExpand:a,children:o,slots:s,slotProps:c}){let l=Ft(),u={taskId:e,depth:t,isParent:r,isExpanded:i},d=s?.root??`span`,f=s?.expandButton??`button`,p=s?.placeholder??`span`,m=X({className:$.nameContent,style:{paddingLeft:t*yr}},c?.root,u),h=X({className:$.expandBtn,type:`button`,onClick:t=>{t.stopPropagation(),a(e)},"aria-label":i?l.collapse:l.expand,children:i?`▾`:`▸`},c?.expandButton,u),g=X({className:$.expandPlaceholder,"aria-hidden":!0},c?.placeholder,u);return(0,n.jsxs)(d,{...m,children:[r?(0,n.jsx)(f,{...h}):(0,n.jsx)(p,{...g}),o]})}var xr=100,Sr=(0,e.memo)(function({task:e,rowHeight:t,rowIndex:r,depth:i,posinset:a,setsize:o,isParent:s,isExpanded:c,isSelected:l,onToggleExpand:u,onSelect:d,columns:f,treeCell:p}){let{columnApi:m}=Ut();return(0,n.jsx)(`div`,{className:`${$.row} ${l?$.selected:``}`,style:{height:t},onClick:()=>d(e.id),role:`row`,"aria-rowindex":r+2,"aria-level":i+1,"aria-posinset":a,"aria-setsize":o,"aria-expanded":s?c:void 0,"aria-selected":l||void 0,children:f.map((t,r)=>(0,n.jsx)(`div`,{className:`${$.cell} ${t.isTreeColumn?$.treeCell:``}`,style:{width:t.width||xr,flexShrink:0},role:t.isTreeColumn?`rowheader`:`gridcell`,"aria-colindex":r+1,children:t.isTreeColumn?(0,n.jsx)(br,{taskId:e.id,depth:i,isParent:s,isExpanded:c,onToggleExpand:u,slots:p?.slots,slotProps:p?.slotProps,children:t.render(e,m)}):t.render(e,m)},t.key))})});Sr.displayName=`TaskListRow`;function Cr(){let[t,n]=(0,e.useState)({}),r=(0,e.useRef)(null);return{widths:t,onResizeStart:(0,e.useCallback)((e,t,i)=>{i.preventDefault(),r.current={key:e,mouseX:i.clientX,width:t};let a=e=>{if(!r.current)return;let{key:t,mouseX:i,width:a}=r.current,o=Math.max(60,a+(e.clientX-i));n(e=>({...e,[t]:o}))},o=()=>{r.current=null,window.removeEventListener(`mousemove`,a),window.removeEventListener(`mouseup`,o)};window.addEventListener(`mousemove`,a),window.addEventListener(`mouseup`,o)},[])}}var wr={flex:`1 1 auto`,minHeight:0};function Tr({columns:t=[],taskList:r}){let{visibleTasks:i,expandedIds:a,parentIds:o}=Vt(),{toggleExpand:s,setSelectedId:c,onTaskClick:l,revealTask:u}=Ut(),d=Gt(),{rowHeight:f,scales:p,height:m}=Nt(),h=Ft(),{taskListRef:g,onTaskListScroll:_}=qt(),{widths:v,onResizeStart:y}=Cr(),b=(0,e.useMemo)(()=>t.map(e=>v[e.key]==null?e:{...e,width:v[e.key]}),[t,v]),x=J(e=>{c(e);let t=i.find(t=>t.id===e);t&&(l?.(t),u(e,{horizontal:!0,vertical:!1}))}),S=(0,e.useCallback)(e=>x.current(e),[x]),C=(0,e.useMemo)(()=>{let e=new Map;for(let t of i){let n=t.parentId==null?-1:e.get(t.parentId)??0;e.set(t.id,n+1)}return e},[i]),w=(0,e.useMemo)(()=>{let e=new Map,t=new Map;for(let n of i){let r=n.parentId??null,i=(e.get(r)??0)+1;e.set(r,i),t.set(n.id,{posinset:i,setsize:0})}for(let n of i){let r=t.get(n.id);r.setsize=e.get(n.parentId??null)??1}return t},[i]),{viewport:T,scheduleMeasure:E}=it(g,{trackHorizontal:!1}),D=(0,e.useCallback)(()=>{_(),E()},[_,E]),O=mr(T.scrollTop,T.clientHeight,f,i.length,6);return(0,n.jsxs)(`div`,{className:$.taskList,style:{height:m},role:`treegrid`,"aria-label":h.taskList,"aria-rowcount":i.length+1,"aria-colcount":b.length,children:[(0,n.jsx)(vr,{columns:b,rowHeight:f,scales:p,onResizeStart:y,slots:r?.header?.slots,slotProps:r?.header?.slotProps}),(0,n.jsx)(`div`,{ref:g,className:$.body,style:wr,onScroll:D,role:`presentation`,children:(0,n.jsxs)(`div`,{className:$.rows,role:`rowgroup`,children:[(0,n.jsx)(`div`,{style:{height:O.start*f},role:`presentation`,"aria-hidden":`true`}),Array.from({length:O.end-O.start},(e,t)=>{let c=O.start+t,l=i[c],u=w.get(l.id);return(0,n.jsx)(Sr,{task:l,rowHeight:f,rowIndex:c,depth:C.get(l.id)??0,posinset:u?.posinset??1,setsize:u?.setsize??1,isParent:o.has(l.id),isExpanded:a.has(l.id),isSelected:d===l.id,onToggleExpand:s,onSelect:S,columns:b,treeCell:r?.treeCell},l.id)}),(0,n.jsx)(`div`,{style:{height:(i.length-O.end)*f},role:`presentation`,"aria-hidden":`true`})]})})]})}function Er(t,n){let[r,i]=(0,e.useState)(void 0),a=(0,e.useRef)(null);return{gridWidth:r,onHandleMouseDown:(0,e.useCallback)(e=>{e.preventDefault();let r=n.current,o=t.current;if(!r||!o)return;a.current={mouseX:e.clientX,width:r.offsetWidth,containerW:o.offsetWidth};let s=e=>{if(!a.current)return;let{mouseX:t,width:n,containerW:r}=a.current;i(Math.min(r,Math.max(10,n+(t-e.clientX))))},c=()=>{a.current=null,window.removeEventListener(`mousemove`,s),window.removeEventListener(`mouseup`,c)};window.addEventListener(`mousemove`,s),window.addEventListener(`mouseup`,c)},[t,n])}}function Dr(e){let t=m(e.startDate,1);return{id:`task-${Date.now()}`,name:`New task`,startDate:t,endDate:m(t,1),duration:1,progress:0,type:`task`,parentId:e.parentId??null}}function Or({task:e,api:t}){return(0,n.jsxs)(`div`,{style:{display:`flex`,gap:`8px`},children:[(0,n.jsx)(`button`,{type:`button`,title:`Edit`,"aria-label":t.labels.editTask(e),onClick:n=>{n.stopPropagation(),t.editTask(e)},children:(0,n.jsx)(`span`,{"aria-hidden":`true`,children:`✎`})}),(0,n.jsx)(`button`,{type:`button`,title:`Add after`,"aria-label":t.labels.addTaskAfter(e),onClick:n=>{n.stopPropagation();let r=Dr(e);t.createTask(r,e.id),t.editTask(r)},children:(0,n.jsx)(`span`,{"aria-hidden":`true`,children:`➕`})}),(0,n.jsx)(`button`,{type:`button`,title:`Delete`,"aria-label":t.labels.deleteTask(e),style:{fontSize:9},onClick:n=>{n.stopPropagation(),t.deleteTask(e.id)},children:(0,n.jsx)(`span`,{"aria-hidden":`true`,children:`❌`})})]})}var kr=`__action`,Ar=[{key:kr,header:` `,width:120,render:(e,t)=>(0,n.jsx)(Or,{task:e,api:t})},{key:`__name`,header:`Task Name`,render:e=>e.name,width:200,isTreeColumn:!0},{key:`__start`,header:`Start`,width:90,render:e=>e.startDate.toLocaleDateString()},{key:`__end`,header:`End`,width:90,render:(e,t)=>t.format.endDate(e)?.toLocaleDateString()??`—`},{key:`__progress`,header:`Progress, %`,width:90,render:e=>`${e.progress??0}%`}],jr=Ar.filter(e=>e.key!==kr);function Mr({tasks:t,dependencies:r,rowHeight:i,colWidth:a,height:o,scales:s,padDays:c,zoomLevels:l,defaultZoomIndex:u,onZoomChange:d,zoomWheel:f,zoomKeyboard:p,onTaskClick:m,columns:h,defaultTaskListWidth:g=280,onDependencyCreate:_,onDependencyDelete:v,onTaskCreate:y,onTaskDelete:b,onTaskEdit:x,onTasksChange:S,calendar:C,snapToWorking:w,durationUnit:T,readOnly:E=!1,apiRef:D,hideTaskList:O,taskList:ee,bars:k,dependencySlots:te,timeline:A,labels:j}){let M=(0,e.useRef)(null),N=(0,e.useRef)(null),{gridWidth:P,onHandleMouseDown:F}=Er(M,N),ne=h??(E?jr:Ar),I=!O;return(0,n.jsx)(an,{tasks:t,dependencies:r,rowHeight:i,colWidth:a,height:o,scales:s,padDays:c,zoomLevels:l,defaultZoomIndex:u,onZoomChange:d,zoomWheel:f,zoomKeyboard:p,onTaskClick:m,onDependencyCreate:_,onDependencyDelete:v,onTaskCreate:y,onTaskDelete:b,onTaskEdit:x,onTasksChange:S,apiRef:D,labels:j,calendar:C,snapToWorking:w,durationUnit:T,readOnly:E,children:(0,n.jsx)(sn,{value:(0,e.useMemo)(()=>({bars:k,dependencies:te,timeline:A}),[k,te,A]),children:I?(0,n.jsxs)(`div`,{ref:M,role:`group`,"aria-label":j?.gantt??ve.gantt,style:{position:`relative`},children:[(0,n.jsx)(Tr,{columns:ne,taskList:ee}),(0,n.jsxs)(`div`,{ref:N,style:{position:`absolute`,top:0,right:0,zIndex:1,display:`flex`,flexDirection:`row`,background:`var(--am-gantt-grid-bg, #ffffff)`,...P===void 0?{left:g}:{width:P}},children:[(0,n.jsx)(_r,{onMouseDown:F}),(0,n.jsx)(`div`,{style:{flex:`1 1 auto`,minWidth:0},children:(0,n.jsx)(hr,{})})]})]}):(0,n.jsx)(hr,{})})})}exports.ACTION_COLUMN_KEY=kr,exports.Calendar=mn,exports.DEFAULT_COLUMNS=Ar,exports.DEFAULT_ZOOM_INDEX=Et,exports.DEFAULT_ZOOM_LEVELS=Tt,exports.Gantt=Mr,exports.GanttGrid=hr,exports.GanttProvider=an,exports.GanttSlotsProvider=sn,exports.MilestoneBar=wn,exports.ProjectBar=kn,exports.READ_ONLY_COLUMNS=jr,exports.TaskBar=Mn,exports.TaskList=Tr,exports.displayEndDate=me,exports.endInstantFromDisplayDate=he,exports.mergeSlotProps=X,exports.useGanttReadOnly=zt,exports.useGanttSlots=Y;
2
+ //# sourceMappingURL=index.cjs.map