@xpyjs/gantt-core 0.0.1-rc.5 → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/style.css +1 -1
- package/dist/x-gantt.js +1090 -928
- package/dist/x-gantt.umd.cjs +23 -3
- package/package.json +1 -1
- package/types/GanttContext.d.ts +1 -0
- package/types/event/index.d.ts +3 -0
- package/types/models/Task.d.ts +1 -0
- package/types/rendering/Renderer.d.ts +1 -0
- package/types/rendering/chart/ChartBody.d.ts +4 -0
- package/types/rendering/table/DragHandler.d.ts +50 -0
- package/types/store/DataManager.d.ts +2 -0
- package/types/types/chart.d.ts +2 -0
- package/types/types/event.d.ts +6 -3
- package/types/types/options.d.ts +29 -1
- package/types/types/render.d.ts +5 -0
- package/types/types/table.d.ts +2 -2
- package/types/utils/helpers.d.ts +2 -1
package/dist/x-gantt.umd.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(N,A){typeof exports=="object"&&typeof module<"u"?A(exports,require("dayjs"),require("lodash-es"),require("konva")):typeof define=="function"&&define.amd?define(["exports","dayjs","lodash-es","konva"],A):(N=typeof globalThis<"u"?globalThis:N||self,A(N.XGantt={},N.dayjs,N._,N.Konva))})(this,function(N,A,E,k){"use strict";var Ye=Object.defineProperty;var Ue=(N,A,E)=>A in N?Ye(N,A,{enumerable:!0,configurable:!0,writable:!0,value:E}):N[A]=E;var h=(N,A,E)=>Ue(N,typeof A!="symbol"?A+"":A,E);const ft="0.0.1-rc.5";function Ht(){const f="#eca710",t="#ffffff",e="#e7209e",i="#ffffff",s="#1c42e8";[" __ __ _____ _____ _____ _____ _____ ","| | || __|| _ || | ||_ _||_ _|","|- -|| | || || | | | | | | | ","|__|__||_____||__|__||_|___| |_| |_| "].forEach(o=>{console.log(`%c${o}`,`color: ${f}; font-weight: bold; font-family: monospace;`)}),console.log(`%c 🚀 欢迎使用 XGantt %c Version: ${ft} `,`background-color: ${e}; color: ${t}; padding: 2px 4px; border-radius: 6px 0 0 6px; font-weight: bold; margin: 4px 0;`,`background-color: ${s}; color: ${i}; padding: 2px 4px; border-radius: 0 6px 6px 0; font-weight: normal; margin: 4px 0;`)}const P=class P{static setOptions(t){P.options={...P.options,...t}}static getLevel(){return P.options.level}static debug(...t){P.logWithLevel(1,console.debug,...t)}static info(...t){P.logWithLevel(2,console.info,...t)}static warn(...t){P.logWithLevel(3,console.warn,...t)}static error(...t){P.logWithLevel(4,console.error,...t)}static assert(t,...e){if(!t&&P.options.level<=4){const i=P.formatArgs("Assertion failed:",...e);console.error(...i)}}static getMessage(...t){return P.formatArgs(...t).join("")}static exception(...t){return new Error(P.getMessage(...t))}static logWithLevel(t,e,...i){if(P.options.level<=t){const s=P.formatArgs(...i);e(...s)}}static formatArgs(...t){const e=[P.Prefix];return P.options.showTimestamp&&e.unshift(`[${A().format("YYYY-MM-DD HH:mm:ss.SSS")}]`),[e.join(""),...t]}};h(P,"Prefix","[XGantt]"),h(P,"options",{level:2,showTimestamp:!1});let D=P;const nt=()=>({data:[],links:{show:!1,key:"id",data:[],distance:20,dash:[0],width:1,gap:5,arrow:{width:6,height:8},radius:3,create:{enabled:!1,mode:"hover",radius:3,width:2,from:!0,to:!0},move:{enabled:!1},enableCycleDetection:!0},baselines:{data:[],taskKey:"taskId",show:!1,fields:{startTime:"startTime",endTime:"endTime",name:"name",id:"id",target:"target",highlight:"highlight"},mode:"line",position:"bottom",backgroundColor:"#999",opacity:.6,radius:2,label:{show:!1,forceDisplay:!1,color:"#666",fontSize:10,position:"right",fontFamily:"Arial"},compare:{enabled:!1,tolerance:.5,mode:"both",target:"end",delayed:{backgroundColor:"#ff4444",opacity:.8},ahead:{backgroundColor:"#44ff44",opacity:.8},indicator:{show:!0,position:"top",fontFamily:"Arial",fontSize:10,size:6,delayed:{show:!0,color:"#af1b1b",opacity:1},ahead:{show:!0,color:"#1baf1b",opacity:1},ontime:{show:!1,color:"#999",opacity:1}}}},milestone:{show:!1,shape:"diamond",border:{width:1},label:{show:!0,text:"",fontSize:10,fontFamily:"Arial",position:"top-right"}},summary:{show:!1,mode:"expand",move:{enabled:!1}},fields:{id:"id",startTime:"startTime",endTime:"endTime",name:"name",progress:"progress",children:"children",type:"type"},selection:{enabled:!1,includeSelf:!0},expand:{show:!0,enabled:!0},dateFormat:"YYYY-MM-DD HH:mm:ss",locale:"en",unit:"day",table:{width:100,ellipsis:!0,align:"center",headerAlign:"center",emptyText:"-"},chart:{autoCellWidth:!1,cellWidth:"normal"},primaryColor:"#eca710",border:{color:"#e5e5e5"},header:{height:80,color:"#000",fontSize:14,fontWeight:600,fontFamily:"Arial"},row:{height:30,indent:16,hover:{backgroundColor:"#000",opacity:.05},select:{backgroundColor:"#000",opacity:.1}},bar:{height:20,show:!0,move:{byUnit:!1,link:{child:"none",parent:"none"}}},today:{show:!0,type:"line",backgroundColor:"lightblue",opacity:1,width:1},weekend:{show:!0,backgroundColor:"#c9c9c9",opacity:.1},holiday:{opacity:.1}});class Gt{constructor(){h(this,"options",nt())}getOptions(){return this.options}setOptions(t,e={merge:!0}){var i;if(this.options=e.merge?E.merge(nt(),this.options,t):E.merge(nt(),t),(i=t.holiday)!=null&&i.holidays&&t.holiday.holidays.length>0){const s=[];t.holiday.holidays.forEach(n=>{if(E.isArray(n.date)){const o=n.date.map(r=>A(r)).sort((r,a)=>r.diff(a));for(let r=1;r<o.length;r++)if(o[r].diff(o[r-1],"day")>1){s.push({...n,date:o.slice(0,r).map(a=>a.valueOf())}),o.splice(0,r);break}o.length>0&&s.push({...n,date:o.map(r=>r.valueOf())})}else s.push(n)}),this.options.holiday.holidays=s}}update(t){this.setOptions(t)}getRowBackgroundColor(t){var s;let e="";const i=(s=this.options.row)==null?void 0:s.backgroundColor;return E.isString(i)?e=i:E.isArray(i)&&i.length>0?e=i[t.level]:E.isFunction(i)&&(e=i(t.getEmitData())),e}unpackFunc(t,e){return E.isFunction(t)?t(e.getEmitData()):t}}class Rt{constructor(){h(this,"events",new Map)}on(t,e){var i;this.events.has(t)||this.events.set(t,[]),(i=this.events.get(t))==null||i.push(e)}emit(t,...e){var i;this.events.has(t)&&((i=this.events.get(t))==null||i.forEach(s=>s(...e)))}off(t,e){var i;this.events.has(t)&&this.events.set(t,((i=this.events.get(t))==null?void 0:i.filter(s=>s!==e))||[])}offAll(){this.events.clear()}}var v=(f=>(f.LOADED="loaded",f.COLUMN_WIDTH_CHANGE="column-width-change",f.MOVE_GUIDELINE="move-guideline",f.SHOW_GUIDELINE="show-guideline",f.HIDE_GUIDELINE="hide-guideline",f.TOGGLE_COLLAPSE="toggle-collapse",f.SCROLL="scroll",f.CHART_OFFSET_CHANGE="chart_offset_change",f.DATA_UPDATE="data-update",f.VIEW_UPDATE="view-update",f.UPDATE_TABLE_HEADER="update_table_header",f.UPDATE_TABLE_BODY="update_table_body",f.UPDATE_CHART_HEADER="update_chart_header",f.UPDATE_TASK="update_task",f.UPDATE_LINK="update_link",f.CREATE_LINK="create_link",f.TASK_SELECTED="task_selected",f.TASK_UNSELECTED="task_unselected",f.SELECT_LINK="select_link",f.CHECK_TASK="check_task",f.CONTEXT_LINK="context_link",f.ROW_CLICK="row-click",f.ROW_DBL_CLICK="row-dbl-click",f.ROW_CONTEXTMENU="row-contextmenu",f.SLIDER_CLICK="slider-click",f.SLIDER_DBL_CLICK="slider-dbl-click",f.SLIDER_CONTEXTMENU="slider-contextmenu",f.SLIDER_DRAGGING="slider-dragging",f.SLIDER_ENTER="slider-enter",f.SLIDER_HOVER="slider-hover",f.SLIDER_LEAVE="slider-leave",f.SLIDER_BLINK="slider-blink",f.LINK_BLINK="link-blink",f.ROW_HIGHLIGHT="row-highlight",f.ROW_UNHIGHLIGHT="row-unhighlight",f.TASK_DRAG_START="task-drag-start",f.TASK_DRAG_MOVE="task-drag-move",f.TASK_DRAG_END="task-drag-end",f.BASELINE_CLICK="baseline-click",f.BASELINE_CONTEXTMENU="baseline-contextmenu",f.BASELINE_MOUSEENTER="baseline-mouseenter",f.BASELINE_MOUSEMOVE="baseline-mousemove",f.BASELINE_MOUSEOUT="baseline-mouseout",f.ERROR="error",f))(v||{}),X=(f=>(f.INVALID_TYPE="INVALID_TYPE",f.TASK_NOT_FOUND="TASK_NOT_FOUND",f.LINK_NOT_ALLOWED="LINK_NOT_ALLOWED",f.LINK_SAME="LINK_SAME",f.LINK_EXIST="LINK_EXIST",f.LINK_INVALID_ARG="LINK_INVALID_ARG",f.LINK_CYCLE="LINK_CYCLE",f))(X||{});function Q(){return Math.random().toString(36).substring(2,15)}function F(f,t,e){if(!Number.isFinite(f)||!Number.isFinite(t)||!Number.isFinite(e))return Number.isFinite(t)?t:0;const i=Math.min(t,e),s=Math.max(t,e);return Math.min(Math.max(i,f),s)}function tt(f,t){let e=f;return E.isString(e)&&(/%$/.test(e)?e=t*parseFloat(e)/100:e=parseFloat(e)),isNaN(e)?0:e}function ot(f,t){if(t===0)throw new Error("基准值不能为0");if(Math.abs(f)<=t/2)return 0;const e=Math.floor(f/t),i=Math.ceil(f/t),s=e*t,n=i*t,o=Math.abs(f-s),r=Math.abs(f-n);return o<=r?s:n}function et(f,t=4){return typeof f=="number"?[f,f,f,f]:Array.isArray(f)?[f[0]??t,f[1]??t,f[2]??t,f[3]??t]:[t,t,t,t]}function Wt(f,t=100){if(!Number.isFinite(f)||!Number.isFinite(t)||t===0||f<0)return 0;const e=f/Math.abs(t);return Math.min(e,1)}function rt(f,t=2,e=!1){const i=f.toFixed(t);return e?i:i.replace(/\.?0+$/,"")}const at=new Map;function pt(f,t=16,e=16){const i=at.get(f);if(i)return i;const s=new Promise((n,o)=>{let r=f;if(!/viewBox\s*=\s*["'][^"']*["']/.test(r)){const l=r.match(/width\s*=\s*["']([^"']*)["']/),m=r.match(/height\s*=\s*["']([^"']*)["']/),p=l?parseFloat(l[1]):t,u=m?parseFloat(m[1]):e;r=r.replace(/<svg([^>]*)>/,`<svg$1 viewBox="0 0 ${p} ${u}">`)}r=r.replace(/width\s*=\s*["'][^"']*["']/,`width="${t}"`),r=r.replace(/height\s*=\s*["'][^"']*["']/,`height="${e}"`),/width\s*=/.test(r)||(r=r.replace(/<svg/,`<svg width="${t}"`)),/height\s*=/.test(r)||(r=r.replace(/<svg/,`<svg height="${e}"`)),/preserveAspectRatio\s*=/.test(r)||(r=r.replace(/<svg([^>]*)>/,'<svg$1 preserveAspectRatio="xMidYMid meet">'));const c=new Image;c.onload=()=>{URL.revokeObjectURL(c.src),n(c)},c.onerror=l=>{URL.revokeObjectURL(c.src),at.delete(f),o(l)};const g=new Blob([r],{type:"image/svg+xml"}),d=URL.createObjectURL(g);c.src=d});return at.set(f,s),s}class ht{constructor(t,e,i,s,n){h(this,"__key__",Q());h(this,"id");h(this,"name");h(this,"startTime");h(this,"endTime");h(this,"progress");h(this,"type");h(this,"expanded");h(this,"children");h(this,"parent");h(this,"level");h(this,"flatIndex");h(this,"duration",0);h(this,"data");h(this,"fields");this.store=t,this.event=e,this.fields=this.store.getOptionManager().getOptions().fields,this.id=n||i[this.fields.id]||Q(),this.data=i,this.name=i[this.fields.name]||"",this.type=i[this.fields.type]||"task",this.updateMode(),this.progress=i[this.fields.progress],this.expanded=this.store.getOptionManager().getOptions().expand.show?this.store.getOptionManager().getOptions().expand.enabled:!0,this.children=[],this.level=s&&s.level!==void 0?s.level+1:0,this.parent=s,this.flatIndex=0,this.store.updateTime(this.startTime,this.endTime)}getField(t){if(!t||E.isString(t)&&t.trim()==="")return;if(!t.includes("."))return this.data[t];const e=t.split(".");let i=this.data;for(let s=0;s<e.length;s++){const n=e[s];if(i==null||typeof i!="object"||!(n in i))return;i=i[n]}return E.isObject(i)?E.cloneDeep(i):i}updateMode(){let t=!1,e=!1;return this.data[this.fields.startTime]&&(!this.startTime||!this.startTime.isSame(A(this.data[this.fields.startTime])))&&(this.startTime=A(this.data[this.fields.startTime]),t=!0,e=!0),this.data[this.fields.endTime]&&(!this.endTime||!this.endTime.isSame(A(this.data[this.fields.endTime])))&&(this.endTime=A(this.data[this.fields.endTime]),t=!0,e=!0),e&&this.store.updateTime(this.startTime,this.endTime),this.startTime&&this.endTime&&this.duration===0&&(this.duration=this.endTime.diff(this.startTime)),this.isMilestone()&&(!this.endTime||!this.endTime.isSame(this.startTime))&&(this.endTime=this.startTime,t=!0),t}updateData(t){this.data=t;let e=!1;t[this.fields.name]&&this.name!==t[this.fields.name]&&(this.name=t[this.fields.name],e=!0),t[this.fields.type]&&this.type!==t[this.fields.type]&&(this.type=t[this.fields.type],e=!0),e=this.updateMode(),t[this.fields.progress]!==void 0&&(this.progress!==t[this.fields.progress]&&(e=!0),this.progress=F(t[this.fields.progress],0,100)),e&&this.event.emit(v.UPDATE_TASK,this)}updateTime(t,e){var s,n;this.startTime=t,this.endTime=this.isMilestone()?t:e;const i=(n=(s=this.store)==null?void 0:s.getOptionManager().getOptions())==null?void 0:n.dateFormat;this.data[this.fields.startTime||"startTime"]=this.startTime.format(i),this.isMilestone()?this.data[this.fields.endTime||"endTime"]=this.startTime.add(this.duration).format(i):this.data[this.fields.endTime||"endTime"]=this.endTime.format(i),this.event.emit(v.UPDATE_TASK,this)}clone(){return new ht(this.store,this.event,E.cloneDeep(this.data),this.parent,this.id)}getEmitData(){return{data:this.data,$index:this.flatIndex,level:this.level+1}}getAllChildren(){const t=[],e=i=>{i.forEach(s=>{t.push(s),E.isArray(s.children)&&s.children.length>0&&e(s.children)})};return e(this.children),t}isMilestone(){return this.store.getOptionManager().getOptions().milestone.show?this.type==="milestone":!1}isSummary(){return this.store.getOptionManager().getOptions().summary.show?this.type==="summary":!1}}class $t{constructor(t,e,i){h(this,"id");h(this,"taskId");h(this,"startTime");h(this,"endTime");h(this,"name");h(this,"data");h(this,"highlight",!0);h(this,"target",!1);this.store=t,this.event=e;const s=this.store.getOptionManager().getOptions().fields,n=this.store.getOptionManager().getOptions().baselines.fields;this.taskId=i[t.getOptionManager().getOptions().baselines.taskKey],this.id=i[s.id]||i[n.id]||Q(),this.name=i[s.name]||i[n.name]||"",this.highlight=i[n.highlight]!==!1,this.target=i[n.target]===!0;const o=i[s.startTime]||i[n.startTime];o&&(this.startTime=A(o));const r=i[s.endTime]||i[n.endTime];r&&(this.endTime=A(r)),this.data=i}getField(t){return this.data[t]}validate(){return!this.taskId||!this.startTime||!this.endTime?!1:this.startTime.isBefore(this.endTime)}getTimeDiff(){if(!this.validate())return null;const t=this.store.getDataManager().getTaskById(this.taskId);if(!t||!t.startTime||!t.endTime)return null;const e=this.store.getTimeAxis().getCellUnit(),i=this.startTime.diff(t.startTime,e,!0),s=this.endTime.diff(t.endTime,e,!0),n=this.store.getOptionManager().getOptions().baselines.compare.tolerance,o=i<-n?"delayed":i>n?"ahead":"ontime",r=s<-n?"delayed":s>n?"ahead":"ontime",a=this.endTime.diff(this.startTime,e,!0),c=t.endTime.diff(t.startTime,e,!0),g=a>0?(c-a)/a*100:0;return{startDiff:i,endDiff:s,startStatus:o,endStatus:r,progressDiff:g,unit:e}}}class Ft{constructor(t,e){h(this,"rawData",[]);h(this,"tasks",[]);h(this,"taskMap",new Map);h(this,"visibleTasksCache",[]);h(this,"isDirty",!0);h(this,"collapsedTaskIds",new Set);h(this,"selectedTaskId",null);h(this,"checkedList",[]);h(this,"baselines",[]);h(this,"baselineMap",new Map);h(this,"baselineTaskMap",new Map);h(this,"dataLevel",0);this.store=t,this.event=e}setData(t,e=!1){this.rawData=t,this.initTasks(e),this.invalidateCache(),this.event.emit(v.DATA_UPDATE)}initTasks(t=!1){t?(this.dataLevel=0,this.tasks=[],this.taskMap.clear(),this.collapsedTaskIds.clear(),this.rawData.forEach(e=>{this.tasks.push(this.createTask(e))})):(this.dataLevel=0,this.tasks=[],this.taskMap.clear(),this.rawData.forEach(e=>{this.tasks.push(this.createTask(e))}))}createTask(t,e,i=!0){const s=this.store.getOptionManager().getOptions().fields,n=new ht(this.store,this.event,t,e);return i&&Array.isArray(t[s.children])&&(n.children=t[s.children].map(o=>this.createTask(o,n))),this.taskMap.set(n.id,n),this.dataLevel=Math.max(this.dataLevel,n.level),n}updateTask(t,e,i){let s=0;for(;s<t.length;){const n=t[s],o=e[s];if(n&&!o){const a=this.createTask(n,i,!1);e.push(a),this.dataLevel=Math.max(this.dataLevel,a.level)}else!n&&o?e.splice(s,1):n&&o&&(n[this.store.getOptionManager().getOptions().fields.id]===o.id?(o.updateData(n),this.taskMap.set(o.id,o),this.dataLevel=Math.max(this.dataLevel,o.level)):(e[s]=this.createTask(n,o.parent,!1),this.dataLevel=Math.max(this.dataLevel,e[s].level)));const r=n[this.store.getOptionManager().getOptions().fields.children];if(r)if(o&&o.children)this.updateTask(r,o.children,o);else{const a=r.map(c=>this.createTask(c,e[s],!1));e[s].children=a}else o&&o.children&&(o.children=[]);s++}e.length>=s&&e.splice(s)}getData(){return this.rawData}getTasks(t=!0){return t?this.tasks:Array.from(this.taskMap.values())}getDataSize(){return this.taskMap.size}getTaskById(t){return this.taskMap.get(t)}deleteTaskById(t){var o;const e=this.getTaskById(t);if(!e)return!1;let i=!1;const s=this.store.getOptionManager().getOptions().fields.id,n=(o=e.parent)==null?void 0:o.children.findIndex(r=>r.id===t);if(n!==void 0&&n>-1&&e.parent){e.parent.children.splice(n,1);const r=this.store.getOptionManager().getOptions().fields.children,a=e.parent.data[r]||[],c=a.findIndex(g=>g[s]===t);c!==-1&&(a.splice(c,1),i=!0)}else{const r=this.tasks.findIndex(a=>a.id===t);if(r!==-1){this.tasks.splice(r,1);const a=this.rawData.findIndex(c=>c[s]===t);a!==-1&&(this.rawData.splice(a,1),i=!0)}}if(this.selectedTaskId===t&&this.unselectTask(),this.checkedList.length>0){const r=this.checkedList.findIndex(a=>a.id===t);r!==-1&&this.checkedList.splice(r,1)}return this.taskMap.delete(t),this.invalidateCache(),this.event.emit(v.DATA_UPDATE),i}expandTask(t,e=!1){const i=this.getTaskById(t);return i?(i.expanded=!i.expanded,i.expanded?this.collapsedTaskIds.delete(i.id):this.collapsedTaskIds.add(i.id),e&&i.children&&i.children.length>0&&i.children.forEach(s=>{this.expandTask(s.id,e)}),this.invalidateCache(),this.event.emit(v.VIEW_UPDATE),!0):!1}getVisibleTasks(){if(!this.isDirty&&this.visibleTasksCache.length>0)return this.visibleTasksCache;const t=[];let e=0;const i=(s,n)=>{this.collapsedTaskIds.has(s.id)&&s.expanded&&(s.expanded=!1),s.flatIndex=e++,t.push(s),s.expanded&&s.children&&s.children.length>0&&s.children.forEach(o=>i(o))};return this.tasks.forEach(s=>i(s)),this.visibleTasksCache=t,this.isDirty=!1,t}isTaskVisible(t){let e=t.parent;for(;e;){if(this.collapsedTaskIds.has(e.id))return!1;e=e.parent}return!0}getVisibleSize(){return this.getVisibleTasks().length}clear(){this.rawData=[],this.tasks=[],this.taskMap.clear(),this.visibleTasksCache=[],this.isDirty=!0,this.collapsedTaskIds.clear(),this.event.emit(v.DATA_UPDATE)}invalidateCache(){this.isDirty=!0}selectTask(t){const e=this.getTaskById(t);return e?(this.selectedTaskId===t||(this.unselectTask(),this.selectedTaskId=t,this.event.emit(v.TASK_SELECTED,e)),!0):!1}unselectTask(){if(this.selectedTaskId){const t=this.selectedTaskId;this.selectedTaskId=null,this.event.emit(v.TASK_UNSELECTED,t)}}isTaskSelected(t){return this.selectedTaskId===t}getSelectedTask(){return this.selectedTaskId?this.getTaskById(this.selectedTaskId):void 0}getCheckedList(){return this.checkedList}updateCheckedList(t,e){const i=this.checkedList.findIndex(s=>s.id===e.id);t?i===-1?this.checkedList.push(e):this.checkedList.splice(i,1,e):i!==-1&&this.checkedList.splice(i,1)}toggleAllChecked(t){t?this.checkedList=this.getVisibleTasks().slice():this.checkedList=[]}isTaskChecked(t){return this.checkedList.findIndex(e=>e.id===t.id)!==-1}updateTaskTime(t,e,i,s,n=[]){let o=e,r=i;const a=this.store.getOptionManager().getOptions().bar.move.link.child,c=this.store.getOptionManager().getOptions().bar.move.link.parent,g=this.store.getTimeAxis().getCellUnit();let d=t.parent;for(;c!=="none"&&d;){if(c==="expand"){let m=d.startTime||o,p=d.endTime||r;(!d.startTime||o.isBefore(d.startTime))&&(m=o),(!d.endTime||r.isAfter(d.endTime))&&(p=r),(d.startTime===void 0||d.endTime===void 0||!m.isSame(d.startTime)||!p.isSame(d.endTime))&&(n.findIndex(u=>u.id===d.id)===-1&&n.push(d.clone()),d.updateTime(m,p))}else c==="strict"&&(d.startTime&&o.isBefore(d.startTime)&&(o=d.startTime,r.isSameOrBefore(o)&&(r=o.add(1,g))),d.endTime&&r.isAfter(d.endTime)&&(r=d.endTime,o.isAfter(r)&&(o=r.subtract(1,g))));d=d.parent}let l=t.children||[];for(;a!=="none"&&l.length>0;){const m=[];l.forEach(p=>{let u=p.startTime||o,y=p.endTime||r,x=o.diff(t.startTime),T=r.diff(t.endTime);a==="scale"?s==="both"?(n.findIndex(b=>b.id===p.id)===-1&&n.push(p.clone()),p.updateTime(u.add(x),y.add(T))):s==="left"?(u=u.add(x),u.isSameOrAfter(y.subtract(1,g))&&(y.isBefore(t.endTime)?y=u.add(1,g):u=y.subtract(1,g),u.isSameOrBefore(o)&&(o=u)),n.findIndex(b=>b.id===p.id)===-1&&n.push(p.clone()),p.updateTime(u,y)):s==="right"&&(y=y.add(T),y.isSameOrBefore(u.add(1,g))&&(u.isAfter(t.startTime)?u=y.subtract(1,g):y=u.add(1,g)),y.isSameOrAfter(r)&&(r=y),n.findIndex(b=>b.id===p.id)===-1&&n.push(p.clone()),p.updateTime(u,y)):a==="fixed"&&(s==="both"?(n.findIndex(b=>b.id===p.id)===-1&&n.push(p.clone()),p.updateTime(u.add(x),y.add(T))):s==="left"?u.isSameOrBefore(o)&&(u=o,u.isSameOrAfter(y.subtract(1,g))&&(y.isBefore(t.endTime)?y=u.add(1,g):u=y.subtract(1,g),u.isSameOrBefore(o)&&(o=u)),n.findIndex(b=>b.id===p.id)===-1&&n.push(p.clone()),p.updateTime(u,y)):s==="right"&&y.isSameOrAfter(r)&&(y=r,y.isSameOrBefore(u.add(1,g))&&(u.isAfter(t.startTime)?u=y.subtract(1,g):y=u.add(1,g)),y.isSameOrAfter(r)&&(r=y),n.findIndex(b=>b.id===p.id)===-1&&n.push(p.clone()),p.updateTime(u,y))),p.children&&p.children.length>0&&m.push(...p.children)}),l=m}n.findIndex(m=>m.id===t.id)===-1&&n.push(t.clone()),t.updateTime(o,r)}setBaselines(t){this.baselines=[],this.baselineMap.clear(),this.baselineTaskMap.clear(),t.forEach(e=>{var s,n;const i=new $t(this.store,this.event,e);this.baselines.push(i),this.baselineMap.set(i.id,i),this.baselineTaskMap.has(i.taskId)||this.baselineTaskMap.set(i.taskId,[]),i.target?(s=this.baselineTaskMap.get(i.taskId))==null||s.unshift(i):(n=this.baselineTaskMap.get(i.taskId))==null||n.push(i)})}getBaselines(){return this.baselines}getBaselineById(t){return this.baselineMap.get(t)}getBaselinesByTaskId(t){return this.baselineTaskMap.get(t)||[]}}function Bt(f){var s;if(typeof f=="object"&&f!==null)return{r:F(f.r??0,0,255),g:F(f.g??0,0,255),b:F(f.b??0,0,255),a:F(f.a??1,0,1)};if(typeof f!="string")return D.warn(`Invalid color value type: ${typeof f}`),null;let t=f.trim();const e=(s=document==null?void 0:document.createElement("canvas"))==null?void 0:s.getContext("2d");if(e&&(e.fillStyle=t,t=e.fillStyle),t.startsWith("#")){const n=t.slice(1);let o,r,a,c,g=1;try{o=parseInt(n,16)}catch{return D.warn(`Invalid hex color: ${f}`),null}if(n.length===3)r=(o>>8&15)*17,a=(o>>4&15)*17,c=(o&15)*17;else if(n.length===6)r=o>>16&255,a=o>>8&255,c=o&255;else if(n.length===8)r=o>>24&255,a=o>>16&255,c=o>>8&255,g=(o&255)/255;else return D.warn(`Invalid hex color length: ${f}`),null;return{r,g:a,b:c,a:g}}let i=t.match(/rgba?\(\s*(\d+%?)\s*,\s*(\d+%?)\s*,\s*(\d+%?)\s*(?:,\s*([\d.]+)\s*)?\)/i);if(i){const n=o=>o.endsWith("%")?F(parseFloat(o)/100*255,0,255):F(parseInt(o,10),0,255);return{r:n(i[1]),g:n(i[2]),b:n(i[3]),a:i[4]!==void 0?F(parseFloat(i[4]),0,1):1}}return D.warn(`Could not parse color: ${f}`),null}function zt(f,t,e,i,s=!1,n=!1){const o=l=>{const m=Math.round(F(l,0,255)).toString(16);return m.length===1?"0"+m:m},r=o(f),a=o(t),c=o(e),g=o(i*255);if(s&&r[0]===r[1]&&a[0]===a[1]&&c[0]===c[1]&&i===1&&!n)return`#${r[0]}${a[0]}${c[0]}`;const d=`#${r}${a}${c}`;return n||i<1?`${d}${g}`:d}class Z{constructor(t){h(this,"_r");h(this,"_g");h(this,"_b");h(this,"_a");const e=Bt(t);e===null?(D.error(`Failed to parse color: ${t}. Using default black.`),this._r=0,this._g=0,this._b=0,this._a=1):(this._r=Math.round(e.r),this._g=Math.round(e.g),this._b=Math.round(e.b),this._a=e.a)}get R(){return this._r}get G(){return this._g}get B(){return this._b}get A(){return this._a}red(t){return t===void 0?this._r:(this._r=Math.round(F(t,0,255)),this)}green(t){return t===void 0?this._g:(this._g=Math.round(F(t,0,255)),this)}blue(t){return t===void 0?this._b:(this._b=Math.round(F(t,0,255)),this)}alpha(t){return t===void 0?this._a:(this._a=F(t,0,1),this)}toHex(t=!1,e=!1){return zt(this._r,this._g,this._b,this._a,t,e)}toRgb(){const t=Math.round(this._r),e=Math.round(this._g),i=Math.round(this._b);if(this._a===1)return`rgb(${t}, ${e}, ${i})`;{const s=parseFloat(this._a.toFixed(2));return`rgba(${t}, ${e}, ${i}, ${s})`}}toObject(){return{r:this._r,g:this._g,b:this._b,a:this._a}}toString(){return this.toRgb()}brighten(t=10){if(t<0)return this.darken(-t);const e=F(t,0,100)/100;return this._r=Math.round(F(this._r+(255-this._r)*e,0,255)),this._g=Math.round(F(this._g+(255-this._g)*e,0,255)),this._b=Math.round(F(this._b+(255-this._b)*e,0,255)),this}darken(t=10){if(t<0)return this.brighten(-t);const e=F(t,0,100)/100;return this._r=Math.round(F(this._r*(1-e),0,255)),this._g=Math.round(F(this._g*(1-e),0,255)),this._b=Math.round(F(this._b*(1-e),0,255)),this}isLight(){return(this._r*299+this._g*587+this._b*114)/1e3>128}isDark(){return!this.isLight()}mix(t,e=50){const i=F(e,0,100)/100,s=z(t);return this._r=Math.round(F(this._r*(1-i)+s.R*i,0,255)),this._g=Math.round(F(this._g*(1-i)+s.G*i,0,255)),this._b=Math.round(F(this._b*(1-i)+s.B*i,0,255)),this._a=F(this._a*(1-i)+s.A*i,0,1),this}clone(){return new Z({r:this._r,g:this._g,b:this._b,a:this._a})}static extend(t,e){typeof t=="function"?t(e,Z,z):D.warn("Invalid plugin provided to Colorjs.extend. Expected a function.")}}const z=f=>f instanceof Z?f:new Z(f);class mt{constructor(t,e,i){h(this,"element");h(this,"iconElement");h(this,"_state",0);h(this,"options");var o;this.context=t,this.container=e,this.task=i;const n=(this.task?this.context.store.getDataManager().isTaskChecked(this.task):!1)?1:0;this.options={initialState:n,size:14},this.element=document.createElement("div"),this.iconElement=document.createElement("div"),this._state=this.options.initialState,this.createElement(),this.updateIcon(),this.bindEvents(),this.registerEvents(),(o=this.container)==null||o.appendChild(this.element)}createElement(){this.element.className="x-gantt-checkbox",this.element.style.width=`${this.options.size}px`,this.element.style.height=`${this.options.size}px`,this.element.style.setProperty("border",`1px solid ${this.context.store.getOptionManager().getOptions().border.color}`,"important"),this.iconElement.className="x-gantt-checkbox__icon",this.iconElement.style.cssText=`
|
|
1
|
+
(function(P,A){typeof exports=="object"&&typeof module<"u"?A(exports,require("dayjs"),require("lodash-es"),require("konva")):typeof define=="function"&&define.amd?define(["exports","dayjs","lodash-es","konva"],A):(P=typeof globalThis<"u"?globalThis:P||self,A(P.XGantt={},P.dayjs,P._,P.Konva))})(this,function(P,A,D,k){"use strict";var Ue=Object.defineProperty;var Xe=(P,A,D)=>A in P?Ue(P,A,{enumerable:!0,configurable:!0,writable:!0,value:D}):P[A]=D;var h=(P,A,D)=>Xe(P,typeof A!="symbol"?A+"":A,D);const ft="0.0.1";function Ht(){const f="#eca710",t="#ffffff",e="#e7209e",i="#ffffff",s="#1c42e8";[" __ __ _____ _____ _____ _____ _____ ","| | || __|| _ || | ||_ _||_ _|","|- -|| | || || | | | | | | | ","|__|__||_____||__|__||_|___| |_| |_| "].forEach(o=>{console.log(`%c${o}`,`color: ${f}; font-weight: bold; font-family: monospace;`)}),console.log(`%c 🚀 欢迎使用 XGantt %c Version: ${ft} `,`background-color: ${e}; color: ${t}; padding: 2px 4px; border-radius: 6px 0 0 6px; font-weight: bold; margin: 4px 0;`,`background-color: ${s}; color: ${i}; padding: 2px 4px; border-radius: 0 6px 6px 0; font-weight: normal; margin: 4px 0;`)}const N=class N{static setOptions(t){N.options={...N.options,...t}}static getLevel(){return N.options.level}static debug(...t){N.logWithLevel(1,console.debug,...t)}static info(...t){N.logWithLevel(2,console.info,...t)}static warn(...t){N.logWithLevel(3,console.warn,...t)}static error(...t){N.logWithLevel(4,console.error,...t)}static assert(t,...e){if(!t&&N.options.level<=4){const i=N.formatArgs("Assertion failed:",...e);console.error(...i)}}static getMessage(...t){return N.formatArgs(...t).join("")}static exception(...t){return new Error(N.getMessage(...t))}static logWithLevel(t,e,...i){if(N.options.level<=t){const s=N.formatArgs(...i);e(...s)}}static formatArgs(...t){const e=[N.Prefix];return N.options.showTimestamp&&e.unshift(`[${A().format("YYYY-MM-DD HH:mm:ss.SSS")}]`),[e.join(""),...t]}};h(N,"Prefix","[XGantt]"),h(N,"options",{level:2,showTimestamp:!1});let O=N;const nt=()=>({data:[],links:{show:!1,key:"id",data:[],distance:20,dash:[0],width:1,gap:5,arrow:{width:6,height:8},radius:3,create:{enabled:!1,mode:"hover",radius:3,width:2,from:!0,to:!0},move:{enabled:!1},enableCycleDetection:!0},baselines:{data:[],taskKey:"taskId",show:!1,fields:{startTime:"startTime",endTime:"endTime",name:"name",id:"id",target:"target",highlight:"highlight"},mode:"line",position:"bottom",backgroundColor:"#999",opacity:.6,radius:2,label:{show:!1,forceDisplay:!1,color:"#666",fontSize:10,position:"right",fontFamily:"Arial"},compare:{enabled:!1,tolerance:.5,mode:"both",target:"end",delayed:{backgroundColor:"#ff4444",opacity:.8},ahead:{backgroundColor:"#44ff44",opacity:.8},indicator:{show:!0,position:"top",fontFamily:"Arial",fontSize:10,size:6,delayed:{show:!0,color:"#af1b1b",opacity:1},ahead:{show:!0,color:"#1baf1b",opacity:1},ontime:{show:!1,color:"#999",opacity:1}}}},milestone:{show:!1,shape:"diamond",border:{width:1},label:{show:!0,text:"",fontSize:10,fontFamily:"Arial",position:"top-right"}},summary:{show:!1,mode:"expand",move:{enabled:!1}},fields:{id:"id",startTime:"startTime",endTime:"endTime",name:"name",progress:"progress",children:"children",type:"type"},selection:{enabled:!1,includeSelf:!0},expand:{show:!0,enabled:!0},drag:{enabled:!1,color:"#999",targetOpacity:.2},dateFormat:"YYYY-MM-DD HH:mm:ss",locale:"en",unit:"day",table:{width:100,ellipsis:!0,align:"left",headerAlign:"center",emptyText:"-"},chart:{autoCellWidth:!1,cellWidth:"normal"},primaryColor:"#eca710",border:{color:"#e5e5e5"},header:{height:80,color:"#000",fontSize:14,fontWeight:600,fontFamily:"Arial"},row:{height:30,indent:16,hover:{backgroundColor:"#000",opacity:.05},select:{backgroundColor:"#000",opacity:.1}},bar:{height:20,show:!0,move:{byUnit:!1,link:{child:"none",parent:"none"}}},today:{show:!0,type:"line",backgroundColor:"lightblue",opacity:1,width:1},weekend:{show:!0,backgroundColor:"#c9c9c9",opacity:.1},holiday:{opacity:.1}});class Rt{constructor(){h(this,"options",nt())}getOptions(){return this.options}setOptions(t,e={merge:!0}){var i;if(this.options=e.merge?D.merge(nt(),this.options,t):D.merge(nt(),t),(i=t.holiday)!=null&&i.holidays&&t.holiday.holidays.length>0){const s=[];t.holiday.holidays.forEach(n=>{if(D.isArray(n.date)){const o=n.date.map(r=>A(r)).sort((r,a)=>r.diff(a));for(let r=1;r<o.length;r++)if(o[r].diff(o[r-1],"day")>1){s.push({...n,date:o.slice(0,r).map(a=>a.valueOf())}),o.splice(0,r);break}o.length>0&&s.push({...n,date:o.map(r=>r.valueOf())})}else s.push(n)}),this.options.holiday.holidays=s}}update(t){this.setOptions(t)}getRowBackgroundColor(t){var s;let e="";const i=(s=this.options.row)==null?void 0:s.backgroundColor;return D.isString(i)?e=i:D.isArray(i)&&i.length>0?e=i[t.level]:D.isFunction(i)&&(e=i(t.getEmitData())),e}unpackFunc(t,e){return D.isFunction(t)?t(e.getEmitData()):t}}class Gt{constructor(){h(this,"events",new Map)}on(t,e){var i;this.events.has(t)||this.events.set(t,[]),(i=this.events.get(t))==null||i.push(e)}emit(t,...e){var i;this.events.has(t)&&((i=this.events.get(t))==null||i.forEach(s=>s(...e)))}off(t,e){var i;this.events.has(t)&&this.events.set(t,((i=this.events.get(t))==null?void 0:i.filter(s=>s!==e))||[])}offAll(){this.events.clear()}}var v=(f=>(f.LOADED="loaded",f.COLUMN_WIDTH_CHANGE="column-width-change",f.MOVE_GUIDELINE="move-guideline",f.SHOW_GUIDELINE="show-guideline",f.HIDE_GUIDELINE="hide-guideline",f.TOGGLE_COLLAPSE="toggle-collapse",f.SCROLL="scroll",f.CHART_OFFSET_CHANGE="chart_offset_change",f.DATA_UPDATE="data-update",f.VIEW_UPDATE="view-update",f.UPDATE_TABLE_HEADER="update_table_header",f.UPDATE_TABLE_BODY="update_table_body",f.UPDATE_CHART_HEADER="update_chart_header",f.UPDATE_TASK="update_task",f.UPDATE_LINK="update_link",f.CREATE_LINK="create_link",f.TASK_SELECTED="task_selected",f.TASK_UNSELECTED="task_unselected",f.SELECT_LINK="select_link",f.CHECK_TASK="check_task",f.CONTEXT_LINK="context_link",f.ROW_CLICK="row-click",f.ROW_DBL_CLICK="row-dbl-click",f.ROW_CONTEXTMENU="row-contextmenu",f.SLIDER_CLICK="slider-click",f.SLIDER_DBL_CLICK="slider-dbl-click",f.SLIDER_CONTEXTMENU="slider-contextmenu",f.SLIDER_DRAGGING="slider-dragging",f.SLIDER_ENTER="slider-enter",f.SLIDER_HOVER="slider-hover",f.SLIDER_LEAVE="slider-leave",f.SLIDER_BLINK="slider-blink",f.LINK_BLINK="link-blink",f.ROW_HIGHLIGHT="row-highlight",f.ROW_UNHIGHLIGHT="row-unhighlight",f.TASK_DRAG_START="task-drag-start",f.TASK_DRAG_MOVE="task-drag-move",f.TASK_DRAG_END="task-drag-end",f.BASELINE_CLICK="baseline-click",f.BASELINE_CONTEXTMENU="baseline-contextmenu",f.BASELINE_MOUSEENTER="baseline-mouseenter",f.BASELINE_MOUSEMOVE="baseline-mousemove",f.BASELINE_MOUSEOUT="baseline-mouseout",f.ROW_DRAG_START="row-drag-start",f.ROW_DRAGGING="row-dragging",f.ROW_DRAG_END="row-drag-end",f.ERROR="error",f))(v||{}),X=(f=>(f.INVALID_TYPE="INVALID_TYPE",f.TASK_NOT_FOUND="TASK_NOT_FOUND",f.LINK_NOT_ALLOWED="LINK_NOT_ALLOWED",f.LINK_SAME="LINK_SAME",f.LINK_EXIST="LINK_EXIST",f.LINK_INVALID_ARG="LINK_INVALID_ARG",f.LINK_CYCLE="LINK_CYCLE",f))(X||{});function Q(){return Math.random().toString(36).substring(2,15)}function F(f,t,e){if(!Number.isFinite(f)||!Number.isFinite(t)||!Number.isFinite(e))return Number.isFinite(t)?t:0;const i=Math.min(t,e),s=Math.max(t,e);return Math.min(Math.max(i,f),s)}function tt(f,t){let e=f;return D.isString(e)&&(/%$/.test(e)?e=t*parseFloat(e)/100:e=parseFloat(e)),isNaN(e)?0:e}function ot(f,t,e="round"){if(t===0)throw new Error("基准值不能为0");if(Math.abs(f)<=t/2)return 0;const i=Math.floor(f/t),s=Math.ceil(f/t),n=i*t,o=s*t,r=Math.abs(f-n),a=Math.abs(f-o);return e==="floor"?n:e==="ceil"?o:r<=a?n:o}function et(f,t=4){return typeof f=="number"?[f,f,f,f]:Array.isArray(f)?[f[0]??t,f[1]??t,f[2]??t,f[3]??t]:[t,t,t,t]}function Wt(f,t=100){if(!Number.isFinite(f)||!Number.isFinite(t)||t===0||f<0)return 0;const e=f/Math.abs(t);return Math.min(e,1)}function rt(f,t=2,e=!1){const i=f.toFixed(t);return e?i:i.replace(/\.?0+$/,"")}const at=new Map;function pt(f,t=16,e=16){const i=at.get(f);if(i)return i;const s=new Promise((n,o)=>{let r=f;if(!/viewBox\s*=\s*["'][^"']*["']/.test(r)){const l=r.match(/width\s*=\s*["']([^"']*)["']/),m=r.match(/height\s*=\s*["']([^"']*)["']/),p=l?parseFloat(l[1]):t,g=m?parseFloat(m[1]):e;r=r.replace(/<svg([^>]*)>/,`<svg$1 viewBox="0 0 ${p} ${g}">`)}r=r.replace(/width\s*=\s*["'][^"']*["']/,`width="${t}"`),r=r.replace(/height\s*=\s*["'][^"']*["']/,`height="${e}"`),/width\s*=/.test(r)||(r=r.replace(/<svg/,`<svg width="${t}"`)),/height\s*=/.test(r)||(r=r.replace(/<svg/,`<svg height="${e}"`)),/preserveAspectRatio\s*=/.test(r)||(r=r.replace(/<svg([^>]*)>/,'<svg$1 preserveAspectRatio="xMidYMid meet">'));const c=new Image;c.onload=()=>{URL.revokeObjectURL(c.src),n(c)},c.onerror=l=>{URL.revokeObjectURL(c.src),at.delete(f),o(l)};const u=new Blob([r],{type:"image/svg+xml"}),d=URL.createObjectURL(u);c.src=d});return at.set(f,s),s}class ht{constructor(t,e,i,s,n){h(this,"__key__",Q());h(this,"id");h(this,"name");h(this,"startTime");h(this,"endTime");h(this,"progress");h(this,"type");h(this,"expanded");h(this,"children");h(this,"parent");h(this,"level");h(this,"flatIndex");h(this,"duration",0);h(this,"data");h(this,"fields");this.store=t,this.event=e,this.fields=this.store.getOptionManager().getOptions().fields,this.id=n||i[this.fields.id]||Q(),this.data=i,this.name=i[this.fields.name]||"",this.type=i[this.fields.type]||"task",this.updateMode(),this.progress=i[this.fields.progress],this.expanded=this.store.getOptionManager().getOptions().expand.show?this.store.getOptionManager().getOptions().expand.enabled:!0,this.children=[],this.level=s&&s.level!==void 0?s.level+1:0,this.parent=s,this.flatIndex=0,this.store.updateTime(this.startTime,this.endTime)}getField(t){if(!t||D.isString(t)&&t.trim()==="")return;if(!t.includes("."))return this.data[t];const e=t.split(".");let i=this.data;for(let s=0;s<e.length;s++){const n=e[s];if(i==null||typeof i!="object"||!(n in i))return;i=i[n]}return D.isObject(i)?D.cloneDeep(i):i}updateMode(){let t=!1,e=!1;return this.data[this.fields.startTime]&&(!this.startTime||!this.startTime.isSame(A(this.data[this.fields.startTime])))&&(this.startTime=A(this.data[this.fields.startTime]),t=!0,e=!0),this.data[this.fields.endTime]&&(!this.endTime||!this.endTime.isSame(A(this.data[this.fields.endTime])))&&(this.endTime=A(this.data[this.fields.endTime]),t=!0,e=!0),e&&this.store.updateTime(this.startTime,this.endTime),this.startTime&&this.endTime&&this.duration===0&&(this.duration=this.endTime.diff(this.startTime)),this.isMilestone()&&(!this.endTime||!this.endTime.isSame(this.startTime))&&(this.endTime=this.startTime,t=!0),t}updateData(t){this.data=t;let e=!1;t[this.fields.name]&&this.name!==t[this.fields.name]&&(this.name=t[this.fields.name],e=!0),t[this.fields.type]&&this.type!==t[this.fields.type]&&(this.type=t[this.fields.type],e=!0),e=this.updateMode(),t[this.fields.progress]!==void 0&&(this.progress!==t[this.fields.progress]&&(e=!0),this.progress=F(t[this.fields.progress],0,100)),e&&this.event.emit(v.UPDATE_TASK,this)}updateTime(t,e){var s,n;this.startTime=t,this.endTime=this.isMilestone()?t:e;const i=(n=(s=this.store)==null?void 0:s.getOptionManager().getOptions())==null?void 0:n.dateFormat;this.data[this.fields.startTime||"startTime"]=this.startTime.format(i),this.isMilestone()?this.data[this.fields.endTime||"endTime"]=this.startTime.add(this.duration).format(i):this.data[this.fields.endTime||"endTime"]=this.endTime.format(i),this.event.emit(v.UPDATE_TASK,this)}clone(){return new ht(this.store,this.event,D.cloneDeep(this.data),this.parent,this.id)}getEmitData(){return{data:this.data,$index:this.flatIndex,level:this.level+1}}getAllChildren(){const t=[],e=i=>{i.forEach(s=>{t.push(s),D.isArray(s.children)&&s.children.length>0&&e(s.children)})};return e(this.children),t}isMilestone(){return this.store.getOptionManager().getOptions().milestone.show?this.type==="milestone":!1}isSummary(){return this.store.getOptionManager().getOptions().summary.show?this.type==="summary":!1}isSomeoneChildren(t){let e=t;for(;e;){if(e.id===this.id)return!0;e=e.parent}return!1}}class $t{constructor(t,e,i){h(this,"id");h(this,"taskId");h(this,"startTime");h(this,"endTime");h(this,"name");h(this,"data");h(this,"highlight",!0);h(this,"target",!1);this.store=t,this.event=e;const s=this.store.getOptionManager().getOptions().fields,n=this.store.getOptionManager().getOptions().baselines.fields;this.taskId=i[t.getOptionManager().getOptions().baselines.taskKey],this.id=i[s.id]||i[n.id]||Q(),this.name=i[s.name]||i[n.name]||"",this.highlight=i[n.highlight]!==!1,this.target=i[n.target]===!0;const o=i[s.startTime]||i[n.startTime];o&&(this.startTime=A(o));const r=i[s.endTime]||i[n.endTime];r&&(this.endTime=A(r)),this.data=i}getField(t){return this.data[t]}validate(){return!this.taskId||!this.startTime||!this.endTime?!1:this.startTime.isBefore(this.endTime)}getTimeDiff(){if(!this.validate())return null;const t=this.store.getDataManager().getTaskById(this.taskId);if(!t||!t.startTime||!t.endTime)return null;const e=this.store.getTimeAxis().getCellUnit(),i=this.startTime.diff(t.startTime,e,!0),s=this.endTime.diff(t.endTime,e,!0),n=this.store.getOptionManager().getOptions().baselines.compare.tolerance,o=i<-n?"delayed":i>n?"ahead":"ontime",r=s<-n?"delayed":s>n?"ahead":"ontime",a=this.endTime.diff(this.startTime,e,!0),c=t.endTime.diff(t.startTime,e,!0),u=a>0?(c-a)/a*100:0;return{startDiff:i,endDiff:s,startStatus:o,endStatus:r,progressDiff:u,unit:e}}}class Ft{constructor(t,e){h(this,"rawData",[]);h(this,"tasks",[]);h(this,"taskMap",new Map);h(this,"visibleTasksCache",[]);h(this,"isDirty",!0);h(this,"collapsedTaskIds",new Set);h(this,"selectedTaskId",null);h(this,"checkedList",[]);h(this,"baselines",[]);h(this,"baselineMap",new Map);h(this,"baselineTaskMap",new Map);h(this,"dataLevel",0);this.store=t,this.event=e}setData(t,e=!1){this.rawData=t,this.initTasks(e),this.invalidateCache(),this.event.emit(v.DATA_UPDATE)}initTasks(t=!1){t?(this.dataLevel=0,this.tasks=[],this.taskMap.clear(),this.collapsedTaskIds.clear(),this.rawData.forEach(e=>{this.tasks.push(this.createTask(e))})):(this.dataLevel=0,this.tasks=[],this.taskMap.clear(),this.rawData.forEach(e=>{this.tasks.push(this.createTask(e))}))}createTask(t,e,i=!0){const s=this.store.getOptionManager().getOptions().fields,n=new ht(this.store,this.event,t,e);return i&&Array.isArray(t[s.children])&&(n.children=t[s.children].map(o=>this.createTask(o,n))),this.taskMap.set(n.id,n),this.dataLevel=Math.max(this.dataLevel,n.level),n}updateTask(t,e,i){let s=0;for(;s<t.length;){const n=t[s],o=e[s];if(n&&!o){const a=this.createTask(n,i,!1);e.push(a),this.dataLevel=Math.max(this.dataLevel,a.level)}else!n&&o?e.splice(s,1):n&&o&&(n[this.store.getOptionManager().getOptions().fields.id]===o.id?(o.updateData(n),this.taskMap.set(o.id,o),this.dataLevel=Math.max(this.dataLevel,o.level)):(e[s]=this.createTask(n,o.parent,!1),this.dataLevel=Math.max(this.dataLevel,e[s].level)));const r=n[this.store.getOptionManager().getOptions().fields.children];if(r)if(o&&o.children)this.updateTask(r,o.children,o);else{const a=r.map(c=>this.createTask(c,e[s],!1));e[s].children=a}else o&&o.children&&(o.children=[]);s++}e.length>=s&&e.splice(s)}getData(){return this.rawData}getTasks(t=!0){return t?this.tasks:Array.from(this.taskMap.values())}getDataSize(){return this.taskMap.size}getTaskById(t){return this.taskMap.get(t)}deleteTaskById(t){var o;const e=this.getTaskById(t);if(!e)return!1;let i=!1;const s=this.store.getOptionManager().getOptions().fields.id,n=(o=e.parent)==null?void 0:o.children.findIndex(r=>r.id===t);if(n!==void 0&&n>-1&&e.parent){e.parent.children.splice(n,1);const r=this.store.getOptionManager().getOptions().fields.children,a=e.parent.data[r]||[],c=a.findIndex(u=>u[s]===t);c!==-1&&(a.splice(c,1),i=!0)}else{const r=this.tasks.findIndex(a=>a.id===t);if(r!==-1){this.tasks.splice(r,1);const a=this.rawData.findIndex(c=>c[s]===t);a!==-1&&(this.rawData.splice(a,1),i=!0)}}if(this.selectedTaskId===t&&this.unselectTask(),this.checkedList.length>0){const r=this.checkedList.findIndex(a=>a.id===t);r!==-1&&this.checkedList.splice(r,1)}return this.taskMap.delete(t),this.invalidateCache(),this.event.emit(v.DATA_UPDATE),i}moveTask(t,e,i){const s=this.getVisibleTasks()[i];if(!e||!s||t==="inside"&&e.isSomeoneChildren(s)||t!=="inside"&&e.isSomeoneChildren(s.parent))return;const n=this.store.getOptionManager().getOptions().fields.id,o=this.store.getOptionManager().getOptions().fields.children;if(e.parent&&e.parent.children){e.parent.children=e.parent.children.filter(a=>a.id!==e.id);const r=e.parent.data[o]||[];e.parent.data[o]=r.filter(a=>a[n]!==e.id)}else this.tasks=this.tasks.filter(r=>r.id!==e.id),this.rawData=this.rawData.filter(r=>r[n]!==e.id);if(t==="inside")s.children=s.children||[],s.children.push(e),e.parent=s,s.data[o]=s.data[o]||[],s.data[o].push(e.data);else{const r=s.parent?s.parent.children:this.tasks,a=r.findIndex(d=>d.id===s.id),c=s.parent?s.parent.data[o]||[]:this.rawData,u=c.findIndex(d=>d[n]===s.id);t==="before"?(r.splice(a,0,e),c.splice(u,0,e.data)):t==="after"&&(r.splice(a+1,0,e),c.splice(u+1,0,e.data)),e.parent=s.parent}e.parent?e.level=e.parent.level+1:e.level=0,this.updateChildrenLevel(e),this.invalidateCache(),this.event.emit(v.VIEW_UPDATE),O.info(`Task ${e.id} moved ${t} task ${s.id}`),this.event.emit(v.ROW_DRAG_END,s,e)}expandTask(t,e=!1){const i=this.getTaskById(t);return i?(i.expanded=!i.expanded,i.expanded?this.collapsedTaskIds.delete(i.id):this.collapsedTaskIds.add(i.id),e&&i.children&&i.children.length>0&&i.children.forEach(s=>{this.expandTask(s.id,e)}),this.invalidateCache(),this.event.emit(v.VIEW_UPDATE),!0):!1}getVisibleTasks(){if(!this.isDirty&&this.visibleTasksCache.length>0)return this.visibleTasksCache;const t=[];let e=0;const i=(s,n)=>{this.collapsedTaskIds.has(s.id)&&s.expanded&&(s.expanded=!1),s.flatIndex=e++,t.push(s),s.expanded&&s.children&&s.children.length>0&&s.children.forEach(o=>i(o))};return this.tasks.forEach(s=>i(s)),this.visibleTasksCache=t,this.isDirty=!1,t}isTaskVisible(t){let e=t.parent;for(;e;){if(this.collapsedTaskIds.has(e.id))return!1;e=e.parent}return!0}getVisibleSize(){return this.getVisibleTasks().length}clear(){this.rawData=[],this.tasks=[],this.taskMap.clear(),this.visibleTasksCache=[],this.isDirty=!0,this.collapsedTaskIds.clear(),this.event.emit(v.DATA_UPDATE)}updateChildrenLevel(t){if(!t.children||t.children.length===0)return;const e=t.level!==void 0?t.level:0;t.children.forEach(i=>{i.level=e+1,this.updateChildrenLevel(i)})}invalidateCache(){this.isDirty=!0}selectTask(t){const e=this.getTaskById(t);return e?(this.selectedTaskId===t||(this.unselectTask(),this.selectedTaskId=t,this.event.emit(v.TASK_SELECTED,e)),!0):!1}unselectTask(){if(this.selectedTaskId){const t=this.selectedTaskId;this.selectedTaskId=null,this.event.emit(v.TASK_UNSELECTED,t)}}isTaskSelected(t){return this.selectedTaskId===t}getSelectedTask(){return this.selectedTaskId?this.getTaskById(this.selectedTaskId):void 0}getCheckedList(){return this.checkedList}updateCheckedList(t,e){const i=this.checkedList.findIndex(s=>s.id===e.id);t?i===-1?this.checkedList.push(e):this.checkedList.splice(i,1,e):i!==-1&&this.checkedList.splice(i,1)}toggleAllChecked(t){t?this.checkedList=this.getVisibleTasks().slice():this.checkedList=[]}isTaskChecked(t){return this.checkedList.findIndex(e=>e.id===t.id)!==-1}updateTaskTime(t,e,i,s,n=[]){let o=e,r=i;const a=this.store.getOptionManager().getOptions().bar.move.link.child,c=this.store.getOptionManager().getOptions().bar.move.link.parent,u=this.store.getTimeAxis().getCellUnit();let d=t.parent;for(;c!=="none"&&d;){if(c==="expand"){let m=d.startTime||o,p=d.endTime||r;(!d.startTime||o.isBefore(d.startTime))&&(m=o),(!d.endTime||r.isAfter(d.endTime))&&(p=r),(d.startTime===void 0||d.endTime===void 0||!m.isSame(d.startTime)||!p.isSame(d.endTime))&&(n.findIndex(g=>g.id===d.id)===-1&&n.push(d.clone()),d.updateTime(m,p))}else c==="strict"&&(d.startTime&&o.isBefore(d.startTime)&&(o=d.startTime,r.isSameOrBefore(o)&&(r=o.add(1,u))),d.endTime&&r.isAfter(d.endTime)&&(r=d.endTime,o.isAfter(r)&&(o=r.subtract(1,u))));d=d.parent}let l=t.children||[];for(;a!=="none"&&l.length>0;){const m=[];l.forEach(p=>{let g=p.startTime||o,y=p.endTime||r,x=o.diff(t.startTime),T=r.diff(t.endTime);a==="scale"?s==="both"?(n.findIndex(b=>b.id===p.id)===-1&&n.push(p.clone()),p.updateTime(g.add(x),y.add(T))):s==="left"?(g=g.add(x),g.isSameOrAfter(y.subtract(1,u))&&(y.isBefore(t.endTime)?y=g.add(1,u):g=y.subtract(1,u),g.isSameOrBefore(o)&&(o=g)),n.findIndex(b=>b.id===p.id)===-1&&n.push(p.clone()),p.updateTime(g,y)):s==="right"&&(y=y.add(T),y.isSameOrBefore(g.add(1,u))&&(g.isAfter(t.startTime)?g=y.subtract(1,u):y=g.add(1,u)),y.isSameOrAfter(r)&&(r=y),n.findIndex(b=>b.id===p.id)===-1&&n.push(p.clone()),p.updateTime(g,y)):a==="fixed"&&(s==="both"?(n.findIndex(b=>b.id===p.id)===-1&&n.push(p.clone()),p.updateTime(g.add(x),y.add(T))):s==="left"?g.isSameOrBefore(o)&&(g=o,g.isSameOrAfter(y.subtract(1,u))&&(y.isBefore(t.endTime)?y=g.add(1,u):g=y.subtract(1,u),g.isSameOrBefore(o)&&(o=g)),n.findIndex(b=>b.id===p.id)===-1&&n.push(p.clone()),p.updateTime(g,y)):s==="right"&&y.isSameOrAfter(r)&&(y=r,y.isSameOrBefore(g.add(1,u))&&(g.isAfter(t.startTime)?g=y.subtract(1,u):y=g.add(1,u)),y.isSameOrAfter(r)&&(r=y),n.findIndex(b=>b.id===p.id)===-1&&n.push(p.clone()),p.updateTime(g,y))),p.children&&p.children.length>0&&m.push(...p.children)}),l=m}n.findIndex(m=>m.id===t.id)===-1&&n.push(t.clone()),t.updateTime(o,r)}setBaselines(t){this.baselines=[],this.baselineMap.clear(),this.baselineTaskMap.clear(),t.forEach(e=>{var s,n;const i=new $t(this.store,this.event,e);this.baselines.push(i),this.baselineMap.set(i.id,i),this.baselineTaskMap.has(i.taskId)||this.baselineTaskMap.set(i.taskId,[]),i.target?(s=this.baselineTaskMap.get(i.taskId))==null||s.unshift(i):(n=this.baselineTaskMap.get(i.taskId))==null||n.push(i)})}getBaselines(){return this.baselines}getBaselineById(t){return this.baselineMap.get(t)}getBaselinesByTaskId(t){return this.baselineTaskMap.get(t)||[]}}function Bt(f){var s;if(typeof f=="object"&&f!==null)return{r:F(f.r??0,0,255),g:F(f.g??0,0,255),b:F(f.b??0,0,255),a:F(f.a??1,0,1)};if(typeof f!="string")return O.warn(`Invalid color value type: ${typeof f}`),null;let t=f.trim();const e=(s=document==null?void 0:document.createElement("canvas"))==null?void 0:s.getContext("2d");if(e&&(e.fillStyle=t,t=e.fillStyle),t.startsWith("#")){const n=t.slice(1);let o,r,a,c,u=1;try{o=parseInt(n,16)}catch{return O.warn(`Invalid hex color: ${f}`),null}if(n.length===3)r=(o>>8&15)*17,a=(o>>4&15)*17,c=(o&15)*17;else if(n.length===6)r=o>>16&255,a=o>>8&255,c=o&255;else if(n.length===8)r=o>>24&255,a=o>>16&255,c=o>>8&255,u=(o&255)/255;else return O.warn(`Invalid hex color length: ${f}`),null;return{r,g:a,b:c,a:u}}let i=t.match(/rgba?\(\s*(\d+%?)\s*,\s*(\d+%?)\s*,\s*(\d+%?)\s*(?:,\s*([\d.]+)\s*)?\)/i);if(i){const n=o=>o.endsWith("%")?F(parseFloat(o)/100*255,0,255):F(parseInt(o,10),0,255);return{r:n(i[1]),g:n(i[2]),b:n(i[3]),a:i[4]!==void 0?F(parseFloat(i[4]),0,1):1}}return O.warn(`Could not parse color: ${f}`),null}function zt(f,t,e,i,s=!1,n=!1){const o=l=>{const m=Math.round(F(l,0,255)).toString(16);return m.length===1?"0"+m:m},r=o(f),a=o(t),c=o(e),u=o(i*255);if(s&&r[0]===r[1]&&a[0]===a[1]&&c[0]===c[1]&&i===1&&!n)return`#${r[0]}${a[0]}${c[0]}`;const d=`#${r}${a}${c}`;return n||i<1?`${d}${u}`:d}class J{constructor(t){h(this,"_r");h(this,"_g");h(this,"_b");h(this,"_a");const e=Bt(t);e===null?(O.error(`Failed to parse color: ${t}. Using default black.`),this._r=0,this._g=0,this._b=0,this._a=1):(this._r=Math.round(e.r),this._g=Math.round(e.g),this._b=Math.round(e.b),this._a=e.a)}get R(){return this._r}get G(){return this._g}get B(){return this._b}get A(){return this._a}red(t){return t===void 0?this._r:(this._r=Math.round(F(t,0,255)),this)}green(t){return t===void 0?this._g:(this._g=Math.round(F(t,0,255)),this)}blue(t){return t===void 0?this._b:(this._b=Math.round(F(t,0,255)),this)}alpha(t){return t===void 0?this._a:(this._a=F(t,0,1),this)}toHex(t=!1,e=!1){return zt(this._r,this._g,this._b,this._a,t,e)}toRgb(){const t=Math.round(this._r),e=Math.round(this._g),i=Math.round(this._b);if(this._a===1)return`rgb(${t}, ${e}, ${i})`;{const s=parseFloat(this._a.toFixed(2));return`rgba(${t}, ${e}, ${i}, ${s})`}}toObject(){return{r:this._r,g:this._g,b:this._b,a:this._a}}toString(){return this.toRgb()}brighten(t=10){if(t<0)return this.darken(-t);const e=F(t,0,100)/100;return this._r=Math.round(F(this._r+(255-this._r)*e,0,255)),this._g=Math.round(F(this._g+(255-this._g)*e,0,255)),this._b=Math.round(F(this._b+(255-this._b)*e,0,255)),this}darken(t=10){if(t<0)return this.brighten(-t);const e=F(t,0,100)/100;return this._r=Math.round(F(this._r*(1-e),0,255)),this._g=Math.round(F(this._g*(1-e),0,255)),this._b=Math.round(F(this._b*(1-e),0,255)),this}isLight(){return(this._r*299+this._g*587+this._b*114)/1e3>128}isDark(){return!this.isLight()}mix(t,e=50){const i=F(e,0,100)/100,s=B(t);return this._r=Math.round(F(this._r*(1-i)+s.R*i,0,255)),this._g=Math.round(F(this._g*(1-i)+s.G*i,0,255)),this._b=Math.round(F(this._b*(1-i)+s.B*i,0,255)),this._a=F(this._a*(1-i)+s.A*i,0,1),this}clone(){return new J({r:this._r,g:this._g,b:this._b,a:this._a})}static extend(t,e){typeof t=="function"?t(e,J,B):O.warn("Invalid plugin provided to Colorjs.extend. Expected a function.")}}const B=f=>f instanceof J?f:new J(f);class mt{constructor(t,e,i){h(this,"element");h(this,"iconElement");h(this,"_state",0);h(this,"options");var o;this.context=t,this.container=e,this.task=i;const n=(this.task?this.context.store.getDataManager().isTaskChecked(this.task):!1)?1:0;this.options={initialState:n,size:14},this.element=document.createElement("div"),this.iconElement=document.createElement("div"),this._state=this.options.initialState,this.createElement(),this.updateIcon(),this.bindEvents(),this.registerEvents(),(o=this.container)==null||o.appendChild(this.element)}createElement(){this.element.className="x-gantt-checkbox",this.element.style.width=`${this.options.size}px`,this.element.style.height=`${this.options.size}px`,this.element.style.setProperty("border",`1px solid ${this.context.store.getOptionManager().getOptions().border.color}`,"important"),this.iconElement.className="x-gantt-checkbox__icon",this.iconElement.style.cssText=`
|
|
2
2
|
display: flex;
|
|
3
3
|
align-items: center;
|
|
4
4
|
justify-content: center;
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
color: #ffffff;
|
|
8
8
|
font-size: ${Math.floor(this.options.size*.75)}px;
|
|
9
9
|
line-height: 1;
|
|
10
|
-
`,this.element.appendChild(this.iconElement),this.element.addEventListener("mouseenter",()=>{this._state===0&&this.element.classList.add("hover")}),this.element.addEventListener("mouseleave",()=>{this._state===0&&this.element.classList.remove("hover")})}updateIcon(){const t=this.context.store.getOptionManager().getOptions().primaryColor;this.iconElement.innerHTML="";let e="#ffffff",i=
|
|
10
|
+
`,this.element.appendChild(this.iconElement),this.element.addEventListener("mouseenter",()=>{this._state===0&&this.element.classList.add("hover")}),this.element.addEventListener("mouseleave",()=>{this._state===0&&this.element.classList.remove("hover")})}updateIcon(){const t=this.context.store.getOptionManager().getOptions().primaryColor;this.iconElement.innerHTML="";let e="#ffffff",i=B(t).alpha(.5).toHex();switch(this._state){case 0:e="#ffffff",i=i;break;case 1:e=t,i=t,this.iconElement.innerHTML=`
|
|
11
11
|
<svg width="12" height="9" viewBox="0 0 12 9" fill="none">
|
|
12
12
|
<path d="M10.5 1.5L4.5 7.5L1.5 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
13
13
|
</svg>
|
|
@@ -15,4 +15,24 @@
|
|
|
15
15
|
<svg width="8" height="2" viewBox="0 0 8 2" fill="none">
|
|
16
16
|
<rect width="8" height="2" fill="currentColor" rx="1"/>
|
|
17
17
|
</svg>
|
|
18
|
-
`;break}this.iconElement.style.setProperty("background-color",e,"important"),this.iconElement.style.setProperty("border-color",i,"important")}bindEvents(){this.element.addEventListener("click",t=>{if(t.preventDefault(),t.stopPropagation(),this.task){const e=this.context.store.getDataManager().isTaskChecked(this.task);e?(this.context.store.getDataManager().updateCheckedList(!1,this.task),this.setState(0)):(this.context.store.getDataManager().updateCheckedList(!0,this.task),this.setState(1)),this.context.event.emit(v.CHECK_TASK,[this.task],!e)}else{const e=this.context.store.getDataManager().getCheckedList().length===this.context.store.getDataManager().getVisibleSize();this.setState(e?1:0),this.context.store.getDataManager().toggleAllChecked(!e),this.context.event.emit(v.CHECK_TASK,this.context.store.getDataManager().getVisibleTasks(),!e)}}),this.element.addEventListener("contextmenu",t=>{if(t.preventDefault(),t.stopPropagation(),this.task){const e=this.task.getAllChildren();if(e.length===0)return;this.context.store.getOptionManager().getOptions().selection.includeSelf&&e.unshift(this.task);const i=e.every(s=>this.context.store.getDataManager().isTaskChecked(s));i?(e.forEach(s=>{this.context.store.getDataManager().updateCheckedList(!1,s)}),this.setState(0)):(e.forEach(s=>{this.context.store.getDataManager().updateCheckedList(!0,s)}),this.setState(1)),this.context.event.emit(v.CHECK_TASK,e,!i)}else{const e=this.context.store.getDataManager().getCheckedList().length===this.context.store.getDataManager().getVisibleSize();this.setState(e?1:0),this.context.store.getDataManager().toggleAllChecked(!e),this.context.event.emit(v.CHECK_TASK,this.context.store.getDataManager().getVisibleTasks(),!e)}})}registerEvents(){this.context.event.on(v.CHECK_TASK,this.updateState.bind(this))}getElement(){return this.element}setState(t){this._state!==t&&(this._state=t,this.updateIcon())}updateState(){if(this.task){const t=this.context.store.getDataManager().isTaskChecked(this.task);this.setState(t?1:0)}else{const t=this.context.store.getDataManager().getCheckedList().length===this.context.store.getDataManager().getVisibleSize();this.setState(t?1:0)}}destroy(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}}const xt="handler_column";class Nt{constructor(t){h(this,"sourceColumns",[]);h(this,"columns",[]);h(this,"leafColumns",[]);h(this,"temporaryLeafColumns",[]);h(this,"mergeInfo",new Map);h(this,"collapseTable",!1);this.context=t}init(t){t!=null&&t.length&&(this.sourceColumns=t),this.columns=[],this.leafColumns=[],this.processColumns(this.sourceColumns,this.columns)}processColumns(t,e=[],i,s=1){t.forEach((n,o)=>{var p;const r="children"in n&&Array.isArray(n.children)&&n.children.length>0,a=!r;let c="";r?c=`group-${o}`:c=`field-${n.field}`;const g=[...(i==null?void 0:i.path)||[],c];c="column-"+o+"-"+g.join("-");const d=n.label||(a?n.field:""),l=a?((p=this.temporaryLeafColumns.find(u=>u.key===c))==null?void 0:p.width)||n.width||100:"auto",m={label:d,level:s,maxLevel:s,column:n,children:[],path:g,key:c,isLeaf:a,width:l};if(e.push(m),a)this.leafColumns.push(m);else if(r){const u=n.children;this.processColumns(u,m.children,m,s+1),m.maxLevel=Math.max(m.maxLevel,m.children.reduce((y,x)=>Math.max(y,x.maxLevel),0))}}),this.temporaryLeafColumns=E.cloneDeep(this.leafColumns)}findColumnByKey(t){return this.columns.find(e=>e.key===t)}update(t){this.init(t),this.clearMergeInfo()}getColumns(){return this.columns}getColumn(t){return this.leafColumns.find(e=>e.key===t)}getLeafColumns(){return this.leafColumns}getTotalWidth(){return this.isCollapsed()?0:this.leafColumns.reduce((t,e)=>t+e.width,this.getHandlerColumn().width)}getColumnWidth(t){if(t===xt)return this.getHandlerColumn().width;const e=this.leafColumns.find(i=>i.key===t);return typeof(e==null?void 0:e.width)=="number"?e.width:0}setColumnWidth(t,e){const i=this.leafColumns.find(s=>s.key===t);i&&(i.width=e),this.context.event.emit(v.COLUMN_WIDTH_CHANGE,t,e)}isLastColumn(t){return this.leafColumns.findIndex(i=>i.key===t)===this.leafColumns.length-1}addMergeInfo(t,e,i){this.mergeInfo.has(t)||this.mergeInfo.set(t,new Map),this.mergeInfo.get(t).set(e,i)}getMergeInfo(t,e){var i;return(i=this.mergeInfo.get(t))==null?void 0:i.get(e)}clearMergeInfo(){this.mergeInfo.clear()}getHandlerColumn(){let t=0;return this.context.store.getOptionManager().getOptions().selection.enabled&&(t+=40),this.context.store.getDataManager().dataLevel>0&&this.context.store.getOptionManager().getOptions().expand.show&&(t+=40),{label:"",level:1,maxLevel:1,column:{field:"",resizable:!1,align:"left",headerAlign:"left",customStyle:{paddingLeft:this.context.store.getOptionManager().getOptions().expand.show?"8px":0},headerRender:()=>this.context.store.getOptionManager().getOptions().selection.enabled?new mt(this.context).getElement():null,ellipsis:!1},children:[],path:[],key:xt,isLeaf:!0,width:t}}isMultiHeader(){return this.columns.some(t=>t.maxLevel>1)}collapse(){this.collapseTable=!this.collapseTable,this.context.event.emit(v.TOGGLE_COLLAPSE)}isCollapsed(){return this.collapseTable}}const K=class K{constructor(t,e){h(this,"links",[]);h(this,"fromLinksMap",new Map);h(this,"toLinksMap",new Map);h(this,"topoOrder",null);h(this,"topoIndex",new Map);h(this,"lastCycleReport",null);h(this,"directConnectionCache",new Map);h(this,"forwardMemo",new Map);h(this,"backwardMemo",new Map);h(this,"cacheDependencies",new Map);h(this,"cacheAccessStats",new Map);h(this,"MAX_CACHE_SIZE",1e3);h(this,"CACHE_TTL",5*60*1e3);h(this,"enableCycleDetection",!0);this.store=t,this.event=e}setCycleDetection(t){this.enableCycleDetection=!!t}getLinks(){return this.links}getLinksByTaskId(t){return this.links.filter(e=>e.from===t||e.to===t)}setLinks(t,e=!1){const i=new Set,s=new Set;this.links.forEach(r=>{i.add(r.from),i.add(r.to)}),t.forEach(r=>{s.add(r.from),s.add(r.to)});const n=Array.from(new Set([...i,...s]));let o="BATCH";this.links.length===0?o="ADD":t.length===0?o="REMOVE":Math.abs(t.length-this.links.length)===1&&(o=t.length>this.links.length?"ADD":"REMOVE"),this.links=t||[],this.rebuildAdjacency(),this.invalidateSmartCaches(n,o),e&&this.enableCycleDetection?this.detectAllCycles():this.lastCycleReport=null}update(){this.setLinks(this.links,!0)}isLinkExist(t,e,i){return this.links.some(s=>s.from===t&&s.to===e&&(s.type||"FS")===(i||"FS"))}validateLinkType(t){return Object.keys(K.LINK_TYPE_MAP).includes(t)}convertPointsToLinkType(t,e){return`${t}${e}`}validateLink(t){return!t||t.from==null||t.to==null?{ok:!1,reason:X.LINK_INVALID_ARG,message:D.getMessage("Missing endpoint")}:t.from===t.to?{ok:!1,reason:X.LINK_SAME,message:D.getMessage("Cannot link task to itself")}:!this.getTask(t.from)||!this.getTask(t.to)?{ok:!1,reason:X.TASK_NOT_FOUND,message:D.getMessage("Task not found")}:t.type&&!this.validateLinkType(t.type)?{ok:!1,reason:X.INVALID_TYPE,message:D.getMessage(`Invalid link type: ${t.type}. It must be one of: ${Object.keys(K.LINK_TYPE_MAP).join(", ")}`)}:this.isLinkExist(t.from,t.to,t.type)?{ok:!1,reason:X.LINK_EXIST,message:D.getMessage("Link already exists")}:{ok:!0}}validateChain(t,e,i){const s={from:t,to:e,type:i},n=this.validateLink(s);if(!n.ok)return n;if(this.enableCycleDetection){const o=this.willCreateCycle(t,e);if(o)return{ok:!1,reason:X.LINK_CYCLE,message:D.getMessage("Adding this link would create a cycle"),cycleInfo:o}}return{ok:!0}}validateLinks(t){const e=[],i=[];for(const s of t){const n=this.validateLink(s);n.ok?i.push(s):e.push({link:s,reason:n.reason,message:n.message||""})}return{invalid:e,valid:i,totalCount:t.length}}getTaskLinks(t){const e=this.toLinksMap.get(t)||[],i=this.fromLinksMap.get(t)||[],s=[...e,...i];return{incoming:e,outgoing:i,all:s}}getTaskPredecessors(t){const e=this.toLinksMap.get(t)||[];return{tasks:e.map(s=>this.getTask(s.from)).filter(s=>!!s),links:e}}getTaskSuccessors(t){const e=this.fromLinksMap.get(t)||[];return{tasks:e.map(s=>this.getTask(s.to)).filter(s=>!!s),links:e}}getDirectlyConnectedTasks(t){const e=this.getTaskPredecessors(t).tasks,i=this.getTaskSuccessors(t).tasks,s=new Map;return[...e,...i].forEach(n=>{s.set(n.id,n)}),Array.from(s.values())}hasConnectionPath(t,e){if(t===e)return!0;const i=new Set,s=[t];for(;s.length;){const n=s.pop();if(n===e)return!0;if(i.has(n))continue;i.add(n);const o=this.getTaskSuccessors(n).tasks;for(const r of o)i.has(r.id)||s.push(r.id)}return!1}getDataChain(t){const e=this.getTask(t);if(!e)return{prev:{chain:[],nodes:[],links:[]},next:{chain:[],nodes:[],links:[]},allNodes:[],allLinks:[],current:void 0};const i=this.forwardMemo.get(t),s=this.backwardMemo.get(t);this.recordCacheAccess(t,!!(i&&s));const n=x=>(this.fromLinksMap.get(x)||[]).map(b=>this.getTask(b.to)).filter(b=>!!b),o=x=>(this.toLinksMap.get(x)||[]).map(b=>this.getTask(b.from)).filter(b=>!!b),r=(x,T,b=new Set)=>{const w=x.id;if(this.forwardMemo.has(w))return this.recordCacheAccess(w,!0),this.forwardMemo.get(w);if(T.has(x.id)||b.has(x.id))return[];T.add(x.id),b.add(x.id);const L=n(x.id);let M=[];if(L.length===0)M=[[x]];else{for(const C of L){const S=r(C,T,b);for(const O of S)M.push([x,...O])}M.length===0&&(M=[[x]])}return T.delete(x.id),M.length<100&&(this.forwardMemo.set(w,M),this.recordCacheAccess(w,!1)),M},a=(x,T,b=new Set)=>{const w=x.id;if(this.backwardMemo.has(w))return this.recordCacheAccess(w,!0),this.backwardMemo.get(w);if(T.has(x.id)||b.has(x.id))return[];T.add(x.id),b.add(x.id);const L=o(x.id);let M=[];if(L.length===0)M=[[x]];else{for(const C of L){const S=a(C,T,b);for(const O of S)M.push([...O,x])}M.length===0&&(M=[[x]])}return T.delete(x.id),M.length<100&&(this.backwardMemo.set(w,M),this.recordCacheAccess(w,!1)),M},c=a(e,new Set),g=r(e,new Set);this.getDirectlyConnectedTasks(t).forEach(x=>{this.establishCacheDependency(t,x.id),this.establishCacheDependency(x.id,t)});const l=new Map,m=new Map,p=(x,T)=>{const b=[];for(const w of x){w.forEach(L=>l.set(L.id,L));for(let L=0;L<w.length-1;L++){const M=w[L].id,C=w[L+1].id,S=this.findLinkFast(M,C);if(S){const O=`${S.from}-${S.to}-${S.type||"default"}`;m.has(O)||(b.push(S),m.set(O,S))}}}return b},u=p(c),y=p(g);return{prev:{chain:c.map(x=>x.map(T=>T.getEmitData().data)),nodes:c.flat().filter((x,T,b)=>b.findIndex(w=>w.id===x.id)===T).map(x=>x.getEmitData().data),links:u},next:{chain:g.map(x=>x.map(T=>T.getEmitData().data)),nodes:g.flat().filter((x,T,b)=>b.findIndex(w=>w.id===x.id)===T).map(x=>x.getEmitData().data),links:y},allNodes:Array.from(l.values()).map(x=>x.getEmitData().data),allLinks:Array.from(m.values()),current:e.getEmitData().data}}hasCycle(){return this.lastCycleReport?this.lastCycleReport.hasCycle:this.detectAllCycles(!1).hasCycle}detectAllCycles(t=!0){const e=new Map,i=new Map,s=new Set,n=[];let o=0;const r=[],a=l=>{e.set(l,o),i.set(l,o),o++,n.push(l),s.add(l);const m=this.fromLinksMap.get(l)||[];for(const p of m)e.has(p.to)?s.has(p.to)&&i.set(l,Math.min(i.get(l),e.get(p.to))):(a(p.to),i.set(l,Math.min(i.get(l),i.get(p.to))));if(i.get(l)===e.get(l)){const p=[];for(;;){const u=n.pop();if(s.delete(u),p.push(u),u===l)break}r.push(p)}};this.store.getDataManager().getTasks(!1).forEach(l=>{e.has(l.id)||a(l.id)});const c=r.filter(l=>l.length>1||this.hasSelfLoop(l[0])),g=c.map(l=>l.slice()),d={hasCycle:c.length>0,sccs:c,cycles:g,nodes:Array.from(new Set(c.flat()))};return this.lastCycleReport=d,t&&d.hasCycle&&D.warn("Cycle detected in task dependencies",d),d}getCycleReport(){return this.lastCycleReport}detectLinkConflicts(t,e){const i=this.links.filter(d=>d.from===t&&d.to===e),s=this.links.filter(d=>d.from===e&&d.to===t),n=[...i,...s],o=[],r=[],a=new Map;n.forEach(d=>{d.type&&a.set(d.type,(a.get(d.type)||0)+1)});const c=a.has("FS"),g=a.has("SF");return c&&g&&(o.push(...n.filter(d=>d.type==="FS"||d.type==="SF")),r.push("FS-SF conflict")),{hasConflict:o.length>0,conflicts:o,conflictTypes:r}}hasConflictingLinks(t,e){return this.detectLinkConflicts(t,e).hasConflict}computeTopo(){if(this.topoOrder)return this.topoOrder;const t=new Map;this.store.getDataManager().getTasks(!1).forEach(s=>t.set(s.id,0));for(const s of this.links)t.has(s.to)&&t.set(s.to,(t.get(s.to)||0)+1);const e=[];t.forEach((s,n)=>{s===0&&e.push(n)});const i=[];for(;e.length;){const s=e.shift();i.push(s);const n=this.fromLinksMap.get(s)||[];for(const o of n){const r=(t.get(o.to)||0)-1;t.set(o.to,r),r===0&&e.push(o.to)}}return i.length!==this.store.getDataManager().getTasks(!1).length?null:(i.forEach((s,n)=>this.topoIndex.set(s,n)),this.topoOrder=i,i)}willCreateCycle(t,e){if(this.computeTopo()){const r=this.topoIndex.get(t),a=this.topoIndex.get(e);if(r!=null&&a!=null&&r<a)return null}const s=[e],n=new Set,o=new Map;for(;s.length;){const r=s.pop();if(n.has(r))continue;n.add(r);const a=this.fromLinksMap.get(r)||[];for(const c of a){const g=c.to;if(!n.has(g)&&!o.has(g)&&o.set(g,r),g===t){o.has(g)||o.set(g,r);const d=[];let l=t;for(;l!==void 0;)d.push(l),l=o.get(l);const m=d.slice().reverse(),p=[t,...m];return{cycles:[p],nodes:Array.from(new Set(p)),sccs:[]}}s.push(g)}}return null}rebuildAdjacency(){this.fromLinksMap.clear(),this.toLinksMap.clear();for(const t of this.links)this.fromLinksMap.has(t.from)||this.fromLinksMap.set(t.from,[]),this.toLinksMap.has(t.to)||this.toLinksMap.set(t.to,[]),this.fromLinksMap.get(t.from).push(t),this.toLinksMap.get(t.to).push(t)}invalidateAllCaches(){this.topoOrder=null,this.topoIndex.clear(),this.directConnectionCache.clear(),this.forwardMemo.clear(),this.backwardMemo.clear(),this.cacheDependencies.clear(),this.cacheAccessStats.clear()}invalidateConnectionCache(t){t?t.forEach(e=>this.directConnectionCache.delete(e)):this.directConnectionCache.clear()}findLinkFast(t,e){const i=this.fromLinksMap.get(t);if(i)return i.find(s=>s.to===e)}getTask(t){return this.store.getDataManager().getTaskById(t)}hasSelfLoop(t){return(this.fromLinksMap.get(t)||[]).some(e=>e.to===t)}buildSimpleCycleInfo(t,e){const i=[t,e];return{cycles:[i],nodes:Array.from(new Set(i)),sccs:[]}}invalidateSmartCaches(t,e="UPDATE"){if(!t||t.length===0){this.invalidateAllCaches();return}switch(e){case"ADD":this.handleAddLinkInvalidation(t);break;case"REMOVE":this.handleRemoveLinkInvalidation(t);break;case"UPDATE":this.handleUpdateLinkInvalidation(t);break;case"BATCH":this.handleBatchOperationInvalidation(t);break}this.cleanupExpiredCaches(),this.limitCacheSize()}handleAddLinkInvalidation(t){const e=new Set;for(const i of t)e.add(i),this.getUpstreamTasksRecursive(i,3).forEach(o=>e.add(o)),this.getDownstreamTasksRecursive(i,3).forEach(o=>e.add(o));this.invalidateSpecificCaches(Array.from(e))}handleRemoveLinkInvalidation(t){const e=new Set;for(const i of t)e.add(i),this.getConnectedComponent(i).forEach(n=>e.add(n));this.invalidateSpecificCaches(Array.from(e))}handleUpdateLinkInvalidation(t){const e=new Set;for(const i of t){e.add(i),this.getDirectlyConnectedTasks(i).forEach(o=>e.add(o.id));const n=this.cacheDependencies.get(i);n&&n.forEach(o=>e.add(o))}this.invalidateSpecificCaches(Array.from(e))}handleBatchOperationInvalidation(t){if(t.length>50){this.invalidateAllCaches();return}const e=new Set(t);for(const i of t)this.getDirectlyConnectedTasks(i).forEach(n=>e.add(n.id));this.invalidateSpecificCaches(Array.from(e))}invalidateSpecificCaches(t){for(const e of t)this.forwardMemo.delete(e),this.backwardMemo.delete(e),this.directConnectionCache.delete(e),this.cacheAccessStats.delete(e),this.cacheDependencies.delete(e),this.cacheDependencies.forEach((i,s)=>{i.delete(e)});t.length>5&&(this.topoOrder=null,this.topoIndex.clear())}getUpstreamTasksRecursive(t,e){const i=new Set,s=new Set,n=(o,r)=>{if(r>=e||s.has(o))return;s.add(o);const a=this.getTaskPredecessors(o).tasks;for(const c of a)i.add(c.id),n(c.id,r+1)};return n(t,0),Array.from(i)}getDownstreamTasksRecursive(t,e){const i=new Set,s=new Set,n=(o,r)=>{if(r>=e||s.has(o))return;s.add(o);const a=this.getTaskSuccessors(o).tasks;for(const c of a)i.add(c.id),n(c.id,r+1)};return n(t,0),Array.from(i)}getConnectedComponent(t){const e=new Set,i=new Set,s=[t];for(;s.length>0;){const n=s.pop();if(i.has(n))continue;i.add(n),e.add(n);const o=this.getDirectlyConnectedTasks(n);for(const r of o)i.has(r.id)||s.push(r.id)}return Array.from(e)}cleanupExpiredCaches(){const t=Date.now(),e=[];this.cacheAccessStats.forEach((i,s)=>{t-i.lastAccess>this.CACHE_TTL&&e.push(s)}),this.invalidateSpecificCaches(e)}limitCacheSize(){const t=this.forwardMemo.size+this.backwardMemo.size;if(t>this.MAX_CACHE_SIZE){const e=Array.from(this.cacheAccessStats.entries()).sort((n,o)=>n[1].lastAccess-o[1].lastAccess),i=Math.ceil(t*.2),s=e.slice(0,i).map(([n])=>n);this.invalidateSpecificCaches(s)}}recordCacheAccess(t,e){const i=this.cacheAccessStats.get(t)||{hits:0,lastAccess:0};e&&(i.hits+=1),i.lastAccess=Date.now(),this.cacheAccessStats.set(t,i)}establishCacheDependency(t,e){this.cacheDependencies.has(t)||this.cacheDependencies.set(t,new Set),this.cacheDependencies.get(t).add(e)}getDebugInfo(){const t=this.store.getDataManager().getTasks(!1),e=t.filter(i=>{const s=this.toLinksMap.has(i.id)&&this.toLinksMap.get(i.id).length>0,n=this.fromLinksMap.has(i.id)&&this.fromLinksMap.get(i.id).length>0;return!s&&!n}).map(i=>i.id);return{totalLinks:this.links.length,totalTasks:t.length,connectionComponents:this.countConnectionComponents(),hasCycle:this.hasCycle(),topologicalOrder:this.computeTopo(),isolatedTasks:e}}countConnectionComponents(){const t=this.store.getDataManager().getTasks(!1),e=new Set;let i=0;const s=n=>{if(e.has(n))return;e.add(n);const o=this.getDirectlyConnectedTasks(n);for(const r of o)e.has(r.id)||s(r.id)};for(const n of t)e.has(n.id)||(s(n.id),i++);return i}getCachePerformanceStats(){const t=Array.from(this.cacheAccessStats.values()).reduce((n,o)=>n+o.hits,0),e=this.cacheAccessStats.size,i=Date.now(),s=Array.from(this.cacheAccessStats.values()).filter(n=>i-n.lastAccess>this.CACHE_TTL).length;return{totalCacheSize:this.forwardMemo.size+this.backwardMemo.size,hitRate:e>0?t/e*100:0,memoryUsage:this.estimateMemoryUsage(),expiredEntries:s,dependencyCount:this.cacheDependencies.size}}estimateMemoryUsage(){const t=this.links.length*100,e=this.forwardMemo.size*300,i=this.backwardMemo.size*300,s=this.cacheDependencies.size*50,n=this.cacheAccessStats.size*50,o=t+e+i+s+n;return o>1024*1024?`${(o/1024/1024).toFixed(2)} MB`:o>1024?`${(o/1024).toFixed(2)} KB`:`${o} B`}};h(K,"LINK_TYPE_MAP",{FS:{from:"F",to:"S",description:"结束到开始"},SF:{from:"S",to:"F",description:"开始到结束"},FF:{from:"F",to:"F",description:"结束到结束"},SS:{from:"S",to:"S",description:"开始到开始"}});let lt=K;var U=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function V(f){return f&&f.__esModule&&Object.prototype.hasOwnProperty.call(f,"default")?f.default:f}var yt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){var e,i,s=1e3,n=6e4,o=36e5,r=864e5,a=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,c=31536e6,g=2628e6,d=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,l={years:c,months:g,days:r,hours:o,minutes:n,seconds:s,milliseconds:1,weeks:6048e5},m=function(M){return M instanceof w},p=function(M,C,S){return new w(M,S,C.$l)},u=function(M){return i.p(M)+"s"},y=function(M){return M<0},x=function(M){return y(M)?Math.ceil(M):Math.floor(M)},T=function(M){return Math.abs(M)},b=function(M,C){return M?y(M)?{negative:!0,format:""+T(M)+C}:{negative:!1,format:""+M+C}:{negative:!1,format:""}},w=function(){function M(S,O,H){var I=this;if(this.$d={},this.$l=H,S===void 0&&(this.$ms=0,this.parseFromMilliseconds()),O)return p(S*l[u(O)],this);if(typeof S=="number")return this.$ms=S,this.parseFromMilliseconds(),this;if(typeof S=="object")return Object.keys(S).forEach(function($){I.$d[u($)]=S[$]}),this.calMilliseconds(),this;if(typeof S=="string"){var _=S.match(d);if(_){var R=_.slice(2).map(function($){return $!=null?Number($):0});return this.$d.years=R[0],this.$d.months=R[1],this.$d.weeks=R[2],this.$d.days=R[3],this.$d.hours=R[4],this.$d.minutes=R[5],this.$d.seconds=R[6],this.calMilliseconds(),this}}return this}var C=M.prototype;return C.calMilliseconds=function(){var S=this;this.$ms=Object.keys(this.$d).reduce(function(O,H){return O+(S.$d[H]||0)*l[H]},0)},C.parseFromMilliseconds=function(){var S=this.$ms;this.$d.years=x(S/c),S%=c,this.$d.months=x(S/g),S%=g,this.$d.days=x(S/r),S%=r,this.$d.hours=x(S/o),S%=o,this.$d.minutes=x(S/n),S%=n,this.$d.seconds=x(S/s),S%=s,this.$d.milliseconds=S},C.toISOString=function(){var S=b(this.$d.years,"Y"),O=b(this.$d.months,"M"),H=+this.$d.days||0;this.$d.weeks&&(H+=7*this.$d.weeks);var I=b(H,"D"),_=b(this.$d.hours,"H"),R=b(this.$d.minutes,"M"),$=this.$d.seconds||0;this.$d.milliseconds&&($+=this.$d.milliseconds/1e3,$=Math.round(1e3*$)/1e3);var G=b($,"S"),W=S.negative||O.negative||I.negative||_.negative||R.negative||G.negative,B=_.format||R.format||G.format?"T":"",Y=(W?"-":"")+"P"+S.format+O.format+I.format+B+_.format+R.format+G.format;return Y==="P"||Y==="-P"?"P0D":Y},C.toJSON=function(){return this.toISOString()},C.format=function(S){var O=S||"YYYY-MM-DDTHH:mm:ss",H={Y:this.$d.years,YY:i.s(this.$d.years,2,"0"),YYYY:i.s(this.$d.years,4,"0"),M:this.$d.months,MM:i.s(this.$d.months,2,"0"),D:this.$d.days,DD:i.s(this.$d.days,2,"0"),H:this.$d.hours,HH:i.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:i.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:i.s(this.$d.seconds,2,"0"),SSS:i.s(this.$d.milliseconds,3,"0")};return O.replace(a,function(I,_){return _||String(H[I])})},C.as=function(S){return this.$ms/l[u(S)]},C.get=function(S){var O=this.$ms,H=u(S);return H==="milliseconds"?O%=1e3:O=H==="weeks"?x(O/l[H]):this.$d[H],O||0},C.add=function(S,O,H){var I;return I=O?S*l[u(O)]:m(S)?S.$ms:p(S,this).$ms,p(this.$ms+I*(H?-1:1),this)},C.subtract=function(S,O){return this.add(S,O,!0)},C.locale=function(S){var O=this.clone();return O.$l=S,O},C.clone=function(){return p(this.$ms,this)},C.humanize=function(S){return e().add(this.$ms,"ms").locale(this.$l).fromNow(!S)},C.valueOf=function(){return this.asMilliseconds()},C.milliseconds=function(){return this.get("milliseconds")},C.asMilliseconds=function(){return this.as("milliseconds")},C.seconds=function(){return this.get("seconds")},C.asSeconds=function(){return this.as("seconds")},C.minutes=function(){return this.get("minutes")},C.asMinutes=function(){return this.as("minutes")},C.hours=function(){return this.get("hours")},C.asHours=function(){return this.as("hours")},C.days=function(){return this.get("days")},C.asDays=function(){return this.as("days")},C.weeks=function(){return this.get("weeks")},C.asWeeks=function(){return this.as("weeks")},C.months=function(){return this.get("months")},C.asMonths=function(){return this.as("months")},C.years=function(){return this.get("years")},C.asYears=function(){return this.as("years")},M}(),L=function(M,C,S){return M.add(C.years()*S,"y").add(C.months()*S,"M").add(C.days()*S,"d").add(C.hours()*S,"h").add(C.minutes()*S,"m").add(C.seconds()*S,"s").add(C.milliseconds()*S,"ms")};return function(M,C,S){e=S,i=S().$utils(),S.duration=function(I,_){var R=S.locale();return p(I,{$l:R},_)},S.isDuration=m;var O=C.prototype.add,H=C.prototype.subtract;C.prototype.add=function(I,_){return m(I)?L(this,I,1):O.bind(this)(I,_)},C.prototype.subtract=function(I,_){return m(I)?L(this,I,-1):H.bind(this)(I,_)}}})})(yt);var Pt=yt.exports;const Yt=V(Pt);var wt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return function(e,i,s){i.prototype.isBetween=function(n,o,r,a){var c=s(n),g=s(o),d=(a=a||"()")[0]==="(",l=a[1]===")";return(d?this.isAfter(c,r):!this.isBefore(c,r))&&(l?this.isBefore(g,r):!this.isAfter(g,r))||(d?this.isBefore(c,r):!this.isAfter(c,r))&&(l?this.isAfter(g,r):!this.isBefore(g,r))}}})})(wt);var Ut=wt.exports;const Xt=V(Ut);var bt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return function(e,i){i.prototype.isSameOrBefore=function(s,n){return this.isSame(s,n)||this.isBefore(s,n)}}})})(bt);var Vt=bt.exports;const qt=V(Vt);var Tt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return function(e,i){i.prototype.isSameOrAfter=function(s,n){return this.isSame(s,n)||this.isAfter(s,n)}}})})(Tt);var Qt=Tt.exports;const jt=V(Qt);var St={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return function(e,i,s){var n=i.prototype,o=function(d){return d&&(d.indexOf?d:d.s)},r=function(d,l,m,p,u){var y=d.name?d:d.$locale(),x=o(y[l]),T=o(y[m]),b=x||T.map(function(L){return L.slice(0,p)});if(!u)return b;var w=y.weekStart;return b.map(function(L,M){return b[(M+(w||0))%7]})},a=function(){return s.Ls[s.locale()]},c=function(d,l){return d.formats[l]||function(m){return m.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(p,u,y){return u||y.slice(1)})}(d.formats[l.toUpperCase()])},g=function(){var d=this;return{months:function(l){return l?l.format("MMMM"):r(d,"months")},monthsShort:function(l){return l?l.format("MMM"):r(d,"monthsShort","months",3)},firstDayOfWeek:function(){return d.$locale().weekStart||0},weekdays:function(l){return l?l.format("dddd"):r(d,"weekdays")},weekdaysMin:function(l){return l?l.format("dd"):r(d,"weekdaysMin","weekdays",2)},weekdaysShort:function(l){return l?l.format("ddd"):r(d,"weekdaysShort","weekdays",3)},longDateFormat:function(l){return c(d.$locale(),l)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};n.localeData=function(){return g.bind(this)()},s.localeData=function(){var d=a();return{firstDayOfWeek:function(){return d.weekStart||0},weekdays:function(){return s.weekdays()},weekdaysShort:function(){return s.weekdaysShort()},weekdaysMin:function(){return s.weekdaysMin()},months:function(){return s.months()},monthsShort:function(){return s.monthsShort()},longDateFormat:function(l){return c(d,l)},meridiem:d.meridiem,ordinal:d.ordinal}},s.months=function(){return r(a(),"months")},s.monthsShort=function(){return r(a(),"monthsShort","months",3)},s.weekdays=function(d){return r(a(),"weekdays",null,null,d)},s.weekdaysShort=function(d){return r(a(),"weekdaysShort","weekdays",3,d)},s.weekdaysMin=function(d){return r(a(),"weekdaysMin","weekdays",2,d)}}})})(St);var Jt=St.exports;const Zt=V(Jt);var kt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){var e="week",i="year";return function(s,n,o){var r=n.prototype;r.week=function(a){if(a===void 0&&(a=null),a!==null)return this.add(7*(a-this.week()),"day");var c=this.$locale().yearStart||1;if(this.month()===11&&this.date()>25){var g=o(this).startOf(i).add(1,i).date(c),d=o(this).endOf(e);if(g.isBefore(d))return 1}var l=o(this).startOf(i).date(c).startOf(e).subtract(1,"millisecond"),m=this.diff(l,e,!0);return m<0?o(this).startOf("week").week():Math.ceil(m)},r.weeks=function(a){return a===void 0&&(a=null),this.week(a)}}})})(kt);var Kt=kt.exports;const te=V(Kt);var vt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return function(e,i){i.prototype.weekYear=function(){var s=this.month(),n=this.week(),o=this.year();return n===1&&s===11?o+1:s===0&&n>=52?o-1:o}}})})(vt);var ee=vt.exports;const ie=V(ee);var Ct={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return function(e,i){var s=i.prototype,n=s.format;s.format=function(o){var r=this,a=this.$locale();if(!this.isValid())return n.bind(this)(o);var c=this.$utils(),g=(o||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(d){switch(d){case"Q":return Math.ceil((r.$M+1)/3);case"Do":return a.ordinal(r.$D);case"gggg":return r.weekYear();case"GGGG":return r.isoWeekYear();case"wo":return a.ordinal(r.week(),"W");case"w":case"ww":return c.s(r.week(),d==="w"?1:2,"0");case"W":case"WW":return c.s(r.isoWeek(),d==="W"?1:2,"0");case"k":case"kk":return c.s(String(r.$H===0?24:r.$H),d==="k"?1:2,"0");case"X":return Math.floor(r.$d.getTime()/1e3);case"x":return r.$d.getTime();case"z":return"["+r.offsetName()+"]";case"zzz":return"["+r.offsetName("long")+"]";default:return d}});return n.bind(this)(g)}}})})(Ct);var se=Ct.exports;const ne=V(se);var Lt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return function(e,i,s){s.updateLocale=function(n,o){var r=s.Ls[n];if(r)return(o?Object.keys(o):[]).forEach(function(a){r[a]=o[a]}),r}}})})(Lt);var oe=Lt.exports;const re=V(oe);var Mt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){var e="day";return function(i,s,n){var o=function(c){return c.add(4-c.isoWeekday(),e)},r=s.prototype;r.isoWeekYear=function(){return o(this).year()},r.isoWeek=function(c){if(!this.$utils().u(c))return this.add(7*(c-this.isoWeek()),e);var g,d,l,m,p=o(this),u=(g=this.isoWeekYear(),d=this.$u,l=(d?n.utc:n)().year(g).startOf("year"),m=4-l.isoWeekday(),l.isoWeekday()>4&&(m+=7),l.add(m,e));return p.diff(u,"week")+1},r.isoWeekday=function(c){return this.$utils().u(c)?this.day()||7:this.day(this.day()%7?c:c-7)};var a=r.startOf;r.startOf=function(c,g){var d=this.$utils(),l=!!d.u(g)||g;return d.p(c)==="isoweek"?l?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):a.bind(this)(c,g)}}})})(Mt);var ae=Mt.exports;const he=V(ae);var Ot={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){var e={year:0,month:1,day:2,hour:3,minute:4,second:5},i={};return function(s,n,o){var r,a=function(l,m,p){p===void 0&&(p={});var u=new Date(l),y=function(x,T){T===void 0&&(T={});var b=T.timeZoneName||"short",w=x+"|"+b,L=i[w];return L||(L=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:x,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:b}),i[w]=L),L}(m,p);return y.formatToParts(u)},c=function(l,m){for(var p=a(l,m),u=[],y=0;y<p.length;y+=1){var x=p[y],T=x.type,b=x.value,w=e[T];w>=0&&(u[w]=parseInt(b,10))}var L=u[3],M=L===24?0:L,C=u[0]+"-"+u[1]+"-"+u[2]+" "+M+":"+u[4]+":"+u[5]+":000",S=+l;return(o.utc(C).valueOf()-(S-=S%1e3))/6e4},g=n.prototype;g.tz=function(l,m){l===void 0&&(l=r);var p,u=this.utcOffset(),y=this.toDate(),x=y.toLocaleString("en-US",{timeZone:l}),T=Math.round((y-new Date(x))/1e3/60),b=15*-Math.round(y.getTimezoneOffset()/15)-T;if(!Number(b))p=this.utcOffset(0,m);else if(p=o(x,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(b,!0),m){var w=p.utcOffset();p=p.add(u-w,"minute")}return p.$x.$timezone=l,p},g.offsetName=function(l){var m=this.$x.$timezone||o.tz.guess(),p=a(this.valueOf(),m,{timeZoneName:l}).find(function(u){return u.type.toLowerCase()==="timezonename"});return p&&p.value};var d=g.startOf;g.startOf=function(l,m){if(!this.$x||!this.$x.$timezone)return d.call(this,l,m);var p=o(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return d.call(p,l,m).tz(this.$x.$timezone,!0)},o.tz=function(l,m,p){var u=p&&m,y=p||m||r,x=c(+o(),y);if(typeof l!="string")return o(l).tz(y);var T=function(M,C,S){var O=M-60*C*1e3,H=c(O,S);if(C===H)return[O,C];var I=c(O-=60*(H-C)*1e3,S);return H===I?[O,H]:[M-60*Math.min(H,I)*1e3,Math.max(H,I)]}(o.utc(l,u).valueOf(),x,y),b=T[0],w=T[1],L=o(b).utcOffset(w);return L.$x.$timezone=y,L},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(l){r=l}}})})(Ot);var le=Ot.exports;const ce=V(le);var Et={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){var e="minute",i=/[+-]\d\d(?::?\d\d)?/g,s=/([+-]|\d\d)/g;return function(n,o,r){var a=o.prototype;r.utc=function(u){var y={date:u,utc:!0,args:arguments};return new o(y)},a.utc=function(u){var y=r(this.toDate(),{locale:this.$L,utc:!0});return u?y.add(this.utcOffset(),e):y},a.local=function(){return r(this.toDate(),{locale:this.$L,utc:!1})};var c=a.parse;a.parse=function(u){u.utc&&(this.$u=!0),this.$utils().u(u.$offset)||(this.$offset=u.$offset),c.call(this,u)};var g=a.init;a.init=function(){if(this.$u){var u=this.$d;this.$y=u.getUTCFullYear(),this.$M=u.getUTCMonth(),this.$D=u.getUTCDate(),this.$W=u.getUTCDay(),this.$H=u.getUTCHours(),this.$m=u.getUTCMinutes(),this.$s=u.getUTCSeconds(),this.$ms=u.getUTCMilliseconds()}else g.call(this)};var d=a.utcOffset;a.utcOffset=function(u,y){var x=this.$utils().u;if(x(u))return this.$u?0:x(this.$offset)?d.call(this):this.$offset;if(typeof u=="string"&&(u=function(L){L===void 0&&(L="");var M=L.match(i);if(!M)return null;var C=(""+M[0]).match(s)||["-",0,0],S=C[0],O=60*+C[1]+ +C[2];return O===0?0:S==="+"?O:-O}(u),u===null))return this;var T=Math.abs(u)<=16?60*u:u,b=this;if(y)return b.$offset=T,b.$u=u===0,b;if(u!==0){var w=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(b=this.local().add(T+w,e)).$offset=T,b.$x.$localOffset=w}else b=this.utc();return b};var l=a.format;a.format=function(u){var y=u||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return l.call(this,y)},a.valueOf=function(){var u=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*u},a.isUTC=function(){return!!this.$u},a.toISOString=function(){return this.toDate().toISOString()},a.toString=function(){return this.toDate().toUTCString()};var m=a.toDate;a.toDate=function(u){return u==="s"&&this.$offset?r(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():m.call(this)};var p=a.diff;a.diff=function(u,y,x){if(u&&this.$u===u.$u)return p.call(this,u,y,x);var T=this.local(),b=r(u).local();return p.call(T,b,y,x)}}})})(Et);var de=Et.exports;const ue=V(de);var ge={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return{name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var i=["th","st","nd","rd"],s=e%100;return"["+e+(i[(s-20)%10]||i[s]||i[0])+"]"}}})})(ge);var fe={exports:{}};(function(f,t){(function(e,i){f.exports=i(A)})(U,function(e){function i(o){return o&&typeof o=="object"&&"default"in o?o:{default:o}}var s=i(e),n={name:"zh",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(o,r){return r==="W"?o+"周":o+"日"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s后",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},meridiem:function(o,r){var a=100*o+r;return a<600?"凌晨":a<900?"早上":a<1100?"上午":a<1300?"中午":a<1800?"下午":"晚上"}};return s.default.locale(n,null,!0),n})})(fe);const pe=(f,t)=>{const e=t.prototype;e.setLocale=function(s){return this.$locale=s||A().locale(),this.$L=this.$locale,this};const i=e.format;e.format=function(s){return this.$L=A().locale(),i.bind(this)(s)}};A.extend(Yt),A.extend(Xt),A.extend(qt),A.extend(jt),A.extend(te),A.extend(Zt),A.extend(ie),A.extend(ne),A.extend(re),A.extend(he),A.extend(ce),A.extend(ue),A.extend(pe);function Dt(f){try{if(A.locale()===f)return;if(A.locale(f)!==f)throw Error();D.info(`Locale set to ${f}`)}catch{D.warn(`Failed to set locale ${f}, fallback to en`),A.locale("en")}}const ct=()=>({small:{hour:15,day:15,week:5,month:3,quarter:3},normal:{hour:30,day:30,week:10,month:7,quarter:7},large:{hour:60,day:60,week:20,month:14,quarter:14}});class me{constructor(){h(this,"startTime",A().startOf("day"));h(this,"endTime",A().endOf("day"));h(this,"targetEnd",A().endOf("day"));h(this,"strictStart",!1);h(this,"strictEnd",!1);h(this,"isAuto",!1);h(this,"timeline",[]);h(this,"headerGroupFormat");h(this,"headerCellFormat");h(this,"isDirty",!0);h(this,"isFirstTime",!0);h(this,"allWidth",0);h(this,"cellWidth");h(this,"unit","day");this.cellWidth=E.cloneDeep(ct().normal)}getStartTime(){return this.startTime}getEndTime(){return this.endTime}getCellWidth(){const t=this.cellWidth[this.getChildUnit()];if(this.isAuto){const e=this.allWidth/this.getCellCount();return Math.max(isNaN(e)?0:e,t)}return t}getCellCount(){return this.timeline.reduce((t,e)=>{var i;return t+(((i=e.children)==null?void 0:i.length)||0)},0)}getCellUnit(){return this.getFinelyUnit()}setAllWidth(t){if(this.allWidth=t,!this.strictEnd){const e=this.getCellWidth(),i=this.targetEnd.diff(this.startTime,this.getFinelyUnit());if(e*i<this.allWidth){const s=this.allWidth-e*i,n=Math.ceil(s/e);this.endTime=this.targetEnd.add(n,this.getFinelyUnit()),this.invalidateCache()}}}getTimeLeft(t){const e=this.getCellWidth(),i=this.getFinelyUnit(),s=60*60*(i==="day"?24:1)/e;return t.diff(this.startTime,"second")/s}getTimeByLeft(t){const e=this.getCellWidth(),i=this.getFinelyUnit(),s=60*60*(i==="day"?24:1)/e,n=t*s;return this.startTime.add(n,"second")}init(t,e=!0){this.isDirty=!0,this.isFirstTime=e;const{unit:i,chart:s}=t;this.isAuto=!!s.autoCellWidth;const n={hour:"hour",day:"day",week:"week",month:"month",quarter:"quarter"}[i];n||D.warn(`Unknown unit: [${i}]. Falling back to "day".`),this.unit=n||"day",s.startTime&&(this.startTime=A(s.startTime).startOf(this.getFinelyUnit()),this.strictStart=!0),s.endTime&&(this.endTime=A(s.endTime).endOf(this.getFinelyUnit()),this.strictEnd=!0),s.cellWidth&&(E.isNumber(s.cellWidth)?this.cellWidth={hour:s.cellWidth,day:s.cellWidth,week:s.cellWidth,month:s.cellWidth,quarter:s.cellWidth}:E.isString(s.cellWidth)?this.cellWidth=E.cloneDeep(ct()[s.cellWidth]||ct().normal):E.isObject(s.cellWidth)&&(this.cellWidth=Object.assign(this.cellWidth,s.cellWidth))),this.headerCellFormat=s.headerCellFormat,this.headerGroupFormat=s.headerGroupFormat}update(t){this.init(t,!1),this.endTime=this.targetEnd.clone()}setDate(t,e){this.strictStart||t&&(this.isFirstTime||t.isBefore(this.startTime))&&(this.startTime=t.startOf(this.getFinelyUnit())),this.strictEnd||e&&(this.isFirstTime||e.isAfter(this.endTime))&&(this.endTime=e.endOf(this.getFinelyUnit())),this.targetEnd=this.endTime.clone(),this.isFirstTime=!1,this.invalidateCache()}getTimeline(){if(!this.isDirty&&this.timeline.length>0)return this.timeline;const t=[];let e=this.startTime.clone();for(t.push({date:e,label:this.formatterGroupLabel(e),children:[{date:e,label:this.formatterCellLabel(e)}]});e.isSameOrBefore(this.endTime,this.getFinelyUnit());){const i=e.add(1,this.getFinelyUnit()).startOf(this.getFinelyUnit()).clone(),s=this.formatterGroupLabel(i),n=t.find(o=>o.label===s);n?(n.children||(n.children=[]),n.children.push({date:i,label:this.formatterCellLabel(i)})):t.push({date:i,label:s,children:[{date:i,label:this.formatterCellLabel(i)}]}),e=i}return this.isDirty=!1,this.timeline=t,t}clear(){this.isDirty=!0,this.isFirstTime=!0}invalidateCache(){this.isDirty=!0}getFinelyUnit(){return this.unit==="hour"?"hour":"day"}getChildUnit(){return this.unit}getGroupUnit(){switch(this.unit){case"hour":return"day";case"month":case"quarter":return"year";case"day":case"week":default:return"month"}}formatterGroupLabel(t){if(E.isFunction(this.headerGroupFormat)){const i=this.headerGroupFormat(t.toDate(),this.unit);if(i)return i}if(E.isString(this.headerGroupFormat))return t.format(this.headerGroupFormat);switch(this.getGroupUnit()){case"month":return t.format("YYYY-MM");case"year":return t.format("YYYY");case"day":default:return t.format("YYYY-MM-DD")}}formatterCellLabel(t){if(E.isFunction(this.headerCellFormat)){const i=this.headerCellFormat(t.toDate(),this.unit);if(i)return i}if(E.isString(this.headerCellFormat))return t.format(this.headerCellFormat);switch(this.getChildUnit()){case"hour":return t.format("H");case"week":return t.format("wo");case"month":return t.format("MMM");case"quarter":return t.format("[Q]Q");case"day":default:return t.format("Do")}}getTotalWidth(){return this.getCellCount()*this.getCellWidth()}expand(t,e=1){t==="left"?this.startTime=this.startTime.subtract(e,this.getFinelyUnit()):t==="right"?this.endTime=this.endTime.add(e,this.getFinelyUnit()):t==="all"&&(this.startTime=this.startTime.subtract(e,this.getFinelyUnit()),this.endTime=this.endTime.add(e,this.getFinelyUnit())),this.targetEnd=this.endTime.clone(),this.invalidateCache()}isInTimeAxis(t){return t.isSameOrAfter(this.startTime)&&t.isSameOrBefore(this.endTime)}}class xe{constructor(t,e){h(this,"optionManager");h(this,"dataManager");h(this,"columnManager");h(this,"linkManager");h(this,"timeAxis");var n,o,r;this.context=t;const i=E.omit(e,["data"]),s=e==null?void 0:e.data;if(s&&!E.isArray(s))throw D.exception("Data should be a array.");this.optionManager=new Gt,this.optionManager.setOptions(i),i.locale&&Dt(i.locale),this.timeAxis=new me,this.timeAxis.init(this.optionManager.getOptions()),this.columnManager=new Nt(this.context),i.table&&i.table.columns&&this.columnManager.init(i.table.columns),this.dataManager=new Ft(this,this.context.event),s&&this.dataManager.setData(s,!0),(n=e==null?void 0:e.baselines)!=null&&n.data&&this.dataManager.setBaselines(e.baselines.data),this.linkManager=new lt(this,this.context.event),E.isArray((o=e==null?void 0:e.links)==null?void 0:o.data)&&this.linkManager.setLinks(e.links.data,!0),this.linkManager.setCycleDetection(((r=e==null?void 0:e.links)==null?void 0:r.enableCycleDetection)??!0)}getOptionManager(){return this.optionManager}getDataManager(){return this.dataManager}getColumnManager(){return this.columnManager}getLinkManager(){return this.linkManager}getTimeAxis(){return this.timeAxis}setOption(t,e={merge:!0}){var n,o,r,a;const i=E.omit(t,["data"]),s=t==null?void 0:t.data;this.optionManager.setOptions(i,e),((n=i.milestone)==null?void 0:n.show)!==void 0&&this.dataManager.getVisibleTasks().forEach(c=>{c.updateMode()}),E.isArray(s)&&this.dataManager.setData(s,!1),E.isArray((o=t.baselines)==null?void 0:o.data)&&this.dataManager.setBaselines(t.baselines.data),E.isArray((r=t.links)==null?void 0:r.data)&&this.linkManager.setLinks(t.links.data,!0),this.linkManager.setCycleDetection(((a=t.links)==null?void 0:a.enableCycleDetection)??!0),i.locale&&Dt(i.locale),i.table&&i.table.columns&&this.columnManager.update(i.table.columns),this.timeAxis.update(this.optionManager.getOptions())}updateTime(t,e){this.timeAxis.setDate(t,e)}}class ye{constructor(t,e,i){h(this,"rootElement");h(this,"options");h(this,"hScrollbar");h(this,"vScrollbar");h(this,"hScrollThumb");h(this,"vScrollThumb");h(this,"scrollbarContainer");h(this,"viewportWidth",0);h(this,"viewportHeight",0);h(this,"contentWidth",0);h(this,"contentHeight",0);h(this,"scrollLeft",0);h(this,"scrollTop",0);h(this,"isDraggingHScroll",!1);h(this,"isDraggingVScroll",!1);h(this,"isMouseOverRoot",!1);h(this,"isMouseOverScrollbar",!1);h(this,"hideTimeout",null);h(this,"showTimeout",null);h(this,"isVisible",!1);h(this,"dragStartX",0);h(this,"dragStartY",0);h(this,"thumbStartScrollLeft",0);h(this,"thumbStartScrollTop",0);h(this,"isAnimating",!1);h(this,"animationFrameId",null);h(this,"animationStartTime",0);h(this,"animationStartScrollLeft",0);h(this,"animationStartScrollTop",0);h(this,"animationTargetScrollLeft",0);h(this,"animationTargetScrollTop",0);h(this,"animationSource","api");h(this,"throttledHandleMouseMove");h(this,"throttledHandleWheel");h(this,"handleRootMouseMove",()=>{!this.isVisible&&this.isMouseOverRoot?this.scheduleShow():this.isVisible&&!this.isMouseOverScrollbar&&this.scheduleHide()});h(this,"handleScrollbarMouseEnter",()=>{this.isMouseOverScrollbar=!0,this.scheduleShow()});h(this,"handleScrollbarMouseLeave",()=>{this.isMouseOverScrollbar=!1,this.isMouseOverRoot&&this.scheduleHide()});h(this,"handleMouseEnter",()=>{this.isMouseOverRoot=!0,this.scheduleShow()});h(this,"handleMouseLeave",()=>{this.isMouseOverRoot=!1,!this.isDraggingHScroll&&!this.isDraggingVScroll&&!this.isMouseOverScrollbar&&(this.clearTimeouts(!0,!1),this.scheduleHide())});h(this,"handleHorizontalThumbMouseDown",t=>{t.preventDefault(),t.stopPropagation(),this.isDraggingHScroll=!0,this.dragStartX=t.clientX,this.thumbStartScrollLeft=this.scrollLeft,this.hScrollThumb.style.backgroundColor=this.options.thumb.color,this.scheduleShow(),document.addEventListener("mousemove",this.throttledHandleMouseMove),document.addEventListener("mouseup",this.handleMouseUp)});h(this,"handleVerticalThumbMouseDown",t=>{t.preventDefault(),t.stopPropagation(),this.isDraggingVScroll=!0,this.dragStartY=t.clientY,this.thumbStartScrollTop=this.scrollTop,this.vScrollThumb.style.backgroundColor=this.options.thumb.color,this.scheduleShow(),document.addEventListener("mousemove",this.throttledHandleMouseMove),document.addEventListener("mouseup",this.handleMouseUp)});h(this,"handleHorizontalTrackMouseDown",t=>{if(t.target!==this.hScrollbar)return;t.preventDefault();const e=this.hScrollbar.getBoundingClientRect(),i=this.hScrollThumb.offsetWidth,s=t.clientX-e.left,n=this.hScrollbar.clientWidth,o=this.contentWidth-this.viewportWidth,r=n-i,a=(s-i/2)/r*o;this.scrollTo({x:a,y:this.scrollTop},"track")});h(this,"handleVerticalTrackMouseDown",t=>{if(t.target!==this.vScrollbar)return;t.preventDefault();const e=this.vScrollbar.getBoundingClientRect(),i=this.vScrollThumb.offsetHeight,s=t.clientY-e.top,n=this.vScrollbar.clientHeight,o=this.contentHeight-this.viewportHeight,r=n-i,a=(s-i/2)/r*o;this.scrollTo({x:this.scrollLeft,y:a},"track")});h(this,"handleMouseUp",()=>{if(this.isDraggingHScroll||this.isDraggingVScroll){const t=this.isDraggingHScroll,e=this.isDraggingVScroll;this.isDraggingHScroll=!1,this.isDraggingVScroll=!1,t&&(this.hScrollThumb.style.backgroundColor=this.options.thumb.color),e&&(this.vScrollThumb.style.backgroundColor=this.options.thumb.color),document.removeEventListener("mousemove",this.throttledHandleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp),!this.isMouseOverRoot&&!this.isMouseOverScrollbar?this.scheduleHide():this.scheduleHide()}});h(this,"animationStep",t=>{if(!this.isAnimating)return;const e=t-this.animationStartTime,i=this.options.animationDuration,s=Math.min(1,e/i),n=s*(2-s),o=this.animationStartScrollLeft+(this.animationTargetScrollLeft-this.animationStartScrollLeft)*n,r=this.animationStartScrollTop+(this.animationTargetScrollTop-this.animationStartScrollTop)*n,a=this.scrollLeft!==o,c=this.scrollTop!==r;(a||c)&&this.emit(this.animationSource,o,r),s<1?this.animationFrameId=requestAnimationFrame(this.animationStep):(this.isAnimating=!1,this.animationFrameId=null,(this.scrollLeft!==this.animationTargetScrollLeft||this.scrollTop!==this.animationTargetScrollTop)&&this.emit(this.animationSource,this.animationTargetScrollLeft,this.animationTargetScrollTop),this.scheduleHide())});this.root=t,this.rootElement=e,this.options=E.merge({showHorizontal:!0,showVertical:!0,track:{size:8,radius:4,color:"transparent"},thumb:{size:30,radius:4,color:"rgba(0, 0, 0, 0.4)"},showDelay:0,hideDelay:500,animationDuration:100,showDuration:200,hideDuration:200},i),this.throttledHandleMouseMove=E.throttle(this.handleMouseMove.bind(this),16),this.throttledHandleWheel=E.throttle(this.handleWheel.bind(this),16,{leading:!0,trailing:!1}),this.createElements(),this.applyStyles(),this.bindEvents(),this.rootElement.matches(":hover")?this.handleMouseEnter():(this.clearTimeouts(),this.hideScrollbars(!0))}createElements(){this.scrollbarContainer=document.createElement("div"),this.scrollbarContainer.className="x-gantt-scrollbar-container",this.rootElement.appendChild(this.scrollbarContainer),this.hScrollbar=this.createScrollbarElement("horizontal"),this.hScrollThumb=this.createScrollThumbElement("horizontal"),this.hScrollbar.appendChild(this.hScrollThumb),this.vScrollbar=this.createScrollbarElement("vertical"),this.vScrollThumb=this.createScrollThumbElement("vertical"),this.vScrollbar.appendChild(this.vScrollThumb),this.scrollbarContainer.appendChild(this.hScrollbar),this.scrollbarContainer.appendChild(this.vScrollbar)}createScrollbarElement(t){const e=document.createElement("div");return e.className=`x-gantt-scrollbar x-gantt-${t}-scrollbar`,e}createScrollThumbElement(t){const e=document.createElement("div");return e.className=`x-gantt-scrollbar-thumb x-gantt-${t}-thumb`,e}applyStyles(){const t=this.scrollbarContainer.style;t.position="absolute",t.top="0",t.left="0",t.width="100%",t.height="100%",t.pointerEvents="none",t.zIndex="100",this.applyScrollbarStyles(this.hScrollbar,"horizontal"),this.applyScrollbarStyles(this.vScrollbar,"vertical"),this.applyThumbStyles(this.hScrollThumb,"horizontal"),this.applyThumbStyles(this.vScrollThumb,"vertical")}applyScrollbarStyles(t,e){const i=t.style;i.position="absolute",i.backgroundColor=this.options.track.color,i.borderRadius=`${this.options.track.size/2}px`,i.opacity="0",i.transition=`opacity ${this.options.hideDuration/1e3}s ease-out`,i.pointerEvents="auto",e==="horizontal"?(i.bottom="0px",i.left="0px",i.height=`${this.options.track.size}px`,i.width="0px"):(i.right="0px",i.top="0px",i.width=`${this.options.track.size}px`,i.height="0px")}applyThumbStyles(t,e){const i=t.style;i.position="absolute",i.backgroundColor=this.options.thumb.color,i.borderRadius=`${this.options.thumb.radius}px`,i.cursor="pointer",i.transition="background-color 0.2s",i.pointerEvents="auto",e==="horizontal"?(i.height="100%",i.top="0",i.left="0"):(i.width="100%",i.left="0",i.top="0")}bindEvents(){this.rootElement.addEventListener("mouseenter",this.handleMouseEnter),this.rootElement.addEventListener("mouseleave",this.handleMouseLeave),this.rootElement.addEventListener("mousemove",this.handleRootMouseMove),this.hScrollThumb.addEventListener("mousedown",this.handleHorizontalThumbMouseDown),this.vScrollThumb.addEventListener("mousedown",this.handleVerticalThumbMouseDown),this.hScrollbar.addEventListener("mousedown",this.handleHorizontalTrackMouseDown),this.vScrollbar.addEventListener("mousedown",this.handleVerticalTrackMouseDown),this.hScrollbar.addEventListener("mouseenter",this.handleScrollbarMouseEnter),this.vScrollbar.addEventListener("mouseenter",this.handleScrollbarMouseEnter),this.hScrollbar.addEventListener("mouseleave",this.handleScrollbarMouseLeave),this.vScrollbar.addEventListener("mouseleave",this.handleScrollbarMouseLeave),this.rootElement.addEventListener("wheel",this.throttledHandleWheel,{passive:!1})}unbindEvents(){this.rootElement.removeEventListener("mouseenter",this.handleMouseEnter),this.rootElement.removeEventListener("mouseleave",this.handleMouseLeave),this.rootElement.removeEventListener("mousemove",this.handleRootMouseMove),this.hScrollThumb.removeEventListener("mousedown",this.handleHorizontalThumbMouseDown),this.vScrollThumb.removeEventListener("mousedown",this.handleVerticalThumbMouseDown),this.hScrollbar.removeEventListener("mousedown",this.handleHorizontalTrackMouseDown),this.vScrollbar.removeEventListener("mousedown",this.handleVerticalTrackMouseDown),this.hScrollbar.removeEventListener("mouseenter",this.handleScrollbarMouseEnter),this.vScrollbar.removeEventListener("mouseenter",this.handleScrollbarMouseEnter),this.hScrollbar.removeEventListener("mouseleave",this.handleScrollbarMouseLeave),this.vScrollbar.removeEventListener("mouseleave",this.handleScrollbarMouseLeave),this.rootElement.removeEventListener("wheel",this.throttledHandleWheel),document.removeEventListener("mousemove",this.throttledHandleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp)}emit(t,e,i){this.scrollLeft=F(e,0,this.contentWidth-this.viewportWidth),this.scrollTop=F(i,0,this.contentHeight-this.viewportHeight),this.updateThumbStyles(),this.root.event.emit(v.SCROLL,{x:this.scrollLeft,y:this.scrollTop,source:t})}handleMouseMove(t){if(!(!this.isDraggingHScroll&&!this.isDraggingVScroll)){if(this.scheduleShow(),this.isDraggingHScroll){const e=t.clientX-this.dragStartX,i=this.hScrollbar.clientWidth,s=this.hScrollThumb.offsetWidth,n=Math.max(0,i-s),o=Math.max(0,this.contentWidth-this.viewportWidth);if(n===0||o===0)return;const r=e/n*o,a=this.thumbStartScrollLeft+r;this.scrollTo({x:a,y:this.scrollTop},"drag")}if(this.isDraggingVScroll){const e=t.clientY-this.dragStartY,i=this.vScrollbar.clientHeight,s=this.vScrollThumb.offsetHeight,n=Math.max(0,i-s),o=Math.max(0,this.contentHeight-this.viewportHeight);if(n===0||o===0)return;const r=e/n*o,a=this.thumbStartScrollTop+r;this.scrollTo({x:this.scrollLeft,y:a},"drag")}}}handleWheel(t){if(t.target!==this.rootElement&&!this.rootElement.contains(t.target)&&D.debug("Wheel event ignored, target not root or descendant:",t.target),!this.isMouseOverRoot&&!this.isMouseOverScrollbar){D.debug("Wheel event ignored, mouse not over root or scrollbar");return}const e=this.canScrollHorizontal(),i=this.canScrollVertical();if(!e&&!i)return;t.preventDefault();let s=t.deltaX,n=t.deltaY;Math.abs(t.deltaX)<Math.abs(t.deltaY)&&t.shiftKey&&e&&(s=n,n=0);const o=this.scrollLeft+s,r=this.scrollTop+n;this.emit("wheel",o,r)}animateWheelScroll(t,e){this.cancelAnimation();const i=this.clampScroll({x:t,y:e});if(this.scrollLeft===i.x&&this.scrollTop===i.y)return;this.isAnimating=!0,this.animationStartTime=performance.now(),this.animationStartScrollLeft=this.scrollLeft,this.animationStartScrollTop=this.scrollTop,this.animationTargetScrollLeft=i.x,this.animationTargetScrollTop=i.y,this.animationSource="wheel";const s=150,n=o=>{if(!this.isAnimating)return;const r=o-this.animationStartTime,a=Math.min(1,r/s),c=a*(2-a),g=this.animationStartScrollLeft+(this.animationTargetScrollLeft-this.animationStartScrollLeft)*c,d=this.animationStartScrollTop+(this.animationTargetScrollTop-this.animationStartScrollTop)*c,l=this.scrollLeft!==g,m=this.scrollTop!==d;(l||m)&&this.emit("wheel",g,d),a<1?this.animationFrameId=requestAnimationFrame(n):(this.isAnimating=!1,this.animationFrameId=null,(this.scrollLeft!==this.animationTargetScrollLeft||this.scrollTop!==this.animationTargetScrollTop)&&this.emit("wheel",this.animationTargetScrollLeft,this.animationTargetScrollTop),this.scheduleHide())};this.animationFrameId=requestAnimationFrame(n)}clearTimeouts(t=!0,e=!0){t&&this.showTimeout!==null&&(window.clearTimeout(this.showTimeout),this.showTimeout=null),e&&this.hideTimeout!==null&&(window.clearTimeout(this.hideTimeout),this.hideTimeout=null)}scheduleShow(){if(this.isVisible||this.showTimeout!==null){this.hideTimeout!==null&&this.clearTimeouts(!1,!0);return}this.clearTimeouts(!0,!0),this.options.showDelay<=0?this.showScrollbars():this.showTimeout=window.setTimeout(()=>{this.showScrollbars(),this.showTimeout=null},this.options.showDelay)}showScrollbars(){this.clearTimeouts(),this.isVisible=!0,this.hScrollbar.style.transition=`opacity ${this.options.showDuration/1e3}s ease-in`,this.vScrollbar.style.transition=`opacity ${this.options.showDuration/1e3}s ease-in`,requestAnimationFrame(()=>{this.canScrollHorizontal()&&this.options.showHorizontal?this.hScrollbar.style.opacity="1":this.hScrollbar.style.opacity="0",this.canScrollVertical()&&this.options.showVertical?this.vScrollbar.style.opacity="1":this.vScrollbar.style.opacity="0",setTimeout(()=>{this.isVisible&&(this.hScrollbar.style.transition=`opacity ${this.options.hideDuration/1e3}s ease-out`,this.vScrollbar.style.transition=`opacity ${this.options.hideDuration/1e3}s ease-out`)},this.options.showDuration)}),this.scheduleHide()}scheduleHide(){if(this.isDraggingHScroll||this.isDraggingVScroll||this.isMouseOverScrollbar){this.clearTimeouts(!0,!0);return}this.hideTimeout===null&&(this.clearTimeouts(!0,!1),this.hideTimeout=window.setTimeout(()=>{!this.isMouseOverRoot&&!this.isDraggingHScroll&&!this.isDraggingVScroll&&!this.isMouseOverScrollbar&&this.hideScrollbars(),this.hideTimeout=null},this.options.hideDelay))}hideScrollbars(t=!1){!t&&(this.isDraggingHScroll||this.isDraggingVScroll||this.isMouseOverScrollbar)||(this.clearTimeouts(!0,!0),this.isVisible=!1,this.hScrollbar.style.opacity="0",this.vScrollbar.style.opacity="0")}updateSize(t,e,i,s,n=0,o=0){this.viewportWidth=Math.max(0,t),this.viewportHeight=Math.max(0,e),this.contentWidth=Math.max(this.viewportWidth,i),this.contentHeight=Math.max(this.viewportHeight,s);const r=this.canScrollHorizontal()&&this.options.showHorizontal,a=this.canScrollVertical()&&this.options.showVertical;if(r){const g=this.viewportWidth-(a?this.options.track.size:0);this.hScrollbar.style.display="block",this.hScrollbar.style.transform=`translateX(${n}px)`,this.hScrollbar.style.width=`${Math.max(0,g)}px`,this.hScrollbar.style.bottom="0px",this.hScrollbar.style.right=a?`${this.options.track.size}px`:"0px"}else this.hScrollbar.style.display="none";if(a){const g=this.viewportHeight-o-(r?this.options.track.size:0);this.vScrollbar.style.display="block",this.vScrollbar.style.transform=`translateY(${o}px)`,this.vScrollbar.style.height=`${Math.max(0,g)}px`,this.vScrollbar.style.right="0px",this.vScrollbar.style.bottom=r?`${this.options.track.size}px`:"0px"}else this.vScrollbar.style.display="none";this.updateThumbStyles();const c=this.clampScroll({x:this.scrollLeft,y:this.scrollTop});(c.x!==this.scrollLeft||c.y!==this.scrollTop)&&this.emit("api",c.x,c.y),this.isMouseOverRoot||this.isDraggingHScroll||this.isDraggingVScroll?this.scheduleShow():!r&&!a?this.hideScrollbars(!0):this.isVisible?this.scheduleShow():this.hideScrollbars(!0)}updateThumbStyles(){if(this.canScrollHorizontal()&&this.options.showHorizontal){const t=this.hScrollbar.clientWidth,e=Math.max(this.options.thumb.size,t*(this.viewportWidth/this.contentWidth)),i=Math.min(t,e);this.hScrollThumb.style.width=`${i}px`;const s=this.contentWidth-this.viewportWidth,n=t-i,o=s>0?this.scrollLeft/s*n:0;this.hScrollThumb.style.transform=`translateX(${Math.max(0,Math.min(o,n))}px)`,this.hScrollThumb.style.left="0px"}else this.hScrollThumb.style.width="0px";if(this.canScrollVertical()&&this.options.showVertical){const t=this.vScrollbar.clientHeight,e=Math.max(this.options.thumb.size,t*(this.viewportHeight/this.contentHeight)),i=Math.min(t,e);this.vScrollThumb.style.height=`${i}px`;const s=this.contentHeight-this.viewportHeight,n=t-i,o=s>0?this.scrollTop/s*n:0;this.vScrollThumb.style.transform=`translateY(${Math.max(0,Math.min(o,n))}px)`,this.vScrollThumb.style.top="0px"}else this.vScrollThumb.style.height="0px"}canScrollHorizontal(){return this.contentWidth>this.viewportWidth}canScrollVertical(){return this.contentHeight>this.viewportHeight}clampScroll(t){const e=Math.max(0,this.contentWidth-this.viewportWidth),i=Math.max(0,this.contentHeight-this.viewportHeight);return{x:Math.max(0,Math.min(t.x,e)),y:Math.max(0,Math.min(t.y,i))}}scrollTo(t,e="api"){this.scheduleShow();const i=this.clampScroll(E.merge(this.getScrollPosition(),t));if(this.scrollLeft===i.x&&this.scrollTop===i.y){if(this.isAnimating&&this.animationTargetScrollLeft===i.x&&this.animationTargetScrollTop===i.y)return;this.cancelAnimation();return}const s=(e==="api"||e==="track")&&this.options.animationDuration>0;if(this.cancelAnimation(),s)this.isAnimating=!0,this.animationStartTime=performance.now(),this.animationStartScrollLeft=this.scrollLeft,this.animationStartScrollTop=this.scrollTop,this.animationTargetScrollLeft=i.x,this.animationTargetScrollTop=i.y,this.animationSource=e,this.animationFrameId=requestAnimationFrame(this.animationStep);else{this.isAnimating=!1;const n=this.scrollLeft!==i.x,o=this.scrollTop!==i.y;(n||o)&&this.emit(e,i.x,i.y)}}cancelAnimation(){this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.isAnimating=!1}getScrollPosition(){return{x:this.scrollLeft,y:this.scrollTop}}destroy(){this.unbindEvents(),this.clearTimeouts(),this.cancelAnimation(),this.scrollbarContainer.parentNode&&this.scrollbarContainer.parentNode.removeChild(this.scrollbarContainer),this.rootElement=null,this.eventManager=null,this.hScrollbar=null,this.vScrollbar=null,this.hScrollThumb=null,this.vScrollThumb=null,this.scrollbarContainer=null,D.debug("Scrollbar destroyed")}}function J(f,t=""){const e=["px","%","vh","vw","rem","em"];if(f==null)return t;if(typeof f=="number")return isFinite(f)?`${f}px`:t;if(typeof f=="string"){const i=f.trim();if(i==="")return t;for(const n of e)if(i.endsWith(n)){const o=i.substring(0,i.length-n.length).trim(),r=Number(o);if(!isNaN(r)&&isFinite(r))return`${r}${n}`;break}const s=Number(i);if(!isNaN(s)&&isFinite(s))return`${s}px`}return t}class it{constructor(t,e,i,s,n,o,r=1,a=1,c){h(this,"element");h(this,"isEmpty",!1);h(this,"isHandler",!1);this.context=t,this.container=e,this.column=i,this.task=s,this.rowIndex=n,this.colIndex=o,this.colspan=r,this.rowspan=a,this.isEmpty=c==="empty",this.isHandler=c==="handler",this.element=document.createElement("div"),this.element.className="x-gantt-table-cell",this.element.style.boxSizing="border-box",this.element.style.display="inline-flex",this.element.style.flexShrink="0",this.element.style.flexGrow="0",this.element.style.flexBasis="auto",this.element.style.pointerEvents="all",this.element.style.setProperty("border-color",this.context.getOptions().border.color,"important"),this.element.style.textAlign=this.column.column.align||this.context.getOptions().table.align,!this.context.store.getColumnManager().isLastColumn(this.column.key)&&this.context.getOptions().border.show&&!this.isEmpty&&this.element.classList.add("border"),this.updateWidth(),this.updateHeight(),this.isEmpty?(this.element.style.borderBottom="none",this.element.style.pointerEvents="none",this.element.style.backgroundColor="transparent",this.element.style.setProperty("border-color","transparent","important")):this.isHandler?this.setHandler():this.setContent(),this.container.appendChild(this.element)}setContent(){const t=document.createElement("div");if(t.className="x-gantt-table-cell__content",t.style.overflow="hidden",(this.column.column.ellipsis??this.context.getOptions().table.ellipsis??!0)&&(t.style.textOverflow="ellipsis"),t.style.whiteSpace="nowrap",t.style.flex="1",t.style.height="100%",t.style.alignContent="center",this.colIndex===0&&(t.style.paddingLeft=J(this.task.level*this.context.getOptions().row.indent,"16px")),typeof this.column.column.render=="function")try{const e=this.column.column.render(this.task.getEmitData());typeof e=="string"?t.innerHTML=e:e instanceof HTMLElement?t.appendChild(e):D.warn("Table cell render function does not return a valid value.",e)}catch(e){D.error("Table cell render error:",e),t.textContent=this.task.getField(this.column.column.field)??this.context.getOptions().table.emptyText}else t.textContent=this.task.getField(this.column.column.field)??this.context.getOptions().table.emptyText;this.column.column.customStyle&&Object.assign(t.style,this.column.column.customStyle),this.element.appendChild(t)}setHandler(){const t=document.createElement("div");if(t.className="x-gantt-table-cell__content",t.style.overflow="hidden",t.style.whiteSpace="nowrap",t.style.display="inline-flex",t.style.flex="1",t.style.height="100%",this.context.getOptions().selection.enabled){const e=document.createElement("div");e.style.display="flex",e.style.flex="0.5",e.style.justifyContent="center",e.style.alignItems="center",new mt(this.context,e,this.task),t.appendChild(e)}if(this.context.getOptions().expand.show&&this.task.children&&this.task.children.length>0){const e=document.createElement("div");e.className="x-gantt-table-cell__expand",e.style.display="flex",e.style.flex="0.5",e.style.color=this.context.getOptions().primaryColor,e.style.alignItems="center",e.style.justifyContent="center",e.style.height="100%",e.style.width="14px",e.style.height="100%",e.style.cursor="pointer",e.innerHTML='<svg t="1746693752280" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2612" width="14" height="14"><path d="M724.48 521.728c-1.8432 7.7824-5.7344 14.848-11.3664 20.48l-341.9136 342.016c-16.6912 16.6912-43.7248 16.6912-60.3136 0s-16.6912-43.7248 0-60.3136L622.6944 512 310.8864 200.0896c-16.6912-16.6912-16.6912-43.7248 0-60.3136 16.6912-16.6912 43.7248-16.6912 60.3136 0l341.9136 341.9136c10.8544 10.8544 14.6432 26.112 11.3664 40.0384z" fill="currentColor" p-id="2613"></path></svg>',e.style.transform=this.task.expanded?"rotate(90deg)":"",e.addEventListener("click",i=>{i.stopPropagation(),this.context.store.getDataManager().expandTask(this.task.id,!1)}),t.appendChild(e)}this.element.appendChild(t)}remove(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}updateWidth(){if(this.isHandler){this.element.style.width=J(this.context.store.getColumnManager().getHandlerColumn().width);return}const t=this.context.store.getColumnManager().getLeafColumns().slice(this.colIndex,this.colIndex+Math.max(1,this.colspan)).reduce((e,i)=>e+i.width,0);this.element.style.width=J(t)}updateHeight(){const t=this.context.getOptions().row.height;this.element.style.height=J(t*Math.max(1,this.rowspan))}}class _t{constructor(t,e,i,s,n=!1){h(this,"element");h(this,"cells",[]);this.context=t,this.container=e,this.task=i,this.top=s,this.element=document.createElement("div"),this.element.className="x-gantt-table-row",this.element.style.display="flex",this.element.style.flexDirection="row",this.element.style.flexWrap="nowrap",this.element.style.position="absolute",this.element.style.pointerEvents="none",this.element.style.width=`${this.context.store.getColumnManager().getTotalWidth()}px`,n&&this.raise(),this.updateStyles(),this.container.appendChild(this.element),this.bindEvents(),this.registerEvents()}bindEvents(){this.element.addEventListener("mouseenter",()=>{this.context.event.emit(v.ROW_HIGHLIGHT,this.task.id)}),this.element.addEventListener("mouseleave",()=>{this.context.event.emit(v.ROW_UNHIGHLIGHT,this.task.id)}),this.element.addEventListener("click",t=>{this.context.store.getDataManager().isTaskSelected(this.task.id)||this.context.store.getDataManager().selectTask(this.task.id),this.context.event.emit(v.ROW_CLICK,t,this.task)}),this.element.addEventListener("dblclick",t=>{this.context.event.emit(v.ROW_DBL_CLICK,t,this.task)}),this.element.addEventListener("contextmenu",t=>{t.preventDefault(),this.context.store.getDataManager().selectTask(this.task.id),this.context.event.emit(v.ROW_CONTEXTMENU,t,this.task)})}registerEvents(){this.context.event.on(v.ROW_HIGHLIGHT,t=>{this.task.id===t?this.element.classList.add("hover"):this.element.classList.remove("hover")}),this.context.event.on(v.ROW_UNHIGHLIGHT,t=>{this.task.id===t&&this.element.classList.remove("hover")}),this.context.event.on(v.TASK_SELECTED,t=>{this.task.id===t.id&&this.element.classList.add("selected")}),this.context.event.on(v.TASK_UNSELECTED,t=>{this.task.id===t&&this.element.classList.remove("selected")})}updateStyles(){this.updateTop(this.top),this.context.store.getDataManager().isTaskSelected(this.task.id),this.element.style.backgroundColor=this.context.store.getOptionManager().getRowBackgroundColor(this.task)}raise(){this.element.style.zIndex="2"}updateTop(t){this.top=t;const e=this.context.store.getOptionManager().getOptions().row.height,i=`${-this.top+this.task.flatIndex*e}px`;this.element.style.transform=`translateY(${i})`}create(){var i,s;this.clearCells();const t=this.context.store.getColumnManager().getHandlerColumn();if(t.width!==0){const n=new it(this.context,this.element,t,this.task,this.task.flatIndex,-1,1,1,"handler");this.cells.push(n)}const e=this.context.store.getColumnManager().getLeafColumns();for(let n=0;n<e.length;n++){const o=e[n],r=this.context.store.getColumnManager().getMergeInfo(this.task.id,n);if(r){if(r.task.id!==this.task.id){const a=new it(this.context,this.element,o,this.task,this.task.flatIndex,n,1,1,"empty");this.element.style.backgroundColor="transparent",this.raise(),this.cells.push(a)}else if(r.originColumnIndex===n){const a=new it(this.context,this.element,o,r.task,r.task.flatIndex,n,r.colspan,r.rowspan);this.cells.push(a)}}else{let a=1,c=1;const g=(s=(i=o.column).merge)==null?void 0:s.call(i,this.task.getField(o.column.field),this.task.data,n,this.task.level+1);if(g&&(typeof g.col!="number"?D.error("colspan function must returned a number"):a=g.col,typeof g.row!="number"?D.error("rowspan function must returned a number"):c=g.row),a>1||c>1){if(c>1)for(let p=1;p<c;p++){const u=this.context.store.getDataManager().getVisibleTasks()[this.task.flatIndex+p];if(u&&this.task.level!==u.level){c=p;break}}const l={task:this.task,originColumnIndex:n,colspan:a,rowspan:c};let m=this.task;for(let p=c;p>0;p--)if(m){for(let u=0;u<a;u++)this.context.store.getColumnManager().addMergeInfo(m.id,u+n,l);m=this.context.store.getDataManager().getVisibleTasks().at(m.flatIndex+1)}for(let p=0;p<a;p++)this.context.store.getColumnManager().addMergeInfo(this.task.id,p+n,l)}const d=new it(this.context,this.element,o,this.task,this.task.flatIndex,n,a,c);this.cells.push(d)}}this.context.store.getDataManager().isTaskSelected(this.task.id)&&this.element.classList.add("selected")}update(t){this.task=t,this.create()}updateWidth(){this.element.style.width=`${this.context.store.getColumnManager().getTotalWidth()}px`,this.cells.forEach(t=>t.updateWidth())}clearCells(){for(this.cells.forEach(t=>t.remove()),this.cells=[];this.element.firstChild;)this.element.removeChild(this.element.firstChild)}remove(){this.clearCells(),this.element.parentNode&&this.element.parentNode.removeChild(this.element)}}class we{constructor(t,e){h(this,"element");h(this,"rows",new Map);h(this,"mergeRows",new Map);this.context=t,this.container=e,this.element=document.createElement("div"),this.element.className="x-gantt-table-body",this.element.style.width="100%",this.element.style.position="relative",this.container.appendChild(this.element)}render(t,e){this.mergeRows.forEach(n=>n.remove()),this.mergeRows.clear();const i=new Set;e.forEach(n=>{i.add(n.id)});const s=[];this.rows.forEach((n,o)=>{i.has(o)||s.push(o)}),s.forEach(n=>{const o=this.rows.get(n);o&&o.remove(),this.rows.delete(n)}),e.forEach((n,o)=>{const r=n.id;if(this.rows.has(r)){const a=this.rows.get(r);a.update(n),a.updateTop(t)}else{const a=new _t(this.context,this.element,n,t);a.create(),this.rows.set(r,a)}this.context.store.getColumnManager().getLeafColumns().forEach((a,c)=>{const g=this.context.store.getColumnManager().getMergeInfo(n.id,c);if(g&&g.rowspan>1){const d=g.task.id;if(!this.rows.has(d)&&!this.mergeRows.has(d)){const l=new _t(this.context,this.element,g.task,t,!0);l.create(),this.mergeRows.set(d,l)}}})})}refresh(t,e){this.rows.forEach(i=>{i.remove()}),this.rows.clear(),this.render(t,e)}updateTask(t){this.rows.has(t.id)&&this.rows.get(t.id).update(t)}update(){this.rows.forEach(t=>{t.create()})}updateWidth(){this.rows.forEach(t=>{t.updateWidth()}),this.mergeRows.forEach(t=>{t.updateWidth()})}}class dt{constructor(t,e,i,s){h(this,"columnElement");this.context=t,this.root=e,this.container=i,this.column=s,this.columnElement=document.createElement("div"),this.initElement(),this.container.appendChild(this.columnElement)}initElement(){const t=this.context.store.getColumnManager(),e=t.getColumnWidth(this.column.key),i=this.column.column.headerAlign||this.context.getOptions().table.headerAlign,s=this.column.column.ellipsis??this.context.getOptions().table.ellipsis??!0;this.columnElement.className="x-gantt-table-header-cell",(t.isMultiHeader()||this.context.getOptions().border.show)&&this.columnElement.classList.add("border"),this.columnElement.style.height="100%",this.columnElement.style.width=`${e}px`,this.columnElement.style.display="flex",this.columnElement.style.flexShrink="0",this.columnElement.style.alignItems="center",this.columnElement.style.padding="0 8px",this.columnElement.style.boxSizing="border-box",this.columnElement.style.setProperty("border-color",this.context.getOptions().border.color,"important");const n=document.createElement("div");if(n.className="x-gantt-table-header-cell__content",n.style.flex="1",n.style.textAlign=i,n.style.overflow="hidden",n.style.whiteSpace="nowrap",s&&(n.style.textOverflow="ellipsis"),n.style.position="relative",n.style.fontWeight=`${this.context.getOptions().header.fontWeight}`,n.style.fontSize=J(this.context.getOptions().header.fontSize),n.style.setProperty("color",this.context.getOptions().header.color,"important"),n.style.fontFamily=this.context.getOptions().header.fontFamily,this.column.column.headerRender){const o=this.column.column.headerRender();typeof o=="string"?n.innerHTML=o:o instanceof HTMLElement&&(n.innerHTML="",n.appendChild(o))}else n.textContent=this.column.label||this.column.column.label||"";this.column.column.customStyle&&Object.assign(n.style,this.column.column.customStyle),this.columnElement.appendChild(n),this.addResizeHandle()}setWidth(t){this.columnElement.style.width=`${t}px`,this.context.store.getColumnManager().setColumnWidth(this.column.key,t)}addResizeHandle(){if(this.column.column.resizable===!1||this.context.store.getColumnManager().isLastColumn(this.column.key))return;const t=document.createElement("div");t.className="x-gantt-column-resize-handle",t.style.position="absolute",t.style.top="0",t.style.right="0",t.style.width="5px",t.style.height="100%",t.style.cursor="col-resize",t.style.zIndex="2",this.columnElement.appendChild(t);let e=0,i=0,s=null,n=0;const o=c=>{c.preventDefault(),c.stopPropagation(),e=c.clientX,i=this.columnElement.offsetWidth,s=this.root.getBoundingClientRect();const g=l=>r(l),d=l=>a(l,g,d);document.addEventListener("mousemove",g),document.addEventListener("mouseup",d),n=e-s.left,this.context.event.emit(v.SHOW_GUIDELINE,n)},r=c=>{if(c.preventDefault(),!s)return;const g=c.clientX-e,d=i+g,l=Math.max(50,d),m=e-s.left-i,u=this.root.clientWidth-20;let y=m+l;y=Math.min(u,y),this.context.event.emit(v.MOVE_GUIDELINE,y)},a=(c,g,d)=>{document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",d),this.context.event.emit(v.HIDE_GUIDELINE);const l=c.clientX-e,m=Math.max(50,i+l);this.setWidth(m)};t.addEventListener("mousedown",o)}}class ut{constructor(t,e,i,s){h(this,"groupElement");h(this,"titleContainer");h(this,"childContainer");h(this,"children",[]);this.context=t,this.root=e,this.container=i,this.column=s,this.groupElement=document.createElement("div"),this.titleContainer=document.createElement("div"),this.childContainer=document.createElement("div"),this.initElement(),this.initChildren(),this.container.appendChild(this.groupElement)}initElement(){const e=this.context.getOptions().header.height/this.column.maxLevel;this.groupElement.className="x-gantt-table-header-group",(this.context.store.getColumnManager().isMultiHeader()||this.context.getOptions().border.show)&&this.groupElement.classList.add("border"),this.groupElement.style.display="flex",this.groupElement.style.flexShrink="0",this.groupElement.style.flexGrow="0",this.groupElement.style.flexDirection="column",this.groupElement.style.height="100%",this.groupElement.style.overflow="hidden",this.groupElement.style.boxSizing="border-box",this.titleContainer.className="x-gantt-table-header-cell",(this.context.store.getColumnManager().isMultiHeader()||this.context.getOptions().border.show)&&this.titleContainer.classList.add("border"),this.titleContainer.style.height=`${e}px`,this.titleContainer.style.flex="0 0 auto",this.titleContainer.style.display="flex",this.titleContainer.style.alignItems=this.context.getOptions().table.headerAlign,this.titleContainer.style.justifyContent="center",this.titleContainer.style.padding="0 8px",this.titleContainer.style.boxSizing="border-box",this.titleContainer.style.overflow="hidden",this.titleContainer.style.whiteSpace="nowrap",this.context.getOptions().table.ellipsis&&(this.titleContainer.style.textOverflow="ellipsis"),this.titleContainer.style.borderBottom=`1px solid ${this.context.getOptions().border.color}`,this.titleContainer.style.setProperty("border-color",this.context.getOptions().border.color,"important"),this.titleContainer.style.fontWeight=`${this.context.getOptions().header.fontWeight}`,this.titleContainer.style.fontSize=J(this.context.getOptions().header.fontSize),this.titleContainer.style.fontFamily=this.context.getOptions().header.fontFamily,this.titleContainer.style.setProperty("color",this.context.getOptions().header.color,"important"),this.titleContainer.textContent=this.column.label||"",this.childContainer.className="x-gantt-table-header-children",this.childContainer.style.flex="1 0 auto",this.childContainer.style.display="flex",this.childContainer.style.width="100%",this.groupElement.appendChild(this.titleContainer),this.groupElement.appendChild(this.childContainer)}initChildren(){this.column.children.forEach(t=>{if(t.isLeaf){const e=new dt(this.context,this.root,this.childContainer,t);this.children.push(e)}else if(t.children.length>0){const e=new ut(this.context,this.root,this.childContainer,t);this.children.push(e)}})}}class be{constructor(t,e){h(this,"headerElement");h(this,"headerColumns",[]);this.context=t,this.container=e,this.headerElement=document.createElement("div"),this.initElement(),this.container.appendChild(this.headerElement)}initElement(){this.headerElement.className="x-gantt-table-header",this.headerElement.style.display="flex",this.headerElement.style.height=`${this.context.getOptions().header.height}px`,this.headerElement.style.minHeight=`${Math.max(this.context.getOptions().header.height,30)}px`,this.headerElement.style.setProperty("background-color",this.context.getOptions().header.backgroundColor||this.context.getOptions().primaryColor,"important"),this.headerElement.style.setProperty("color",this.context.getOptions().header.color,"important"),this.headerElement.style.fontSize=`${this.context.getOptions().header.fontSize}px`,this.headerElement.style.fontWeight=`${this.context.getOptions().header.fontWeight}`,this.headerElement.style.zIndex="10",this.headerElement.style.width="100%",this.headerElement.style.flexShrink="0",this.headerElement.style.borderBottom=`1px solid ${this.context.getOptions().border.color}`,this.headerElement.style.setProperty("border-color",this.context.getOptions().border.color,"important")}render(){this.headerColumns=[],this.headerElement.innerHTML="",this.initElement();const t=this.context.store.getColumnManager(),e=t.getColumns();if(t.getHandlerColumn().width!==0){const i=new dt(this.context,this.headerElement,this.headerElement,t.getHandlerColumn());this.headerColumns.push(i)}e.forEach(i=>{if(i.isLeaf){const s=new dt(this.context,this.headerElement,this.headerElement,i);this.headerColumns.push(s)}else if(i.children.length>0){const s=new ut(this.context,this.headerElement,this.headerElement,i);this.headerColumns.push(s)}})}}class Te{constructor(t,e){h(this,"tableContainer");h(this,"tableHeader");h(this,"tableBody");this.context=t,this.container=e,this.tableContainer=document.createElement("div"),this.tableContainer.className="x-gantt-table-container",this.tableContainer.style.position="relative",this.tableContainer.style.width="100%",this.tableContainer.style.height="100%",this.tableContainer.style.overflow="hidden",this.tableContainer.style.display="flex",this.tableContainer.style.flexDirection="column",this.container.appendChild(this.tableContainer),this.tableHeader=new be(t,this.tableContainer),this.tableBody=new we(t,this.tableContainer),this.listenEvents()}render(t,e){this.tableHeader.render(),this.refresh(t,e)}refresh(t,e){this.tableBody.render(t,e)}updateWidth(){this.tableBody.updateWidth()}updateTask(t){this.tableBody.updateTask(t)}listenEvents(){this.context.event.on(v.UPDATE_TABLE_HEADER,()=>{this.tableHeader.render()}),this.context.event.on(v.UPDATE_TABLE_BODY,()=>{this.tableBody.update()})}}class Se{constructor(t,e){h(this,"background");h(this,"groupHeader");h(this,"cellHeader");h(this,"cellCache",new Map);h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);this.context=t,this.layer=e,this.background=new k.Rect({fill:this.context.getOptions().header.backgroundColor||this.context.getOptions().primaryColor,name:"header-background"}),this.layer.add(this.background),this.groupHeader=new k.Group({name:"primary-header"}),this.cellHeader=new k.Group({name:"secondary-header"}),this.layer.add(this.groupHeader),this.layer.add(this.cellHeader),this.registerEvents()}resize(t){this.width=t,this.height=this.context.getOptions().header.height,this.background.width(t),this.background.height(this.height),this.render()}setOffset(t,e){this.offsetX!==t&&(this.offsetX=t,this.groupHeader.x(t),this.cellHeader.x(t),this.render())}registerEvents(){this.context.event.on(v.ROW_HIGHLIGHT,t=>{this.highlightDate(t)}),this.context.event.on(v.ROW_UNHIGHLIGHT,t=>{this.unhighlightDate(t)}),this.context.event.on(v.UPDATE_TASK,t=>{this.highlightDate(t.id)})}render(){this.calculateHeader(),this.layer.moveToTop(),this.layer.batchDraw()}calculateHeader(){var c;this.clearHeader();const t=this.context.store.getTimeAxis(),e=t.getCellWidth(),i=Math.max(0,-this.offsetX),s=i+this.width,n=Math.floor(this.height/2),o=this.context.getOptions().border.color;this.layer.add(new k.Line({points:[0,n,this.width,n],stroke:o,strokeWidth:1})),this.layer.add(new k.Line({points:[0,this.height,this.width,this.height],stroke:o,strokeWidth:1}));const r=t.getTimeline();let a=0;for(let g=0;g<r.length;g++){const d=r[g],l=e*(((c=d.children)==null?void 0:c.length)??0);if(a+l<i){a+=l;continue}if(a>s)break;const p=this.createCell(`group-${d.date.format("YYYY-MM-DD")}`,a,0,l,n,o,d.label);if(this.groupHeader.add(p),E.isArray(d.children)&&d.children.length>0){let u=a;for(let y=0;y<d.children.length;){const x=d.children[y];let T=1;for(;d.children[y+T]&&x.label===d.children[y+T].label;)T++;if(y+=T,y>=d.children.length&&r[g+1]&&r[g+1].children){let M=0;for(;r[g+1].children[M]&&x.label===r[g+1].children[M].label;)r[g+1].children[M].hide=!0,M++;M>0&&(T+=M)}const b=e*T;if(u+b<i){u+=b;continue}if(u>s)break;const L=this.createCell(`cell-${x.date.format("YYYY-MM-DD")}`,u,n,b,n,x.hide?"transparent":o,x.hide?"":x.label);this.cellHeader.add(L),x.hide&&L.visible(!1),u+=b}}a+=l}this.layer.batchDraw()}createCell(t,e,i,s,n,o,r){const a=new k.Group;a.x(e),a.y(i);const c=new k.Rect({id:t,x:0,y:0,width:s,height:n,fill:this.context.getOptions().header.backgroundColor||this.context.getOptions().primaryColor,name:"header-cell-bg"});a.add(c);let g=this.context.getOptions().header.fontSize;t.startsWith("cell-")&&(this.cellCache.set(t,c),g-=2);const d=new k.Line({points:[s,0,s,n],stroke:o,strokeWidth:1,name:"header-cell-right-border"});a.add(d);const l=new k.Text({x:0,y:0,width:s,height:n,text:r,fontSize:g,fontFamily:this.context.getOptions().header.fontFamily,fontStyle:`${this.context.getOptions().header.fontWeight}`,fill:this.context.getOptions().header.color,align:"center",verticalAlign:"middle",wrap:"none",ellipsis:!0,name:"header-cell-text"});return a.add(l),a}clearHeader(){this.groupHeader.destroyChildren(),this.cellHeader.destroyChildren(),this.cellCache.clear()}destroy(){this.layer.destroy(),this.cellCache.clear()}highlightDate(t){const e=this.context.store.getDataManager().getTaskById(t);e&&e.startTime&&e.endTime&&this.handleHighlight("in",e)}unhighlightDate(t){const e=this.context.store.getDataManager().getTaskById(t);e&&e.startTime&&e.endTime&&this.handleHighlight("out",e)}handleHighlight(t,e){var o,r;if(!this.context.getOptions().highlight||this.context.getOptions().unit!=="day")return;const i=this.cellCache.get(`cell-${(o=e==null?void 0:e.startTime)==null?void 0:o.format("YYYY-MM-DD")}`),s=this.cellCache.get(`cell-${(r=e==null?void 0:e.endTime)==null?void 0:r.format("YYYY-MM-DD")}`),n=this.context.getOptions().header.backgroundColor||this.context.getOptions().primaryColor;n&&(this.cellCache.forEach(a=>{new k.Tween({node:a,fill:n,duration:.02}).play()}),t==="in"&&(i&&new k.Tween({node:i,fill:z(n).brighten(30).toHex(),duration:.02}).play(),s&&new k.Tween({node:s,fill:z(n).brighten(30).toHex(),duration:0}).play()))}}class ke{constructor(t,e){h(this,"verticalLines");h(this,"horizontalLines");h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);h(this,"offsetY",0);this.context=t,this.layer=e,this.verticalLines=new k.Group({name:"vertical-grid-lines"}),this.horizontalLines=new k.Group({name:"horizontal-grid-lines"}),this.layer.add(this.verticalLines),this.layer.add(this.horizontalLines)}resize(t,e){this.width=t,this.height=e,this.clearGrid(),this.calculateGrid()}setOffset(t,e){this.offsetX=t,this.offsetY=e,this.verticalLines.x(t),this.horizontalLines.y(e),this.calculateGrid()}render(){this.layer.batchDraw()}destroy(){this.layer.destroy()}calculateGrid(){this.clearGrid();const t=this.context.getOptions().header.height,e=this.width,i=this.context.store.getTimeAxis().getCellWidth(),s=this.context.getOptions().row.height,n=this.context.store.getDataManager().getVisibleSize(),o=n*s,r=Math.max(0,Math.floor(-this.offsetX/i)-2),a=Math.min(this.context.store.getTimeAxis().getCellCount(),Math.ceil((-this.offsetX+this.width)/i)+2),c=Math.max(0,Math.floor((-this.offsetY+t)/s)-2),g=Math.min(n,Math.ceil((-this.offsetY+this.height)/s)+2);if(this.context.getOptions().border.show&&["day","hour"].includes(this.context.getOptions().unit))for(let d=r;d<=a;d++){const l=d*i,m=new k.Line({points:[l,t,l,o+t],stroke:this.context.getOptions().border.color,strokeWidth:.5,name:"vertical-grid-line"});this.verticalLines.add(m)}for(let d=c;d<=g;d++){const l=d*s+t,m=new k.Line({points:[0,l,Math.max(this.width,e),l],stroke:this.context.getOptions().border.color,strokeWidth:.5,name:"horizontal-grid-line"});this.horizontalLines.add(m)}}clearGrid(){this.verticalLines.destroyChildren(),this.horizontalLines.destroyChildren()}}const At='<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15"><path fill="currentColor" fill-rule="evenodd" d="M5.5 4.625a1.125 1.125 0 1 0 0-2.25a1.125 1.125 0 0 0 0 2.25m4 0a1.125 1.125 0 1 0 0-2.25a1.125 1.125 0 0 0 0 2.25M10.625 7.5a1.125 1.125 0 1 1-2.25 0a1.125 1.125 0 0 1 2.25 0M5.5 8.625a1.125 1.125 0 1 0 0-2.25a1.125 1.125 0 0 0 0 2.25m5.125 2.875a1.125 1.125 0 1 1-2.25 0a1.125 1.125 0 0 1 2.25 0M5.5 12.625a1.125 1.125 0 1 0 0-2.25a1.125 1.125 0 0 0 0 2.25" clip-rule="evenodd"/></svg>';class ve{constructor(t,e,i,s,n){h(this,"offsetX",0);h(this,"offsetY",0);h(this,"sliderGroup");h(this,"slider");h(this,"sliderBar",null);h(this,"sliderType","");h(this,"leftHandleGroup",null);h(this,"rightHandleGroup",null);h(this,"progressGroup",null);h(this,"handlerWidth",10);h(this,"autoMoveTimer",null);h(this,"autoScrollTimer",null);h(this,"autoExpandTimer",null);h(this,"EDGE_THRESHOLD",20);h(this,"SCROLL_STEP",5);h(this,"MOVE_INTERVAL",1e3/60);h(this,"AUTO_EXPAND_INTERVAL",500);h(this,"isDragging",!1);h(this,"draggingDirection","none");h(this,"dragDiffX",0);h(this,"oldTasks",[]);this.context=t,this.x=e,this.y=i,this.task=s,this.rowWidth=n,this.sliderGroup=new k.Group({x:e,y:i,id:`chart-slider-bar-${s.id}`}),this.render(),this.bindEvents(),this.registerEvents()}update(t,e){this.x=t,this.y=e,this.sliderGroup.position({x:t,y:e}),this.render()}setOffset(t,e){this.offsetX=t,this.offsetY=e}unpackFunc(t){return this.context.store.getOptionManager().unpackFunc(t,this.task)}registerEvents(){this.context.event.on(v.SLIDER_BLINK,t=>{t===this.task.id&&this.handleBarBlink()})}render(){var p,u,y,x,T,b,w,L,M,C,S,O,H;if(!this.task.startTime||!this.task.endTime)return;if(this.task.endTime.isBefore(this.task.startTime)){D.error("The endTime of the current task is earlier than the startTime.",this.task);return}const t=this.context.getOptions().row.height,e=tt(this.unpackFunc(this.context.getOptions().bar.height),t),i=(t-e)/2,s=this.context.store.getTimeAxis().getTimeLeft(this.task.startTime),o=this.context.store.getTimeAxis().getTimeLeft(this.task.endTime)-s,r=this.unpackFunc(this.context.getOptions().bar.backgroundColor)||this.context.getOptions().primaryColor,a=et(this.unpackFunc(this.context.getOptions().bar.radius)),c=this.unpackFunc(this.context.getOptions().bar.shadowColor)||"rgba(0, 0, 0, 0.2)",g=this.unpackFunc(this.context.getOptions().bar.shadowBlur)||0,d=this.unpackFunc(this.context.getOptions().bar.shadowOffsetX)||0,l=this.unpackFunc(this.context.getOptions().bar.shadowOffsetY)||0;this.slider||(this.slider=new k.Group({dragBoundFunc:I=>{let _=Math.min(0,-(-this.offsetX-this.slider.x()));const R=this.context.store.getTimeAxis().getTimeLeft(this.task.endTime);let $=this.sliderGroup.getStage().width()-this.slider.width()+Math.abs(R-(-this.offsetX+this.sliderGroup.getStage().width()));if(this.context.getOptions().bar.move.link.parent==="strict"&&this.task.parent){if(this.task.parent.startTime){const W=this.task.parent.startTime;_=this.context.store.getTimeAxis().getTimeLeft(W)}if(this.task.parent.endTime){const W=this.task.parent.endTime,B=this.context.store.getTimeAxis().getTimeLeft(W);$=Math.abs(B-this.slider.width())}}return{x:F(I.x,_,$),y:this.y+i+this.offsetY}}})),this.slider.position({x:s,y:i}),this.slider.size({width:o,height:e});const m=!!this.unpackFunc(this.context.getOptions().bar.move.enabled)&&(this.task.isSummary()?this.context.getOptions().summary.move.enabled:!0);if(this.slider.draggable(m),this.slider.on("mouseover",I=>{m&&!this.isDragging&&(I.target.getStage().container().style.cursor="grab"),this.handleBarHighlight({shadowColor:z(c).alpha(z(c).alpha()+.1).toHex(),shadowBlur:Math.max((g||1)*2,4),shadowOffsetX:Math.max(d||1,2),shadowOffsetY:Math.max((l||1)*1.5,4)}),this.context.event.emit(v.SLIDER_ENTER,I.evt,this.task)}),this.slider.on("mousemove",I=>{this.context.event.emit(v.SLIDER_HOVER,I.evt,this.task)}),this.slider.on("mouseout",I=>{m&&!this.isDragging&&(I.target.getStage().container().style.cursor="default"),this.isDragging||this.handleBarHighlight({shadowColor:c,shadowBlur:g,shadowOffsetX:d,shadowOffsetY:l}),this.context.event.emit(v.SLIDER_LEAVE,I.evt,this.task)}),this.task.isMilestone()){this.sliderBar&&!this.sliderType.startsWith("milestone")&&(this.slider.destroyChildren(),this.sliderBar=null,this.progressGroup=null,this.leftHandleGroup=null,this.rightHandleGroup=null);const I=this.unpackFunc(this.context.getOptions().milestone.size),_=Math.min(I||e,t/2),R=this.unpackFunc(this.context.getOptions().milestone.color)||r,$=this.unpackFunc(this.context.getOptions().milestone.border.color),G=this.unpackFunc(this.context.getOptions().milestone.border.width),W=this.unpackFunc(this.context.getOptions().milestone.shape);if(!this.sliderBar){switch(W){case"triangle":this.sliderBar=new k.RegularPolygon({sides:3,radius:_,rotation:0,fill:R,stroke:$,strokeWidth:G,y:_/3*2});break;case"circle":this.sliderBar=new k.Circle({radius:_,fill:R,stroke:$,strokeWidth:G,y:_/2});break;case"star":this.sliderBar=new k.Star({numPoints:5,innerRadius:_/2,outerRadius:_,fill:R,stroke:$,strokeWidth:G,y:_/2});break;case"diamond":default:this.sliderBar=new k.RegularPolygon({sides:4,radius:_,rotation:0,fill:R,stroke:$,strokeWidth:G,y:_/2})}if(this.slider.add(this.sliderBar),this.unpackFunc(this.context.getOptions().milestone.label.show)){const B=this.unpackFunc(this.context.getOptions().milestone.label.text),Y=this.unpackFunc(this.context.getOptions().milestone.label.position),j=this.unpackFunc(this.context.getOptions().milestone.label.fontSize),Ne=this.unpackFunc(this.context.getOptions().milestone.label.fontFamily),Pe=this.unpackFunc(this.context.getOptions().milestone.label.color),st=new k.Text({height:e,text:B,fill:Pe||R,fontSize:j,fontFamily:Ne}),gt=st.measureSize(B);st.width(gt.width);const q={x:0,y:0};switch(Y){case"top-left":q.x=-(12+gt.width),q.y=-8;break;case"bottom-left":q.x=-(12+gt.width),q.y=10;break;case"bottom-right":q.x=12,q.y=10;break;case"top-right":default:q.x=12,q.y=-8;break}st.setAttrs(q),this.slider.add(st)}}this.sliderType="milestone"}else if(this.task.isSummary()&&(this.context.getOptions().summary.mode==="always"||this.task.expanded)){this.sliderBar&&this.sliderType!=="summary"&&(this.slider.destroyChildren(),this.sliderBar=null,this.progressGroup=null,this.leftHandleGroup=null,this.rightHandleGroup=null);const I=this.unpackFunc(this.context.getOptions().summary.color)||r,_=t*.2,R=t*.3,$=G=>new k.Shape({sceneFunc:(W,B)=>{const Y=R*.5;W.beginPath(),W.moveTo(0,(t-_)/2),W.lineTo(Y,(t-_)/2),W.lineTo(Y,(t-_)/2+_),W.lineTo(0,(t-_)/2+_+R),W.lineTo(0,(t-_)/2),W.rect(Y,(t-_)/2,G-2*Y,_),W.moveTo(G-Y,(t-_)/2),W.lineTo(G,(t-_)/2),W.lineTo(G,(t-_)/2+_+R),W.lineTo(G-Y,(t-_)/2+_),W.lineTo(G-Y,(t-_)/2),W.fillStrokeShape(B)},width:G,fill:I,shadowColor:c,shadowBlur:g,shadowOffsetX:d,shadowOffsetY:l,y:-(R+_)/2-i/2});!this.sliderBar||this.sliderBar.width()!==o?(this.sliderBar&&this.sliderBar.destroy(),this.sliderBar=$(o),this.slider.add(this.sliderBar)):this.sliderBar.setAttrs({fill:I,shadowColor:c,shadowBlur:g,shadowOffsetX:d,shadowOffsetY:l}),this.sliderType="summary"}else{this.sliderBar&&this.sliderType!=="bar"&&(this.slider.destroyChildren(),this.sliderBar=null),this.sliderBar||(this.sliderBar=new k.Rect({x:0,y:0}),this.slider.add(this.sliderBar),this.sliderType="bar"),this.sliderBar.setAttrs({width:o,height:e,fill:r,cornerRadius:a}),this.renderProgress(o,e);const I=(p=this.context.getOptions().bar.move.single)==null?void 0:p.icon,_=(u=this.context.getOptions().bar.move.single)==null?void 0:u.backgroundColor,R=_?z(_).alpha(((y=this.context.getOptions().bar.move.single)==null?void 0:y.opacity)??1).toHex():z(r).brighten(30*(this.unpackFunc((x=this.context.getOptions().bar.progress)==null?void 0:x.show)?-1:1)).alpha(((T=this.context.getOptions().bar.move.single)==null?void 0:T.opacity)??1).toHex();if(!!this.unpackFunc((b=this.context.getOptions().bar.move.single)==null?void 0:b.left)){if(!this.leftHandleGroup){this.leftHandleGroup=new k.Group({x:0,y:0,opacity:0}),this.slider.add(this.leftHandleGroup),this.leftHandleGroup.on("mousedown",B=>{this.resizeMove(B,"left")}),this.leftHandleGroup.on("mouseover",B=>{setTimeout(()=>{B.target.getStage().container().style.cursor="ew-resize"},0)}),this.leftHandleGroup.on("mouseout",B=>{this.isDragging||(B.target.getStage().container().style.cursor="default")});const W=new k.Rect({x:0,y:0});this.leftHandleGroup.add(W),I!==null&&pt(I||At,this.handlerWidth,e).then(B=>{var j;const Y=new k.Image({image:B,x:0,y:(e-this.handlerWidth)/2,width:this.handlerWidth,height:this.handlerWidth});(j=this.leftHandleGroup)==null||j.add(Y)})}(w=this.leftHandleGroup.findOne("Rect"))==null||w.setAttrs({width:this.handlerWidth,height:e,fill:R,cornerRadius:[a[0],0,0,a[3]]}),(L=this.leftHandleGroup.findOne("Image"))==null||L.setAttrs({x:0,y:(e-this.handlerWidth)/2,width:this.handlerWidth,height:this.handlerWidth})}else this.leftHandleGroup&&(this.leftHandleGroup.remove(),this.leftHandleGroup=null);if(!!this.unpackFunc((M=this.context.getOptions().bar.move.single)==null?void 0:M.right)){if(!this.rightHandleGroup){this.rightHandleGroup=new k.Group({x:0,y:0,opacity:0}),this.slider.add(this.rightHandleGroup),this.rightHandleGroup.on("mousedown",B=>{this.resizeMove(B,"right")}),this.rightHandleGroup.on("mouseover",B=>{setTimeout(()=>{B.target.getStage().container().style.cursor="ew-resize"},0)}),this.rightHandleGroup.on("mouseout",B=>{this.isDragging||(B.target.getStage().container().style.cursor="default")});const W=new k.Rect({x:0,y:0});this.rightHandleGroup.add(W),I!==null&&pt(I||At,this.handlerWidth,e).then(B=>{var j;const Y=new k.Image({image:B,x:o-this.handlerWidth,y:(e-this.handlerWidth)/2,width:this.handlerWidth,height:this.handlerWidth});(j=this.rightHandleGroup)==null||j.add(Y)})}(C=this.rightHandleGroup.findOne("Rect"))==null||C.setAttrs({x:o-this.handlerWidth,width:this.handlerWidth,height:e,fill:R,cornerRadius:[0,a[1],a[2],0]}),(S=this.rightHandleGroup.findOne("Image"))==null||S.setAttrs({x:o-this.handlerWidth,y:(e-this.handlerWidth)/2,width:this.handlerWidth,height:this.handlerWidth})}else this.rightHandleGroup&&(this.rightHandleGroup.remove(),this.rightHandleGroup=null);this.renderText(o,e),(O=this.leftHandleGroup)==null||O.moveToTop(),(H=this.rightHandleGroup)==null||H.moveToTop()}this.isDragging||this.sliderBar.setAttrs({shadowColor:c,shadowBlur:g,shadowOffsetX:d,shadowOffsetY:l}),this.sliderGroup.add(this.slider),this.unpackFunc(this.context.getOptions().bar.show)===!1?this.sliderGroup.hide():this.sliderGroup.show()}renderText(t,e){const i=`chart-slider-text-${this.task.id}`,s=()=>{this.slider.find(`#${i}`)&&this.slider.find(`#${i}`).forEach(a=>a.remove())};if(!this.context.getOptions().bar.field&&!this.context.getOptions().bar.label){s();return}const n=this.context.getOptions().bar.label;let o="";n?o=this.unpackFunc(n):this.context.getOptions().bar.field&&(o=this.task.getField(this.context.getOptions().bar.field)),s();const r=t-(this.leftHandleGroup?this.handlerWidth:0)-(this.rightHandleGroup?this.handlerWidth:0);if(r>20){const a=new k.Text({id:i,x:this.leftHandleGroup?10:0,y:0,width:r,height:e,padding:10,text:o,fill:this.unpackFunc(this.context.getOptions().bar.color)||"#000",fontSize:this.unpackFunc(this.context.getOptions().bar.fontSize)||12,fontFamily:this.unpackFunc(this.context.getOptions().bar.fontFamily)||"Arial",align:this.unpackFunc(this.context.getOptions().bar.align),verticalAlign:this.unpackFunc(this.context.getOptions().bar.verticalAlign)||"middle",ellipsis:!0});this.slider.add(a)}}renderProgress(t,e){var i,s,n,o,r,a,c,g,d,l,m,p;if(!this.unpackFunc((i=this.context.getOptions().bar.progress)==null?void 0:i.show)){this.progressGroup&&(this.progressGroup.destroy(),this.progressGroup=null);return}if(this.task.progress){const u=Wt(this.task.progress,((s=this.context.getOptions().bar.progress)==null?void 0:s.targetVal)??100);if(u===0)return;const y=this.unpackFunc(this.context.getOptions().bar.backgroundColor)||this.context.getOptions().primaryColor,x=this.unpackFunc((n=this.context.getOptions().bar.progress)==null?void 0:n.backgroundColor)||z(y).brighten(((o=this.context.getOptions().bar.progress)==null?void 0:o.amount)||30).toHex(),T=et(this.unpackFunc(this.context.getOptions().bar.radius)),b=et(this.unpackFunc((r=this.context.getOptions().bar.progress)==null?void 0:r.radius),2);b[0]=T[0],b[3]=T[3],u===1&&(b[1]=T[1],b[2]=T[2]);const w=t*u;this.progressGroup?(this.progressGroup.width(w),this.progressGroup.destroyChildren()):(this.progressGroup=new k.Group({x:0,y:0,width:w,height:e,listening:!1}),this.slider.add(this.progressGroup));const L=new k.Rect({x:0,y:0,width:w,height:e,fill:x,cornerRadius:b,opacity:this.unpackFunc((a=this.context.getOptions().bar.progress)==null?void 0:a.opacity)});this.progressGroup.add(L);const M=`${rt(u*100,(c=this.context.getOptions().bar.progress)==null?void 0:c.decimal)}%`,C=new k.Text().measureSize(M).width,S=this.unpackFunc((g=this.context.getOptions().bar.progress)==null?void 0:g.textAlign),O=new k.Text({x:0,y:S==="top"?-e:0,width:S==="right"?w+C:Math.max(w,C),height:e,fill:this.unpackFunc((d=this.context.getOptions().bar.progress)==null?void 0:d.color)||z("#000000").mix(x,50).alpha(.7).toHex(),text:M,fontSize:this.unpackFunc((l=this.context.getOptions().bar.progress)==null?void 0:l.fontSize)||10,fontStyle:this.unpackFunc((m=this.context.getOptions().bar.progress)==null?void 0:m.fontStyle)||"italic",fontFamily:"Arial",verticalAlign:S==="top"?"bottom":"middle",align:"right"});(p=this.progressGroup)==null||p.add(O)}}bindEvents(){this.slider&&(this.slider.on("dragstart",t=>this.handleDragStart(t)),this.slider.on("dragend",t=>this.handleDragEnd(t)),this.slider.on("dragmove",t=>this.handleDragMove(t)),this.slider.on("mouseover",()=>this.handleMouseEnter()),this.slider.on("mouseout",()=>this.handleMouseLeave()),this.slider.on("mousedown",t=>{if(t.evt.button!==0)return;const e=t.target.getStage();e&&this.slider.draggable()&&(e.container().style.cursor="grabbing")}),this.slider.on("mouseup",t=>{if(t.evt.button!==0)return;const e=t.target.getStage();e&&this.slider.draggable()&&(e.container().style.cursor="grab")}),this.slider.on("click",t=>{t.evt.button===0&&(t.cancelBubble=!0,this.isDragging=!1,this.context.event.emit(v.SLIDER_CLICK,t.evt,this.task))}),this.slider.on("contextmenu",t=>{t.cancelBubble=!0,t.evt.stopPropagation(),t.evt.preventDefault(),this.context.event.emit(v.SLIDER_CONTEXTMENU,t.evt,this.task)}),this.slider.on("dblclick",t=>{t.evt.button===0&&(t.cancelBubble=!0,this.context.event.emit(v.SLIDER_DBL_CLICK,t.evt,this.task))}))}emitUpdate(t){let e=this.task.startTime.clone(),i=this.task.endTime.clone();t!=="right"&&(e=this.context.store.getTimeAxis().getTimeByLeft(this.slider.x())),t!=="left"&&(i=this.context.store.getTimeAxis().getTimeByLeft(this.slider.x()+this.slider.width())),(!(e!=null&&e.isSame(this.task.startTime))||!(i!=null&&i.isSame(this.task.endTime)))&&this.context.store.getDataManager().updateTaskTime(this.task,e,i,t,this.oldTasks)}handleDragStart(t){const e=t.target.getStage();if(!e)return;this.isDragging=!0,this.oldTasks=[],this.context.event.emit(v.SLIDER_DRAGGING,!0),e.container().style.cursor="grabbing";const i=t.target.x(),s=this.context.store.getTimeAxis().getCellWidth(),n=ot(i,s);this.dragDiffX=n-i,this.handleMove(t,e)}handleDragMove(t){if(!this.isDragging)return;if(t.evt.movementX>0?this.draggingDirection!=="right"&&(this.draggingDirection="right",this.stopAutoScroll(),this.stopAutoExpand()):t.evt.movementX<0&&this.draggingDirection!=="left"&&(this.draggingDirection="left",this.stopAutoScroll(),this.stopAutoExpand()),!!this.context.getOptions().bar.move.byUnit){const i=t.target.x(),s=this.context.store.getTimeAxis().getCellWidth(),n=ot(i,s);t.target.x(n-this.dragDiffX)}}handleDragEnd(t){this.stopAutoMove(),this.stopAutoScroll(),this.stopAutoExpand(),this.isDragging=!1,this.dragDiffX=0,this.draggingDirection="none",this.oldTasks.length>0&&(this.context.event.emit(v.TASK_DRAG_END,this.task,this.oldTasks),this.oldTasks=[]);const e=t.target.getStage();if(e){const i=e.getPointerPosition();if(i){const s=this.context.getOptions().row.height,n=this.y+this.offsetY,o=n+s;if(i.y<n||i.y>o){const r=this.unpackFunc(this.context.getOptions().bar.shadowColor)||"rgba(0, 0, 0, 0.2)",a=this.unpackFunc(this.context.getOptions().bar.shadowBlur)||0,c=this.unpackFunc(this.context.getOptions().bar.shadowOffsetX)||0,g=this.unpackFunc(this.context.getOptions().bar.shadowOffsetY)||0;this.handleBarHighlight({shadowColor:r,shadowBlur:a,shadowOffsetX:c,shadowOffsetY:g}),this.handleResizeHighlight(0),e.container().style.cursor="default"}}}this.context.event.emit(v.SLIDER_DRAGGING,!1)}handleMove(t,e){const i=e.width(),s=!!this.context.getOptions().bar.move.lock,n=!!this.context.getOptions().bar.move.byUnit,o=this.context.store.getTimeAxis().getCellWidth(),r=t.target.width(),a=t.target.x(),c=a+r,g=Math.max(0,-this.offsetX-a),d=Math.max(0,c-(-this.offsetX+i));this.autoMoveTimer=window.setInterval(()=>{const l=t.target.width(),m=t.target.x(),p=m+l,u=-this.offsetX,y=u+i,x=this.context.store.getTimeAxis().getTotalWidth(),T=m<=u+this.EDGE_THRESHOLD,b=p>=y-this.EDGE_THRESHOLD;if(T)if(u<=0)this.draggingDirection==="left"&&t.target.x(-g),this.stopAutoScroll(),s||(this.draggingDirection==="left"?this.startAutoExpand("left",-g):this.stopAutoExpand());else if(this.draggingDirection==="left"){const w=n?-o:-this.SCROLL_STEP;this.startAutoScroll(w,n,()=>{t.target.x(t.target.x()+w)},()=>t.target.x(t.target.x()-g))}else this.stopAutoScroll();else if(b)if(y>=x)this.draggingDirection==="right"&&t.target.x(x-l+d),this.stopAutoScroll(),s||(this.draggingDirection==="right"?this.startAutoExpand("right",0,d):this.stopAutoExpand());else if(this.draggingDirection==="right"){const w=n?o:this.SCROLL_STEP;this.startAutoScroll(w,n,()=>{t.target.x(t.target.x()+w)})}else this.stopAutoScroll();else this.stopAutoExpand(),this.stopAutoScroll();this.emitUpdate("both")},this.MOVE_INTERVAL)}resizeMove(t,e){var y;t.cancelBubble=!0;const i=t.target.getStage();if(!i)return;this.isDragging=!0,this.context.event.emit(v.SLIDER_DRAGGING,!0);let s=((y=i.getPointerPosition())==null?void 0:y.x)||0;const n=!!this.context.getOptions().bar.move.byUnit,o=this.context.store.getTimeAxis().getCellWidth(),r=!!this.context.getOptions().bar.move.lock,a=i.width();let c=0,g=0;this.autoMoveTimer=window.setInterval(()=>{const x=this.slider.width(),T=this.slider.x(),b=T+x,w=-this.offsetX,L=w+a,M=T<=w+this.EDGE_THRESHOLD,C=b>=L-this.EDGE_THRESHOLD;if(M&&e==="left"){if(w<=0)this.slider.x(0),this.stopAutoScroll(),r||(this.draggingDirection==="left"?this.startAutoExpand("left"):this.stopAutoExpand());else if(this.draggingDirection==="left"){const S=n?-o:-this.SCROLL_STEP;this.startAutoScroll(S,n,()=>{c+=S,this.slider.x(this.slider.x()+S)})}else this.stopAutoScroll();this.emitUpdate("left")}else if(C&&e==="right"){if(L>=this.context.store.getTimeAxis().getTotalWidth())this.slider.width(this.context.store.getTimeAxis().getTotalWidth()-this.slider.x()),this.stopAutoScroll(),r||(this.draggingDirection==="right"?this.startAutoExpand("right"):this.stopAutoExpand());else if(this.draggingDirection==="right"){const S=n?o:this.SCROLL_STEP;this.startAutoScroll(S,n,()=>{g+=S,this.slider.x(this.slider.x()+S)})}else this.stopAutoScroll();this.emitUpdate("right")}else if(e==="right"&&T<=w&&b<=w+this.EDGE_THRESHOLD+o){const S=n?-o:-this.SCROLL_STEP;this.startAutoScroll(S,n,()=>{g+=S,this.slider.width(Math.max(this.slider.width(),o)),this.slider.width()>o&&this.slider.x(this.slider.x()+S),this.emitUpdate("right")})}else if(e==="left"&&b>=L&&T>=L-this.EDGE_THRESHOLD-o){const S=n?o:this.SCROLL_STEP;this.startAutoScroll(S,n,()=>{c+=S,this.slider.width(Math.max(this.slider.width(),o)),this.slider.width()>o&&this.slider.x(this.slider.x()+S),this.emitUpdate("left")})}else this.stopAutoExpand(),this.stopAutoScroll()},this.MOVE_INTERVAL);let d;const l=this.slider.x(),m=this.slider.width(),p=x=>{var w;x.movementX>0?this.draggingDirection="right":x.movementX<0&&(this.draggingDirection="left");const T=Math.max(((w=i.getPointerPosition())==null?void 0:w.x)||0,0);let b=T-s;n&&(b=ot(b,o)),(d===void 0||d!==b)&&(e==="left"?m-b-c>=o&&T<a-this.EDGE_THRESHOLD&&(this.slider.width(m-b-c),this.slider.x(l+b+c),this.emitUpdate("left")):m+b+g>=o&&T>this.EDGE_THRESHOLD&&(this.slider.width(m+b+g),this.emitUpdate("right")),d=b)},u=()=>{this.handleDragEnd(t),document.removeEventListener("mousemove",p),document.removeEventListener("mouseup",u)};document.addEventListener("mousemove",p),document.addEventListener("mouseup",u)}startAutoExpand(t,e=0,i=0){if(this.autoExpandTimer)return;const s=this.context.store.getTimeAxis();this.autoExpandTimer=window.setInterval(()=>{s.expand(t,1),this.context.event.emit(v.CHART_OFFSET_CHANGE),t==="left"&&this.slider.x(e)},this.AUTO_EXPAND_INTERVAL)}startAutoScroll(t,e,i,s){if(this.autoScrollTimer)return;const n=this.context.getScrollbar();n&&(s&&(s==null||s()),this.autoScrollTimer=window.setInterval(()=>{const o=n.getScrollPosition();n.scrollTo({x:o.x+t,y:o.y},"drag"),i==null||i()},e?300:this.MOVE_INTERVAL))}stopAutoMove(){this.autoMoveTimer&&(clearInterval(this.autoMoveTimer),this.autoMoveTimer=null)}stopAutoScroll(){this.autoScrollTimer&&(clearInterval(this.autoScrollTimer),this.autoScrollTimer=null)}stopAutoExpand(){this.autoExpandTimer&&(clearInterval(this.autoExpandTimer),this.autoExpandTimer=null)}handleMouseEnter(){this.handleResizeHighlight(1)}handleMouseLeave(){this.isDragging||this.handleResizeHighlight(0)}handleResizeHighlight(t){this.leftHandleGroup&&new k.Tween({node:this.leftHandleGroup,opacity:t,duration:.2}).play(),this.rightHandleGroup&&new k.Tween({node:this.rightHandleGroup,opacity:t,duration:.2}).play()}handleBarHighlight(t){this.sliderBar&&new k.Tween({...t,node:this.sliderBar,duration:.2}).play()}handleBarBlink(){if(!this.sliderGroup)return;const t=this.sliderGroup.opacity(),e=500,s=e*2,n=new k.Animation(o=>{if(!this.sliderGroup||!o)return;const r=o.time;if(r>=s){this.sliderGroup.opacity(t),n.stop();return}const a=r%e/e;let c;a<.5?c=t*(1-a*2):c=t*((a-.5)*2),this.sliderGroup.opacity(Math.max(0,Math.min(t,c)))},this.sliderGroup.getLayer());n.start()}}class Ce{constructor(t,e,i,s,n,o,r){h(this,"row");h(this,"slider");h(this,"cacheKey","");this.context=t,this.task=e,this.width=o,this.height=r,this.row=new k.Group;const a=new k.Rect({x:s,y:n,width:o,height:r,id:i,listening:!1});this.row.add(a),this.slider=new ve(this.context,0,n,this.task,this.width),this.row.add(this.slider.sliderGroup)}update(t,e){this.slider.update(t,e)}setOffset(t,e){this.slider.setOffset(t,e)}destroy(){this.row.destroy()}}class Le{constructor(t,e,i,s){h(this,"tasks",[]);h(this,"rowsGroup");h(this,"rowsCache",new Map);h(this,"rowBgGroup");h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);h(this,"offsetY",0);h(this,"highlightedRowId",null);h(this,"highlightRect",null);h(this,"selectedRowId",null);h(this,"selectedRect",null);this.context=t,this.stage=e,this.layer=i,this.bgLayer=s,this.rowsGroup=new k.Group({name:"chart-body-rows"}),this.layer.add(this.rowsGroup),this.rowBgGroup=new k.Group({name:"chart-body-row-bgs"}),this.bgLayer.add(this.rowBgGroup),this.registerEvents(),this.bindEvents()}resize(t,e){this.width=t,this.height=e}setOffset(t,e){const i=e-this.offsetY;this.offsetX=t,this.offsetY=e,this.rowsGroup.x(t),this.rowsGroup.y(e),this.updateHighlightPosition(i),this.updateSelectedPosition(i)}render(t){this.tasks=t;const e=this.context.getOptions().row.height,i=Q();this.rowBgGroup.destroyChildren(),this.tasks.forEach((s,n)=>{const o=`chart-row-${s.id}`;let r=this.rowsCache.get(o);const c=s.flatIndex*e+this.context.getOptions().header.height;r?(r.update(0,c),r.setOffset(this.offsetX,this.offsetY)):(r=new Ce(this.context,s,o,0,c,this.width,e),r.setOffset(this.offsetX,this.offsetY),this.rowsGroup.add(r.row),this.rowsCache.set(o,r)),r.cacheKey=i,this.context.store.getDataManager().isTaskSelected(s.id)&&this.selectRow(s.id);const g=new k.Rect({x:0,y:c+this.offsetY,width:this.width,height:e,fill:this.context.store.getOptionManager().getRowBackgroundColor(s),id:`chart-row-bg-${s.id}`,listening:!1});this.rowBgGroup.add(g),this.rowBgGroup.moveToBottom()}),this.rowsCache.forEach((s,n)=>{s.cacheKey!==i&&(s.destroy(),this.rowsCache.delete(n))}),this.layer.batchDraw()}updateTask(t){const e=this.rowsCache.get(`chart-row-${t.id}`);e&&e.update(0,t.flatIndex*this.context.getOptions().row.height+this.context.getOptions().header.height)}bindEvents(){this.stage.on("mousemove",this.handleMouseMove.bind(this)),this.stage.on("mouseleave",this.handleMouseLeave.bind(this)),this.stage.on("click",this.handleClick.bind(this)),this.stage.on("dblclick",this.handleDblClick.bind(this)),this.stage.on("contextmenu",this.handleContextMenu.bind(this))}registerEvents(){this.context.event.on(v.ROW_HIGHLIGHT,t=>{this.highlightRow(t)}),this.context.event.on(v.ROW_UNHIGHLIGHT,t=>{this.unhighlightRow(t)}),this.context.event.on(v.TASK_SELECTED,t=>{this.selectRow(t.id)}),this.context.event.on(v.TASK_UNSELECTED,t=>{this.unselectRow(t)})}handleMouseMove(t){const e=this.stage.getPointerPosition();if(!e)return;const i=this.getTaskByPosition(e);this.highlightedRowId&&i&&i.id!==this.highlightedRowId&&this.context.event.emit(v.ROW_UNHIGHLIGHT,this.highlightedRowId),i&&this.context.event.emit(v.ROW_HIGHLIGHT,i.id)}handleMouseLeave(t){this.unhighlightRow()}handleClick(t){if(t.evt.button!==0)return;const e=this.stage.getPointerPosition();if(!e)return;const i=this.getTaskByPosition(e);i&&(this.context.store.getDataManager().isTaskSelected(i.id)||this.context.store.getDataManager().selectTask(i.id),this.context.event.emit(v.ROW_CLICK,t.evt,i))}handleDblClick(t){if(t.evt.button!==0)return;const e=this.stage.getPointerPosition();if(!e)return;const i=this.getTaskByPosition(e);i&&this.context.event.emit(v.ROW_DBL_CLICK,t.evt,i)}handleContextMenu(t){if(t.evt.button!==2)return;t.evt.preventDefault(),t.cancelBubble=!0;const e=this.stage.getPointerPosition();if(!e)return;const i=this.getTaskByPosition(e);i&&this.context.event.emit(v.ROW_CONTEXTMENU,t.evt,i)}getTaskByPosition(t){const e=this.context.getOptions().header.height;if(t.y<=e)return null;const i=t.y-this.offsetY,s=Math.floor((i-e)/this.context.getOptions().row.height);return this.context.store.getDataManager().getVisibleTasks()[s]||null}highlightRow(t){if(this.highlightedRowId===t||(this.highlightedRowId=t,!this.rowsCache.get(`chart-row-${t}`)))return;this.highlightRect&&this.highlightRect.destroy();const i=this.context.store.getDataManager().getTaskById(t);if(i){const n=i.flatIndex*this.context.getOptions().row.height+this.context.getOptions().header.height;if(this.selectedRowId===t)return;this.highlightRect=new k.Rect({x:0,y:n+this.offsetY,width:this.width,height:this.context.getOptions().row.height,fill:z(this.context.getOptions().row.hover.backgroundColor).alpha(this.context.getOptions().row.hover.opacity).toHex(),name:"highlight-rect"}),this.layer.add(this.highlightRect),this.highlightRect.moveToBottom(),this.layer.batchDraw()}}unhighlightRow(t){this.highlightedRowId===t&&(this.highlightedRowId=null,this.highlightRect&&(this.highlightRect.destroy(),this.highlightRect=null,this.layer.batchDraw()))}updateHighlightPosition(t){if(!this.highlightRect||this.highlightedRowId===null)return;const e=this.rowsCache.get(`chart-row-${this.highlightedRowId}`);if(!e){this.clearHighlight();return}if(t)this.highlightRect.y(this.highlightRect.y()+t);else{const i=this.context.store.getDataManager().getTaskById(e.task.id);if(!i){this.clearHighlight();return}const n=i.flatIndex*this.context.getOptions().row.height+this.context.getOptions().header.height;this.highlightRect.y(n+this.offsetY)}this.layer.batchDraw()}clearHighlight(){this.highlightRect&&(this.highlightRect.destroy(),this.highlightRect=null),this.highlightedRowId=null}selectRow(t){var o;if(this.selectedRowId=t,!this.rowsCache.get(`chart-row-${t}`))return;this.selectedRect&&this.selectedRect.destroy(),this.selectedRowId===this.highlightedRowId&&((o=this.highlightRect)==null||o.fill("transparent"));const i=this.context.store.getDataManager().getTaskById(t);if(!i)return;const n=i.flatIndex*this.context.getOptions().row.height+this.context.getOptions().header.height;this.selectedRect=new k.Rect({x:0,y:n+this.offsetY,width:this.width,height:this.context.getOptions().row.height,fill:z(this.context.getOptions().row.select.backgroundColor).alpha(this.context.getOptions().row.select.opacity).toHex(),name:"selected-rect"}),this.layer.add(this.selectedRect),this.selectedRect.moveToBottom(),this.layer.batchDraw()}unselectRow(t){this.selectedRowId===t&&(this.selectedRowId=null,this.selectedRect&&(this.selectedRect.destroy(),this.selectedRect=null,this.layer.batchDraw()))}updateSelectedPosition(t){if(!this.selectedRect||this.selectedRowId===null)return;const e=this.rowsCache.get(`chart-row-${this.selectedRowId}`);if(e)if(this.context.store.getDataManager().isTaskVisible(e.task)){const s=e.task.flatIndex*this.context.getOptions().row.height+this.context.getOptions().header.height;this.selectedRect.y(s+this.offsetY),this.layer.batchDraw()}else this.selectedRect.destroy(),this.selectedRect=null,this.selectedRowId=null}destroy(){this.rowsCache.clear(),this.rowsGroup.destroy(),this.rowBgGroup.destroy()}}class It{constructor(){}static async createPattern(t){if(!(t!=null&&t.pattern))return null;const e=t.patternOptions||{};switch(e.color=e.color||t.backgroundColor,t.pattern){case"stripe":return this.createStripePattern(e);case"dot":return this.createDotPattern(e);case"grid":return this.createGridPattern(e);case"custom":if(e.image){const i=new Image;return i.src=e.image,new Promise(s=>{i.onload=()=>s(i)})}return null;default:return null}}static createStripePattern(t){const{color:e=(t==null?void 0:t.color)||"#c9c9c9",width:i=(t==null?void 0:t.width)||1,angle:s=(t==null?void 0:t.angle)??30,spacing:n=(t==null?void 0:t.spacing)||10}=t||{},o=s%180,r=o*Math.PI/180;let a,c;o===0?(a=n,c=i+n):o===90?(a=i+n,c=n):(a=Math.abs(Math.ceil((i+n)/Math.sin(r))),c=Math.abs(Math.ceil((i+n)/Math.cos(r))));const g=new k.Stage({container:document.createElement("div"),width:a,height:c}),d=new k.Layer;g.add(d);const l=new k.Group;if(o===0||o===90){const p=new k.Line({points:[0,0,o===0?a:0,o===0?0:c],stroke:e,strokeWidth:i,perfectDrawEnabled:!0});l.add(p)}else for(let p=-a;p<a*2;p+=a){const u=p+i/2,y=0,x=p+i/2+(Math.cos(r)<0?-a:a),T=c,b=new k.Line({points:[Math.ceil(u),Math.ceil(y),Math.ceil(x),Math.ceil(T)],stroke:e,strokeWidth:i,perfectDrawEnabled:!0,lineCap:"square",lineJoin:"miter"});l.add(b)}d.add(l),d.draw();const m=new Image;return m.src=g.toDataURL(),g.destroy(),m}static createDotPattern(t){const{color:e=(t==null?void 0:t.color)||"#f9f9f9",width:i=(t==null?void 0:t.width)||2,spacing:s=(t==null?void 0:t.spacing)||4}=t||{},n=i*2+s*2,o=n,r=z(e),a=new k.Stage({container:document.createElement("div"),width:n,height:o}),c=new k.Layer;a.add(c),[{x:s/2+i/2,y:s/2+i/2},{x:n-s/2-i/2,y:s/2+i/2},{x:s/2+i/2,y:o-s/2-i/2},{x:n-s/2-i/2,y:o-s/2-i/2}].forEach(l=>{const m=new k.Circle({x:l.x,y:l.y,radius:i/2,fill:r.toString()});c.add(m)}),c.draw();const d=new Image;return d.src=a.toDataURL(),a.destroy(),d}static createGridPattern(t){const{color:e=(t==null?void 0:t.color)||"#f9f9f9",width:i=(t==null?void 0:t.width)||1,spacing:s=(t==null?void 0:t.spacing)||20}=t||{},n=i+s,o=n,r=n,a=new k.Stage({container:document.createElement("div"),width:o,height:r}),c=new k.Layer;a.add(c);const g=new k.Group;g.add(new k.Line({points:[0,0,o,r],stroke:e,strokeWidth:i,perfectDrawEnabled:!0})),g.add(new k.Line({points:[0,r,o,0],stroke:e,strokeWidth:i,perfectDrawEnabled:!0})),c.add(g),c.draw();const d=new Image;return d.src=a.toDataURL(),a.destroy(),d}}class Me{constructor(t,e){h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);h(this,"offsetY",0);h(this,"weekendGroup");h(this,"patternImage",null);this.context=t,this.layer=e,this.weekendGroup=new k.Group,this.layer.add(this.weekendGroup)}isWeekend(t){return t.day()===6||t.day()===0}resize(t,e){this.width=t,this.height=e,this.calculateWeekend()}setOffset(t,e){this.offsetX=t,this.offsetY=e,this.weekendGroup.x(t),this.weekendGroup.y(e),this.calculateWeekend()}render(){this.layer.batchDraw()}destroy(){this.weekendGroup.destroy(),this.patternImage=null}clearWeekend(){this.weekendGroup.destroyChildren(),this.patternImage=null}async calculateWeekend(){if(this.clearWeekend(),!this.context.getOptions().weekend.show)return;const t=this.context.store.getTimeAxis().getStartTime(),e=this.context.store.getTimeAxis().getEndTime(),i=this.context.store.getTimeAxis().getCellUnit(),s=this.context.store.getTimeAxis().getCellWidth(),n=this.context.getOptions().header.height,o=this.context.getOptions().row.height,a=this.context.store.getDataManager().getVisibleSize()*o,c=Math.max(0,-this.offsetX),g=c+this.width;for(let d=t;d<=e;){let l=s;if(l=s*2*(i==="day"?1:24),this.isWeekend(d)){const m=this.context.store.getTimeAxis().getTimeLeft(d),p=n,u=a;if(m+l<c){d=d.add(2,"day");continue}if(m>g)break;!this.patternImage&&this.context.getOptions().weekend.pattern&&(this.patternImage=await It.createPattern(this.context.getOptions().weekend));const x=new k.Rect({name:"weekend-rect",x:m,y:p,width:l,height:u,...this.patternImage?{fillPatternImage:this.patternImage,fillPatternRepeat:"repeat",fillPatternOffset:{x:0,y:0},fillPatternScale:{x:1,y:1}}:{fill:this.context.getOptions().weekend.backgroundColor||"#c9c9c9"},opacity:this.context.getOptions().weekend.opacity});this.weekendGroup.add(x),d=d.add(2,"day")}else d=d.add(1,"day")}this.layer.batchDraw()}}class Oe{constructor(t,e,i){h(this,"arrowAnimation");h(this,"todayLine");h(this,"todayTextGroup");h(this,"triangle");h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);h(this,"offsetY",0);this.context=t,this.bgLayer=e,this.headerLayer=i}resize(t,e){this.width=t,this.height=e,this.render()}setOffset(t,e){t!==this.offsetX&&(this.offsetX=t,this.render())}render(){var d,l,m,p,u,y,x;const t=Object.assign({show:!0,type:"line",backgroundColor:z("lightblue").toHex(),opacity:1,width:1},this.context.getOptions().today||{});if(!t.show)return;let e=A();const i=this.context.store.getTimeAxis().getCellUnit();t.type==="block"&&(e=e.startOf(i));const s=this.context.store.getTimeAxis().getTimeLeft(e),n=this.context.store.getTimeAxis().getCellWidth(),o=this.context.getOptions().header.height,r=z(t.backgroundColor).alpha(t.opacity).toHex(),a=(t.type==="block"?s+n/2:s)+this.offsetX,c=[a,o,a,this.height],g=t.type==="line"?t.width:n;if(this.todayLine?(this.todayLine.points(c),this.todayLine.stroke(r),this.todayLine.strokeWidth(g)):(this.todayLine=new k.Line({points:c,stroke:r,strokeWidth:g}),this.bgLayer.add(this.todayLine)),(d=this.context.getOptions().today.text)!=null&&d.show){const T=((l=this.context.getOptions().today.text)==null?void 0:l.fontSize)||10,b=((m=this.context.getOptions().today.text)==null?void 0:m.fontFamily)||"Arial",w=((p=this.context.getOptions().today.text)==null?void 0:p.content)||"今天",L=new k.Text({fontSize:T,fontFamily:b}).measureSize(w),M=((u=this.context.getOptions().today.text)==null?void 0:u.color)||"white",C=((y=this.context.getOptions().today.text)==null?void 0:y.backgroundColor)||r;if(!this.todayTextGroup)this.todayTextGroup=new k.Group({x:s+this.offsetX+g,y:o,opacity:(x=this.context.getOptions().today.text)==null?void 0:x.opacity}),this.todayTextGroup.add(new k.Rect({x:0,y:0,width:L.width+12,height:L.height+8,fill:C,cornerRadius:0,name:"today-text-bg"})),this.todayTextGroup.add(new k.Text({x:0,y:0,text:w,fontSize:T,fontFamily:b,padding:5,fill:M,align:"center",verticalAlign:"middle",name:"today-text"})),this.bgLayer.add(this.todayTextGroup);else{this.todayTextGroup.x(s+this.offsetX+g);const S=this.todayTextGroup.findOne(".today-text");S==null||S.setAttrs({text:w,fill:M,fontSize:T,fontFamily:b,padding:5});const O=this.todayTextGroup.findOne(".today-text-bg");O==null||O.setAttrs({width:L.width+12,height:L.height+8,fill:C})}}else this.todayTextGroup&&(this.todayTextGroup.destroy(),this.todayTextGroup=void 0);t.type==="line"&&(this.triangle?(this.triangle.x(a),this.triangle.fill(r)):(this.triangle=new k.RegularPolygon({x:a,y:o-8,sides:3,radius:8,fill:r,rotation:180,name:"today-triangle"}),this.arrowAnimation=new k.Animation(T=>{var w;const b=Math.sin(T.time*4*Math.PI/2e3)+o-8;(w=this.triangle)==null||w.y(b)},this.headerLayer),this.headerLayer.add(this.triangle),this.triangle.moveToTop(),this.arrowAnimation.start())),this.bgLayer.batchDraw()}destroy(){var t,e,i,s;(t=this.todayLine)==null||t.destroy(),(e=this.triangle)==null||e.destroy(),(i=this.todayTextGroup)==null||i.destroy(),(s=this.arrowAnimation)==null||s.stop(),this.arrowAnimation=void 0}}class Ee{constructor(t,e){h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);h(this,"offsetY",0);h(this,"holidayGroup");h(this,"patternImage",new WeakMap);this.context=t,this.layer=e,this.holidayGroup=new k.Group,this.layer.add(this.holidayGroup)}resize(t,e){this.width=t,this.height=e,this.calculateHoliday()}setOffset(t,e){this.offsetX=t,this.offsetY=e,this.holidayGroup.x(t),this.calculateHoliday()}render(){this.layer.batchDraw()}destroy(){this.holidayGroup.destroy()}clearHoliday(){this.holidayGroup.destroyChildren()}async calculateHoliday(){var d,l,m,p,u,y,x,T;if(this.clearHoliday(),!this.context.getOptions().holiday.show)return;const t=this.context.getOptions().holiday.holidays;if(!t||t.length===0)return;const e=Math.max(0,-this.offsetX),i=e+this.width,s=this.context.store.getTimeAxis().getStartTime(),n=this.context.store.getTimeAxis().getEndTime();this.context.store.getTimeAxis().getCellUnit();const o=this.context.store.getTimeAxis().getCellWidth(),r=this.context.getOptions().header.height,a=this.context.getOptions().row.height,g=this.context.store.getDataManager().getVisibleSize()*a;for(let b=s;b<=n;b=b.add(1,"day")){const w=t.find(L=>{if(E.isArray(L.date)){if(L.date.some(M=>A(M).isSame(b,"day")))return L}else if(A(L.date).isSame(b,"day"))return L});if(w){const L=this.context.store.getTimeAxis().getTimeLeft(b),M=r,C=g;if(L+o<e)continue;if(L>i)break;!this.patternImage.has(w)&&(w.pattern||this.context.getOptions().holiday.pattern)&&this.patternImage.set(w,await It.createPattern({backgroundColor:this.context.getOptions().primaryColor,...w,...this.context.getOptions().holiday}));const O=new k.Rect({name:"holiday-rect",x:L,y:M,width:o,height:C,...this.patternImage.get(w)?{fillPatternImage:this.patternImage.get(w)??void 0,fillPatternRepeat:"repeat",fillPatternOffset:{x:0,y:0},fillPatternScale:{x:1,y:1},opacity:w.opacity||this.context.getOptions().holiday.opacity}:{fill:w.backgroundColor||this.context.getOptions().holiday.backgroundColor||this.context.getOptions().primaryColor,opacity:w.opacity||this.context.getOptions().holiday.opacity}});if(this.holidayGroup.add(O),(d=w.text)!=null&&d.show){if(E.isArray(w.date)&&!A(w.date[0]).isSame(b,"day"))continue;const H=((l=w.text)==null?void 0:l.fontSize)||10,I=((m=w.text)==null?void 0:m.fontFamily)||"Arial",_=((p=w.text)==null?void 0:p.content)||"",R=new k.Text({fontSize:H,fontFamily:I}).measureSize(_),$=((u=w.text)==null?void 0:u.color)||"white",G=((y=w.text)==null?void 0:y.backgroundColor)||w.backgroundColor||((x=this.context.getOptions().holiday)==null?void 0:x.backgroundColor)||this.context.getOptions().primaryColor,W=new k.Group({name:"holiday-text-group",x:L,y:M,opacity:(T=w.text)==null?void 0:T.opacity}),B=new k.Text({text:_,fill:$,fontSize:H,fontFamily:I,padding:5}),Y=new k.Rect({x:0,y:0,width:R.width+12,height:R.height+8,fill:G});W.add(Y),W.add(B),this.holidayGroup.add(W)}}}this.layer.batchDraw()}}class De{constructor(t,e){h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);h(this,"offsetY",0);h(this,"flagGroup");this.context=t,this.layer=e,this.flagGroup=new k.Group,this.layer.add(this.flagGroup)}resize(t,e){this.width=t,this.height=e,this.calculateFlag()}setOffset(t,e){this.offsetX=t,this.offsetY=e,this.flagGroup.x(t),this.calculateFlag()}render(){this.layer.batchDraw()}destroy(){this.flagGroup.destroy()}clearFlag(){this.flagGroup.destroyChildren()}async calculateFlag(){var d,l,m,p,u,y,x;if(this.clearFlag(),!((d=this.context.getOptions().flag)!=null&&d.show))return;const t=(l=this.context.getOptions().flag)==null?void 0:l.data;if(!t||t.length===0)return;const e=((m=this.context.getOptions().flag)==null?void 0:m.backgroundColor)||this.context.getOptions().primaryColor,i=((p=this.context.getOptions().flag)==null?void 0:p.opacity)||1,s=((u=this.context.getOptions().flag)==null?void 0:u.color)||(z(e).isDark()?"white":"black"),n=((y=this.context.getOptions().flag)==null?void 0:y.fontFamily)||"Arial",o=((x=this.context.getOptions().flag)==null?void 0:x.fontSize)||10,r=Math.max(0,-this.offsetX),a=r+this.width,c=this.context.store.getTimeAxis().getCellWidth(),g=this.context.getOptions().header.height;this.context.getOptions().row.height,this.context.store.getDataManager().getVisibleSize(),t.forEach(T=>{const b=A(T.date),w=this.context.store.getTimeAxis().getTimeLeft(b),L=g;if(w+c<r||w>a)return;const C=[w,g,w,this.height],S=new k.Line({points:C,stroke:T.backgroundColor||e,opacity:T.opacity||i,strokeWidth:1});this.flagGroup.add(S);const O=T.content||"";if(O){const H=new k.Text({text:O,x:w+5,y:L+5,fontSize:o,fontFamily:n,fill:T.color||s,verticalAlign:"middle",align:"left"}),I=new k.Rect({x:w,y:L,width:H.measureSize(O).width+12,height:H.measureSize(O).height+8,fill:T.backgroundColor||e});this.flagGroup.add(I),this.flagGroup.add(H)}else if(T.flag)switch(T.flag){case"banner":this.flagGroup.add(new k.Rect({x:w,y:L,width:20,height:10,fill:T.backgroundColor||e,opacity:T.opacity||i}));break;case"pennant":this.flagGroup.add(new k.Line({points:[w,L,w+20,L+5,w,L+10],fill:T.backgroundColor||e,opacity:T.opacity||i,closed:!0}));break;case"tag":this.flagGroup.add(new k.Line({points:[w,L,w+20,L,w+15,L+5,w+20,L+10,w,L+10],fill:T.backgroundColor||e,opacity:T.opacity||i,closed:!0}));break;case"wedge":this.flagGroup.add(new k.Line({points:[w,L,w+20,L,w+25,L+5,w+20,L+10,w,L+10],fill:T.backgroundColor||e,opacity:T.opacity||i,closed:!0}));break;case"ribbon":this.flagGroup.add(new k.Line({points:[w,L,w+15,L+2,w+20,L,w+20,L+10,w+15,L+12,w,L+10],fill:T.backgroundColor||e,opacity:T.opacity||i,closed:!0,tension:.1}));break}}),this.layer.batchDraw()}}class _e{constructor(t,e,i){h(this,"tasks",[]);h(this,"pointGroup");h(this,"linksGroup");h(this,"templateArrow");h(this,"linkCache",new Map);h(this,"isDragging",!1);h(this,"isSliderMoving",!1);h(this,"selectedMap",new Map);h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);h(this,"offsetY",0);this.context=t,this.stage=e,this.layer=i,this.linksGroup=new k.Group({name:"links-group"}),this.pointGroup=new k.Group({name:"point-group"}),this.templateArrow=new k.Arrow({points:[],stroke:this.context.getOptions().links.color||this.context.getOptions().primaryColor,strokeWidth:this.context.getOptions().links.width,pointerLength:this.context.getOptions().links.arrow.height,pointerWidth:this.context.getOptions().links.arrow.width,fill:this.context.getOptions().links.arrow.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,lineJoin:"round",dash:this.context.getOptions().links.dash,opacity:.4}),this.templateArrow.visible(!1),this.layer.add(this.linksGroup),this.layer.add(this.pointGroup),this.layer.add(this.templateArrow),this.registerEvents()}registerEvents(){this.context.event.on(v.ROW_HIGHLIGHT,t=>{this.highlightPoint(t)}),this.context.event.on(v.ROW_UNHIGHLIGHT,t=>{this.unhighlightPoint(t)}),this.context.event.on(v.SLIDER_DRAGGING,t=>{this.isSliderMoving=t})}resize(t,e){this.width=t,this.height=e}setOffset(t,e){this.offsetX=t,this.offsetY=e,this.linksGroup.x(t),this.linksGroup.y(e),this.pointGroup.x(t),this.pointGroup.y(e),this.templateArrow.x(t),this.templateArrow.y(e)}updateTask(t){this.calculateLinks([t]),this.calculatePoints(t)}render(t){this.tasks=t,this.calculateLinks(),this.calculatePoints()}destroy(){this.linksGroup.destroy(),this.pointGroup.destroy(),this.templateArrow.destroy(),this.selectedMap.clear(),this.linkCache.clear()}calculatePoints(t){var g,d;if(!this.context.getOptions().links.show||!this.context.getOptions().links.create.enabled){this.pointGroup.destroyChildren();return}t?((g=this.pointGroup.findOne(`#point-${t.id}-left`))==null||g.destroy(),(d=this.pointGroup.findOne(`#point-${t.id}-right`))==null||d.destroy()):this.pointGroup.destroyChildren();const e=this.context.getOptions().header.height,i=this.context.getOptions().row.height,s=i/2+e,n=this.context.getOptions().links.create.radius,o=this.context.getOptions().links.create.mode==="always"?.5:0,r=this.context.getOptions().links.create.color||this.context.getOptions().primaryColor,a=z(r).alpha(this.context.getOptions().links.create.opacity??1).toHex(),c=this.context.getOptions().links.create.width;this.tasks.forEach(l=>{if(!(t&&l.id!==t.id)&&this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.show,l)&&l.startTime&&l.endTime){const m=this.context.store.getTimeAxis().getTimeLeft(l.startTime),p=this.context.store.getTimeAxis().getTimeLeft(l.endTime);let u=this.context.getOptions().links.gap;l.isMilestone()&&(u+=i/2);const y=s+i*l.flatIndex;let x=!0,T=!0,b=this.context.store.getOptionManager().unpackFunc(this.context.getOptions().links.create.from,l);if(E.isBoolean(b)?x=T=b:E.isString(b)&&(x=b==="S",T=b==="F"),x){const w=new k.Circle({id:`point-${l.id}-left`,x:m-u,y,radius:n,opacity:o,stroke:a,strokeWidth:c});this.pointGroup.add(w),w.on("mousedown",L=>{this.isDragging=!0,this.createLink(L,"S",r,[m-u,y],l.id)}),w.on("mouseover",L=>{this.isSliderMoving||(this.stage.container().style.cursor="pointer")}),w.on("mouseout",L=>{this.isDragging||this.isSliderMoving||(this.stage.container().style.cursor="default")})}if(T){const w=new k.Circle({id:`point-${l.id}-right`,x:p+u,y,radius:n,opacity:o,stroke:a,strokeWidth:c});this.pointGroup.add(w),w.on("mousedown",L=>{this.isDragging=!0,this.createLink(L,"F",r,[p+u,y],l.id)}),w.on("mouseover",L=>{this.isSliderMoving||(this.stage.container().style.cursor="pointer")}),w.on("mouseout",L=>{this.isDragging||this.isSliderMoving||(this.stage.container().style.cursor="default")})}}})}calculateLinks(t){if(!this.context.getOptions().links.show){this.destroy();return}if(this.tasks.length===0){this.destroy();return}const e=t!=null&&t.length?t.reduce((s,n)=>(s.push(...this.context.store.getLinkManager().getLinksByTaskId(n.id)),s),[]):this.context.store.getLinkManager().getLinks();t!=null&&t.length&&e.forEach(s=>{const n=this.createId(s),o=this.linkCache.get(n);o==null||o.destroy(),this.linkCache.delete(n)});const i=Q();e.forEach(s=>{var g,d,l,m,p,u,y,x;if(s.valid===!1)return;const n=this.createId(s),o=this.context.store.getDataManager().getTaskById(s.from),r=this.context.store.getDataManager().getTaskById(s.to);if(!o){D.warn(`No corresponding FROM task [${s.from}] was found for the link. Info:`,s),s.valid=!1;return}if(!r){D.warn(`No corresponding TO task [${s.to}] was found for the link. Info:`,s),s.valid=!1;return}if(!this.context.store.getDataManager().isTaskVisible(o)||!this.context.store.getDataManager().isTaskVisible(r)||o.flatIndex<this.tasks[0].flatIndex&&r.flatIndex<this.tasks[0].flatIndex||o.flatIndex>this.tasks[this.tasks.length-1].flatIndex&&r.flatIndex>this.tasks[this.tasks.length-1].flatIndex)return;const a=Math.max(0,-this.offsetX),c=a+this.width;if(!(this.context.store.getTimeAxis().getTimeLeft(((g=s.type)==null?void 0:g[0])==="S"?o.startTime:o.endTime)<a&&this.context.store.getTimeAxis().getTimeLeft(((d=s.type)==null?void 0:d[1])==="F"?r.endTime:r.startTime)<a)&&!(this.context.store.getTimeAxis().getTimeLeft(((l=s.type)==null?void 0:l[0])==="S"?o.startTime:o.endTime)>c&&this.context.store.getTimeAxis().getTimeLeft(((m=s.type)==null?void 0:m[1])==="F"?r.endTime:r.startTime)>c)&&this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.show,o)&&this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.show,r)){const T=this.getPoints(o,r,s);if(T.length<=2)D.warn("The link position has some error.",s);else{const b=s.radius??this.context.getOptions().links.radius,w=((p=s.arrow)==null?void 0:p.width)??this.context.getOptions().links.arrow.width,L=((u=s.arrow)==null?void 0:u.height)??this.context.getOptions().links.arrow.height,M=s.width??this.context.getOptions().links.width;let C=this.linkCache.get(n);C===void 0&&(C=new k.Group({id:n})),t!=null&&t.length||(C._=i);const S=C.findOne("Circle");if(S)S.radius(b),S.fill(s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor),S.x(T[0]),S.y(T[1]);else{const G=new k.Circle({radius:b,fill:s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,x:T[0],y:T[1]});C.add(G)}const O=Math.floor(T.length/2),H=O%2===0?O:O-1,I=T.slice(0,H+2),_=T.slice(H),R=C.findOne("Line");if(R)R.points(I),R.stroke(s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor),R.strokeWidth(M+(this.selectedMap.has(n)?2:0)),R.dash(s.dash||this.context.getOptions().links.dash);else{const G=new k.Line({points:I,stroke:s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,strokeWidth:M,lineCap:"round",lineJoin:"round",dash:s.dash||this.context.getOptions().links.dash,hitStrokeWidth:10,draggable:!0,dragBoundFunc:W=>({x:0,y:0})});C.add(G),G.on("dragstart",W=>{this.handleDrag(W,s,"S",[T[T.length-2],T[T.length-1]],n)})}const $=C.findOne("Arrow");if($)$.points(_),$.stroke(s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor),$.strokeWidth(M+(this.selectedMap.has(n)?2:0)),$.pointerLength(L),$.pointerWidth(w),$.fill(((y=s.arrow)==null?void 0:y.color)||this.context.getOptions().links.arrow.color||s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor),$.lineJoin("round"),$.dash(s.dash||this.context.getOptions().links.dash);else{const G=new k.Arrow({points:_,stroke:s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,strokeWidth:M,pointerLength:L,pointerWidth:w,fill:((x=s.arrow)==null?void 0:x.color)||this.context.getOptions().links.arrow.color||s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,lineJoin:"round",dash:s.dash||this.context.getOptions().links.dash,hitStrokeWidth:10,draggable:!0,dragBoundFunc:W=>({x:0,y:0})});C.add(G),G.on("dragstart",W=>{this.handleDrag(W,s,"F",[T[0],T[1]],n)})}this.linkCache.has(n)||(this.linksGroup.add(C),C.on("mouseover",G=>{G.target.moveToTop(),this.context.getOptions().links.move.enabled===!0&&(this.stage.container().style.cursor="pointer"),this.selectedMap.has(n)||this.handleHighlight(C,b,w,L,M,2)}),C.on("mouseout",G=>{this.selectedMap.has(n)||this.handleHighlight(C,b,w,L,M,0),!this.isDragging&&(this.stage.container().style.cursor="default")}),C.on("mousedown",G=>{this.isDragging=!0}),C.on("click",G=>{G.cancelBubble=!0,this.isDragging=!1,C.moveToTop(),G.evt.button===0&&(this.selectedMap.has(n)?(this.selectedMap.delete(n),this.context.event.emit(v.SELECT_LINK,null,s,this.selectedMap.values().toArray())):(this.selectedMap.set(n,s),this.context.event.emit(v.SELECT_LINK,s,null,this.selectedMap.values().toArray())))}),C.on("contextmenu",G=>{G.evt.preventDefault(),G.cancelBubble=!0,this.context.event.emit(v.CONTEXT_LINK,G.evt,s)}),this.linkCache.set(n,C)),this.selectedMap.has(n)&&this.handleHighlight(C,b,w,L,M,2,!0)}}}),t!=null&&t.length||this.linkCache.forEach((s,n)=>{s._!==i&&(s.destroy(),this.linkCache.delete(n))}),this.layer.batchDraw()}createId(t){return`link-group-${t[this.context.getOptions().links.key]}-${t.from}-${t.to}-${t.type||"FS"}`}getPoints(t,e,i){if(t.startTime&&t.endTime&&e.startTime&&e.endTime){const s=this.context.getOptions().row.height,n=t.isMilestone()?s/2:0,o=this.context.store.getTimeAxis().getTimeLeft(t.startTime)-n,r=this.context.store.getTimeAxis().getTimeLeft(t.endTime)+n,a=e.isMilestone()?s/2:0,c=this.context.store.getTimeAxis().getTimeLeft(e.startTime)-a,g=this.context.store.getTimeAxis().getTimeLeft(e.endTime)+a;let d=[];switch(i.type||"FS"){case"FF":d=this.createFF(i,t,e,o,r,c,g);break;case"SS":d=this.createSS(i,t,e,o,r,c,g);break;case"SF":d=this.createSF(i,t,e,o,r,c,g);break;case"FS":default:d=this.createFS(i,t,e,o,r,c,g)}return d}return[]}createFS(t,e,i,s,n,o,r){const a=this.context.getOptions().header.height,c=this.context.getOptions().row.height,g=c/2+a,d=t.gap||this.context.getOptions().links.gap,l=[n+d,.05+g+c*e.flatIndex];{const m=t.distance?parseInt(t.distance):this.context.getOptions().links.distance;if(isNaN(m))D.error("Link's distance must be a Numeric");else{const p=n+d+m,u=o-d-m,y=[Math.max(p,u),g+c*e.flatIndex];l.push(...y);const x=c*e.flatIndex+a+(e.flatIndex<=i.flatIndex?c:0);l.push(y[0],x),l.push(u,x),l.push(u,g+c*i.flatIndex)}}return l.push(o-d,g+c*i.flatIndex),l}createFF(t,e,i,s,n,o,r){const a=this.context.getOptions().header.height,c=this.context.getOptions().row.height,g=c/2+a,d=t.gap||this.context.getOptions().links.gap,l=[n+d,.05+g+c*e.flatIndex];{const m=t.distance?parseInt(t.distance):this.context.getOptions().links.distance;if(isNaN(m))D.error("Link's distance must be a Numeric");else{const p=n+d+m,u=r+d+m,y=[p<=u?u:p,g+c*e.flatIndex];l.push(...y),l.push(Math.max(u,p),g+c*i.flatIndex)}}return l.push(r+d,g+c*i.flatIndex),l}createSS(t,e,i,s,n,o,r){const a=this.context.getOptions().header.height,c=this.context.getOptions().row.height,g=c/2+a,d=t.gap||this.context.getOptions().links.gap,l=[s-d,.05+g+c*e.flatIndex];{const m=t.distance?parseInt(t.distance):this.context.getOptions().links.distance;if(isNaN(m))D.error("Link's distance must be a Numeric");else{const p=s-d-m,u=o-d-m;l.push(Math.min(u,p),g+c*e.flatIndex),l.push(Math.min(u,p),g+c*i.flatIndex)}}return l.push(o-d,g+c*i.flatIndex),l}createSF(t,e,i,s,n,o,r){const a=this.context.getOptions().header.height,c=this.context.getOptions().row.height,g=c/2+a,d=t.gap||this.context.getOptions().links.gap,l=[s-d,.05+g+c*e.flatIndex];{const m=t.distance?parseInt(t.distance):this.context.getOptions().links.distance;if(isNaN(m))D.error("Link's distance must be a Numeric");else{const p=s-d-m,u=r+d+m,y=[Math.min(p,u),g+c*e.flatIndex];l.push(...y);const x=c*e.flatIndex+a+(e.flatIndex<=i.flatIndex?c:0);l.push(y[0],x),l.push(u,x),l.push(u,g+c*i.flatIndex)}}return l.push(r+d,g+c*i.flatIndex),l}handleDrag(t,e,i,s,n){var y,x,T;if(!this.isDragging||this.context.getOptions().links.move.enabled!==!0)return;this.stage.container().style.cursor="pointer";const o=this.linksGroup.findOne(`#${n}`);this.templateArrow.setAttrs({stroke:e.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,strokeWidth:e.width??this.context.getOptions().links.width,pointerLength:((y=e.arrow)==null?void 0:y.height)??this.context.getOptions().links.arrow.height,pointerWidth:((x=e.arrow)==null?void 0:x.width)??this.context.getOptions().links.arrow.width,fill:((T=e.arrow)==null?void 0:T.color)||this.context.getOptions().links.arrow.color||e.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,lineJoin:"round",dash:e.data||this.context.getOptions().links.dash}),this.templateArrow.visible(!1);let r=null;const a=this.context.getOptions().header.height,c=this.context.getOptions().row.height,g=c/2+a,d=e.gap||this.context.getOptions().links.gap;let l=null;const m=()=>{const b=this.stage.getPointerPosition();if(b&&(l=this.getTaskByPosition(b),!!l&&(this.templateArrow.visible(!0),o==null||o.visible(!1),l!=null&&l.startTime&&(l!=null&&l.endTime)))){const w=this.context.store.getTimeAxis().getTimeLeft(l.startTime),L=this.context.store.getTimeAxis().getTimeLeft(l.endTime),M=(L+w)/2+this.offsetX;let C=w-d;b.x<=M?r="S":(r="F",C=L+d);let S;if(i==="S"?S=`${r}${(e.type||"FS")[1]}`:S=`${(e.type||"FS")[0]}${r}`,i==="S"){const{allowLeft:O,allowRight:H}=this.isAllowStartDrop(l,e.to,S);this.templateArrow.points([C,g+c*l.flatIndex,...s]),H?this.stage.container().style.cursor="pointer":this.stage.container().style.cursor="not-allowed"}else if(i==="F"){const{allowLeft:O,allowRight:H}=this.isAllowEndDrop(l,e.from,S);this.templateArrow.points([...s,C,g+c*l.flatIndex]),O?this.stage.container().style.cursor="pointer":this.stage.container().style.cursor="not-allowed"}}},p=()=>{var L,M;let b;const w=E.cloneDeep(e);if(r&&l&&(i==="S"?(b=`${r}${(e.type||"FS")[1]}`,w.from=l.id):i==="F"&&(b=`${(e.type||"FS")[0]}${r}`,w.to=l.id)),b&&l){w.type=b;let C=!1,S=!1,O;i==="S"?{allowLeft:C,allowRight:S,reason:O}=this.isAllowStartDrop(l,w.to,w.type,!0):i==="F"&&({allowLeft:C,allowRight:S,reason:O}=this.isAllowEndDrop(l,w.from,w.type,!0)),((L=w.type)==null?void 0:L.slice(1))==="S"&&C||((M=w.type)==null?void 0:M.slice(1))==="F"&&S?(this.context.event.emit(v.UPDATE_LINK,w),this.context.store.getLinkManager().update(),this.calculateLinks()):this.context.event.emit(v.ERROR,O||X.LINK_NOT_ALLOWED)}else this.context.event.emit(v.ERROR,X.TASK_NOT_FOUND);this.cleanupTempLink(),this.calculateLinks([l,this.context.store.getDataManager().getTaskById(e.from),this.context.store.getDataManager().getTaskById(e.to)].filter(C=>!!C)),document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",p)},u=b=>{b.key==="Escape"&&(this.cleanupTempLink(),o==null||o.visible(!0),document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",p),document.removeEventListener("keydown",u))};document.addEventListener("mousemove",m),document.addEventListener("mouseup",p),document.addEventListener("keydown",u)}createLink(t,e,i,s,n){this.stage.container().style.cursor="pointer",this.templateArrow.setAttrs({points:[],stroke:i,strokeWidth:this.context.getOptions().links.width,pointerLength:this.context.getOptions().links.arrow.height,pointerWidth:this.context.getOptions().links.arrow.width,fill:i,dash:this.context.getOptions().links.dash}),this.templateArrow.visible(!1);const o=this.context.store.getLinkManager();let r=null;const a=this.context.getOptions().header.height,c=this.context.getOptions().row.height,g=c/2+a,d=this.context.getOptions().links.gap;let l=null;const m=()=>{const y=this.stage.getPointerPosition();if(y&&(l=this.getTaskByPosition(y),!!l&&(this.templateArrow.visible(!0),l.startTime&&l.endTime))){const x=this.context.store.getTimeAxis().getTimeLeft(l.startTime),T=this.context.store.getTimeAxis().getTimeLeft(l.endTime),b=(T+x)/2+this.offsetX;let w=x-d;y.x<=b?r="S":(r="F",w=T+d),this.templateArrow.points([...s,w,g+c*l.flatIndex]);const{allowLeft:L,allowRight:M}=this.isAllowEndDrop(l,n,o.convertPointsToLinkType(e,r));r==="S"&&!L?this.stage.container().style.cursor="not-allowed":r==="F"&&!M?this.stage.container().style.cursor="not-allowed":this.stage.container().style.cursor="pointer"}},p=()=>{let y;if(r&&(y=o.convertPointsToLinkType(e,r)),y&&l)if(o.isLinkExist(n,l.id,y))this.context.event.emit(v.ERROR,X.LINK_EXIST);else if(n===l.id&&e===r)this.context.event.emit(v.ERROR,X.LINK_SAME);else{const{allowLeft:x,allowRight:T,reason:b}=this.isAllowEndDrop(l,n,y,!0);r==="S"&&x||r==="F"&&T?(this.context.event.emit(v.CREATE_LINK,{from:n,to:l.id,type:y,color:i}),this.context.store.getLinkManager().update()):this.context.event.emit(v.ERROR,b||X.LINK_NOT_ALLOWED)}this.cleanupTempLink(),this.calculateLinks([l].filter(x=>!!x)),document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",p)},u=y=>{y.key==="Escape"&&(this.cleanupTempLink(),document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",p),document.removeEventListener("keydown",u))};document.addEventListener("mousemove",m),document.addEventListener("mouseup",p),document.addEventListener("keydown",u)}cleanupTempLink(){this.templateArrow.visible(!1),this.stage.container().style.cursor="default",this.isDragging=!1}getTaskByPosition(t){const e=this.context.getOptions().header.height;if(t.y<=e)return null;const i=t.y-this.offsetY,s=Math.floor((i-e)/this.context.getOptions().row.height);return this.context.store.getDataManager().getVisibleTasks()[s]||null}isAllowStartDrop(t,e,i,s=!1){let n=!0,o=!0,r=this.context.getOptions().links.create.from;E.isFunction(r)&&(r=r(t.getEmitData(),this.context.store.getDataManager().getTaskById(e).getEmitData())),E.isBoolean(r)?n=o=r:E.isString(r)&&(n=r==="S",o=r==="F");const a=this.validateChain(t.id,e,i,s);return{allowLeft:n&&a.ok,allowRight:o&&a.ok,reason:a.reason}}isAllowEndDrop(t,e,i,s=!1){let n=!0,o=!0,r=this.context.getOptions().links.create.to;E.isFunction(r)&&(r=r(t.getEmitData(),this.context.store.getDataManager().getTaskById(e).getEmitData())),E.isBoolean(r)?n=o=r:E.isString(r)&&(n=r==="S",o=r==="F");const a=this.validateChain(e,t.id,i,s);return{allowLeft:n&&a.ok,allowRight:o&&a.ok,reason:a.reason}}validateChain(t,e,i,s=!1){const o=this.context.store.getLinkManager().validateChain(t,e,i);return o.ok?{ok:!0}:(s&&o.reason===X.LINK_CYCLE&&o.cycleInfo&&this.highlightCycleNodes(o.cycleInfo.nodes),{ok:!1,reason:o.reason})}handleHighlight(t,e,i,s,n,o,r=!1){const a=t.findOne("Circle"),c=t.findOne("Arrow"),g=t.findOne("Line");a&&new k.Tween({node:a,radius:e+o,duration:r?0:.1}).play(),c&&new k.Tween({node:c,pointerWidth:i+o,pointerLength:s+o,strokeWidth:n+o,duration:r?0:.1}).play(),g&&new k.Tween({node:g,strokeWidth:n+o,duration:r?0:.1}).play()}highlightPoint(t){this.handlePointHighlight(t,1)}unhighlightPoint(t){const e=this.context.getOptions().links.create.mode==="always"?.5:0;this.handlePointHighlight(t,e)}handlePointHighlight(t,e){const i=this.pointGroup.findOne(`#point-${t}-left`),s=this.pointGroup.findOne(`#point-${t}-right`);i&&new k.Tween({node:i,opacity:e,duration:.1}).play(),s&&new k.Tween({node:s,opacity:e,duration:.1}).play()}highlightCycleNodes(t){t.forEach(e=>{this.context.event.emit(v.SLIDER_BLINK,e)})}}class Ae{constructor(t,e,i){h(this,"tasks",[]);h(this,"chartBaselineGroup");h(this,"indicatorGroup");h(this,"baselineGroup");h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);h(this,"offsetY",0);this.context=t,this.stage=e,this.layer=i,this.chartBaselineGroup=new k.Group({name:"chart-baseline-group"}),this.baselineGroup=new k.Group({name:"baseline-group"}),this.chartBaselineGroup.add(this.baselineGroup),this.indicatorGroup=new k.Group({name:"baseline-indicator-group"}),this.chartBaselineGroup.add(this.indicatorGroup),this.layer.add(this.chartBaselineGroup),this.registerEvents()}registerEvents(){}resize(t,e){this.width=t,this.height=e,this.calculateBaselines()}setOffset(t,e){this.offsetX=t,this.offsetY=e,this.chartBaselineGroup.x(t),this.chartBaselineGroup.y(e),this.calculateBaselines()}update(){this.calculateBaselines()}render(t){this.tasks=t,this.update()}destroy(){this.baselineGroup.destroy(),this.indicatorGroup.destroy(),this.chartBaselineGroup.destroy()}calculateBaselines(){if(this.baselineGroup.destroyChildren(),this.indicatorGroup.destroyChildren(),!this.context.getOptions().baselines.show)return;const t=this.context.getOptions().header.height,e=this.context.getOptions().row.height,i=e/2+t,s=et(this.context.getOptions().baselines.radius),n=this.context.getOptions().baselines.opacity,o=this.context.getOptions().baselines.backgroundColor;this.tasks.forEach(r=>{if(this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.show,r)){const a=this.context.store.getDataManager().getBaselinesByTaskId(r.id),c=tt(this.context.getOptions().baselines.height||this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.height,r),e),g=this.context.getOptions().baselines.offset??0;a.forEach((d,l)=>{if(!d.validate())return;const m=this.context.store.getTimeAxis().getTimeLeft(d.startTime),p=this.context.store.getTimeAxis().getTimeLeft(d.endTime),u=new k.Group({id:`baseline-group-${d.id}`});this.renderBaselineBar(u,r,d,m,p,i,e,c,t,o,n,s,g),this.baselineGroup.add(u);const y=this.context.getOptions().baselines.compare,x=d.getTimeDiff();if(!y.enabled||!x)return;const T=y.mode;d.highlight&&(T==="highlight"||T==="both")&&this.renderCompareHighlight(u,r,d,x),l===0&&(T==="indicator"||T==="both")&&this.renderCompareIndicator(r,d,x),this.bindEvents(u,r,d)})}})}renderBaselineBar(t,e,i,s,n,o,r,a,c,g,d,l,m){if(this.context.getOptions().baselines.mode==="shadow"){const p=o+r*e.flatIndex-a/2+m,u=new k.Rect({id:`baseline-item-${i.id}`,x:s,y:p,width:n-s,height:a,cornerRadius:l,fill:g,opacity:d});t.add(u),this.renderText(t,e,i,s,n,p,a)}else if(this.context.getOptions().baselines.mode==="line"){const p=tt(this.context.getOptions().baselines.height??5,r);let u=c+r*e.flatIndex+m;const y=this.context.getOptions().baselines.position;let x="";y==="top"?(u+=+p/2,x="line_top"):y==="center"?(u+=r/2,x="line_center"):(u+=r-p/2,x="line_bottom");const T=new k.Line({id:`baseline-item-${i.id}`,points:[s,u,n,u],stroke:g,opacity:d,strokeWidth:p,lineCap:"butt",lineJoin:"round"});t.add(T),this.renderText(t,e,i,s,n,u,p,x)}}renderText(t,e,i,s,n,o,r,a){const c=`chart-baseline-text-${i.id}`;if((()=>{this.baselineGroup.find(`#${c}`)&&this.baselineGroup.find(`#${c}`).forEach(x=>x.remove())})(),!this.context.getOptions().baselines.label.show)return;const d=this.context.getOptions().baselines.label.field,l=d?i.getField(d):i.name;if(!l||l==="")return;const m=n-s-10,p=Math.max(this.context.getOptions().baselines.label.fontSize,r),u=new k.Text({text:l,id:c,x:s+5,y:o,width:m,height:p,fill:this.context.getOptions().baselines.label.color,fontSize:this.context.getOptions().baselines.label.fontSize,fontFamily:this.context.getOptions().baselines.label.fontFamily||"Arial",align:this.context.getOptions().baselines.label.position,verticalAlign:"bottom"});a==="line_bottom"?u.setAttrs({y:o-p/2,verticalAlign:"top"}):a==="line_center"?u.setAttrs({y:o-p/2,verticalAlign:"middle"}):a==="line_top"&&u.setAttrs({y:o-r/2,verticalAlign:"bottom"}),r>=p&&u.setAttrs({verticalAlign:"middle"});const y=u.measureSize(l);(this.context.getOptions().baselines.label.forceDisplay||m>y.width)&&t.add(u)}renderCompareHighlight(t,e,i,s){const n=s[`${this.context.getOptions().baselines.compare.target}Status`];if(!n||n==="ontime")return;const o=t.findOne(`#baseline-item-${i.id}`);if(!o)return;const r=this.context.getOptions().baselines.compare,a=this.context.getOptions().baselines.mode,c={fill:"",stroke:"",opacity:r[n].opacity};if(a==="shadow")c.fill=r[n].backgroundColor;else if(a==="line")c.stroke=r[n].backgroundColor;else return;o.setAttrs(c)}renderCompareIndicator(t,e,i){const s=this.context.getOptions().baselines,n=s.compare.indicator;if(!n||!n.show)return;const o=this.context.getOptions().header.height,r=this.context.getOptions().row.height,a=tt(this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.height,t),r);let c=s.backgroundColor;const g=this.context.store.getTimeAxis().getTimeLeft(t.startTime),d=this.context.store.getTimeAxis().getTimeLeft(t.endTime);let l=(r-a)/2+r*t.flatIndex+o;if(n.position==="bottom"&&(l+=a),n.show==="start"||n.show==="both"||n.show===!0){const m=i.startStatus;if(m&&s.compare.indicator[m].show){c=z(s.compare.indicator[m].color).alpha(s.compare.indicator[m].opacity).toHex();const p=new k.Circle({x:g-n.size,y:l,fill:c,radius:n.size/2});this.indicatorGroup.add(p);let u=`${rt(i.startDiff)}${i.unit} ${m}`;const y=s.compare.indicator[m].text;E.isFunction(y)?u=y(i.startDiff,{...t.getEmitData(),baseline:e}):E.isString(y)&&(u=y);const x=new k.Text({y:l-n.fontSize/2,text:u,fill:c,fontSize:n.fontSize,fontFamily:n.fontFamily||"Arial"}),T=x.measureSize(u);x.x(g-n.size-T.width-5),this.indicatorGroup.add(x)}}if(n.show==="end"||n.show==="both"||n.show===!0){const m=i.endStatus;if(m&&s.compare.indicator[m].show){c=z(s.compare.indicator[m].color).alpha(s.compare.indicator[m].opacity).toHex();const p=new k.Circle({x:d+n.size,y:l,fill:c,radius:n.size/2});this.indicatorGroup.add(p);let u=`${rt(i.endDiff)}${i.unit} ${m}`;const y=s.compare.indicator[m].text;E.isFunction(y)?u=y(i.endDiff,{...t.getEmitData(),baseline:e}):E.isString(y)&&(u=y);const x=new k.Text({x:d+n.size+5,y:l-n.fontSize/2,text:u,fill:c,fontSize:n.fontSize,fontFamily:n.fontFamily||"Arial"});this.indicatorGroup.add(x)}}}bindEvents(t,e,i){t.on("mouseenter",s=>{this.context.event.emit(v.BASELINE_MOUSEENTER,s.evt,e,i)}),t.on("mousemove",s=>{this.context.event.emit(v.BASELINE_MOUSEMOVE,s.evt,e,i)}),t.on("mouseout",s=>{this.context.event.emit(v.BASELINE_MOUSEOUT,s.evt,e,i)}),t.on("click",s=>{s.cancelBubble=!0,s.evt.button===0?this.context.event.emit(v.BASELINE_CLICK,s.evt,e,i):s.evt.button===2&&this.context.event.emit(v.BASELINE_CONTEXTMENU,s.evt,e,i)})}}class Ie{constructor(t,e){h(this,"stage");h(this,"headerLayer");h(this,"bodyGroup");h(this,"gridGroup");h(this,"weekendGroup");h(this,"holidayGroup");h(this,"flagGroup");h(this,"todayLayer");h(this,"linkGroup");h(this,"baselineGroup");h(this,"axisLayer");h(this,"bgLayer");h(this,"bodyLayer");h(this,"width",0);h(this,"height",0);this.context=t,this.container=e,this.stage=new k.Stage({container:this.container,width:this.container.clientWidth,height:this.container.clientHeight}),this.bgLayer=new k.Layer,this.weekendGroup=new Me(this.context,this.bgLayer),this.holidayGroup=new Ee(this.context,this.bgLayer),this.flagGroup=new De(this.context,this.bgLayer),this.gridGroup=new ke(this.context,this.bgLayer),this.stage.add(this.bgLayer),this.axisLayer=new k.Layer,this.headerLayer=new Se(this.context,this.axisLayer),this.todayLayer=new Oe(this.context,this.bgLayer,this.axisLayer),this.stage.add(this.axisLayer),this.bodyLayer=new k.Layer,this.linkGroup=new _e(this.context,this.stage,this.bodyLayer),this.baselineGroup=new Ae(this.context,this.stage,this.bodyLayer),this.bodyGroup=new Le(this.context,this.stage,this.bodyLayer,this.bgLayer),this.stage.add(this.bodyLayer)}resize(t,e){this.width=t,this.height=e,this.context.store.getTimeAxis().setAllWidth(t),this.stage.width(t),this.stage.height(e),this.headerLayer.resize(t),this.gridGroup.resize(t,e),this.linkGroup.resize(t,e),this.baselineGroup.resize(t,e),this.holidayGroup.resize(t,e),this.flagGroup.resize(t,e),this.weekendGroup.resize(t,e),this.bodyGroup.resize(t,e),this.todayLayer.resize(t,e)}render(t,e,i,s=!1,n=!1){this.headerLayer.setOffset(-t,0),this.gridGroup.setOffset(-t,-e),this.linkGroup.setOffset(-t,-e),this.baselineGroup.setOffset(-t,-e),this.weekendGroup.setOffset(-t,-e),this.holidayGroup.setOffset(-t,-e),this.flagGroup.setOffset(-t,-e),this.bodyGroup.setOffset(-t,-e),this.todayLayer.setOffset(-t,-e),this.gridGroup.render(),this.holidayGroup.render(),this.flagGroup.render(),this.weekendGroup.render(),this.linkGroup.render(i),this.baselineGroup.render(i),this.bodyGroup.render(i),this.headerLayer.render(),this.todayLayer.render()}refresh(t,e,i,s=!1){this.render(t,e,i,!0,s)}updateTask(t){this.bodyGroup.updateTask(t),this.linkGroup.updateTask(t),this.baselineGroup.update()}destroy(){this.headerLayer.destroy(),this.gridGroup.destroy(),this.bodyLayer.destroy(),this.todayLayer.destroy(),this.holidayGroup.destroy(),this.flagGroup.destroy(),this.weekendGroup.destroy(),this.linkGroup.destroy(),this.baselineGroup.destroy(),this.axisLayer.destroy(),this.bgLayer.destroy(),this.stage.destroy()}}const He='<svg style="transition: all 0.3s" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"/><path fill="currentColor" d="M8.293 12.707a1 1 0 0 1 0-1.414l5.657-5.657a1 1 0 1 1 1.414 1.414L10.414 12l4.95 4.95a1 1 0 0 1-1.414 1.414z"/></g></svg>';class Ge{constructor(t,e){h(this,"line");h(this,"initialX",0);h(this,"initialWidth",0);h(this,"collapseButton",null);this.root=t,this.container=e,this.line=document.createElement("div"),this.line.className="x-gantt-middle-resize-line",this.line.style.position="absolute",this.line.style.zIndex="99",this.line.style.width="5px",this.line.style.height="100%",this.line.style.borderLeft="2px solid",this.line.style.setProperty("border-left-color",this.root.store.getOptionManager().getOptions().border.color,"important"),this.line.style.cursor="col-resize",this.collapseButton=document.createElement("div"),this.collapseButton.className="x-gantt-collapse-button",this.collapseButton.style.position="absolute",this.collapseButton.style.top="50%",this.collapseButton.style.left="0",this.collapseButton.style.transform="translateY(-50%)",this.collapseButton.style.cursor="pointer",this.collapseButton.style.width="16px",this.collapseButton.style.height="30px",this.collapseButton.style.backgroundColor="#fff",this.collapseButton.style.borderRadius="0 6px 6px 0",this.collapseButton.style.boxShadow="0 0 2px rgba(0, 0, 0, 0.2)",this.collapseButton.style.display="flex",this.collapseButton.style.alignItems="center",this.collapseButton.style.justifyContent="center",this.collapseButton.innerHTML=He,this.collapseButton.addEventListener("click",i=>{i.stopPropagation(),this.root.store.getColumnManager().collapse()}),this.line.appendChild(this.collapseButton),this.container.appendChild(this.line),this.addDragEvents()}setOffset(t){this.line.style.transform=`translateX(${t-2}px)`,this.initialX=t,this.collapseButton&&(this.root.store.getColumnManager().isCollapsed()?this.collapseButton.querySelector("svg").style.transform="rotate(180deg)":this.collapseButton.querySelector("svg").style.transform="rotate(0deg)")}addDragEvents(){let t=0,e=null;const i=this.root.store.getColumnManager(),s=i.getLeafColumns(),n=a=>{a.preventDefault(),a.stopPropagation(),t=a.clientX,e=this.container.getBoundingClientRect();const c=s[s.length-1].key;this.initialWidth=i.getColumnWidth(c);const g=this.initialX;this.root.event.emit(v.SHOW_GUIDELINE,g);const d=m=>o(m),l=m=>r(m,d,l);document.addEventListener("mousemove",d),document.addEventListener("mouseup",l)},o=a=>{if(a.preventDefault(),!e)return;const c=a.clientX-t;s[s.length-1].key;const g=50-this.initialWidth,l=e.width-20-this.initialX,m=Math.max(g,Math.min(l,c)),p=this.initialX+m;this.root.event.emit(v.MOVE_GUIDELINE,p)},r=(a,c,g)=>{document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",g),this.root.event.emit(v.HIDE_GUIDELINE);const d=a.clientX-t,l=s[s.length-1].key,m=Math.max(50,this.initialWidth+d);i.setColumnWidth(l,m),this.root.event.emit(v.UPDATE_TABLE_HEADER)};this.line.addEventListener("mousedown",n)}}class Re{constructor(t,e){h(this,"element");h(this,"container");h(this,"visible",!1);if(this.context=t,!e)throw new Error("Container is required for GuideLine instance");this.container=e,this.element=document.createElement("div"),this.initElement(),this.initEvents()}initElement(){this.element.className="x-gantt-guide-line",this.element.style.position="absolute",this.element.style.top="0",this.element.style.left="0",this.element.style.width="0",this.element.style.height="100%",this.element.style.setProperty("border-left",`1px dashed ${this.context.getOptions().border.color}`,"important"),this.element.style.zIndex="9999",this.element.style.pointerEvents="none",this.element.style.display="none",this.element.style.transform="translateX(-0.5px)",getComputedStyle(this.container).position==="static"&&(this.container.style.position="relative"),this.container.appendChild(this.element)}initEvents(){this.context.event.on(v.SHOW_GUIDELINE,t=>{this.show(t)}),this.context.event.on(v.HIDE_GUIDELINE,()=>{this.hide()}),this.context.event.on(v.MOVE_GUIDELINE,t=>{this.setLeft(t)})}setContainer(t){this.element.parentElement&&this.element.parentElement.removeChild(this.element),this.container=t,getComputedStyle(this.container).position==="static"&&(this.container.style.position="relative"),this.container.appendChild(this.element)}setLeft(t){const e=this.container.clientWidth,i=Math.max(0,Math.min(e-20,t));this.element.style.transform=`translateX(${i-.5}px)`}show(t){t!==void 0&&this.setLeft(t),this.element.style.display="block",this.visible=!0}hide(){this.element.style.display="none",this.visible=!1}isVisible(){return this.visible}getLeft(){return this.element.offsetLeft}}class We{constructor(t=16){h(this,"taskQueue",new Map);h(this,"taskHandlers",new Map);h(this,"isScheduled",!1);h(this,"delay");h(this,"debouncedFlush");this.delay=t,this.debouncedFlush=E.debounce(()=>{this.flushTaskQueue()},t)}registerHandler(t,e){this.taskHandlers.set(t,e),D.debug(`RenderScheduler: 注册任务处理器 ${t}`)}registerSimpleHandler(t,e,i=!1){this.registerHandler(t,{callback:e,immediate:i})}scheduleTask(t,e=[],i={}){const s=this.taskHandlers.get(t);if(!s){D.warn(`RenderScheduler: 未找到任务类型 ${t} 的处理器`);return}const n={type:t,refresh:i.refresh,callback:s.callback,args:e,immediate:i.immediate??s.immediate??!1};if(n.immediate){D.debug(`RenderScheduler: 立即执行任务 ${t}`),this.executeTask(n);return}this.taskQueue.set(t,n),D.debug(`RenderScheduler: 添加任务到队列 ${t}`),this.debouncedFlush()}immediateExecuteTask(t,e=[],i=!1){const s=this.taskHandlers.get(t);if(!s){D.warn(`RenderScheduler: 未找到任务类型 ${t} 的处理器`);return}D.debug(`RenderScheduler: 立即执行任务 ${t}`);const n={type:t,refresh:i,callback:s.callback,args:e,immediate:!0};this.executeTask(n)}immediateFlushAll(){D.debug("RenderScheduler: 立即执行所有队列任务"),this.cancelScheduled(),this.flushTaskQueue()}executeTask(t){try{t.callback(...t.args||[])}catch(e){D.error(`RenderScheduler: 执行任务 ${t.type} 时出错:`,e)}}flushTaskQueue(){if(this.taskQueue.size===0)return;D.debug(`RenderScheduler: 执行任务队列,任务数量: ${this.taskQueue.size}`);const t=Array.from(this.taskQueue.values()).sort((e,i)=>e.immediate!==i.immediate?e.immediate?-1:1:e.refresh!==i.refresh?e.refresh?-1:1:0);this.taskQueue.clear(),this.isScheduled=!1;for(const e of t)this.executeTask(e)}cancelScheduled(){this.debouncedFlush.cancel(),this.taskQueue.clear(),this.isScheduled=!1}unregisterHandler(t){this.taskHandlers.delete(t),this.taskQueue.delete(t),D.debug(`RenderScheduler: 移除任务处理器 ${t}`)}getQueueSize(){return this.taskQueue.size}getRegisteredHandlers(){return Array.from(this.taskHandlers.keys())}destroy(){this.cancelScheduled(),this.taskHandlers.clear(),D.debug("RenderScheduler: 已销毁")}}class $e{constructor(t,e){h(this,"scrollbar");h(this,"rootElement");h(this,"tableContainer");h(this,"chartContainer");h(this,"table");h(this,"chart");h(this,"middleLine");h(this,"renderScheduler");h(this,"_id",Q());h(this,"width",0);h(this,"height",0);h(this,"isInitialized",!0);h(this,"resizeObserver");h(this,"updateSize",()=>{this.width=this.context.store.getOptionManager().getOptions().width||this.container.clientWidth,this.height=this.context.store.getOptionManager().getOptions().height||this.container.clientHeight,this.rootElement.style.width=this.width?`${this.width}px`:"100%",this.rootElement.style.height=this.height?`${this.height}px`:"100%";const t=this.context.store.getColumnManager().getTotalWidth();this.tableContainer.style.width=`${t}px`,this.tableContainer.style.height=this.height?`${this.height}px`:"100%";const e=this.width-t;this.chartContainer.style.width=`${e}px`,this.chartContainer.style.height=this.height?`${this.height}px`:"100%",this.chart.resize(e,this.height),this.middleLine.setOffset(t);const i=this.context.store.getTimeAxis().getTotalWidth();this.scrollbar.updateSize(e,this.height,i,this.context.store.getDataManager().getVisibleSize()*this.context.store.getOptionManager().getOptions().row.height+this.context.store.getOptionManager().getOptions().header.height,t)});h(this,"setStyleValue",()=>{const t=this.context.store.getOptionManager().getOptions();this.rootElement.style.setProperty("--x-gantt-primary-color",`${t.primaryColor}`),this.rootElement.style.setProperty("--x-gantt-border-color",`${t.border.color}`),this.rootElement.style.setProperty("--x-gantt-row-hover-color",`${z(t.row.hover.backgroundColor).alpha(t.row.hover.opacity)}`),this.rootElement.style.setProperty("--x-gantt-row-selected-color",`${z(t.row.select.backgroundColor).alpha(t.row.select.opacity)}`),this.rootElement.style.setProperty("--x-gantt-header-font-weight",`${t.header.fontWeight}`)});h(this,"handleUpdateTask",t=>{this.table.updateTask(t),this.chart.updateTask(t)});h(this,"handleColumnWidthChange",()=>{this.table.updateWidth(),this.updateSize()});var i;this.context=t,this.container=e,this.rootElement=document.createElement("div"),this.rootElement.id=`x-gantt-${this._id}`,this.rootElement.className="x-gantt",this.rootElement.style.overflow="hidden",this.rootElement.style.display="flex",this.rootElement.style.position="relative",this.container.appendChild(this.rootElement),this.tableContainer=document.createElement("div"),this.tableContainer.className="x-gantt-table",this.rootElement.appendChild(this.tableContainer),new Re(this.context,this.container),this.middleLine=new Ge(this.context,this.rootElement),this.chartContainer=document.createElement("div"),this.chartContainer.className="x-gantt-chart",this.rootElement.appendChild(this.chartContainer),this.table=new Te(this.context,this.tableContainer),this.chart=new Ie(this.context,this.chartContainer),this.scrollbar=new ye(this.context,this.rootElement,this.context.store.getOptionManager().getOptions().scrollbar||{}),this.renderScheduler=new We(16),this.setupTaskHandlers(),this.updateSize(),this.setupEventListeners(),(i=this.context.store.getOptionManager().getOptions().resize)!=null&&i.enabled&&(typeof window.ResizeObserver>"u"?D.warn("Current environment does not support ResizeObserver, please include a polyfill to enable auto-resize feature."):(this.resizeObserver=new ResizeObserver(()=>{this.updateSize(),this.renderScheduler.scheduleTask("VIEW_UPDATE",[!1])}),this.resizeObserver.observe(this.container)))}getScrollbar(){return this.scrollbar}setupTaskHandlers(){this.renderScheduler.registerSimpleHandler("DATA_UPDATE",(t=!0)=>this.performRender(t)),this.renderScheduler.registerSimpleHandler("VIEW_UPDATE",(t=!0)=>this.performRender(t)),this.renderScheduler.registerSimpleHandler("MANUAL_RENDER",(t=!1)=>this.performRender(t)),this.renderScheduler.registerSimpleHandler("SCROLL",()=>this.performRender(!0,!0),!0),this.renderScheduler.registerSimpleHandler("UPDATE_TASK",t=>this.handleUpdateTask(t)),this.renderScheduler.registerSimpleHandler("COLUMN_WIDTH_CHANGE",()=>this.handleColumnWidthChange()),this.renderScheduler.registerSimpleHandler("CHART_OFFSET_CHANGE",(t=!1)=>this.performRender(t))}setupEventListeners(){this.context.event.on(v.DATA_UPDATE,()=>{this.renderScheduler.scheduleTask("DATA_UPDATE",[!0])}),this.context.event.on(v.SCROLL,()=>{this.renderScheduler.scheduleTask("SCROLL",[!0],{immediate:!0})}),this.context.event.on(v.COLUMN_WIDTH_CHANGE,()=>{this.renderScheduler.scheduleTask("COLUMN_WIDTH_CHANGE")}),this.context.event.on(v.VIEW_UPDATE,()=>{this.renderScheduler.scheduleTask("VIEW_UPDATE",[!0])}),this.context.event.on(v.UPDATE_TASK,t=>{this.renderScheduler.scheduleTask("UPDATE_TASK",[t],{immediate:!0})}),this.context.event.on(v.CHART_OFFSET_CHANGE,()=>{this.renderScheduler.scheduleTask("CHART_OFFSET_CHANGE",[!1])}),this.context.event.on(v.TOGGLE_COLLAPSE,()=>{this.renderScheduler.scheduleTask("CHART_OFFSET_CHANGE",[!1],{immediate:!0})})}performRender(t=!1,e=!1){this.setStyleValue();const{x:i,y:s}=this.scrollbar.getScrollPosition(),n=this.context.store.getOptionManager().getOptions().row.height,o=this.context.store.getOptionManager().getOptions().header.height,r=Math.floor(s/n),a=Math.ceil((this.height-o)/n),c=2,g=Math.max(0,r),d=a+c,l=this.context.store.getDataManager().getVisibleTasks().slice(g,g+d);this.updateSize(),e?(this.table.refresh(s,l),this.chart.refresh(i,s,l,!0)):t?(this.table.refresh(s,l),this.chart.refresh(i,s,l)):(this.table.render(s,l),this.chart.render(i,s,l)),this.isInitialized&&(this.context.event.emit(v.LOADED),this.isInitialized=!1),D.debug("execute render")}render(t=!1){this.renderScheduler.scheduleTask("MANUAL_RENDER",[t])}immediateRender(t=!1){this.renderScheduler.immediateExecuteTask("MANUAL_RENDER",[t],t)}destroy(){D.debug("Renderer destroy"),this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=void 0),this.renderScheduler.destroy(),this.scrollbar.destroy(),this.context.event.offAll()}}class Fe{constructor(t,e,i){h(this,"_id",Q());h(this,"store");h(this,"event",new Rt);h(this,"renderer");this.container=t,this.events=e,this.container.innerHTML="",this.store=new xe(this,i),this.renderer=new $e(this,this.container),this.render(),this.registerEvents(),D.debug("----Gantt initialized for element:",this._id,this.container)}getScrollbar(){var t;return(t=this.renderer)==null?void 0:t.getScrollbar()}getOptions(){return this.store.getOptionManager().getOptions()}setOptions(t,e){this.store.setOption(t,e)}render(){this.renderer.render()}updateOptions(t,e){this.setOptions(t,e),D.debug("GanttChart options updated"),this.render()}destroy(){D.debug("Gantt destroying..."),this.event.offAll(),this.renderer.destroy(),this.container.innerHTML=""}jumpTo(t){const e=A(t);if(!this.store.getTimeAxis().isInTimeAxis(e))return!1;const i=this.store.getTimeAxis().getTimeLeft(e)-100;return this.renderer.getScrollbar().scrollTo({x:Math.max(i,0)}),!0}scrollTo(t,e){var o;let i=0,s;const n=Math.max(100,((o=this.getOptions().scrollbar)==null?void 0:o.animationDuration)||100);if(t){if(s=this.store.getDataManager().getTaskById(t),!s)return!1;i=s.flatIndex*this.store.getOptionManager().getOptions().row.height-100,setTimeout(()=>{this.jumpTo(s==null?void 0:s.startTime)},n)}return this.renderer.getScrollbar().scrollTo({y:i}),e&&s&&setTimeout(()=>{this.event.emit(v.SLIDER_BLINK,s.id)},n*2),!0}getDataChain(t){return this.store.getLinkManager().getDataChain(t)}_emit(t,...e){var i;this.events.has(t)&&((i=this.events.get(t))==null||i.forEach(s=>s(...e)))}registerEvents(){this.event.on(v.ERROR,(t,e)=>{this._emit("error",t,e)}),this.event.on(v.LOADED,()=>{this._emit("loaded")}),this.event.on(v.TASK_DRAG_END,(t,e)=>{this._emit("move",e.map(i=>{var s;return{row:(s=this.store.getDataManager().getTaskById(i.id))==null?void 0:s.data,old:i.data}}))}),this.event.on(v.CHECK_TASK,(t,e)=>{this._emit("select",t.map(i=>i.data),e,this.store.getDataManager().getCheckedList().map(i=>i.data))}),this.event.on(v.UPDATE_LINK,t=>{this._emit("update:link",t)}),this.event.on(v.CREATE_LINK,t=>{this._emit("create:link",t)}),this.event.on(v.SELECT_LINK,(t,e,i)=>{this._emit("select:link",t,e,i)}),this.event.on(v.CONTEXT_LINK,(t,e)=>{this._emit("contextmenu:link",t,e)}),this.event.on(v.ROW_CLICK,(t,e)=>{this._emit("click:row",t,e.data)}),this.event.on(v.ROW_DBL_CLICK,(t,e)=>{this._emit("dblclick:row",t,e.data)}),this.event.on(v.ROW_CONTEXTMENU,(t,e)=>{this._emit("contextmenu:row",t,e.data)}),this.event.on(v.SLIDER_CLICK,(t,e)=>{this._emit("click:slider",t,e.data)}),this.event.on(v.SLIDER_DBL_CLICK,(t,e)=>{this._emit("dblclick:slider",t,e.data)}),this.event.on(v.SLIDER_CONTEXTMENU,(t,e)=>{this._emit("contextmenu:slider",t,e.data)}),this.event.on(v.SLIDER_ENTER,(t,e)=>{this._emit("enter:slider",t,e.data)}),this.event.on(v.SLIDER_HOVER,(t,e)=>{this._emit("hover:slider",t,e.data)}),this.event.on(v.SLIDER_LEAVE,(t,e)=>{this._emit("leave:slider",t,e.data)}),this.event.on(v.BASELINE_CLICK,(t,e,i)=>{this._emit("click:baseline",t,e.data,i.data)}),this.event.on(v.BASELINE_CONTEXTMENU,(t,e,i)=>{this._emit("contextmenu:baseline",t,e.data,i.data)}),this.event.on(v.BASELINE_MOUSEENTER,(t,e,i)=>{this._emit("enter:baseline",t,e.data,i.data)}),this.event.on(v.BASELINE_MOUSEMOVE,(t,e,i)=>{this._emit("hover:baseline",t,e.data,i.data)}),this.event.on(v.BASELINE_MOUSEOUT,(t,e,i)=>{this._emit("leave:baseline",t,e.data,i.data)})}}class Be{constructor(t,e){h(this,"context");h(this,"events",new Map);e!=null&&e.logLevel&&D.setOptions({showTimestamp:e.logLevel==="debug",level:{debug:1,info:2,warn:3,error:4,none:5}[e.logLevel]||2});const i=typeof t=="string"?document.querySelector(t):t;if(!i)throw D.exception(`Container ${t} not found or invalid.`);i.innerHTML="",i.classList.add("x-gantt-container"),this.context=new Fe(i,this.events,e)}update(t,e={merge:!0}){this.context.updateOptions(t,e)}render(){this.context.render(),D.info("Gantt rendered successfully.")}destroy(){D.info("Gantt destroying..."),this.events.clear(),this.context.destroy(),D.info("Gantt destroyed successfully.")}jumpTo(t){return this.context.jumpTo(t)}scrollTo(t,e){return this.context.scrollTo(t,e)}getDataChain(t){return this.context.getDataChain(t)}on(t,e){var i;this.events.has(t)||this.events.set(t,[]),(i=this.events.get(t))==null||i.push(e)}off(t,e){if(this.events.has(t))if(e){const i=this.events.get(t);i&&this.events.set(t,i.filter(s=>s!==e))}else this.events.delete(t)}getDataById(t){var e;return(e=this.context.store.getDataManager().getTaskById(t))==null?void 0:e.data}getDataSize(){return this.context.store.getDataManager().getDataSize()}removeDataById(t){return this.context.store.getDataManager().deleteTaskById(t)}}Ht();const ze=ft;N.dayjs=A,N.XGantt=Be,N.colorjs=z,N.generateId=Q,N.version=ze,Object.defineProperty(N,Symbol.toStringTag,{value:"Module"})});
|
|
18
|
+
`;break}this.iconElement.style.setProperty("background-color",e,"important"),this.iconElement.style.setProperty("border-color",i,"important")}bindEvents(){this.element.addEventListener("click",t=>{if(t.preventDefault(),t.stopPropagation(),this.task){const e=this.context.store.getDataManager().isTaskChecked(this.task);e?(this.context.store.getDataManager().updateCheckedList(!1,this.task),this.setState(0)):(this.context.store.getDataManager().updateCheckedList(!0,this.task),this.setState(1)),this.context.event.emit(v.CHECK_TASK,[this.task],!e)}else{const e=this.context.store.getDataManager().getCheckedList().length===this.context.store.getDataManager().getVisibleSize();this.setState(e?1:0),this.context.store.getDataManager().toggleAllChecked(!e),this.context.event.emit(v.CHECK_TASK,this.context.store.getDataManager().getVisibleTasks(),!e)}}),this.element.addEventListener("contextmenu",t=>{if(t.preventDefault(),t.stopPropagation(),this.task){const e=this.task.getAllChildren();if(e.length===0)return;this.context.store.getOptionManager().getOptions().selection.includeSelf&&e.unshift(this.task);const i=e.every(s=>this.context.store.getDataManager().isTaskChecked(s));i?(e.forEach(s=>{this.context.store.getDataManager().updateCheckedList(!1,s)}),this.setState(0)):(e.forEach(s=>{this.context.store.getDataManager().updateCheckedList(!0,s)}),this.setState(1)),this.context.event.emit(v.CHECK_TASK,e,!i)}else{const e=this.context.store.getDataManager().getCheckedList().length===this.context.store.getDataManager().getVisibleSize();this.setState(e?1:0),this.context.store.getDataManager().toggleAllChecked(!e),this.context.event.emit(v.CHECK_TASK,this.context.store.getDataManager().getVisibleTasks(),!e)}})}registerEvents(){this.context.event.on(v.CHECK_TASK,this.updateState.bind(this))}getElement(){return this.element}setState(t){this._state!==t&&(this._state=t,this.updateIcon())}updateState(){if(this.task){const t=this.context.store.getDataManager().isTaskChecked(this.task);this.setState(t?1:0)}else{const t=this.context.store.getDataManager().getCheckedList().length===this.context.store.getDataManager().getVisibleSize();this.setState(t?1:0)}}destroy(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}}const xt="handler_column";class Pt{constructor(t){h(this,"sourceColumns",[]);h(this,"columns",[]);h(this,"leafColumns",[]);h(this,"temporaryLeafColumns",[]);h(this,"mergeInfo",new Map);h(this,"collapseTable",!1);this.context=t}init(t){t!=null&&t.length&&(this.sourceColumns=t),this.columns=[],this.leafColumns=[],this.processColumns(this.sourceColumns,this.columns)}processColumns(t,e=[],i,s=1){t.forEach((n,o)=>{var p;const r="children"in n&&Array.isArray(n.children)&&n.children.length>0,a=!r;let c="";r?c=`group-${o}`:c=`field-${n.field}`;const u=[...(i==null?void 0:i.path)||[],c];c="column-"+o+"-"+u.join("-");const d=n.label||(a?n.field:""),l=a?((p=this.temporaryLeafColumns.find(g=>g.key===c))==null?void 0:p.width)||n.width||100:"auto",m={label:d,level:s,maxLevel:s,column:n,children:[],path:u,key:c,isLeaf:a,width:l};if(e.push(m),a)this.leafColumns.push(m);else if(r){const g=n.children;this.processColumns(g,m.children,m,s+1),m.maxLevel=Math.max(m.maxLevel,m.children.reduce((y,x)=>Math.max(y,x.maxLevel),0))}}),this.temporaryLeafColumns=D.cloneDeep(this.leafColumns)}findColumnByKey(t){return this.columns.find(e=>e.key===t)}update(t){this.init(t),this.clearMergeInfo()}getColumns(){return this.columns}getColumn(t){return this.leafColumns.find(e=>e.key===t)}getLeafColumns(){return this.leafColumns}getTotalWidth(){return this.isCollapsed()?0:this.leafColumns.reduce((t,e)=>t+e.width,this.getHandlerColumn().width)}getColumnWidth(t){if(t===xt)return this.getHandlerColumn().width;const e=this.leafColumns.find(i=>i.key===t);return typeof(e==null?void 0:e.width)=="number"?e.width:0}setColumnWidth(t,e){const i=this.leafColumns.find(s=>s.key===t);i&&(i.width=e),this.context.event.emit(v.COLUMN_WIDTH_CHANGE,t,e)}isLastColumn(t){return this.leafColumns.findIndex(i=>i.key===t)===this.leafColumns.length-1}addMergeInfo(t,e,i){this.mergeInfo.has(t)||this.mergeInfo.set(t,new Map),this.mergeInfo.get(t).set(e,i)}getMergeInfo(t,e){var i;return(i=this.mergeInfo.get(t))==null?void 0:i.get(e)}clearMergeInfo(){this.mergeInfo.clear()}getHandlerColumn(){let t=0;const e=this.context.store.getOptionManager().getOptions().drag.enabled;e&&(t+=40);const i=this.context.store.getOptionManager().getOptions().selection.enabled;i&&(t+=40);const s=this.context.store.getOptionManager().getOptions().expand.show;return this.context.store.getDataManager().dataLevel>0&&s&&(t+=40),{label:"",level:1,maxLevel:1,column:{field:"",resizable:!1,align:"left",headerAlign:"left",customStyle:{paddingLeft:s?`${e?40:8}px`:0},headerRender:()=>i?new mt(this.context).getElement():null,ellipsis:!1},children:[],path:[],key:xt,isLeaf:!0,width:t}}isMultiHeader(){return this.columns.some(t=>t.maxLevel>1)}collapse(){this.collapseTable=!this.collapseTable,this.context.event.emit(v.TOGGLE_COLLAPSE)}isCollapsed(){return this.collapseTable}}const K=class K{constructor(t,e){h(this,"links",[]);h(this,"fromLinksMap",new Map);h(this,"toLinksMap",new Map);h(this,"topoOrder",null);h(this,"topoIndex",new Map);h(this,"lastCycleReport",null);h(this,"directConnectionCache",new Map);h(this,"forwardMemo",new Map);h(this,"backwardMemo",new Map);h(this,"cacheDependencies",new Map);h(this,"cacheAccessStats",new Map);h(this,"MAX_CACHE_SIZE",1e3);h(this,"CACHE_TTL",5*60*1e3);h(this,"enableCycleDetection",!0);this.store=t,this.event=e}setCycleDetection(t){this.enableCycleDetection=!!t}getLinks(){return this.links}getLinksByTaskId(t){return this.links.filter(e=>e.from===t||e.to===t)}setLinks(t,e=!1){const i=new Set,s=new Set;this.links.forEach(r=>{i.add(r.from),i.add(r.to)}),t.forEach(r=>{s.add(r.from),s.add(r.to)});const n=Array.from(new Set([...i,...s]));let o="BATCH";this.links.length===0?o="ADD":t.length===0?o="REMOVE":Math.abs(t.length-this.links.length)===1&&(o=t.length>this.links.length?"ADD":"REMOVE"),this.links=t||[],this.rebuildAdjacency(),this.invalidateSmartCaches(n,o),e&&this.enableCycleDetection?this.detectAllCycles():this.lastCycleReport=null}update(){this.setLinks(this.links,!0)}isLinkExist(t,e,i){return this.links.some(s=>s.from===t&&s.to===e&&(s.type||"FS")===(i||"FS"))}validateLinkType(t){return Object.keys(K.LINK_TYPE_MAP).includes(t)}convertPointsToLinkType(t,e){return`${t}${e}`}validateLink(t){return!t||t.from==null||t.to==null?{ok:!1,reason:X.LINK_INVALID_ARG,message:O.getMessage("Missing endpoint")}:t.from===t.to?{ok:!1,reason:X.LINK_SAME,message:O.getMessage("Cannot link task to itself")}:!this.getTask(t.from)||!this.getTask(t.to)?{ok:!1,reason:X.TASK_NOT_FOUND,message:O.getMessage("Task not found")}:t.type&&!this.validateLinkType(t.type)?{ok:!1,reason:X.INVALID_TYPE,message:O.getMessage(`Invalid link type: ${t.type}. It must be one of: ${Object.keys(K.LINK_TYPE_MAP).join(", ")}`)}:this.isLinkExist(t.from,t.to,t.type)?{ok:!1,reason:X.LINK_EXIST,message:O.getMessage("Link already exists")}:{ok:!0}}validateChain(t,e,i){const s={from:t,to:e,type:i},n=this.validateLink(s);if(!n.ok)return n;if(this.enableCycleDetection){const o=this.willCreateCycle(t,e);if(o)return{ok:!1,reason:X.LINK_CYCLE,message:O.getMessage("Adding this link would create a cycle"),cycleInfo:o}}return{ok:!0}}validateLinks(t){const e=[],i=[];for(const s of t){const n=this.validateLink(s);n.ok?i.push(s):e.push({link:s,reason:n.reason,message:n.message||""})}return{invalid:e,valid:i,totalCount:t.length}}getTaskLinks(t){const e=this.toLinksMap.get(t)||[],i=this.fromLinksMap.get(t)||[],s=[...e,...i];return{incoming:e,outgoing:i,all:s}}getTaskPredecessors(t){const e=this.toLinksMap.get(t)||[];return{tasks:e.map(s=>this.getTask(s.from)).filter(s=>!!s),links:e}}getTaskSuccessors(t){const e=this.fromLinksMap.get(t)||[];return{tasks:e.map(s=>this.getTask(s.to)).filter(s=>!!s),links:e}}getDirectlyConnectedTasks(t){const e=this.getTaskPredecessors(t).tasks,i=this.getTaskSuccessors(t).tasks,s=new Map;return[...e,...i].forEach(n=>{s.set(n.id,n)}),Array.from(s.values())}hasConnectionPath(t,e){if(t===e)return!0;const i=new Set,s=[t];for(;s.length;){const n=s.pop();if(n===e)return!0;if(i.has(n))continue;i.add(n);const o=this.getTaskSuccessors(n).tasks;for(const r of o)i.has(r.id)||s.push(r.id)}return!1}getDataChain(t){const e=this.getTask(t);if(!e)return{prev:{chain:[],nodes:[],links:[]},next:{chain:[],nodes:[],links:[]},allNodes:[],allLinks:[],current:void 0};const i=this.forwardMemo.get(t),s=this.backwardMemo.get(t);this.recordCacheAccess(t,!!(i&&s));const n=x=>(this.fromLinksMap.get(x)||[]).map(b=>this.getTask(b.to)).filter(b=>!!b),o=x=>(this.toLinksMap.get(x)||[]).map(b=>this.getTask(b.from)).filter(b=>!!b),r=(x,T,b=new Set)=>{const w=x.id;if(this.forwardMemo.has(w))return this.recordCacheAccess(w,!0),this.forwardMemo.get(w);if(T.has(x.id)||b.has(x.id))return[];T.add(x.id),b.add(x.id);const C=n(x.id);let M=[];if(C.length===0)M=[[x]];else{for(const E of C){const S=r(E,T,b);for(const L of S)M.push([x,...L])}M.length===0&&(M=[[x]])}return T.delete(x.id),M.length<100&&(this.forwardMemo.set(w,M),this.recordCacheAccess(w,!1)),M},a=(x,T,b=new Set)=>{const w=x.id;if(this.backwardMemo.has(w))return this.recordCacheAccess(w,!0),this.backwardMemo.get(w);if(T.has(x.id)||b.has(x.id))return[];T.add(x.id),b.add(x.id);const C=o(x.id);let M=[];if(C.length===0)M=[[x]];else{for(const E of C){const S=a(E,T,b);for(const L of S)M.push([...L,x])}M.length===0&&(M=[[x]])}return T.delete(x.id),M.length<100&&(this.backwardMemo.set(w,M),this.recordCacheAccess(w,!1)),M},c=a(e,new Set),u=r(e,new Set);this.getDirectlyConnectedTasks(t).forEach(x=>{this.establishCacheDependency(t,x.id),this.establishCacheDependency(x.id,t)});const l=new Map,m=new Map,p=(x,T)=>{const b=[];for(const w of x){w.forEach(C=>l.set(C.id,C));for(let C=0;C<w.length-1;C++){const M=w[C].id,E=w[C+1].id,S=this.findLinkFast(M,E);if(S){const L=`${S.from}-${S.to}-${S.type||"default"}`;m.has(L)||(b.push(S),m.set(L,S))}}}return b},g=p(c),y=p(u);return{prev:{chain:c.map(x=>x.map(T=>T.getEmitData().data)),nodes:c.flat().filter((x,T,b)=>b.findIndex(w=>w.id===x.id)===T).map(x=>x.getEmitData().data),links:g},next:{chain:u.map(x=>x.map(T=>T.getEmitData().data)),nodes:u.flat().filter((x,T,b)=>b.findIndex(w=>w.id===x.id)===T).map(x=>x.getEmitData().data),links:y},allNodes:Array.from(l.values()).map(x=>x.getEmitData().data),allLinks:Array.from(m.values()),current:e.getEmitData().data}}hasCycle(){return this.lastCycleReport?this.lastCycleReport.hasCycle:this.detectAllCycles(!1).hasCycle}detectAllCycles(t=!0){const e=new Map,i=new Map,s=new Set,n=[];let o=0;const r=[],a=l=>{e.set(l,o),i.set(l,o),o++,n.push(l),s.add(l);const m=this.fromLinksMap.get(l)||[];for(const p of m)e.has(p.to)?s.has(p.to)&&i.set(l,Math.min(i.get(l),e.get(p.to))):(a(p.to),i.set(l,Math.min(i.get(l),i.get(p.to))));if(i.get(l)===e.get(l)){const p=[];for(;;){const g=n.pop();if(s.delete(g),p.push(g),g===l)break}r.push(p)}};this.store.getDataManager().getTasks(!1).forEach(l=>{e.has(l.id)||a(l.id)});const c=r.filter(l=>l.length>1||this.hasSelfLoop(l[0])),u=c.map(l=>l.slice()),d={hasCycle:c.length>0,sccs:c,cycles:u,nodes:Array.from(new Set(c.flat()))};return this.lastCycleReport=d,t&&d.hasCycle&&O.warn("Cycle detected in task dependencies",d),d}getCycleReport(){return this.lastCycleReport}detectLinkConflicts(t,e){const i=this.links.filter(d=>d.from===t&&d.to===e),s=this.links.filter(d=>d.from===e&&d.to===t),n=[...i,...s],o=[],r=[],a=new Map;n.forEach(d=>{d.type&&a.set(d.type,(a.get(d.type)||0)+1)});const c=a.has("FS"),u=a.has("SF");return c&&u&&(o.push(...n.filter(d=>d.type==="FS"||d.type==="SF")),r.push("FS-SF conflict")),{hasConflict:o.length>0,conflicts:o,conflictTypes:r}}hasConflictingLinks(t,e){return this.detectLinkConflicts(t,e).hasConflict}computeTopo(){if(this.topoOrder)return this.topoOrder;const t=new Map;this.store.getDataManager().getTasks(!1).forEach(s=>t.set(s.id,0));for(const s of this.links)t.has(s.to)&&t.set(s.to,(t.get(s.to)||0)+1);const e=[];t.forEach((s,n)=>{s===0&&e.push(n)});const i=[];for(;e.length;){const s=e.shift();i.push(s);const n=this.fromLinksMap.get(s)||[];for(const o of n){const r=(t.get(o.to)||0)-1;t.set(o.to,r),r===0&&e.push(o.to)}}return i.length!==this.store.getDataManager().getTasks(!1).length?null:(i.forEach((s,n)=>this.topoIndex.set(s,n)),this.topoOrder=i,i)}willCreateCycle(t,e){if(this.computeTopo()){const r=this.topoIndex.get(t),a=this.topoIndex.get(e);if(r!=null&&a!=null&&r<a)return null}const s=[e],n=new Set,o=new Map;for(;s.length;){const r=s.pop();if(n.has(r))continue;n.add(r);const a=this.fromLinksMap.get(r)||[];for(const c of a){const u=c.to;if(!n.has(u)&&!o.has(u)&&o.set(u,r),u===t){o.has(u)||o.set(u,r);const d=[];let l=t;for(;l!==void 0;)d.push(l),l=o.get(l);const m=d.slice().reverse(),p=[t,...m];return{cycles:[p],nodes:Array.from(new Set(p)),sccs:[]}}s.push(u)}}return null}rebuildAdjacency(){this.fromLinksMap.clear(),this.toLinksMap.clear();for(const t of this.links)this.fromLinksMap.has(t.from)||this.fromLinksMap.set(t.from,[]),this.toLinksMap.has(t.to)||this.toLinksMap.set(t.to,[]),this.fromLinksMap.get(t.from).push(t),this.toLinksMap.get(t.to).push(t)}invalidateAllCaches(){this.topoOrder=null,this.topoIndex.clear(),this.directConnectionCache.clear(),this.forwardMemo.clear(),this.backwardMemo.clear(),this.cacheDependencies.clear(),this.cacheAccessStats.clear()}invalidateConnectionCache(t){t?t.forEach(e=>this.directConnectionCache.delete(e)):this.directConnectionCache.clear()}findLinkFast(t,e){const i=this.fromLinksMap.get(t);if(i)return i.find(s=>s.to===e)}getTask(t){return this.store.getDataManager().getTaskById(t)}hasSelfLoop(t){return(this.fromLinksMap.get(t)||[]).some(e=>e.to===t)}buildSimpleCycleInfo(t,e){const i=[t,e];return{cycles:[i],nodes:Array.from(new Set(i)),sccs:[]}}invalidateSmartCaches(t,e="UPDATE"){if(!t||t.length===0){this.invalidateAllCaches();return}switch(e){case"ADD":this.handleAddLinkInvalidation(t);break;case"REMOVE":this.handleRemoveLinkInvalidation(t);break;case"UPDATE":this.handleUpdateLinkInvalidation(t);break;case"BATCH":this.handleBatchOperationInvalidation(t);break}this.cleanupExpiredCaches(),this.limitCacheSize()}handleAddLinkInvalidation(t){const e=new Set;for(const i of t)e.add(i),this.getUpstreamTasksRecursive(i,3).forEach(o=>e.add(o)),this.getDownstreamTasksRecursive(i,3).forEach(o=>e.add(o));this.invalidateSpecificCaches(Array.from(e))}handleRemoveLinkInvalidation(t){const e=new Set;for(const i of t)e.add(i),this.getConnectedComponent(i).forEach(n=>e.add(n));this.invalidateSpecificCaches(Array.from(e))}handleUpdateLinkInvalidation(t){const e=new Set;for(const i of t){e.add(i),this.getDirectlyConnectedTasks(i).forEach(o=>e.add(o.id));const n=this.cacheDependencies.get(i);n&&n.forEach(o=>e.add(o))}this.invalidateSpecificCaches(Array.from(e))}handleBatchOperationInvalidation(t){if(t.length>50){this.invalidateAllCaches();return}const e=new Set(t);for(const i of t)this.getDirectlyConnectedTasks(i).forEach(n=>e.add(n.id));this.invalidateSpecificCaches(Array.from(e))}invalidateSpecificCaches(t){for(const e of t)this.forwardMemo.delete(e),this.backwardMemo.delete(e),this.directConnectionCache.delete(e),this.cacheAccessStats.delete(e),this.cacheDependencies.delete(e),this.cacheDependencies.forEach((i,s)=>{i.delete(e)});t.length>5&&(this.topoOrder=null,this.topoIndex.clear())}getUpstreamTasksRecursive(t,e){const i=new Set,s=new Set,n=(o,r)=>{if(r>=e||s.has(o))return;s.add(o);const a=this.getTaskPredecessors(o).tasks;for(const c of a)i.add(c.id),n(c.id,r+1)};return n(t,0),Array.from(i)}getDownstreamTasksRecursive(t,e){const i=new Set,s=new Set,n=(o,r)=>{if(r>=e||s.has(o))return;s.add(o);const a=this.getTaskSuccessors(o).tasks;for(const c of a)i.add(c.id),n(c.id,r+1)};return n(t,0),Array.from(i)}getConnectedComponent(t){const e=new Set,i=new Set,s=[t];for(;s.length>0;){const n=s.pop();if(i.has(n))continue;i.add(n),e.add(n);const o=this.getDirectlyConnectedTasks(n);for(const r of o)i.has(r.id)||s.push(r.id)}return Array.from(e)}cleanupExpiredCaches(){const t=Date.now(),e=[];this.cacheAccessStats.forEach((i,s)=>{t-i.lastAccess>this.CACHE_TTL&&e.push(s)}),this.invalidateSpecificCaches(e)}limitCacheSize(){const t=this.forwardMemo.size+this.backwardMemo.size;if(t>this.MAX_CACHE_SIZE){const e=Array.from(this.cacheAccessStats.entries()).sort((n,o)=>n[1].lastAccess-o[1].lastAccess),i=Math.ceil(t*.2),s=e.slice(0,i).map(([n])=>n);this.invalidateSpecificCaches(s)}}recordCacheAccess(t,e){const i=this.cacheAccessStats.get(t)||{hits:0,lastAccess:0};e&&(i.hits+=1),i.lastAccess=Date.now(),this.cacheAccessStats.set(t,i)}establishCacheDependency(t,e){this.cacheDependencies.has(t)||this.cacheDependencies.set(t,new Set),this.cacheDependencies.get(t).add(e)}getDebugInfo(){const t=this.store.getDataManager().getTasks(!1),e=t.filter(i=>{const s=this.toLinksMap.has(i.id)&&this.toLinksMap.get(i.id).length>0,n=this.fromLinksMap.has(i.id)&&this.fromLinksMap.get(i.id).length>0;return!s&&!n}).map(i=>i.id);return{totalLinks:this.links.length,totalTasks:t.length,connectionComponents:this.countConnectionComponents(),hasCycle:this.hasCycle(),topologicalOrder:this.computeTopo(),isolatedTasks:e}}countConnectionComponents(){const t=this.store.getDataManager().getTasks(!1),e=new Set;let i=0;const s=n=>{if(e.has(n))return;e.add(n);const o=this.getDirectlyConnectedTasks(n);for(const r of o)e.has(r.id)||s(r.id)};for(const n of t)e.has(n.id)||(s(n.id),i++);return i}getCachePerformanceStats(){const t=Array.from(this.cacheAccessStats.values()).reduce((n,o)=>n+o.hits,0),e=this.cacheAccessStats.size,i=Date.now(),s=Array.from(this.cacheAccessStats.values()).filter(n=>i-n.lastAccess>this.CACHE_TTL).length;return{totalCacheSize:this.forwardMemo.size+this.backwardMemo.size,hitRate:e>0?t/e*100:0,memoryUsage:this.estimateMemoryUsage(),expiredEntries:s,dependencyCount:this.cacheDependencies.size}}estimateMemoryUsage(){const t=this.links.length*100,e=this.forwardMemo.size*300,i=this.backwardMemo.size*300,s=this.cacheDependencies.size*50,n=this.cacheAccessStats.size*50,o=t+e+i+s+n;return o>1024*1024?`${(o/1024/1024).toFixed(2)} MB`:o>1024?`${(o/1024).toFixed(2)} KB`:`${o} B`}};h(K,"LINK_TYPE_MAP",{FS:{from:"F",to:"S",description:"结束到开始"},SF:{from:"S",to:"F",description:"开始到结束"},FF:{from:"F",to:"F",description:"结束到结束"},SS:{from:"S",to:"S",description:"开始到开始"}});let lt=K;var U=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function V(f){return f&&f.__esModule&&Object.prototype.hasOwnProperty.call(f,"default")?f.default:f}var yt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){var e,i,s=1e3,n=6e4,o=36e5,r=864e5,a=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,c=31536e6,u=2628e6,d=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,l={years:c,months:u,days:r,hours:o,minutes:n,seconds:s,milliseconds:1,weeks:6048e5},m=function(M){return M instanceof w},p=function(M,E,S){return new w(M,S,E.$l)},g=function(M){return i.p(M)+"s"},y=function(M){return M<0},x=function(M){return y(M)?Math.ceil(M):Math.floor(M)},T=function(M){return Math.abs(M)},b=function(M,E){return M?y(M)?{negative:!0,format:""+T(M)+E}:{negative:!1,format:""+M+E}:{negative:!1,format:""}},w=function(){function M(S,L,H){var I=this;if(this.$d={},this.$l=H,S===void 0&&(this.$ms=0,this.parseFromMilliseconds()),L)return p(S*l[g(L)],this);if(typeof S=="number")return this.$ms=S,this.parseFromMilliseconds(),this;if(typeof S=="object")return Object.keys(S).forEach(function($){I.$d[g($)]=S[$]}),this.calMilliseconds(),this;if(typeof S=="string"){var _=S.match(d);if(_){var G=_.slice(2).map(function($){return $!=null?Number($):0});return this.$d.years=G[0],this.$d.months=G[1],this.$d.weeks=G[2],this.$d.days=G[3],this.$d.hours=G[4],this.$d.minutes=G[5],this.$d.seconds=G[6],this.calMilliseconds(),this}}return this}var E=M.prototype;return E.calMilliseconds=function(){var S=this;this.$ms=Object.keys(this.$d).reduce(function(L,H){return L+(S.$d[H]||0)*l[H]},0)},E.parseFromMilliseconds=function(){var S=this.$ms;this.$d.years=x(S/c),S%=c,this.$d.months=x(S/u),S%=u,this.$d.days=x(S/r),S%=r,this.$d.hours=x(S/o),S%=o,this.$d.minutes=x(S/n),S%=n,this.$d.seconds=x(S/s),S%=s,this.$d.milliseconds=S},E.toISOString=function(){var S=b(this.$d.years,"Y"),L=b(this.$d.months,"M"),H=+this.$d.days||0;this.$d.weeks&&(H+=7*this.$d.weeks);var I=b(H,"D"),_=b(this.$d.hours,"H"),G=b(this.$d.minutes,"M"),$=this.$d.seconds||0;this.$d.milliseconds&&($+=this.$d.milliseconds/1e3,$=Math.round(1e3*$)/1e3);var R=b($,"S"),W=S.negative||L.negative||I.negative||_.negative||G.negative||R.negative,z=_.format||G.format||R.format?"T":"",Y=(W?"-":"")+"P"+S.format+L.format+I.format+z+_.format+G.format+R.format;return Y==="P"||Y==="-P"?"P0D":Y},E.toJSON=function(){return this.toISOString()},E.format=function(S){var L=S||"YYYY-MM-DDTHH:mm:ss",H={Y:this.$d.years,YY:i.s(this.$d.years,2,"0"),YYYY:i.s(this.$d.years,4,"0"),M:this.$d.months,MM:i.s(this.$d.months,2,"0"),D:this.$d.days,DD:i.s(this.$d.days,2,"0"),H:this.$d.hours,HH:i.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:i.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:i.s(this.$d.seconds,2,"0"),SSS:i.s(this.$d.milliseconds,3,"0")};return L.replace(a,function(I,_){return _||String(H[I])})},E.as=function(S){return this.$ms/l[g(S)]},E.get=function(S){var L=this.$ms,H=g(S);return H==="milliseconds"?L%=1e3:L=H==="weeks"?x(L/l[H]):this.$d[H],L||0},E.add=function(S,L,H){var I;return I=L?S*l[g(L)]:m(S)?S.$ms:p(S,this).$ms,p(this.$ms+I*(H?-1:1),this)},E.subtract=function(S,L){return this.add(S,L,!0)},E.locale=function(S){var L=this.clone();return L.$l=S,L},E.clone=function(){return p(this.$ms,this)},E.humanize=function(S){return e().add(this.$ms,"ms").locale(this.$l).fromNow(!S)},E.valueOf=function(){return this.asMilliseconds()},E.milliseconds=function(){return this.get("milliseconds")},E.asMilliseconds=function(){return this.as("milliseconds")},E.seconds=function(){return this.get("seconds")},E.asSeconds=function(){return this.as("seconds")},E.minutes=function(){return this.get("minutes")},E.asMinutes=function(){return this.as("minutes")},E.hours=function(){return this.get("hours")},E.asHours=function(){return this.as("hours")},E.days=function(){return this.get("days")},E.asDays=function(){return this.as("days")},E.weeks=function(){return this.get("weeks")},E.asWeeks=function(){return this.as("weeks")},E.months=function(){return this.get("months")},E.asMonths=function(){return this.as("months")},E.years=function(){return this.get("years")},E.asYears=function(){return this.as("years")},M}(),C=function(M,E,S){return M.add(E.years()*S,"y").add(E.months()*S,"M").add(E.days()*S,"d").add(E.hours()*S,"h").add(E.minutes()*S,"m").add(E.seconds()*S,"s").add(E.milliseconds()*S,"ms")};return function(M,E,S){e=S,i=S().$utils(),S.duration=function(I,_){var G=S.locale();return p(I,{$l:G},_)},S.isDuration=m;var L=E.prototype.add,H=E.prototype.subtract;E.prototype.add=function(I,_){return m(I)?C(this,I,1):L.bind(this)(I,_)},E.prototype.subtract=function(I,_){return m(I)?C(this,I,-1):H.bind(this)(I,_)}}})})(yt);var Nt=yt.exports;const Yt=V(Nt);var wt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return function(e,i,s){i.prototype.isBetween=function(n,o,r,a){var c=s(n),u=s(o),d=(a=a||"()")[0]==="(",l=a[1]===")";return(d?this.isAfter(c,r):!this.isBefore(c,r))&&(l?this.isBefore(u,r):!this.isAfter(u,r))||(d?this.isBefore(c,r):!this.isAfter(c,r))&&(l?this.isAfter(u,r):!this.isBefore(u,r))}}})})(wt);var Ut=wt.exports;const Xt=V(Ut);var bt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return function(e,i){i.prototype.isSameOrBefore=function(s,n){return this.isSame(s,n)||this.isBefore(s,n)}}})})(bt);var Vt=bt.exports;const qt=V(Vt);var Tt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return function(e,i){i.prototype.isSameOrAfter=function(s,n){return this.isSame(s,n)||this.isAfter(s,n)}}})})(Tt);var Qt=Tt.exports;const Zt=V(Qt);var St={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return function(e,i,s){var n=i.prototype,o=function(d){return d&&(d.indexOf?d:d.s)},r=function(d,l,m,p,g){var y=d.name?d:d.$locale(),x=o(y[l]),T=o(y[m]),b=x||T.map(function(C){return C.slice(0,p)});if(!g)return b;var w=y.weekStart;return b.map(function(C,M){return b[(M+(w||0))%7]})},a=function(){return s.Ls[s.locale()]},c=function(d,l){return d.formats[l]||function(m){return m.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(p,g,y){return g||y.slice(1)})}(d.formats[l.toUpperCase()])},u=function(){var d=this;return{months:function(l){return l?l.format("MMMM"):r(d,"months")},monthsShort:function(l){return l?l.format("MMM"):r(d,"monthsShort","months",3)},firstDayOfWeek:function(){return d.$locale().weekStart||0},weekdays:function(l){return l?l.format("dddd"):r(d,"weekdays")},weekdaysMin:function(l){return l?l.format("dd"):r(d,"weekdaysMin","weekdays",2)},weekdaysShort:function(l){return l?l.format("ddd"):r(d,"weekdaysShort","weekdays",3)},longDateFormat:function(l){return c(d.$locale(),l)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};n.localeData=function(){return u.bind(this)()},s.localeData=function(){var d=a();return{firstDayOfWeek:function(){return d.weekStart||0},weekdays:function(){return s.weekdays()},weekdaysShort:function(){return s.weekdaysShort()},weekdaysMin:function(){return s.weekdaysMin()},months:function(){return s.months()},monthsShort:function(){return s.monthsShort()},longDateFormat:function(l){return c(d,l)},meridiem:d.meridiem,ordinal:d.ordinal}},s.months=function(){return r(a(),"months")},s.monthsShort=function(){return r(a(),"monthsShort","months",3)},s.weekdays=function(d){return r(a(),"weekdays",null,null,d)},s.weekdaysShort=function(d){return r(a(),"weekdaysShort","weekdays",3,d)},s.weekdaysMin=function(d){return r(a(),"weekdaysMin","weekdays",2,d)}}})})(St);var jt=St.exports;const Jt=V(jt);var vt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){var e="week",i="year";return function(s,n,o){var r=n.prototype;r.week=function(a){if(a===void 0&&(a=null),a!==null)return this.add(7*(a-this.week()),"day");var c=this.$locale().yearStart||1;if(this.month()===11&&this.date()>25){var u=o(this).startOf(i).add(1,i).date(c),d=o(this).endOf(e);if(u.isBefore(d))return 1}var l=o(this).startOf(i).date(c).startOf(e).subtract(1,"millisecond"),m=this.diff(l,e,!0);return m<0?o(this).startOf("week").week():Math.ceil(m)},r.weeks=function(a){return a===void 0&&(a=null),this.week(a)}}})})(vt);var Kt=vt.exports;const te=V(Kt);var kt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return function(e,i){i.prototype.weekYear=function(){var s=this.month(),n=this.week(),o=this.year();return n===1&&s===11?o+1:s===0&&n>=52?o-1:o}}})})(kt);var ee=kt.exports;const ie=V(ee);var Et={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return function(e,i){var s=i.prototype,n=s.format;s.format=function(o){var r=this,a=this.$locale();if(!this.isValid())return n.bind(this)(o);var c=this.$utils(),u=(o||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(d){switch(d){case"Q":return Math.ceil((r.$M+1)/3);case"Do":return a.ordinal(r.$D);case"gggg":return r.weekYear();case"GGGG":return r.isoWeekYear();case"wo":return a.ordinal(r.week(),"W");case"w":case"ww":return c.s(r.week(),d==="w"?1:2,"0");case"W":case"WW":return c.s(r.isoWeek(),d==="W"?1:2,"0");case"k":case"kk":return c.s(String(r.$H===0?24:r.$H),d==="k"?1:2,"0");case"X":return Math.floor(r.$d.getTime()/1e3);case"x":return r.$d.getTime();case"z":return"["+r.offsetName()+"]";case"zzz":return"["+r.offsetName("long")+"]";default:return d}});return n.bind(this)(u)}}})})(Et);var se=Et.exports;const ne=V(se);var Ct={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return function(e,i,s){s.updateLocale=function(n,o){var r=s.Ls[n];if(r)return(o?Object.keys(o):[]).forEach(function(a){r[a]=o[a]}),r}}})})(Ct);var oe=Ct.exports;const re=V(oe);var Mt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){var e="day";return function(i,s,n){var o=function(c){return c.add(4-c.isoWeekday(),e)},r=s.prototype;r.isoWeekYear=function(){return o(this).year()},r.isoWeek=function(c){if(!this.$utils().u(c))return this.add(7*(c-this.isoWeek()),e);var u,d,l,m,p=o(this),g=(u=this.isoWeekYear(),d=this.$u,l=(d?n.utc:n)().year(u).startOf("year"),m=4-l.isoWeekday(),l.isoWeekday()>4&&(m+=7),l.add(m,e));return p.diff(g,"week")+1},r.isoWeekday=function(c){return this.$utils().u(c)?this.day()||7:this.day(this.day()%7?c:c-7)};var a=r.startOf;r.startOf=function(c,u){var d=this.$utils(),l=!!d.u(u)||u;return d.p(c)==="isoweek"?l?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):a.bind(this)(c,u)}}})})(Mt);var ae=Mt.exports;const he=V(ae);var Lt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){var e={year:0,month:1,day:2,hour:3,minute:4,second:5},i={};return function(s,n,o){var r,a=function(l,m,p){p===void 0&&(p={});var g=new Date(l),y=function(x,T){T===void 0&&(T={});var b=T.timeZoneName||"short",w=x+"|"+b,C=i[w];return C||(C=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:x,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:b}),i[w]=C),C}(m,p);return y.formatToParts(g)},c=function(l,m){for(var p=a(l,m),g=[],y=0;y<p.length;y+=1){var x=p[y],T=x.type,b=x.value,w=e[T];w>=0&&(g[w]=parseInt(b,10))}var C=g[3],M=C===24?0:C,E=g[0]+"-"+g[1]+"-"+g[2]+" "+M+":"+g[4]+":"+g[5]+":000",S=+l;return(o.utc(E).valueOf()-(S-=S%1e3))/6e4},u=n.prototype;u.tz=function(l,m){l===void 0&&(l=r);var p,g=this.utcOffset(),y=this.toDate(),x=y.toLocaleString("en-US",{timeZone:l}),T=Math.round((y-new Date(x))/1e3/60),b=15*-Math.round(y.getTimezoneOffset()/15)-T;if(!Number(b))p=this.utcOffset(0,m);else if(p=o(x,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(b,!0),m){var w=p.utcOffset();p=p.add(g-w,"minute")}return p.$x.$timezone=l,p},u.offsetName=function(l){var m=this.$x.$timezone||o.tz.guess(),p=a(this.valueOf(),m,{timeZoneName:l}).find(function(g){return g.type.toLowerCase()==="timezonename"});return p&&p.value};var d=u.startOf;u.startOf=function(l,m){if(!this.$x||!this.$x.$timezone)return d.call(this,l,m);var p=o(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return d.call(p,l,m).tz(this.$x.$timezone,!0)},o.tz=function(l,m,p){var g=p&&m,y=p||m||r,x=c(+o(),y);if(typeof l!="string")return o(l).tz(y);var T=function(M,E,S){var L=M-60*E*1e3,H=c(L,S);if(E===H)return[L,E];var I=c(L-=60*(H-E)*1e3,S);return H===I?[L,H]:[M-60*Math.min(H,I)*1e3,Math.max(H,I)]}(o.utc(l,g).valueOf(),x,y),b=T[0],w=T[1],C=o(b).utcOffset(w);return C.$x.$timezone=y,C},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(l){r=l}}})})(Lt);var le=Lt.exports;const ce=V(le);var Ot={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){var e="minute",i=/[+-]\d\d(?::?\d\d)?/g,s=/([+-]|\d\d)/g;return function(n,o,r){var a=o.prototype;r.utc=function(g){var y={date:g,utc:!0,args:arguments};return new o(y)},a.utc=function(g){var y=r(this.toDate(),{locale:this.$L,utc:!0});return g?y.add(this.utcOffset(),e):y},a.local=function(){return r(this.toDate(),{locale:this.$L,utc:!1})};var c=a.parse;a.parse=function(g){g.utc&&(this.$u=!0),this.$utils().u(g.$offset)||(this.$offset=g.$offset),c.call(this,g)};var u=a.init;a.init=function(){if(this.$u){var g=this.$d;this.$y=g.getUTCFullYear(),this.$M=g.getUTCMonth(),this.$D=g.getUTCDate(),this.$W=g.getUTCDay(),this.$H=g.getUTCHours(),this.$m=g.getUTCMinutes(),this.$s=g.getUTCSeconds(),this.$ms=g.getUTCMilliseconds()}else u.call(this)};var d=a.utcOffset;a.utcOffset=function(g,y){var x=this.$utils().u;if(x(g))return this.$u?0:x(this.$offset)?d.call(this):this.$offset;if(typeof g=="string"&&(g=function(C){C===void 0&&(C="");var M=C.match(i);if(!M)return null;var E=(""+M[0]).match(s)||["-",0,0],S=E[0],L=60*+E[1]+ +E[2];return L===0?0:S==="+"?L:-L}(g),g===null))return this;var T=Math.abs(g)<=16?60*g:g,b=this;if(y)return b.$offset=T,b.$u=g===0,b;if(g!==0){var w=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(b=this.local().add(T+w,e)).$offset=T,b.$x.$localOffset=w}else b=this.utc();return b};var l=a.format;a.format=function(g){var y=g||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return l.call(this,y)},a.valueOf=function(){var g=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*g},a.isUTC=function(){return!!this.$u},a.toISOString=function(){return this.toDate().toISOString()},a.toString=function(){return this.toDate().toUTCString()};var m=a.toDate;a.toDate=function(g){return g==="s"&&this.$offset?r(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():m.call(this)};var p=a.diff;a.diff=function(g,y,x){if(g&&this.$u===g.$u)return p.call(this,g,y,x);var T=this.local(),b=r(g).local();return p.call(T,b,y,x)}}})})(Ot);var de=Ot.exports;const ue=V(de);var ge={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return{name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var i=["th","st","nd","rd"],s=e%100;return"["+e+(i[(s-20)%10]||i[s]||i[0])+"]"}}})})(ge);var fe={exports:{}};(function(f,t){(function(e,i){f.exports=i(A)})(U,function(e){function i(o){return o&&typeof o=="object"&&"default"in o?o:{default:o}}var s=i(e),n={name:"zh",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(o,r){return r==="W"?o+"周":o+"日"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s后",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},meridiem:function(o,r){var a=100*o+r;return a<600?"凌晨":a<900?"早上":a<1100?"上午":a<1300?"中午":a<1800?"下午":"晚上"}};return s.default.locale(n,null,!0),n})})(fe);const pe=(f,t)=>{const e=t.prototype;e.setLocale=function(s){return this.$locale=s||A().locale(),this.$L=this.$locale,this};const i=e.format;e.format=function(s){return this.$L=A().locale(),i.bind(this)(s)}};A.extend(Yt),A.extend(Xt),A.extend(qt),A.extend(Zt),A.extend(te),A.extend(Jt),A.extend(ie),A.extend(ne),A.extend(re),A.extend(he),A.extend(ce),A.extend(ue),A.extend(pe);function Dt(f){try{if(A.locale()===f)return;if(A.locale(f)!==f)throw Error();O.info(`Locale set to ${f}`)}catch{O.warn(`Failed to set locale ${f}, fallback to en`),A.locale("en")}}const ct=()=>({small:{hour:15,day:15,week:5,month:3,quarter:3},normal:{hour:30,day:30,week:10,month:7,quarter:7},large:{hour:60,day:60,week:20,month:14,quarter:14}});class me{constructor(){h(this,"startTime",A().startOf("day"));h(this,"endTime",A().endOf("day"));h(this,"targetEnd",A().endOf("day"));h(this,"strictStart",!1);h(this,"strictEnd",!1);h(this,"isAuto",!1);h(this,"timeline",[]);h(this,"headerGroupFormat");h(this,"headerCellFormat");h(this,"isDirty",!0);h(this,"isFirstTime",!0);h(this,"allWidth",0);h(this,"cellWidth");h(this,"unit","day");this.cellWidth=D.cloneDeep(ct().normal)}getStartTime(){return this.startTime}getEndTime(){return this.endTime}getCellWidth(){const t=this.cellWidth[this.getChildUnit()];if(this.isAuto){const e=this.allWidth/this.getCellCount();return Math.max(isNaN(e)?0:e,t)}return t}getCellCount(){return this.timeline.reduce((t,e)=>{var i;return t+(((i=e.children)==null?void 0:i.length)||0)},0)}getCellUnit(){return this.getFinelyUnit()}setAllWidth(t){if(this.allWidth=t,!this.strictEnd){const e=this.getCellWidth(),i=this.targetEnd.diff(this.startTime,this.getFinelyUnit());if(e*i<this.allWidth){const s=this.allWidth-e*i,n=Math.ceil(s/e);this.endTime=this.targetEnd.add(n,this.getFinelyUnit()),this.invalidateCache()}}}getTimeLeft(t){const e=this.getCellWidth(),i=this.getFinelyUnit(),s=60*60*(i==="day"?24:1)/e;return t.diff(this.startTime,"second")/s}getTimeByLeft(t){const e=this.getCellWidth(),i=this.getFinelyUnit(),s=60*60*(i==="day"?24:1)/e,n=t*s;return this.startTime.add(n,"second")}init(t,e=!0){this.isDirty=!0,this.isFirstTime=e;const{unit:i,chart:s}=t;this.isAuto=!!s.autoCellWidth;const n={hour:"hour",day:"day",week:"week",month:"month",quarter:"quarter"}[i];n||O.warn(`Unknown unit: [${i}]. Falling back to "day".`),this.unit=n||"day",s.startTime&&(this.startTime=A(s.startTime).startOf(this.getFinelyUnit()),this.strictStart=!0),s.endTime&&(this.endTime=A(s.endTime).endOf(this.getFinelyUnit()),this.strictEnd=!0),s.cellWidth&&(D.isNumber(s.cellWidth)?this.cellWidth={hour:s.cellWidth,day:s.cellWidth,week:s.cellWidth,month:s.cellWidth,quarter:s.cellWidth}:D.isString(s.cellWidth)?this.cellWidth=D.cloneDeep(ct()[s.cellWidth]||ct().normal):D.isObject(s.cellWidth)&&(this.cellWidth=Object.assign(this.cellWidth,s.cellWidth))),this.headerCellFormat=s.headerCellFormat,this.headerGroupFormat=s.headerGroupFormat}update(t){this.init(t,!1),this.endTime=this.targetEnd.clone()}setDate(t,e){this.strictStart||t&&(this.isFirstTime||t.isBefore(this.startTime))&&(this.startTime=t.startOf(this.getFinelyUnit())),this.strictEnd||e&&(this.isFirstTime||e.isAfter(this.endTime))&&(this.endTime=e.endOf(this.getFinelyUnit())),this.targetEnd=this.endTime.clone(),this.isFirstTime=!1,this.invalidateCache()}getTimeline(){if(!this.isDirty&&this.timeline.length>0)return this.timeline;const t=[];let e=this.startTime.clone();for(t.push({date:e,label:this.formatterGroupLabel(e),children:[{date:e,label:this.formatterCellLabel(e)}]});e.isSameOrBefore(this.endTime,this.getFinelyUnit());){const i=e.add(1,this.getFinelyUnit()).startOf(this.getFinelyUnit()).clone(),s=this.formatterGroupLabel(i),n=t.find(o=>o.label===s);n?(n.children||(n.children=[]),n.children.push({date:i,label:this.formatterCellLabel(i)})):t.push({date:i,label:s,children:[{date:i,label:this.formatterCellLabel(i)}]}),e=i}return this.isDirty=!1,this.timeline=t,t}clear(){this.isDirty=!0,this.isFirstTime=!0}invalidateCache(){this.isDirty=!0}getFinelyUnit(){return this.unit==="hour"?"hour":"day"}getChildUnit(){return this.unit}getGroupUnit(){switch(this.unit){case"hour":return"day";case"month":case"quarter":return"year";case"day":case"week":default:return"month"}}formatterGroupLabel(t){if(D.isFunction(this.headerGroupFormat)){const i=this.headerGroupFormat(t.toDate(),this.unit);if(i)return i}if(D.isString(this.headerGroupFormat))return t.format(this.headerGroupFormat);switch(this.getGroupUnit()){case"month":return t.format("YYYY-MM");case"year":return t.format("YYYY");case"day":default:return t.format("YYYY-MM-DD")}}formatterCellLabel(t){if(D.isFunction(this.headerCellFormat)){const i=this.headerCellFormat(t.toDate(),this.unit);if(i)return i}if(D.isString(this.headerCellFormat))return t.format(this.headerCellFormat);switch(this.getChildUnit()){case"hour":return t.format("H");case"week":return t.format("wo");case"month":return t.format("MMM");case"quarter":return t.format("[Q]Q");case"day":default:return t.format("Do")}}getTotalWidth(){return this.getCellCount()*this.getCellWidth()}expand(t,e=1){t==="left"?this.startTime=this.startTime.subtract(e,this.getFinelyUnit()):t==="right"?this.endTime=this.endTime.add(e,this.getFinelyUnit()):t==="all"&&(this.startTime=this.startTime.subtract(e,this.getFinelyUnit()),this.endTime=this.endTime.add(e,this.getFinelyUnit())),this.targetEnd=this.endTime.clone(),this.invalidateCache()}isInTimeAxis(t){return t.isSameOrAfter(this.startTime)&&t.isSameOrBefore(this.endTime)}}class xe{constructor(t,e){h(this,"optionManager");h(this,"dataManager");h(this,"columnManager");h(this,"linkManager");h(this,"timeAxis");var n,o,r;this.context=t;const i=D.omit(e,["data"]),s=e==null?void 0:e.data;if(s&&!D.isArray(s))throw O.exception("Data should be a array.");this.optionManager=new Rt,this.optionManager.setOptions(i),i.locale&&Dt(i.locale),this.timeAxis=new me,this.timeAxis.init(this.optionManager.getOptions()),this.columnManager=new Pt(this.context),i.table&&i.table.columns&&this.columnManager.init(i.table.columns),this.dataManager=new Ft(this,this.context.event),s&&this.dataManager.setData(s,!0),(n=e==null?void 0:e.baselines)!=null&&n.data&&this.dataManager.setBaselines(e.baselines.data),this.linkManager=new lt(this,this.context.event),D.isArray((o=e==null?void 0:e.links)==null?void 0:o.data)&&this.linkManager.setLinks(e.links.data,!0),this.linkManager.setCycleDetection(((r=e==null?void 0:e.links)==null?void 0:r.enableCycleDetection)??!0)}getOptionManager(){return this.optionManager}getDataManager(){return this.dataManager}getColumnManager(){return this.columnManager}getLinkManager(){return this.linkManager}getTimeAxis(){return this.timeAxis}setOption(t,e={merge:!0}){var n,o,r,a;const i=D.omit(t,["data"]),s=t==null?void 0:t.data;this.optionManager.setOptions(i,e),((n=i.milestone)==null?void 0:n.show)!==void 0&&this.dataManager.getVisibleTasks().forEach(c=>{c.updateMode()}),D.isArray(s)&&this.dataManager.setData(s,!1),D.isArray((o=t.baselines)==null?void 0:o.data)&&this.dataManager.setBaselines(t.baselines.data),D.isArray((r=t.links)==null?void 0:r.data)&&this.linkManager.setLinks(t.links.data,!0),this.linkManager.setCycleDetection(((a=t.links)==null?void 0:a.enableCycleDetection)??!0),i.locale&&Dt(i.locale),i.table&&i.table.columns&&this.columnManager.update(i.table.columns),this.timeAxis.update(this.optionManager.getOptions())}updateTime(t,e){this.timeAxis.setDate(t,e)}}class ye{constructor(t,e,i){h(this,"rootElement");h(this,"options");h(this,"hScrollbar");h(this,"vScrollbar");h(this,"hScrollThumb");h(this,"vScrollThumb");h(this,"scrollbarContainer");h(this,"viewportWidth",0);h(this,"viewportHeight",0);h(this,"contentWidth",0);h(this,"contentHeight",0);h(this,"scrollLeft",0);h(this,"scrollTop",0);h(this,"isDraggingHScroll",!1);h(this,"isDraggingVScroll",!1);h(this,"isMouseOverRoot",!1);h(this,"isMouseOverScrollbar",!1);h(this,"hideTimeout",null);h(this,"showTimeout",null);h(this,"isVisible",!1);h(this,"dragStartX",0);h(this,"dragStartY",0);h(this,"thumbStartScrollLeft",0);h(this,"thumbStartScrollTop",0);h(this,"isAnimating",!1);h(this,"animationFrameId",null);h(this,"animationStartTime",0);h(this,"animationStartScrollLeft",0);h(this,"animationStartScrollTop",0);h(this,"animationTargetScrollLeft",0);h(this,"animationTargetScrollTop",0);h(this,"animationSource","api");h(this,"throttledHandleMouseMove");h(this,"throttledHandleWheel");h(this,"handleRootMouseMove",()=>{!this.isVisible&&this.isMouseOverRoot?this.scheduleShow():this.isVisible&&!this.isMouseOverScrollbar&&this.scheduleHide()});h(this,"handleScrollbarMouseEnter",()=>{this.isMouseOverScrollbar=!0,this.scheduleShow()});h(this,"handleScrollbarMouseLeave",()=>{this.isMouseOverScrollbar=!1,this.isMouseOverRoot&&this.scheduleHide()});h(this,"handleMouseEnter",()=>{this.isMouseOverRoot=!0,this.scheduleShow()});h(this,"handleMouseLeave",()=>{this.isMouseOverRoot=!1,!this.isDraggingHScroll&&!this.isDraggingVScroll&&!this.isMouseOverScrollbar&&(this.clearTimeouts(!0,!1),this.scheduleHide())});h(this,"handleHorizontalThumbMouseDown",t=>{t.preventDefault(),t.stopPropagation(),this.isDraggingHScroll=!0,this.dragStartX=t.clientX,this.thumbStartScrollLeft=this.scrollLeft,this.hScrollThumb.style.backgroundColor=this.options.thumb.color,this.scheduleShow(),document.addEventListener("mousemove",this.throttledHandleMouseMove),document.addEventListener("mouseup",this.handleMouseUp)});h(this,"handleVerticalThumbMouseDown",t=>{t.preventDefault(),t.stopPropagation(),this.isDraggingVScroll=!0,this.dragStartY=t.clientY,this.thumbStartScrollTop=this.scrollTop,this.vScrollThumb.style.backgroundColor=this.options.thumb.color,this.scheduleShow(),document.addEventListener("mousemove",this.throttledHandleMouseMove),document.addEventListener("mouseup",this.handleMouseUp)});h(this,"handleHorizontalTrackMouseDown",t=>{if(t.target!==this.hScrollbar)return;t.preventDefault();const e=this.hScrollbar.getBoundingClientRect(),i=this.hScrollThumb.offsetWidth,s=t.clientX-e.left,n=this.hScrollbar.clientWidth,o=this.contentWidth-this.viewportWidth,r=n-i,a=(s-i/2)/r*o;this.scrollTo({x:a,y:this.scrollTop},"track")});h(this,"handleVerticalTrackMouseDown",t=>{if(t.target!==this.vScrollbar)return;t.preventDefault();const e=this.vScrollbar.getBoundingClientRect(),i=this.vScrollThumb.offsetHeight,s=t.clientY-e.top,n=this.vScrollbar.clientHeight,o=this.contentHeight-this.viewportHeight,r=n-i,a=(s-i/2)/r*o;this.scrollTo({x:this.scrollLeft,y:a},"track")});h(this,"handleMouseUp",()=>{if(this.isDraggingHScroll||this.isDraggingVScroll){const t=this.isDraggingHScroll,e=this.isDraggingVScroll;this.isDraggingHScroll=!1,this.isDraggingVScroll=!1,t&&(this.hScrollThumb.style.backgroundColor=this.options.thumb.color),e&&(this.vScrollThumb.style.backgroundColor=this.options.thumb.color),document.removeEventListener("mousemove",this.throttledHandleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp),!this.isMouseOverRoot&&!this.isMouseOverScrollbar?this.scheduleHide():this.scheduleHide()}});h(this,"animationStep",t=>{if(!this.isAnimating)return;const e=t-this.animationStartTime,i=this.options.animationDuration,s=Math.min(1,e/i),n=s*(2-s),o=this.animationStartScrollLeft+(this.animationTargetScrollLeft-this.animationStartScrollLeft)*n,r=this.animationStartScrollTop+(this.animationTargetScrollTop-this.animationStartScrollTop)*n,a=this.scrollLeft!==o,c=this.scrollTop!==r;(a||c)&&this.emit(this.animationSource,o,r),s<1?this.animationFrameId=requestAnimationFrame(this.animationStep):(this.isAnimating=!1,this.animationFrameId=null,(this.scrollLeft!==this.animationTargetScrollLeft||this.scrollTop!==this.animationTargetScrollTop)&&this.emit(this.animationSource,this.animationTargetScrollLeft,this.animationTargetScrollTop),this.scheduleHide())});this.root=t,this.rootElement=e,this.options=D.merge({showHorizontal:!0,showVertical:!0,track:{size:8,radius:4,color:"transparent"},thumb:{size:30,radius:4,color:"rgba(0, 0, 0, 0.4)"},showDelay:0,hideDelay:500,animationDuration:100,showDuration:200,hideDuration:200},i),this.throttledHandleMouseMove=D.throttle(this.handleMouseMove.bind(this),16),this.throttledHandleWheel=D.throttle(this.handleWheel.bind(this),16,{leading:!0,trailing:!1}),this.createElements(),this.applyStyles(),this.bindEvents(),this.rootElement.matches(":hover")?this.handleMouseEnter():(this.clearTimeouts(),this.hideScrollbars(!0))}createElements(){this.scrollbarContainer=document.createElement("div"),this.scrollbarContainer.className="x-gantt-scrollbar-container",this.rootElement.appendChild(this.scrollbarContainer),this.hScrollbar=this.createScrollbarElement("horizontal"),this.hScrollThumb=this.createScrollThumbElement("horizontal"),this.hScrollbar.appendChild(this.hScrollThumb),this.vScrollbar=this.createScrollbarElement("vertical"),this.vScrollThumb=this.createScrollThumbElement("vertical"),this.vScrollbar.appendChild(this.vScrollThumb),this.scrollbarContainer.appendChild(this.hScrollbar),this.scrollbarContainer.appendChild(this.vScrollbar)}createScrollbarElement(t){const e=document.createElement("div");return e.className=`x-gantt-scrollbar x-gantt-${t}-scrollbar`,e}createScrollThumbElement(t){const e=document.createElement("div");return e.className=`x-gantt-scrollbar-thumb x-gantt-${t}-thumb`,e}applyStyles(){const t=this.scrollbarContainer.style;t.position="absolute",t.top="0",t.left="0",t.width="100%",t.height="100%",t.pointerEvents="none",t.zIndex="100",this.applyScrollbarStyles(this.hScrollbar,"horizontal"),this.applyScrollbarStyles(this.vScrollbar,"vertical"),this.applyThumbStyles(this.hScrollThumb,"horizontal"),this.applyThumbStyles(this.vScrollThumb,"vertical")}applyScrollbarStyles(t,e){const i=t.style;i.position="absolute",i.backgroundColor=this.options.track.color,i.borderRadius=`${this.options.track.size/2}px`,i.opacity="0",i.transition=`opacity ${this.options.hideDuration/1e3}s ease-out`,i.pointerEvents="auto",e==="horizontal"?(i.bottom="0px",i.left="0px",i.height=`${this.options.track.size}px`,i.width="0px"):(i.right="0px",i.top="0px",i.width=`${this.options.track.size}px`,i.height="0px")}applyThumbStyles(t,e){const i=t.style;i.position="absolute",i.backgroundColor=this.options.thumb.color,i.borderRadius=`${this.options.thumb.radius}px`,i.cursor="pointer",i.transition="background-color 0.2s",i.pointerEvents="auto",e==="horizontal"?(i.height="100%",i.top="0",i.left="0"):(i.width="100%",i.left="0",i.top="0")}bindEvents(){this.rootElement.addEventListener("mouseenter",this.handleMouseEnter),this.rootElement.addEventListener("mouseleave",this.handleMouseLeave),this.rootElement.addEventListener("mousemove",this.handleRootMouseMove),this.hScrollThumb.addEventListener("mousedown",this.handleHorizontalThumbMouseDown),this.vScrollThumb.addEventListener("mousedown",this.handleVerticalThumbMouseDown),this.hScrollbar.addEventListener("mousedown",this.handleHorizontalTrackMouseDown),this.vScrollbar.addEventListener("mousedown",this.handleVerticalTrackMouseDown),this.hScrollbar.addEventListener("mouseenter",this.handleScrollbarMouseEnter),this.vScrollbar.addEventListener("mouseenter",this.handleScrollbarMouseEnter),this.hScrollbar.addEventListener("mouseleave",this.handleScrollbarMouseLeave),this.vScrollbar.addEventListener("mouseleave",this.handleScrollbarMouseLeave),this.rootElement.addEventListener("wheel",this.throttledHandleWheel,{passive:!1})}unbindEvents(){this.rootElement.removeEventListener("mouseenter",this.handleMouseEnter),this.rootElement.removeEventListener("mouseleave",this.handleMouseLeave),this.rootElement.removeEventListener("mousemove",this.handleRootMouseMove),this.hScrollThumb.removeEventListener("mousedown",this.handleHorizontalThumbMouseDown),this.vScrollThumb.removeEventListener("mousedown",this.handleVerticalThumbMouseDown),this.hScrollbar.removeEventListener("mousedown",this.handleHorizontalTrackMouseDown),this.vScrollbar.removeEventListener("mousedown",this.handleVerticalTrackMouseDown),this.hScrollbar.removeEventListener("mouseenter",this.handleScrollbarMouseEnter),this.vScrollbar.removeEventListener("mouseenter",this.handleScrollbarMouseEnter),this.hScrollbar.removeEventListener("mouseleave",this.handleScrollbarMouseLeave),this.vScrollbar.removeEventListener("mouseleave",this.handleScrollbarMouseLeave),this.rootElement.removeEventListener("wheel",this.throttledHandleWheel),document.removeEventListener("mousemove",this.throttledHandleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp)}emit(t,e,i){this.scrollLeft=F(e,0,this.contentWidth-this.viewportWidth),this.scrollTop=F(i,0,this.contentHeight-this.viewportHeight),this.updateThumbStyles(),this.root.event.emit(v.SCROLL,{x:this.scrollLeft,y:this.scrollTop,source:t})}handleMouseMove(t){if(!(!this.isDraggingHScroll&&!this.isDraggingVScroll)){if(this.scheduleShow(),this.isDraggingHScroll){const e=t.clientX-this.dragStartX,i=this.hScrollbar.clientWidth,s=this.hScrollThumb.offsetWidth,n=Math.max(0,i-s),o=Math.max(0,this.contentWidth-this.viewportWidth);if(n===0||o===0)return;const r=e/n*o,a=this.thumbStartScrollLeft+r;this.scrollTo({x:a,y:this.scrollTop},"drag")}if(this.isDraggingVScroll){const e=t.clientY-this.dragStartY,i=this.vScrollbar.clientHeight,s=this.vScrollThumb.offsetHeight,n=Math.max(0,i-s),o=Math.max(0,this.contentHeight-this.viewportHeight);if(n===0||o===0)return;const r=e/n*o,a=this.thumbStartScrollTop+r;this.scrollTo({x:this.scrollLeft,y:a},"drag")}}}handleWheel(t){if(t.target!==this.rootElement&&!this.rootElement.contains(t.target)&&O.debug("Wheel event ignored, target not root or descendant:",t.target),!this.isMouseOverRoot&&!this.isMouseOverScrollbar){O.debug("Wheel event ignored, mouse not over root or scrollbar");return}const e=this.canScrollHorizontal(),i=this.canScrollVertical();if(!e&&!i)return;t.preventDefault();let s=t.deltaX,n=t.deltaY;Math.abs(t.deltaX)<Math.abs(t.deltaY)&&t.shiftKey&&e&&(s=n,n=0);const o=this.scrollLeft+s,r=this.scrollTop+n;this.emit("wheel",o,r)}animateWheelScroll(t,e){this.cancelAnimation();const i=this.clampScroll({x:t,y:e});if(this.scrollLeft===i.x&&this.scrollTop===i.y)return;this.isAnimating=!0,this.animationStartTime=performance.now(),this.animationStartScrollLeft=this.scrollLeft,this.animationStartScrollTop=this.scrollTop,this.animationTargetScrollLeft=i.x,this.animationTargetScrollTop=i.y,this.animationSource="wheel";const s=150,n=o=>{if(!this.isAnimating)return;const r=o-this.animationStartTime,a=Math.min(1,r/s),c=a*(2-a),u=this.animationStartScrollLeft+(this.animationTargetScrollLeft-this.animationStartScrollLeft)*c,d=this.animationStartScrollTop+(this.animationTargetScrollTop-this.animationStartScrollTop)*c,l=this.scrollLeft!==u,m=this.scrollTop!==d;(l||m)&&this.emit("wheel",u,d),a<1?this.animationFrameId=requestAnimationFrame(n):(this.isAnimating=!1,this.animationFrameId=null,(this.scrollLeft!==this.animationTargetScrollLeft||this.scrollTop!==this.animationTargetScrollTop)&&this.emit("wheel",this.animationTargetScrollLeft,this.animationTargetScrollTop),this.scheduleHide())};this.animationFrameId=requestAnimationFrame(n)}clearTimeouts(t=!0,e=!0){t&&this.showTimeout!==null&&(window.clearTimeout(this.showTimeout),this.showTimeout=null),e&&this.hideTimeout!==null&&(window.clearTimeout(this.hideTimeout),this.hideTimeout=null)}scheduleShow(){if(this.isVisible||this.showTimeout!==null){this.hideTimeout!==null&&this.clearTimeouts(!1,!0);return}this.clearTimeouts(!0,!0),this.options.showDelay<=0?this.showScrollbars():this.showTimeout=window.setTimeout(()=>{this.showScrollbars(),this.showTimeout=null},this.options.showDelay)}showScrollbars(){this.clearTimeouts(),this.isVisible=!0,this.hScrollbar.style.transition=`opacity ${this.options.showDuration/1e3}s ease-in`,this.vScrollbar.style.transition=`opacity ${this.options.showDuration/1e3}s ease-in`,requestAnimationFrame(()=>{this.canScrollHorizontal()&&this.options.showHorizontal?this.hScrollbar.style.opacity="1":this.hScrollbar.style.opacity="0",this.canScrollVertical()&&this.options.showVertical?this.vScrollbar.style.opacity="1":this.vScrollbar.style.opacity="0",setTimeout(()=>{this.isVisible&&(this.hScrollbar.style.transition=`opacity ${this.options.hideDuration/1e3}s ease-out`,this.vScrollbar.style.transition=`opacity ${this.options.hideDuration/1e3}s ease-out`)},this.options.showDuration)}),this.scheduleHide()}scheduleHide(){if(this.isDraggingHScroll||this.isDraggingVScroll||this.isMouseOverScrollbar){this.clearTimeouts(!0,!0);return}this.hideTimeout===null&&(this.clearTimeouts(!0,!1),this.hideTimeout=window.setTimeout(()=>{!this.isMouseOverRoot&&!this.isDraggingHScroll&&!this.isDraggingVScroll&&!this.isMouseOverScrollbar&&this.hideScrollbars(),this.hideTimeout=null},this.options.hideDelay))}hideScrollbars(t=!1){!t&&(this.isDraggingHScroll||this.isDraggingVScroll||this.isMouseOverScrollbar)||(this.clearTimeouts(!0,!0),this.isVisible=!1,this.hScrollbar.style.opacity="0",this.vScrollbar.style.opacity="0")}updateSize(t,e,i,s,n=0,o=0){this.viewportWidth=Math.max(0,t),this.viewportHeight=Math.max(0,e),this.contentWidth=Math.max(this.viewportWidth,i),this.contentHeight=Math.max(this.viewportHeight,s);const r=this.canScrollHorizontal()&&this.options.showHorizontal,a=this.canScrollVertical()&&this.options.showVertical;if(r){const u=this.viewportWidth-(a?this.options.track.size:0);this.hScrollbar.style.display="block",this.hScrollbar.style.transform=`translateX(${n}px)`,this.hScrollbar.style.width=`${Math.max(0,u)}px`,this.hScrollbar.style.bottom="0px",this.hScrollbar.style.right=a?`${this.options.track.size}px`:"0px"}else this.hScrollbar.style.display="none";if(a){const u=this.viewportHeight-o-(r?this.options.track.size:0);this.vScrollbar.style.display="block",this.vScrollbar.style.transform=`translateY(${o}px)`,this.vScrollbar.style.height=`${Math.max(0,u)}px`,this.vScrollbar.style.right="0px",this.vScrollbar.style.bottom=r?`${this.options.track.size}px`:"0px"}else this.vScrollbar.style.display="none";this.updateThumbStyles();const c=this.clampScroll({x:this.scrollLeft,y:this.scrollTop});(c.x!==this.scrollLeft||c.y!==this.scrollTop)&&this.emit("api",c.x,c.y),this.isMouseOverRoot||this.isDraggingHScroll||this.isDraggingVScroll?this.scheduleShow():!r&&!a?this.hideScrollbars(!0):this.isVisible?this.scheduleShow():this.hideScrollbars(!0)}updateThumbStyles(){if(this.canScrollHorizontal()&&this.options.showHorizontal){const t=this.hScrollbar.clientWidth,e=Math.max(this.options.thumb.size,t*(this.viewportWidth/this.contentWidth)),i=Math.min(t,e);this.hScrollThumb.style.width=`${i}px`;const s=this.contentWidth-this.viewportWidth,n=t-i,o=s>0?this.scrollLeft/s*n:0;this.hScrollThumb.style.transform=`translateX(${Math.max(0,Math.min(o,n))}px)`,this.hScrollThumb.style.left="0px"}else this.hScrollThumb.style.width="0px";if(this.canScrollVertical()&&this.options.showVertical){const t=this.vScrollbar.clientHeight,e=Math.max(this.options.thumb.size,t*(this.viewportHeight/this.contentHeight)),i=Math.min(t,e);this.vScrollThumb.style.height=`${i}px`;const s=this.contentHeight-this.viewportHeight,n=t-i,o=s>0?this.scrollTop/s*n:0;this.vScrollThumb.style.transform=`translateY(${Math.max(0,Math.min(o,n))}px)`,this.vScrollThumb.style.top="0px"}else this.vScrollThumb.style.height="0px"}canScrollHorizontal(){return this.contentWidth>this.viewportWidth}canScrollVertical(){return this.contentHeight>this.viewportHeight}clampScroll(t){const e=Math.max(0,this.contentWidth-this.viewportWidth),i=Math.max(0,this.contentHeight-this.viewportHeight);return{x:Math.max(0,Math.min(t.x,e)),y:Math.max(0,Math.min(t.y,i))}}scrollTo(t,e="api"){this.scheduleShow();const i=this.clampScroll(D.merge(this.getScrollPosition(),t));if(this.scrollLeft===i.x&&this.scrollTop===i.y){if(this.isAnimating&&this.animationTargetScrollLeft===i.x&&this.animationTargetScrollTop===i.y)return;this.cancelAnimation();return}const s=(e==="api"||e==="track")&&this.options.animationDuration>0;if(this.cancelAnimation(),s)this.isAnimating=!0,this.animationStartTime=performance.now(),this.animationStartScrollLeft=this.scrollLeft,this.animationStartScrollTop=this.scrollTop,this.animationTargetScrollLeft=i.x,this.animationTargetScrollTop=i.y,this.animationSource=e,this.animationFrameId=requestAnimationFrame(this.animationStep);else{this.isAnimating=!1;const n=this.scrollLeft!==i.x,o=this.scrollTop!==i.y;(n||o)&&this.emit(e,i.x,i.y)}}cancelAnimation(){this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.isAnimating=!1}getScrollPosition(){return{x:this.scrollLeft,y:this.scrollTop}}destroy(){this.unbindEvents(),this.clearTimeouts(),this.cancelAnimation(),this.scrollbarContainer.parentNode&&this.scrollbarContainer.parentNode.removeChild(this.scrollbarContainer),this.rootElement=null,this.eventManager=null,this.hScrollbar=null,this.vScrollbar=null,this.hScrollThumb=null,this.vScrollThumb=null,this.scrollbarContainer=null,O.debug("Scrollbar destroyed")}}function j(f,t=""){const e=["px","%","vh","vw","rem","em"];if(f==null)return t;if(typeof f=="number")return isFinite(f)?`${f}px`:t;if(typeof f=="string"){const i=f.trim();if(i==="")return t;for(const n of e)if(i.endsWith(n)){const o=i.substring(0,i.length-n.length).trim(),r=Number(o);if(!isNaN(r)&&isFinite(r))return`${r}${n}`;break}const s=Number(i);if(!isNaN(s)&&isFinite(s))return`${s}px`}return t}class we{constructor(t,e,i){h(this,"element");h(this,"isDragging",!1);h(this,"dragStartY",0);h(this,"dragStartIndex",-1);h(this,"currentIndex",-1);h(this,"dragType","inside");h(this,"canDrop",!1);h(this,"ghostElement",null);h(this,"placeholderElement",null);h(this,"animationFrameId",null);h(this,"rowElement",null);h(this,"handleMouseDown",t=>{if(!this.task||!this.container){O.warn("DragHandler: task or container is not defined");return}if(this.rowElement=this.container.closest(".x-gantt-table-row"),!this.rowElement){O.warn("Row element not found",this.container);return}t.preventDefault(),t.stopPropagation(),this.isDragging=!0,this.dragStartY=t.clientY+this.context.getScrollbar().getScrollPosition().y,this.dragStartIndex=this.task.flatIndex,this.currentIndex=this.dragStartIndex,this.createGhostElement(t),this.createPlaceholderElement(t),document.addEventListener("mousemove",this.handleMouseMove),document.addEventListener("mouseup",this.handleMouseUp),document.addEventListener("keydown",e=>{e.key==="Escape"&&this.isDragging&&this.cleanup()}),O.debug(`Drag started for task ${this.task.id} at index ${this.dragStartIndex}`)});h(this,"handleMouseMove",t=>{!this.isDragging||!this.task||!this.container||(this.animationFrameId&&cancelAnimationFrame(this.animationFrameId),this.animationFrameId=requestAnimationFrame(()=>{var l,m,p,g;const e=this.context.getRootElement();if(!e)return;const i=e.getBoundingClientRect(),s=this.context.getOptions().header.height,n=this.context.getOptions().row.height,o=this.context.getScrollbar().getScrollPosition(),r=t.clientY-i.top-s+o.y,a=Math.max(0,Math.min(Math.floor(r/n),this.context.store.getDataManager().getVisibleSize()-1)),c=r%n;let u;c<n*.25?u="before":c>n*.75?u="after":u="inside",this.dragType=u,this.updateGhostPosition(t.clientY-i.top),this.canDrop=!1;const d=this.context.store.getDataManager().getVisibleTasks()[a];((l=this.context.getOptions().drag.drop)==null?void 0:l.crossLevel)===!0?u=="inside"?this.canDrop=!this.task.isSomeoneChildren(d):this.canDrop=this.task.id!==d.id&&!this.task.isSomeoneChildren(d.parent):u!=="inside"&&(this.canDrop=((m=this.task.parent)==null?void 0:m.id)===((p=d.parent)==null?void 0:p.id)&&this.task.id!==d.id),this.canDrop===!0&&(g=this.context.getOptions().drag.drop)!=null&&g.allowed&&(this.canDrop=this.context.getOptions().drag.drop.allowed(d.getEmitData(),this.task.getEmitData())),this.updatePlaceholderPosition(a,u,i,o,this.canDrop),this.currentIndex!==a&&(this.currentIndex=a)}))});h(this,"handleMouseUp",t=>{!this.isDragging||!this.task||(this.canDrop&&this.context.store.getDataManager().moveTask(this.dragType,this.task,this.currentIndex),this.cleanup())});var s;this.context=t,this.container=e,this.task=i,this.element=document.createElement("div"),this.createElement(),this.bindEvents(),(s=this.container)==null||s.appendChild(this.element)}createElement(){this.element.className="x-gantt-drag-handle",this.element.style.color=this.context.getOptions().drag.color||"#999",this.element.innerHTML='<svg t="1746781386866" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3253" width="14" height="14"><path d="M384 128m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0Z" fill="currentColor" p-id="3254"></path><path d="M384 512m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0Z" fill="currentColor" p-id="3255"></path><path d="M384 896m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0Z" fill="currentColor" p-id="3256"></path><path d="M704 128m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0Z" fill="currentColor" p-id="3257"></path><path d="M704 512m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0Z" fill="currentColor" p-id="3258"></path><path d="M704 896m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 -0Z" fill="currentColor" p-id="3259"></path></svg>'}bindEvents(){this.element.addEventListener("mousedown",this.handleMouseDown),this.element.addEventListener("selectstart",t=>t.preventDefault())}createGhostElement(t){if(!this.container||!this.task||!this.rowElement)return;this.ghostElement=document.createElement("div"),this.ghostElement.className="x-gantt-drag-ghost",this.ghostElement.innerHTML=this.rowElement.innerHTML;const e=this.context.getRootElement();if(!e)return;const i=e.getBoundingClientRect(),s=this.rowElement.getBoundingClientRect();this.context.store.getTimeAxis().getTotalWidth(),this.ghostElement.style.position="absolute",this.ghostElement.style.left="0px",this.ghostElement.style.top=`${t.clientY-i.top-s.height/2}px`,this.ghostElement.style.width=`${i.width}px`,this.ghostElement.style.height=`${s.height}px`,this.ghostElement.style.pointerEvents="none",this.ghostElement.style.zIndex="10000",this.ghostElement.style.opacity="0.8",this.ghostElement.style.borderRadius="4px",this.ghostElement.style.overflow="hidden",this.ghostElement.style.boxShadow="0 4px 12px rgba(0, 0, 0, 0.15)";const n=document.createElement("div");n.style.cssText=`
|
|
19
|
+
position: absolute;
|
|
20
|
+
top: 0; left: 0; right: 0; bottom: 0;
|
|
21
|
+
background: linear-gradient(to right,
|
|
22
|
+
rgba(255,255,255,0) 0%,
|
|
23
|
+
rgba(255,255,255,0.3) 50%,
|
|
24
|
+
rgba(255,255,255,0.9) 100%);
|
|
25
|
+
pointer-events: none;
|
|
26
|
+
`,(this.context.getRootElement()||document.body).appendChild(this.ghostElement),O.debug("Ghost element created")}updateGhostPosition(t){if(!this.ghostElement||!this.rowElement)return;const e=this.context.getRootElement();if(!e)return;const i=e.getBoundingClientRect(),s=this.context.getOptions().row.height,n=0,o=i.height-s,r=Math.max(n,Math.min(t-s/2,o));this.ghostElement.style.top=`${r}px`}createPlaceholderElement(t){if(!this.rowElement)return;this.placeholderElement=document.createElement("div"),this.placeholderElement.className="x-gantt-drag-placeholder",this.placeholderElement.style.cssText=`
|
|
27
|
+
position: absolute;
|
|
28
|
+
left: 0;
|
|
29
|
+
top: ${t.clientY}px;
|
|
30
|
+
opacity: 0;
|
|
31
|
+
width: 100%;
|
|
32
|
+
height: ${this.context.getOptions().row.height}px;
|
|
33
|
+
background-color: ${B(this.context.getOptions().drag.targetBackgroundColor||this.context.getOptions().primaryColor).toString()};
|
|
34
|
+
pointer-events: none;
|
|
35
|
+
z-index: 9999;
|
|
36
|
+
transition: all 0.1s ease;
|
|
37
|
+
box-sizing: border-box;
|
|
38
|
+
`,this.context.getRootElement().appendChild(this.placeholderElement)}updatePlaceholderPosition(t,e,i,s,n){var d;if(!this.placeholderElement)return;if(!n){this.placeholderElement.style.opacity="0",this.context.getRootElement().style.setProperty("cursor","not-allowed","important");return}this.context.getRootElement().style.setProperty("cursor","grabbing","important");const o=this.context.getOptions().header.height,r=this.context.getOptions().row.height;let a=o+t*r;e==="after"&&(a+=r);const c=a-s.y,u=e==="inside"?r:2;this.placeholderElement.style.top=`${c}px`,this.placeholderElement.style.height=`${u}px`,this.placeholderElement.style.opacity==="0"&&(this.placeholderElement.style.opacity=((d=this.context.getOptions().drag.targetOpacity)==null?void 0:d.toString())||"0.2"),e==="inside"?(this.placeholderElement.style.backgroundColor=B(this.context.getOptions().drag.targetBackgroundColor||this.context.getOptions().primaryColor).alpha(.1).toString(),this.placeholderElement.style.border=`2px dashed ${B(this.context.getOptions().drag.targetBackgroundColor||this.context.getOptions().primaryColor).toString()}`):(this.placeholderElement.style.backgroundColor=B(this.context.getOptions().drag.targetBackgroundColor||this.context.getOptions().primaryColor).toString(),this.placeholderElement.style.border="none")}cleanup(){this.isDragging=!1,this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.ghostElement&&this.ghostElement.parentNode&&(this.ghostElement.parentNode.removeChild(this.ghostElement),this.ghostElement=null),this.placeholderElement&&this.placeholderElement.parentNode&&(this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.placeholderElement=null),this.rowElement=null,document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp)}getElement(){return this.element}destroy(){this.cleanup(),this.element.removeEventListener("mousedown",this.handleMouseDown),this.element.removeEventListener("selectstart",t=>t.preventDefault()),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),O.debug("DragHandler destroyed")}}class it{constructor(t,e,i,s,n,o,r=1,a=1,c){h(this,"element");h(this,"isEmpty",!1);h(this,"isHandler",!1);this.context=t,this.container=e,this.column=i,this.task=s,this.rowIndex=n,this.colIndex=o,this.colspan=r,this.rowspan=a,this.isEmpty=c==="empty",this.isHandler=c==="handler",this.element=document.createElement("div"),this.element.className="x-gantt-table-cell",this.element.style.boxSizing="border-box",this.element.style.display="inline-flex",this.element.style.flexShrink="0",this.element.style.flexGrow="0",this.element.style.flexBasis="auto",this.element.style.pointerEvents="all",this.element.style.setProperty("border-color",this.context.getOptions().border.color,"important"),this.element.style.textAlign=this.column.column.align||this.context.getOptions().table.align,!this.context.store.getColumnManager().isLastColumn(this.column.key)&&this.context.getOptions().border.show&&!this.isEmpty&&this.element.classList.add("border"),this.updateWidth(),this.updateHeight(),this.isEmpty?(this.element.style.borderBottom="none",this.element.style.pointerEvents="none",this.element.style.backgroundColor="transparent",this.element.style.setProperty("border-color","transparent","important")):this.isHandler?this.setHandler():this.setContent(),this.container.appendChild(this.element)}setContent(){const t=document.createElement("div");if(t.className="x-gantt-table-cell__content",t.style.overflow="hidden",(this.column.column.ellipsis??this.context.getOptions().table.ellipsis??!0)&&(t.style.textOverflow="ellipsis"),t.style.whiteSpace="nowrap",t.style.flex="1",t.style.height="100%",t.style.alignContent="center",this.colIndex===0&&(t.style.paddingLeft=j(this.task.level*this.context.getOptions().row.indent,"16px")),typeof this.column.column.render=="function")try{const e=this.column.column.render(this.task.getEmitData());typeof e=="string"?t.innerHTML=e:e instanceof HTMLElement?t.appendChild(e):O.warn("Table cell render function does not return a valid value.",e)}catch(e){O.error("Table cell render error:",e),t.textContent=this.task.getField(this.column.column.field)??this.context.getOptions().table.emptyText}else t.textContent=this.task.getField(this.column.column.field)??this.context.getOptions().table.emptyText;this.column.column.customStyle&&Object.assign(t.style,this.column.column.customStyle),this.element.appendChild(t)}setHandler(){const t=document.createElement("div");t.className="x-gantt-table-cell__content",t.style.overflow="hidden",t.style.whiteSpace="nowrap",t.style.display="inline-flex",t.style.flex="1",t.style.height="100%";const e=this.context.getOptions().drag.enabled!==!1,i=this.context.store.getOptionManager().unpackFunc(this.context.getOptions().drag.enabled,this.task),s=["0.3","0.3","0.4"];if(e||(s[0]="0",s[1]="0.5",s[2]="0.5"),e){const n=document.createElement("div");n.style.flex=s[0],n.style.display="flex",n.style.justifyContent="center",n.style.alignItems="center",i&&new we(this.context,n,this.task),t.appendChild(n)}if(this.context.getOptions().selection.enabled){const n=document.createElement("div");n.style.flex=s[1],n.style.display="flex",n.style.justifyContent="center",n.style.alignItems="center",new mt(this.context,n,this.task),t.appendChild(n)}if(this.context.getOptions().expand.show&&this.task.children&&this.task.children.length>0){const n=document.createElement("div");n.className="x-gantt-table-cell__expand",n.style.flex=s[2],n.style.color=this.context.getOptions().primaryColor,n.style.display="flex",n.style.alignItems="center",n.style.justifyContent="center",n.style.height="100%",n.style.width="14px",n.style.height="100%",n.style.cursor="pointer",n.innerHTML='<svg t="1746693752280" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2612" width="14" height="14"><path d="M724.48 521.728c-1.8432 7.7824-5.7344 14.848-11.3664 20.48l-341.9136 342.016c-16.6912 16.6912-43.7248 16.6912-60.3136 0s-16.6912-43.7248 0-60.3136L622.6944 512 310.8864 200.0896c-16.6912-16.6912-16.6912-43.7248 0-60.3136 16.6912-16.6912 43.7248-16.6912 60.3136 0l341.9136 341.9136c10.8544 10.8544 14.6432 26.112 11.3664 40.0384z" fill="currentColor" p-id="2613"></path></svg>',n.style.transform=this.task.expanded?"rotate(90deg)":"",n.addEventListener("click",o=>{o.stopPropagation(),this.context.store.getDataManager().expandTask(this.task.id,!1)}),t.appendChild(n)}this.element.appendChild(t)}remove(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}updateWidth(){if(this.isHandler){this.element.style.width=j(this.context.store.getColumnManager().getHandlerColumn().width);return}const t=this.context.store.getColumnManager().getLeafColumns().slice(this.colIndex,this.colIndex+Math.max(1,this.colspan)).reduce((e,i)=>e+i.width,0);this.element.style.width=j(t)}updateHeight(){const t=this.context.getOptions().row.height;this.element.style.height=j(t*Math.max(1,this.rowspan))}}class _t{constructor(t,e,i,s,n=!1){h(this,"element");h(this,"cells",[]);this.context=t,this.container=e,this.task=i,this.top=s,this.element=document.createElement("div"),this.element.className="x-gantt-table-row",this.element.style.display="flex",this.element.style.flexDirection="row",this.element.style.flexWrap="nowrap",this.element.style.position="absolute",this.element.style.pointerEvents="none",this.element.style.width=`${this.context.store.getColumnManager().getTotalWidth()}px`,n&&this.raise(),this.updateStyles(),this.container.appendChild(this.element),this.bindEvents(),this.registerEvents()}bindEvents(){this.element.addEventListener("mouseenter",()=>{this.context.event.emit(v.ROW_HIGHLIGHT,this.task.id)}),this.element.addEventListener("mouseleave",()=>{this.context.event.emit(v.ROW_UNHIGHLIGHT,this.task.id)}),this.element.addEventListener("click",t=>{this.context.store.getDataManager().isTaskSelected(this.task.id)||this.context.store.getDataManager().selectTask(this.task.id),this.context.event.emit(v.ROW_CLICK,t,this.task)}),this.element.addEventListener("dblclick",t=>{this.context.event.emit(v.ROW_DBL_CLICK,t,this.task)}),this.element.addEventListener("contextmenu",t=>{t.preventDefault(),this.context.store.getDataManager().selectTask(this.task.id),this.context.event.emit(v.ROW_CONTEXTMENU,t,this.task)})}registerEvents(){this.context.event.on(v.ROW_HIGHLIGHT,t=>{this.task.id===t?this.element.classList.add("hover"):this.element.classList.remove("hover")}),this.context.event.on(v.ROW_UNHIGHLIGHT,t=>{this.task.id===t&&this.element.classList.remove("hover")}),this.context.event.on(v.TASK_SELECTED,t=>{this.task.id===t.id&&this.element.classList.add("selected")}),this.context.event.on(v.TASK_UNSELECTED,t=>{this.task.id===t&&this.element.classList.remove("selected")})}updateStyles(){this.updateTop(this.top),this.context.store.getDataManager().isTaskSelected(this.task.id),this.element.style.backgroundColor=this.context.store.getOptionManager().getRowBackgroundColor(this.task)}raise(){this.element.style.zIndex="2"}updateTop(t){this.top=t;const e=this.context.store.getOptionManager().getOptions().row.height,i=`${-this.top+this.task.flatIndex*e}px`;this.element.style.transform=`translateY(${i})`}create(){var i,s;this.clearCells();const t=this.context.store.getColumnManager().getHandlerColumn();if(t.width!==0){const n=new it(this.context,this.element,t,this.task,this.task.flatIndex,-1,1,1,"handler");this.cells.push(n)}const e=this.context.store.getColumnManager().getLeafColumns();for(let n=0;n<e.length;n++){const o=e[n],r=this.context.store.getColumnManager().getMergeInfo(this.task.id,n);if(r){if(r.task.id!==this.task.id){const a=new it(this.context,this.element,o,this.task,this.task.flatIndex,n,1,1,"empty");this.element.style.backgroundColor="transparent",this.raise(),this.cells.push(a)}else if(r.originColumnIndex===n){const a=new it(this.context,this.element,o,r.task,r.task.flatIndex,n,r.colspan,r.rowspan);this.cells.push(a)}}else{let a=1,c=1;const u=(s=(i=o.column).merge)==null?void 0:s.call(i,this.task.getField(o.column.field),this.task.data,n,this.task.level+1);if(u&&(typeof u.col!="number"?O.error("colspan function must returned a number"):a=u.col,typeof u.row!="number"?O.error("rowspan function must returned a number"):c=u.row),a>1||c>1){if(c>1)for(let p=1;p<c;p++){const g=this.context.store.getDataManager().getVisibleTasks()[this.task.flatIndex+p];if(g&&this.task.level!==g.level){c=p;break}}const l={task:this.task,originColumnIndex:n,colspan:a,rowspan:c};let m=this.task;for(let p=c;p>0;p--)if(m){for(let g=0;g<a;g++)this.context.store.getColumnManager().addMergeInfo(m.id,g+n,l);m=this.context.store.getDataManager().getVisibleTasks().at(m.flatIndex+1)}for(let p=0;p<a;p++)this.context.store.getColumnManager().addMergeInfo(this.task.id,p+n,l)}const d=new it(this.context,this.element,o,this.task,this.task.flatIndex,n,a,c);this.cells.push(d)}}this.context.store.getDataManager().isTaskSelected(this.task.id)&&this.element.classList.add("selected")}update(t){this.task=t,this.create()}updateWidth(){this.element.style.width=`${this.context.store.getColumnManager().getTotalWidth()}px`,this.cells.forEach(t=>t.updateWidth())}clearCells(){for(this.cells.forEach(t=>t.remove()),this.cells=[];this.element.firstChild;)this.element.removeChild(this.element.firstChild)}remove(){this.clearCells(),this.element.parentNode&&this.element.parentNode.removeChild(this.element)}}class be{constructor(t,e){h(this,"element");h(this,"rows",new Map);h(this,"mergeRows",new Map);this.context=t,this.container=e,this.element=document.createElement("div"),this.element.className="x-gantt-table-body",this.element.style.width="100%",this.element.style.position="relative",this.container.appendChild(this.element)}render(t,e){this.mergeRows.forEach(n=>n.remove()),this.mergeRows.clear();const i=new Set;e.forEach(n=>{i.add(n.id)});const s=[];this.rows.forEach((n,o)=>{i.has(o)||s.push(o)}),s.forEach(n=>{const o=this.rows.get(n);o&&o.remove(),this.rows.delete(n)}),e.forEach((n,o)=>{const r=n.id;if(this.rows.has(r)){const a=this.rows.get(r);a.update(n),a.updateTop(t)}else{const a=new _t(this.context,this.element,n,t);a.create(),this.rows.set(r,a)}this.context.store.getColumnManager().getLeafColumns().forEach((a,c)=>{const u=this.context.store.getColumnManager().getMergeInfo(n.id,c);if(u&&u.rowspan>1){const d=u.task.id;if(!this.rows.has(d)&&!this.mergeRows.has(d)){const l=new _t(this.context,this.element,u.task,t,!0);l.create(),this.mergeRows.set(d,l)}}})})}refresh(t,e){this.rows.forEach(i=>{i.remove()}),this.rows.clear(),this.render(t,e)}updateTask(t){this.rows.has(t.id)&&this.rows.get(t.id).update(t)}update(){this.rows.forEach(t=>{t.create()})}updateWidth(){this.rows.forEach(t=>{t.updateWidth()}),this.mergeRows.forEach(t=>{t.updateWidth()})}}class dt{constructor(t,e,i,s){h(this,"columnElement");this.context=t,this.root=e,this.container=i,this.column=s,this.columnElement=document.createElement("div"),this.initElement(),this.container.appendChild(this.columnElement)}initElement(){const t=this.context.store.getColumnManager(),e=t.getColumnWidth(this.column.key),i=this.column.column.headerAlign||this.context.getOptions().table.headerAlign,s=this.column.column.ellipsis??this.context.getOptions().table.ellipsis??!0;this.columnElement.className="x-gantt-table-header-cell",(t.isMultiHeader()||this.context.getOptions().border.show)&&this.columnElement.classList.add("border"),this.columnElement.style.height="100%",this.columnElement.style.width=`${e}px`,this.columnElement.style.display="flex",this.columnElement.style.flexShrink="0",this.columnElement.style.alignItems="center",this.columnElement.style.padding="0 8px",this.columnElement.style.boxSizing="border-box",this.columnElement.style.setProperty("border-color",this.context.getOptions().border.color,"important");const n=document.createElement("div");if(n.className="x-gantt-table-header-cell__content",n.style.flex="1",n.style.textAlign=i,n.style.overflow="hidden",n.style.whiteSpace="nowrap",s&&(n.style.textOverflow="ellipsis"),n.style.position="relative",n.style.fontWeight=`${this.context.getOptions().header.fontWeight}`,n.style.fontSize=j(this.context.getOptions().header.fontSize),n.style.setProperty("color",this.context.getOptions().header.color,"important"),n.style.fontFamily=this.context.getOptions().header.fontFamily,this.column.column.headerRender){const o=this.column.column.headerRender();typeof o=="string"?n.innerHTML=o:o instanceof HTMLElement&&(n.innerHTML="",n.appendChild(o))}else n.textContent=this.column.label||this.column.column.label||"";this.column.column.customStyle&&Object.assign(n.style,this.column.column.customStyle),this.columnElement.appendChild(n),this.addResizeHandle()}setWidth(t){this.columnElement.style.width=`${t}px`,this.context.store.getColumnManager().setColumnWidth(this.column.key,t)}addResizeHandle(){if(this.column.column.resizable===!1||this.context.store.getColumnManager().isLastColumn(this.column.key))return;const t=document.createElement("div");t.className="x-gantt-column-resize-handle",t.style.position="absolute",t.style.top="0",t.style.right="0",t.style.width="5px",t.style.height="100%",t.style.cursor="col-resize",t.style.zIndex="2",this.columnElement.appendChild(t);let e=0,i=0,s=null,n=0;const o=c=>{c.preventDefault(),c.stopPropagation(),e=c.clientX,i=this.columnElement.offsetWidth,s=this.root.getBoundingClientRect();const u=l=>r(l),d=l=>a(l,u,d);document.addEventListener("mousemove",u),document.addEventListener("mouseup",d),n=e-s.left,this.context.event.emit(v.SHOW_GUIDELINE,n)},r=c=>{if(c.preventDefault(),!s)return;const u=c.clientX-e,d=i+u,l=Math.max(50,d),m=e-s.left-i,g=this.root.clientWidth-20;let y=m+l;y=Math.min(g,y),this.context.event.emit(v.MOVE_GUIDELINE,y)},a=(c,u,d)=>{document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",d),this.context.event.emit(v.HIDE_GUIDELINE);const l=c.clientX-e,m=Math.max(50,i+l);this.setWidth(m)};t.addEventListener("mousedown",o)}}class ut{constructor(t,e,i,s){h(this,"groupElement");h(this,"titleContainer");h(this,"childContainer");h(this,"children",[]);this.context=t,this.root=e,this.container=i,this.column=s,this.groupElement=document.createElement("div"),this.titleContainer=document.createElement("div"),this.childContainer=document.createElement("div"),this.initElement(),this.initChildren(),this.container.appendChild(this.groupElement)}initElement(){const e=this.context.getOptions().header.height/this.column.maxLevel;this.groupElement.className="x-gantt-table-header-group",(this.context.store.getColumnManager().isMultiHeader()||this.context.getOptions().border.show)&&this.groupElement.classList.add("border"),this.groupElement.style.display="flex",this.groupElement.style.flexShrink="0",this.groupElement.style.flexGrow="0",this.groupElement.style.flexDirection="column",this.groupElement.style.height="100%",this.groupElement.style.overflow="hidden",this.groupElement.style.boxSizing="border-box",this.titleContainer.className="x-gantt-table-header-cell",(this.context.store.getColumnManager().isMultiHeader()||this.context.getOptions().border.show)&&this.titleContainer.classList.add("border"),this.titleContainer.style.height=`${e}px`,this.titleContainer.style.flex="0 0 auto",this.titleContainer.style.display="flex",this.titleContainer.style.alignItems=this.context.getOptions().table.headerAlign,this.titleContainer.style.justifyContent="center",this.titleContainer.style.padding="0 8px",this.titleContainer.style.boxSizing="border-box",this.titleContainer.style.overflow="hidden",this.titleContainer.style.whiteSpace="nowrap",this.context.getOptions().table.ellipsis&&(this.titleContainer.style.textOverflow="ellipsis"),this.titleContainer.style.borderBottom=`1px solid ${this.context.getOptions().border.color}`,this.titleContainer.style.setProperty("border-color",this.context.getOptions().border.color,"important"),this.titleContainer.style.fontWeight=`${this.context.getOptions().header.fontWeight}`,this.titleContainer.style.fontSize=j(this.context.getOptions().header.fontSize),this.titleContainer.style.fontFamily=this.context.getOptions().header.fontFamily,this.titleContainer.style.setProperty("color",this.context.getOptions().header.color,"important"),this.titleContainer.textContent=this.column.label||"",this.childContainer.className="x-gantt-table-header-children",this.childContainer.style.flex="1 0 auto",this.childContainer.style.display="flex",this.childContainer.style.width="100%",this.groupElement.appendChild(this.titleContainer),this.groupElement.appendChild(this.childContainer)}initChildren(){this.column.children.forEach(t=>{if(t.isLeaf){const e=new dt(this.context,this.root,this.childContainer,t);this.children.push(e)}else if(t.children.length>0){const e=new ut(this.context,this.root,this.childContainer,t);this.children.push(e)}})}}class Te{constructor(t,e){h(this,"headerElement");h(this,"headerColumns",[]);this.context=t,this.container=e,this.headerElement=document.createElement("div"),this.initElement(),this.container.appendChild(this.headerElement)}initElement(){this.headerElement.className="x-gantt-table-header",this.headerElement.style.display="flex",this.headerElement.style.height=`${this.context.getOptions().header.height}px`,this.headerElement.style.minHeight=`${Math.max(this.context.getOptions().header.height,30)}px`,this.headerElement.style.setProperty("background-color",this.context.getOptions().header.backgroundColor||this.context.getOptions().primaryColor,"important"),this.headerElement.style.setProperty("color",this.context.getOptions().header.color,"important"),this.headerElement.style.fontSize=`${this.context.getOptions().header.fontSize}px`,this.headerElement.style.fontWeight=`${this.context.getOptions().header.fontWeight}`,this.headerElement.style.zIndex="10",this.headerElement.style.width="100%",this.headerElement.style.flexShrink="0",this.headerElement.style.borderBottom=`1px solid ${this.context.getOptions().border.color}`,this.headerElement.style.setProperty("border-color",this.context.getOptions().border.color,"important")}render(){this.headerColumns=[],this.headerElement.innerHTML="",this.initElement();const t=this.context.store.getColumnManager(),e=t.getColumns();if(t.getHandlerColumn().width!==0){const i=new dt(this.context,this.headerElement,this.headerElement,t.getHandlerColumn());this.headerColumns.push(i)}e.forEach(i=>{if(i.isLeaf){const s=new dt(this.context,this.headerElement,this.headerElement,i);this.headerColumns.push(s)}else if(i.children.length>0){const s=new ut(this.context,this.headerElement,this.headerElement,i);this.headerColumns.push(s)}})}}class Se{constructor(t,e){h(this,"tableContainer");h(this,"tableHeader");h(this,"tableBody");this.context=t,this.container=e,this.tableContainer=document.createElement("div"),this.tableContainer.className="x-gantt-table-container",this.tableContainer.style.position="relative",this.tableContainer.style.width="100%",this.tableContainer.style.height="100%",this.tableContainer.style.overflow="hidden",this.tableContainer.style.display="flex",this.tableContainer.style.flexDirection="column",this.container.appendChild(this.tableContainer),this.tableHeader=new Te(t,this.tableContainer),this.tableBody=new be(t,this.tableContainer),this.listenEvents()}render(t,e){this.tableHeader.render(),this.refresh(t,e)}refresh(t,e){this.tableBody.render(t,e)}updateWidth(){this.tableBody.updateWidth()}updateTask(t){this.tableBody.updateTask(t)}listenEvents(){this.context.event.on(v.UPDATE_TABLE_HEADER,()=>{this.tableHeader.render()}),this.context.event.on(v.UPDATE_TABLE_BODY,()=>{this.tableBody.update()})}}class ve{constructor(t,e){h(this,"background");h(this,"groupHeader");h(this,"cellHeader");h(this,"cellCache",new Map);h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);this.context=t,this.layer=e,this.background=new k.Rect({fill:this.context.getOptions().header.backgroundColor||this.context.getOptions().primaryColor,name:"header-background"}),this.layer.add(this.background),this.groupHeader=new k.Group({name:"primary-header"}),this.cellHeader=new k.Group({name:"secondary-header"}),this.layer.add(this.groupHeader),this.layer.add(this.cellHeader),this.registerEvents()}resize(t){this.width=t,this.height=this.context.getOptions().header.height,this.background.width(t),this.background.height(this.height),this.render()}setOffset(t,e){this.offsetX!==t&&(this.offsetX=t,this.groupHeader.x(t),this.cellHeader.x(t),this.render())}registerEvents(){this.context.event.on(v.ROW_HIGHLIGHT,t=>{this.highlightDate(t)}),this.context.event.on(v.ROW_UNHIGHLIGHT,t=>{this.unhighlightDate(t)}),this.context.event.on(v.UPDATE_TASK,t=>{this.highlightDate(t.id)})}render(){this.calculateHeader(),this.layer.moveToTop(),this.layer.batchDraw()}calculateHeader(){var c;this.clearHeader();const t=this.context.store.getTimeAxis(),e=t.getCellWidth(),i=Math.max(0,-this.offsetX),s=i+this.width,n=Math.floor(this.height/2),o=this.context.getOptions().border.color;this.layer.add(new k.Line({points:[0,n,this.width,n],stroke:o,strokeWidth:1})),this.layer.add(new k.Line({points:[0,this.height,this.width,this.height],stroke:o,strokeWidth:1}));const r=t.getTimeline();let a=0;for(let u=0;u<r.length;u++){const d=r[u],l=e*(((c=d.children)==null?void 0:c.length)??0);if(a+l<i){a+=l;continue}if(a>s)break;const p=this.createCell(`group-${d.date.format("YYYY-MM-DD")}`,a,0,l,n,o,d.label);if(this.groupHeader.add(p),D.isArray(d.children)&&d.children.length>0){let g=a;for(let y=0;y<d.children.length;){const x=d.children[y];let T=1;for(;d.children[y+T]&&x.label===d.children[y+T].label;)T++;if(y+=T,y>=d.children.length&&r[u+1]&&r[u+1].children){let M=0;for(;r[u+1].children[M]&&x.label===r[u+1].children[M].label;)r[u+1].children[M].hide=!0,M++;M>0&&(T+=M)}const b=e*T;if(g+b<i){g+=b;continue}if(g>s)break;const C=this.createCell(`cell-${x.date.format("YYYY-MM-DD")}`,g,n,b,n,x.hide?"transparent":o,x.hide?"":x.label);this.cellHeader.add(C),x.hide&&C.visible(!1),g+=b}}a+=l}this.layer.batchDraw()}createCell(t,e,i,s,n,o,r){const a=new k.Group;a.x(e),a.y(i);const c=new k.Rect({id:t,x:0,y:0,width:s,height:n,fill:this.context.getOptions().header.backgroundColor||this.context.getOptions().primaryColor,name:"header-cell-bg"});a.add(c);let u=this.context.getOptions().header.fontSize;t.startsWith("cell-")&&(this.cellCache.set(t,c),u-=2);const d=new k.Line({points:[s,0,s,n],stroke:o,strokeWidth:1,name:"header-cell-right-border"});a.add(d);const l=new k.Text({x:0,y:0,width:s,height:n,text:r,fontSize:u,fontFamily:this.context.getOptions().header.fontFamily,fontStyle:`${this.context.getOptions().header.fontWeight}`,fill:this.context.getOptions().header.color,align:"center",verticalAlign:"middle",wrap:"none",ellipsis:!0,name:"header-cell-text"});return a.add(l),a}clearHeader(){this.groupHeader.destroyChildren(),this.cellHeader.destroyChildren(),this.cellCache.clear()}destroy(){this.layer.destroy(),this.cellCache.clear()}highlightDate(t){const e=this.context.store.getDataManager().getTaskById(t);e&&e.startTime&&e.endTime&&this.handleHighlight("in",e)}unhighlightDate(t){const e=this.context.store.getDataManager().getTaskById(t);e&&e.startTime&&e.endTime&&this.handleHighlight("out",e)}handleHighlight(t,e){var o,r;if(!this.context.getOptions().highlight||this.context.getOptions().unit!=="day")return;const i=this.cellCache.get(`cell-${(o=e==null?void 0:e.startTime)==null?void 0:o.format("YYYY-MM-DD")}`),s=this.cellCache.get(`cell-${(r=e==null?void 0:e.endTime)==null?void 0:r.format("YYYY-MM-DD")}`),n=this.context.getOptions().header.backgroundColor||this.context.getOptions().primaryColor;n&&(this.cellCache.forEach(a=>{new k.Tween({node:a,fill:n,duration:.02}).play()}),t==="in"&&(i&&new k.Tween({node:i,fill:B(n).brighten(30).toHex(),duration:.02}).play(),s&&new k.Tween({node:s,fill:B(n).brighten(30).toHex(),duration:0}).play()))}}class ke{constructor(t,e){h(this,"verticalLines");h(this,"horizontalLines");h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);h(this,"offsetY",0);this.context=t,this.layer=e,this.verticalLines=new k.Group({name:"vertical-grid-lines"}),this.horizontalLines=new k.Group({name:"horizontal-grid-lines"}),this.layer.add(this.verticalLines),this.layer.add(this.horizontalLines)}resize(t,e){this.width=t,this.height=e,this.clearGrid(),this.calculateGrid()}setOffset(t,e){this.offsetX=t,this.offsetY=e,this.verticalLines.x(t),this.horizontalLines.y(e),this.calculateGrid()}render(){this.layer.batchDraw()}destroy(){this.layer.destroy()}calculateGrid(){this.clearGrid();const t=this.context.getOptions().header.height,e=this.width,i=this.context.store.getTimeAxis().getCellWidth(),s=this.context.getOptions().row.height,n=this.context.store.getDataManager().getVisibleSize(),o=n*s,r=Math.max(0,Math.floor(-this.offsetX/i)-2),a=Math.min(this.context.store.getTimeAxis().getCellCount(),Math.ceil((-this.offsetX+this.width)/i)+2),c=Math.max(0,Math.floor((-this.offsetY+t)/s)-2),u=Math.min(n,Math.ceil((-this.offsetY+this.height)/s)+2);if(this.context.getOptions().border.show&&["day","hour"].includes(this.context.getOptions().unit))for(let d=r;d<=a;d++){const l=d*i,m=new k.Line({points:[l,t,l,o+t],stroke:this.context.getOptions().border.color,strokeWidth:.5,name:"vertical-grid-line"});this.verticalLines.add(m)}for(let d=c;d<=u;d++){const l=d*s+t,m=new k.Line({points:[0,l,Math.max(this.width,e),l],stroke:this.context.getOptions().border.color,strokeWidth:.5,name:"horizontal-grid-line"});this.horizontalLines.add(m)}}clearGrid(){this.verticalLines.destroyChildren(),this.horizontalLines.destroyChildren()}}const At='<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15"><path fill="currentColor" fill-rule="evenodd" d="M5.5 4.625a1.125 1.125 0 1 0 0-2.25a1.125 1.125 0 0 0 0 2.25m4 0a1.125 1.125 0 1 0 0-2.25a1.125 1.125 0 0 0 0 2.25M10.625 7.5a1.125 1.125 0 1 1-2.25 0a1.125 1.125 0 0 1 2.25 0M5.5 8.625a1.125 1.125 0 1 0 0-2.25a1.125 1.125 0 0 0 0 2.25m5.125 2.875a1.125 1.125 0 1 1-2.25 0a1.125 1.125 0 0 1 2.25 0M5.5 12.625a1.125 1.125 0 1 0 0-2.25a1.125 1.125 0 0 0 0 2.25" clip-rule="evenodd"/></svg>';class Ee{constructor(t,e,i,s,n){h(this,"offsetX",0);h(this,"offsetY",0);h(this,"sliderGroup");h(this,"slider");h(this,"sliderBar",null);h(this,"sliderType","");h(this,"leftHandleGroup",null);h(this,"rightHandleGroup",null);h(this,"progressGroup",null);h(this,"handlerWidth",10);h(this,"autoMoveTimer",null);h(this,"autoScrollTimer",null);h(this,"autoExpandTimer",null);h(this,"EDGE_THRESHOLD",20);h(this,"SCROLL_STEP",5);h(this,"MOVE_INTERVAL",1e3/60);h(this,"AUTO_EXPAND_INTERVAL",500);h(this,"isDragging",!1);h(this,"draggingDirection","none");h(this,"dragDiffX",0);h(this,"oldTasks",[]);this.context=t,this.x=e,this.y=i,this.task=s,this.rowWidth=n,this.sliderGroup=new k.Group({x:e,y:i,id:`chart-slider-bar-${s.id}`}),this.render(),this.bindEvents(),this.registerEvents()}update(t,e){this.x=t,this.y=e,this.sliderGroup.position({x:t,y:e}),this.render()}setOffset(t,e){this.offsetX=t,this.offsetY=e}unpackFunc(t){return this.context.store.getOptionManager().unpackFunc(t,this.task)}registerEvents(){this.context.event.on(v.SLIDER_BLINK,t=>{t===this.task.id&&this.handleBarBlink()})}render(){var p,g,y,x,T,b,w,C,M,E,S,L,H;if(!this.task.startTime||!this.task.endTime)return;if(this.task.endTime.isBefore(this.task.startTime)){O.error("The endTime of the current task is earlier than the startTime.",this.task);return}const t=this.context.getOptions().row.height,e=tt(this.unpackFunc(this.context.getOptions().bar.height),t),i=(t-e)/2,s=this.context.store.getTimeAxis().getTimeLeft(this.task.startTime),o=this.context.store.getTimeAxis().getTimeLeft(this.task.endTime)-s,r=this.unpackFunc(this.context.getOptions().bar.backgroundColor)||this.context.getOptions().primaryColor,a=et(this.unpackFunc(this.context.getOptions().bar.radius)),c=this.unpackFunc(this.context.getOptions().bar.shadowColor)||"rgba(0, 0, 0, 0.2)",u=this.unpackFunc(this.context.getOptions().bar.shadowBlur)||0,d=this.unpackFunc(this.context.getOptions().bar.shadowOffsetX)||0,l=this.unpackFunc(this.context.getOptions().bar.shadowOffsetY)||0;this.slider||(this.slider=new k.Group({dragBoundFunc:I=>{let _=Math.min(0,-(-this.offsetX-this.slider.x()));const G=this.context.store.getTimeAxis().getTimeLeft(this.task.endTime);let $=this.sliderGroup.getStage().width()-this.slider.width()+Math.abs(G-(-this.offsetX+this.sliderGroup.getStage().width()));if(this.context.getOptions().bar.move.link.parent==="strict"&&this.task.parent){if(this.task.parent.startTime){const W=this.task.parent.startTime;_=this.context.store.getTimeAxis().getTimeLeft(W)}if(this.task.parent.endTime){const W=this.task.parent.endTime,z=this.context.store.getTimeAxis().getTimeLeft(W);$=Math.abs(z-this.slider.width())}}return{x:F(I.x,_,$),y:this.y+i+this.offsetY}}})),this.slider.position({x:s,y:i}),this.slider.size({width:o,height:e});const m=!!this.unpackFunc(this.context.getOptions().bar.move.enabled)&&(this.task.isSummary()?this.context.getOptions().summary.move.enabled:!0);if(this.slider.draggable(m),this.slider.on("mouseover",I=>{m&&!this.isDragging&&(I.target.getStage().container().style.cursor="grab"),this.handleBarHighlight({shadowColor:B(c).alpha(B(c).alpha()+.1).toHex(),shadowBlur:Math.max((u||1)*2,4),shadowOffsetX:Math.max(d||1,2),shadowOffsetY:Math.max((l||1)*1.5,4)}),this.context.event.emit(v.SLIDER_ENTER,I.evt,this.task)}),this.slider.on("mousemove",I=>{this.context.event.emit(v.SLIDER_HOVER,I.evt,this.task)}),this.slider.on("mouseout",I=>{m&&!this.isDragging&&(I.target.getStage().container().style.cursor="default"),this.isDragging||this.handleBarHighlight({shadowColor:c,shadowBlur:u,shadowOffsetX:d,shadowOffsetY:l}),this.context.event.emit(v.SLIDER_LEAVE,I.evt,this.task)}),this.task.isMilestone()){this.sliderBar&&!this.sliderType.startsWith("milestone")&&(this.slider.destroyChildren(),this.sliderBar=null,this.progressGroup=null,this.leftHandleGroup=null,this.rightHandleGroup=null);const I=this.unpackFunc(this.context.getOptions().milestone.size),_=Math.min(I||e,t/2),G=this.unpackFunc(this.context.getOptions().milestone.color)||r,$=this.unpackFunc(this.context.getOptions().milestone.border.color),R=this.unpackFunc(this.context.getOptions().milestone.border.width),W=this.unpackFunc(this.context.getOptions().milestone.shape);if(!this.sliderBar){switch(W){case"triangle":this.sliderBar=new k.RegularPolygon({sides:3,radius:_,rotation:0,fill:G,stroke:$,strokeWidth:R,y:_/3*2});break;case"circle":this.sliderBar=new k.Circle({radius:_,fill:G,stroke:$,strokeWidth:R,y:_/2});break;case"star":this.sliderBar=new k.Star({numPoints:5,innerRadius:_/2,outerRadius:_,fill:G,stroke:$,strokeWidth:R,y:_/2});break;case"diamond":default:this.sliderBar=new k.RegularPolygon({sides:4,radius:_,rotation:0,fill:G,stroke:$,strokeWidth:R,y:_/2})}if(this.slider.add(this.sliderBar),this.unpackFunc(this.context.getOptions().milestone.label.show)){const z=this.unpackFunc(this.context.getOptions().milestone.label.text),Y=this.unpackFunc(this.context.getOptions().milestone.label.position),Z=this.unpackFunc(this.context.getOptions().milestone.label.fontSize),Ne=this.unpackFunc(this.context.getOptions().milestone.label.fontFamily),Ye=this.unpackFunc(this.context.getOptions().milestone.label.color),st=new k.Text({height:e,text:z,fill:Ye||G,fontSize:Z,fontFamily:Ne}),gt=st.measureSize(z);st.width(gt.width);const q={x:0,y:0};switch(Y){case"top-left":q.x=-(12+gt.width),q.y=-8;break;case"bottom-left":q.x=-(12+gt.width),q.y=10;break;case"bottom-right":q.x=12,q.y=10;break;case"top-right":default:q.x=12,q.y=-8;break}st.setAttrs(q),this.slider.add(st)}}this.sliderType="milestone"}else if(this.task.isSummary()&&(this.context.getOptions().summary.mode==="always"||this.task.expanded)){this.sliderBar&&this.sliderType!=="summary"&&(this.slider.destroyChildren(),this.sliderBar=null,this.progressGroup=null,this.leftHandleGroup=null,this.rightHandleGroup=null);const I=this.unpackFunc(this.context.getOptions().summary.color)||r,_=t*.2,G=t*.3,$=R=>new k.Shape({sceneFunc:(W,z)=>{const Y=G*.5;W.beginPath(),W.moveTo(0,(t-_)/2),W.lineTo(Y,(t-_)/2),W.lineTo(Y,(t-_)/2+_),W.lineTo(0,(t-_)/2+_+G),W.lineTo(0,(t-_)/2),W.rect(Y,(t-_)/2,R-2*Y,_),W.moveTo(R-Y,(t-_)/2),W.lineTo(R,(t-_)/2),W.lineTo(R,(t-_)/2+_+G),W.lineTo(R-Y,(t-_)/2+_),W.lineTo(R-Y,(t-_)/2),W.fillStrokeShape(z)},width:R,fill:I,shadowColor:c,shadowBlur:u,shadowOffsetX:d,shadowOffsetY:l,y:-(G+_)/2-i/2});!this.sliderBar||this.sliderBar.width()!==o?(this.sliderBar&&this.sliderBar.destroy(),this.sliderBar=$(o),this.slider.add(this.sliderBar)):this.sliderBar.setAttrs({fill:I,shadowColor:c,shadowBlur:u,shadowOffsetX:d,shadowOffsetY:l}),this.sliderType="summary"}else{this.sliderBar&&this.sliderType!=="bar"&&(this.slider.destroyChildren(),this.sliderBar=null),this.sliderBar||(this.sliderBar=new k.Rect({x:0,y:0}),this.slider.add(this.sliderBar),this.sliderType="bar"),this.sliderBar.setAttrs({width:o,height:e,fill:r,cornerRadius:a}),this.renderProgress(o,e);const I=(p=this.context.getOptions().bar.move.single)==null?void 0:p.icon,_=(g=this.context.getOptions().bar.move.single)==null?void 0:g.backgroundColor,G=_?B(_).alpha(((y=this.context.getOptions().bar.move.single)==null?void 0:y.opacity)??1).toHex():B(r).brighten(30*(this.unpackFunc((x=this.context.getOptions().bar.progress)==null?void 0:x.show)?-1:1)).alpha(((T=this.context.getOptions().bar.move.single)==null?void 0:T.opacity)??1).toHex();if(!!this.unpackFunc((b=this.context.getOptions().bar.move.single)==null?void 0:b.left)){if(!this.leftHandleGroup){this.leftHandleGroup=new k.Group({x:0,y:0,opacity:0}),this.slider.add(this.leftHandleGroup),this.leftHandleGroup.on("mousedown",z=>{this.resizeMove(z,"left")}),this.leftHandleGroup.on("mouseover",z=>{setTimeout(()=>{z.target.getStage().container().style.cursor="ew-resize"},0)}),this.leftHandleGroup.on("mouseout",z=>{this.isDragging||(z.target.getStage().container().style.cursor="default")});const W=new k.Rect({x:0,y:0});this.leftHandleGroup.add(W),I!==null&&pt(I||At,this.handlerWidth,e).then(z=>{var Z;const Y=new k.Image({image:z,x:0,y:(e-this.handlerWidth)/2,width:this.handlerWidth,height:this.handlerWidth});(Z=this.leftHandleGroup)==null||Z.add(Y)})}(w=this.leftHandleGroup.findOne("Rect"))==null||w.setAttrs({width:this.handlerWidth,height:e,fill:G,cornerRadius:[a[0],0,0,a[3]]}),(C=this.leftHandleGroup.findOne("Image"))==null||C.setAttrs({x:0,y:(e-this.handlerWidth)/2,width:this.handlerWidth,height:this.handlerWidth})}else this.leftHandleGroup&&(this.leftHandleGroup.remove(),this.leftHandleGroup=null);if(!!this.unpackFunc((M=this.context.getOptions().bar.move.single)==null?void 0:M.right)){if(!this.rightHandleGroup){this.rightHandleGroup=new k.Group({x:0,y:0,opacity:0}),this.slider.add(this.rightHandleGroup),this.rightHandleGroup.on("mousedown",z=>{this.resizeMove(z,"right")}),this.rightHandleGroup.on("mouseover",z=>{setTimeout(()=>{z.target.getStage().container().style.cursor="ew-resize"},0)}),this.rightHandleGroup.on("mouseout",z=>{this.isDragging||(z.target.getStage().container().style.cursor="default")});const W=new k.Rect({x:0,y:0});this.rightHandleGroup.add(W),I!==null&&pt(I||At,this.handlerWidth,e).then(z=>{var Z;const Y=new k.Image({image:z,x:o-this.handlerWidth,y:(e-this.handlerWidth)/2,width:this.handlerWidth,height:this.handlerWidth});(Z=this.rightHandleGroup)==null||Z.add(Y)})}(E=this.rightHandleGroup.findOne("Rect"))==null||E.setAttrs({x:o-this.handlerWidth,width:this.handlerWidth,height:e,fill:G,cornerRadius:[0,a[1],a[2],0]}),(S=this.rightHandleGroup.findOne("Image"))==null||S.setAttrs({x:o-this.handlerWidth,y:(e-this.handlerWidth)/2,width:this.handlerWidth,height:this.handlerWidth})}else this.rightHandleGroup&&(this.rightHandleGroup.remove(),this.rightHandleGroup=null);this.renderText(o,e),(L=this.leftHandleGroup)==null||L.moveToTop(),(H=this.rightHandleGroup)==null||H.moveToTop()}this.isDragging||this.sliderBar.setAttrs({shadowColor:c,shadowBlur:u,shadowOffsetX:d,shadowOffsetY:l}),this.sliderGroup.add(this.slider),this.unpackFunc(this.context.getOptions().bar.show)===!1?this.sliderGroup.hide():this.sliderGroup.show()}renderText(t,e){const i=`chart-slider-text-${this.task.id}`,s=()=>{this.slider.find(`#${i}`)&&this.slider.find(`#${i}`).forEach(a=>a.remove())};if(!this.context.getOptions().bar.field&&!this.context.getOptions().bar.label){s();return}const n=this.context.getOptions().bar.label;let o="";n?o=this.unpackFunc(n):this.context.getOptions().bar.field&&(o=this.task.getField(this.context.getOptions().bar.field)),s();const r=t-(this.leftHandleGroup?this.handlerWidth:0)-(this.rightHandleGroup?this.handlerWidth:0);if(r>20){const a=new k.Text({id:i,x:this.leftHandleGroup?10:0,y:0,width:r,height:e,padding:10,text:o,fill:this.unpackFunc(this.context.getOptions().bar.color)||"#000",fontSize:this.unpackFunc(this.context.getOptions().bar.fontSize)||12,fontFamily:this.unpackFunc(this.context.getOptions().bar.fontFamily)||"Arial",align:this.unpackFunc(this.context.getOptions().bar.align),verticalAlign:this.unpackFunc(this.context.getOptions().bar.verticalAlign)||"middle",ellipsis:!0});this.slider.add(a)}}renderProgress(t,e){var i,s,n,o,r,a,c,u,d,l,m,p;if(!this.unpackFunc((i=this.context.getOptions().bar.progress)==null?void 0:i.show)){this.progressGroup&&(this.progressGroup.destroy(),this.progressGroup=null);return}if(this.task.progress){const g=Wt(this.task.progress,((s=this.context.getOptions().bar.progress)==null?void 0:s.targetVal)??100);if(g===0)return;const y=this.unpackFunc(this.context.getOptions().bar.backgroundColor)||this.context.getOptions().primaryColor,x=this.unpackFunc((n=this.context.getOptions().bar.progress)==null?void 0:n.backgroundColor)||B(y).brighten(((o=this.context.getOptions().bar.progress)==null?void 0:o.amount)||30).toHex(),T=et(this.unpackFunc(this.context.getOptions().bar.radius)),b=et(this.unpackFunc((r=this.context.getOptions().bar.progress)==null?void 0:r.radius),2);b[0]=T[0],b[3]=T[3],g===1&&(b[1]=T[1],b[2]=T[2]);const w=t*g;this.progressGroup?(this.progressGroup.width(w),this.progressGroup.destroyChildren()):(this.progressGroup=new k.Group({x:0,y:0,width:w,height:e,listening:!1}),this.slider.add(this.progressGroup));const C=new k.Rect({x:0,y:0,width:w,height:e,fill:x,cornerRadius:b,opacity:this.unpackFunc((a=this.context.getOptions().bar.progress)==null?void 0:a.opacity)});this.progressGroup.add(C);const M=`${rt(g*100,(c=this.context.getOptions().bar.progress)==null?void 0:c.decimal)}%`,E=new k.Text().measureSize(M).width,S=this.unpackFunc((u=this.context.getOptions().bar.progress)==null?void 0:u.textAlign),L=new k.Text({x:0,y:S==="top"?-e:0,width:S==="right"?w+E:Math.max(w,E),height:e,fill:this.unpackFunc((d=this.context.getOptions().bar.progress)==null?void 0:d.color)||B("#000000").mix(x,50).alpha(.7).toHex(),text:M,fontSize:this.unpackFunc((l=this.context.getOptions().bar.progress)==null?void 0:l.fontSize)||10,fontStyle:this.unpackFunc((m=this.context.getOptions().bar.progress)==null?void 0:m.fontStyle)||"italic",fontFamily:"Arial",verticalAlign:S==="top"?"bottom":"middle",align:"right"});(p=this.progressGroup)==null||p.add(L)}}bindEvents(){this.slider&&(this.slider.on("dragstart",t=>this.handleDragStart(t)),this.slider.on("dragend",t=>this.handleDragEnd(t)),this.slider.on("dragmove",t=>this.handleDragMove(t)),this.slider.on("mouseover",()=>this.handleMouseEnter()),this.slider.on("mouseout",()=>this.handleMouseLeave()),this.slider.on("mousedown",t=>{if(t.evt.button!==0)return;const e=t.target.getStage();e&&this.slider.draggable()&&(e.container().style.cursor="grabbing")}),this.slider.on("mouseup",t=>{if(t.evt.button!==0)return;const e=t.target.getStage();e&&this.slider.draggable()&&(e.container().style.cursor="grab")}),this.slider.on("click",t=>{t.evt.button===0&&(t.cancelBubble=!0,this.isDragging=!1,this.context.event.emit(v.SLIDER_CLICK,t.evt,this.task))}),this.slider.on("contextmenu",t=>{t.cancelBubble=!0,t.evt.stopPropagation(),t.evt.preventDefault(),this.context.event.emit(v.SLIDER_CONTEXTMENU,t.evt,this.task)}),this.slider.on("dblclick",t=>{t.evt.button===0&&(t.cancelBubble=!0,this.context.event.emit(v.SLIDER_DBL_CLICK,t.evt,this.task))}))}emitUpdate(t){let e=this.task.startTime.clone(),i=this.task.endTime.clone();t!=="right"&&(e=this.context.store.getTimeAxis().getTimeByLeft(this.slider.x())),t!=="left"&&(i=this.context.store.getTimeAxis().getTimeByLeft(this.slider.x()+this.slider.width())),(!(e!=null&&e.isSame(this.task.startTime))||!(i!=null&&i.isSame(this.task.endTime)))&&this.context.store.getDataManager().updateTaskTime(this.task,e,i,t,this.oldTasks)}handleDragStart(t){const e=t.target.getStage();if(!e)return;this.isDragging=!0,this.oldTasks=[],this.context.event.emit(v.SLIDER_DRAGGING,!0),e.container().style.cursor="grabbing";const i=t.target.x(),s=this.context.store.getTimeAxis().getCellWidth(),n=ot(i,s);this.dragDiffX=n-i,this.handleMove(t,e)}handleDragMove(t){if(!this.isDragging)return;if(t.evt.movementX>0?this.draggingDirection!=="right"&&(this.draggingDirection="right",this.stopAutoScroll(),this.stopAutoExpand()):t.evt.movementX<0&&this.draggingDirection!=="left"&&(this.draggingDirection="left",this.stopAutoScroll(),this.stopAutoExpand()),!!this.context.getOptions().bar.move.byUnit){const i=t.target.x(),s=this.context.store.getTimeAxis().getCellWidth(),n=ot(i,s);t.target.x(n-this.dragDiffX)}}handleDragEnd(t){this.stopAutoMove(),this.stopAutoScroll(),this.stopAutoExpand(),this.isDragging=!1,this.dragDiffX=0,this.draggingDirection="none",this.oldTasks.length>0&&(this.context.event.emit(v.TASK_DRAG_END,this.task,this.oldTasks),this.oldTasks=[]);const e=t.target.getStage();if(e){const i=e.getPointerPosition();if(i){const s=this.context.getOptions().row.height,n=this.y+this.offsetY,o=n+s;if(i.y<n||i.y>o){const r=this.unpackFunc(this.context.getOptions().bar.shadowColor)||"rgba(0, 0, 0, 0.2)",a=this.unpackFunc(this.context.getOptions().bar.shadowBlur)||0,c=this.unpackFunc(this.context.getOptions().bar.shadowOffsetX)||0,u=this.unpackFunc(this.context.getOptions().bar.shadowOffsetY)||0;this.handleBarHighlight({shadowColor:r,shadowBlur:a,shadowOffsetX:c,shadowOffsetY:u}),this.handleResizeHighlight(0),e.container().style.cursor="default"}}}this.context.event.emit(v.SLIDER_DRAGGING,!1)}handleMove(t,e){const i=e.width(),s=!!this.context.getOptions().bar.move.lock,n=!!this.context.getOptions().bar.move.byUnit,o=this.context.store.getTimeAxis().getCellWidth(),r=t.target.width(),a=t.target.x(),c=a+r,u=Math.max(0,-this.offsetX-a),d=Math.max(0,c-(-this.offsetX+i));this.autoMoveTimer=window.setInterval(()=>{const l=t.target.width(),m=t.target.x(),p=m+l,g=-this.offsetX,y=g+i,x=this.context.store.getTimeAxis().getTotalWidth(),T=m<=g+this.EDGE_THRESHOLD,b=p>=y-this.EDGE_THRESHOLD;if(T)if(g<=0)this.draggingDirection==="left"&&t.target.x(-u),this.stopAutoScroll(),s||(this.draggingDirection==="left"?this.startAutoExpand("left",-u):this.stopAutoExpand());else if(this.draggingDirection==="left"){const w=n?-o:-this.SCROLL_STEP;this.startAutoScroll(w,n,()=>{t.target.x(t.target.x()+w)},()=>t.target.x(t.target.x()-u))}else this.stopAutoScroll();else if(b)if(y>=x)this.draggingDirection==="right"&&t.target.x(x-l+d),this.stopAutoScroll(),s||(this.draggingDirection==="right"?this.startAutoExpand("right",0,d):this.stopAutoExpand());else if(this.draggingDirection==="right"){const w=n?o:this.SCROLL_STEP;this.startAutoScroll(w,n,()=>{t.target.x(t.target.x()+w)})}else this.stopAutoScroll();else this.stopAutoExpand(),this.stopAutoScroll();this.emitUpdate("both")},this.MOVE_INTERVAL)}resizeMove(t,e){var y;t.cancelBubble=!0;const i=t.target.getStage();if(!i)return;this.isDragging=!0,this.context.event.emit(v.SLIDER_DRAGGING,!0);let s=((y=i.getPointerPosition())==null?void 0:y.x)||0;const n=!!this.context.getOptions().bar.move.byUnit,o=this.context.store.getTimeAxis().getCellWidth(),r=!!this.context.getOptions().bar.move.lock,a=i.width();let c=0,u=0;this.autoMoveTimer=window.setInterval(()=>{const x=this.slider.width(),T=this.slider.x(),b=T+x,w=-this.offsetX,C=w+a,M=T<=w+this.EDGE_THRESHOLD,E=b>=C-this.EDGE_THRESHOLD;if(M&&e==="left"){if(w<=0)this.slider.x(0),this.stopAutoScroll(),r||(this.draggingDirection==="left"?this.startAutoExpand("left"):this.stopAutoExpand());else if(this.draggingDirection==="left"){const S=n?-o:-this.SCROLL_STEP;this.startAutoScroll(S,n,()=>{c+=S,this.slider.x(this.slider.x()+S)})}else this.stopAutoScroll();this.emitUpdate("left")}else if(E&&e==="right"){if(C>=this.context.store.getTimeAxis().getTotalWidth())this.slider.width(this.context.store.getTimeAxis().getTotalWidth()-this.slider.x()),this.stopAutoScroll(),r||(this.draggingDirection==="right"?this.startAutoExpand("right"):this.stopAutoExpand());else if(this.draggingDirection==="right"){const S=n?o:this.SCROLL_STEP;this.startAutoScroll(S,n,()=>{u+=S,this.slider.x(this.slider.x()+S)})}else this.stopAutoScroll();this.emitUpdate("right")}else if(e==="right"&&T<=w&&b<=w+this.EDGE_THRESHOLD+o){const S=n?-o:-this.SCROLL_STEP;this.startAutoScroll(S,n,()=>{u+=S,this.slider.width(Math.max(this.slider.width(),o)),this.slider.width()>o&&this.slider.x(this.slider.x()+S),this.emitUpdate("right")})}else if(e==="left"&&b>=C&&T>=C-this.EDGE_THRESHOLD-o){const S=n?o:this.SCROLL_STEP;this.startAutoScroll(S,n,()=>{c+=S,this.slider.width(Math.max(this.slider.width(),o)),this.slider.width()>o&&this.slider.x(this.slider.x()+S),this.emitUpdate("left")})}else this.stopAutoExpand(),this.stopAutoScroll()},this.MOVE_INTERVAL);let d;const l=this.slider.x(),m=this.slider.width(),p=x=>{var w;x.movementX>0?this.draggingDirection="right":x.movementX<0&&(this.draggingDirection="left");const T=Math.max(((w=i.getPointerPosition())==null?void 0:w.x)||0,0);let b=T-s;n&&(b=ot(b,o)),(d===void 0||d!==b)&&(e==="left"?m-b-c>=o&&T<a-this.EDGE_THRESHOLD&&(this.slider.width(m-b-c),this.slider.x(l+b+c),this.emitUpdate("left")):m+b+u>=o&&T>this.EDGE_THRESHOLD&&(this.slider.width(m+b+u),this.emitUpdate("right")),d=b)},g=()=>{this.handleDragEnd(t),document.removeEventListener("mousemove",p),document.removeEventListener("mouseup",g)};document.addEventListener("mousemove",p),document.addEventListener("mouseup",g)}startAutoExpand(t,e=0,i=0){if(this.autoExpandTimer)return;const s=this.context.store.getTimeAxis();this.autoExpandTimer=window.setInterval(()=>{s.expand(t,1),this.context.event.emit(v.CHART_OFFSET_CHANGE),t==="left"&&this.slider.x(e)},this.AUTO_EXPAND_INTERVAL)}startAutoScroll(t,e,i,s){if(this.autoScrollTimer)return;const n=this.context.getScrollbar();n&&(s&&(s==null||s()),this.autoScrollTimer=window.setInterval(()=>{const o=n.getScrollPosition();n.scrollTo({x:o.x+t,y:o.y},"drag"),i==null||i()},e?300:this.MOVE_INTERVAL))}stopAutoMove(){this.autoMoveTimer&&(clearInterval(this.autoMoveTimer),this.autoMoveTimer=null)}stopAutoScroll(){this.autoScrollTimer&&(clearInterval(this.autoScrollTimer),this.autoScrollTimer=null)}stopAutoExpand(){this.autoExpandTimer&&(clearInterval(this.autoExpandTimer),this.autoExpandTimer=null)}handleMouseEnter(){this.handleResizeHighlight(1)}handleMouseLeave(){this.isDragging||this.handleResizeHighlight(0)}handleResizeHighlight(t){this.leftHandleGroup&&new k.Tween({node:this.leftHandleGroup,opacity:t,duration:.2}).play(),this.rightHandleGroup&&new k.Tween({node:this.rightHandleGroup,opacity:t,duration:.2}).play()}handleBarHighlight(t){this.sliderBar&&new k.Tween({...t,node:this.sliderBar,duration:.2}).play()}handleBarBlink(){if(!this.sliderGroup)return;const t=this.sliderGroup.opacity(),e=500,s=e*2,n=new k.Animation(o=>{if(!this.sliderGroup||!o)return;const r=o.time;if(r>=s){this.sliderGroup.opacity(t),n.stop();return}const a=r%e/e;let c;a<.5?c=t*(1-a*2):c=t*((a-.5)*2),this.sliderGroup.opacity(Math.max(0,Math.min(t,c)))},this.sliderGroup.getLayer());n.start()}}class Ce{constructor(t,e,i,s,n,o,r){h(this,"row");h(this,"slider");h(this,"cacheKey","");this.context=t,this.task=e,this.width=o,this.height=r,this.row=new k.Group;const a=new k.Rect({x:s,y:n,width:o,height:r,id:i,listening:!1});this.row.add(a),this.slider=new Ee(this.context,0,n,this.task,this.width),this.row.add(this.slider.sliderGroup)}update(t,e){this.slider.update(t,e)}setOffset(t,e){this.slider.setOffset(t,e)}destroy(){this.row.destroy()}}class Me{constructor(t,e,i,s){h(this,"tasks",[]);h(this,"rowsGroup");h(this,"rowsCache",new Map);h(this,"rowBgGroup");h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);h(this,"offsetY",0);h(this,"highlightedRowId",null);h(this,"highlightRect",null);h(this,"selectedRowId",null);h(this,"selectedRect",null);this.context=t,this.stage=e,this.layer=i,this.bgLayer=s,this.rowsGroup=new k.Group({name:"chart-body-rows"}),this.layer.add(this.rowsGroup),this.rowBgGroup=new k.Group({name:"chart-body-row-bgs"}),this.bgLayer.add(this.rowBgGroup),this.registerEvents(),this.bindEvents()}resize(t,e){this.width=t,this.height=e}setOffset(t,e){const i=e-this.offsetY;this.offsetX=t,this.offsetY=e,this.rowsGroup.x(t),this.rowsGroup.y(e),this.updateHighlightPosition(i),this.updateSelectedPosition(i)}render(t){this.tasks=t;const e=this.context.getOptions().row.height,i=Q();this.rowBgGroup.destroyChildren(),this.tasks.forEach((s,n)=>{const o=`chart-row-${s.id}`;let r=this.rowsCache.get(o);const c=s.flatIndex*e+this.context.getOptions().header.height;r?(r.update(0,c),r.setOffset(this.offsetX,this.offsetY)):(r=new Ce(this.context,s,o,0,c,this.width,e),r.setOffset(this.offsetX,this.offsetY),this.rowsGroup.add(r.row),this.rowsCache.set(o,r)),r.cacheKey=i,this.context.store.getDataManager().isTaskSelected(s.id)&&this.selectRow(s.id);const u=new k.Rect({x:0,y:c+this.offsetY,width:this.width,height:e,fill:this.context.store.getOptionManager().getRowBackgroundColor(s),id:`chart-row-bg-${s.id}`,listening:!1});this.rowBgGroup.add(u),this.rowBgGroup.moveToBottom()}),this.rowsCache.forEach((s,n)=>{s.cacheKey!==i&&(s.destroy(),this.rowsCache.delete(n))}),this.layer.batchDraw()}updateTask(t){const e=this.rowsCache.get(`chart-row-${t.id}`);e&&e.update(0,t.flatIndex*this.context.getOptions().row.height+this.context.getOptions().header.height)}bindEvents(){this.stage.on("mousemove",this.handleMouseMove.bind(this)),this.stage.on("mouseleave",this.handleMouseLeave.bind(this)),this.stage.on("click",this.handleClick.bind(this)),this.stage.on("dblclick",this.handleDblClick.bind(this)),this.stage.on("contextmenu",this.handleContextMenu.bind(this))}registerEvents(){this.context.event.on(v.ROW_HIGHLIGHT,t=>{this.highlightRow(t)}),this.context.event.on(v.ROW_UNHIGHLIGHT,t=>{this.unhighlightRow(t)}),this.context.event.on(v.TASK_SELECTED,t=>{this.selectRow(t.id)}),this.context.event.on(v.TASK_UNSELECTED,t=>{this.unselectRow(t)})}handleMouseMove(t){const e=this.stage.getPointerPosition();if(!e)return;const i=this.getTaskByPosition(e);this.highlightedRowId&&i&&i.id!==this.highlightedRowId&&this.context.event.emit(v.ROW_UNHIGHLIGHT,this.highlightedRowId),i&&this.context.event.emit(v.ROW_HIGHLIGHT,i.id)}handleMouseLeave(t){this.unhighlightRow()}handleClick(t){if(t.evt.button!==0)return;const e=this.stage.getPointerPosition();if(!e)return;const i=this.getTaskByPosition(e);if(i){this.context.store.getDataManager().isTaskSelected(i.id)||this.context.store.getDataManager().selectTask(i.id);const s=this.getTimeByPosition(e);this.context.event.emit(v.ROW_CLICK,t.evt,i,s)}}handleDblClick(t){if(t.evt.button!==0)return;const e=this.stage.getPointerPosition();if(!e)return;const i=this.getTaskByPosition(e);if(i){const s=this.getTimeByPosition(e);this.context.event.emit(v.ROW_DBL_CLICK,t.evt,i,s)}}handleContextMenu(t){if(t.evt.button!==2)return;t.evt.preventDefault(),t.cancelBubble=!0;const e=this.stage.getPointerPosition();if(!e)return;const i=this.getTaskByPosition(e);if(i){const s=this.getTimeByPosition(e);this.context.event.emit(v.ROW_CONTEXTMENU,t.evt,i,s)}}getTaskByPosition(t){const e=this.context.getOptions().header.height;if(t.y<=e)return null;const i=t.y-this.offsetY,s=Math.floor((i-e)/this.context.getOptions().row.height);return this.context.store.getDataManager().getVisibleTasks()[s]||null}getTimeByPosition(t){return this.context.store.getTimeAxis().getTimeByLeft(t.x-this.offsetX)}highlightRow(t){if(this.highlightedRowId===t||(this.highlightedRowId=t,!this.rowsCache.get(`chart-row-${t}`))||(this.highlightRect&&this.highlightRect.destroy(),this.selectedRowId===t))return;const i=this.context.store.getDataManager().getTaskById(t);if(i){const n=i.flatIndex*this.context.getOptions().row.height+this.context.getOptions().header.height;this.highlightRect=new k.Rect({x:0,y:n+this.offsetY,width:this.width,height:this.context.getOptions().row.height,fill:B(this.context.getOptions().row.hover.backgroundColor).alpha(this.context.getOptions().row.hover.opacity).toHex(),name:"highlight-rect"}),this.layer.add(this.highlightRect),this.highlightRect.moveToBottom(),this.layer.batchDraw()}}unhighlightRow(t){this.highlightedRowId===t&&(this.highlightedRowId=null,this.highlightRect&&(this.highlightRect.destroy(),this.highlightRect=null,this.layer.batchDraw()))}updateHighlightPosition(t){if(!this.highlightRect||this.highlightedRowId===null)return;const e=this.rowsCache.get(`chart-row-${this.highlightedRowId}`);if(!e){this.clearHighlight();return}if(t)this.highlightRect.y(this.highlightRect.y()+t);else{const i=this.context.store.getDataManager().getTaskById(e.task.id);if(!i){this.clearHighlight();return}const n=i.flatIndex*this.context.getOptions().row.height+this.context.getOptions().header.height;this.highlightRect.y(n+this.offsetY)}this.layer.batchDraw()}clearHighlight(){this.highlightRect&&(this.highlightRect.destroy(),this.highlightRect=null),this.highlightedRowId=null}selectRow(t){var o;if(this.selectedRowId=t,!this.rowsCache.get(`chart-row-${t}`))return;this.selectedRect&&this.selectedRect.destroy(),this.selectedRowId===this.highlightedRowId&&((o=this.highlightRect)==null||o.fill("transparent"));const i=this.context.store.getDataManager().getTaskById(t);if(!i)return;const n=i.flatIndex*this.context.getOptions().row.height+this.context.getOptions().header.height;this.selectedRect=new k.Rect({x:0,y:n+this.offsetY,width:this.width,height:this.context.getOptions().row.height,fill:B(this.context.getOptions().row.select.backgroundColor).alpha(this.context.getOptions().row.select.opacity).toHex(),name:"selected-rect"}),this.layer.add(this.selectedRect),this.selectedRect.moveToBottom(),this.layer.batchDraw()}unselectRow(t){this.selectedRowId===t&&(this.selectedRowId=null,this.selectedRect&&(this.selectedRect.destroy(),this.selectedRect=null,this.layer.batchDraw()))}updateSelectedPosition(t){if(!this.selectedRect||this.selectedRowId===null)return;const e=this.rowsCache.get(`chart-row-${this.selectedRowId}`);if(e)if(this.context.store.getDataManager().isTaskVisible(e.task)){const s=e.task.flatIndex*this.context.getOptions().row.height+this.context.getOptions().header.height;this.selectedRect.y(s+this.offsetY),this.layer.batchDraw()}else this.selectedRect.destroy(),this.selectedRect=null,this.selectedRowId=null}destroy(){this.rowsCache.clear(),this.rowsGroup.destroy(),this.rowBgGroup.destroy()}}class It{constructor(){}static async createPattern(t){if(!(t!=null&&t.pattern))return null;const e=t.patternOptions||{};switch(e.color=e.color||t.backgroundColor,t.pattern){case"stripe":return this.createStripePattern(e);case"dot":return this.createDotPattern(e);case"grid":return this.createGridPattern(e);case"custom":if(e.image){const i=new Image;return i.src=e.image,new Promise(s=>{i.onload=()=>s(i)})}return null;default:return null}}static createStripePattern(t){const{color:e=(t==null?void 0:t.color)||"#c9c9c9",width:i=(t==null?void 0:t.width)||1,angle:s=(t==null?void 0:t.angle)??30,spacing:n=(t==null?void 0:t.spacing)||10}=t||{},o=s%180,r=o*Math.PI/180;let a,c;o===0?(a=n,c=i+n):o===90?(a=i+n,c=n):(a=Math.abs(Math.ceil((i+n)/Math.sin(r))),c=Math.abs(Math.ceil((i+n)/Math.cos(r))));const u=new k.Stage({container:document.createElement("div"),width:a,height:c}),d=new k.Layer;u.add(d);const l=new k.Group;if(o===0||o===90){const p=new k.Line({points:[0,0,o===0?a:0,o===0?0:c],stroke:e,strokeWidth:i,perfectDrawEnabled:!0});l.add(p)}else for(let p=-a;p<a*2;p+=a){const g=p+i/2,y=0,x=p+i/2+(Math.cos(r)<0?-a:a),T=c,b=new k.Line({points:[Math.ceil(g),Math.ceil(y),Math.ceil(x),Math.ceil(T)],stroke:e,strokeWidth:i,perfectDrawEnabled:!0,lineCap:"square",lineJoin:"miter"});l.add(b)}d.add(l),d.draw();const m=new Image;return m.src=u.toDataURL(),u.destroy(),m}static createDotPattern(t){const{color:e=(t==null?void 0:t.color)||"#f9f9f9",width:i=(t==null?void 0:t.width)||2,spacing:s=(t==null?void 0:t.spacing)||4}=t||{},n=i*2+s*2,o=n,r=B(e),a=new k.Stage({container:document.createElement("div"),width:n,height:o}),c=new k.Layer;a.add(c),[{x:s/2+i/2,y:s/2+i/2},{x:n-s/2-i/2,y:s/2+i/2},{x:s/2+i/2,y:o-s/2-i/2},{x:n-s/2-i/2,y:o-s/2-i/2}].forEach(l=>{const m=new k.Circle({x:l.x,y:l.y,radius:i/2,fill:r.toString()});c.add(m)}),c.draw();const d=new Image;return d.src=a.toDataURL(),a.destroy(),d}static createGridPattern(t){const{color:e=(t==null?void 0:t.color)||"#f9f9f9",width:i=(t==null?void 0:t.width)||1,spacing:s=(t==null?void 0:t.spacing)||20}=t||{},n=i+s,o=n,r=n,a=new k.Stage({container:document.createElement("div"),width:o,height:r}),c=new k.Layer;a.add(c);const u=new k.Group;u.add(new k.Line({points:[0,0,o,r],stroke:e,strokeWidth:i,perfectDrawEnabled:!0})),u.add(new k.Line({points:[0,r,o,0],stroke:e,strokeWidth:i,perfectDrawEnabled:!0})),c.add(u),c.draw();const d=new Image;return d.src=a.toDataURL(),a.destroy(),d}}class Le{constructor(t,e){h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);h(this,"offsetY",0);h(this,"weekendGroup");h(this,"patternImage",null);this.context=t,this.layer=e,this.weekendGroup=new k.Group,this.layer.add(this.weekendGroup)}isWeekend(t){return t.day()===6||t.day()===0}resize(t,e){this.width=t,this.height=e,this.calculateWeekend()}setOffset(t,e){this.offsetX=t,this.offsetY=e,this.weekendGroup.x(t),this.weekendGroup.y(e),this.calculateWeekend()}render(){this.layer.batchDraw()}destroy(){this.weekendGroup.destroy(),this.patternImage=null}clearWeekend(){this.weekendGroup.destroyChildren(),this.patternImage=null}async calculateWeekend(){if(this.clearWeekend(),!this.context.getOptions().weekend.show)return;const t=this.context.store.getTimeAxis().getStartTime(),e=this.context.store.getTimeAxis().getEndTime(),i=this.context.store.getTimeAxis().getCellUnit(),s=this.context.store.getTimeAxis().getCellWidth(),n=this.context.getOptions().header.height,o=this.context.getOptions().row.height,a=this.context.store.getDataManager().getVisibleSize()*o,c=Math.max(0,-this.offsetX),u=c+this.width;for(let d=t;d<=e;){let l=s;if(l=s*2*(i==="day"?1:24),this.isWeekend(d)){const m=this.context.store.getTimeAxis().getTimeLeft(d),p=n,g=a;if(m+l<c){d=d.add(2,"day");continue}if(m>u)break;!this.patternImage&&this.context.getOptions().weekend.pattern&&(this.patternImage=await It.createPattern(this.context.getOptions().weekend));const x=new k.Rect({name:"weekend-rect",x:m,y:p,width:l,height:g,...this.patternImage?{fillPatternImage:this.patternImage,fillPatternRepeat:"repeat",fillPatternOffset:{x:0,y:0},fillPatternScale:{x:1,y:1}}:{fill:this.context.getOptions().weekend.backgroundColor||"#c9c9c9"},opacity:this.context.getOptions().weekend.opacity});this.weekendGroup.add(x),d=d.add(2,"day")}else d=d.add(1,"day")}this.layer.batchDraw()}}class Oe{constructor(t,e,i){h(this,"arrowAnimation");h(this,"todayLine");h(this,"todayTextGroup");h(this,"triangle");h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);h(this,"offsetY",0);this.context=t,this.bgLayer=e,this.headerLayer=i}resize(t,e){this.width=t,this.height=e,this.render()}setOffset(t,e){t!==this.offsetX&&(this.offsetX=t,this.render())}render(){var d,l,m,p,g,y,x;const t=Object.assign({show:!0,type:"line",backgroundColor:B("lightblue").toHex(),opacity:1,width:1},this.context.getOptions().today||{});if(!t.show)return;let e=A();const i=this.context.store.getTimeAxis().getCellUnit();t.type==="block"&&(e=e.startOf(i));const s=this.context.store.getTimeAxis().getTimeLeft(e),n=this.context.store.getTimeAxis().getCellWidth(),o=this.context.getOptions().header.height,r=B(t.backgroundColor).alpha(t.opacity).toHex(),a=(t.type==="block"?s+n/2:s)+this.offsetX,c=[a,o,a,this.height],u=t.type==="line"?t.width:n;if(this.todayLine?(this.todayLine.points(c),this.todayLine.stroke(r),this.todayLine.strokeWidth(u)):(this.todayLine=new k.Line({points:c,stroke:r,strokeWidth:u}),this.bgLayer.add(this.todayLine)),(d=this.context.getOptions().today.text)!=null&&d.show){const T=((l=this.context.getOptions().today.text)==null?void 0:l.fontSize)||10,b=((m=this.context.getOptions().today.text)==null?void 0:m.fontFamily)||"Arial",w=((p=this.context.getOptions().today.text)==null?void 0:p.content)||"今天",C=new k.Text({fontSize:T,fontFamily:b}).measureSize(w),M=((g=this.context.getOptions().today.text)==null?void 0:g.color)||"white",E=((y=this.context.getOptions().today.text)==null?void 0:y.backgroundColor)||r;if(!this.todayTextGroup)this.todayTextGroup=new k.Group({x:s+this.offsetX+u,y:o,opacity:(x=this.context.getOptions().today.text)==null?void 0:x.opacity}),this.todayTextGroup.add(new k.Rect({x:0,y:0,width:C.width+12,height:C.height+8,fill:E,cornerRadius:0,name:"today-text-bg"})),this.todayTextGroup.add(new k.Text({x:0,y:0,text:w,fontSize:T,fontFamily:b,padding:5,fill:M,align:"center",verticalAlign:"middle",name:"today-text"})),this.bgLayer.add(this.todayTextGroup);else{this.todayTextGroup.x(s+this.offsetX+u);const S=this.todayTextGroup.findOne(".today-text");S==null||S.setAttrs({text:w,fill:M,fontSize:T,fontFamily:b,padding:5});const L=this.todayTextGroup.findOne(".today-text-bg");L==null||L.setAttrs({width:C.width+12,height:C.height+8,fill:E})}}else this.todayTextGroup&&(this.todayTextGroup.destroy(),this.todayTextGroup=void 0);t.type==="line"&&(this.triangle?(this.triangle.x(a),this.triangle.fill(r)):(this.triangle=new k.RegularPolygon({x:a,y:o-8,sides:3,radius:8,fill:r,rotation:180,name:"today-triangle"}),this.arrowAnimation=new k.Animation(T=>{var w;const b=Math.sin(T.time*4*Math.PI/2e3)+o-8;(w=this.triangle)==null||w.y(b)},this.headerLayer),this.headerLayer.add(this.triangle),this.triangle.moveToTop(),this.arrowAnimation.start())),this.bgLayer.batchDraw()}destroy(){var t,e,i,s;(t=this.todayLine)==null||t.destroy(),(e=this.triangle)==null||e.destroy(),(i=this.todayTextGroup)==null||i.destroy(),(s=this.arrowAnimation)==null||s.stop(),this.arrowAnimation=void 0}}class De{constructor(t,e){h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);h(this,"offsetY",0);h(this,"holidayGroup");h(this,"patternImage",new WeakMap);this.context=t,this.layer=e,this.holidayGroup=new k.Group,this.layer.add(this.holidayGroup)}resize(t,e){this.width=t,this.height=e,this.calculateHoliday()}setOffset(t,e){this.offsetX=t,this.offsetY=e,this.holidayGroup.x(t),this.calculateHoliday()}render(){this.layer.batchDraw()}destroy(){this.holidayGroup.destroy()}clearHoliday(){this.holidayGroup.destroyChildren()}async calculateHoliday(){var d,l,m,p,g,y,x,T;if(this.clearHoliday(),!this.context.getOptions().holiday.show)return;const t=this.context.getOptions().holiday.holidays;if(!t||t.length===0)return;const e=Math.max(0,-this.offsetX),i=e+this.width,s=this.context.store.getTimeAxis().getStartTime(),n=this.context.store.getTimeAxis().getEndTime();this.context.store.getTimeAxis().getCellUnit();const o=this.context.store.getTimeAxis().getCellWidth(),r=this.context.getOptions().header.height,a=this.context.getOptions().row.height,u=this.context.store.getDataManager().getVisibleSize()*a;for(let b=s;b<=n;b=b.add(1,"day")){const w=t.find(C=>{if(D.isArray(C.date)){if(C.date.some(M=>A(M).isSame(b,"day")))return C}else if(A(C.date).isSame(b,"day"))return C});if(w){const C=this.context.store.getTimeAxis().getTimeLeft(b),M=r,E=u;if(C+o<e)continue;if(C>i)break;!this.patternImage.has(w)&&(w.pattern||this.context.getOptions().holiday.pattern)&&this.patternImage.set(w,await It.createPattern({backgroundColor:this.context.getOptions().primaryColor,...w,...this.context.getOptions().holiday}));const L=new k.Rect({name:"holiday-rect",x:C,y:M,width:o,height:E,...this.patternImage.get(w)?{fillPatternImage:this.patternImage.get(w)??void 0,fillPatternRepeat:"repeat",fillPatternOffset:{x:0,y:0},fillPatternScale:{x:1,y:1},opacity:w.opacity||this.context.getOptions().holiday.opacity}:{fill:w.backgroundColor||this.context.getOptions().holiday.backgroundColor||this.context.getOptions().primaryColor,opacity:w.opacity||this.context.getOptions().holiday.opacity}});if(this.holidayGroup.add(L),(d=w.text)!=null&&d.show){if(D.isArray(w.date)&&!A(w.date[0]).isSame(b,"day"))continue;const H=((l=w.text)==null?void 0:l.fontSize)||10,I=((m=w.text)==null?void 0:m.fontFamily)||"Arial",_=((p=w.text)==null?void 0:p.content)||"",G=new k.Text({fontSize:H,fontFamily:I}).measureSize(_),$=((g=w.text)==null?void 0:g.color)||"white",R=((y=w.text)==null?void 0:y.backgroundColor)||w.backgroundColor||((x=this.context.getOptions().holiday)==null?void 0:x.backgroundColor)||this.context.getOptions().primaryColor,W=new k.Group({name:"holiday-text-group",x:C,y:M,opacity:(T=w.text)==null?void 0:T.opacity}),z=new k.Text({text:_,fill:$,fontSize:H,fontFamily:I,padding:5}),Y=new k.Rect({x:0,y:0,width:G.width+12,height:G.height+8,fill:R});W.add(Y),W.add(z),this.holidayGroup.add(W)}}}this.layer.batchDraw()}}class _e{constructor(t,e){h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);h(this,"offsetY",0);h(this,"flagGroup");this.context=t,this.layer=e,this.flagGroup=new k.Group,this.layer.add(this.flagGroup)}resize(t,e){this.width=t,this.height=e,this.calculateFlag()}setOffset(t,e){this.offsetX=t,this.offsetY=e,this.flagGroup.x(t),this.calculateFlag()}render(){this.layer.batchDraw()}destroy(){this.flagGroup.destroy()}clearFlag(){this.flagGroup.destroyChildren()}async calculateFlag(){var d,l,m,p,g,y,x;if(this.clearFlag(),!((d=this.context.getOptions().flag)!=null&&d.show))return;const t=(l=this.context.getOptions().flag)==null?void 0:l.data;if(!t||t.length===0)return;const e=((m=this.context.getOptions().flag)==null?void 0:m.backgroundColor)||this.context.getOptions().primaryColor,i=((p=this.context.getOptions().flag)==null?void 0:p.opacity)||1,s=((g=this.context.getOptions().flag)==null?void 0:g.color)||(B(e).isDark()?"white":"black"),n=((y=this.context.getOptions().flag)==null?void 0:y.fontFamily)||"Arial",o=((x=this.context.getOptions().flag)==null?void 0:x.fontSize)||10,r=Math.max(0,-this.offsetX),a=r+this.width,c=this.context.store.getTimeAxis().getCellWidth(),u=this.context.getOptions().header.height;this.context.getOptions().row.height,this.context.store.getDataManager().getVisibleSize(),t.forEach(T=>{const b=A(T.date),w=this.context.store.getTimeAxis().getTimeLeft(b),C=u;if(w+c<r||w>a)return;const E=[w,u,w,this.height],S=new k.Line({points:E,stroke:T.backgroundColor||e,opacity:T.opacity||i,strokeWidth:1});this.flagGroup.add(S);const L=T.content||"";if(L){const H=new k.Text({text:L,x:w+5,y:C+5,fontSize:o,fontFamily:n,fill:T.color||s,verticalAlign:"middle",align:"left"}),I=new k.Rect({x:w,y:C,width:H.measureSize(L).width+12,height:H.measureSize(L).height+8,fill:T.backgroundColor||e});this.flagGroup.add(I),this.flagGroup.add(H)}else if(T.flag)switch(T.flag){case"banner":this.flagGroup.add(new k.Rect({x:w,y:C,width:20,height:10,fill:T.backgroundColor||e,opacity:T.opacity||i}));break;case"pennant":this.flagGroup.add(new k.Line({points:[w,C,w+20,C+5,w,C+10],fill:T.backgroundColor||e,opacity:T.opacity||i,closed:!0}));break;case"tag":this.flagGroup.add(new k.Line({points:[w,C,w+20,C,w+15,C+5,w+20,C+10,w,C+10],fill:T.backgroundColor||e,opacity:T.opacity||i,closed:!0}));break;case"wedge":this.flagGroup.add(new k.Line({points:[w,C,w+20,C,w+25,C+5,w+20,C+10,w,C+10],fill:T.backgroundColor||e,opacity:T.opacity||i,closed:!0}));break;case"ribbon":this.flagGroup.add(new k.Line({points:[w,C,w+15,C+2,w+20,C,w+20,C+10,w+15,C+12,w,C+10],fill:T.backgroundColor||e,opacity:T.opacity||i,closed:!0,tension:.1}));break}}),this.layer.batchDraw()}}class Ae{constructor(t,e,i){h(this,"tasks",[]);h(this,"pointGroup");h(this,"linksGroup");h(this,"templateArrow");h(this,"linkCache",new Map);h(this,"isDragging",!1);h(this,"isSliderMoving",!1);h(this,"selectedMap",new Map);h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);h(this,"offsetY",0);this.context=t,this.stage=e,this.layer=i,this.linksGroup=new k.Group({name:"links-group"}),this.pointGroup=new k.Group({name:"point-group"}),this.templateArrow=new k.Arrow({points:[],stroke:this.context.getOptions().links.color||this.context.getOptions().primaryColor,strokeWidth:this.context.getOptions().links.width,pointerLength:this.context.getOptions().links.arrow.height,pointerWidth:this.context.getOptions().links.arrow.width,fill:this.context.getOptions().links.arrow.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,lineJoin:"round",dash:this.context.getOptions().links.dash,opacity:.4}),this.templateArrow.visible(!1),this.layer.add(this.linksGroup),this.layer.add(this.pointGroup),this.layer.add(this.templateArrow),this.registerEvents()}registerEvents(){this.context.event.on(v.ROW_HIGHLIGHT,t=>{this.highlightPoint(t)}),this.context.event.on(v.ROW_UNHIGHLIGHT,t=>{this.unhighlightPoint(t)}),this.context.event.on(v.SLIDER_DRAGGING,t=>{this.isSliderMoving=t})}resize(t,e){this.width=t,this.height=e}setOffset(t,e){this.offsetX=t,this.offsetY=e,this.linksGroup.x(t),this.linksGroup.y(e),this.pointGroup.x(t),this.pointGroup.y(e),this.templateArrow.x(t),this.templateArrow.y(e)}updateTask(t){this.calculateLinks([t]),this.calculatePoints(t)}render(t){this.tasks=t,this.calculateLinks(),this.calculatePoints()}destroy(){this.linksGroup.destroy(),this.pointGroup.destroy(),this.templateArrow.destroy(),this.selectedMap.clear(),this.linkCache.clear()}calculatePoints(t){var u,d;if(!this.context.getOptions().links.show||!this.context.getOptions().links.create.enabled){this.pointGroup.destroyChildren();return}t?((u=this.pointGroup.findOne(`#point-${t.id}-left`))==null||u.destroy(),(d=this.pointGroup.findOne(`#point-${t.id}-right`))==null||d.destroy()):this.pointGroup.destroyChildren();const e=this.context.getOptions().header.height,i=this.context.getOptions().row.height,s=i/2+e,n=this.context.getOptions().links.create.radius,o=this.context.getOptions().links.create.mode==="always"?.5:0,r=this.context.getOptions().links.create.color||this.context.getOptions().primaryColor,a=B(r).alpha(this.context.getOptions().links.create.opacity??1).toHex(),c=this.context.getOptions().links.create.width;this.tasks.forEach(l=>{if(!(t&&l.id!==t.id)&&this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.show,l)&&l.startTime&&l.endTime){const m=this.context.store.getTimeAxis().getTimeLeft(l.startTime),p=this.context.store.getTimeAxis().getTimeLeft(l.endTime);let g=this.context.getOptions().links.gap;l.isMilestone()&&(g+=i/2);const y=s+i*l.flatIndex;let x=!0,T=!0,b=this.context.store.getOptionManager().unpackFunc(this.context.getOptions().links.create.from,l);if(D.isBoolean(b)?x=T=b:D.isString(b)&&(x=b==="S",T=b==="F"),x){const w=new k.Circle({id:`point-${l.id}-left`,x:m-g,y,radius:n,opacity:o,stroke:a,strokeWidth:c});this.pointGroup.add(w),w.on("mousedown",C=>{this.isDragging=!0,this.createLink(C,"S",r,[m-g,y],l.id)}),w.on("mouseover",C=>{this.isSliderMoving||(this.stage.container().style.cursor="pointer")}),w.on("mouseout",C=>{this.isDragging||this.isSliderMoving||(this.stage.container().style.cursor="default")})}if(T){const w=new k.Circle({id:`point-${l.id}-right`,x:p+g,y,radius:n,opacity:o,stroke:a,strokeWidth:c});this.pointGroup.add(w),w.on("mousedown",C=>{this.isDragging=!0,this.createLink(C,"F",r,[p+g,y],l.id)}),w.on("mouseover",C=>{this.isSliderMoving||(this.stage.container().style.cursor="pointer")}),w.on("mouseout",C=>{this.isDragging||this.isSliderMoving||(this.stage.container().style.cursor="default")})}}})}calculateLinks(t){if(!this.context.getOptions().links.show){this.destroy();return}if(this.tasks.length===0){this.destroy();return}const e=t!=null&&t.length?t.reduce((s,n)=>(s.push(...this.context.store.getLinkManager().getLinksByTaskId(n.id)),s),[]):this.context.store.getLinkManager().getLinks();t!=null&&t.length&&e.forEach(s=>{const n=this.createId(s),o=this.linkCache.get(n);o==null||o.destroy(),this.linkCache.delete(n)});const i=Q();e.forEach(s=>{var u,d,l,m,p,g,y,x;if(s.valid===!1)return;const n=this.createId(s),o=this.context.store.getDataManager().getTaskById(s.from),r=this.context.store.getDataManager().getTaskById(s.to);if(!o){O.warn(`No corresponding FROM task [${s.from}] was found for the link. Info:`,s),s.valid=!1;return}if(!r){O.warn(`No corresponding TO task [${s.to}] was found for the link. Info:`,s),s.valid=!1;return}if(!this.context.store.getDataManager().isTaskVisible(o)||!this.context.store.getDataManager().isTaskVisible(r)||o.flatIndex<this.tasks[0].flatIndex&&r.flatIndex<this.tasks[0].flatIndex||o.flatIndex>this.tasks[this.tasks.length-1].flatIndex&&r.flatIndex>this.tasks[this.tasks.length-1].flatIndex)return;const a=Math.max(0,-this.offsetX),c=a+this.width;if(!(this.context.store.getTimeAxis().getTimeLeft(((u=s.type)==null?void 0:u[0])==="S"?o.startTime:o.endTime)<a&&this.context.store.getTimeAxis().getTimeLeft(((d=s.type)==null?void 0:d[1])==="F"?r.endTime:r.startTime)<a)&&!(this.context.store.getTimeAxis().getTimeLeft(((l=s.type)==null?void 0:l[0])==="S"?o.startTime:o.endTime)>c&&this.context.store.getTimeAxis().getTimeLeft(((m=s.type)==null?void 0:m[1])==="F"?r.endTime:r.startTime)>c)&&this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.show,o)&&this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.show,r)){const T=this.getPoints(o,r,s);if(T.length<=2)O.warn("The link position has some error.",s);else{const b=s.radius??this.context.getOptions().links.radius,w=((p=s.arrow)==null?void 0:p.width)??this.context.getOptions().links.arrow.width,C=((g=s.arrow)==null?void 0:g.height)??this.context.getOptions().links.arrow.height,M=s.width??this.context.getOptions().links.width;let E=this.linkCache.get(n);E===void 0&&(E=new k.Group({id:n})),t!=null&&t.length||(E._=i);const S=E.findOne("Circle");if(S)S.radius(b),S.fill(s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor),S.x(T[0]),S.y(T[1]);else{const R=new k.Circle({radius:b,fill:s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,x:T[0],y:T[1]});E.add(R)}const L=Math.floor(T.length/2),H=L%2===0?L:L-1,I=T.slice(0,H+2),_=T.slice(H),G=E.findOne("Line");if(G)G.points(I),G.stroke(s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor),G.strokeWidth(M+(this.selectedMap.has(n)?2:0)),G.dash(s.dash||this.context.getOptions().links.dash);else{const R=new k.Line({points:I,stroke:s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,strokeWidth:M,lineCap:"round",lineJoin:"round",dash:s.dash||this.context.getOptions().links.dash,hitStrokeWidth:10,draggable:!0,dragBoundFunc:W=>({x:0,y:0})});E.add(R),R.on("dragstart",W=>{this.handleDrag(W,s,"S",[T[T.length-2],T[T.length-1]],n)})}const $=E.findOne("Arrow");if($)$.points(_),$.stroke(s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor),$.strokeWidth(M+(this.selectedMap.has(n)?2:0)),$.pointerLength(C),$.pointerWidth(w),$.fill(((y=s.arrow)==null?void 0:y.color)||this.context.getOptions().links.arrow.color||s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor),$.lineJoin("round"),$.dash(s.dash||this.context.getOptions().links.dash);else{const R=new k.Arrow({points:_,stroke:s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,strokeWidth:M,pointerLength:C,pointerWidth:w,fill:((x=s.arrow)==null?void 0:x.color)||this.context.getOptions().links.arrow.color||s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,lineJoin:"round",dash:s.dash||this.context.getOptions().links.dash,hitStrokeWidth:10,draggable:!0,dragBoundFunc:W=>({x:0,y:0})});E.add(R),R.on("dragstart",W=>{this.handleDrag(W,s,"F",[T[0],T[1]],n)})}this.linkCache.has(n)||(this.linksGroup.add(E),E.on("mouseover",R=>{R.target.moveToTop(),this.context.getOptions().links.move.enabled===!0&&(this.stage.container().style.cursor="pointer"),this.selectedMap.has(n)||this.handleHighlight(E,b,w,C,M,2)}),E.on("mouseout",R=>{this.selectedMap.has(n)||this.handleHighlight(E,b,w,C,M,0),!this.isDragging&&(this.stage.container().style.cursor="default")}),E.on("mousedown",R=>{this.isDragging=!0}),E.on("click",R=>{R.cancelBubble=!0,this.isDragging=!1,E.moveToTop(),R.evt.button===0&&(this.selectedMap.has(n)?(this.selectedMap.delete(n),this.context.event.emit(v.SELECT_LINK,null,s,this.selectedMap.values().toArray())):(this.selectedMap.set(n,s),this.context.event.emit(v.SELECT_LINK,s,null,this.selectedMap.values().toArray())))}),E.on("contextmenu",R=>{R.evt.preventDefault(),R.cancelBubble=!0,this.context.event.emit(v.CONTEXT_LINK,R.evt,s)}),this.linkCache.set(n,E)),this.selectedMap.has(n)&&this.handleHighlight(E,b,w,C,M,2,!0)}}}),t!=null&&t.length||this.linkCache.forEach((s,n)=>{s._!==i&&(s.destroy(),this.linkCache.delete(n))}),this.layer.batchDraw()}createId(t){return`link-group-${t[this.context.getOptions().links.key]}-${t.from}-${t.to}-${t.type||"FS"}`}getPoints(t,e,i){if(t.startTime&&t.endTime&&e.startTime&&e.endTime){const s=this.context.getOptions().row.height,n=t.isMilestone()?s/2:0,o=this.context.store.getTimeAxis().getTimeLeft(t.startTime)-n,r=this.context.store.getTimeAxis().getTimeLeft(t.endTime)+n,a=e.isMilestone()?s/2:0,c=this.context.store.getTimeAxis().getTimeLeft(e.startTime)-a,u=this.context.store.getTimeAxis().getTimeLeft(e.endTime)+a;let d=[];switch(i.type||"FS"){case"FF":d=this.createFF(i,t,e,o,r,c,u);break;case"SS":d=this.createSS(i,t,e,o,r,c,u);break;case"SF":d=this.createSF(i,t,e,o,r,c,u);break;case"FS":default:d=this.createFS(i,t,e,o,r,c,u)}return d}return[]}createFS(t,e,i,s,n,o,r){const a=this.context.getOptions().header.height,c=this.context.getOptions().row.height,u=c/2+a,d=t.gap||this.context.getOptions().links.gap,l=[n+d,.05+u+c*e.flatIndex];{const m=t.distance?parseInt(t.distance):this.context.getOptions().links.distance;if(isNaN(m))O.error("Link's distance must be a Numeric");else{const p=n+d+m,g=o-d-m,y=[Math.max(p,g),u+c*e.flatIndex];l.push(...y);const x=c*e.flatIndex+a+(e.flatIndex<=i.flatIndex?c:0);l.push(y[0],x),l.push(g,x),l.push(g,u+c*i.flatIndex)}}return l.push(o-d,u+c*i.flatIndex),l}createFF(t,e,i,s,n,o,r){const a=this.context.getOptions().header.height,c=this.context.getOptions().row.height,u=c/2+a,d=t.gap||this.context.getOptions().links.gap,l=[n+d,.05+u+c*e.flatIndex];{const m=t.distance?parseInt(t.distance):this.context.getOptions().links.distance;if(isNaN(m))O.error("Link's distance must be a Numeric");else{const p=n+d+m,g=r+d+m,y=[p<=g?g:p,u+c*e.flatIndex];l.push(...y),l.push(Math.max(g,p),u+c*i.flatIndex)}}return l.push(r+d,u+c*i.flatIndex),l}createSS(t,e,i,s,n,o,r){const a=this.context.getOptions().header.height,c=this.context.getOptions().row.height,u=c/2+a,d=t.gap||this.context.getOptions().links.gap,l=[s-d,.05+u+c*e.flatIndex];{const m=t.distance?parseInt(t.distance):this.context.getOptions().links.distance;if(isNaN(m))O.error("Link's distance must be a Numeric");else{const p=s-d-m,g=o-d-m;l.push(Math.min(g,p),u+c*e.flatIndex),l.push(Math.min(g,p),u+c*i.flatIndex)}}return l.push(o-d,u+c*i.flatIndex),l}createSF(t,e,i,s,n,o,r){const a=this.context.getOptions().header.height,c=this.context.getOptions().row.height,u=c/2+a,d=t.gap||this.context.getOptions().links.gap,l=[s-d,.05+u+c*e.flatIndex];{const m=t.distance?parseInt(t.distance):this.context.getOptions().links.distance;if(isNaN(m))O.error("Link's distance must be a Numeric");else{const p=s-d-m,g=r+d+m,y=[Math.min(p,g),u+c*e.flatIndex];l.push(...y);const x=c*e.flatIndex+a+(e.flatIndex<=i.flatIndex?c:0);l.push(y[0],x),l.push(g,x),l.push(g,u+c*i.flatIndex)}}return l.push(r+d,u+c*i.flatIndex),l}handleDrag(t,e,i,s,n){var y,x,T;if(!this.isDragging||this.context.getOptions().links.move.enabled!==!0)return;this.stage.container().style.cursor="pointer";const o=this.linksGroup.findOne(`#${n}`);this.templateArrow.setAttrs({stroke:e.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,strokeWidth:e.width??this.context.getOptions().links.width,pointerLength:((y=e.arrow)==null?void 0:y.height)??this.context.getOptions().links.arrow.height,pointerWidth:((x=e.arrow)==null?void 0:x.width)??this.context.getOptions().links.arrow.width,fill:((T=e.arrow)==null?void 0:T.color)||this.context.getOptions().links.arrow.color||e.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,lineJoin:"round",dash:e.data||this.context.getOptions().links.dash}),this.templateArrow.visible(!1);let r=null;const a=this.context.getOptions().header.height,c=this.context.getOptions().row.height,u=c/2+a,d=e.gap||this.context.getOptions().links.gap;let l=null;const m=()=>{const b=this.stage.getPointerPosition();if(b&&(l=this.getTaskByPosition(b),!!l&&(this.templateArrow.visible(!0),o==null||o.visible(!1),l!=null&&l.startTime&&(l!=null&&l.endTime)))){const w=this.context.store.getTimeAxis().getTimeLeft(l.startTime),C=this.context.store.getTimeAxis().getTimeLeft(l.endTime),M=(C+w)/2+this.offsetX;let E=w-d;b.x<=M?r="S":(r="F",E=C+d);let S;if(i==="S"?S=`${r}${(e.type||"FS")[1]}`:S=`${(e.type||"FS")[0]}${r}`,i==="S"){const{allowLeft:L,allowRight:H}=this.isAllowStartDrop(l,e.to,S);this.templateArrow.points([E,u+c*l.flatIndex,...s]),H?this.stage.container().style.cursor="pointer":this.stage.container().style.cursor="not-allowed"}else if(i==="F"){const{allowLeft:L,allowRight:H}=this.isAllowEndDrop(l,e.from,S);this.templateArrow.points([...s,E,u+c*l.flatIndex]),L?this.stage.container().style.cursor="pointer":this.stage.container().style.cursor="not-allowed"}}},p=()=>{var C,M;let b;const w=D.cloneDeep(e);if(r&&l&&(i==="S"?(b=`${r}${(e.type||"FS")[1]}`,w.from=l.id):i==="F"&&(b=`${(e.type||"FS")[0]}${r}`,w.to=l.id)),b&&l){w.type=b;let E=!1,S=!1,L;i==="S"?{allowLeft:E,allowRight:S,reason:L}=this.isAllowStartDrop(l,w.to,w.type,!0):i==="F"&&({allowLeft:E,allowRight:S,reason:L}=this.isAllowEndDrop(l,w.from,w.type,!0)),((C=w.type)==null?void 0:C.slice(1))==="S"&&E||((M=w.type)==null?void 0:M.slice(1))==="F"&&S?(this.context.event.emit(v.UPDATE_LINK,w),this.context.store.getLinkManager().update(),this.calculateLinks()):this.context.event.emit(v.ERROR,L||X.LINK_NOT_ALLOWED)}else this.context.event.emit(v.ERROR,X.TASK_NOT_FOUND);this.cleanupTempLink(),this.calculateLinks([l,this.context.store.getDataManager().getTaskById(e.from),this.context.store.getDataManager().getTaskById(e.to)].filter(E=>!!E)),document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",p)},g=b=>{b.key==="Escape"&&(this.cleanupTempLink(),o==null||o.visible(!0),document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",p),document.removeEventListener("keydown",g))};document.addEventListener("mousemove",m),document.addEventListener("mouseup",p),document.addEventListener("keydown",g)}createLink(t,e,i,s,n){this.stage.container().style.cursor="pointer",this.templateArrow.setAttrs({points:[],stroke:i,strokeWidth:this.context.getOptions().links.width,pointerLength:this.context.getOptions().links.arrow.height,pointerWidth:this.context.getOptions().links.arrow.width,fill:i,dash:this.context.getOptions().links.dash}),this.templateArrow.visible(!1);const o=this.context.store.getLinkManager();let r=null;const a=this.context.getOptions().header.height,c=this.context.getOptions().row.height,u=c/2+a,d=this.context.getOptions().links.gap;let l=null;const m=()=>{const y=this.stage.getPointerPosition();if(y&&(l=this.getTaskByPosition(y),!!l&&(this.templateArrow.visible(!0),l.startTime&&l.endTime))){const x=this.context.store.getTimeAxis().getTimeLeft(l.startTime),T=this.context.store.getTimeAxis().getTimeLeft(l.endTime),b=(T+x)/2+this.offsetX;let w=x-d;y.x<=b?r="S":(r="F",w=T+d),this.templateArrow.points([...s,w,u+c*l.flatIndex]);const{allowLeft:C,allowRight:M}=this.isAllowEndDrop(l,n,o.convertPointsToLinkType(e,r));r==="S"&&!C?this.stage.container().style.cursor="not-allowed":r==="F"&&!M?this.stage.container().style.cursor="not-allowed":this.stage.container().style.cursor="pointer"}},p=()=>{let y;if(r&&(y=o.convertPointsToLinkType(e,r)),y&&l)if(o.isLinkExist(n,l.id,y))this.context.event.emit(v.ERROR,X.LINK_EXIST);else if(n===l.id&&e===r)this.context.event.emit(v.ERROR,X.LINK_SAME);else{const{allowLeft:x,allowRight:T,reason:b}=this.isAllowEndDrop(l,n,y,!0);r==="S"&&x||r==="F"&&T?(this.context.event.emit(v.CREATE_LINK,{from:n,to:l.id,type:y,color:i}),this.context.store.getLinkManager().update()):this.context.event.emit(v.ERROR,b||X.LINK_NOT_ALLOWED)}this.cleanupTempLink(),this.calculateLinks([l].filter(x=>!!x)),document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",p)},g=y=>{y.key==="Escape"&&(this.cleanupTempLink(),document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",p),document.removeEventListener("keydown",g))};document.addEventListener("mousemove",m),document.addEventListener("mouseup",p),document.addEventListener("keydown",g)}cleanupTempLink(){this.templateArrow.visible(!1),this.stage.container().style.cursor="default",this.isDragging=!1}getTaskByPosition(t){const e=this.context.getOptions().header.height;if(t.y<=e)return null;const i=t.y-this.offsetY,s=Math.floor((i-e)/this.context.getOptions().row.height);return this.context.store.getDataManager().getVisibleTasks()[s]||null}isAllowStartDrop(t,e,i,s=!1){let n=!0,o=!0,r=this.context.getOptions().links.create.from;D.isFunction(r)&&(r=r(t.getEmitData(),this.context.store.getDataManager().getTaskById(e).getEmitData())),D.isBoolean(r)?n=o=r:D.isString(r)&&(n=r==="S",o=r==="F");const a=this.validateChain(t.id,e,i,s);return{allowLeft:n&&a.ok,allowRight:o&&a.ok,reason:a.reason}}isAllowEndDrop(t,e,i,s=!1){let n=!0,o=!0,r=this.context.getOptions().links.create.to;D.isFunction(r)&&(r=r(t.getEmitData(),this.context.store.getDataManager().getTaskById(e).getEmitData())),D.isBoolean(r)?n=o=r:D.isString(r)&&(n=r==="S",o=r==="F");const a=this.validateChain(e,t.id,i,s);return{allowLeft:n&&a.ok,allowRight:o&&a.ok,reason:a.reason}}validateChain(t,e,i,s=!1){const o=this.context.store.getLinkManager().validateChain(t,e,i);return o.ok?{ok:!0}:(s&&o.reason===X.LINK_CYCLE&&o.cycleInfo&&this.highlightCycleNodes(o.cycleInfo.nodes),{ok:!1,reason:o.reason})}handleHighlight(t,e,i,s,n,o,r=!1){const a=t.findOne("Circle"),c=t.findOne("Arrow"),u=t.findOne("Line");a&&new k.Tween({node:a,radius:e+o,duration:r?0:.1}).play(),c&&new k.Tween({node:c,pointerWidth:i+o,pointerLength:s+o,strokeWidth:n+o,duration:r?0:.1}).play(),u&&new k.Tween({node:u,strokeWidth:n+o,duration:r?0:.1}).play()}highlightPoint(t){this.handlePointHighlight(t,1)}unhighlightPoint(t){const e=this.context.getOptions().links.create.mode==="always"?.5:0;this.handlePointHighlight(t,e)}handlePointHighlight(t,e){const i=this.pointGroup.findOne(`#point-${t}-left`),s=this.pointGroup.findOne(`#point-${t}-right`);i&&new k.Tween({node:i,opacity:e,duration:.1}).play(),s&&new k.Tween({node:s,opacity:e,duration:.1}).play()}highlightCycleNodes(t){t.forEach(e=>{this.context.event.emit(v.SLIDER_BLINK,e)})}}class Ie{constructor(t,e,i){h(this,"tasks",[]);h(this,"chartBaselineGroup");h(this,"indicatorGroup");h(this,"baselineGroup");h(this,"width",0);h(this,"height",0);h(this,"offsetX",0);h(this,"offsetY",0);this.context=t,this.stage=e,this.layer=i,this.chartBaselineGroup=new k.Group({name:"chart-baseline-group"}),this.baselineGroup=new k.Group({name:"baseline-group"}),this.chartBaselineGroup.add(this.baselineGroup),this.indicatorGroup=new k.Group({name:"baseline-indicator-group"}),this.chartBaselineGroup.add(this.indicatorGroup),this.layer.add(this.chartBaselineGroup),this.registerEvents()}registerEvents(){}resize(t,e){this.width=t,this.height=e,this.calculateBaselines()}setOffset(t,e){this.offsetX=t,this.offsetY=e,this.chartBaselineGroup.x(t),this.chartBaselineGroup.y(e),this.calculateBaselines()}update(){this.calculateBaselines()}render(t){this.tasks=t,this.update()}destroy(){this.baselineGroup.destroy(),this.indicatorGroup.destroy(),this.chartBaselineGroup.destroy()}calculateBaselines(){if(this.baselineGroup.destroyChildren(),this.indicatorGroup.destroyChildren(),!this.context.getOptions().baselines.show)return;const t=this.context.getOptions().header.height,e=this.context.getOptions().row.height,i=e/2+t,s=et(this.context.getOptions().baselines.radius),n=this.context.getOptions().baselines.opacity,o=this.context.getOptions().baselines.backgroundColor;this.tasks.forEach(r=>{if(this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.show,r)){const a=this.context.store.getDataManager().getBaselinesByTaskId(r.id),c=tt(this.context.getOptions().baselines.height||this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.height,r),e),u=this.context.getOptions().baselines.offset??0;a.forEach((d,l)=>{if(!d.validate())return;const m=this.context.store.getTimeAxis().getTimeLeft(d.startTime),p=this.context.store.getTimeAxis().getTimeLeft(d.endTime),g=new k.Group({id:`baseline-group-${d.id}`});this.renderBaselineBar(g,r,d,m,p,i,e,c,t,o,n,s,u),this.baselineGroup.add(g);const y=this.context.getOptions().baselines.compare,x=d.getTimeDiff();if(!y.enabled||!x)return;const T=y.mode;d.highlight&&(T==="highlight"||T==="both")&&this.renderCompareHighlight(g,r,d,x),l===0&&(T==="indicator"||T==="both")&&this.renderCompareIndicator(r,d,x),this.bindEvents(g,r,d)})}})}renderBaselineBar(t,e,i,s,n,o,r,a,c,u,d,l,m){if(this.context.getOptions().baselines.mode==="shadow"){const p=o+r*e.flatIndex-a/2+m,g=new k.Rect({id:`baseline-item-${i.id}`,x:s,y:p,width:n-s,height:a,cornerRadius:l,fill:u,opacity:d});t.add(g),this.renderText(t,e,i,s,n,p,a)}else if(this.context.getOptions().baselines.mode==="line"){const p=tt(this.context.getOptions().baselines.height??5,r);let g=c+r*e.flatIndex+m;const y=this.context.getOptions().baselines.position;let x="";y==="top"?(g+=+p/2,x="line_top"):y==="center"?(g+=r/2,x="line_center"):(g+=r-p/2,x="line_bottom");const T=new k.Line({id:`baseline-item-${i.id}`,points:[s,g,n,g],stroke:u,opacity:d,strokeWidth:p,lineCap:"butt",lineJoin:"round"});t.add(T),this.renderText(t,e,i,s,n,g,p,x)}}renderText(t,e,i,s,n,o,r,a){const c=`chart-baseline-text-${i.id}`;if((()=>{this.baselineGroup.find(`#${c}`)&&this.baselineGroup.find(`#${c}`).forEach(x=>x.remove())})(),!this.context.getOptions().baselines.label.show)return;const d=this.context.getOptions().baselines.label.field,l=d?i.getField(d):i.name;if(!l||l==="")return;const m=n-s-10,p=Math.max(this.context.getOptions().baselines.label.fontSize,r),g=new k.Text({text:l,id:c,x:s+5,y:o,width:m,height:p,fill:this.context.getOptions().baselines.label.color,fontSize:this.context.getOptions().baselines.label.fontSize,fontFamily:this.context.getOptions().baselines.label.fontFamily||"Arial",align:this.context.getOptions().baselines.label.position,verticalAlign:"bottom"});a==="line_bottom"?g.setAttrs({y:o-p/2,verticalAlign:"top"}):a==="line_center"?g.setAttrs({y:o-p/2,verticalAlign:"middle"}):a==="line_top"&&g.setAttrs({y:o-r/2,verticalAlign:"bottom"}),r>=p&&g.setAttrs({verticalAlign:"middle"});const y=g.measureSize(l);(this.context.getOptions().baselines.label.forceDisplay||m>y.width)&&t.add(g)}renderCompareHighlight(t,e,i,s){const n=s[`${this.context.getOptions().baselines.compare.target}Status`];if(!n||n==="ontime")return;const o=t.findOne(`#baseline-item-${i.id}`);if(!o)return;const r=this.context.getOptions().baselines.compare,a=this.context.getOptions().baselines.mode,c={fill:"",stroke:"",opacity:r[n].opacity};if(a==="shadow")c.fill=r[n].backgroundColor;else if(a==="line")c.stroke=r[n].backgroundColor;else return;o.setAttrs(c)}renderCompareIndicator(t,e,i){const s=this.context.getOptions().baselines,n=s.compare.indicator;if(!n||!n.show)return;const o=this.context.getOptions().header.height,r=this.context.getOptions().row.height,a=tt(this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.height,t),r);let c=s.backgroundColor;const u=this.context.store.getTimeAxis().getTimeLeft(t.startTime),d=this.context.store.getTimeAxis().getTimeLeft(t.endTime);let l=(r-a)/2+r*t.flatIndex+o;if(n.position==="bottom"&&(l+=a),n.show==="start"||n.show==="both"||n.show===!0){const m=i.startStatus;if(m&&s.compare.indicator[m].show){c=B(s.compare.indicator[m].color).alpha(s.compare.indicator[m].opacity).toHex();const p=new k.Circle({x:u-n.size,y:l,fill:c,radius:n.size/2});this.indicatorGroup.add(p);let g=`${rt(i.startDiff)}${i.unit} ${m}`;const y=s.compare.indicator[m].text;D.isFunction(y)?g=y(i.startDiff,{...t.getEmitData(),baseline:e}):D.isString(y)&&(g=y);const x=new k.Text({y:l-n.fontSize/2,text:g,fill:c,fontSize:n.fontSize,fontFamily:n.fontFamily||"Arial"}),T=x.measureSize(g);x.x(u-n.size-T.width-5),this.indicatorGroup.add(x)}}if(n.show==="end"||n.show==="both"||n.show===!0){const m=i.endStatus;if(m&&s.compare.indicator[m].show){c=B(s.compare.indicator[m].color).alpha(s.compare.indicator[m].opacity).toHex();const p=new k.Circle({x:d+n.size,y:l,fill:c,radius:n.size/2});this.indicatorGroup.add(p);let g=`${rt(i.endDiff)}${i.unit} ${m}`;const y=s.compare.indicator[m].text;D.isFunction(y)?g=y(i.endDiff,{...t.getEmitData(),baseline:e}):D.isString(y)&&(g=y);const x=new k.Text({x:d+n.size+5,y:l-n.fontSize/2,text:g,fill:c,fontSize:n.fontSize,fontFamily:n.fontFamily||"Arial"});this.indicatorGroup.add(x)}}}bindEvents(t,e,i){t.on("mouseenter",s=>{this.context.event.emit(v.BASELINE_MOUSEENTER,s.evt,e,i)}),t.on("mousemove",s=>{this.context.event.emit(v.BASELINE_MOUSEMOVE,s.evt,e,i)}),t.on("mouseout",s=>{this.context.event.emit(v.BASELINE_MOUSEOUT,s.evt,e,i)}),t.on("click",s=>{s.cancelBubble=!0,s.evt.button===0?this.context.event.emit(v.BASELINE_CLICK,s.evt,e,i):s.evt.button===2&&this.context.event.emit(v.BASELINE_CONTEXTMENU,s.evt,e,i)})}}class He{constructor(t,e){h(this,"stage");h(this,"headerLayer");h(this,"bodyGroup");h(this,"gridGroup");h(this,"weekendGroup");h(this,"holidayGroup");h(this,"flagGroup");h(this,"todayLayer");h(this,"linkGroup");h(this,"baselineGroup");h(this,"axisLayer");h(this,"bgLayer");h(this,"bodyLayer");h(this,"width",0);h(this,"height",0);this.context=t,this.container=e,this.stage=new k.Stage({container:this.container,width:this.container.clientWidth,height:this.container.clientHeight}),this.bgLayer=new k.Layer,this.weekendGroup=new Le(this.context,this.bgLayer),this.holidayGroup=new De(this.context,this.bgLayer),this.flagGroup=new _e(this.context,this.bgLayer),this.gridGroup=new ke(this.context,this.bgLayer),this.stage.add(this.bgLayer),this.axisLayer=new k.Layer,this.headerLayer=new ve(this.context,this.axisLayer),this.todayLayer=new Oe(this.context,this.bgLayer,this.axisLayer),this.stage.add(this.axisLayer),this.bodyLayer=new k.Layer,this.linkGroup=new Ae(this.context,this.stage,this.bodyLayer),this.baselineGroup=new Ie(this.context,this.stage,this.bodyLayer),this.bodyGroup=new Me(this.context,this.stage,this.bodyLayer,this.bgLayer),this.stage.add(this.bodyLayer)}resize(t,e){this.width=t,this.height=e,this.context.store.getTimeAxis().setAllWidth(t),this.stage.width(t),this.stage.height(e),this.headerLayer.resize(t),this.gridGroup.resize(t,e),this.linkGroup.resize(t,e),this.baselineGroup.resize(t,e),this.holidayGroup.resize(t,e),this.flagGroup.resize(t,e),this.weekendGroup.resize(t,e),this.bodyGroup.resize(t,e),this.todayLayer.resize(t,e)}render(t,e,i,s=!1,n=!1){this.headerLayer.setOffset(-t,0),this.gridGroup.setOffset(-t,-e),this.linkGroup.setOffset(-t,-e),this.baselineGroup.setOffset(-t,-e),this.weekendGroup.setOffset(-t,-e),this.holidayGroup.setOffset(-t,-e),this.flagGroup.setOffset(-t,-e),this.bodyGroup.setOffset(-t,-e),this.todayLayer.setOffset(-t,-e),this.gridGroup.render(),this.holidayGroup.render(),this.flagGroup.render(),this.weekendGroup.render(),this.linkGroup.render(i),this.baselineGroup.render(i),this.bodyGroup.render(i),this.headerLayer.render(),this.todayLayer.render()}refresh(t,e,i,s=!1){this.render(t,e,i,!0,s)}updateTask(t){this.bodyGroup.updateTask(t),this.linkGroup.updateTask(t),this.baselineGroup.update()}destroy(){this.headerLayer.destroy(),this.gridGroup.destroy(),this.bodyLayer.destroy(),this.todayLayer.destroy(),this.holidayGroup.destroy(),this.flagGroup.destroy(),this.weekendGroup.destroy(),this.linkGroup.destroy(),this.baselineGroup.destroy(),this.axisLayer.destroy(),this.bgLayer.destroy(),this.stage.destroy()}}const Re='<svg style="transition: all 0.3s" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"/><path fill="currentColor" d="M8.293 12.707a1 1 0 0 1 0-1.414l5.657-5.657a1 1 0 1 1 1.414 1.414L10.414 12l4.95 4.95a1 1 0 0 1-1.414 1.414z"/></g></svg>';class Ge{constructor(t,e){h(this,"line");h(this,"initialX",0);h(this,"initialWidth",0);h(this,"collapseButton",null);this.root=t,this.container=e,this.line=document.createElement("div"),this.line.className="x-gantt-middle-resize-line",this.line.style.position="absolute",this.line.style.zIndex="99",this.line.style.width="5px",this.line.style.height="100%",this.line.style.borderLeft="2px solid",this.line.style.setProperty("border-left-color",this.root.store.getOptionManager().getOptions().border.color,"important"),this.line.style.cursor="col-resize",this.collapseButton=document.createElement("div"),this.collapseButton.className="x-gantt-collapse-button",this.collapseButton.style.position="absolute",this.collapseButton.style.top="50%",this.collapseButton.style.left="0",this.collapseButton.style.transform="translateY(-50%)",this.collapseButton.style.cursor="pointer",this.collapseButton.style.width="16px",this.collapseButton.style.height="30px",this.collapseButton.style.backgroundColor="#fff",this.collapseButton.style.borderRadius="0 6px 6px 0",this.collapseButton.style.boxShadow="0 0 2px rgba(0, 0, 0, 0.2)",this.collapseButton.style.display="flex",this.collapseButton.style.alignItems="center",this.collapseButton.style.justifyContent="center",this.collapseButton.innerHTML=Re,this.collapseButton.addEventListener("click",i=>{i.stopPropagation(),this.root.store.getColumnManager().collapse()}),this.line.appendChild(this.collapseButton),this.container.appendChild(this.line),this.addDragEvents()}setOffset(t){this.line.style.transform=`translateX(${t-2}px)`,this.initialX=t,this.collapseButton&&(this.root.store.getColumnManager().isCollapsed()?this.collapseButton.querySelector("svg").style.transform="rotate(180deg)":this.collapseButton.querySelector("svg").style.transform="rotate(0deg)")}addDragEvents(){let t=0,e=null;const i=this.root.store.getColumnManager(),s=i.getLeafColumns(),n=a=>{a.preventDefault(),a.stopPropagation(),t=a.clientX,e=this.container.getBoundingClientRect();const c=s[s.length-1].key;this.initialWidth=i.getColumnWidth(c);const u=this.initialX;this.root.event.emit(v.SHOW_GUIDELINE,u);const d=m=>o(m),l=m=>r(m,d,l);document.addEventListener("mousemove",d),document.addEventListener("mouseup",l)},o=a=>{if(a.preventDefault(),!e)return;const c=a.clientX-t;s[s.length-1].key;const u=50-this.initialWidth,l=e.width-20-this.initialX,m=Math.max(u,Math.min(l,c)),p=this.initialX+m;this.root.event.emit(v.MOVE_GUIDELINE,p)},r=(a,c,u)=>{document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",u),this.root.event.emit(v.HIDE_GUIDELINE);const d=a.clientX-t,l=s[s.length-1].key,m=Math.max(50,this.initialWidth+d);i.setColumnWidth(l,m),this.root.event.emit(v.UPDATE_TABLE_HEADER)};this.line.addEventListener("mousedown",n)}}class We{constructor(t,e){h(this,"element");h(this,"container");h(this,"visible",!1);if(this.context=t,!e)throw new Error("Container is required for GuideLine instance");this.container=e,this.element=document.createElement("div"),this.initElement(),this.initEvents()}initElement(){this.element.className="x-gantt-guide-line",this.element.style.position="absolute",this.element.style.top="0",this.element.style.left="0",this.element.style.width="0",this.element.style.height="100%",this.element.style.setProperty("border-left",`1px dashed ${this.context.getOptions().border.color}`,"important"),this.element.style.zIndex="9999",this.element.style.pointerEvents="none",this.element.style.display="none",this.element.style.transform="translateX(-0.5px)",getComputedStyle(this.container).position==="static"&&(this.container.style.position="relative"),this.container.appendChild(this.element)}initEvents(){this.context.event.on(v.SHOW_GUIDELINE,t=>{this.show(t)}),this.context.event.on(v.HIDE_GUIDELINE,()=>{this.hide()}),this.context.event.on(v.MOVE_GUIDELINE,t=>{this.setLeft(t)})}setContainer(t){this.element.parentElement&&this.element.parentElement.removeChild(this.element),this.container=t,getComputedStyle(this.container).position==="static"&&(this.container.style.position="relative"),this.container.appendChild(this.element)}setLeft(t){const e=this.container.clientWidth,i=Math.max(0,Math.min(e-20,t));this.element.style.transform=`translateX(${i-.5}px)`}show(t){t!==void 0&&this.setLeft(t),this.element.style.display="block",this.visible=!0}hide(){this.element.style.display="none",this.visible=!1}isVisible(){return this.visible}getLeft(){return this.element.offsetLeft}}class $e{constructor(t=16){h(this,"taskQueue",new Map);h(this,"taskHandlers",new Map);h(this,"isScheduled",!1);h(this,"delay");h(this,"debouncedFlush");this.delay=t,this.debouncedFlush=D.debounce(()=>{this.flushTaskQueue()},t)}registerHandler(t,e){this.taskHandlers.set(t,e),O.debug(`RenderScheduler: 注册任务处理器 ${t}`)}registerSimpleHandler(t,e,i=!1){this.registerHandler(t,{callback:e,immediate:i})}scheduleTask(t,e=[],i={}){const s=this.taskHandlers.get(t);if(!s){O.warn(`RenderScheduler: 未找到任务类型 ${t} 的处理器`);return}const n={type:t,refresh:i.refresh,callback:s.callback,args:e,immediate:i.immediate??s.immediate??!1};if(n.immediate){O.debug(`RenderScheduler: 立即执行任务 ${t}`),this.executeTask(n);return}this.taskQueue.set(t,n),O.debug(`RenderScheduler: 添加任务到队列 ${t}`),this.debouncedFlush()}immediateExecuteTask(t,e=[],i=!1){const s=this.taskHandlers.get(t);if(!s){O.warn(`RenderScheduler: 未找到任务类型 ${t} 的处理器`);return}O.debug(`RenderScheduler: 立即执行任务 ${t}`);const n={type:t,refresh:i,callback:s.callback,args:e,immediate:!0};this.executeTask(n)}immediateFlushAll(){O.debug("RenderScheduler: 立即执行所有队列任务"),this.cancelScheduled(),this.flushTaskQueue()}executeTask(t){try{t.callback(...t.args||[])}catch(e){O.error(`RenderScheduler: 执行任务 ${t.type} 时出错:`,e)}}flushTaskQueue(){if(this.taskQueue.size===0)return;O.debug(`RenderScheduler: 执行任务队列,任务数量: ${this.taskQueue.size}`);const t=Array.from(this.taskQueue.values()).sort((e,i)=>e.immediate!==i.immediate?e.immediate?-1:1:e.refresh!==i.refresh?e.refresh?-1:1:0);this.taskQueue.clear(),this.isScheduled=!1;for(const e of t)this.executeTask(e)}cancelScheduled(){this.debouncedFlush.cancel(),this.taskQueue.clear(),this.isScheduled=!1}unregisterHandler(t){this.taskHandlers.delete(t),this.taskQueue.delete(t),O.debug(`RenderScheduler: 移除任务处理器 ${t}`)}getQueueSize(){return this.taskQueue.size}getRegisteredHandlers(){return Array.from(this.taskHandlers.keys())}destroy(){this.cancelScheduled(),this.taskHandlers.clear(),O.debug("RenderScheduler: 已销毁")}}class Fe{constructor(t,e){h(this,"scrollbar");h(this,"rootElement");h(this,"tableContainer");h(this,"chartContainer");h(this,"table");h(this,"chart");h(this,"middleLine");h(this,"renderScheduler");h(this,"_id",Q());h(this,"width",0);h(this,"height",0);h(this,"isInitialized",!0);h(this,"resizeObserver");h(this,"updateSize",()=>{this.width=this.context.store.getOptionManager().getOptions().width||this.container.clientWidth,this.height=this.context.store.getOptionManager().getOptions().height||this.container.clientHeight,this.rootElement.style.width=this.width?`${this.width}px`:"100%",this.rootElement.style.height=this.height?`${this.height}px`:"100%";const t=this.context.store.getColumnManager().getTotalWidth();this.tableContainer.style.width=`${t}px`,this.tableContainer.style.height=this.height?`${this.height}px`:"100%";const e=this.width-t;this.chartContainer.style.width=`${e}px`,this.chartContainer.style.height=this.height?`${this.height}px`:"100%",this.chart.resize(e,this.height),this.middleLine.setOffset(t);const i=this.context.store.getTimeAxis().getTotalWidth();this.scrollbar.updateSize(e,this.height,i,this.context.store.getDataManager().getVisibleSize()*this.context.store.getOptionManager().getOptions().row.height+this.context.store.getOptionManager().getOptions().header.height,t)});h(this,"setStyleValue",()=>{const t=this.context.store.getOptionManager().getOptions();this.rootElement.style.setProperty("--x-gantt-primary-color",`${t.primaryColor}`),this.rootElement.style.setProperty("--x-gantt-border-color",`${t.border.color}`),this.rootElement.style.setProperty("--x-gantt-row-hover-color",`${B(t.row.hover.backgroundColor).alpha(t.row.hover.opacity)}`),this.rootElement.style.setProperty("--x-gantt-row-selected-color",`${B(t.row.select.backgroundColor).alpha(t.row.select.opacity)}`),this.rootElement.style.setProperty("--x-gantt-header-font-weight",`${t.header.fontWeight}`)});h(this,"handleUpdateTask",t=>{this.table.updateTask(t),this.chart.updateTask(t)});h(this,"handleColumnWidthChange",()=>{this.table.updateWidth(),this.updateSize()});var i;this.context=t,this.container=e,this.rootElement=document.createElement("div"),this.rootElement.id=`x-gantt-${this._id}`,this.rootElement.className="x-gantt",this.rootElement.style.overflow="hidden",this.rootElement.style.display="flex",this.rootElement.style.position="relative",this.container.appendChild(this.rootElement),this.tableContainer=document.createElement("div"),this.tableContainer.className="x-gantt-table",this.rootElement.appendChild(this.tableContainer),new We(this.context,this.container),this.middleLine=new Ge(this.context,this.rootElement),this.chartContainer=document.createElement("div"),this.chartContainer.className="x-gantt-chart",this.rootElement.appendChild(this.chartContainer),this.table=new Se(this.context,this.tableContainer),this.chart=new He(this.context,this.chartContainer),this.scrollbar=new ye(this.context,this.rootElement,this.context.store.getOptionManager().getOptions().scrollbar||{}),this.renderScheduler=new $e(16),this.setupTaskHandlers(),this.updateSize(),this.setupEventListeners(),(i=this.context.store.getOptionManager().getOptions().resize)!=null&&i.enabled&&(typeof window.ResizeObserver>"u"?O.warn("Current environment does not support ResizeObserver, please include a polyfill to enable auto-resize feature."):(this.resizeObserver=new ResizeObserver(()=>{this.updateSize(),this.renderScheduler.scheduleTask("VIEW_UPDATE",[!1])}),this.resizeObserver.observe(this.container)))}getScrollbar(){return this.scrollbar}getRootElement(){return this.rootElement}setupTaskHandlers(){this.renderScheduler.registerSimpleHandler("DATA_UPDATE",(t=!0)=>this.performRender(t)),this.renderScheduler.registerSimpleHandler("VIEW_UPDATE",(t=!0)=>this.performRender(t)),this.renderScheduler.registerSimpleHandler("MANUAL_RENDER",(t=!1)=>this.performRender(t)),this.renderScheduler.registerSimpleHandler("SCROLL",()=>this.performRender(!0,!0),!0),this.renderScheduler.registerSimpleHandler("UPDATE_TASK",t=>this.handleUpdateTask(t)),this.renderScheduler.registerSimpleHandler("COLUMN_WIDTH_CHANGE",()=>this.handleColumnWidthChange()),this.renderScheduler.registerSimpleHandler("CHART_OFFSET_CHANGE",(t=!1)=>this.performRender(t))}setupEventListeners(){this.context.event.on(v.DATA_UPDATE,()=>{this.renderScheduler.scheduleTask("DATA_UPDATE",[!0])}),this.context.event.on(v.SCROLL,()=>{this.renderScheduler.scheduleTask("SCROLL",[!0],{immediate:!0})}),this.context.event.on(v.COLUMN_WIDTH_CHANGE,()=>{this.renderScheduler.scheduleTask("COLUMN_WIDTH_CHANGE")}),this.context.event.on(v.VIEW_UPDATE,()=>{this.renderScheduler.scheduleTask("VIEW_UPDATE",[!0])}),this.context.event.on(v.UPDATE_TASK,t=>{this.renderScheduler.scheduleTask("UPDATE_TASK",[t],{immediate:!0})}),this.context.event.on(v.CHART_OFFSET_CHANGE,()=>{this.renderScheduler.scheduleTask("CHART_OFFSET_CHANGE",[!1])}),this.context.event.on(v.TOGGLE_COLLAPSE,()=>{this.renderScheduler.scheduleTask("CHART_OFFSET_CHANGE",[!1],{immediate:!0})})}performRender(t=!1,e=!1){this.setStyleValue();const{x:i,y:s}=this.scrollbar.getScrollPosition(),n=this.context.store.getOptionManager().getOptions().row.height,o=this.context.store.getOptionManager().getOptions().header.height,r=Math.floor(s/n),a=Math.ceil((this.height-o)/n),c=2,u=Math.max(0,r),d=a+c,l=this.context.store.getDataManager().getVisibleTasks().slice(u,u+d);this.updateSize(),e?(this.table.refresh(s,l),this.chart.refresh(i,s,l,!0)):t?(this.table.refresh(s,l),this.chart.refresh(i,s,l)):(this.table.render(s,l),this.chart.render(i,s,l)),this.isInitialized&&(this.context.event.emit(v.LOADED),this.isInitialized=!1),O.debug("execute render")}render(t=!1){this.renderScheduler.scheduleTask("MANUAL_RENDER",[t])}immediateRender(t=!1){this.renderScheduler.immediateExecuteTask("MANUAL_RENDER",[t],t)}destroy(){O.debug("Renderer destroy"),this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=void 0),this.renderScheduler.destroy(),this.scrollbar.destroy(),this.context.event.offAll()}}class Be{constructor(t,e,i){h(this,"_id",Q());h(this,"store");h(this,"event",new Gt);h(this,"renderer");this.container=t,this.events=e,this.container.innerHTML="",this.store=new xe(this,i),this.renderer=new Fe(this,this.container),this.render(),this.registerEvents(),O.debug("----Gantt initialized for element:",this._id,this.container)}getScrollbar(){var t;return(t=this.renderer)==null?void 0:t.getScrollbar()}getRootElement(){var t;return(t=this.renderer)==null?void 0:t.getRootElement()}getOptions(){return this.store.getOptionManager().getOptions()}setOptions(t,e){this.store.setOption(t,e)}render(){this.renderer.render()}updateOptions(t,e){this.setOptions(t,e),O.debug("GanttChart options updated"),this.render()}destroy(){O.debug("Gantt destroying..."),this.event.offAll(),this.renderer.destroy(),this.container.innerHTML=""}jumpTo(t){const e=A(t);if(!this.store.getTimeAxis().isInTimeAxis(e))return!1;const i=this.store.getTimeAxis().getTimeLeft(e)-100;return this.renderer.getScrollbar().scrollTo({x:Math.max(i,0)}),!0}scrollTo(t,e){var o;let i=0,s;const n=Math.max(100,((o=this.getOptions().scrollbar)==null?void 0:o.animationDuration)||100);if(t){if(s=this.store.getDataManager().getTaskById(t),!s)return!1;i=s.flatIndex*this.store.getOptionManager().getOptions().row.height-100,setTimeout(()=>{this.jumpTo(s==null?void 0:s.startTime)},n)}return this.renderer.getScrollbar().scrollTo({y:i}),e&&s&&setTimeout(()=>{this.event.emit(v.SLIDER_BLINK,s.id)},n*2),!0}getDataChain(t){return this.store.getLinkManager().getDataChain(t)}_emit(t,...e){var i;this.events.has(t)&&((i=this.events.get(t))==null||i.forEach(s=>s(...e)))}registerEvents(){this.event.on(v.ERROR,(t,e)=>{this._emit("error",t,e)}),this.event.on(v.LOADED,()=>{this._emit("loaded")}),this.event.on(v.TASK_DRAG_END,(t,e)=>{this._emit("move",e.map(i=>{var s;return{row:(s=this.store.getDataManager().getTaskById(i.id))==null?void 0:s.data,old:i.data}}))}),this.event.on(v.ROW_DRAG_END,(t,e)=>{this._emit("drag:row",t.data,e.data)}),this.event.on(v.CHECK_TASK,(t,e)=>{this._emit("select",t.map(i=>i.data),e,this.store.getDataManager().getCheckedList().map(i=>i.data))}),this.event.on(v.UPDATE_LINK,t=>{this._emit("update:link",t)}),this.event.on(v.CREATE_LINK,t=>{this._emit("create:link",t)}),this.event.on(v.SELECT_LINK,(t,e,i)=>{this._emit("select:link",t,e,i)}),this.event.on(v.CONTEXT_LINK,(t,e)=>{this._emit("contextmenu:link",t,e)}),this.event.on(v.ROW_CLICK,(t,e,i)=>{this._emit("click:row",t,e.data,i)}),this.event.on(v.ROW_DBL_CLICK,(t,e,i)=>{this._emit("dblclick:row",t,e.data,i)}),this.event.on(v.ROW_CONTEXTMENU,(t,e,i)=>{this._emit("contextmenu:row",t,e.data,i)}),this.event.on(v.SLIDER_CLICK,(t,e)=>{this._emit("click:slider",t,e.data)}),this.event.on(v.SLIDER_DBL_CLICK,(t,e)=>{this._emit("dblclick:slider",t,e.data)}),this.event.on(v.SLIDER_CONTEXTMENU,(t,e)=>{this._emit("contextmenu:slider",t,e.data)}),this.event.on(v.SLIDER_ENTER,(t,e)=>{this._emit("enter:slider",t,e.data)}),this.event.on(v.SLIDER_HOVER,(t,e)=>{this._emit("hover:slider",t,e.data)}),this.event.on(v.SLIDER_LEAVE,(t,e)=>{this._emit("leave:slider",t,e.data)}),this.event.on(v.BASELINE_CLICK,(t,e,i)=>{this._emit("click:baseline",t,e.data,i.data)}),this.event.on(v.BASELINE_CONTEXTMENU,(t,e,i)=>{this._emit("contextmenu:baseline",t,e.data,i.data)}),this.event.on(v.BASELINE_MOUSEENTER,(t,e,i)=>{this._emit("enter:baseline",t,e.data,i.data)}),this.event.on(v.BASELINE_MOUSEMOVE,(t,e,i)=>{this._emit("hover:baseline",t,e.data,i.data)}),this.event.on(v.BASELINE_MOUSEOUT,(t,e,i)=>{this._emit("leave:baseline",t,e.data,i.data)})}}class ze{constructor(t,e){h(this,"context");h(this,"events",new Map);e!=null&&e.logLevel&&O.setOptions({showTimestamp:e.logLevel==="debug",level:{debug:1,info:2,warn:3,error:4,none:5}[e.logLevel]||3});const i=typeof t=="string"?document.querySelector(t):t;if(!i)throw O.exception(`Container ${t} not found or invalid.`);i.innerHTML="",i.classList.add("x-gantt-container"),this.context=new Be(i,this.events,e)}update(t,e={merge:!0}){this.context.updateOptions(t,e)}render(){this.context.render(),O.info("Gantt rendered successfully.")}destroy(){O.info("Gantt destroying..."),this.events.clear(),this.context.destroy(),O.info("Gantt destroyed successfully.")}jumpTo(t){return this.context.jumpTo(t)}scrollTo(t,e){return this.context.scrollTo(t,e)}getDataChain(t){return this.context.getDataChain(t)}on(t,e){var i;this.events.has(t)||this.events.set(t,[]),(i=this.events.get(t))==null||i.push(e)}off(t,e){if(this.events.has(t))if(e){const i=this.events.get(t);i&&this.events.set(t,i.filter(s=>s!==e))}else this.events.delete(t)}getDataById(t){var e;return(e=this.context.store.getDataManager().getTaskById(t))==null?void 0:e.data}getDataSize(){return this.context.store.getDataManager().getDataSize()}removeDataById(t){return this.context.store.getDataManager().deleteTaskById(t)}}Ht();const Pe=ft;P.dayjs=A,P.XGantt=ze,P.colorjs=B,P.generateId=Q,P.version=Pe,Object.defineProperty(P,Symbol.toStringTag,{value:"Module"})});
|