@progress/kendo-react-gantt 12.0.2-develop.3 → 12.0.2-develop.5

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.
@@ -12,4 +12,4 @@
12
12
  * Licensed under commercial license. See LICENSE.md in the package root for more information
13
13
  *-------------------------------------------------------------------------------------------
14
14
  */
15
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("prop-types"),require("@progress/kendo-date-math"),require("@progress/kendo-react-common"),require("@progress/kendo-react-data-tools"),require("@progress/kendo-react-treelist"),require("@progress/kendo-react-intl"),require("@progress/kendo-svg-icons"),require("@progress/kendo-react-buttons"),require("react-dom"),require("@progress/kendo-react-form"),require("@progress/kendo-react-dialogs"),require("@progress/kendo-react-labels"),require("@progress/kendo-react-inputs"),require("@progress/kendo-react-layout"),require("@progress/kendo-react-dateinputs"),require("@progress/kendo-react-dropdowns"),require("@progress/kendo-react-grid"),require("@progress/kendo-data-query")):"function"==typeof define&&define.amd?define(["exports","react","prop-types","@progress/kendo-date-math","@progress/kendo-react-common","@progress/kendo-react-data-tools","@progress/kendo-react-treelist","@progress/kendo-react-intl","@progress/kendo-svg-icons","@progress/kendo-react-buttons","react-dom","@progress/kendo-react-form","@progress/kendo-react-dialogs","@progress/kendo-react-labels","@progress/kendo-react-inputs","@progress/kendo-react-layout","@progress/kendo-react-dateinputs","@progress/kendo-react-dropdowns","@progress/kendo-react-grid","@progress/kendo-data-query"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).KendoReactGantt={},e.React,e.PropTypes,e.KendoDateMath,e.KendoReactCommon,e.KendoReactDataTools,e.KendoReactTreelist,e.KendoReactIntl,e.KendoSvgIcons,e.KendoReactButtons,e.ReactDOM,e.KendoReactForm,e.KendoReactDialogs,e.KendoReactLabels,e.KendoReactInputs,e.KendoReactLayout,e.KendoReactDateinputs,e.KendoReactDropdowns,e.KendoReactGrid,e.KendoDataQuery)}(this,(function(e,t,n,a,o,r,l,s,i,d,c,u,m,p,g,h,f,k,y,v){"use strict";function C(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var a=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,a.get?a:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var D=C(t),E=C(c);const b=r.TABLE_ROW_INDEX_ATTRIBUTE,I=r.TABLE_COL_INDEX_ATTRIBUTE,w=r.TABLE_PREVENT_SELECTION_ELEMENT,S=(new Date).getTime(),R={skeleton:"MEd"},T=100,x="data-dependency-drag-handle",F={[x]:"start"},N={[x]:"finish"},M="data-task-id",z={id:"id",start:"start",end:"end",title:"title",percentComplete:"percentComplete",parentId:"parentId",isRollup:"isRollup",isExpanded:"isExpanded",isInEdit:"isInEdit",children:"children",isSelected:"isSelected"},L={id:"id",fromId:"fromId",toId:"toId",type:"type"},W=r.orderBy,H=r.filterBy,K=o.mapTree,V=o.extendDataItem,O=l.createDataTree,A=e=>a.getDate(e),P=(e,t)=>a.getDate(a.addDays(e,t||1));function B(e){return new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()))}const G=(e,t,n,a)=>a?_(e,t,n):$(e,t,n),_=(e,t,n)=>{n.push({top:e-2,left:t}),n.push({top:e,left:t-4+1}),n.push({top:e+2,left:t}),n.push({top:e,left:t})},$=(e,t,n)=>{n.push({top:e+2,left:t}),n.push({top:e,left:t+4-1}),n.push({top:e-2,left:t}),n.push({top:e,left:t})},q=e=>{if(void 0===e.workWeekStart||void 0===e.workWeekEnd)return[];const t=[];let n=e.workWeekStart;for(t.push(n);e.workWeekEnd!==n;)n>6?n-=7:n++,t.push(n);return t},Z=(e,t)=>{const n=e.getDay();return t.indexOf(n)>-1},U=(e,{step:t,timezone:n})=>{const o=[],r=a.ZonedDate.fromLocalDate(e.start,n),l=a.ZonedDate.fromLocalDate(e.end,n);let s=r.clone();for(;s.getTime()<l.getTime();){const e=s.clone(),n=e.clone().addTime(t),a=new Date(e.getTime()),r={end:new Date(n.getTime()),start:a,zonedStart:e,zonedEnd:n};o.push(r),s=s.addTime(t)}return o},j=(e,t,n)=>U(e,{step:a.MS_PER_DAY,timezone:t.timezone}).map((e=>({range:e,isWork:Z(e.start,t.workDays),span:1,text:n.formatDate(e.zonedStart,R),type:"day"}))),Y=(e,t,n)=>((e,{timezone:t},n)=>{const o=[],r=a.ZonedDate.fromLocalDate(e.start,t),l=a.ZonedDate.fromLocalDate(e.end,t);for(let e=r.clone();e.getTime()<l.getTime();){const r=e.clone(),s=P(a.firstDayInWeek(a.getDate(r),n.firstDay()),7),i=a.ZonedDate.fromUTCDate(B(s),t),d=i.getTime()>l.getTime()?l.clone():i;e=d.clone();const c=new Date(r.getTime()),u={end:new Date(d.getTime()),start:c,zonedStart:r,zonedEnd:d};o.push(u)}return o})(e,{timezone:t.timezone},n).map((e=>{const t=Math.round((e.zonedEnd.getTime()-e.zonedStart.getTime())/a.MS_PER_DAY);return{range:e,isWork:!1,span:t,text:`${n.formatDate(e.zonedStart,R)} - ${n.formatDate(e.zonedEnd,R)}`,type:"week"}})),X=(e,t,n)=>((e,{timezone:t})=>{const n=[],o=a.ZonedDate.fromLocalDate(e.start,t),r=a.ZonedDate.fromLocalDate(e.end,t);for(let e=o.clone();e.getTime()<r.getTime();){const o=e.clone(),r=a.ZonedDate.fromLocalDate(a.addMonths(new Date(o.getTime()),1),t);e=r.clone();const l=new Date(o.getTime()),s={end:new Date(r.getTime()),start:l,zonedStart:o,zonedEnd:r};n.push(s)}return n})(e,{timezone:t.timezone}).map((e=>{const t=Math.round((e.zonedEnd.getTime()-e.zonedStart.getTime())/a.MS_PER_DAY);return{range:e,isWork:!1,span:t,text:n.formatDate(e.zonedStart,"MMM"),type:"month"}})),Q=(e,t,n)=>((e,{timezone:t})=>{const n=[],o=a.ZonedDate.fromLocalDate(e.start,t),r=a.ZonedDate.fromLocalDate(e.end,t);for(let e=o.clone();e.getTime()<r.getTime();){const o=e.clone(),r=a.ZonedDate.fromLocalDate(a.addMonths(new Date(o.getTime()),12),t);e=r.clone();const l=new Date(o.getTime()),s={end:new Date(r.getTime()),start:l,zonedStart:o,zonedEnd:r};n.push(s)}return n})(e,{timezone:t.timezone}).map((e=>{const t=Math.round((e.zonedEnd.getTime()-e.zonedStart.getTime())/a.MS_PER_DAY);return{range:e,isWork:!1,span:t,text:n.formatDate(e.zonedStart,"yyyy"),type:"year"}})),J=(e,t)=>!!o.getter(t)(e),ee=(e,t)=>!!o.getter(t)(e),te=D.createContext([]);te.displayName="KendoReactGanttTaskDataContext";const ne=D.createContext([]);ne.displayName="KendoReactGanttDependencyDataContext";const ae=D.createContext(z),oe=()=>D.useContext(ae);ae.displayName="KendoReactGanttTaskModelFieldsContext";const re=D.createContext(L),le=()=>D.useContext(re);re.displayName="KendoReactGanttDependencyModelFieldsContext";const se=D.createContext({}),ie=()=>D.useContext(se);se.displayName="KendoReactGanttPropsContext";const de=D.createContext({start:new Date,end:new Date,zonedStart:a.ZonedDate.fromLocalDate(new Date),zonedEnd:a.ZonedDate.fromLocalDate(new Date)}),ce=()=>D.useContext(de);de.displayName="KendoReactGanttDateRangeContext";const ue=D.createContext([]);ue.displayName="KendoReactGanttViewsContext";const me=D.createContext(["week",o.noop]),pe=()=>D.useContext(me);me.displayName="KendoReactGanttActiveViewContext";const ge=D.createContext(0),he=()=>D.useContext(ge);ge.displayName="KendoReactGanttRowHeightContext";const fe=D.createContext(0);fe.displayName="KendoReactGanttToolbarHeightContext";const ke=D.createContext({onDataStateChange:o.noop,onSortChange:o.noop,onFilterChange:o.noop,onColumnMenuFilterChange:o.noop,onExpandChange:o.noop,onRowClick:o.noop,onRowDoubleClick:o.noop,onRowContextMenu:o.noop,onColumnResize:o.noop,onColumnReorder:o.noop,onDependencyCreate:o.noop,onKeyDown:o.noop,onSelectionChange:o.noop,onHeaderSelectionChange:o.noop});ke.displayName="KendoReactGanttEventsContext";const ye=D.createContext({onTaskClick:o.noop,onTaskDoubleClick:o.noop,onTaskContextMenu:o.noop});ye.displayName="KendoReactGanttTaskEventsContext";const ve=({children:e,taskData:t,dependencyData:n,taskModelFields:a,dependencyModelFields:o,props:r,dateRange:l,views:s,activeView:i,rowHeight:d,toolbarHeight:c,events:u,taskEvents:m})=>D.createElement(se.Provider,{value:r},D.createElement(te.Provider,{value:t},D.createElement(ne.Provider,{value:n},D.createElement(ae.Provider,{value:a},D.createElement(re.Provider,{value:o},D.createElement(de.Provider,{value:l},D.createElement(ue.Provider,{value:s},D.createElement(me.Provider,{value:i},D.createElement(ge.Provider,{value:d},D.createElement(fe.Provider,{value:c},D.createElement(ke.Provider,{value:u},D.createElement(ye.Provider,{value:m},e))))))))))));ve.displayName="KendoReactGanttContext";const Ce=D.createContext([{current:{}},o.noop]),De=()=>D.useContext(Ce);Ce.displayName="KendoReactGanttViewContext";const Ee=D.createContext(0);Ee.displayName="KendoReactGanttViewTimelineWidthContext";const be=D.createContext({onDependencyHandlePress:o.noop,onDependencyHandleDrag:o.noop,onDependencyHandleRelease:o.noop,isEnabled:!1,draggedId:null});be.displayName="KendoReactGanttViewDependencyDragContext";const Ie=({children:e,tasksStore:t,timelineWidth:n,dependencyDrag:a})=>D.createElement(Ce.Provider,{value:t},D.createElement(Ee.Provider,{value:n},D.createElement(be.Provider,{value:a},e)));Ie.displayName="KendoReactGanttViewContext";var we=(e=>(e[e.add=0]="add",e[e.remove=1]="remove",e))(we||{});const Se=D.forwardRef(((e,t)=>{const n=ce(),a=oe(),r=D.useContext(Ee),l=D.useContext(be),s=D.useContext(ye),d=D.useRef(null),c=D.useRef(null);((e,t,n,a)=>{const r=D.useRef(null),[,l]=De();D.useImperativeHandle(r,(()=>({element:a.current,dataItem:e}))),D.useImperativeHandle(n,(()=>r.current)),o.useIsomorphicLayoutEffect((()=>{const e=r.current;if(e)return l({type:we.add,itemRef:e,id:t}),()=>{l({type:we.remove,itemRef:e,id:t})}}))})(e.dataItem,o.getter(a.id)(e.dataItem),t,d);const u=D.useRef(null),m=o.getter(a.id)(e.dataItem),p=o.getter(a.start)(e.dataItem),g=o.getter(a.end)(e.dataItem),h=o.getter(a.title)(e.dataItem),f=o.getter(a.percentComplete)(e.dataItem),k=o.getter(a.children)(e.dataItem),y=o.getter(a.isSelected)(e.dataItem),v=p&&p.getTime(),C=g&&g.getTime(),E=k&&k.length,b=!E&&v===C,I=v&&C&&((e,t,n,a)=>n<t&&e<=a)(n.start,n.end,p,g),[w,S]=D.useState(!1),R=D.useRef(null),T=D.useRef(null);o.useDraggable(R,{onPress:l.onDependencyHandlePress,onDrag:l.onDependencyHandleDrag,onRelease:l.onDependencyHandleRelease}),o.useDraggable(T,{onPress:l.onDependencyHandlePress,onDrag:l.onDependencyHandleDrag,onRelease:l.onDependencyHandleRelease});const x=D.useCallback((t=>{s.onTaskClick&&s.onTaskClick({dataItem:e.dataItem,level:e.level,nativeEvent:t&&t.nativeEvent,syntheticEvent:t,target:null})}),[e.dataItem,e.level]),z=D.useCallback((t=>{s.onTaskDoubleClick&&s.onTaskDoubleClick({dataItem:e.dataItem,level:e.level,nativeEvent:t&&t.nativeEvent,syntheticEvent:t,target:null})}),[e.dataItem,e.level]),L=D.useCallback((t=>{s.onTaskContextMenu&&s.onTaskContextMenu({dataItem:e.dataItem,level:e.level,nativeEvent:t&&t.nativeEvent,syntheticEvent:t,target:null})}),[e.dataItem,e.level]),W=D.useCallback((t=>{s.onTaskRemoveClick&&s.onTaskRemoveClick({dataItem:e.dataItem,level:e.level,nativeEvent:t&&t.nativeEvent,syntheticEvent:t,target:null})}),[e.dataItem,e.level]),H=D.useCallback((()=>{const e=n.start,t=n.end,a=u.current,o=d.current,r=c.current;if(!I||null===a||null===o)return;const l=a.clientWidth/(t.getTime()-e.getTime()),s=(p.getTime()-e.getTime())*l,i=(g.getTime()-p.getTime())*l,m=(a.offsetHeight-o.offsetHeight)/2;o.style.left=`${Math.round(b?s-6:s)}px`,o.style.top=`${Math.round(m)}px`,b||(o.style.width=`${Math.round(i)}px`,null!==r&&(r.style.width=`${Math.round(i*(f||0))}px`)),S(!0)}),[n.start.getTime(),n.end.getTime(),v,C,I,f,r]);D.useEffect(H,[H]);const K={visibility:w?void 0:"hidden",display:I?void 0:"none"},V={userSelect:"none",display:l.draggedId===String(m)?"block":void 0};return D.createElement("td",{ref:u,key:m,role:"presentation"},b?D.createElement("div",{"aria-hidden":!0,className:o.classNames({"k-task":!0,"k-task-milestone":!0,"k-selected":y&&!Array.isArray(y)}),style:K,ref:d,[M]:m,onClick:x,onDoubleClick:z,onContextMenu:L},D.createElement("div",{className:"k-task-milestone-content"}),l.isEnabled&&D.createElement("div",{className:"k-task-dot k-task-start",ref:R,style:V,...F}),l.isEnabled&&D.createElement("div",{className:"k-task-dot k-task-end",ref:T,style:V,...N})):D.createElement("div",{"aria-hidden":!0,className:o.classNames({"k-task":!0,"k-task-summary":E,"k-task-single":!E,"k-selected":y&&!Array.isArray(y)}),ref:d,style:K,[M]:m,onClick:x,onDoubleClick:z,onContextMenu:L},E?D.createElement("div",{className:"k-task-summary-progress",ref:c},D.createElement("div",{className:"k-task-summary-complete"})):D.createElement("div",{className:"k-task-complete",ref:c}),!E&&D.createElement(D.Fragment,null,D.createElement("div",{className:"k-task-content"},h),s.onTaskRemoveClick?D.createElement("span",{className:"k-task-actions"},D.createElement("span",{onClick:W,className:"k-link k-task-delete","aria-label":"Delete"},D.createElement(o.IconWrap,{name:"x",icon:i.xIcon}))):null),l.isEnabled&&D.createElement("div",{className:"k-task-dot k-task-start",ref:R,style:V,...F}),l.isEnabled&&D.createElement("div",{className:"k-task-dot k-task-end",ref:T,style:V,...N})))}));Se.displayName="KendoReactGanttTask";const Re=e=>{const{dependency:t}=e,[n]=De(),a=D.useRef(null),r=le(),l=he(),[s,i]=D.useState(!1);return D.useEffect((()=>{if(null===a.current||null===n.current)return void i(!1);const e=n.current[o.getter(r.fromId)(t)],d=n.current[o.getter(r.toId)(t)];if(!e||!d)return void i(!1);const c=e.element,u=d.element;if(!c||!u)return void i(!1);if(!1===s)return void i(!0);const m={top:c.offsetTop+c.offsetHeight/2,start:c.offsetLeft,end:c.offsetLeft+c.offsetWidth},p={top:u.offsetTop+u.offsetHeight/2,start:u.offsetLeft,end:u.offsetLeft+u.offsetWidth},g=o.getter(r.type)(t),h=((e,t,n,a)=>{const o=[];let r=0,l=0;const s=10,i=Math.floor(n/2),d=e.top<t.top,c=()=>o.push({left:l,top:r});if(0===a||3===a){const n=3===a?"start":"end";r=e.top,l=e[n],c(),l=Math["start"===n?"min":"max"](e[n],t[n]),l="start"===n?l-s:l+s,c(),r=t.top,c(),l="start"===n?t[n]-4:t[n]+4,c(),G(r,l,o,"start"!==n)}else{const n=2===a?"start":"end",u=2===a?"end":"start",m=2===a?e[n]-20>=t[u]:e[n]+20<=t[u];r=e.top,l=e[n],c(),l="start"===n?l-s:l+s,c(),m||(r=d?r+i:r-i,c(),l="start"===n?t[u]+s:t[u]-s,c()),r=t.top,c(),l="start"===u?t[u]-4:t[u]+4,c(),G(r,l,o,"start"!==u)}return o})(m,p,l,g);h&&h.length&&a.current.setAttribute("points",h.map((e=>`${e.left},${e.top}`)).join(" "))})),D.createElement("polyline",{ref:a,style:{display:s?void 0:"none"}})};Re.displayName="KendoReactGanttDependency";const Te=class extends D.Component{constructor(e){super(e),this.state={activeId:void 0,level:0},this.tableElement=null,this.tbodyElement=null,this.wrapperScrollLeft=0,this.wrapperScrollTop=0,this.updateOnScroll=!1,this.tbodyOffsetTop=0,this.prevData=[],this.flattedData=[],this.element=null,this.contextStateRef={current:void 0},this.navigationStateRef={current:void 0},this.scrollIntoView=e=>{if(!this.element)return;const{rowIndex:t=0}=e,{rowHeight:n=0}=this.props;this.element.scroll(0,(t-1)*n)},this.getColumns=e=>{const t=e.filter((e=>e.declarationIndex>=0&&-1===e.parentIndex)),n=e=>(e.sort(((e,t)=>e.declarationIndex-t.declarationIndex)),e.map((e=>{const{declarationIndex:t,parentIndex:a,depth:o,colSpan:r,rowSpan:l,index:s,kFirst:i,groupable:d,children:c,...u}=e;return c.length?{children:n(c),...u}:u})));return n(t)},this.onKeyDown=e=>{if(r.tableKeyboardNavigation.onKeyDown(e,{navigatable:!1,contextStateRef:this.contextStateRef,navigationStateRef:this.navigationStateRef}),this.props.onKeyDown){const{mode:t,cell:n}=r.getSelectionOptions(this.props.selectable),a={dataItems:this.getLeafDataItems(),mode:t,cell:n,componentId:this.props.treelistId,selectedField:this.props.selectedField,...this.getEventArguments(e)};this.props.onKeyDown.call(void 0,a)}},this.onFocus=e=>{r.tableKeyboardNavigation.onFocus(e,{contextStateRef:this.contextStateRef})},this.onRowDrag=e=>{if(this.props.onRowDrag){const t={...e,target:this};this.props.onRowDrag.call(void 0,t)}},this.onRowDrop=e=>{if(this.props.onRowDrop){const t={...e,target:this};this.props.onRowDrop.call(void 0,t)}},this.onColumnReorder=(e,t,n)=>{const{extendedColumns:a}=this.props,o=a[e].depth,r=e=>{do{e++}while(e<a.length&&a[e].depth>o);return e},l=[...a],s=l.splice(e,r(e)-e);if(l.splice(e<t?r(t-s.length):t,0,...s),l.filter((e=>e.declarationIndex>=0)).forEach(((e,t)=>e.orderIndex=t)),this.props.onColumnReorder){const e={target:this,columns:this.getColumns(l),nativeEvent:n};this.props.onColumnReorder.call(void 0,e)}},this.onColumnResize=(e,t,n,a,o)=>{if(this.props.onColumnResize){const r=this.props.extendedColumns.filter((e=>0===e.children.length)).reduce(((e,t)=>e+parseFloat(String(t.width))),0);this.tableElement&&(this.tableElement.style.width=r+"px");const l={columns:this.getColumns(this.props.extendedColumns),totalWidth:r,index:e,nativeEvent:a,newWidth:t,oldWidth:n,end:o,target:this};this.props.onColumnResize.call(void 0,l)}},this.onScroll=e=>{const t=e.currentTarget.scrollLeft,n=e.currentTarget.scrollTop,{columnVirtualization:a,scrollable:o,rowHeight:r=0}=this.props,l=r;let s=!1;a&&Math.abs(this.wrapperScrollLeft-t)>0&&(this.wrapperScrollLeft=t,s=!0),"virtual"===o&&Math.abs(this.wrapperScrollTop-n)>l&&(this.wrapperScrollTop=n,s=!0),s&&(this.updateOnScroll=!0,this.forceUpdate())},this.calculateSizes=e=>{if(!e||"none"===this.props.scrollable)return;const t=Array.from(e.childNodes),n=t.find((e=>"TABLE"===e.nodeName)),a=this.props.toolbar&&t.find((e=>1===e.nodeType&&e.classList.contains("k-grid-toolbar")));let o=0;if(a){const e=a.style.boxSizing;a.style.boxSizing="border-box",o=parseFloat(String(window.getComputedStyle(a).height))||a.offsetHeight,a.style.boxSizing=e,a.getAttribute("style")||a.removeAttribute("style")}this.tbodyOffsetTop=n.tBodies[0].offsetTop,l.setHeaderRowsTop(n,o)},this.onItemChange=e=>{if(e.field!==this.props.expandField){if(this.props.onItemChange){const t={...this.getEventArguments(e.syntheticEvent),dataItem:e.dataItem,level:e.level,field:e.field,value:e.value};this.props.onItemChange.call(void 0,t)}}else{const t=this.props.onExpandChange;if(t){const n={...this.getEventArguments(e.syntheticEvent),dataItem:e.dataItem,level:e.level,value:e.value};t.call(void 0,n)}}},this.onHeaderSelectionChange=e=>{if(this.props.onHeaderSelectionChange){const t={field:e.field,nativeEvent:e.syntheticEvent&&e.syntheticEvent.nativeEvent,syntheticEvent:e.syntheticEvent,target:this,dataItems:this.getLeafDataItems()};this.props.onHeaderSelectionChange.call(void 0,t)}},this.selectionRelease=e=>{if(this.props.onSelectionChange){const t={syntheticEvent:void 0,target:this,selectedField:this.props.selectedField||"",componentId:this.props.treelistId,dataItems:this.getLeafDataItems(),dataItem:null,level:[],...e};this.props.onSelectionChange.call(void 0,t)}},this.onSortChange=(e,t,n)=>{this.onDataStateChange(this.props.onSortChange,{sort:t,field:n},e)},this.onFilterChange=e=>{const{filter:t,field:n}=e;this.onDataStateChange(this.props.onFilterChange,{filter:t,field:n},e.syntheticEvent)},this.onColumnMenuFilterChange=(e,t,n)=>{if(!n)return;const{onColumnMenuFilterChange:a}=this.props;if(!a)return;const o={syntheticEvent:e,filter:t,field:n,target:this,nativeEvent:e.nativeEvent};a.call(void 0,o)},this.onExpandChange=(e,t,n)=>{const{expandField:a,onExpandChange:o}=this.props;if(a&&o){const a={...this.getEventArguments(e),dataItem:t,level:n,value:J(t,this.props.expandField)};o.call(void 0,a)}},this.onRowClick=(e,t)=>{if(this.props.onRowClick&&"TD"===e.target.nodeName){const n={dataItem:t.dataItem,level:t.level,...this.getEventArguments(e)};this.props.onRowClick.call(void 0,n)}},this.rowDoubleClick=(e,t)=>{if(this.props.onRowDoubleClick&&"TD"===e.target.nodeName){const n={dataItem:t.dataItem,level:t.level,...this.getEventArguments(e)};this.props.onRowDoubleClick.call(void 0,n)}},this.rowContextMenu=(e,t)=>{if(this.props.onRowContextMenu&&"TD"===e.target.nodeName){const n={dataItem:t.dataItem,level:t.level,...this.getEventArguments(e)};this.props.onRowContextMenu.call(void 0,n)}},this.onPageChange=e=>{if(this.props.onPageChange){const t={...this.getEventArguments(e.syntheticEvent),skip:e.skip,take:e.take};this.props.onPageChange.call(void 0,t)}},this.onDataStateChange=(e,t,n)=>{if(e&&e.call(void 0,{...this.getEventArguments(n),...t}),this.props.onDataStateChange){const e={...this.getEventArguments(n),dataState:{...this.getDataState(),...t}};this.props.onDataStateChange.call(void 0,e)}},this.getDataState=()=>({filter:this.props.filter,sort:this.props.sort}),this.getEventArguments=e=>({nativeEvent:e&&e.nativeEvent,syntheticEvent:e,target:this}),this.getLeafDataItems=()=>this.flatData.map((e=>e.dataItem)),this.dragLogic=new r.CommonDragLogic(this.onColumnReorder,o.noop,o.noop),this.columnResize=new r.ColumnResize(this.onColumnResize),r.tableKeyboardNavigation.onConstructor({navigatable:!!e.navigatable,contextStateRef:this.contextStateRef,navigationStateRef:this.navigationStateRef,idPrefix:e.idPrefix})}get document(){if(o.canUseDOM)return this.element&&this.element.ownerDocument||document}componentDidMount(){this.calculateSizes(this.element),r.tableKeyboardNavigation.onComponentDidMount({scope:this.element||void 0,contextStateRef:this.contextStateRef,navigationStateRef:this.navigationStateRef})}getSnapshotBeforeUpdate(){return r.tableKeyboardNavigation.onGetSnapshotBeforeUpdate({document:this.document,contextStateRef:this.contextStateRef,navigationStateRef:this.navigationStateRef}),null}componentDidUpdate(e){e.columns!==this.props.columns&&this.calculateSizes(this.element),r.tableKeyboardNavigation.onComponentDidUpdate({scope:this.element||void 0,contextStateRef:this.contextStateRef,navigationStateRef:this.navigationStateRef})}componentWillUnmount(){this.columnResize.columns=[],this.dragLogic.columns=[],this.prevData=[],this.flattedData=[],this.updateOnScroll=!1}render(){const{filterRow:e,scrollable:t="scrollable",resizable:n=!1,reorderable:a=!1,skip:s,take:i,afterContent:d,extendedColumns:c=[],columnsMap:u}=this.props,m=c.some((e=>!!e.filter))||void 0!==e,p=e||r.FilterRow,g=r.tableKeyboardNavigationTools.getIdPrefix(this.navigationStateRef);this.columnResize.columns=c,this.columnResize.resizable=n,this.dragLogic.columns=c,this.dragLogic.reorderable=a,this.dragLogic.groupable=!1;const h=c.filter((e=>0===e.children.length)),f=D.createElement(r.Header,{headerRow:D.createElement(r.HeaderRow,{sort:this.props.sort,sortable:this.props.sortable,sortChange:this.onSortChange,selectionChange:this.onHeaderSelectionChange,columns:c,columnsMap:u,cellRender:this.props.headerCellRender,columnResize:this.columnResize,columnMenu:this.props.columnMenu,columnMenuFilter:this.props.columnMenuFilter,columnMenuFilterChange:this.onColumnMenuFilterChange,pressHandler:this.dragLogic.pressHandler,dragHandler:this.dragLogic.dragHandler,releaseHandler:this.dragLogic.releaseHandler}),filterRow:m&&D.createElement(p,{columns:h,filter:this.props.filter,filterChange:this.onFilterChange,sort:this.props.sort,ariaRowIndex:u.length+1})||void 0,columnResize:this.columnResize}),k=this.props.style||{},{colSpans:y,hiddenColumns:v}=r.tableColumnsVirtualization({enabled:this.props.columnVirtualization,columns:h,scrollLeft:this.wrapperScrollLeft,tableViewPortWidth:parseFloat((k.width||"").toString())}),C=(e,t,n,a,o,s)=>h.map(((i,d)=>{if(v[d])return null;const c=i.id?i.id:d,u=`k-table-td ${i.className?i.className+" ":""}${i.locked?"k-grid-content-sticky":""}`,m={id:r.tableKeyboardNavigationTools.generateNavigatableId(`${n}-${String(d)}`,g),colSpan:y[d],dataItem:e.dataItem,field:i.field,format:i.format,className:u||void 0,render:this.props.cellRender,onChange:this.onItemChange,selectionChange:this.props.onSelectionChange?t=>{this.onSelectionChange({event:t,item:e,columnIndex:d,dataIndex:o})}:void 0,level:e.level,expandable:i.expandable,expanded:a,hasChildren:ee(e.dataItem,this.props.subItemsField),colIndex:d,ariaColumnIndex:i.ariaColumnIndex,onExpandChange:this.onExpandChange,style:void 0!==i.left&&{left:i.left,right:i.right,borderRightWidth:i.rightBorder?"1px":""}||{},isSelected:Array.isArray(s)&&s.indexOf(d)>-1};return t&&i.editCell?D.createElement(i.editCell,{...m,onChange:this.onItemChange,key:c}):i.cell?D.createElement(i.cell,{key:c,...m}):D.createElement(l.TreeListCell,{key:c,...m})}));let E=this.flatData;const b=E.length;void 0!==s&&void 0!==i&&(E=E.slice(s,s+i)),"virtual"===t&&(E=l.tableRowsVirtualization({rows:E,tableViewPortHeight:parseFloat((k.height||k.maxHeight||"").toString()),scrollTop:this.wrapperScrollTop}),this.updateOnScroll=!1);const I=E.map((e=>e.level)),w=u.length+(m?1:0)+1,S=E.length>0&&E.map(((e,t)=>{const n=o.getter(this.props.editField||"")(e.dataItem),a=o.getter(this.props.dataItemKey)(e.dataItem),r=String(a||e.level.join(".")),s=J(e.dataItem,this.props.expandField),i=this.props.selectedField?o.getter(this.props.selectedField)(e.dataItem):void 0,d={key:r,level:e.level,levels:I,dataItem:e.dataItem,selectedField:this.props.selectedField,rowHeight:e.height,render:this.props.rowRender,onDrop:this.onRowDrop,onDrag:this.onRowDrag,onClick:t=>this.onRowClick(t,e),onDoubleClick:t=>this.rowDoubleClick(t,e),onContextMenu:t=>this.rowContextMenu(t,e),isAltRow:t%2!=0,expanded:s,rowIndex:t,ariaRowIndex:w+t,ariaSetSize:e.levelCount,ariaPosInSet:e.level[e.level.length-1]+1,isSelected:"boolean"==typeof i&&i},c=this.props.editRow,u=this.props.row||l.TreeListRow,m=C(e,n,r,s,t,i);return n&&c?D.createElement(c,{...d,key:d.key},m):D.createElement(u,{...d,key:d.key},m)}))||D.createElement("tr",{className:"k-table-row k-grid-norecords"},D.createElement("td",{className:"k-table-td",colSpan:h.length},this.props.noRecords||D.createElement(l.TreeListNoRecords,null))),R=e=>this.props.sort&&this.props.sort.some((t=>t.field===e)),T=D.createElement("colgroup",{ref:e=>{this.columnResize.colGroupMain=e}},h.map(((e,t)=>D.createElement("col",{key:t.toString(),className:R(e.field)?"k-sorted":void 0,style:void 0!==e.width?{width:e.width}:void 0})))),x=this.props.columnVirtualization||"virtual"===this.props.scrollable,F=this.props.selectable&&this.props.selectable.drag?"none":void 0,N=this.props.tableProps||{};return D.createElement(r.TableKeyboardNavigationContext.Provider,{value:this.contextStateRef.current},D.createElement("div",{id:this.props.treelistId,style:this.props.style,className:o.classNames("k-grid k-grid-md",this.props.className,{"k-treelist-scrollable":"none"!==t}),ref:e=>{this.element=e},onScroll:x?this.onScroll:void 0,onKeyDown:this.onKeyDown,onFocus:this.onFocus,"aria-rowcount":b,"aria-colcount":h.length,role:"treegrid",...r.tableKeyboardNavigationScopeAttributes},this.props.toolbar,D.createElement(r.TableSelection,{selectable:this.props.selectable,onRelease:this.selectionRelease,childRef:e=>{this.tableElement=e}},D.createElement("table",{className:"k-table k-table-md",...this.props.tableProps||{},style:{...N.style||{},userSelect:F},role:"presentation"},T,f,D.createElement("tbody",{className:"k-table-tbody",...r.tableKeyboardNavigationBodyAttributes,ref:e=>{this.tbodyElement=e},role:"presentation"},S))),this.props.pager&&D.createElement(this.props.pager,{className:"k-grid-pager",total:b,skip:s,take:i,onPageChange:this.onPageChange}),a&&D.createElement(D.Fragment,null,D.createElement(r.DropClue,{ref:this.dragLogic.refDropElementClue}),D.createElement(r.DragClue,{ref:this.dragLogic.refDragElementClue})),d))}get flatData(){const{data:e=[],rowHeight:t=0}=this.props;let n=0;const a=()=>{const e={height:t,offsetTop:n};return n+=e.height,e},o=this.updateOnScroll&&this.prevData===e&&this.tbodyOffsetTop>0&&this.flattedData.length?this.flattedData:e.map((e=>({...e,...a()})));return this.prevData=e,this.flattedData=o,o}onSelectionChange(e){if(this.props.onSelectionChange){const{event:t,item:n,dataIndex:a,columnIndex:o}=e,{mode:l,cell:s}=r.getSelectionOptions(this.props.selectable),i={...this.getEventArguments(t.syntheticEvent),dataItem:n.dataItem,level:n.level,startColIndex:o,endColIndex:o,startRowIndex:a,endRowIndex:a,dataItems:this.getLeafDataItems(),altKey:!1,ctrlKey:!1,shiftKey:!1,metaKey:!1,mode:l,cell:s,isDrag:!1,componentId:this.props.treelistId,selectedField:this.props.selectedField||""};this.props.onSelectionChange.call(void 0,i)}}};Te.propTypes={data:n.array,resizable:n.bool,reorderable:n.bool,sortable:n.oneOfType([n.bool,n.shape({mode:n.oneOf(["single","multiple"]),allowUnsort:n.bool})]),onSortChange:n.func,sort:n.array,columns:n.arrayOf(n.object),columnVirtualization:n.bool,filter:n.array,onFilterChange:n.func,filterRow:n.any,toolbar:n.any,noRecords:n.any,onExpandChange:n.func,expandField:n.string,subItemsField:n.string,selectedField:n.string,onSelectionChange:n.func,onHeaderSelectionChange:n.func,onRowClick:n.func,onItemChange:n.func,editField:n.string,scrollable:n.oneOf(["none","scrollable","virtual"]),rowHeight:n.number,style:n.object,tableProps:n.object,pager:n.any,skip:n.number,take:n.number,onPageChange:n.func,onDataStateChange:n.func,onColumnResize:n.func,onColumnReorder:n.func,extendedColumns:n.arrayOf(n.object),columnsMap:n.arrayOf(n.array),dataItemKey:n.string.isRequired,afterContent:n.any,navigatable:n.bool,idPrefix:n.string,treelistId:n.string},Te.contextType=r.TableKeyboardNavigationContext;let xe=Te;const Fe=D.forwardRef(((e,t)=>{const{slotLevels:n,slotWidth:a,timelineHeaderCell:l}=e,{columns:s,noRecords:i,resizable:d,reorderable:c,sortable:u,sort:m,filter:p,columnMenuFilter:g,columnMenu:h,navigatable:f,row:k,selectable:y}=ie(),{onDataStateChange:v,onSortChange:C,onFilterChange:E,onColumnMenuFilterChange:b,onExpandChange:I,onRowClick:w,onRowDoubleClick:S,onRowContextMenu:R,onColumnResize:F,onColumnReorder:N,onDependencyCreate:z,onKeyDown:L,onSelectionChange:W,onHeaderSelectionChange:H}=D.useContext(ke),K=he(),V=D.useContext(fe),O=oe(),A=le(),P=D.useContext(te),B=D.useContext(ne),G=D.useRef(null),_=D.useRef(null),$=D.useRef(null),q=D.useRef(null),Z=D.useRef(0),U=D.useRef(o.useId()),j=D.useRef(o.useId()),Y=D.useRef(null),X=D.useRef(null),Q=D.useCallback((e=>{$.current&&$.current.scrollIntoView(e)}),[]);D.useImperativeHandle(X,(()=>({scrollIntoView:Q}))),D.useImperativeHandle(t,(()=>X.current));const J=D.useRef(0),ee=D.useRef(0),ae=D.useRef(0),re=D.useRef(0),se=D.useRef(null),de=D.useRef(null),[ce,ue]=D.useState(null),me=((e,t,n)=>{const a=n;return D.createElement("table",{className:"k-table k-table-md",ref:t,"aria-hidden":!0},D.createElement("tbody",{className:"k-table-tbody"},e.map(((e,t)=>D.createElement("tr",{className:"k-table-row",key:t},e.map(((e,n)=>D.createElement("td",{key:e.range.start.getTime(),colSpan:e.span,className:o.classNames("k-table-th",{"k-header":!0,"k-nonwork-hour":!e.isWork})},a?D.createElement(a,{rowIndex:t,index:n,range:e.range,text:e.text,isWork:e.isWork,type:e.type}):e.text))))))))})(n,G,l),pe=((e,t)=>{const n=e[e.length-1];return D.createElement("table",{className:"k-table k-table-md k-gantt-columns",ref:t,"aria-hidden":!0},D.createElement("tbody",{className:"k-table-tbody"},D.createElement("tr",{className:"k-table-row"},n.map((e=>D.createElement("td",{key:e.range.start.getTime(),colSpan:e.span,className:o.classNames("k-table-td",{"k-nonwork-hour":!e.isWork})}))))))})(n,_),ge=((e,t)=>{const n=e[e.length-1];let a=0,o=0;return n.forEach((e=>{const t=e.span;o+=t,t>a&&(a=t)})),Math.round(o*t/a)})(n,a),{extendedColumns:ye,columnsWidth:ve,columnsMap:Ce}=D.useMemo((()=>{const e=r.readColumns([...s,{title:"",sortable:!1,resizable:!1,reorderable:!1,width:ge,headerCell:()=>me,cell:Se,orderIndex:Number.MAX_SAFE_INTEGER,navigatable:!1}],{prevId:0,idPrefix:U.current});let t=0;return e.forEach(((e,n,a)=>{const o=n+1===a.length,r=0===e.children.length;o?e.isAccessible=!1:(e.locked=!0,r&&(e.width=e.width||T)),r&&(t+=parseFloat(String(e.width)))})),{extendedColumns:e,columnsWidth:t,columnsMap:r.mapColumns(e)}}),[s,ge]),[De,Ee]=(()=>{const e=D.useRef({}),t=D.useCallback((t=>{switch(t.type){case 0:e.current[t.id]=t.itemRef;break;case 1:delete e.current[t.id]}}),[]);return[e,t]})(),be=D.useCallback((()=>G.current&&G.current.parentElement),[]),we=()=>{const e=be(),t=_.current,n=$.current&&$.current.tbodyElement;if(!e||!t||!n)return;const a=n.offsetTop,o=e.offsetLeft,r=ge;t.style.top=a+"px",t.style.left=o+"px",t.style.width=r+"px",t.style.height=n.offsetHeight+"px"};D.useEffect(we),D.useEffect((()=>{const e=be();e&&(Z.current=e.offsetLeft)}));const Te=D.useCallback((e=>{if(!q.current)return;const t=e.columns.slice(0,e.columns.length-1);if(e.end)q.current.style.left="0px";else{const e=be();if(!e)return;q.current.style.left=e.offsetLeft-Z.current+"px",we()}F({...e,columns:t})}),[F]),Fe=D.useCallback((e=>{const t=e.columns.slice(0,e.columns.length-1);N({...e,columns:t})}),[F]),Ne=D.useCallback((e=>{const t=(Y.current&&Y.current.ownerDocument?Y.current.ownerDocument:document).elementFromPoint(e.clientX,e.clientY),n=Y.current;if(!t||!t.parentElement||!n)return;const a=n.parentElement,o=n.firstElementChild;if(!a||!o)return;const r=t.getAttribute(x);if(r){const l=n.offsetTop,s=n.offsetLeft,i=a.offsetTop,d=a.offsetLeft,c=o.scrollTop,u=o.scrollLeft;ae.current=s+d,re.current=l+i,J.current=e.clientX-ae.current+u,ee.current=e.clientY-re.current+c,se.current=t.parentElement.getAttribute(M),de.current=r}}),[]),Me=D.useCallback((e=>{const t=Y.current;if(!t)return;const n=t.firstElementChild;if(!n)return;const a=n.scrollTop,o=n.scrollLeft,r=e.clientX-ae.current+o,l=e.clientY-re.current+a;Math.abs(J.current-r)<10&&Math.abs(ee.current-l)<10||ue({startX:J.current,startY:ee.current,endX:r,endY:l})}),[]),ze=D.useCallback((e=>{const t=(Y.current&&Y.current.ownerDocument?Y.current.ownerDocument:document).elementFromPoint(e.clientX,e.clientY);if(!t||!t.parentElement)return;const n=t.parentElement.getAttribute(M),a=t.getAttribute(x);if(a&&n!==se.current&&z){let e;e="start"===de.current?"start"===a?3:2:"start"===a?1:0,z({fromId:se.current,toId:n,type:e})}J.current=0,ee.current=0,ae.current=0,re.current=0,se.current=null,de.current=null,ue(null)}),[z,ue]);return D.createElement(Ie,{tasksStore:[De,Ee],timelineWidth:ge,dependencyDrag:{isEnabled:!!z,draggedId:se.current,onDependencyHandlePress:Ne,onDependencyHandleDrag:Me,onDependencyHandleRelease:ze}},D.createElement("div",{className:"k-gantt-content",ref:Y,style:{height:`calc(100% - ${V}px)`}},D.createElement(xe,{treelistId:j.current,ref:$,extendedColumns:ye,columnsMap:Ce,dataItemKey:O.id,data:P,idPrefix:U.current,navigatable:f,expandField:O.isExpanded,subItemsField:O.children,editField:O.isInEdit,selectedField:O.isSelected,onDataStateChange:v,onSortChange:C,onFilterChange:E,onExpandChange:I,onRowClick:w,onRowDoubleClick:S,onRowContextMenu:R,onColumnResize:Te,onColumnReorder:Fe,onColumnMenuFilterChange:b,onKeyDown:L,onSelectionChange:W,onHeaderSelectionChange:H,tableProps:{style:{width:ve},className:"k-table k-table-md k-table-layout-fixed"},noRecords:i,rowHeight:K,resizable:d,reorderable:c,sortable:u,sort:m,filter:p,columnMenuFilter:g,columnMenu:h,row:k,selectable:y,afterContent:D.createElement(D.Fragment,null,D.createElement("svg",{className:"k-gantt-dependencies-svg",ref:q,style:{left:0,top:0}},B.map((e=>D.createElement(Re,{key:o.getter(A.id)(e),dependency:e})))),D.createElement("svg",{className:"k-gantt-dependencies-svg",style:{left:0,top:0,zIndex:3}},ce&&D.createElement("polyline",{points:`${ce.startX},${ce.startY} ${ce.endX},${ce.endY}`})),P&&P.length?pe:null)})))}));Fe.displayName="KendoReactGanttBaseView";const Ne="gantt.weekViewTitle",Me="gantt.dayViewTitle",ze="gantt.monthViewTitle",Le="gantt.yearViewTitle",We="gantt.filterClearButton",He="gantt.filterEqOperator",Ke="gantt.filterNotEqOperator",Ve="gantt.filterIsNullOperator",Oe="gantt.filterIsNotNullOperator",Ae="gantt.filterIsEmptyOperator",Pe="gantt.filterIsNotEmptyOperator",Be="gantt.filterStartsWithOperator",Ge="gantt.filterContainsOperator",_e="gantt.filterNotContainsOperator",$e="gantt.filterEndsWithOperator",qe="gantt.filterGteOperator",Ze="gantt.filterGtOperator",Ue="gantt.filterLteOperator",je="gantt.filterLtOperator",Ye="gantt.filterIsTrue",Xe="gantt.filterIsFalse",Qe="gantt.filterBooleanAll",Je="gantt.filterAfterOrEqualOperator",et="gantt.filterAfterOperator",tt="gantt.filterBeforeOperator",nt="gantt.filterBeforeOrEqualOperator",at="gantt.editSave",ot="gantt.editCancel",rt="gantt.editAdd",lt="gantt.editRemove",st="gantt.editTabGeneral",it="gantt.editTabPredecessors",dt="gantt.editTabSuccessors",ct="gantt.editorTitle",ut="gantt.editorTaskTitle",mt="gantt.editorTaskStart",pt="gantt.editorTaskEnd",gt="gantt.editorTaskComplete",ht="gantt.editorTaskParent",ft="gantt.editorValidationRequired",kt="gantt.editorValidationStart",yt="gantt.editorValidationEnd",vt="gantt.editorValidationPercentCompleteRange",Ct="gantt.editorDependencyTypesFF",Dt="gantt.editorDependencyTypesSF",Et="gantt.editorDependencyTypesFS",bt="gantt.editorDependencyTypesSS",It="gantt.addTask",wt="gantt.addChild",St="gantt.addAbove",Rt="gantt.addBelow",Tt="gantt.viewSelector",xt="gantt.editorDelete",Ft="gantt.deleteConfirmation",Nt="gantt.deleteDialogTitle",Mt="gantt.editorDependencyNameLabel",zt="gantt.editorDependencyTypeLabel",Lt={[Ne]:"Week",[Me]:"Day",[ze]:"Month",[Le]:"Year",[We]:"Clear",[He]:"Is equal to",[Ke]:"Is not equal to",[Ve]:"Is null",[Oe]:"Is not null",[Ae]:"Is empty",[Pe]:"Is not empty",[Be]:"Starts with",[Ge]:"Contains",[_e]:"Does not contain",[$e]:"Ends with",[qe]:"Is greater than or equal to",[Ze]:"Is greater than",[Ue]:"Is less than or equal to",[je]:"Is less than",[Ye]:"Is true",[Xe]:"Is false",[Qe]:"(All)",[Je]:"Is after or equal to",[et]:"Is after",[tt]:"Is before",[nt]:"Is before or equal to","gantt.noRecords":"No records available",[at]:"Save",[ot]:"Cancel",[rt]:"Add",[lt]:"Remove",[st]:"General",[it]:"Predecessors",[dt]:"Successors",[ct]:"Edit task",[ut]:"Title",[mt]:"Start",[pt]:"End","gantt.editorTaskPlannedStart":"Planned Start Date","gantt.editorTaskPlannedEnd":"Planned End Date","gantt.editorTaskActualStart":"Actual Start Date","gantt.editorTaskActualEnd":"Actual End Date",[gt]:"Complete",[ht]:"Parent",[ft]:"Field is required.",[kt]:"Start time must be be before End time.",[yt]:"End time must be after Start time.",[vt]:"Value should be between 0 and 100.",[Ct]:"Finish-Finish",[Et]:"Finish-Start",[Dt]:"Start-Finish",[bt]:"Start-Start",[It]:"Add Task",[wt]:"Add Child",[St]:"Add Above",[Rt]:"Add Below",[Tt]:"View Selector",[xt]:"Delete",[Ft]:"Are you sure you want to delete this event?",[Nt]:"Delete Event",[Mt]:"Name",[zt]:"Type"},Wt=D.forwardRef(((e,t)=>{const{slotWidth:n=Ht.slotWidth,firstSlotRangeRef:a,timelineHeaderCell:o}=e,{timezone:r}=ie(),l=s.useInternationalization(),i=D.useRef(null),d=D.useRef(null),c=D.useCallback((e=>{d.current&&d.current.scrollIntoView(e)}),[]);D.useImperativeHandle(i,(()=>({scrollIntoView:c}))),D.useImperativeHandle(t,(()=>i.current));const u=ce(),m=e.workWeekStart||Ht.workWeekStart,p=e.workWeekEnd||Ht.workWeekEnd,g=D.useMemo((()=>{const e=q({workWeekStart:m,workWeekEnd:p}),t=[],n=Y(u,{timezone:r},l);return n.forEach((n=>{const a=j(n.range,{workDays:e,timezone:r},l);t.push.apply(t,a)})),a&&t[0]&&(a.current=t[0].range),[n,t]}),[r,u.start.getTime(),u.end.getTime(),l,m,p]);return D.createElement(Fe,{ref:d,slotWidth:n,slotLevels:g,timelineHeaderCell:o})})),Ht={name:"week",dateRange:({intl:e,tasksStart:t,tasksEnd:n,timezone:o})=>{const r=a.ZonedDate.fromLocalDate(t,o),l=a.ZonedDate.fromLocalDate(n,o),s=A(a.firstDayInWeek(a.getDate(r),e.firstDay())),i=P(a.firstDayInWeek(a.getDate(l),e.firstDay()),7),d=a.ZonedDate.fromUTCDate(B(s),o),c=a.ZonedDate.fromUTCDate(B(i),o);return{start:new Date(d.getTime()),end:new Date(c.getTime()),zonedStart:d,zonedEnd:c}},title:e=>e.toLanguageString(Ne,Lt[Ne]),slotWidth:T,workWeekStart:1,workWeekEnd:5,workDayStart:"08:00",workDayEnd:"17:00"};Wt.propTypes={name:n.string,dateRange:n.oneOfType([n.func,n.object]),title:n.oneOfType([n.string,n.func]),slotWidth:n.number,workWeekStart:n.number,workWeekEnd:n.number,workDayStart:n.string,workDayEnd:n.string},Wt.displayName="KendoReactGanttWeekView";const Kt=D.forwardRef(((e,t)=>{const{slotWidth:n=Vt.slotWidth,slotDuration:o=Vt.slotDuration,firstSlotRangeRef:r,timelineHeaderCell:l}=e,{timezone:i}=ie(),d=s.useInternationalization(),c=D.useRef(null),u=D.useRef(null),m=D.useCallback((e=>{u.current&&u.current.scrollIntoView(e)}),[]);D.useImperativeHandle(c,(()=>({scrollIntoView:m}))),D.useImperativeHandle(t,(()=>c.current));const p=ce(),g=e.workWeekStart||Vt.workWeekStart,h=e.workWeekEnd||Vt.workWeekEnd,f=e.workDayStart||Vt.workDayStart,k=e.workDayEnd||Vt.workDayEnd,y=D.useMemo((()=>{const e=q({workWeekStart:g,workWeekEnd:h}),t=[],n=j(p,{workDays:e,timezone:i},d);return n.forEach((e=>{const n=((e,t,n)=>{const o=n.parseDate(t.workDayStart).getHours(),r=n.parseDate(t.workDayEnd).getHours();return U(e,{step:a.MS_PER_MINUTE*t.slotDuration,timezone:t.timezone}).map((e=>{const t=e.zonedStart.getHours();return{range:e,isWork:t>=o&&t<r,span:1,text:n.formatDate(e.zonedStart,"hh:mm a"),type:"time"}}))})(e.range,{workDayStart:f,workDayEnd:k,timezone:i,slotDuration:o},d);e.span=n.length,t.push.apply(t,n)})),r&&t[0]&&(r.current=t[0].range),[n,t]}),[i,p.start.getTime(),p.end.getTime(),d,g,h,f,k]);return D.createElement(Fe,{ref:u,slotWidth:n,slotLevels:y,timelineHeaderCell:l})})),Vt={name:"day",dateRange:({tasksStart:e,tasksEnd:t,timezone:n})=>{const o=a.ZonedDate.fromLocalDate(e,n),r=a.ZonedDate.fromLocalDate(t,n),l=A(o),s=P(r),i=a.ZonedDate.fromUTCDate(B(l),n),d=a.ZonedDate.fromUTCDate(B(s),n);return{start:new Date(i.getTime()),end:new Date(d.getTime()),zonedStart:i,zonedEnd:d}},title:e=>e.toLanguageString(Me,Lt[Me]),slotWidth:T,slotDuration:60,workWeekStart:1,workWeekEnd:5,workDayStart:"08:00",workDayEnd:"17:00"};Kt.propTypes={name:n.string,dateRange:n.oneOfType([n.func,n.object]),title:n.oneOfType([n.string,n.func]),slotWidth:n.number,slotDuration:n.number,workWeekStart:n.number,workWeekEnd:n.number,workDayStart:n.string,workDayEnd:n.string},Kt.displayName="KendoReactGanttDayView";const Ot=D.forwardRef(((e,t)=>{const{slotWidth:n=At.slotWidth,firstSlotRangeRef:a,timelineHeaderCell:o}=e,{timezone:r}=ie(),l=s.useInternationalization(),i=D.useRef(null),d=D.useRef(null),c=D.useCallback((e=>{d.current&&d.current.scrollIntoView(e)}),[]);D.useImperativeHandle(i,(()=>({scrollIntoView:c}))),D.useImperativeHandle(t,(()=>i.current));const u=ce(),m=D.useMemo((()=>{const e=[],t=X(u,{timezone:r},l);return t.forEach((t=>{const n=Y(t.range,{timezone:r},l);e.push.apply(e,n)})),a&&e[0]&&(a.current=e[0].range),[t,e]}),[r,u.start.getTime(),u.end.getTime(),l]);return D.createElement(Fe,{ref:d,slotWidth:n,slotLevels:m,timelineHeaderCell:o})})),At={name:"month",dateRange:({tasksStart:e,tasksEnd:t,timezone:n})=>{const o=a.ZonedDate.fromLocalDate(e,n),r=a.ZonedDate.fromLocalDate(t,n),l=a.firstDayOfMonth(a.getDate(o)),s=a.addDays(a.lastDayOfMonth(a.getDate(r)),1),i=a.ZonedDate.fromUTCDate(B(l),n),d=a.ZonedDate.fromUTCDate(B(s),n);return{start:new Date(i.getTime()),end:new Date(d.getTime()),zonedStart:i,zonedEnd:d}},title:e=>e.toLanguageString(ze,Lt[ze]),slotWidth:T,workWeekStart:1,workWeekEnd:5,workDayStart:"08:00",workDayEnd:"17:00"};Ot.propTypes={name:n.string,dateRange:n.oneOfType([n.func,n.object]),title:n.oneOfType([n.string,n.func]),slotWidth:n.number,workWeekStart:n.number,workWeekEnd:n.number,workDayStart:n.string,workDayEnd:n.string},Ot.displayName="GanttMonthView";const Pt=D.forwardRef(((e,t)=>{const{slotWidth:n=Bt.slotWidth,firstSlotRangeRef:a,timelineHeaderCell:o}=e,{timezone:r}=ie(),l=s.useInternationalization(),i=D.useRef(null),d=D.useRef(null),c=D.useCallback((e=>{d.current&&d.current.scrollIntoView(e)}),[]);D.useImperativeHandle(i,(()=>({scrollIntoView:c}))),D.useImperativeHandle(t,(()=>i.current));const u=ce(),m=D.useMemo((()=>{const e=Q(u,{timezone:r},l),t=[];return e.forEach((e=>{const n=X(e.range,{timezone:r},l);t.push.apply(t,n)})),a&&t[0]&&(a.current=t[0].range),[e,t]}),[r,u.start.getTime(),u.end.getTime(),l]);return D.createElement(Fe,{slotWidth:n,slotLevels:m,timelineHeaderCell:o})})),Bt={name:"year",dateRange:({tasksStart:e,tasksEnd:t,timezone:n})=>{const o=a.ZonedDate.fromLocalDate(e,n),r=a.ZonedDate.fromLocalDate(t,n),l=a.firstDayOfMonth(a.firstMonthOfYear(a.getDate(o))),s=a.addDays(a.lastDayOfMonth(a.lastMonthOfYear(a.getDate(r))),1),i=a.ZonedDate.fromUTCDate(B(l),n),d=a.ZonedDate.fromUTCDate(B(s),n);return{start:new Date(i.getTime()),end:new Date(d.getTime()),zonedStart:i,zonedEnd:d}},title:e=>e.toLanguageString(Le,Lt[Le]),slotWidth:T};Pt.propTypes={name:n.string,dateRange:n.oneOfType([n.func,n.object]),title:n.oneOfType([n.string,n.func]),slotWidth:n.number},Pt.displayName="GanttYearView";const Gt=e=>{const[t,n]=pe(),a=s.useLocalization(),o=D.useMemo((()=>"function"==typeof e.view.title?e.view.title.call(void 0,a):e.view.title),[e.view.title,a]),r=D.useCallback((()=>{e.view.name&&n(e.view.name)}),[n,e.view.name]);return D.createElement(d.Button,{role:"button",type:"button",tabIndex:-1,togglable:!0,selected:e.view.name===t,onClick:r},o)};Gt.displayName="KendoReactGanttViewSelectorItem";const _t=D.forwardRef((()=>{const e=D.useContext(ue),[t,n]=pe(),a=s.useLocalization(),o=D.useCallback((e=>{n&&(e.preventDefault(),n(e.target.value))}),[n]);return D.createElement("div",{className:"k-gantt-views-wrapper"},D.createElement(d.ButtonGroup,{className:"k-gantt-views"},e.map((e=>D.createElement(Gt,{key:e.props.name,view:e.props})))),D.createElement("select",{value:t,onChange:o,"aria-label":(e=>a.toLanguageString(e,Lt[e]))(Tt),className:"k-picker k-picker-solid k-dropdown-list k-dropdown k-views-dropdown k-rounded-md"},e.map((e=>D.createElement("option",{key:e.props.name,value:e.props.name},"function"==typeof e.props.title?e.props.title.call(void 0,a):e.props.title)))))}));_t.displayName="KendoReactGanttViewSelectorList";const $t=D.forwardRef(((e,t)=>{const{className:n,...a}=e,r=D.useRef(null);return D.useImperativeHandle(t,(()=>({element:r.current,props:e}))),D.createElement(d.ToolbarItem,{ref:e=>{e&&(r.current=e.element)},className:o.classNames("k-gantt-views",n),...a},e.children)}));$t.displayName="KendoReactGanttViewSelector";const qt=D.forwardRef(((e,t)=>{const{className:n,...a}=e,r=D.useRef(null),l=D.useRef(null);D.useImperativeHandle(l,(()=>({element:r.current,props:e}))),D.useImperativeHandle(t,(()=>l.current));const s=D.useMemo((()=>o.classNames("k-gantt-toolbar k-gantt-header",n)),[n]);return D.createElement(d.Toolbar,{ref:e=>{e&&(r.current=e.element)},className:s,...a},e.children)}));qt.displayName="KendoReactGanttToolbar";const Zt=Object.freeze({name:"@progress/kendo-react-gantt",productName:"KendoReact",productCode:"KENDOUIREACT",productCodes:["KENDOUIREACT"],publishDate:0,version:"12.0.2-develop.3",licensingDocsUrl:"https://www.telerik.com/kendo-react-ui/components/my-license/"}),Ut=D.forwardRef(((e,t)=>{const n=s.useLocalization(),a=e=>n.toLanguageString(e,Lt[e]),r=a(It),l=a(wt),c=a(St),u=a(Rt),m=D.useCallback((t=>{t.syntheticEvent.preventDefault();const n=t.item&&t.item.direction?t.item.direction:"none";e.onClick&&e.onClick({nativeEvent:t.nativeEvent,syntheticEvent:t.syntheticEvent,direction:n})}),[e.onClick]),p=D.useCallback((t=>{t.preventDefault(),e.onClick&&e.onClick({nativeEvent:t&&t.nativeEvent,syntheticEvent:t,direction:"none"})}),[e.onClick]),g=D.createElement(D.Fragment,null,D.createElement(o.IconWrap,{name:"plus",icon:i.plusIcon}),r);return e.selectedTask?D.createElement(d.DropDownButton,{className:"k-views-dropdown",onItemClick:m,popupSettings:{popupClass:"k-gantt-toolbar"},textField:"title",items:[{title:l,direction:"child"},{title:c,direction:"above"},{title:u,direction:"below"}],text:g}):D.createElement(d.Button,{onClick:p},g)}));Ut.displayName="KendoReactGanttAddButton";const jt=D.forwardRef(((e,t)=>{const n=!o.validatePackage(Zt,{component:"Gantt"}),a=o.getLicenseMessage(Zt),{columns:r=Yt.columns,taskData:i=Yt.taskData,dependencyData:c=Yt.dependencyData,style:u,className:m,noRecords:p,timezone:g,rowHeight:h=Yt.rowHeight,resizable:f,reorderable:k,sortable:y,sort:v,filter:C,columnMenuFilter:E,columnMenu:b,navigatable:I,toolbar:w,row:R,selectable:T}=e,x=new Map;x.set(Kt,Vt),x.set(Ot,At),x.set(Wt,Ht),x.set(Pt,Bt);const F=s.useInternationalization(),{fields:N}=D.useMemo((()=>(e=>({fields:{...z,...e}}))(e.taskModelFields)),[e.taskModelFields]),{fields:M}=D.useMemo((()=>(e=>({fields:{...L,...e}}))(e.dependencyModelFields)),[e.dependencyModelFields]),W=D.useCallback(((e,t)=>n=>J(n,e)&&ee(n,t)?[...o.getter(t)(n)]:[])(N.isExpanded,N.children),[N.isExpanded,N.children]),H=D.useRef(null),K=D.useRef(null),V=D.useRef(null),O=D.useRef(null),A=D.useRef(null),P=D.useCallback((e=>{const t=o.getter(N.start)(e),n=o.getter(N.end)(e),a=o.getter(N.isSelected)(e);(!K.current||t<K.current)&&(K.current=t),(!V.current||n>V.current)&&(V.current=n),a&&(O.current=e)}),[N.start,N.end]),B=D.useMemo((()=>(K.current=null,V.current=null,O.current=null,l.flatData(i,W,P))),[i,W]);(!K.current||!V.current)&&(K.current=new Date(S),V.current=new Date(S));const G=D.Children.toArray(e.children||[]).map((e=>{var t;return D.isValidElement(e)?D.cloneElement(e,{...x.get(e.type),...null!=(t=e.props)?t:{}}):e})),_=D.cloneElement(D.createElement(Wt,null),x.get(Wt)),$=G.length?G[0]:_,[q,Z]=((e,t,n)=>{const[a,o]=D.useState(t||e),r=D.useCallback(((e,t)=>{o(e),n&&n.call(void 0,{...t,value:e})}),[n,o]);return[void 0!==t?t:a,r]})(e.defaultView||$.props.name,e.view,e.onViewChange),U=G.find((e=>e.props.name===q))||$,j="function"==typeof U.props.dateRange?U.props.dateRange.call(void 0,{intl:F,tasksStart:K.current,tasksEnd:V.current,timezone:g}):U.props.dateRange,Y=D.useRef(null),[X,Q]=D.useState(0);o.useIsomorphicLayoutEffect((()=>{Y.current&&Q(Y.current.element.offsetHeight)}),[]);const te=D.useCallback((e=>{H.current&&H.current.scrollIntoView(e)}),[]),ne=D.useRef(null),ae=D.useRef(null);D.useImperativeHandle(ae,(()=>({props:e,element:ne.current,scrollIntoView:te}))),D.useImperativeHandle(t,(()=>ae.current));const oe=D.useCallback((t=>{e.onDataStateChange&&e.onDataStateChange.call(void 0,{...t,target:ae.current})}),[e.onDataStateChange]),re=D.useCallback((t=>{e.onSortChange&&e.onSortChange.call(void 0,{...t,target:ae.current})}),[e.onSortChange]),le=D.useCallback((t=>{e.onKeyDown&&e.onKeyDown.call(void 0,{...t,target:ae.current})}),[e.onKeyDown]),se=D.useCallback((t=>{e.onSelectionChange&&e.onSelectionChange.call(void 0,{...t,target:ae.current})}),[e.onSelectionChange]),ie=D.useCallback((t=>{e.onHeaderSelectionChange&&e.onHeaderSelectionChange.call(void 0,{...t,target:ae.current})}),[e.onHeaderSelectionChange]),de=D.useCallback((t=>{e.onFilterChange&&e.onFilterChange.call(void 0,{...t,target:ae.current})}),[e.onFilterChange]),ce=D.useCallback((t=>{e.onColumnMenuFilterChange&&e.onColumnMenuFilterChange.call(void 0,{...t,target:ae.current})}),[e.onColumnMenuFilterChange]),ue=D.useCallback((t=>{e.onExpandChange&&e.onExpandChange.call(void 0,{...t,target:ae.current})}),[e.onExpandChange]),me=D.useCallback((t=>{e.onAddClick&&e.onAddClick.call(void 0,{...t,target:ae.current,selectedDataItem:O.current,slotStart:A.current&&new Date(A.current.start.getTime()),slotEnd:A.current&&new Date(A.current.end.getTime())})}),[e.onAddClick]),pe=D.useCallback((t=>{e.onColumnResize&&e.onColumnResize.call(void 0,{...t,target:ae.current})}),[e.onColumnResize]),ge=D.useCallback((t=>{e.onColumnReorder&&e.onColumnReorder.call(void 0,{...t,target:ae.current})}),[e.onColumnReorder]),he=D.useCallback((t=>{e.onRowClick&&e.onRowClick.call(void 0,{...t,target:ae.current})}),[e.onRowClick]),fe=D.useCallback((t=>{e.onRowDoubleClick&&e.onRowDoubleClick.call(void 0,{...t,target:ae.current})}),[e.onRowClick]),ke=D.useCallback((t=>{e.onRowContextMenu&&e.onRowContextMenu.call(void 0,{...t,target:ae.current})}),[e.onRowClick]),ye=D.useCallback((t=>{e.onTaskClick&&e.onTaskClick.call(void 0,{...t,target:ae.current})}),[e.onTaskClick]),Ce=D.useCallback((t=>{e.onTaskDoubleClick&&e.onTaskDoubleClick.call(void 0,{...t,target:ae.current})}),[e.onTaskDoubleClick]),De=D.useCallback((t=>{e.onTaskContextMenu&&e.onTaskContextMenu.call(void 0,{...t,target:ae.current})}),[e.onTaskContextMenu]),Ee=D.useCallback((t=>{e.onTaskRemoveClick&&e.onTaskRemoveClick.call(void 0,{...t,target:ae.current})}),[e.onTaskRemoveClick]),be=D.useCallback((t=>{if(e.onDependencyCreate){let n,a;const r=o.getter(N.id);for(let e=0;e<B.length;e++){const o=r(B[e].dataItem);if(String(o)===t.fromId&&(n=o),String(o)===t.toId&&(a=o),n&&a)break}e.onDependencyCreate.call(void 0,{fromId:n,toId:a,target:ae.current,type:t.type})}}),[e.onDependencyCreate,N,B]);return D.createElement(ve,{dateRange:j,taskData:B,dependencyData:c,taskModelFields:N,dependencyModelFields:M,views:G,activeView:[q,Z],rowHeight:h,toolbarHeight:X,props:{columns:r,noRecords:p,timezone:g,resizable:f,reorderable:k,sortable:y,sort:v,filter:C,columnMenuFilter:E,columnMenu:b,navigatable:I,row:R,selectable:T},events:{onDataStateChange:oe,onSortChange:re,onFilterChange:de,onColumnMenuFilterChange:ce,onExpandChange:ue,onRowClick:he,onRowDoubleClick:fe,onRowContextMenu:ke,onColumnResize:pe,onColumnReorder:ge,onDependencyCreate:e.onDependencyCreate&&be,onKeyDown:le,onSelectionChange:se,onHeaderSelectionChange:ie},taskEvents:{onTaskClick:ye,onTaskDoubleClick:Ce,onTaskContextMenu:De,onTaskRemoveClick:e.onTaskRemoveClick&&Ee}},D.createElement("div",{ref:ne,role:"application",style:u,className:o.classNames("k-gantt",m)},D.createElement(qt,{ref:Y},w&&w.addTaskButton?D.createElement(Ut,{selectedTask:O.current,onClick:me}):null,D.createElement(d.ToolbarSpacer,null),D.createElement($t,null,D.createElement(_t,null))),U&&D.createElement(U.type,{key:U.props.name,ref:H,...U.props,firstSlotRangeRef:A}),n&&D.createElement(o.WatermarkOverlay,{message:a})))})),Yt={taskData:[],dependencyData:[],columns:[],rowHeight:40};jt.propTypes={taskData:n.array,taskModelFields:n.shape({id:n.string,start:n.string,end:n.string,title:n.string,percentComplete:n.string,parentId:n.string,isRollup:n.string,isExpanded:n.string,children:n.string,isInEdit:n.string}),dependencyData:n.array,dependencyModelFields:n.shape({id:n.string,fromId:n.string,toId:n.string,type:n.string}),columns:n.arrayOf(n.shape({width:n.number,cell:n.any,editCell:n.any,headerCell:n.any,filter:n.any,children:n.any,field:n.string,title:n.string,sortable:n.any,expandable:n.bool,headerSelectionValue:n.bool,format:n.string,headerClassName:n.string,className:n.string,resizable:n.bool,reorderable:n.bool,minResizableWidth:n.number,orderIndex:n.number,columnMenu:n.any})),sort:n.array,filter:n.array,columnMenuFilter:n.array,columnMenu:n.any,style:n.object,className:n.string,children:n.any,timezone:n.string,defaultView:n.string,view:n.string,rowHeight:n.number,navigatable:n.bool,onViewChange:n.func,onDataStateChange:n.func,onSortChange:n.func,onFilterChange:n.func,onExpandChange:n.func,onRowClick:n.func,onColumnResize:n.func,onColumnReorder:n.func},jt.displayName="KendoReactGantt";const Xt=[{text:Ge,operator:"contains"},{text:_e,operator:"doesnotcontain"},{text:He,operator:"eq"},{text:Ke,operator:"neq"},{text:Be,operator:"startswith"},{text:$e,operator:"endswith"},{text:Ve,operator:"isnull"},{text:Oe,operator:"isnotnull"},{text:Ae,operator:"isempty"},{text:Pe,operator:"isnotempty"}],Qt=[{text:He,operator:"eq"},{text:Ke,operator:"neq"},{text:qe,operator:"gte"},{text:Ze,operator:"gt"},{text:Ue,operator:"lte"},{text:je,operator:"lt"},{text:Ve,operator:"isnull"},{text:Oe,operator:"isnotnull"}],Jt=[{text:He,operator:"eq"},{text:Ke,operator:"neq"},{text:Je,operator:"gte"},{text:et,operator:"gt"},{text:tt,operator:"lt"},{text:nt,operator:"lte"},{text:Ve,operator:"isnull"},{text:Oe,operator:"isnotnull"}],en=[{text:Qe,operator:""},{text:Ye,operator:!0},{text:Xe,operator:!1}];function tn(e,t){return{clearButtonTitle:e.toLanguageString(We,Lt[We]),operators:t.map((t=>({text:e.toLanguageString(t.text,Lt[t.text]),operator:t.operator})))}}const nn=e=>{const{operators:t,...n}=e;return D.createElement(r.TextFilterCell,{ariaLabel:"text filter",...tn(s.useLocalization(),t||Xt),...n})};nn.displayName="KendoReactGanttTextFilter";const an=e=>{const{operators:t,...n}=e;return D.createElement(r.NumericFilterCell,{ariaLabel:"numeric filter",...tn(s.useLocalization(),t||Qt),...n})};an.displayName="KendoReactGanttNumericFilter";const on=e=>{const{operators:t,...n}=e;return D.createElement(r.BooleanFilterCell,{ariaLabel:"boolean filter",...tn(s.useLocalization(),t||en),...n})};on.displayName="KendoReactGanttBooleanFilter";const rn=e=>{const{operators:t,...n}=e;return D.createElement(r.DateFilterCell,{ariaLabel:"date filter",...tn(s.useLocalization(),t||Jt),...n})};rn.displayName="KendoReactGanttDateFilter";const ln=(e,t)=>{cn(e,t),un(e,t),mn(e,t)},sn=(e,t,n)=>{const a=o.getter(t.children),r=o.setter(t.children);for(let t=e.length-1;t>=0;t--){const o=e[t],l=a(o);if(n.parentId===o.id){const e=l.filter((e=>e.parentId===o.id));r(o,e)}}},dn=(e,t,n)=>{const a=o.getter(t.children),r=o.setter(t.children);return null===n.parentId?[...e,n]:(e=K(e,t.children,(e=>{if(e.id===n.parentId){const t=a(e)||[];r(e,[...t,n])}return{...e}})),e)},cn=(e,t)=>{if(!e.length)return;const n=o.getter(t.children),a=o.getter(t.start),r=o.setter(t.start);for(let t=e.length-1;t>=0;t--){const o=e[t],l=n(o);if(l&&l.length){const e=l.reduce(((e,t)=>Math.min(e,a(t).getTime())),a(l[0]).getTime());r(o,new Date(e))}}},un=(e,t)=>{if(!e.length)return;const n=o.getter(t.children),a=o.getter(t.end),r=o.setter(t.end);for(let t=e.length-1;t>=0;t--){const o=e[t],l=n(o);if(l&&l.length){const e=l.reduce(((e,t)=>Math.max(e,a(t).getTime())),a(l[0]).getTime());r(o,new Date(e))}}},mn=(e,t)=>{if(!e.length)return;const n=o.getter(t.children),a=o.getter(t.percentComplete),r=o.setter(t.percentComplete),l=({avg:e,n:t},n)=>({avg:((a(n)||0)+t*e)/(t+1),n:t+1});for(let t=e.length-1;t>=0;t--){const a=e[t],o=n(a);if(o&&o.length){r(a,o.reduce(l,{avg:0,n:0}).avg)}}},pn=(e,t,n)=>{if(!e)return;const a=o.getter(t.children),r=o.getter(t.start),l=o.setter(t.start),s=o.getter(t.end),i=o.setter(t.end),d=e.map((e=>({task:e,childrenIndex:0})));for(;d.length>0;){const e=d[d.length-1],t=e.task,o=a(t);o&&o.length&&o.length>e.childrenIndex?(d.push({task:o[e.childrenIndex],childrenIndex:0}),e.childrenIndex++):(d.pop(),l(t,new Date(r(t).getTime()+n)),i(t,new Date(s(t).getTime()+n)))}},gn=e=>{const{validationMessage:t,touched:n,label:a,id:o,valid:r,disabled:l,hint:s,type:i,optional:d,...c}=e,m=n&&t,h=!m&&s,f=h?`${o}_hint`:"",k=m?`${o}_error`:"";return D.createElement(u.FieldWrapper,{className:"k-col-span-full"},D.createElement(p.Label,{editorId:o,editorValid:r,editorDisabled:l,optional:d},a),D.createElement("div",{className:"k-form-field-wrap"},D.createElement(g.Input,{valid:r,type:i,id:o,disabled:l,ariaDescribedBy:`${f} ${k}`,...c}),h&&D.createElement(p.Hint,{id:f},s),m&&D.createElement(p.Error,{id:k},t)))},hn=e=>{const{validationMessage:t,touched:n,label:a,id:o,valid:r,disabled:l,hint:s,wrapperStyle:i,...d}=e,c=n&&t,m=!c&&s,g=m?`${o}_hint`:"",h=c?`${o}_error`:"",k=a?`${o}_label`:"";return D.createElement(u.FieldWrapper,{style:i,className:"k-col-span-2"},D.createElement(p.Label,{id:k,editorId:o,editorValid:r,editorDisabled:l},a),D.createElement("div",{className:"k-form-field-wrap"},D.createElement(f.DateTimePicker,{ariaLabelledBy:k,ariaDescribedBy:`${g} ${h}`,valid:r,id:o,disabled:l,...d}),m&&D.createElement(p.Hint,{id:g},s),c&&D.createElement(p.Error,{id:h},t)))},fn=e=>{const{validationMessage:t,visited:n,label:a,id:o,valid:r,disabled:l,hint:s,...i}=e,d=n&&t,c=!d&&s,m=c?`${o}_hint`:"",h=d?`${o}_error`:"";return D.createElement(u.FieldWrapper,null,D.createElement(p.Label,{editorId:o,editorValid:r,editorDisabled:l},a),D.createElement("div",{className:"k-form-field-wrap"},D.createElement(g.NumericTextBox,{ariaDescribedBy:`${m} ${h}`,valid:r,id:o,disabled:l,format:"p0",step:.01,...i}),c&&D.createElement(p.Hint,{id:m},s),d&&D.createElement(p.Error,{id:h},t)))},kn=e=>{const{validationMessage:t,touched:n,label:a,id:o,valid:r,disabled:l,hint:s,idField:i,dataItem:d,...c}=e,m=[],g=n&&t,h=!g&&s,f=h?`${o}_hint`:"",y=g?`${o}_error`:"",v=D.useCallback((t=>{if(!t||!t.children)return e.data;for(const e of t.children)m.push(e),e.children&&v(e);const n=m.map((e=>e.id));return e.data.filter((e=>!n.includes(e.id)))}),[e.data]),C=v(d),E=D.useMemo((()=>C.map((e=>{const t=new Date(e.start).toLocaleDateString(),n=new Date(e.end).toLocaleDateString();return{...e,title:`${e.title} (${t}-${n})`}}))),[v]),b=D.useMemo((()=>k.findByFieldValue(E,i,e.value)),[E,i,e.value]);return D.createElement(u.FieldWrapper,{className:"k-col-span-full"},D.createElement(p.Label,{editorId:o,editorValid:r,editorDisabled:l},a),D.createElement("div",{className:"k-form-field-wrap"},D.createElement(k.DropDownList,{textField:"title",ariaDescribedBy:`${f} ${y}`,valid:r,id:o,disabled:l,...c,value:b,data:E,onChange:t=>{null===t.value.id?e.onChange({value:null}):e.onChange({value:t.value[i]})},defaultItem:{id:null,title:"-None-",parentId:null}}),h&&D.createElement(p.Hint,{id:f},s),g&&D.createElement(p.Error,{id:y},t)))},yn=e=>{const{selectedItem:t,updateDependency:n,flatTasks:a}=D.useContext(Cn),r=e.dataItem,[l,s]=D.useState(a),i=D.useRef(null),d=D.useMemo((()=>k.findByFieldValue(a,"id",r.fromId)),[a,r.fromId]);return D.createElement("td",{ref:i,className:o.classNames((t&&!r.uid?t.id===r.id:t&&null===r.id?t.uid===r.uid:void 0)&&"k-selected")},D.createElement(k.DropDownList,{textField:"title",data:l,value:d,onChange:e=>{n(r,"fromId",e.target.value.id)},filterable:!0,onFilterChange:e=>{const t=v.filterBy(a,e.filter);s(t)},required:!0}))},vn=e=>{const{selectedItem:t,updateDependency:n,dependencyTypes:a}=D.useContext(Cn),r=e.dataItem,l=D.useMemo((()=>k.findByFieldValue(a,"type",r.type)),[a,r.type]);return D.createElement("td",{className:o.classNames((t&&!r.uid?t.id===r.id:t&&null===r.id?t.uid===r.uid:void 0)&&"k-selected")},D.createElement(k.DropDownList,{textField:"name",data:a,value:l,onChange:e=>{n(r,"type",e.target.value.type)}}))},Cn=D.createContext({flatTasks:[],dependencyTypes:[],selectedItem:void 0,updateDependency:()=>{}}),Dn=e=>{var t;const[n,a]=D.useState([]),o=s.useLocalization(),r=e=>o.toLanguageString(e,Lt[e]),l=r(rt),c=r(lt),u=r(Mt),m=r(zt),p=D.useMemo((()=>{const t=e.predecessors.map((t=>{const n=k.findByFieldValue(e.flatTasks,"id",t.fromId),a=k.findByFieldValue(e.dependencyTypes,"type",t.type);return{...t,taskTitle:n?n.title:"",typeName:a?a.type:""}}));return v.orderBy(t,n)}),[e.predecessors,e.dependencyTypes,e.flatTasks,n]);return D.createElement(Cn.Provider,{value:{flatTasks:e.flatTasks,dependencyTypes:e.dependencyTypes,selectedItem:e.selectedItem,updateDependency:e.updateDependency}},D.createElement(y.Grid,{data:p,sort:n,sortable:!0,onRowClick:e.onSelectRow,onSortChange:e=>{a(e.sort)},style:{height:"23em"}},D.createElement(y.GridToolbar,null,D.createElement(d.Button,{icon:"plus",svgIcon:i.plusIcon,onClick:e.addPredecessorsDependency},l),D.createElement(d.Button,{icon:"minus",svgIcon:i.minusIcon,onClick:e.deleteDependency,disabled:void 0===(null==(t=e.selectedItem)?void 0:t.id)},c)),D.createElement(y.GridColumn,{field:"taskTitle",title:u,cells:{data:yn}}),D.createElement(y.GridColumn,{field:"typeName",title:m,cells:{data:vn}})))},En=e=>{const{selectedItem:t,updateDependency:n,flatTasks:a}=D.useContext(In),r=e.dataItem,[l,s]=D.useState(a),i=D.useMemo((()=>k.findByFieldValue(a,"id",r.toId)),[a,r.toId]);return D.createElement("td",{className:o.classNames((t&&!r.uid?t.id===r.id:t&&null===r.id?t.uid===r.uid:void 0)&&"k-selected")},D.createElement(k.DropDownList,{textField:"title",data:l,value:i,onChange:e=>{n(r,"toId",e.target.value.id)},filterable:!0,onFilterChange:e=>{const t=v.filterBy(a,e.filter);s(t)},required:!0}))},bn=e=>{const{selectedItem:t,updateDependency:n,dependencyTypes:a}=D.useContext(In),r=e.dataItem,l=D.useMemo((()=>k.findByFieldValue(a,"type",r.type)),[a,r.type]);return D.createElement("td",{className:o.classNames((t&&!r.uid?t.id===r.id:t&&null===r.id?t.uid===r.uid:void 0)&&"k-selected")},D.createElement(k.DropDownList,{textField:"name",data:a,value:l,onChange:e=>{n(r,"type",e.target.value.type)}}))},In=D.createContext({flatTasks:[],dependencyTypes:[],selectedItem:void 0,updateDependency:()=>{}}),wn=e=>{var t;const[n,a]=D.useState([]),o=s.useLocalization(),r=e=>o.toLanguageString(e,Lt[e]),l=r(rt),c=r(lt),u=r(Mt),m=r(zt),p=D.useMemo((()=>{const t=e.successors.map((t=>{const n=k.findByFieldValue(e.flatTasks,"id",t.toId),a=k.findByFieldValue(e.dependencyTypes,"type",t.type);return{...t,taskTitle:n?n.title:"",typeName:a?a.type:""}}));return v.orderBy(t,n)}),[e.successors,e.dependencyTypes,e.flatTasks,n]);return D.createElement(In.Provider,{value:{flatTasks:e.flatTasks,dependencyTypes:e.dependencyTypes,selectedItem:e.selectedItem,updateDependency:e.updateDependency}},D.createElement(y.Grid,{data:p,sort:n,sortable:!0,onRowClick:e.onSelectRow,onSortChange:e=>{a(e.sort)},style:{height:"23em"}},D.createElement(y.GridToolbar,null,D.createElement(d.Button,{icon:"plus",svgIcon:i.plusIcon,onClick:e.addSuccessorsDependency},l),D.createElement(d.Button,{icon:"minus",svgIcon:i.minusIcon,onClick:e.deleteDependency,disabled:void 0===(null==(t=e.selectedItem)?void 0:t.id)},c)),D.createElement(y.GridColumn,{field:"taskTitle",title:u,cells:{data:En}}),D.createElement(y.GridColumn,{field:"type",title:m,cells:{data:bn}})))};var Sn=(e=>(e[e.FF=0]="FF",e[e.FS=1]="FS",e[e.SF=2]="SF",e[e.SS=3]="SS",e))(Sn||{});const Rn=[{type:Sn.FF},{type:Sn.FS},{type:Sn.SF},{type:Sn.SS}],Tn=e=>{const[t,n]=D.useState(0),[a,r]=D.useState(),[i,d]=D.useState([...e.dependencyData||[]]),[c,m]=D.useState([]),p=oe(),g=s.useLocalization(),f=e=>g.toLanguageString(e,Lt[e]),y=f(ut),v=f(mt),C=f(pt),E=f(gt),b=f(ht),I=f(st),w=f(it),S=f(dt),R=f(ft),T=f(kt),x=f(yt),F=f(vt),N=D.useMemo((()=>l.flatData(e.taskData||[],(e=>e.children||[]),(e=>{const t={title:e[p.title],id:e[p.id],start:e[p.start],end:e[p.end],parentId:null};return p.parentId&&(t.parentId=e[p.parentId]),t}))),[e.taskData,p]),M=D.useMemo((()=>N.filter((t=>t.id!==e.dataItem.id))),[N,e.dataItem]),z=D.useMemo((()=>i.filter((t=>t.toId===e.dataItem.id))),[i,e.dataItem]),L=D.useMemo((()=>i.filter((t=>t.fromId===e.dataItem.id))),[i,e.dataItem]),W=D.useMemo((()=>i.filter((e=>null===e.id)).map((e=>({id:e.id,fromId:e.fromId,toId:e.toId,type:e.type})))),[i]),H=D.useMemo((()=>i.filter((e=>null!==e.id&&e.uid)).map((e=>({id:e.id,fromId:e.fromId,toId:e.toId,type:e.type})))),[i]),K=()=>{if(a){if(a.id){const e=i.filter((e=>e.id!==a.id));d(e);const t=i.filter((e=>e.id===a.id));m((e=>[...e,...t]))}else{const e=i.filter((e=>e.uid!==a.uid));d(e);const t=i.filter((e=>e.uid===a.uid));m((e=>[...e,...t]))}r(void 0)}},V=D.useCallback((e=>e||0===e?void 0:R),[R]),O=D.useCallback((e=>e||0===e?e>=0&&e<=1?void 0:F:R),[R,F]),A=D.useCallback(((e,t)=>e&&t(p.end)&&e.getTime()>t(p.end).getTime()?T:void 0),[p,T]),P=D.useCallback(((e,t)=>e&&t(p.start)&&e.getTime()<t(p.start).getTime()?x:void 0),[p,x]),B=D.useMemo((()=>[V,A]),[V,A]),G=D.useMemo((()=>[V,P]),[V,P]),_=D.useMemo((()=>k.findByFieldValue(i,"fromId",null)||k.findByFieldValue(i,"toId",null)),[i]),$=e=>{r(e.dataItem)},q=(e,t,n)=>{const a={...e,uid:e.uid||o.guid(),[t]:n},r=i.findIndex((e=>e.id&&e.id===a.id||e.uid&&e.uid===a.uid));r>-1&&(i.splice(r,1,a),d([...i]))},Z=D.useMemo((()=>Rn.map((e=>{let t;switch(e.type){case Sn.FF:t=f(Ct);break;case Sn.FS:t=f(Et);break;case Sn.SF:t=f(Dt);break;case Sn.SS:t=f(bt);break;default:t=f(Ct)}return{...e,name:t}}))),[f]);D.useEffect((()=>{e.onDependencyCreate&&e.onDependencyCreate.call(void 0,{createdDependencies:W,updatedDependencies:H,deletedDependencies:c})}),[W,H,c,e.onDependencyCreate]);const U=e.dependencyData&&e.taskData,j=D.createElement(u.FormElement,{style:{width:400},horizontal:!0},D.createElement(u.Field,{id:`${p.title}_gantteditor`,name:p.title,label:y,component:gn,validator:V}),D.createElement(u.Field,{id:`${p.start}_gantteditor`,name:p.start,label:v,component:hn,validator:B}),D.createElement(u.Field,{id:`${p.end}_gantteditor`,name:p.end,label:C,component:hn,validator:G}),D.createElement(u.Field,{id:`${p.percentComplete}_gantteditor`,name:p.percentComplete,label:E,component:fn,validator:O})),Y=D.createElement(u.FormElement,{style:{paddingInline:"4px"}},D.createElement("div",{className:"k-form-fieldset"},D.createElement("div",{className:"k-form-layout k-d-grid k-grid-cols-4 k-gap-x-2"},D.createElement(u.Field,{id:`${p.title}_gantteditor`,name:p.title,label:y,component:gn,validator:V}),D.createElement(u.Field,{id:`${p.start}_gantteditor`,name:p.start,label:v,component:hn,validator:B}),D.createElement(u.Field,{id:`${p.end}_gantteditor`,name:p.end,label:C,component:hn,validator:G}),D.createElement(u.Field,{id:`${p.percentComplete}_gantteditor`,name:p.percentComplete,label:E,component:fn,validator:O}),p.parentId&&D.createElement(u.Field,{id:`${p.parentId}_gantteditor`,name:p.parentId||"",idField:p.id,label:b,component:kn,data:M,dataItem:e.dataItem}))));return U?D.createElement(h.TabStrip,{selected:t,onSelect:e=>{_||(n(e.selected),r(void 0))}},D.createElement(h.TabStripTab,{title:I},Y),D.createElement(h.TabStripTab,{title:w},D.createElement(Dn,{flatTasks:N,predecessors:z,dependencyTypes:Z,selectedItem:a,onSelectRow:$,addPredecessorsDependency:()=>{const t={uid:o.guid(),id:null,fromId:null,toId:e.dataItem.id,type:Sn.FS};d([...i,t])},deleteDependency:K,updateDependency:q})),D.createElement(h.TabStripTab,{title:S},D.createElement(wn,{flatTasks:N,successors:L,dependencyTypes:Z,selectedItem:a,onSelectRow:$,addSuccessorsDependency:()=>{const t={uid:o.guid(),id:null,fromId:e.dataItem.id,toId:null,type:Sn.FS};d([...i,t])},deleteDependency:K,updateDependency:q}))):j},xn=l.TreeListRow;Object.defineProperty(e,"getSelectedState",{enumerable:!0,get:function(){return r.getSelectedState}}),Object.defineProperty(e,"getSelectedStateFromKeyDown",{enumerable:!0,get:function(){return r.getSelectedStateFromKeyDown}}),Object.defineProperty(e,"setSelectedState",{enumerable:!0,get:function(){return r.setSelectedState}}),e.GANTT_COL_INDEX_ATTRIBUTE=I,e.GANTT_PREVENT_SELECTION_ELEMENT=w,e.GANTT_ROW_INDEX_ATTRIBUTE=b,e.Gantt=jt,e.GanttBooleanFilter=on,e.GanttDateFilter=rn,e.GanttDayView=Kt,e.GanttForm=e=>{const{onCancel:t,onDelete:n,onClose:a,onSubmit:r,...l}=e,c=D.useRef(e.dataItem),[p,g]=D.useState({}),h=s.useLocalization(),f=e=>h.toLanguageString(e,Lt[e]),y=f(at),v=f(ot),C=f(xt),b=f(ct),I=D.useCallback((n=>{if(t){const a={syntheticEvent:n,nativeEvent:n.nativeEvent,dataItem:e.dataItem};t.call(void 0,a)}}),[t,e.dataItem]),w=D.useCallback((t=>{if(n){const a={syntheticEvent:t,nativeEvent:t.nativeEvent,dataItem:e.dataItem};n.call(void 0,a)}}),[n,e.dataItem]),S=D.useCallback((({syntheticEvent:t})=>{if(a){const n={syntheticEvent:t,nativeEvent:t.nativeEvent,dataItem:e.dataItem};a.call(void 0,n)}}),[a,e.dataItem]),R=D.useCallback(((e,t)=>{if(r){const n={dataItem:e,initialDataItem:c.current,syntheticEvent:t,nativeEvent:t&&t.nativeEvent,dependencies:p};r.call(void 0,n)}}),[r,p]),T=D.useMemo((()=>k.findByFieldValue(p.createdDependencies,"fromId",null)||k.findByFieldValue(p.createdDependencies,"toId",null)),[p]),x=D.useMemo((()=>p.createdDependencies&&p.createdDependencies.length&&void 0===T||p.updatedDependencies&&p.updatedDependencies.length||p.deletedDependencies&&p.deletedDependencies.length),[p,T]),F=D.useCallback((e=>{g(e)}),[]),N=D.createElement(u.Form,{initialValues:e.dataItem,onSubmit:R,render:t=>D.createElement(m.Window,{title:b,minWidth:90,width:554,modal:!0,height:0,onClose:S},D.createElement(Tn,{taskData:e.taskData,dependencyData:e.dependencyData,dataItem:e.dataItem,onDependencyCreate:F}),D.createElement(m.WindowActionsBar,{layout:"start"},D.createElement(d.Button,{disabled:!t.allowSubmit&&!x,onClick:t.allowSubmit?t.onSubmit:t=>R(e.dataItem,t),icon:"save",svgIcon:i.saveIcon,themeColor:"primary"},y),D.createElement(d.Button,{onClick:I,type:"button",icon:"cancel",svgIcon:i.cancelIcon},v),D.createElement("div",{className:"k-spacer"}),n&&D.createElement(d.Button,{onClick:w,icon:"trash",svgIcon:i.trashIcon,fillMode:"flat",themeColor:"primary"},C))),...l});return o.canUseDOM?E.createPortal(N,document&&document.body):null},e.GanttMonthView=Ot,e.GanttNumericFilter=an,e.GanttRemoveDialog=e=>{const{onClose:t,onCancel:n,onConfirm:a,dataItem:r}=e,l=s.useLocalization(),i=e=>l.toLanguageString(e,Lt[e]),c=i(xt),u=i(ot),p=i(Ft),g=i(Nt),h=D.useCallback((({syntheticEvent:e})=>{t&&t.call(void 0,{syntheticEvent:e,nativeEvent:e&&e.nativeEvent,dataItem:null})}),[t]),f=D.useCallback((e=>{n&&n.call(void 0,{syntheticEvent:e,nativeEvent:e&&e.nativeEvent,dataItem:null})}),[n]),k=D.useCallback((e=>{a&&a.call(void 0,{syntheticEvent:e,nativeEvent:e&&e.nativeEvent,dataItem:r})}),[a,r]),y=D.createElement(m.Dialog,{title:g,onClose:h},p,D.createElement(m.DialogActionsBar,{layout:"end"},D.createElement(d.Button,{themeColor:"primary",onClick:k},c),D.createElement(d.Button,{onClick:f},u)));return o.canUseDOM?E.createPortal(y,document&&document.body):null},e.GanttRow=xn,e.GanttTextFilter=nn,e.GanttWeekView=Wt,e.GanttYearView=Pt,e.addDependency=e=>{const{dependencyData:t,dependencyModelFields:n,defaultDataItem:a,fromId:r,toId:l,type:s}=e,i=t.map((e=>({...e}))),d=o.setter(n.fromId),c=o.setter(n.toId),u=o.setter(n.type),m=a?{...a}:{};return d(m,r),c(m,l),u(m,s),i.push(m),i},e.addTask=e=>{const{defaultDataItem:t,selectedDataItem:n,direction:a,taskModelFields:r,dataTree:l,slotStart:s,slotEnd:i}=e,d=K(l,r.children,(e=>({...e}))),c=o.setter(r.start),u=o.setter(r.end),m=o.getter(r.start),p=o.getter(r.end),g=o.setter(r.parentId||""),h=t?{...t}:{},f=m(h)&&p(h);if(n&&"none"!==a){const e=[{task:{[r.children]:d},childrenIndex:0}],t=o.getter(r.id),l=o.getter(r.children),k=o.setter(r.children),y=t(n);for(;e.length>0;){const n=e[e.length-1],a=n.task,o=t(a),r=l(a);if(o&&o===y)break;r&&r.length&&r.length>n.childrenIndex?(e.push({task:r[n.childrenIndex],childrenIndex:0}),n.childrenIndex++):e.pop()}if(e.length>1){const n=e[e.length-1].task,o=e[e.length-2].childrenIndex,d=e[e.length-2].task,y=l(d);switch(a){case"child":{let a=l(n);a||(a=[],k(n,a)),f||(c(h,new Date(m(n).getTime())),u(h,new Date(p(n).getTime()))),a.push(h),g(h,t(n)),ln(e.splice(1,e.length-1).map((e=>e.task)),r);break}case"above":m(d)&&p(d)&&!f?(c(h,new Date(m(n).getTime())),u(h,new Date(p(n).getTime()))):(c(h,s),u(h,i)),y.splice(o-1,0,h),g(h,t(d)),ln(e.splice(1,e.length-2).map((e=>e.task)),r);break;case"below":m(d)&&p(d)&&!f?(c(h,new Date(m(n).getTime())),u(h,new Date(p(n).getTime()))):(c(h,s),u(h,i)),y.splice(o,0,h),g(h,t(d)),ln(e.splice(1,e.length-2).map((e=>e.task)),r)}}}else f||(c(h,s),u(h,i)),r.parentId&&g(h,null),d.unshift(h);return d},e.createDataTree=O,e.extendDataItem=V,e.filterBy=H,e.mapTree=K,e.orderBy=W,e.removeTask=e=>{const{removedDataItem:t,taskModelFields:n,dataTree:a}=e,r=K(a,n.children,(e=>({...e})));let l=[{task:{[n.children]:r},childrenIndex:0}];const s=o.getter(n.id),i=o.getter(n.children),d=s(t);for(;l.length>0;){const e=l[l.length-1],t=e.task,n=s(t),a=i(t);if(n&&n===d)break;a&&a.length&&a.length>e.childrenIndex?(l.push({task:a[e.childrenIndex],childrenIndex:0}),e.childrenIndex++):l.pop()}if(l.length>1){const e=l[l.length-2];i(e.task).splice(e.childrenIndex-1,1),l=l.splice(1,l.length-2),ln(l.map((e=>e.task)),n)}return r},e.updateTask=e=>{const{updatedDataItem:t,taskModelFields:n,dataTree:a}=e,r=o.getter(n.id),l=o.getter(n.children),s=r(t);let i;const d=K(a,n.children,(e=>r(e)===s?(i=e,{...t}):{...e}));let c=[{task:{[n.children]:d},childrenIndex:0}];for(;c.length>0;){const e=c[c.length-1],t=e.task,n=r(t),a=l(t);if(n&&n===s)break;a&&a.length&&a.length>e.childrenIndex?(c.push({task:a[e.childrenIndex],childrenIndex:0}),e.childrenIndex++):c.pop()}if(c.length>1){c=c.splice(1,c.length-2);const e=o.getter(n.start),a=o.getter(n.end),s=o.getter(n.percentComplete),u=o.getter(n.parentId||"");if(e(i).getTime()!==e(t).getTime()){cn(c.map((e=>e.task)),n);const a=e(t).getTime()-e(i).getTime();pn(l(t),n,a)}if(a(i).getTime()!==a(t).getTime()&&un(c.map((e=>e.task)),n),s(i)!==s(t)&&mn(c.map((e=>e.task)),n),n.parentId&&u(i)!==u(t)){let e;return c.length?sn(c.map((e=>e.task)),n,i):e=d.filter((e=>r(e)!==r(t))),dn(e||d,n,t)}}return d}}));
15
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("prop-types"),require("@progress/kendo-date-math"),require("@progress/kendo-react-common"),require("@progress/kendo-react-data-tools"),require("@progress/kendo-react-treelist"),require("@progress/kendo-react-intl"),require("@progress/kendo-svg-icons"),require("@progress/kendo-react-buttons"),require("react-dom"),require("@progress/kendo-react-form"),require("@progress/kendo-react-dialogs"),require("@progress/kendo-react-labels"),require("@progress/kendo-react-inputs"),require("@progress/kendo-react-layout"),require("@progress/kendo-react-dateinputs"),require("@progress/kendo-react-dropdowns"),require("@progress/kendo-react-grid"),require("@progress/kendo-data-query")):"function"==typeof define&&define.amd?define(["exports","react","prop-types","@progress/kendo-date-math","@progress/kendo-react-common","@progress/kendo-react-data-tools","@progress/kendo-react-treelist","@progress/kendo-react-intl","@progress/kendo-svg-icons","@progress/kendo-react-buttons","react-dom","@progress/kendo-react-form","@progress/kendo-react-dialogs","@progress/kendo-react-labels","@progress/kendo-react-inputs","@progress/kendo-react-layout","@progress/kendo-react-dateinputs","@progress/kendo-react-dropdowns","@progress/kendo-react-grid","@progress/kendo-data-query"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).KendoReactGantt={},e.React,e.PropTypes,e.KendoDateMath,e.KendoReactCommon,e.KendoReactDataTools,e.KendoReactTreelist,e.KendoReactIntl,e.KendoSvgIcons,e.KendoReactButtons,e.ReactDOM,e.KendoReactForm,e.KendoReactDialogs,e.KendoReactLabels,e.KendoReactInputs,e.KendoReactLayout,e.KendoReactDateinputs,e.KendoReactDropdowns,e.KendoReactGrid,e.KendoDataQuery)}(this,(function(e,t,n,a,o,r,l,s,i,d,c,u,m,p,g,h,f,k,y,v){"use strict";function C(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var a=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,a.get?a:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var D=C(t),E=C(c);const b=r.TABLE_ROW_INDEX_ATTRIBUTE,I=r.TABLE_COL_INDEX_ATTRIBUTE,w=r.TABLE_PREVENT_SELECTION_ELEMENT,S=(new Date).getTime(),R={skeleton:"MEd"},T=100,x="data-dependency-drag-handle",F={[x]:"start"},N={[x]:"finish"},M="data-task-id",z={id:"id",start:"start",end:"end",title:"title",percentComplete:"percentComplete",parentId:"parentId",isRollup:"isRollup",isExpanded:"isExpanded",isInEdit:"isInEdit",children:"children",isSelected:"isSelected"},L={id:"id",fromId:"fromId",toId:"toId",type:"type"},W=r.orderBy,H=r.filterBy,K=o.mapTree,V=o.extendDataItem,O=l.createDataTree,A=e=>a.getDate(e),P=(e,t)=>a.getDate(a.addDays(e,t||1));function B(e){return new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()))}const G=(e,t,n,a)=>a?_(e,t,n):$(e,t,n),_=(e,t,n)=>{n.push({top:e-2,left:t}),n.push({top:e,left:t-4+1}),n.push({top:e+2,left:t}),n.push({top:e,left:t})},$=(e,t,n)=>{n.push({top:e+2,left:t}),n.push({top:e,left:t+4-1}),n.push({top:e-2,left:t}),n.push({top:e,left:t})},q=e=>{if(void 0===e.workWeekStart||void 0===e.workWeekEnd)return[];const t=[];let n=e.workWeekStart;for(t.push(n);e.workWeekEnd!==n;)n>6?n-=7:n++,t.push(n);return t},Z=(e,t)=>{const n=e.getDay();return t.indexOf(n)>-1},U=(e,{step:t,timezone:n})=>{const o=[],r=a.ZonedDate.fromLocalDate(e.start,n),l=a.ZonedDate.fromLocalDate(e.end,n);let s=r.clone();for(;s.getTime()<l.getTime();){const e=s.clone(),n=e.clone().addTime(t),a=new Date(e.getTime()),r={end:new Date(n.getTime()),start:a,zonedStart:e,zonedEnd:n};o.push(r),s=s.addTime(t)}return o},j=(e,t,n)=>U(e,{step:a.MS_PER_DAY,timezone:t.timezone}).map((e=>({range:e,isWork:Z(e.start,t.workDays),span:1,text:n.formatDate(e.zonedStart,R),type:"day"}))),Y=(e,t,n)=>((e,{timezone:t},n)=>{const o=[],r=a.ZonedDate.fromLocalDate(e.start,t),l=a.ZonedDate.fromLocalDate(e.end,t);for(let e=r.clone();e.getTime()<l.getTime();){const r=e.clone(),s=P(a.firstDayInWeek(a.getDate(r),n.firstDay()),7),i=a.ZonedDate.fromUTCDate(B(s),t),d=i.getTime()>l.getTime()?l.clone():i;e=d.clone();const c=new Date(r.getTime()),u={end:new Date(d.getTime()),start:c,zonedStart:r,zonedEnd:d};o.push(u)}return o})(e,{timezone:t.timezone},n).map((e=>{const t=Math.round((e.zonedEnd.getTime()-e.zonedStart.getTime())/a.MS_PER_DAY);return{range:e,isWork:!1,span:t,text:`${n.formatDate(e.zonedStart,R)} - ${n.formatDate(e.zonedEnd,R)}`,type:"week"}})),X=(e,t,n)=>((e,{timezone:t})=>{const n=[],o=a.ZonedDate.fromLocalDate(e.start,t),r=a.ZonedDate.fromLocalDate(e.end,t);for(let e=o.clone();e.getTime()<r.getTime();){const o=e.clone(),r=a.ZonedDate.fromLocalDate(a.addMonths(new Date(o.getTime()),1),t);e=r.clone();const l=new Date(o.getTime()),s={end:new Date(r.getTime()),start:l,zonedStart:o,zonedEnd:r};n.push(s)}return n})(e,{timezone:t.timezone}).map((e=>{const t=Math.round((e.zonedEnd.getTime()-e.zonedStart.getTime())/a.MS_PER_DAY);return{range:e,isWork:!1,span:t,text:n.formatDate(e.zonedStart,"MMM"),type:"month"}})),Q=(e,t,n)=>((e,{timezone:t})=>{const n=[],o=a.ZonedDate.fromLocalDate(e.start,t),r=a.ZonedDate.fromLocalDate(e.end,t);for(let e=o.clone();e.getTime()<r.getTime();){const o=e.clone(),r=a.ZonedDate.fromLocalDate(a.addMonths(new Date(o.getTime()),12),t);e=r.clone();const l=new Date(o.getTime()),s={end:new Date(r.getTime()),start:l,zonedStart:o,zonedEnd:r};n.push(s)}return n})(e,{timezone:t.timezone}).map((e=>{const t=Math.round((e.zonedEnd.getTime()-e.zonedStart.getTime())/a.MS_PER_DAY);return{range:e,isWork:!1,span:t,text:n.formatDate(e.zonedStart,"yyyy"),type:"year"}})),J=(e,t)=>!!o.getter(t)(e),ee=(e,t)=>!!o.getter(t)(e),te=D.createContext([]);te.displayName="KendoReactGanttTaskDataContext";const ne=D.createContext([]);ne.displayName="KendoReactGanttDependencyDataContext";const ae=D.createContext(z),oe=()=>D.useContext(ae);ae.displayName="KendoReactGanttTaskModelFieldsContext";const re=D.createContext(L),le=()=>D.useContext(re);re.displayName="KendoReactGanttDependencyModelFieldsContext";const se=D.createContext({}),ie=()=>D.useContext(se);se.displayName="KendoReactGanttPropsContext";const de=D.createContext({start:new Date,end:new Date,zonedStart:a.ZonedDate.fromLocalDate(new Date),zonedEnd:a.ZonedDate.fromLocalDate(new Date)}),ce=()=>D.useContext(de);de.displayName="KendoReactGanttDateRangeContext";const ue=D.createContext([]);ue.displayName="KendoReactGanttViewsContext";const me=D.createContext(["week",o.noop]),pe=()=>D.useContext(me);me.displayName="KendoReactGanttActiveViewContext";const ge=D.createContext(0),he=()=>D.useContext(ge);ge.displayName="KendoReactGanttRowHeightContext";const fe=D.createContext(0);fe.displayName="KendoReactGanttToolbarHeightContext";const ke=D.createContext({onDataStateChange:o.noop,onSortChange:o.noop,onFilterChange:o.noop,onColumnMenuFilterChange:o.noop,onExpandChange:o.noop,onRowClick:o.noop,onRowDoubleClick:o.noop,onRowContextMenu:o.noop,onColumnResize:o.noop,onColumnReorder:o.noop,onDependencyCreate:o.noop,onKeyDown:o.noop,onSelectionChange:o.noop,onHeaderSelectionChange:o.noop});ke.displayName="KendoReactGanttEventsContext";const ye=D.createContext({onTaskClick:o.noop,onTaskDoubleClick:o.noop,onTaskContextMenu:o.noop});ye.displayName="KendoReactGanttTaskEventsContext";const ve=({children:e,taskData:t,dependencyData:n,taskModelFields:a,dependencyModelFields:o,props:r,dateRange:l,views:s,activeView:i,rowHeight:d,toolbarHeight:c,events:u,taskEvents:m})=>D.createElement(se.Provider,{value:r},D.createElement(te.Provider,{value:t},D.createElement(ne.Provider,{value:n},D.createElement(ae.Provider,{value:a},D.createElement(re.Provider,{value:o},D.createElement(de.Provider,{value:l},D.createElement(ue.Provider,{value:s},D.createElement(me.Provider,{value:i},D.createElement(ge.Provider,{value:d},D.createElement(fe.Provider,{value:c},D.createElement(ke.Provider,{value:u},D.createElement(ye.Provider,{value:m},e))))))))))));ve.displayName="KendoReactGanttContext";const Ce=D.createContext([{current:{}},o.noop]),De=()=>D.useContext(Ce);Ce.displayName="KendoReactGanttViewContext";const Ee=D.createContext(0);Ee.displayName="KendoReactGanttViewTimelineWidthContext";const be=D.createContext({onDependencyHandlePress:o.noop,onDependencyHandleDrag:o.noop,onDependencyHandleRelease:o.noop,isEnabled:!1,draggedId:null});be.displayName="KendoReactGanttViewDependencyDragContext";const Ie=({children:e,tasksStore:t,timelineWidth:n,dependencyDrag:a})=>D.createElement(Ce.Provider,{value:t},D.createElement(Ee.Provider,{value:n},D.createElement(be.Provider,{value:a},e)));Ie.displayName="KendoReactGanttViewContext";var we=(e=>(e[e.add=0]="add",e[e.remove=1]="remove",e))(we||{});const Se=D.forwardRef(((e,t)=>{const n=ce(),a=oe(),r=D.useContext(Ee),l=D.useContext(be),s=D.useContext(ye),d=D.useRef(null),c=D.useRef(null);((e,t,n,a)=>{const r=D.useRef(null),[,l]=De();D.useImperativeHandle(r,(()=>({element:a.current,dataItem:e}))),D.useImperativeHandle(n,(()=>r.current)),o.useIsomorphicLayoutEffect((()=>{const e=r.current;if(e)return l({type:we.add,itemRef:e,id:t}),()=>{l({type:we.remove,itemRef:e,id:t})}}))})(e.dataItem,o.getter(a.id)(e.dataItem),t,d);const u=D.useRef(null),m=o.getter(a.id)(e.dataItem),p=o.getter(a.start)(e.dataItem),g=o.getter(a.end)(e.dataItem),h=o.getter(a.title)(e.dataItem),f=o.getter(a.percentComplete)(e.dataItem),k=o.getter(a.children)(e.dataItem),y=o.getter(a.isSelected)(e.dataItem),v=p&&p.getTime(),C=g&&g.getTime(),E=k&&k.length,b=!E&&v===C,I=v&&C&&((e,t,n,a)=>n<t&&e<=a)(n.start,n.end,p,g),[w,S]=D.useState(!1),R=D.useRef(null),T=D.useRef(null);o.useDraggable(R,{onPress:l.onDependencyHandlePress,onDrag:l.onDependencyHandleDrag,onRelease:l.onDependencyHandleRelease}),o.useDraggable(T,{onPress:l.onDependencyHandlePress,onDrag:l.onDependencyHandleDrag,onRelease:l.onDependencyHandleRelease});const x=D.useCallback((t=>{s.onTaskClick&&s.onTaskClick({dataItem:e.dataItem,level:e.level,nativeEvent:t&&t.nativeEvent,syntheticEvent:t,target:null})}),[e.dataItem,e.level]),z=D.useCallback((t=>{s.onTaskDoubleClick&&s.onTaskDoubleClick({dataItem:e.dataItem,level:e.level,nativeEvent:t&&t.nativeEvent,syntheticEvent:t,target:null})}),[e.dataItem,e.level]),L=D.useCallback((t=>{s.onTaskContextMenu&&s.onTaskContextMenu({dataItem:e.dataItem,level:e.level,nativeEvent:t&&t.nativeEvent,syntheticEvent:t,target:null})}),[e.dataItem,e.level]),W=D.useCallback((t=>{s.onTaskRemoveClick&&s.onTaskRemoveClick({dataItem:e.dataItem,level:e.level,nativeEvent:t&&t.nativeEvent,syntheticEvent:t,target:null})}),[e.dataItem,e.level]),H=D.useCallback((()=>{const e=n.start,t=n.end,a=u.current,o=d.current,r=c.current;if(!I||null===a||null===o)return;const l=a.clientWidth/(t.getTime()-e.getTime()),s=(p.getTime()-e.getTime())*l,i=(g.getTime()-p.getTime())*l,m=(a.offsetHeight-o.offsetHeight)/2;o.style.left=`${Math.round(b?s-6:s)}px`,o.style.top=`${Math.round(m)}px`,b||(o.style.width=`${Math.round(i)}px`,null!==r&&(r.style.width=`${Math.round(i*(f||0))}px`)),S(!0)}),[n.start.getTime(),n.end.getTime(),v,C,I,f,r]);D.useEffect(H,[H]);const K={visibility:w?void 0:"hidden",display:I?void 0:"none"},V={userSelect:"none",display:l.draggedId===String(m)?"block":void 0};return D.createElement("td",{ref:u,key:m,role:"presentation"},b?D.createElement("div",{"aria-hidden":!0,className:o.classNames({"k-task":!0,"k-task-milestone":!0,"k-selected":y&&!Array.isArray(y)}),style:K,ref:d,[M]:m,onClick:x,onDoubleClick:z,onContextMenu:L},D.createElement("div",{className:"k-task-milestone-content"}),l.isEnabled&&D.createElement("div",{className:"k-task-dot k-task-start",ref:R,style:V,...F}),l.isEnabled&&D.createElement("div",{className:"k-task-dot k-task-end",ref:T,style:V,...N})):D.createElement("div",{"aria-hidden":!0,className:o.classNames({"k-task":!0,"k-task-summary":E,"k-task-single":!E,"k-selected":y&&!Array.isArray(y)}),ref:d,style:K,[M]:m,onClick:x,onDoubleClick:z,onContextMenu:L},E?D.createElement("div",{className:"k-task-summary-progress",ref:c},D.createElement("div",{className:"k-task-summary-complete"})):D.createElement("div",{className:"k-task-complete",ref:c}),!E&&D.createElement(D.Fragment,null,D.createElement("div",{className:"k-task-content"},h),s.onTaskRemoveClick?D.createElement("span",{className:"k-task-actions"},D.createElement("span",{onClick:W,className:"k-link k-task-delete","aria-label":"Delete"},D.createElement(o.IconWrap,{name:"x",icon:i.xIcon}))):null),l.isEnabled&&D.createElement("div",{className:"k-task-dot k-task-start",ref:R,style:V,...F}),l.isEnabled&&D.createElement("div",{className:"k-task-dot k-task-end",ref:T,style:V,...N})))}));Se.displayName="KendoReactGanttTask";const Re=e=>{const{dependency:t}=e,[n]=De(),a=D.useRef(null),r=le(),l=he(),[s,i]=D.useState(!1);return D.useEffect((()=>{if(null===a.current||null===n.current)return void i(!1);const e=n.current[o.getter(r.fromId)(t)],d=n.current[o.getter(r.toId)(t)];if(!e||!d)return void i(!1);const c=e.element,u=d.element;if(!c||!u)return void i(!1);if(!1===s)return void i(!0);const m={top:c.offsetTop+c.offsetHeight/2,start:c.offsetLeft,end:c.offsetLeft+c.offsetWidth},p={top:u.offsetTop+u.offsetHeight/2,start:u.offsetLeft,end:u.offsetLeft+u.offsetWidth},g=o.getter(r.type)(t),h=((e,t,n,a)=>{const o=[];let r=0,l=0;const s=10,i=Math.floor(n/2),d=e.top<t.top,c=()=>o.push({left:l,top:r});if(0===a||3===a){const n=3===a?"start":"end";r=e.top,l=e[n],c(),l=Math["start"===n?"min":"max"](e[n],t[n]),l="start"===n?l-s:l+s,c(),r=t.top,c(),l="start"===n?t[n]-4:t[n]+4,c(),G(r,l,o,"start"!==n)}else{const n=2===a?"start":"end",u=2===a?"end":"start",m=2===a?e[n]-20>=t[u]:e[n]+20<=t[u];r=e.top,l=e[n],c(),l="start"===n?l-s:l+s,c(),m||(r=d?r+i:r-i,c(),l="start"===n?t[u]+s:t[u]-s,c()),r=t.top,c(),l="start"===u?t[u]-4:t[u]+4,c(),G(r,l,o,"start"!==u)}return o})(m,p,l,g);h&&h.length&&a.current.setAttribute("points",h.map((e=>`${e.left},${e.top}`)).join(" "))})),D.createElement("polyline",{ref:a,style:{display:s?void 0:"none"}})};Re.displayName="KendoReactGanttDependency";const Te=class extends D.Component{constructor(e){super(e),this.state={activeId:void 0,level:0},this.tableElement=null,this.tbodyElement=null,this.wrapperScrollLeft=0,this.wrapperScrollTop=0,this.updateOnScroll=!1,this.tbodyOffsetTop=0,this.prevData=[],this.flattedData=[],this.element=null,this.contextStateRef={current:void 0},this.navigationStateRef={current:void 0},this.scrollIntoView=e=>{if(!this.element)return;const{rowIndex:t=0}=e,{rowHeight:n=0}=this.props;this.element.scroll(0,(t-1)*n)},this.getColumns=e=>{const t=e.filter((e=>e.declarationIndex>=0&&-1===e.parentIndex)),n=e=>(e.sort(((e,t)=>e.declarationIndex-t.declarationIndex)),e.map((e=>{const{declarationIndex:t,parentIndex:a,depth:o,colSpan:r,rowSpan:l,index:s,kFirst:i,groupable:d,children:c,...u}=e;return c.length?{children:n(c),...u}:u})));return n(t)},this.onKeyDown=e=>{if(r.tableKeyboardNavigation.onKeyDown(e,{navigatable:!1,contextStateRef:this.contextStateRef,navigationStateRef:this.navigationStateRef}),this.props.onKeyDown){const{mode:t,cell:n}=r.getSelectionOptions(this.props.selectable),a={dataItems:this.getLeafDataItems(),mode:t,cell:n,componentId:this.props.treelistId,selectedField:this.props.selectedField,...this.getEventArguments(e)};this.props.onKeyDown.call(void 0,a)}},this.onFocus=e=>{r.tableKeyboardNavigation.onFocus(e,{contextStateRef:this.contextStateRef})},this.onRowDrag=e=>{if(this.props.onRowDrag){const t={...e,target:this};this.props.onRowDrag.call(void 0,t)}},this.onRowDrop=e=>{if(this.props.onRowDrop){const t={...e,target:this};this.props.onRowDrop.call(void 0,t)}},this.onColumnReorder=(e,t,n)=>{const{extendedColumns:a}=this.props,o=a[e].depth,r=e=>{do{e++}while(e<a.length&&a[e].depth>o);return e},l=[...a],s=l.splice(e,r(e)-e);if(l.splice(e<t?r(t-s.length):t,0,...s),l.filter((e=>e.declarationIndex>=0)).forEach(((e,t)=>e.orderIndex=t)),this.props.onColumnReorder){const e={target:this,columns:this.getColumns(l),nativeEvent:n};this.props.onColumnReorder.call(void 0,e)}},this.onColumnResize=(e,t,n,a,o)=>{if(this.props.onColumnResize){const r=this.props.extendedColumns.filter((e=>0===e.children.length)).reduce(((e,t)=>e+parseFloat(String(t.width))),0);this.tableElement&&(this.tableElement.style.width=r+"px");const l={columns:this.getColumns(this.props.extendedColumns),totalWidth:r,index:e,nativeEvent:a,newWidth:t,oldWidth:n,end:o,target:this};this.props.onColumnResize.call(void 0,l)}},this.onScroll=e=>{const t=e.currentTarget.scrollLeft,n=e.currentTarget.scrollTop,{columnVirtualization:a,scrollable:o,rowHeight:r=0}=this.props,l=r;let s=!1;a&&Math.abs(this.wrapperScrollLeft-t)>0&&(this.wrapperScrollLeft=t,s=!0),"virtual"===o&&Math.abs(this.wrapperScrollTop-n)>l&&(this.wrapperScrollTop=n,s=!0),s&&(this.updateOnScroll=!0,this.forceUpdate())},this.calculateSizes=e=>{if(!e||"none"===this.props.scrollable)return;const t=Array.from(e.childNodes),n=t.find((e=>"TABLE"===e.nodeName)),a=this.props.toolbar&&t.find((e=>1===e.nodeType&&e.classList.contains("k-grid-toolbar")));let o=0;if(a){const e=a.style.boxSizing;a.style.boxSizing="border-box",o=parseFloat(String(window.getComputedStyle(a).height))||a.offsetHeight,a.style.boxSizing=e,a.getAttribute("style")||a.removeAttribute("style")}this.tbodyOffsetTop=n.tBodies[0].offsetTop,l.setHeaderRowsTop(n,o)},this.onItemChange=e=>{if(e.field!==this.props.expandField){if(this.props.onItemChange){const t={...this.getEventArguments(e.syntheticEvent),dataItem:e.dataItem,level:e.level,field:e.field,value:e.value};this.props.onItemChange.call(void 0,t)}}else{const t=this.props.onExpandChange;if(t){const n={...this.getEventArguments(e.syntheticEvent),dataItem:e.dataItem,level:e.level,value:e.value};t.call(void 0,n)}}},this.onHeaderSelectionChange=e=>{if(this.props.onHeaderSelectionChange){const t={field:e.field,nativeEvent:e.syntheticEvent&&e.syntheticEvent.nativeEvent,syntheticEvent:e.syntheticEvent,target:this,dataItems:this.getLeafDataItems()};this.props.onHeaderSelectionChange.call(void 0,t)}},this.selectionRelease=e=>{if(this.props.onSelectionChange){const t={syntheticEvent:void 0,target:this,selectedField:this.props.selectedField||"",componentId:this.props.treelistId,dataItems:this.getLeafDataItems(),dataItem:null,level:[],...e};this.props.onSelectionChange.call(void 0,t)}},this.onSortChange=(e,t,n)=>{this.onDataStateChange(this.props.onSortChange,{sort:t,field:n},e)},this.onFilterChange=e=>{const{filter:t,field:n}=e;this.onDataStateChange(this.props.onFilterChange,{filter:t,field:n},e.syntheticEvent)},this.onColumnMenuFilterChange=(e,t,n)=>{if(!n)return;const{onColumnMenuFilterChange:a}=this.props;if(!a)return;const o={syntheticEvent:e,filter:t,field:n,target:this,nativeEvent:e.nativeEvent};a.call(void 0,o)},this.onExpandChange=(e,t,n)=>{const{expandField:a,onExpandChange:o}=this.props;if(a&&o){const a={...this.getEventArguments(e),dataItem:t,level:n,value:J(t,this.props.expandField)};o.call(void 0,a)}},this.onRowClick=(e,t)=>{if(this.props.onRowClick&&"TD"===e.target.nodeName){const n={dataItem:t.dataItem,level:t.level,...this.getEventArguments(e)};this.props.onRowClick.call(void 0,n)}},this.rowDoubleClick=(e,t)=>{if(this.props.onRowDoubleClick&&"TD"===e.target.nodeName){const n={dataItem:t.dataItem,level:t.level,...this.getEventArguments(e)};this.props.onRowDoubleClick.call(void 0,n)}},this.rowContextMenu=(e,t)=>{if(this.props.onRowContextMenu&&"TD"===e.target.nodeName){const n={dataItem:t.dataItem,level:t.level,...this.getEventArguments(e)};this.props.onRowContextMenu.call(void 0,n)}},this.onPageChange=e=>{if(this.props.onPageChange){const t={...this.getEventArguments(e.syntheticEvent),skip:e.skip,take:e.take};this.props.onPageChange.call(void 0,t)}},this.onDataStateChange=(e,t,n)=>{if(e&&e.call(void 0,{...this.getEventArguments(n),...t}),this.props.onDataStateChange){const e={...this.getEventArguments(n),dataState:{...this.getDataState(),...t}};this.props.onDataStateChange.call(void 0,e)}},this.getDataState=()=>({filter:this.props.filter,sort:this.props.sort}),this.getEventArguments=e=>({nativeEvent:e&&e.nativeEvent,syntheticEvent:e,target:this}),this.getLeafDataItems=()=>this.flatData.map((e=>e.dataItem)),this.dragLogic=new r.CommonDragLogic(this.onColumnReorder,o.noop,o.noop),this.columnResize=new r.ColumnResize(this.onColumnResize),r.tableKeyboardNavigation.onConstructor({navigatable:!!e.navigatable,contextStateRef:this.contextStateRef,navigationStateRef:this.navigationStateRef,idPrefix:e.idPrefix})}get document(){if(o.canUseDOM)return this.element&&this.element.ownerDocument||document}componentDidMount(){this.calculateSizes(this.element),r.tableKeyboardNavigation.onComponentDidMount({scope:this.element||void 0,contextStateRef:this.contextStateRef,navigationStateRef:this.navigationStateRef})}getSnapshotBeforeUpdate(){return r.tableKeyboardNavigation.onGetSnapshotBeforeUpdate({document:this.document,contextStateRef:this.contextStateRef,navigationStateRef:this.navigationStateRef}),null}componentDidUpdate(e){e.columns!==this.props.columns&&this.calculateSizes(this.element),r.tableKeyboardNavigation.onComponentDidUpdate({scope:this.element||void 0,contextStateRef:this.contextStateRef,navigationStateRef:this.navigationStateRef})}componentWillUnmount(){this.columnResize.columns=[],this.dragLogic.columns=[],this.prevData=[],this.flattedData=[],this.updateOnScroll=!1}render(){const{filterRow:e,scrollable:t="scrollable",resizable:n=!1,reorderable:a=!1,skip:s,take:i,afterContent:d,extendedColumns:c=[],columnsMap:u}=this.props,m=c.some((e=>!!e.filter))||void 0!==e,p=e||r.FilterRow,g=r.tableKeyboardNavigationTools.getIdPrefix(this.navigationStateRef);this.columnResize.columns=c,this.columnResize.resizable=n,this.dragLogic.columns=c,this.dragLogic.reorderable=a,this.dragLogic.groupable=!1;const h=c.filter((e=>0===e.children.length)),f=D.createElement(r.Header,{headerRow:D.createElement(r.HeaderRow,{sort:this.props.sort,sortable:this.props.sortable,sortChange:this.onSortChange,selectionChange:this.onHeaderSelectionChange,columns:c,columnsMap:u,cellRender:this.props.headerCellRender,columnResize:this.columnResize,columnMenu:this.props.columnMenu,columnMenuFilter:this.props.columnMenuFilter,columnMenuFilterChange:this.onColumnMenuFilterChange,pressHandler:this.dragLogic.pressHandler,dragHandler:this.dragLogic.dragHandler,releaseHandler:this.dragLogic.releaseHandler}),filterRow:m&&D.createElement(p,{columns:h,filter:this.props.filter,filterChange:this.onFilterChange,sort:this.props.sort,ariaRowIndex:u.length+1})||void 0,columnResize:this.columnResize}),k=this.props.style||{},{colSpans:y,hiddenColumns:v}=r.tableColumnsVirtualization({enabled:this.props.columnVirtualization,columns:h,scrollLeft:this.wrapperScrollLeft,tableViewPortWidth:parseFloat((k.width||"").toString())}),C=(e,t,n,a,o,s)=>h.map(((i,d)=>{if(v[d])return null;const c=i.id?i.id:d,u=`k-table-td ${i.className?i.className+" ":""}${i.locked?"k-grid-content-sticky":""}`,m={id:r.tableKeyboardNavigationTools.generateNavigatableId(`${n}-${String(d)}`,g),colSpan:y[d],dataItem:e.dataItem,field:i.field,format:i.format,className:u||void 0,render:this.props.cellRender,onChange:this.onItemChange,selectionChange:this.props.onSelectionChange?t=>{this.onSelectionChange({event:t,item:e,columnIndex:d,dataIndex:o})}:void 0,level:e.level,expandable:i.expandable,expanded:a,hasChildren:ee(e.dataItem,this.props.subItemsField),colIndex:d,ariaColumnIndex:i.ariaColumnIndex,onExpandChange:this.onExpandChange,style:void 0!==i.left&&{left:i.left,right:i.right,borderRightWidth:i.rightBorder?"1px":""}||{},isSelected:Array.isArray(s)&&s.indexOf(d)>-1};return t&&i.editCell?D.createElement(i.editCell,{...m,onChange:this.onItemChange,key:c}):i.cell?D.createElement(i.cell,{key:c,...m}):D.createElement(l.TreeListCell,{key:c,...m})}));let E=this.flatData;const b=E.length;void 0!==s&&void 0!==i&&(E=E.slice(s,s+i)),"virtual"===t&&(E=l.tableRowsVirtualization({rows:E,tableViewPortHeight:parseFloat((k.height||k.maxHeight||"").toString()),scrollTop:this.wrapperScrollTop}),this.updateOnScroll=!1);const I=E.map((e=>e.level)),w=u.length+(m?1:0)+1,S=E.length>0&&E.map(((e,t)=>{const n=o.getter(this.props.editField||"")(e.dataItem),a=o.getter(this.props.dataItemKey)(e.dataItem),r=String(a||e.level.join(".")),s=J(e.dataItem,this.props.expandField),i=this.props.selectedField?o.getter(this.props.selectedField)(e.dataItem):void 0,d={key:r,level:e.level,levels:I,dataItem:e.dataItem,selectedField:this.props.selectedField,rowHeight:e.height,render:this.props.rowRender,onDrop:this.onRowDrop,onDrag:this.onRowDrag,onClick:t=>this.onRowClick(t,e),onDoubleClick:t=>this.rowDoubleClick(t,e),onContextMenu:t=>this.rowContextMenu(t,e),isAltRow:t%2!=0,expanded:s,rowIndex:t,ariaRowIndex:w+t,ariaSetSize:e.levelCount,ariaPosInSet:e.level[e.level.length-1]+1,isSelected:"boolean"==typeof i&&i},c=this.props.editRow,u=this.props.row||l.TreeListRow,m=C(e,n,r,s,t,i);return n&&c?D.createElement(c,{...d,key:d.key},m):D.createElement(u,{...d,key:d.key},m)}))||D.createElement("tr",{className:"k-table-row k-grid-norecords"},D.createElement("td",{className:"k-table-td",colSpan:h.length},this.props.noRecords||D.createElement(l.TreeListNoRecords,null))),R=e=>this.props.sort&&this.props.sort.some((t=>t.field===e)),T=D.createElement("colgroup",{ref:e=>{this.columnResize.colGroupMain=e}},h.map(((e,t)=>D.createElement("col",{key:t.toString(),className:R(e.field)?"k-sorted":void 0,style:void 0!==e.width?{width:e.width}:void 0})))),x=this.props.columnVirtualization||"virtual"===this.props.scrollable,F=this.props.selectable&&this.props.selectable.drag?"none":void 0,N=this.props.tableProps||{};return D.createElement(r.TableKeyboardNavigationContext.Provider,{value:this.contextStateRef.current},D.createElement("div",{id:this.props.treelistId,style:this.props.style,className:o.classNames("k-grid k-grid-md",this.props.className,{"k-treelist-scrollable":"none"!==t}),ref:e=>{this.element=e},onScroll:x?this.onScroll:void 0,onKeyDown:this.onKeyDown,onFocus:this.onFocus,"aria-rowcount":b,"aria-colcount":h.length,role:"treegrid",...r.tableKeyboardNavigationScopeAttributes},this.props.toolbar,D.createElement(r.TableSelection,{selectable:this.props.selectable,onRelease:this.selectionRelease,childRef:e=>{this.tableElement=e}},D.createElement("table",{className:"k-table k-table-md",...this.props.tableProps||{},style:{...N.style||{},userSelect:F},role:"presentation"},T,f,D.createElement("tbody",{className:"k-table-tbody",...r.tableKeyboardNavigationBodyAttributes,ref:e=>{this.tbodyElement=e},role:"presentation"},S))),this.props.pager&&D.createElement(this.props.pager,{className:"k-grid-pager",total:b,skip:s,take:i,onPageChange:this.onPageChange}),a&&D.createElement(D.Fragment,null,D.createElement(r.DropClue,{ref:this.dragLogic.refDropElementClue}),D.createElement(r.DragClue,{ref:this.dragLogic.refDragElementClue})),d))}get flatData(){const{data:e=[],rowHeight:t=0}=this.props;let n=0;const a=()=>{const e={height:t,offsetTop:n};return n+=e.height,e},o=this.updateOnScroll&&this.prevData===e&&this.tbodyOffsetTop>0&&this.flattedData.length?this.flattedData:e.map((e=>({...e,...a()})));return this.prevData=e,this.flattedData=o,o}onSelectionChange(e){if(this.props.onSelectionChange){const{event:t,item:n,dataIndex:a,columnIndex:o}=e,{mode:l,cell:s}=r.getSelectionOptions(this.props.selectable),i={...this.getEventArguments(t.syntheticEvent),dataItem:n.dataItem,level:n.level,startColIndex:o,endColIndex:o,startRowIndex:a,endRowIndex:a,dataItems:this.getLeafDataItems(),altKey:!1,ctrlKey:!1,shiftKey:!1,metaKey:!1,mode:l,cell:s,isDrag:!1,componentId:this.props.treelistId,selectedField:this.props.selectedField||""};this.props.onSelectionChange.call(void 0,i)}}};Te.propTypes={data:n.array,resizable:n.bool,reorderable:n.bool,sortable:n.oneOfType([n.bool,n.shape({mode:n.oneOf(["single","multiple"]),allowUnsort:n.bool})]),onSortChange:n.func,sort:n.array,columns:n.arrayOf(n.object),columnVirtualization:n.bool,filter:n.array,onFilterChange:n.func,filterRow:n.any,toolbar:n.any,noRecords:n.any,onExpandChange:n.func,expandField:n.string,subItemsField:n.string,selectedField:n.string,onSelectionChange:n.func,onHeaderSelectionChange:n.func,onRowClick:n.func,onItemChange:n.func,editField:n.string,scrollable:n.oneOf(["none","scrollable","virtual"]),rowHeight:n.number,style:n.object,tableProps:n.object,pager:n.any,skip:n.number,take:n.number,onPageChange:n.func,onDataStateChange:n.func,onColumnResize:n.func,onColumnReorder:n.func,extendedColumns:n.arrayOf(n.object),columnsMap:n.arrayOf(n.array),dataItemKey:n.string.isRequired,afterContent:n.any,navigatable:n.bool,idPrefix:n.string,treelistId:n.string},Te.contextType=r.TableKeyboardNavigationContext;let xe=Te;const Fe=D.forwardRef(((e,t)=>{const{slotLevels:n,slotWidth:a,timelineHeaderCell:l}=e,{columns:s,noRecords:i,resizable:d,reorderable:c,sortable:u,sort:m,filter:p,columnMenuFilter:g,columnMenu:h,navigatable:f,row:k,selectable:y}=ie(),{onDataStateChange:v,onSortChange:C,onFilterChange:E,onColumnMenuFilterChange:b,onExpandChange:I,onRowClick:w,onRowDoubleClick:S,onRowContextMenu:R,onColumnResize:F,onColumnReorder:N,onDependencyCreate:z,onKeyDown:L,onSelectionChange:W,onHeaderSelectionChange:H}=D.useContext(ke),K=he(),V=D.useContext(fe),O=oe(),A=le(),P=D.useContext(te),B=D.useContext(ne),G=D.useRef(null),_=D.useRef(null),$=D.useRef(null),q=D.useRef(null),Z=D.useRef(0),U=D.useRef(o.useId()),j=D.useRef(o.useId()),Y=D.useRef(null),X=D.useRef(null),Q=D.useCallback((e=>{$.current&&$.current.scrollIntoView(e)}),[]);D.useImperativeHandle(X,(()=>({scrollIntoView:Q}))),D.useImperativeHandle(t,(()=>X.current));const J=D.useRef(0),ee=D.useRef(0),ae=D.useRef(0),re=D.useRef(0),se=D.useRef(null),de=D.useRef(null),[ce,ue]=D.useState(null),me=((e,t,n)=>{const a=n;return D.createElement("table",{className:"k-table k-table-md",ref:t,"aria-hidden":!0},D.createElement("tbody",{className:"k-table-tbody"},e.map(((e,t)=>D.createElement("tr",{className:"k-table-row",key:t},e.map(((e,n)=>D.createElement("td",{key:e.range.start.getTime(),colSpan:e.span,className:o.classNames("k-table-th",{"k-header":!0,"k-nonwork-hour":!e.isWork})},a?D.createElement(a,{rowIndex:t,index:n,range:e.range,text:e.text,isWork:e.isWork,type:e.type}):e.text))))))))})(n,G,l),pe=((e,t)=>{const n=e[e.length-1];return D.createElement("table",{className:"k-table k-table-md k-gantt-columns",ref:t,"aria-hidden":!0},D.createElement("tbody",{className:"k-table-tbody"},D.createElement("tr",{className:"k-table-row"},n.map((e=>D.createElement("td",{key:e.range.start.getTime(),colSpan:e.span,className:o.classNames("k-table-td",{"k-nonwork-hour":!e.isWork})}))))))})(n,_),ge=((e,t)=>{const n=e[e.length-1];let a=0,o=0;return n.forEach((e=>{const t=e.span;o+=t,t>a&&(a=t)})),Math.round(o*t/a)})(n,a),{extendedColumns:ye,columnsWidth:ve,columnsMap:Ce}=D.useMemo((()=>{const e=r.readColumns([...s,{title:"",sortable:!1,resizable:!1,reorderable:!1,width:ge,headerCell:()=>me,cell:Se,orderIndex:Number.MAX_SAFE_INTEGER,navigatable:!1}],{prevId:0,idPrefix:U.current});let t=0;return e.forEach(((e,n,a)=>{const o=n+1===a.length,r=0===e.children.length;o?e.isAccessible=!1:(e.locked=!0,r&&(e.width=e.width||T)),r&&(t+=parseFloat(String(e.width)))})),{extendedColumns:e,columnsWidth:t,columnsMap:r.mapColumns(e)}}),[s,ge]),[De,Ee]=(()=>{const e=D.useRef({}),t=D.useCallback((t=>{switch(t.type){case 0:e.current[t.id]=t.itemRef;break;case 1:delete e.current[t.id]}}),[]);return[e,t]})(),be=D.useCallback((()=>G.current&&G.current.parentElement),[]),we=()=>{const e=be(),t=_.current,n=$.current&&$.current.tbodyElement;if(!e||!t||!n)return;const a=n.offsetTop,o=e.offsetLeft,r=ge;t.style.top=a+"px",t.style.left=o+"px",t.style.width=r+"px",t.style.height=n.offsetHeight+"px"};D.useEffect(we),D.useEffect((()=>{const e=be();e&&(Z.current=e.offsetLeft)}));const Te=D.useCallback((e=>{if(!q.current)return;const t=e.columns.slice(0,e.columns.length-1);if(e.end)q.current.style.left="0px";else{const e=be();if(!e)return;q.current.style.left=e.offsetLeft-Z.current+"px",we()}F({...e,columns:t})}),[F]),Fe=D.useCallback((e=>{const t=e.columns.slice(0,e.columns.length-1);N({...e,columns:t})}),[F]),Ne=D.useCallback((e=>{const t=(Y.current&&Y.current.ownerDocument?Y.current.ownerDocument:document).elementFromPoint(e.clientX,e.clientY),n=Y.current;if(!t||!t.parentElement||!n)return;const a=n.parentElement,o=n.firstElementChild;if(!a||!o)return;const r=t.getAttribute(x);if(r){const l=n.offsetTop,s=n.offsetLeft,i=a.offsetTop,d=a.offsetLeft,c=o.scrollTop,u=o.scrollLeft;ae.current=s+d,re.current=l+i,J.current=e.clientX-ae.current+u,ee.current=e.clientY-re.current+c,se.current=t.parentElement.getAttribute(M),de.current=r}}),[]),Me=D.useCallback((e=>{const t=Y.current;if(!t)return;const n=t.firstElementChild;if(!n)return;const a=n.scrollTop,o=n.scrollLeft,r=e.clientX-ae.current+o,l=e.clientY-re.current+a;Math.abs(J.current-r)<10&&Math.abs(ee.current-l)<10||ue({startX:J.current,startY:ee.current,endX:r,endY:l})}),[]),ze=D.useCallback((e=>{const t=(Y.current&&Y.current.ownerDocument?Y.current.ownerDocument:document).elementFromPoint(e.clientX,e.clientY);if(!t||!t.parentElement)return;const n=t.parentElement.getAttribute(M),a=t.getAttribute(x);if(a&&n!==se.current&&z){let e;e="start"===de.current?"start"===a?3:2:"start"===a?1:0,z({fromId:se.current,toId:n,type:e})}J.current=0,ee.current=0,ae.current=0,re.current=0,se.current=null,de.current=null,ue(null)}),[z,ue]);return D.createElement(Ie,{tasksStore:[De,Ee],timelineWidth:ge,dependencyDrag:{isEnabled:!!z,draggedId:se.current,onDependencyHandlePress:Ne,onDependencyHandleDrag:Me,onDependencyHandleRelease:ze}},D.createElement("div",{className:"k-gantt-content",ref:Y,style:{height:`calc(100% - ${V}px)`}},D.createElement(xe,{treelistId:j.current,ref:$,extendedColumns:ye,columnsMap:Ce,dataItemKey:O.id,data:P,idPrefix:U.current,navigatable:f,expandField:O.isExpanded,subItemsField:O.children,editField:O.isInEdit,selectedField:O.isSelected,onDataStateChange:v,onSortChange:C,onFilterChange:E,onExpandChange:I,onRowClick:w,onRowDoubleClick:S,onRowContextMenu:R,onColumnResize:Te,onColumnReorder:Fe,onColumnMenuFilterChange:b,onKeyDown:L,onSelectionChange:W,onHeaderSelectionChange:H,tableProps:{style:{width:ve},className:"k-table k-table-md k-table-layout-fixed"},noRecords:i,rowHeight:K,resizable:d,reorderable:c,sortable:u,sort:m,filter:p,columnMenuFilter:g,columnMenu:h,row:k,selectable:y,afterContent:D.createElement(D.Fragment,null,D.createElement("svg",{className:"k-gantt-dependencies-svg",ref:q,style:{left:0,top:0}},B.map((e=>D.createElement(Re,{key:o.getter(A.id)(e),dependency:e})))),D.createElement("svg",{className:"k-gantt-dependencies-svg",style:{left:0,top:0,zIndex:3}},ce&&D.createElement("polyline",{points:`${ce.startX},${ce.startY} ${ce.endX},${ce.endY}`})),P&&P.length?pe:null)})))}));Fe.displayName="KendoReactGanttBaseView";const Ne="gantt.weekViewTitle",Me="gantt.dayViewTitle",ze="gantt.monthViewTitle",Le="gantt.yearViewTitle",We="gantt.filterClearButton",He="gantt.filterEqOperator",Ke="gantt.filterNotEqOperator",Ve="gantt.filterIsNullOperator",Oe="gantt.filterIsNotNullOperator",Ae="gantt.filterIsEmptyOperator",Pe="gantt.filterIsNotEmptyOperator",Be="gantt.filterStartsWithOperator",Ge="gantt.filterContainsOperator",_e="gantt.filterNotContainsOperator",$e="gantt.filterEndsWithOperator",qe="gantt.filterGteOperator",Ze="gantt.filterGtOperator",Ue="gantt.filterLteOperator",je="gantt.filterLtOperator",Ye="gantt.filterIsTrue",Xe="gantt.filterIsFalse",Qe="gantt.filterBooleanAll",Je="gantt.filterAfterOrEqualOperator",et="gantt.filterAfterOperator",tt="gantt.filterBeforeOperator",nt="gantt.filterBeforeOrEqualOperator",at="gantt.editSave",ot="gantt.editCancel",rt="gantt.editAdd",lt="gantt.editRemove",st="gantt.editTabGeneral",it="gantt.editTabPredecessors",dt="gantt.editTabSuccessors",ct="gantt.editorTitle",ut="gantt.editorTaskTitle",mt="gantt.editorTaskStart",pt="gantt.editorTaskEnd",gt="gantt.editorTaskComplete",ht="gantt.editorTaskParent",ft="gantt.editorValidationRequired",kt="gantt.editorValidationStart",yt="gantt.editorValidationEnd",vt="gantt.editorValidationPercentCompleteRange",Ct="gantt.editorDependencyTypesFF",Dt="gantt.editorDependencyTypesSF",Et="gantt.editorDependencyTypesFS",bt="gantt.editorDependencyTypesSS",It="gantt.addTask",wt="gantt.addChild",St="gantt.addAbove",Rt="gantt.addBelow",Tt="gantt.viewSelector",xt="gantt.editorDelete",Ft="gantt.deleteConfirmation",Nt="gantt.deleteDialogTitle",Mt="gantt.editorDependencyNameLabel",zt="gantt.editorDependencyTypeLabel",Lt={[Ne]:"Week",[Me]:"Day",[ze]:"Month",[Le]:"Year",[We]:"Clear",[He]:"Is equal to",[Ke]:"Is not equal to",[Ve]:"Is null",[Oe]:"Is not null",[Ae]:"Is empty",[Pe]:"Is not empty",[Be]:"Starts with",[Ge]:"Contains",[_e]:"Does not contain",[$e]:"Ends with",[qe]:"Is greater than or equal to",[Ze]:"Is greater than",[Ue]:"Is less than or equal to",[je]:"Is less than",[Ye]:"Is true",[Xe]:"Is false",[Qe]:"(All)",[Je]:"Is after or equal to",[et]:"Is after",[tt]:"Is before",[nt]:"Is before or equal to","gantt.noRecords":"No records available",[at]:"Save",[ot]:"Cancel",[rt]:"Add",[lt]:"Remove",[st]:"General",[it]:"Predecessors",[dt]:"Successors",[ct]:"Edit task",[ut]:"Title",[mt]:"Start",[pt]:"End","gantt.editorTaskPlannedStart":"Planned Start Date","gantt.editorTaskPlannedEnd":"Planned End Date","gantt.editorTaskActualStart":"Actual Start Date","gantt.editorTaskActualEnd":"Actual End Date",[gt]:"Complete",[ht]:"Parent",[ft]:"Field is required.",[kt]:"Start time must be be before End time.",[yt]:"End time must be after Start time.",[vt]:"Value should be between 0 and 100.",[Ct]:"Finish-Finish",[Et]:"Finish-Start",[Dt]:"Start-Finish",[bt]:"Start-Start",[It]:"Add Task",[wt]:"Add Child",[St]:"Add Above",[Rt]:"Add Below",[Tt]:"View Selector",[xt]:"Delete",[Ft]:"Are you sure you want to delete this event?",[Nt]:"Delete Event",[Mt]:"Name",[zt]:"Type"},Wt=D.forwardRef(((e,t)=>{const{slotWidth:n=Ht.slotWidth,firstSlotRangeRef:a,timelineHeaderCell:o}=e,{timezone:r}=ie(),l=s.useInternationalization(),i=D.useRef(null),d=D.useRef(null),c=D.useCallback((e=>{d.current&&d.current.scrollIntoView(e)}),[]);D.useImperativeHandle(i,(()=>({scrollIntoView:c}))),D.useImperativeHandle(t,(()=>i.current));const u=ce(),m=e.workWeekStart||Ht.workWeekStart,p=e.workWeekEnd||Ht.workWeekEnd,g=D.useMemo((()=>{const e=q({workWeekStart:m,workWeekEnd:p}),t=[],n=Y(u,{timezone:r},l);return n.forEach((n=>{const a=j(n.range,{workDays:e,timezone:r},l);t.push.apply(t,a)})),a&&t[0]&&(a.current=t[0].range),[n,t]}),[r,u.start.getTime(),u.end.getTime(),l,m,p]);return D.createElement(Fe,{ref:d,slotWidth:n,slotLevels:g,timelineHeaderCell:o})})),Ht={name:"week",dateRange:({intl:e,tasksStart:t,tasksEnd:n,timezone:o})=>{const r=a.ZonedDate.fromLocalDate(t,o),l=a.ZonedDate.fromLocalDate(n,o),s=A(a.firstDayInWeek(a.getDate(r),e.firstDay())),i=P(a.firstDayInWeek(a.getDate(l),e.firstDay()),7),d=a.ZonedDate.fromUTCDate(B(s),o),c=a.ZonedDate.fromUTCDate(B(i),o);return{start:new Date(d.getTime()),end:new Date(c.getTime()),zonedStart:d,zonedEnd:c}},title:e=>e.toLanguageString(Ne,Lt[Ne]),slotWidth:T,workWeekStart:1,workWeekEnd:5,workDayStart:"08:00",workDayEnd:"17:00"};Wt.propTypes={name:n.string,dateRange:n.oneOfType([n.func,n.object]),title:n.oneOfType([n.string,n.func]),slotWidth:n.number,workWeekStart:n.number,workWeekEnd:n.number,workDayStart:n.string,workDayEnd:n.string},Wt.displayName="KendoReactGanttWeekView";const Kt=D.forwardRef(((e,t)=>{const{slotWidth:n=Vt.slotWidth,slotDuration:o=Vt.slotDuration,firstSlotRangeRef:r,timelineHeaderCell:l}=e,{timezone:i}=ie(),d=s.useInternationalization(),c=D.useRef(null),u=D.useRef(null),m=D.useCallback((e=>{u.current&&u.current.scrollIntoView(e)}),[]);D.useImperativeHandle(c,(()=>({scrollIntoView:m}))),D.useImperativeHandle(t,(()=>c.current));const p=ce(),g=e.workWeekStart||Vt.workWeekStart,h=e.workWeekEnd||Vt.workWeekEnd,f=e.workDayStart||Vt.workDayStart,k=e.workDayEnd||Vt.workDayEnd,y=D.useMemo((()=>{const e=q({workWeekStart:g,workWeekEnd:h}),t=[],n=j(p,{workDays:e,timezone:i},d);return n.forEach((e=>{const n=((e,t,n)=>{const o=n.parseDate(t.workDayStart).getHours(),r=n.parseDate(t.workDayEnd).getHours();return U(e,{step:a.MS_PER_MINUTE*t.slotDuration,timezone:t.timezone}).map((e=>{const t=e.zonedStart.getHours();return{range:e,isWork:t>=o&&t<r,span:1,text:n.formatDate(e.zonedStart,"hh:mm a"),type:"time"}}))})(e.range,{workDayStart:f,workDayEnd:k,timezone:i,slotDuration:o},d);e.span=n.length,t.push.apply(t,n)})),r&&t[0]&&(r.current=t[0].range),[n,t]}),[i,p.start.getTime(),p.end.getTime(),d,g,h,f,k]);return D.createElement(Fe,{ref:u,slotWidth:n,slotLevels:y,timelineHeaderCell:l})})),Vt={name:"day",dateRange:({tasksStart:e,tasksEnd:t,timezone:n})=>{const o=a.ZonedDate.fromLocalDate(e,n),r=a.ZonedDate.fromLocalDate(t,n),l=A(o),s=P(r),i=a.ZonedDate.fromUTCDate(B(l),n),d=a.ZonedDate.fromUTCDate(B(s),n);return{start:new Date(i.getTime()),end:new Date(d.getTime()),zonedStart:i,zonedEnd:d}},title:e=>e.toLanguageString(Me,Lt[Me]),slotWidth:T,slotDuration:60,workWeekStart:1,workWeekEnd:5,workDayStart:"08:00",workDayEnd:"17:00"};Kt.propTypes={name:n.string,dateRange:n.oneOfType([n.func,n.object]),title:n.oneOfType([n.string,n.func]),slotWidth:n.number,slotDuration:n.number,workWeekStart:n.number,workWeekEnd:n.number,workDayStart:n.string,workDayEnd:n.string},Kt.displayName="KendoReactGanttDayView";const Ot=D.forwardRef(((e,t)=>{const{slotWidth:n=At.slotWidth,firstSlotRangeRef:a,timelineHeaderCell:o}=e,{timezone:r}=ie(),l=s.useInternationalization(),i=D.useRef(null),d=D.useRef(null),c=D.useCallback((e=>{d.current&&d.current.scrollIntoView(e)}),[]);D.useImperativeHandle(i,(()=>({scrollIntoView:c}))),D.useImperativeHandle(t,(()=>i.current));const u=ce(),m=D.useMemo((()=>{const e=[],t=X(u,{timezone:r},l);return t.forEach((t=>{const n=Y(t.range,{timezone:r},l);e.push.apply(e,n)})),a&&e[0]&&(a.current=e[0].range),[t,e]}),[r,u.start.getTime(),u.end.getTime(),l]);return D.createElement(Fe,{ref:d,slotWidth:n,slotLevels:m,timelineHeaderCell:o})})),At={name:"month",dateRange:({tasksStart:e,tasksEnd:t,timezone:n})=>{const o=a.ZonedDate.fromLocalDate(e,n),r=a.ZonedDate.fromLocalDate(t,n),l=a.firstDayOfMonth(a.getDate(o)),s=a.addDays(a.lastDayOfMonth(a.getDate(r)),1),i=a.ZonedDate.fromUTCDate(B(l),n),d=a.ZonedDate.fromUTCDate(B(s),n);return{start:new Date(i.getTime()),end:new Date(d.getTime()),zonedStart:i,zonedEnd:d}},title:e=>e.toLanguageString(ze,Lt[ze]),slotWidth:T,workWeekStart:1,workWeekEnd:5,workDayStart:"08:00",workDayEnd:"17:00"};Ot.propTypes={name:n.string,dateRange:n.oneOfType([n.func,n.object]),title:n.oneOfType([n.string,n.func]),slotWidth:n.number,workWeekStart:n.number,workWeekEnd:n.number,workDayStart:n.string,workDayEnd:n.string},Ot.displayName="GanttMonthView";const Pt=D.forwardRef(((e,t)=>{const{slotWidth:n=Bt.slotWidth,firstSlotRangeRef:a,timelineHeaderCell:o}=e,{timezone:r}=ie(),l=s.useInternationalization(),i=D.useRef(null),d=D.useRef(null),c=D.useCallback((e=>{d.current&&d.current.scrollIntoView(e)}),[]);D.useImperativeHandle(i,(()=>({scrollIntoView:c}))),D.useImperativeHandle(t,(()=>i.current));const u=ce(),m=D.useMemo((()=>{const e=Q(u,{timezone:r},l),t=[];return e.forEach((e=>{const n=X(e.range,{timezone:r},l);t.push.apply(t,n)})),a&&t[0]&&(a.current=t[0].range),[e,t]}),[r,u.start.getTime(),u.end.getTime(),l]);return D.createElement(Fe,{slotWidth:n,slotLevels:m,timelineHeaderCell:o})})),Bt={name:"year",dateRange:({tasksStart:e,tasksEnd:t,timezone:n})=>{const o=a.ZonedDate.fromLocalDate(e,n),r=a.ZonedDate.fromLocalDate(t,n),l=a.firstDayOfMonth(a.firstMonthOfYear(a.getDate(o))),s=a.addDays(a.lastDayOfMonth(a.lastMonthOfYear(a.getDate(r))),1),i=a.ZonedDate.fromUTCDate(B(l),n),d=a.ZonedDate.fromUTCDate(B(s),n);return{start:new Date(i.getTime()),end:new Date(d.getTime()),zonedStart:i,zonedEnd:d}},title:e=>e.toLanguageString(Le,Lt[Le]),slotWidth:T};Pt.propTypes={name:n.string,dateRange:n.oneOfType([n.func,n.object]),title:n.oneOfType([n.string,n.func]),slotWidth:n.number},Pt.displayName="GanttYearView";const Gt=e=>{const[t,n]=pe(),a=s.useLocalization(),o=D.useMemo((()=>"function"==typeof e.view.title?e.view.title.call(void 0,a):e.view.title),[e.view.title,a]),r=D.useCallback((()=>{e.view.name&&n(e.view.name)}),[n,e.view.name]);return D.createElement(d.Button,{role:"button",type:"button",tabIndex:-1,togglable:!0,selected:e.view.name===t,onClick:r},o)};Gt.displayName="KendoReactGanttViewSelectorItem";const _t=D.forwardRef((()=>{const e=D.useContext(ue),[t,n]=pe(),a=s.useLocalization(),o=D.useCallback((e=>{n&&(e.preventDefault(),n(e.target.value))}),[n]);return D.createElement("div",{className:"k-gantt-views-wrapper"},D.createElement(d.ButtonGroup,{className:"k-gantt-views"},e.map((e=>D.createElement(Gt,{key:e.props.name,view:e.props})))),D.createElement("select",{value:t,onChange:o,"aria-label":(e=>a.toLanguageString(e,Lt[e]))(Tt),className:"k-picker k-picker-solid k-dropdown-list k-dropdown k-views-dropdown k-rounded-md"},e.map((e=>D.createElement("option",{key:e.props.name,value:e.props.name},"function"==typeof e.props.title?e.props.title.call(void 0,a):e.props.title)))))}));_t.displayName="KendoReactGanttViewSelectorList";const $t=D.forwardRef(((e,t)=>{const{className:n,...a}=e,r=D.useRef(null);return D.useImperativeHandle(t,(()=>({element:r.current,props:e}))),D.createElement(d.ToolbarItem,{ref:e=>{e&&(r.current=e.element)},className:o.classNames("k-gantt-views",n),...a},e.children)}));$t.displayName="KendoReactGanttViewSelector";const qt=D.forwardRef(((e,t)=>{const{className:n,...a}=e,r=D.useRef(null),l=D.useRef(null);D.useImperativeHandle(l,(()=>({element:r.current,props:e}))),D.useImperativeHandle(t,(()=>l.current));const s=D.useMemo((()=>o.classNames("k-gantt-toolbar k-gantt-header",n)),[n]);return D.createElement(d.Toolbar,{ref:e=>{e&&(r.current=e.element)},className:s,...a},e.children)}));qt.displayName="KendoReactGanttToolbar";const Zt=Object.freeze({name:"@progress/kendo-react-gantt",productName:"KendoReact",productCode:"KENDOUIREACT",productCodes:["KENDOUIREACT"],publishDate:0,version:"12.0.2-develop.5",licensingDocsUrl:"https://www.telerik.com/kendo-react-ui/components/my-license/"}),Ut=D.forwardRef(((e,t)=>{const n=s.useLocalization(),a=e=>n.toLanguageString(e,Lt[e]),r=a(It),l=a(wt),c=a(St),u=a(Rt),m=D.useCallback((t=>{t.syntheticEvent.preventDefault();const n=t.item&&t.item.direction?t.item.direction:"none";e.onClick&&e.onClick({nativeEvent:t.nativeEvent,syntheticEvent:t.syntheticEvent,direction:n})}),[e.onClick]),p=D.useCallback((t=>{t.preventDefault(),e.onClick&&e.onClick({nativeEvent:t&&t.nativeEvent,syntheticEvent:t,direction:"none"})}),[e.onClick]),g=D.createElement(D.Fragment,null,D.createElement(o.IconWrap,{name:"plus",icon:i.plusIcon}),r);return e.selectedTask?D.createElement(d.DropDownButton,{className:"k-views-dropdown",onItemClick:m,popupSettings:{popupClass:"k-gantt-toolbar"},textField:"title",items:[{title:l,direction:"child"},{title:c,direction:"above"},{title:u,direction:"below"}],text:g}):D.createElement(d.Button,{onClick:p},g)}));Ut.displayName="KendoReactGanttAddButton";const jt=D.forwardRef(((e,t)=>{const n=!o.validatePackage(Zt,{component:"Gantt"}),a=o.getLicenseMessage(Zt),{columns:r=Yt.columns,taskData:i=Yt.taskData,dependencyData:c=Yt.dependencyData,style:u,className:m,noRecords:p,timezone:g,rowHeight:h=Yt.rowHeight,resizable:f,reorderable:k,sortable:y,sort:v,filter:C,columnMenuFilter:E,columnMenu:b,navigatable:I,toolbar:w,row:R,selectable:T}=e,x=new Map;x.set(Kt,Vt),x.set(Ot,At),x.set(Wt,Ht),x.set(Pt,Bt);const F=s.useInternationalization(),{fields:N}=D.useMemo((()=>(e=>({fields:{...z,...e}}))(e.taskModelFields)),[e.taskModelFields]),{fields:M}=D.useMemo((()=>(e=>({fields:{...L,...e}}))(e.dependencyModelFields)),[e.dependencyModelFields]),W=D.useCallback(((e,t)=>n=>J(n,e)&&ee(n,t)?[...o.getter(t)(n)]:[])(N.isExpanded,N.children),[N.isExpanded,N.children]),H=D.useRef(null),K=D.useRef(null),V=D.useRef(null),O=D.useRef(null),A=D.useRef(null),P=D.useCallback((e=>{const t=o.getter(N.start)(e),n=o.getter(N.end)(e),a=o.getter(N.isSelected)(e);(!K.current||t<K.current)&&(K.current=t),(!V.current||n>V.current)&&(V.current=n),a&&(O.current=e)}),[N.start,N.end]),B=D.useMemo((()=>(K.current=null,V.current=null,O.current=null,l.flatData(i,W,P))),[i,W]);(!K.current||!V.current)&&(K.current=new Date(S),V.current=new Date(S));const G=D.Children.toArray(e.children||[]).map((e=>{var t;return D.isValidElement(e)?D.cloneElement(e,{...x.get(e.type),...null!=(t=e.props)?t:{}}):e})),_=D.cloneElement(D.createElement(Wt,null),x.get(Wt)),$=G.length?G[0]:_,[q,Z]=((e,t,n)=>{const[a,o]=D.useState(t||e),r=D.useCallback(((e,t)=>{o(e),n&&n.call(void 0,{...t,value:e})}),[n,o]);return[void 0!==t?t:a,r]})(e.defaultView||$.props.name,e.view,e.onViewChange),U=G.find((e=>e.props.name===q))||$,j="function"==typeof U.props.dateRange?U.props.dateRange.call(void 0,{intl:F,tasksStart:K.current,tasksEnd:V.current,timezone:g}):U.props.dateRange,Y=D.useRef(null),[X,Q]=D.useState(0);o.useIsomorphicLayoutEffect((()=>{Y.current&&Q(Y.current.element.offsetHeight)}),[]);const te=D.useCallback((e=>{H.current&&H.current.scrollIntoView(e)}),[]),ne=D.useRef(null),ae=D.useRef(null);D.useImperativeHandle(ae,(()=>({props:e,element:ne.current,scrollIntoView:te}))),D.useImperativeHandle(t,(()=>ae.current));const oe=D.useCallback((t=>{e.onDataStateChange&&e.onDataStateChange.call(void 0,{...t,target:ae.current})}),[e.onDataStateChange]),re=D.useCallback((t=>{e.onSortChange&&e.onSortChange.call(void 0,{...t,target:ae.current})}),[e.onSortChange]),le=D.useCallback((t=>{e.onKeyDown&&e.onKeyDown.call(void 0,{...t,target:ae.current})}),[e.onKeyDown]),se=D.useCallback((t=>{e.onSelectionChange&&e.onSelectionChange.call(void 0,{...t,target:ae.current})}),[e.onSelectionChange]),ie=D.useCallback((t=>{e.onHeaderSelectionChange&&e.onHeaderSelectionChange.call(void 0,{...t,target:ae.current})}),[e.onHeaderSelectionChange]),de=D.useCallback((t=>{e.onFilterChange&&e.onFilterChange.call(void 0,{...t,target:ae.current})}),[e.onFilterChange]),ce=D.useCallback((t=>{e.onColumnMenuFilterChange&&e.onColumnMenuFilterChange.call(void 0,{...t,target:ae.current})}),[e.onColumnMenuFilterChange]),ue=D.useCallback((t=>{e.onExpandChange&&e.onExpandChange.call(void 0,{...t,target:ae.current})}),[e.onExpandChange]),me=D.useCallback((t=>{e.onAddClick&&e.onAddClick.call(void 0,{...t,target:ae.current,selectedDataItem:O.current,slotStart:A.current&&new Date(A.current.start.getTime()),slotEnd:A.current&&new Date(A.current.end.getTime())})}),[e.onAddClick]),pe=D.useCallback((t=>{e.onColumnResize&&e.onColumnResize.call(void 0,{...t,target:ae.current})}),[e.onColumnResize]),ge=D.useCallback((t=>{e.onColumnReorder&&e.onColumnReorder.call(void 0,{...t,target:ae.current})}),[e.onColumnReorder]),he=D.useCallback((t=>{e.onRowClick&&e.onRowClick.call(void 0,{...t,target:ae.current})}),[e.onRowClick]),fe=D.useCallback((t=>{e.onRowDoubleClick&&e.onRowDoubleClick.call(void 0,{...t,target:ae.current})}),[e.onRowClick]),ke=D.useCallback((t=>{e.onRowContextMenu&&e.onRowContextMenu.call(void 0,{...t,target:ae.current})}),[e.onRowClick]),ye=D.useCallback((t=>{e.onTaskClick&&e.onTaskClick.call(void 0,{...t,target:ae.current})}),[e.onTaskClick]),Ce=D.useCallback((t=>{e.onTaskDoubleClick&&e.onTaskDoubleClick.call(void 0,{...t,target:ae.current})}),[e.onTaskDoubleClick]),De=D.useCallback((t=>{e.onTaskContextMenu&&e.onTaskContextMenu.call(void 0,{...t,target:ae.current})}),[e.onTaskContextMenu]),Ee=D.useCallback((t=>{e.onTaskRemoveClick&&e.onTaskRemoveClick.call(void 0,{...t,target:ae.current})}),[e.onTaskRemoveClick]),be=D.useCallback((t=>{if(e.onDependencyCreate){let n,a;const r=o.getter(N.id);for(let e=0;e<B.length;e++){const o=r(B[e].dataItem);if(String(o)===t.fromId&&(n=o),String(o)===t.toId&&(a=o),n&&a)break}e.onDependencyCreate.call(void 0,{fromId:n,toId:a,target:ae.current,type:t.type})}}),[e.onDependencyCreate,N,B]);return D.createElement(ve,{dateRange:j,taskData:B,dependencyData:c,taskModelFields:N,dependencyModelFields:M,views:G,activeView:[q,Z],rowHeight:h,toolbarHeight:X,props:{columns:r,noRecords:p,timezone:g,resizable:f,reorderable:k,sortable:y,sort:v,filter:C,columnMenuFilter:E,columnMenu:b,navigatable:I,row:R,selectable:T},events:{onDataStateChange:oe,onSortChange:re,onFilterChange:de,onColumnMenuFilterChange:ce,onExpandChange:ue,onRowClick:he,onRowDoubleClick:fe,onRowContextMenu:ke,onColumnResize:pe,onColumnReorder:ge,onDependencyCreate:e.onDependencyCreate&&be,onKeyDown:le,onSelectionChange:se,onHeaderSelectionChange:ie},taskEvents:{onTaskClick:ye,onTaskDoubleClick:Ce,onTaskContextMenu:De,onTaskRemoveClick:e.onTaskRemoveClick&&Ee}},D.createElement("div",{ref:ne,role:"application",style:u,className:o.classNames("k-gantt",m)},D.createElement(qt,{ref:Y},w&&w.addTaskButton?D.createElement(Ut,{selectedTask:O.current,onClick:me}):null,D.createElement(d.ToolbarSpacer,null),D.createElement($t,null,D.createElement(_t,null))),U&&D.createElement(U.type,{key:U.props.name,ref:H,...U.props,firstSlotRangeRef:A}),n&&D.createElement(o.WatermarkOverlay,{message:a})))})),Yt={taskData:[],dependencyData:[],columns:[],rowHeight:40};jt.propTypes={taskData:n.array,taskModelFields:n.shape({id:n.string,start:n.string,end:n.string,title:n.string,percentComplete:n.string,parentId:n.string,isRollup:n.string,isExpanded:n.string,children:n.string,isInEdit:n.string}),dependencyData:n.array,dependencyModelFields:n.shape({id:n.string,fromId:n.string,toId:n.string,type:n.string}),columns:n.arrayOf(n.shape({width:n.number,cell:n.any,editCell:n.any,headerCell:n.any,filter:n.any,children:n.any,field:n.string,title:n.string,sortable:n.any,expandable:n.bool,headerSelectionValue:n.bool,format:n.string,headerClassName:n.string,className:n.string,resizable:n.bool,reorderable:n.bool,minResizableWidth:n.number,orderIndex:n.number,columnMenu:n.any})),sort:n.array,filter:n.array,columnMenuFilter:n.array,columnMenu:n.any,style:n.object,className:n.string,children:n.any,timezone:n.string,defaultView:n.string,view:n.string,rowHeight:n.number,navigatable:n.bool,onViewChange:n.func,onDataStateChange:n.func,onSortChange:n.func,onFilterChange:n.func,onExpandChange:n.func,onRowClick:n.func,onColumnResize:n.func,onColumnReorder:n.func},jt.displayName="KendoReactGantt";const Xt=[{text:Ge,operator:"contains"},{text:_e,operator:"doesnotcontain"},{text:He,operator:"eq"},{text:Ke,operator:"neq"},{text:Be,operator:"startswith"},{text:$e,operator:"endswith"},{text:Ve,operator:"isnull"},{text:Oe,operator:"isnotnull"},{text:Ae,operator:"isempty"},{text:Pe,operator:"isnotempty"}],Qt=[{text:He,operator:"eq"},{text:Ke,operator:"neq"},{text:qe,operator:"gte"},{text:Ze,operator:"gt"},{text:Ue,operator:"lte"},{text:je,operator:"lt"},{text:Ve,operator:"isnull"},{text:Oe,operator:"isnotnull"}],Jt=[{text:He,operator:"eq"},{text:Ke,operator:"neq"},{text:Je,operator:"gte"},{text:et,operator:"gt"},{text:tt,operator:"lt"},{text:nt,operator:"lte"},{text:Ve,operator:"isnull"},{text:Oe,operator:"isnotnull"}],en=[{text:Qe,operator:""},{text:Ye,operator:!0},{text:Xe,operator:!1}];function tn(e,t){return{clearButtonTitle:e.toLanguageString(We,Lt[We]),operators:t.map((t=>({text:e.toLanguageString(t.text,Lt[t.text]),operator:t.operator})))}}const nn=e=>{const{operators:t,...n}=e;return D.createElement(r.TextFilterCell,{ariaLabel:"text filter",...tn(s.useLocalization(),t||Xt),...n})};nn.displayName="KendoReactGanttTextFilter";const an=e=>{const{operators:t,...n}=e;return D.createElement(r.NumericFilterCell,{ariaLabel:"numeric filter",...tn(s.useLocalization(),t||Qt),...n})};an.displayName="KendoReactGanttNumericFilter";const on=e=>{const{operators:t,...n}=e;return D.createElement(r.BooleanFilterCell,{ariaLabel:"boolean filter",...tn(s.useLocalization(),t||en),...n})};on.displayName="KendoReactGanttBooleanFilter";const rn=e=>{const{operators:t,...n}=e;return D.createElement(r.DateFilterCell,{ariaLabel:"date filter",...tn(s.useLocalization(),t||Jt),...n})};rn.displayName="KendoReactGanttDateFilter";const ln=(e,t)=>{cn(e,t),un(e,t),mn(e,t)},sn=(e,t,n)=>{const a=o.getter(t.children),r=o.setter(t.children);for(let t=e.length-1;t>=0;t--){const o=e[t],l=a(o);if(n.parentId===o.id){const e=l.filter((e=>e.parentId===o.id));r(o,e)}}},dn=(e,t,n)=>{const a=o.getter(t.children),r=o.setter(t.children);return null===n.parentId?[...e,n]:(e=K(e,t.children,(e=>{if(e.id===n.parentId){const t=a(e)||[];r(e,[...t,n])}return{...e}})),e)},cn=(e,t)=>{if(!e.length)return;const n=o.getter(t.children),a=o.getter(t.start),r=o.setter(t.start);for(let t=e.length-1;t>=0;t--){const o=e[t],l=n(o);if(l&&l.length){const e=l.reduce(((e,t)=>Math.min(e,a(t).getTime())),a(l[0]).getTime());r(o,new Date(e))}}},un=(e,t)=>{if(!e.length)return;const n=o.getter(t.children),a=o.getter(t.end),r=o.setter(t.end);for(let t=e.length-1;t>=0;t--){const o=e[t],l=n(o);if(l&&l.length){const e=l.reduce(((e,t)=>Math.max(e,a(t).getTime())),a(l[0]).getTime());r(o,new Date(e))}}},mn=(e,t)=>{if(!e.length)return;const n=o.getter(t.children),a=o.getter(t.percentComplete),r=o.setter(t.percentComplete),l=({avg:e,n:t},n)=>({avg:((a(n)||0)+t*e)/(t+1),n:t+1});for(let t=e.length-1;t>=0;t--){const a=e[t],o=n(a);if(o&&o.length){r(a,o.reduce(l,{avg:0,n:0}).avg)}}},pn=(e,t,n)=>{if(!e)return;const a=o.getter(t.children),r=o.getter(t.start),l=o.setter(t.start),s=o.getter(t.end),i=o.setter(t.end),d=e.map((e=>({task:e,childrenIndex:0})));for(;d.length>0;){const e=d[d.length-1],t=e.task,o=a(t);o&&o.length&&o.length>e.childrenIndex?(d.push({task:o[e.childrenIndex],childrenIndex:0}),e.childrenIndex++):(d.pop(),l(t,new Date(r(t).getTime()+n)),i(t,new Date(s(t).getTime()+n)))}},gn=e=>{const{validationMessage:t,touched:n,label:a,id:o,valid:r,disabled:l,hint:s,type:i,optional:d,...c}=e,m=n&&t,h=!m&&s,f=h?`${o}_hint`:"",k=m?`${o}_error`:"";return D.createElement(u.FieldWrapper,{className:"k-col-span-full"},D.createElement(p.Label,{editorId:o,editorValid:r,editorDisabled:l,optional:d},a),D.createElement("div",{className:"k-form-field-wrap"},D.createElement(g.Input,{valid:r,type:i,id:o,disabled:l,ariaDescribedBy:`${f} ${k}`,...c}),h&&D.createElement(p.Hint,{id:f},s),m&&D.createElement(p.Error,{id:k},t)))},hn=e=>{const{validationMessage:t,touched:n,label:a,id:o,valid:r,disabled:l,hint:s,wrapperStyle:i,...d}=e,c=n&&t,m=!c&&s,g=m?`${o}_hint`:"",h=c?`${o}_error`:"",k=a?`${o}_label`:"";return D.createElement(u.FieldWrapper,{style:i,className:"k-col-span-2"},D.createElement(p.Label,{id:k,editorId:o,editorValid:r,editorDisabled:l},a),D.createElement("div",{className:"k-form-field-wrap"},D.createElement(f.DateTimePicker,{ariaLabelledBy:k,ariaDescribedBy:`${g} ${h}`,valid:r,id:o,disabled:l,...d}),m&&D.createElement(p.Hint,{id:g},s),c&&D.createElement(p.Error,{id:h},t)))},fn=e=>{const{validationMessage:t,visited:n,label:a,id:o,valid:r,disabled:l,hint:s,...i}=e,d=n&&t,c=!d&&s,m=c?`${o}_hint`:"",h=d?`${o}_error`:"";return D.createElement(u.FieldWrapper,null,D.createElement(p.Label,{editorId:o,editorValid:r,editorDisabled:l},a),D.createElement("div",{className:"k-form-field-wrap"},D.createElement(g.NumericTextBox,{ariaDescribedBy:`${m} ${h}`,valid:r,id:o,disabled:l,format:"p0",step:.01,...i}),c&&D.createElement(p.Hint,{id:m},s),d&&D.createElement(p.Error,{id:h},t)))},kn=e=>{const{validationMessage:t,touched:n,label:a,id:o,valid:r,disabled:l,hint:s,idField:i,dataItem:d,...c}=e,m=[],g=n&&t,h=!g&&s,f=h?`${o}_hint`:"",y=g?`${o}_error`:"",v=D.useCallback((t=>{if(!t||!t.children)return e.data;for(const e of t.children)m.push(e),e.children&&v(e);const n=m.map((e=>e.id));return e.data.filter((e=>!n.includes(e.id)))}),[e.data]),C=v(d),E=D.useMemo((()=>C.map((e=>{const t=new Date(e.start).toLocaleDateString(),n=new Date(e.end).toLocaleDateString();return{...e,title:`${e.title} (${t}-${n})`}}))),[v]),b=D.useMemo((()=>k.findByFieldValue(E,i,e.value)),[E,i,e.value]);return D.createElement(u.FieldWrapper,{className:"k-col-span-full"},D.createElement(p.Label,{editorId:o,editorValid:r,editorDisabled:l},a),D.createElement("div",{className:"k-form-field-wrap"},D.createElement(k.DropDownList,{textField:"title",ariaDescribedBy:`${f} ${y}`,valid:r,id:o,disabled:l,...c,value:b,data:E,onChange:t=>{null===t.value.id?e.onChange({value:null}):e.onChange({value:t.value[i]})},defaultItem:{id:null,title:"-None-",parentId:null}}),h&&D.createElement(p.Hint,{id:f},s),g&&D.createElement(p.Error,{id:y},t)))},yn=e=>{const{selectedItem:t,updateDependency:n,flatTasks:a}=D.useContext(Cn),r=e.dataItem,[l,s]=D.useState(a),i=D.useRef(null),d=D.useMemo((()=>k.findByFieldValue(a,"id",r.fromId)),[a,r.fromId]);return D.createElement("td",{ref:i,className:o.classNames((t&&!r.uid?t.id===r.id:t&&null===r.id?t.uid===r.uid:void 0)&&"k-selected")},D.createElement(k.DropDownList,{textField:"title",data:l,value:d,onChange:e=>{n(r,"fromId",e.target.value.id)},filterable:!0,onFilterChange:e=>{const t=v.filterBy(a,e.filter);s(t)},required:!0}))},vn=e=>{const{selectedItem:t,updateDependency:n,dependencyTypes:a}=D.useContext(Cn),r=e.dataItem,l=D.useMemo((()=>k.findByFieldValue(a,"type",r.type)),[a,r.type]);return D.createElement("td",{className:o.classNames((t&&!r.uid?t.id===r.id:t&&null===r.id?t.uid===r.uid:void 0)&&"k-selected")},D.createElement(k.DropDownList,{textField:"name",data:a,value:l,onChange:e=>{n(r,"type",e.target.value.type)}}))},Cn=D.createContext({flatTasks:[],dependencyTypes:[],selectedItem:void 0,updateDependency:()=>{}}),Dn=e=>{var t;const[n,a]=D.useState([]),o=s.useLocalization(),r=e=>o.toLanguageString(e,Lt[e]),l=r(rt),c=r(lt),u=r(Mt),m=r(zt),p=D.useMemo((()=>{const t=e.predecessors.map((t=>{const n=k.findByFieldValue(e.flatTasks,"id",t.fromId),a=k.findByFieldValue(e.dependencyTypes,"type",t.type);return{...t,taskTitle:n?n.title:"",typeName:a?a.type:""}}));return v.orderBy(t,n)}),[e.predecessors,e.dependencyTypes,e.flatTasks,n]);return D.createElement(Cn.Provider,{value:{flatTasks:e.flatTasks,dependencyTypes:e.dependencyTypes,selectedItem:e.selectedItem,updateDependency:e.updateDependency}},D.createElement(y.Grid,{data:p,sort:n,sortable:!0,onRowClick:e.onSelectRow,onSortChange:e=>{a(e.sort)},style:{height:"23em"}},D.createElement(y.GridToolbar,null,D.createElement(d.Button,{icon:"plus",svgIcon:i.plusIcon,onClick:e.addPredecessorsDependency},l),D.createElement(d.Button,{icon:"minus",svgIcon:i.minusIcon,onClick:e.deleteDependency,disabled:void 0===(null==(t=e.selectedItem)?void 0:t.id)},c)),D.createElement(y.GridColumn,{field:"taskTitle",title:u,cells:{data:yn}}),D.createElement(y.GridColumn,{field:"typeName",title:m,cells:{data:vn}})))},En=e=>{const{selectedItem:t,updateDependency:n,flatTasks:a}=D.useContext(In),r=e.dataItem,[l,s]=D.useState(a),i=D.useMemo((()=>k.findByFieldValue(a,"id",r.toId)),[a,r.toId]);return D.createElement("td",{className:o.classNames((t&&!r.uid?t.id===r.id:t&&null===r.id?t.uid===r.uid:void 0)&&"k-selected")},D.createElement(k.DropDownList,{textField:"title",data:l,value:i,onChange:e=>{n(r,"toId",e.target.value.id)},filterable:!0,onFilterChange:e=>{const t=v.filterBy(a,e.filter);s(t)},required:!0}))},bn=e=>{const{selectedItem:t,updateDependency:n,dependencyTypes:a}=D.useContext(In),r=e.dataItem,l=D.useMemo((()=>k.findByFieldValue(a,"type",r.type)),[a,r.type]);return D.createElement("td",{className:o.classNames((t&&!r.uid?t.id===r.id:t&&null===r.id?t.uid===r.uid:void 0)&&"k-selected")},D.createElement(k.DropDownList,{textField:"name",data:a,value:l,onChange:e=>{n(r,"type",e.target.value.type)}}))},In=D.createContext({flatTasks:[],dependencyTypes:[],selectedItem:void 0,updateDependency:()=>{}}),wn=e=>{var t;const[n,a]=D.useState([]),o=s.useLocalization(),r=e=>o.toLanguageString(e,Lt[e]),l=r(rt),c=r(lt),u=r(Mt),m=r(zt),p=D.useMemo((()=>{const t=e.successors.map((t=>{const n=k.findByFieldValue(e.flatTasks,"id",t.toId),a=k.findByFieldValue(e.dependencyTypes,"type",t.type);return{...t,taskTitle:n?n.title:"",typeName:a?a.type:""}}));return v.orderBy(t,n)}),[e.successors,e.dependencyTypes,e.flatTasks,n]);return D.createElement(In.Provider,{value:{flatTasks:e.flatTasks,dependencyTypes:e.dependencyTypes,selectedItem:e.selectedItem,updateDependency:e.updateDependency}},D.createElement(y.Grid,{data:p,sort:n,sortable:!0,onRowClick:e.onSelectRow,onSortChange:e=>{a(e.sort)},style:{height:"23em"}},D.createElement(y.GridToolbar,null,D.createElement(d.Button,{icon:"plus",svgIcon:i.plusIcon,onClick:e.addSuccessorsDependency},l),D.createElement(d.Button,{icon:"minus",svgIcon:i.minusIcon,onClick:e.deleteDependency,disabled:void 0===(null==(t=e.selectedItem)?void 0:t.id)},c)),D.createElement(y.GridColumn,{field:"taskTitle",title:u,cells:{data:En}}),D.createElement(y.GridColumn,{field:"type",title:m,cells:{data:bn}})))};var Sn=(e=>(e[e.FF=0]="FF",e[e.FS=1]="FS",e[e.SF=2]="SF",e[e.SS=3]="SS",e))(Sn||{});const Rn=[{type:Sn.FF},{type:Sn.FS},{type:Sn.SF},{type:Sn.SS}],Tn=e=>{const[t,n]=D.useState(0),[a,r]=D.useState(),[i,d]=D.useState([...e.dependencyData||[]]),[c,m]=D.useState([]),p=oe(),g=s.useLocalization(),f=e=>g.toLanguageString(e,Lt[e]),y=f(ut),v=f(mt),C=f(pt),E=f(gt),b=f(ht),I=f(st),w=f(it),S=f(dt),R=f(ft),T=f(kt),x=f(yt),F=f(vt),N=D.useMemo((()=>l.flatData(e.taskData||[],(e=>e.children||[]),(e=>{const t={title:e[p.title],id:e[p.id],start:e[p.start],end:e[p.end],parentId:null};return p.parentId&&(t.parentId=e[p.parentId]),t}))),[e.taskData,p]),M=D.useMemo((()=>N.filter((t=>t.id!==e.dataItem.id))),[N,e.dataItem]),z=D.useMemo((()=>i.filter((t=>t.toId===e.dataItem.id))),[i,e.dataItem]),L=D.useMemo((()=>i.filter((t=>t.fromId===e.dataItem.id))),[i,e.dataItem]),W=D.useMemo((()=>i.filter((e=>null===e.id)).map((e=>({id:e.id,fromId:e.fromId,toId:e.toId,type:e.type})))),[i]),H=D.useMemo((()=>i.filter((e=>null!==e.id&&e.uid)).map((e=>({id:e.id,fromId:e.fromId,toId:e.toId,type:e.type})))),[i]),K=()=>{if(a){if(a.id){const e=i.filter((e=>e.id!==a.id));d(e);const t=i.filter((e=>e.id===a.id));m((e=>[...e,...t]))}else{const e=i.filter((e=>e.uid!==a.uid));d(e);const t=i.filter((e=>e.uid===a.uid));m((e=>[...e,...t]))}r(void 0)}},V=D.useCallback((e=>e||0===e?void 0:R),[R]),O=D.useCallback((e=>e||0===e?e>=0&&e<=1?void 0:F:R),[R,F]),A=D.useCallback(((e,t)=>e&&t(p.end)&&e.getTime()>t(p.end).getTime()?T:void 0),[p,T]),P=D.useCallback(((e,t)=>e&&t(p.start)&&e.getTime()<t(p.start).getTime()?x:void 0),[p,x]),B=D.useMemo((()=>[V,A]),[V,A]),G=D.useMemo((()=>[V,P]),[V,P]),_=D.useMemo((()=>k.findByFieldValue(i,"fromId",null)||k.findByFieldValue(i,"toId",null)),[i]),$=e=>{r(e.dataItem)},q=(e,t,n)=>{const a={...e,uid:e.uid||o.guid(),[t]:n},r=i.findIndex((e=>e.id&&e.id===a.id||e.uid&&e.uid===a.uid));r>-1&&(i.splice(r,1,a),d([...i]))},Z=D.useMemo((()=>Rn.map((e=>{let t;switch(e.type){case Sn.FF:t=f(Ct);break;case Sn.FS:t=f(Et);break;case Sn.SF:t=f(Dt);break;case Sn.SS:t=f(bt);break;default:t=f(Ct)}return{...e,name:t}}))),[f]);D.useEffect((()=>{e.onDependencyCreate&&e.onDependencyCreate.call(void 0,{createdDependencies:W,updatedDependencies:H,deletedDependencies:c})}),[W,H,c,e.onDependencyCreate]);const U=e.dependencyData&&e.taskData,j=D.createElement(u.FormElement,{style:{width:400},horizontal:!0},D.createElement(u.Field,{id:`${p.title}_gantteditor`,name:p.title,label:y,component:gn,validator:V}),D.createElement(u.Field,{id:`${p.start}_gantteditor`,name:p.start,label:v,component:hn,validator:B}),D.createElement(u.Field,{id:`${p.end}_gantteditor`,name:p.end,label:C,component:hn,validator:G}),D.createElement(u.Field,{id:`${p.percentComplete}_gantteditor`,name:p.percentComplete,label:E,component:fn,validator:O})),Y=D.createElement(u.FormElement,{style:{paddingInline:"4px"}},D.createElement("div",{className:"k-form-fieldset"},D.createElement("div",{className:"k-form-layout k-d-grid k-grid-cols-4 k-gap-x-2"},D.createElement(u.Field,{id:`${p.title}_gantteditor`,name:p.title,label:y,component:gn,validator:V}),D.createElement(u.Field,{id:`${p.start}_gantteditor`,name:p.start,label:v,component:hn,validator:B}),D.createElement(u.Field,{id:`${p.end}_gantteditor`,name:p.end,label:C,component:hn,validator:G}),D.createElement(u.Field,{id:`${p.percentComplete}_gantteditor`,name:p.percentComplete,label:E,component:fn,validator:O}),p.parentId&&D.createElement(u.Field,{id:`${p.parentId}_gantteditor`,name:p.parentId||"",idField:p.id,label:b,component:kn,data:M,dataItem:e.dataItem}))));return U?D.createElement(h.TabStrip,{selected:t,onSelect:e=>{_||(n(e.selected),r(void 0))}},D.createElement(h.TabStripTab,{title:I},Y),D.createElement(h.TabStripTab,{title:w},D.createElement(Dn,{flatTasks:N,predecessors:z,dependencyTypes:Z,selectedItem:a,onSelectRow:$,addPredecessorsDependency:()=>{const t={uid:o.guid(),id:null,fromId:null,toId:e.dataItem.id,type:Sn.FS};d([...i,t])},deleteDependency:K,updateDependency:q})),D.createElement(h.TabStripTab,{title:S},D.createElement(wn,{flatTasks:N,successors:L,dependencyTypes:Z,selectedItem:a,onSelectRow:$,addSuccessorsDependency:()=>{const t={uid:o.guid(),id:null,fromId:e.dataItem.id,toId:null,type:Sn.FS};d([...i,t])},deleteDependency:K,updateDependency:q}))):j},xn=l.TreeListRow;Object.defineProperty(e,"getSelectedState",{enumerable:!0,get:function(){return r.getSelectedState}}),Object.defineProperty(e,"getSelectedStateFromKeyDown",{enumerable:!0,get:function(){return r.getSelectedStateFromKeyDown}}),Object.defineProperty(e,"setSelectedState",{enumerable:!0,get:function(){return r.setSelectedState}}),e.GANTT_COL_INDEX_ATTRIBUTE=I,e.GANTT_PREVENT_SELECTION_ELEMENT=w,e.GANTT_ROW_INDEX_ATTRIBUTE=b,e.Gantt=jt,e.GanttBooleanFilter=on,e.GanttDateFilter=rn,e.GanttDayView=Kt,e.GanttForm=e=>{const{onCancel:t,onDelete:n,onClose:a,onSubmit:r,...l}=e,c=D.useRef(e.dataItem),[p,g]=D.useState({}),h=s.useLocalization(),f=e=>h.toLanguageString(e,Lt[e]),y=f(at),v=f(ot),C=f(xt),b=f(ct),I=D.useCallback((n=>{if(t){const a={syntheticEvent:n,nativeEvent:n.nativeEvent,dataItem:e.dataItem};t.call(void 0,a)}}),[t,e.dataItem]),w=D.useCallback((t=>{if(n){const a={syntheticEvent:t,nativeEvent:t.nativeEvent,dataItem:e.dataItem};n.call(void 0,a)}}),[n,e.dataItem]),S=D.useCallback((({syntheticEvent:t})=>{if(a){const n={syntheticEvent:t,nativeEvent:t.nativeEvent,dataItem:e.dataItem};a.call(void 0,n)}}),[a,e.dataItem]),R=D.useCallback(((e,t)=>{if(r){const n={dataItem:e,initialDataItem:c.current,syntheticEvent:t,nativeEvent:t&&t.nativeEvent,dependencies:p};r.call(void 0,n)}}),[r,p]),T=D.useMemo((()=>k.findByFieldValue(p.createdDependencies,"fromId",null)||k.findByFieldValue(p.createdDependencies,"toId",null)),[p]),x=D.useMemo((()=>p.createdDependencies&&p.createdDependencies.length&&void 0===T||p.updatedDependencies&&p.updatedDependencies.length||p.deletedDependencies&&p.deletedDependencies.length),[p,T]),F=D.useCallback((e=>{g(e)}),[]),N=D.createElement(u.Form,{initialValues:e.dataItem,onSubmit:R,render:t=>D.createElement(m.Window,{title:b,minWidth:90,width:554,modal:!0,height:0,onClose:S},D.createElement(Tn,{taskData:e.taskData,dependencyData:e.dependencyData,dataItem:e.dataItem,onDependencyCreate:F}),D.createElement(m.WindowActionsBar,{layout:"start"},D.createElement(d.Button,{disabled:!t.allowSubmit&&!x,onClick:t.allowSubmit?t.onSubmit:t=>R(e.dataItem,t),icon:"save",svgIcon:i.saveIcon,themeColor:"primary"},y),D.createElement(d.Button,{onClick:I,type:"button",icon:"cancel",svgIcon:i.cancelIcon},v),D.createElement("div",{className:"k-spacer"}),n&&D.createElement(d.Button,{onClick:w,icon:"trash",svgIcon:i.trashIcon,fillMode:"flat",themeColor:"primary"},C))),...l});return o.canUseDOM?E.createPortal(N,document&&document.body):null},e.GanttMonthView=Ot,e.GanttNumericFilter=an,e.GanttRemoveDialog=e=>{const{onClose:t,onCancel:n,onConfirm:a,dataItem:r}=e,l=s.useLocalization(),i=e=>l.toLanguageString(e,Lt[e]),c=i(xt),u=i(ot),p=i(Ft),g=i(Nt),h=D.useCallback((({syntheticEvent:e})=>{t&&t.call(void 0,{syntheticEvent:e,nativeEvent:e&&e.nativeEvent,dataItem:null})}),[t]),f=D.useCallback((e=>{n&&n.call(void 0,{syntheticEvent:e,nativeEvent:e&&e.nativeEvent,dataItem:null})}),[n]),k=D.useCallback((e=>{a&&a.call(void 0,{syntheticEvent:e,nativeEvent:e&&e.nativeEvent,dataItem:r})}),[a,r]),y=D.createElement(m.Dialog,{title:g,onClose:h},p,D.createElement(m.DialogActionsBar,{layout:"end"},D.createElement(d.Button,{themeColor:"primary",onClick:k},c),D.createElement(d.Button,{onClick:f},u)));return o.canUseDOM?E.createPortal(y,document&&document.body):null},e.GanttRow=xn,e.GanttTextFilter=nn,e.GanttWeekView=Wt,e.GanttYearView=Pt,e.addDependency=e=>{const{dependencyData:t,dependencyModelFields:n,defaultDataItem:a,fromId:r,toId:l,type:s}=e,i=t.map((e=>({...e}))),d=o.setter(n.fromId),c=o.setter(n.toId),u=o.setter(n.type),m=a?{...a}:{};return d(m,r),c(m,l),u(m,s),i.push(m),i},e.addTask=e=>{const{defaultDataItem:t,selectedDataItem:n,direction:a,taskModelFields:r,dataTree:l,slotStart:s,slotEnd:i}=e,d=K(l,r.children,(e=>({...e}))),c=o.setter(r.start),u=o.setter(r.end),m=o.getter(r.start),p=o.getter(r.end),g=o.setter(r.parentId||""),h=t?{...t}:{},f=m(h)&&p(h);if(n&&"none"!==a){const e=[{task:{[r.children]:d},childrenIndex:0}],t=o.getter(r.id),l=o.getter(r.children),k=o.setter(r.children),y=t(n);for(;e.length>0;){const n=e[e.length-1],a=n.task,o=t(a),r=l(a);if(o&&o===y)break;r&&r.length&&r.length>n.childrenIndex?(e.push({task:r[n.childrenIndex],childrenIndex:0}),n.childrenIndex++):e.pop()}if(e.length>1){const n=e[e.length-1].task,o=e[e.length-2].childrenIndex,d=e[e.length-2].task,y=l(d);switch(a){case"child":{let a=l(n);a||(a=[],k(n,a)),f||(c(h,new Date(m(n).getTime())),u(h,new Date(p(n).getTime()))),a.push(h),g(h,t(n)),ln(e.splice(1,e.length-1).map((e=>e.task)),r);break}case"above":m(d)&&p(d)&&!f?(c(h,new Date(m(n).getTime())),u(h,new Date(p(n).getTime()))):(c(h,s),u(h,i)),y.splice(o-1,0,h),g(h,t(d)),ln(e.splice(1,e.length-2).map((e=>e.task)),r);break;case"below":m(d)&&p(d)&&!f?(c(h,new Date(m(n).getTime())),u(h,new Date(p(n).getTime()))):(c(h,s),u(h,i)),y.splice(o,0,h),g(h,t(d)),ln(e.splice(1,e.length-2).map((e=>e.task)),r)}}}else f||(c(h,s),u(h,i)),r.parentId&&g(h,null),d.unshift(h);return d},e.createDataTree=O,e.extendDataItem=V,e.filterBy=H,e.mapTree=K,e.orderBy=W,e.removeTask=e=>{const{removedDataItem:t,taskModelFields:n,dataTree:a}=e,r=K(a,n.children,(e=>({...e})));let l=[{task:{[n.children]:r},childrenIndex:0}];const s=o.getter(n.id),i=o.getter(n.children),d=s(t);for(;l.length>0;){const e=l[l.length-1],t=e.task,n=s(t),a=i(t);if(n&&n===d)break;a&&a.length&&a.length>e.childrenIndex?(l.push({task:a[e.childrenIndex],childrenIndex:0}),e.childrenIndex++):l.pop()}if(l.length>1){const e=l[l.length-2];i(e.task).splice(e.childrenIndex-1,1),l=l.splice(1,l.length-2),ln(l.map((e=>e.task)),n)}return r},e.updateTask=e=>{const{updatedDataItem:t,taskModelFields:n,dataTree:a}=e,r=o.getter(n.id),l=o.getter(n.children),s=r(t);let i;const d=K(a,n.children,(e=>r(e)===s?(i=e,{...t}):{...e}));let c=[{task:{[n.children]:d},childrenIndex:0}];for(;c.length>0;){const e=c[c.length-1],t=e.task,n=r(t),a=l(t);if(n&&n===s)break;a&&a.length&&a.length>e.childrenIndex?(c.push({task:a[e.childrenIndex],childrenIndex:0}),e.childrenIndex++):c.pop()}if(c.length>1){c=c.splice(1,c.length-2);const e=o.getter(n.start),a=o.getter(n.end),s=o.getter(n.percentComplete),u=o.getter(n.parentId||"");if(e(i).getTime()!==e(t).getTime()){cn(c.map((e=>e.task)),n);const a=e(t).getTime()-e(i).getTime();pn(l(t),n,a)}if(a(i).getTime()!==a(t).getTime()&&un(c.map((e=>e.task)),n),s(i)!==s(t)&&mn(c.map((e=>e.task)),n),n.parentId&&u(i)!==u(t)){let e;return c.length?sn(c.map((e=>e.task)),n,i):e=d.filter((e=>r(e)!==r(t))),dn(e||d,n,t)}}return d}}));
package/index.d.mts CHANGED
@@ -230,6 +230,8 @@ declare interface GanttBaseProps {
230
230
  timezone?: string;
231
231
  /**
232
232
  * If set to `true`, the user can resize columns by dragging the edges (resize handles) of their header cells.
233
+ *
234
+ * @default false
233
235
  */
234
236
  resizable?: boolean;
235
237
  /**
@@ -247,14 +249,24 @@ declare interface GanttBaseProps {
247
249
  filter?: FilterDescriptor[];
248
250
  /**
249
251
  * If set to `true`, the user can reorder columns by dragging their header cells.
252
+ *
253
+ * @default false
250
254
  */
251
255
  reorderable?: boolean;
252
256
  /**
253
257
  * If set to `true`, the user can use dedicated shortcuts to interact with the Gantt.
254
258
  * By default, navigation is disabled and the Gantt content is accessible in the normal tab sequence.
259
+ *
260
+ * @default false
255
261
  */
256
262
  navigatable?: boolean;
263
+ /**
264
+ * The descriptors by which the data is filtered in the column menu.
265
+ */
257
266
  columnMenuFilter?: CompositeFilterDescriptor[];
267
+ /**
268
+ * The component to render as the column menu.
269
+ */
258
270
  columnMenu?: React.ComponentType<any>;
259
271
  /**
260
272
  * The Gantt row component.
@@ -512,8 +524,17 @@ export declare interface GanttDependencyModelFields {
512
524
  }
513
525
 
514
526
  declare interface GanttEditorDependenciesHandler {
527
+ /**
528
+ * Lists the new dependencies that were created.
529
+ */
515
530
  createdDependencies: GanttDependency[];
531
+ /**
532
+ * Lists the existing dependencies that were changed.
533
+ */
516
534
  updatedDependencies: GanttDependency[];
535
+ /**
536
+ * Lists the dependencies that were removed.
537
+ */
517
538
  deletedDependencies: GanttDependency[];
518
539
  }
