/*! * LiteRyzJS/Project v0.2.1.114 * Copyright 2023-2024 Ray Lam (https://www.hiimray.co.uk) * */ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.LiteRyzJS=e():t.LiteRyzJS=e()}(this,(()=>(()=>{var t={25:(t,e,n)=>{"use strict";n.d(e,{A:()=>s});var a=n(601),o=n.n(a),r=n(314),i=n.n(r)()(o());i.push([t.id,".literyzjs-project .project-planner{border-spacing:0px;border-collapse:separate;cursor:default;padding:0px 0px 30px 0px;width:100%}.literyzjs-project .project-planner .b{font-weight:bold}.literyzjs-project .project-planner .b input[type=text]{font-weight:bold}.literyzjs-project .project-planner .c{text-align:center}.literyzjs-project .project-planner .i{display:inline-block;width:20px}.literyzjs-project .project-planner thead tr{font-weight:bold;font-size:.8em;user-select:none;height:40px;text-align:center;vertical-align:bottom}.literyzjs-project .project-planner thead tr th{background-color:#e1e1e1;border-color:#b8b8b8;border-style:solid;border-width:0px 0px 1px 1px;color:#3e7138;margin:0px;padding:6px 10px 5px 10px;min-width:20px}.literyzjs-project .project-planner thead tr th:first-child{background-color:inherit;border-left-width:0px}.literyzjs-project .project-planner thead tr th:last-child{border-right-width:1px}.literyzjs-project .project-planner tbody tr input[type=text]{background:none;border:none;cursor:default;font-family:inherit;font-size:inherit;margin:0px;padding:0px;width:auto}.literyzjs-project .project-planner tbody tr td{border-color:#b8b8b8;border-style:solid;border-width:0px 0px 1px 0px;margin:0px;overflow:hidden;padding:5px 5px 5px 5px;text-overflow:ellipsis;white-space:nowrap}.literyzjs-project .project-planner tbody tr td:first-child{border-right-width:1px;color:#7e7e7e;font-size:.8em;text-align:center;user-select:none}.literyzjs-project .project-planner tbody tr td:last-child{border-right-width:1px}.literyzjs-project .project-planner tbody tr:hover td:first-child{background-color:#d1f2c7;color:#3e7138;font-weight:bold}.literyzjs-project .project-planner tbody tr:hover td:not(:first-child){background-color:rgba(233,237,239,.8)}.literyzjs-project .project-planner tbody tr:nth-child(odd){background-color:rgba(233,237,239,.3)}.gantt-chart{border-color:#b8b8b8;border-style:solid;border-width:1px;overflow:hidden;scrollbar-width:thin;scrollbar-color:#cdcdcd #f0f0f0}.gantt-chart.scroll-x{overflow-x:scroll !important}.gantt-chart canvas{display:block;position:relative}",""]);const s=i},314:t=>{"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var n="",a=void 0!==e[5];return e[4]&&(n+="@supports (".concat(e[4],") {")),e[2]&&(n+="@media ".concat(e[2]," {")),a&&(n+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),n+=t(e),a&&(n+="}"),e[2]&&(n+="}"),e[4]&&(n+="}"),n})).join("")},e.i=function(t,n,a,o,r){"string"==typeof t&&(t=[[null,t,void 0]]);var i={};if(a)for(var s=0;s0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=r),n&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=n):c[2]=n),o&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=o):c[4]="".concat(o)),e.push(c))}},e}},601:t=>{"use strict";t.exports=function(t){return t[1]}},72:t=>{"use strict";var e=[];function n(t){for(var n=-1,a=0;a{"use strict";var e={};t.exports=function(t,n){var a=function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(t){n=null}e[t]=n}return e[t]}(t);if(!a)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");a.appendChild(n)}},540:t=>{"use strict";t.exports=function(t){var e=document.createElement("style");return t.setAttributes(e,t.attributes),t.insert(e,t.options),e}},56:(t,e,n)=>{"use strict";t.exports=function(t){var e=n.nc;e&&t.setAttribute("nonce",e)}},825:t=>{"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=t.insertStyleElement(t);return{update:function(n){!function(t,e,n){var a="";n.supports&&(a+="@supports (".concat(n.supports,") {")),n.media&&(a+="@media ".concat(n.media," {"));var o=void 0!==n.layer;o&&(a+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),a+=n.css,o&&(a+="}"),n.media&&(a+="}"),n.supports&&(a+="}");var r=n.sourceMap;r&&"undefined"!=typeof btoa&&(a+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),e.styleTagTransform(a,t,e.options)}(e,t,n)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(e)}}}},113:t=>{"use strict";t.exports=function(t,e){if(e.styleSheet)e.styleSheet.cssText=t;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}}},707:function(t){var e;e=()=>(()=>{var t={814:()=>{Array.isEmpty=function(t){return"array"!=Object.getDataType(t)||t.length<=0},Array.toFlatten=function(t,e,n){for(let a=0;a0&&Array.toFlatten(t[a][e],e,n)},Array.prototype.addRange=function(t){return null==t||t.forEach((t=>{this.push(t)})),this},Array.prototype.all=function(t,e){for(let n=0;n{e+=this.count(t.propName,t.value)})),e},Array.prototype.create=function(t,e){let n=[];for(let a=0;a=this.length?"":this[t]},Array.prototype.index=function(t,e){const n=this.indexes(t,e);return n.length<=0?null:n[0]},Array.prototype.indexes=function(t,e){let n=[];for(let a=0;a=this.length?this.push(e):this.splice(t,0,e),this},Array.prototype.joinIfNotNullOrWhitespace=function(t){let e="";for(let n=0;nn[t]?1:0})),this},Array.prototype.orderByDesc=function(t){return this.sort((function(e,n){return e[t]n[t]?-1:0})),this},Array.prototype.remove=function(t){let e=[];for(let n=0;n=0;t--)this.removeAt(e[t]);return this},Array.prototype.removeAt=function(t){return t<0||t>=this.length||this.splice(t,1),this},Array.prototype.removeRange=function(t){for(let e=0;e{e=e.select(t.propName,t.value)})),e},Array.prototype.toList=function(t){let e=[];return this.forEach((n=>{null!=typeof n[t]&&e.push(n[t])})),e},Array.prototype.sortTree=function(t,e){this.orderBy(e);for(let n=0;n{Boolean.isFalse=function(t){return!!String.isNullOrUndefined(t)||t.toString().containsCI("false","f","y","0","x")},Boolean.isTrue=function(t){return!String.isNullOrUndefined(t)&&t.toString().containsCI("true","t","n","1","o")},Boolean.ifTrue=function(t,e,n){return Boolean.isTrue(t)?e:n}},579:()=>{Date.addDays=function(t,e){let n=new Date(t);return n.addDays(e),n},Date.addMonths=function(t,e){let n=new Date(t);return n.addMonths(e),n},Date.addYears=function(t,e){let n=new Date(t);return n.addYears(e),n},Date.max=function(t,e){return null==t?e:null==e?t:new Date(t)<=new Date(e)?new Date(e):new Date(t)},Date.min=function(t,e){return null==t?e:null==e?t:new Date(t)<=new Date(e)?new Date(t):new Date(e)},Date.diffDays=function(t,e){return Math.ceil((new Date(e).getTime()-new Date(t).getTime())/864e5)},Date.today=function(){let t=new Date;return t.setHours(0),t.setMinutes(0),t.setSeconds(0),t.setMilliseconds(0),t},Date.prototype.addDays=function(t){this.setDate(this.getDate()+parseInt(t))},Date.prototype.addMonths=function(t){this.setMonth(this.getMonth()+parseInt(t))},Date.prototype.addYears=function(t){this.setFullYear(this.getFullYear()+parseInt(t))},Date.prototype.toCString=function(t){let e=t;return e=e.replace("fffffff",this.getMilliseconds().toString().padStart(7,"0")),e=e.replace("ffffff",this.getMilliseconds().toString().padStart(6,"0")),e=e.replace("fffff",this.getMilliseconds().toString().padStart(5,"0")),e=e.replace("yyyy",this.getFullYear().toString().padStart(4,"0")),e=e.replace("MMMM","{1}"),e=e.replace("dddd","{2}"),e=e.replace("ffff",this.getMilliseconds().toString().padStart(4,"0")),e=e.replace("yyy",this.getFullYear().toString().padStart(3,"0")),e=e.replace("MMM","{3}"),e=e.replace("ddd","{4}"),e=e.replace("fff",this.getMilliseconds().toString().padStart(3,"0")),e=e.replace("zzz",""),e=e.replace("yy",this.getFullYear().toString().slice(-2)),e=e.replace("MM",(this.getMonth()+1).toString().padStart(2,"0")),e=e.replace("dd",this.getDate().toString().padStart(2,"0")),e=e.replace("HH",this.getHours().toString().padStart(2,"0")),e=e.replace("hh",(this.getHours()>12?this.getHours()-12:this.getHours()).toString().padStart(2,"0")),e=e.replace("mm",this.getMinutes().toString().padStart(2,"0")),e=e.replace("ss",this.getSeconds().toString().padStart(2,"0")),e=e.replace("ff",this.getMilliseconds().toString().padStart(2,"0")),e=e.replace("tt","{5}"),e=e.replace("zz",""),e=e.replace("y",this.getFullYear().toString()),e=e.replace("M",(this.getMonth()+1).toString()),e=e.replace("d",this.getDate().toString()),e=e.replace("H",this.getHours().toString()),e=e.replace("h",(this.getHours()>12?this.getHours()-12:this.getHours()).toString()),e=e.replace("m",this.getMinutes().toString()),e=e.replace("s",this.getSeconds().toString()),e=e.replace("z",""),e=e.replace("t","{6}"),e=e.replace("Z",""),e=e.replace("{1}",this.toLocaleString("default",{month:"long"})),e=e.replace("{2}",this.toLocaleString("default",{weekday:"long"})),e=e.replace("{3}",this.toLocaleString("default",{month:"short"})),e=e.replace("{4}",this.toLocaleString("default",{weekday:"short"})),e=e.replace("{5}",this.getHours()>=12?"PM":"AM"),e=e.replace("{6}",this.getHours()>=12?"P":"A"),e}},874:()=>{Document.ready=async function(t){!async function(){"loading"!==document.readyState?t():document.addEventListener("DOMContentLoaded",(function(){t()}))}()},Document.getWidth=function(t){return null==t||void 0===t?0:t.offsetWidth||t.innerWidth||t.clientWidth},Document.getHeight=function(t){return null==t||void 0===t?0:t.offsetHeight||t.innerHeight||t.clientHeight},Document.appendHtml=function(t,e){const n=document.createElement(e);t.appendChild(n)},Document.addClass=function(t,e){t.classList.contains(e)||t.classList.add(e)},Document.removeClass=function(t,e){t.classList.contains(e)&&t.classList.remove(e)}},705:()=>{Math.randomN=function(t,e){return t=Math.ceil(t),e=Math.floor(e),Math.floor(Math.random()*(e-t)+t)},Math.average=function(t){let e=0;return t.forEach((t=>{e+=parseFloat(t)})),e/t.length},Math.avg=function(...t){let e=0;return t.forEach((t=>{e+=parseFloat(t)})),e/t.length},Math.half=function(t){return t/2}},428:()=>{Object.isNullOrUndefined=function(t){return void 0===t||null==t},Object.getDataType=function(t){return String.isNullOrUndefined(t)?"null":"object"==typeof t?Array.isArray(t)?"array":"object":typeof t}},930:()=>{String.isNullOrUndefined=function(t){return void 0===t||null==t},String.isNullOrWhitespace=function(t){return!!String.isNullOrUndefined(t)||("string"==typeof t?t.trim().length<=0:t.toString().trim().length<=0)},String.joinIfNotNullOrWhitespace=function(t,...e){let n="";for(let a=0;a$1")},String.prototype.toTitleCase=function(){let t=this;return t=t.replace(/([A-Z]{1})/g," $1"),t=t.trim(),t=t.charAt(0).toUpperCase()+t.substr(1),t},String.prototype.getFilename=function(){return this.substring(this.lastIndexOf("/")+1)}},323:()=>{Window.goToTop=function(){Window.scrollTo(0,0)},Window.fragment={get:function(){if(!window.location.hash)return null;const t=window.location.hash.indexOf("?");return t<0?window.location.hash.substring(1):window.location.hash.substring(1,t)},getQuery:function(){if(!window.location.hash)return null;let t=window.location.hash;const e=t.indexOf("?");if(e<0)return null;t=hasQueryString.substring(e+1);const n=new URLSearchParams(t),a={};for(const[t,e]of n.entries())a[t]=e;return a},clear:function(){location.hash="",history.replaceState("","",location.pathname)}}}},e={};function n(a){var o=e[a];if(void 0!==o)return o.exports;var r=e[a]={exports:{}};return t[a](r,r.exports,n),r.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var a in e)n.o(e,a)&&!n.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var a={};return(()=>{"use strict";n.r(a),n(814),n(523),n(579),n(874),n(705),n(428),n(930),n(323)})(),a})(),t.exports=e()}},e={};function n(a){var o=e[a];if(void 0!==o)return o.exports;var r=e[a]={id:a,exports:{}};return t[a].call(r.exports,r,r.exports,n),r.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var a in e)n.o(e,a)&&!n.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.nc=void 0;var a={};return(()=>{"use strict";n.r(a),n.d(a,{GanttChart:()=>k,Project:()=>o,ProjectPlanner:()=>v}),n(707);const t=class{ID=null;Name="";Description="";Tag=null;StartDelay=0;Duration=1;PredecessorTaskID=null;IsCollated=!1;CollatedTaskID=null;ActuWorkHours=null;Progress=0;Resources=[];constructor(t){Object.assign(this,t)}},e=class extends t{Order=null;StartDate=null;FinishDate=null;CalcWorkHours=0;Level=0;Tasks=[];constructor(t){super(),Object.assign(this,t)}},o=class{constructor(t){const e=this,n=Object.assign(e.DefaultOptions,t);e.Debug=!1,e.Project=n,e.Tasks=[]}get StartDate(){return new Date(this.Project.StartDate)}get FinishDate(){let t=new Date(this.Project.StartDate);return this.ExportTasks().forEach((e=>{null!=e.FinishDate&&(t=Date.max(t,e.FinishDate))})),t}get Duration(){return Date.diffDays(this.StartDate,this.FinishDate)}get DefaultOptions(){return{Name:"",Description:"",StartDate:Date.today(),Tag:null,StartOfWeek:1,WorkHours:[0,7.5,7.5,7.5,7.5,7.5,0]}}AddTask(n){const a=this,o=new t(n),r=new e(o);if(null==r.PredecessorTaskID&&null==r.CollatedTaskID)a.Tasks.push(r);else if(null!=r.PredecessorTaskID){let t=a.FindTask(r.PredecessorTaskID);null!=t?t.Tasks.push(r):a.#t("Task not found ("+r.PredecessorTaskID+")")}else if(null!=r.CollatedTaskID){let t=a.FindTask(r.CollatedTaskID);null!=t?t.Tasks.push(r):a.#t("Task not found ("+r.CollatedTaskID+")")}else a.#t("Task not found ("+r.ID+")")}Clear(){this.Tasks=[]}ExportTasks(){let t=this.Tasks.copy().flatten("Tasks");for(var e=0;e Set StartDate from Predecessor"))}else if(null!=o.CollatedTaskID){const e=t.first("ID",o.CollatedTaskID);null!=e&&null!=e.StartDate&&(o.StartDate=Date.addDays(e.StartDate,o.StartDelay),n.#t("> Set StartDate from Group"))}else o.StartDate=Date.addDays(n.Project.StartDate,o.StartDelay),n.#t("> Set StartDate from Project");if(o.Tasks.length>0&&(n.#e(t,o.Tasks),n.#t("> Calc inner")),null!=o.StartDate)if(o.IsCollated){const t=o.Tasks.select("CollatedTaskID",o.ID);t.length<=0?(o.FinishDate=o.StartDate,o.Duration=0,n.#t("> Set FinishDate from Group (0)")):t.any("FinishDate",null)||(o.FinishDate=t.orderByDesc("FinishDate")[0].FinishDate,o.Duration=Date.diffDays(o.StartDate,o.FinishDate),n.#t("> Set FinishDate from Group"))}else o.FinishDate=Date.addDays(o.StartDate,o.Duration),n.#t("> Set FinishDate")}}#a(t){const e=this;if(Array.isEmpty(t.Tasks))return;t.Tasks.orderBy("StartDelay");const n=t.Tasks.notSelect("PredecessorTaskID",null);n.length>0&&(t.Tasks.removeRange(n),t.Tasks.addRange(n)),t.Tasks.forEach((t=>{e.#a(t)}))}};var r=n(72),i=n.n(r),s=n(825),l=n.n(s),h=n(659),c=n.n(h),u=n(56),d=n.n(u),p=n(540),g=n.n(p),f=n(113),C=n.n(f),D=n(25),y={};y.styleTagTransform=C(),y.setAttributes=d(),y.insert=c().bind(null,"head"),y.domAPI=l(),y.insertStyleElement=g(),i()(D.A,y),D.A&&D.A.locals&&D.A.locals;const v=class{constructor(t){const e=this;e.Container=t,e.Columns=[null,null,"Task Name","Duration","Start","Finish","Predecessor","Resource Names",null],e.Tasks=[],e.#o()}#o(){const t=this;t.Container.classList.contains("literyzjs-project")||t.Container.classList.add("literyzjs-project");let e="";e+="",e+=t.#r(),e+="",e+=t.#i(),e+="",e+="
",t.Container.innerHTML=e}Clear(){this.Load([])}Load(t){const e=this;e.Tasks=t,e.Container.classList.contains("literyzjs-project")||e.Container.classList.add("literyzjs-project");let n="";n+="",n+=e.#r(),n+="",t.forEach((t=>{n+=e.#s(t)})),n+="",n+="
",e.Container.innerHTML=n}#r(){let t="";return t+="",t+="",this.Columns.forEach((e=>{t+=""+(e??"")+""})),t+="",t+="",t}#i(){let t="";return t+="",t+="",t+="Loading...",t+="",t}#s(t){let e="";1==t.IsCollated?e+="":e+="",e+=""+t.Order+"",e+="",e+="";for(let n=0;n";return e+="",e+="",e+=""+t.Duration+" day"+(1==parseInt(t.Duration)?"":"s")+"",e+=""+new Date(t.StartDate).toLocaleDateString()+"",e+=""+new Date(t.FinishDate).toLocaleDateString()+"",e+=""+this.#l(t.PredecessorTaskID)+"",e+="",e+="",e+="",e}#l(t){if(null==t)return"";const e=this.Tasks.first("ID",t);return null==e?"":e.Order}},w=class{DayWidth=24;HeaderRow={Height:[20,20]};Row={Height:28,BackColour:"rgba(235, 235, 235, 0.3)",Task:{Height:14,BorderColour:"#555555",FillColour:"#D8EEDB"},OrphanTask:{Height:14,BorderColour:"#555555",FillColour:"#9CC2E6"},ChildTask:{Height:14,BorderColour:"#555555",FillColour:"#FFF5C1"},CollatedTask:{Height:6,BorderColour:"#555555",FillColour:"#555555"}};Column={SatColour:"rgba(233, 237, 239, 0.8)",SunColour:"rgba(233, 237, 239, 0.9)"};Line={Colour:"#555555",Width:1,ArrowSize:5};HotTrackLine={Colour:"#D04437",Width:1};DateFont="7pt sans-serif";DateForeColour="#636363";BorderWidth=1;BorderColour="#B8B8B8";BorderDashPattern=[1,1];EnableHotTracking=!0;MinimumRowCount=6;ShowDateLines=!0;ShowStartDayOfWeekLine=!0;ShowRowLines=!0;ShowRowStripes=!0},x=class{constructor(t){const e=this;e.el=t,e.Layer=[],e.BorderWidth=2,e.ScrollbarWidth=11,e.Padding={Top:0,Right:0,Bottom:0,Left:0},e.EnableDock=!0,e.#o()}#o(){this.ClearLayers()}get FlowContainer(){return this.el.getElementsByTagName("div")[0]}get Height(){return this.Layer.length<=0?0:Document.getHeight(this.Layer[0].el)}set Height(t){const e=this;null!=e.FlowContainer&&(e.FlowContainer.style.height=t+"px"),e.Layer.forEach(((e,n)=>{e.Height=t}))}get Width(){return this.Layer.length<=0?0:Document.getWidth(this.Layer[0].el)}set Width(t){const e=this;null!=e.FlowContainer&&(e.FlowContainer.style.width=t+"px"),e.Layer.forEach(((e,n)=>{e.Width=t}))}get Size(){return{W:this.Width,H:this.Height}}set Size(t){this.Width=t.W,this.Height=t.H}get ClientRectangle(){const t=this;return{X:t.Padding.Left,Y:t.Padding.Top,W:t.Width-(t.Padding.Left+t.Padding.Right),H:t.Height-(t.Padding.Top+t.Padding.Bottom)}}get Rectangle(){return{X:0,Y:0,W:this.Width,H:this.Height}}Clear(){this.Layer.forEach(((t,e)=>{t.Clear()}))}ClearLayers(){const t=this;null!=t.el&&(t.el.innerHTML="
"),t.Layer=[],t.Invalidate()}AddLayer(){const t=this;if(null==t.el)return;const e=t.el.getElementsByTagName("div");if(e.length<=0)return;Document.appendHtml(e[0],"canvas");const n=t.el.getElementsByTagName("canvas");return n[n.length-1]}Invalidate(){const t=this;t.EnableDock&&(t.FlowContainer.style.width="100%");const e=t.Layer.length<=0?0:Document.getWidth(t.Layer[0].el),n=t.Layer.length<=0?0:Document.getHeight(t.Layer[0].el);e>Document.getWidth(t.FlowContainer)+2*t.BorderWidth?(t.FlowContainer.classList.add("scroll-x"),t.FlowContainer.style.height=n+t.ScrollbarWidth+"px"):(t.FlowContainer.classList.remove("scroll-x"),t.FlowContainer.style.height=n+"px"),t.Layer.forEach((t=>{void 0!==t.Invalidate&&t.Invalidate()}));let a=0;t.Layer.forEach(((e,n)=>{if(n<=0)return;const o=Document.getHeight(t.Layer[n-1].el);a+=o,t.Layer[n].el.style.top="-"+a+"px"}))}},S=class{constructor(t){const e=this;e.el=t,e.BorderWidth=2,e.#o()}#o(){const t=this;null!=t.el&&(t.Clear(),t.Invalidate())}get CanvasContext(){return this.el.getContext("2d")}get Height(){return null==this.el?0:Document.getHeight(this.el)}set Height(t){const e=this;null!=e.el&&(e.el.style.height=t+"px"),null!=e.CanvasContext&&(e.CanvasContext.canvas.height=t)}get Width(){return null==this.el?0:Document.getWidth(this.el)}set Width(t){const e=this;null!=e.el&&(e.el.style.width=t+"px"),null!=e.CanvasContext&&(e.CanvasContext.canvas.width=t)}get Size(){return{W:this.Width,H:this.Height}}set Size(t){this.Width=t.W,this.Height=t.H}get Rectangle(){return{X:0,Y:0,W:this.Width,H:this.Height}}Clear(){const t=this;null!=t.CanvasContext&&t.CanvasContext.clearRect(0,0,t.CanvasContext.canvas.width,t.CanvasContext.canvas.height)}DrawArrowS(t,e,n){const a=this;if(null==a.CanvasContext)return;const o=Object.assign({LineWidth:1,LineDash:[],FillColour:null},n);t.X+=.5,t.Y+=.5,t.W-=o.LineWidth,t.H-=o.LineWidth,a.CanvasContext.beginPath(),a.CanvasContext.strokeStyle=e,a.CanvasContext.lineWidth=o.LineWidth,a.CanvasContext.setLineDash(o.LineDash),a.CanvasContext.moveTo(t.X,t.Y),a.CanvasContext.lineTo(t.X+t.W,t.Y),a.CanvasContext.lineTo(t.X+Math.half(t.W),t.Y+t.H),a.CanvasContext.closePath(),null!=o.FillColour&&(a.CanvasContext.fillStyle=o.FillColour,a.CanvasContext.fill()),a.CanvasContext.stroke()}DrawCircle(t,e,n,a,o){const r=this;if(null==r.CanvasContext)return;const i=Object.assign({LineWidth:1,LineDash:[],FillColour:null},o);let s={X:t+Math.half(n),Y:e+Math.half(n),W:Math.half(n),H:Math.half(n)};s.X+=.5,s.Y+=.5,s.W-=Math.half(i.LineWidth),s.H-=Math.half(i.LineWidth),r.CanvasContext.beginPath(),r.CanvasContext.strokeStyle=a,r.CanvasContext.lineWidth=i.LineWidth,r.CanvasContext.setLineDash(i.LineDash),r.CanvasContext.arc(s.X,s.Y,s.W,0,2*Math.PI,!1),r.CanvasContext.closePath(),null!=i.FillColour&&(r.CanvasContext.fillStyle=i.FillColour,r.CanvasContext.fill()),r.CanvasContext.stroke()}DrawDiamond(t,e,n){const a=this;if(null==a.CanvasContext)return;const o=Object.assign({LineWidth:1,LineDash:[],FillColour:null},n);t.X+=.5,t.Y+=.5,t.W-=o.LineWidth,t.H-=o.LineWidth,a.CanvasContext.beginPath(),a.CanvasContext.strokeStyle=e,a.CanvasContext.lineWidth=o.LineWidth,a.CanvasContext.setLineDash(o.LineDash),a.CanvasContext.moveTo(t.X+Math.half(t.W),t.Y),a.CanvasContext.lineTo(t.X+t.W,t.Y+Math.half(t.H)),a.CanvasContext.lineTo(t.X+Math.half(t.W),t.Y+t.H),a.CanvasContext.lineTo(t.X,t.Y+Math.half(t.H)),a.CanvasContext.closePath(),null!=o.FillColour&&(a.CanvasContext.fillStyle=o.FillColour,a.CanvasContext.fill()),a.CanvasContext.stroke()}DrawRectangle(t,e,n){const a=this;if(null==a.CanvasContext)return;const o=Object.assign({LineWidth:1,LineDash:[],FillColour:null},n);t.X+=.5,t.Y+=.5,t.W-=o.LineWidth,t.H-=o.LineWidth,a.CanvasContext.beginPath(),a.CanvasContext.strokeStyle=e,a.CanvasContext.lineWidth=o.LineWidth,a.CanvasContext.setLineDash(o.LineDash),a.CanvasContext.rect(t.X,t.Y,t.W,t.H),null!=o.FillColour&&(a.CanvasContext.fillStyle=o.FillColour,a.CanvasContext.fill()),a.CanvasContext.closePath(),a.CanvasContext.stroke()}DrawLine(t,e,n,a,o,r){const i=this;if(null==i.CanvasContext)return;const s=Object.assign({LineWidth:1,LineDash:[]},r);e-=.5,i.CanvasContext.beginPath(),i.CanvasContext.strokeStyle=o,i.CanvasContext.lineWidth=s.LineWidth,i.CanvasContext.setLineDash(s.LineDash),i.CanvasContext.moveTo(t,e),i.CanvasContext.lineTo(n,a),i.CanvasContext.stroke()}DrawLines(t,e,n){const a=this;if(null==a.CanvasContext)return;if(null==t)return;if(t.length<=0)return;const o=Object.assign({LineWidth:1,LineDash:[]},n);a.CanvasContext.beginPath(),a.CanvasContext.strokeStyle=e,a.CanvasContext.lineWidth=o.LineWidth,a.CanvasContext.setLineDash(o.LineDash),a.CanvasContext.moveTo(t[0].X,t[0].Y);for(let e=1;e1&&(t+=Math.half(e.Options.HotTrackLine.Width)),e.DrawVerticalLine(t,e.HeaderHeight,n,e.Options.HotTrackLine.Colour,{LineWidth:e.Options.HotTrackLine.Width})}},k=class{Options=null;CanvasContainer=null;#D=!1;Tasks=[];StartDate=null;Duration=30;StartOfWeek=1;constructor(t,e){const n=this;n.Options=Object.assign(new w,e),n.CanvasContainer=new x(t),n.#o()}#o(){const t=this,e=t.CanvasContainer.AddLayer(),n=new H(e);n.Options=t.Options,t.CanvasContainer.Layer.push(n);const a=t.CanvasContainer.AddLayer(),o=new T(a);o.Options=t.Options,t.CanvasContainer.Layer.push(o);const r=t.CanvasContainer.AddLayer(),i=new L(r);i.Options=t.Options,t.CanvasContainer.Layer.push(i),t.CanvasContainer.Invalidate(),Document.removeClass(t.CanvasContainer.FlowContainer,"border"),Document.addClass(t.CanvasContainer.FlowContainer,"gantt-chart")}get HeaderHeight(){return this.Options.HeaderRow.Height[0]+this.Options.HeaderRow.Height[1]}get Debug(){return this.#D}set Debug(t){this.#D=t,this.CanvasContainer.Layer.forEach((e=>{void 0!==e.Debug&&(e.Debug=t)}))}Clear(){const t=this;t.CanvasContainer.Clear(),t.StartDate=new Date,t.Duration=30,t.StartOfWeek=1,t.Tasks=[],t.CanvasContainer.Layer[0].Load(new Date,t.Duration,t.StartOfWeek,t.Tasks.length),t.CanvasContainer.Layer[1].Load(new Date,t.Tasks),t.CanvasContainer.Layer[2].Load(),t.Invalidate()}Invalidate(){const t=this;t.CanvasContainer.Clear();const e=(t.Duration+2)*t.Options.DayWidth,n=Math.max(t.Tasks.length,t.Options.MinimumRowCount)*t.Options.Row.Height+t.HeaderHeight;t.CanvasContainer.Size={W:e,H:n},t.CanvasContainer.Invalidate()}Load(t){const e=this;e.CanvasContainer.Clear(),null!=t&&(e.StartDate=new Date(t.StartDate),e.Duration=t.Duration,e.StartOfWeek=t.Project.StartOfWeek,e.Tasks=t.ExportTasks(),e.CanvasContainer.Layer[0].Load(new Date(t.StartDate),t.Duration,t.Project.StartOfWeek,e.Tasks.length),e.CanvasContainer.Layer[1].Load(new Date(t.StartDate),e.Tasks),e.CanvasContainer.Layer[2].Load(),e.Invalidate())}}})(),a})()));