@svar-ui/vue-gantt 2.6.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/README.md ADDED
@@ -0,0 +1,105 @@
1
+ <div align="center">
2
+
3
+ # SVAR Vue Gantt Chart
4
+
5
+ </div>
6
+
7
+ <div align="center">
8
+
9
+ [Homepage](https://svar.dev/vue/gantt/) • [Getting Started](https://docs.svar.dev/vue/gantt/getting_started/) • [Demos](https://docs.svar.dev/vue/gantt/samples/#/base/willow)
10
+
11
+ </div>
12
+
13
+ <div align="center">
14
+
15
+ [![npm](https://img.shields.io/npm/v/@svar-ui/vue-gantt.svg)](https://www.npmjs.com/package/@svar-ui/vue-gantt)
16
+ [![License](https://img.shields.io/github/license/svar-widgets/vue-gantt)](https://github.com/svar-widgets/vue-gantt/blob/main/license.txt)
17
+ [![npm downloads](https://img.shields.io/npm/dm/@svar-ui/vue-gantt.svg)](https://www.npmjs.com/package/@svar-ui/vue-gantt)
18
+
19
+ </div>
20
+
21
+ [SVAR Vue Gantt](https://svar.dev/vue/gantt/) is a customizable, interactive Gantt chart component for Vue 3 designed for visualizing project timelines. The component provides an intuitive interface for managing tasks and dependencies directly on the timeline via drag-and-drop or a customizable task edit form. Comes with full TypeScript support, developer-friendly API, and flexible CSS styling.
22
+
23
+ The library provides a lightweight, MIT-licensed core for building Gantt charts with essentical project scheduling functionality. For more advanced use cases, the PRO edition adds scheduling logic such as auto-scheduling, working time calendars, critical path analysis, baselines, and other features required for complex project planning.
24
+
25
+ <div align="center">
26
+ <img src="https://svar.dev/images/github/basic-gantt-react.gif" alt="SVAR Vue Gantt Chart UI">
27
+ </div>
28
+
29
+ ### Key Features
30
+
31
+ - Interactive drag-and-drop task editing
32
+ - Task dependencies and hierarchical structure
33
+ - Configurable timeline with flexible time scales
34
+ - Customizable grid, task bars, and UI via CSS
35
+ - Sorting and filtering (including natural language search)
36
+ - Built-in tooltips, context menu, and toolbar
37
+ - Smooth performance with large datasets
38
+ - Zooming with scroll
39
+ - Hotkeys support for common actions
40
+ - Light and dark skins
41
+ - Full TypeScript support
42
+
43
+ ### :rocket: PRO Edition
44
+
45
+ SVAR Vue Gantt is available in open-source and [PRO Editions](https://svar.dev/vue/gantt/#pro). The PRO Edition offers additional features and automation logic:
46
+
47
+ - Scheduling logic → auto-scheduling, critical path, slack, summary tasks automation
48
+ - Planning tools → baselines, markers
49
+ - Calendar control → working time calendar
50
+ - Advanced structure → rollups, split tasks, unscheduled tasks
51
+ - Workflow features → undo/redo
52
+ - Data Export → PDF, PNG, Excel, MS Project import/export
53
+
54
+ Visit the [pricing page](https://svar.dev/vue/gantt/pricing/) for full feature comparison, licensing details, and **free trial**.
55
+
56
+ Or [see the live demo](https://svar.dev/demos/vue/gantt/).
57
+
58
+ ### :hammer_and_wrench: How to Use
59
+
60
+ To install SVAR Vue Gantt:
61
+
62
+ ```
63
+ npm install @svar-ui/vue-gantt
64
+ ```
65
+
66
+ To use the widget, simply import the package and include the component in your Vue file:
67
+
68
+ ```vue
69
+ <script setup>
70
+ import { Gantt } from "@svar-ui/vue-gantt";
71
+
72
+ const tasks = [
73
+ {
74
+ id: 1,
75
+ start: new Date(2024, 3, 2),
76
+ end: new Date(2024, 3, 17),
77
+ text: "Project planning",
78
+ progress: 30,
79
+ parent: 0,
80
+ type: "summary",
81
+ open: true,
82
+ details: "Outline the project's scope and resources.",
83
+ },
84
+ ];
85
+ const links = [];
86
+ const scales = [
87
+ { unit: "month", step: 1, format: "%F %Y" },
88
+ { unit: "day", step: 1, format: "%j" },
89
+ ];
90
+ </script>
91
+
92
+ <template>
93
+ <Gantt :tasks="tasks" :links="links" :scales="scales" />
94
+ </template>
95
+ ```
96
+
97
+ For further instructions, follow the detailed [how-to-start guide](https://docs.svar.dev/vue/gantt/getting_started/).
98
+
99
+ ### :star: Show Your Support
100
+
101
+ If SVAR Vue Gantt helps your project, give us a star! It helps us reach more developers and keeps us motivated to add new features.
102
+
103
+ ### :speech_balloon: Need Help?
104
+
105
+ [Post an Issue](https://github.com/svar-widgets/vue-gantt/issues/) or use our [community forum](https://forum.svar.dev).
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),f=require("@svar-ui/lib-vue"),R=require("@svar-ui/lib-dom"),He=require("@svar-ui/gantt-locales"),qe=require("@svar-ui/core-locales"),at=require("@svar-ui/lib-state"),X=require("@svar-ui/gantt-store"),et=require("@svar-ui/grid-store"),tt=require("@svar-ui/vue-grid"),se=require("@svar-ui/vue-core"),ot=require("@svar-ui/vue-toolbar"),st=require("@svar-ui/vue-menu"),ve=require("@svar-ui/vue-editor"),rt="2.6.0",it={version:rt};function ct(l,n,t){const o=l.getBoundingClientRect(),c=n.querySelector(".wx-body").getBoundingClientRect();return{top:o.top-c.top,left:o.left-c.left,dt:o.bottom-t.clientY,db:t.clientY-o.top}}function Xe(l){return l&&R.getID(l,"data-context-id")}const Ke=5;function ut(l,n){let t,o,c,T,b,m,y,w,V;function _(r){T=r.clientX,b=r.clientY,m={...ct(t,l,r),y:n.getTask(c).$y},document.body.style.userSelect="none"}function W(r){t=R.locate(r),Xe(t)&&(c=R.getID(t),V=setTimeout(()=>{w=!0,n&&n.touchStart&&n.touchStart(),_(r.touches[0])},500),l.addEventListener("touchmove",E),l.addEventListener("contextmenu",d),window.addEventListener("touchend",S))}function d(r){if(w||V)return r.preventDefault(),!1}function C(r){r.which===1&&(t=R.locate(r),Xe(t)&&(c=R.getID(t),l.addEventListener("mousemove",G),window.addEventListener("mouseup",h),_(r)))}function I(r){l.removeEventListener("mousemove",G),l.removeEventListener("touchmove",E),document.body.removeEventListener("mouseup",h),document.body.removeEventListener("touchend",S),document.body.style.userSelect="",r&&(l.removeEventListener("mousedown",C),l.removeEventListener("touchstart",W))}function Y(r){const $=r.clientX-T,F=r.clientY-b;if(!o){if(Math.abs($)<Ke&&Math.abs(F)<Ke||n&&n.start&&n.start({id:c,e:r})===!1)return;o=t.cloneNode(!0),o.style.pointerEvents="none",o.classList.add("wx-reorder-task"),o.style.position="absolute",o.style.left=m.left+"px",o.style.top=m.top+"px",t.style.visibility="hidden",t.parentNode.insertBefore(o,t)}if(o){const A=Math.round(Math.max(0,m.top+F));if(n&&n.move&&n.move({id:c,top:A,detail:y})===!1)return;const K=n.getTask(c),ne=K.$y;if(!m.start&&m.y===ne)return B();m.start=!0,m.y=K.$y-4,o.style.top=A+"px";const le=document.elementFromPoint(r.clientX,r.clientY),te=R.locate(le);if(te&&te!==t){const D=R.getID(te),O=te.getBoundingClientRect(),oe=O.top+O.height/2,ie=r.clientY+m.db>oe&&te.nextElementSibling!==t,L=r.clientY-m.dt<oe&&te.previousElementSibling!==t;y?.after===D||y?.before===D?y=null:ie?y={id:c,after:D}:L&&(y={id:c,before:D})}}}function G(r){Y(r)}function E(r){w?(r.preventDefault(),Y(r.touches[0])):V&&(clearTimeout(V),V=null)}function S(){w=null,V&&(clearTimeout(V),V=null),B()}function h(){B()}function B(){t&&(t.style.visibility=""),o&&(o.parentNode.removeChild(o),n&&n.end&&n.end({id:c,top:m.top})),c=t=o=m=y=null,I()}return l.style.position!=="absolute"&&(l.style.position="relative"),l.addEventListener("mousedown",C),l.addEventListener("touchstart",W),{destroy(){I(!0)}}}const re=(l,n)=>{const t=l.__vccOpts||l;for(const[o,c]of n)t[o]=c;return t},dt={key:1,class:"wx-toggle-placeholder"},ft={class:"wx-text"},mt={__name:"TextCell",props:{row:{},column:{}},setup(l){function n(t,o){return`justify-content:${o.align};padding-left: ${(t.$level-1)*20}px`}return(t,o)=>(e.openBlock(),e.createElementBlock("div",{class:"wx-content",style:e.normalizeStyle(n(l.row,l.column))},[!l.row.$empty&&(l.row.data||l.row.lazy)?(e.openBlock(),e.createElementBlock("i",{key:0,class:e.normalizeClass("wx-toggle-icon wxi-menu-"+(l.row.open?"down":"right")),"data-action":"open-task"},null,2)):(e.openBlock(),e.createElementBlock("i",dt)),e.createElementVNode("div",ft,[l.column._cell?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l.column._cell),{key:0,row:l.row,column:l.column},null,8,["row","column"])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(l.row.text),1)],64))])],4))}},pt=re(mt,[["__scopeId","data-v-6381f23e"]]),vt=["data-action"],ht={__name:"ActionCell",props:{column:{},cell:{}},setup(l){const n=l,t=e.computed(()=>n.column.id);return(o,c)=>l.cell||l.column.id==="add-task"?(e.openBlock(),e.createElementBlock("div",{key:0,style:e.normalizeStyle({textAlign:l.column.align})},[e.createElementVNode("i",{class:"wx-action-icon wxi-plus","data-action":t.value},null,8,vt)],4)):e.createCommentVNode("",!0)}},Ze=re(ht,[["__scopeId","data-v-abfc4b0a"]]),gt=Object.assign({name:"GanttGridGrid"},{__name:"Grid",props:e.mergeModels({readonly:{},compactMode:{},width:{default:0},columnWidth:{}},{display:{default:"all"},displayModifiers:{},tableAPI:{},tableAPIModifiers:{}}),emits:["update:display","update:tableAPI"],setup(l){const n=f.asDirective(ut),t=l,o=e.useModel(l,"display"),c=e.useModel(l,"tableAPI"),b=e.inject("wx-i18n").getGroup("gantt"),m=e.inject("gantt-store"),{scrollTop:y,cellHeight:w,focusTask:V,_selected:_,area:W,_tasks:d,_scales:C,_headerLength:I,columns:Y,_sort:G,calendar:E,durationUnit:S,splitTasks:h,filterValues:B}=m.getReactiveState(),r=f.subscribe(y),$=f.subscribe(w),F=f.subscribe(_),A=f.subscribe(W),K=f.subscribe(d,!0),ne=f.subscribe(C),le=f.subscribe(I),te=f.subscribe(Y),D=f.subscribe(G),O=f.subscribe(E),oe=f.subscribe(S),ie=f.subscribe(h),L=f.subscribe(B);let U=e.ref(null);function M(u,v){if(v==="add-task")m.exec(v,{target:u,task:{text:b("New Task")},mode:"child",show:!0,focus:u?"grid":null});else if(v==="open-task"){const g=he.value.find(a=>a.id===u);(g.data||g.lazy)&&m.exec(v,{id:u,mode:!g.open})}}function x(u){const v=R.locateID(u),g=u.target.dataset.action;g&&u.preventDefault(),v?g==="add-task"||g==="open-task"?M(v,g):m.exec("select-task",{id:v,toggle:u.ctrlKey||u.metaKey,range:u.shiftKey,show:"xy",focus:"grid"}):g==="add-task"&&M(null,g)}function H(u){if(!t.readonly){const v=R.locateID(u),g=R.locateID(u,"data-col-id");!(g&&ce.value.find(i=>i.id===g))?.editor&&v&&m.exec("show-editor",{id:v})}}let j;function de(u){const v=u.id,{before:g,after:a}=u,i=u.onMove;let s=g||a,k=g?"before":"after";if(i){if(k==="after"){const q=me.value.findIndex(ee=>ee.id===v),Q=me.value.findIndex(ee=>ee.id===s),J=me.value[Q];q-Q===1?k="before":J.data&&J.open&&(k="before",s=J.data[0].id)}j={id:v,[k]:s}}else j=null;m.exec("move-task",{id:v,mode:k,target:s,inProgress:i})}function p({id:u}){if(t.readonly||(m.getTask(u).open&&m.exec("open-task",{id:u,mode:!1}),U.value=he.value.find(v=>v.id===u),!U.value))return!1}function N({id:u,top:v}){j?de({...j,onMove:!1}):m.exec("drag-task",{id:u,top:v+be.value,inProgress:!1}),U.value=null}function P({id:u,top:v,detail:g}){g&&de({...g,onMove:!0}),m.exec("drag-task",{id:u,top:v+be.value,inProgress:!0})}const z=e.ref(0),ae=e.ref(0),Z=e.ref(null),fe=e.ref(null),ke=e.ref(!1);function Oe(u){const{key:v,isInput:g}=u;if(!g&&(v==="arrowup"||v==="arrowdown"))return u.eventSource="grid",m.exec("hotkey",u),!1;if(v==="enter"){const a=c.value.getState().focusCell;if(a){const{row:i,column:s}=a;s==="add-task"?M(i,"add-task"):s==="text"&&M(i,"open-task")}}}function Ie(u){c.value=u,u.intercept("hotkey",Oe),u.intercept("scroll",()=>!1),u.intercept("select-row",()=>!1),u.intercept("sort-rows",v=>{const{key:g,add:a}=v;let i=D.value?D.value.find(k=>k.key===g):null,s="asc";return i&&(s=!i||i.order==="asc"?"desc":"asc"),m.exec("sort-tasks",{key:g,order:s,add:a}),!1}),u.intercept("filter-rows",v=>{const{key:g,value:a}=v;return m.exec("filter-tasks",{key:g,value:a,open:!0}),!1}),u.on("resize-column",()=>{$e(!0)}),u.on("hide-column",v=>{v.mode||Ee(),$e()}),u.intercept("update-cell",v=>{const{id:g,column:a,value:i}=v,s=he.value.find(k=>k.id===g);if(s){const k={...s};let q=i;q&&!isNaN(q)&&!(q instanceof Date)&&(q*=1),k[a]=q,X.prepareEditTask(k,{calendar:O.value,durationUnit:oe.value,splitTasks:ie.value},a),m.exec("update-task",{id:g,task:k})}return!1})}const ce=e.computed(()=>{let u=te.value.map(a=>{a={...a};const i=[...a.header];return i.forEach(s=>{s.text&&(s.text=b(s.text))}),a.header=i,a});const v=u.findIndex(a=>a.id==="text"),g=u.findIndex(a=>a.id==="add-task");if(v!==-1&&(u[v].cell&&(u[v]._cell=u[v].cell),u[v].cell=pt),g!==-1){u[g].cell=u[g].cell||Ze;const a=u[g].header[0];if(u[g].header[0].cell=a.cell||Ze,t.readonly)u.splice(g,1);else if(t.compactMode){const[i]=u.splice(g,1);u.unshift(i)}}return u.length>0&&(u[u.length-1].resize=!1),u}),be=e.computed(()=>A.value.from),Te=e.computed(()=>ne.value.height),Le=e.computed(()=>!t.compactMode&&o.value!=="grid"?t.columnWidth>t.width:t.columnWidth>z.value),Se=e.computed(()=>o.value==="all"?`${t.width}px`:o.value==="grid"?"calc(100% - 4px)":ce.value.find(u=>u.id==="add-task")?"50px":"0"),We=e.computed(()=>`min-height:${ae.value+$.value*4}px;`),ze=e.computed(()=>We.value+(Le.value&&o.value==="all"?`width:${t.columnWidth}px;`:o.value==="grid"?Le.value?`width:${t.columnWidth}px;`:"width:100%;":"")),Pe=e.computed(()=>F.value.map(u=>u.id)),he=e.computed(()=>K.value.slice(A.value.start,A.value.end)),me=e.computed(()=>(U.value&&!he.value.find(v=>v.id===U.value.id)?[...he.value,U.value]:he.value).map(v=>({...v})));function De(){return ce.value.some(u=>u.flexgrow&&!u.hidden)}const Fe=e.computed(()=>(ke.value,De()));function $e(u){if(!De()){const v=_e.value.reduce((g,a)=>(u&&a.$width&&(a.$width=a.width),g+(a.hidden?0:a.width)),0);t.columnWidth}ke.value=!0,ke.value=!1}function Ee(){ce.value.filter(v=>v.flexgrow&&!v.hidden).length===1&&ce.value.forEach(v=>{v.$width&&!v.flexgrow&&!v.hidden&&(v.width=v.$width)})}const Me=e.computed(()=>{if(me.value&&D.value?.length){const u={};return D.value.forEach(({key:v,order:g},a)=>{u[v]={order:g,...D.value.length>1&&{index:a}}}),u}return{}}),Ne=e.computed(()=>Me.value?{...L.value}:L.value),_e=e.computed(()=>{let u=o.value==="chart"?ce.value.filter(g=>g.id==="add-task"):ce.value;const v=o.value==="all"?t.width:z.value;if(!Fe.value){let g=t.columnWidth,a=!1;if(ce.value.some(i=>i.$width)){let i=0;g=ce.value.reduce((s,k)=>(k.hidden||(i+=k.width,s+=k.$width||k.width),s),0),i>g&&g>=v&&(a=!0)}if(a||g<v){let i=1;return a||(i=(v-50)/(g-50||1)),u.map(s=>(s.id!=="add-task"&&!s.hidden&&(s.$width||(s.$width=s.width),s.width=s.$width*i),s))}}return u});function Ce(){Z.value&&me.value!==null&&(Z.value.querySelector(".wx-body").style.top=-(r.value-be.value)+"px")}e.watchEffect(()=>{Z.value&&(r.value,be.value,Ce())}),e.watchEffect(()=>{if(Z.value){_e.value,ze.value,o.value,Se.value,me.value;const u=new ResizeObserver(()=>{Ce()});u.observe(Z.value.querySelector(".wx-table-box .wx-body")),e.onWatcherCleanup(()=>{u.disconnect()})}});let we;e.onMounted(()=>{fe.value&&(we=new ResizeObserver(u=>{for(const v of u)z.value=v.contentRect.width,ae.value=v.contentRect.height}),we.observe(fe.value))}),e.onUnmounted(()=>{we?.disconnect()});let ye=!1;const pe=f.subscribe(V);e.watch(pe,u=>{if(!u)return;const{id:v,column:g}=u;g&&(ye||(ye=!0,requestAnimationFrame(()=>{const a=c.value.getState().focusCell;c.value.exec("focus-cell",{row:v,column:a?.column||ce.value[0]?.id}),ye=!1})))});const je=e.computed(()=>({start:p,end:N,move:P,getTask:m.getTask})),Ae=e.computed(()=>[...Pe.value]),Ue=e.computed(()=>({rowHeight:$.value,headerHeight:Te.value/le.value}));return(u,v)=>(e.openBlock(),e.createElementBlock("div",{class:"wx-table-container",style:e.normalizeStyle({flex:`0 0 ${Se.value}`}),ref_key:"tableContainer",ref:fe},[e.withDirectives((e.openBlock(),e.createElementBlock("div",{ref_key:"table",ref:Z,style:e.normalizeStyle(ze.value),class:"wx-table",onClick:x,onDblclick:H},[e.createVNode(e.unref(tt.Grid),{init:Ie,sizes:Ue.value,rowStyle:g=>g.$reorder?"wx-reorder-task":"",columnStyle:g=>`wx-text-${g.align} ${g.id==="add-task"?"wx-action":""}`,data:me.value,columns:_e.value,selectedRows:Ae.value,sortMarks:Me.value,filterValues:Ne.value},null,8,["sizes","rowStyle","columnStyle","data","columns","selectedRows","sortMarks","filterValues"])],36)),[[e.unref(n),je.value]])],4))}}),kt=re(gt,[["__scopeId","data-v-814ee4d3"]]),yt={__name:"CellGrid",props:e.mergeDefaults({borders:{default:""}},{borders:""}),setup(l){const n=e.inject("gantt-store"),{cellWidth:t,cellHeight:o}=n.getReactiveState(),c=f.subscribe(t),T=f.subscribe(o),b=e.ref(null),m=e.ref("#e4e4e4");return e.watchEffect(()=>{if(typeof getComputedStyle<"u"&&b.value){const y=getComputedStyle(b.value).getPropertyValue("--wx-gantt-border");m.value=y?y.substring(y.indexOf("#")):"#1d1e261a"}}),(y,w)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"node",ref:b,style:e.normalizeStyle(`width:100%; height:100%; background:url(${e.unref(X.grid)(e.unref(c),e.unref(T),m.value,l.borders)}); position: absolute;`)},null,4))}},xt={class:"wx-links"},bt=["points","onclick","data-link-id"],wt=["points"],Bt=Object.assign({name:"GanttChartLinks"},{__name:"Links",props:{onSelectLink:{type:Function},selectedLink:{},readonly:{}},setup(l){const n=f.asDirective(R.clickOutside),t=l,o=e.inject("gantt-store"),{_links:c,criticalPath:T}=o.getReactiveState(),b=f.subscribe(c),m=f.subscribe(T);function y(w){const V=w?.target?.classList;!V?.contains("wx-line")&&!V?.contains("wx-delete-button")&&t.onSelectLink(null)}return(w,V)=>(e.openBlock(),e.createElementBlock("svg",xt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),_=>(e.openBlock(),e.createElementBlock("polyline",{key:_.id,class:e.normalizeClass(["wx-line",{"wx-critical":e.unref(m)&&_.critical,"wx-line-selectable":!l.readonly}]),points:_.$p,onclick:()=>!l.readonly&&l.onSelectLink(_.id),"data-link-id":e.unref(R.setID)(_.id)},null,10,bt))),128)),!l.readonly&&l.selectedLink?e.withDirectives((e.openBlock(),e.createElementBlock("polyline",{key:0,class:"wx-line wx-line-selected wx-line-selectable wx-delete-link",points:l.selectedLink.$p},null,8,wt)),[[e.unref(n),y]]):e.createCommentVNode("",!0)]))}}),Tt=re(Bt,[["__scopeId","data-v-4939b3a5"]]),St=["data-tooltip-id"],$t=Object.assign({name:"GanttChartRollups"},{__name:"Rollups",props:{rollup:{},parent:{}},setup(l){return(n,t)=>(e.openBlock(),e.createElementBlock("div",{"data-tooltip-id":l.rollup.id,class:e.normalizeClass(`wx-rollup wx-${l.rollup.type}-rollup`),style:e.normalizeStyle(`left:${l.rollup.$x_rollup}px;top:${l.parent.$y+l.parent.$h+l.rollup.$y_rollup_relative}px;width:${l.rollup.$w_rollup}px;height:${l.rollup.$h_rollup}px;`)},null,14,St))}}),Et=re($t,[["__scopeId","data-v-e1e1122e"]]),_t={class:"wx-segments"},Ct=["data-segment"],It={key:0,class:"wx-progress-wrapper"},Lt={class:"wx-content"},zt={__name:"BarSegments",props:{task:{},type:{}},setup(l){const n=l;function t(c){const T=n.task.segments[c];return`left:${T.$x}px;top:0px;width:${T.$w}px;height:100%;`}function o(c){if(!n.task.progress)return 0;const T=n.task.duration*n.task.progress/100,b=n.task.segments;let m=0,y=0,w=null;do{const V=b[y];y===c&&(m>T?w=0:w=Math.min((T-m)/V.duration,1)*100),m+=V.duration,y++}while(w===null&&y<b.length);return w||0}return(c,T)=>(e.openBlock(),e.createElementBlock("div",_t,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.task.segments,(b,m)=>(e.openBlock(),e.createElementBlock("div",{key:m,class:e.normalizeClass(["wx-segment","wx-bar",`wx-${l.type}`]),"data-segment":m,style:e.normalizeStyle(t(m))},[l.task.progress?(e.openBlock(),e.createElementBlock("div",It,[e.createElementVNode("div",{class:"wx-progress-percent",style:e.normalizeStyle(`width:${o(m)}%`)},null,4)])):e.createCommentVNode("",!0),e.createElementVNode("div",Lt,e.toDisplayString(b.text||""),1)],14,Ct))),128))]))}},Dt=re(zt,[["__scopeId","data-v-558dfded"]]),Mt=["data-id","data-tooltip-id","tabindex"],Nt={key:0,class:"wx-progress-wrapper"},Rt={key:4,class:"wx-content"},Vt={key:1,class:"wx-text-out"},Ht=Object.assign({name:"GanttChartBars"},{__name:"Bars",props:{readonly:{},taskTemplate:{}},setup(l){const n=l,t=e.inject("gantt-store"),{_tasks:o,_links:c,area:T,_scales:b,taskTypes:m,baselines:y,_selected:w,rollups:V,_rollups:_,focusTask:W,criticalPath:d,tasks:C,schedule:I,splitTasks:Y,summary:G,slack:E}=t.getReactiveState(),S=f.subscribe(o,!0),h=f.subscribe(c),B=f.subscribe(T),r=f.subscribe(b),$=f.subscribe(m),F=f.subscribe(y),A=f.subscribe(w),K=f.subscribe(V),ne=f.subscribe(_),le=f.subscribe(d),te=f.subscribe(C),D=f.subscribe(I),O=f.subscribe(Y),oe=f.subscribe(G),ie=f.subscribe(E),L=e.computed(()=>S.value.slice(B.value.start,B.value.end).map(a=>({...a}))),U=e.computed(()=>r.value.lengthUnitWidth);let M=!1;const x=e.ref(void 0),H=e.ref(null);let j=null;const de=e.ref(null),p=e.computed(()=>de.value&&{...h.value.find(a=>a.id===de.value)}),N=e.ref(void 0);let P;function z(a){if(a.button!==0)return;const i=R.locate(a);i&&Z(i,a)}function ae(a){const i=R.locate(a);i&&(P=setTimeout(()=>{N.value=!0,Z(i,a.touches[0])},300))}function Z(a,i){const{clientX:s}=i,k=R.getID(a),q=t.getTask(k),Q=i.target.classList;if(!i.target.closest(".wx-delete-button")&&!n.readonly){if(Q.contains("wx-progress-marker")){const{progress:J}=t.getTask(k);j={id:k,x:s,progress:J,dx:0,node:a,marker:i.target},i.target.classList.add("wx-progress-in-drag")}else{const J=fe(a,i,q)||"move";if(H.value={id:k,mode:J,x:s,dx:0,l:q.$x,w:q.$w},O.value&&q.segments?.length){const ee=R.locate(i,"data-segment");ee&&(H.value.segmentIndex=ee.dataset.segment*1,X.extendDragOptions(q,H.value))}}Le()}}function fe(a,i,s){if(i.target.classList.contains("wx-line")||(s||(s=t.getTask(R.getID(a))),s.type==="milestone"||s.type==="summary"))return"";const k=R.locate(i,"data-segment");k&&(a=k);const{left:q,width:Q}=a.getBoundingClientRect(),J=(i.clientX-q)/Q;let ee=.2/(Q>200?Q/200:1);return J<ee?"start":J>1-ee?"end":""}function ke(a){N.value?(a.preventDefault(),Ie(a,a.touches[0])):P&&(clearTimeout(P),P=null)}function Oe(a){Ie(a,a)}function Ie(a,i){const{clientX:s}=i;if(!n.readonly)if(j){const{node:k,x:q,id:Q}=j,J=j.dx=s-q,ee=Math.round(J/k.offsetWidth*100);let ge=j.progress+ee;j.value=ge=Math.min(Math.max(0,ge),100),t.exec("update-task",{id:Q,task:{progress:ge},inProgress:!0})}else if(H.value){Ne(null);const{mode:k,l:q,w:Q,x:J,id:ee,start:ge,segment:Be,index:xe}=H.value,Ge=t.getTask(ee),ue=s-J,Ye=Math.round(U.value)||1;if(!ge&&Math.abs(ue)<20||k==="start"&&Q-ue<Ye||k==="end"&&Q+ue<Ye||k==="move"&&(ue<0&&q+ue<0||ue>0&&q+Q+ue>ye.value)||H.value.segment&&!X.isSegmentMoveAllowed(Ge,H.value))return;H.value.dx=ue;let Re,Ve;if(k==="start"?(Re=q+ue,Ve=Q-ue):k==="end"?(Re=q,Ve=Q+ue):k==="move"&&(Re=q+ue,Ve=Q),t.exec("drag-task",{id:ee,width:Ve,left:Re,inProgress:!0,...Be&&{segmentIndex:xe}}),!H.value.start&&(k==="move"&&Ge.$x===q||k!=="move"&&Ge.$w===Q))return M=!0,Te();H.value.start=!0}else{const k=R.locate(a);if(k){const q=t.getTask(R.getID(k)),J=R.locate(a,"data-segment")||k,ee=fe(J,i,q);J.style.cursor=ee&&!n.readonly?"col-resize":"pointer"}}}function ce(){Te()}function be(){N.value=null,P&&(clearTimeout(P),P=null),Te()}function Te(){if(j){const{dx:a,id:i,marker:s,value:k}=j;j=null,typeof k<"u"&&a&&t.exec("update-task",{id:i,task:{progress:k},inProgress:!1}),s.classList.remove("wx-progress-in-drag"),M=!0,Se()}else if(H.value){const{id:a,mode:i,dx:s,l:k,w:q,start:Q,segment:J,index:ee}=H.value;if(H.value=null,Q){const ge=Math.round(s/U.value);if(!ge)t.exec("drag-task",{id:a,width:q,left:k,inProgress:!1,...J&&{segmentIndex:ee}});else{let Be={},xe=t.getTask(a);J&&(xe=xe.segments[ee]),i==="move"?(Be.start=xe.start,Be.end=xe.end):Be[i]=xe[i],t.exec("update-task",{id:a,diff:ge,task:Be,...J&&{segmentIndex:ee}})}M=!0}Se()}}function Le(){document.body.style.userSelect="none"}function Se(){document.body.style.userSelect=""}function We(a){if(!n.readonly){const i=R.locateID(a.target);if(i&&!a.target.classList.contains("wx-link")){const s=R.locateID(a.target,"data-segment");t.exec("show-editor",{id:i,...s!==null&&{segmentIndex:s}})}}}function ze(a){if(M){M=!1;return}const i=R.locateID(a.target);if(i){const s=a.target.classList;if(s.contains("wx-link")){const k=s.contains("wx-left");if(!x.value){x.value={id:i,start:k};return}x.value.id!==i&&!Ee(i,k)&&t.exec("add-link",{link:{source:x.value.id,target:i,type:$e(x.value.start,k)}})}else if(s.contains("wx-delete-button-icon"))t.exec("delete-link",{id:de.value}),de.value=null;else{const k=R.locateID(a.target,"data-segment");t.exec("select-task",{id:i,toggle:a.ctrlKey||a.metaKey,range:a.shiftKey,...k!==null&&{segmentIndex:k}})}}Me()}function Pe(a){return`left:${a.$x}px;top:${a.$y}px;width:${a.$w}px;height:${a.$h}px;line-height:${a.$h}px;`}function he(a){return`left:${a.$x_base}px;top:${a.$y_base}px;width:${a.$w_base}px;height:${a.$h_base}px;`}function me(a){return`left:${a.$x_slack}px;top:${a.$y}px;width:${a.$w_slack}px;height:${a.$h}px;`}function De(a){if(N.value||P)return a.preventDefault(),!1}const Fe=["e2s","s2s","e2e","s2e"];function $e(a,i){return Fe[(a?1:0)+(i?0:2)]}function Ee(a,i){const s=x.value.id,k=x.value.start;return a===s?!0:h.value.find(q=>q.target===a&&q.source===s&&q.type===$e(k,i))}function Me(){x.value&&(x.value=null)}function Ne(a){de.value=a}const _e=e.computed(()=>$.value.map(a=>a.id));function Ce(a){let i=_e.value.includes(a)?a:"task";return["task","milestone","summary"].includes(a)||(i=`task ${i}`),i}function we(a){t.exec(a.action,a.data)}const ye=e.ref(0),pe=e.ref(null),je=e.computed(()=>A.value.length&&pe.value&&pe.value.contains(document.activeElement)),Ae=e.computed(()=>je.value&&A.value[A.value.length-1].id),Ue=f.subscribe(W);e.watch(Ue,a=>{if(a&&a.column===!1){const{id:i}=a,s=pe.value?.querySelector(`.wx-bar[data-id='${R.setID(i)}']`);s&&s.focus()}});const u=a=>le.value&&a.critical;function v(a){if(D.value.auto){const i=te.value.getSummaryId(a,!0),s=te.value.getSummaryId(x.value.id,!0);return x.value?.id&&!(Array.isArray(i)?i:[i]).includes(x.value.id)&&!(Array.isArray(s)?s:[s]).includes(a)}return x.value}let g;return e.onMounted(()=>{window.addEventListener("mouseup",ce),pe.value&&(ye.value=pe.value.offsetWidth,g=new ResizeObserver(a=>{for(const i of a)ye.value=i.target.offsetWidth}),g.observe(pe.value))}),e.onUnmounted(()=>{window.removeEventListener("mouseup",ce),g?.disconnect()}),(a,i)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"container",ref:pe,class:"wx-bars",style:e.normalizeStyle(`line-height: ${L.value.length?L.value[0].$h:0}px`),onContextmenu:De,onMousedown:z,onMousemove:Oe,onTouchstart:ae,onTouchmove:ke,onTouchend:be,onClick:ze,onDblclick:We,onDragstart:i[0]||(i[0]=e.withModifiers(()=>{},["prevent"]))},[e.unref(ie)?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(L.value,s=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:s.id},[s.$visibleSlack?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass("wx-slack wx-slack-"+s.type),style:e.normalizeStyle(me(s))},null,6)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),e.createVNode(Tt,{onSelectLink:Ne,selectedLink:p.value,readonly:n.readonly},null,8,["selectedLink","readonly"]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(L.value,s=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:s.id},[s.$skip?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["wx-bar","wx-"+Ce(s.type),{"wx-touch":N.value&&H.value&&s.id===H.value.id,"wx-selected":x.value&&x.value.id===s.id,"wx-critical":u(s),"wx-reorder-task":s.$reorder,"wx-split":e.unref(O)&&s.segments}]),style:e.normalizeStyle(Pe(s)),"data-id":e.unref(R.setID)(s.id),"data-tooltip-id":e.unref(R.setID)(s.id),tabindex:Ae.value===s.id?"0":"-1"},[n.readonly?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[s.id===p.value?.target&&p.value?.type[2]==="s"?(e.openBlock(),e.createBlock(e.unref(se.Button),{key:0,type:"danger",css:"wx-left wx-delete-button wx-delete-link"},{default:e.withCtx(()=>[...i[1]||(i[1]=[e.createElementVNode("i",{class:"wxi-close wx-delete-button-icon"},null,-1)])]),_:1})):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["wx-link","wx-left",{"wx-visible":x.value,"wx-target":!x.value||!Ee(s.id,!0)&&v(s.id),"wx-selected":x.value&&x.value.id===s.id&&x.value.start,"wx-critical":u(s)}])},[...i[2]||(i[2]=[e.createElementVNode("div",{class:"wx-inner"},null,-1)])],2))],64)),s.type!=="milestone"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[s.progress&&!(e.unref(O)&&s.segments)?(e.openBlock(),e.createElementBlock("div",Nt,[e.createElementVNode("div",{class:"wx-progress-percent",style:e.normalizeStyle("width:"+s.progress+"%")},null,4)])):e.createCommentVNode("",!0),!n.readonly&&!(e.unref(O)&&s.segments)&&!(s.type==="summary"&&e.unref(oe)?.autoProgress)?(e.openBlock(),e.createElementBlock("div",{key:1,class:"wx-progress-marker",style:e.normalizeStyle("left:calc("+s.progress+"% - 10px);")},e.toDisplayString(s.progress),5)):e.createCommentVNode("",!0),n.taskTemplate?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(n.taskTemplate),{key:2,data:s,api:e.unref(t),onaction:we},null,8,["data","api"])):e.unref(O)&&s.segments?(e.openBlock(),e.createBlock(Dt,{key:3,task:s,type:Ce(s.type)},null,8,["task","type"])):(e.openBlock(),e.createElementBlock("div",Rt,e.toDisplayString(s.text||""),1))],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[i[3]||(i[3]=e.createElementVNode("div",{class:"wx-content"},null,-1)),n.taskTemplate?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(n.taskTemplate),{key:0,data:s,api:e.unref(t),onaction:we},null,8,["data","api"])):(e.openBlock(),e.createElementBlock("div",Vt,e.toDisplayString(s.text),1))],64)),n.readonly?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[s.id===p.value?.target&&p.value?.type[2]==="e"?(e.openBlock(),e.createBlock(e.unref(se.Button),{key:0,type:"danger",css:"wx-right wx-delete-button wx-delete-link"},{default:e.withCtx(()=>[...i[4]||(i[4]=[e.createElementVNode("i",{class:"wxi-close wx-delete-button-icon"},null,-1)])]),_:1})):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["wx-link","wx-right",{"wx-visible":x.value,"wx-target":!x.value||!Ee(s.id,!1)&&v(s.id),"wx-selected":x.value&&x.value.id===s.id&&!x.value.start,"wx-critical":u(s)}])},[...i[5]||(i[5]=[e.createElementVNode("div",{class:"wx-inner"},null,-1)])],2))],64))],14,Mt)),e.unref(K)&&e.unref(ne)?.[s.id]?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(e.unref(ne)[s.id],k=>(e.openBlock(),e.createBlock(Et,{key:k.id,rollup:k,parent:s},null,8,["rollup","parent"]))),128)):e.createCommentVNode("",!0),e.unref(F)&&!s.$skip_baseline?(e.openBlock(),e.createElementBlock("div",{key:2,class:e.normalizeClass(["wx-baseline",{"wx-milestone":s.type==="milestone"}]),style:e.normalizeStyle(he(s))},null,6)):e.createCommentVNode("",!0)],64))),128))],36))}}),Ot=re(Ht,[["__scopeId","data-v-a2fa1ccc"]]),Wt={__name:"TimeScale",props:{highlightTime:{type:Function}},setup(l){const n=l,t=e.inject("gantt-store"),{_scales:o}=t.getReactiveState(),c=f.subscribe(o);return(T,b)=>(e.openBlock(),e.createElementBlock("div",{class:"wx-scale",style:e.normalizeStyle({width:e.unref(c).width+"px"})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(c).rows,(m,y)=>(e.openBlock(),e.createElementBlock("div",{key:y,class:"wx-row",style:e.normalizeStyle({height:m.height+"px"})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.cells,(w,V)=>(e.openBlock(),e.createElementBlock("div",{key:V,class:e.normalizeClass(["wx-cell",w.css,n.highlightTime?n.highlightTime(w.date,w.unit):""]),style:e.normalizeStyle({width:w.width+"px"})},e.toDisplayString(w.value),7))),128))],4))),128))],4))}},Pt=re(Wt,[["__scopeId","data-v-3207e419"]]),Ft={class:"wx-content"},jt={key:0,class:"wx-gantt-holidays",style:{height:"100%"}},At=["data-id"],Qe=1,Je=.003,Ut=Object.assign({name:"GanttChartChart"},{__name:"Chart",props:{readonly:{},fullWidth:{},fullHeight:{},taskTemplate:{},cellBorders:{},highlightTime:{}},setup(l){const n=f.asDirective(et.hotkeys),t=l,o=e.inject("gantt-store"),{_selected:c,scrollTop:T,scrollLeft:b,cellHeight:m,_scales:y,zoom:w,_markers:V}=o.getReactiveState(),_=f.subscribe(c,!0),W=f.subscribe(T),d=f.subscribe(b),C=f.subscribe(m),I=f.subscribe(y),Y=f.subscribe(w),G=f.subscribe(V),E=e.ref(0),S=e.ref(null),h=e.computed(()=>{const L=[];return _.value.length&&C.value&&_.value.forEach(U=>{L.push(`height: ${C.value}px;top: ${U.$y-3}px`)}),L});e.watch(E,()=>{F()});const B=e.computed(()=>Math.max(E.value,t.fullHeight));e.watchEffect(()=>{S.value&&(S.value.scrollTop=W.value,S.value.scrollLeft=d.value)});function r(){$(),F()}function $(){const L={};S.value.scrollTop!==W.value&&(L.top=S.value.scrollTop),S.value.scrollLeft!==d.value&&(L.left=S.value.scrollLeft),o.exec("scroll-chart",L)}function F(){const L=E.value||0,U=Math.ceil(L/C.value)+1,M=Math.floor((S.value?.scrollTop||0)/C.value),x=Math.max(0,M-Qe),H=M+U+Qe,j=x*C.value;o.exec("render-data",{start:x,end:H,from:j})}let A=performance.now();function K(L){const M=Math.abs(L)<50?.004:.01,x=performance.now(),H=Math.min(x-A,50);A=x;const j=ne(-L*M,-Je*H,Je*H);return Math.exp(j)}function ne(L,U,M){return Math.max(Math.min(L,M),U)}let le=!1;function te(L){if(Y.value&&(L.ctrlKey||L.metaKey)){L.preventDefault();const U=K(L.deltaY),M=L.clientX-S.value.getBoundingClientRect().left;le||(le=!0,requestAnimationFrame(()=>{o.exec("zoom-scale",{dir:U>1?1:-1,ratio:Math.abs(1-U),offset:M}),le=!1}))}}function D(L){const U=t.highlightTime(L.date,L.unit);return U?{css:U,width:L.width}:null}const O=e.computed(()=>(I.value.minUnit==="hour"||I.value.minUnit==="day")&&t.highlightTime?I.value.rows[I.value.rows.length-1].cells.map(D):null);function oe(L){L.eventSource="chart",o.exec("hotkey",L)}let ie;return e.onMounted(()=>{S.value&&(E.value=S.value.clientHeight,ie=new ResizeObserver(L=>{for(const U of L)E.value=U.target.clientHeight}),ie.observe(S.value))}),e.onUnmounted(()=>{ie?.disconnect()}),(L,U)=>e.withDirectives((e.openBlock(),e.createElementBlock("div",{class:"wx-chart",tabindex:"-1",ref_key:"chart",ref:S,onScroll:r,onWheel:te},[e.createVNode(Pt,{highlightTime:t.highlightTime},null,8,["highlightTime"]),e.unref(G).length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"wx-markers",style:e.normalizeStyle(`height:${B.value}px;`)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(G),M=>(e.openBlock(),e.createElementBlock("div",{key:M.id||M.left,class:e.normalizeClass("wx-marker "+(M.css||"")),style:e.normalizeStyle(`left:${M.left}px`)},[e.createElementVNode("div",Ft,e.toDisplayString(M.text),1)],6))),128))],4)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:"wx-area",style:e.normalizeStyle(`width:${t.fullWidth}px;height:${B.value}px`)},[O.value?(e.openBlock(),e.createElementBlock("div",jt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(O.value,(M,x)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:x},[M?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(M.css),style:e.normalizeStyle(`width: ${M.width}px; left:${x*M.width}px`)},null,6)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0),e.createVNode(yt,{borders:t.cellBorders},null,8,["borders"]),e.unref(_).length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(e.unref(_),(M,x)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:M.id},[M.$y?(e.openBlock(),e.createElementBlock("div",{key:0,class:"wx-selected","data-id":e.unref(R.setID)(M.id),style:e.normalizeStyle(h.value[x])},null,12,At)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),e.createVNode(Ot,{readonly:t.readonly,taskTemplate:t.taskTemplate},null,8,["readonly","taskTemplate"])],4)],32)),[[e.unref(n),{keys:{arrowup:!0,arrowdown:!0},exec:M=>oe(M)}]])}}),Gt=re(Ut,[["__scopeId","data-v-def875eb"]]),qt=Object.assign({name:"GanttResizer"},{__name:"Resizer",props:e.mergeModels({position:{default:"after"},size:{default:4},dir:{default:"x"},onmove:{type:Function},compactMode:{},containerWidth:{default:0},leftThreshold:{default:50},rightThreshold:{default:50}},{value:{default:0},valueModifiers:{},display:{default:"all"},displayModifiers:{}}),emits:["update:value","update:display"],setup(l){const n=l,t=e.useModel(l,"value"),o=e.useModel(l,"display");function c(h){let B=0;n.position==="center"?B=n.size/2:n.position==="before"&&(B=n.size);const r={size:[n.size+"px","auto"],p:[h-B+"px","0px"],p2:["auto","0px"]};if(n.dir!=="x")for(let $ in r)r[$]=r[$].reverse();return r}let T=0,b;const m=e.ref(!1),y=e.ref(null);e.watchEffect(()=>{y.value===null&&t.value>0&&(y.value=t.value)});function w(h){return n.dir==="x"?h.clientX:h.clientY}function V(h){!n.compactMode&&(o.value==="grid"||o.value==="chart")||(T=w(h),b=t.value,m.value=!0,document.body.style.cursor=S.value,document.body.style.userSelect="none",window.addEventListener("mousemove",W),window.addEventListener("mouseup",d))}let _;function W(h){const B=b+w(h)-T;t.value=B;let r;B<=n.leftThreshold?r="chart":n.containerWidth-B<=n.rightThreshold?r="grid":r="all",o.value!==r&&(o.value=r),_&&clearTimeout(_),_=setTimeout(()=>n.onmove&&n.onmove(t.value),100)}function d(){document.body.style.cursor="",document.body.style.userSelect="",m.value=!1,window.removeEventListener("mousemove",W),window.removeEventListener("mouseup",d)}function C(){o.value="all",y.value!==null&&(t.value=y.value,n.onmove&&n.onmove(y.value))}function I(h){n.compactMode?o.value=o.value==="chart"?"grid":"chart":o.value==="grid"||o.value==="chart"?C():o.value=h==="left"?"chart":"grid"}function Y(){I("left")}function G(){I("right")}const E=e.computed(()=>c(t.value)),S=e.computed(()=>o.value!=="all"?"auto":n.dir==="x"?"ew-resize":"ns-resize");return(h,B)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["wx-resizer",`wx-resizer-${l.dir}`,`wx-resizer-display-${o.value}`,{"wx-resizer-active":m.value}]),onMousedown:V,style:e.normalizeStyle(`width:${E.value.size[0]}; height: ${E.value.size[1]}; cursor:${S.value};`)},[e.createElementVNode("div",{class:"wx-button-expand-box"},[e.createElementVNode("div",{class:"wx-button-expand-content wx-button-expand-left"},[e.createElementVNode("i",{class:"wxi-menu-left",onClick:Y})]),e.createElementVNode("div",{class:"wx-button-expand-content wx-button-expand-right"},[e.createElementVNode("i",{class:"wxi-menu-right",onClick:G})])]),B[0]||(B[0]=e.createElementVNode("div",{class:"wx-resizer-line"},null,-1))],38))}}),Yt=re(qt,[["__scopeId","data-v-206d8277"]]),Xt=650;function nt(l){let n;function t(){n=new ResizeObserver(c=>{for(let T of c)if(T.target===document.body){let b=T.contentRect.width<=Xt;l(b)}}),n.observe(document.body)}function o(){n&&(n.disconnect(),n=null)}return{observe:t,disconnect:o}}const Kt={tabindex:"0",class:"wx-layout"},Zt=Object.assign({name:"GanttLayout"},{__name:"Layout",props:e.mergeModels({taskTemplate:{},readonly:{},cellBorders:{},highlightTime:{}},{tableAPI:{},tableAPIModifiers:{}}),emits:["update:tableAPI"],setup(l){const n=f.asDirective(et.hotkeys),t=e.useModel(l,"tableAPI"),o=e.inject("gantt-store"),{_tasks:c,_scales:T,cellHeight:b,columns:m,scrollTop:y,undo:w}=o.getReactiveState(),V=f.subscribe(c),_=f.subscribe(T),W=f.subscribe(b),d=f.subscribe(m),C=f.subscribe(y),I=f.subscribe(w),Y=e.ref(!1),G=e.ref(0),E=e.ref(void 0),S=e.ref(void 0),h=e.ref(void 0),B=e.ref(null),r=e.ref("all");e.watchEffect(()=>{const x=nt(F);x.observe(),e.onWatcherCleanup(()=>{x.disconnect()})});let $=null;function F(x){x!==Y.value&&(Y.value=x,Y.value?($=r.value,r.value==="all"&&(r.value="grid")):(!$||$==="all")&&(r.value="all"))}const A=e.computed(()=>{let x;return d.value.every(H=>H.width&&!H.flexgrow)?x=d.value.reduce((H,j)=>H+parseInt(j.width),0):r.value==="chart"?x=parseInt(d.value.find(H=>H.id==="action")?.width)||50:x=440,x});e.watchEffect(()=>{G.value=A.value});const K=e.computed(()=>E.value-h.value),ne=e.computed(()=>_.value.width),le=e.computed(()=>V.value.length*W.value),te=e.computed(()=>_.value.height+le.value+K.value);e.watchEffect(()=>{let x;B.value&&(x=new ResizeObserver(D),x.observe(B.value)),e.onWatcherCleanup(()=>{x&&x.disconnect()})});function D(){o.exec("resize-chart",{width:E.value-G.value,height:S.value-_.value.height,scrollSize:K.value})}const O=e.ref(null);function oe(){o.exec("scroll-chart",{top:O.value.scrollTop})}function ie(){O.value&&C.value!==O.value.scrollTop&&(O.value.scrollTop=C.value)}e.watchEffect(()=>{C.value,ie()});let L;e.onMounted(()=>{O.value&&(L=new ResizeObserver(()=>{S.value=O.value?.offsetHeight,E.value=O.value?.offsetWidth}),L.observe(O.value),S.value=O.value.offsetHeight,E.value=O.value.offsetWidth)}),e.onUnmounted(()=>{L?.disconnect()});const U=e.ref(null);let M;return e.onMounted(()=>{U.value&&(M=new ResizeObserver(()=>{h.value=U.value?.offsetWidth}),M.observe(U.value),h.value=U.value.offsetWidth)}),e.onUnmounted(()=>{M?.disconnect()}),(x,H)=>(e.openBlock(),e.createElementBlock("div",{class:"wx-gantt",ref_key:"ganttDiv",ref:O,onScroll:oe},[e.createElementVNode("div",{ref_key:"pseudoRowsDiv",ref:U,class:"wx-pseudo-rows",style:e.normalizeStyle(`height:${te.value}px;width:100%;`)},[e.createElementVNode("div",{class:"wx-stuck",style:e.normalizeStyle(`height:${S.value}px;width:${h.value}px;`)},[e.withDirectives((e.openBlock(),e.createElementBlock("div",Kt,[e.unref(d).length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(kt,{display:r.value,"onUpdate:display":H[0]||(H[0]=j=>r.value=j),compactMode:Y.value,columnWidth:A.value,width:G.value,readonly:l.readonly,fullHeight:le.value,tableAPI:t.value,"onUpdate:tableAPI":H[1]||(H[1]=j=>t.value=j)},null,8,["display","compactMode","columnWidth","width","readonly","fullHeight","tableAPI"]),e.createVNode(Yt,{value:G.value,"onUpdate:value":H[2]||(H[2]=j=>G.value=j),display:r.value,"onUpdate:display":H[3]||(H[3]=j=>r.value=j),compactMode:Y.value,containerWidth:E.value},null,8,["value","display","compactMode","containerWidth"])],64)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:"wx-content",ref_key:"chart",ref:B},[e.createVNode(Gt,{readonly:l.readonly,fullWidth:ne.value,fullHeight:le.value,taskTemplate:l.taskTemplate,cellBorders:l.cellBorders,highlightTime:l.highlightTime},null,8,["readonly","fullWidth","fullHeight","taskTemplate","cellBorders","highlightTime"])],512)])),[[e.unref(n),{keys:{"ctrl+c":!0,"ctrl+v":!0,"ctrl+x":!0,"ctrl+d":!0,backspace:!0,"ctrl+z":e.unref(I),"ctrl+y":e.unref(I)},exec:j=>{j.isInput||e.unref(o).exec("hotkey",j)}}]])],4)],4)],544))}}),Qt=re(Zt,[["__scopeId","data-v-b6d88a7d"]]);function Jt(l){return{year:"%Y",quarter:`${l("Q")} %Q`,month:"%M",week:`${l("Week")} %w`,day:"%M %j",hour:"%H:%i"}}function en(l,n){return typeof l=="function"?l:R.dateToString(l,n)}function lt(l,n){return l.map(({format:t,...o})=>({...o,format:en(t,n)}))}function tn(l,n){const t=Jt(n);for(let o in t)t[o]=R.dateToString(t[o],l);return t}function nn(l,n){if(!l||!l.length)return l;const t=R.dateToString("%d-%m-%Y",n);return l.map(o=>o.template?o:o.id==="start"||o.id==="end"?{...o,_template:c=>t(c),template:c=>t(c)}:o.id==="duration"?{...o,_template:c=>c,template:c=>c}:o)}function ln(l,n){return l.levels?{...l,levels:l.levels.map(t=>({...t,scales:lt(t.scales,n)}))}:l}const an=Object.assign({name:"GanttComponentsGantt"},{__name:"Gantt",props:{taskTemplate:{default:null},markers:{default:()=>[]},taskTypes:{default:()=>X.defaultTaskTypes},tasks:{default:()=>[]},selected:{default:()=>[]},activeTask:{default:null},links:{default:()=>[]},scales:{default:()=>[{unit:"month",step:1,format:"%F %Y"},{unit:"day",step:1,format:"%j"}]},columns:{default:()=>X.defaultColumns},start:{default:null},end:{default:null},lengthUnit:{default:"day"},durationUnit:{default:"day"},cellWidth:{default:100},cellHeight:{default:38},scaleHeight:{default:36},readonly:{type:Boolean,default:!1},cellBorders:{default:"full"},zoom:{type:[Boolean,Object,Array],default:!1},baselines:{type:[Boolean,Object],default:!1},rollups:{type:[Boolean,Object],default:!1},highlightTime:{type:Function,default:null},init:{type:Function,default:null},autoScale:{type:Boolean,default:!0},unscheduledTasks:{type:Boolean,default:!1},criticalPath:{default:null},schedule:{default:()=>({type:"forward"})},projectStart:{default:null},projectEnd:{default:null},calendar:{default:null},undo:{type:Boolean,default:!1},splitTasks:{type:Boolean,default:!1},summary:{default:null},slack:{type:Boolean,default:!1},_export:{type:Boolean,default:!1}},setup(l,{expose:n}){const t=l,o=e.useAttrs(),c=new X.DataStore(f.writable),T={...qe.en,...He.en};let b=e.inject("wx-i18n",null);b?b=b.extend(T,!0):b=R.locale(T),e.provide("wx-i18n",b);const{calendar:m}=b.getRaw(),y=e.computed(()=>{let D={zoom:ln(t.zoom,m),scales:lt(t.scales,m),columns:nn(t.columns,m),links:X.normalizeLinks(t.links),cellWidth:t.cellWidth};return D.zoom&&(D={...D,...X.normalizeZoom(D.zoom,tn(m,b.getGroup("gantt")),D.scales,t.cellWidth)}),D});e.watch(()=>[t.tasks,t.durationUnit,t.calendar],()=>{t._export||X.parseTaskDates(t.tasks,{durationUnit:t.durationUnit,splitTasks:t.splitTasks,calendar:t.calendar})},{immediate:!0,flush:"pre"});let w=c.in;const V=/-/g;let _=new at.EventBusRouter((D,O)=>{const oe="on"+D.replace(V,"");o[oe]&&o[oe](O)});w.setNext(_);const W=e.ref(void 0),d=e.ref(null);e.watchEffect(()=>{t.calendar&&t.tasks&&(d.value=(D,O)=>O==="day"&&!t.calendar.getDayHours(D)||O==="hour"&&!t.calendar.getDayHours(D)?"wx-weekend":"")});const C=e.computed(()=>d.value||t.highlightTime),I=c.getState.bind(c),Y=c.getReactive.bind(c),G=()=>({data:c}),E=w.exec,S=D=>_=_.setNext(D),h=w.intercept.bind(w),B=w.on.bind(w),r=w.detach.bind(w),$=D=>c.getTask(D),F=()=>c.serialize(),A=D=>D?new Promise(O=>setTimeout(()=>O(W.value),1)):W.value,K=()=>c.getHistory(),ne={getState:I,getReactiveState:Y,getStores:G,exec:E,setNext:S,intercept:h,on:B,detach:r,getTable:A,getTask:$,serialize:F,getHistory:K};n({getState:I,getReactiveState:Y,getStores:G,exec:E,setNext:S,intercept:h,on:B,detach:r,getTable:A,getTask:$,serialize:F,getHistory:K}),e.provide("gantt-store",{getReactiveState:c.getReactive.bind(c),exec:w.exec.bind(w),getTask:c.getTask.bind(c)});let le=!0;const te=()=>{const D=y.value;c.init({tasks:t.tasks,links:D.links,start:t.start,columns:D.columns,end:t.end,lengthUnit:t.lengthUnit,cellWidth:D.cellWidth,cellHeight:t.cellHeight,scaleHeight:t.scaleHeight,scales:D.scales,taskTypes:t.taskTypes,zoom:D.zoom,selected:t.selected,activeTask:t.activeTask,baselines:t.baselines,rollups:t.rollups===!0?{type:"closest"}:t.rollups,autoScale:t.autoScale,unscheduledTasks:t.unscheduledTasks,markers:t.markers,durationUnit:t.durationUnit,criticalPath:t.criticalPath,schedule:t.schedule,projectStart:t.projectStart,projectEnd:t.projectEnd,calendar:t.calendar,slack:t.slack,undo:t.undo,_weekStart:m.weekStart,splitTasks:t.splitTasks,summary:t.summary}),le&&t.init&&(t.init(ne),le=!1)};return e.watchEffect(te),(D,O)=>(e.openBlock(),e.createBlock(Qt,{taskTemplate:t.taskTemplate,readonly:t.readonly,cellBorders:t.cellBorders,highlightTime:C.value,tableAPI:W.value,"onUpdate:tableAPI":O[0]||(O[0]=oe=>W.value=oe)},null,8,["taskTemplate","readonly","cellBorders","highlightTime","tableAPI"]))}}),on=Object.assign({name:"GanttToolbar"},{__name:"Toolbar",props:{api:{default:null},items:{default:()=>[]}},setup(l){const n=l;let t=e.inject("wx-i18n",null);t||(t=R.locale(He.en),e.provide("wx-i18n",t));const o=e.inject("wx-i18n").getGroup("gantt"),c=f.subscribeLater(()=>n.api?.getReactiveState()?._selected),T=f.subscribeLater(()=>n.api?.getReactiveState()?.undo),b=f.subscribeLater(()=>n.api?.getReactiveState()?.history),m=f.subscribeLater(()=>n.api?.getReactiveState()?.splitTasks),y=["undo","redo"],w=e.computed(()=>{const _=X.getToolbarButtons({undo:!0,splitTasks:!0});return(n.items.length?n.items:X.getToolbarButtons({undo:T().value,splitTasks:m().value})).map(d=>(d={...d,disabled:!1},d.handler=X.isHandledAction(_,d.id)?C=>X.handleAction(n.api,C.id,null,o):d.handler,d.text&&(d.text=o(d.text)),d.menuText&&(d.menuText=o(d.menuText)),d))}),V=e.computed(()=>{const _=c().value,W=[];return w.value.forEach(d=>{const C=d.id;if(C==="add-task")W.push(d);else if(y.includes(C))y.includes(C)&&W.push({...d,disabled:d.isDisabled(b().value)});else{if(!_?.length||!n.api)return;W.push({...d,disabled:d.isDisabled&&_.some(I=>d.isDisabled(I,n.api.getState()))})}}),W.filter((d,C)=>{if(n.api&&d.isHidden)return!_.some(I=>d.isHidden(I,n.api.getState()));if(d.comp==="separator"){const I=W[C+1];if(!I||I.comp==="separator")return!1}return!0})});return(_,W)=>(e.openBlock(),e.createBlock(e.unref(ot.Toolbar),{items:V.value},null,8,["items"]))}}),sn=["oncontextmenu"],rn={__name:"ContextMenu",props:{options:{default:()=>[]},api:{default:null},resolver:{default:null},filter:{default:null},at:{default:"point"},onclick:{type:Function},css:{}},setup(l,{expose:n}){const t=l;let o=null,c=e.inject("wx-i18n",null);c||(c=R.locale({...He.en,...qe.en}),e.provide("wx-i18n",c));const T=e.inject("wx-i18n").getGroup("gantt"),b=f.subscribeLater(()=>t.api?.getReactiveState()?.taskTypes),m=f.subscribeLater(()=>t.api?.getReactiveState()?.selected),y=f.subscribeLater(()=>t.api?.getReactiveState()?._selected),w=f.subscribeLater(()=>t.api?.getReactiveState()?.splitTasks),V=f.subscribeLater(()=>t.api?.getReactiveState()?.summary),_=e.computed(()=>({splitTasks:w().value,taskTypes:b().value,summary:V().value})),W=e.computed(()=>X.getMenuOptions(_.value));function d(){const r=t.options.length?t.options:X.getMenuOptions(_.value);return C(r)}function C(r){return r.map($=>($={...$},$.text&&($.text=T($.text)),$.subtext&&($.subtext=T($.subtext)),$.data&&($.data=C($.data)),$))}function I(r,$){let F=r?t.api.getTask(r):null;if(t.resolver){const A=t.resolver(r,$);F=A===!0?F:A}if(F){const A=R.locateID($.target,"data-segment");A!==null?o={id:F.id,segmentIndex:A}:o=F.id,m().value.includes(F.id)||t.api.exec("select-task",{id:F.id})}return F}function Y(r){const $=r.action;$&&(X.isHandledAction(W.value,$.id)&&X.handleAction(t.api,$.id,o,T),t.onclick&&t.onclick(r))}function G(r,$){const F=y().value?.length?y().value:$?[$]:[];let A=t.filter?F.every(K=>t.filter(r,K)):!0;if(A&&(r.isHidden&&(A=!F.some(K=>r.isHidden(K,t.api.getState(),o))),r.isDisabled)){const K=F.some(ne=>r.isDisabled(ne,t.api.getState(),o));r.disabled=K}return A}let E=!1;e.watchEffect(()=>{t.api&&!E&&(E=!0,t.api.on("scroll-chart",()=>h.value.show()),t.api.on("drag-task",()=>h.value.show()))});const S=e.computed(()=>d()),h=e.ref(null);function B(r,$){h.value.show(r,$)}return n({show:B}),(r,$)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(e.unref(st.ContextMenu),{filter:G,options:S.value,dataKey:"id",resolver:I,onclick:Y,css:l.css,at:l.at,ref_key:"menu",ref:h},null,8,["options","css","at"]),e.createElementVNode("span",{oncontextmenu:h.value?.show,"data-menu-ignore":"true"},[e.renderSlot(r.$slots,"default",{},void 0,!0)],8,sn)],64))}},cn=re(rn,[["__scopeId","data-v-463453b1"]]),un={key:0,class:"wx-links"},dn={class:"wx-cell"},fn={class:"wx-task-name"},mn={key:0,class:"wx-cell wx-link-lag"},pn={class:"wx-cell"},vn={class:"wx-wrapper"},hn={class:"wx-cell"},gn=["onclick"],kn=Object.assign({name:"GanttEditorLinks"},{__name:"Links",props:{api:{},autoSave:{},onlinkschange:{type:Function},onchange:{type:Function},comp:{type:String},label:{type:String},isHidden:{type:Function},setter:{type:Function},getter:{type:Function},hidden:{type:Boolean},error:{type:String},value:{type:String}},setup(l){const n=e.inject("wx-i18n").getGroup("gantt"),t=l;e.provide("wx-input-id",null);const{activeTask:o,_activeTask:c,_links:T,schedule:b,unscheduledTasks:m}=t.api.getReactiveState(),y=f.subscribe(o),w=f.subscribe(c),V=f.subscribe(T),_=f.subscribe(b),W=f.subscribe(m),d=e.ref();e.watchEffect(()=>{d.value=C()});function C(){if(y.value){const E=V.value.filter(h=>h.target===y.value).map(h=>({link:h,task:t.api.getTask(h.source)})),S=V.value.filter(h=>h.source===y.value).map(h=>({link:h,task:t.api.getTask(h.target)}));return[{title:n("Predecessors"),data:E},{title:n("Successors"),data:S}]}}const I=[{id:"e2s",label:n("End-to-start")},{id:"s2s",label:n("Start-to-start")},{id:"e2e",label:n("End-to-end")},{id:"s2e",label:n("Start-to-end")}];function Y(E){t.autoSave?t.api.exec("delete-link",{id:E}):(d.value=d.value.map(S=>({...S,data:S.data.filter(h=>h.link.id!==E)})),t.onlinkschange?.({id:E,action:"delete-link",data:{id:E}}))}function G(E,S){t.autoSave?t.api.exec("update-link",{id:E,link:S}):(d.value=d.value.map(h=>({...h,data:h.data.map(B=>B.link.id===E?{...B,link:{...B.link,...S}}:B)})),t.onlinkschange?.({id:E,action:"update-link",data:{id:E,link:S}}))}return(E,S)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,h=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:h.title},[h.data.length?(e.openBlock(),e.createElementBlock("div",un,[e.createVNode(e.unref(se.Field),{label:h.title,position:"top"},{default:e.withCtx(()=>[e.createElementVNode("table",null,[e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.data,B=>(e.openBlock(),e.createElementBlock("tr",{key:B.link.id},[e.createElementVNode("td",dn,[e.createElementVNode("div",fn,e.toDisplayString(B.task.text||""),1)]),e.unref(_)?.auto&&B.link.type==="e2s"?(e.openBlock(),e.createElementBlock("td",mn,[e.createVNode(e.unref(se.Text),{type:"number",placeholder:e.unref(n)("Lag"),value:B.link.lag,disabled:e.unref(W)&&e.unref(w).unscheduled,onchange:r=>{r.input||G(B.link.id,{lag:r.value})}},null,8,["placeholder","value","disabled","onchange"])])):e.createCommentVNode("",!0),e.createElementVNode("td",pn,[e.createElementVNode("div",vn,[e.createVNode(e.unref(se.Combo),{value:B.link.type,placeholder:e.unref(n)("Select link type"),options:I,onchange:r=>G(B.link.id,{type:r.value})},{default:e.withCtx(({option:r})=>[e.createTextVNode(e.toDisplayString(r.label),1)]),_:1},8,["value","placeholder","onchange"])])]),e.createElementVNode("td",hn,[e.createElementVNode("i",{class:"wxi-delete wx-delete-icon",onclick:()=>Y(B.link.id),role:"button"},null,8,gn)])]))),128))])])]),_:2},1032,["label"])])):e.createCommentVNode("",!0)],64))),128))}}),yn=re(kn,[["__scopeId","data-v-94a2215a"]]),xn={class:"date-time-controll"},bn={__name:"DateTimePicker",props:{value:{},time:{},format:{},onchange:{type:Function}},setup(l){const n=l,t=e.computed(()=>{const{value:c,time:T,format:b,onchange:m,...y}=n;return y});function o(c){const T=new Date(c.value);T.setHours(n.value.getHours()),T.setMinutes(n.value.getMinutes()),n.onchange?.({value:T})}return(c,T)=>(e.openBlock(),e.createElementBlock("div",xn,[e.createVNode(e.unref(se.DatePicker),e.mergeProps(t.value,{value:l.value,onchange:o,format:l.format,buttons:["today"],clear:!1}),null,16,["value","format"]),l.time?(e.openBlock(),e.createBlock(e.unref(se.TimePicker),{key:0,value:l.value,onchange:l.onchange,format:l.format},null,8,["value","onchange","format"])):e.createCommentVNode("",!0)]))}},wn=re(bn,[["__scopeId","data-v-1f9dfea2"]]),Bn=Object.assign({name:"GanttEditor"},{__name:"Editor",props:{api:{default:null},items:{default:()=>[]},css:{default:""},layout:{default:"default"},readonly:{type:Boolean,default:!1},placement:{default:"sidebar"},bottomBar:{type:[Boolean,Object],default:!0},topBar:{type:[Boolean,Object],default:!0},autoSave:{type:Boolean,default:!0},focus:{type:Boolean,default:!1},hotkeys:{default:()=>({})}},setup(l){ve.registerEditorItem("select",se.RichSelect),ve.registerEditorItem("date",wn),ve.registerEditorItem("twostate",se.TwoState),ve.registerEditorItem("slider",se.Slider),ve.registerEditorItem("counter",se.Counter),ve.registerEditorItem("links",yn),ve.registerEditorItem("checkbox",se.Checkbox);const n=l;let t=e.inject("wx-i18n",null);t||(t=R.locale({...He.en,...qe.en}),e.provide("wx-i18n",t));const o=t.getGroup("gantt"),c=t.getRaw(),T=c.gantt?.dateFormat||c.formats?.dateFormat,b=R.dateToString(T,c.calendar),m=f.subscribeLater(()=>n.api?.getReactiveState()?._activeTask),y=f.subscribeLater(()=>n.api?.getReactiveState()?.activeTask),w=f.subscribeLater(()=>n.api?.getReactiveState()?.unscheduledTasks),V=f.subscribeLater(()=>n.api?.getReactiveState()?.rollups),_=f.subscribeLater(()=>n.api?.getReactiveState()?.summary),W=f.subscribeLater(()=>n.api?.getReactiveState()?.links),d=f.subscribeLater(()=>n.api?.getReactiveState()?.taskTypes),C=f.subscribeLater(()=>n.api?.getReactiveState()?.undo),I=f.subscribeLater(()=>n.api?.getReactiveState()?.segmentIndex),Y=f.subscribeLater(()=>n.api?.getReactiveState()?.isSegment),G=e.computed(()=>{if(n.topBar===!0&&!n.readonly){const p=[{comp:"icon",icon:"wxi-close",id:"close"},{comp:"spacer"},{comp:"button",type:"danger",text:o("Delete"),id:"delete"}];return n.autoSave?{items:p}:{items:[...p,{comp:"button",type:"primary",text:o("Save"),id:"save"}]}}return n.topBar}),E=e.ref(!1),S=e.computed(()=>E.value?"wx-full-screen":"");e.watchEffect(p=>{const N=nt(h);N.observe(),p(()=>{N.disconnect()})});function h(p){E.value=p}const B=e.computed(()=>X.getEditorItems({unscheduledTasks:w().value,rollups:V().value,summary:_().value,taskTypes:d().value})),r=e.ref({}),$=e.ref(null),F=e.ref(void 0),A=e.ref(null),K=e.computed(()=>{const p=m().value;if(!p)return null;let N;if(Y().value&&p.segments?N={...p.segments[I().value]}:N={...p},n.readonly){let P={parent:N.parent};return B.value.forEach(({key:z,comp:ae})=>{if(ae!=="links"){const Z=N[z];ae==="date"&&Z instanceof Date?P[z]=b(Z):ae==="slider"&&z==="progress"?P[z]=`${Z}%`:P[z]=Z}}),P}return N||null});e.watch(K,p=>{F.value=p}),e.watch(y,()=>{r.value={},A.value=null,$.value=null});const ne=e.computed(()=>{let p=n.items.length?n.items:B.value;return p=te(p,F.value),F.value?p.filter(N=>!N.isHidden||!N.isHidden(F.value,n.api.getState())):p}),le=e.computed(()=>ne.value.map(p=>p.key));function te(p,N){return p.map(P=>{const z={...P};if(P.config&&(z.config={...z.config}),z.comp==="links"&&n.api&&(z.api=n.api,z.autoSave=n.autoSave,z.onlinkschange=D),z.comp==="select"&&z.key==="type"){const ae=z.options??[];z.options=ae.map(Z=>({...Z,label:o(Z.label)}))}return z.comp==="slider"&&z.key==="progress"&&(z.labelTemplate=ae=>`${o(z.label)} ${ae}%`),z.label&&(z.label=o(z.label)),z.config?.placeholder&&(z.config.placeholder=o(z.config.placeholder)),N&&(z.isDisabled&&z.isDisabled(N,n.api.getState())?z.disabled=!0:delete z.disabled),z})}function D({id:p,action:N,data:P}){r.value[p]={action:N,data:P}}function O(){for(let p in r.value)if(W().value.byId(p)){const{action:N,data:P}=r.value[p];n.api.exec(N,P)}}function oe(){const p=y().value,N=m().value,P=I().value,z=p.id||p;if(Y().value){if(N.segments){const ae=N.segments.filter((Z,fe)=>fe!==P);n.api.exec("update-task",{id:z,task:{segments:ae}})}}else n.api.exec("delete-task",{id:z})}function ie(){n.api.exec("show-editor",{id:null})}function L(p){const{item:N,changes:P}=p;if(N.id==="delete"&&oe(),N.id==="save")if(!P.length)O();else return;N.comp&&ie()}function U(p){let{update:N,key:P,input:z}=p;if(z&&($.value=!0),p.update=M({...N},P,z),!n.autoSave)F.value=p.update;else if(!A.value&&!z){const ae=ne.value.find(ke=>ke.key===P),Z=N[P];(!ae.validation||ae.validation(Z))&&(!ae.required||Z)&&j(p.update)}}function M(p,N,P){return w().value&&p.type==="summary"&&(p.unscheduled=!1),X.prepareEditTask(p,n.api.getState(),N),P||($.value=!1),p}function x(p){n.autoSave||j(p.values)}function H(p){A.value=p.errors}function j(p){const N=y().value;p={...p,unscheduled:w().value&&p.unscheduled&&p.type!=="summary"},delete p.links,delete p.data,(le.value.indexOf("duration")===-1||p.segments&&!p.duration)&&delete p.duration;const P={id:N.id||N,task:p,...Y().value&&{segmentIndex:I().value}};n.autoSave&&$.value&&(P.inProgress=$.value),n.api.exec("update-task",P),n.autoSave||O()}const de=e.computed(()=>C().value?{"ctrl+z":p=>{p.preventDefault(),n.api.exec("undo")},"ctrl+y":p=>{p.preventDefault(),n.api.exec("redo")}}:{});return(p,N)=>K.value?(e.openBlock(),e.createBlock(e.unref(se.Locale),{key:0},{default:e.withCtx(()=>[e.createVNode(e.unref(ve.Editor),{css:`wx-gantt-editor ${S.value} ${l.css}`,items:ne.value,values:K.value,topBar:G.value,bottomBar:l.bottomBar,placement:l.placement,layout:l.layout,readonly:l.readonly,autoSave:l.autoSave,focus:l.focus,onaction:L,onsave:x,onvalidation:H,onchange:U,hotkeys:l.hotkeys&&{...de.value,...l.hotkeys}},null,8,["css","items","values","topBar","bottomBar","placement","layout","readonly","autoSave","focus","hotkeys"])]),_:1})):e.createCommentVNode("",!0)}}),Tn=re(Bn,[["__scopeId","data-v-004073c2"]]),Sn={__name:"HeaderMenu",props:{columns:{default:null},api:{}},setup(l){const n=l,t=e.computed(()=>n.api?.getTable());return(o,c)=>(e.openBlock(),e.createBlock(e.unref(tt.HeaderMenu),{api:t.value,columns:l.columns},{default:e.withCtx(()=>[o.$slots.default?e.renderSlot(o.$slots,"default",{key:0}):e.createCommentVNode("",!0)]),_:3},8,["api","columns"]))}},$n={key:1,class:"wx-gantt-tooltip-text"},En=300,_n=Object.assign({name:"GanttWidgetsTooltip"},{__name:"Tooltip",props:{api:{},content:{}},setup(l){const n=l,t=e.ref(null),o=e.ref({}),c=e.ref({}),T=e.ref(null),b=e.ref({});function m(d){const C=d;for(;d;){if(d.getAttribute){const I=R.getID(d,"data-tooltip-id"),Y=R.getID(d,"data-tooltip-at"),G=d.getAttribute("data-tooltip");if(I||G){const E=R.locateID(C,"data-segment");return{id:I,tooltip:G,target:d,at:Y,segment:E}}}d=d.parentNode}return{id:null,tooltip:null,target:null,at:null,segment:null}}e.watchEffect(()=>{if(T.value){const d=T.value.getBoundingClientRect();d.right>=o.value.right&&(b.value.left=o.value.width-d.width-5),d.bottom>=o.value.bottom&&(b.value.top-=d.bottom-o.value.bottom+2)}});let y;const w=d=>{clearTimeout(y),y=setTimeout(()=>{d()},En)};function V(d){let{id:C,tooltip:I,target:Y,at:G,segment:E}=m(d.target);if(b.value=null,c.value={},!I)if(C)I=W(C,E);else{clearTimeout(y);return}w(()=>{C&&(c.value={data:_(C)},E!=null&&(c.value.segmentIndex=E));const S=Y.getBoundingClientRect();o.value=t.value.getBoundingClientRect();let h,B;G==="left"?(h=S.top+5-o.value.top,B=S.right+5-o.value.left):(h=S.top+S.height-o.value.top,B=d.clientX-o.value.left),b.value={top:h,left:B,text:I}})}function _(d){return n.api?.getTask(d)||null}function W(d,C){const I=_(d);return C!==null&&I?.segments?I.segments[C]?.text||"":I?.text||""}return(d,C)=>(e.openBlock(),e.createElementBlock("div",{class:"wx-tooltip-area",ref_key:"area",ref:t,onMousemove:V},[b.value&&(b.value.text||l.content)?(e.openBlock(),e.createElementBlock("div",{key:0,class:"wx-gantt-tooltip",ref_key:"tooltipNode",ref:T,style:e.normalizeStyle(`top:${b.value.top}px;left:${b.value.left}px`)},[l.content?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l.content),e.normalizeProps(e.mergeProps({key:0},c.value)),null,16)):b.value.text?(e.openBlock(),e.createElementBlock("div",$n,e.toDisplayString(b.value.text),1)):e.createCommentVNode("",!0)],4)):e.createCommentVNode("",!0),e.renderSlot(d.$slots,"default",{},void 0,!0)],544))}}),Cn=re(_n,[["__scopeId","data-v-6476f951"]]),In=Object.assign({name:"GanttThemesWillow"},{__name:"Willow",props:{fonts:{type:Boolean,default:!0}},setup(l){const n=l;return(t,o)=>t.$slots.default?(e.openBlock(),e.createBlock(e.unref(se.Willow),{key:0,fonts:n.fonts},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default",{},void 0,!0)]),_:3},8,["fonts"])):(e.openBlock(),e.createBlock(e.unref(se.Willow),{key:1,fonts:n.fonts},null,8,["fonts"]))}}),Ln=re(In,[["__scopeId","data-v-0c03ac4a"]]),zn={__name:"WillowDark",props:{fonts:{type:Boolean,default:!0}},setup(l){const n=l;return(t,o)=>t.$slots.default?(e.openBlock(),e.createBlock(e.unref(se.WillowDark),{key:0,fonts:n.fonts},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3},8,["fonts"])):(e.openBlock(),e.createBlock(e.unref(se.WillowDark),{key:1,fonts:n.fonts},null,8,["fonts"]))}},Dn=it.version;Object.defineProperty(exports,"defaultColumns",{enumerable:!0,get:()=>X.defaultColumns});Object.defineProperty(exports,"defaultEditorItems",{enumerable:!0,get:()=>X.defaultEditorItems});Object.defineProperty(exports,"defaultMenuOptions",{enumerable:!0,get:()=>X.defaultMenuOptions});Object.defineProperty(exports,"defaultTaskTypes",{enumerable:!0,get:()=>X.defaultTaskTypes});Object.defineProperty(exports,"defaultToolbarButtons",{enumerable:!0,get:()=>X.defaultToolbarButtons});Object.defineProperty(exports,"getEditorItems",{enumerable:!0,get:()=>X.getEditorItems});Object.defineProperty(exports,"getMenuOptions",{enumerable:!0,get:()=>X.getMenuOptions});Object.defineProperty(exports,"getToolbarButtons",{enumerable:!0,get:()=>X.getToolbarButtons});Object.defineProperty(exports,"registerScaleUnit",{enumerable:!0,get:()=>X.registerScaleUnit});Object.defineProperty(exports,"registerEditorItem",{enumerable:!0,get:()=>ve.registerEditorItem});exports.ContextMenu=cn;exports.Editor=Tn;exports.Gantt=an;exports.HeaderMenu=Sn;exports.Toolbar=on;exports.Tooltip=Cn;exports.Willow=Ln;exports.WillowDark=zn;exports.version=Dn;
package/dist/index.css ADDED
@@ -0,0 +1 @@
1
+ .wx-content[data-v-6381f23e]{width:100%;white-space:nowrap;display:flex;align-items:center}.wx-toggle-icon[data-v-6381f23e]{width:var(--wx-icon-size);min-width:12px;height:16px;line-height:16px;margin:0 5px;font-size:var(--wx-icon-size);color:var(--wx-gantt-icon-color);cursor:pointer}.wx-toggle-placeholder[data-v-6381f23e]{width:var(--wx-icon-size);height:16px;line-height:16px;margin:0 5px;flex:0 0 var(--wx-icon-size)}.wx-text[data-v-6381f23e]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.wx-action-icon[data-v-abfc4b0a]{cursor:pointer;font-size:var(--wx-icon-size);height:16px;line-height:16px;display:block;color:var(--wx-gantt-icon-color)}.wx-action-icon[data-v-abfc4b0a]:hover{color:var(--wx-color-link)}.wx-table-container[data-v-814ee4d3]{display:flex;flex-direction:column;border-right:var(--wx-gantt-border);overflow-x:auto;overflow-y:hidden;height:100%;box-sizing:content-box}.wx-table[data-v-814ee4d3]{--wx-table-select-background: var(--wx-gantt-select-color);--wx-table-select-focus-background: var(--wx-gantt-select-color);--wx-table-select-border: none;--wx-table-cell-border: var(--wx-grid-body-row-border);--wx-table-header-background: var(--wx-background);--wx-table-header-border: var(--wx-gantt-border);--wx-table-header-cell-border: var(--wx-gantt-border);height:100%}.wx-table[data-v-814ee4d3] .wx-grid .wx-table-box{border:none}.wx-table[data-v-814ee4d3] .wx-grid .wx-scroll{overflow:visible!important}.wx-table[data-v-814ee4d3] .wx-grid .wx-scroll .wx-body,.wx-table[data-v-814ee4d3] .wx-grid .wx-scroll .wx-header{width:100%!important}.wx-table[data-v-814ee4d3] .wx-grid{font:var(--wx-grid-body-font);color:var(--wx-grid-body-font-color)}.wx-table[data-v-814ee4d3] .wx-grid .wx-cell{padding:0 5px;height:100%;display:flex;align-items:center}.wx-table[data-v-814ee4d3] .wx-grid .wx-row{display:flex;align-items:center}.wx-table[data-v-814ee4d3] .wx-grid .wx-cell.wx-text-center{justify-content:center}.wx-table[data-v-814ee4d3] .wx-grid .wx-cell.wx-text-right{justify-content:end}.wx-table[data-v-814ee4d3] .wx-grid .wx-body .wx-cell{border-right:var(--wx-grid-body-cell-border)}.wx-table[data-v-814ee4d3] .wx-grid .wx-cell:has(input,.wx-value){height:100%;padding:0}.wx-table[data-v-814ee4d3] .wx-grid .wx-header{box-shadow:var(--wx-grid-header-shadow);z-index:1}.wx-table[data-v-814ee4d3] .wx-grid .wx-header .wx-cell{font:var(--wx-grid-header-font);text-transform:var(--wx-grid-header-text-transform);color:var(--wx-grid-header-font-color);padding:0 5px;border-bottom-color:transparent}.wx-table[data-v-814ee4d3] .wx-grid .wx-header .wx-cell:first-child{padding-left:14px}.wx-table[data-v-814ee4d3] .wx-grid .wx-header .wx-cell .wx-text{width:100%}.wx-table[data-v-814ee4d3] .wx-grid .wx-header .wx-cell:has(.wx-sort) .wx-text{width:calc(100% - 15px)}.wx-table[data-v-814ee4d3] .wx-grid .wx-header .wx-cell.wx-text-right{text-align:right}.wx-table[data-v-814ee4d3] .wx-grid .wx-header .wx-cell.wx-text-center{text-align:center;padding-left:5px}.wx-table[data-v-814ee4d3] .wx-grid .wx-header .wx-cell.wx-text-center.wx-action{justify-content:center}.wx-table[data-v-814ee4d3] .wx-grid .wx-header .wx-cell.wx-text-right.wx-action{justify-content:right}.wx-table[data-v-814ee4d3] .wx-grid .wx-header .wx-action i{font-size:var(--wx-icon-size);color:var(--wx-gantt-icon-color)}.wx-table[data-v-814ee4d3] .wx-grid .wx-header .wx-action .wx-text{display:none}.wx-table[data-v-814ee4d3] .wx-grid .wx-header .wx-action i:hover{color:var(--wx-color-link)}.wx-table[data-v-814ee4d3] .wx-grid .wx-reorder-task.wx-row{width:100%;background:var(--wx-background-alt);border-top:var(--wx-grid-body-row-border)}.wx-table[data-v-814ee4d3] .wx-grid .wx-reorder-task.wx-selected{background:var(--wx-gantt-select-color);border-top:transparent;border-bottom:transparent}.wx-links[data-v-4939b3a5]{position:absolute;top:0;left:0;width:100%;height:100%}.wx-line[data-v-4939b3a5]{-webkit-user-select:auto;user-select:auto;pointer-events:stroke;position:relative;stroke:var(--wx-gantt-link-color);stroke-width:2;z-index:0;fill:transparent}.wx-line-selectable[data-v-4939b3a5]:hover{stroke:var(--wx-gantt-link-color-hovered)}.wx-line-selectable.wx-critical[data-v-4939b3a5]:hover{stroke:var(--wx-gantt-link-critical-color-hovered)}.wx-line-selectable[data-v-4939b3a5]{cursor:pointer}.wx-line.wx-line-selected[data-v-4939b3a5]{stroke:var(--wx-color-danger)}.wx-critical[data-v-4939b3a5]{stroke:var(--wx-gantt-link-critical-color)}.wx-rollup[data-v-e1e1122e]{position:absolute;z-index:1;border:1px solid var(--wx-gantt-marker-color);border-color:var(--wx-background);border-radius:var(--wx-gantt-baseline-border-radius);opacity:.75;background-color:var( --wx-gantt-task-color )}.wx-task-rollup[data-v-e1e1122e]{background-color:var(--wx-gantt-task-color)}.wx-summary-rollup[data-v-e1e1122e]{background-color:var(--wx-gantt-summary-color)}.wx-milestone-rollup[data-v-e1e1122e]{background-color:var(--wx-gantt-milestone-color);transform:rotate(45deg) scale(.75);border-radius:var(--wx-gantt-milestone-border-radius)}.wx-segments[data-v-558dfded]{position:relative;width:100%;height:100%}.wx-segment[data-v-558dfded]{height:100%}.wx-segments[data-v-558dfded]:before{content:"";position:absolute;top:50%;left:0;width:100%;height:0;border-top:1px dashed #7f7f7f;transform:translateY(-50%)}.wx-progress-percent[data-v-558dfded]{background-color:var(--wx-gantt-task-fill-color)}.wx-rollup[data-v-a2fa1ccc]{position:absolute;z-index:1;background-color:var(--wx-gantt-task-color);border:1px solid var(--wx-gantt-marker-color);border-color:var(--wx-gantt-marker-color)}.wx-baseline[data-v-a2fa1ccc]{position:absolute;background-color:#a883e4;border-radius:var(--wx-gantt-baseline-border-radius);z-index:1}.wx-baseline.wx-milestone[data-v-a2fa1ccc]{transform:rotate(45deg) scale(.75);border-radius:var(--wx-gantt-milestone-border-radius)}.wx-bars[data-v-a2fa1ccc]{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.wx-bar[data-v-a2fa1ccc],.wx-bar[data-v-a2fa1ccc] .wx-segment{pointer-events:all;box-sizing:border-box;position:absolute;border-radius:var(--wx-gantt-bar-border-radius);font:var(--wx-gantt-bar-font);white-space:nowrap;line-height:inherit;text-align:center;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.wx-bar.wx-touch[data-v-a2fa1ccc]{opacity:.5}.wx-bar.wx-reorder-task[data-v-a2fa1ccc]{z-index:3}.wx-bar[data-v-a2fa1ccc] .wx-content{overflow:hidden;text-overflow:ellipsis}.wx-task[data-v-a2fa1ccc]:not(.wx-split),.wx-task[data-v-a2fa1ccc] .wx-segment{color:var(--wx-gantt-task-font-color);background-color:var(--wx-gantt-task-color);border:var(--wx-gantt-task-border)}.wx-task.wx-selected[data-v-a2fa1ccc]:not(.wx-split){border:1px solid var(--wx-gantt-task-border-color);box-shadow:var(--wx-gantt-bar-shadow)}.wx-task[data-v-a2fa1ccc]:not(.wx-split):hover,.wx-task[data-v-a2fa1ccc] .wx-segment:hover{box-shadow:var(--wx-gantt-bar-shadow)}.wx-summary[data-v-a2fa1ccc]{color:var(--wx-gantt-summary-font-color);background-color:var(--wx-gantt-summary-color);border:var(--wx-gantt-summary-border)}.wx-summary.wx-selected[data-v-a2fa1ccc]{border:1px solid var(--wx-gantt-summary-border-color);box-shadow:var(--wx-gantt-bar-shadow)}.wx-summary[data-v-a2fa1ccc]:hover{box-shadow:var(--wx-gantt-bar-shadow)}.wx-milestone .wx-content[data-v-a2fa1ccc]{position:absolute;top:0;left:0;width:100%;height:100%;z-index:2}.wx-bar[data-v-a2fa1ccc]:not(.wx-milestone) .wx-content{position:relative;z-index:2}.wx-bars[data-v-a2fa1ccc] .wx-text-out{position:absolute;line-height:normal;display:block;color:var(--wx-color-font);pointer-events:none}.wx-milestone[data-v-a2fa1ccc]{border-color:var(--wx-gantt-milestone-color)}.wx-milestone .wx-text-out[data-v-a2fa1ccc]{padding:0 2px;left:100%}.wx-milestone .wx-content[data-v-a2fa1ccc]{height:100%;background-color:var(--wx-gantt-milestone-color);transform:rotate(45deg) scale(.75);border-radius:var(--wx-gantt-milestone-border-radius)}.wx-bar[data-v-a2fa1ccc] .wx-progress-wrapper{position:absolute;width:100%;height:100%;background-color:transparent;border-radius:var(--wx-gantt-bar-border-radius);overflow:hidden}.wx-bar[data-v-a2fa1ccc] .wx-progress-percent{height:100%}.wx-progress-marker[data-v-a2fa1ccc]{opacity:0;position:absolute;top:80%;width:var(--wx-icon-size);height:var(--wx-gantt-progress-marker-height);background:var(--wx-gantt-progress-border-color);clip-path:polygon(50% 0,100% 30%,100% 100%,0 100%,0 30%);color:var(--wx-color-font);z-index:3;font-size:calc(var(--wx-font-size-sm) - 2px);border-radius:4px;cursor:ew-resize;text-align:center;line-height:3}.wx-progress-marker[data-v-a2fa1ccc]:before{content:"";display:block;position:absolute;width:calc(var(--wx-icon-size) - 2px);height:calc(var(--wx-gantt-progress-marker-height) - 2px);clip-path:polygon(50% 0,100% 30%,100% 100%,0 100%,0 30%);top:1px;left:1px;background:var(--wx-gantt-link-marker-background);z-index:-1;border-radius:4px}.wx-bar:hover .wx-progress-marker[data-v-a2fa1ccc],.wx-progress-marker.wx-progress-in-drag[data-v-a2fa1ccc]{opacity:1}.wx-task .wx-progress-percent[data-v-a2fa1ccc]{background-color:var(--wx-gantt-task-fill-color)}.wx-summary .wx-progress-percent[data-v-a2fa1ccc]{background-color:var(--wx-gantt-summary-fill-color)}.wx-link[data-v-a2fa1ccc]{position:absolute;z-index:4;top:50%;transform:translateY(-50%);width:16px;height:16px;border-radius:50%;border:1px solid var(--wx-gantt-link-marker-color);background-color:var(--wx-gantt-link-marker-background);opacity:0;cursor:default}.wx-link .wx-inner[data-v-a2fa1ccc]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:8px;height:8px;border-radius:50%;border:4px solid var(--wx-gantt-link-marker-color);pointer-events:none}.wx-bar[data-v-a2fa1ccc] button.wx-button.wx-delete-button{position:absolute;z-index:4;top:50%;transform:translateY(-50%);width:16px;height:16px;padding:0}.wx-delete-button-icon[data-v-a2fa1ccc]{display:block;line-height:14px;font-size:10px}.wx-bar[data-v-a2fa1ccc] .wx-delete-button.wx-left,.wx-link.wx-left[data-v-a2fa1ccc]{left:-16px}.wx-bar[data-v-a2fa1ccc] .wx-delete-button.wx-right,.wx-link.wx-right[data-v-a2fa1ccc]{right:-16px}.wx-link.wx-target[data-v-a2fa1ccc]:hover,.wx-link.wx-selected[data-v-a2fa1ccc],.wx-bar:hover .wx-link.wx-target[data-v-a2fa1ccc],.wx-link.wx-visible.wx-target[data-v-a2fa1ccc]{opacity:1;cursor:pointer}.wx-bar:not(.wx-split) .wx-link.wx-selected[data-v-a2fa1ccc]{border-color:inherit}.wx-bar:not(.wx-split) .wx-link.wx-selected .wx-inner[data-v-a2fa1ccc]{border-color:inherit}.wx-milestone .wx-link.wx-left[data-v-a2fa1ccc]{left:-16px}.wx-milestone .wx-link.wx-right[data-v-a2fa1ccc]{right:-16px}.wx-cut[data-v-a2fa1ccc]{opacity:50%}.wx-bar[data-v-a2fa1ccc]:not(.wx-milestone):focus{outline:1px solid var(--wx-color-primary);outline-offset:1px}.wx-milestone[data-v-a2fa1ccc]:focus{outline:none}.wx-milestone:focus .wx-content[data-v-a2fa1ccc]{outline:1px solid var(--wx-color-primary);outline-offset:1.6px}.wx-task.wx-critical[data-v-a2fa1ccc]{background-color:var(--wx-gantt-task-critical-color)}.wx-task.wx-critical.wx-selected[data-v-a2fa1ccc]{border:1px solid var(--wx-gantt-task-critical-color)}.wx-task.wx-critical .wx-progress-percent[data-v-a2fa1ccc]{background-color:var(--wx-gantt-task-critical-fill-color)}.wx-milestone.wx-critical .wx-content[data-v-a2fa1ccc]{background-color:var(--wx-gantt-critical-color)}.wx-milestone.wx-critical[data-v-a2fa1ccc]{border-color:var(--wx-gantt-critical-color)}.wx-summary.wx-critical[data-v-a2fa1ccc]{background-color:var(--wx-gantt-summary-critical-color)}.wx-summary.wx-critical .wx-progress-percent[data-v-a2fa1ccc]{background-color:var(--wx-gantt-summary-critical-fill-color)}.wx-summary.wx-critical.wx-selected[data-v-a2fa1ccc]{border:1px solid var(--wx-gantt-summary-critical-color)}.wx-split.wx-selected[data-v-a2fa1ccc]{border-color:var(--wx-gantt-task-border-color)}.wx-bars .wx-split.wx-bar[data-v-a2fa1ccc]{background:transparent;border-color:transparent}.wx-split .wx-link.wx-selected[data-v-a2fa1ccc],.wx-split .wx-link.wx-selected .wx-inner[data-v-a2fa1ccc]{border-color:var(--wx-gantt-task-border-color)}.wx-critical[data-v-a2fa1ccc] .wx-segment{background-color:var(--wx-gantt-task-critical-color)}.wx-critical.wx-selected[data-v-a2fa1ccc] .wx-segment{border:1px solid var(--wx-gantt-task-critical-color)}.wx-critical[data-v-a2fa1ccc] .wx-segment .wx-progress-percent{background-color:var(--wx-gantt-task-critical-fill-color)}.wx-critical.wx-split .wx-link.wx-selected[data-v-a2fa1ccc],.wx-critical.wx-split .wx-link.wx-selected .wx-inner[data-v-a2fa1ccc]{border-color:var(--wx-gantt-task-critical-color)}.wx-slack[data-v-a2fa1ccc]{box-sizing:border-box;position:absolute;border-radius:var(--wx-gantt-bar-border-radius);border-bottom-left-radius:0;border-top-left-radius:0}.wx-slack-task[data-v-a2fa1ccc]{border:1px solid var(--wx-gantt-task-slack-border-color);background:repeating-linear-gradient(-60deg,var(--wx-gantt-task-slack-border-color),var(--wx-gantt-task-slack-border-color) 1px,var(--wx-gantt-task-slack-color) 1px,var(--wx-gantt-task-slack-color) 8px)}.wx-scale[data-v-3207e419]{position:sticky;top:0;background-color:var(--wx-background);box-shadow:var(--wx-timescale-shadow);z-index:5;border-bottom:var(--wx-gantt-border)}.wx-row[data-v-3207e419],.wx-cell[data-v-3207e419]{display:flex;box-sizing:border-box}.wx-row[data-v-3207e419]:not(:last-child){border-bottom:var(--wx-gantt-border)}.wx-cell[data-v-3207e419]{justify-content:center;align-items:center;border-right:var(--wx-timescale-border);font:var(--wx-timescale-font);color:var(--wx-timescale-font-color)}.wx-cell.wx-weekend[data-v-3207e419]{background:var(--wx-gantt-holiday-background);color:var(--wx-gantt-holiday-color)}.wx-chart[data-v-def875eb]{position:relative;flex:1 1 auto;overflow-x:auto;overflow-y:hidden;outline:none}.wx-markers[data-v-def875eb]{position:absolute}.wx-marker[data-v-def875eb]{position:absolute;z-index:4;width:2px;height:100%;text-align:center;-webkit-user-select:none;user-select:none;transform:scaleX(-1);background:var(--wx-gantt-marker-color)}.wx-content[data-v-def875eb]{position:absolute;min-width:50px;padding:4px 8px;border-top-left-radius:4px;border-bottom-left-radius:4px;font:var(--wx-gantt-marker-font);color:var(--wx-gantt-marker-font-color);background-color:inherit;white-space:nowrap;transform:scaleX(-1)}.wx-area[data-v-def875eb]{position:relative;overflow-y:hidden}.wx-selected[data-v-def875eb]{position:absolute;box-sizing:border-box;left:0;width:100%;background:var(--wx-gantt-select-color)}.wx-cut[data-v-def875eb]{opacity:50%}.wx-gantt-holidays[data-v-def875eb]{height:100%;width:100%;position:absolute}.wx-weekend[data-v-def875eb]{height:100%;background:var(--wx-gantt-holiday-background);color:var(--wx-gantt-holiday-color);position:absolute}.wx-resizer.wx-resizer-display-all[data-v-206d8277]:hover:before,.wx-resizer.wx-resizer-display-all[data-v-206d8277]:hover:after,.wx-button-expand-content[data-v-206d8277]:before,.wx-button-expand-content[data-v-206d8277]:after{content:"";position:absolute;background-color:var(--wx-gantt-border-color)}.wx-resizer[data-v-206d8277]{position:relative;z-index:10;display:flex;align-items:center;justify-content:center;background-color:var(--wx-gantt-border-color)}.wx-resizer:hover .wx-button-expand-content[data-v-206d8277]{opacity:1}.wx-resizer.wx-resizer-display-all[data-v-206d8277]:hover:before,.wx-resizer.wx-resizer-display-all[data-v-206d8277]:hover:after{top:0;width:2px;height:100%}.wx-resizer.wx-resizer-display-all[data-v-206d8277]:hover:before{left:-3px}.wx-resizer.wx-resizer-display-all[data-v-206d8277]:hover:after{right:-2px}.wx-resizer-display-chart .wx-button-expand-left[data-v-206d8277],.wx-resizer-display-grid .wx-button-expand-right[data-v-206d8277]{display:none}.wx-resizer-display-all .wx-button-expand-content[data-v-206d8277]{opacity:0}.wx-resizer-display-all .wx-button-expand-box[data-v-206d8277],.wx-resizer-display-chart .wx-button-expand-box[data-v-206d8277]{left:12px}.wx-resizer-display-grid .wx-button-expand-left[data-v-206d8277]{right:-6px}.wx-resizer-display-chart .wx-button-expand-left[data-v-206d8277],.wx-resizer-display-all .wx-button-expand-left[data-v-206d8277]{right:5px}.wx-button-expand-box[data-v-206d8277]{position:relative;width:20px}.wx-button-expand-content[data-v-206d8277]{position:absolute;transform:translate(-50%,-50%);width:20px}.wx-button-expand-content i[data-v-206d8277]{display:flex;justify-content:center;background-color:var(--wx-gantt-border-color);cursor:pointer;font-size:20px;line-height:24px}.wx-button-expand-content i[data-v-206d8277]:hover{color:var(--wx-color-primary)}.wx-button-expand-content i[data-v-206d8277]:active{color:var(--wx-gantt-task-fill-color)}.wx-button-expand-right[data-v-206d8277]{top:4px;left:1px}.wx-button-expand-right[data-v-206d8277]:before{top:-3.6px;width:17px;height:4px;clip-path:polygon(100% 100%,0 0,0 100%)}.wx-button-expand-right[data-v-206d8277]:after{width:17px;height:4px;clip-path:polygon(100% 0,0 100%,0 0)}.wx-button-expand-right i[data-v-206d8277]{border-top-right-radius:4px;border-bottom-right-radius:4px}.wx-button-expand-left[data-v-206d8277]{top:4px}.wx-button-expand-left i[data-v-206d8277]{border-top-left-radius:4px;border-bottom-left-radius:4px}.wx-button-expand-left[data-v-206d8277]:before{top:-3.6px;left:3px;width:17px;height:4px;clip-path:polygon(100% 0,100% 100%,0% 100%)}.wx-button-expand-left[data-v-206d8277]:after{left:3px;width:17px;height:4px;clip-path:polygon(0 0,100% 100%,100% 0)}.wx-gantt[data-v-b6d88a7d]{height:100%;width:100%;overflow-y:auto}.wx-pseudo-rows[data-v-b6d88a7d]{width:100%;height:auto;min-height:100%}.wx-stuck[data-v-b6d88a7d]{position:sticky;top:0;height:100%;width:100%;max-height:100%}.wx-layout[data-v-b6d88a7d]{position:relative;display:flex;max-height:100%;max-width:100%;background-color:var(--wx-background);overflow:hidden;outline:none;height:100%}.wx-content[data-v-b6d88a7d]{position:relative;display:flex;flex-direction:column;overflow:hidden}.wx-menu .wx-option.wx-disabled{pointer-events:none}.wx-menu .wx-option.wx-disabled .wx-value,.wx-menu .wx-option.wx-disabled .wx-icon{color:var(--wx-color-font-disabled)}.wx-links[data-v-94a2215a]{margin-bottom:10px}.wx-cell[data-v-94a2215a]{text-align:center}.wx-task-name[data-v-94a2215a]{font-family:var(--wx-input-font-family);font-size:var(--wx-input-font-size);font-weight:var(--wx-input-font-weigth);color:var(--wx-input-font-color);width:170px;text-align:left;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.wx-link-lag[data-v-94a2215a]{width:60px}.wx-wrapper[data-v-94a2215a]{position:relative;display:flex}.wx-delete-icon[data-v-94a2215a]{margin-left:12px;position:relative;top:2px;font-size:var(--wx-icon-size);cursor:pointer;color:var(--wx-gantt-icon-color)}.wx-delete-icon[data-v-94a2215a]:hover{color:var(--wx-color-primary)}.date-time-controll[data-v-1f9dfea2]{display:flex;gap:12px}.wx-sidearea .wx-gantt-editor{width:450px}.wx-sidearea .wx-gantt-editor.wx-full-screen{width:100%}.wx-tooltip-area[data-v-6476f951]{position:relative;height:100%;width:100%}[data-v-6476f951] .wx-gantt-tooltip{pointer-events:none;position:absolute;z-index:10;box-shadow:var(--wx-box-shadow);border-radius:2px;overflow:hidden}.wx-gantt-tooltip-text[data-v-6476f951]{padding:6px 10px;background-color:var(--wx-tooltip-background);font:var(--wx-tooltip-font);color:var(--wx-tooltip-font-color)}.wx-willow-theme{--wx-gantt-border-color: #e6e6e6;--wx-gantt-border: 1px solid #1d1e261a;--wx-gantt-form-header-border: none;--wx-gantt-icon-color: #9fa1ae;--wx-gantt-bar-font: var(--wx-font-weight) var(--wx-font-size) var(--wx-font-family);--wx-gantt-bar-border-radius: 3px;--wx-gantt-milestone-border-radius: 3px;--wx-gantt-critical-color: #de3a3a;--wx-gantt-task-color: #3983eb;--wx-gantt-task-font-color: #fff;--wx-gantt-task-fill-color: #1f6bd9;--wx-gantt-task-border-color: #1f6bd9;--wx-gantt-task-border: 1px solid transparent;--wx-gantt-task-critical-color: var(--wx-gantt-critical-color);--wx-gantt-task-critical-fill-color: #c83434;--wx-gantt-task-slack-color: #f5f9fe;--wx-gantt-task-slack-border-color: #b0cdf7;--wx-gantt-summary-color: #00ba94;--wx-gantt-summary-font-color: #ffffff;--wx-gantt-summary-fill-color: #099f81;--wx-gantt-summary-border-color: #099f81;--wx-gantt-summary-border: 1px solid transparent;--wx-gantt-summary-critical-color: #d9306f;--wx-gantt-summary-critical-fill-color: #c32b64;--wx-gantt-milestone-color: #ad44ab;--wx-gantt-select-color: #eaedf5;--wx-gantt-link-color: #9fa1ae;--wx-gantt-link-color-hovered: #6e777d;--wx-gantt-link-critical-color: var(--wx-gantt-critical-color);--wx-gantt-link-critical-color-hovered: #b22e2e;--wx-gantt-link-marker-background: #eaedf5;--wx-gantt-link-marker-color: #9fa1ae;--wx-gantt-bar-shadow: 0px 1px 2px rgba(44, 47, 60, .06), 0px 3px 10px rgba(44, 47, 60, .12);--wx-gantt-progress-marker-height: 26px;--wx-gantt-progress-border-color: #c0c3ce;--wx-gantt-baseline-border-radius: 2px;--wx-grid-header-font: var(--wx-font-weight-md) var(--wx-font-size) var(--wx-font-family);--wx-grid-header-font-color: var(--wx-color-font);--wx-grid-header-text-transform: capitalize;--wx-grid-header-shadow: none;--wx-grid-body-font: var(--wx-font-weight) var(--wx-font-size) var(--wx-font-family);--wx-grid-body-font-color: var(--wx-color-font);--wx-grid-body-row-border: var(--wx-gantt-border);--wx-grid-body-cell-border: 1px solid transparent;--wx-timescale-font: var(--wx-font-weight-md) var(--wx-font-size-sm) var(--wx-font-family);--wx-timescale-font-color: var(--wx-color-font);--wx-timescale-shadow: none;--wx-timescale-border: var(--wx-gantt-border);--wx-gantt-holiday-background: #f0f6fa;--wx-gantt-holiday-color: #9fa1ae;--wx-gantt-marker-font: var(--wx-font-weight-md) var(--wx-font-size-sm) var(--wx-font-family);--wx-gantt-marker-font-color: #fff;--wx-gantt-marker-color: rgba(6, 189, 248, .77);--wx-tooltip-font: var(--wx-font-weight) var(--wx-font-size) var(--wx-font-family);--wx-tooltip-font-color: #e6e6e6;--wx-tooltip-background: #4f525a;--wx-sidebar-close-icon: #c0c3ce}.wx-willow-dark-theme{color-scheme:dark;--wx-gantt-border-color: #384047;--wx-gantt-border: var(--wx-border);--wx-gantt-form-header-border: none;--wx-gantt-icon-color: #9fa1ae;--wx-gantt-bar-font: var(--wx-font-weight) var(--wx-font-size) var(--wx-font-family);--wx-gantt-bar-border-radius: 3px;--wx-gantt-milestone-border-radius: 3px;--wx-gantt-critical-color: #de3a3a;--wx-gantt-task-color: #37a9ef;--wx-gantt-task-font-color: #ffffffe5;--wx-gantt-task-fill-color: #098cdc;--wx-gantt-task-border-color: #098cdc;--wx-gantt-task-border: 1px solid transparent;--wx-gantt-task-critical-color: var(--wx-gantt-critical-color);--wx-gantt-task-critical-fill-color: #c83434;--wx-gantt-task-slack-color: #2c3440;--wx-gantt-task-slack-border-color: #597194;--wx-gantt-summary-color: #00ba94;--wx-gantt-summary-font-color: #ffffffe5;--wx-gantt-summary-fill-color: #099f81;--wx-gantt-summary-border-color: #099f81;--wx-gantt-summary-border: 1px solid transparent;--wx-gantt-summary-critical-color: #d9306f;--wx-gantt-summary-critical-fill-color: #c32b64;--wx-gantt-progress-marker-height: 26px;--wx-gantt-progress-border-color: #4b5359;--wx-gantt-baseline-border-radius: 2px;--wx-gantt-bar-shadow: 0px 1px 2px rgba(44, 47, 60, .06), 0px 3px 10px rgba(44, 47, 60, .12);--wx-gantt-milestone-color: #ad44ab;--wx-gantt-select-color: #384047;--wx-gantt-link-color: #9fa1ae;--wx-gantt-link-color-hovered: #c8c7cf;--wx-gantt-link-critical-color: var(--wx-gantt-critical-color);--wx-gantt-link-critical-color-hovered: #b22e2e;--wx-gantt-link-marker-background: #384047;--wx-gantt-link-marker-color: #9fa1ae;--wx-grid-header-font: var(--wx-font-weight-md) var(--wx-font-size) var(--wx-font-family);--wx-grid-header-font-color: var(--wx-color-font);--wx-grid-header-text-transform: capitalize;--wx-grid-header-shadow: none;--wx-grid-body-font: var(--wx-font-weight) var(--wx-font-size) var(--wx-font-family);--wx-grid-body-font-color: var(--wx-color-font);--wx-grid-body-row-border: var(--wx-border);--wx-grid-body-cell-border: 1px solid transparent;--wx-timescale-font: var(--wx-font-weight-md) var(--wx-font-size-sm) var(--wx-font-family);--wx-timescale-font-color: var(--wx-color-font);--wx-timescale-shadow: none;--wx-timescale-border: var(--wx-border);--wx-gantt-holiday-background: #303539;--wx-gantt-holiday-color: #878994;--wx-gantt-marker-font: var(--wx-font-weight-md) var(--wx-font-size-sm) var(--wx-font-family);--wx-gantt-marker-font-color: #fff;--wx-gantt-marker-color: rgba(6, 189, 248, .77);--wx-tooltip-font: var(--wx-font-weight) var(--wx-font-size) var(--wx-font-family);--wx-tooltip-font-color: #e6e6e6;--wx-tooltip-background: #4f525a;--wx-sidebar-close-icon: #384047}