519
540
 
@@ -711,7 +732,7 @@ export declare interface GanttNumericFilterProps extends FilterComponentProps {
711
732
  */
712
733
  declare interface GanttProps extends GanttBaseProps {
713
734
  /**
714
- * Sets custom CSS classes to the Gantt DOM element.
735
+ * Adds custom CSS classes to the Gantt component.
715
736
  *
716
737
  * @example
717
738
  * ```jsx
@@ -720,7 +741,7 @@ declare interface GanttProps extends GanttBaseProps {
720
741
  */
721
742
  className?: string;
722
743
  /**
723
- * Represents the `style` HTML attribute.
744
+ * Sets custom styles for the Gantt component.
724
745
  *
725
746
  * @example
726
747
  * ```jsx
@@ -729,7 +750,7 @@ declare interface GanttProps extends GanttBaseProps {
729
750
  */
730
751
  style?: React.CSSProperties;
731
752
  /**
732
- * Sets the task data of the Gantt component. The data is then parsed and rendered as visual Gantt tasks.
753
+ * Provides task data for the Gantt chart. Tasks appear as visual bars in the timeline.
733
754
  *
734
755
  * @example
735
756
  * ```jsx
@@ -741,7 +762,7 @@ declare interface GanttProps extends GanttBaseProps {
741
762
  */
742
763
  taskData?: DataItem[];
743
764
  /**
744
- * Sets the dependency data of the Gantt component. The data is then parsed and rendered as visual connections between Gantt tasks.
765
+ * Provides dependency data for the Gantt chart. Dependencies appear as visual connections between tasks.
745
766
  *
746
767
  * @example
747
768
  * ```jsx
@@ -753,7 +774,7 @@ declare interface GanttProps extends GanttBaseProps {
753
774
  */
754
775
  dependencyData?: GanttDependency[];
755
776
  /**
756
- * The names of the model fields from which the Gantt will read its task data.
777
+ * Maps field names for reading task data from your data source.
757
778
  *
758
779
  * @example
759
780
  * ```jsx
@@ -763,7 +784,7 @@ declare interface GanttProps extends GanttBaseProps {
763
784
  */
764
785
  taskModelFields?: GanttTaskModelFields;
765
786
  /**
766
- * The names of the model fields from which the Gantt will read its dependency data.
787
+ * Maps field names for reading dependency data from your data source.
767
788
  *
768
789
  * @example
769
790
  * ```jsx
@@ -773,7 +794,7 @@ declare interface GanttProps extends GanttBaseProps {
773
794
  */
774
795
  dependencyModelFields?: GanttDependencyModelFields;
775
796
  /**
776
- * Specify the available `view` components as `children` and the Gantt will match the currently selected view and render it.
797
+ * Provides view components as children. The Gantt renders the currently selected view.
777
798
  *
778
799
  * @example
779
800
  * ```jsx
@@ -785,12 +806,14 @@ declare interface GanttProps extends GanttBaseProps {
785
806
  */
786
807
  children?: GanttView[] | GanttView;
787
808
  /**
788
- * Sets the initially selected view. The available values are:
809
+ * Sets the view that shows first when the Gantt loads. You can choose from:
789
810
  * * `day`
790
811
  * * `week` (Default)
791
812
  * * `month`
792
813
  * * `year`
793
814
  *
815
+ * @default "week"
816
+ *
794
817
  * @example
795
818
  * ```jsx
796
819
  * <Gantt defaultView="month" />
@@ -798,7 +821,7 @@ declare interface GanttProps extends GanttBaseProps {
798
821
  */
799
822
  defaultView?: string;
800
823
  /**
801
- * Sets the currently selected view. The value is matched with the `title` property of the view.
824
+ * Controls which view is currently shown. The value must match the `title` property of a view.
802
825
  *
803
826
  * @example
804
827
  * ```jsx
@@ -807,7 +830,7 @@ declare interface GanttProps extends GanttBaseProps {
807
830
  */
808
831
  view?: string;
809
832
  /**
810
- * Specifies the id of the timezone that will be displayed in the Gantt.
833
+ * Sets the timezone for displaying dates and times in the Gantt chart.
811
834
  * For example, `Europe/Sofia`.
812
835
  *
813
836
  * @example
@@ -817,7 +840,9 @@ declare interface GanttProps extends GanttBaseProps {
817
840
  */
818
841
  timezone?: string;
819
842
  /**
820
- * Defines the row height and implements equal heights for all rows.
843
+ * Sets the height of all rows in pixels. All rows have the same height.
844
+ *
845
+ * @default 50
821
846
  *
822
847
  * @example
823
848
  * ```jsx
@@ -826,7 +851,7 @@ declare interface GanttProps extends GanttBaseProps {
826
851
  */
827
852
  rowHeight?: number;
828
853
  /**
829
- * Allow configuration of the Gantt toolbar. Currently allows enabling the add button.
854
+ * Configures the toolbar options. You can enable the add task button.
830
855
  *
831
856
  * @example
832
857
  * ```jsx
@@ -837,7 +862,7 @@ declare interface GanttProps extends GanttBaseProps {
837
862
  addTaskButton: boolean;
838
863
  };
839
864
  /**
840
- * Called when a new `view` is selected. Useful for controlling the selected view.
865
+ * Fires when the user selects a different view. Use this to control which view is shown.
841
866
  *
842
867
  * @example
843
868
  * ```jsx
@@ -846,36 +871,39 @@ declare interface GanttProps extends GanttBaseProps {
846
871
  * ```
847
872
  */
848
873
  onViewChange?: (args: GanttViewChangeEvent) => void;
874
+ /**
875
+ * Fires when the user changes the column menu filter.
876
+ */
849
877
  onColumnMenuFilterChange?: (event: GanttColumnMenuFilterChangeEvent) => void;
850
878
  /**
851
- * Fires when the data state of the Gantt is changed.
879
+ * Fires when the data state changes.
852
880
  */
853
881
  onDataStateChange?: (event: GanttDataStateChangeEvent) => void;
854
882
  /**
855
883
  * Fires when the sorting of the Gantt is changed ([see example]({% slug sorting_gantt %})).
856
- * You have to handle the event yourself and sort the data.
884
+ * You need to handle the event yourself and sort the data.
857
885
  */
858
886
  onSortChange?: (event: GanttSortChangeEvent) => void;
859
887
  /**
860
888
  * Fires when the Gantt filter is modified through the UI
861
889
  * ([more information and examples]({% slug filtering_gantt %})).
862
- * You have to handle the event yourself and filter the data.
890
+ * You need to handle the event yourself and filter the data.
863
891
  */
864
892
  onFilterChange?: (event: GanttFilterChangeEvent) => void;
865
893
  /**
866
- * Fires when the user clicks on the expand or collapse icon of a row.
894
+ * Fires when the user clicks the expand or collapse icon on a row.
867
895
  */
868
896
  onExpandChange?: (event: GanttExpandChangeEvent) => void;
869
897
  /**
870
- * Fires when the user clicks on Gantt add button.
898
+ * Fires when the user clicks the add task button.
871
899
  */
872
900
  onAddClick?: (event: GanttAddClickEvent) => void;
873
901
  /**
874
- * Fires when a column is resized.
902
+ * Fires when the user resizes a column.
875
903
  */
876
904
  onColumnResize?: (event: GanttColumnResizeEvent) => void;
877
905
  /**
878
- * Fires when the columns are reordered.
906
+ * Fires when the user reorders columns.
879
907
  */
880
908
  onColumnReorder?: (event: GanttColumnReorderEvent) => void;
881
909
  /**
@@ -883,11 +911,11 @@ declare interface GanttProps extends GanttBaseProps {
883
911
  */
884
912
  onRowClick?: (event: GanttRowClickEvent) => void;
885
913
  /**
886
- * Fires when the user double clicks a row.
914
+ * Fires when the user double-clicks a row.
887
915
  */
888
916
  onRowDoubleClick?: (event: GanttRowDoubleClickEvent) => void;
889
917
  /**
890
- * Fires when the user trigger the context menu of row.
918
+ * Fires when the user right-clicks on a row.
891
919
  */
892
920
  onRowContextMenu?: (event: GanttRowContextMenuEvent) => void;
893
921
  /**
@@ -895,31 +923,31 @@ declare interface GanttProps extends GanttBaseProps {
895
923
  */
896
924
  onTaskClick?: (event: GanttTaskClickEvent) => void;
897
925
  /**
898
- * Fires when the user double clicks a task.
926
+ * Fires when the user double-clicks a task.
899
927
  */
900
928
  onTaskDoubleClick?: (event: GanttTaskDoubleClickEvent) => void;
901
929
  /**
902
- * Fires when the user trigger the context menu of task.
930
+ * Fires when the user right-clicks on a task.
903
931
  */
904
932
  onTaskContextMenu?: (event: GanttTaskContextMenuEvent) => void;
905
933
  /**
906
- * Fires when the user clicks the task remove action.
934
+ * Fires when the user clicks the remove button on a task.
907
935
  */
908
936
  onTaskRemoveClick?: (event: GanttTaskRemoveClickEvent) => void;
909
937
  /**
910
- * Fires when the user creates dependecy between two tasks.
938
+ * Fires when the user creates a dependency by connecting two tasks.
911
939
  */
912
940
  onDependencyCreate?: (event: GanttDependencyCreateEvent) => void;
913
941
  /**
914
- * Fires when the user press keyboard key.
942
+ * Fires when the user presses any keyboard key.
915
943
  */
916
944
  onKeyDown?: (event: GanttKeyDownEvent) => void;
917
945
  /**
918
- * Fires when the user tries to select or deselect a row or cell.
946
+ * Fires when the user selects or deselects rows or cells.
919
947
  */
920
948
  onSelectionChange?: (event: GanttSelectionChangeEvent) => void;
921
949
  /**
922
- * Fires when the user clicks the checkbox of a column header whose `field` matches `selectedField`
950
+ * Fires when the user clicks the checkbox in a column header.
923
951
  */
924
952
  onHeaderSelectionChange?: (event: GanttHeaderSelectionChangeEvent) => void;
925
953
  }
@@ -1258,7 +1286,7 @@ export declare interface GanttTaskModelFields {
1258
1286
  */
1259
1287
  isInEdit?: string;
1260
1288
  /**
1261
- * Then name of selected model field. It will provide a Boolean representation of the selected state of the current item.
1289
+ * The name of the selected model field. It will provide a Boolean representation of the selected state of the current item.
1262
1290
  * Defaults to `"isSelected"`.
1263
1291
  */
1264
1292
  isSelected?: string;
@@ -1296,6 +1324,9 @@ declare type GanttView = React.ReactElement<GanttViewProps>;
1296
1324
  * Called every time the user changes the active `view`.
1297
1325
  */
1298
1326
  export declare interface GanttViewChangeEvent extends GanttEvent {
1327
+ /**
1328
+ * The value of the selected view.
1329
+ */
1299
1330
  value: string;
1300
1331
  }
1301
1332
 
@@ -1303,10 +1334,25 @@ export declare interface GanttViewChangeEvent extends GanttEvent {
1303
1334
  * Represents the arguments which are passed to the [dateRange]({% slug api_gantt_ganttviewprops %}#toc-daterange) function.
1304
1335
  */
1305
1336
  declare interface GanttViewDateRangeArgs {
1337
+ /**
1338
+ * The earliest start date among all tasks.
1339
+ */
1306
1340
  tasksStart: Date;
1341
+ /**
1342
+ * The latest end date among all tasks.
1343
+ */
1307
1344
  tasksEnd: Date;
1345
+ /**
1346
+ * The internationalization service for date formatting and localization.
1347
+ */
1308
1348
  intl: IntlService;
1349
+ /**
1350
+ * The timezone identifier for date calculations.
1351
+ */
1309
1352
  timezone?: string;
1353
+ /**
1354
+ * The number of days to include in the date range calculation.
1355
+ */
1310
1356
  numberOfDays?: number;
1311
1357
  }
1312
1358
 
@@ -1349,6 +1395,8 @@ export declare interface GanttViewProps {
1349
1395
  /**
1350
1396
  * The width of a single time slot in pixels. Default is 100px.
1351
1397
  *
1398
+ * @default 100
1399
+ *
1352
1400
  * @example
1353
1401
  * ```jsx
1354
1402
  * <GanttView slotWidth={120} />
@@ -1420,17 +1468,29 @@ export declare interface GanttViewProps {
1420
1468
  * The props of the Gantt view timeline header cell component.
1421
1469
  */
1422
1470
  export declare interface GanttViewTimelineHeaderCellProps {
1423
- /** The date range of the cell. */
1471
+ /**
1472
+ * The date range of the cell.
1473
+ */
1424
1474
  range: DateRange;
1425
- /** Is the cell is in work time. */
1475
+ /**
1476
+ * Indicates if the cell is in work time.
1477
+ */
1426
1478
  isWork: boolean;
1427
- /** The default cell text value. */
1479
+ /**
1480
+ * The default cell text value.
1481
+ */
1428
1482
  text: string;
1429
- /** The type of the cell slot. */
1483
+ /**
1484
+ * The type of the cell slot.
1485
+ */
1430
1486
  type: GanttSlotType;
1431
- /** The header cell row index. */
1487
+ /**
1488
+ * The header cell row index.
1489
+ */
1432
1490
  rowIndex: number;
1433
- /** The header cell index. */
1491
+ /**
1492
+ * The header cell index.
1493
+ */
1434
1494
  index: number;
1435
1495
  }
1436
1496
 
@@ -1493,19 +1553,52 @@ export declare const removeTask: (options: {
1493
1553
  export { setSelectedState }
1494
1554
 
1495
1555
  /**
1496
- * Represents the combined object of the default and custom GanttTaskModelFields.
1556
+ * Maps field names from your task data to the fields that the Gantt component expects.
1497
1557
  */
1498
1558
  export declare interface TaskModelFields {
1559
+ /**
1560
+ * Maps to the field that contains the unique ID for each task.
1561
+ */
1499
1562
  id: string;
1563
+ /**
1564
+ * Maps to the field that contains the task start date.
1565
+ */
1500
1566
  start: string;
1567
+ /**
1568
+ * Maps to the field that contains the task end date.
1569
+ */
1501
1570
  end: string;
1571
+ /**
1572
+ * Maps to the field that contains the task title or name.
1573
+ */
1502
1574
  title: string;
1575
+ /**
1576
+ * Maps to the field that contains the task completion percentage.
1577
+ */
1503
1578
  percentComplete: string;
1579
+ /**
1580
+ * Maps to the field that contains the parent task ID for child tasks.
1581
+ */
1504
1582
  parentId?: string;
1583
+ /**
1584
+ * Maps to the field that indicates if a task is a summary of child tasks.
1585
+ */
1505
1586
  isRollup: string;
1587
+ /**
1588
+ * Maps to the field that indicates if a task is expanded to show child tasks.
1589
+ */
1506
1590
  isExpanded: string;
1591
+ /**
1592
+ * Maps to the field that contains child tasks.
1593
+ */
1507
1594
  children: string;
1595
+ /**
1596
+ * Maps to the field that indicates if a task is currently being edited.
1597
+ */
1508
1598
  isInEdit: string;
1599
+ /**
1600
+ * Maps to the field that indicates if a task is selected.
1601
+ */
1509
1602
  isSelected: string;
1510
1603
  }
1511
1604
 
package/index.d.ts CHANGED
@@ -230,6 +230,8 @@ declare interface GanttBaseProps {
230
230
  timezone?: string;
231
231
  /**
232
232
  * If set to `true`, the user can resize columns by dragging the edges (resize handles) of their header cells.
233
+ *
234
+ * @default false
233
235
  */
234
236
  resizable?: boolean;
235
237
  /**
@@ -247,14 +249,24 @@ declare interface GanttBaseProps {
247
249
  filter?: FilterDescriptor[];
248
250
  /**
249
251
  * If set to `true`, the user can reorder columns by dragging their header cells.
252
+ *
253
+ * @default false
250
254
  */
251
255
  reorderable?: boolean;
252
256
  /**
253
257
  * If set to `true`, the user can use dedicated shortcuts to interact with the Gantt.
254
258
  * By default, navigation is disabled and the Gantt content is accessible in the normal tab sequence.
259
+ *
260
+ * @default false
255
261
  */
256
262
  navigatable?: boolean;
263
+ /**
264
+ * The descriptors by which the data is filtered in the column menu.
265
+ */
257
266
  columnMenuFilter?: CompositeFilterDescriptor[];
267
+ /**
268
+ * The component to render as the column menu.
269
+ */
258
270
  columnMenu?: React.ComponentType<any>;
259
271
  /**
260
272
  * The Gantt row component.
@@ -512,8 +524,17 @@ export declare interface GanttDependencyModelFields {
512
524
  }
513
525
 
514
526
  declare interface GanttEditorDependenciesHandler {
527
+ /**
528
+ * Lists the new dependencies that were created.
529
+ */
515
530
  createdDependencies: GanttDependency[];
531
+ /**
532
+ * Lists the existing dependencies that were changed.
533
+ */
516
534
  updatedDependencies: GanttDependency[];
535
+ /**
536
+ * Lists the dependencies that were removed.
537
+ */
517
538
  deletedDependencies: GanttDependency[];
518
539
  }
519
540
 
@@ -711,7 +732,7 @@ export declare interface GanttNumericFilterProps extends FilterComponentProps {
711
732
  */
712
733
  declare interface GanttProps extends GanttBaseProps {
713
734
  /**
714
- * Sets custom CSS classes to the Gantt DOM element.
735
+ * Adds custom CSS classes to the Gantt component.
715
736
  *
716
737
  * @example
717
738
  * ```jsx
@@ -720,7 +741,7 @@ declare interface GanttProps extends GanttBaseProps {
720
741
  */
721
742
  className?: string;
722
743
  /**
723
- * Represents the `style` HTML attribute.
744
+ * Sets custom styles for the Gantt component.
724
745
  *
725
746
  * @example
726
747
  * ```jsx
@@ -729,7 +750,7 @@ declare interface GanttProps extends GanttBaseProps {
729
750
  */
730
751
  style?: React.CSSProperties;
731
752
  /**
732
- * Sets the task data of the Gantt component. The data is then parsed and rendered as visual Gantt tasks.
753
+ * Provides task data for the Gantt chart. Tasks appear as visual bars in the timeline.
733
754
  *
734
755
  * @example
735
756
  * ```jsx
@@ -741,7 +762,7 @@ declare interface GanttProps extends GanttBaseProps {
741
762
  */
742
763
  taskData?: DataItem[];
743
764
  /**
744
- * Sets the dependency data of the Gantt component. The data is then parsed and rendered as visual connections between Gantt tasks.
765
+ * Provides dependency data for the Gantt chart. Dependencies appear as visual connections between tasks.
745
766
  *
746
767
  * @example
747
768
  * ```jsx
@@ -753,7 +774,7 @@ declare interface GanttProps extends GanttBaseProps {
753
774
  */
754
775
  dependencyData?: GanttDependency[];
755
776
  /**
756
- * The names of the model fields from which the Gantt will read its task data.
777
+ * Maps field names for reading task data from your data source.
757
778
  *
758
779
  * @example
759
780
  * ```jsx
@@ -763,7 +784,7 @@ declare interface GanttProps extends GanttBaseProps {
763
784
  */
764
785
  taskModelFields?: GanttTaskModelFields;
765
786
  /**
766
- * The names of the model fields from which the Gantt will read its dependency data.
787
+ * Maps field names for reading dependency data from your data source.
767
788
  *
768
789
  * @example
769
790
  * ```jsx
@@ -773,7 +794,7 @@ declare interface GanttProps extends GanttBaseProps {
773
794
  */
774
795
  dependencyModelFields?: GanttDependencyModelFields;
775
796
  /**
776
- * Specify the available `view` components as `children` and the Gantt will match the currently selected view and render it.
797
+ * Provides view components as children. The Gantt renders the currently selected view.
777
798
  *
778
799
  * @example
779
800
  * ```jsx
@@ -785,12 +806,14 @@ declare interface GanttProps extends GanttBaseProps {
785
806
  */
786
807
  children?: GanttView[] | GanttView;
787
808
  /**
788
- * Sets the initially selected view. The available values are:
809
+ * Sets the view that shows first when the Gantt loads. You can choose from:
789
810
  * * `day`
790
811
  * * `week` (Default)
791
812
  * * `month`
792
813
  * * `year`
793
814
  *
815
+ * @default "week"
816
+ *
794
817
  * @example
795
818
  * ```jsx
796
819
  * <Gantt defaultView="month" />
@@ -798,7 +821,7 @@ declare interface GanttProps extends GanttBaseProps {
798
821
  */
799
822
  defaultView?: string;
800
823
  /**
801
- * Sets the currently selected view. The value is matched with the `title` property of the view.
824
+ * Controls which view is currently shown. The value must match the `title` property of a view.
802
825
  *
803
826
  * @example
804
827
  * ```jsx
@@ -807,7 +830,7 @@ declare interface GanttProps extends GanttBaseProps {
807
830
  */
808
831
  view?: string;
809
832
  /**
810
- * Specifies the id of the timezone that will be displayed in the Gantt.
833
+ * Sets the timezone for displaying dates and times in the Gantt chart.
811
834
  * For example, `Europe/Sofia`.
812
835
  *
813
836
  * @example
@@ -817,7 +840,9 @@ declare interface GanttProps extends GanttBaseProps {
817
840
  */
818
841
  timezone?: string;
819
842
  /**
820
- * Defines the row height and implements equal heights for all rows.
843
+ * Sets the height of all rows in pixels. All rows have the same height.
844
+ *
845
+ * @default 50
821
846
  *
822
847
  * @example
823
848
  * ```jsx
@@ -826,7 +851,7 @@ declare interface GanttProps extends GanttBaseProps {
826
851
  */
827
852
  rowHeight?: number;
828
853
  /**
829
- * Allow configuration of the Gantt toolbar. Currently allows enabling the add button.
854
+ * Configures the toolbar options. You can enable the add task button.
830
855
  *
831
856
  * @example
832
857
  * ```jsx
@@ -837,7 +862,7 @@ declare interface GanttProps extends GanttBaseProps {
837
862
  addTaskButton: boolean;
838
863
  };
839
864
  /**
840
- * Called when a new `view` is selected. Useful for controlling the selected view.
865
+ * Fires when the user selects a different view. Use this to control which view is shown.
841
866
  *
842
867
  * @example
843
868
  * ```jsx
@@ -846,36 +871,39 @@ declare interface GanttProps extends GanttBaseProps {
846
871
  * ```
847
872
  */
848
873
  onViewChange?: (args: GanttViewChangeEvent) => void;
874
+ /**
875
+ * Fires when the user changes the column menu filter.
876
+ */
849
877
  onColumnMenuFilterChange?: (event: GanttColumnMenuFilterChangeEvent) => void;
850
878
  /**
851
- * Fires when the data state of the Gantt is changed.
879
+ * Fires when the data state changes.
852
880
  */
853
881
  onDataStateChange?: (event: GanttDataStateChangeEvent) => void;
854
882
  /**
855
883
  * Fires when the sorting of the Gantt is changed ([see example]({% slug sorting_gantt %})).
856
- * You have to handle the event yourself and sort the data.
884
+ * You need to handle the event yourself and sort the data.
857
885
  */
858
886
  onSortChange?: (event: GanttSortChangeEvent) => void;
859
887
  /**
860
888
  * Fires when the Gantt filter is modified through the UI
861
889
  * ([more information and examples]({% slug filtering_gantt %})).
862
- * You have to handle the event yourself and filter the data.
890
+ * You need to handle the event yourself and filter the data.
863
891
  */
864
892
  onFilterChange?: (event: GanttFilterChangeEvent) => void;
865
893
  /**
866
- * Fires when the user clicks on the expand or collapse icon of a row.
894
+ * Fires when the user clicks the expand or collapse icon on a row.
867
895
  */
868
896
  onExpandChange?: (event: GanttExpandChangeEvent) => void;
869
897
  /**
870
- * Fires when the user clicks on Gantt add button.
898
+ * Fires when the user clicks the add task button.
871
899
  */
872
900
  onAddClick?: (event: GanttAddClickEvent) => void;
873
901
  /**
874
- * Fires when a column is resized.
902
+ * Fires when the user resizes a column.
875
903
  */
876
904
  onColumnResize?: (event: GanttColumnResizeEvent) => void;
877
905
  /**
878
- * Fires when the columns are reordered.
906
+ * Fires when the user reorders columns.
879
907
  */
880
908
  onColumnReorder?: (event: GanttColumnReorderEvent) => void;
881
909
  /**
@@ -883,11 +911,11 @@ declare interface GanttProps extends GanttBaseProps {
883
911
  */
884
912
  onRowClick?: (event: GanttRowClickEvent) => void;
885
913
  /**
886
- * Fires when the user double clicks a row.
914
+ * Fires when the user double-clicks a row.
887
915
  */
888
916
  onRowDoubleClick?: (event: GanttRowDoubleClickEvent) => void;
889
917
  /**
890
- * Fires when the user trigger the context menu of row.
918
+ * Fires when the user right-clicks on a row.
891
919
  */
892
920
  onRowContextMenu?: (event: GanttRowContextMenuEvent) => void;
893
921
  /**
@@ -895,31 +923,31 @@ declare interface GanttProps extends GanttBaseProps {
895
923
  */
896
924
  onTaskClick?: (event: GanttTaskClickEvent) => void;
897
925
  /**
898
- * Fires when the user double clicks a task.
926
+ * Fires when the user double-clicks a task.
899
927
  */
900
928
  onTaskDoubleClick?: (event: GanttTaskDoubleClickEvent) => void;
901
929
  /**
902
- * Fires when the user trigger the context menu of task.
930
+ * Fires when the user right-clicks on a task.
903
931
  */
904
932
  onTaskContextMenu?: (event: GanttTaskContextMenuEvent) => void;
905
933
  /**
906
- * Fires when the user clicks the task remove action.
934
+ * Fires when the user clicks the remove button on a task.
907
935
  */
908
936
  onTaskRemoveClick?: (event: GanttTaskRemoveClickEvent) => void;
909
937
  /**
910
- * Fires when the user creates dependecy between two tasks.
938
+ * Fires when the user creates a dependency by connecting two tasks.
911
939
  */
912
940
  onDependencyCreate?: (event: GanttDependencyCreateEvent) => void;
913
941
  /**
914
- * Fires when the user press keyboard key.
942
+ * Fires when the user presses any keyboard key.
915
943
  */
916
944
  onKeyDown?: (event: GanttKeyDownEvent) => void;
917
945
  /**
918
- * Fires when the user tries to select or deselect a row or cell.
946
+ * Fires when the user selects or deselects rows or cells.
919
947
  */
920
948
  onSelectionChange?: (event: GanttSelectionChangeEvent) => void;
921
949
  /**
922
- * Fires when the user clicks the checkbox of a column header whose `field` matches `selectedField`
950
+ * Fires when the user clicks the checkbox in a column header.
923
951
  */
924
952
  onHeaderSelectionChange?: (event: GanttHeaderSelectionChangeEvent) => void;
925
953
  }
@@ -1258,7 +1286,7 @@ export declare interface GanttTaskModelFields {
1258
1286
  */
1259
1287
  isInEdit?: string;
1260
1288
  /**
1261
- * Then name of selected model field. It will provide a Boolean representation of the selected state of the current item.
1289
+ * The name of the selected model field. It will provide a Boolean representation of the selected state of the current item.
1262
1290
  * Defaults to `"isSelected"`.
1263
1291
  */
1264
1292
  isSelected?: string;
@@ -1296,6 +1324,9 @@ declare type GanttView = React.ReactElement<GanttViewProps>;
1296
1324
  * Called every time the user changes the active `view`.
1297
1325
  */
1298
1326
  export declare interface GanttViewChangeEvent extends GanttEvent {
1327
+ /**
1328
+ * The value of the selected view.
1329
+ */
1299
1330
  value: string;
1300
1331
  }
1301
1332
 
@@ -1303,10 +1334,25 @@ export declare interface GanttViewChangeEvent extends GanttEvent {
1303
1334
  * Represents the arguments which are passed to the [dateRange]({% slug api_gantt_ganttviewprops %}#toc-daterange) function.
1304
1335
  */
1305
1336
  declare interface GanttViewDateRangeArgs {
1337
+ /**
1338
+ * The earliest start date among all tasks.
1339
+ */
1306
1340
  tasksStart: Date;
1341
+ /**
1342
+ * The latest end date among all tasks.
1343
+ */
1307
1344
  tasksEnd: Date;
1345
+ /**
1346
+ * The internationalization service for date formatting and localization.
1347
+ */
1308
1348
  intl: IntlService;
1349
+ /**
1350
+ * The timezone identifier for date calculations.
1351
+ */
1309
1352
  timezone?: string;
1353
+ /**
1354
+ * The number of days to include in the date range calculation.
1355
+ */
1310
1356
  numberOfDays?: number;
1311
1357
  }
1312
1358
 
@@ -1349,6 +1395,8 @@ export declare interface GanttViewProps {
1349
1395
  /**
1350
1396
  * The width of a single time slot in pixels. Default is 100px.
1351
1397
  *
1398
+ * @default 100
1399
+ *
1352
1400
  * @example
1353
1401
  * ```jsx
1354
1402
  * <GanttView slotWidth={120} />
@@ -1420,17 +1468,29 @@ export declare interface GanttViewProps {
1420
1468
  * The props of the Gantt view timeline header cell component.
1421
1469
  */
1422
1470
  export declare interface GanttViewTimelineHeaderCellProps {
1423
- /** The date range of the cell. */
1471
+ /**
1472
+ * The date range of the cell.
1473
+ */
1424
1474
  range: DateRange;
1425
- /** Is the cell is in work time. */
1475
+ /**
1476
+ * Indicates if the cell is in work time.
1477
+ */
1426
1478
  isWork: boolean;
1427
- /** The default cell text value. */
1479
+ /**
1480
+ * The default cell text value.
1481
+ */
1428
1482
  text: string;
1429
- /** The type of the cell slot. */
1483
+ /**
1484
+ * The type of the cell slot.
1485
+ */
1430
1486
  type: GanttSlotType;
1431
- /** The header cell row index. */
1487
+ /**
1488
+ * The header cell row index.
1489
+ */
1432
1490
  rowIndex: number;
1433
- /** The header cell index. */
1491
+ /**
1492
+ * The header cell index.
1493
+ */
1434
1494
  index: number;
1435
1495
  }
1436
1496
 
@@ -1493,19 +1553,52 @@ export declare const removeTask: (options: {
1493
1553
  export { setSelectedState }
1494
1554
 
1495
1555
  /**
1496
- * Represents the combined object of the default and custom GanttTaskModelFields.
1556
+ * Maps field names from your task data to the fields that the Gantt component expects.
1497
1557
  */
1498
1558
  export declare interface TaskModelFields {
1559
+ /**
1560
+ * Maps to the field that contains the unique ID for each task.
1561
+ */
1499
1562
  id: string;
1563
+ /**
1564
+ * Maps to the field that contains the task start date.
1565
+ */
1500
1566
  start: string;
1567
+ /**
1568
+ * Maps to the field that contains the task end date.
1569
+ */
1501
1570
  end: string;
1571
+ /**
1572
+ * Maps to the field that contains the task title or name.
1573
+ */
1502
1574
  title: string;
1575
+ /**
1576
+ * Maps to the field that contains the task completion percentage.
1577
+ */
1503
1578
  percentComplete: string;
1579
+ /**
1580
+ * Maps to the field that contains the parent task ID for child tasks.
1581
+ */
1504
1582
  parentId?: string;
1583
+ /**
1584
+ * Maps to the field that indicates if a task is a summary of child tasks.
1585
+ */
1505
1586
  isRollup: string;
1587
+ /**
1588
+ * Maps to the field that indicates if a task is expanded to show child tasks.
1589
+ */
1506
1590
  isExpanded: string;
1591
+ /**
1592
+ * Maps to the field that contains child tasks.
1593
+ */
1507
1594
  children: string;
1595
+ /**
1596
+ * Maps to the field that indicates if a task is currently being edited.
1597
+ */
1508
1598
  isInEdit: string;
1599
+ /**
1600
+ * Maps to the field that indicates if a task is selected.
1601
+ */
1509
1602
  isSelected: string;
1510
1603
  }
1511
1604
 
@@ -5,4 +5,4 @@
5
5
  * Licensed under commercial license. See LICENSE.md in the package root for more information
6
6
  *-------------------------------------------------------------------------------------------
7
7
  */
8
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=Object.freeze({name:"@progress/kendo-react-gantt",productName:"KendoReact",productCode:"KENDOUIREACT",productCodes:["KENDOUIREACT"],publishDate: 1757420056,version:"12.0.2-develop.3",licensingDocsUrl:"https://www.telerik.com/kendo-react-ui/components/my-license/"});exports.packageMetadata=e;
8
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=Object.freeze({name:"@progress/kendo-react-gantt",productName:"KendoReact",productCode:"KENDOUIREACT",productCodes:["KENDOUIREACT"],publishDate: 1757585025,version:"12.0.2-develop.5",licensingDocsUrl:"https://www.telerik.com/kendo-react-ui/components/my-license/"});exports.packageMetadata=e;
@@ -10,8 +10,8 @@ const e = Object.freeze({
10
10
  productName: "KendoReact",
11
11
  productCode: "KENDOUIREACT",
12
12
  productCodes: ["KENDOUIREACT"],
13
- publishDate: 1757420056,
14
- version: "12.0.2-develop.3",
13
+ publishDate: 1757585025,
14
+ version: "12.0.2-develop.5",
15
15
  licensingDocsUrl: "https://www.telerik.com/kendo-react-ui/components/my-license/"
16
16
  });
17
17
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-react-gantt",
3
- "version": "12.0.2-develop.3",
3
+ "version": "12.0.2-develop.5",
4
4
  "description": "React Gantt enables the display of self-referencing tabular data with many features. KendoReact Gantt package",
5
5
  "author": "Progress",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
@@ -29,18 +29,18 @@
29
29
  "@progress/kendo-date-math": "^1.4.1",
30
30
  "@progress/kendo-drawing": "^1.21.2",
31
31
  "@progress/kendo-licensing": "^1.7.0",
32
- "@progress/kendo-react-buttons": "12.0.2-develop.3",
33
- "@progress/kendo-react-common": "12.0.2-develop.3",
34
- "@progress/kendo-react-grid": "12.0.2-develop.3",
35
- "@progress/kendo-react-data-tools": "12.0.2-develop.3",
36
- "@progress/kendo-react-dateinputs": "12.0.2-develop.3",
37
- "@progress/kendo-react-dialogs": "12.0.2-develop.3",
38
- "@progress/kendo-react-dropdowns": "12.0.2-develop.3",
39
- "@progress/kendo-react-form": "12.0.2-develop.3",
40
- "@progress/kendo-react-inputs": "12.0.2-develop.3",
41
- "@progress/kendo-react-intl": "12.0.2-develop.3",
42
- "@progress/kendo-react-labels": "12.0.2-develop.3",
43
- "@progress/kendo-react-treelist": "12.0.2-develop.3",
32
+ "@progress/kendo-react-buttons": "12.0.2-develop.5",
33
+ "@progress/kendo-react-common": "12.0.2-develop.5",
34
+ "@progress/kendo-react-grid": "12.0.2-develop.5",
35
+ "@progress/kendo-react-data-tools": "12.0.2-develop.5",
36
+ "@progress/kendo-react-dateinputs": "12.0.2-develop.5",
37
+ "@progress/kendo-react-dialogs": "12.0.2-develop.5",
38
+ "@progress/kendo-react-dropdowns": "12.0.2-develop.5",
39
+ "@progress/kendo-react-form": "12.0.2-develop.5",
40
+ "@progress/kendo-react-inputs": "12.0.2-develop.5",
41
+ "@progress/kendo-react-intl": "12.0.2-develop.5",
42
+ "@progress/kendo-react-labels": "12.0.2-develop.5",
43
+ "@progress/kendo-react-treelist": "12.0.2-develop.5",
44
44
  "@progress/kendo-svg-icons": "^4.0.0",
45
45
  "react": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc",
46
46
  "react-dom": "^16.8.2 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
@@ -69,7 +69,7 @@
69
69
  "package": {
70
70
  "productName": "KendoReact",
71
71
  "productCode": "KENDOUIREACT",
72
- "publishDate": 1757420056,
72
+ "publishDate": 1757585025,
73
73
  "licensingDocsUrl": "https://www.telerik.com/kendo-react-ui/components/my-license/"
74
74
  }
75
75
  },