@xpyjs/gantt-core 0.0.1-alpha.4 → 0.0.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/x-gantt.js +1640 -1373
- package/dist/x-gantt.umd.cjs +3 -3
- package/package.json +1 -1
- package/types/models/Task.d.ts +1 -0
- package/types/rendering/chart/ChartFlag.d.ts +36 -0
- package/types/rendering/chart/ChartLink.d.ts +1 -0
- package/types/rendering/chart/ChartToday.d.ts +1 -0
- package/types/rendering/chart/index.d.ts +1 -0
- package/types/store/TimeAxis.d.ts +0 -2
- package/types/types/options.d.ts +141 -0
package/dist/x-gantt.umd.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(F,C){typeof exports=="object"&&typeof module<"u"?C(exports,require("dayjs"),require("lodash-es"),require("konva")):typeof define=="function"&&define.amd?define(["exports","dayjs","lodash-es","konva"],C):(F=typeof globalThis<"u"?globalThis:F||self,C(F.XGantt={},F.dayjs,F._,F.Konva))})(this,function(F,C,O,T){"use strict";var Be=Object.defineProperty;var ze=(F,C,O)=>C in F?Be(F,C,{enumerable:!0,configurable:!0,writable:!0,value:O}):F[C]=O;var a=(F,C,O)=>ze(F,typeof C!="symbol"?C+"":C,O);const ct="0.0.1-alpha.4";function _t(){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: ${ct} `,`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 B=class B{static setOptions(t){B.options={...B.options,...t}}static getLevel(){return B.options.level}static debug(...t){B.logWithLevel(1,console.debug,...t)}static info(...t){B.logWithLevel(2,console.info,...t)}static warn(...t){B.logWithLevel(3,console.warn,...t)}static error(...t){B.logWithLevel(4,console.error,...t)}static assert(t,...e){if(!t&&B.options.level<=4){const i=B.formatArgs("Assertion failed:",...e);console.error(...i)}}static getMessage(...t){return B.formatArgs(...t).join("")}static exception(...t){return new Error(B.getMessage(...t))}static logWithLevel(t,e,...i){if(B.options.level<=t){const s=B.formatArgs(...i);e(...s)}}static formatArgs(...t){const e=[B.Prefix];return B.options.showTimestamp&&e.unshift(`[${C().format("YYYY-MM-DD HH:mm:ss.SSS")}]`),[e.join(""),...t]}};a(B,"Prefix","[XGantt]"),a(B,"options",{level:2,showTimestamp:!1});let L=B;const st=()=>({data:[],links:{show:!1,key:"id",data:[],distance:20,dash:[6,3],width:1,gap:5,arrow:{width:6,height:8},radius:3,create:{enabled:!1,mode:"hover",radius:3,width:2,from:!0,to:!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"}},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 Ht{constructor(){a(this,"options",st())}getOptions(){return this.options}setOptions(t,e={merge:!0}){var i;this.options=e.merge?O.merge(st(),this.options,t):O.merge(st(),t),O.isArray((i=t.links)==null?void 0:i.data)&&(this.options.links.data=t.links.data)}update(t){this.setOptions(t)}getRowBackgroundColor(t){var s;let e="";const i=(s=this.options.row)==null?void 0:s.backgroundColor;return O.isString(i)?e=i:O.isArray(i)&&i.length>0?e=i[t.level]:O.isFunction(i)&&(e=i(t.getEmitData())),e}unpackFunc(t,e){return O.isFunction(t)?t(e.getEmitData()):t}}class At{constructor(){a(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 y=(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_MOVING="slider-moving",f.SLIDER_HOVER="slider-hover",f.SLIDER_LEAVE="slider-leave",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_MOUSEOVER="baseline-mouseover",f.BASELINE_MOUSEOUT="baseline-mouseout",f.ERROR="error",f))(y||{}),j=(f=>(f.LINK_NOT_ALLOWED="LINK_NOT_ALLOWED",f.LINK_SAME="LINK_SAME",f.LINK_EXIST="LINK_EXIST",f))(j||{});function q(){return Math.random().toString(36).substring(2,15)}class nt{constructor(t,e,i,s,n){a(this,"__key__",q());a(this,"id");a(this,"name");a(this,"startTime");a(this,"endTime");a(this,"progress");a(this,"type");a(this,"expanded");a(this,"children");a(this,"parent");a(this,"level");a(this,"flatIndex");a(this,"duration",0);a(this,"data");a(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||O.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 O.isObject(i)?O.cloneDeep(i):i}updateMode(){this.data[this.fields.startTime]&&(this.startTime=C(this.data[this.fields.startTime])),this.data[this.fields.endTime]&&(this.endTime=C(this.data[this.fields.endTime])),this.startTime&&this.endTime&&(this.duration=this.endTime.diff(this.startTime)),this.isMilestone()&&(this.endTime=this.startTime)}updateData(t){this.data=t,t[this.fields.name]&&(this.name=t[this.fields.name]),t[this.fields.type]&&(this.type=t[this.fields.type]),this.updateMode(),t[this.fields.progress]!==void 0&&(this.progress=t[this.fields.progress]),this.event.emit(y.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(y.UPDATE_TASK,this)}clone(){return new nt(this.store,this.event,O.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),O.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}}class It{constructor(t,e,i){a(this,"id");a(this,"taskId");a(this,"startTime");a(this,"endTime");a(this,"name");a(this,"data");a(this,"highlight",!0);a(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=C(o));const r=i[s.endTime]||i[n.endTime];r&&(this.endTime=C(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",h=this.endTime.diff(this.startTime,e,!0),c=t.endTime.diff(t.startTime,e,!0),g=h>0?(c-h)/h*100:0;return{startDiff:i,endDiff:s,startStatus:o,endStatus:r,progressDiff:g,unit:e}}}class Gt{constructor(t,e){a(this,"rawData",[]);a(this,"tasks",[]);a(this,"taskMap",new Map);a(this,"visibleTasksCache",[]);a(this,"isDirty",!0);a(this,"collapsedTaskIds",new Set);a(this,"selectedTaskId",null);a(this,"checkedList",[]);a(this,"baselines",[]);a(this,"baselineMap",new Map);a(this,"baselineTaskMap",new Map);a(this,"dataLevel",0);this.store=t,this.event=e}setData(t,e=!1){this.rawData=t,this.initTasks(e),this.invalidateCache(),this.event.emit(y.DATA_UPDATE)}initTasks(t=!1){this.dataLevel=0,t?(this.tasks=[],this.taskMap.clear(),this.collapsedTaskIds.clear(),this.rawData.forEach(e=>{this.tasks.push(this.createTask(e))})):this.rawData.length>0?this.updateTask(this.rawData,this.tasks):(this.tasks=[],this.taskMap.clear(),this.collapsedTaskIds.clear())}createTask(t,e){const i=this.store.getOptionManager().getOptions().fields,s=new nt(this.store,this.event,t,e);return Array.isArray(t[i.children])&&(s.children=t[i.children].map(n=>this.createTask(n,s))),this.taskMap.set(s.id,s),this.dataLevel=Math.max(this.dataLevel,s.level),s}updateTask(t,e,i){let s=0;for(;s<t.length;){const n=t[s],o=e[s];if(n&&!o){const r=this.createTask(n,i);e.push(r),this.taskMap.set(r.id,r),this.dataLevel=Math.max(this.dataLevel,r.level)}else!n&&o?(this.taskMap.delete(o.id),e.splice(s,1)):n&&o&&(n[this.store.getOptionManager().getOptions().fields.id]===o.id?(o.updateData(n),this.dataLevel=Math.max(this.dataLevel,o.level)):(this.taskMap.delete(o.id),e[s]=this.createTask(n,o.parent),this.taskMap.set(e[s].id,e[s]),this.dataLevel=Math.max(this.dataLevel,e[s].level)));if(n[this.store.getOptionManager().getOptions().fields.children]){const r=n[this.store.getOptionManager().getOptions().fields.children];if(o&&o.children)this.updateTask(r,o.children,o);else{const h=r.map(c=>this.createTask(c,e[s]));e[s].children=h}}else o&&o.children&&(o.children=[]);s++}e.length>=s&&e.splice(s).forEach(o=>{this.taskMap.delete(o.id)})}getData(){return this.rawData}getTasks(t=!0){return t?this.tasks:Array.from(this.taskMap.values())}getTaskById(t){return this.taskMap.get(t)}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(y.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}getVisibleSize(){return this.getVisibleTasks().length}isTaskVisible(t){return this.getVisibleTasks().some(e=>e.id===t.id)}clear(){this.rawData=[],this.tasks=[],this.taskMap.clear(),this.visibleTasksCache=[],this.isDirty=!0,this.collapsedTaskIds.clear(),this.event.emit(y.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(y.TASK_SELECTED,e)),!0):!1}unselectTask(){if(this.selectedTaskId){const t=this.selectedTaskId;this.selectedTaskId=null,this.event.emit(y.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 h=this.store.getOptionManager().getOptions().bar.move.link.child,c=this.store.getOptionManager().getOptions().bar.move.link.parent,g=this.store.getTimeAxis().getCellUnit();let l=t.parent;for(;c!=="none"&&l;){if(c==="expand"){let m=l.startTime||o,p=l.endTime||r;(!l.startTime||o.isBefore(l.startTime))&&(m=o),(!l.endTime||r.isAfter(l.endTime))&&(p=r),(l.startTime===void 0||l.endTime===void 0||!m.isSame(l.startTime)||!p.isSame(l.endTime))&&(n.findIndex(u=>u.id===l.id)===-1&&n.push(l.clone()),l.updateTime(m,p))}else c==="strict"&&(l.startTime&&o.isBefore(l.startTime)&&(o=l.startTime,r.isSameOrBefore(o)&&(r=o.add(1,g))),l.endTime&&r.isAfter(l.endTime)&&(r=l.endTime,o.isAfter(r)&&(o=r.subtract(1,g))));l=l.parent}let d=t.children||[];for(;h!=="none"&&d.length>0;){const m=[];d.forEach(p=>{let u=p.startTime||o,x=p.endTime||r,b=o.diff(t.startTime),S=r.diff(t.endTime);h==="scale"?s==="both"?(n.findIndex(v=>v.id===p.id)===-1&&n.push(p.clone()),p.updateTime(u.add(b),x.add(S))):s==="left"?(u=u.add(b),u.isSameOrAfter(x.subtract(1,g))&&(x.isBefore(t.endTime)?x=u.add(1,g):u=x.subtract(1,g),u.isSameOrBefore(o)&&(o=u)),n.findIndex(v=>v.id===p.id)===-1&&n.push(p.clone()),p.updateTime(u,x)):s==="right"&&(x=x.add(S),x.isSameOrBefore(u.add(1,g))&&(u.isAfter(t.startTime)?u=x.subtract(1,g):x=u.add(1,g)),x.isSameOrAfter(r)&&(r=x),n.findIndex(v=>v.id===p.id)===-1&&n.push(p.clone()),p.updateTime(u,x)):h==="fixed"&&(s==="both"?(n.findIndex(v=>v.id===p.id)===-1&&n.push(p.clone()),p.updateTime(u.add(b),x.add(S))):s==="left"?u.isSameOrBefore(o)&&(u=o,u.isSameOrAfter(x.subtract(1,g))&&(x.isBefore(t.endTime)?x=u.add(1,g):u=x.subtract(1,g),u.isSameOrBefore(o)&&(o=u)),n.findIndex(v=>v.id===p.id)===-1&&n.push(p.clone()),p.updateTime(u,x)):s==="right"&&x.isSameOrAfter(r)&&(x=r,x.isSameOrBefore(u.add(1,g))&&(u.isAfter(t.startTime)?u=x.subtract(1,g):x=u.add(1,g)),x.isSameOrAfter(r)&&(r=x),n.findIndex(v=>v.id===p.id)===-1&&n.push(p.clone()),p.updateTime(u,x))),p.children&&p.children.length>0&&m.push(...p.children)}),d=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 It(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 G(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 K(f,t){let e=f;return O.isString(e)&&(/%$/.test(e)?e=t*parseFloat(e)/100:e=parseFloat(e)),isNaN(e)?0:e}function dt(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 tt(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 Rt(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 ot(f,t=2,e=!1){const i=f.toFixed(t);return e?i:i.replace(/\.?0+$/,"")}function ut(f,t=16,e=16){return new Promise((i,s)=>{let n=f;if(!/viewBox\s*=\s*["'][^"']*["']/.test(n)){const g=n.match(/width\s*=\s*["']([^"']*)["']/),l=n.match(/height\s*=\s*["']([^"']*)["']/),d=g?parseFloat(g[1]):t,m=l?parseFloat(l[1]):e;n=n.replace(/<svg([^>]*)>/,`<svg$1 viewBox="0 0 ${d} ${m}">`)}n=n.replace(/width\s*=\s*["'][^"']*["']/,`width="${t}"`),n=n.replace(/height\s*=\s*["'][^"']*["']/,`height="${e}"`),/width\s*=/.test(n)||(n=n.replace(/<svg/,`<svg width="${t}"`)),/height\s*=/.test(n)||(n=n.replace(/<svg/,`<svg height="${e}"`)),/preserveAspectRatio\s*=/.test(n)||(n=n.replace(/<svg([^>]*)>/,'<svg$1 preserveAspectRatio="xMidYMid meet">'));const r=new Image;r.onload=()=>{URL.revokeObjectURL(r.src),i(r)},r.onerror=g=>{URL.revokeObjectURL(r.src),s(g)};const h=new Blob([n],{type:"image/svg+xml"}),c=URL.createObjectURL(h);r.src=c})}function Wt(f){var s;if(typeof f=="object"&&f!==null)return{r:G(f.r??0,0,255),g:G(f.g??0,0,255),b:G(f.b??0,0,255),a:G(f.a??1,0,1)};if(typeof f!="string")return L.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,h,c,g=1;try{o=parseInt(n,16)}catch{return L.warn(`Invalid hex color: ${f}`),null}if(n.length===3)r=(o>>8&15)*17,h=(o>>4&15)*17,c=(o&15)*17;else if(n.length===6)r=o>>16&255,h=o>>8&255,c=o&255;else if(n.length===8)r=o>>24&255,h=o>>16&255,c=o>>8&255,g=(o&255)/255;else return L.warn(`Invalid hex color length: ${f}`),null;return{r,g:h,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("%")?G(parseFloat(o)/100*255,0,255):G(parseInt(o,10),0,255);return{r:n(i[1]),g:n(i[2]),b:n(i[3]),a:i[4]!==void 0?G(parseFloat(i[4]),0,1):1}}return L.warn(`Could not parse color: ${f}`),null}function $t(f,t,e,i,s=!1,n=!1){const o=d=>{const m=Math.round(G(d,0,255)).toString(16);return m.length===1?"0"+m:m},r=o(f),h=o(t),c=o(e),g=o(i*255);if(s&&r[0]===r[1]&&h[0]===h[1]&&c[0]===c[1]&&i===1&&!n)return`#${r[0]}${h[0]}${c[0]}`;const l=`#${r}${h}${c}`;return n||i<1?`${l}${g}`:l}class Z{constructor(t){a(this,"_r");a(this,"_g");a(this,"_b");a(this,"_a");const e=Wt(t);e===null?(L.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(G(t,0,255)),this)}green(t){return t===void 0?this._g:(this._g=Math.round(G(t,0,255)),this)}blue(t){return t===void 0?this._b:(this._b=Math.round(G(t,0,255)),this)}alpha(t){return t===void 0?this._a:(this._a=G(t,0,1),this)}toHex(t=!1,e=!1){return $t(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=G(t,0,100)/100;return this._r=Math.round(G(this._r+(255-this._r)*e,0,255)),this._g=Math.round(G(this._g+(255-this._g)*e,0,255)),this._b=Math.round(G(this._b+(255-this._b)*e,0,255)),this}darken(t=10){if(t<0)return this.brighten(-t);const e=G(t,0,100)/100;return this._r=Math.round(G(this._r*(1-e),0,255)),this._g=Math.round(G(this._g*(1-e),0,255)),this._b=Math.round(G(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=G(e,0,100)/100,s=W(t);return this._r=Math.round(G(this._r*(1-i)+s.R*i,0,255)),this._g=Math.round(G(this._g*(1-i)+s.G*i,0,255)),this._b=Math.round(G(this._b*(1-i)+s.B*i,0,255)),this._a=G(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,W):L.warn("Invalid plugin provided to Colorjs.extend. Expected a function.")}}const W=f=>f instanceof Z?f:new Z(f);class gt{constructor(t,e,i){a(this,"element");a(this,"iconElement");a(this,"_state",0);a(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,_){typeof exports=="object"&&typeof module<"u"?_(exports,require("dayjs"),require("lodash-es"),require("konva")):typeof define=="function"&&define.amd?define(["exports","dayjs","lodash-es","konva"],_):(P=typeof globalThis<"u"?globalThis:P||self,_(P.XGantt={},P.dayjs,P._,P.Konva))})(this,function(P,_,C,y){"use strict";var ze=Object.defineProperty;var Pe=(P,_,C)=>_ in P?ze(P,_,{enumerable:!0,configurable:!0,writable:!0,value:C}):P[_]=C;var a=(P,_,C)=>Pe(P,typeof _!="symbol"?_+"":_,C);const ct="0.0.1-beta.0";function _t(){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: ${ct} `,`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 Y=class Y{static setOptions(t){Y.options={...Y.options,...t}}static getLevel(){return Y.options.level}static debug(...t){Y.logWithLevel(1,console.debug,...t)}static info(...t){Y.logWithLevel(2,console.info,...t)}static warn(...t){Y.logWithLevel(3,console.warn,...t)}static error(...t){Y.logWithLevel(4,console.error,...t)}static assert(t,...e){if(!t&&Y.options.level<=4){const i=Y.formatArgs("Assertion failed:",...e);console.error(...i)}}static getMessage(...t){return Y.formatArgs(...t).join("")}static exception(...t){return new Error(Y.getMessage(...t))}static logWithLevel(t,e,...i){if(Y.options.level<=t){const s=Y.formatArgs(...i);e(...s)}}static formatArgs(...t){const e=[Y.Prefix];return Y.options.showTimestamp&&e.unshift(`[${_().format("YYYY-MM-DD HH:mm:ss.SSS")}]`),[e.join(""),...t]}};a(Y,"Prefix","[XGantt]"),a(Y,"options",{level:2,showTimestamp:!1});let H=Y;const st=()=>({data:[],links:{show:!1,key:"id",data:[],distance:20,dash:[6,3],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}},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 Ht{constructor(){a(this,"options",st())}getOptions(){return this.options}setOptions(t,e={merge:!0}){var i,s;if(this.options=e.merge?C.merge(st(),this.options,t):C.merge(st(),t),C.isArray((i=t.links)==null?void 0:i.data)&&(this.options.links.data=t.links.data),(s=t.holiday)!=null&&s.holidays&&t.holiday.holidays.length>0){const n=[];t.holiday.holidays.forEach(o=>{if(C.isArray(o.date)){const r=o.date.map(h=>_(h)).sort((h,l)=>h.diff(l));for(let h=1;h<r.length;h++)if(r[h].diff(r[h-1],"day")>1){n.push({...o,date:r.slice(0,h).map(l=>l.valueOf())}),r.splice(0,h);break}r.length>0&&n.push({...o,date:r.map(h=>h.valueOf())})}else n.push(o)}),this.options.holiday.holidays=n}}update(t){this.setOptions(t)}getRowBackgroundColor(t){var s;let e="";const i=(s=this.options.row)==null?void 0:s.backgroundColor;return C.isString(i)?e=i:C.isArray(i)&&i.length>0?e=i[t.level]:C.isFunction(i)&&(e=i(t.getEmitData())),e}unpackFunc(t,e){return C.isFunction(t)?t(e.getEmitData()):t}}class At{constructor(){a(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 S=(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_MOVING="slider-moving",f.SLIDER_HOVER="slider-hover",f.SLIDER_LEAVE="slider-leave",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_MOUSEOVER="baseline-mouseover",f.BASELINE_MOUSEOUT="baseline-mouseout",f.ERROR="error",f))(S||{}),J=(f=>(f.LINK_NOT_ALLOWED="LINK_NOT_ALLOWED",f.LINK_SAME="LINK_SAME",f.LINK_EXIST="LINK_EXIST",f))(J||{});function q(){return Math.random().toString(36).substring(2,15)}class nt{constructor(t,e,i,s,n){a(this,"__key__",q());a(this,"id");a(this,"name");a(this,"startTime");a(this,"endTime");a(this,"progress");a(this,"type");a(this,"expanded");a(this,"children");a(this,"parent");a(this,"level");a(this,"flatIndex");a(this,"duration",0);a(this,"data");a(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||C.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 C.isObject(i)?C.cloneDeep(i):i}updateMode(){this.data[this.fields.startTime]&&(this.startTime=_(this.data[this.fields.startTime])),this.data[this.fields.endTime]&&(this.endTime=_(this.data[this.fields.endTime])),this.startTime&&this.endTime&&(this.duration=this.endTime.diff(this.startTime)),this.isMilestone()&&(this.endTime=this.startTime)}updateData(t){this.data=t,t[this.fields.name]&&(this.name=t[this.fields.name]),t[this.fields.type]&&(this.type=t[this.fields.type]),this.updateMode(),t[this.fields.progress]!==void 0&&(this.progress=t[this.fields.progress]),this.event.emit(S.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(S.UPDATE_TASK,this)}clone(){return new nt(this.store,this.event,C.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),C.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 It{constructor(t,e,i){a(this,"id");a(this,"taskId");a(this,"startTime");a(this,"endTime");a(this,"name");a(this,"data");a(this,"highlight",!0);a(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=_(o));const r=i[s.endTime]||i[n.endTime];r&&(this.endTime=_(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",h=this.endTime.diff(this.startTime,e,!0),l=t.endTime.diff(t.startTime,e,!0),g=h>0?(l-h)/h*100:0;return{startDiff:i,endDiff:s,startStatus:o,endStatus:r,progressDiff:g,unit:e}}}class Gt{constructor(t,e){a(this,"rawData",[]);a(this,"tasks",[]);a(this,"taskMap",new Map);a(this,"visibleTasksCache",[]);a(this,"isDirty",!0);a(this,"collapsedTaskIds",new Set);a(this,"selectedTaskId",null);a(this,"checkedList",[]);a(this,"baselines",[]);a(this,"baselineMap",new Map);a(this,"baselineTaskMap",new Map);a(this,"dataLevel",0);this.store=t,this.event=e}setData(t,e=!1){this.rawData=t,this.initTasks(e),this.invalidateCache(),this.event.emit(S.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.rawData.length>0?this.updateTask(this.rawData,this.tasks):(this.tasks=[],this.taskMap.clear(),this.collapsedTaskIds.clear())}createTask(t,e){const i=this.store.getOptionManager().getOptions().fields,s=new nt(this.store,this.event,t,e);return Array.isArray(t[i.children])&&(s.children=t[i.children].map(n=>this.createTask(n,s))),this.taskMap.set(s.id,s),this.dataLevel=Math.max(this.dataLevel,s.level),s}updateTask(t,e,i){let s=0;for(;s<t.length;){const n=t[s],o=e[s];if(n&&!o){const r=this.createTask(n,i);e.push(r),this.taskMap.set(r.id,r),this.dataLevel=Math.max(this.dataLevel,r.level)}else!n&&o?(this.taskMap.delete(o.id),e.splice(s,1)):n&&o&&(n[this.store.getOptionManager().getOptions().fields.id]===o.id?(o.updateData(n),this.dataLevel=Math.max(this.dataLevel,o.level)):(this.taskMap.delete(o.id),e[s]=this.createTask(n,o.parent),this.taskMap.set(e[s].id,e[s]),this.dataLevel=Math.max(this.dataLevel,e[s].level)));if(n[this.store.getOptionManager().getOptions().fields.children]){const r=n[this.store.getOptionManager().getOptions().fields.children];if(o&&o.children)this.updateTask(r,o.children,o);else{const h=r.map(l=>this.createTask(l,e[s]));e[s].children=h}}else o&&o.children&&(o.children=[]);s++}e.length>=s&&e.splice(s).forEach(o=>{this.taskMap.delete(o.id)})}getData(){return this.rawData}getTasks(t=!0){return t?this.tasks:Array.from(this.taskMap.values())}getTaskById(t){return this.taskMap.get(t)}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(S.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}getVisibleSize(){return this.getVisibleTasks().length}isTaskVisible(t){return this.getVisibleTasks().some(e=>e.id===t.id)}clear(){this.rawData=[],this.tasks=[],this.taskMap.clear(),this.visibleTasksCache=[],this.isDirty=!0,this.collapsedTaskIds.clear(),this.event.emit(S.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(S.TASK_SELECTED,e)),!0):!1}unselectTask(){if(this.selectedTaskId){const t=this.selectedTaskId;this.selectedTaskId=null,this.event.emit(S.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 h=this.store.getOptionManager().getOptions().bar.move.link.child,l=this.store.getOptionManager().getOptions().bar.move.link.parent,g=this.store.getTimeAxis().getCellUnit();let c=t.parent;for(;l!=="none"&&c;){if(l==="expand"){let p=c.startTime||o,m=c.endTime||r;(!c.startTime||o.isBefore(c.startTime))&&(p=o),(!c.endTime||r.isAfter(c.endTime))&&(m=r),(c.startTime===void 0||c.endTime===void 0||!p.isSame(c.startTime)||!m.isSame(c.endTime))&&(n.findIndex(d=>d.id===c.id)===-1&&n.push(c.clone()),c.updateTime(p,m))}else l==="strict"&&(c.startTime&&o.isBefore(c.startTime)&&(o=c.startTime,r.isSameOrBefore(o)&&(r=o.add(1,g))),c.endTime&&r.isAfter(c.endTime)&&(r=c.endTime,o.isAfter(r)&&(o=r.subtract(1,g))));c=c.parent}let u=t.children||[];for(;h!=="none"&&u.length>0;){const p=[];u.forEach(m=>{let d=m.startTime||o,x=m.endTime||r,w=o.diff(t.startTime),v=r.diff(t.endTime);h==="scale"?s==="both"?(n.findIndex(T=>T.id===m.id)===-1&&n.push(m.clone()),m.updateTime(d.add(w),x.add(v))):s==="left"?(d=d.add(w),d.isSameOrAfter(x.subtract(1,g))&&(x.isBefore(t.endTime)?x=d.add(1,g):d=x.subtract(1,g),d.isSameOrBefore(o)&&(o=d)),n.findIndex(T=>T.id===m.id)===-1&&n.push(m.clone()),m.updateTime(d,x)):s==="right"&&(x=x.add(v),x.isSameOrBefore(d.add(1,g))&&(d.isAfter(t.startTime)?d=x.subtract(1,g):x=d.add(1,g)),x.isSameOrAfter(r)&&(r=x),n.findIndex(T=>T.id===m.id)===-1&&n.push(m.clone()),m.updateTime(d,x)):h==="fixed"&&(s==="both"?(n.findIndex(T=>T.id===m.id)===-1&&n.push(m.clone()),m.updateTime(d.add(w),x.add(v))):s==="left"?d.isSameOrBefore(o)&&(d=o,d.isSameOrAfter(x.subtract(1,g))&&(x.isBefore(t.endTime)?x=d.add(1,g):d=x.subtract(1,g),d.isSameOrBefore(o)&&(o=d)),n.findIndex(T=>T.id===m.id)===-1&&n.push(m.clone()),m.updateTime(d,x)):s==="right"&&x.isSameOrAfter(r)&&(x=r,x.isSameOrBefore(d.add(1,g))&&(d.isAfter(t.startTime)?d=x.subtract(1,g):x=d.add(1,g)),x.isSameOrAfter(r)&&(r=x),n.findIndex(T=>T.id===m.id)===-1&&n.push(m.clone()),m.updateTime(d,x))),m.children&&m.children.length>0&&p.push(...m.children)}),u=p}n.findIndex(p=>p.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 It(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 R(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 K(f,t){let e=f;return C.isString(e)&&(/%$/.test(e)?e=t*parseFloat(e)/100:e=parseFloat(e)),isNaN(e)?0:e}function dt(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 tt(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 Rt(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 ot(f,t=2,e=!1){const i=f.toFixed(t);return e?i:i.replace(/\.?0+$/,"")}function ut(f,t=16,e=16){return new Promise((i,s)=>{let n=f;if(!/viewBox\s*=\s*["'][^"']*["']/.test(n)){const g=n.match(/width\s*=\s*["']([^"']*)["']/),c=n.match(/height\s*=\s*["']([^"']*)["']/),u=g?parseFloat(g[1]):t,p=c?parseFloat(c[1]):e;n=n.replace(/<svg([^>]*)>/,`<svg$1 viewBox="0 0 ${u} ${p}">`)}n=n.replace(/width\s*=\s*["'][^"']*["']/,`width="${t}"`),n=n.replace(/height\s*=\s*["'][^"']*["']/,`height="${e}"`),/width\s*=/.test(n)||(n=n.replace(/<svg/,`<svg width="${t}"`)),/height\s*=/.test(n)||(n=n.replace(/<svg/,`<svg height="${e}"`)),/preserveAspectRatio\s*=/.test(n)||(n=n.replace(/<svg([^>]*)>/,'<svg$1 preserveAspectRatio="xMidYMid meet">'));const r=new Image;r.onload=()=>{URL.revokeObjectURL(r.src),i(r)},r.onerror=g=>{URL.revokeObjectURL(r.src),s(g)};const h=new Blob([n],{type:"image/svg+xml"}),l=URL.createObjectURL(h);r.src=l})}function Wt(f){var s;if(typeof f=="object"&&f!==null)return{r:R(f.r??0,0,255),g:R(f.g??0,0,255),b:R(f.b??0,0,255),a:R(f.a??1,0,1)};if(typeof f!="string")return H.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,h,l,g=1;try{o=parseInt(n,16)}catch{return H.warn(`Invalid hex color: ${f}`),null}if(n.length===3)r=(o>>8&15)*17,h=(o>>4&15)*17,l=(o&15)*17;else if(n.length===6)r=o>>16&255,h=o>>8&255,l=o&255;else if(n.length===8)r=o>>24&255,h=o>>16&255,l=o>>8&255,g=(o&255)/255;else return H.warn(`Invalid hex color length: ${f}`),null;return{r,g:h,b:l,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("%")?R(parseFloat(o)/100*255,0,255):R(parseInt(o,10),0,255);return{r:n(i[1]),g:n(i[2]),b:n(i[3]),a:i[4]!==void 0?R(parseFloat(i[4]),0,1):1}}return H.warn(`Could not parse color: ${f}`),null}function $t(f,t,e,i,s=!1,n=!1){const o=u=>{const p=Math.round(R(u,0,255)).toString(16);return p.length===1?"0"+p:p},r=o(f),h=o(t),l=o(e),g=o(i*255);if(s&&r[0]===r[1]&&h[0]===h[1]&&l[0]===l[1]&&i===1&&!n)return`#${r[0]}${h[0]}${l[0]}`;const c=`#${r}${h}${l}`;return n||i<1?`${c}${g}`:c}class Z{constructor(t){a(this,"_r");a(this,"_g");a(this,"_b");a(this,"_a");const e=Wt(t);e===null?(H.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(R(t,0,255)),this)}green(t){return t===void 0?this._g:(this._g=Math.round(R(t,0,255)),this)}blue(t){return t===void 0?this._b:(this._b=Math.round(R(t,0,255)),this)}alpha(t){return t===void 0?this._a:(this._a=R(t,0,1),this)}toHex(t=!1,e=!1){return $t(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=R(t,0,100)/100;return this._r=Math.round(R(this._r+(255-this._r)*e,0,255)),this._g=Math.round(R(this._g+(255-this._g)*e,0,255)),this._b=Math.round(R(this._b+(255-this._b)*e,0,255)),this}darken(t=10){if(t<0)return this.brighten(-t);const e=R(t,0,100)/100;return this._r=Math.round(R(this._r*(1-e),0,255)),this._g=Math.round(R(this._g*(1-e),0,255)),this._b=Math.round(R(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=R(e,0,100)/100,s=F(t);return this._r=Math.round(R(this._r*(1-i)+s.R*i,0,255)),this._g=Math.round(R(this._g*(1-i)+s.G*i,0,255)),this._b=Math.round(R(this._b*(1-i)+s.B*i,0,255)),this._a=R(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,F):H.warn("Invalid plugin provided to Colorjs.extend. Expected a function.")}}const F=f=>f instanceof Z?f:new Z(f);class gt{constructor(t,e,i){a(this,"element");a(this,"iconElement");a(this,"_state",0);a(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=F(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,4 @@
|
|
|
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(y.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(y.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(y.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(y.CHECK_TASK,this.context.store.getDataManager().getVisibleTasks(),!e)}})}registerEvents(){this.context.event.on(y.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 ft="handler_column";class Ft{constructor(t){a(this,"sourceColumns",[]);a(this,"columns",[]);a(this,"leafColumns",[]);a(this,"temporaryLeafColumns",[]);a(this,"mergeInfo",new Map);a(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,h=!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 l=n.label||(h?n.field:""),d=h?((p=this.temporaryLeafColumns.find(u=>u.key===c))==null?void 0:p.width)||n.width||100:"auto",m={label:l,level:s,maxLevel:s,column:n,children:[],path:g,key:c,isLeaf:h,width:d};if(e.push(m),h)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((x,b)=>Math.max(x,b.maxLevel),0))}}),this.temporaryLeafColumns=O.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===ft)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(y.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 gt(this.context).getElement():null,ellipsis:!1},children:[],path:[],key:ft,isLeaf:!0,width:t}}isMultiHeader(){return this.columns.some(t=>t.maxLevel>1)}collapse(){this.collapseTable=!this.collapseTable,this.context.event.emit(y.TOGGLE_COLLAPSE)}isCollapsed(){return this.collapseTable}}var P=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function N(f){return f&&f.__esModule&&Object.prototype.hasOwnProperty.call(f,"default")?f.default:f}var mt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(P,function(){var e,i,s=1e3,n=6e4,o=36e5,r=864e5,h=/\[([^\]]+)]|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,l=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,d={years:c,months:g,days:r,hours:o,minutes:n,seconds:s,milliseconds:1,weeks:6048e5},m=function(M){return M instanceof E},p=function(M,k,w){return new E(M,w,k.$l)},u=function(M){return i.p(M)+"s"},x=function(M){return M<0},b=function(M){return x(M)?Math.ceil(M):Math.floor(M)},S=function(M){return Math.abs(M)},v=function(M,k){return M?x(M)?{negative:!0,format:""+S(M)+k}:{negative:!1,format:""+M+k}:{negative:!1,format:""}},E=function(){function M(w,H,_){var A=this;if(this.$d={},this.$l=_,w===void 0&&(this.$ms=0,this.parseFromMilliseconds()),H)return p(w*d[u(H)],this);if(typeof w=="number")return this.$ms=w,this.parseFromMilliseconds(),this;if(typeof w=="object")return Object.keys(w).forEach(function(z){A.$d[u(z)]=w[z]}),this.calMilliseconds(),this;if(typeof w=="string"){var I=w.match(l);if(I){var R=I.slice(2).map(function(z){return z!=null?Number(z):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 k=M.prototype;return k.calMilliseconds=function(){var w=this;this.$ms=Object.keys(this.$d).reduce(function(H,_){return H+(w.$d[_]||0)*d[_]},0)},k.parseFromMilliseconds=function(){var w=this.$ms;this.$d.years=b(w/c),w%=c,this.$d.months=b(w/g),w%=g,this.$d.days=b(w/r),w%=r,this.$d.hours=b(w/o),w%=o,this.$d.minutes=b(w/n),w%=n,this.$d.seconds=b(w/s),w%=s,this.$d.milliseconds=w},k.toISOString=function(){var w=v(this.$d.years,"Y"),H=v(this.$d.months,"M"),_=+this.$d.days||0;this.$d.weeks&&(_+=7*this.$d.weeks);var A=v(_,"D"),I=v(this.$d.hours,"H"),R=v(this.$d.minutes,"M"),z=this.$d.seconds||0;this.$d.milliseconds&&(z+=this.$d.milliseconds/1e3,z=Math.round(1e3*z)/1e3);var Y=v(z,"S"),U=w.negative||H.negative||A.negative||I.negative||R.negative||Y.negative,$=I.format||R.format||Y.format?"T":"",X=(U?"-":"")+"P"+w.format+H.format+A.format+$+I.format+R.format+Y.format;return X==="P"||X==="-P"?"P0D":X},k.toJSON=function(){return this.toISOString()},k.format=function(w){var H=w||"YYYY-MM-DDTHH:mm:ss",_={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 H.replace(h,function(A,I){return I||String(_[A])})},k.as=function(w){return this.$ms/d[u(w)]},k.get=function(w){var H=this.$ms,_=u(w);return _==="milliseconds"?H%=1e3:H=_==="weeks"?b(H/d[_]):this.$d[_],H||0},k.add=function(w,H,_){var A;return A=H?w*d[u(H)]:m(w)?w.$ms:p(w,this).$ms,p(this.$ms+A*(_?-1:1),this)},k.subtract=function(w,H){return this.add(w,H,!0)},k.locale=function(w){var H=this.clone();return H.$l=w,H},k.clone=function(){return p(this.$ms,this)},k.humanize=function(w){return e().add(this.$ms,"ms").locale(this.$l).fromNow(!w)},k.valueOf=function(){return this.asMilliseconds()},k.milliseconds=function(){return this.get("milliseconds")},k.asMilliseconds=function(){return this.as("milliseconds")},k.seconds=function(){return this.get("seconds")},k.asSeconds=function(){return this.as("seconds")},k.minutes=function(){return this.get("minutes")},k.asMinutes=function(){return this.as("minutes")},k.hours=function(){return this.get("hours")},k.asHours=function(){return this.as("hours")},k.days=function(){return this.get("days")},k.asDays=function(){return this.as("days")},k.weeks=function(){return this.get("weeks")},k.asWeeks=function(){return this.as("weeks")},k.months=function(){return this.get("months")},k.asMonths=function(){return this.as("months")},k.years=function(){return this.get("years")},k.asYears=function(){return this.as("years")},M}(),D=function(M,k,w){return M.add(k.years()*w,"y").add(k.months()*w,"M").add(k.days()*w,"d").add(k.hours()*w,"h").add(k.minutes()*w,"m").add(k.seconds()*w,"s").add(k.milliseconds()*w,"ms")};return function(M,k,w){e=w,i=w().$utils(),w.duration=function(A,I){var R=w.locale();return p(A,{$l:R},I)},w.isDuration=m;var H=k.prototype.add,_=k.prototype.subtract;k.prototype.add=function(A,I){return m(A)?D(this,A,1):H.bind(this)(A,I)},k.prototype.subtract=function(A,I){return m(A)?D(this,A,-1):_.bind(this)(A,I)}}})})(mt);var Bt=mt.exports;const zt=N(Bt);var pt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(P,function(){return function(e,i,s){i.prototype.isBetween=function(n,o,r,h){var c=s(n),g=s(o),l=(h=h||"()")[0]==="(",d=h[1]===")";return(l?this.isAfter(c,r):!this.isBefore(c,r))&&(d?this.isBefore(g,r):!this.isAfter(g,r))||(l?this.isBefore(c,r):!this.isAfter(c,r))&&(d?this.isAfter(g,r):!this.isBefore(g,r))}}})})(pt);var Pt=pt.exports;const Yt=N(Pt);var xt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(P,function(){return function(e,i){i.prototype.isSameOrBefore=function(s,n){return this.isSame(s,n)||this.isBefore(s,n)}}})})(xt);var Nt=xt.exports;const Ut=N(Nt);var yt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(P,function(){return function(e,i){i.prototype.isSameOrAfter=function(s,n){return this.isSame(s,n)||this.isAfter(s,n)}}})})(yt);var Xt=yt.exports;const Vt=N(Xt);var wt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(P,function(){return function(e,i,s){var n=i.prototype,o=function(l){return l&&(l.indexOf?l:l.s)},r=function(l,d,m,p,u){var x=l.name?l:l.$locale(),b=o(x[d]),S=o(x[m]),v=b||S.map(function(D){return D.slice(0,p)});if(!u)return v;var E=x.weekStart;return v.map(function(D,M){return v[(M+(E||0))%7]})},h=function(){return s.Ls[s.locale()]},c=function(l,d){return l.formats[d]||function(m){return m.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(p,u,x){return u||x.slice(1)})}(l.formats[d.toUpperCase()])},g=function(){var l=this;return{months:function(d){return d?d.format("MMMM"):r(l,"months")},monthsShort:function(d){return d?d.format("MMM"):r(l,"monthsShort","months",3)},firstDayOfWeek:function(){return l.$locale().weekStart||0},weekdays:function(d){return d?d.format("dddd"):r(l,"weekdays")},weekdaysMin:function(d){return d?d.format("dd"):r(l,"weekdaysMin","weekdays",2)},weekdaysShort:function(d){return d?d.format("ddd"):r(l,"weekdaysShort","weekdays",3)},longDateFormat:function(d){return c(l.$locale(),d)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};n.localeData=function(){return g.bind(this)()},s.localeData=function(){var l=h();return{firstDayOfWeek:function(){return l.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(d){return c(l,d)},meridiem:l.meridiem,ordinal:l.ordinal}},s.months=function(){return r(h(),"months")},s.monthsShort=function(){return r(h(),"monthsShort","months",3)},s.weekdays=function(l){return r(h(),"weekdays",null,null,l)},s.weekdaysShort=function(l){return r(h(),"weekdaysShort","weekdays",3,l)},s.weekdaysMin=function(l){return r(h(),"weekdaysMin","weekdays",2,l)}}})})(wt);var qt=wt.exports;const Qt=N(qt);var bt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(P,function(){var e="week",i="year";return function(s,n,o){var r=n.prototype;r.week=function(h){if(h===void 0&&(h=null),h!==null)return this.add(7*(h-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),l=o(this).endOf(e);if(g.isBefore(l))return 1}var d=o(this).startOf(i).date(c).startOf(e).subtract(1,"millisecond"),m=this.diff(d,e,!0);return m<0?o(this).startOf("week").week():Math.ceil(m)},r.weeks=function(h){return h===void 0&&(h=null),this.week(h)}}})})(bt);var jt=bt.exports;const Jt=N(jt);var Tt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(P,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}}})})(Tt);var Zt=Tt.exports;const Kt=N(Zt);var vt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(P,function(){return function(e,i){var s=i.prototype,n=s.format;s.format=function(o){var r=this,h=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(l){switch(l){case"Q":return Math.ceil((r.$M+1)/3);case"Do":return h.ordinal(r.$D);case"gggg":return r.weekYear();case"GGGG":return r.isoWeekYear();case"wo":return h.ordinal(r.week(),"W");case"w":case"ww":return c.s(r.week(),l==="w"?1:2,"0");case"W":case"WW":return c.s(r.isoWeek(),l==="W"?1:2,"0");case"k":case"kk":return c.s(String(r.$H===0?24:r.$H),l==="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 l}});return n.bind(this)(g)}}})})(vt);var te=vt.exports;const ee=N(te);var St={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(P,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(h){r[h]=o[h]}),r}}})})(St);var ie=St.exports;const se=N(ie);var kt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(P,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,l,d,m,p=o(this),u=(g=this.isoWeekYear(),l=this.$u,d=(l?n.utc:n)().year(g).startOf("year"),m=4-d.isoWeekday(),d.isoWeekday()>4&&(m+=7),d.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 h=r.startOf;r.startOf=function(c,g){var l=this.$utils(),d=!!l.u(g)||g;return l.p(c)==="isoweek"?d?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):h.bind(this)(c,g)}}})})(kt);var ne=kt.exports;const oe=N(ne);var Mt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(P,function(){var e={year:0,month:1,day:2,hour:3,minute:4,second:5},i={};return function(s,n,o){var r,h=function(d,m,p){p===void 0&&(p={});var u=new Date(d),x=function(b,S){S===void 0&&(S={});var v=S.timeZoneName||"short",E=b+"|"+v,D=i[E];return D||(D=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:b,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:v}),i[E]=D),D}(m,p);return x.formatToParts(u)},c=function(d,m){for(var p=h(d,m),u=[],x=0;x<p.length;x+=1){var b=p[x],S=b.type,v=b.value,E=e[S];E>=0&&(u[E]=parseInt(v,10))}var D=u[3],M=D===24?0:D,k=u[0]+"-"+u[1]+"-"+u[2]+" "+M+":"+u[4]+":"+u[5]+":000",w=+d;return(o.utc(k).valueOf()-(w-=w%1e3))/6e4},g=n.prototype;g.tz=function(d,m){d===void 0&&(d=r);var p,u=this.utcOffset(),x=this.toDate(),b=x.toLocaleString("en-US",{timeZone:d}),S=Math.round((x-new Date(b))/1e3/60),v=15*-Math.round(x.getTimezoneOffset()/15)-S;if(!Number(v))p=this.utcOffset(0,m);else if(p=o(b,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(v,!0),m){var E=p.utcOffset();p=p.add(u-E,"minute")}return p.$x.$timezone=d,p},g.offsetName=function(d){var m=this.$x.$timezone||o.tz.guess(),p=h(this.valueOf(),m,{timeZoneName:d}).find(function(u){return u.type.toLowerCase()==="timezonename"});return p&&p.value};var l=g.startOf;g.startOf=function(d,m){if(!this.$x||!this.$x.$timezone)return l.call(this,d,m);var p=o(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return l.call(p,d,m).tz(this.$x.$timezone,!0)},o.tz=function(d,m,p){var u=p&&m,x=p||m||r,b=c(+o(),x);if(typeof d!="string")return o(d).tz(x);var S=function(M,k,w){var H=M-60*k*1e3,_=c(H,w);if(k===_)return[H,k];var A=c(H-=60*(_-k)*1e3,w);return _===A?[H,_]:[M-60*Math.min(_,A)*1e3,Math.max(_,A)]}(o.utc(d,u).valueOf(),b,x),v=S[0],E=S[1],D=o(v).utcOffset(E);return D.$x.$timezone=x,D},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(d){r=d}}})})(Mt);var re=Mt.exports;const ae=N(re);var Ot={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(P,function(){var e="minute",i=/[+-]\d\d(?::?\d\d)?/g,s=/([+-]|\d\d)/g;return function(n,o,r){var h=o.prototype;r.utc=function(u){var x={date:u,utc:!0,args:arguments};return new o(x)},h.utc=function(u){var x=r(this.toDate(),{locale:this.$L,utc:!0});return u?x.add(this.utcOffset(),e):x},h.local=function(){return r(this.toDate(),{locale:this.$L,utc:!1})};var c=h.parse;h.parse=function(u){u.utc&&(this.$u=!0),this.$utils().u(u.$offset)||(this.$offset=u.$offset),c.call(this,u)};var g=h.init;h.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 l=h.utcOffset;h.utcOffset=function(u,x){var b=this.$utils().u;if(b(u))return this.$u?0:b(this.$offset)?l.call(this):this.$offset;if(typeof u=="string"&&(u=function(D){D===void 0&&(D="");var M=D.match(i);if(!M)return null;var k=(""+M[0]).match(s)||["-",0,0],w=k[0],H=60*+k[1]+ +k[2];return H===0?0:w==="+"?H:-H}(u),u===null))return this;var S=Math.abs(u)<=16?60*u:u,v=this;if(x)return v.$offset=S,v.$u=u===0,v;if(u!==0){var E=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(v=this.local().add(S+E,e)).$offset=S,v.$x.$localOffset=E}else v=this.utc();return v};var d=h.format;h.format=function(u){var x=u||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return d.call(this,x)},h.valueOf=function(){var u=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*u},h.isUTC=function(){return!!this.$u},h.toISOString=function(){return this.toDate().toISOString()},h.toString=function(){return this.toDate().toUTCString()};var m=h.toDate;h.toDate=function(u){return u==="s"&&this.$offset?r(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():m.call(this)};var p=h.diff;h.diff=function(u,x,b){if(u&&this.$u===u.$u)return p.call(this,u,x,b);var S=this.local(),v=r(u).local();return p.call(S,v,x,b)}}})})(Ot);var he=Ot.exports;const le=N(he);var ce={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(P,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])+"]"}}})})(ce);var de={exports:{}};(function(f,t){(function(e,i){f.exports=i(C)})(P,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 h=100*o+r;return h<600?"凌晨":h<900?"早上":h<1100?"上午":h<1300?"中午":h<1800?"下午":"晚上"}};return s.default.locale(n,null,!0),n})})(de);const ue=(f,t)=>{const e=t.prototype;e.setLocale=function(s){return this.$locale=s||C().locale(),this.$L=this.$locale,this};const i=e.format;e.format=function(s){return this.$L=C().locale(),i.bind(this)(s)}};C.extend(zt),C.extend(Yt),C.extend(Ut),C.extend(Vt),C.extend(Jt),C.extend(Qt),C.extend(Kt),C.extend(ee),C.extend(se),C.extend(oe),C.extend(ae),C.extend(le),C.extend(ue);function Et(f){try{if(C.locale()===f)return;if(C.locale(f)!==f)throw Error();L.info(`Locale set to ${f}`)}catch{L.warn(`Failed to set locale ${f}, fallback to en`),C.locale("en")}}const rt=()=>({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 ge{constructor(){a(this,"startTime",C().startOf("day"));a(this,"endTime",C().endOf("day"));a(this,"targetEnd",C().endOf("day"));a(this,"strictStart",!1);a(this,"strictEnd",!1);a(this,"isStrict",!1);a(this,"isAuto",!1);a(this,"timeline",[]);a(this,"headerGroupFormat");a(this,"headerCellFormat");a(this,"isDirty",!0);a(this,"isFirstTime",!0);a(this,"allWidth",0);a(this,"cellWidth");a(this,"unit","day");this.cellWidth=O.cloneDeep(rt().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){this.isDirty=!0;const{unit:e,chart:i}=t;this.isAuto=!!i.autoCellWidth;const s={hour:"hour",day:"day",week:"week",month:"month",quarter:"quarter"}[e];s||L.warn(`Unknown unit: [${e}]. Falling back to "day".`),this.unit=s||"day",i.startTime&&(this.startTime=C(i.startTime).startOf(this.getFinelyUnit()),this.strictStart=!0),i.endTime&&(this.endTime=C(i.endTime).endOf(this.getFinelyUnit()),this.strictEnd=!0),this.isStrict=this.strictStart&&this.strictEnd,i.cellWidth&&(O.isNumber(i.cellWidth)?this.cellWidth={hour:i.cellWidth,day:i.cellWidth,week:i.cellWidth,month:i.cellWidth,quarter:i.cellWidth}:O.isString(i.cellWidth)?this.cellWidth=O.cloneDeep(rt()[i.cellWidth]||rt().normal):O.isObject(i.cellWidth)&&(this.cellWidth=Object.assign(this.cellWidth,i.cellWidth))),this.headerCellFormat=i.headerCellFormat,this.headerGroupFormat=i.headerGroupFormat}update(t){this.init(t),this.endTime=this.targetEnd.clone()}setDate(t,e){this.isStrict||(!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(O.isFunction(this.headerGroupFormat)){const i=this.headerGroupFormat(t.toDate(),this.unit);if(i)return i}if(O.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(O.isFunction(this.headerCellFormat)){const i=this.headerCellFormat(t.toDate(),this.unit);if(i)return i}if(O.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 fe{constructor(t,e){a(this,"optionManager");a(this,"dataManager");a(this,"columnManager");a(this,"timeAxis");var n;this.context=t;const i=O.omit(e,["data"]),s=e==null?void 0:e.data;if(s&&!O.isArray(s))throw L.exception("Data should be a array.");this.optionManager=new Ht,this.optionManager.setOptions(i),i.locale&&Et(i.locale),this.timeAxis=new ge,this.timeAxis.init(this.optionManager.getOptions()),this.columnManager=new Ft(this.context),i.table&&i.table.columns&&this.columnManager.init(i.table.columns),this.dataManager=new Gt(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)}getOptionManager(){return this.optionManager}getDataManager(){return this.dataManager}getColumnManager(){return this.columnManager}getTimeAxis(){return this.timeAxis}setOption(t,e={merge:!0}){var n,o;const i=O.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(r=>{r.updateMode()}),O.isArray(s)&&this.dataManager.setData(s,!1),O.isArray((o=t.baselines)==null?void 0:o.data)&&this.dataManager.setBaselines(t.baselines.data),i.locale&&Et(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 me{constructor(t,e,i){a(this,"rootElement");a(this,"options");a(this,"hScrollbar");a(this,"vScrollbar");a(this,"hScrollThumb");a(this,"vScrollThumb");a(this,"scrollbarContainer");a(this,"viewportWidth",0);a(this,"viewportHeight",0);a(this,"contentWidth",0);a(this,"contentHeight",0);a(this,"scrollLeft",0);a(this,"scrollTop",0);a(this,"isDraggingHScroll",!1);a(this,"isDraggingVScroll",!1);a(this,"isMouseOverRoot",!1);a(this,"isMouseOverScrollbar",!1);a(this,"hideTimeout",null);a(this,"showTimeout",null);a(this,"isVisible",!1);a(this,"dragStartX",0);a(this,"dragStartY",0);a(this,"thumbStartScrollLeft",0);a(this,"thumbStartScrollTop",0);a(this,"isAnimating",!1);a(this,"animationFrameId",null);a(this,"animationStartTime",0);a(this,"animationStartScrollLeft",0);a(this,"animationStartScrollTop",0);a(this,"animationTargetScrollLeft",0);a(this,"animationTargetScrollTop",0);a(this,"animationSource","api");a(this,"throttledHandleMouseMove");a(this,"throttledHandleWheel");a(this,"handleRootMouseMove",()=>{!this.isVisible&&this.isMouseOverRoot?this.scheduleShow():this.isVisible&&!this.isMouseOverScrollbar&&this.scheduleHide()});a(this,"handleScrollbarMouseEnter",()=>{this.isMouseOverScrollbar=!0,this.scheduleShow()});a(this,"handleScrollbarMouseLeave",()=>{this.isMouseOverScrollbar=!1,this.isMouseOverRoot&&this.scheduleHide()});a(this,"handleMouseEnter",()=>{this.isMouseOverRoot=!0,this.scheduleShow()});a(this,"handleMouseLeave",()=>{this.isMouseOverRoot=!1,!this.isDraggingHScroll&&!this.isDraggingVScroll&&!this.isMouseOverScrollbar&&(this.clearTimeouts(!0,!1),this.scheduleHide())});a(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)});a(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)});a(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,h=(s-i/2)/r*o;this.scrollTo({x:h,y:this.scrollTop},"track")});a(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,h=(s-i/2)/r*o;this.scrollTo({x:this.scrollLeft,y:h},"track")});a(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()}});a(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,h=this.scrollLeft!==o,c=this.scrollTop!==r;(h||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=O.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=O.throttle(this.handleMouseMove.bind(this),16),this.throttledHandleWheel=O.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=G(e,0,this.contentWidth-this.viewportWidth),this.scrollTop=G(i,0,this.contentHeight-this.viewportHeight),this.updateThumbStyles(),this.root.event.emit(y.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,h=this.thumbStartScrollLeft+r;this.scrollTo({x:h,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,h=this.thumbStartScrollTop+r;this.scrollTo({x:this.scrollLeft,y:h},"drag")}}}handleWheel(t){if(t.target!==this.rootElement&&!this.rootElement.contains(t.target)&&L.debug("Wheel event ignored, target not root or descendant:",t.target),!this.isMouseOverRoot&&!this.isMouseOverScrollbar){L.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,h=Math.min(1,r/s),c=h*(2-h),g=this.animationStartScrollLeft+(this.animationTargetScrollLeft-this.animationStartScrollLeft)*c,l=this.animationStartScrollTop+(this.animationTargetScrollTop-this.animationStartScrollTop)*c,d=this.scrollLeft!==g,m=this.scrollTop!==l;(d||m)&&this.emit("wheel",g,l),h<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,h=this.canScrollVertical()&&this.options.showVertical;if(r){const g=this.viewportWidth-(h?this.options.track.size:0);this.hScrollbar.style.display="block",this.hScrollbar.style.left=`${n}px`,this.hScrollbar.style.width=`${Math.max(0,g)}px`,this.hScrollbar.style.bottom="0px",this.hScrollbar.style.right=h?`${this.options.track.size}px`:"0px"}else this.hScrollbar.style.display="none";if(h){const g=this.viewportHeight-o-(r?this.options.track.size:0);this.vScrollbar.style.display="block",this.vScrollbar.style.top=`${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&&!h?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(O.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,L.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 et{constructor(t,e,i,s,n,o,r=1,h=1,c){a(this,"element");a(this,"isEmpty",!1);a(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=h,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??!0??this.context.getOptions().table.ellipsis)&&(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):L.warn("Table cell render function does not return a valid value.",e)}catch(e){L.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 gt(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 Lt{constructor(t,e,i,s,n=!1){a(this,"element");a(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(y.ROW_HIGHLIGHT,this.task.id)}),this.element.addEventListener("mouseleave",()=>{this.context.event.emit(y.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(y.ROW_CLICK,t,this.task))}),this.element.addEventListener("dblclick",t=>{this.context.event.emit(y.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(y.ROW_CONTEXTMENU,t,this.task.id)})}registerEvents(){this.context.event.on(y.ROW_HIGHLIGHT,t=>{this.task.id===t?this.element.classList.add("hover"):this.element.classList.remove("hover")}),this.context.event.on(y.ROW_UNHIGHLIGHT,t=>{this.task.id===t&&this.element.classList.remove("hover")}),this.context.event.on(y.TASK_SELECTED,t=>{this.task.id===t.id&&this.element.classList.add("selected")}),this.context.event.on(y.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;this.element.style.top=`${-this.top+this.task.flatIndex*e}px`}create(){var i,s;this.clearCells();const t=this.context.store.getColumnManager().getHandlerColumn();if(t.width!==0){const n=new et(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 h=new et(this.context,this.element,o,this.task,this.task.flatIndex,n,1,1,"empty");this.element.style.backgroundColor="transparent",this.raise(),this.cells.push(h)}else{const h=new et(this.context,this.element,o,r.task,r.task.flatIndex,n,r.colspan,r.rowspan);this.cells.push(h)}else{let h=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"?L.error("colspan function must returned a number"):h=g.col,typeof g.row!="number"?L.error("rowspan function must returned a number"):c=g.row),h>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 d={task:this.task,originColumnIndex:n,colspan:h,rowspan:c};let m=this.task;for(let p=c;p>0;p--)if(m){for(let u=0;u<h;u++)this.context.store.getColumnManager().addMergeInfo(m.id,u+n,d);m=this.context.store.getDataManager().getVisibleTasks().at(m.flatIndex+1)}for(let p=0;p<h;p++)this.context.store.getColumnManager().addMergeInfo(this.task.id,p+n,d)}const l=new et(this.context,this.element,o,this.task,this.task.flatIndex,n,h,c);this.cells.push(l)}}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 pe{constructor(t,e){a(this,"element");a(this,"rows",new Map);a(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 h=this.rows.get(r);h.update(n),h.updateTop(t)}else{const h=new Lt(this.context,this.element,n,t);h.create(),this.rows.set(r,h)}this.context.store.getColumnManager().getLeafColumns().forEach((h,c)=>{const g=this.context.store.getColumnManager().getMergeInfo(n.id,c);if(g&&g.rowspan>1){const l=g.task.id;if(!this.rows.has(l)&&!this.mergeRows.has(l)){const d=new Lt(this.context,this.element,g.task,t,!0);d.create(),this.mergeRows.set(l,d)}}})})}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 at{constructor(t,e,i,s){a(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??!0??this.context.getOptions().table.ellipsis;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=d=>r(d),l=d=>h(d,g,l);document.addEventListener("mousemove",g),document.addEventListener("mouseup",l),n=e-s.left,this.context.event.emit(y.SHOW_GUIDELINE,n)},r=c=>{if(c.preventDefault(),!s)return;const g=c.clientX-e,l=i+g,d=Math.max(50,l),m=e-s.left-i,u=this.root.clientWidth-20;let x=m+d;x=Math.min(u,x),this.context.event.emit(y.MOVE_GUIDELINE,x)},h=(c,g,l)=>{document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",l),this.context.event.emit(y.HIDE_GUIDELINE);const d=c.clientX-e,m=Math.max(50,i+d);this.setWidth(m)};t.addEventListener("mousedown",o)}}class ht{constructor(t,e,i,s){a(this,"groupElement");a(this,"titleContainer");a(this,"childContainer");a(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 at(this.context,this.root,this.childContainer,t);this.children.push(e)}else if(t.children.length>0){const e=new ht(this.context,this.root,this.childContainer,t);this.children.push(e)}})}}class xe{constructor(t,e){a(this,"headerElement");a(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 at(this.context,this.headerElement,this.headerElement,t.getHandlerColumn());this.headerColumns.push(i)}e.forEach(i=>{if(i.isLeaf){const s=new at(this.context,this.headerElement,this.headerElement,i);this.headerColumns.push(s)}else if(i.children.length>0){const s=new ht(this.context,this.headerElement,this.headerElement,i);this.headerColumns.push(s)}})}}class ye{constructor(t,e){a(this,"tableContainer");a(this,"tableHeader");a(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 xe(t,this.tableContainer),this.tableBody=new pe(t,this.tableContainer),this.listenEvents()}render(t,e){this.tableHeader.render(),this.refresh(t,e)}refresh(t,e){this.context.store.getColumnManager().clearMergeInfo(),this.tableBody.render(t,e)}updateWidth(){this.tableBody.updateWidth()}updateTask(t){this.tableBody.updateTask(t)}listenEvents(){this.context.event.on(y.UPDATE_TABLE_HEADER,()=>{this.tableHeader.render()}),this.context.event.on(y.UPDATE_TABLE_BODY,()=>{this.tableBody.update()})}}class we{constructor(t,e){a(this,"layer");a(this,"background");a(this,"groupHeader");a(this,"cellHeader");a(this,"cellCache",new Map);a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);this.context=t,this.stage=e,this.layer=new T.Layer,this.stage.add(this.layer),this.background=new T.Rect({fill:this.context.getOptions().header.backgroundColor||this.context.getOptions().primaryColor,name:"header-background"}),this.layer.add(this.background),this.groupHeader=new T.Group({name:"primary-header"}),this.cellHeader=new T.Group({name:"secondary-header"}),this.layer.add(this.groupHeader),this.layer.add(this.cellHeader),this.resize(this.stage.width()),this.registerEvents()}resize(t){this.width=t,this.height=this.context.getOptions().header.height,this.background.width(t),this.background.height(this.height),this.calculateHeader()}setOffset(t,e){this.offsetX!==t&&(this.offsetX=t,this.groupHeader.x(t),this.cellHeader.x(t),this.calculateHeader())}registerEvents(){this.context.event.on(y.ROW_HIGHLIGHT,t=>{this.highlightDate(t)}),this.context.event.on(y.ROW_UNHIGHLIGHT,t=>{this.unhighlightDate(t)}),this.context.event.on(y.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 T.Line({points:[0,n,this.width,n],stroke:o,strokeWidth:1})),this.layer.add(new T.Line({points:[0,this.height,this.width,this.height],stroke:o,strokeWidth:1}));const r=t.getTimeline();let h=0;for(let g=0;g<r.length;g++){const l=r[g],d=e*(((c=l.children)==null?void 0:c.length)??0);if(h+d<i){h+=d;continue}if(h>s)break;const p=this.createCell(`group-${l.date.format("YYYY-MM-DD")}`,h,0,d,n,o,l.label);if(this.groupHeader.add(p),O.isArray(l.children)&&l.children.length>0){let u=h;for(let x=0;x<l.children.length;){const b=l.children[x];let S=1;for(;l.children[x+S]&&b.label===l.children[x+S].label;)S++;if(x+=S,x>=l.children.length&&r[g+1]&&r[g+1].children){let M=0;for(;r[g+1].children[M]&&b.label===r[g+1].children[M].label;)r[g+1].children[M].hide=!0,M++;M>0&&(S+=M)}const v=e*S;if(u+v<i){u+=v;continue}if(u>s)break;const D=this.createCell(`cell-${b.date.format("YYYY-MM-DD")}`,u,n,v,n,b.hide?"transparent":o,b.hide?"":b.label);this.cellHeader.add(D),b.hide&&D.visible(!1),u+=v}}h+=d}this.layer.batchDraw()}createCell(t,e,i,s,n,o,r){const h=new T.Group;h.x(e),h.y(i);const c=new T.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"});h.add(c);let g=this.context.getOptions().header.fontSize;t.startsWith("cell-")&&(this.cellCache.set(t,c),g-=2);const l=new T.Line({points:[s,0,s,n],stroke:o,strokeWidth:1,name:"header-cell-right-border"});h.add(l);const d=new T.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 h.add(d),h}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(h=>{new T.Tween({node:h,fill:n,duration:.02}).play()}),t==="in"&&(i&&new T.Tween({node:i,fill:W(n).brighten(30).toHex(),duration:.02}).play(),s&&new T.Tween({node:s,fill:W(n).brighten(30).toHex(),duration:0}).play()))}}class be{constructor(t,e){a(this,"verticalLines");a(this,"horizontalLines");a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);a(this,"offsetY",0);this.context=t,this.layer=e,this.verticalLines=new T.Group({name:"vertical-grid-lines"}),this.horizontalLines=new T.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),h=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 l=r;l<=h;l++){const d=l*i,m=new T.Line({points:[d,t,d,o+t],stroke:this.context.getOptions().border.color,strokeWidth:.5,name:"vertical-grid-line"});this.verticalLines.add(m)}for(let l=c;l<=g;l++){const d=l*s+t,m=new T.Line({points:[0,d,Math.max(this.width,e),d],stroke:this.context.getOptions().border.color,strokeWidth:.5,name:"horizontal-grid-line"});this.horizontalLines.add(m)}}clearGrid(){this.verticalLines.destroyChildren(),this.horizontalLines.destroyChildren()}}const Ct='<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 Te{constructor(t,e,i,s,n){a(this,"offsetX",0);a(this,"offsetY",0);a(this,"sliderGroup");a(this,"slider");a(this,"sliderBar",null);a(this,"sliderType","");a(this,"leftHandleGroup",null);a(this,"rightHandleGroup",null);a(this,"progressGroup",null);a(this,"handlerWidth",10);a(this,"autoMoveTimer",null);a(this,"autoScrollTimer",null);a(this,"autoExpandTimer",null);a(this,"EDGE_THRESHOLD",20);a(this,"SCROLL_STEP",5);a(this,"MOVE_INTERVAL",1e3/60);a(this,"AUTO_EXPAND_INTERVAL",500);a(this,"isDragging",!1);a(this,"draggingDirection","none");a(this,"oldTasks",[]);this.context=t,this.x=e,this.y=i,this.task=s,this.rowWidth=n,this.sliderGroup=new T.Group({x:e,y:i,id:`chart-slider-bar-${s.id}`}),this.render(),this.bindEvents()}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)}render(){var p,u,x,b,S,v,E,D,M,k,w,H,_;if(!this.task.startTime||!this.task.endTime)return;if(this.task.endTime.isBefore(this.task.startTime)){L.error("The endTime of the current task is earlier than the startTime.",this.task);return}const t=this.context.getOptions().row.height,e=K(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,h=tt(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,l=this.unpackFunc(this.context.getOptions().bar.shadowOffsetX)||0,d=this.unpackFunc(this.context.getOptions().bar.shadowOffsetY)||0;this.slider||(this.slider=new T.Group({dragBoundFunc:A=>{let I=0,R=Math.abs(this.rowWidth-this.slider.width());if(this.context.getOptions().bar.move.link.parent==="strict"&&this.task.parent){if(this.task.parent.startTime){const Y=this.task.parent.startTime;I=this.context.store.getTimeAxis().getTimeLeft(Y)}if(this.task.parent.endTime){const Y=this.task.parent.endTime,U=this.context.store.getTimeAxis().getTimeLeft(Y);R=Math.abs(U-this.slider.width())}}return{x:G(A.x,I,R),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);if(this.slider.draggable(m),this.slider.on("mouseover",A=>{m&&!this.isDragging&&(A.target.getStage().container().style.cursor="grab"),this.handleBarHighlight({shadowColor:W(c).alpha(W(c).alpha()+.1).toHex(),shadowBlur:Math.max((g||1)*2,4),shadowOffsetX:Math.max(l||1,2),shadowOffsetY:Math.max((d||1)*1.5,4)}),this.context.event.emit(y.SLIDER_HOVER,A.evt,this.task)}),this.slider.on("mouseout",A=>{m&&!this.isDragging&&(A.target.getStage().container().style.cursor="default"),this.handleBarHighlight({shadowColor:c,shadowBlur:g,shadowOffsetX:l,shadowOffsetY:d}),this.context.event.emit(y.SLIDER_LEAVE,A.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 A=this.unpackFunc(this.context.getOptions().milestone.size),I=Math.min(A||e,t/2),R=this.unpackFunc(this.context.getOptions().milestone.color)||r,z=this.unpackFunc(this.context.getOptions().milestone.border.color),Y=this.unpackFunc(this.context.getOptions().milestone.border.width),U=this.unpackFunc(this.context.getOptions().milestone.shape);if(!this.sliderBar){switch(U){case"triangle":this.sliderBar=new T.RegularPolygon({sides:3,radius:I,rotation:0,fill:R,stroke:z,strokeWidth:Y,y:I/3*2});break;case"circle":this.sliderBar=new T.Circle({radius:I,fill:R,stroke:z,strokeWidth:Y,y:I/2});break;case"star":this.sliderBar=new T.Star({numPoints:5,innerRadius:I/2,outerRadius:I,fill:R,stroke:z,strokeWidth:Y,y:I/2});break;case"diamond":default:this.sliderBar=new T.RegularPolygon({sides:4,radius:I,rotation:0,fill:R,stroke:z,strokeWidth:Y,y:I/2})}if(this.slider.add(this.sliderBar),this.unpackFunc(this.context.getOptions().milestone.label.show)){const $=this.unpackFunc(this.context.getOptions().milestone.label.text),X=this.unpackFunc(this.context.getOptions().milestone.label.position),Q=this.unpackFunc(this.context.getOptions().milestone.label.fontSize),$e=this.unpackFunc(this.context.getOptions().milestone.label.fontFamily),Fe=this.unpackFunc(this.context.getOptions().milestone.label.color),it=new T.Text({height:e,text:$,fill:Fe||R,fontSize:Q,fontFamily:$e}),lt=it.measureSize($);it.width(lt.width);const V={x:0,y:0};switch(X){case"top-left":V.x=-(12+lt.width),V.y=-8;break;case"bottom-left":V.x=-(12+lt.width),V.y=10;break;case"bottom-right":V.x=12,V.y=10;break;case"top-right":default:V.x=12,V.y=-8;break}it.setAttrs(V),this.slider.add(it)}}this.sliderType="milestone"}else{this.sliderBar&&this.sliderType!=="bar"&&(this.slider.destroyChildren(),this.sliderBar=null),this.sliderBar||(this.sliderBar=new T.Rect({x:0,y:0}),this.slider.add(this.sliderBar),this.sliderType="bar"),this.sliderBar.setAttrs({width:o,height:e,fill:r,cornerRadius:h}),this.renderProgress(o,e);const A=(p=this.context.getOptions().bar.move.single)==null?void 0:p.icon,I=(u=this.context.getOptions().bar.move.single)==null?void 0:u.backgroundColor,R=I?W(I).alpha(((x=this.context.getOptions().bar.move.single)==null?void 0:x.opacity)??1).toHex():W(r).brighten(30*(this.unpackFunc((b=this.context.getOptions().bar.progress)==null?void 0:b.show)?-1:1)).alpha(((S=this.context.getOptions().bar.move.single)==null?void 0:S.opacity)??1).toHex();if(!!this.unpackFunc((v=this.context.getOptions().bar.move.single)==null?void 0:v.left)){if(!this.leftHandleGroup){this.leftHandleGroup=new T.Group({x:0,y:0,opacity:0}),this.slider.add(this.leftHandleGroup),this.leftHandleGroup.on("mousedown",$=>{this.resizeMove($,"left")}),this.leftHandleGroup.on("mouseover",$=>{setTimeout(()=>{$.target.getStage().container().style.cursor="ew-resize"},0)}),this.leftHandleGroup.on("mouseout",$=>{this.isDragging||($.target.getStage().container().style.cursor="default")});const U=new T.Rect({x:0,y:0});this.leftHandleGroup.add(U),A!==null&&ut(A||Ct,this.handlerWidth,e).then($=>{var Q;const X=new T.Image({image:$,x:0,y:(e-this.handlerWidth)/2,width:this.handlerWidth,height:this.handlerWidth});(Q=this.leftHandleGroup)==null||Q.add(X)})}(E=this.leftHandleGroup.findOne("Rect"))==null||E.setAttrs({width:this.handlerWidth,height:e,fill:R,cornerRadius:[h[0],0,0,h[3]]}),(D=this.leftHandleGroup.findOne("Image"))==null||D.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 T.Group({x:0,y:0,opacity:0}),this.slider.add(this.rightHandleGroup),this.rightHandleGroup.on("mousedown",$=>{this.resizeMove($,"right")}),this.rightHandleGroup.on("mouseover",$=>{setTimeout(()=>{$.target.getStage().container().style.cursor="ew-resize"},0)}),this.rightHandleGroup.on("mouseout",$=>{this.isDragging||($.target.getStage().container().style.cursor="default")});const U=new T.Rect({x:0,y:0});this.rightHandleGroup.add(U),A!==null&&ut(A||Ct,this.handlerWidth,e).then($=>{var Q;const X=new T.Image({image:$,x:o-this.handlerWidth,y:(e-this.handlerWidth)/2,width:this.handlerWidth,height:this.handlerWidth});(Q=this.rightHandleGroup)==null||Q.add(X)})}(k=this.rightHandleGroup.findOne("Rect"))==null||k.setAttrs({x:o-this.handlerWidth,width:this.handlerWidth,height:e,fill:R,cornerRadius:[0,h[1],h[2],0]}),(w=this.rightHandleGroup.findOne("Image"))==null||w.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),(H=this.leftHandleGroup)==null||H.moveToTop(),(_=this.rightHandleGroup)==null||_.moveToTop()}this.isDragging||this.sliderBar.setAttrs({shadowColor:c,shadowBlur:g,shadowOffsetX:l,shadowOffsetY:d}),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(h=>h.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 h=new T.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(h)}}renderProgress(t,e){var i,s,n,o,r,h,c,g,l,d,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=Rt(this.task.progress,((s=this.context.getOptions().bar.progress)==null?void 0:s.targetVal)??100);if(u===0)return;const x=this.unpackFunc(this.context.getOptions().bar.backgroundColor)||this.context.getOptions().primaryColor,b=this.unpackFunc((n=this.context.getOptions().bar.progress)==null?void 0:n.backgroundColor)||W(x).brighten(((o=this.context.getOptions().bar.progress)==null?void 0:o.amount)||30).toHex(),S=tt(this.unpackFunc(this.context.getOptions().bar.radius)),v=tt(this.unpackFunc((r=this.context.getOptions().bar.progress)==null?void 0:r.radius),2);v[0]=S[0],v[3]=S[3],u===1&&(v[1]=S[1],v[2]=S[2]);const E=t*u;this.progressGroup?(this.progressGroup.width(E),this.progressGroup.destroyChildren()):(this.progressGroup=new T.Group({x:0,y:0,width:E,height:e,listening:!1}),this.slider.add(this.progressGroup));const D=new T.Rect({x:0,y:0,width:E,height:e,fill:b,cornerRadius:v,opacity:this.unpackFunc((h=this.context.getOptions().bar.progress)==null?void 0:h.opacity)});this.progressGroup.add(D);const M=`${ot(u*100,(c=this.context.getOptions().bar.progress)==null?void 0:c.decimal)}%`,k=new T.Text().measureSize(M).width,w=this.unpackFunc((g=this.context.getOptions().bar.progress)==null?void 0:g.textAlign),H=new T.Text({x:0,y:w==="top"?-e:0,width:w==="right"?E+k:Math.max(E,k),height:e,fill:this.unpackFunc((l=this.context.getOptions().bar.progress)==null?void 0:l.color)||W("#000000").mix(b,50).alpha(.7).toHex(),text:M,fontSize:this.unpackFunc((d=this.context.getOptions().bar.progress)==null?void 0:d.fontSize)||10,fontStyle:this.unpackFunc((m=this.context.getOptions().bar.progress)==null?void 0:m.fontStyle)||"italic",fontFamily:"Arial",verticalAlign:w==="top"?"bottom":"middle",align:"right"});(p=this.progressGroup)==null||p.add(H)}}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&&(e.container().style.cursor="grabbing")}),this.slider.on("mouseup",t=>{if(t.evt.button!==0)return;const e=t.target.getStage();e&&(e.container().style.cursor="grab")}),this.slider.on("click",t=>{t.evt.button===0&&(t.cancelBubble=!0,this.isDragging=!1,this.context.event.emit(y.SLIDER_CLICK,t.evt,this.task))}),this.slider.on("contextmenu",t=>{t.cancelBubble=!0,t.evt.stopPropagation(),t.evt.preventDefault(),this.context.event.emit(y.SLIDER_CONTEXTMENU,t.evt,this.task)}),this.slider.on("dblclick",t=>{t.evt.button===0&&(t.cancelBubble=!0,this.context.event.emit(y.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();e&&(this.isDragging=!0,this.oldTasks=[],this.context.event.emit(y.SLIDER_MOVING,!0),e.container().style.cursor="grabbing",this.handleMove(t,e))}handleDragMove(t){if(!this.isDragging)return;if(t.evt.movementX>0?this.draggingDirection="right":t.evt.movementX<0&&(this.draggingDirection="left"),!!this.context.getOptions().bar.move.byUnit){const i=t.target.x(),s=this.context.store.getTimeAxis().getCellWidth(),n=dt(i,s);t.target.x(n)}}handleDragEnd(t){this.stopAutoMove(),this.stopAutoScroll(),this.stopAutoExpand(),this.isDragging=!1,this.draggingDirection="none",this.oldTasks.length>0&&(this.context.event.emit(y.TASK_DRAG_END,this.task,this.oldTasks),this.oldTasks=[]),this.context.event.emit(y.SLIDER_MOVING,!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();this.autoMoveTimer=window.setInterval(()=>{const r=t.target.width(),h=t.target.x()-this.offsetX,c=h+r,g=-this.offsetX,l=g+i,d=h<=g-this.offsetX+this.EDGE_THRESHOLD,m=c>=l-this.offsetX-this.EDGE_THRESHOLD;if(d)if(g<=0)t.target.x(0),this.stopAutoScroll(),s||(this.draggingDirection==="left"?this.startAutoExpand("left"):this.stopAutoExpand());else if(this.draggingDirection==="left"){const p=n?-o:-this.SCROLL_STEP;this.startAutoScroll(p,n,()=>{t.target.x(t.target.x()+p)})}else this.stopAutoScroll();else if(m)if(l>=this.context.store.getTimeAxis().getTotalWidth())t.target.x(this.context.store.getTimeAxis().getTotalWidth()-r),this.stopAutoScroll(),s||(this.draggingDirection==="right"?this.startAutoExpand("right"):this.stopAutoExpand());else if(this.draggingDirection==="right"){const p=n?o:this.SCROLL_STEP;this.startAutoScroll(p,n,()=>{t.target.x(t.target.x()+p)})}else this.stopAutoScroll();else this.stopAutoExpand(),this.stopAutoScroll();this.emitUpdate("both")},this.MOVE_INTERVAL)}resizeMove(t,e){var x;t.cancelBubble=!0;const i=t.target.getStage();if(!i)return;this.isDragging=!0,this.context.event.emit(y.SLIDER_MOVING,!0);let s=((x=i.getPointerPosition())==null?void 0:x.x)||0;const n=!!this.context.getOptions().bar.move.byUnit,o=this.context.store.getTimeAxis().getCellWidth(),r=!!this.context.getOptions().bar.move.lock,h=i.width();let c=0,g=0;this.autoMoveTimer=window.setInterval(()=>{const b=this.slider.width(),S=this.slider.x(),v=S+b,E=-this.offsetX,D=E+h,M=S<=E+this.EDGE_THRESHOLD,k=v>=D-this.EDGE_THRESHOLD;if(M&&e==="left"){if(E<=0)this.slider.x(0),this.stopAutoScroll(),r||(this.draggingDirection==="left"?this.startAutoExpand("left"):this.stopAutoExpand());else if(this.draggingDirection==="left"){const w=n?-o:-this.SCROLL_STEP;this.startAutoScroll(w,n,()=>{c+=w,this.slider.x(this.slider.x()+w)})}else this.stopAutoScroll();this.emitUpdate("left")}else if(k&&e==="right"){if(D>=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 w=n?o:this.SCROLL_STEP;this.startAutoScroll(w,n,()=>{g+=w,this.slider.x(this.slider.x()+w)})}else this.stopAutoScroll();this.emitUpdate("right")}else if(e==="right"&&S<=E&&v<=E+this.EDGE_THRESHOLD+o){const w=n?-o:-this.SCROLL_STEP;this.startAutoScroll(w,n,()=>{g+=w,this.slider.width(Math.max(this.slider.width(),o)),this.slider.width()>o&&this.slider.x(this.slider.x()+w),this.emitUpdate("right")})}else if(e==="left"&&v>=D&&S>=D-this.EDGE_THRESHOLD-o){const w=n?o:this.SCROLL_STEP;this.startAutoScroll(w,n,()=>{c+=w,this.slider.width(Math.max(this.slider.width(),o)),this.slider.width()>o&&this.slider.x(this.slider.x()+w),this.emitUpdate("left")})}else this.stopAutoExpand(),this.stopAutoScroll()},this.MOVE_INTERVAL);let l;const d=this.slider.x(),m=this.slider.width(),p=b=>{var E;b.movementX>0?this.draggingDirection="right":b.movementX<0&&(this.draggingDirection="left");const S=Math.max(((E=i.getPointerPosition())==null?void 0:E.x)||0,0);let v=S-s;n&&(v=dt(v,o)),(l===void 0||l!==v)&&(e==="left"?m-v-c>=o&&S<h-this.EDGE_THRESHOLD&&(this.slider.width(m-v-c),this.slider.x(d+v+c),this.emitUpdate("left")):m+v+g>=o&&S>this.EDGE_THRESHOLD&&(this.slider.width(m+v+g),this.emitUpdate("right")),l=v)},u=()=>{this.handleDragEnd(t),document.removeEventListener("mousemove",p),document.removeEventListener("mouseup",u)};document.addEventListener("mousemove",p),document.addEventListener("mouseup",u)}startAutoExpand(t){if(this.autoExpandTimer)return;const e=this.context.store.getTimeAxis();this.autoExpandTimer=window.setInterval(()=>{e.expand(t,1),this.context.event.emit(y.CHART_OFFSET_CHANGE),t==="left"&&this.slider.x(0)},this.AUTO_EXPAND_INTERVAL)}startAutoScroll(t,e,i){if(this.autoScrollTimer)return;const s=this.context.getScrollbar();s&&(this.autoScrollTimer=window.setInterval(()=>{const n=s.getScrollPosition();s.scrollTo({x:n.x+t,y:n.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.handleResizeHighlight(0)}handleResizeHighlight(t){this.leftHandleGroup&&new T.Tween({node:this.leftHandleGroup,opacity:t,duration:.2}).play(),this.rightHandleGroup&&new T.Tween({node:this.rightHandleGroup,opacity:t,duration:.2}).play()}handleBarHighlight(t){this.sliderBar&&new T.Tween({...t,node:this.sliderBar,duration:.2}).play()}}class ve{constructor(t,e,i,s,n,o,r){a(this,"row");a(this,"slider");a(this,"cacheKey","");this.context=t,this.task=e,this.width=o,this.height=r,this.row=new T.Group;const h=new T.Rect({x:s,y:n,width:o,height:r,id:i,listening:!1});this.row.add(h),this.slider=new Te(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 Se{constructor(t,e,i,s){a(this,"rowsGroup");a(this,"rowsCache",new Map);a(this,"rowBgGroup");a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);a(this,"offsetY",0);a(this,"highlightedRowId",null);a(this,"highlightRect",null);a(this,"selectedRowId",null);a(this,"selectedRect",null);this.context=t,this.stage=e,this.layer=i,this.bgLayer=s,this.rowsGroup=new T.Group({name:"chart-body-rows"}),this.layer.add(this.rowsGroup),this.rowBgGroup=new T.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){const e=this.context.getOptions().row.height,i=q();this.rowBgGroup.destroyChildren(),t.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 ve(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 T.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(y.ROW_HIGHLIGHT,t=>{this.highlightRow(t)}),this.context.event.on(y.ROW_UNHIGHLIGHT,t=>{this.unhighlightRow(t)}),this.context.event.on(y.TASK_SELECTED,t=>{this.selectRow(t.id)}),this.context.event.on(y.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(y.ROW_UNHIGHLIGHT,this.highlightedRowId),i&&this.context.event.emit(y.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){if(this.context.store.getDataManager().isTaskSelected(i.id))return;this.context.store.getDataManager().selectTask(i.id),this.context.event.emit(y.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(y.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(y.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)return;this.highlightedRowId=t;const e=this.rowsCache.get(`chart-row-${t}`);if(!e)return;this.highlightRect&&this.highlightRect.destroy();const s=e.task.flatIndex*this.context.getOptions().row.height+this.context.getOptions().header.height;this.selectedRowId!==t&&(this.highlightRect=new T.Rect({x:0,y:s+this.offsetY,width:this.width,height:this.context.getOptions().row.height,fill:W(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 s=e.task.flatIndex*this.context.getOptions().row.height+this.context.getOptions().header.height;this.highlightRect.y(s+this.offsetY)}this.layer.batchDraw()}clearHighlight(){this.highlightRect&&(this.highlightRect.destroy(),this.highlightRect=null),this.highlightedRowId=null}selectRow(t){var n;this.selectedRowId=t;const e=this.rowsCache.get(`chart-row-${t}`);if(!e)return;this.selectedRect&&this.selectedRect.destroy(),this.selectedRowId===this.highlightedRowId&&((n=this.highlightRect)==null||n.fill("transparent"));const s=e.task.flatIndex*this.context.getOptions().row.height+this.context.getOptions().header.height;this.selectedRect=new T.Rect({x:0,y:s+this.offsetY,width:this.width,height:this.context.getOptions().row.height,fill:W(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 Dt{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 h,c;o===0?(h=n,c=i+n):o===90?(h=i+n,c=n):(h=Math.abs(Math.ceil((i+n)/Math.sin(r))),c=Math.abs(Math.ceil((i+n)/Math.cos(r))));const g=new T.Stage({container:document.createElement("div"),width:h,height:c}),l=new T.Layer;g.add(l);const d=new T.Group;if(o===0||o===90){const p=new T.Line({points:[0,0,o===0?h:0,o===0?0:c],stroke:e,strokeWidth:i,perfectDrawEnabled:!0});d.add(p)}else for(let p=-h;p<h*2;p+=h){const u=p+i/2,x=0,b=p+i/2+(Math.cos(r)<0?-h:h),S=c,v=new T.Line({points:[Math.ceil(u),Math.ceil(x),Math.ceil(b),Math.ceil(S)],stroke:e,strokeWidth:i,perfectDrawEnabled:!0,lineCap:"square",lineJoin:"miter"});d.add(v)}l.add(d),l.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=W(e),h=new T.Stage({container:document.createElement("div"),width:n,height:o}),c=new T.Layer;h.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(d=>{const m=new T.Circle({x:d.x,y:d.y,radius:i/2,fill:r.toString()});c.add(m)}),c.draw();const l=new Image;return l.src=h.toDataURL(),h.destroy(),l}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,h=new T.Stage({container:document.createElement("div"),width:o,height:r}),c=new T.Layer;h.add(c);const g=new T.Group;g.add(new T.Line({points:[0,0,o,r],stroke:e,strokeWidth:i,perfectDrawEnabled:!0})),g.add(new T.Line({points:[0,r,o,0],stroke:e,strokeWidth:i,perfectDrawEnabled:!0})),c.add(g),c.draw();const l=new Image;return l.src=h.toDataURL(),h.destroy(),l}}class ke{constructor(t,e){a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);a(this,"offsetY",0);a(this,"weekendGroup");a(this,"patternImage",null);this.context=t,this.layer=e,this.weekendGroup=new T.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,h=this.context.store.getDataManager().getVisibleSize()*o,c=Math.max(0,-this.offsetX),g=c+this.width;for(let l=t;l<=e;){let d=s;if(d=s*2*(i==="day"?1:24),this.isWeekend(l)){const m=this.context.store.getTimeAxis().getTimeLeft(l),p=n,u=h;if(m+d<c){l=l.add(2,"day");continue}if(m>g)break;!this.patternImage&&this.context.getOptions().weekend.pattern&&(this.patternImage=await Dt.createPattern(this.context.getOptions().weekend));const b=new T.Rect({name:"weekend-rect",x:m,y:p,width:d,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(b),l=l.add(2,"day")}else l=l.add(1,"day")}this.layer.batchDraw()}}class Me{constructor(t,e,i){a(this,"arrowAnimation");a(this,"todayLine");a(this,"triangle");a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);a(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(){const t=Object.assign({show:!0,type:"line",backgroundColor:W("lightblue").toHex(),opacity:1,width:1},this.context.getOptions().today||{});if(!t.show)return;let e=C();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=W(t.backgroundColor).alpha(t.opacity).toHex(),h=(t.type==="block"?s+n/2:s)+this.offsetX,c=[h,o,h,this.height],g=t.type==="line"?t.width:n;this.todayLine?(this.todayLine.points(c),this.todayLine.stroke(r),this.todayLine.strokeWidth(g)):(this.todayLine=new T.Line({points:c,stroke:r,strokeWidth:g}),this.bgLayer.add(this.todayLine)),t.type==="line"&&(this.triangle?(this.triangle.x(h),this.triangle.fill(r)):(this.triangle=new T.RegularPolygon({x:h,y:o-8,sides:3,radius:8,fill:r,rotation:180,name:"today-triangle"}),this.arrowAnimation=new T.Animation(l=>{var m;const d=Math.sin(l.time*4*Math.PI/2e3)+o-8;(m=this.triangle)==null||m.y(d)},this.headerLayer),this.headerLayer.add(this.triangle),this.triangle.moveToTop(),this.arrowAnimation.start())),this.bgLayer.batchDraw()}destroy(){var t,e,i;(t=this.todayLine)==null||t.destroy(),(e=this.triangle)==null||e.destroy(),(i=this.arrowAnimation)==null||i.stop(),this.arrowAnimation=void 0}}class Oe{constructor(t,e){a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);a(this,"offsetY",0);a(this,"holidayGroup");a(this,"patternImage",new WeakMap);this.context=t,this.layer=e,this.holidayGroup=new T.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.holidayGroup.y(e),this.calculateHoliday()}render(){this.layer.batchDraw()}destroy(){this.holidayGroup.destroy()}clearHoliday(){this.holidayGroup.destroyChildren()}async calculateHoliday(){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,h=this.context.getOptions().row.height,g=this.context.store.getDataManager().getVisibleSize()*h;for(let l=s;l<=n;l=l.add(1,"day")){const d=t.find(m=>{if(O.isArray(m.date)){if(m.date.some(p=>C(p).isSame(l,"day")))return m}else if(C(m.date).isSame(l,"day"))return m});if(d){const m=this.context.store.getTimeAxis().getTimeLeft(l),p=r,u=g;if(m+o<e)continue;if(m>i)break;!this.patternImage.has(d)&&(d.pattern||this.context.getOptions().holiday.pattern)&&this.patternImage.set(d,await Dt.createPattern({backgroundColor:this.context.getOptions().primaryColor,...d,...this.context.getOptions().holiday}));const b=new T.Rect({name:"holiday-rect",x:m,y:p,width:o,height:u,...this.patternImage.get(d)?{fillPatternImage:this.patternImage.get(d)??void 0,fillPatternRepeat:"repeat",fillPatternOffset:{x:0,y:0},fillPatternScale:{x:1,y:1},opacity:d.opacity||this.context.getOptions().holiday.opacity}:{fill:d.backgroundColor||this.context.getOptions().holiday.backgroundColor||this.context.getOptions().primaryColor,opacity:d.opacity||this.context.getOptions().holiday.opacity}});this.holidayGroup.add(b)}}this.layer.batchDraw()}}class Ee{constructor(t,e,i){a(this,"tasks",[]);a(this,"pointGroup");a(this,"linksGroup");a(this,"templateArrow");a(this,"isDragging",!1);a(this,"isSliderMoving",!1);a(this,"selectedMap",new Map);a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);a(this,"offsetY",0);this.context=t,this.stage=e,this.layer=i,this.linksGroup=new T.Group({name:"links-group"}),this.pointGroup=new T.Group({name:"point-group"}),this.templateArrow=new T.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(y.ROW_HIGHLIGHT,t=>{this.highlightPoint(t)}),this.context.event.on(y.ROW_UNHIGHLIGHT,t=>{this.unhighlightPoint(t)}),this.context.event.on(y.SLIDER_MOVING,t=>{this.isSliderMoving=t})}resize(t,e){this.width=t,this.height=e,this.calculateLinks(),this.calculatePoints()}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),this.calculateLinks(),this.calculatePoints()}update(){this.calculateLinks(),this.calculatePoints()}render(t){this.tasks=t,this.update()}destroy(){this.linksGroup.destroy(),this.pointGroup.destroy(),this.templateArrow.destroy(),this.selectedMap.clear()}calculatePoints(){if(this.pointGroup.destroyChildren(),!this.context.getOptions().links.create.enabled)return;const t=this.context.getOptions().header.height,e=this.context.getOptions().row.height,i=e/2+t,s=this.context.getOptions().links.create.radius,n=this.context.getOptions().links.create.mode==="always"?.5:0,o=this.context.getOptions().links.create.color||this.context.getOptions().primaryColor,r=W(o).alpha(this.context.getOptions().links.create.opacity??1).toHex(),h=this.context.getOptions().links.create.width;this.tasks.forEach(c=>{if(this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.show,c)&&this.context.store.getDataManager().isTaskVisible(c)&&c.startTime&&c.endTime){const g=this.context.store.getTimeAxis().getTimeLeft(c.startTime),l=this.context.store.getTimeAxis().getTimeLeft(c.endTime);let d=this.context.getOptions().links.gap;c.isMilestone()&&(d+=e/2);const m=i+e*c.flatIndex;let p=!0,u=!0,x=this.context.store.getOptionManager().unpackFunc(this.context.getOptions().links.create.from,c);if(O.isBoolean(x)?p=u=x:O.isString(x)&&(p=x==="S",u=x==="F"),p){const b=new T.Circle({id:`point-${c.id}-left`,x:g-d,y:m,radius:s,opacity:n,stroke:r,strokeWidth:h});this.pointGroup.add(b),b.on("mousedown",S=>{this.isDragging=!0,this.createLink(S,"S",o,[g-d,m],c.id)}),b.on("mouseover",S=>{this.isSliderMoving||(this.stage.container().style.cursor="pointer")}),b.on("mouseout",S=>{this.isDragging||this.isSliderMoving||(this.stage.container().style.cursor="default")})}if(u){const b=new T.Circle({id:`point-${c.id}-right`,x:l+d,y:m,radius:s,opacity:n,stroke:r,strokeWidth:h});this.pointGroup.add(b),b.on("mousedown",S=>{this.isDragging=!0,this.createLink(S,"F",o,[l+d,m],c.id)}),b.on("mouseover",S=>{this.isSliderMoving||(this.stage.container().style.cursor="pointer")}),b.on("mouseout",S=>{this.isDragging||this.isSliderMoving||(this.stage.container().style.cursor="default")})}}})}calculateLinks(){if(this.linksGroup.destroyChildren(),!this.context.getOptions().links.show)return;const t=this.context.getOptions().links.data,e=this.context.getOptions().row.height,i=[];t.forEach(s=>{const n=this.createId(s);this.selectedMap.has(n)&&i.push(n)}),this.selectedMap.forEach((s,n)=>{i.includes(n)||this.selectedMap.delete(n)}),t.forEach(s=>{var r,h,c;const n=this.context.store.getDataManager().getTaskById(s.from),o=this.context.store.getDataManager().getTaskById(s.to);if(n||L.warn(`No corresponding FROM task [${s.from}] was found for the link. Info:`,s),o||L.warn(`No corresponding TO task [${s.to}] was found for the link. Info:`,s),n&&this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.show,n)&&this.context.store.getDataManager().isTaskVisible(n)&&n.startTime&&n.endTime&&o&&this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.show,o)&&this.context.store.getDataManager().isTaskVisible(o)&&o.startTime&&o.endTime){const g=n.isMilestone()?e/2:0,l=this.context.store.getTimeAxis().getTimeLeft(n.startTime)-g,d=this.context.store.getTimeAxis().getTimeLeft(n.endTime)+g,m=o.isMilestone()?e/2:0,p=this.context.store.getTimeAxis().getTimeLeft(o.startTime)-m,u=this.context.store.getTimeAxis().getTimeLeft(o.endTime)+m;let x=[];switch(s.type||"FS"){case"FF":x=this.createFF(s,n,o,l,d,p,u);break;case"SS":x=this.createSS(s,n,o,l,d,p,u);break;case"SF":x=this.createSF(s,n,o,l,d,p,u);break;case"FS":default:x=this.createFS(s,n,o,l,d,p,u)}if(x.length<=2)L.warn("The link position has some error.",s);else{const S=this.createId(s),v=s.radius??this.context.getOptions().links.radius,E=((r=s.arrow)==null?void 0:r.width)??this.context.getOptions().links.arrow.width,D=((h=s.arrow)==null?void 0:h.height)??this.context.getOptions().links.arrow.height,M=s.width??this.context.getOptions().links.width,k=new T.Group({id:S}),w=new T.Circle({radius:v,fill:s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,x:x[0],y:x[1]});k.add(w),w.on("mousedown",_=>{this.handleDrag(_,s,"S",[x[x.length-2],x[x.length-1]],S)});const H=new T.Arrow({points:x,stroke:s.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,strokeWidth:M,pointerLength:D,pointerWidth:E,fill:((c=s.arrow)==null?void 0:c.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});k.add(H),H.on("mousedown",_=>{this.handleDrag(_,s,"F",[x[0],x[1]],S)}),this.linksGroup.add(k),k.on("mouseover",_=>{_.target.moveToTop(),this.stage.container().style.cursor="pointer",this.selectedMap.has(S)||this.handleHighlight(k,v,E,D,M,2)}),k.on("mouseout",_=>{this.selectedMap.has(S)||this.handleHighlight(k,v,E,D,M,0),!this.isDragging&&(this.stage.container().style.cursor="default")}),k.on("mousedown",_=>{this.isDragging=!0}),k.on("click",_=>{_.cancelBubble=!0,this.isDragging=!1,_.target.moveToTop(),_.evt.button===0?this.selectedMap.has(S)?(this.selectedMap.delete(S),this.context.event.emit(y.SELECT_LINK,null,s,this.selectedMap.values().toArray())):(this.selectedMap.set(S,s),this.context.event.emit(y.SELECT_LINK,s,null,this.selectedMap.values().toArray())):_.evt.button===2&&this.context.event.emit(y.CONTEXT_LINK,_.evt,s)}),this.selectedMap.has(S)&&this.handleHighlight(k,v,E,D,M,2,!0)}}})}createId(t){return`link-group-${t[this.context.getOptions().links.key]}-${t.from}-${t.to}-${t.type||"FS"}`}createFS(t,e,i,s,n,o,r){const h=this.context.getOptions().header.height,c=this.context.getOptions().row.height,g=c/2+h,l=t.gap||this.context.getOptions().links.gap,d=[n+l,.05+g+c*e.flatIndex];{const m=t.distance?parseInt(t.distance):this.context.getOptions().links.distance;if(isNaN(m))L.error("Link's distance must be a Numeric");else{const p=n+l+m,u=o-l-m,x=[Math.max(p,u),g+c*e.flatIndex];d.push(...x);const b=c*e.flatIndex+h+(e.flatIndex<=i.flatIndex?c:0);d.push(x[0],b),d.push(u,b),d.push(u,g+c*i.flatIndex)}}return d.push(o-l,g+c*i.flatIndex),d}createFF(t,e,i,s,n,o,r){const h=this.context.getOptions().header.height,c=this.context.getOptions().row.height,g=c/2+h,l=t.gap||this.context.getOptions().links.gap,d=[n+l,.05+g+c*e.flatIndex];{const m=t.distance?parseInt(t.distance):this.context.getOptions().links.distance;if(isNaN(m))L.error("Link's distance must be a Numeric");else{const p=n+l+m,u=r+l+m,x=[p<=u?u:p,g+c*e.flatIndex];d.push(...x),d.push(Math.max(u,p),g+c*i.flatIndex)}}return d.push(r+l,g+c*i.flatIndex),d}createSS(t,e,i,s,n,o,r){const h=this.context.getOptions().header.height,c=this.context.getOptions().row.height,g=c/2+h,l=t.gap||this.context.getOptions().links.gap,d=[s-l,.05+g+c*e.flatIndex];{const m=t.distance?parseInt(t.distance):this.context.getOptions().links.distance;if(isNaN(m))L.error("Link's distance must be a Numeric");else{const p=s-l-m,u=o-l-m;d.push(Math.min(u,p),g+c*e.flatIndex),d.push(Math.min(u,p),g+c*i.flatIndex)}}return d.push(o-l,g+c*i.flatIndex),d}createSF(t,e,i,s,n,o,r){const h=this.context.getOptions().header.height,c=this.context.getOptions().row.height,g=c/2+h,l=t.gap||this.context.getOptions().links.gap,d=[s-l,.05+g+c*e.flatIndex];{const m=t.distance?parseInt(t.distance):this.context.getOptions().links.distance;if(isNaN(m))L.error("Link's distance must be a Numeric");else{const p=s-l-m,u=r+l+m,x=[Math.min(p,u),g+c*e.flatIndex];d.push(...x);const b=c*e.flatIndex+h+(e.flatIndex<=i.flatIndex?c:0);d.push(x[0],b),d.push(u,b),d.push(u,g+c*i.flatIndex)}}return d.push(r+l,g+c*i.flatIndex),d}handleDrag(t,e,i,s,n){var u,x,b;if(!this.isDragging)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:((u=e.arrow)==null?void 0:u.height)??this.context.getOptions().links.arrow.height,pointerWidth:((x=e.arrow)==null?void 0:x.width)??this.context.getOptions().links.arrow.width,fill:((b=e.arrow)==null?void 0:b.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 h=this.context.getOptions().header.height,c=this.context.getOptions().row.height,g=c/2+h,l=e.gap||this.context.getOptions().links.gap;let d=null;const m=()=>{const S=this.stage.getPointerPosition();if(!S||(d=this.getTaskByPosition(S),!d))return;const{allowLeft:v,allowRight:E}=this.isAllowDrop(d,e.from);if(this.templateArrow.visible(!0),o==null||o.visible(!1),d!=null&&d.startTime&&(d!=null&&d.endTime)){const D=this.context.store.getTimeAxis().getTimeLeft(d.startTime),M=this.context.store.getTimeAxis().getTimeLeft(d.endTime),k=(M+D)/2+this.offsetX;let w=D-l;S.x<=k?r="S":(r="F",w=M+l),i==="S"?(this.templateArrow.points([w,g+c*d.flatIndex,...s]),E?this.stage.container().style.cursor="pointer":this.stage.container().style.cursor="not-allowed"):i==="F"&&(this.templateArrow.points([...s,w,g+c*d.flatIndex]),v?this.stage.container().style.cursor="pointer":this.stage.container().style.cursor="not-allowed")}},p=()=>{var E,D;let S;const v=O.cloneDeep(e);if(r&&d&&(i==="S"?(S=`${r}${(e.type||"FS")[1]}`,v.from=d.id):i==="F"&&(S=`${(e.type||"FS")[0]}${r}`,v.to=d.id)),S&&d&&!(v.from===v.to&&["FF","SS"].includes(S))){const{allowLeft:M,allowRight:k}=this.isAllowDrop(d,v.from);v.type=S,((E=v.type)==null?void 0:E.slice(1))==="S"&&M||((D=v.type)==null?void 0:D.slice(1))==="F"&&k?this.context.event.emit(y.UPDATE_LINK,v):(this.context.event.emit(y.ERROR,j.LINK_NOT_ALLOWED),this.calculateLinks())}else this.context.event.emit(y.ERROR,j.LINK_SAME),this.calculateLinks();this.templateArrow.visible(!1),this.stage.container().style.cursor="default",this.isDragging=!1,document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",p)};document.addEventListener("mousemove",m),document.addEventListener("mouseup",p)}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);let o=null;const r=this.context.getOptions().header.height,h=this.context.getOptions().row.height,c=h/2+r,g=this.context.getOptions().links.gap;let l=null;const d=()=>{const p=this.stage.getPointerPosition();if(!p||(l=this.getTaskByPosition(p),!l))return;const{allowLeft:u,allowRight:x}=this.isAllowDrop(l,n);if(this.templateArrow.visible(!0),l.startTime&&l.endTime){const b=this.context.store.getTimeAxis().getTimeLeft(l.startTime),S=this.context.store.getTimeAxis().getTimeLeft(l.endTime),v=(S+b)/2+this.offsetX;let E=b-g;p.x<=v?o="S":(o="F",E=S+g),this.templateArrow.points([...s,E,c+h*l.flatIndex]),o==="S"&&!u?this.stage.container().style.cursor="not-allowed":o==="F"&&!x?this.stage.container().style.cursor="not-allowed":this.stage.container().style.cursor="pointer"}},m=()=>{let p;if(o&&(p=`${e}${o}`),p&&l)if(this.context.getOptions().links.data.some(u=>u.from===n&&u.to===l.id&&u.type===p))this.context.event.emit(y.ERROR,j.LINK_EXIST);else if(n===l.id&&e===o)this.context.event.emit(y.ERROR,j.LINK_SAME);else{const{allowLeft:u,allowRight:x}=this.isAllowDrop(l,n);o==="S"&&u||o==="F"&&x?this.context.event.emit(y.CREATE_LINK,{from:n,to:l.id,type:p,color:i}):this.context.event.emit(y.ERROR,j.LINK_NOT_ALLOWED)}this.templateArrow.visible(!1),this.stage.container().style.cursor="default",this.isDragging=!1,document.removeEventListener("mousemove",d),document.removeEventListener("mouseup",m)};document.addEventListener("mousemove",d),document.addEventListener("mouseup",m)}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}isAllowDrop(t,e){let i=!0,s=!0,n=this.context.getOptions().links.create.to;return O.isFunction(n)&&(n=n(t.getEmitData(),this.context.store.getDataManager().getTaskById(e).getEmitData())),O.isBoolean(n)?i=s=n:O.isString(n)&&(i=n==="S",s=n==="F"),{allowLeft:i,allowRight:s}}handleHighlight(t,e,i,s,n,o,r=!1){const h=t.findOne("Circle"),c=t.findOne("Arrow");h&&new T.Tween({node:h,radius:e+o,duration:r?0:.1}).play(),c&&new T.Tween({node:c,pointerWidth:i+o,pointerLength:s+o,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 T.Tween({node:i,opacity:e,duration:.1}).play(),s&&new T.Tween({node:s,opacity:e,duration:.1}).play()}}class Le{constructor(t,e,i){a(this,"tasks",[]);a(this,"chartBaselineGroup");a(this,"indicatorGroup");a(this,"baselineGroup");a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);a(this,"offsetY",0);this.context=t,this.stage=e,this.layer=i,this.chartBaselineGroup=new T.Group({name:"chart-baseline-group"}),this.baselineGroup=new T.Group({name:"baseline-group"}),this.chartBaselineGroup.add(this.baselineGroup),this.indicatorGroup=new T.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=tt(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)&&this.context.store.getDataManager().isTaskVisible(r)){const h=this.context.store.getDataManager().getBaselinesByTaskId(r.id),c=K(this.context.getOptions().baselines.height||this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.height,r),e),g=this.context.getOptions().baselines.offset??0;h.forEach((l,d)=>{if(!l.validate())return;const m=this.context.store.getTimeAxis().getTimeLeft(l.startTime),p=this.context.store.getTimeAxis().getTimeLeft(l.endTime),u=new T.Group({id:`baseline-group-${l.id}`});this.renderBaselineBar(u,r,l,m,p,i,e,c,t,o,n,s,g);const x=this.context.getOptions().baselines.compare,b=l.getTimeDiff();if(!x.enabled||!b)return;const S=x.mode;l.highlight&&(S==="highlight"||S==="both")&&this.renderCompareHighlight(u,r,l,b),d===0&&(S==="indicator"||S==="both")&&this.renderCompareIndicator(r,l,b),this.bindEvents(u,r,l),this.baselineGroup.add(u)})}})}renderBaselineBar(t,e,i,s,n,o,r,h,c,g,l,d,m){if(this.context.getOptions().baselines.mode==="shadow"){const p=o+r*e.flatIndex-h/2+m,u=new T.Rect({id:`baseline-item-${i.id}`,x:s,y:p,width:n-s,height:h,cornerRadius:d,fill:g,opacity:l});t.add(u),this.renderText(t,e,i,s,n,p,h)}else if(this.context.getOptions().baselines.mode==="line"){const p=K(this.context.getOptions().baselines.height??5,r);let u=c+r*e.flatIndex+m;const x=this.context.getOptions().baselines.position;let b="";x==="top"?(u+=+p/2,b="line_top"):x==="center"?(u+=r/2,b="line_center"):(u+=r-p/2,b="line_bottom");const S=new T.Line({id:`baseline-item-${i.id}`,points:[s,u,n,u],stroke:g,opacity:l,strokeWidth:p,lineCap:"butt",lineJoin:"round"});t.add(S),this.renderText(t,e,i,s,n,u,p,b)}}renderText(t,e,i,s,n,o,r,h){const c=`chart-baseline-text-${i.id}`;if((()=>{this.baselineGroup.find(`#${c}`)&&this.baselineGroup.find(`#${c}`).forEach(b=>b.remove())})(),!this.context.getOptions().baselines.label.show)return;const l=this.context.getOptions().baselines.label.field,d=l?i.getField(l):i.name;if(!d||d==="")return;const m=n-s-10,p=Math.max(this.context.getOptions().baselines.label.fontSize,r),u=new T.Text({text:d,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"});h==="line_bottom"?u.setAttrs({y:o-p/2,verticalAlign:"top"}):h==="line_center"?u.setAttrs({y:o-p/2,verticalAlign:"middle"}):h==="line_top"&&u.setAttrs({y:o-r/2,verticalAlign:"bottom"}),r>=p&&u.setAttrs({verticalAlign:"middle"});const x=u.measureSize(d);(this.context.getOptions().baselines.label.forceDisplay||m>x.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,h=this.context.getOptions().baselines.mode,c={fill:"",stroke:"",opacity:r[n].opacity};if(h==="shadow")c.fill=r[n].backgroundColor;else if(h==="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,h=K(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),l=this.context.store.getTimeAxis().getTimeLeft(t.endTime);let d=(r-h)/2+r*t.flatIndex+o;if(n.position==="bottom"&&(d+=h),n.show==="start"||n.show==="both"||n.show===!0){const m=i.startStatus;if(m&&s.compare.indicator[m].show){c=W(s.compare.indicator[m].color).alpha(s.compare.indicator[m].opacity).toHex();const p=new T.Circle({x:g-n.size,y:d,fill:c,radius:n.size/2});this.indicatorGroup.add(p);let u=`${ot(i.startDiff)}${i.unit} ${m}`;const x=s.compare.indicator[m].text;O.isFunction(x)?u=x(i.startDiff,{...t.getEmitData(),baseline:e}):O.isString(x)&&(u=x);const b=new T.Text({y:d-n.fontSize/2,text:u,fill:c,fontSize:n.fontSize,fontFamily:n.fontFamily||"Arial"}),S=b.measureSize(u);b.x(g-n.size-S.width-5),this.indicatorGroup.add(b)}}if(n.show==="end"||n.show==="both"||n.show===!0){const m=i.endStatus;if(m&&s.compare.indicator[m].show){c=W(s.compare.indicator[m].color).alpha(s.compare.indicator[m].opacity).toHex();const p=new T.Circle({x:l+n.size,y:d,fill:c,radius:n.size/2});this.indicatorGroup.add(p);let u=`${ot(i.endDiff)}${i.unit} ${m}`;const x=s.compare.indicator[m].text;O.isFunction(x)?u=x(i.endDiff,{...t.getEmitData(),baseline:e}):O.isString(x)&&(u=x);const b=new T.Text({x:l+n.size+5,y:d-n.fontSize/2,text:u,fill:c,fontSize:n.fontSize,fontFamily:n.fontFamily||"Arial"});this.indicatorGroup.add(b)}}}bindEvents(t,e,i){t.on("mouseover",s=>{this.context.event.emit(y.BASELINE_MOUSEOVER,s.evt,e,i)}),t.on("mouseout",s=>{this.context.event.emit(y.BASELINE_MOUSEOUT,s.evt,e,i)}),t.on("click",s=>{s.cancelBubble=!0,s.evt.button===0?this.context.event.emit(y.BASELINE_CLICK,s.evt,e,i):s.evt.button===2&&this.context.event.emit(y.BASELINE_CONTEXTMENU,s.evt,e,i)})}}class Ce{constructor(t,e){a(this,"stage");a(this,"headerLayer");a(this,"bodyGroup");a(this,"gridGroup");a(this,"weekendGroup");a(this,"holidayGroup");a(this,"todayLayer");a(this,"linkGroup");a(this,"baselineGroup");a(this,"bgLayer");a(this,"bodyLayer");a(this,"width",0);a(this,"height",0);this.context=t,this.container=e,this.stage=new T.Stage({container:this.container,width:this.container.clientWidth,height:this.container.clientHeight}),this.bgLayer=new T.Layer,this.weekendGroup=new ke(this.context,this.bgLayer),this.holidayGroup=new Oe(this.context,this.bgLayer),this.gridGroup=new be(this.context,this.bgLayer),this.stage.add(this.bgLayer),this.headerLayer=new we(this.context,this.stage),this.todayLayer=new Me(this.context,this.bgLayer,this.headerLayer.layer),this.bodyLayer=new T.Layer,this.linkGroup=new Ee(this.context,this.stage,this.bodyLayer),this.baselineGroup=new Le(this.context,this.stage,this.bodyLayer),this.bodyGroup=new Se(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.weekendGroup.resize(t,e),this.bodyGroup.resize(t,e),this.todayLayer.resize(t,e)}render(t,e,i){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.bodyGroup.setOffset(-t,-e),this.todayLayer.setOffset(-t,-e),this.gridGroup.render(),this.holidayGroup.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){this.render(t,e,i)}updateTask(t){this.bodyGroup.updateTask(t),this.linkGroup.update(),this.baselineGroup.update()}destroy(){this.headerLayer.destroy(),this.gridGroup.destroy(),this.bodyLayer.destroy(),this.todayLayer.destroy(),this.holidayGroup.destroy(),this.weekendGroup.destroy(),this.linkGroup.destroy(),this.baselineGroup.destroy(),this.bgLayer.destroy(),this.stage.destroy()}}const De='<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 _e{constructor(t,e){a(this,"line");a(this,"initialX",0);a(this,"initialWidth",0);a(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=De,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.left=`${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=h=>{h.preventDefault(),h.stopPropagation(),t=h.clientX,e=this.container.getBoundingClientRect();const c=s[s.length-1].key;this.initialWidth=i.getColumnWidth(c);const g=parseInt(this.line.style.left)+2;this.root.event.emit(y.SHOW_GUIDELINE,g);const l=m=>o(m),d=m=>r(m,l,d);document.addEventListener("mousemove",l),document.addEventListener("mouseup",d)},o=h=>{if(h.preventDefault(),!e)return;const c=h.clientX-t;s[s.length-1].key;const g=50-this.initialWidth,d=e.width-20-this.initialX,m=Math.max(g,Math.min(d,c)),p=this.initialX+m;this.root.event.emit(y.MOVE_GUIDELINE,p)},r=(h,c,g)=>{document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",g),this.root.event.emit(y.HIDE_GUIDELINE);const l=h.clientX-t,d=s[s.length-1].key,m=Math.max(50,this.initialWidth+l);i.setColumnWidth(d,m),this.root.event.emit(y.UPDATE_TABLE_HEADER)};this.line.addEventListener("mousedown",n)}}class He{constructor(t,e){a(this,"element");a(this,"container");a(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(y.SHOW_GUIDELINE,t=>{this.show(t)}),this.context.event.on(y.HIDE_GUIDELINE,()=>{this.hide()}),this.context.event.on(y.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.left=`${i}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 Ae{constructor(t=16){a(this,"taskQueue",new Map);a(this,"taskHandlers",new Map);a(this,"isScheduled",!1);a(this,"delay");a(this,"debouncedFlush");this.delay=t,this.debouncedFlush=O.debounce(()=>{this.flushTaskQueue()},t)}registerHandler(t,e){this.taskHandlers.set(t,e),L.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){L.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){L.debug(`RenderScheduler: 立即执行任务 ${t}`),this.executeTask(n);return}this.taskQueue.set(t,n),L.debug(`RenderScheduler: 添加任务到队列 ${t}`),this.debouncedFlush()}immediateExecuteTask(t,e=[],i=!1){const s=this.taskHandlers.get(t);if(!s){L.warn(`RenderScheduler: 未找到任务类型 ${t} 的处理器`);return}L.debug(`RenderScheduler: 立即执行任务 ${t}`);const n={type:t,refresh:i,callback:s.callback,args:e,immediate:!0};this.executeTask(n)}immediateFlushAll(){L.debug("RenderScheduler: 立即执行所有队列任务"),this.cancelScheduled(),this.flushTaskQueue()}executeTask(t){try{t.callback(...t.args||[])}catch(e){L.error(`RenderScheduler: 执行任务 ${t.type} 时出错:`,e)}}flushTaskQueue(){if(this.taskQueue.size===0)return;L.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),L.debug(`RenderScheduler: 移除任务处理器 ${t}`)}getQueueSize(){return this.taskQueue.size}getRegisteredHandlers(){return Array.from(this.taskHandlers.keys())}destroy(){this.cancelScheduled(),this.taskHandlers.clear(),L.debug("RenderScheduler: 已销毁")}}class Ie{constructor(t,e){a(this,"scrollbar");a(this,"rootElement");a(this,"tableContainer");a(this,"chartContainer");a(this,"table");a(this,"chart");a(this,"middleLine");a(this,"renderScheduler");a(this,"_id",q());a(this,"width",0);a(this,"height",0);a(this,"isInitialized",!0);a(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)});a(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",`${W(t.row.hover.backgroundColor).alpha(t.row.hover.opacity)}`),this.rootElement.style.setProperty("--x-gantt-row-selected-color",`${W(t.row.select.backgroundColor).alpha(t.row.select.opacity)}`),this.rootElement.style.setProperty("--x-gantt-header-font-weight",`${t.header.fontWeight}`)});a(this,"handleUpdateTask",t=>{this.table.updateTask(t),this.chart.updateTask(t)});a(this,"handleColumnWidthChange",()=>{this.table.updateWidth(),this.updateSize()});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 He(this.context,this.container),this.middleLine=new _e(this.context,this.rootElement),this.chartContainer=document.createElement("div"),this.chartContainer.className="x-gantt-chart",this.rootElement.appendChild(this.chartContainer),this.table=new ye(this.context,this.tableContainer),this.chart=new Ce(this.context,this.chartContainer),this.scrollbar=new me(this.context,this.rootElement,this.context.store.getOptionManager().getOptions().scrollbar||{}),this.renderScheduler=new Ae(16),this.setupTaskHandlers(),this.updateSize(),this.setupEventListeners()}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",(t=!0)=>this.performRender(t),!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(y.DATA_UPDATE,()=>{this.renderScheduler.scheduleTask("DATA_UPDATE",[!0])}),this.context.event.on(y.SCROLL,()=>{this.renderScheduler.scheduleTask("SCROLL",[!0],{immediate:!0})}),this.context.event.on(y.COLUMN_WIDTH_CHANGE,()=>{this.renderScheduler.scheduleTask("COLUMN_WIDTH_CHANGE")}),this.context.event.on(y.VIEW_UPDATE,()=>{this.renderScheduler.scheduleTask("VIEW_UPDATE",[!0])}),this.context.event.on(y.UPDATE_TASK,t=>{this.renderScheduler.scheduleTask("UPDATE_TASK",[t],{immediate:!0})}),this.context.event.on(y.CHART_OFFSET_CHANGE,()=>{this.renderScheduler.scheduleTask("CHART_OFFSET_CHANGE",[!1])}),this.context.event.on(y.TOGGLE_COLLAPSE,()=>{this.renderScheduler.scheduleTask("CHART_OFFSET_CHANGE",[!1])})}performRender(t=!1){this.setStyleValue();const{x:e,y:i}=this.scrollbar.getScrollPosition(),s=this.context.store.getOptionManager().getOptions().row.height,n=this.context.store.getOptionManager().getOptions().header.height,o=Math.floor(i/s),r=Math.ceil((this.height-n)/s),h=2,c=Math.max(0,o),g=r+h,l=this.context.store.getDataManager().getVisibleTasks().slice(c,c+g);this.updateSize(),t?(this.table.refresh(i,l),this.chart.refresh(e,i,l)):(this.table.render(i,l),this.chart.render(e,i,l)),this.isInitialized&&(this.context.event.emit(y.LOADED),this.isInitialized=!1),L.debug("execute render")}render(t=!1){this.renderScheduler.scheduleTask("MANUAL_RENDER",[t])}immediateRender(t=!1){this.renderScheduler.immediateExecuteTask("MANUAL_RENDER",[t],t)}destroy(){L.debug("Renderer destroy"),this.renderScheduler.destroy(),this.scrollbar.destroy(),this.context.event.offAll()}}class Ge{constructor(t,e,i){a(this,"_id",q());a(this,"store");a(this,"event",new At);a(this,"renderer");this.container=t,this.events=e,this.container.innerHTML="",this.store=new fe(this,i),this.renderer=new Ie(this,this.container),this.render(),this.registerEvents(),L.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),L.debug("GanttChart options updated"),this.render()}destroy(){L.debug("Gantt destroying..."),this.event.offAll(),this.renderer.destroy(),this.container.innerHTML=""}jumpTo(t){const e=C(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}_emit(t,...e){var i;this.events.has(t)&&((i=this.events.get(t))==null||i.forEach(s=>s(...e)))}registerEvents(){this.event.on(y.ERROR,t=>{this._emit("error",t)}),this.event.on(y.LOADED,()=>{this._emit("loaded")}),this.event.on(y.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(y.CHECK_TASK,(t,e)=>{this._emit("select",t.map(i=>i.data),e,this.store.getDataManager().getCheckedList().map(i=>i.data))}),this.event.on(y.UPDATE_LINK,t=>{this._emit("update:link",t)}),this.event.on(y.CREATE_LINK,t=>{this._emit("create:link",t)}),this.event.on(y.SELECT_LINK,(t,e,i)=>{this._emit("select:link",t,e,i)}),this.event.on(y.CONTEXT_LINK,(t,e)=>{this._emit("contextmenu:link",t,e)}),this.event.on(y.ROW_CLICK,(t,e)=>{this._emit("click:row",t,e.data)}),this.event.on(y.ROW_DBL_CLICK,(t,e)=>{this._emit("dblclick:row",t,e.data)}),this.event.on(y.ROW_CONTEXTMENU,(t,e)=>{this._emit("contextmenu:row",t,e.data)}),this.event.on(y.SLIDER_CLICK,(t,e)=>{this._emit("click:slider",t,e.data)}),this.event.on(y.SLIDER_DBL_CLICK,(t,e)=>{this._emit("dblclick:slider",t,e.data)}),this.event.on(y.SLIDER_CONTEXTMENU,(t,e)=>{this._emit("contextmenu:slider",t,e.data)}),this.event.on(y.SLIDER_HOVER,(t,e)=>{this._emit("hover:slider",t,e.data)}),this.event.on(y.SLIDER_LEAVE,(t,e)=>{this._emit("leave:slider",t,e.data)}),this.event.on(y.BASELINE_CLICK,(t,e,i)=>{this._emit("click:baseline",t,e.data,i.data)}),this.event.on(y.BASELINE_CONTEXTMENU,(t,e,i)=>{this._emit("contextmenu:baseline",t,e.data,i.data)}),this.event.on(y.BASELINE_MOUSEOVER,(t,e,i)=>{this._emit("hover:baseline",t,e.data,i.data)}),this.event.on(y.BASELINE_MOUSEOUT,(t,e,i)=>{this._emit("leave:baseline",t,e.data,i.data)})}}class Re{constructor(t,e){a(this,"context");a(this,"events",new Map);e!=null&&e.logLevel&&L.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 L.exception(`Container ${t} not found or invalid.`);i.innerHTML="",i.classList.add("x-gantt-container"),this.context=new Ge(i,this.events,e)}update(t,e={merge:!0}){this.context.updateOptions(t,e)}render(){this.context.render(),L.info("Gantt rendered successfully.")}destroy(){L.info("Gantt destroying..."),this.events.clear(),this.context.destroy(),L.info("Gantt destroyed successfully.")}jumpTo(t){return this.context.jumpTo(t)}on(t,e){var i;this.events.has(t)||this.events.set(t,[]),(i=this.events.get(t))==null||i.push(e)}}_t();const We=ct;F.dayjs=C,F.XGantt=Re,F.colorjs=W,F.generateId=q,F.version=We,Object.defineProperty(F,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(S.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(S.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(S.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(S.CHECK_TASK,this.context.store.getDataManager().getVisibleTasks(),!e)}})}registerEvents(){this.context.event.on(S.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 ft="handler_column";class Ft{constructor(t){a(this,"sourceColumns",[]);a(this,"columns",[]);a(this,"leafColumns",[]);a(this,"temporaryLeafColumns",[]);a(this,"mergeInfo",new Map);a(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 m;const r="children"in n&&Array.isArray(n.children)&&n.children.length>0,h=!r;let l="";r?l=`group-${o}`:l=`field-${n.field}`;const g=[...(i==null?void 0:i.path)||[],l];l="column-"+o+"-"+g.join("-");const c=n.label||(h?n.field:""),u=h?((m=this.temporaryLeafColumns.find(d=>d.key===l))==null?void 0:m.width)||n.width||100:"auto",p={label:c,level:s,maxLevel:s,column:n,children:[],path:g,key:l,isLeaf:h,width:u};if(e.push(p),h)this.leafColumns.push(p);else if(r){const d=n.children;this.processColumns(d,p.children,p,s+1),p.maxLevel=Math.max(p.maxLevel,p.children.reduce((x,w)=>Math.max(x,w.maxLevel),0))}}),this.temporaryLeafColumns=C.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===ft)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(S.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 gt(this.context).getElement():null,ellipsis:!1},children:[],path:[],key:ft,isLeaf:!0,width:t}}isMultiHeader(){return this.columns.some(t=>t.maxLevel>1)}collapse(){this.collapseTable=!this.collapseTable,this.context.event.emit(S.TOGGLE_COLLAPSE)}isCollapsed(){return this.collapseTable}}var U=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function X(f){return f&&f.__esModule&&Object.prototype.hasOwnProperty.call(f,"default")?f.default:f}var pt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){var e,i,s=1e3,n=6e4,o=36e5,r=864e5,h=/\[([^\]]+)]|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,l=31536e6,g=2628e6,c=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,u={years:l,months:g,days:r,hours:o,minutes:n,seconds:s,milliseconds:1,weeks:6048e5},p=function(M){return M instanceof b},m=function(M,O,k){return new b(M,k,O.$l)},d=function(M){return i.p(M)+"s"},x=function(M){return M<0},w=function(M){return x(M)?Math.ceil(M):Math.floor(M)},v=function(M){return Math.abs(M)},T=function(M,O){return M?x(M)?{negative:!0,format:""+v(M)+O}:{negative:!1,format:""+M+O}:{negative:!1,format:""}},b=function(){function M(k,L,I){var A=this;if(this.$d={},this.$l=I,k===void 0&&(this.$ms=0,this.parseFromMilliseconds()),L)return m(k*u[d(L)],this);if(typeof k=="number")return this.$ms=k,this.parseFromMilliseconds(),this;if(typeof k=="object")return Object.keys(k).forEach(function(z){A.$d[d(z)]=k[z]}),this.calMilliseconds(),this;if(typeof k=="string"){var D=k.match(c);if(D){var G=D.slice(2).map(function(z){return z!=null?Number(z):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 O=M.prototype;return O.calMilliseconds=function(){var k=this;this.$ms=Object.keys(this.$d).reduce(function(L,I){return L+(k.$d[I]||0)*u[I]},0)},O.parseFromMilliseconds=function(){var k=this.$ms;this.$d.years=w(k/l),k%=l,this.$d.months=w(k/g),k%=g,this.$d.days=w(k/r),k%=r,this.$d.hours=w(k/o),k%=o,this.$d.minutes=w(k/n),k%=n,this.$d.seconds=w(k/s),k%=s,this.$d.milliseconds=k},O.toISOString=function(){var k=T(this.$d.years,"Y"),L=T(this.$d.months,"M"),I=+this.$d.days||0;this.$d.weeks&&(I+=7*this.$d.weeks);var A=T(I,"D"),D=T(this.$d.hours,"H"),G=T(this.$d.minutes,"M"),z=this.$d.seconds||0;this.$d.milliseconds&&(z+=this.$d.milliseconds/1e3,z=Math.round(1e3*z)/1e3);var B=T(z,"S"),W=k.negative||L.negative||A.negative||D.negative||G.negative||B.negative,$=D.format||G.format||B.format?"T":"",N=(W?"-":"")+"P"+k.format+L.format+A.format+$+D.format+G.format+B.format;return N==="P"||N==="-P"?"P0D":N},O.toJSON=function(){return this.toISOString()},O.format=function(k){var L=k||"YYYY-MM-DDTHH:mm:ss",I={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(h,function(A,D){return D||String(I[A])})},O.as=function(k){return this.$ms/u[d(k)]},O.get=function(k){var L=this.$ms,I=d(k);return I==="milliseconds"?L%=1e3:L=I==="weeks"?w(L/u[I]):this.$d[I],L||0},O.add=function(k,L,I){var A;return A=L?k*u[d(L)]:p(k)?k.$ms:m(k,this).$ms,m(this.$ms+A*(I?-1:1),this)},O.subtract=function(k,L){return this.add(k,L,!0)},O.locale=function(k){var L=this.clone();return L.$l=k,L},O.clone=function(){return m(this.$ms,this)},O.humanize=function(k){return e().add(this.$ms,"ms").locale(this.$l).fromNow(!k)},O.valueOf=function(){return this.asMilliseconds()},O.milliseconds=function(){return this.get("milliseconds")},O.asMilliseconds=function(){return this.as("milliseconds")},O.seconds=function(){return this.get("seconds")},O.asSeconds=function(){return this.as("seconds")},O.minutes=function(){return this.get("minutes")},O.asMinutes=function(){return this.as("minutes")},O.hours=function(){return this.get("hours")},O.asHours=function(){return this.as("hours")},O.days=function(){return this.get("days")},O.asDays=function(){return this.as("days")},O.weeks=function(){return this.get("weeks")},O.asWeeks=function(){return this.as("weeks")},O.months=function(){return this.get("months")},O.asMonths=function(){return this.as("months")},O.years=function(){return this.get("years")},O.asYears=function(){return this.as("years")},M}(),E=function(M,O,k){return M.add(O.years()*k,"y").add(O.months()*k,"M").add(O.days()*k,"d").add(O.hours()*k,"h").add(O.minutes()*k,"m").add(O.seconds()*k,"s").add(O.milliseconds()*k,"ms")};return function(M,O,k){e=k,i=k().$utils(),k.duration=function(A,D){var G=k.locale();return m(A,{$l:G},D)},k.isDuration=p;var L=O.prototype.add,I=O.prototype.subtract;O.prototype.add=function(A,D){return p(A)?E(this,A,1):L.bind(this)(A,D)},O.prototype.subtract=function(A,D){return p(A)?E(this,A,-1):I.bind(this)(A,D)}}})})(pt);var Bt=pt.exports;const zt=X(Bt);var mt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return function(e,i,s){i.prototype.isBetween=function(n,o,r,h){var l=s(n),g=s(o),c=(h=h||"()")[0]==="(",u=h[1]===")";return(c?this.isAfter(l,r):!this.isBefore(l,r))&&(u?this.isBefore(g,r):!this.isAfter(g,r))||(c?this.isBefore(l,r):!this.isAfter(l,r))&&(u?this.isAfter(g,r):!this.isBefore(g,r))}}})})(mt);var Pt=mt.exports;const Yt=X(Pt);var xt={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)}}})})(xt);var Nt=xt.exports;const Ut=X(Nt);var yt={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)}}})})(yt);var Xt=yt.exports;const Vt=X(Xt);var wt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){return function(e,i,s){var n=i.prototype,o=function(c){return c&&(c.indexOf?c:c.s)},r=function(c,u,p,m,d){var x=c.name?c:c.$locale(),w=o(x[u]),v=o(x[p]),T=w||v.map(function(E){return E.slice(0,m)});if(!d)return T;var b=x.weekStart;return T.map(function(E,M){return T[(M+(b||0))%7]})},h=function(){return s.Ls[s.locale()]},l=function(c,u){return c.formats[u]||function(p){return p.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(m,d,x){return d||x.slice(1)})}(c.formats[u.toUpperCase()])},g=function(){var c=this;return{months:function(u){return u?u.format("MMMM"):r(c,"months")},monthsShort:function(u){return u?u.format("MMM"):r(c,"monthsShort","months",3)},firstDayOfWeek:function(){return c.$locale().weekStart||0},weekdays:function(u){return u?u.format("dddd"):r(c,"weekdays")},weekdaysMin:function(u){return u?u.format("dd"):r(c,"weekdaysMin","weekdays",2)},weekdaysShort:function(u){return u?u.format("ddd"):r(c,"weekdaysShort","weekdays",3)},longDateFormat:function(u){return l(c.$locale(),u)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};n.localeData=function(){return g.bind(this)()},s.localeData=function(){var c=h();return{firstDayOfWeek:function(){return c.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(u){return l(c,u)},meridiem:c.meridiem,ordinal:c.ordinal}},s.months=function(){return r(h(),"months")},s.monthsShort=function(){return r(h(),"monthsShort","months",3)},s.weekdays=function(c){return r(h(),"weekdays",null,null,c)},s.weekdaysShort=function(c){return r(h(),"weekdaysShort","weekdays",3,c)},s.weekdaysMin=function(c){return r(h(),"weekdaysMin","weekdays",2,c)}}})})(wt);var qt=wt.exports;const Qt=X(qt);var bt={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(h){if(h===void 0&&(h=null),h!==null)return this.add(7*(h-this.week()),"day");var l=this.$locale().yearStart||1;if(this.month()===11&&this.date()>25){var g=o(this).startOf(i).add(1,i).date(l),c=o(this).endOf(e);if(g.isBefore(c))return 1}var u=o(this).startOf(i).date(l).startOf(e).subtract(1,"millisecond"),p=this.diff(u,e,!0);return p<0?o(this).startOf("week").week():Math.ceil(p)},r.weeks=function(h){return h===void 0&&(h=null),this.week(h)}}})})(bt);var Jt=bt.exports;const jt=X(Jt);var Tt={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}}})})(Tt);var Zt=Tt.exports;const Kt=X(Zt);var St={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,h=this.$locale();if(!this.isValid())return n.bind(this)(o);var l=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(c){switch(c){case"Q":return Math.ceil((r.$M+1)/3);case"Do":return h.ordinal(r.$D);case"gggg":return r.weekYear();case"GGGG":return r.isoWeekYear();case"wo":return h.ordinal(r.week(),"W");case"w":case"ww":return l.s(r.week(),c==="w"?1:2,"0");case"W":case"WW":return l.s(r.isoWeek(),c==="W"?1:2,"0");case"k":case"kk":return l.s(String(r.$H===0?24:r.$H),c==="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 c}});return n.bind(this)(g)}}})})(St);var te=St.exports;const ee=X(te);var vt={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(h){r[h]=o[h]}),r}}})})(vt);var ie=vt.exports;const se=X(ie);var kt={exports:{}};(function(f,t){(function(e,i){f.exports=i()})(U,function(){var e="day";return function(i,s,n){var o=function(l){return l.add(4-l.isoWeekday(),e)},r=s.prototype;r.isoWeekYear=function(){return o(this).year()},r.isoWeek=function(l){if(!this.$utils().u(l))return this.add(7*(l-this.isoWeek()),e);var g,c,u,p,m=o(this),d=(g=this.isoWeekYear(),c=this.$u,u=(c?n.utc:n)().year(g).startOf("year"),p=4-u.isoWeekday(),u.isoWeekday()>4&&(p+=7),u.add(p,e));return m.diff(d,"week")+1},r.isoWeekday=function(l){return this.$utils().u(l)?this.day()||7:this.day(this.day()%7?l:l-7)};var h=r.startOf;r.startOf=function(l,g){var c=this.$utils(),u=!!c.u(g)||g;return c.p(l)==="isoweek"?u?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):h.bind(this)(l,g)}}})})(kt);var ne=kt.exports;const oe=X(ne);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,h=function(u,p,m){m===void 0&&(m={});var d=new Date(u),x=function(w,v){v===void 0&&(v={});var T=v.timeZoneName||"short",b=w+"|"+T,E=i[b];return E||(E=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:w,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:T}),i[b]=E),E}(p,m);return x.formatToParts(d)},l=function(u,p){for(var m=h(u,p),d=[],x=0;x<m.length;x+=1){var w=m[x],v=w.type,T=w.value,b=e[v];b>=0&&(d[b]=parseInt(T,10))}var E=d[3],M=E===24?0:E,O=d[0]+"-"+d[1]+"-"+d[2]+" "+M+":"+d[4]+":"+d[5]+":000",k=+u;return(o.utc(O).valueOf()-(k-=k%1e3))/6e4},g=n.prototype;g.tz=function(u,p){u===void 0&&(u=r);var m,d=this.utcOffset(),x=this.toDate(),w=x.toLocaleString("en-US",{timeZone:u}),v=Math.round((x-new Date(w))/1e3/60),T=15*-Math.round(x.getTimezoneOffset()/15)-v;if(!Number(T))m=this.utcOffset(0,p);else if(m=o(w,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(T,!0),p){var b=m.utcOffset();m=m.add(d-b,"minute")}return m.$x.$timezone=u,m},g.offsetName=function(u){var p=this.$x.$timezone||o.tz.guess(),m=h(this.valueOf(),p,{timeZoneName:u}).find(function(d){return d.type.toLowerCase()==="timezonename"});return m&&m.value};var c=g.startOf;g.startOf=function(u,p){if(!this.$x||!this.$x.$timezone)return c.call(this,u,p);var m=o(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return c.call(m,u,p).tz(this.$x.$timezone,!0)},o.tz=function(u,p,m){var d=m&&p,x=m||p||r,w=l(+o(),x);if(typeof u!="string")return o(u).tz(x);var v=function(M,O,k){var L=M-60*O*1e3,I=l(L,k);if(O===I)return[L,O];var A=l(L-=60*(I-O)*1e3,k);return I===A?[L,I]:[M-60*Math.min(I,A)*1e3,Math.max(I,A)]}(o.utc(u,d).valueOf(),w,x),T=v[0],b=v[1],E=o(T).utcOffset(b);return E.$x.$timezone=x,E},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(u){r=u}}})})(Ot);var re=Ot.exports;const ae=X(re);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 h=o.prototype;r.utc=function(d){var x={date:d,utc:!0,args:arguments};return new o(x)},h.utc=function(d){var x=r(this.toDate(),{locale:this.$L,utc:!0});return d?x.add(this.utcOffset(),e):x},h.local=function(){return r(this.toDate(),{locale:this.$L,utc:!1})};var l=h.parse;h.parse=function(d){d.utc&&(this.$u=!0),this.$utils().u(d.$offset)||(this.$offset=d.$offset),l.call(this,d)};var g=h.init;h.init=function(){if(this.$u){var d=this.$d;this.$y=d.getUTCFullYear(),this.$M=d.getUTCMonth(),this.$D=d.getUTCDate(),this.$W=d.getUTCDay(),this.$H=d.getUTCHours(),this.$m=d.getUTCMinutes(),this.$s=d.getUTCSeconds(),this.$ms=d.getUTCMilliseconds()}else g.call(this)};var c=h.utcOffset;h.utcOffset=function(d,x){var w=this.$utils().u;if(w(d))return this.$u?0:w(this.$offset)?c.call(this):this.$offset;if(typeof d=="string"&&(d=function(E){E===void 0&&(E="");var M=E.match(i);if(!M)return null;var O=(""+M[0]).match(s)||["-",0,0],k=O[0],L=60*+O[1]+ +O[2];return L===0?0:k==="+"?L:-L}(d),d===null))return this;var v=Math.abs(d)<=16?60*d:d,T=this;if(x)return T.$offset=v,T.$u=d===0,T;if(d!==0){var b=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(T=this.local().add(v+b,e)).$offset=v,T.$x.$localOffset=b}else T=this.utc();return T};var u=h.format;h.format=function(d){var x=d||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return u.call(this,x)},h.valueOf=function(){var d=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*d},h.isUTC=function(){return!!this.$u},h.toISOString=function(){return this.toDate().toISOString()},h.toString=function(){return this.toDate().toUTCString()};var p=h.toDate;h.toDate=function(d){return d==="s"&&this.$offset?r(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():p.call(this)};var m=h.diff;h.diff=function(d,x,w){if(d&&this.$u===d.$u)return m.call(this,d,x,w);var v=this.local(),T=r(d).local();return m.call(v,T,x,w)}}})})(Et);var he=Et.exports;const le=X(he);var ce={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])+"]"}}})})(ce);var de={exports:{}};(function(f,t){(function(e,i){f.exports=i(_)})(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 h=100*o+r;return h<600?"凌晨":h<900?"早上":h<1100?"上午":h<1300?"中午":h<1800?"下午":"晚上"}};return s.default.locale(n,null,!0),n})})(de);const ue=(f,t)=>{const e=t.prototype;e.setLocale=function(s){return this.$locale=s||_().locale(),this.$L=this.$locale,this};const i=e.format;e.format=function(s){return this.$L=_().locale(),i.bind(this)(s)}};_.extend(zt),_.extend(Yt),_.extend(Ut),_.extend(Vt),_.extend(jt),_.extend(Qt),_.extend(Kt),_.extend(ee),_.extend(se),_.extend(oe),_.extend(ae),_.extend(le),_.extend(ue);function Mt(f){try{if(_.locale()===f)return;if(_.locale(f)!==f)throw Error();H.info(`Locale set to ${f}`)}catch{H.warn(`Failed to set locale ${f}, fallback to en`),_.locale("en")}}const rt=()=>({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 ge{constructor(){a(this,"startTime",_().startOf("day"));a(this,"endTime",_().endOf("day"));a(this,"targetEnd",_().endOf("day"));a(this,"strictStart",!1);a(this,"strictEnd",!1);a(this,"isAuto",!1);a(this,"timeline",[]);a(this,"headerGroupFormat");a(this,"headerCellFormat");a(this,"isDirty",!0);a(this,"isFirstTime",!0);a(this,"allWidth",0);a(this,"cellWidth");a(this,"unit","day");this.cellWidth=C.cloneDeep(rt().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){this.isDirty=!0,this.isFirstTime=!0;const{unit:e,chart:i}=t;this.isAuto=!!i.autoCellWidth;const s={hour:"hour",day:"day",week:"week",month:"month",quarter:"quarter"}[e];s||H.warn(`Unknown unit: [${e}]. Falling back to "day".`),this.unit=s||"day",i.startTime&&(this.startTime=_(i.startTime).startOf(this.getFinelyUnit()),this.strictStart=!0),i.endTime&&(this.endTime=_(i.endTime).endOf(this.getFinelyUnit()),this.strictEnd=!0),i.cellWidth&&(C.isNumber(i.cellWidth)?this.cellWidth={hour:i.cellWidth,day:i.cellWidth,week:i.cellWidth,month:i.cellWidth,quarter:i.cellWidth}:C.isString(i.cellWidth)?this.cellWidth=C.cloneDeep(rt()[i.cellWidth]||rt().normal):C.isObject(i.cellWidth)&&(this.cellWidth=Object.assign(this.cellWidth,i.cellWidth))),this.headerCellFormat=i.headerCellFormat,this.headerGroupFormat=i.headerGroupFormat}update(t){this.init(t),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(C.isFunction(this.headerGroupFormat)){const i=this.headerGroupFormat(t.toDate(),this.unit);if(i)return i}if(C.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(C.isFunction(this.headerCellFormat)){const i=this.headerCellFormat(t.toDate(),this.unit);if(i)return i}if(C.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 fe{constructor(t,e){a(this,"optionManager");a(this,"dataManager");a(this,"columnManager");a(this,"timeAxis");var n;this.context=t;const i=C.omit(e,["data"]),s=e==null?void 0:e.data;if(s&&!C.isArray(s))throw H.exception("Data should be a array.");this.optionManager=new Ht,this.optionManager.setOptions(i),i.locale&&Mt(i.locale),this.timeAxis=new ge,this.timeAxis.init(this.optionManager.getOptions()),this.columnManager=new Ft(this.context),i.table&&i.table.columns&&this.columnManager.init(i.table.columns),this.dataManager=new Gt(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)}getOptionManager(){return this.optionManager}getDataManager(){return this.dataManager}getColumnManager(){return this.columnManager}getTimeAxis(){return this.timeAxis}setOption(t,e={merge:!0}){var n,o;const i=C.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(r=>{r.updateMode()}),C.isArray(s)&&this.dataManager.setData(s,!1),C.isArray((o=t.baselines)==null?void 0:o.data)&&this.dataManager.setBaselines(t.baselines.data),i.locale&&Mt(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 pe{constructor(t,e,i){a(this,"rootElement");a(this,"options");a(this,"hScrollbar");a(this,"vScrollbar");a(this,"hScrollThumb");a(this,"vScrollThumb");a(this,"scrollbarContainer");a(this,"viewportWidth",0);a(this,"viewportHeight",0);a(this,"contentWidth",0);a(this,"contentHeight",0);a(this,"scrollLeft",0);a(this,"scrollTop",0);a(this,"isDraggingHScroll",!1);a(this,"isDraggingVScroll",!1);a(this,"isMouseOverRoot",!1);a(this,"isMouseOverScrollbar",!1);a(this,"hideTimeout",null);a(this,"showTimeout",null);a(this,"isVisible",!1);a(this,"dragStartX",0);a(this,"dragStartY",0);a(this,"thumbStartScrollLeft",0);a(this,"thumbStartScrollTop",0);a(this,"isAnimating",!1);a(this,"animationFrameId",null);a(this,"animationStartTime",0);a(this,"animationStartScrollLeft",0);a(this,"animationStartScrollTop",0);a(this,"animationTargetScrollLeft",0);a(this,"animationTargetScrollTop",0);a(this,"animationSource","api");a(this,"throttledHandleMouseMove");a(this,"throttledHandleWheel");a(this,"handleRootMouseMove",()=>{!this.isVisible&&this.isMouseOverRoot?this.scheduleShow():this.isVisible&&!this.isMouseOverScrollbar&&this.scheduleHide()});a(this,"handleScrollbarMouseEnter",()=>{this.isMouseOverScrollbar=!0,this.scheduleShow()});a(this,"handleScrollbarMouseLeave",()=>{this.isMouseOverScrollbar=!1,this.isMouseOverRoot&&this.scheduleHide()});a(this,"handleMouseEnter",()=>{this.isMouseOverRoot=!0,this.scheduleShow()});a(this,"handleMouseLeave",()=>{this.isMouseOverRoot=!1,!this.isDraggingHScroll&&!this.isDraggingVScroll&&!this.isMouseOverScrollbar&&(this.clearTimeouts(!0,!1),this.scheduleHide())});a(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)});a(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)});a(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,h=(s-i/2)/r*o;this.scrollTo({x:h,y:this.scrollTop},"track")});a(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,h=(s-i/2)/r*o;this.scrollTo({x:this.scrollLeft,y:h},"track")});a(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()}});a(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,h=this.scrollLeft!==o,l=this.scrollTop!==r;(h||l)&&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=C.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=C.throttle(this.handleMouseMove.bind(this),16),this.throttledHandleWheel=C.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=R(e,0,this.contentWidth-this.viewportWidth),this.scrollTop=R(i,0,this.contentHeight-this.viewportHeight),this.updateThumbStyles(),this.root.event.emit(S.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,h=this.thumbStartScrollLeft+r;this.scrollTo({x:h,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,h=this.thumbStartScrollTop+r;this.scrollTo({x:this.scrollLeft,y:h},"drag")}}}handleWheel(t){if(t.target!==this.rootElement&&!this.rootElement.contains(t.target)&&H.debug("Wheel event ignored, target not root or descendant:",t.target),!this.isMouseOverRoot&&!this.isMouseOverScrollbar){H.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,h=Math.min(1,r/s),l=h*(2-h),g=this.animationStartScrollLeft+(this.animationTargetScrollLeft-this.animationStartScrollLeft)*l,c=this.animationStartScrollTop+(this.animationTargetScrollTop-this.animationStartScrollTop)*l,u=this.scrollLeft!==g,p=this.scrollTop!==c;(u||p)&&this.emit("wheel",g,c),h<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,h=this.canScrollVertical()&&this.options.showVertical;if(r){const g=this.viewportWidth-(h?this.options.track.size:0);this.hScrollbar.style.display="block",this.hScrollbar.style.left=`${n}px`,this.hScrollbar.style.width=`${Math.max(0,g)}px`,this.hScrollbar.style.bottom="0px",this.hScrollbar.style.right=h?`${this.options.track.size}px`:"0px"}else this.hScrollbar.style.display="none";if(h){const g=this.viewportHeight-o-(r?this.options.track.size:0);this.vScrollbar.style.display="block",this.vScrollbar.style.top=`${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 l=this.clampScroll({x:this.scrollLeft,y:this.scrollTop});(l.x!==this.scrollLeft||l.y!==this.scrollTop)&&this.emit("api",l.x,l.y),this.isMouseOverRoot||this.isDraggingHScroll||this.isDraggingVScroll?this.scheduleShow():!r&&!h?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(C.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,H.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 et{constructor(t,e,i,s,n,o,r=1,h=1,l){a(this,"element");a(this,"isEmpty",!1);a(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=h,this.isEmpty=l==="empty",this.isHandler=l==="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):H.warn("Table cell render function does not return a valid value.",e)}catch(e){H.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 gt(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 Lt{constructor(t,e,i,s,n=!1){a(this,"element");a(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(S.ROW_HIGHLIGHT,this.task.id)}),this.element.addEventListener("mouseleave",()=>{this.context.event.emit(S.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(S.ROW_CLICK,t,this.task))}),this.element.addEventListener("dblclick",t=>{this.context.event.emit(S.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(S.ROW_CONTEXTMENU,t,this.task.id)})}registerEvents(){this.context.event.on(S.ROW_HIGHLIGHT,t=>{this.task.id===t?this.element.classList.add("hover"):this.element.classList.remove("hover")}),this.context.event.on(S.ROW_UNHIGHLIGHT,t=>{this.task.id===t&&this.element.classList.remove("hover")}),this.context.event.on(S.TASK_SELECTED,t=>{this.task.id===t.id&&this.element.classList.add("selected")}),this.context.event.on(S.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;this.element.style.top=`${-this.top+this.task.flatIndex*e}px`}create(){var i,s;this.clearCells();const t=this.context.store.getColumnManager().getHandlerColumn();if(t.width!==0){const n=new et(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 h=new et(this.context,this.element,o,this.task,this.task.flatIndex,n,1,1,"empty");this.element.style.backgroundColor="transparent",this.raise(),this.cells.push(h)}else if(r.originColumnIndex===n){const h=new et(this.context,this.element,o,r.task,r.task.flatIndex,n,r.colspan,r.rowspan);this.cells.push(h)}}else{let h=1,l=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"?H.error("colspan function must returned a number"):h=g.col,typeof g.row!="number"?H.error("rowspan function must returned a number"):l=g.row),h>1||l>1){if(l>1)for(let m=1;m<l;m++){const d=this.context.store.getDataManager().getVisibleTasks()[this.task.flatIndex+m];if(d&&this.task.level!==d.level){l=m;break}}const u={task:this.task,originColumnIndex:n,colspan:h,rowspan:l};let p=this.task;for(let m=l;m>0;m--)if(p){for(let d=0;d<h;d++)this.context.store.getColumnManager().addMergeInfo(p.id,d+n,u);p=this.context.store.getDataManager().getVisibleTasks().at(p.flatIndex+1)}for(let m=0;m<h;m++)this.context.store.getColumnManager().addMergeInfo(this.task.id,m+n,u)}const c=new et(this.context,this.element,o,this.task,this.task.flatIndex,n,h,l);this.cells.push(c)}}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 me{constructor(t,e){a(this,"element");a(this,"rows",new Map);a(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 h=this.rows.get(r);h.update(n),h.updateTop(t)}else{const h=new Lt(this.context,this.element,n,t);h.create(),this.rows.set(r,h)}this.context.store.getColumnManager().getLeafColumns().forEach((h,l)=>{const g=this.context.store.getColumnManager().getMergeInfo(n.id,l);if(g&&g.rowspan>1){const c=g.task.id;if(!this.rows.has(c)&&!this.mergeRows.has(c)){const u=new Lt(this.context,this.element,g.task,t,!0);u.create(),this.mergeRows.set(c,u)}}})})}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 at{constructor(t,e,i,s){a(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=l=>{l.preventDefault(),l.stopPropagation(),e=l.clientX,i=this.columnElement.offsetWidth,s=this.root.getBoundingClientRect();const g=u=>r(u),c=u=>h(u,g,c);document.addEventListener("mousemove",g),document.addEventListener("mouseup",c),n=e-s.left,this.context.event.emit(S.SHOW_GUIDELINE,n)},r=l=>{if(l.preventDefault(),!s)return;const g=l.clientX-e,c=i+g,u=Math.max(50,c),p=e-s.left-i,d=this.root.clientWidth-20;let x=p+u;x=Math.min(d,x),this.context.event.emit(S.MOVE_GUIDELINE,x)},h=(l,g,c)=>{document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",c),this.context.event.emit(S.HIDE_GUIDELINE);const u=l.clientX-e,p=Math.max(50,i+u);this.setWidth(p)};t.addEventListener("mousedown",o)}}class ht{constructor(t,e,i,s){a(this,"groupElement");a(this,"titleContainer");a(this,"childContainer");a(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 at(this.context,this.root,this.childContainer,t);this.children.push(e)}else if(t.children.length>0){const e=new ht(this.context,this.root,this.childContainer,t);this.children.push(e)}})}}class xe{constructor(t,e){a(this,"headerElement");a(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 at(this.context,this.headerElement,this.headerElement,t.getHandlerColumn());this.headerColumns.push(i)}e.forEach(i=>{if(i.isLeaf){const s=new at(this.context,this.headerElement,this.headerElement,i);this.headerColumns.push(s)}else if(i.children.length>0){const s=new ht(this.context,this.headerElement,this.headerElement,i);this.headerColumns.push(s)}})}}class ye{constructor(t,e){a(this,"tableContainer");a(this,"tableHeader");a(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 xe(t,this.tableContainer),this.tableBody=new me(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(S.UPDATE_TABLE_HEADER,()=>{this.tableHeader.render()}),this.context.event.on(S.UPDATE_TABLE_BODY,()=>{this.tableBody.update()})}}class we{constructor(t,e){a(this,"layer");a(this,"background");a(this,"groupHeader");a(this,"cellHeader");a(this,"cellCache",new Map);a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);this.context=t,this.stage=e,this.layer=new y.Layer,this.stage.add(this.layer),this.background=new y.Rect({fill:this.context.getOptions().header.backgroundColor||this.context.getOptions().primaryColor,name:"header-background"}),this.layer.add(this.background),this.groupHeader=new y.Group({name:"primary-header"}),this.cellHeader=new y.Group({name:"secondary-header"}),this.layer.add(this.groupHeader),this.layer.add(this.cellHeader),this.resize(this.stage.width()),this.registerEvents()}resize(t){this.width=t,this.height=this.context.getOptions().header.height,this.background.width(t),this.background.height(this.height),this.calculateHeader()}setOffset(t,e){this.offsetX!==t&&(this.offsetX=t,this.groupHeader.x(t),this.cellHeader.x(t),this.calculateHeader())}registerEvents(){this.context.event.on(S.ROW_HIGHLIGHT,t=>{this.highlightDate(t)}),this.context.event.on(S.ROW_UNHIGHLIGHT,t=>{this.unhighlightDate(t)}),this.context.event.on(S.UPDATE_TASK,t=>{this.highlightDate(t.id)})}render(){this.calculateHeader(),this.layer.moveToTop(),this.layer.batchDraw()}calculateHeader(){var l;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 y.Line({points:[0,n,this.width,n],stroke:o,strokeWidth:1})),this.layer.add(new y.Line({points:[0,this.height,this.width,this.height],stroke:o,strokeWidth:1}));const r=t.getTimeline();let h=0;for(let g=0;g<r.length;g++){const c=r[g],u=e*(((l=c.children)==null?void 0:l.length)??0);if(h+u<i){h+=u;continue}if(h>s)break;const m=this.createCell(`group-${c.date.format("YYYY-MM-DD")}`,h,0,u,n,o,c.label);if(this.groupHeader.add(m),C.isArray(c.children)&&c.children.length>0){let d=h;for(let x=0;x<c.children.length;){const w=c.children[x];let v=1;for(;c.children[x+v]&&w.label===c.children[x+v].label;)v++;if(x+=v,x>=c.children.length&&r[g+1]&&r[g+1].children){let M=0;for(;r[g+1].children[M]&&w.label===r[g+1].children[M].label;)r[g+1].children[M].hide=!0,M++;M>0&&(v+=M)}const T=e*v;if(d+T<i){d+=T;continue}if(d>s)break;const E=this.createCell(`cell-${w.date.format("YYYY-MM-DD")}`,d,n,T,n,w.hide?"transparent":o,w.hide?"":w.label);this.cellHeader.add(E),w.hide&&E.visible(!1),d+=T}}h+=u}this.layer.batchDraw()}createCell(t,e,i,s,n,o,r){const h=new y.Group;h.x(e),h.y(i);const l=new y.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"});h.add(l);let g=this.context.getOptions().header.fontSize;t.startsWith("cell-")&&(this.cellCache.set(t,l),g-=2);const c=new y.Line({points:[s,0,s,n],stroke:o,strokeWidth:1,name:"header-cell-right-border"});h.add(c);const u=new y.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 h.add(u),h}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(h=>{new y.Tween({node:h,fill:n,duration:.02}).play()}),t==="in"&&(i&&new y.Tween({node:i,fill:F(n).brighten(30).toHex(),duration:.02}).play(),s&&new y.Tween({node:s,fill:F(n).brighten(30).toHex(),duration:0}).play()))}}class be{constructor(t,e){a(this,"verticalLines");a(this,"horizontalLines");a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);a(this,"offsetY",0);this.context=t,this.layer=e,this.verticalLines=new y.Group({name:"vertical-grid-lines"}),this.horizontalLines=new y.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),h=Math.min(this.context.store.getTimeAxis().getCellCount(),Math.ceil((-this.offsetX+this.width)/i)+2),l=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 c=r;c<=h;c++){const u=c*i,p=new y.Line({points:[u,t,u,o+t],stroke:this.context.getOptions().border.color,strokeWidth:.5,name:"vertical-grid-line"});this.verticalLines.add(p)}for(let c=l;c<=g;c++){const u=c*s+t,p=new y.Line({points:[0,u,Math.max(this.width,e),u],stroke:this.context.getOptions().border.color,strokeWidth:.5,name:"horizontal-grid-line"});this.horizontalLines.add(p)}}clearGrid(){this.verticalLines.destroyChildren(),this.horizontalLines.destroyChildren()}}const Ct='<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 Te{constructor(t,e,i,s,n){a(this,"offsetX",0);a(this,"offsetY",0);a(this,"sliderGroup");a(this,"slider");a(this,"sliderBar",null);a(this,"sliderType","");a(this,"leftHandleGroup",null);a(this,"rightHandleGroup",null);a(this,"progressGroup",null);a(this,"handlerWidth",10);a(this,"autoMoveTimer",null);a(this,"autoScrollTimer",null);a(this,"autoExpandTimer",null);a(this,"EDGE_THRESHOLD",20);a(this,"SCROLL_STEP",5);a(this,"MOVE_INTERVAL",1e3/60);a(this,"AUTO_EXPAND_INTERVAL",500);a(this,"isDragging",!1);a(this,"draggingDirection","none");a(this,"oldTasks",[]);this.context=t,this.x=e,this.y=i,this.task=s,this.rowWidth=n,this.sliderGroup=new y.Group({x:e,y:i,id:`chart-slider-bar-${s.id}`}),this.render(),this.bindEvents()}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)}render(){var m,d,x,w,v,T,b,E,M,O,k,L,I;if(!this.task.startTime||!this.task.endTime)return;if(this.task.endTime.isBefore(this.task.startTime)){H.error("The endTime of the current task is earlier than the startTime.",this.task);return}const t=this.context.getOptions().row.height,e=K(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,h=tt(this.unpackFunc(this.context.getOptions().bar.radius)),l=this.unpackFunc(this.context.getOptions().bar.shadowColor)||"rgba(0, 0, 0, 0.2)",g=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.slider||(this.slider=new y.Group({dragBoundFunc:A=>{let D=0,G=Math.abs(this.rowWidth-this.slider.width());if(this.context.getOptions().bar.move.link.parent==="strict"&&this.task.parent){if(this.task.parent.startTime){const B=this.task.parent.startTime;D=this.context.store.getTimeAxis().getTimeLeft(B)}if(this.task.parent.endTime){const B=this.task.parent.endTime,W=this.context.store.getTimeAxis().getTimeLeft(B);G=Math.abs(W-this.slider.width())}}return{x:R(A.x,D,G),y:this.y+i+this.offsetY}}})),this.slider.position({x:s,y:i}),this.slider.size({width:o,height:e});const p=!!this.unpackFunc(this.context.getOptions().bar.move.enabled)&&(this.task.isSummary()?this.context.getOptions().summary.move.enabled:!0);if(this.slider.draggable(p),this.slider.on("mouseover",A=>{p&&!this.isDragging&&(A.target.getStage().container().style.cursor="grab"),this.handleBarHighlight({shadowColor:F(l).alpha(F(l).alpha()+.1).toHex(),shadowBlur:Math.max((g||1)*2,4),shadowOffsetX:Math.max(c||1,2),shadowOffsetY:Math.max((u||1)*1.5,4)}),this.context.event.emit(S.SLIDER_HOVER,A.evt,this.task)}),this.slider.on("mouseout",A=>{p&&!this.isDragging&&(A.target.getStage().container().style.cursor="default"),this.isDragging||this.handleBarHighlight({shadowColor:l,shadowBlur:g,shadowOffsetX:c,shadowOffsetY:u}),this.context.event.emit(S.SLIDER_LEAVE,A.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 A=this.unpackFunc(this.context.getOptions().milestone.size),D=Math.min(A||e,t/2),G=this.unpackFunc(this.context.getOptions().milestone.color)||r,z=this.unpackFunc(this.context.getOptions().milestone.border.color),B=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 y.RegularPolygon({sides:3,radius:D,rotation:0,fill:G,stroke:z,strokeWidth:B,y:D/3*2});break;case"circle":this.sliderBar=new y.Circle({radius:D,fill:G,stroke:z,strokeWidth:B,y:D/2});break;case"star":this.sliderBar=new y.Star({numPoints:5,innerRadius:D/2,outerRadius:D,fill:G,stroke:z,strokeWidth:B,y:D/2});break;case"diamond":default:this.sliderBar=new y.RegularPolygon({sides:4,radius:D,rotation:0,fill:G,stroke:z,strokeWidth:B,y:D/2})}if(this.slider.add(this.sliderBar),this.unpackFunc(this.context.getOptions().milestone.label.show)){const $=this.unpackFunc(this.context.getOptions().milestone.label.text),N=this.unpackFunc(this.context.getOptions().milestone.label.position),Q=this.unpackFunc(this.context.getOptions().milestone.label.fontSize),Fe=this.unpackFunc(this.context.getOptions().milestone.label.fontFamily),Be=this.unpackFunc(this.context.getOptions().milestone.label.color),it=new y.Text({height:e,text:$,fill:Be||G,fontSize:Q,fontFamily:Fe}),lt=it.measureSize($);it.width(lt.width);const V={x:0,y:0};switch(N){case"top-left":V.x=-(12+lt.width),V.y=-8;break;case"bottom-left":V.x=-(12+lt.width),V.y=10;break;case"bottom-right":V.x=12,V.y=10;break;case"top-right":default:V.x=12,V.y=-8;break}it.setAttrs(V),this.slider.add(it)}}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 A=this.unpackFunc(this.context.getOptions().summary.color)||r,D=t*.2,G=t*.3,z=B=>new y.Shape({sceneFunc:(W,$)=>{const N=G*.5;W.beginPath(),W.moveTo(0,(t-D)/2),W.lineTo(N,(t-D)/2),W.lineTo(N,(t-D)/2+D),W.lineTo(0,(t-D)/2+D+G),W.lineTo(0,(t-D)/2),W.rect(N,(t-D)/2,B-2*N,D),W.moveTo(B-N,(t-D)/2),W.lineTo(B,(t-D)/2),W.lineTo(B,(t-D)/2+D+G),W.lineTo(B-N,(t-D)/2+D),W.lineTo(B-N,(t-D)/2),W.fillStrokeShape($)},width:B,fill:A,shadowColor:l,shadowBlur:g,shadowOffsetX:c,shadowOffsetY:u,y:-(G+D)/2-i/2});!this.sliderBar||this.sliderBar.width()!==o?(this.sliderBar&&this.sliderBar.destroy(),this.sliderBar=z(o),this.slider.add(this.sliderBar)):this.sliderBar.setAttrs({fill:A,shadowColor:l,shadowBlur:g,shadowOffsetX:c,shadowOffsetY:u}),this.sliderType="summary"}else{this.sliderBar&&this.sliderType!=="bar"&&(this.slider.destroyChildren(),this.sliderBar=null),this.sliderBar||(this.sliderBar=new y.Rect({x:0,y:0}),this.slider.add(this.sliderBar),this.sliderType="bar"),this.sliderBar.setAttrs({width:o,height:e,fill:r,cornerRadius:h}),this.renderProgress(o,e);const A=(m=this.context.getOptions().bar.move.single)==null?void 0:m.icon,D=(d=this.context.getOptions().bar.move.single)==null?void 0:d.backgroundColor,G=D?F(D).alpha(((x=this.context.getOptions().bar.move.single)==null?void 0:x.opacity)??1).toHex():F(r).brighten(30*(this.unpackFunc((w=this.context.getOptions().bar.progress)==null?void 0:w.show)?-1:1)).alpha(((v=this.context.getOptions().bar.move.single)==null?void 0:v.opacity)??1).toHex();if(!!this.unpackFunc((T=this.context.getOptions().bar.move.single)==null?void 0:T.left)){if(!this.leftHandleGroup){this.leftHandleGroup=new y.Group({x:0,y:0,opacity:0}),this.slider.add(this.leftHandleGroup),this.leftHandleGroup.on("mousedown",$=>{this.resizeMove($,"left")}),this.leftHandleGroup.on("mouseover",$=>{setTimeout(()=>{$.target.getStage().container().style.cursor="ew-resize"},0)}),this.leftHandleGroup.on("mouseout",$=>{this.isDragging||($.target.getStage().container().style.cursor="default")});const W=new y.Rect({x:0,y:0});this.leftHandleGroup.add(W),A!==null&&ut(A||Ct,this.handlerWidth,e).then($=>{var Q;const N=new y.Image({image:$,x:0,y:(e-this.handlerWidth)/2,width:this.handlerWidth,height:this.handlerWidth});(Q=this.leftHandleGroup)==null||Q.add(N)})}(b=this.leftHandleGroup.findOne("Rect"))==null||b.setAttrs({width:this.handlerWidth,height:e,fill:G,cornerRadius:[h[0],0,0,h[3]]}),(E=this.leftHandleGroup.findOne("Image"))==null||E.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 y.Group({x:0,y:0,opacity:0}),this.slider.add(this.rightHandleGroup),this.rightHandleGroup.on("mousedown",$=>{this.resizeMove($,"right")}),this.rightHandleGroup.on("mouseover",$=>{setTimeout(()=>{$.target.getStage().container().style.cursor="ew-resize"},0)}),this.rightHandleGroup.on("mouseout",$=>{this.isDragging||($.target.getStage().container().style.cursor="default")});const W=new y.Rect({x:0,y:0});this.rightHandleGroup.add(W),A!==null&&ut(A||Ct,this.handlerWidth,e).then($=>{var Q;const N=new y.Image({image:$,x:o-this.handlerWidth,y:(e-this.handlerWidth)/2,width:this.handlerWidth,height:this.handlerWidth});(Q=this.rightHandleGroup)==null||Q.add(N)})}(O=this.rightHandleGroup.findOne("Rect"))==null||O.setAttrs({x:o-this.handlerWidth,width:this.handlerWidth,height:e,fill:G,cornerRadius:[0,h[1],h[2],0]}),(k=this.rightHandleGroup.findOne("Image"))==null||k.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(),(I=this.rightHandleGroup)==null||I.moveToTop()}this.isDragging||this.sliderBar.setAttrs({shadowColor:l,shadowBlur:g,shadowOffsetX:c,shadowOffsetY:u}),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(h=>h.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 h=new y.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(h)}}renderProgress(t,e){var i,s,n,o,r,h,l,g,c,u,p,m;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 d=Rt(this.task.progress,((s=this.context.getOptions().bar.progress)==null?void 0:s.targetVal)??100);if(d===0)return;const x=this.unpackFunc(this.context.getOptions().bar.backgroundColor)||this.context.getOptions().primaryColor,w=this.unpackFunc((n=this.context.getOptions().bar.progress)==null?void 0:n.backgroundColor)||F(x).brighten(((o=this.context.getOptions().bar.progress)==null?void 0:o.amount)||30).toHex(),v=tt(this.unpackFunc(this.context.getOptions().bar.radius)),T=tt(this.unpackFunc((r=this.context.getOptions().bar.progress)==null?void 0:r.radius),2);T[0]=v[0],T[3]=v[3],d===1&&(T[1]=v[1],T[2]=v[2]);const b=t*d;this.progressGroup?(this.progressGroup.width(b),this.progressGroup.destroyChildren()):(this.progressGroup=new y.Group({x:0,y:0,width:b,height:e,listening:!1}),this.slider.add(this.progressGroup));const E=new y.Rect({x:0,y:0,width:b,height:e,fill:w,cornerRadius:T,opacity:this.unpackFunc((h=this.context.getOptions().bar.progress)==null?void 0:h.opacity)});this.progressGroup.add(E);const M=`${ot(d*100,(l=this.context.getOptions().bar.progress)==null?void 0:l.decimal)}%`,O=new y.Text().measureSize(M).width,k=this.unpackFunc((g=this.context.getOptions().bar.progress)==null?void 0:g.textAlign),L=new y.Text({x:0,y:k==="top"?-e:0,width:k==="right"?b+O:Math.max(b,O),height:e,fill:this.unpackFunc((c=this.context.getOptions().bar.progress)==null?void 0:c.color)||F("#000000").mix(w,50).alpha(.7).toHex(),text:M,fontSize:this.unpackFunc((u=this.context.getOptions().bar.progress)==null?void 0:u.fontSize)||10,fontStyle:this.unpackFunc((p=this.context.getOptions().bar.progress)==null?void 0:p.fontStyle)||"italic",fontFamily:"Arial",verticalAlign:k==="top"?"bottom":"middle",align:"right"});(m=this.progressGroup)==null||m.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(S.SLIDER_CLICK,t.evt,this.task))}),this.slider.on("contextmenu",t=>{t.cancelBubble=!0,t.evt.stopPropagation(),t.evt.preventDefault(),this.context.event.emit(S.SLIDER_CONTEXTMENU,t.evt,this.task)}),this.slider.on("dblclick",t=>{t.evt.button===0&&(t.cancelBubble=!0,this.context.event.emit(S.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();e&&(this.isDragging=!0,this.oldTasks=[],this.context.event.emit(S.SLIDER_MOVING,!0),e.container().style.cursor="grabbing",this.handleMove(t,e))}handleDragMove(t){if(!this.isDragging)return;if(t.evt.movementX>0?this.draggingDirection="right":t.evt.movementX<0&&(this.draggingDirection="left"),!!this.context.getOptions().bar.move.byUnit){const i=t.target.x(),s=this.context.store.getTimeAxis().getCellWidth(),n=dt(i,s);t.target.x(n)}}handleDragEnd(t){this.stopAutoMove(),this.stopAutoScroll(),this.stopAutoExpand(),this.isDragging=!1,this.draggingDirection="none",this.oldTasks.length>0&&(this.context.event.emit(S.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)",h=this.unpackFunc(this.context.getOptions().bar.shadowBlur)||0,l=this.unpackFunc(this.context.getOptions().bar.shadowOffsetX)||0,g=this.unpackFunc(this.context.getOptions().bar.shadowOffsetY)||0;this.handleBarHighlight({shadowColor:r,shadowBlur:h,shadowOffsetX:l,shadowOffsetY:g}),this.handleResizeHighlight(0),e.container().style.cursor="default"}}}this.context.event.emit(S.SLIDER_MOVING,!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();this.autoMoveTimer=window.setInterval(()=>{const r=t.target.width(),h=t.target.x()-this.offsetX,l=h+r,g=-this.offsetX,c=g+i,u=h<=g-this.offsetX+this.EDGE_THRESHOLD,p=l>=c-this.offsetX-this.EDGE_THRESHOLD;if(u)if(g<=0)t.target.x(0),this.stopAutoScroll(),s||(this.draggingDirection==="left"?this.startAutoExpand("left"):this.stopAutoExpand());else if(this.draggingDirection==="left"){const m=n?-o:-this.SCROLL_STEP;this.startAutoScroll(m,n,()=>{t.target.x(t.target.x()+m)})}else this.stopAutoScroll();else if(p)if(c>=this.context.store.getTimeAxis().getTotalWidth())t.target.x(this.context.store.getTimeAxis().getTotalWidth()-r),this.stopAutoScroll(),s||(this.draggingDirection==="right"?this.startAutoExpand("right"):this.stopAutoExpand());else if(this.draggingDirection==="right"){const m=n?o:this.SCROLL_STEP;this.startAutoScroll(m,n,()=>{t.target.x(t.target.x()+m)})}else this.stopAutoScroll();else this.stopAutoExpand(),this.stopAutoScroll();this.emitUpdate("both")},this.MOVE_INTERVAL)}resizeMove(t,e){var x;t.cancelBubble=!0;const i=t.target.getStage();if(!i)return;this.isDragging=!0,this.context.event.emit(S.SLIDER_MOVING,!0);let s=((x=i.getPointerPosition())==null?void 0:x.x)||0;const n=!!this.context.getOptions().bar.move.byUnit,o=this.context.store.getTimeAxis().getCellWidth(),r=!!this.context.getOptions().bar.move.lock,h=i.width();let l=0,g=0;this.autoMoveTimer=window.setInterval(()=>{const w=this.slider.width(),v=this.slider.x(),T=v+w,b=-this.offsetX,E=b+h,M=v<=b+this.EDGE_THRESHOLD,O=T>=E-this.EDGE_THRESHOLD;if(M&&e==="left"){if(b<=0)this.slider.x(0),this.stopAutoScroll(),r||(this.draggingDirection==="left"?this.startAutoExpand("left"):this.stopAutoExpand());else if(this.draggingDirection==="left"){const k=n?-o:-this.SCROLL_STEP;this.startAutoScroll(k,n,()=>{l+=k,this.slider.x(this.slider.x()+k)})}else this.stopAutoScroll();this.emitUpdate("left")}else if(O&&e==="right"){if(E>=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 k=n?o:this.SCROLL_STEP;this.startAutoScroll(k,n,()=>{g+=k,this.slider.x(this.slider.x()+k)})}else this.stopAutoScroll();this.emitUpdate("right")}else if(e==="right"&&v<=b&&T<=b+this.EDGE_THRESHOLD+o){const k=n?-o:-this.SCROLL_STEP;this.startAutoScroll(k,n,()=>{g+=k,this.slider.width(Math.max(this.slider.width(),o)),this.slider.width()>o&&this.slider.x(this.slider.x()+k),this.emitUpdate("right")})}else if(e==="left"&&T>=E&&v>=E-this.EDGE_THRESHOLD-o){const k=n?o:this.SCROLL_STEP;this.startAutoScroll(k,n,()=>{l+=k,this.slider.width(Math.max(this.slider.width(),o)),this.slider.width()>o&&this.slider.x(this.slider.x()+k),this.emitUpdate("left")})}else this.stopAutoExpand(),this.stopAutoScroll()},this.MOVE_INTERVAL);let c;const u=this.slider.x(),p=this.slider.width(),m=w=>{var b;w.movementX>0?this.draggingDirection="right":w.movementX<0&&(this.draggingDirection="left");const v=Math.max(((b=i.getPointerPosition())==null?void 0:b.x)||0,0);let T=v-s;n&&(T=dt(T,o)),(c===void 0||c!==T)&&(e==="left"?p-T-l>=o&&v<h-this.EDGE_THRESHOLD&&(this.slider.width(p-T-l),this.slider.x(u+T+l),this.emitUpdate("left")):p+T+g>=o&&v>this.EDGE_THRESHOLD&&(this.slider.width(p+T+g),this.emitUpdate("right")),c=T)},d=()=>{this.handleDragEnd(t),document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",d)};document.addEventListener("mousemove",m),document.addEventListener("mouseup",d)}startAutoExpand(t){if(this.autoExpandTimer)return;const e=this.context.store.getTimeAxis();this.autoExpandTimer=window.setInterval(()=>{e.expand(t,1),this.context.event.emit(S.CHART_OFFSET_CHANGE),t==="left"&&this.slider.x(0)},this.AUTO_EXPAND_INTERVAL)}startAutoScroll(t,e,i){if(this.autoScrollTimer)return;const s=this.context.getScrollbar();s&&(this.autoScrollTimer=window.setInterval(()=>{const n=s.getScrollPosition();s.scrollTo({x:n.x+t,y:n.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 y.Tween({node:this.leftHandleGroup,opacity:t,duration:.2}).play(),this.rightHandleGroup&&new y.Tween({node:this.rightHandleGroup,opacity:t,duration:.2}).play()}handleBarHighlight(t){this.sliderBar&&new y.Tween({...t,node:this.sliderBar,duration:.2}).play()}}class Se{constructor(t,e,i,s,n,o,r){a(this,"row");a(this,"slider");a(this,"cacheKey","");this.context=t,this.task=e,this.width=o,this.height=r,this.row=new y.Group;const h=new y.Rect({x:s,y:n,width:o,height:r,id:i,listening:!1});this.row.add(h),this.slider=new Te(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 ve{constructor(t,e,i,s){a(this,"rowsGroup");a(this,"rowsCache",new Map);a(this,"rowBgGroup");a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);a(this,"offsetY",0);a(this,"highlightedRowId",null);a(this,"highlightRect",null);a(this,"selectedRowId",null);a(this,"selectedRect",null);this.context=t,this.stage=e,this.layer=i,this.bgLayer=s,this.rowsGroup=new y.Group({name:"chart-body-rows"}),this.layer.add(this.rowsGroup),this.rowBgGroup=new y.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){const e=this.context.getOptions().row.height,i=q();this.rowBgGroup.destroyChildren(),t.forEach((s,n)=>{const o=`chart-row-${s.id}`;let r=this.rowsCache.get(o);const l=s.flatIndex*e+this.context.getOptions().header.height;r?(r.update(0,l),r.setOffset(this.offsetX,this.offsetY)):(r=new Se(this.context,s,o,0,l,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 y.Rect({x:0,y:l+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(S.ROW_HIGHLIGHT,t=>{this.highlightRow(t)}),this.context.event.on(S.ROW_UNHIGHLIGHT,t=>{this.unhighlightRow(t)}),this.context.event.on(S.TASK_SELECTED,t=>{this.selectRow(t.id)}),this.context.event.on(S.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(S.ROW_UNHIGHLIGHT,this.highlightedRowId),i&&this.context.event.emit(S.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){if(this.context.store.getDataManager().isTaskSelected(i.id))return;this.context.store.getDataManager().selectTask(i.id),this.context.event.emit(S.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(S.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(S.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)return;this.highlightedRowId=t;const e=this.rowsCache.get(`chart-row-${t}`);if(!e)return;this.highlightRect&&this.highlightRect.destroy();const s=e.task.flatIndex*this.context.getOptions().row.height+this.context.getOptions().header.height;this.selectedRowId!==t&&(this.highlightRect=new y.Rect({x:0,y:s+this.offsetY,width:this.width,height:this.context.getOptions().row.height,fill:F(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 s=e.task.flatIndex*this.context.getOptions().row.height+this.context.getOptions().header.height;this.highlightRect.y(s+this.offsetY)}this.layer.batchDraw()}clearHighlight(){this.highlightRect&&(this.highlightRect.destroy(),this.highlightRect=null),this.highlightedRowId=null}selectRow(t){var n;this.selectedRowId=t;const e=this.rowsCache.get(`chart-row-${t}`);if(!e)return;this.selectedRect&&this.selectedRect.destroy(),this.selectedRowId===this.highlightedRowId&&((n=this.highlightRect)==null||n.fill("transparent"));const s=e.task.flatIndex*this.context.getOptions().row.height+this.context.getOptions().header.height;this.selectedRect=new y.Rect({x:0,y:s+this.offsetY,width:this.width,height:this.context.getOptions().row.height,fill:F(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 Dt{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 h,l;o===0?(h=n,l=i+n):o===90?(h=i+n,l=n):(h=Math.abs(Math.ceil((i+n)/Math.sin(r))),l=Math.abs(Math.ceil((i+n)/Math.cos(r))));const g=new y.Stage({container:document.createElement("div"),width:h,height:l}),c=new y.Layer;g.add(c);const u=new y.Group;if(o===0||o===90){const m=new y.Line({points:[0,0,o===0?h:0,o===0?0:l],stroke:e,strokeWidth:i,perfectDrawEnabled:!0});u.add(m)}else for(let m=-h;m<h*2;m+=h){const d=m+i/2,x=0,w=m+i/2+(Math.cos(r)<0?-h:h),v=l,T=new y.Line({points:[Math.ceil(d),Math.ceil(x),Math.ceil(w),Math.ceil(v)],stroke:e,strokeWidth:i,perfectDrawEnabled:!0,lineCap:"square",lineJoin:"miter"});u.add(T)}c.add(u),c.draw();const p=new Image;return p.src=g.toDataURL(),g.destroy(),p}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=F(e),h=new y.Stage({container:document.createElement("div"),width:n,height:o}),l=new y.Layer;h.add(l),[{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(u=>{const p=new y.Circle({x:u.x,y:u.y,radius:i/2,fill:r.toString()});l.add(p)}),l.draw();const c=new Image;return c.src=h.toDataURL(),h.destroy(),c}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,h=new y.Stage({container:document.createElement("div"),width:o,height:r}),l=new y.Layer;h.add(l);const g=new y.Group;g.add(new y.Line({points:[0,0,o,r],stroke:e,strokeWidth:i,perfectDrawEnabled:!0})),g.add(new y.Line({points:[0,r,o,0],stroke:e,strokeWidth:i,perfectDrawEnabled:!0})),l.add(g),l.draw();const c=new Image;return c.src=h.toDataURL(),h.destroy(),c}}class ke{constructor(t,e){a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);a(this,"offsetY",0);a(this,"weekendGroup");a(this,"patternImage",null);this.context=t,this.layer=e,this.weekendGroup=new y.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,h=this.context.store.getDataManager().getVisibleSize()*o,l=Math.max(0,-this.offsetX),g=l+this.width;for(let c=t;c<=e;){let u=s;if(u=s*2*(i==="day"?1:24),this.isWeekend(c)){const p=this.context.store.getTimeAxis().getTimeLeft(c),m=n,d=h;if(p+u<l){c=c.add(2,"day");continue}if(p>g)break;!this.patternImage&&this.context.getOptions().weekend.pattern&&(this.patternImage=await Dt.createPattern(this.context.getOptions().weekend));const w=new y.Rect({name:"weekend-rect",x:p,y:m,width:u,height:d,...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(w),c=c.add(2,"day")}else c=c.add(1,"day")}this.layer.batchDraw()}}class Oe{constructor(t,e,i){a(this,"arrowAnimation");a(this,"todayLine");a(this,"todayTextGroup");a(this,"triangle");a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);a(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 c,u,p,m,d,x,w;const t=Object.assign({show:!0,type:"line",backgroundColor:F("lightblue").toHex(),opacity:1,width:1},this.context.getOptions().today||{});if(!t.show)return;let e=_();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=F(t.backgroundColor).alpha(t.opacity).toHex(),h=(t.type==="block"?s+n/2:s)+this.offsetX,l=[h,o,h,this.height],g=t.type==="line"?t.width:n;if(this.todayLine?(this.todayLine.points(l),this.todayLine.stroke(r),this.todayLine.strokeWidth(g)):(this.todayLine=new y.Line({points:l,stroke:r,strokeWidth:g}),this.bgLayer.add(this.todayLine)),(c=this.context.getOptions().today.text)!=null&&c.show){const v=((u=this.context.getOptions().today.text)==null?void 0:u.fontSize)||10,T=((p=this.context.getOptions().today.text)==null?void 0:p.fontFamily)||"Arial",b=((m=this.context.getOptions().today.text)==null?void 0:m.content)||"今天",E=new y.Text({fontSize:v,fontFamily:T}).measureSize(b),M=((d=this.context.getOptions().today.text)==null?void 0:d.color)||"white",O=((x=this.context.getOptions().today.text)==null?void 0:x.backgroundColor)||r;if(!this.todayTextGroup)this.todayTextGroup=new y.Group({x:s+this.offsetX+g,y:o,opacity:(w=this.context.getOptions().today.text)==null?void 0:w.opacity}),this.todayTextGroup.add(new y.Rect({x:0,y:0,width:E.width+12,height:E.height+8,fill:O,cornerRadius:0,name:"today-text-bg"})),this.todayTextGroup.add(new y.Text({x:0,y:0,text:b,fontSize:v,fontFamily:T,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 k=this.todayTextGroup.findOne(".today-text");k==null||k.setAttrs({text:b,fill:M,fontSize:v,fontFamily:T,padding:5});const L=this.todayTextGroup.findOne(".today-text-bg");L==null||L.setAttrs({width:E.width+12,height:E.height+8,fill:O})}}else this.todayTextGroup&&(this.todayTextGroup.destroy(),this.todayTextGroup=void 0);t.type==="line"&&(this.triangle?(this.triangle.x(h),this.triangle.fill(r)):(this.triangle=new y.RegularPolygon({x:h,y:o-8,sides:3,radius:8,fill:r,rotation:180,name:"today-triangle"}),this.arrowAnimation=new y.Animation(v=>{var b;const T=Math.sin(v.time*4*Math.PI/2e3)+o-8;(b=this.triangle)==null||b.y(T)},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){a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);a(this,"offsetY",0);a(this,"holidayGroup");a(this,"patternImage",new WeakMap);this.context=t,this.layer=e,this.holidayGroup=new y.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 c,u,p,m,d,x,w,v;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,h=this.context.getOptions().row.height,g=this.context.store.getDataManager().getVisibleSize()*h;for(let T=s;T<=n;T=T.add(1,"day")){const b=t.find(E=>{if(C.isArray(E.date)){if(E.date.some(M=>_(M).isSame(T,"day")))return E}else if(_(E.date).isSame(T,"day"))return E});if(b){const E=this.context.store.getTimeAxis().getTimeLeft(T),M=r,O=g;if(E+o<e)continue;if(E>i)break;!this.patternImage.has(b)&&(b.pattern||this.context.getOptions().holiday.pattern)&&this.patternImage.set(b,await Dt.createPattern({backgroundColor:this.context.getOptions().primaryColor,...b,...this.context.getOptions().holiday}));const L=new y.Rect({name:"holiday-rect",x:E,y:M,width:o,height:O,...this.patternImage.get(b)?{fillPatternImage:this.patternImage.get(b)??void 0,fillPatternRepeat:"repeat",fillPatternOffset:{x:0,y:0},fillPatternScale:{x:1,y:1},opacity:b.opacity||this.context.getOptions().holiday.opacity}:{fill:b.backgroundColor||this.context.getOptions().holiday.backgroundColor||this.context.getOptions().primaryColor,opacity:b.opacity||this.context.getOptions().holiday.opacity}});if(this.holidayGroup.add(L),(c=b.text)!=null&&c.show){if(C.isArray(b.date)&&!_(b.date[0]).isSame(T,"day"))continue;const I=((u=b.text)==null?void 0:u.fontSize)||10,A=((p=b.text)==null?void 0:p.fontFamily)||"Arial",D=((m=b.text)==null?void 0:m.content)||"",G=new y.Text({fontSize:I,fontFamily:A}).measureSize(D),z=((d=b.text)==null?void 0:d.color)||"white",B=((x=b.text)==null?void 0:x.backgroundColor)||b.backgroundColor||((w=this.context.getOptions().holiday)==null?void 0:w.backgroundColor)||this.context.getOptions().primaryColor,W=new y.Group({name:"holiday-text-group",x:E,y:M,opacity:(v=b.text)==null?void 0:v.opacity}),$=new y.Text({text:D,fill:z,fontSize:I,fontFamily:A,padding:5}),N=new y.Rect({x:0,y:0,width:G.width+12,height:G.height+8,fill:B});W.add(N),W.add($),this.holidayGroup.add(W)}}}this.layer.batchDraw()}}class Me{constructor(t,e){a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);a(this,"offsetY",0);a(this,"flagGroup");this.context=t,this.layer=e,this.flagGroup=new y.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 c,u,p,m,d,x,w;if(this.clearFlag(),!((c=this.context.getOptions().flag)!=null&&c.show))return;const t=(u=this.context.getOptions().flag)==null?void 0:u.data;if(!t||t.length===0)return;const e=((p=this.context.getOptions().flag)==null?void 0:p.backgroundColor)||this.context.getOptions().primaryColor,i=((m=this.context.getOptions().flag)==null?void 0:m.opacity)||1,s=((d=this.context.getOptions().flag)==null?void 0:d.color)||(F(e).isDark()?"white":"black"),n=((x=this.context.getOptions().flag)==null?void 0:x.fontFamily)||"Arial",o=((w=this.context.getOptions().flag)==null?void 0:w.fontSize)||10,r=Math.max(0,-this.offsetX),h=r+this.width,l=this.context.store.getTimeAxis().getCellWidth(),g=this.context.getOptions().header.height;this.context.getOptions().row.height,this.context.store.getDataManager().getVisibleSize(),t.forEach(v=>{const T=_(v.date),b=this.context.store.getTimeAxis().getTimeLeft(T),E=g;if(b+l<r||b>h)return;const O=[b,g,b,this.height],k=new y.Line({points:O,stroke:v.backgroundColor||e,opacity:v.opacity||i,strokeWidth:1});this.flagGroup.add(k);const L=v.content||"";if(L){const I=new y.Text({text:L,x:b+5,y:E+5,fontSize:o,fontFamily:n,fill:v.color||s,verticalAlign:"middle",align:"left"}),A=new y.Rect({x:b,y:E,width:I.measureSize(L).width+12,height:I.measureSize(L).height+8,fill:v.backgroundColor||e});this.flagGroup.add(A),this.flagGroup.add(I)}else if(v.flag)switch(v.flag){case"banner":this.flagGroup.add(new y.Rect({x:b,y:E,width:20,height:10,fill:v.backgroundColor||e,opacity:v.opacity||i}));break;case"pennant":this.flagGroup.add(new y.Line({points:[b,E,b+20,E+5,b,E+10],fill:v.backgroundColor||e,opacity:v.opacity||i,closed:!0}));break;case"tag":this.flagGroup.add(new y.Line({points:[b,E,b+20,E,b+15,E+5,b+20,E+10,b,E+10],fill:v.backgroundColor||e,opacity:v.opacity||i,closed:!0}));break;case"wedge":this.flagGroup.add(new y.Line({points:[b,E,b+20,E,b+25,E+5,b+20,E+10,b,E+10],fill:v.backgroundColor||e,opacity:v.opacity||i,closed:!0}));break;case"ribbon":this.flagGroup.add(new y.Line({points:[b,E,b+15,E+2,b+20,E,b+20,E+10,b+15,E+12,b,E+10],fill:v.backgroundColor||e,opacity:v.opacity||i,closed:!0,tension:.1}));break}}),this.layer.batchDraw()}}class Le{constructor(t,e,i){a(this,"tasks",[]);a(this,"pointGroup");a(this,"linksGroup");a(this,"templateArrow");a(this,"isDragging",!1);a(this,"isSliderMoving",!1);a(this,"selectedMap",new Map);a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);a(this,"offsetY",0);this.context=t,this.stage=e,this.layer=i,this.linksGroup=new y.Group({name:"links-group"}),this.pointGroup=new y.Group({name:"point-group"}),this.templateArrow=new y.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(S.ROW_HIGHLIGHT,t=>{this.highlightPoint(t)}),this.context.event.on(S.ROW_UNHIGHLIGHT,t=>{this.unhighlightPoint(t)}),this.context.event.on(S.SLIDER_MOVING,t=>{this.isSliderMoving=t})}resize(t,e){this.width=t,this.height=e,this.calculateLinks(),this.calculatePoints()}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),this.calculateLinks(),this.calculatePoints()}update(){this.calculateLinks(),this.calculatePoints()}render(t){this.tasks=t,this.update()}destroy(){this.linksGroup.destroy(),this.pointGroup.destroy(),this.templateArrow.destroy(),this.selectedMap.clear()}calculatePoints(){if(this.pointGroup.destroyChildren(),!this.context.getOptions().links.create.enabled)return;const t=this.context.getOptions().header.height,e=this.context.getOptions().row.height,i=e/2+t,s=this.context.getOptions().links.create.radius,n=this.context.getOptions().links.create.mode==="always"?.5:0,o=this.context.getOptions().links.create.color||this.context.getOptions().primaryColor,r=F(o).alpha(this.context.getOptions().links.create.opacity??1).toHex(),h=this.context.getOptions().links.create.width;this.tasks.forEach(l=>{if(this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.show,l)&&this.context.store.getDataManager().isTaskVisible(l)&&l.startTime&&l.endTime){const g=this.context.store.getTimeAxis().getTimeLeft(l.startTime),c=this.context.store.getTimeAxis().getTimeLeft(l.endTime);let u=this.context.getOptions().links.gap;l.isMilestone()&&(u+=e/2);const p=i+e*l.flatIndex;let m=!0,d=!0,x=this.context.store.getOptionManager().unpackFunc(this.context.getOptions().links.create.from,l);if(C.isBoolean(x)?m=d=x:C.isString(x)&&(m=x==="S",d=x==="F"),m){const w=new y.Circle({id:`point-${l.id}-left`,x:g-u,y:p,radius:s,opacity:n,stroke:r,strokeWidth:h});this.pointGroup.add(w),w.on("mousedown",v=>{this.isDragging=!0,this.createLink(v,"S",o,[g-u,p],l.id)}),w.on("mouseover",v=>{this.isSliderMoving||(this.stage.container().style.cursor="pointer")}),w.on("mouseout",v=>{this.isDragging||this.isSliderMoving||(this.stage.container().style.cursor="default")})}if(d){const w=new y.Circle({id:`point-${l.id}-right`,x:c+u,y:p,radius:s,opacity:n,stroke:r,strokeWidth:h});this.pointGroup.add(w),w.on("mousedown",v=>{this.isDragging=!0,this.createLink(v,"F",o,[c+u,p],l.id)}),w.on("mouseover",v=>{this.isSliderMoving||(this.stage.container().style.cursor="pointer")}),w.on("mouseout",v=>{this.isDragging||this.isSliderMoving||(this.stage.container().style.cursor="default")})}}})}calculateLinks(){if(this.linksGroup.destroyChildren(),!this.context.getOptions().links.show)return;const t=this.context.getOptions().links.data,e=[];t.forEach(i=>{const s=this.createId(i);this.selectedMap.has(s)&&e.push(s)}),this.selectedMap.forEach((i,s)=>{e.includes(s)||this.selectedMap.delete(s)}),t.forEach(i=>{var o,r,h;const s=this.context.store.getDataManager().getTaskById(i.from),n=this.context.store.getDataManager().getTaskById(i.to);if(s||H.warn(`No corresponding FROM task [${i.from}] was found for the link. Info:`,i),n||H.warn(`No corresponding TO task [${i.to}] was found for the link. Info:`,i),s&&this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.show,s)&&this.context.store.getDataManager().isTaskVisible(s)&&n&&this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.show,n)&&this.context.store.getDataManager().isTaskVisible(n)){const l=this.getPoints(s,n,i);if(l.length<=2)H.warn("The link position has some error.",i);else{const g=this.createId(i),c=i.radius??this.context.getOptions().links.radius,u=((o=i.arrow)==null?void 0:o.width)??this.context.getOptions().links.arrow.width,p=((r=i.arrow)==null?void 0:r.height)??this.context.getOptions().links.arrow.height,m=i.width??this.context.getOptions().links.width,d=new y.Group({id:g}),x=new y.Circle({radius:c,fill:i.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,x:l[0],y:l[1]});d.add(x);const w=Math.floor(l.length/2),v=w%2===0?w:w-1,T=l.slice(0,v+2),b=l.slice(v),E=new y.Line({points:T,stroke:i.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,strokeWidth:m,lineCap:"round",lineJoin:"round",dash:i.dash||this.context.getOptions().links.dash,hitStrokeWidth:10,draggable:!0,dragBoundFunc:O=>({x:0,y:0})});d.add(E),E.on("dragstart",O=>{this.handleDrag(O,i,"S",[l[l.length-2],l[l.length-1]],g)});const M=new y.Arrow({points:b,stroke:i.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,strokeWidth:m,pointerLength:p,pointerWidth:u,fill:((h=i.arrow)==null?void 0:h.color)||this.context.getOptions().links.arrow.color||i.color||this.context.getOptions().links.color||this.context.getOptions().primaryColor,lineJoin:"round",dash:i.dash||this.context.getOptions().links.dash,hitStrokeWidth:10,draggable:!0,dragBoundFunc:O=>({x:0,y:0})});d.add(M),M.on("dragstart",O=>{this.handleDrag(O,i,"F",[l[0],l[1]],g)}),this.linksGroup.add(d),d.on("mouseover",O=>{O.target.moveToTop(),this.context.getOptions().links.move.enabled===!0&&(this.stage.container().style.cursor="pointer"),this.selectedMap.has(g)||this.handleHighlight(d,c,u,p,m,2)}),d.on("mouseout",O=>{this.selectedMap.has(g)||this.handleHighlight(d,c,u,p,m,0),!this.isDragging&&(this.stage.container().style.cursor="default")}),d.on("mousedown",O=>{this.isDragging=!0}),d.on("click",O=>{O.cancelBubble=!0,this.isDragging=!1,d.moveToTop(),O.evt.button===0?this.selectedMap.has(g)?(this.selectedMap.delete(g),this.context.event.emit(S.SELECT_LINK,null,i,this.selectedMap.values().toArray())):(this.selectedMap.set(g,i),this.context.event.emit(S.SELECT_LINK,i,null,this.selectedMap.values().toArray())):O.evt.button===2&&this.context.event.emit(S.CONTEXT_LINK,O.evt,i)}),this.selectedMap.has(g)&&this.handleHighlight(d,c,u,p,m,2,!0)}}})}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,h=e.isMilestone()?s/2:0,l=this.context.store.getTimeAxis().getTimeLeft(e.startTime)-h,g=this.context.store.getTimeAxis().getTimeLeft(e.endTime)+h;let c=[];switch(i.type||"FS"){case"FF":c=this.createFF(i,t,e,o,r,l,g);break;case"SS":c=this.createSS(i,t,e,o,r,l,g);break;case"SF":c=this.createSF(i,t,e,o,r,l,g);break;case"FS":default:c=this.createFS(i,t,e,o,r,l,g)}return c}return[]}createFS(t,e,i,s,n,o,r){const h=this.context.getOptions().header.height,l=this.context.getOptions().row.height,g=l/2+h,c=t.gap||this.context.getOptions().links.gap,u=[n+c,.05+g+l*e.flatIndex];{const p=t.distance?parseInt(t.distance):this.context.getOptions().links.distance;if(isNaN(p))H.error("Link's distance must be a Numeric");else{const m=n+c+p,d=o-c-p,x=[Math.max(m,d),g+l*e.flatIndex];u.push(...x);const w=l*e.flatIndex+h+(e.flatIndex<=i.flatIndex?l:0);u.push(x[0],w),u.push(d,w),u.push(d,g+l*i.flatIndex)}}return u.push(o-c,g+l*i.flatIndex),u}createFF(t,e,i,s,n,o,r){const h=this.context.getOptions().header.height,l=this.context.getOptions().row.height,g=l/2+h,c=t.gap||this.context.getOptions().links.gap,u=[n+c,.05+g+l*e.flatIndex];{const p=t.distance?parseInt(t.distance):this.context.getOptions().links.distance;if(isNaN(p))H.error("Link's distance must be a Numeric");else{const m=n+c+p,d=r+c+p,x=[m<=d?d:m,g+l*e.flatIndex];u.push(...x),u.push(Math.max(d,m),g+l*i.flatIndex)}}return u.push(r+c,g+l*i.flatIndex),u}createSS(t,e,i,s,n,o,r){const h=this.context.getOptions().header.height,l=this.context.getOptions().row.height,g=l/2+h,c=t.gap||this.context.getOptions().links.gap,u=[s-c,.05+g+l*e.flatIndex];{const p=t.distance?parseInt(t.distance):this.context.getOptions().links.distance;if(isNaN(p))H.error("Link's distance must be a Numeric");else{const m=s-c-p,d=o-c-p;u.push(Math.min(d,m),g+l*e.flatIndex),u.push(Math.min(d,m),g+l*i.flatIndex)}}return u.push(o-c,g+l*i.flatIndex),u}createSF(t,e,i,s,n,o,r){const h=this.context.getOptions().header.height,l=this.context.getOptions().row.height,g=l/2+h,c=t.gap||this.context.getOptions().links.gap,u=[s-c,.05+g+l*e.flatIndex];{const p=t.distance?parseInt(t.distance):this.context.getOptions().links.distance;if(isNaN(p))H.error("Link's distance must be a Numeric");else{const m=s-c-p,d=r+c+p,x=[Math.min(m,d),g+l*e.flatIndex];u.push(...x);const w=l*e.flatIndex+h+(e.flatIndex<=i.flatIndex?l:0);u.push(x[0],w),u.push(d,w),u.push(d,g+l*i.flatIndex)}}return u.push(r+c,g+l*i.flatIndex),u}handleDrag(t,e,i,s,n){var x,w,v;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:((x=e.arrow)==null?void 0:x.height)??this.context.getOptions().links.arrow.height,pointerWidth:((w=e.arrow)==null?void 0:w.width)??this.context.getOptions().links.arrow.width,fill:((v=e.arrow)==null?void 0:v.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 h=this.context.getOptions().header.height,l=this.context.getOptions().row.height,g=l/2+h,c=e.gap||this.context.getOptions().links.gap;let u=null;const p=()=>{const T=this.stage.getPointerPosition();if(!T||(u=this.getTaskByPosition(T),!u))return;const{allowLeft:b,allowRight:E}=this.isAllowDrop(u,e.from);if(this.templateArrow.visible(!0),o==null||o.visible(!1),u!=null&&u.startTime&&(u!=null&&u.endTime)){const M=this.context.store.getTimeAxis().getTimeLeft(u.startTime),O=this.context.store.getTimeAxis().getTimeLeft(u.endTime),k=(O+M)/2+this.offsetX;let L=M-c;T.x<=k?r="S":(r="F",L=O+c),i==="S"?(this.templateArrow.points([L,g+l*u.flatIndex,...s]),E?this.stage.container().style.cursor="pointer":this.stage.container().style.cursor="not-allowed"):i==="F"&&(this.templateArrow.points([...s,L,g+l*u.flatIndex]),b?this.stage.container().style.cursor="pointer":this.stage.container().style.cursor="not-allowed")}},m=()=>{var E,M;let T;const b=C.cloneDeep(e);if(r&&u&&(i==="S"?(T=`${r}${(e.type||"FS")[1]}`,b.from=u.id):i==="F"&&(T=`${(e.type||"FS")[0]}${r}`,b.to=u.id)),T&&u&&!(b.from===b.to&&["FF","SS"].includes(T))){const{allowLeft:O,allowRight:k}=this.isAllowDrop(u,b.from);b.type=T,((E=b.type)==null?void 0:E.slice(1))==="S"&&O||((M=b.type)==null?void 0:M.slice(1))==="F"&&k?this.context.event.emit(S.UPDATE_LINK,b):this.context.event.emit(S.ERROR,J.LINK_NOT_ALLOWED)}else this.context.event.emit(S.ERROR,J.LINK_SAME);this.templateArrow.visible(!1),this.stage.container().style.cursor="default",this.isDragging=!1,this.calculateLinks(),document.removeEventListener("mousemove",p),document.removeEventListener("mouseup",m)},d=T=>{T.key==="Escape"&&(this.templateArrow.visible(!1),this.stage.container().style.cursor="default",this.isDragging=!1,o==null||o.visible(!0),document.removeEventListener("mousemove",p),document.removeEventListener("mouseup",m),document.removeEventListener("keydown",d))};document.addEventListener("mousemove",p),document.addEventListener("mouseup",m),document.addEventListener("keydown",d)}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);let o=null;const r=this.context.getOptions().header.height,h=this.context.getOptions().row.height,l=h/2+r,g=this.context.getOptions().links.gap;let c=null;const u=()=>{const d=this.stage.getPointerPosition();if(!d||(c=this.getTaskByPosition(d),!c))return;const{allowLeft:x,allowRight:w}=this.isAllowDrop(c,n);if(this.templateArrow.visible(!0),c.startTime&&c.endTime){const v=this.context.store.getTimeAxis().getTimeLeft(c.startTime),T=this.context.store.getTimeAxis().getTimeLeft(c.endTime),b=(T+v)/2+this.offsetX;let E=v-g;d.x<=b?o="S":(o="F",E=T+g),this.templateArrow.points([...s,E,l+h*c.flatIndex]),o==="S"&&!x?this.stage.container().style.cursor="not-allowed":o==="F"&&!w?this.stage.container().style.cursor="not-allowed":this.stage.container().style.cursor="pointer"}},p=()=>{let d;if(o&&(d=`${e}${o}`),d&&c)if(this.context.getOptions().links.data.some(x=>x.from===n&&x.to===c.id&&x.type===d))this.context.event.emit(S.ERROR,J.LINK_EXIST);else if(n===c.id&&e===o)this.context.event.emit(S.ERROR,J.LINK_SAME);else{const{allowLeft:x,allowRight:w}=this.isAllowDrop(c,n);o==="S"&&x||o==="F"&&w?this.context.event.emit(S.CREATE_LINK,{from:n,to:c.id,type:d,color:i}):this.context.event.emit(S.ERROR,J.LINK_NOT_ALLOWED)}this.templateArrow.visible(!1),this.stage.container().style.cursor="default",this.isDragging=!1,this.calculateLinks(),document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",p)},m=d=>{d.key==="Escape"&&(this.templateArrow.visible(!1),this.stage.container().style.cursor="default",this.isDragging=!1,document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",p),document.removeEventListener("keydown",m))};document.addEventListener("mousemove",u),document.addEventListener("mouseup",p),document.addEventListener("keydown",m)}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}isAllowDrop(t,e){let i=!0,s=!0,n=this.context.getOptions().links.create.to;return C.isFunction(n)&&(n=n(t.getEmitData(),this.context.store.getDataManager().getTaskById(e).getEmitData())),C.isBoolean(n)?i=s=n:C.isString(n)&&(i=n==="S",s=n==="F"),{allowLeft:i,allowRight:s}}handleHighlight(t,e,i,s,n,o,r=!1){const h=t.findOne("Circle"),l=t.findOne("Arrow"),g=t.findOne("Line");h&&new y.Tween({node:h,radius:e+o,duration:r?0:.1}).play(),l&&new y.Tween({node:l,pointerWidth:i+o,pointerLength:s+o,strokeWidth:n+o,duration:r?0:.1}).play(),g&&new y.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 y.Tween({node:i,opacity:e,duration:.1}).play(),s&&new y.Tween({node:s,opacity:e,duration:.1}).play()}}class Ce{constructor(t,e,i){a(this,"tasks",[]);a(this,"chartBaselineGroup");a(this,"indicatorGroup");a(this,"baselineGroup");a(this,"width",0);a(this,"height",0);a(this,"offsetX",0);a(this,"offsetY",0);this.context=t,this.stage=e,this.layer=i,this.chartBaselineGroup=new y.Group({name:"chart-baseline-group"}),this.baselineGroup=new y.Group({name:"baseline-group"}),this.chartBaselineGroup.add(this.baselineGroup),this.indicatorGroup=new y.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=tt(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)&&this.context.store.getDataManager().isTaskVisible(r)){const h=this.context.store.getDataManager().getBaselinesByTaskId(r.id),l=K(this.context.getOptions().baselines.height||this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.height,r),e),g=this.context.getOptions().baselines.offset??0;h.forEach((c,u)=>{if(!c.validate())return;const p=this.context.store.getTimeAxis().getTimeLeft(c.startTime),m=this.context.store.getTimeAxis().getTimeLeft(c.endTime),d=new y.Group({id:`baseline-group-${c.id}`});this.renderBaselineBar(d,r,c,p,m,i,e,l,t,o,n,s,g);const x=this.context.getOptions().baselines.compare,w=c.getTimeDiff();if(!x.enabled||!w)return;const v=x.mode;c.highlight&&(v==="highlight"||v==="both")&&this.renderCompareHighlight(d,r,c,w),u===0&&(v==="indicator"||v==="both")&&this.renderCompareIndicator(r,c,w),this.bindEvents(d,r,c),this.baselineGroup.add(d)})}})}renderBaselineBar(t,e,i,s,n,o,r,h,l,g,c,u,p){if(this.context.getOptions().baselines.mode==="shadow"){const m=o+r*e.flatIndex-h/2+p,d=new y.Rect({id:`baseline-item-${i.id}`,x:s,y:m,width:n-s,height:h,cornerRadius:u,fill:g,opacity:c});t.add(d),this.renderText(t,e,i,s,n,m,h)}else if(this.context.getOptions().baselines.mode==="line"){const m=K(this.context.getOptions().baselines.height??5,r);let d=l+r*e.flatIndex+p;const x=this.context.getOptions().baselines.position;let w="";x==="top"?(d+=+m/2,w="line_top"):x==="center"?(d+=r/2,w="line_center"):(d+=r-m/2,w="line_bottom");const v=new y.Line({id:`baseline-item-${i.id}`,points:[s,d,n,d],stroke:g,opacity:c,strokeWidth:m,lineCap:"butt",lineJoin:"round"});t.add(v),this.renderText(t,e,i,s,n,d,m,w)}}renderText(t,e,i,s,n,o,r,h){const l=`chart-baseline-text-${i.id}`;if((()=>{this.baselineGroup.find(`#${l}`)&&this.baselineGroup.find(`#${l}`).forEach(w=>w.remove())})(),!this.context.getOptions().baselines.label.show)return;const c=this.context.getOptions().baselines.label.field,u=c?i.getField(c):i.name;if(!u||u==="")return;const p=n-s-10,m=Math.max(this.context.getOptions().baselines.label.fontSize,r),d=new y.Text({text:u,id:l,x:s+5,y:o,width:p,height:m,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"});h==="line_bottom"?d.setAttrs({y:o-m/2,verticalAlign:"top"}):h==="line_center"?d.setAttrs({y:o-m/2,verticalAlign:"middle"}):h==="line_top"&&d.setAttrs({y:o-r/2,verticalAlign:"bottom"}),r>=m&&d.setAttrs({verticalAlign:"middle"});const x=d.measureSize(u);(this.context.getOptions().baselines.label.forceDisplay||p>x.width)&&t.add(d)}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,h=this.context.getOptions().baselines.mode,l={fill:"",stroke:"",opacity:r[n].opacity};if(h==="shadow")l.fill=r[n].backgroundColor;else if(h==="line")l.stroke=r[n].backgroundColor;else return;o.setAttrs(l)}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,h=K(this.context.store.getOptionManager().unpackFunc(this.context.getOptions().bar.height,t),r);let l=s.backgroundColor;const g=this.context.store.getTimeAxis().getTimeLeft(t.startTime),c=this.context.store.getTimeAxis().getTimeLeft(t.endTime);let u=(r-h)/2+r*t.flatIndex+o;if(n.position==="bottom"&&(u+=h),n.show==="start"||n.show==="both"||n.show===!0){const p=i.startStatus;if(p&&s.compare.indicator[p].show){l=F(s.compare.indicator[p].color).alpha(s.compare.indicator[p].opacity).toHex();const m=new y.Circle({x:g-n.size,y:u,fill:l,radius:n.size/2});this.indicatorGroup.add(m);let d=`${ot(i.startDiff)}${i.unit} ${p}`;const x=s.compare.indicator[p].text;C.isFunction(x)?d=x(i.startDiff,{...t.getEmitData(),baseline:e}):C.isString(x)&&(d=x);const w=new y.Text({y:u-n.fontSize/2,text:d,fill:l,fontSize:n.fontSize,fontFamily:n.fontFamily||"Arial"}),v=w.measureSize(d);w.x(g-n.size-v.width-5),this.indicatorGroup.add(w)}}if(n.show==="end"||n.show==="both"||n.show===!0){const p=i.endStatus;if(p&&s.compare.indicator[p].show){l=F(s.compare.indicator[p].color).alpha(s.compare.indicator[p].opacity).toHex();const m=new y.Circle({x:c+n.size,y:u,fill:l,radius:n.size/2});this.indicatorGroup.add(m);let d=`${ot(i.endDiff)}${i.unit} ${p}`;const x=s.compare.indicator[p].text;C.isFunction(x)?d=x(i.endDiff,{...t.getEmitData(),baseline:e}):C.isString(x)&&(d=x);const w=new y.Text({x:c+n.size+5,y:u-n.fontSize/2,text:d,fill:l,fontSize:n.fontSize,fontFamily:n.fontFamily||"Arial"});this.indicatorGroup.add(w)}}}bindEvents(t,e,i){t.on("mouseover",s=>{this.context.event.emit(S.BASELINE_MOUSEOVER,s.evt,e,i)}),t.on("mouseout",s=>{this.context.event.emit(S.BASELINE_MOUSEOUT,s.evt,e,i)}),t.on("click",s=>{s.cancelBubble=!0,s.evt.button===0?this.context.event.emit(S.BASELINE_CLICK,s.evt,e,i):s.evt.button===2&&this.context.event.emit(S.BASELINE_CONTEXTMENU,s.evt,e,i)})}}class De{constructor(t,e){a(this,"stage");a(this,"headerLayer");a(this,"bodyGroup");a(this,"gridGroup");a(this,"weekendGroup");a(this,"holidayGroup");a(this,"flagGroup");a(this,"todayLayer");a(this,"linkGroup");a(this,"baselineGroup");a(this,"bgLayer");a(this,"bodyLayer");a(this,"width",0);a(this,"height",0);this.context=t,this.container=e,this.stage=new y.Stage({container:this.container,width:this.container.clientWidth,height:this.container.clientHeight}),this.bgLayer=new y.Layer,this.weekendGroup=new ke(this.context,this.bgLayer),this.holidayGroup=new Ee(this.context,this.bgLayer),this.flagGroup=new Me(this.context,this.bgLayer),this.gridGroup=new be(this.context,this.bgLayer),this.stage.add(this.bgLayer),this.headerLayer=new we(this.context,this.stage),this.todayLayer=new Oe(this.context,this.bgLayer,this.headerLayer.layer),this.bodyLayer=new y.Layer,this.linkGroup=new Le(this.context,this.stage,this.bodyLayer),this.baselineGroup=new Ce(this.context,this.stage,this.bodyLayer),this.bodyGroup=new ve(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){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){this.render(t,e,i)}updateTask(t){this.bodyGroup.updateTask(t),this.linkGroup.update(),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.bgLayer.destroy(),this.stage.destroy()}}const _e='<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 He{constructor(t,e){a(this,"line");a(this,"initialX",0);a(this,"initialWidth",0);a(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=_e,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.left=`${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=h=>{h.preventDefault(),h.stopPropagation(),t=h.clientX,e=this.container.getBoundingClientRect();const l=s[s.length-1].key;this.initialWidth=i.getColumnWidth(l);const g=parseInt(this.line.style.left)+2;this.root.event.emit(S.SHOW_GUIDELINE,g);const c=p=>o(p),u=p=>r(p,c,u);document.addEventListener("mousemove",c),document.addEventListener("mouseup",u)},o=h=>{if(h.preventDefault(),!e)return;const l=h.clientX-t;s[s.length-1].key;const g=50-this.initialWidth,u=e.width-20-this.initialX,p=Math.max(g,Math.min(u,l)),m=this.initialX+p;this.root.event.emit(S.MOVE_GUIDELINE,m)},r=(h,l,g)=>{document.removeEventListener("mousemove",l),document.removeEventListener("mouseup",g),this.root.event.emit(S.HIDE_GUIDELINE);const c=h.clientX-t,u=s[s.length-1].key,p=Math.max(50,this.initialWidth+c);i.setColumnWidth(u,p),this.root.event.emit(S.UPDATE_TABLE_HEADER)};this.line.addEventListener("mousedown",n)}}class Ae{constructor(t,e){a(this,"element");a(this,"container");a(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(S.SHOW_GUIDELINE,t=>{this.show(t)}),this.context.event.on(S.HIDE_GUIDELINE,()=>{this.hide()}),this.context.event.on(S.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.left=`${i}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 Ie{constructor(t=16){a(this,"taskQueue",new Map);a(this,"taskHandlers",new Map);a(this,"isScheduled",!1);a(this,"delay");a(this,"debouncedFlush");this.delay=t,this.debouncedFlush=C.debounce(()=>{this.flushTaskQueue()},t)}registerHandler(t,e){this.taskHandlers.set(t,e),H.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){H.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){H.debug(`RenderScheduler: 立即执行任务 ${t}`),this.executeTask(n);return}this.taskQueue.set(t,n),H.debug(`RenderScheduler: 添加任务到队列 ${t}`),this.debouncedFlush()}immediateExecuteTask(t,e=[],i=!1){const s=this.taskHandlers.get(t);if(!s){H.warn(`RenderScheduler: 未找到任务类型 ${t} 的处理器`);return}H.debug(`RenderScheduler: 立即执行任务 ${t}`);const n={type:t,refresh:i,callback:s.callback,args:e,immediate:!0};this.executeTask(n)}immediateFlushAll(){H.debug("RenderScheduler: 立即执行所有队列任务"),this.cancelScheduled(),this.flushTaskQueue()}executeTask(t){try{t.callback(...t.args||[])}catch(e){H.error(`RenderScheduler: 执行任务 ${t.type} 时出错:`,e)}}flushTaskQueue(){if(this.taskQueue.size===0)return;H.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),H.debug(`RenderScheduler: 移除任务处理器 ${t}`)}getQueueSize(){return this.taskQueue.size}getRegisteredHandlers(){return Array.from(this.taskHandlers.keys())}destroy(){this.cancelScheduled(),this.taskHandlers.clear(),H.debug("RenderScheduler: 已销毁")}}class Ge{constructor(t,e){a(this,"scrollbar");a(this,"rootElement");a(this,"tableContainer");a(this,"chartContainer");a(this,"table");a(this,"chart");a(this,"middleLine");a(this,"renderScheduler");a(this,"_id",q());a(this,"width",0);a(this,"height",0);a(this,"isInitialized",!0);a(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)});a(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",`${F(t.row.hover.backgroundColor).alpha(t.row.hover.opacity)}`),this.rootElement.style.setProperty("--x-gantt-row-selected-color",`${F(t.row.select.backgroundColor).alpha(t.row.select.opacity)}`),this.rootElement.style.setProperty("--x-gantt-header-font-weight",`${t.header.fontWeight}`)});a(this,"handleUpdateTask",t=>{this.table.updateTask(t),this.chart.updateTask(t)});a(this,"handleColumnWidthChange",()=>{this.table.updateWidth(),this.updateSize()});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 Ae(this.context,this.container),this.middleLine=new He(this.context,this.rootElement),this.chartContainer=document.createElement("div"),this.chartContainer.className="x-gantt-chart",this.rootElement.appendChild(this.chartContainer),this.table=new ye(this.context,this.tableContainer),this.chart=new De(this.context,this.chartContainer),this.scrollbar=new pe(this.context,this.rootElement,this.context.store.getOptionManager().getOptions().scrollbar||{}),this.renderScheduler=new Ie(16),this.setupTaskHandlers(),this.updateSize(),this.setupEventListeners()}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",(t=!0)=>this.performRender(t),!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(S.DATA_UPDATE,()=>{this.renderScheduler.scheduleTask("DATA_UPDATE",[!0])}),this.context.event.on(S.SCROLL,()=>{this.renderScheduler.scheduleTask("SCROLL",[!0],{immediate:!0})}),this.context.event.on(S.COLUMN_WIDTH_CHANGE,()=>{this.renderScheduler.scheduleTask("COLUMN_WIDTH_CHANGE")}),this.context.event.on(S.VIEW_UPDATE,()=>{this.renderScheduler.scheduleTask("VIEW_UPDATE",[!0])}),this.context.event.on(S.UPDATE_TASK,t=>{this.renderScheduler.scheduleTask("UPDATE_TASK",[t],{immediate:!0})}),this.context.event.on(S.CHART_OFFSET_CHANGE,()=>{this.renderScheduler.scheduleTask("CHART_OFFSET_CHANGE",[!1])}),this.context.event.on(S.TOGGLE_COLLAPSE,()=>{this.renderScheduler.scheduleTask("CHART_OFFSET_CHANGE",[!1])})}performRender(t=!1){this.setStyleValue();const{x:e,y:i}=this.scrollbar.getScrollPosition(),s=this.context.store.getOptionManager().getOptions().row.height,n=this.context.store.getOptionManager().getOptions().header.height,o=Math.floor(i/s),r=Math.ceil((this.height-n)/s),h=2,l=Math.max(0,o),g=r+h,c=this.context.store.getDataManager().getVisibleTasks().slice(l,l+g);this.updateSize(),t?(this.table.refresh(i,c),this.chart.refresh(e,i,c)):(this.table.render(i,c),this.chart.render(e,i,c)),this.isInitialized&&(this.context.event.emit(S.LOADED),this.isInitialized=!1),H.debug("execute render")}render(t=!1){this.renderScheduler.scheduleTask("MANUAL_RENDER",[t])}immediateRender(t=!1){this.renderScheduler.immediateExecuteTask("MANUAL_RENDER",[t],t)}destroy(){H.debug("Renderer destroy"),this.renderScheduler.destroy(),this.scrollbar.destroy(),this.context.event.offAll()}}class Re{constructor(t,e,i){a(this,"_id",q());a(this,"store");a(this,"event",new At);a(this,"renderer");this.container=t,this.events=e,this.container.innerHTML="",this.store=new fe(this,i),this.renderer=new Ge(this,this.container),this.render(),this.registerEvents(),H.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),H.debug("GanttChart options updated"),this.render()}destroy(){H.debug("Gantt destroying..."),this.event.offAll(),this.renderer.destroy(),this.container.innerHTML=""}jumpTo(t){const e=_(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}_emit(t,...e){var i;this.events.has(t)&&((i=this.events.get(t))==null||i.forEach(s=>s(...e)))}registerEvents(){this.event.on(S.ERROR,t=>{this._emit("error",t)}),this.event.on(S.LOADED,()=>{this._emit("loaded")}),this.event.on(S.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(S.CHECK_TASK,(t,e)=>{this._emit("select",t.map(i=>i.data),e,this.store.getDataManager().getCheckedList().map(i=>i.data))}),this.event.on(S.UPDATE_LINK,t=>{this._emit("update:link",t)}),this.event.on(S.CREATE_LINK,t=>{this._emit("create:link",t)}),this.event.on(S.SELECT_LINK,(t,e,i)=>{this._emit("select:link",t,e,i)}),this.event.on(S.CONTEXT_LINK,(t,e)=>{this._emit("contextmenu:link",t,e)}),this.event.on(S.ROW_CLICK,(t,e)=>{this._emit("click:row",t,e.data)}),this.event.on(S.ROW_DBL_CLICK,(t,e)=>{this._emit("dblclick:row",t,e.data)}),this.event.on(S.ROW_CONTEXTMENU,(t,e)=>{this._emit("contextmenu:row",t,e.data)}),this.event.on(S.SLIDER_CLICK,(t,e)=>{this._emit("click:slider",t,e.data)}),this.event.on(S.SLIDER_DBL_CLICK,(t,e)=>{this._emit("dblclick:slider",t,e.data)}),this.event.on(S.SLIDER_CONTEXTMENU,(t,e)=>{this._emit("contextmenu:slider",t,e.data)}),this.event.on(S.SLIDER_HOVER,(t,e)=>{this._emit("hover:slider",t,e.data)}),this.event.on(S.SLIDER_LEAVE,(t,e)=>{this._emit("leave:slider",t,e.data)}),this.event.on(S.BASELINE_CLICK,(t,e,i)=>{this._emit("click:baseline",t,e.data,i.data)}),this.event.on(S.BASELINE_CONTEXTMENU,(t,e,i)=>{this._emit("contextmenu:baseline",t,e.data,i.data)}),this.event.on(S.BASELINE_MOUSEOVER,(t,e,i)=>{this._emit("hover:baseline",t,e.data,i.data)}),this.event.on(S.BASELINE_MOUSEOUT,(t,e,i)=>{this._emit("leave:baseline",t,e.data,i.data)})}}class We{constructor(t,e){a(this,"context");a(this,"events",new Map);e!=null&&e.logLevel&&H.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 H.exception(`Container ${t} not found or invalid.`);i.innerHTML="",i.classList.add("x-gantt-container"),this.context=new Re(i,this.events,e)}update(t,e={merge:!0}){this.context.updateOptions(t,e)}render(){this.context.render(),H.info("Gantt rendered successfully.")}destroy(){H.info("Gantt destroying..."),this.events.clear(),this.context.destroy(),H.info("Gantt destroyed successfully.")}jumpTo(t){return this.context.jumpTo(t)}on(t,e){var i;this.events.has(t)||this.events.set(t,[]),(i=this.events.get(t))==null||i.push(e)}}_t();const $e=ct;P.dayjs=_,P.XGantt=We,P.colorjs=F,P.generateId=q,P.version=$e,Object.defineProperty(P,Symbol.toStringTag,{value:"Module"})});
|