UNPKG

react-modern-gantt

Version:

A modern, customizable Gantt chart component for React applications with export functionality

1 lines 63 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t,r=require("react"),n=require("date-fns"),a=function(){return a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var a in t=arguments[r])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e},a.apply(this,arguments)};function o(e,t,r,n){return new(r||(r=Promise))(function(a,o){function i(e){try{l(n.next(e))}catch(e){o(e)}}function s(e){try{l(n.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(i,s)}l((n=n.apply(e,t||[])).next())})}function i(e,t){var r,n,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=s(0),i.throw=s(1),i.return=s(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(s){return function(l){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,s[0]&&(o=0)),o;)try{if(r=1,n&&(a=2&s[0]?n.return:s[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,s[1])).done)return a;switch(n=0,a&&(s=[2&s[0],a.value]),s[0]){case 0:case 1:a=s;break;case 4:return o.label++,{value:s[1],done:!1};case 5:o.label++,n=s[1],s=[0];continue;case 7:s=o.ops.pop(),o.trys.pop();continue;default:if(!(a=o.trys,(a=a.length>0&&a[a.length-1])||6!==s[0]&&2!==s[0])){o=0;continue}if(3===s[0]&&(!a||s[1]>a[0]&&s[1]<a[3])){o.label=s[1];break}if(6===s[0]&&o.label<a[1]){o.label=a[1],a=s;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(s);break}a[2]&&o.ops.pop(),o.trys.pop();continue}s=t.call(e,o)}catch(e){s=[6,e],n=0}finally{r=a=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,l])}}}function s(e,t,r){if(r||2===arguments.length)for(var n,a=0,o=t.length;a<o;a++)!n&&a in t||(n||(n=Array.prototype.slice.call(t,0,a)),n[a]=t[a]);return e.concat(n||Array.prototype.slice.call(t))}function l(e,t,r){if(void 0===t&&(t=exports.DateDisplayFormat.FULL_DATE),void 0===r&&(r="default"),!(e instanceof Date)||isNaN(e.getTime()))return"Invalid date";switch(t){case exports.DateDisplayFormat.MONTH_YEAR:return e.toLocaleString(r,{month:"short",year:"2-digit"});case exports.DateDisplayFormat.SHORT_DATE:return e.toLocaleString(r,{month:"short",day:"numeric"});case exports.DateDisplayFormat.FULL_DATE:default:return e.toLocaleString(r,{month:"short",day:"numeric",year:"numeric"})}}function c(e,t){var r=[];if(!(e instanceof Date)||!(t instanceof Date)||isNaN(e.getTime())||isNaN(t.getTime()))return[];for(var n=e.getFullYear(),a=e.getMonth(),o=t.getFullYear(),i=t.getMonth(),s=n;s<=o;s++)for(var l=s===o?i:11,c=s===n?a:0;c<=l;c++)r.push(new Date(s,c,1));return r}function u(e,t,r){void 0===r&&(r=exports.ViewMode.MONTH);try{if(!(e instanceof Date)||!(t instanceof Date)||isNaN(e.getTime())||isNaN(t.getTime()))return{value:0,unit:"days"};var a=e<t?e:t,o=e<t?t:e;switch(r){case exports.ViewMode.MINUTE:var i=Math.round((o.getTime()-a.getTime())/6e4);return{value:i,unit:1===i?"minute":"minutes"};case exports.ViewMode.HOUR:var s=Math.round((o.getTime()-a.getTime())/36e5);return{value:s,unit:1===s?"hour":"hours"};case exports.ViewMode.DAY:var l=n.differenceInDays(o,a)+1;return{value:l,unit:1===l?"day":"days"};case exports.ViewMode.WEEK:var c=n.differenceInWeeks(o,a)+1;return{value:c,unit:1===c?"week":"weeks"};case exports.ViewMode.MONTH:var u=n.differenceInMonths(o,a)+1;return{value:u,unit:1===u?"month":"months"};case exports.ViewMode.QUARTER:var d=n.differenceInQuarters(o,a)+1;return{value:d,unit:1===d?"quarter":"quarters"};case exports.ViewMode.YEAR:var f=n.differenceInYears(o,a)+1;return{value:f,unit:1===f?"year":"years"};default:var g=n.differenceInDays(o,a)+1;return{value:g,unit:1===g?"day":"days"}}}catch(e){return console.error("Error calculating duration:",e),{value:0,unit:"days"}}}function d(e){if(!Array.isArray(e)||0===e.length)return new Date;var t=new Date,r=!1;if(e.forEach(function(e){e&&Array.isArray(e.tasks)&&e.tasks.forEach(function(e){e&&e.startDate instanceof Date&&(r?e.startDate<t&&(t=new Date(e.startDate)):(t=new Date(e.startDate),r=!0))})}),!r){var n=new Date;return new Date(n.getFullYear(),n.getMonth()-1,1)}return new Date(t.getFullYear(),t.getMonth(),1)}function f(e){if(!Array.isArray(e)||0===e.length)return new Date;var t=new Date,r=!1;if(e.forEach(function(e){e&&Array.isArray(e.tasks)&&e.tasks.forEach(function(e){e&&e.endDate instanceof Date&&(r?e.endDate>t&&(t=new Date(e.endDate)):(t=new Date(e.endDate),r=!0))})}),!r){var n=new Date;return new Date(n.getFullYear(),n.getMonth()+2,0)}return new Date(t.getFullYear(),t.getMonth()+1,0)}"function"==typeof SuppressedError&&SuppressedError,exports.ViewMode=void 0,(e=exports.ViewMode||(exports.ViewMode={})).MINUTE="minute",e.HOUR="hour",e.DAY="day",e.WEEK="week",e.MONTH="month",e.QUARTER="quarter",e.YEAR="year",exports.DateDisplayFormat=void 0,(t=exports.DateDisplayFormat||(exports.DateDisplayFormat={})).MONTH_YEAR="month-year",t.FULL_DATE="full-date",t.SHORT_DATE="short-date";var g=r.memo(function(e){var t=e.months,a=e.currentMonthIndex,o=(e.locale,e.className),i=void 0===o?"":o,s=e.viewMode,l=void 0===s?exports.ViewMode.MONTH:s,c=e.unitWidth,u=void 0===c?150:c,d=e.showTimelineHeader,f=void 0===d||d,g=[exports.ViewMode.MINUTE,exports.ViewMode.HOUR,exports.ViewMode.DAY,exports.ViewMode.WEEK].includes(l),m=function(){if(![exports.ViewMode.MINUTE,exports.ViewMode.HOUR,exports.ViewMode.DAY,exports.ViewMode.WEEK].includes(l)||0===t.length)return[];var e=[];if(l===exports.ViewMode.MINUTE){var r=new Date(t[0]);r.setMinutes(0,0,0);var n=0;return t.forEach(function(t){t.getHours()===r.getHours()&&t.getDate()===r.getDate()&&t.getMonth()===r.getMonth()&&t.getFullYear()===r.getFullYear()?n+=1:(e.push({date:r,span:n}),(r=new Date(t)).setMinutes(0,0,0),n=1)}),n>0&&e.push({date:r,span:n}),e}if(l===exports.ViewMode.HOUR){var a=new Date(t[0]);a.setHours(0,0,0,0);var o=0;return t.forEach(function(t){t.getDate()===a.getDate()&&t.getMonth()===a.getMonth()&&t.getFullYear()===a.getFullYear()?o+=1:(e.push({date:a,span:o}),(a=new Date(t)).setHours(0,0,0,0),o=1)}),o>0&&e.push({date:a,span:o}),e}if(t.length<2)return[];var i=new Date(t[0]),s=0;return t.forEach(function(t){t.getMonth()===i.getMonth()&&t.getFullYear()===i.getFullYear()?s+=1:(e.push({date:i,span:s}),i=new Date(t),s=1)}),s>0&&e.push({date:i,span:s}),e.length>1?e:[]}();return r.createElement("div",{className:"rmg-timeline ".concat(i),style:{"--gantt-unit-width":"".concat(u,"px")},"data-rmg-component":"timeline","data-view-mode":l},f&&g&&m.length>0&&r.createElement("div",{className:"rmg-timeline-header-higher","data-rmg-component":"timeline-header-higher"},m.map(function(e,t){return r.createElement("div",{key:"higher-level-".concat(t),className:"rmg-timeline-unit",style:{width:"".concat(e.span*u,"px")},"data-timeunit-higher":e.date.toISOString(),"data-rmg-component":"timeline-unit-higher"},function(e){if(!(e instanceof Date))return"";switch(l){case exports.ViewMode.MINUTE:return n.format(e,"HH:00",{locale:void 0});case exports.ViewMode.HOUR:return n.format(e,"MMM d",{locale:void 0});case exports.ViewMode.DAY:case exports.ViewMode.WEEK:return n.format(e,"MMM yyyy",{locale:void 0});default:return""}}(e.date))})),r.createElement("div",{className:"rmg-timeline-header","data-rmg-component":"timeline-header"},t.map(function(e,t){return r.createElement("div",{key:"timeunit-".concat(t),className:"rmg-timeline-unit ".concat(t===a?"rmg-timeline-unit-current":""),style:{width:"".concat(u,"px")},"data-timeunit":e.toISOString(),"data-rmg-component":"timeline-unit"},function(e){if(!(e instanceof Date&&n.isValid(e)))return"";switch(l){case exports.ViewMode.MINUTE:return n.format(e,"HH:mm",{locale:void 0});case exports.ViewMode.HOUR:return n.format(e,"HH:00",{locale:void 0});case exports.ViewMode.DAY:return n.format(e,"d",{locale:void 0});case exports.ViewMode.WEEK:var t=n.getWeek(e);return"W".concat(t);case exports.ViewMode.MONTH:return n.format(e,"MMM yyyy",{locale:void 0});case exports.ViewMode.QUARTER:var r=Math.floor(e.getMonth()/3)+1;return"Q".concat(r," ").concat(e.getFullYear());case exports.ViewMode.YEAR:return e.getFullYear().toString();default:return n.format(e,"MMM yyyy",{locale:void 0})}}(e))})))});g.displayName="Timeline";var m=function(e){var t=e.currentMonthIndex,n=e.height,a=e.label,o=void 0===a?"Today":a,i=e.dayOfMonth,s=e.className,l=void 0===s?"":s,c=e.markerClass,u=void 0===c?"":c,d=e.viewMode,f=void 0===d?exports.ViewMode.MONTH:d,g=e.unitWidth,m=void 0===g?150:g;if(t<0)return null;var p=function(){var e=new Date,r=i||e.getDate();switch(f){case exports.ViewMode.MINUTE:var n=e.getMinutes(),a=e.getSeconds();return t*m+m*((n+a/60)/60);case exports.ViewMode.HOUR:var o=e.getMinutes();return t*m+m*(o/60);case exports.ViewMode.DAY:return t*m+m/2;case exports.ViewMode.WEEK:var s=e.getDay();return t*m+m*((s+7)%7/6);case exports.ViewMode.MONTH:var l=new Date(e.getFullYear(),e.getMonth()+1,0).getDate();return t*m+m*((r-1)/l);case exports.ViewMode.QUARTER:var c=e.getMonth()%3;return t*m+m*(c/3);case exports.ViewMode.YEAR:var u=e.getMonth();return t*m+m*(u/12);default:return t*m+m/2}}(),h=Math.max(100,n);return r.createElement("div",{className:"rmg-today-marker ".concat(l," ").concat(u),style:{left:"".concat(p,"px"),height:"".concat(h,"px")},"data-testid":"today-marker","data-rmg-component":"today-marker"},r.createElement("div",{className:"rmg-today-marker-label","data-rmg-component":"today-marker-label"},o))},p=function(){function e(){}return e.detectOverlaps=function(e,t){var r=this;if(void 0===t&&(t=exports.ViewMode.MONTH),!Array.isArray(e)||0===e.length)return[];var n=s([],e,!0).sort(function(e,t){return e.startDate&&t.startDate?e.startDate.getTime()-t.startDate.getTime():0}),a=[];return n.forEach(function(e){for(var n=!1,o=0;o<a.length;o++){if(!a[o].some(function(n){return r.tasksVisuallyOverlap(e,n,t)})){a[o].push(e),n=!0;break}}n||a.push([e])}),a},e.tasksVisuallyOverlap=function(e,t,r){if(void 0===r&&(r=exports.ViewMode.MONTH),!(e.startDate&&e.endDate&&t.startDate&&t.endDate))return!1;var n=e.startDate.getTime(),a=e.endDate.getTime(),o=t.startDate.getTime(),i=t.endDate.getTime(),s=this.getCollisionBufferByViewMode(r);return n+s<i-s&&a-s>o+s||Math.abs(n-o)<2*s||Math.abs(a-i)<2*s},e.getCollisionBufferByViewMode=function(e){var t=36e5,r=24*t;switch(e){case exports.ViewMode.MINUTE:return 3e4;case exports.ViewMode.HOUR:return 9e5;case exports.ViewMode.DAY:return t;case exports.ViewMode.WEEK:return 4*t;case exports.ViewMode.MONTH:return 12*t;case exports.ViewMode.QUARTER:return r;case exports.ViewMode.YEAR:return 2*r;default:return 12*t}},e.wouldCollide=function(e,t,r,n){var a=this;return void 0===r&&(r=exports.ViewMode.MONTH),t.some(function(t){return t.id!==e.id&&t.id!==n&&a.tasksVisuallyOverlap(e,t,r)})},e.getPreviewArrangement=function(e,t,r){void 0===r&&(r=exports.ViewMode.MONTH);var n=t.map(function(t){return t.id===e.id?e:t});return this.detectOverlaps(n,r)},e}(),h=function(){function e(){}return e.calculateDatesFromPosition=function(e,t,r,a,o,i,s){void 0===s&&(s=exports.ViewMode.MONTH);try{var l=isNaN(e)?0:e,c=isNaN(t)||t<20?20:t,u=r.getTime(),d=(a.getTime()-u)/(o*i),f=l*d,g=c*d,m=new Date(u+f),p=new Date(u+f+g);switch(s){case exports.ViewMode.MINUTE:var h=Math.round(e/i),v=Math.max(1,Math.round(t/i)),w=new Date(r);w.setSeconds(0,0),(m=new Date(w)).setMinutes(w.getMinutes()+h),m.setSeconds(0,0),(p=new Date(m)).setMinutes(m.getMinutes()+v-1),p.setSeconds(59,999);break;case exports.ViewMode.HOUR:var M=Math.round(e/i),D=Math.max(1,Math.round(t/i)),x=new Date(r);x.setMinutes(0,0,0),(m=new Date(x)).setHours(x.getHours()+M),m.setMinutes(0,0,0),(p=new Date(m)).setHours(m.getHours()+D-1),p.setMinutes(59,59,999);break;case exports.ViewMode.DAY:var y=Math.round(e/i),E=Math.max(1,Math.round(t/i)),k=new Date(r);k.setHours(0,0,0,0),(m=new Date(k)).setDate(k.getDate()+y),m.setHours(0,0,0,0),(p=new Date(m)).setDate(m.getDate()+E-1),p.setHours(23,59,59,999);break;default:m=n.startOfDay(m),p=n.endOfDay(p)}return m<r&&(m=new Date(r)),p>a&&(p=new Date(a)),{newStartDate:m,newEndDate:p}}catch(e){return console.error("Error calculating dates from position:",e),{newStartDate:new Date(r),newEndDate:new Date(a)}}},e.createUpdatedTask=function(e,t,r){return a(a({},e),{startDate:new Date(t),endDate:new Date(r)})},e.calculateTaskPixelPosition=function(e,t,r,n,a,o){var i;void 0===o&&(o=exports.ViewMode.MONTH);try{if(!(e.startDate instanceof Date&&e.endDate instanceof Date))throw new Error("Invalid dates in task");var s=t.getTime(),l=r.getTime(),c=Math.max(e.startDate.getTime(),t.getTime()),u=Math.min(e.endDate.getTime(),r.getTime());if(o===exports.ViewMode.MINUTE||o===exports.ViewMode.HOUR||o===exports.ViewMode.DAY){var d=void 0,f=void 0;if(o===exports.ViewMode.MINUTE)d=s,f=l;else if(o===exports.ViewMode.HOUR){var g=new Date(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),0,0,0).getTime(),m=new Date(r.getFullYear(),r.getMonth(),r.getDate(),r.getHours(),59,59,999).getTime();d=g,f=m}else{var p=new Date(t.getFullYear(),t.getMonth(),t.getDate(),0,0,0,0).getTime(),h=new Date(r.getFullYear(),r.getMonth(),r.getDate(),23,59,59,999).getTime();d=p,f=h}if(s=d,l=f,o===exports.ViewMode.DAY){var v=new Date(new Date(c).getFullYear(),new Date(c).getMonth(),new Date(c).getDate(),0,0,0,0).getTime(),w=new Date(new Date(u).getFullYear(),new Date(u).getMonth(),new Date(u).getDate(),23,59,59,999).getTime();c=v,u=w}}var M=l-s,D=n*a,x=(c-s)/M*D,y=(u-c)/M*D;o===exports.ViewMode.MINUTE?(x=Math.round(x),y=Math.max(10,Math.round(y))):o===exports.ViewMode.HOUR?(x=Math.round(x),y=Math.max(15,Math.round(y))):o===exports.ViewMode.DAY&&(x=Math.round(x/a)*a,y=Math.max(a,Math.round(y/a)*a));var E=((i={})[exports.ViewMode.MINUTE]=10,i[exports.ViewMode.HOUR]=15,i[exports.ViewMode.DAY]=20,i[exports.ViewMode.WEEK]=20,i[exports.ViewMode.MONTH]=20,i[exports.ViewMode.QUARTER]=30,i[exports.ViewMode.YEAR]=40,i)[o]||20;y=Math.max(E,y);var k=D-x;return{leftPx:x,widthPx:y=Math.min(k,y)}}catch(e){return console.error("Error calculating task position:",e),{leftPx:0,widthPx:20}}},e.getLiveDatesFromElement=function(e,t,r,n,a,o){void 0===o&&(o=exports.ViewMode.MONTH);try{if(!e)return{startDate:new Date(t),endDate:new Date(r)};var i=parseFloat(e.style.left||"0"),s=parseFloat(e.style.width||"0"),l=this.calculateDatesFromPosition(i,s,t,r,n,a,o);return{startDate:l.newStartDate,endDate:l.newEndDate}}catch(e){return console.error("Error getting live dates:",e),{startDate:new Date(t),endDate:new Date(r)}}},e.datesOverlap=function(e,t,r,a){return n.isWithinInterval(e,{start:r,end:a})||n.isWithinInterval(t,{start:r,end:a})||n.isWithinInterval(r,{start:e,end:t})||n.isWithinInterval(a,{start:e,end:t})},e}(),v=function(){function e(){}return e.prepareCloneForExport=function(e,t,r){e.style.padding="".concat(t,"px"),r&&(e.style.backgroundColor="#1f2937");var n=e.querySelector(".rmg-timeline-container");if(n){n.scrollLeft=0,n.scrollTop=0,n.style.overflow="visible",n.style.scrollBehavior="auto";var a=n.querySelector(".rmg-timeline-content");a&&(n.style.width="".concat(a.scrollWidth,"px"),n.style.height="".concat(a.scrollHeight,"px"))}var o=e.querySelector(".rmg-timeline-grid");o&&(o.style.transform="translateX(0)"),e.querySelectorAll(".rmg-task-item").forEach(function(e){e.style.transition="none",e.style.willChange="auto",e.style.overflow="visible"});e.querySelectorAll([".rmg-task-item-name",".rmg-task-group-name",".rmg-task-group-description"].join(", ")).forEach(function(e){e.style.transform="translateY(-7px)",e.style.overflow="visible"});e.querySelectorAll([".rmg-title",".rmg-task-list-header",".rmg-timeline-unit",".rmg-today-marker-label"].join(", ")).forEach(function(e){e.style.overflow="visible"}),e.querySelectorAll(".rmg-resize-handle, .rmg-progress-handle, .rmg-progress-tooltip, .rmg-tooltip").forEach(function(e){e.style.display="none"});var i=e.querySelector(".rmg-header");i&&(i.style.display="none");var s=e.querySelector(".rmg-today-marker");s&&(s.style.display="none"),e.querySelectorAll("*").forEach(function(e){e.style.transition="none",e.style.animation="none"}),e.style.overflow="visible";var l=e.querySelector(".rmg-container");l&&(l.style.overflow="visible")},e.export=function(e){return o(this,arguments,void 0,function(e,t){var r,n,a,o,s,l,c,u,d,f,g,m,p,h,v,w,M,D,x=this;return void 0===t&&(t={}),i(this,function(i){switch(i.label){case 0:r=t.format,n=void 0===r?"png":r,a=t.filename,o=void 0===a?"gantt-chart":a,s=t.quality,l=void 0===s?.95:s,c=t.scale,u=void 0===c?2:c,d=t.backgroundColor,f=void 0===d?"#ffffff":d,g=t.padding,m=void 0===g?20:g,t.includeTitle,p=t.pdfOptions,h=void 0===p?{}:p,i.label=1;case 1:return i.trys.push([1,4,,5]),[4,this.loadHtml2Canvas()];case 2:if(!(v=i.sent()))throw new Error("html2canvas is required for export functionality. Please install it: npm install html2canvas");return w=e.classList.contains("rmg-dark"),[4,v(e,{scale:u,backgroundColor:f,useCORS:!0,allowTaint:!0,logging:!1,windowWidth:e.scrollWidth+2*m,windowHeight:e.scrollHeight+2*m,onclone:function(e,t){x.prepareCloneForExport(t,m,w)}})];case 3:switch(M=i.sent(),n){case"png":return[2,this.exportAsPng(M,o)];case"jpeg":case"jpg":return[2,this.exportAsJpeg(M,o,l)];case"pdf":return[2,this.exportAsPdf(M,o,h)];default:throw new Error("Unsupported export format: ".concat(n))}return[3,5];case 4:return D=i.sent(),console.error("Export failed:",D),[2,{success:!1,error:D instanceof Error?D.message:"Export failed"}];case 5:return[2]}})})},e.exportAsPng=function(e,t){var r=e.toDataURL("image/png");return this.downloadFile(r,"".concat(t,".png")),{success:!0,dataUrl:r,filename:"".concat(t,".png"),format:"png"}},e.exportAsJpeg=function(e,t,r){var n=e.toDataURL("image/jpeg",r);return this.downloadFile(n,"".concat(t,".jpg")),{success:!0,dataUrl:n,filename:"".concat(t,".jpg"),format:"jpeg"}},e.exportAsPdf=function(e,t){return o(this,arguments,void 0,function(e,t,r){var n,a,o,s,l,c,u,d,f,g,m,p,h,v,w,M,D,x,y,E,k,T,b,V,N,H,C,A,R,Y,F,U;return void 0===r&&(r={}),i(this,function(i){switch(i.label){case 0:return[4,this.loadJsPDF()];case 1:if(!(n=i.sent()))throw new Error("jspdf is required for PDF export. Please install it: npm install jspdf");if(a=r.orientation,o=void 0===a?"landscape":a,s=r.pageSize,l=void 0===s?"a4":s,c=r.margins,u=void 0===c?{top:10,right:10,bottom:10,left:10}:c,d=r.title,f=r.author,g=r.subject,m=r.fitToPage,p=void 0===m||m,h=e.width,v=e.height,w=h/v,M=new n({orientation:o,unit:"mm",format:l}),d&&M.setProperties({title:d}),f&&M.setProperties({author:f}),g&&M.setProperties({subject:g}),D=M.internal.pageSize.getWidth(),x=M.internal.pageSize.getHeight(),y=D-u.left-u.right,E=x-u.top-u.bottom,k=y/E,p?w>k?(T=y,b=y/w):(b=E,T=E*w):(V=25.4/96,T=Math.min(h*V,y),b=Math.min(v*V,E)),N=u.left+(y-T)/2,H=u.top+(E-b)/2,C=e.toDataURL("image/png"),M.addImage(C,"PNG",N,H,T,b),!p&&h*(25.4/96)>y)for(A=Math.ceil(h*(25.4/96)/y),R=1;R<A;R++)M.addPage(),Y=-R*y+u.left,M.addImage(C,"PNG",Y,u.top,h*(25.4/96),b);return F=M.output("blob"),U=URL.createObjectURL(F),M.save("".concat(t,".pdf")),[2,{success:!0,dataUrl:U,filename:"".concat(t,".pdf"),format:"pdf",blob:F}]}})})},e.getDataUrl=function(e){return o(this,arguments,void 0,function(e,t,r){var n,a,o,s,l,c,u=this;return void 0===t&&(t="png"),void 0===r&&(r={}),i(this,function(i){switch(i.label){case 0:return i.trys.push([0,3,,4]),[4,this.loadHtml2Canvas()];case 1:if(!(n=i.sent()))throw new Error("html2canvas is required");return a=null!==(c=r.padding)&&void 0!==c?c:20,o=e.classList.contains("rmg-dark"),[4,n(e,{scale:r.scale||2,backgroundColor:r.backgroundColor||"#ffffff",useCORS:!0,allowTaint:!0,logging:!1,windowWidth:e.scrollWidth+2*a,windowHeight:e.scrollHeight+2*a,onclone:function(e,t){u.prepareCloneForExport(t,a,o)}})];case 2:return s=i.sent(),"png"===t?[2,s.toDataURL("image/png")]:"jpeg"===t||"jpg"===t?[2,s.toDataURL("image/jpeg",r.quality||.95)]:[2,s.toDataURL("image/png")];case 3:return l=i.sent(),console.error("Failed to get data URL:",l),[2,null];case 4:return[2]}})})},e.getBlob=function(e){return o(this,arguments,void 0,function(e,t,r){var n,a,o,s,l,c,u=this;return void 0===t&&(t="png"),void 0===r&&(r={}),i(this,function(i){switch(i.label){case 0:return i.trys.push([0,3,,4]),[4,this.loadHtml2Canvas()];case 1:if(!(n=i.sent()))throw new Error("html2canvas is required");return a=null!==(c=r.padding)&&void 0!==c?c:20,o=e.classList.contains("rmg-dark"),[4,n(e,{scale:r.scale||2,backgroundColor:r.backgroundColor||"#ffffff",useCORS:!0,allowTaint:!0,logging:!1,windowWidth:e.scrollWidth+2*a,windowHeight:e.scrollHeight+2*a,onclone:function(e,t){u.prepareCloneForExport(t,a,o)}})];case 2:return s=i.sent(),[2,new Promise(function(e){var n="jpeg"===t||"jpg"===t?"image/jpeg":"image/png";s.toBlob(function(t){return e(t)},n,r.quality||.95)})];case 3:return l=i.sent(),console.error("Failed to get blob:",l),[2,null];case 4:return[2]}})})},e.copyToClipboard=function(e){return o(this,arguments,void 0,function(e,t){var r,n;return void 0===t&&(t={}),i(this,function(a){switch(a.label){case 0:return a.trys.push([0,3,,4]),[4,this.getBlob(e,"png",t)];case 1:if(!(r=a.sent()))throw new Error("Failed to create image blob");if(!navigator.clipboard||!navigator.clipboard.write)throw new Error("Clipboard API not available");return[4,navigator.clipboard.write([new ClipboardItem({"image/png":r})])];case 2:return a.sent(),[2,!0];case 3:return n=a.sent(),console.error("Failed to copy to clipboard:",n),[2,!1];case 4:return[2]}})})},e.downloadFile=function(e,t){var r=document.createElement("a");r.href=e,r.download=t,document.body.appendChild(r),r.click(),document.body.removeChild(r)},e.loadHtml2Canvas=function(){return o(this,void 0,void 0,function(){return i(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,import("html2canvas")];case 1:return[2,e.sent().default];case 2:return e.sent(),console.warn("html2canvas is not installed. Export functionality requires html2canvas. Install it with: npm install html2canvas"),[2,null];case 3:return[2]}})})},e.loadJsPDF=function(){return o(this,void 0,void 0,function(){return i(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,import("jspdf")];case 1:return[2,e.sent().jsPDF];case 2:return e.sent(),console.warn("jspdf is not installed. PDF export functionality requires jspdf. Install it with: npm install jspdf"),[2,null];case 3:return[2]}})})},e.checkDependencies=function(){return o(this,void 0,void 0,function(){var e,t;return i(this,function(r){switch(r.label){case 0:return[4,this.loadHtml2Canvas()];case 1:return e=r.sent(),[4,this.loadJsPDF()];case 2:return t=r.sent(),[2,{html2canvas:null!==e,jspdf:null!==t}]}})})},e}(),w=function(e){var t=e.task,a=e.position,o=e.dragType,i=e.taskId,s=e.startDate,l=e.endDate,c=e.totalMonths,d=e.monthWidth,f=e.showProgress,g=void 0!==f&&f,m=e.instanceId,p=e.className,v=void 0===p?"":p,w=e.viewMode,M=void 0===w?exports.ViewMode.MONTH:w,D=e.renderTooltip,x=t.startDate,y=t.endDate;try{var E=i||t.id,k=document.querySelector('[data-task-id="'.concat(E,'"][data-instance-id="').concat(m,'"]'));if(k&&(o||k.style.left||k.style.width)){var T=h.getLiveDatesFromElement(k,s,l,c,d,M);x=T.startDate,y=T.endDate}}catch(e){console.error("Error calculating live dates for tooltip:",e)}var b=u(x,y,M),V=function(e){if(!(e instanceof Date)||isNaN(e.getTime()))return"Invalid date";switch(M){case exports.ViewMode.MINUTE:return n.format(e,"MMM d, yyyy HH:mm");case exports.ViewMode.HOUR:return n.format(e,"MMM d, yyyy HH:00");case exports.ViewMode.DAY:return n.format(e,"EEE, MMM d, yyyy");default:return n.format(e,"MMM d, yyyy")}},N=function(){if(!o)return null;switch(o){case"move":return"Moving task...";case"resize-left":return"Adjusting start date...";case"resize-right":return"Adjusting end date...";default:return null}}();return D?r.createElement("div",{className:"rmg-tooltip ".concat(v," rmg-tooltip-visible"),style:{left:"".concat(a.x,"px"),top:"".concat(a.y-40,"px")},"data-rmg-component":"tooltip"},D({task:t,position:a,dragType:o,startDate:x,endDate:y,viewMode:M})):r.createElement("div",{className:"rmg-tooltip ".concat(v," rmg-tooltip-visible"),style:{left:"".concat(a.x,"px"),top:"".concat(a.y-40,"px")},"data-rmg-component":"tooltip"},r.createElement("div",{className:"rmg-tooltip-title","data-rmg-component":"tooltip-title"},t.name||"Unnamed Task"),N&&r.createElement("div",{className:"rmg-tooltip-action","data-rmg-component":"tooltip-action"},N),r.createElement("div",{className:"rmg-tooltip-content","data-rmg-component":"tooltip-content"},r.createElement("div",{className:"rmg-tooltip-row","data-rmg-component":"tooltip-row"},r.createElement("div",{className:"rmg-tooltip-label"},"Start:"),r.createElement("div",{className:"rmg-tooltip-value"},V(x))),r.createElement("div",{className:"rmg-tooltip-row","data-rmg-component":"tooltip-row"},r.createElement("div",{className:"rmg-tooltip-label"},"End:"),r.createElement("div",{className:"rmg-tooltip-value"},V(y))),r.createElement("div",{className:"rmg-tooltip-row","data-rmg-component":"tooltip-row"},r.createElement("div",{className:"rmg-tooltip-label"},"Duration:"),r.createElement("div",{className:"rmg-tooltip-value"},b.value," ",b.unit)),g&&"number"==typeof t.percent&&r.createElement("div",{className:"rmg-tooltip-row","data-rmg-component":"tooltip-row"},r.createElement("div",{className:"rmg-tooltip-label"},"Progress:"),r.createElement("div",{className:"rmg-tooltip-value"},t.percent,"%")),t.dependencies&&t.dependencies.length>0&&r.createElement("div",{className:"rmg-tooltip-row","data-rmg-component":"tooltip-row"},r.createElement("div",{className:"rmg-tooltip-label"},"Dependencies:"),r.createElement("div",{className:"rmg-tooltip-value"},t.dependencies.join(", ")))))},M=function(e){var t=e.activeMode,n=e.onChange,a=e.darkMode,o=e.availableModes,i=[{id:exports.ViewMode.MINUTE,label:"Minute"},{id:exports.ViewMode.HOUR,label:"Hour"},{id:exports.ViewMode.DAY,label:"Day"},{id:exports.ViewMode.WEEK,label:"Week"},{id:exports.ViewMode.MONTH,label:"Month"},{id:exports.ViewMode.QUARTER,label:"Quarter"},{id:exports.ViewMode.YEAR,label:"Year"}],s=[exports.ViewMode.DAY,exports.ViewMode.WEEK,exports.ViewMode.MONTH,exports.ViewMode.QUARTER,exports.ViewMode.YEAR],l=o?i.filter(function(e){return o.includes(e.id)}):i.filter(function(e){return s.includes(e.id)});return r.createElement("div",{className:"rmg-view-mode-selector ".concat(a?"rmg-dark":""),"data-rmg-component":"view-mode-selector"},l.map(function(e){return r.createElement("button",{key:e.id,type:"button",className:"rmg-view-mode-button ".concat(t===e.id?"rmg-view-mode-button-active":""),onClick:function(){return n(e.id)},"data-rmg-component":"view-mode-button","data-view-mode":e.id,"data-active":t===e.id?"true":"false"},e.label)}))},D=function(e){var t=e.task,n=e.leftPx,a=e.widthPx,o=e.topPx,i=e.isHovered,s=e.isDragging,l=e.editMode,c=e.allowProgressEdit,u=void 0===c||c,d=e.allowTaskResize,f=void 0===d||d,g=e.allowTaskMove,m=void 0===g||g,p=e.showProgress,h=void 0!==p&&p,v=e.instanceId,w=e.renderTask,M=e.getTaskColor,D=e.onMouseDown,x=e.onMouseEnter,y=e.onMouseLeave,E=e.onClick,k=e.onProgressUpdate,T=(i||s)&&l&&f,b=l&&h&&u,V=l&&m,N=r.useRef(null),H=r.useRef(null),C=r.useState(!1),A=C[0],R=C[1],Y=r.useState(t.percent||0),F=Y[0],U=Y[1],I=r.useState(!1),O=I[0],S=I[1];if(!t||!t.id)return null;t.color;var P="",L="var(--rmg-task-text-color)";if(M){var W=M({task:t,isHovered:i,isDragging:s});W.backgroundColor,P=W.borderColor||"",L=W.textColor||L}var q=function(e){V&&D(e,t,"move")};if(r.useEffect(function(){U(t.percent||0)},[t.percent]),w){var j=w({task:t,leftPx:n,widthPx:a,topPx:o,isHovered:i,isDragging:s,editMode:l,showProgress:h});return r.createElement("div",{ref:N,className:"rmg-task-item-custom",style:{position:"absolute",left:"".concat(Math.max(0,n),"px"),width:"".concat(Math.max(20,a),"px"),top:"".concat(o,"px")},onClick:function(e){return E(e,t)},onMouseDown:V?q:void 0,onMouseEnter:function(e){return x(e,t)},onMouseLeave:y,"data-testid":"task-".concat(t.id),"data-task-id":t.id,"data-instance-id":v,"data-dragging":s?"true":"false","data-rmg-component":"task"},j)}var z={left:"".concat(n,"px"),top:"".concat(o,"px"),width:"".concat(a,"px"),backgroundColor:t.color||"var(--rmg-task-bg)",cursor:s?"grabbing":V?"grab":"default"};return P&&(z.borderColor=P,z.borderWidth="1px",z.borderStyle="solid"),r.createElement("div",{ref:N,className:"rmg-task-item ".concat(s?"rmg-task-item-dragging":""),style:z,onClick:function(e){return E(e,t)},onMouseDown:V?q:void 0,onMouseEnter:function(e){return x(e,t)},onMouseLeave:y,"data-testid":"task-".concat(t.id),"data-task-id":t.id,"data-instance-id":v,"data-dragging":s?"true":"false","data-rmg-component":"task"},T&&r.createElement("div",{className:"rmg-resize-handle rmg-resize-handle-left",onMouseDown:function(e){f&&(e.stopPropagation(),D(e,t,"resize-left"))},"data-rmg-component":"resize-handle","data-rmg-handle":"left",style:{cursor:"ew-resize"}}),r.createElement("div",{className:"rmg-task-item-name"},t.name||"Unnamed Task"),h&&"number"==typeof F&&r.createElement("div",{ref:H,className:"rmg-progress-bar",onClick:function(e){if(b&&k){e.stopPropagation();var r=e.currentTarget.clientWidth,n=e.nativeEvent.offsetX,a=Math.round(n/r*100);U(a),k(t,a)}},"data-rmg-component":"progress-bar"},r.createElement("div",{className:"rmg-progress-fill",style:{width:"".concat(F,"%"),transition:A?"none":"width 0.3s ease-out"},"data-rmg-component":"progress-fill"},b&&(i||A)&&r.createElement(r.Fragment,null,r.createElement("div",{className:"rmg-progress-handle ".concat(A?"rmg-progress-handle-dragging":""),onMouseDown:function(e){if(b){e.stopPropagation(),e.preventDefault(),e.nativeEvent.stopImmediatePropagation(),R(!0),S(!0),H.current&&(H.current.style.transition="width 0.05s ease-out");var r=N.current;if(r){var n=F,a=function(e){if(e.stopPropagation(),e.preventDefault(),r){var t=r.getBoundingClientRect(),a=t.width-2,o=Math.max(0,Math.min(a,e.clientX-t.left)),i=Math.round(o/a*100);n=Math.max(0,Math.min(100,i)),U(n)}},o=function(e){e.stopPropagation(),e.preventDefault(),R(!1),S(!1),document.removeEventListener("mousemove",a,!0),document.removeEventListener("mouseup",o,!0),H.current&&(H.current.style.transition=""),k&&n!==t.percent&&k(t,n)};document.addEventListener("mousemove",a,!0),document.addEventListener("mouseup",o,!0)}}},style:{cursor:"ew-resize",pointerEvents:"auto",zIndex:1e3},title:"Drag to adjust progress","data-rmg-component":"progress-handle"}),(O||A)&&r.createElement("div",{className:"rmg-progress-tooltip","data-rmg-component":"progress-tooltip"},F,"%")))),T&&r.createElement("div",{className:"rmg-resize-handle rmg-resize-handle-right",onMouseDown:function(e){f&&(e.stopPropagation(),D(e,t,"resize-right"))},"data-rmg-component":"resize-handle","data-rmg-handle":"right",style:{cursor:"ew-resize"}}))},x=function(e){var t=e.tasks,n=void 0===t?[]:t,a=e.headerLabel,o=void 0===a?"Resources":a,i=e.showIcon,s=void 0!==i&&i,l=e.showTaskCount,c=void 0!==l&&l,u=e.showDescription,d=void 0===u||u,f=e.rowHeight,g=void 0===f?40:f,m=e.className,h=void 0===m?"":m,v=e.onGroupClick,w=e.viewMode,M=e.showTimelineHeader,D=void 0===M||M,x=Array.isArray(n)?n:[];return r.createElement("div",{className:"rmg-task-list ".concat(h),"data-rmg-component":"task-list"},r.createElement("div",{className:"rmg-task-list-header","data-show-timeline-header":D},o),x.map(function(e){if(!e)return null;var t=function(e){if(!e.tasks||!Array.isArray(e.tasks))return 60;var t=p.detectOverlaps(e.tasks,w);return Math.max(60,t.length*g+20)}(e);return r.createElement("div",{key:"task-group-".concat(e.id||"unknown"),className:"rmg-task-group",style:{height:"".concat(t,"px")},onClick:function(){return t=e,void(v&&v(t));var t},"data-testid":"task-group-".concat(e.id||"unknown"),"data-rmg-component":"task-group","data-group-id":e.id},r.createElement("div",{className:"rmg-task-group-content"},s&&e.icon&&r.createElement("span",{className:"rmg-task-group-icon",dangerouslySetInnerHTML:{__html:e.icon},"data-rmg-component":"task-group-icon"}),r.createElement("div",{className:"rmg-task-group-name","data-rmg-component":"task-group-name"},e.name||"Unnamed")),d&&e.description&&r.createElement("div",{className:"rmg-task-group-description","data-rmg-component":"task-group-description"},e.description),c&&e.tasks&&e.tasks.length>0&&r.createElement("div",{className:"rmg-task-group-count","data-rmg-component":"task-group-count"},e.tasks.length," ",1===e.tasks.length?"task":"tasks"))}))},y=function(e){var t=e.taskGroup,n=e.startDate,o=e.endDate,i=e.totalMonths,s=e.monthWidth,l=e.editMode,c=void 0===l||l,u=e.allowProgressEdit,d=void 0===u||u,f=e.allowTaskResize,g=void 0===f||f,m=e.allowTaskMove,v=void 0===m||m,M=e.showProgress,x=void 0!==M&&M,y=e.className,E=void 0===y?"":y,k=e.tooltipClassName,T=void 0===k?"":k,b=e.onTaskUpdate,V=e.onTaskClick,N=e.onTaskSelect,H=e.onAutoScrollChange,C=e.viewMode,A=void 0===C?exports.ViewMode.MONTH:C,R=e.scrollContainerRef,Y=e.smoothDragging,F=void 0===Y||Y;e.movementThreshold;var U=e.animationSpeed,I=void 0===U?.25:U,O=e.infiniteScroll,S=void 0!==O&&O,P=e.onTimelineExtend,L=e.renderTask,W=e.renderTooltip,q=e.getTaskColor;if(!t||!t.id||!Array.isArray(t.tasks))return r.createElement("div",{className:"rmg-task-row rmg-task-row-invalid"},"Invalid task group data");var j=n instanceof Date?n:new Date,z=o instanceof Date?o:new Date,B=r.useState(null),Q=B[0],K=B[1],G=r.useState(null),_=G[0],X=G[1],J=r.useState(null),Z=J[0],$=J[1],ee=r.useState(0),te=ee[0],re=ee[1],ne=r.useState({x:0,y:0}),ae=ne[0],oe=ne[1],ie=r.useState(null),se=ie[0],le=ie[1],ce=r.useState(null),ue=ce[0],de=ce[1],fe=r.useRef(null),ge=r.useRef({x:0,y:0}),me=r.useRef(null),pe=r.useRef(null),he=r.useRef({left:0,width:0}),ve=r.useRef(0),we=r.useRef(!1),Me=r.useRef(null),De=r.useRef(0),xe=r.useRef(null),ye=r.useRef({minLeft:0,maxLeft:i*s}),Ee=r.useRef(null),ke=r.useRef(null),Te=r.useRef(null),be=r.useRef(null),Ve=r.useRef("task-row-".concat(Math.random().toString(36).substring(2,11))),Ne=F&&A!==exports.ViewMode.DAY,He=function(e){var t=a(a({},e),{startDate:new Date(e.startDate),endDate:new Date(e.endDate)});le(t),Te.current=t},Ce=se?p.getPreviewArrangement(se,t.tasks,A):p.detectOverlaps(t.tasks,A),Ae=Math.max(60,40*Ce.length+20);r.useEffect(function(){ye.current={minLeft:0,maxLeft:i*s}},[i,s]);var Re=function(){if(be.current&&me.current&&pe.current){var e=Date.now(),t=e-ve.current;ve.current=e;var r=I||.25,n=pe.current.left+(me.current.left-pe.current.left)*r,a=pe.current.width+(me.current.width-pe.current.width)*r;he.current.left=(n-pe.current.left)/(t||16),he.current.width=(a-pe.current.width)/(t||16),pe.current={left:n,width:a},be.current.style.left="".concat(n,"px"),be.current.style.width="".concat(a,"px"),ke.current&&Ye(n,a),fe.current=requestAnimationFrame(Re)}else fe.current=null},Ye=function(e,t){if(ke.current)try{if(A===exports.ViewMode.DAY){var r=Math.round(e/s),n=Math.max(1,Math.round(t/s)),o=new Date(j);o.setHours(0,0,0,0),(m=new Date(o)).setDate(o.getDate()+r),m.setHours(0,0,0,0),(p=new Date(m)).setDate(m.getDate()+n-1),p.setHours(23,59,59,999);var l=j.getTime(),c=z.getTime(),u=new Date(Math.max(l,m.getTime())),d=new Date(Math.min(c,p.getTime())),f=a(a({},ke.current),{startDate:u,endDate:d});He(f)}else{var g=h.calculateDatesFromPosition(e,t,j,z,i,s,A),m=g.newStartDate,p=g.newEndDate;f=a(a({},ke.current),{startDate:m,endDate:p});He(f)}}catch(e){console.error("Error updating dates:",e)}},Fe=function(){if(!we.current){we.current=!0,(null==R?void 0:R.current)&&(R.current.style.scrollBehavior="auto");var e=performance.now(),t=function(){if(we.current&&(null==R?void 0:R.current)&&me.current){var r=performance.now(),n=Math.min(r-e,16);e=r;var a=R.current,o=xe.current,i=De.current,s=a.scrollLeft,l=a.scrollWidth-a.clientWidth,c=i*(n/16);if("left"===o){if(s<=0)return S&&P?(P("left"),void Ue()):void Ue();var u=s-(g=Math.min(3*c,s));if(a.scrollLeft=u,me.current&&be.current){var d=parseFloat(be.current.style.left||"0"),f=Math.max(ye.current.minLeft,d-g);me.current.left=f,pe.current&&(pe.current.left=f),be.current.style.left="".concat(f,"px"),ke.current&&Ye(f,me.current.width)}}else if("right"===o){if(s>=l)return S&&P?(P("right"),void Ue()):void Ue();var g;u=s+(g=Math.min(3*c,l-s));if(a.scrollLeft=u,me.current&&be.current&&ue){d=parseFloat(be.current.style.left||"0");var m=ye.current.maxLeft-me.current.width;f=Math.min(m,d+g);me.current.left=f,pe.current&&(pe.current.left=f),be.current.style.left="".concat(f,"px"),ke.current&&Ye(f,me.current.width)}}we.current&&(Me.current=requestAnimationFrame(t))}};Me.current=requestAnimationFrame(t)}},Ue=function(){we.current=!1,null!==Me.current&&(cancelAnimationFrame(Me.current),Me.current=null),(null==R?void 0:R.current)&&(R.current.style.scrollBehavior="")},Ie=function(e,r){V&&!_&&V(r,t),N&&N(r,!0)},Oe=function(e,t){_||(K(t),Pe(e))},Se=function(){_||K(null)},Pe=function(e){if(Ee.current){var t=Ee.current.getBoundingClientRect();oe({x:e.clientX-t.left+20,y:e.clientY-t.top})}},Le=function(e,t,r){if(c){e.preventDefault(),e.stopPropagation();var n=document.querySelector('[data-task-id="'.concat(t.id,'"][data-instance-id="').concat(Ve.current,'"]'));if(n){be.current=n;var o=parseFloat(n.style.left||"0"),i=parseFloat(n.style.width||"0");de({left:o,width:i,startDate:new Date(t.startDate),endDate:new Date(t.endDate)}),me.current={left:o,width:i},pe.current={left:o,width:i},ge.current={x:e.clientX,y:e.clientY},ve.current=Date.now(),he.current={left:0,width:0},n.setAttribute("data-dragging","true"),n.style.transition="none",X(t),$(r),re(e.clientX),le(t),function(e){var t=a(a({},e),{startDate:new Date(e.startDate),endDate:new Date(e.endDate)});X(t),ke.current=t}(t),He(t),null===fe.current&&Ne&&(fe.current=requestAnimationFrame(Re)),document.addEventListener("mouseup",qe),document.addEventListener("mousemove",We)}}},We=function(e){if(ge.current={x:e.clientX,y:e.clientY},e instanceof MouseEvent&&Q&&Ee.current){var t=Ee.current.getBoundingClientRect();oe({x:e.clientX-t.left+20,y:e.clientY-t.top})}else e instanceof MouseEvent||Pe(e);if(_&&(null==R?void 0:R.current)&&function(e){if((null==R?void 0:R.current)&&_){var t=R.current.getBoundingClientRect(),r=null,n=0;e<t.left+40?(r="left",n=Math.max(1,Math.round((40-(e-t.left))/10))):e>t.right-40&&(r="right",n=Math.max(1,Math.round((e-(t.right-40))/10))),xe.current=r,De.current=n,r&&!we.current?(Fe(),H&&H(!0)):!r&&we.current&&(Ue(),H&&H(!1))}}(e.clientX),_&&Z&&ue&&Ee.current&&me.current)try{var r=e.clientX-te,n=i*s,a=me.current.left,o=me.current.width;switch(Z){case"move":a=Math.max(0,Math.min(n-ue.width,ue.left+r)),A===exports.ViewMode.DAY&&(a=Math.round(a/s)*s);break;case"resize-left":var l=ue.width-20,c=Math.min(l,r);a=Math.max(0,ue.left+c),A===exports.ViewMode.DAY&&(a=Math.round(a/s)*s);var u=ue.left+ue.width;o=Math.max(20,u-a),A===exports.ViewMode.DAY&&(o=Math.round(o/s)*s,o=Math.max(s,o));break;case"resize-right":o=Math.max(20,Math.min(n-ue.left,ue.width+r)),A===exports.ViewMode.DAY&&(o=Math.round(o/s)*s,o=Math.max(s,o))}me.current={left:a,width:o},A===exports.ViewMode.DAY&&be.current?(be.current.style.left="".concat(a,"px"),be.current.style.width="".concat(o,"px"),Ye(a,o)):Ne?null===fe.current&&(ve.current=Date.now(),fe.current=requestAnimationFrame(Re)):be.current&&(be.current.style.left="".concat(a,"px"),be.current.style.width="".concat(o,"px"),Ye(a,o))}catch(e){console.error("Error in handleMouseMove:",e)}},qe=function(){try{null!==fe.current&&(cancelAnimationFrame(fe.current),fe.current=null),function(){if(be.current&&me.current&&ke.current){var e=me.current.left,r=me.current.width;A===exports.ViewMode.DAY?(e=Math.round(e/s)*s,r=Math.round(r/s)*s,r=Math.max(s,r),be.current.style.transition="transform 0.15s ease-out, left 0.15s ease-out, width 0.15s ease-out",be.current.style.left="".concat(e,"px"),be.current.style.width="".concat(r,"px"),Ye(e,r)):Ne||(be.current.style.transition="transform 0.15s ease-out, left 0.15s ease-out, width 0.15s ease-out",be.current.style.left="".concat(e,"px"),be.current.style.width="".concat(r,"px"));var n=Te.current;if(n){var o=j.getTime(),i=z.getTime();if(n.startDate.getTime()<o&&(n=a(a({},n),{startDate:new Date(o)})),n.endDate.getTime()>i&&(n=a(a({},n),{endDate:new Date(i)})),b&&n)try{b(t.id,n)}catch(e){console.error("Error in onTaskUpdate:",e)}}}}(),be.current&&(be.current.setAttribute("data-dragging","false"),setTimeout(function(){be.current&&(be.current.style.transition="")},200))}catch(e){console.error("Error in handleMouseUp:",e)}finally{Ue(),H&&H(!1),X(null),$(null),le(null),de(null),ke.current=null,Te.current=null,be.current=null,me.current=null,pe.current=null,document.removeEventListener("mouseup",qe),document.removeEventListener("mousemove",We)}},je=function(e,r){if(b&&t.id)try{var n=a(a({},e),{percent:r});b(t.id,n)}catch(e){console.error("Error updating task progress:",e)}};return r.useEffect(function(){return function(){document.removeEventListener("mouseup",qe),document.removeEventListener("mousemove",We),Ue(),null!==fe.current&&(cancelAnimationFrame(fe.current),fe.current=null)}},[]),t.tasks&&0!==t.tasks.length?r.createElement("div",{className:"rmg-task-row ".concat(E),style:{height:"".concat(Ae,"px"),minWidth:"".concat(i*s,"px")},onMouseMove:function(e){return We(e)},onMouseLeave:function(){return K(null)},ref:Ee,"data-testid":"task-row-".concat(t.id),"data-instance-id":Ve.current,"data-rmg-component":"task-row","data-group-id":t.id},Ce.map(function(e,t){return r.createElement(r.Fragment,{key:"task-row-".concat(t)},e.map(function(e){try{if(!(e&&e.id&&e.startDate instanceof Date&&e.endDate instanceof Date))return console.warn("Invalid task data:",e),null;var n=h.calculateTaskPixelPosition(e,j,z,i,s,A),a=n.leftPx,o=n.widthPx,l=(null==Q?void 0:Q.id)===e.id,u=(null==_?void 0:_.id)===e.id,f=40*t+10;return r.createElement(D,{key:"task-".concat(e.id),task:e,leftPx:a,widthPx:o,topPx:f,isHovered:l,isDragging:u,editMode:c,allowProgressEdit:d,allowTaskResize:g,allowTaskMove:v,showProgress:x,instanceId:Ve.current,onMouseDown:Le,onMouseEnter:Oe,onMouseLeave:Se,onClick:Ie,renderTask:L,getTaskColor:q,onProgressUpdate:je})}catch(e){return console.error("Error rendering task:",e),null}}))}),(Q||_)&&r.createElement(w,{task:se||_||Q,position:ae,dragType:Z,taskId:null==_?void 0:_.id,startDate:j,endDate:z,totalMonths:i,monthWidth:s,showProgress:x,instanceId:Ve.current,className:T,viewMode:A,renderTooltip:W})):r.createElement("div",{className:"rmg-task-row rmg-task-row-empty"},"No tasks available")},E=r.forwardRef(function(e,t){var l=e.tasks,u=void 0===l?[]:l,h=e.startDate,w=e.endDate,D=e.title,E=void 0===D?"Project Timeline":D,k=e.currentDate,T=void 0===k?new Date:k,b=e.showCurrentDateMarker,V=void 0===b||b,N=e.todayLabel,H=void 0===N?"Today":N,C=e.editMode,A=void 0===C||C,R=e.allowProgressEdit,Y=void 0===R||R,F=e.allowTaskResize,U=void 0===F||F,I=e.allowTaskMove,O=void 0===I||I,S=e.headerLabel,P=void 0===S?"Resources":S,L=e.showProgress,W=void 0!==L&&L,q=e.darkMode,j=void 0!==q&&q,z=e.locale,B=void 0===z?"default":z,Q=e.styles,K=void 0===Q?{}:Q,G=e.viewMode,_=void 0===G?exports.ViewMode.MONTH:G,X=e.viewModes,J=e.showTimelineHeader,Z=void 0===J||J,$=e.smoothDragging,ee=void 0===$||$,te=e.movementThreshold,re=void 0===te?3:te,ne=e.animationSpeed,ae=void 0===ne?.25:ne,oe=e.minuteStep,ie=void 0===oe?5:oe,se=e.infiniteScroll,le=void 0!==se&&se,ce=e.onTimelineExtend,ue=e.focusMode,de=void 0===ue||ue,fe=e.renderTaskList,ge=e.renderTask,me=e.renderTooltip,pe=e.renderViewModeSelector,he=e.renderHeader,ve=e.renderTimelineHeader,we=e.getTaskColor,Me=e.onTaskUpdate,De=e.onTaskClick,xe=e.onTaskSelect;e.onTaskDoubleClick;var ye=e.onGroupClick,Ee=e.onViewModeChange,ke=e.fontSize;e.rowHeight,e.timeStep;var Te=e.maxHeight,be=r.useRef(null),Ve=r.useRef(null),Ne=r.useState(_),He=Ne[0],Ce=Ne[1],Ae=r.useState([]);Ae[0];var Re=Ae[1],Ye=r.useState(150),Fe=Ye[0],Ue=Ye[1],Ie=r.useState(!1),Oe=Ie[0],Se=Ie[1],Pe=r.useState(0),Le=Pe[0],We=Pe[1],qe=h||d(u),je=w||f(u);r.useImperativeHandle(t,function(){return{exportChart:function(e){return o(void 0,void 0,void 0,function(){return i(this,function(t){return be.current?[2,v.export(be.current,a(a({},e),{backgroundColor:j?"#1f2937":(null==e?void 0:e.backgroundColor)||"#ffffff"}))]:[2,{success:!1,error:"Container element not available"}]})})},getDataUrl:function(e,t){return o(void 0,void 0,void 0,function(){return i(this,function(r){return be.current?[2,v.getDataUrl(be.current,e,a(a({},t),{backgroundColor:j?"#1f2937":(null==t?void 0:t.backgroundColor)||"#ffffff"}))]:[2,null]})})},getBlob:function(e,t){return o(void 0,void 0,void 0,function(){return i(this,function(r){return be.current?[2,v.getBlob(be.current,e,a(a({},t),{backgroundColor:j?"#1f2937":(null==t?void 0:t.backgroundColor)||"#ffffff"}))]:[2,null]})})},copyToClipboard:function(e){return o(void 0,void 0,void 0,function(){return i(this,function(t){return be.current?[2,v.copyToClipboard(be.current,a(a({},e),{backgroundColor:j?"#1f2937":(null==e?void 0:e.backgroundColor)||"#ffffff"}))]:[2,!1]})})},getContainerElement:function(){return be.current},scrollToDate:function(e){if(Ve.current){var t=ct(He),r=ze(e,t,He);if(r>=0){var n=r*Fe;Ve.current.scrollLeft=n-Ve.current.clientWidth/2}}},scrollToToday:function(){ut(He,Fe)}}},[j,He,Fe]);var ze=function(e,t,r){switch(r){case exports.ViewMode.MINUTE:return t.findIndex(function(t){return t.getHours()===e.getHours()&&Math.floor(t.getMinutes()/(ie||5))===Math.floor(e.getMinutes()/(ie||5))&&t.getDate()===e.getDate()&&t.getMonth()===e.getMonth()&&t.getFullYear()===e.getFullYear()});case exports.ViewMode.HOUR:return t.findIndex(function(t){return t.getHours()===e.getHours()&&t.getDate()===e.getDate()&&t.getMonth()===e.getMonth()&&t.getFullYear()===e.getFullYear()});case exports.ViewMode.DAY:return t.findIndex(function(t){return t.getDate()===e.getDate()&&t.getMonth()===e.getMonth()&&t.getFullYear()===e.getFullYear()});case exports.ViewMode.WEEK:return t.findIndex(function(t){var r=new Date(t);return r.setDate(t.getDate()+6),e>=t&&e<=r});case exports.ViewMode.MONTH:return t.findIndex(function(t){return t.getMonth()===e.getMonth()&&t.getFullYear()===e.getFullYear()});case exports.ViewMode.QUARTER:var n=Math.floor(e.getMonth()/3);return t.findIndex(function(t){return Math.floor(t.getMonth()/3)===n&&t.getFullYear()===e.getFullYear()});case exports.ViewMode.YEAR:return t.findIndex(function(t){return t.getFullYear()===e.getFullYear()});default:return-1}},Be=function(e){if(le&&ce){var t=Qe(He),r=qe,n=je;"left"===e?r=Ge(qe,t,He):n=Ke(je,t,He),ce(e,r,n)}},Qe=function(e){switch(e){case exports.ViewMode.MINUTE:return 60;case exports.ViewMode.HOUR:return 24;case exports.ViewMode.DAY:return 7;case exports.ViewMode.WEEK:return 4;case exports.ViewMode.MONTH:return 3;case exports.ViewMode.QUARTER:return 4;case exports.ViewMode.YEAR:return 5;default:return 3}},Ke=function(e,t,r){switch(r){case exports.ViewMode.MINUTE:return n.addMinutes(e,t);case exports.ViewMode.HOUR:return n.addHours(e,t);case exports.ViewMode.DAY:return n.addDays(e,t);case exports.ViewMode.WEEK:return n.addDays(e,7*t);case exports.ViewMode.MONTH:return new Date(e.getFullYear(),e.getMonth()+t,e.getDate());case exports.ViewMode.QUARTER:return n.addQuarters(e,t);case exports.ViewMode.YEAR:return n.addYears(e,t);default:return e}},Ge=function(e,t,r){switch(r){case exports.ViewMode.MINUTE:return n.addMinutes(e,-t);case exports.ViewMode.HOUR:return n.addHours(e,-t);case exports.ViewMode.DAY:return n.addDays(e,-t);case exports.ViewMode.WEEK:return n.addDays(e,7*-t);case exports.ViewMode.MONTH:return new Date(e.getFullYear(),e.getMonth()-t,e.getDate());case exports.ViewMode.QUARTER:return n.addQuarters(e,-t);case exports.ViewMode.YEAR:return n.addYears(e,-t);default:return e}},_e=function(e,t,r){void 0===r&&(r=5);var a=[],o=new Date(e);o.setSeconds(0,0);var i=o.getMinutes(),s=Math.floor(i/r)*r;o.setMinutes(s);var l=new Date(t);l.setMinutes(l.getMinutes(),59,999);for(var c=0;o<=l&&c<500;)a.push(new Date(o)),o=n.addMinutes(o,r),c++;return c>=500&&console.warn("Minute view limited to ".concat(500," intervals for performance. ")+"Consider using a larger time range or switching to Hour view."),a},Xe=function(e,t){var r=[],a=new Date(e);a.setMinutes(0,0,0);var o=new Date(t);for(o.setHours(o.getHours(),59,59,999);a<=o;)r.push(new Date(a)),a=n.addHours(a,1);return r},Je=function(e,t){var r=[],a=new Date(e);a.setHours(0,0,0,0);var o=new Date(t);for(o.setHours(23,59,59,999);a<=o;)r.push(new Date(a)),a=n.addDays(a,1);return r},Ze=function(e,t){for(var r=[],a=new Date(e);a<=t;)r.push(new Date(a)),a=n.addDays(a,7);return r},$e=function(e,t){for(var r=[],a=n.startOfQuarter(new Date(e));a<=t;)r.push(new Date(a)),a=n.addQuarters(a,1);return r},et=function(e,t){for(var r=[],a=n.startOfYear(new Date(e));a<=t;)r.push(new Date(a)),a=n.addYears(a,1);return r},tt=function(){return!1!==X&&(Array.isArray(X)?X:[exports.ViewMode.DAY,exports.ViewMode.WEEK,exports.ViewMode.MONTH,exports.ViewMode.QUARTER,exports.ViewMode.YEAR])},rt=function(){switch(He){case exports.ViewMode.MINUTE:return _e(qe,je,ie);case exports.ViewMode.HOUR:return Xe(qe,je);case exports.ViewMode.DAY:return Je(qe,je);case exports.ViewMode.WEEK:return Ze(qe,je);case exports.ViewMode.MONTH:return c(qe,je);case exports.ViewMode.QUARTER:return $e(qe,je);case exports.ViewMode.YEAR:return et(qe,je);default:return c(qe,je)}}(),nt=rt.length,at=function(){var e=new Date;switch(He){case exports.ViewMode.MINUTE:return rt.findIndex(function(t){return t.getHours()===e.getHours()&&Math.floor(t.getMinutes()/(ie||5))===Math.floor(e.getMinutes()/(ie||5))&&t.getDate()===e.getDate()&&t.getMonth()===e.getMonth()&&t.getFullYear()===e.getFullYear()});case exports.ViewMode.HOUR:return rt.findIndex(function(t){return t.getHours()===e.getHours()&&t.getDate()===e.getDate()&&t.getMonth()===e.getMonth()&&t.getFullYear()===e.getFullYear()});case exports.ViewMode.DAY:return rt.findIndex(function(t){return t.getDate()===e.getDate()&&t.getMonth()===e.getMonth()&&t.getFullYear()===e.getFullYear()});case exports.ViewMode.WEEK:return rt.findIndex(function(t){